168 lines
5 KiB
TOML
168 lines
5 KiB
TOML
[manifest]
|
|
version = "1.0.0"
|
|
dump_lua = true
|
|
priority = -10
|
|
|
|
#modulate_sound()
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'functions/misc_functions.lua'
|
|
pattern = 'G.SOUND_MANAGER.channel:push(G.ARGS.push)'
|
|
match_indent = true
|
|
position = 'after'
|
|
payload = '''
|
|
SMODS.previous_track = SMODS.previous_track or ''
|
|
local in_sync = (SMODS.Sounds[desired_track] or {}).sync
|
|
local out_sync = (SMODS.Sounds[SMODS.previous_track] or {}).sync
|
|
local should_sync = true
|
|
if (type(in_sync) == 'table' and not in_sync[SMODS.previous_track]) or in_sync == false then should_sync = false end
|
|
if (type(out_sync) == 'table' and not out_sync[desired_track]) or out_sync == false then should_sync = false end
|
|
if
|
|
SMODS.previous_track and SMODS.previous_track ~= desired_track and
|
|
not should_sync
|
|
then
|
|
G.ARGS.push.type = 'restart_music'
|
|
G.SOUND_MANAGER.channel:push(G.ARGS.push)
|
|
end
|
|
SMODS.previous_track = desired_track'''
|
|
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'functions/misc_functions.lua'
|
|
pattern = 'G.ARGS.push.ambient_control = G.SETTINGS.ambient_control'
|
|
match_indent = true
|
|
position = 'after'
|
|
payload = '''
|
|
if SMODS.remove_replace_sound and SMODS.remove_replace_sound ~= desired_track then
|
|
SMODS.Sound.replace_sounds[SMODS.remove_replace_sound] = nil
|
|
SMODS.remove_replace_sound = nil
|
|
end
|
|
local replace_sound = SMODS.Sound.replace_sounds[desired_track]
|
|
if replace_sound then
|
|
local replaced_track = desired_track
|
|
desired_track = replace_sound.key
|
|
G.ARGS.push.desired_track = desired_track
|
|
if SMODS.previous_track ~= desired_track then
|
|
if replace_sound.times > 0 then replace_sound.times = replace_sound.times - 1 end
|
|
if replace_sound.times == 0 then SMODS.remove_replace_sound = replaced_track end
|
|
end
|
|
end
|
|
local stop_sound = SMODS.Sound.stop_sounds[desired_track]
|
|
if SMODS.Sound.stop_sounds[desired_track] then
|
|
if SMODS.previous_track ~= '' and stop_sound > 0 then stop_sound = stop_sound - 1 end
|
|
SMODS.Sound.stop_sounds[desired_track] = stop_sound ~= 0 and stop_sound or nil
|
|
SMODS.previous_track = ''
|
|
return
|
|
end
|
|
'''
|
|
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'functions/misc_functions.lua'
|
|
pattern = "(G.STATE == G.STATES.SPLASH and '') or"
|
|
match_indent = true
|
|
position = 'after'
|
|
payload = 'SMODS.Sound:get_current_music() or'
|
|
|
|
# PLAY_SOUND
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'engine/sound_manager.lua'
|
|
pattern = '''local s = {sound = love.audio.newSource("resources/sounds/"..args.sound_code..'.ogg', should_stream and "stream" or 'static')}'''
|
|
match_indent = true
|
|
position = 'at'
|
|
payload = '''
|
|
local c = SMODS_Sounds[args.sound_code]
|
|
local s = c and
|
|
{sound = love.audio.newSource(love.sound.newDecoder(c.data), c.should_stream and 'stream' or 'static'), per = c.per, vol = c.vol } or
|
|
{sound = love.audio.newSource("resources/sounds/"..args.sound_code..'.ogg', should_stream and "stream" or 'static')}'''
|
|
|
|
# pass in custom sounds
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'engine/sound_manager.lua'
|
|
pattern = "DISABLE_SFX = false"
|
|
match_indent = true
|
|
position = 'after'
|
|
payload = '''
|
|
SMODS_Sounds = {}
|
|
'''
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'engine/sound_manager.lua'
|
|
pattern = "elseif request.type == 'stop' then"
|
|
match_indent = true
|
|
position = 'before'
|
|
payload = '''
|
|
elseif request.type == 'sound_source' then
|
|
SMODS_Sounds[request.sound_code] = {
|
|
sound_code = request.sound_code,
|
|
data = request.data,
|
|
sound = sound,
|
|
per = request.per,
|
|
vol = request.vol,
|
|
}
|
|
SOURCES[request.sound_code] = {}
|
|
'''
|
|
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'engine/sound_manager.lua'
|
|
pattern = "s.original_pitch = args.per or 1"
|
|
match_indent = true
|
|
position = 'at'
|
|
payload = 's.original_pitch = ((args.type ~= "sound") and s.per) or args.per or 1'
|
|
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'engine/sound_manager.lua'
|
|
pattern = "s.original_volume = args.vol or 1"
|
|
match_indent = true
|
|
position = 'at'
|
|
payload = 's.original_volume = ((args.type ~= "sound") and s.vol) or args.vol or 1'
|
|
|
|
# don't crash RESTART_MUSIC
|
|
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'engine/sound_manager.lua'
|
|
pattern = "RESTART_MUSIC()"
|
|
match_indent = true
|
|
position = 'at'
|
|
payload = 'RESTART_MUSIC(request)'
|
|
|
|
# fix looping for music of different length
|
|
|
|
[[patches]]
|
|
[patches.regex]
|
|
target = 'engine/sound_manager.lua'
|
|
pattern = """(?<indent>[\t ]*)function MODULATE\\(args\\)(\n.*){9}"""
|
|
line_prepend = '$indent'
|
|
position = 'at'
|
|
payload = """function MODULATE(args)
|
|
if args.desired_track ~= '' then
|
|
local sound = ((SOURCES[current_track or {}] or {})[1] or {}).sound
|
|
if not sound or not sound:isPlaying() then
|
|
RESTART_MUSIC(args)
|
|
end
|
|
end
|
|
"""
|
|
[[patches]]
|
|
[patches.pattern]
|
|
target = 'engine/sound_manager.lua'
|
|
pattern = "for _, s in pairs(v) do"
|
|
match_indent = true
|
|
position = 'at'
|
|
payload = """current_track = args.desired_track
|
|
for _, s in pairs(v) do"""
|
|
|
|
# [[patches]]
|
|
# [patches.pattern]
|
|
# target = 'engine/sound_manager.lua'
|
|
# pattern = 'if s.sound and not s.sound:isPlaying() then'
|
|
# match_indent = true
|
|
# position = 'at'
|
|
# payload = '''if s.sound and s.sound:isPlaying() then
|
|
# s.sound:stop()
|
|
# elseif s.sound and not s.sound:isPlaying() then'''
|