[manifest] version = "1.0.0" dump_lua = true priority = 0 [[patches]] [patches.pattern] target = '=[SMODS Multiplayer "ui/main_menu/play_button/ruleset_selection.lua"]' pattern = '{ button_id = "experimental_ruleset_button", button_localize_key = "k_experimental_standard" },' position = "before" payload = '{ button_id = "walledgarden_ruleset_button", button_localize_key = "k_walledgarden" },' match_indent = true [[patches]] [patches.pattern] target = '=[SMODS Multiplayer "localization/en-us.lua"]' pattern = 'k_experimental_standard = "Experimental (Standard)",' position = "before" payload = """k_walledgarden = "Walled Garden", k_walledgarden_description = "Personal ruleset for modded Balatro.",""" match_indent = true [[patches]] [patches.copy] target = '=[SMODS Multiplayer "rulesets/experimental/experimental.lua"]' position = "prepend" payload = """ sendInfoMessage("Attempting to register the Walled Garden ruleset...", "WalledGarden"); -- for k, v in pairs(G.P_CENTERS) do -- local _ = not k:find "experimental" and -- not k:find "sandbox" and -- k:find "j_" and -- ({jane = true, Multiplayer = true})[v.mod.id] and -- table.insert(banned.jokers, k) -- end (function() local banned = { tags = {"tag_Bakery_DownTag"}, enhancements = {"m_Bakery_TimeWalk"}, consumables = { "c_mp_asteroid", "c_Bakery_Scribe", "c_bongcloud_the_knight", "c_Roland_void", }, jokers = { "j_chicot", "j_luchador", "j_jane_escapey", "j_jane_survivor", "j_mp_conjoined_joker", "j_mp_skip_off", "j_jane_artificer", "j_mp_pacifist", "j_mp_lets_go_gambling", "j_jane_hunter", "j_mp_pizza", "j_jane_saint", "j_jane_rivulet", "j_mp_taxes", "j_jane_gourmand", "j_mp_penny_pincher", "j_mp_defensive_joker", "j_mp_speedrun", "j_ExtraCredit_forklift", "j_ExtraCredit_permanentmarker", }, } local ruleset = {key = "walledgarden", layers = {"standard"}} for k, v in pairs(banned) do ruleset["banned_" .. k] = v end MP.Ruleset(ruleset):inject() sendInfoMessage("Successfully registered \\"Walled Garden\\" as a ruleset under the Experimental tab!", "WalledGarden") end)() """ match_indent = true [[patches]] [patches.pattern] target = '=[SMODS Multiplayer "networking/action_handlers.lua"]' pattern = 'local parsedAction = json.decode(msg)' position = "at" payload = """local garden, parsedAction = pcall(function() return json.decode(msg) end) if not garden or type(parsedAction) ~= "table" then return sendErrorMessage( "# **DESYNC MAY HAVE OCCURED!!!** | We don't know how to parse this! " .. tostring(garden) .. ": " .. tostring(parsedAction), "MULTIPLAYER" ) end """ match_indent = true [[patches]] [patches.pattern] target = '=[SMODS Multiplayer "networking/action_handlers.lua"]' pattern = 'MP.GAME.end_pvp = true' position = "before" payload = """G.GAME.current_round.hands_left = MP.LOBBY.config.ruleset == 'ruleset_mp_walledgarden' and G.GAME.round_resets.hands - 1 or G.GAME.current_round.hands_left """ match_indent = true