balatro-mods/smods-main/lovely/deck_skins.toml

219 lines
8.5 KiB
TOML

[manifest]
version = "1.0.0"
dump_lua = true
priority = -10
#========================================================#
# Choose any rank for custom deck and use provided atlas #
#========================================================#
[[patches]]
[patches.regex]
target = "functions/misc_functions.lua"
pattern = '''if _front and _front.suit and \(_front.value == 'Jack' or _front.value == 'Queen' or _front.value == 'King'\) then([\s\S]*?)end([\s\S]*?)end([\s\S]*?)end'''
position = "at"
payload = '''
if _front and _front.suit and G.SETTINGS.CUSTOM_DECK and G.SETTINGS.CUSTOM_DECK.Collabs then
local collab = G.SETTINGS.CUSTOM_DECK.Collabs[_front.suit]
if collab then
local deckSkin = SMODS.DeckSkins[collab]
if deckSkin then
if deckSkin.outdated then
local hasRank = false
for i = 1, #deckSkin.ranks do
if deckSkin.ranks[i] == _front.value then hasRank = true break end
end
if hasRank then
local atlas = G.ASSET_ATLAS[G.SETTINGS.colour_palettes[_front.suit] == 'hc' and deckSkin.hc_atlas or deckSkin.lc_atlas]
if atlas then
if deckSkin.pos_style == 'collab' then
return atlas, G.COLLABS.pos[_front.value]
elseif deckSkin.pos_style == 'suit' then
return atlas, { x = _front.pos.x, y = 0}
elseif deckSkin.pos_style == 'deck' then
return atlas, _front.pos
elseif deckSkin.pos_style == 'ranks' or nil then
for i, rank in ipairs(deckSkin.ranks) do
if rank == _front.value then
return atlas, { x = i - 1, y = 0}
end
end
end
end
end
return G.ASSET_ATLAS[G.SETTINGS.colour_palettes[_front.suit] == 'hc' and _front.hc_atlas or _front.lc_atlas or {}] or G.ASSET_ATLAS[_front.atlas] or G.ASSET_ATLAS["cards_"..(G.SETTINGS.colour_palettes[_front.suit] == 'hc' and 2 or 1)], _front.pos
else
local palette = deckSkin.palette_map and deckSkin.palette_map[G.SETTINGS.colour_palettes[_front.suit] or ''] or (deckSkin.palettes or {})[1]
local hasRank = false
for i = 1, #palette.ranks do
if palette.ranks[i] == _front.value then hasRank = true break end
end
if hasRank then
local atlas = G.ASSET_ATLAS[palette.atlas]
if type(palette.pos_style) == "table" then
if palette.pos_style[_front.value] then
if palette.pos_style[_front.value].atlas then
atlas = G.ASSET_ATLAS[palette.pos_style[_front.value].atlas]
end
if palette.pos_style[_front.value].pos then
return atlas, palette.pos_style[_front.value].pos
end
elseif palette.pos_style.fallback_style then
if palette.pos_style.fallback_style == 'collab' then
return atlas, G.COLLABS.pos[_front.value]
elseif palette.pos_style.fallback_style == 'suit' then
return atlas, { x = _front.pos.x, y = 0}
elseif palette.pos_style.fallback_style == 'deck' then
return atlas, _front.pos
end
end
elseif palette.pos_style == 'collab' then
return atlas, G.COLLABS.pos[_front.value]
elseif palette.pos_style == 'suit' then
return atlas, { x = _front.pos.x, y = 0}
elseif palette.pos_style == 'deck' then
return atlas, _front.pos
elseif palette.pos_style == 'ranks' or nil then
for i, rank in ipairs(palette.ranks) do
if rank == _front.value then
return atlas, { x = i - 1, y = 0}
end
end
end
end
return G.ASSET_ATLAS[palette.hc_default and _front.hc_atlas or _front.lc_atlas or {}] or G.ASSET_ATLAS[_front.atlas] or G.ASSET_ATLAS["cards_"..(palette.hc_default and 2 or 1)], _front.pos
end
end
end
end
'''
[[patches]]
[patches.pattern]
target = "functions/UI_definitions.lua"
pattern = "{n=G.UIT.O, config={object = face_cards}}"
position = "at"
payload = "{n=G.UIT.O, config={object = G.cdds_cards}}"
match_indent = true
overwrite = false
[[patches]]
[patches.pattern]
target = "functions/UI_definitions.lua"
pattern = "table.insert(t, create_toggle({label = localize('b_high_contrast_cards'), ref_table = G.SETTINGS, ref_value = 'colourblind_option', callback = G.FUNCS.refresh_contrast_mode}))"
position = "at"
payload = '''
local deckskin_key = G.COLLABS.options[_suit][current_option]
local palette_loc_options = SMODS.DeckSkin.get_palette_loc_options(deckskin_key, _suit)
local selected_palette = 1
for i, v in ipairs(G.COLLABS.colour_palettes[deckskin_key]) do
if G.SETTINGS.colour_palettes[_suit] == v then
selected_palette = i
end
end
table.insert(t,
{n=G.UIT.R, config={align = "cm", id = 'palette_selector'}, nodes={
create_option_cycle({options = palette_loc_options, w = 5.5, cycle_shoulders = false, curr_suit = _suit, curr_skin = deckskin_key, opt_callback = 'change_colour_palette', current_option = selected_palette, colour = G.C.ORANGE, focus_args = {snap_to = true, nav = 'wide'}}),
}}
)
'''
match_indent = true
overwrite = false
#=======================#
# Extend custom deck ui #
#=======================#
[[patches]]
[patches.regex]
target = "functions/UI_definitions.lua"
pattern = '''local face_cards = CardArea\(([\s\S]*?)\)'''
position = "at"
payload = '''
local rankCount = 0
local lookup = {}
for i, s in ipairs(SMODS.Suit:obj_list(true)) do
local options = G.COLLABS.options[s.key]
for i = 1, #options do
local skin = SMODS.DeckSkins[options[i]]
if skin.palettes and not (skin.display_ranks or skin.ranks) then
for _, p in ipairs(skin.palettes) do
local p_ranks = p.display_ranks or p.ranks
for j = 1, #p_ranks do
if not lookup[p_ranks[j]] then
lookup[p_ranks[j]] = true
rankCount = rankCount + 1
end
end
end
elseif not skin.palettes and (skin.display_ranks or skin.ranks) then
local ranks = skin.display_ranks or skin.ranks
for j = 1, #ranks do
if not lookup[skin.ranks[j]] then
lookup[skin.ranks[j]] = true
rankCount = rankCount + 1
end
end
end
end
end
G.cdds_cards = CardArea(
0,0,
math.min(math.max(rankCount*G.CARD_W*0.6, 4*G.CARD_W), 10*G.CARD_W),
1.4*G.CARD_H,
{card_limit = rankCount, type = 'title', highlight_limit = 0})
G.cdds_cards.rankCount = rankCount
'''
[[patches]]
[patches.regex]
target = "functions/UI_definitions.lua"
pattern = '''for i = 1, 3 do([\s\S]*?)end'''
position = "at"
payload = '''
G.FUNCS.update_collab_cards(current_option, _suit, true)
'''
[[patches]]
[patches.regex]
target = "functions/UI_definitions.lua"
pattern = '''function create_UIBox_customize_deck()([\s\S]*?)end'''
position = "at"
payload = '''
function create_UIBox_customize_deck()
local suitTabs = {}
local index = 1
for i, suit in ipairs(SMODS.Suit:obj_list(true)) do
if G.COLLABS.options[suit.key] then
suitTabs[index] = {
label = localize(suit.key, 'suits_plural'),
tab_definition_function = G.UIDEF.custom_deck_tab,
tab_definition_function_args = suit.key
}
index = index + 1
end
end
if suitTabs[1] then
suitTabs[1].chosen = true
end
local t = create_UIBox_generic_options({ back_func = 'options', snap_back = nil, contents = {
{n=G.UIT.R, config={align = "cm", padding = 0}, nodes={
create_tabs(
{tabs = suitTabs, snap_to_nav = true, no_shoulders = true}
)}}}
})
return t
end
'''