340 lines
9.8 KiB
Lua
340 lines
9.8 KiB
Lua
--- STEAMODDED HEADER
|
|
--- MOD_NAME: Cryptid
|
|
--- MOD_ID: Cryptid
|
|
--- PREFIX: cry
|
|
--- MOD_AUTHOR: [MathIsFun_, Cryptid and Balatro Discords]
|
|
--- MOD_DESCRIPTION: Adds unbalanced ideas to Balatro.
|
|
--- BADGE_COLOUR: 708b91
|
|
--- DEPENDENCIES: [Talisman>=2.0.9, Steamodded>=1.0.0~ALPHA-1312c]
|
|
--- VERSION: 0.5.4
|
|
--- PRIORITY: 2147483647
|
|
|
|
----------------------------------------------
|
|
------------MOD CODE -------------------------
|
|
|
|
-- Welcome to the Cryptid source code!
|
|
-- This is the main file for the mod, where everything is loaded and initialized.
|
|
-- If you're looking for a specific feature, browse the Items folder to see how it is implemented.
|
|
-- If you're looking for a specific function, check the lib folder to see if it is there.
|
|
|
|
-- Initialize some important variables
|
|
if not Cryptid then
|
|
Cryptid = {}
|
|
end
|
|
local mod_path = "" .. SMODS.current_mod.path -- this path changes when each mod is loaded, but the local variable will retain Cryptid's path
|
|
Cryptid.path = mod_path
|
|
Cryptid_config = SMODS.current_mod.config
|
|
-- This will save the current state even when settings are modified
|
|
Cryptid.enabled = copy_table(Cryptid_config)
|
|
|
|
-- Enable optional features
|
|
SMODS.current_mod.optional_features = {
|
|
retrigger_joker = true,
|
|
post_trigger = true,
|
|
cardareas = {
|
|
unscored = true,
|
|
},
|
|
-- Here are some other ones Steamodded has
|
|
-- Cryptid doesn't use them YET, but these should be uncommented if Cryptid uses them
|
|
--[[
|
|
quantum_enhancements = true,
|
|
-- These ones add new card areas that Steamodded will calculate through
|
|
-- Might already be useful for sticker calc
|
|
cardareas = {
|
|
deck = true,
|
|
discard = true,
|
|
}
|
|
]]
|
|
}
|
|
|
|
--Load Library Files
|
|
local files = NFS.getDirectoryItems(mod_path .. "lib")
|
|
for _, file in ipairs(files) do
|
|
print("[CRYPTID] Loading library file " .. file)
|
|
local f, err = SMODS.load_file("lib/" .. file)
|
|
if err then
|
|
error(err) --Steamodded actually does a really good job of displaying this info! So we don't need to do anything else.
|
|
end
|
|
f()
|
|
end
|
|
local function process_items(f, mod)
|
|
local ret = f()
|
|
if not ret.disabled then
|
|
if ret.init then
|
|
ret:init()
|
|
end
|
|
if ret.items then
|
|
for _, item in ipairs(ret.items) do
|
|
if mod then
|
|
-- make the mod use its own prefixes
|
|
item.prefix_config = {
|
|
key = false,
|
|
atlas = false,
|
|
}
|
|
if item.key then
|
|
item.key = mod.prefix .. "_" .. item.key
|
|
end
|
|
if item.atlas then
|
|
item.atlas = mod.prefix .. "_" .. item.atlas
|
|
end
|
|
-- this will also display the mod's own badge
|
|
if not item.dependencies then
|
|
item.dependencies = {}
|
|
end
|
|
item.dependencies[#item.dependencies + 1] = mod.id
|
|
end
|
|
if item.init then
|
|
item:init()
|
|
end
|
|
--[[if not item.gameset_config then
|
|
-- by default, disable on modest
|
|
item.gameset_config = {
|
|
modest = {disabled = true},
|
|
}
|
|
end--]]
|
|
if not Cryptid.object_registry[item.object_type] then
|
|
Cryptid.object_registry[item.object_type] = {}
|
|
end
|
|
if not item.take_ownership then
|
|
if not item.order then
|
|
item.order = 0
|
|
end
|
|
if ret.order then
|
|
item.order = item.order + ret.order
|
|
end
|
|
if mod then
|
|
item.order = item.order + 1e9
|
|
end
|
|
item.cry_order = item.order
|
|
if not Cryptid.object_buffer[item.object_type] then
|
|
Cryptid.object_buffer[item.object_type] = {}
|
|
end
|
|
Cryptid.object_buffer[item.object_type][#Cryptid.object_buffer[item.object_type] + 1] = item
|
|
else
|
|
item.key = SMODS[item.object_type].class_prefix .. "_" .. item.key
|
|
SMODS[item.object_type].obj_table[item.key].mod = SMODS.Mods.Cryptid
|
|
for k, v in pairs(item) do
|
|
if k ~= "key" then
|
|
SMODS[item.object_type].obj_table[item.key][k] = v
|
|
end
|
|
end
|
|
end
|
|
Cryptid.object_registry[item.object_type][item.key] = item
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
Cryptid.object_registry = {}
|
|
Cryptid.object_buffer = {}
|
|
local files = NFS.getDirectoryItems(mod_path .. "items")
|
|
for _, file in ipairs(files) do
|
|
print("[CRYPTID] Loading file " .. file)
|
|
local f, err = SMODS.load_file("items/" .. file)
|
|
if err then
|
|
error(err) --Steamodded actually does a really good job of displaying this info! So we don't need to do anything else.
|
|
end
|
|
process_items(f)
|
|
end
|
|
|
|
-- Check for files in other mods
|
|
-- either in [Mod]/Cryptid.lua or [Mod]/Cryptid/*.lua
|
|
for _, mod in pairs(SMODS.Mods) do
|
|
-- Note: Crashes with lone lua files
|
|
if mod.path and mod.id ~= "Cryptid" then
|
|
local path = mod.path
|
|
local files = NFS.getDirectoryItems(path)
|
|
for _, file in ipairs(files) do
|
|
if file == "Cryptid.lua" then
|
|
print("[CRYPTID] Loading Cryptid.lua from " .. mod.id)
|
|
local f, err = SMODS.load_file("Cryptid.lua", mod.id)
|
|
if err then
|
|
error(err) --Steamodded actually does a really good job of displaying this info! So we don't need to do anything else.
|
|
end
|
|
process_items(f, mod)
|
|
end
|
|
if file == "Cryptid" then
|
|
local files = NFS.getDirectoryItems(path .. "Cryptid")
|
|
for _, file in ipairs(files) do
|
|
print("[CRYPTID] Loading file " .. file .. " from " .. mod.id)
|
|
local f, err = SMODS.load_file("Cryptid/" .. file, mod.id)
|
|
if err then
|
|
error(err) --Steamodded actually does a really good job of displaying this info! So we don't need to do anything else.
|
|
end
|
|
process_items(f, mod)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Register all items
|
|
for set, objs in pairs(Cryptid.object_buffer) do
|
|
table.sort(objs, function(a, b)
|
|
return a.order < b.order
|
|
end)
|
|
for i = 1, #objs do
|
|
if objs[i].post_process and type(objs[i].post_process) == "function" then
|
|
objs[i]:post_process()
|
|
end
|
|
Cryptid.post_process(objs[i])
|
|
SMODS[set](objs[i])
|
|
end
|
|
end
|
|
local inj = SMODS.injectItems
|
|
function SMODS.injectItems(...)
|
|
inj(...)
|
|
cry_update_obj_registry()
|
|
for _, t in ipairs({
|
|
G.P_CENTERS,
|
|
G.P_BLINDS,
|
|
G.P_TAGS,
|
|
G.P_SEALS,
|
|
}) do
|
|
for k, v in pairs(t) do
|
|
if v and G.PROFILES[G.SETTINGS.profile].all_unlocked then
|
|
v.alerted = true
|
|
v.discovered = true
|
|
v.unlocked = true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local cryptidConfigTab = function()
|
|
cry_nodes = {
|
|
{
|
|
n = G.UIT.R,
|
|
config = { align = "cm" },
|
|
nodes = {
|
|
{
|
|
n = G.UIT.O,
|
|
config = {
|
|
object = DynaText({
|
|
string = localize("cry_set_enable_features"),
|
|
colours = { G.C.WHITE },
|
|
shadow = true,
|
|
scale = 0.4,
|
|
}),
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
left_settings = { n = G.UIT.C, config = { align = "tl", padding = 0.05 }, nodes = {} }
|
|
right_settings = { n = G.UIT.C, config = { align = "tl", padding = 0.05 }, nodes = {} }
|
|
config = { n = G.UIT.R, config = { align = "tm", padding = 0 }, nodes = { left_settings, right_settings } }
|
|
cry_nodes[#cry_nodes + 1] = config
|
|
cry_nodes[#cry_nodes + 1] = UIBox_button({
|
|
button = "your_collection_content_sets",
|
|
label = { localize("b_content_sets") },
|
|
count = modsCollectionTally(G.P_CENTER_POOLS["Content Set"]),
|
|
minw = 5,
|
|
minh = 1.7,
|
|
scale = 0.6,
|
|
id = "your_collection_jokers",
|
|
})
|
|
--Add warning notifications later for family mode
|
|
cry_nodes[#cry_nodes + 1] = create_toggle({
|
|
label = localize("cry_family"),
|
|
active_colour = G.C.MONEY,
|
|
ref_table = Cryptid_config,
|
|
ref_value = "family_mode",
|
|
callback = reload_cryptid_localization,
|
|
})
|
|
cry_nodes[#cry_nodes + 1] = create_toggle({
|
|
label = localize("cry_experimental"),
|
|
active_colour = G.C.MONEY,
|
|
ref_table = Cryptid_config,
|
|
ref_value = "experimental",
|
|
})
|
|
cry_nodes[#cry_nodes + 1] = UIBox_button({
|
|
button = "reset_gameset_config",
|
|
label = { localize("b_reset_gameset_" .. (G.PROFILES[G.SETTINGS.profile].cry_gameset or "mainline")) },
|
|
minw = 5,
|
|
})
|
|
return {
|
|
n = G.UIT.ROOT,
|
|
config = {
|
|
emboss = 0.05,
|
|
minh = 6,
|
|
r = 0.1,
|
|
minw = 10,
|
|
align = "cm",
|
|
padding = 0.2,
|
|
colour = G.C.BLACK,
|
|
},
|
|
nodes = cry_nodes,
|
|
}
|
|
end
|
|
|
|
local cryptidTabs = function()
|
|
return {
|
|
{
|
|
label = localize("cry_set_music"),
|
|
tab_definition_function = function()
|
|
-- TODO: Add a button here to reset all Cryptid achievements.
|
|
-- If you want to do that now, add this to the SMODS.InjectItems in Steamodded/loader/loader.lua
|
|
--[[fetch_achievements()
|
|
for k, v in pairs(SMODS.Achievements) do
|
|
G.SETTINGS.ACHIEVEMENTS_EARNED[k] = nil
|
|
G.ACHIEVEMENTS[k].earned = nil
|
|
end
|
|
fetch_achievements()]]
|
|
cry_nodes = {
|
|
{
|
|
n = G.UIT.R,
|
|
config = { align = "cm" },
|
|
nodes = {
|
|
--{n=G.UIT.O, config={object = DynaText({string = "", colours = {G.C.WHITE}, shadow = true, scale = 0.4})}},
|
|
},
|
|
},
|
|
}
|
|
settings = { n = G.UIT.C, config = { align = "tl", padding = 0.05 }, nodes = {} }
|
|
settings.nodes[#settings.nodes + 1] = create_toggle({
|
|
label = localize("cry_mus_jimball"),
|
|
ref_table = Cryptid_config.Cryptid,
|
|
ref_value = "jimball_music",
|
|
})
|
|
settings.nodes[#settings.nodes + 1] = create_toggle({
|
|
label = localize("cry_mus_code"),
|
|
ref_table = Cryptid_config.Cryptid,
|
|
ref_value = "code_music",
|
|
})
|
|
settings.nodes[#settings.nodes + 1] = create_toggle({
|
|
label = localize("cry_mus_exotic"),
|
|
ref_table = Cryptid_config.Cryptid,
|
|
ref_value = "exotic_music",
|
|
})
|
|
settings.nodes[#settings.nodes + 1] = create_toggle({
|
|
label = localize("cry_mus_high_score"),
|
|
ref_table = Cryptid_config.Cryptid,
|
|
ref_value = "big_music",
|
|
})
|
|
settings.nodes[#settings.nodes + 1] = create_toggle({
|
|
label = localize("cry_mus_alt_bg"),
|
|
ref_table = Cryptid_config.Cryptid,
|
|
ref_value = "alt_bg_music",
|
|
})
|
|
config = { n = G.UIT.R, config = { align = "tm", padding = 0 }, nodes = { settings } }
|
|
cry_nodes[#cry_nodes + 1] = config
|
|
return {
|
|
n = G.UIT.ROOT,
|
|
config = {
|
|
emboss = 0.05,
|
|
minh = 6,
|
|
r = 0.1,
|
|
minw = 10,
|
|
align = "cm",
|
|
padding = 0.2,
|
|
colour = G.C.BLACK,
|
|
},
|
|
nodes = cry_nodes,
|
|
}
|
|
end,
|
|
},
|
|
}
|
|
end
|
|
SMODS.current_mod.extra_tabs = cryptidTabs
|
|
SMODS.current_mod.config_tab = cryptidConfigTab
|