467 lines
17 KiB
Lua
467 lines
17 KiB
Lua
local logger = require("debugplus.logger")
|
|
local util = require("debugplus.util")
|
|
local global = {}
|
|
|
|
local enhancements = nil
|
|
local seals = nil
|
|
local suits = nil
|
|
local ranks = nil
|
|
local saveStateKeys = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0"}
|
|
local log = logger.log
|
|
|
|
local function getSeals()
|
|
if seals then
|
|
return seals
|
|
end
|
|
seals = {"None"}
|
|
for i, v in pairs(G.P_SEALS) do
|
|
seals[v.order + 1] = i
|
|
end
|
|
|
|
return seals
|
|
end
|
|
|
|
local function getEnhancements()
|
|
if enhancements then
|
|
return enhancements
|
|
end
|
|
enhancements = {"c_base"}
|
|
for k, v in pairs(G.P_CENTER_POOLS["Enhanced"]) do
|
|
enhancements[v.order] = v.key
|
|
end
|
|
return enhancements
|
|
end
|
|
|
|
local function getSuits()
|
|
if suits then
|
|
return suits
|
|
end
|
|
suits = {}
|
|
for k, v in pairs(G.C.SUITS) do
|
|
table.insert(suits, k)
|
|
end
|
|
return suits
|
|
end
|
|
|
|
local function getRanks()
|
|
if ranks then
|
|
return ranks
|
|
end
|
|
ranks = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace"} -- No built in api for this, yippe
|
|
if SMODS and SMODS.Ranks then
|
|
for k, v in pairs(SMODS.Ranks) do
|
|
if not util.hasValue(ranks, v.key) then
|
|
table.insert(ranks, v.key)
|
|
end
|
|
end
|
|
end
|
|
return ranks
|
|
end
|
|
|
|
function global.handleKeys(controller, key, dt)
|
|
if controller.hovering.target and controller.hovering.target:is(Card) then
|
|
local _card = controller.hovering.target
|
|
if key == 'w' then
|
|
if _card.playing_card then
|
|
for i, v in ipairs(getEnhancements()) do
|
|
if _card.config.center == G.P_CENTERS[v] then
|
|
local _next = i + 1
|
|
if _next > #enhancements then
|
|
_card:set_ability(G.P_CENTERS[enhancements[1]], nil, true)
|
|
else
|
|
_card:set_ability(G.P_CENTERS[enhancements[_next]], nil, true)
|
|
end
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if key == "e" then
|
|
if _card.playing_card then
|
|
for i, v in ipairs(getSeals()) do
|
|
if (_card:get_seal(true) or "None") == v then
|
|
local _next = i + 1
|
|
if _next > #seals then
|
|
_next = 1
|
|
end
|
|
if _next == 1 then
|
|
_card:set_seal(nil, true)
|
|
else
|
|
_card:set_seal(seals[_next], true)
|
|
end
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if key == "a" then
|
|
if _card.ability.set == 'Joker' then
|
|
_card.ability.eternal = not _card.ability.eternal
|
|
end
|
|
end
|
|
if key == "s" then
|
|
if _card.ability.set == 'Joker' then
|
|
_card.ability.perishable = not _card.ability.perishable
|
|
_card.ability.perish_tally = G.GAME.perishable_rounds
|
|
end
|
|
end
|
|
if key == "d" then
|
|
if _card.ability.set == 'Joker' then
|
|
_card.ability.rental = not _card.ability.rental
|
|
_card:set_cost()
|
|
end
|
|
end
|
|
if key == "f" then
|
|
if _card.ability.set == 'Joker' or _card.playing_card or _card.area then
|
|
_card.ability.couponed = not _card.ability.couponed
|
|
_card:set_cost()
|
|
end
|
|
end
|
|
if key == "c" then
|
|
local _area
|
|
if _card.ability.set == 'Joker' then
|
|
_area = G.jokers
|
|
elseif _card.playing_card then
|
|
if G.hand and G.hand.config.card_count ~= 0 then
|
|
_area = G.hand
|
|
else
|
|
_area = G.deck
|
|
end
|
|
elseif _card.ability.consumeable then
|
|
_area = G.consumeables
|
|
end
|
|
if _area == nil then
|
|
return log("Error: Trying to dup card without an area")
|
|
end
|
|
local new_card = copy_card(_card, nil, nil, _card.playing_card)
|
|
new_card:add_to_deck()
|
|
if _card.playing_card then
|
|
table.insert(G.playing_cards, new_card)
|
|
end
|
|
_area:emplace(new_card)
|
|
|
|
end
|
|
if key == "r" then
|
|
if _card.ability.name == "Glass Card" then
|
|
_card.shattered = true
|
|
end
|
|
_card:remove()
|
|
if _card.playing_card then
|
|
for j = 1, #G.jokers.cards do
|
|
eval_card(G.jokers.cards[j], {
|
|
cardarea = G.jokers,
|
|
remove_playing_cards = true,
|
|
removed = {_card}
|
|
})
|
|
end
|
|
end
|
|
end
|
|
if key == 'up' then
|
|
if _card.playing_card then
|
|
for i, v in ipairs(getRanks()) do
|
|
if _card.base.value == v then
|
|
local _next = i + 1
|
|
if _next > #ranks then
|
|
local new_card
|
|
for i, c in pairs(G.P_CARDS) do
|
|
if c.value == ranks[1] and c.suit == _card.base.suit then
|
|
new_card = c
|
|
break
|
|
end
|
|
end
|
|
if not new_card then
|
|
log("Error: Could not find card with rank", ranks[1], "and suit", _card.base.suit)
|
|
return
|
|
end
|
|
_card:set_base(new_card)
|
|
G.GAME.blind:debuff_card(_card)
|
|
else
|
|
local new_card
|
|
for i, c in pairs(G.P_CARDS) do
|
|
if c.value == ranks[_next] and c.suit == _card.base.suit then
|
|
new_card = c
|
|
break
|
|
end
|
|
end
|
|
if not new_card then
|
|
log("Error: Could not find card with rank", ranks[_next], "and suit", _card.base.suit)
|
|
return
|
|
end
|
|
_card:set_base(new_card)
|
|
G.GAME.blind:debuff_card(_card)
|
|
end
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if key == 'down' then
|
|
if _card.playing_card then
|
|
for i, v in ipairs(getRanks()) do
|
|
if _card.base.value == v then
|
|
local _next = i - 1
|
|
if _next < 1 then
|
|
local new_card
|
|
for i, c in pairs(G.P_CARDS) do
|
|
if c.value == ranks[#ranks] and c.suit == _card.base.suit then
|
|
new_card = c
|
|
break
|
|
end
|
|
end
|
|
if not new_card then
|
|
log("Error: Could not find card with rank", ranks[#ranks], "and suit", _card.base.suit)
|
|
return
|
|
end
|
|
_card:set_base(new_card)
|
|
G.GAME.blind:debuff_card(_card)
|
|
else
|
|
local new_card
|
|
for i, c in pairs(G.P_CARDS) do
|
|
if c.value == ranks[_next] and c.suit == _card.base.suit then
|
|
new_card = c
|
|
break
|
|
end
|
|
end
|
|
if not new_card then
|
|
log("Error: Could not find card with rank", ranks[_next], "and suit", _card.base.suit)
|
|
return
|
|
end
|
|
_card:set_base(new_card)
|
|
G.GAME.blind:debuff_card(_card)
|
|
end
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if key == 'right' then
|
|
if _card.playing_card then
|
|
for i, v in ipairs(getSuits()) do
|
|
if _card.base.suit == v then
|
|
local _next = i + 1
|
|
if _next > #suits then
|
|
_card:change_suit(suits[1])
|
|
else
|
|
_card:change_suit(suits[_next])
|
|
end
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if key == 'left' then
|
|
if _card.playing_card then
|
|
for i, v in ipairs(getSuits()) do
|
|
if _card.base.suit == v then
|
|
local _next = i - 1
|
|
if _next < 1 then
|
|
_card:change_suit(suits[#suits])
|
|
else
|
|
_card:change_suit(suits[_next])
|
|
end
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local _element = controller.hovering.target
|
|
if _element and _element.config and _element.config.tag then
|
|
local _tag = _element.config.tag
|
|
if key == "2" then
|
|
G.P_TAGS[_tag.key].unlocked = true
|
|
G.P_TAGS[_tag.key].discovered = true
|
|
G.P_TAGS[_tag.key].alerted = true
|
|
_tag.hide_ability = false
|
|
set_discover_tallies()
|
|
G:save_progress()
|
|
_element:set_sprite_pos(_tag.pos)
|
|
end
|
|
if key == "3" or key == "c" then
|
|
if G.STAGE == G.STAGES.RUN then
|
|
add_tag(Tag(_tag.key, false, 'Big'))
|
|
end
|
|
end
|
|
if key == "r" then
|
|
_element.config.tag:remove()
|
|
end
|
|
end
|
|
if _element and _element.config and _element.config.blind then
|
|
local _blind = _element.config.blind
|
|
if key == "2" then
|
|
G.P_BLINDS[_blind.key].unlocked = true
|
|
G.P_BLINDS[_blind.key].discovered = true
|
|
G.P_BLINDS[_blind.key].alerted = true
|
|
if _element.set_sprite_pos then -- vanilla
|
|
_element:set_sprite_pos(_blind.pos)
|
|
else -- SMODS
|
|
_element.children.center:set_sprite_pos(_blind.pos)
|
|
end
|
|
set_discover_tallies()
|
|
G:save_progress()
|
|
end
|
|
if key == "3" then
|
|
if G.STATE == G.STATES.BLIND_SELECT then
|
|
local par = G.blind_select_opts.boss.parent
|
|
G.GAME.round_resets.blind_choices.Boss = _blind.key
|
|
|
|
G.blind_select_opts.boss:remove()
|
|
G.blind_select_opts.boss = UIBox {
|
|
T = {par.T.x, 0, 0, 0},
|
|
definition = {
|
|
n = G.UIT.ROOT,
|
|
config = {
|
|
align = "cm",
|
|
colour = G.C.CLEAR
|
|
},
|
|
nodes = {UIBox_dyn_container({create_UIBox_blind_choice('Boss')}, false,
|
|
get_blind_main_colour('Boss'), mix_colours(G.C.BLACK, get_blind_main_colour('Boss'), 0.8))}
|
|
},
|
|
config = {
|
|
align = "bmi",
|
|
offset = {
|
|
x = 0,
|
|
y = G.ROOM.T.y + 9
|
|
},
|
|
major = par,
|
|
xy_bond = 'Weak'
|
|
}
|
|
}
|
|
par.config.object = G.blind_select_opts.boss
|
|
par.config.object:recalculate()
|
|
G.blind_select_opts.boss.parent = par
|
|
G.blind_select_opts.boss.alignment.offset.y = 0
|
|
|
|
for i = 1, #G.GAME.tags do
|
|
if G.GAME.tags[i]:apply_to_run({
|
|
type = 'new_blind_choice'
|
|
}) then
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if key == "1" or key == "2" then -- Reload any tooltips when unlocking/discovering stuff
|
|
if _element.stop_hover and _element.hover then
|
|
_element:stop_hover()
|
|
_element:hover()
|
|
end
|
|
end
|
|
|
|
if key == "m" then
|
|
G.FUNCS.change_pixel_smoothing({
|
|
to_key = G.SETTINGS.GRAPHICS.texture_scaling
|
|
})
|
|
log("Reloaded Atlases")
|
|
end
|
|
|
|
for i, v in ipairs(saveStateKeys) do
|
|
if key == v and love.keyboard.isDown("z") then
|
|
if G.STAGE == G.STAGES.RUN then
|
|
if not (G.STATE == G.STATES.TAROT_PACK or G.STATE == G.STATES.PLANET_PACK or G.STATE ==
|
|
G.STATES.SPECTRAL_PACK or G.STATE == G.STATES.STANDARD_PACK or G.STATE == G.STATES.BUFFOON_PACK or
|
|
G.STATE == G.STATES.SMODS_BOOSTER_OPENED) then
|
|
save_run()
|
|
end
|
|
compress_and_save(G.SETTINGS.profile .. '/' .. 'debugsave' .. v .. '.jkr', G.ARGS.save_run)
|
|
log("Saved to slot", v)
|
|
end
|
|
end
|
|
if key == v and love.keyboard.isDown("x") then
|
|
G:delete_run()
|
|
G.SAVED_GAME = get_compressed(G.SETTINGS.profile .. '/' .. 'debugsave' .. v .. '.jkr')
|
|
if G.SAVED_GAME ~= nil then
|
|
G.SAVED_GAME = STR_UNPACK(G.SAVED_GAME)
|
|
end
|
|
G:start_run({
|
|
savetext = G.SAVED_GAME
|
|
})
|
|
log("Loaded slot", v)
|
|
end
|
|
end
|
|
end
|
|
|
|
function global.registerButtons()
|
|
G.FUNCS.DT_win_blind = function()
|
|
if G.STATE ~= G.STATES.SELECTING_HAND then
|
|
return
|
|
end
|
|
G.GAME.chips = G.GAME.blind.chips
|
|
G.STATE = G.STATES.HAND_PLAYED
|
|
G.STATE_COMPLETE = true
|
|
end_round()
|
|
end
|
|
G.FUNCS.DT_double_tag = function()
|
|
if G.STAGE == G.STAGES.RUN then
|
|
add_tag(Tag('tag_double', false, 'Big'))
|
|
end
|
|
end
|
|
end
|
|
|
|
function global.togglePerfUI()
|
|
if G.F_ENABLE_PERF_OVERLAY == G.SETTINGS.perf_mode then -- first time run
|
|
G.SETTINGS.perf_mode = true
|
|
end
|
|
G.F_ENABLE_PERF_OVERLAY = G.SETTINGS.perf_mode
|
|
if G.F_ENABLE_PERF_OVERLAY then
|
|
if not silent then
|
|
log("Enabled profiler overlay. Press 'p' again to disable it.")
|
|
end
|
|
else
|
|
if not silent then
|
|
log("Disabled profiler overlay.")
|
|
end
|
|
end
|
|
end
|
|
|
|
function global.profileMessage()
|
|
if G.prof then
|
|
log("Enabled performance profiler. Press 'v' again to disable it.")
|
|
else
|
|
log("Disabled performance profiler. Check console for results.")
|
|
end
|
|
end
|
|
|
|
function global.handleSpawn(controller, _card)
|
|
if _card.ability.set == 'Voucher' and G.shop_vouchers then
|
|
local center = _card.config.center
|
|
G.shop_vouchers.config.card_limit = G.shop_vouchers.config.card_limit + 1
|
|
local card = Card(G.shop_vouchers.T.x + G.shop_vouchers.T.w / 2, G.shop_vouchers.T.y, G.CARD_W, G.CARD_H,
|
|
G.P_CARDS.empty, center, {
|
|
bypass_discovery_center = true,
|
|
bypass_discovery_ui = true
|
|
})
|
|
create_shop_card_ui(card, 'Voucher', G.shop_vouchers)
|
|
G.shop_vouchers:emplace(card)
|
|
|
|
end
|
|
if _card.ability.set == 'Booster' and G.shop_booster then
|
|
local center = _card.config.center
|
|
G.shop_booster.config.card_limit = G.shop_booster.config.card_limit + 1
|
|
local card = Card(G.shop_booster.T.x + G.shop_booster.T.w / 2, G.shop_booster.T.y, G.CARD_W * 1.27,
|
|
G.CARD_H * 1.27, G.P_CARDS.empty, center, {
|
|
bypass_discovery_center = true,
|
|
bypass_discovery_ui = true
|
|
})
|
|
|
|
create_shop_card_ui(card, 'Booster', G.shop_booster)
|
|
card.ability.booster_pos = G.shop_booster.config.card_limit
|
|
G.shop_booster:emplace(card)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
function global.isOkayToHandleDebugForKey(key)
|
|
if not require("debugplus.config").getValue("ctrlKeybinds") then return true end
|
|
for k,v in ipairs({"tab", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"}) do -- Keys that ignore the ctrl option (tab menu + collection keys + save state keys)
|
|
if key == v then return true end
|
|
end
|
|
if util.isCtrlDown() then return true end
|
|
end
|
|
|
|
return global
|