balatro-mods/Steamodded/lovely/scoring_calculation.toml

309 lines
8.5 KiB
TOML

[manifest]
version = "1.0.0"
dump_lua = true
priority = -10
[[patches]]
[patches.regex]
target = "functions/state_events.lua"
pattern = "^(.*)hand_chips\\s*\\*\\s*mult(.*)$"
position = "at"
payload = '''$1 SMODS.calculate_round_score() $2'''
match_indent = true
[[patches]]
[patches.pattern]
target = "functions/misc_functions.lua"
pattern = "G.ARGS.score_intensity.earned_score = G.GAME.current_round.current_hand.chips*G.GAME.current_round.current_hand.mult"
position = "at"
payload = '''G.ARGS.score_intensity.earned_score = SMODS.calculate_round_score(true)'''
match_indent = true
[[patches]]
[patches.pattern]
target = "functions/UI_definitions.lua"
pattern = '''contents.hand ='''
position = "before"
payload = '''--[['''
match_indent = false
# Replace contexts.hand
[[patches]]
[patches.pattern]
target = 'functions/UI_definitions.lua'
match_indent = true
position = 'before'
pattern = '''
contents.dollars_chips = {n=G.UIT.R, config={align = "cm",r=0.1, padding = 0,colour = G.C.DYN_UI.BOSS_MAIN, emboss = 0.05, id = 'row_dollars_chips'}, nodes={
'''
payload = '''
--]]
contents.hand = SMODS.GUI.hand_score_display_ui(scale)
'''
# Add operator set up/loading
[[patches]]
[patches.pattern]
target = 'game.lua'
match_indent = true
position = 'after'
pattern = '''
self.GAME.selected_back_key = selected_back
'''
payload = '''
if saveTable then
self.GAME.current_scoring_calculation = SMODS.Scoring_Calculations[saveTable.SCORING_CALC.key]:load({
config = saveTable.SCORING_CALC.config
})
else
self.GAME.current_scoring_calculation = SMODS.Scoring_Calculations['multiply']:new()
end
'''
# Operator saving
[[patches]]
[patches.pattern]
target = 'functions/misc_functions.lua'
match_indent = true
position = 'after'
pattern = '''
BLIND = G.GAME.blind:save(),
'''
payload = '''
SCORING_CALC = G.GAME.current_scoring_calculation:save(),
'''
# UIElement remove functions
[[patches]]
[patches.pattern]
target = 'engine/ui.lua'
match_indent = true
position = 'before'
pattern = '''
if self == G.CONTROLLER.text_input_hook then
'''
payload = '''
if self.config and self.config.func then
self.config.func = nil
end
'''
# Add Scoring_Parameters to update_hand_text
[[patches]]
[patches.pattern]
target = 'functions/common_events.lua'
match_indent = true
position = 'before'
pattern = '''
if vals.handname and G.GAME.current_round.current_hand.handname ~= vals.handname then
'''
payload = '''
for name, parameter in pairs(SMODS.Scoring_Parameters) do
if vals[name] and G.GAME.current_round.current_hand[name] ~= vals[name] then
local delta = (type(vals[name]) == 'number' and type(G.GAME.current_round.current_hand[name]) == 'number') and (vals[name] - G.GAME.current_round.current_hand[name]) or 0
if delta < 0 then delta = ''..delta; col = G.C.RED
elseif delta > 0 then delta = '+'..delta
else delta = ''..delta
end
if type(vals[name]) == 'string' then delta = vals[name] end
G.GAME.current_round.current_hand[name] = vals[name]
G.hand_text_area[name] = G.hand_text_area[name] or G.HUD:get_UIE_by_ID('hand_'..name..'_area') or nil
if G.hand_text_area[name] then
G.hand_text_area[name]:update(0)
if vals.StatusText then
attention_text({
text =delta,
scale = 0.8,
hold = 1,
cover = G.hand_text_area[name].parent,
cover_colour = mix_colours(parameter.colour, col, 0.1),
emboss = 0.05,
align = 'cm',
cover_align = 'cm'
})
end
end
end
end
'''
# Reset other values
[[patches]]
[patches.pattern]
target = 'cardarea.lua'
match_indent = true
position = 'after'
pattern = '''
update_hand_text({immediate = true, nopulse = true, delay = 0}, {mult = 0, chips = 0, level = '', handname = ''})
'''
payload = '''
for name, parameter in pairs(SMODS.Scoring_Parameters) do
update_hand_text({immediate = true, nopulse = true, delay = 0}, {[name] = parameter.default_value})
end
'''
# Reset display after hand played
[[patches]]
[patches.pattern]
target = 'functions/state_events.lua'
match_indent = true
position = 'before'
pattern = '''
check_and_set_high_score('hand', hand_chips*mult)
'''
payload = '''
for name, parameter in pairs(SMODS.Scoring_Parameters) do
update_hand_text({delay = 0}, {[name] = parameter.default_value})
end
'''
# Set based on hand selected
[[patches]]
[patches.pattern]
target = 'cardarea.lua'
match_indent = true
position = 'before'
pattern = '''
update_hand_text({immediate = true, nopulse = nil, delay = 0}, {handname=disp_text, level=G.GAME.hands[text].level, mult = G.GAME.hands[text].mult, chips = G.GAME.hands[text].chips})
'''
payload = '''
for name, parameter in pairs(SMODS.Scoring_Parameters) do
parameter.current = G.GAME.hands[text][name] or parameter.default_value
update_hand_text({immediate = true, nopulse = nil, delay = 0}, {[name] = parameter.current})
end
'''
# Reset values after hand played
[[patches]]
[patches.pattern]
target = 'functions/state_events.lua'
match_indent = false
position = 'after'
pattern = '''
func = (function() G.GAME.current_round.current_hand.handname = '';return true end)
}))
delay(0.3)
'''
payload = '''
SMODS.last_hand_oneshot = SMODS.calculate_round_score() > G.GAME.blind.chips
G.E_MANAGER:add_event(Event({
trigger = 'immediate',
func = (function()
for name, parameter in pairs(SMODS.Scoring_Parameters) do
parameter.current = parameter.default_value
end
return true
end)
}))
'''
# Level Up Hand uses scoring parameters
[[patches]]
[patches.pattern]
target = 'functions/common_events.lua'
match_indent = true
position = 'at'
pattern = '''
G.GAME.hands[hand].mult = math.max(G.GAME.hands[hand].s_mult + G.GAME.hands[hand].l_mult*(G.GAME.hands[hand].level - 1), 1)
G.GAME.hands[hand].chips = math.max(G.GAME.hands[hand].s_chips + G.GAME.hands[hand].l_chips*(G.GAME.hands[hand].level - 1), 0)
'''
payload = '''
for name, parameter in pairs(SMODS.Scoring_Parameters) do
if G.GAME.hands[hand][name] then parameter:level_up_hand(amount, G.GAME.hands[hand]) end
end
'''
# Face down hands
[[patches]]
[patches.pattern]
target = 'cardarea.lua'
match_indent = true
position = 'after'
pattern = '''
update_hand_text({immediate = true, nopulse = nil, delay = 0}, {handname='????', level='?', mult = '?', chips = '?'})
'''
payload = '''
for name, parameter in pairs(SMODS.Scoring_Parameters) do
update_hand_text({immediate = true, nopulse = nil, delay = 0}, {[name] = '?'})
end
'''
# Handle flame_handler
[[patches]]
[patches.pattern]
target = 'functions/button_callbacks.lua'
match_indent = true
position = 'at'
pattern = '''
G.C.UI_CHIPLICK = G.C.UI_CHIPLICK or {1, 1, 1, 1}
G.C.UI_MULTLICK = G.C.UI_MULTLICK or {1, 1, 1, 1}
for i=1, 3 do
G.C.UI_CHIPLICK[i] = math.min(math.max(((G.C.UI_CHIPS[i]*0.5+G.C.YELLOW[i]*0.5) + 0.1)^2, 0.1), 1)
G.C.UI_MULTLICK[i] = math.min(math.max(((G.C.UI_MULT[i]*0.5+G.C.YELLOW[i]*0.5) + 0.1)^2, 0.1), 1)
end
G.ARGS.flame_handler = G.ARGS.flame_handler or {
chips = {
id = 'flame_chips',
arg_tab = 'chip_flames',
colour = G.C.UI_CHIPS,
accent = G.C.UI_CHIPLICK
},
mult = {
id = 'flame_mult',
arg_tab = 'mult_flames',
colour = G.C.UI_MULT,
accent = G.C.UI_MULTLICK
}
}
'''
payload = '''
G.ARGS.flame_handler = G.ARGS.flame_handler or {}
for key, parameter in pairs(SMODS.Scoring_Parameters) do
for i=1, 3 do
parameter.lick[i] = math.min(math.max(((parameter.colour[i]*0.5+G.C.YELLOW[i]*0.5) + 0.1)^2, 0.1), 1)
end
G.ARGS.flame_handler[key] = G.ARGS.flame_handler[key] or parameter:flame_handler()
end
'''
# pt2
[[patches]]
[patches.pattern]
target = 'functions/button_callbacks.lua'
match_indent = true
position = 'at'
pattern = '''
e.config.object = Sprite(0, 0, 2.5, 2.5, G.ASSET_ATLAS["ui_1"], {x = 2, y = 0})
'''
payload = '''
e.config.object = Sprite(0, 0, e.config._w, e.config._h, G.ASSET_ATLAS["ui_1"], {x = 2, y = 0})
'''
# Patch mod_chips/mod_mult
[[patches]]
[patches.pattern]
target = 'functions/misc_functions.lua'
match_indent = true
position = 'before'
pattern = '''
return _mult
'''
payload = '''
SMODS.Scoring_Parameters.mult:modify(nil, _mult - (mult or 0))
'''
[[patches]]
[patches.pattern]
target = 'functions/misc_functions.lua'
match_indent = true
position = 'before'
pattern = '''
return _chips
'''
payload = '''
SMODS.Scoring_Parameters.chips:modify(nil, _chips - (hand_chips or 0))
'''