361 lines
10 KiB
TOML
361 lines
10 KiB
TOML
[manifest]
|
|
version = "1.2"
|
|
dump_lua = true
|
|
priority = -10
|
|
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = "functions/misc_functions.lua"
|
|
pattern = """spacing = math.max(0, 0.32*(17 - #assembled_string)),"""
|
|
position = "after"
|
|
payload = """font = SMODS.Fonts[part.control.f] or G.FONTS[tonumber(part.control.f)],"""
|
|
match_indent = true
|
|
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = "functions/misc_functions.lua"
|
|
pattern = """spacing = _spacing,"""
|
|
position = "after"
|
|
payload = """font = SMODS.Fonts[part.control.f] or G.FONTS[tonumber(part.control.f)],"""
|
|
match_indent = true
|
|
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = "functions/misc_functions.lua"
|
|
pattern = """text = assembled_string,"""
|
|
position = "after"
|
|
payload = """font = SMODS.Fonts[part.control.f] or G.FONTS[tonumber(part.control.f)],"""
|
|
match_indent = true
|
|
|
|
# descsacle
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'functions/misc_functions.lua'
|
|
match_indent = true
|
|
position = 'at'
|
|
pattern = '''
|
|
local desc_scale = G.LANG.font.DESCSCALE
|
|
'''
|
|
payload = '''
|
|
local desc_scale = (SMODS.Fonts[part.control.f] or G.FONTS[tonumber(part.control.f)] or G.LANG.font).DESCSCALE
|
|
'''
|
|
|
|
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = "functions/misc_functions.lua"
|
|
pattern = """loc_target = G.localization.descriptions[(args.set or args.node.config.center.set)][args.key or args.node.config.center.key]"""
|
|
position = "at"
|
|
payload = """
|
|
loc_target = loc_target or {}
|
|
if pcall(function() loc_target.name_parsed = {loc_parse_string(G.localization.descriptions[(args.set or args.node.config.center.set)][args.key or args.node.config.center.key].name)} end) then
|
|
else loc_target.name_parsed = {} end"""
|
|
match_indent = true
|
|
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = "functions/misc_functions.lua"
|
|
pattern = """if ret_string then return ret_string end"""
|
|
position = "before"
|
|
payload = """if ret_string and type(ret_string) == 'string' then ret_string = string.gsub(ret_string, "{.-}", "") end"""
|
|
match_indent = true
|
|
|
|
# Replace all instances of the language font
|
|
[[patches]]
|
|
[patches.regex]
|
|
target = "engine/ui.lua"
|
|
pattern = '''
|
|
self.config.lang.font'''
|
|
position = "at"
|
|
payload = '''(self.config.font or self.config.lang.font)'''
|
|
line_prepend = "$indent"
|
|
|
|
[[patches]]
|
|
[patches.regex]
|
|
target = "engine/ui.lua"
|
|
pattern = '''
|
|
node.config.lang.font'''
|
|
position = "at"
|
|
payload = '''(node.config.font or node.config.lang.font)'''
|
|
line_prepend = "$indent"
|
|
|
|
# Fix name scale when using formatting
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = "functions/misc_functions.lua"
|
|
pattern = '''
|
|
local final_line = {}
|
|
'''
|
|
position = 'after'
|
|
match_indent = true
|
|
payload = '''
|
|
local final_name_assembled_string = ''
|
|
if args.type == 'name' and loc_target.name_parsed then
|
|
for _, part in ipairs(lines) do
|
|
local assembled_string_part = ''
|
|
for _, subpart in ipairs(part.strings) do
|
|
assembled_string_part = assembled_string_part..(type(subpart) == 'string' and subpart or format_ui_value(args.vars[tonumber(subpart[1])]) or 'ERROR')
|
|
end
|
|
final_name_assembled_string = final_name_assembled_string..assembled_string_part
|
|
end
|
|
end
|
|
'''
|
|
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = "functions/misc_functions.lua"
|
|
pattern = '''
|
|
spacing = math.max(0, 0.32*(17 - #assembled_string)),
|
|
'''
|
|
position = 'at'
|
|
match_indent = true
|
|
payload = '''
|
|
spacing = (not args.no_spacing and math.max(0, 0.32*(17 - #(final_name_assembled_string or assembled_string)))) or nil,
|
|
'''
|
|
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'functions/misc_functions.lua'
|
|
position = 'at'
|
|
match_indent = true
|
|
pattern = 'scale = (0.55 - 0.004*#assembled_string)*(part.control.s and tonumber(part.control.s) or 1)'
|
|
payload = 'scale = (0.55 - 0.004*#(final_name_assembled_string or assembled_string))*(part.control.s and tonumber(part.control.s) or 1)*(args.fixed_scale or 1)'
|
|
|
|
# Add support for multi line name
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = "functions/misc_functions.lua"
|
|
pattern = '''
|
|
if pcall(function() loc_target.name_parsed = {loc_parse_string(G.localization.descriptions[(args.set or args.node.config.center.set)][args.key or args.node.config.center.key].name)} end) then
|
|
'''
|
|
position = 'at'
|
|
match_indent = true
|
|
payload = '''
|
|
if pcall(function()
|
|
local name = G.localization.descriptions[(args.set or args.node.config.center.set)][args.key or args.node.config.center.key]
|
|
loc_target.name_parsed = name.name_parsed or {loc_parse_string(name.name)}
|
|
end) then
|
|
'''
|
|
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = "functions/misc_functions.lua"
|
|
pattern = '''
|
|
if pcall(function() ret_string = G.localization.descriptions[(args.set or args.node.config.center.set)][args.key or args.node.config.center.key].name end) then
|
|
'''
|
|
position = 'at'
|
|
match_indent = true
|
|
payload = '''
|
|
if pcall(function()
|
|
local name_text = G.localization.descriptions[(args.set or args.node.config.center.set)][args.key or args.node.config.center.key].name
|
|
if type(name_text) == "table" then
|
|
ret_string = ""
|
|
for i, line in ipairs(name_text) do
|
|
ret_string = ret_string.. (i ~= 1 and " " or "")..line
|
|
end
|
|
else
|
|
ret_string = name_text
|
|
end
|
|
end) then
|
|
'''
|
|
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = "functions/misc_functions.lua"
|
|
pattern = '''
|
|
if args.type == 'name' or args.type == 'text' then return final_line end
|
|
args.nodes[#args.nodes+1] = final_line
|
|
end
|
|
'''
|
|
position = 'at'
|
|
match_indent = true
|
|
payload = '''
|
|
if args.type == 'text' then return final_line end
|
|
if not args.nodes and args.type == 'name' then args.nodes = {} end
|
|
args.nodes[#args.nodes+1] = final_line
|
|
end
|
|
if args.type == 'name' then
|
|
local final_name = {}
|
|
|
|
for _, line in ipairs(args.nodes or {}) do
|
|
final_name[#final_name+1] = {n=G.UIT.R, config={align = "m"}, nodes=line}
|
|
end
|
|
|
|
return final_name
|
|
end
|
|
'''
|
|
|
|
# Marquee text in DynaText
|
|
# Adjust width when marquee is enabled
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'engine/text.lua'
|
|
match_indent = true
|
|
position = 'at'
|
|
pattern = '''
|
|
if self.strings[k].W > self.config.W then self.config.W = self.strings[k].W; self.strings[k].W_offset = 0 end
|
|
'''
|
|
payload = '''
|
|
if self.strings[k].W > self.config.W then
|
|
self.config.W = self.strings[k].W
|
|
self.strings[k].W_offset = 0
|
|
if self.config.marquee and self.config.maxw then
|
|
if self.config.W > self.config.maxw then
|
|
self.config.marquee_width = self.config.W/self.config.maxw
|
|
self.config.W = self.config.maxw
|
|
else
|
|
self.config.marquee = 'no'
|
|
end
|
|
end
|
|
end
|
|
'''
|
|
# Adjust width when marquee is enabled
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'engine/text.lua'
|
|
match_indent = true
|
|
position = 'at'
|
|
pattern = '''
|
|
if self.config.maxw and self.config.W > self.config.maxw then
|
|
'''
|
|
payload = '''
|
|
if self.config.maxw and self.config.W > self.config.maxw and not self.config.marquee then
|
|
'''
|
|
# Adjust width when marquee is enabled
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'engine/text.lua'
|
|
match_indent = true
|
|
position = 'at'
|
|
pattern = '''
|
|
v.W_offset = 0.5*(self.config.W - v.W)
|
|
'''
|
|
payload = '''
|
|
v.W_offset = 0.5*(self.config.W - (self.config.marquee and self.config.maxw and self.config.maxw < v.W and self.config.maxw or v.W))
|
|
'''
|
|
|
|
# Add start/end index calculation
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'engine/text.lua'
|
|
match_indent = true
|
|
position = 'after'
|
|
pattern = '''
|
|
if self.children.particle_effect then self.children.particle_effect:draw() end
|
|
'''
|
|
payload = '''
|
|
local start_index = 1
|
|
local end_index = #self.strings[self.focused_string].letters
|
|
if self.config.marquee and self.config.marquee ~= 'no' then
|
|
local padding = math.floor(#self.strings[self.focused_string].letters / (self.config.marquee_width or 1)) - 1
|
|
if self.dt and (self.dt - self.config.hold) / self.config.scroll_speed > (#self.strings[self.focused_string].letters + math.ceil(padding/4)) then self.dt = 0 end
|
|
if self.dt and self.dt > self.config.hold then
|
|
start_index = 1 + (math.floor((self.dt - self.config.hold) / self.config.scroll_speed) % (#self.strings[self.focused_string].letters + math.ceil(padding/4)))
|
|
end
|
|
end_index = math.min(start_index + padding, #self.strings[self.focused_string].letters)
|
|
end
|
|
'''
|
|
|
|
# Use start/end index
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'engine/text.lua'
|
|
match_indent = true
|
|
position = 'at'
|
|
pattern = '''
|
|
for k, letter in ipairs(self.strings[self.focused_string].letters) do
|
|
local real_pop_in = self.config.min_cycle_time == 0 and 1 or letter.pop_in
|
|
'''
|
|
payload = '''
|
|
for k=start_index, end_index do
|
|
local letter = self.strings[self.focused_string].letters[k]
|
|
local real_pop_in = self.config.min_cycle_time == 0 and 1 or letter.pop_in
|
|
'''
|
|
|
|
# Update dt
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'engine/text.lua'
|
|
match_indent = true
|
|
position = 'at'
|
|
pattern = '''
|
|
function DynaText:update(dt)
|
|
'''
|
|
payload = '''
|
|
function DynaText:update(dt, real_dt)
|
|
if self.config.marquee then
|
|
self.dt = (self.dt or 0) + real_dt
|
|
end
|
|
'''
|
|
|
|
# Ensure hold is present
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'engine/text.lua'
|
|
match_indent = true
|
|
position = 'after'
|
|
pattern = '''
|
|
self.silent = (config.silent)
|
|
'''
|
|
payload = '''
|
|
self.config.marquee = self.config.marquee and not G.SETTINGS.reduced_motion
|
|
self.config.hold = self.config.hold or self.config.marquee and 1.5 or nil
|
|
self.config.scroll_speed = self.config.scroll_speed or self.config.marquee and 0.1 or nil
|
|
'''
|
|
|
|
# Pass real_dt to update function
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'game.lua'
|
|
match_indent = true
|
|
position = 'at'
|
|
pattern = '''
|
|
v:update(dt*self.SPEEDFACTOR)
|
|
'''
|
|
payload = '''
|
|
v:update(dt*self.SPEEDFACTOR, self.real_dt)
|
|
'''
|
|
|
|
|
|
# Add underline property for text
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'engine/ui.lua'
|
|
match_indent = true
|
|
position = 'before'
|
|
pattern = '''
|
|
--Draw the 'chosen triangle'
|
|
'''
|
|
payload = '''
|
|
if self.config.underline and self.config.underline[4] > 0.01 then
|
|
prep_draw(self, 1)
|
|
love.graphics.scale(1/(G.TILESIZE))
|
|
love.graphics.setLineWidth(1)
|
|
love.graphics.setColor(self.config.underline)
|
|
self:draw_pixellated_under('line', parallax_dist)
|
|
love.graphics.pop()
|
|
end
|
|
'''
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'functions/misc_functions.lua'
|
|
match_indent = true
|
|
position = 'after'
|
|
pattern = '''
|
|
font = SMODS.Fonts[part.control.f] or G.FONTS[tonumber(part.control.f)],
|
|
'''
|
|
payload = '''
|
|
underline = part.control.u and loc_colour(part.control.u),
|
|
'''
|
|
# DynaText compat
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'functions/misc_functions.lua'
|
|
match_indent = true
|
|
position = 'after'
|
|
pattern = '''
|
|
final_line[#final_line].nodes[1] = {n=G.UIT.O, config={
|
|
'''
|
|
payload = '''
|
|
underline = part.control.u and loc_colour(part.control.u),
|
|
''' |