Jane/src/main.lua

325 lines
8.4 KiB
Lua

Jane = {
config = {
wee_sizemod = 1.25,
texture_pack = "default",
bans = {"j_cry_crustulum", "c_cry_hammerspace"},
},
}
Jane.misprintize = (Cryptid or {}).misprintize
Jane.misprintize_tbl = (Cryptid or {}).misprintize_tbl
Jane.misprinitze_val = (Cryptid or {}).misprintize_val
Jane.rarity_ids = Cryptid and {1, 2, 3, "cry_epic", 4, "cry_exotic", "jane_junk"} or {1, 2, 3, 4, "jane_junk"}
Jane.rarity_names = Cryptid and {"Common", "Uncommon", "Rare", "Epic", "Legendary", "Exotic", "Junk"} or
{"Common", "Uncommon", "Rare", "Legendary", "Junk"}
if not Jane.misprintize then
assert(SMODS.load_file("src/misprintize.lua"))()
end
function Jane.can_use()
return not (((G.play and #G.play.cards > 0) or
(G.CONTROLLER.locked) or
(G.GAME.STOP_USE and G.GAME.STOP_USE > 0)) and
G.STATE ~= G.STATES.HAND_PLAYED and
G.STATE ~= G.STATES.DRAW_TO_HAND and
G.STATE ~= G.STATES.PLAY_TAROT)
end
function Jane.card_status_text(
card,
text,
xoffset,
yoffset,
colour,
size,
delay,
juice,
jiggle,
align,
sound,
volume,
pitch,
trigger,
f
)
if (delay or 0) <= 0 then
if type(f) == "function" then
f(card)
end
attention_text({
text = text,
scale = size or 1,
hold = 0.7,
backdrop_colour = colour or (G.C.FILTER),
align = align or "bm",
major = card,
offset = {x = xoffset or 0, y = yoffset or (-0.05 * G.CARD_H)},
})
if sound then
play_sound(sound, pitch or (0.9 + (0.2 * math.random())), volume or 1)
end
if juice then
if type(juice) == "table" then
card:juice_up(juice[1], juice[2])
elseif type(juice) == "number" and juice ~= 0 then
card:juice_up(juice, juice / 6)
end
end
if jiggle then
G.ROOM.jiggle = G.ROOM.jiggle + jiggle
end
else
Jane.q(
function()
if f and type(f) == "function" then
f(card)
end
attention_text({
text = text,
scale = size or 1,
hold = 0.7 + (delay or 0),
backdrop_colour = colour or (G.C.FILTER),
align = align or "bm",
major = card,
offset = {x = xoffset or 0, y = yoffset or (-0.05 * G.CARD_H)},
})
if sound then
play_sound(sound, pitch or (0.9 + (0.2 * math.random())), volume or 1)
end
if juice then
if type(juice) == "table" then
card:juice_up(juice[1], juice[2])
elseif type(juice) == "number" and juice ~= 0 then
card:juice_up(juice, juice / 6)
end
end
if jiggle then
G.ROOM.jiggle = G.ROOM.jiggle + jiggle
end
end,
delay,
nil,
trigger
)
end
end
function Jane.empowered()
if Cryptid then
add_tag(Tag("tag_cry_empowered"))
return
end
local card = create_card("Spectral", G.consumeables, nil, nil, nil, nil, "c_soul", "acceleration_soul")
card:set_edition({negative = true})
card:add_to_deck()
G.consumeables:emplace(card)
end
function Jane.get_chipmult_sum(chips, mult)
chips = chips or 0
mult = mult or 0
local break_infinity = ((Talisman or {}).config_file or {}).break_infinity
local big = (break_infinity == "" or break_infinity == nil) and function(x) return x end or to_big
local op = Jane.get_operator()
if op >= 3 then
return big(chips) ^ big(mult)
elseif op == 2 then
return big(chips) * big(mult)
end
return big(chips) + big(mult)
end
function Jane.get_operator()
if not G.GAME then
return 0
end
G.GAME.operator = G.GAME.operator or 2
return math.max(math.min(G.GAME.operator, 3), 1)
end
function Jane.hidden(card)
return G.GAME and not G.GAME.obsidian and
(type(card) == "table" and (card.name == "Black Hole" or card.name == "The Soul") or card.hidden)
end
function Jane.is_end_of_ante(context, card)
return not context.individual and not
context.repetition and not
(card or {}).debuff and
context.end_of_round and not
context.blueprint and
G.GAME.blind.boss and not
(G.GAME.blind.config and G.GAME.blind.config.bonus)
end
function Jane.play_sound(sound, per, vol)
Jane.q(function()
play_sound(sound, per, vol)
end)
end
function Jane.resize(card, mod, force_save)
if force_save or not card.origsize then
card.origsize = {w = card.T.w, h = card.T.h}
end
card:hard_set_T(card.T.x, card.T.y, card.T.w * mod, card.T.h * mod)
remove_all(card.children)
card.children = {}
card.children.shadow = Moveable(0, 0, 0, 0)
card:set_sprites(card.config.center, card.base.id and card.config.card)
if card.area and
((G.shop_jokers and card.area == G.shop_jokers) or
(G.shop_booster and card.area == G.shop_booster) or
(G.shop_vouchers and card.area == G.shop_vouchers)) then
create_shop_card_ui(card)
end
end
function Jane.q(func, delay, timer, trigger, blockable, blocking)
G.E_MANAGER:add_event(Event({
delay = delay,
timer = timer,
trigger = (delay and not trigger) and "after" or trigger,
blocking = blocking,
blockable = blockable,
func = function(...)
local ret = func(...)
return ret == nil and true or ret
end,
}))
end
function Card:gc()
return (self.config or {}).center or {}
end
function Card:norank()
return self.ability.name == "Stone Card" or self.config.center.no_rank
end
function Card:nosuit()
return self.ability.name == "Stone Card" or self.config.center.no_suit
end
local orig_menu = Game.main_menu
function Game:main_menu(change_context)
Jane.sinister = nil
orig_menu(self, change_context)
end
local orig_update = Game.update
function Game:update(dt)
local function delete_hardbans()
if not Jane.config.disable_bans then
for _, v in pairs(Jane.config.bans) do
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.floor(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
SMODS.Atlas {
px = 34,
py = 34,
key = "modicon",
path = "almanac_avatar.png",
}
SMODS.Atlas {
px = 71,
py = 95,
key = "janeacc",
path = Jane.config.texture_pack .. "/c_jane_acc.png",
}
for _, v in ipairs({
"back",
"blind",
"booster",
"edition",
"joker",
"slugcat",
"spectral",
"tarot",
"token",
"voucher",
}) do
assert(SMODS.load_file("src/" .. v .. ".lua"))()
end