[
{"name":"draw.pixel","description":"Plot a pixel. Sets one pixel of the active layer to a colour number.","inputSchema":{"type":"object","properties":{"x":{"type":"integer","description":"Across, from the left (0 is the first column)."},"y":{"type":"integer","description":"Down, from the top."},"colour":{"type":"integer","minimum":0,"maximum":255,"description":"The colour number to paint with (the picture's see-through colour, usually 0, paints empty: info.picture says which)."}},"required":["x","y","colour"],"additionalProperties":false}},
{"name":"draw.line","description":"Draw a line. A line between two points on the active layer (size: its thickness).","inputSchema":{"type":"object","properties":{"x0":{"type":"integer","description":"Start, across."},"y0":{"type":"integer","description":"Start, down."},"x1":{"type":"integer","description":"End, across."},"y1":{"type":"integer","description":"End, down."},"colour":{"type":"integer","minimum":0,"maximum":255,"description":"The colour number to paint with (the picture's see-through colour, usually 0, paints empty: info.picture says which)."},"size":{"type":"integer","minimum":1,"maximum":64,"description":"Line thickness in pixels (1: one pixel; more: a round pen that wide). Default: 1."},"pen":{"type":"string","enum":["round","square"],"description":"The pen's shape for thicker lines. Default: round."}},"required":["x0","y0","x1","y1","colour"],"additionalProperties":false}},
{"name":"draw.rect","description":"Draw a rectangle. A rectangle on the active layer, outlined (size: the line's thickness, centred on the edge) or filled.","inputSchema":{"type":"object","properties":{"x":{"type":"integer","description":"Left edge."},"y":{"type":"integer","description":"Top edge."},"w":{"type":"integer","minimum":1,"maximum":1e+06,"description":"Width in pixels."},"h":{"type":"integer","minimum":1,"maximum":1e+06,"description":"Height in pixels."},"colour":{"type":"integer","minimum":0,"maximum":255,"description":"The colour number to paint with (the picture's see-through colour, usually 0, paints empty: info.picture says which)."},"filled":{"type":"boolean","description":"Filled, or just the outline. Default: false."},"size":{"type":"integer","minimum":1,"maximum":64,"description":"Line thickness in pixels (1: one pixel; more: a round pen that wide). Default: 1."},"pen":{"type":"string","enum":["round","square"],"description":"The pen's shape for thicker lines. Default: round."}},"required":["x","y","w","h","colour"],"additionalProperties":false}},
{"name":"draw.ellipse","description":"Draw an ellipse. An ellipse (or circle) on the active layer, outlined (size: the line's thickness, centred on the edge) or filled, by its centre and radii.","inputSchema":{"type":"object","properties":{"cx":{"type":"integer","description":"Centre, across."},"cy":{"type":"integer","description":"Centre, down."},"rx":{"type":"integer","minimum":0,"maximum":1e+06,"description":"Radius across."},"ry":{"type":"integer","minimum":0,"maximum":1e+06,"description":"Radius down (left out: the same as rx, a circle)."},"colour":{"type":"integer","minimum":0,"maximum":255,"description":"The colour number to paint with (the picture's see-through colour, usually 0, paints empty: info.picture says which)."},"filled":{"type":"boolean","description":"Filled, or just the outline. Default: false."},"size":{"type":"integer","minimum":1,"maximum":64,"description":"Line thickness in pixels (1: one pixel; more: a round pen that wide). Default: 1."},"pen":{"type":"string","enum":["round","square"],"description":"The pen's shape for thicker lines. Default: round."}},"required":["cx","cy","rx","colour"],"additionalProperties":false}},
{"name":"draw.fill","description":"Flood fill. Fills the area of one colour around a point on the active layer (4-connected).","inputSchema":{"type":"object","properties":{"x":{"type":"integer","description":"Where, across."},"y":{"type":"integer","description":"Where, down."},"colour":{"type":"integer","minimum":0,"maximum":255,"description":"The colour number to paint with (the picture's see-through colour, usually 0, paints empty: info.picture says which)."}},"required":["x","y","colour"],"additionalProperties":false}},
{"name":"palette.set","description":"Set a palette colour. Changes one colour of the palette (every pixel using it changes).","inputSchema":{"type":"object","properties":{"index":{"type":"integer","minimum":0,"maximum":255,"description":"Which colour number."},"colour":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$","description":"The new colour, like #FF8800."},"set":{"type":"integer","minimum":0,"maximum":255,"description":"Which palette set (0: the main palette). Default: 0."}},"required":["index","colour"],"additionalProperties":false}},
{"name":"palette.transparent","description":"See-through colour. Chooses which colour number is see-through: pixels in it show as empty (lower layers through them) and export as transparent. For a solid background colour, pick a colour you don't draw with.","inputSchema":{"type":"object","properties":{"index":{"type":"integer","minimum":0,"maximum":255,"description":"The colour number to be see-through."}},"required":["index"],"additionalProperties":false}},
{"name":"palette.ramp","description":"Make a colour ramp. Blends the colours between two palette entries smoothly from one to the other.","inputSchema":{"type":"object","properties":{"from":{"type":"integer","minimum":0,"maximum":255,"description":"The first colour number."},"to":{"type":"integer","minimum":0,"maximum":255,"description":"The last colour number."},"set":{"type":"integer","minimum":0,"maximum":255,"description":"Which palette set (0: the main palette). Default: 0."}},"required":["from","to"],"additionalProperties":false}},
{"name":"layer.select","description":"Choose the active layer. Makes a layer the one painting goes to (0 is the bottom layer).","inputSchema":{"type":"object","properties":{"index":{"type":"integer","minimum":0,"maximum":255,"description":"The layer's number from the bottom (0 first)."}},"required":["index"],"additionalProperties":false}},
{"name":"layer.show","description":"Show or hide a layer. Turns a layer's visibility on or off.","inputSchema":{"type":"object","properties":{"index":{"type":"integer","minimum":0,"maximum":255,"description":"The layer's number from the bottom (0 first)."},"visible":{"type":"boolean","description":"Shown or hidden. Default: true."}},"required":["index"],"additionalProperties":false}},
{"name":"frame.duration","description":"Frame duration. How long the current frame (or every frame) shows, in milliseconds.","inputSchema":{"type":"object","properties":{"ms":{"type":"integer","minimum":1,"maximum":65535,"description":"Milliseconds."},"all":{"type":"boolean","description":"Every frame, not just this one. Default: false."}},"required":["ms"],"additionalProperties":false}},
{"name":"filter.apply","description":"Apply a filter. Runs a filter or colour adjustment on the active layer (inside the selection if there is one), as one undo step. Settings left out keep the filter's own defaults.","inputSchema":{"type":"object","properties":{"name":{"type":"string","enum":["Brightness and contrast","Hue and saturation","Colour balance","Posterise","Invert","Greyscale","Fit to palette","Blur","Sharpen","Noise","Pixelate","Outline","Drop shadow","Clean up stray pixels","Grow or shrink","Levels","Curves","Replace colours","Gradient map","Rotate","Auto-shade","Exposure","White balance","Vibrance","Shadows and highlights","Split toning","Sepia","Duotone","Selective colour","Colour look-up (.cube)","Film grain","Vignette","Smooth, keeping edges","Oil paint","Toon (cel shading)","Pencil or ink sketch","Halftone","Posterise smoothly","Punch for few colours"],"description":"Which filter (info.filters lists them with what a, b, c, n... mean for each)."},"a":{"type":"number","description":"The filter's first setting (see info.filters)."},"b":{"type":"number","description":"Its second setting."},"c":{"type":"number","description":"Its third setting."},"n":{"type":"integer","description":"Its whole-number setting (levels, size, radius...)."},"colour":{"type":"integer","minimum":0,"maximum":255,"description":"A colour number it uses (outline, shadow)."},"dx":{"type":"integer","description":"Shadow offset across."},"dy":{"type":"integer","description":"Shadow offset down."},"flag":{"type":"boolean","description":"Its on/off setting (see info.filters)."},"dither":{"type":"string","enum":["None","Ordered","Floyd-Steinberg","Atkinson"],"description":"Palette pictures: how the result is fitted back to the palette."},"mix":{"type":"number","minimum":0,"maximum":100,"description":"How much of the result: 0 none to 100 all. Default: 100."},"to":{"type":"string","enum":["pixels","palette"],"description":"Colour adjustments on a palette picture: change the pixels (fitted back), or just the palette's colours. Default: pixels."},"settings":{"type":"string","description":"Everything at once as the Image menu's recipes save it (overrides the rest)."}},"required":["name"],"additionalProperties":false}},
{"name":"info.filters","description":"List the filters. Each filter's name and what its settings mean (for filter.apply). (Changes nothing.)","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"layer.flip","description":"Flip the layer. Mirrors the active layer's pixels, across (x) or upside down (y), as one undo step.","inputSchema":{"type":"object","properties":{"axis":{"type":"string","enum":["x","y"],"description":"x: mirror left to right; y: upside down."}},"required":["axis"],"additionalProperties":false}},
{"name":"info.picture","description":"About the picture. Its size, colours, layers, frames and active layer. (Changes nothing.)","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"info.palette","description":"List the palette. Every colour number and its colour, as #RRGGBB. (Changes nothing.)","inputSchema":{"type":"object","properties":{"set":{"type":"integer","minimum":0,"maximum":255,"description":"Which palette set (0: the main palette). Default: 0."}},"required":[],"additionalProperties":false}},
{"name":"info.layers","description":"List the layers. Each layer from the bottom: number, name, shown or hidden, locked. (Changes nothing.)","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"file.new","description":"New picture. A new picture of any size, in the palette of the system last used.","inputSchema":{"type":"object","properties":{"width":{"type":"integer","minimum":1,"maximum":4096,"description":"Width in pixels. Default: 320."},"height":{"type":"integer","minimum":1,"maximum":4096,"description":"Height in pixels. Default: 200."},"colours":{"type":"integer","minimum":2,"maximum":256,"description":"Colours in its palette. Default: 256."}},"required":[],"additionalProperties":false}},
{"name":"file.open","description":"Open a file. Opens a picture, project, map or 3D model (anything File > Open opens).","inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"The file."}},"required":["path"],"additionalProperties":false}},
{"name":"file.save","description":"Save. Saves the active picture as a .dpx project (to `path`, or where it was last saved).","inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"Where (a .dpx file). Left out: where it was saved before."}},"required":[],"additionalProperties":false}},
{"name":"file.export","description":"Export. Writes the active picture (or map) in one of the Export window's formats.","inputSchema":{"type":"object","properties":{"format":{"type":"string","description":"The format's name as the Export window lists it, e.g. \"PNG\" or \"IFF ILBM\" (any case; enough of it to be unique)."},"path":{"type":"string","description":"The file to write."}},"required":["format","path"],"additionalProperties":false}},
{"name":"edit.undo","description":"Undo. Undoes the last change to the active picture.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"edit.redo","description":"Redo. Does again what was last undone.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"edit.delete","description":"Delete selection. Clears the selected part of the active layer to the transparent colour (a map: empties the selected cells).","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"colour.left","description":"Left colour. The colour the left mouse button paints with.","inputSchema":{"type":"object","properties":{"index":{"type":"integer","minimum":0,"maximum":255,"description":"Colour number."}},"required":["index"],"additionalProperties":false}},
{"name":"colour.right","description":"Right colour. The colour the right mouse button paints with.","inputSchema":{"type":"object","properties":{"index":{"type":"integer","minimum":0,"maximum":255,"description":"Colour number."}},"required":["index"],"additionalProperties":false}},
{"name":"tool.set","description":"Choose a tool. The tool the mouse paints with.","inputSchema":{"type":"object","properties":{"name":{"type":"string","enum":["Freehand","Dotted freehand","Airbrush","Line","Curve","Rectangle","Filled rectangle","Circle","Filled circle","Ellipse","Filled ellipse","Polygon","Filled polygon","Fill","Pick colour","Pick up brush","Select rectangle","Select lasso","Text","Pointer","Magic wand"],"description":"The tool."}},"required":["name"],"additionalProperties":false}},
{"name":"layer.add","description":"New layer. A new empty layer above the active one (it becomes active).","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Its name (left out: Layer 2, 3...)."}},"required":[],"additionalProperties":false}},
{"name":"layer.duplicate","description":"Duplicate layer. A copy of the active layer above it.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"layer.delete","description":"Delete layer. Removes the active layer (a picture keeps at least one).","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"layer.up","description":"Move layer up. Moves the active layer one place up the stack.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"layer.down","description":"Move layer down. Moves the active layer one place down the stack.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"layer.rename","description":"Rename layer. Gives a layer a new name.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"The new name."},"index":{"type":"integer","minimum":0,"maximum":255,"description":"Which layer from the bottom (left out: the active one)."}},"required":["name"],"additionalProperties":false}},
{"name":"layer.blend","description":"Layer blend and opacity. Sets how a layer's colours go onto the layers beneath: its blend mode and opacity. Palette pictures draw each mix in the nearest palette colour.","inputSchema":{"type":"object","properties":{"mode":{"type":"string","enum":["normal","multiply","screen","overlay","add","subtract","darken","lighten","difference"],"description":"The blend mode (left out: as it is)."},"opacity":{"type":"integer","minimum":0,"maximum":100,"description":"How much shows, 0-100 percent (left out: as it is)."},"index":{"type":"integer","minimum":0,"maximum":255,"description":"Which layer from the bottom (left out: the active one)."}},"required":[],"additionalProperties":false}},
{"name":"layer.merge_down","description":"Merge down. Merges the active layer into the one below it.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"prop.list","description":"List properties. The properties of the map (or picture), a map layer, a tile or a map object: a line each, name (type) = value; a class's members in braces. (Changes nothing.)","inputSchema":{"type":"object","properties":{"target":{"type":"string","enum":["map","layer","tile","object","template"],"description":"Whose: the map's (or picture's) own, a map layer's, a tile's, or a map object's. Default: map."},"layer":{"type":"integer","minimum":0,"maximum":255,"description":"target = layer: which (from 0, the bottom; left out: the active one)."},"tile":{"type":"integer","minimum":0,"description":"target = tile: the tile's number (in the active layer's tile set)."},"object":{"type":"integer","minimum":1,"description":"target = object: the object's id (left out: the chosen one); target = template: the template's."}},"required":[],"additionalProperties":false}},
{"name":"prop.set","description":"Set a property. Gives the map (or picture), a map layer, a tile or a map object a property, or changes one's value. A class's member: name it \"wave.count\". type is bool, int, float, string, color, file, or the name of an enum or class (Property types); left out, an existing property keeps its type, and a new one is text.","inputSchema":{"type":"object","properties":{"target":{"type":"string","enum":["map","layer","tile","object","template"],"description":"Whose: the map's (or picture's) own, a map layer's, a tile's, or a map object's. Default: map."},"name":{"type":"string","description":"The property's name."},"value":{"type":"string","description":"Its value (flags: values joined by commas)."},"type":{"type":"string","description":"Its type (left out: as it is, or text for a new one)."},"layer":{"type":"integer","minimum":0,"maximum":255,"description":"target = layer: which (from 0, the bottom; left out: the active one)."},"tile":{"type":"integer","minimum":0,"description":"target = tile: the tile's number (in the active layer's tile set)."},"object":{"type":"integer","minimum":1,"description":"target = object: the object's id (left out: the chosen one); target = template: the template's."}},"required":["name"],"additionalProperties":false}},
{"name":"prop.remove","description":"Remove a property. Takes a property away from the map (or picture), a map layer, a tile or a map object.","inputSchema":{"type":"object","properties":{"target":{"type":"string","enum":["map","layer","tile","object","template"],"description":"Whose: the map's (or picture's) own, a map layer's, a tile's, or a map object's. Default: map."},"name":{"type":"string","description":"The property's name."},"layer":{"type":"integer","minimum":0,"maximum":255,"description":"target = layer: which (from 0, the bottom; left out: the active one)."},"tile":{"type":"integer","minimum":0,"description":"target = tile: the tile's number (in the active layer's tile set)."},"object":{"type":"integer","minimum":1,"description":"target = object: the object's id (left out: the chosen one); target = template: the template's."}},"required":["name"],"additionalProperties":false}},
{"name":"types.enum","description":"Make an enum. Makes (or changes) an enum for properties: one of a list of values, or with flags = true, any of them at once (as bits). Kept with the map or picture in front.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Its name."},"values":{"type":"string","description":"Its values, joined by commas."},"flags":{"type":"boolean","description":"Any of the values at once. Default: false."},"attributes":{"type":"boolean","description":"(Maps, flags) name the cells' 8 attribute bits with it. Default: false."}},"required":["name","values"],"additionalProperties":false}},
{"name":"types.class","description":"Make a class. Makes (or changes) a class for properties: named members with their default values, written \"count:int=3; kind:Kind=Enemy; first:Spawn\" (a member of a class type takes that class's members).","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Its name."},"members":{"type":"string","description":"Its members (see above)."}},"required":["name","members"],"additionalProperties":false}},
{"name":"types.remove","description":"Remove an enum or class. Takes an enum or class away (properties of that type keep their values).","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Its name."}},"required":["name"],"additionalProperties":false}},
{"name":"history.list","description":"List the undo history. Every undo step, oldest first: its number, name, the layer painted on, when (the clock time), and a * on the current one (steps after it can be redone). (Changes nothing.)","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"history.goto","description":"Go to a step of the history. Undoes or redoes until `step` steps are done (0: the start of the history), as clicking a step in the History panel.","inputSchema":{"type":"object","properties":{"step":{"type":"integer","minimum":0,"maximum":1e+06,"description":"How many steps done (history.list numbers them)."}},"required":["step"],"additionalProperties":false}},
{"name":"history.forget","description":"Forget old history steps. Forgets the oldest steps of the undo history (frees their memory; the picture stays as it is). Can't be undone.","inputSchema":{"type":"object","properties":{"steps":{"type":"integer","minimum":1,"maximum":1e+06,"description":"How many of the oldest done steps to forget."}},"required":["steps"],"additionalProperties":false}},
{"name":"history.clearredo","description":"Clear the redo steps. Forgets the steps Redo would bring back. Can't be undone.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"select.all","description":"Select all. Selects the whole picture (a map: every cell of the active layer).","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"select.none","description":"Deselect. Removes the selection.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"select.invert","description":"Invert selection. Selects what wasn't, and deselects what was.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"select.wand","description":"Magic wand. Selects the pixel at x, y and the pixels like it: those joined to it (side by side), or that colour anywhere with joined = false. Palette pictures compare colour numbers (with a tolerance, the colours themselves). On a map, x and y are a cell of the active layer, and the cells showing the same tile are selected.","inputSchema":{"type":"object","properties":{"x":{"type":"integer","description":"Across."},"y":{"type":"integer","description":"Down."},"tolerance":{"type":"integer","minimum":0,"maximum":100,"description":"How different a colour may be and still count, 0-100% (0: the same colour only)."},"joined":{"type":"boolean","description":"Only pixels joined to this one (false: that colour anywhere)."},"layers":{"type":"string","enum":["active","visible"],"description":"Look at the active layer, or at what shows (the visible layers together)."},"mode":{"type":"string","enum":["replace","add","take away","overlap"],"description":"Replace the selection, add to it, or take away from it. Default: replace."}},"required":["x","y"],"additionalProperties":false}},
{"name":"select.tile","description":"Select every cell of a tile. A map: selects every cell of the active layer showing this tile (flips and palette bank as given).","inputSchema":{"type":"object","properties":{"tile":{"type":"integer","minimum":0,"description":"The tile number."},"flipx":{"type":"boolean","description":"Mirrored across. Default: false."},"flipy":{"type":"boolean","description":"Mirrored down. Default: false."},"palette":{"type":"integer","minimum":0,"maximum":255,"description":"Palette bank. Default: 0."},"mode":{"type":"string","enum":["replace","add","take away","overlap"],"description":"Replace the selection, add to it, or take away from it. Default: replace."}},"required":["tile"],"additionalProperties":false}},
{"name":"select.fill","description":"Fill the selection. Pictures: paints the selection in the left colour (with the paint mode). Maps: fills the selected cells with the tile brush, tiled from the selection's top-left corner.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"select.colour","description":"Select by colour. Selects every pixel of a colour: a colour number (palette pictures) or a colour (true colour), with the magic wand's tolerance and layers.","inputSchema":{"type":"object","properties":{"index":{"type":"integer","minimum":0,"maximum":255,"description":"The colour number (palette pictures)."},"colour":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$","description":"The colour (true-colour pictures)."},"tolerance":{"type":"integer","minimum":0,"maximum":100,"description":"How different a colour may be and still count, 0-100% (0: the same colour only)."},"layers":{"type":"string","enum":["active","visible"],"description":"Look at the active layer, or at what shows (the visible layers together)."},"mode":{"type":"string","enum":["replace","add","take away","overlap"],"description":"Replace the selection, add to it, or take away from it. Default: replace."}},"required":[],"additionalProperties":false}},
{"name":"select.rect","description":"Select a rectangle. Selects a rectangle of the picture (painting then stays inside it); on a map, of the active layer's cells.","inputSchema":{"type":"object","properties":{"x":{"type":"integer","description":"Left edge."},"y":{"type":"integer","description":"Top edge."},"w":{"type":"integer","minimum":1,"maximum":1e+06,"description":"Width."},"h":{"type":"integer","minimum":1,"maximum":1e+06,"description":"Height."}},"required":["x","y","w","h"],"additionalProperties":false}},
{"name":"frame.add","description":"New frame. Adds an animation frame after the current one and goes to it.","inputSchema":{"type":"object","properties":{"copy":{"type":"boolean","description":"A copy of the current frame (or empty). Default: true."}},"required":[],"additionalProperties":false}},
{"name":"frame.delete","description":"Delete frame. Removes the current frame (a picture keeps at least one).","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"frame.go","description":"Go to a frame. Shows an animation frame (0 is the first).","inputSchema":{"type":"object","properties":{"index":{"type":"integer","minimum":0,"maximum":1e+06,"description":"The frame."}},"required":["index"],"additionalProperties":false}},
{"name":"macro.record","description":"Record a macro. Starts writing down every command run (from the menus, keys, the command palette...) until macro.stop.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"macro.stop","description":"Stop recording. Stops recording, and saves the macro to `path` if given (else asks where).","inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"Where to save it: a .dpmacro file, or a .luau script doing the same."}},"required":[],"additionalProperties":false}},
{"name":"macro.play","description":"Play a macro. Runs the commands in a macro file, in order, stopping at the first that fails.","inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"The macro (.dpmacro). Left out: asks."}},"required":[],"additionalProperties":false}},
{"name":"info.commands","description":"List the commands. Every command's id and title (the command palette shows them with their settings). (Changes nothing.)","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"paint.stroke","description":"Paint a stroke. Does what dragging the mouse through these points with a tool does (a recorded stroke).","inputSchema":{"type":"object","properties":{"tool":{"type":"string","enum":["Freehand","Dotted freehand","Airbrush","Line","Rectangle","Filled rectangle","Circle","Filled circle","Ellipse","Filled ellipse","Fill","Pick up brush","Select rectangle","Select lasso"],"description":"The tool, as the mouse would use it (its current settings: paint mode, brush...)."},"button":{"type":"string","enum":["left","right"],"description":"The mouse button (left paints with the left colour). Default: left."},"points":{"type":"string","description":"The points: \"x,y x,y ...\" (the first is where the button went down)."},"colour":{"type":"integer","minimum":0,"maximum":255,"description":"The colour number to paint with (left out: the button's colour as it is)."},"size":{"type":"integer","minimum":1,"maximum":64,"description":"A built-in brush's size (left out: the brush as it is)."},"shape":{"type":"string","enum":["round","square"],"description":"A built-in brush's shape (left out: the brush as it is)."},"perfect":{"type":"boolean","description":"Freehand with the 1-pixel brush: take out the doubled corners (pixel-perfect; left out: as the Tools panel has it)."}},"required":["tool","points"],"additionalProperties":false}},
{"name":"reference.add","description":"Add a reference image. A picture file (PNG, JPEG, GIF, TIFF, BMP...) to look at while drawing: shown beside the picture or over it, colours picked from it with Pick colour, never part of the picture (not a layer; not exported). Kept with the .dpx.","inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"The picture file."},"place":{"type":"string","enum":["beside","over"],"description":"Beside the picture (to its right, as tall as it) or over it (fitted, to trace). Default: beside."},"opacity":{"type":"integer","minimum":5,"maximum":100,"description":"How solid it shows, 5-100%. Default: 100."}},"required":["path"],"additionalProperties":false}},
{"name":"reference.set","description":"Change a reference image. Moves, sizes, shows or hides a reference image (numbered from 0 in the order added; the last is on top).","inputSchema":{"type":"object","properties":{"index":{"type":"integer","minimum":0,"maximum":255,"description":"Which one. Default: 0."},"x":{"type":"integer","description":"Its left edge, in picture pixels."},"y":{"type":"integer","description":"Its top edge, in picture pixels."},"size":{"type":"number","minimum":1,"maximum":10000,"description":"How big it shows, % (100: one image pixel to one picture pixel)."},"opacity":{"type":"integer","minimum":5,"maximum":100,"description":"How solid it shows, 5-100%."},"visible":{"type":"boolean","description":"Shown or hidden."},"place":{"type":"string","enum":["beside","over"],"description":"Put it beside the picture or fit it over it (before x, y and size, which can adjust it)."}},"required":[],"additionalProperties":false}},
{"name":"reference.remove","description":"Remove a reference image. Takes a reference image away (the picture is untouched).","inputSchema":{"type":"object","properties":{"index":{"type":"integer","minimum":0,"maximum":255,"description":"Which one (from 0)."}},"required":["index"],"additionalProperties":false}},
{"name":"paint.wrap","description":"Wrap around. Turns wrap-around on or off for the picture: it repeats in every direction on the canvas, and paint going over an edge (strokes, lines, shapes, paint.stroke) comes in at the other side, for seamless textures and tiles. Kept with the picture.","inputSchema":{"type":"object","properties":{"on":{"type":"boolean","description":"On or off. Default: true."}},"required":[],"additionalProperties":false}},
{"name":"brush.set","description":"Built-in brush. The brush the mouse's tools (and paint.stroke) paint with: round or square, of a size (the custom brush is put aside). draw.line, draw.rect and draw.ellipse don't use it: give them size for a thicker line.","inputSchema":{"type":"object","properties":{"shape":{"type":"string","enum":["round","square"],"description":"A built-in brush's shape (left out: the brush as it is)."},"size":{"type":"integer","minimum":1,"maximum":64,"description":"Its size in pixels."}},"required":[],"additionalProperties":false}},
{"name":"copper.info","description":"The copper's changes. Every change the copper makes down the screen, a line each: the line it's from, and what changes (a palette colour and its new colour, or a map layer's scroll or visibility). (Changes nothing.)","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"copper.colour","description":"Copper: change a colour. From a line down, a palette colour becomes another colour (until it changes again).","inputSchema":{"type":"object","properties":{"line":{"type":"integer","minimum":0,"maximum":65535,"description":"The line it changes on (0 is the top)."},"index":{"type":"integer","minimum":0,"maximum":255,"description":"The palette colour number."},"colour":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$","description":"Its new colour, like #2040A0."}},"required":["line","index","colour"],"additionalProperties":false}},
{"name":"copper.gradient","description":"Copper: a colour gradient. A palette colour ramped from one colour to another down a run of lines (a sky, water, a colour bar), a change every few lines; snapped to the machine's colours.","inputSchema":{"type":"object","properties":{"from_line":{"type":"integer","minimum":0,"maximum":65535,"description":"The first line."},"to_line":{"type":"integer","minimum":0,"maximum":65535,"description":"The last line."},"index":{"type":"integer","minimum":0,"maximum":255,"description":"The palette colour number it changes."},"from":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$","description":"The colour at the first line."},"to":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$","description":"The colour at the last line."},"every":{"type":"integer","minimum":1,"maximum":256,"description":"A change every this many lines. Default: 1."},"snap":{"type":"boolean","description":"Snap the colours to what the machine can show. Default: true."}},"required":["from_line","to_line","index","from","to"],"additionalProperties":false}},
{"name":"copper.wave","description":"Copper: a wave. A map layer's scroll changed line by line down a run of lines as a sine wave (water, heat haze, a dream sequence).","inputSchema":{"type":"object","properties":{"from_line":{"type":"integer","minimum":0,"maximum":65535,"description":"The first line."},"to_line":{"type":"integer","minimum":0,"maximum":65535,"description":"The last line."},"layer":{"type":"integer","minimum":0,"maximum":255,"description":"The map layer (0 is the bottom one). Default: 0."},"across":{"type":"boolean","description":"Scroll across (false: up and down). Default: true."},"amplitude":{"type":"integer","minimum":0,"maximum":512,"description":"How far it moves, in pixels. Default: 4."},"period":{"type":"integer","minimum":2,"maximum":4096,"description":"Lines for one whole wave. Default: 32."},"phase":{"type":"integer","minimum":-360,"maximum":360,"description":"Where the wave starts, in degrees. Default: 0."}},"required":["from_line","to_line"],"additionalProperties":false}},
{"name":"copper.clear","description":"Copper: clear it. Removes every change the copper makes.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"copper.show","description":"Copper: on or off. Shows the copper's changes, or keeps them but doesn't show them.","inputSchema":{"type":"object","properties":{"on":{"type":"boolean","description":"Show them. Default: true."}},"required":[],"additionalProperties":false}},
{"name":"map.info","description":"About the map. The map's size in cells, its tile size, how many tiles its tile set has, and its layers. (Changes nothing.)","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"map.cell","description":"What's in a cell. A cell of the active map layer: its tile (-1 empty), mirrors, turn, palette bank and attributes. (Changes nothing.)","inputSchema":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":65535,"description":"Column."},"y":{"type":"integer","minimum":0,"maximum":65535,"description":"Row."}},"required":["x","y"],"additionalProperties":false}},
{"name":"map.set","description":"Set map cells. Puts a tile in a cell, or in every cell of a rectangle, of the active map layer (one undo step; with cells selected, only those change).","inputSchema":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":65535,"description":"Column."},"y":{"type":"integer","minimum":0,"maximum":65535,"description":"Row."},"w":{"type":"integer","minimum":1,"maximum":65535,"description":"Columns wide. Default: 1."},"h":{"type":"integer","minimum":1,"maximum":65535,"description":"Rows high. Default: 1."},"tile":{"type":"integer","minimum":-1,"maximum":1.04857e+06,"description":"The tile number (-1: empty)."},"flipx":{"type":"boolean","description":"Mirrored across. Default: false."},"flipy":{"type":"boolean","description":"Upside down. Default: false."},"rotate":{"type":"boolean","description":"Turned 90 degrees clockwise. Default: false."},"palette":{"type":"integer","minimum":0,"maximum":255,"description":"Palette bank. Default: 0."},"attr":{"type":"integer","minimum":0,"maximum":255,"description":"Attributes (left out: the cells keep theirs)."},"random":{"type":"boolean","description":"Instead of tile: each cell one of the random tiles (tiles.random), by weight. Default: false."},"rule":{"type":"string","description":"Instead of tile: an automapping rule tile (empty, ignore, nonempty, other, negate), for rules maps."},"stamp":{"type":"string","description":"Instead of tile: a saved stamp (tiles.stamp_save), its top-left at x, y (w and h: placed across that many cells, each placement one of its variations)."}},"required":["x","y"],"additionalProperties":false}},
{"name":"map.attr","description":"Set cell attributes. Sets the attributes (the game's own bits) of a cell, or a rectangle of cells, leaving their tiles.","inputSchema":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":65535,"description":"Column."},"y":{"type":"integer","minimum":0,"maximum":65535,"description":"Row."},"w":{"type":"integer","minimum":1,"maximum":65535,"description":"Columns wide. Default: 1."},"h":{"type":"integer","minimum":1,"maximum":65535,"description":"Rows high. Default: 1."},"value":{"type":"integer","minimum":0,"maximum":255,"description":"The attributes, 0-255."}},"required":["x","y","value"],"additionalProperties":false}},
{"name":"map.save_tiled","description":"Save as a Tiled map. Writes the map in front as a Tiled map (mapeditor.org): .tmx (XML) or .tmj (JSON), by the file's extension, with each layer's tile set as a PNG beside it. (file.open opens Tiled maps.)","inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"The .tmx or .tmj file."}},"required":["path"],"additionalProperties":false}},
{"name":"map.tile_art","description":"Tall tiles. Sets the size of the active layer's tiles in its tile set, when it isn't the cell's: bigger makes tall tiles (walls, trees, buildings on an isometric map), each drawn whole from its cell's bottom-left, overhanging up (and right), the ones lower down in front, as Tiled draws them. The cell's own size: ordinary tiles.","inputSchema":{"type":"object","properties":{"w":{"type":"integer","minimum":1,"maximum":1024,"description":"The tiles' width in the tile set."},"h":{"type":"integer","minimum":1,"maximum":1024,"description":"Their height."},"layer":{"type":"integer","minimum":0,"maximum":255,"description":"The map layer (from 0; left out: the active one)."}},"required":["w","h"],"additionalProperties":false}},
{"name":"map.layer","description":"Map layer settings. Sets a map layer's scroll (the layer pixel shown at the map's top-left) and whether it repeats in every direction (wrap: any shape; isometric maps repeat along their diamond's sides, staggered and hex maps seamlessly with an even number of shifted rows or columns). What's left out stays as it is.","inputSchema":{"type":"object","properties":{"layer":{"type":"integer","minimum":0,"maximum":255,"description":"The map layer (from 0; left out: the active one)."},"wrap":{"type":"boolean","description":"Repeat in every direction."},"scroll_x":{"type":"integer","minimum":-1e+06,"maximum":1e+06,"description":"Its scroll across."},"scroll_y":{"type":"integer","minimum":-1e+06,"maximum":1e+06,"description":"Its scroll down."},"name":{"type":"string","description":"Its name."}},"required":[],"additionalProperties":false}},
{"name":"map.layer_add","description":"New map layer. A new, empty tile layer above the active one (the same size and tiles), which becomes the active layer.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Its name (left out: Layer n)."}},"required":[],"additionalProperties":false}},
{"name":"map.save_godot","description":"Save as a Godot scene. Writes the map in front as a Godot 4 scene (.tscn, Godot 4.3 or later): a TileMapLayer for each layer, each with a TileSet of its tile set picture (a PNG beside the scene), in the map's shape (square, isometric, staggered, hexagonal or brick as Godot's half-offset squares), with the flips and turns. Put the scene and its PNGs in the Godot project's folder `res` (\"\" its top). (file.open opens Godot 4 scenes: their TileMapLayer and TileMap nodes.)","inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"The .tscn file."},"res":{"type":"string","description":"The folder in the Godot project, e.g. levels/ (left out: the top)."}},"required":["path"],"additionalProperties":false}},
{"name":"tiles.shape_template","description":"New tile set for a map shape. A new picture of tiles to paint for a map of this shape: each tile's cell shape (diamond, hex, brick, square) outlined in the left colour, the corners outside it see-through. Left out: the map in front's shape and tile size.","inputSchema":{"type":"object","properties":{"shape":{"type":"string","enum":["square","isometric","staggered","hexagonal","brick"],"description":"square, isometric, staggered, hexagonal or brick (left out: the map in front's shape)."},"stagger":{"type":"string","enum":["rows","columns"],"description":"Hexagonal and brick: rows shifted or columns."},"tile_w":{"type":"integer","minimum":2,"maximum":256,"description":"Tile width in pixels."},"tile_h":{"type":"integer","minimum":2,"maximum":256,"description":"Tile height in pixels."},"hex_side":{"type":"integer","minimum":0,"maximum":256,"description":"Hexagonal: the straight edge's length in pixels (left out: half the tile)."},"count":{"type":"integer","minimum":1,"maximum":4096,"description":"How many tiles. Default: 64."},"columns":{"type":"integer","minimum":1,"maximum":256,"description":"Tiles across. Default: 8."}},"required":[],"additionalProperties":false}},
{"name":"terrain.list","description":"List terrain sets. The tile set's terrain sets (on a map, the active layer's tile set): a line each, number, name, kind, its terrains (1 up) and how many tiles take part. (Changes nothing.)","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"terrain.new","description":"New terrain set. Makes a terrain set on the tile set (on a map, the active layer's), and chooses it.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Its name. Default: Terrains."},"kind":{"type":"string","enum":["corner","edge","mixed"],"description":"corner: transitions (16 tiles); edge: paths, roads, fences (16); mixed: the 47-tile blob set. Default: corner."},"terrains":{"type":"string","description":"Its terrains' names, joined by commas. Default: Grass."}},"required":[],"additionalProperties":false}},
{"name":"terrain.remove","description":"Remove a terrain set. Takes a terrain set away from the tile set.","inputSchema":{"type":"object","properties":{"set":{"type":"string","description":"The terrain set: its name or number from 0 (left out: the one chosen in Terrains)."}},"required":[],"additionalProperties":false}},
{"name":"terrain.layout","description":"Set up terrain tiles from a layout. Sets the terrains of 16 or 47 tiles one after another, laid out in a ready-made order, terrain a over b (b none: empty).","inputSchema":{"type":"object","properties":{"set":{"type":"string","description":"The terrain set: its name or number from 0 (left out: the one chosen in Terrains)."},"layout":{"type":"string","enum":["corner16","edge16","blob47"],"description":"corner16: tile n has terrain a at the corners of n's bits (1 top-right, 2 bottom-right, 4 bottom-left, 8 top-left); edge16: n's bits are the sides (1 top, 2 right, 4 bottom, 8 left); blob47: the 47 blob masks in order, smallest first. Default: corner16."},"first":{"type":"integer","minimum":0,"maximum":1.04857e+06,"description":"The first tile's number. Default: 0."},"a":{"type":"string","description":"The terrain (name or number from 1). Default: 1."},"b":{"type":"string","description":"The other terrain (or none). Default: none."}},"required":[],"additionalProperties":false}},
{"name":"terrain.tile","description":"Set a tile's terrains. Which terrain is at each of a tile's 8 places, in Tiled's order: top, top-right, right, bottom-right, bottom, bottom-left, left, top-left; numbers from 1 (0 none), joined by commas. Places the set's kind doesn't use are kept as 0. places left out takes the tile out of the set.","inputSchema":{"type":"object","properties":{"set":{"type":"string","description":"The terrain set: its name or number from 0 (left out: the one chosen in Terrains)."},"tile":{"type":"integer","minimum":0,"maximum":1.04857e+06,"description":"The tile's number."},"places":{"type":"string","description":"8 numbers, joined by commas."}},"required":["tile"],"additionalProperties":false}},
{"name":"terrain.paint","description":"Paint a terrain. Paints a terrain into a cell, or every cell of a rectangle, of the active map layer; the tiles there and round about are chosen from the set (one undo step; with cells selected, only those change). terrain none takes it away.","inputSchema":{"type":"object","properties":{"set":{"type":"string","description":"The terrain set: its name or number from 0 (left out: the one chosen in Terrains)."},"terrain":{"type":"string","description":"The terrain: its name, or number from 1 (none: erase)."},"x":{"type":"integer","minimum":0,"maximum":65535,"description":"Column."},"y":{"type":"integer","minimum":0,"maximum":65535,"description":"Row."},"w":{"type":"integer","minimum":1,"maximum":65535,"description":"Columns wide. Default: 1."},"h":{"type":"integer","minimum":1,"maximum":65535,"description":"Rows high. Default: 1."}},"required":["terrain","x","y"],"additionalProperties":false}},
{"name":"block.make","description":"Make a block map. Makes the active map layer a block map: what's painted cut into blocks of w x h cells, alike ones made one block (mirrored ones too, with flips; ones differing in at most `spots` cells too, those becoming spot changes). The map's cells don't change. On a block map already: its blocks found afresh.","inputSchema":{"type":"object","properties":{"w":{"type":"integer","minimum":1,"maximum":256,"description":"Block width in cells. Default: 2."},"h":{"type":"integer","minimum":1,"maximum":256,"description":"Block height in cells. Default: 2."},"flips":{"type":"boolean","description":"Mirrored blocks are the same block. Default: true."},"palettes":{"type":"boolean","description":"Blocks in other palette banks are the same block, placed with a palette add. Default: false."},"spots":{"type":"integer","minimum":0,"maximum":65535,"description":"Cells a placement may differ from its block by. Default: 0."}},"required":[],"additionalProperties":false}},
{"name":"block.clear","description":"Ordinary layer. The active layer stops being a block map (its cells stay as they are).","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"block.info","description":"About the block map. The active layer's blocks: their size, how many, placements, spot changes, and the bytes they take against the flat map. (Changes nothing.)","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"block.place","description":"Place a block. Places a block at placement (x, y) (in blocks, not cells: x 3 is cells 3 * the block width on), with its flips and palette add; its cells are written (spot changes there go). block -1: the placement becomes plain cells. With chunk: places chunk `block` at chunk placement (x, y) instead (in chunks), its blocks and their cells written.","inputSchema":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":65535,"description":"Placement across."},"y":{"type":"integer","minimum":0,"maximum":65535,"description":"Placement down."},"block":{"type":"integer","minimum":-1,"maximum":1e+06,"description":"The block's number (-1: none)."},"flipx":{"type":"boolean","description":"Mirrored across. Default: false."},"flipy":{"type":"boolean","description":"Mirrored down. Default: false."},"palette":{"type":"integer","minimum":0,"maximum":255,"description":"Palette add. Default: 0."},"w":{"type":"integer","minimum":1,"maximum":65535,"description":"Placements wide (the same block in each). Default: 1."},"h":{"type":"integer","minimum":1,"maximum":65535,"description":"Placements high. Default: 1."},"attr":{"type":"integer","minimum":0,"maximum":255,"description":"The placement's attributes (Sonic: a block's solidity in its chunk, a chunk's loop flag). Default: 0."},"chunk":{"type":"boolean","description":"Place a chunk (x, y, w and h in chunks). Default: false."}},"required":["x","y","block"],"additionalProperties":false}},
{"name":"block.break","description":"Break blocks into cells. The placements in a rectangle (in blocks) become plain cells; the cells stay as they are.","inputSchema":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":65535,"description":"Placement across."},"y":{"type":"integer","minimum":0,"maximum":65535,"description":"Placement down."},"w":{"type":"integer","minimum":1,"maximum":65535,"description":"Placements wide. Default: 1."},"h":{"type":"integer","minimum":1,"maximum":65535,"description":"Placements high. Default: 1."}},"required":["x","y"],"additionalProperties":false}},
{"name":"block.from_cells","description":"New block from cells. A new block from the active layer's cells at cell (x, y) (a block's size of them, snapped to its placement), placed there. Returns its number.","inputSchema":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":65535,"description":"Cell across."},"y":{"type":"integer","minimum":0,"maximum":65535,"description":"Cell down."}},"required":["x","y"],"additionalProperties":false}},
{"name":"block.set","description":"Change a block's cell. Changes cell (x, y) of a block itself: every placement of it changes, except where they have spot changes.","inputSchema":{"type":"object","properties":{"block":{"type":"integer","minimum":0,"maximum":1e+06,"description":"The block's number."},"x":{"type":"integer","minimum":0,"maximum":255,"description":"Cell across in the block."},"y":{"type":"integer","minimum":0,"maximum":255,"description":"Cell down in the block."},"tile":{"type":"integer","minimum":-1,"maximum":1.04857e+06,"description":"The tile (-1: empty)."},"flipx":{"type":"boolean","description":"Mirrored across. Default: false."},"flipy":{"type":"boolean","description":"Mirrored down. Default: false."},"palette":{"type":"integer","minimum":0,"maximum":255,"description":"Palette bank. Default: 0."},"attr":{"type":"integer","minimum":0,"maximum":255,"description":"Attributes. Default: 0."}},"required":["block","x","y","tile"],"additionalProperties":false}},
{"name":"block.export","description":"Export block map. Writes the active layer's blocks, layout and spot changes as JSON (documented in the file), for game code.","inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"The .json file."}},"required":["path"],"additionalProperties":false}},
{"name":"block.chunks","description":"Group blocks into chunks. Groups the active block map's blocks into chunks of w x h blocks (Sonic's 16 x 16 and 8 x 8, Mega Man's 2 x 2): alike areas made one chunk (mirrored ones too, with flips; in other palettes too, with palettes; ones differing in at most `spots` blocks too). The cells and the block placements don't change; the layout then places chunks.","inputSchema":{"type":"object","properties":{"w":{"type":"integer","minimum":1,"maximum":256,"description":"Chunk width in blocks. Default: 8."},"h":{"type":"integer","minimum":1,"maximum":256,"description":"Chunk height in blocks. Default: 8."},"flips":{"type":"boolean","description":"Mirrored chunks are the same chunk. Default: false."},"palettes":{"type":"boolean","description":"Chunks in other palette banks are the same chunk, placed with a palette add. Default: false."},"spots":{"type":"integer","minimum":0,"maximum":65535,"description":"Blocks a chunk placement may differ from its chunk by. Default: 0."}},"required":[],"additionalProperties":false}},
{"name":"block.unchunk","description":"Ungroup chunks. The active block map forgets its chunks: its blocks are placed as they are.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"block.format","description":"Block map format. Sets the machine the active layer's blocks are for (its sizes, limits and files: block.check, block.export_format, block.import_format). The sizes, limits and compression given change the preset's (making it custom).","inputSchema":{"type":"object","properties":{"preset":{"type":"string","enum":["free","sonic1","sonic2","sonic3k","nes","nes32","smw","zelda","metroid","custom","saved"],"description":"free (no machine), sonic1, sonic2, sonic3k, nes (Super Mario Bros. style metatiles), nes32 (Mega Man style 32 x 32), smw (SNES Map16), zelda (screens of columns), metroid (rooms of structures), custom (the current options, to change) or saved (one saved with block.format_save: give its name)."},"name":{"type":"string","description":"preset saved: the saved format's name."},"blockw":{"type":"integer","minimum":1,"maximum":256,"description":"Block width in cells."},"blockh":{"type":"integer","minimum":1,"maximum":256,"description":"Block height in cells."},"chunkw":{"type":"integer","minimum":0,"maximum":256,"description":"Chunk width in blocks (0: none)."},"chunkh":{"type":"integer","minimum":0,"maximum":256,"description":"Chunk height in blocks."},"banks":{"type":"integer","minimum":0,"maximum":256,"description":"Palette banks (0: any)."},"maxblocks":{"type":"integer","minimum":0,"maximum":1.67772e+07,"description":"Most blocks (0: any)."},"maxchunks":{"type":"integer","minimum":0,"maximum":1.67772e+07,"description":"Most chunks (0: any)."},"pack":{"type":"string","enum":["none","kosinski","moduled"],"description":"Compress the files: none, kosinski or moduled (moduled Kosinski, Sonic 3 & Knuckles); left out: as the preset has them."}},"required":["preset"],"additionalProperties":false}},
{"name":"block.format_save","description":"Save block map format. Saves the active layer's format, with all its options, under a name: it's then in the Machine drop-down (and block.format{preset = \"saved\", name}) for every map. A name already saved is replaced.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"The format's name."}},"required":["name"],"additionalProperties":false}},
{"name":"block.format_forget","description":"Forget a saved block map format. Takes a saved format out of the Machine drop-down (maps already using it keep its options).","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"The format's name."}},"required":["name"],"additionalProperties":false}},
{"name":"block.check","description":"Check the block map. What in the active block map doesn't fit its format (block.format): one line each, or \"It all fits.\" (Changes nothing.)","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"block.export_format","description":"Export block map for the machine. Writes the active block map as its format's files, beside `path` (a name without an extension): path.blocks.bin (the cells as the machine's tile words), path.chunks.bin (the chunks' block words), path.layout.bin, and for one-palette blocks path.palettes.bin (Zelda: path.columns.bin, .column_dirs.bin and .screens.bin for the chunks; Metroid: path.structures.bin, .rooms.bin and their _ptrs files, the layout the world map). bg: another layer (from 0) using the same blocks and chunks, written as the background (Sonic 2: each layout row's second half; otherwise path.bg.layout.bin).","inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"The files' name, without an extension."},"bg":{"type":"integer","minimum":0,"maximum":255,"description":"The background layer."}},"required":["path"],"additionalProperties":false}},
{"name":"block.import_format","description":"Import block map from the machine. Reads a level in the active layer's format (block.format) from its files beside `path` (a name without an extension: path.blocks.bin, path.chunks.bin, path.layout.bin, path.palettes.bin, decompressed as the format keeps them) into the active layer: its blocks, chunks and placements, and every cell, the layer sized to the layout. The map's tile set should hold the level's tiles (in order). bg: a layer (from 0) to fill with the level's background too (Sonic).","inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"The files' name, without an extension."},"across":{"type":"integer","minimum":1,"maximum":65535,"description":"The layout's width in placements, for layouts that don't keep it (a byte or word each)."},"bg":{"type":"integer","minimum":0,"maximum":255,"description":"The layer for the background."}},"required":["path"],"additionalProperties":false}},
{"name":"block.open_level","description":"Open a game level. Opens a level kept as a game keeps it, from its files beside `path` (a name without an extension: path.blocks.bin, path.chunks.bin, path.layout.bin, and path.art.bin and path.palette.bin if they're there): its art as a tile set picture (without art, each tile a plain square), and a map of its blocks and chunks drawn from it (with a background layer when the level has one).","inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"The files' name, without an extension."},"preset":{"type":"string","enum":["sonic1","sonic2","sonic3k","nes","nes32","smw","saved"],"description":"The level's format: sonic1, sonic2, sonic3k, nes, nes32, smw, or saved (one saved with block.format_save: give its name)."},"name":{"type":"string","description":"preset saved: the saved format's name."},"across":{"type":"integer","minimum":1,"maximum":65535,"description":"The layout's width, for layouts that don't keep it (a byte or word each)."}},"required":["path","preset"],"additionalProperties":false}},
{"name":"block.share","description":"Share blocks with a layer. Makes another layer (from 0) a block map using the active layer's blocks (and chunks): its placements found with them, any new blocks or chunks it needs added to both layers' sets, so the two can be written together (a level's foreground and background).","inputSchema":{"type":"object","properties":{"layer":{"type":"integer","minimum":0,"maximum":255,"description":"The other layer."}},"required":["layer"],"additionalProperties":false}},
{"name":"map.shape","description":"Map shape. Makes the map in front square, isometric, staggered or hexagonal (all its layers; the cells stay as they are, drawn in the new shape). As Tiled's orientations, stagger axis and index, and hex side length.","inputSchema":{"type":"object","properties":{"shape":{"type":"string","enum":["square","isometric","staggered","hexagonal","brick"],"description":"square, isometric (diamonds), staggered (isometric, every other row or column shifted), hexagonal, or brick (rectangles, every other row or column shifted half: a hex map whose straight edges are the whole tile) (left out: as it is, or square)."},"stagger":{"type":"string","enum":["rows","columns"],"description":"Staggered and hexagonal: rows shifted (pointy-topped hexes) or columns (flat-topped)."},"shifted":{"type":"string","enum":["odd","even"],"description":"Staggered and hexagonal: the odd rows (or columns) shifted, or the even ones."},"hex_side":{"type":"integer","minimum":0,"maximum":256,"description":"Hexagonal: the straight edge's length in pixels (left out: as it is, or half the tile)."}},"required":[],"additionalProperties":false}},
{"name":"map.new","description":"New tile map. A new, empty tile map painted from the active picture's tiles - or, on a map, from that map's tile set (several maps can share one tile set).","inputSchema":{"type":"object","properties":{"width":{"type":"integer","minimum":1,"maximum":65535,"description":"Columns (tiles across). Default: 32."},"height":{"type":"integer","minimum":1,"maximum":65535,"description":"Rows (tiles down). Default: 24."},"tile_w":{"type":"integer","minimum":1,"maximum":256,"description":"Tile width in pixels (left out: the map's, or the picture's grid)."},"tile_h":{"type":"integer","minimum":1,"maximum":256,"description":"Tile height in pixels (left out: the map's, or the picture's grid)."},"shape":{"type":"string","enum":["square","isometric","staggered","hexagonal","brick"],"description":"square, isometric (diamonds), staggered (isometric, every other row or column shifted), hexagonal, or brick (rectangles, every other row or column shifted half: a hex map whose straight edges are the whole tile) (left out: as it is, or square)."},"stagger":{"type":"string","enum":["rows","columns"],"description":"Staggered and hexagonal: rows shifted (pointy-topped hexes) or columns (flat-topped)."},"shifted":{"type":"string","enum":["odd","even"],"description":"Staggered and hexagonal: the odd rows (or columns) shifted, or the even ones."},"hex_side":{"type":"integer","minimum":0,"maximum":256,"description":"Hexagonal: the straight edge's length in pixels (left out: as it is, or half the tile)."}},"required":[],"additionalProperties":false}},
{"name":"script.run","description":"Run a script. Runs a Luau script file: its commands on the active picture, as one undo step.","inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"The script (.luau)."}},"required":["path"],"additionalProperties":false}},
{"name":"script.console","description":"Script console. Opens the script console, to write and run Luau scripts.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"model.open","description":"Open a 3D model. Opens a 3D model (STL, OBJ with its MTL, glTF / GLB, MagicaVoxel .vox) to render as sprites: File > 3D model to sprites shows it.","inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"The model file."}},"required":["path"],"additionalProperties":false}},
{"name":"model.info","description":"About the 3D model. Its parts, colours and animations, and how it's being rendered. (Changes nothing.)","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"model.view","description":"3D model: view. How the model is seen: the frame size, directions, angles, zoom and perspective (only those given change).","inputSchema":{"type":"object","properties":{"width":{"type":"integer","minimum":8,"maximum":512,"description":"Frame width in pixels."},"height":{"type":"integer","minimum":8,"maximum":512,"description":"Frame height in pixels."},"directions":{"type":"string","enum":["1","4","8","16"],"description":"Frames turning round the model."},"start":{"type":"number","minimum":-360,"maximum":360,"description":"The first frame's angle, degrees (0: its front towards you)."},"pitch":{"type":"number","minimum":-10,"maximum":90,"description":"Looking down on it, degrees (0 level, 90 from above)."},"zoom":{"type":"number","minimum":0.1,"maximum":8,"description":"Zoom (1 fits it)."},"perspective":{"type":"boolean","description":"Perspective, or straight on (orthographic)."}},"required":[],"additionalProperties":false}},
{"name":"model.light","description":"3D model: light. Where the light comes from and how much light is everywhere (only those given change).","inputSchema":{"type":"object","properties":{"yaw":{"type":"number","minimum":-180,"maximum":180,"description":"From, degrees round (relative to the view)."},"pitch":{"type":"number","minimum":-10,"maximum":90,"description":"Its height, degrees."},"ambient":{"type":"number","minimum":0,"maximum":1,"description":"Light everywhere, 0 to 1."}},"required":[],"additionalProperties":false}},
{"name":"model.style","description":"3D model: style. Dithering, the outline and the palette (only those given change).","inputSchema":{"type":"object","properties":{"dither":{"type":"boolean","description":"Ordered dithering between the shades."},"outline":{"type":"string","enum":["none","darkest","left"],"description":"An outline round it."},"palette":{"type":"string","enum":["model","picture"],"description":"The picture in front's palette, or one made for the model."},"colours":{"type":"integer","minimum":4,"maximum":256,"description":"Colours in a palette made for the model."}},"required":[],"additionalProperties":false}},
{"name":"model.animation","description":"3D model: animation. Which of a glTF model's animations to render, in how many frames.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Its name or number (model.info lists them); \"none\" for the model as it stands."},"frames":{"type":"integer","minimum":1,"maximum":64,"description":"Frames for each direction."},"loop":{"type":"boolean","description":"It goes round (the last moment isn't made again)."}},"required":[],"additionalProperties":false}},
{"name":"model.colour","description":"3D model: a colour. Changes one of the model's colours (its materials: model.info lists them).","inputSchema":{"type":"object","properties":{"material":{"type":"string","description":"Its name or number."},"colour":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$","description":"The new colour."}},"required":["material","colour"],"additionalProperties":false}},
{"name":"model.pose","description":"3D model: pose a part. Moves, turns (round its own middle) or scales one of the model's parts - an arm raised, a head turned. What's given is set; the rest of its pose stays.","inputSchema":{"type":"object","properties":{"part":{"type":"string","description":"The part's name or number (model.info lists them)."},"x":{"type":"number","description":"Moved across (the model's units)."},"y":{"type":"number","description":"Moved up."},"z":{"type":"number","description":"Moved towards you."},"yaw":{"type":"number","description":"Turned round up, degrees."},"pitch":{"type":"number","description":"Tipped forward, degrees."},"roll":{"type":"number","description":"Rolled, degrees."},"scale":{"type":"number","minimum":0.01,"maximum":100,"description":"Its size (1 as it is)."},"pivot":{"type":"string","enum":["middle","top","bottom"],"description":"What it turns round: its middle, top (a shoulder, a hip) or bottom."}},"required":["part"],"additionalProperties":false}},
{"name":"model.pose_reset","description":"3D model: unpose. Puts a part (or every part) back as the model has it.","inputSchema":{"type":"object","properties":{"part":{"type":"string","description":"The part's name or number (left out: every part)."}},"required":[],"additionalProperties":false}},
{"name":"model.frames","description":"3D model to frames. Renders the model with the settings now into a new picture: a frame for each direction (and each moment of its animation).","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"model.stamp","description":"3D model into the picture. Renders the model (its first frame: the start angle, the animation's first moment) in the picture in front's colours, onto a new layer at x, y (its top-left): a 3D object put into a scene.","inputSchema":{"type":"object","properties":{"x":{"type":"integer","description":"Where its left edge goes."},"y":{"type":"integer","description":"Where its top goes."}},"required":[],"additionalProperties":false}},
{"name":"model.layer","description":"3D model on a live 3D layer. Puts the model itself into the picture in front, on a new layer (its top-left at x, y; left out: centred), with the settings now. It stays 3D: model.object and the Layers panel change how it's turned, lit and posed; flattening the layer makes it pixels.","inputSchema":{"type":"object","properties":{"x":{"type":"integer","description":"Where its left edge goes (left out: centred)."},"y":{"type":"integer","description":"Where its top goes (left out: centred)."}},"required":[],"additionalProperties":false}},
{"name":"model.object","description":"Live 3D object: change it. Turns, lights, animates or moves a live 3D object (model.layer) in the picture in front: the one on the active layer (the topmost, or number n from the bottom). Only those given change; calls in a row are one undo step. A script calling it each frame animates it.","inputSchema":{"type":"object","properties":{"n":{"type":"integer","minimum":1,"maximum":4096,"description":"Which model object on the layer, 1 the bottom (left out: the top one)."},"x":{"type":"integer","description":"Its left edge."},"y":{"type":"integer","description":"Its top."},"width":{"type":"integer","minimum":1,"maximum":2048,"description":"Its box, pixels."},"height":{"type":"integer","minimum":1,"maximum":2048,"description":"Its box, pixels."},"yaw":{"type":"number","minimum":-100000,"maximum":100000,"description":"Turned round, degrees (0: its front towards you)."},"pitch":{"type":"number","minimum":-10,"maximum":90,"description":"Looking down on it, degrees."},"zoom":{"type":"number","minimum":0.1,"maximum":8,"description":"Zoom (1 fits it)."},"light_yaw":{"type":"number","minimum":-180,"maximum":180,"description":"The light from, degrees round."},"light_pitch":{"type":"number","minimum":-10,"maximum":90,"description":"The light's height, degrees."},"ambient":{"type":"number","minimum":0,"maximum":1,"description":"Light everywhere, 0 to 1."},"animation":{"type":"integer","minimum":0,"maximum":1000,"description":"Its animation, 1 the first (0: none, as it stands)."},"time":{"type":"number","minimum":0,"maximum":100000,"description":"The animation's moment, seconds (it loops)."},"outline":{"type":"integer","minimum":-1,"maximum":255,"description":"A colour number round it (-1: none)."},"dither":{"type":"boolean","description":"Dither between shades."},"perspective":{"type":"boolean","description":"Perspective, or straight on."},"visible":{"type":"boolean","description":"Shown."}},"required":[],"additionalProperties":false}},
{"name":"model.object_pose","description":"Live 3D object: pose a part. Poses one part of a live 3D object (model.layer) on the active layer: moved, turned, scaled. What's given is set; the rest of its pose stays. Calls in a row are one undo step, so a script can animate an arm frame by frame.","inputSchema":{"type":"object","properties":{"part":{"type":"string","description":"The part's name or number (1 the first)."},"n":{"type":"integer","minimum":1,"maximum":4096,"description":"Which model object on the layer, 1 the bottom (left out: the top one)."},"x":{"type":"number","description":"Moved across (the model's units)."},"y":{"type":"number","description":"Moved up."},"z":{"type":"number","description":"Moved towards the front."},"yaw":{"type":"number","description":"Turned round up, degrees."},"pitch":{"type":"number","description":"Tipped forward, degrees."},"roll":{"type":"number","description":"Rolled, degrees."},"scale":{"type":"number","minimum":0.01,"maximum":100,"description":"Its size (1 as it is)."},"pivot":{"type":"string","enum":["middle","top","bottom"],"description":"What it turns round: its middle, top (a shoulder, a hip) or bottom."},"reset":{"type":"boolean","description":"Put the part back as the model has it first."}},"required":["part"],"additionalProperties":false}},
{"name":"model.texture","description":"3D model: a texture. Puts a texture on one of the model's colours (its materials: model.info lists them): the picture in front as it is now (its selection, if it has one) - paint a texture in Deluxe Pixel - or an image file; or takes it off. Models without texture coordinates get a box projection.","inputSchema":{"type":"object","properties":{"material":{"type":"string","description":"The material's name or number."},"from":{"type":"string","enum":["picture","file","none"],"description":"Where the texture comes from. Default: picture."},"path":{"type":"string","description":"The image file (from = file)."}},"required":["material"],"additionalProperties":false}},
{"name":"voxel.open_layers","description":"Open voxels as layers. Opens a MagicaVoxel .vox model as a new picture, a layer for each slice (the bottom layer the lowest; up to 32), in its colours. (Opening a .vox otherwise shows it as a 3D model.)","inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"The .vox file."}},"required":["path"],"additionalProperties":false}},
{"name":"voxel.save_layers","description":"Save layers as voxels. Saves the picture in front's layers (those shown) as a MagicaVoxel .vox model, a layer a slice (the bottom layer the lowest), up to 256 x 256: palette pictures, the colours kept.","inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"The .vox file to write."}},"required":["path"],"additionalProperties":false}},
{"name":"voxel.layers_to_model","description":"Layers as a 3D model. The picture in front's layers (those shown) as a voxel model in the 3D window, a layer a slice: turn and light it, render frames, or put it on a live 3D layer.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"tiles.blocks3d","description":"3D cubes from tiles. Each tile of the picture in front on the top and sides of a 3D cube, rendered in the same colours into a new picture of cubes, in the same order: isometric (2:1) or three-quarter view tiles.","inputSchema":{"type":"object","properties":{"tile_width":{"type":"integer","minimum":1,"maximum":512,"description":"The tiles' width. Default: 16."},"tile_height":{"type":"integer","minimum":1,"maximum":512,"description":"The tiles' height. Default: 16."},"view":{"type":"string","enum":["isometric","three-quarter","custom"],"description":"How the cubes are seen. Default: isometric."},"yaw":{"type":"number","minimum":-180,"maximum":180,"description":"Custom view: turned, degrees. Default: 45."},"pitch":{"type":"number","minimum":0,"maximum":90,"description":"Custom view: looking down, degrees. Default: 30."},"height":{"type":"number","minimum":0.05,"maximum":8,"description":"The cube's height, as a fraction of its width. Default: 1."},"sides":{"type":"string","enum":["same","below","plain"],"description":"The sides' tile. Default: same."},"width":{"type":"integer","minimum":0,"maximum":1024,"description":"Each cube's cell width (0: automatic). Default: 0."},"cell_height":{"type":"integer","minimum":0,"maximum":1024,"description":"Each cube's cell height (0: automatic). Default: 0."},"outline":{"type":"integer","minimum":-1,"maximum":255,"description":"A colour number round each cube (-1: none). Default: -1."},"dither":{"type":"boolean","description":"Dither between shades."},"top_as_drawn":{"type":"boolean","description":"The top exactly as the tile, not shaded (the default)."}},"required":[],"additionalProperties":false}},
{"name":"sheet.open","description":"Open a sprite sheet. Opens a packed sprite sheet by its data file (Gideros .txt, TexturePacker JSON hash / array, Aseprite JSON, a libGDX .atlas, Unity .tpsheet, Godot SpriteFrames .tres, or a TexturePacker .tps project): the sheet picture, with each region as a sprite (walk_0001-style frames and Aseprite tags as animations).","inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"The data file or .tps."},"set":{"type":"boolean","description":"Open every sheet of its multipack set (name0.json, name1.json ... beside it). Default: false."}},"required":["path"],"additionalProperties":false}},
{"name":"sheet.nine","description":"Set 9-patch borders. Makes a sprite of the picture in front a 9-patch (9-slice): the borders in from each edge (of the whole sprite, before any trimming) that stay as drawn while the middle stretches. All 0 makes it an ordinary sprite again. They're saved with the sheet's data (TexturePacker JSON, Aseprite, libGDX, Unity).","inputSchema":{"type":"object","properties":{"sprite":{"type":"string","description":"The sprite's name."},"cel":{"type":"integer","minimum":-1,"maximum":65535,"description":"Which of its cels (from 0); -1: every one. Default: -1."},"left":{"type":"integer","minimum":0,"maximum":4096,"description":"Pixels in from the left. Default: 0."},"top":{"type":"integer","minimum":0,"maximum":4096,"description":"Pixels in from the top. Default: 0."},"right":{"type":"integer","minimum":0,"maximum":4096,"description":"Pixels in from the right. Default: 0."},"bottom":{"type":"integer","minimum":0,"maximum":4096,"description":"Pixels in from the bottom. Default: 0."}},"required":["sprite"],"additionalProperties":false}},
{"name":"sheet.save","description":"Save a sprite sheet's data. Writes the picture in front's sprites as a sheet's data file, and the sheet as a PNG beside it. A sheet of a multipack set saves the whole set (phaser and libgdx: one data file; the others: name0, name1 ...).","inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"The data file to write."},"format":{"type":"string","enum":["gideros","json-hash","json-array","aseprite","libgdx","unity","godot","phaser","tps"],"description":"The data format (tps: a TexturePacker project, with a JSON hash beside it). Default: gideros."},"png":{"type":"boolean","description":"Also save the sheet picture as a PNG beside it. Default: true."}},"required":["path"],"additionalProperties":false}},
{"name":"sheet.pack","description":"Pack a sprite sheet. Packs the picture in front's frames, layers or sprites, or a folder of pictures, into a new sheet picture (its regions as sprites).","inputSchema":{"type":"object","properties":{"from":{"type":"string","enum":["frames","layers","sprites","folder"],"description":"What to pack. Default: frames."},"folder":{"type":"string","description":"The folder (from = folder)."},"trim":{"type":"boolean","description":"Trim see-through edges. Default: true."},"aliases":{"type":"boolean","description":"Identical sprites stored once. Default: true."},"padding":{"type":"integer","minimum":0,"maximum":64,"description":"Pixels between sprites. Default: 1."},"border":{"type":"integer","minimum":0,"maximum":64,"description":"Pixels round the sheet. Default: 0."},"extrude":{"type":"integer","minimum":0,"maximum":8,"description":"Edge pixels repeated round each sprite. Default: 0."},"pot":{"type":"boolean","description":"A power-of-two size. Default: true."},"square":{"type":"boolean","description":"Square. Default: false."},"max":{"type":"integer","minimum":16,"maximum":16384,"description":"The largest the sheet may be, each way. Default: 2048."},"rotate":{"type":"boolean","description":"Sprites may be turned 90 degrees clockwise to fit better. Default: false."},"multipack":{"type":"boolean","description":"More than one sheet when they don't fit on one. Default: false."},"polygons":{"type":"boolean","description":"Packed by their outlines instead of their rectangles (no rotate or extrude; TexturePacker JSON only). Default: false."}},"required":[],"additionalProperties":false}},
{"name":"map.object_layer","description":"New object layer. A new object layer above the active map layer (it becomes the active one): game objects - rectangles, ellipses, points, polygons, polylines, tiles placed anywhere, text - with names, classes and properties, shown over the map and saved with it (and in Tiled's maps as an object group).","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Its name (left out: Objects 1, 2...)."},"colour":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$","description":"The colour its objects are drawn in."}},"required":[],"additionalProperties":false}},
{"name":"map.image_layer","description":"New image layer. A new image layer above the active map layer: one picture (an open one by its name, or a file, which is opened) as a background or foreground, in its own colours, scrolling, linking and repeating (across, down or both) as any layer does; Tiled's image layers.","inputSchema":{"type":"object","properties":{"picture":{"type":"string","description":"An open picture's name (as on its tab)."},"path":{"type":"string","description":"Or a picture file to open."},"repeat_x":{"type":"boolean","description":"Repeat it across. Default: false."},"repeat_y":{"type":"boolean","description":"Repeat it down. Default: false."},"name":{"type":"string","description":"The layer's name (left out: the picture's)."}},"required":[],"additionalProperties":false}},
{"name":"map.object_go","description":"Go to an object. Chooses an object (its layer becomes the active one) and brings it into view.","inputSchema":{"type":"object","properties":{"id":{"type":"integer","minimum":1,"description":"The object."}},"required":["id"],"additionalProperties":false}},
{"name":"map.template_make","description":"Make a template. Keeps an object as a template of the map: copies of it can be placed anywhere (map.template_place), and changing the template (map.template_set) changes every copy except what a copy has changed itself. The object becomes its first copy. Returns the template's id.","inputSchema":{"type":"object","properties":{"object":{"type":"integer","minimum":1,"description":"The object."},"name":{"type":"string","description":"The template's name (left out: the object's)."}},"required":["object"],"additionalProperties":false}},
{"name":"map.template_place","description":"Place a template's copy. Places a copy of a template on an object layer: it follows the template in everything but its place (and what it's given its own: map.object). Returns its id.","inputSchema":{"type":"object","properties":{"template":{"type":"integer","minimum":1,"description":"The template."},"x":{"type":"number","description":"Across, in the layer's pixels. Default: 0."},"y":{"type":"number","description":"Down (a tile's: its bottom-left). Default: 0."},"layer":{"type":"integer","minimum":0,"maximum":255,"description":"The object layer (from 0; left out: the active one)."}},"required":["template"],"additionalProperties":false}},
{"name":"map.template_set","description":"Change a template. Changes a template, and with it every copy (except what a copy has changed itself). What's left out stays as it is.","inputSchema":{"type":"object","properties":{"template":{"type":"integer","minimum":1,"description":"The template."},"name":{"type":"string","description":"Its name."},"class":{"type":"string","description":"Its class."},"w":{"type":"number","minimum":0,"maximum":1e+07,"description":"Width."},"h":{"type":"number","minimum":0,"maximum":1e+07,"description":"Height."},"rotation":{"type":"number","minimum":-360,"maximum":360,"description":"Turned, degrees."},"tile":{"type":"integer","minimum":0,"description":"Tile templates: the tile."},"text":{"type":"string","description":"Text templates: the words."},"visible":{"type":"boolean","description":"Shown."}},"required":["template"],"additionalProperties":false}},
{"name":"map.templates","description":"List templates. The map's object templates: a line each, id shape \"name\" class, size, and how many copies. (Changes nothing.)","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"map.object_reset","description":"Back to the template. A template's copy as the template is again: what it changed is dropped (its place kept).","inputSchema":{"type":"object","properties":{"id":{"type":"integer","minimum":1,"description":"The copy."}},"required":["id"],"additionalProperties":false}},
{"name":"map.object_detach","description":"Cut loose from the template. A template's copy made an ordinary object with what it has now: the template no longer changes it.","inputSchema":{"type":"object","properties":{"id":{"type":"integer","minimum":1,"description":"The copy."}},"required":["id"],"additionalProperties":false}},
{"name":"map.object","description":"Place or change an object. Places an object on an object layer, or changes one (give its id): what's left out stays as it is (a new one: a rectangle one cell big). Places are the layer's pixels: a rectangle's, ellipse's or text's top-left, a point itself, a polygon's first point (its points from there), a tile object's bottom-left. Returns its id.","inputSchema":{"type":"object","properties":{"id":{"type":"integer","minimum":1,"description":"The object to change (left out: a new one)."},"layer":{"type":"integer","minimum":0,"maximum":255,"description":"A new one's layer (from 0; left out: the active one)."},"shape":{"type":"string","enum":["rectangle","ellipse","point","polygon","polyline","tile","text"],"description":"rectangle, ellipse, point, polygon, polyline, tile or text (a new object; left out: a rectangle)."},"name":{"type":"string","description":"Its name."},"class":{"type":"string","description":"Its class (what kind of thing: Enemy, Door...)."},"x":{"type":"number","description":"Across, in the layer's pixels."},"y":{"type":"number","description":"Down."},"w":{"type":"number","minimum":0,"maximum":1e+07,"description":"Width."},"h":{"type":"number","minimum":0,"maximum":1e+07,"description":"Height."},"rotation":{"type":"number","minimum":-360,"maximum":360,"description":"Turned clockwise, degrees."},"points":{"type":"string","description":"Polygons and polylines: \"x,y x,y ...\" from its place."},"tile":{"type":"integer","minimum":0,"description":"Tile objects: the tile's number."},"flip_x":{"type":"boolean","description":"Tile objects: mirrored."},"flip_y":{"type":"boolean","description":"Tile objects: upside down."},"text":{"type":"string","description":"Text objects: the words."},"size":{"type":"integer","minimum":4,"maximum":512,"description":"Text objects: pixels high."},"visible":{"type":"boolean","description":"Shown."}},"required":[],"additionalProperties":false}},
{"name":"map.object_delete","description":"Delete an object. Removes an object from its object layer.","inputSchema":{"type":"object","properties":{"id":{"type":"integer","minimum":1,"description":"The object."}},"required":["id"],"additionalProperties":false}},
{"name":"map.objects","description":"List objects. The objects on an object layer (or every one): a line each, id shape \"name\" class at x,y size w x h (and its tile, points or text). (Changes nothing.)","inputSchema":{"type":"object","properties":{"layer":{"type":"integer","minimum":0,"maximum":255,"description":"The layer (from 0; left out: every object layer)."}},"required":[],"additionalProperties":false}},
{"name":"tiles.animate","description":"Animate a tile. Makes a tile of the active map layer's tile set an animated tile (Tiled's tile animations): wherever it's on a map, it shows the frames in turn, each for its time, round and round. Give frames as \"tile:ms, tile:ms, ...\", or count: that many tiles from it on. Replaces any animation it had. One undo step (on the tile set).","inputSchema":{"type":"object","properties":{"tile":{"type":"integer","minimum":0,"maximum":1.04858e+06,"description":"The tile animated (its number in the set)."},"frames":{"type":"string","description":"Its frames: \"12:100, 13:100, 14:200\" (a frame without :ms lasts ms)."},"count":{"type":"integer","minimum":2,"maximum":4096,"description":"Or this many tiles from it on (2 or more)."},"ms":{"type":"integer","minimum":1,"maximum":600000,"description":"How long each frame lasts when not given. Default: 150."}},"required":["tile"],"additionalProperties":false}},
{"name":"tiles.animation_remove","description":"Stop animating a tile. The tile shows just itself again (on every map using its tile set).","inputSchema":{"type":"object","properties":{"tile":{"type":"integer","minimum":0,"maximum":1.04858e+06,"description":"The animated tile's number."}},"required":["tile"],"additionalProperties":false}},
{"name":"tiles.animations","description":"List animated tiles. The active map layer's tile set's animated tiles, a line each: \"tile: frame:ms, frame:ms, ...\". (Changes nothing.)","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"tiles.animation_play","description":"Play animated tiles. Animated tiles play on every map (on), or each shows its own tile (off).","inputSchema":{"type":"object","properties":{"on":{"type":"boolean","description":"Play or stop. Default: true."},"restart":{"type":"boolean","description":"Every animation from its first frame. Default: false."}},"required":[],"additionalProperties":false}},
{"name":"tiles.random","description":"Random tiles. Sets the random tiles the map brush paints with (Tiled's random mode): every cell painted - brush, line, box, fill, Fill selection, map.set with random = true - is one of them, by weight, optionally mirrored or turned at random. Give tiles as \"3, 4, 5\" or with weights \"3:4, 4:1, 5:1\"; on = false turns it off (the brush paints as it is).","inputSchema":{"type":"object","properties":{"tiles":{"type":"string","description":"The tiles, \"3, 4, 5\" or \"3:4, 4:1\" (tile:weight). Left out: as they are."},"on":{"type":"boolean","description":"Paint random tiles (true) or not. Default: true."},"flip_x":{"type":"boolean","description":"Mirror across at random."},"flip_y":{"type":"boolean","description":"Mirror down at random."},"rotate":{"type":"boolean","description":"Turn a quarter at random (square tiles)."}},"required":[],"additionalProperties":false}},
{"name":"tiles.collision","description":"Set a tile's collision. Gives a tile of the active map layer's tile set collision shapes, in its own pixels (Tiled's tile collision editor): a ready-made shape (full, top_half, bottom_half, left_half, right_half, slope_up, slope_down, platform), boxes \"x, y, w, h; x, y, w, h\", or a polygon \"x, y, x, y, x, y...\". Replaces what it had unless add = true. Every cell holding the tile is solid there (turned and mirrored as the cell). Saved with the tile set, and in Tiled's maps and Godot's scenes. One undo step.","inputSchema":{"type":"object","properties":{"tile":{"type":"integer","minimum":0,"maximum":1.04858e+06,"description":"The tile's number in the set."},"preset":{"type":"string","description":"A ready-made shape: full, top_half, bottom_half, left_half, right_half, slope_up, slope_down, platform."},"boxes":{"type":"string","description":"Boxes: \"x, y, w, h\" each, separated by ;."},"polygon":{"type":"string","description":"A polygon's corners: \"x, y, x, y, x, y...\"."},"add":{"type":"boolean","description":"Add to the shapes it has (false: replace them). Default: false."}},"required":["tile"],"additionalProperties":false}},
{"name":"tiles.collision_clear","description":"Clear a tile's collision. The tile has no collision shapes (nothing solid).","inputSchema":{"type":"object","properties":{"tile":{"type":"integer","minimum":0,"maximum":1.04858e+06,"description":"The tile's number in the set."}},"required":["tile"],"additionalProperties":false}},
{"name":"tiles.collisions","description":"List tiles' collision. Each tile of the active map layer's tile set with collision shapes, a line each: its shapes in its pixels. (Changes nothing.)","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"map.collision_layer","description":"Make the map's collision an object layer. The active layer's collision, as an object layer above it: solid full cells merged into as few rectangles as can be, every other cell's shapes as they lie (turned and mirrored as the cell). For games that read a map's collision as objects (Tiled maps, Unity through SuperTiled2Unity). Square maps.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"The object layer's name. Default: Collision."}},"required":[],"additionalProperties":false}},
{"name":"map.automap","description":"Automap. Applies a rules map (another open map, by its name as on its tab) to the map in front, as Tiled's automapping: its layers input_<layer>, inputnot_<layer>, output_<layer> and output1_ ... (one chosen at random), each rule a group of touching cells, the rule tiles Empty, Ignore, NonEmpty, Other, Negate; its properties MatchOutsideMap, WrapBorder, OverflowBorder, MatchInOrder, ModX, ModY, OffsetX, OffsetY, Probability, Disabled; a rule_options object layer. One undo step. x, y, w, h: only rules touching that box of cells (as while drawing). It becomes the rules map the Tiles panel uses.","inputSchema":{"type":"object","properties":{"rules":{"type":"string","description":"The rules map's name (left out: the one chosen in the Tiles panel)."},"x":{"type":"integer","minimum":-65536,"maximum":65536,"description":"The box's left cell."},"y":{"type":"integer","minimum":-65536,"maximum":65536,"description":"Its top cell."},"w":{"type":"integer","minimum":1,"maximum":65536,"description":"Its width in cells."},"h":{"type":"integer","minimum":1,"maximum":65536,"description":"Its height in cells."},"while_drawing":{"type":"boolean","description":"Also apply the rules after every stroke on this map from now on."}},"required":[],"additionalProperties":false}},
{"name":"tiles.stamp_save","description":"Save a stamp. Keeps the map brush (picked up from a map, or a block of tiles) as a named stamp (Tiled's stamps), saved for every map in the person's own folder (stamps.json). A stamp of that name already: the brush replaces it.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Its name."}},"required":["name"],"additionalProperties":false}},
{"name":"tiles.stamp_add_variation","description":"Add a stamp variation. Adds the map brush to a stamp as another variation: wherever the stamp is placed, one of its variations is, at random (rock clusters, trees, cracks that don't repeat).","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"The stamp."}},"required":["name"],"additionalProperties":false}},
{"name":"tiles.stamp_use","description":"Use a stamp. Makes a saved stamp the map brush (with its variations, one at random per placement).","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"The stamp."}},"required":["name"],"additionalProperties":false}},
{"name":"tiles.stamp_delete","description":"Forget a stamp. Forgets a saved stamp.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"The stamp."}},"required":["name"],"additionalProperties":false}},
{"name":"tiles.stamps","description":"List stamps. The saved stamps: each one's name, size and how many variations.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"tiles.quick_stamp","description":"Quick stamp. Keeps the map brush as quick stamp 1-9 (as Ctrl+1-9 on a map), or with use = true makes quick stamp 1-9 the brush (as 1-9).","inputSchema":{"type":"object","properties":{"slot":{"type":"integer","minimum":1,"maximum":9,"description":"1 to 9."},"use":{"type":"boolean","description":"Bring it back (true) rather than keep the brush. Default: false."}},"required":["slot"],"additionalProperties":false}},
{"name":"map.brush","description":"Pick up a map brush. Makes the map brush the cells of a rectangle of the active map layer, as a right-drag on the map picks them up (then tiles.stamp_save keeps it, or tiles.quick_stamp).","inputSchema":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":65535,"description":"Column."},"y":{"type":"integer","minimum":0,"maximum":65535,"description":"Row."},"w":{"type":"integer","minimum":1,"maximum":256,"description":"Columns wide. Default: 1."},"h":{"type":"integer","minimum":1,"maximum":256,"description":"Rows high. Default: 1."}},"required":["x","y"],"additionalProperties":false}},
{"name":"map.layer_lock","description":"Lock a map layer. Locks a map layer (or unlocks it), so painting, filling, map.set and automapping leave it alone (Tiled's layer lock); saved with the map.","inputSchema":{"type":"object","properties":{"layer":{"type":"integer","minimum":0,"maximum":15,"description":"The layer (left out: the active one)."},"locked":{"type":"boolean","description":"Locked (true) or not. Default: true."}},"required":[],"additionalProperties":false}},
{"name":"map.focus","description":"Focus on the layer. Dims the map's other layers so the active one stands out (Ctrl+H on a map), or shows them as they are.","inputSchema":{"type":"object","properties":{"on":{"type":"boolean","description":"Focus (true) or not. Default: true."}},"required":[],"additionalProperties":false}},
{"name":"map.save_image","description":"Save the map as an image. Saves the map in front, or part of it, as a PNG of any size, as it's drawn: every chosen layer at its scroll (or laid flat), scaled up if asked; in the map's palette when one palette holds it, otherwise in full colour (layers in their own colours, see-through layers, palette banks past 255). It's written before the command returns.","inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"The PNG file."},"x":{"type":"integer","minimum":0,"maximum":65535,"description":"The part's first column (the active layer's cells). Left out, with y, w and h: the whole map."},"y":{"type":"integer","minimum":0,"maximum":65535,"description":"Its first row."},"w":{"type":"integer","minimum":1,"maximum":65535,"description":"Columns."},"h":{"type":"integer","minimum":1,"maximum":65535,"description":"Rows."},"selected":{"type":"boolean","description":"Only the selected cells (their rectangle; others left empty). Default: false."},"layers":{"type":"string","description":"\"visible\" (the default), \"active\", or layer numbers like \"0, 2\"."},"scale":{"type":"integer","minimum":1,"maximum":8,"description":"Each pixel as a block this big. Default: 1."},"flat":{"type":"boolean","description":"Laid flat: the layers unscrolled (no scroll, links, column scroll or copper). Default: false."},"view":{"type":"boolean","description":"What the view in front shows of the map. Default: false."},"anim_ms":{"type":"integer","minimum":0,"description":"Animated tiles: the frame they show this many milliseconds in. Default: 0."},"empty":{"type":"string","description":"Empty places: \"clear\" (see-through, the default) or \"colour\" (the see-through colour, solid)."},"colours":{"type":"string","description":"\"auto\" (a palette PNG when one palette holds it; the default) or \"full\" (always RGBA)."},"objects":{"type":"boolean","description":"Draw the chosen object layers' objects over it. Default: false."},"grid":{"type":"boolean","description":"Draw the active layer's cell grid over it. Default: false."},"numbers":{"type":"boolean","description":"Draw the active layer's tile numbers over it. Default: false."},"collisions":{"type":"boolean","description":"Draw the active layer's tiles' collision shapes over it. Default: false."}},"required":["path"],"additionalProperties":false}},
{"name":"map.to_picture","description":"Map to picture. Makes a new picture of the map in front, or part of it, as it's drawn (Tiles > Map to picture): up to 4,096 x 4,096 pixels, in the map's palette (maps one palette can't hold: map.save_image).","inputSchema":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":65535,"description":"The part's first column (the active layer's cells). Left out, with y, w and h: the whole map."},"y":{"type":"integer","minimum":0,"maximum":65535,"description":"Its first row."},"w":{"type":"integer","minimum":1,"maximum":65535,"description":"Columns."},"h":{"type":"integer","minimum":1,"maximum":65535,"description":"Rows."},"selected":{"type":"boolean","description":"Only the selected cells (their rectangle; others left empty). Default: false."},"layers":{"type":"string","description":"\"visible\" (the default), \"active\", or layer numbers like \"0, 2\"."},"scale":{"type":"integer","minimum":1,"maximum":8,"description":"Each pixel as a block this big. Default: 1."},"flat":{"type":"boolean","description":"Laid flat: the layers unscrolled (no scroll, links, column scroll or copper). Default: false."},"view":{"type":"boolean","description":"What the view in front shows of the map. Default: false."},"anim_ms":{"type":"integer","minimum":0,"description":"Animated tiles: the frame they show this many milliseconds in. Default: 0."}},"required":[],"additionalProperties":false}},
{"name":"target.add","description":"Add a machine target. Adds a machine target to the picture in front: a computer it's made for, shown as that machine would show it (fitted to its screen unless fit = false), kept up to date as the picture changes, and exported in its formats (target.export). Saved with the picture.","inputSchema":{"type":"object","properties":{"machine":{"type":"string","description":"The machine (a system profile's name, e.g. \"ZX Spectrum\", \"C64\", \"ST\")."},"name":{"type":"string","description":"The target's name (left out: the machine's, made unique)."},"mode":{"type":"string","description":"The screen mode (as the system profile names it; left out: its first)."},"dither":{"type":"string","description":"none, ordered, floyd-steinberg (the default) or atkinson."},"strength":{"type":"number","minimum":0,"maximum":100,"description":"Dithering strength, 0-100."},"fix_clashes":{"type":"boolean","description":"Modes with colour cells: choose each cell's colours so nothing clashes."},"contrast":{"type":"number","minimum":0,"maximum":100,"description":"Before converting: contrast, 0-100."},"saturation":{"type":"number","minimum":0,"maximum":100,"description":"Saturation, 0-100."},"demud":{"type":"number","minimum":0,"maximum":100,"description":"De-mud, 0-100."},"fit":{"type":"boolean","description":"Fitted to the machine's screen (true, the default) or the picture's own size."},"sprites":{"type":"string","description":"Sprites: the machine's sprite hardware (as the Timeline's hardware check names it, e.g. \"C64 (multicolour)\", \"NES\", \"Spectrum Next\"; \"none\" for none): every frame, the sprites kept to its colours and checked."},"split_sprites":{"type":"boolean","description":"Sprites: cels that are no size the sprite hardware has shown as poses of its sprites (pieces of one of its sizes)."},"tiles":{"type":"string","description":"Tile maps: the machine's tile hardware (e.g. \"Mega Drive\", \"SNES\", \"Spectrum Next\", \"NES\"; \"none\" for none): its palette banks, mirrors and tile limit."},"reduce_tiles":{"type":"boolean","description":"Tile maps: merge the most alike tiles until they fit the tile hardware's limit."},"show":{"type":"boolean","description":"Show it in a canvas of its own. Default: true."}},"required":["machine"],"additionalProperties":false}},
{"name":"target.set","description":"Change a machine target. Changes a machine target's settings (the ones given): its canvas follows. Targets can be named by part of their name.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"The target."},"machine":{"type":"string","description":"Another machine."},"rename":{"type":"string","description":"A new name."},"mode":{"type":"string","description":"The screen mode (as the system profile names it; left out: its first)."},"dither":{"type":"string","description":"none, ordered, floyd-steinberg (the default) or atkinson."},"strength":{"type":"number","minimum":0,"maximum":100,"description":"Dithering strength, 0-100."},"fix_clashes":{"type":"boolean","description":"Modes with colour cells: choose each cell's colours so nothing clashes."},"contrast":{"type":"number","minimum":0,"maximum":100,"description":"Before converting: contrast, 0-100."},"saturation":{"type":"number","minimum":0,"maximum":100,"description":"Saturation, 0-100."},"demud":{"type":"number","minimum":0,"maximum":100,"description":"De-mud, 0-100."},"fit":{"type":"boolean","description":"Fitted to the machine's screen (true, the default) or the picture's own size."},"sprites":{"type":"string","description":"Sprites: the machine's sprite hardware (as the Timeline's hardware check names it, e.g. \"C64 (multicolour)\", \"NES\", \"Spectrum Next\"; \"none\" for none): every frame, the sprites kept to its colours and checked."},"split_sprites":{"type":"boolean","description":"Sprites: cels that are no size the sprite hardware has shown as poses of its sprites (pieces of one of its sizes)."},"tiles":{"type":"string","description":"Tile maps: the machine's tile hardware (e.g. \"Mega Drive\", \"SNES\", \"Spectrum Next\", \"NES\"; \"none\" for none): its palette banks, mirrors and tile limit."},"reduce_tiles":{"type":"boolean","description":"Tile maps: merge the most alike tiles until they fit the tile hardware's limit."}},"required":["name"],"additionalProperties":false}},
{"name":"target.remove","description":"Remove a machine target. Removes a machine target from the picture (and closes its canvas).","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"The target."}},"required":["name"],"additionalProperties":false}},
{"name":"target.list","description":"List machine targets. The picture's machine targets: name, machine, mode and settings.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},
{"name":"target.freeze","description":"Freeze a machine target. Freezes a machine target (frozen = false: unfreezes it). Frozen, it no longer follows the picture: its picture as it is now (touch-ups and all) is the finished art for that machine, painted on freely and saved with the picture. Unfrozen, it's made again from the picture, and every pixel the frozen picture had that the new conversion doesn't becomes a touch-up.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"The target."},"frozen":{"type":"boolean","description":"Frozen (true) or following the picture again. Default: true."}},"required":["name"],"additionalProperties":false}},
{"name":"target.clear_touches","description":"Clear a target's touch-ups. Forgets a machine target's touch-ups (pixels fixed by hand): it's made again as converted.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"The target."}},"required":["name"],"additionalProperties":false}},
{"name":"target.export_all","description":"Export all machine targets. Exports every machine target of the picture again, each the way it was last exported (its format and file; into folder, if given, keeping the files' names). Targets never exported are listed: export each once (the Export window, or target.export).","inputSchema":{"type":"object","properties":{"folder":{"type":"string","description":"Write them all into this folder instead."}},"required":[],"additionalProperties":false}},
{"name":"target.show","description":"Show a machine target. Shows a machine target in its own canvas (in front), made from the picture as it is now.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"The target."}},"required":["name"],"additionalProperties":false}},
{"name":"target.export","description":"Export a machine target. Writes a machine target in one of the Export window's formats (as file.export does), made from the picture as it is now.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"The target."},"format":{"type":"string","description":"The format's name as the Export window lists it."},"path":{"type":"string","description":"The file to write."}},"required":["name","format","path"],"additionalProperties":false}},
{"name":"palette.lock","description":"Lock the palette to its colours. Locks the palette of the picture in front to the colours it was opened with (or a given number): colours can be changed but none added, pixels in any later colours become the nearest of them, and a true-colour picture paints in them and converts back to them. One undo step.","inputSchema":{"type":"object","properties":{"on":{"type":"boolean","description":"Lock (true) or unlock (false). Default: true."},"colours":{"type":"integer","minimum":2,"maximum":256,"description":"How many colours to keep to (left out: the colours the file was opened with, or all it has now)."}},"required":[],"additionalProperties":false}},
{"name":"picture.convert","description":"Convert true colour / palette. Changes the picture in front between true colour and a palette, as one undo step: as the Image menu's Machines section does. opened_palette keeps it to the colours of the file as it was opened.","inputSchema":{"type":"object","properties":{"to":{"type":"string","enum":["true_colour","palette","opened_palette"],"description":"true_colour (24-bit, any colour), palette (the colours used, merged to the machine's number), or opened_palette (every pixel one of the colours of the palette the picture was opened with, in its order)."},"dither":{"type":"string","enum":["None","Ordered","Floyd-Steinberg","Atkinson"],"description":"opened_palette: how colours between the palette's are made. Default: None."}},"required":["to"],"additionalProperties":false}}
]
