local BoxVariants = {} -- Add directional sticky-puller, rigid skewer, and soft all-edge spiky variants -- for every authored moveable box. All share sprites/collision with their base. function BoxVariants.addTo(assets) local baseBoxes = {} for name, properties in pairs(assets) do if properties.class == "moveable" and name:match("^box") then table.insert(baseBoxes, {name = name, properties = properties}) end end local function addVariant(base, prefix, behavior, directory, visualFlag) local name = prefix .. base.name local properties = { class = behavior, directory = directory, sprites = base.properties.sprites, cells = base.properties.cells, preload = base.properties.preload, synthetic = true, baseAsset = base.name, } properties[visualFlag] = true assets[name] = properties end for _, base in ipairs(baseBoxes) do addVariant(base, "sticky_", "sticky", "sticky", "goopy") addVariant(base, "skewer_", "skewer", "skewer", "skewer") addVariant(base, "spiky_", "spiky", "spiky", "spiky") end return assets end return BoxVariants