[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.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 = """(function() return MP.LOBBY.config.ruleset == "ruleset_mp_walledgarden" and ease_dollars( MP.LOBBY.deck.back == "Green Deck" and (G.GAME.round_resets.hands - 1) * 2 + G.GAME.round_resets.discards or G.GAME.round_resets.hands - 1 ) end)() """ 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"); (function() local banned = { tags = { -- Disabling boss blinds doesn't do anything in PvP blinds. "tag_Bakery_DownTag", }, enhancements = { -- Banning this does not prevent the enhancement from being obtainable through the spectral, -- this simply prevents the enhancement from showing up in Booster Packs or Illusion. -- This made standard booster packs a must-open. and reduced the complexity of choosing cards. "m_Bakery_TimeWalk", }, vouchers = { -- Strictly a downside when ante number does not exist. "v_hieroglyph", "v_petroglyph", -- Rerolling boss blinds doesn't do anything in PvP blinds. "v_directors_cut", "v_retcon", }, consumables = { -- Banned in favor of `c_mp_ouija_standard`. "c_ouija", -- Allows you to duplicate your strongest joker, -- potentially even multiple times, for one hand. -- Skipping on a Scribe almost guarantees a lost life. "c_Bakery_Scribe", -- Doesn't apply any stickers, presumably because of some Multiplayer bug. "c_bongcloud_the_knight", -- Immediately converges gameplay to Flush Five. "c_Roland_void", -- Why add more variance on something that's already volatile? "c_mp_ectoplasm_sandbox", -- There wasn't anything wrong with regular Wraith to begin with. -- Don't fix what ain't broke! "c_mp_wraith", -- Almost always better than any other planet card. "c_mp_asteroid", }, jokers = { -- Strictly a downside when ante number does not exist. -- Despite being a charm, it can be banned as though it was a joker. "BakeryCharm_Bakery_Cogwheel", -- See `j_mr_bones` "j_Bakery_Wearywolf", -- See `j_idol`. "j_Roland_idle", -- Normally useless in singleplayer, this is a must-pick to get 4X over your opponent. "j_Roland_mrsbones", -- Banned because of the existence of `j_Roland_idle` and `j_Bakery_Wherewolf`. -- All three of them are fine on their own, but having all three of them, -- means that you are more than likely to stumble across one of the three, -- especially when all of them are of Uncommon rarity. "j_idol", -- Disabling boss blinds doesn't do anything in PvP blinds. "j_chicot", -- See `j_chicot`. "j_luchador", -- The first ante is the only time this would trigger. "j_matador", -- Preventing Death doesn't do anything in PvP blinds. "j_mr_bones", -- Trivializes Spacious deck because it gives a free Joker slot and is a Common. "j_ExtraCredit_forklift", -- Cards do not get debuffed in PvP blinds. "j_ExtraCredit_permanentmarker", -- This heavily encourages high card spam to capitalize on the held in hand plays. "j_jane_survivor", -- Getting Ankh 3 times within 9 antes is too speculative. "j_jane_saint", -- We don't like multiplayer jokers in this household! "j_mp_conjoined_joker", "j_mp_skip_off", "j_mp_pacifist", "j_mp_lets_go_gambling", "j_mp_pizza", "j_mp_taxes", "j_mp_penny_pincher", "j_mp_defensive_joker", "j_mp_speedrun", }, } local ruleset = { key = "walledgarden", layers = {"standard"}, multiplayer_content = true, reworked_consumables = {"c_mp_ouija_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