Porymap is extensible via scripting capabilities. This allows the user to write custom JavaScript (technically, ECMAScript) files to support enhanced workflows, without having to fork Porymap itself. While the possibilities are endless, some useful examples of scripting might be:
- Toggle Day/Night Palettes
- Custom Map Painting Brushes
- Detect Tile Errors
- Show Diagonistic Information
- Procedurally Generated Maps
- Randomize Grass Patterns
Writing a Custom Script
-----------------------
Let's write a custom script that will randomize grass patterns when the user is editing the map. This is useful, since it's cumbersome to manually add randomness to grass patches. With the custom script, it will happen automatically. Whenever the user paints a grass tile onto the map, the script will overwrite the tile with a random grass tile instead.
First, create a new script file called ``my_script.js``--place it in the project directory (e.g. ``pokefirered/``).
Next, open the Porymap project config file, ``porymap.project.cfg``, in the project directory. Add the script file to the ``custom_scripts`` configuration value. Multiple script files can be loaded by separating the filepaths with a comma.
..code-block::
custom_scripts=my_script.js
Now that Porymap is configured to load the script file, let's write the actual code that will power the grass-randomizer. Scripts have access to several "callbacks" for events that occur while Porymap is running. This means our script can define functions for each of these callbacks. We're interested in the ``onBlockChanged()`` callback, since we want our script to take action whenever a user paints a block on the map.
..code-block:: js
// Porymap callback when a block is painted.
export function onBlockChanged(x, y, prevBlock, newBlock) {
// Grass-randomizing logic goes here.
}
It's very **important** to remember to ``export`` the callback functions in the script. Otherwise, Porymap will not be able to execute them.
In addition to the callbacks, Porymap also supports a scripting API so that the script can interact with Porymap in interesting ways. For example, a script can change a block or add overlay text on the map. Since we want to paint random grass tiles, we'll be using the ``map.setMetatileId()`` function. Let's fill in the rest of the grass-randomizing code.
export function onBlockChanged(x, y, prevBlock, newBlock) {
// Check if the user is painting a grass tile.
if (grassTiles.indexOf(newBlock.metatileId) != -1) {
// Choose a random grass tile and paint it on the map.
const i = randInt(0, grassTiles.length);
map.setMetatileId(x, y, grassTiles[i]);
}
}
Let's test the script out by re-launching Porymap. If we try to paint grass on the map, we should see our script inserting a nice randomized grass pattern.
The grass-randomizer script above happens implicitly when the user paints on the map. However, other times we probably want to call the custom script on demand. One of the API functions Porymap provides is the ability to trigger scripting functions from the ``Tools`` menu, or a keyboard shortcut. To do this, we will usually want to register the action when the project loads. Here is an example script where some custom actions are registered.
Called when the selected tab in the main tab bar is changed. Tabs are indexed from left to right, starting at 0 (``0``: Map, ``1``: Events, ``2``: Header, ``3``: Connections, ``4``: Wild Pokemon).
Called when the selected tab in the map view tab bar is changed. Tabs are indexed from left to right, starting at 0 (``0``: Metatiles, ``1``: Collision, ``2``: Prefabs).
:param boolean forceRedraw:Force the map view to refresh. Defaults to ``true``. Redrawing the map view is expensive, so set to ``false`` when making many consecutive map edits, and then redraw the map once using ``map.redraw()``.
:param boolean commitChanges:Commit the changes to the map's edit/undo history. Defaults to ``true``. When making many related map edits, it can be useful to set this to ``false``, and then commit all of them together with ``map.commit()``.
..js:function:: map.setBlock(x, y, rawValue, forceRedraw = true, commitChanges = true)
Sets a block in the currently-opened map. This is an overloaded function that takes the raw value of a block instead of each of the block's properties individually.
:param number x:x coordinate of the block
:param number y:y coordinate of the block
:param number rawValue:the 16 bit value of the block. Bits ``0-9`` will be the metatile id, bits ``10-11`` will be the collision, and bits ``12-15`` will be the elevation.
:param boolean forceRedraw:Force the map view to refresh. Defaults to ``true``. Redrawing the map view is expensive, so set to ``false`` when making many consecutive map edits, and then redraw the map once using ``map.redraw()``.
:param boolean commitChanges:Commit the changes to the map's edit/undo history. Defaults to ``true``. When making many related map edits, it can be useful to set this to ``false``, and then commit all of them together with ``map.commit()``.
:param boolean forceRedraw:Force the map view to refresh. Defaults to ``true``. Redrawing the map view is expensive, so set to ``false`` when making many consecutive map edits, and then redraw the map once using ``map.redraw()``.
:param boolean commitChanges:Commit the changes to the map's edit/undo history. Defaults to ``true``. When making many related map edits, it can be useful to set this to ``false``, and then commit all of them together with ``map.commit()``.
Gets the metatile id of a block in the border of the currently-opened map.
:param number x:x coordinate of the block
:param number y:y coordinate of the block
:returns number:the metatile id of the block
..js:function:: map.setBorderMetatileId(x, y, metatileId, forceRedraw = true, commitChanges = true)
Sets the metatile id of a block in the border of the currently-opened map.
:param number x:x coordinate of the block
:param number y:y coordinate of the block
:param number metatileId:the metatile id of the block
:param boolean forceRedraw:Force the map view to refresh. Defaults to ``true``. Redrawing the map view is expensive, so set to ``false`` when making many consecutive map edits, and then redraw the map once using ``map.redraw()``.
:param boolean commitChanges:Commit the changes to the map's edit/undo history. Defaults to ``true``. When making many related map edits, it can be useful to set this to ``false``, and then commit all of them together with ``map.commit()``.
:param boolean forceRedraw:Force the map view to refresh. Defaults to ``true``. Redrawing the map view is expensive, so set to ``false`` when making many consecutive map edits, and then redraw the map once using ``map.redraw()``.
:param boolean commitChanges:Commit the changes to the map's edit/undo history. Defaults to ``true``. When making many related map edits, it can be useful to set this to ``false``, and then commit all of them together with ``map.commit()``.
:param boolean forceRedraw:Force the map view to refresh. Defaults to ``true``. Redrawing the map view is expensive, so set to ``false`` when making many consecutive map edits, and then redraw the map once using ``map.redraw()``.
:param boolean commitChanges:Commit the changes to the map's edit/undo history. Defaults to ``true``. When making many related map edits, it can be useful to set this to ``false``, and then commit all of them together with ``map.commit()``.
:param boolean forceRedraw:Force the map view to refresh. Defaults to ``true``. Redrawing the map view is expensive, so set to ``false`` when making many consecutive map edits, and then redraw the map once using ``map.redraw()``.
:param boolean commitChanges:Commit the changes to the map's edit/undo history. Defaults to ``true``. When making many related map edits, it can be useful to set this to ``false``, and then commit all of them together with ``map.commit()``.
:param boolean forceRedraw:Force the map view to refresh. Defaults to ``true``. Redrawing the map view is expensive, so set to ``false`` when making many consecutive map edits, and then redraw the map once using ``map.redraw()``.
:param boolean commitChanges:Commit the changes to the map's edit/undo history. Defaults to ``true``. When making many related map edits, it can be useful to set this to ``false``, and then commit all of them together with ``map.commit()``.
:param boolean forceRedraw:Force the map view to refresh. Defaults to ``true``. Redrawing the map view is expensive, so set to ``false`` when making many consecutive map edits, and then redraw the map once using ``map.redraw()``.
:param boolean commitChanges:Commit the changes to the map's edit/undo history. Defaults to ``true``. When making many related map edits, it can be useful to set this to ``false``, and then commit all of them together with ``map.commit()``.
:param boolean forceRedraw:Force the map view to refresh. Defaults to ``true``. Redrawing the map view is expensive, so set to ``false`` when making many consecutive map edits, and then redraw the map once using ``map.redraw()``.
:param boolean commitChanges:Commit the changes to the map's edit/undo history. Defaults to ``true``. When making many related map edits, it can be useful to set this to ``false``, and then commit all of them together with ``map.commit()``.
:param boolean forceRedraw:Force the map view to refresh. Defaults to ``true``. Redrawing the map view is expensive, so set to ``false`` when making many consecutive map edits, and then redraw the map once using ``map.redraw()``.
:param boolean commitChanges:Commit the changes to the map's edit/undo history. Defaults to ``true``. When making many related map edits, it can be useful to set this to ``false``, and then commit all of them together with ``map.commit()``.
:param boolean forceRedraw:Force the map view to refresh. Defaults to ``true``. Redrawing the map view is expensive, so set to ``false`` when making many consecutive map edits, and then redraw the map once using ``map.redraw()``.
:param boolean commitChanges:Commit the changes to the map's edit/undo history. Defaults to ``true``. When making many related map edits, it can be useful to set this to ``false``, and then commit all of them together with ``map.commit()``.
Sets the dimensions of the border of the currently-opened map. If the config setting ``use_custom_border_size`` is set to ``0`` then this does nothing.
:param number width:width in blocks
:param number height:height in blocks
..js:function:: map.setBorderWidth(width)
Sets the width of the border of the currently-opened map. If the config setting ``use_custom_border_size`` is set to ``0`` then this does nothing.
Redraws the entire map area. Useful when delaying map redraws using ``forceRedraw = false`` in certain map editing functions.
..js:function:: map.commit()
Commits any uncommitted changes to the map's edit/undo history. Useful when delaying commits using ``commitChanges = false`` in certain map editing functions.
Gets the name of the background song for the currently-opened map.
:returns string:the name of the song
..js:function:: map.setSong(song)
Sets the name of the background song for the currently-opened map. The song name must be one of the names in the "Song" dropdown menu on the Header tab.
:param string song:the name of the song
..js:function:: map.getLocation()
Gets the name of the region map location for the currently-opened map.
:returns string:the name of the location
..js:function:: map.setLocation(location)
Sets the name of the region map location for the currently-opened map. The location name must be one of the names in the "Location" dropdown menu on the Header tab.
:param string location:the name of the location
..js:function:: map.getRequiresFlash()
Gets whether flash would be required in-game for the currently-opened map.
:returns boolean:whether flash is required
..js:function:: map.setRequiresFlash(require)
Sets whether flash would be required in-game for the currently-opened map.
:param boolean require:whether flash should be required
..js:function:: map.getWeather()
Gets the name of the weather for the currently-opened map.
:returns string:the name of the weather
..js:function:: map.setWeather(weather)
Sets the name of the weather for the currently-opened map. The weather name must be one of the names in the "Weather" dropdown menu on the Header tab.
:param string weather:the name of the weather
..js:function:: map.getType()
Gets the name of the map type for the currently-opened map.
:returns string:the name of the map type
..js:function:: map.setType(type)
Sets the name of the map type for the currently-opened map. The map type name must be one of the names in the "Type" dropdown menu on the Header tab.
:param string type:the name of the map type
..js:function:: map.getBattleScene()
Gets the name of the battle scene for the currently-opened map.
:returns string:the name of the battle scene
..js:function:: map.setBattleScene(battleScene)
Sets the name of the battle scene for the currently-opened map. The battle scene name must be one of the names in the "Battle scene" dropdown menu on the Header tab.
:param string battleScene:the name of the battle scene
..js:function:: map.getShowLocationName()
Gets whether the location name will appear in-game for the currently-opened map.
:returns boolean:whether the location name will be shown
..js:function:: map.setShowLocationName(show)
Sets whether the location name should appear in-game for the currently-opened map.
:param boolean show:whether the location name should be shown
..js:function:: map.getAllowRunning()
Gets whether running is allowed in-game for the currently-opened map.
:returns boolean:whether running is allowed
..js:function:: map.setAllowRunning(allow)
Sets whether running should be allowed in-game for the currently-opened map.
:param boolean allow:whether running should be allowed
..js:function:: map.getAllowBiking()
Gets whether biking is allowed in-game for the currently-opened map.
:returns boolean:whether biking is allowed
..js:function:: map.setAllowBiking(allow)
Sets whether biking should be allowed in-game for the currently-opened map.
:param boolean allow:whether biking should be allowed
..js:function:: map.getAllowEscaping()
Gets whether escaping (using Escape Rope or Dig) is allowed in-game for the currently-opened map.
:returns boolean:whether escaping is allowed
..js:function:: map.setAllowEscaping(allow)
Sets whether escaping (using Escape Rope or Dig) should be allowed in-game for the currently-opened map.
:param boolean allow:whether escaping should be allowed
..js:function:: map.getFloorNumber()
Gets the floor number for the currently-opened map.
:returns number:the floor number
..js:function:: map.setFloorNumber(floorNumber)
Sets the floor number for the currently-opened map. Floor numbers can be any number between -128 and 127 inclusive.
The following functions are related to tilesets and how they are rendered. The functions with "preview" in their name operate on a "fake" version of the palette colors. This means that changing these "preview" colors won't affect the actual tileset colors in the project. A good use of the "preview" palettes would be Day/Night tints, for example.
Sets a palette in the primary tileset of the currently-opened map. This will NOT affect the true underlying colors--it only displays these colors in the map-editing area of Porymap.
:param number paletteIndex:the palette index
:param array colors:array of colors. Each color is a 3-element RGB array
Sets all of the palettes in the primary tileset of the currently-opened map. This will NOT affect the true underlying colors--it only displays these colors in the map-editing area of Porymap.
:param array palettes:array of arrays of colors. Each color is a 3-element RGB array
Sets a palette in the secondary tileset of the currently-opened map. This will NOT affect the true underlying colors--it only displays these colors in the map-editing area of Porymap.
:param number paletteIndex:the palette index
:param array colors:array of colors. Each color is a 3-element RGB array
Sets all of the palettes in the secondary tileset of the currently-opened map. This will NOT affect the true underlying colors--it only displays these colors in the map-editing area of Porymap.
:param array palettes:array of arrays of colors. Each color is a 3-element RGB array
Sets all of the palettes in the secondary tileset of the currently-opened map. This will permanently affect the palettes and save the palettes to disk.
:param array palettes:array of arrays of colors. Each color is a 3-element RGB array
Sets the raw attributes value for the specified metatile.
**Warning:** This function writes directly to the tileset. There is no undo for this. Porymap will not limit the value of existing attributes to their usual range.
:param boolean xflip:whether the new tile is flipped horizontally
:param boolean yflip:whether the new tile is flipped vertically
:param number palette:new tile's palette number
:param boolean forceRedraw:Force the map view to refresh. Defaults to ``true``. Redrawing the map view is expensive, so set to ``false`` when making many consecutive map edits, and then redraw the map once using ``map.redraw()``.
Sets the tile at the specified index of the metatile. This is an overloaded function that takes a single tile as a JavaScript object instead of each of the tile's properties individually.
:param boolean forceRedraw:Force the map view to refresh. Defaults to ``true``. Redrawing the map view is expensive, so set to ``false`` when making many consecutive map edits, and then redraw the map once using ``map.redraw()``.
:param boolean xflip:whether the new tiles are flipped horizontally
:param boolean yflip:whether the new tiles are flipped vertically
:param number palette:new tiles' palette number
:param number tileStart:index of the first tile to set. Defaults to ``0`` (the first tile)
:param number tileEnd:index of the last tile to set. Defaults to ``-1`` (the last tile)
:param boolean forceRedraw:Force the map view to refresh. Defaults to ``true``. Redrawing the map view is expensive, so set to ``false`` when making many consecutive map edits, and then redraw the map once using ``map.redraw()``.
Sets the tiles in the specified range of the metatile. This is an overloaded function that takes an array of tiles as JavaScript objects instead of each of the tile properties individually.
:param array tiles:array of tiles to set. Each tile is an object of the form ``{tileId, xflip, yflip, palette}``. If the array does not have sufficient objects to set all the tiles in the specified range then the remaining tiles will be set with all default values.
:param number tileStart:index of the first tile to set. Defaults to ``0`` (the first tile)
:param number tileEnd:index of the last tile to set. Defaults to ``-1`` (the last tile)
:param boolean forceRedraw:Force the map view to refresh. Defaults to ``true``. Redrawing the map view is expensive, so set to ``false`` when making many consecutive map edits, and then redraw the map once using ``map.redraw()``.
Gets the pixel data for the specified tile. The pixel data is an array of indexes indicating which palette color each pixel uses. Tiles are 8x8, so the pixel array will be 64 elements long.
The following functions are related to an overlay that is drawn on top of the map area. Text, images, and shapes can be drawn using these functions. Items can be drawn and manipulated on separate layers by specifiying a layer id. Items on higher layer ids will be drawn above those on lower layers. The visibility, position, and opacity of each layer can be changed; by default all layers are visible, at position ``0,0``, and have an opacity of ``100``.
All overlay functions are callable via the global ``overlay`` object.
..js:function:: overlay.clear(layer)
Clears and erases all previously-added overlay items on the specified layer.
:param number layer:the layer id
..js:function:: overlay.clear()
This is an overloaded function. Clears and erases all previously-added overlay items on every layer.
..js:function:: overlay.hide(layer)
Hides all overlay items on the specified layer.
:param number layer:the layer id
..js:function:: overlay.hide()
This is an overloaded function. Hides all overlay items on all active layers. Layers that have not been used yet will not be hidden.
..js:function:: overlay.show(layer)
Shows all overlay items on the specified layer.
:param number layer:the layer id
..js:function:: overlay.show()
This is an overloaded function. Shows all overlay items on all active layers.
..js:function:: overlay.getVisibility(layer = 0)
Gets whether the specified overlay layer is currently showing or not.
:param number layer:the layer id. Defaults to ``0``
Sets the opacity of the specified overlay layer. Opacity ranges from ``0`` (invisible) to ``100`` (completely opaque).
:param number opacity:the opacity
:param number layer:the layer id
..js:function:: overlay.setOpacity(opacity)
This is an overloaded function. Sets the opacity of all active overlay layers. Layers that have not been used yet will not have their opacity changed. Opacity ranges from ``0`` (invisible) to ``100`` (completely opaque).
:param number opacity:the opacity
..js:function:: overlay.getX(layer = 0)
Gets the x position of the specified overlay layer.
:param number layer:the layer id. Defaults to ``0``
:returns number:the pixel x coordinate
..js:function:: overlay.getY(layer = 0)
Gets the y position of the specified overlay layer.
:param number layer:the layer id. Defaults to ``0``
:returns number:the pixel y coordinate
..js:function:: overlay.setX(x, layer)
Sets the x position of the specified overlay layer.
:param number x:the pixel x coordinate
:param number layer:the layer id
..js:function:: overlay.setX(x)
This is an overloaded function. Sets the x position of all active overlay layers. Layers that have not been used yet will not have their position changed.
:param number x:the pixel x coordinate
..js:function:: overlay.setY(y, layer)
Sets the y position of the specified overlay layer.
:param number y:the pixel y coordinate
:param number layer:the layer id
..js:function:: overlay.setY(y)
This is an overloaded function. Sets the y position of all active overlay layers. Layers that have not been used yet will not have their position changed.
:param number y:the pixel y coordinate
..js:function:: overlay.getPosition(layer = 0)
Gets the position of the specified overlay layer.
:param number layer:the layer id. Defaults to ``0``
:returns {x, y}:the layer's pixel coordinates
..js:function:: overlay.setPosition(x, y, layer)
Sets the position of the specified overlay layer.
:param number x:the pixel x coordinate
:param number y:the pixel y coordinate
:param number layer:the layer id
..js:function:: overlay.setPosition(x, y)
This is an overloaded function. Sets the position of all active overlay layers. Layers that have not been used yet will not have their position changed.
:param number deltaX:the number of pixels to move horizontally
:param number deltaY:the number of pixels to move vertically
:param number layer:the layer id
..js:function:: overlay.move(deltaX, deltaY)
This is an overloaded function. Moves all active overlay layers. Layers that have not been used yet will not have their position changed.
:param number deltaX:the number of pixels to move horizontally
:param number deltaY:the number of pixels to move vertically
..js:function:: overlay.addText(text, x, y, color = "#000000", size = 12, layer = 0)
Adds a text item to the specified overlay layer.
:param string text:the text to display
:param number x:the x pixel coordinate of the text (relative to the layer's position)
:param number y:the y pixel coordinate of the text (relative to the layer's position)
:param string color:the color of the text. Can be specified as "#RRGGBB" or "#AARRGGBB". Defaults to black.
:param number size:the font size of the text. Defaults to 12.
:param number layer:the layer id. Defaults to ``0``
..js:function:: overlay.addRect(x, y, width, height, color = "#000000", layer = 0)
Adds a rectangle outline item to the specified overlay layer.
:param number x:the x pixel coordinate of the rectangle's top-left corner (relative to the layer's position)
:param number y:the y pixel coordinate of the rectangle's top-left corner (relative to the layer's position)
:param number width:the pixel width of the rectangle
:param number height:the pixel height of the rectangle
:param string color:the color of the rectangle. Can be specified as "#RRGGBB" or "#AARRGGBB". Defaults to black.
:param number layer:the layer id. Defaults to ``0``
..js:function:: overlay.addFilledRect(x, y, width, height, color = "#000000", layer = 0)
Adds a filled rectangle item to the specified overlay layer.
:param number x:the x pixel coordinate of the rectangle's top-left corner (relative to the layer's position)
:param number y:the y pixel coordinate of the rectangle's top-left corner (relative to the layer's position)
:param number width:the pixel width of the rectangle
:param number height:the pixel height of the rectangle
:param string color:the color of the rectangle. Can be specified as "#RRGGBB" or "#AARRGGBB". Defaults to black.
:param number layer:the layer id. Defaults to ``0``
..js:function:: overlay.addImage(x, y, filepath, layer = 0, useCache = true)
Adds an image item to the specified overlay layer.
:param number x:the x pixel coordinate of the image's top-left corner (relative to the layer's position)
:param number y:the y pixel coordinate of the image's top-left corner (relative to the layer's position)
:param string filepath:the image's filepath
:param number layer:the layer id. Defaults to ``0``
:param boolean useCache:whether the image should be saved/loaded using the cache. Defaults to ``true``. Reading images from a file is slow. Setting ``useCache`` to ``true`` will save the image to memory so that the next time the filepath is encountered the image can be loaded from memory rather than the file.
Creates an image item on the specified overlay layer. This differs from ``overlay.addImage`` by allowing the new image to be a transformation of the image file.
:param number x:the x pixel coordinate of the image's top-left corner (relative to the layer's position)
:param number y:the y pixel coordinate of the image's top-left corner (relative to the layer's position)
:param string filepath:the image's filepath
:param number width:the width in pixels of the area to read in the image. If ``-1``, use the full width of the original image. Defaults to ``-1``
:param number height:the height in pixels of the area to read in the image. If ``-1``, use the full height of the original image. Defaults to ``-1``
:param number offset:the pixel offset into the original image where data should be read from. Defaults to ``0``
:param number hScale:the horizontal scale for the image. Negative values will be a horizontal flip of the original image. Defaults to ``1``
:param number vScale:the vertical scale for the image. Negative values will be a vertical flip of the original image. Defaults to ``1``
:param number paletteId:the id of which currently loaded tileset palette to use for the image. If ``-1``, use the original image's palette. Defaults to ``-1``
:param boolean setTransparency:whether the color at index 0 should be overwritten with transparent pixels. Defaults to ``false``
:param number layer:the layer id. Defaults to ``0``
:param boolean useCache:whether the image should be saved/loaded using the cache. Defaults to ``true``. Reading images from a file is slow. Setting ``useCache`` to ``true`` will save the image to memory so that the next time the filepath is encountered the image can be loaded from memory rather than the file.
Creates an image of a tile on the specified overlay layer.
:param number x:the x pixel coordinate of the image's top-left corner (relative to the layer's position)
:param number y:the y pixel coordinate of the image's top-left corner (relative to the layer's position)
:param number tileId:tile value for the image
:param boolean xflip:whether the tile image is flipped horizontally
:param boolean yflip:whether the tile image is flipped vertically
:param number palette:palette number for the tile image
:param boolean setTransparency:whether the color at index 0 should be overwritten with transparent pixels. Defaults to ``false``
:param number layer:the layer id. Defaults to ``0``
..js:function:: overlay.addTileImage(x, y, tile, setTransparency = false, layer = 0)
Creates an image of a tile on the specified overlay layer. This is an overloaded function that takes a single tile as a JavaScript object instead of each of the tile's properties individually.
:param number x:the x pixel coordinate of the image's top-left corner (relative to the layer's position)
:param number y:the y pixel coordinate of the image's top-left corner (relative to the layer's position)
:param {tileId,xflip,yflip,palette} tile:the tile to create an image of
:param boolean setTransparency:whether the color at index 0 should be overwritten with transparent pixels. Defaults to ``false``
:param number layer:the layer id. Defaults to ``0``
..js:function:: overlay.addMetatileImage(x, y, metatileId, setTransparency = false, layer = 0)
Creates an image of a metatile on the specified overlay layer.
:param number x:the x pixel coordinate of the image's top-left corner (relative to the layer's position)
:param number y:the y pixel coordinate of the image's top-left corner (relative to the layer's position)
:param number metatileId:id of the metatile to create an image of
:param boolean setTransparency:whether the color at index 0 should be overwritten with transparent pixels. Defaults to ``false``
:param number layer:the layer id. Defaults to ``0``
Gets the index of the currently selected main tab. Tabs are indexed from left to right, starting at 0 (``0``: Map, ``1``: Events, ``2``: Header, ``3``: Connections, ``4``: Wild Pokemon).
Sets the currently selected main tab. Tabs are indexed from left to right, starting at 0 (``0``: Map, ``1``: Events, ``2``: Header, ``3``: Connections, ``4``: Wild Pokemon).
Gets the index of the currently selected map view tab. Tabs are indexed from left to right, starting at 0 (``0``: Metatiles, ``1``: Collision, ``2``: Prefabs).
Registers a JavaScript function to an action that can be manually triggered in Porymap's ``Tools`` menu. Optionally, a keyboard shortcut (e.g. ``"Ctrl+P"``) can also be specified, assuming it doesn't collide with any existing shortcuts used by Porymap. The function specified by ``functionName`` must have the ``export`` keyword.
This behaves essentially the same as JavaScript's ``setTimeout()`` that is used in web browsers or NodeJS. The ``func`` argument is a JavaScript function (NOT the name of a function) which will be executed after a delay. This is useful for creating animations or refreshing the overlay at constant intervals.
:param function func:a JavaScript function that will be executed later
:param number delayMs:the number of milliseconds to wait before executing ``func``
Displays a text input dialog with an ``OK`` and a ``Cancel`` button. Execution stops while the window is open.
:param string title:the text in the window title bar
:param string label:the text adjacent to the input entry area
:param string default:the text in the input entry area when the window is opened. Defaults to ``""``
:returns {input, ok}:``input`` will be the input text and ``ok`` will be ``true`` if ``OK`` was selected. ``input`` will be ``""`` and ``ok`` will be ``false`` if ``Cancel`` was selected or if the window was closed without selection.
Displays a number input dialog with an ``OK`` and a ``Cancel`` button. Execution stops while the window is open.
:param string title:the text in the window title bar
:param string label:the text adjacent to the input entry area
:param number default:the number in the input entry area when the window is opened. Defaults to ``0``
:param number min:the minimum allowable input value. Defaults to ``-2147483648``
:param number max:the maximum allowable input value. Defaults to ``2147483647``
:param number decimals:the number of decimals used for the input number. Defaults to ``0``
:param number step:the increment by which the input number will change when the spinner is used. Defaults to ``1``
:returns {input, ok}:``input`` will be the input number and ``ok`` will be ``true`` if ``OK`` was selected. ``input`` will be ``default`` and ``ok`` will be ``false`` if ``Cancel`` was selected or if the window was closed without selection.
Displays a text input dialog with an items dropdown and an ``OK`` and a ``Cancel`` button. Execution stops while the window is open.
:param string title:the text in the window title bar
:param string label:the text adjacent to the input entry area
:param array items:an array of text items that will populate the dropdown
:param number default:the index of the item to select by default. Defaults to ``0``
:param boolean editable:whether the user is allowed to enter their own text instead. Defaults to ``false``
:returns {input, ok}:``input`` will be the input text and ``ok`` will be ``true`` if ``OK`` was selected. ``input`` will be the text of the item at ``default`` and ``ok`` will be ``false`` if ``Cancel`` was selected or if the window was closed without selection.
Gets whether the specified tileset is a secondary tileset.
:param string tilesetName:the tileset name
:returns boolean:is a secondary tileset
Constants
~~~~~~~~~
Some constant values are provided for convenience. These are read-only properties guaranteed not to change unless a new project is opened or the current one is reloaded.
All constants are accessible via the global ``constants`` object.
..js:attribute:: constants.max_primary_tiles
The maximum number of tiles in a primary tileset.
..js:attribute:: constants.max_secondary_tiles
The maximum number of tiles in a secondary tileset.
..js:attribute:: constants.max_primary_metatiles
The maximum number of metatiles in a primary tileset.
The maximum number of metatiles in a secondary tileset.
..js:attribute:: constants.layers_per_metatile
The number of tile layers used in each metatile. This will either be ``2`` or ``3``, depending on the config setting ``enable_triple_layer_metatiles``.
..js:attribute:: constants.tiles_per_metatile
The number of tiles in each metatile. This will either be ``8`` or ``12``, depending on the config setting ``enable_triple_layer_metatiles``.
..js:attribute:: constants.base_game_version
The string value of the config setting ``base_game_version``. This will either be ``pokeruby``, ``pokefirered``, or ``pokeemerald``.
..js:attribute:: constants.version.major
Porymap's major version number. For example, for Porymap version ``5.0.1`` this will be ``5``.
..js:attribute:: constants.version.minor
Porymap's minor version number. For example, for Porymap version ``5.0.1`` this will be ``0``.
..js:attribute:: constants.version.patch
Porymap's patch version number. For example, for Porymap version ``5.0.1`` this will be ``1``.