This is the user manual for the Ninja.io legacy editor.
Check out the Ninja.io YouTube channel for tutorial videos on how to use the editor.
You can find it here.
A zip file containing all the Ninja.io default maps can be found here (right click→save link as).
The map editor can load and store json files. These files contain all data required to generate and render a Ninja.io map.
In the editor, click on File → Load and then select a downloaded json file to view and edit.
Note: The Ninja.io editor uses an older version of the Pixi.js graphics library so certain things like transparency and background coloring might appear different compared to in-game rendering. Verify any map aesthetics through testing.
Table of contents
1. Basics
1.1 Graphics
1.2 Physics
2. Environment properties
3. Game objects
3.1 Graphics component
3.2 Physics component
4. Panels
4.1 Game Object panel
4.2 Tools panel
4.2.1 Selection
4.2.2 Vertices
4.2.3 Copy
4.2.4 Delete game object
4.2.5 Delete shape
4.2.6 Triangulate
4.2.7 Coloring
4.2.8 Grid snapping
4.2.9 Vertex snapping
4.2.10 Select mesh
4.3 Physics panel
4.4 Shape panel
4.5 Anchor panel
4.6 Graphics panel
4.7 Attributes panel
5.0 Controls / hotkeys
6 Map creation
6.1 Basics
6.1.1 Texturing
6.1.2 Terrain
6.1.3 Barriers
6.1.4 Item spawning
6.1.5 Boundaries
6.2 Advanced
6.2.1 Water
6.2.2 Teleportation
6.2.3 Joints
6.2.4 Accelerators
6.2.5 UV translation
7 Modes
7.1 Deathmatch
7.2 Team deathmatch
7.3 Capture the Flag
7.4 Dodgeball
8 Optimization
Ninja.io maps are composed of two main parts: game objects and environment properties. The act of creating a map mainly involved adding and manipulating game objects.
Game objects are composed of graphics, physics and attributes.
Ninja.io is rendered in WebGL and uses the Pixi.JS graphics library.
Game worlds are rendered as 2D layers that are stacked on top of eachother.
The furthest back is the background parallax(the mountains and dunes you can see in the game), followed by the precipitation(rain, dust, stars), background particles, several interactive layers (terrain, players, bullets, etc), foreground particles and finally the HUD.
The environment properties are used to configure the background parallax and precipitation. The interactive layers in the middle contain the game objects. Only these last two are relevant for the map editor.
The particle layers are used by the game to render things like smoke, fire and shell casings. The HUD contains the chat window, targeting reticle and other UI stuff.
Ninja.io is built around the Box2D physics engine.
Specifically, it uses a heavily modified JavaScript port of an ActionScript port of the Box2D (v2) C++ library. It therefore shares the same features and limitations.
Game objects may contain a physics component. This physics component consists of a body composed of one or more shapes. More details can be found in the game object section.
Environment properties are used to set global map properties like gravity and background colors. You can open the Environment properties panel by clicking on the Settings button.
The environment properties are described in this section.
A list of precipitation types. These are things like rain, snow, dust and stars that appear as a parallax in the background while playing the game. They are not visible in the editor but they can be configured here.
•Type
Only None, Rain, Snow, Dust and Stars are valid options(!)
Selecting Dust will generate sand dunes rather than mountains in the background.
•Intensity
Describes the intensity of the precipitation.
This must be a floating point number between 0.0 and 1.0, where for example 0.1 would be very little rain and 1.0 would be pouring rain.
A force vector that describes the direction and strength of gravitation that will be configured in the physics engine.
Expects an X and an Y coordinate. X = 0 and Y = 25 are the default values.
Generally avoid setting an X value to anything other than 0 as it create a sideways pull. Also avoid setting very high or negative values for gravity as this could lead to funny but unplayable or glitchy maps. These settings are best left as-is.
This is the background gradient of the map, but it also determines the color of the background mountains and dunes. A black background will have no background mountains or dunes.
Top and Bottom are hexadecimal values describing the color of the map as it is at the top Y and bottom Y value. Clicking on either of them will open a colorpicker.
The Top Y and Bottom Y values describe the vertical offset of the start and end of the gradient. These can be negative or positive numbers. Generally one should be negative and the other positive to create an offset from the center.
For example, when Top Y and bottom Y are far apart, the gradient will be more gradual. If they are closer together, the gradient will be more abrupt.
Usually only setting the colors is enough and the offset does not have to be changed.
Note: the offset in the editor does not appear exactly as it does in the game. This needs to be fixed.
This is the amount of flight energy that Ninja characters have available.
The default is 100 and this is the value used in all existing ninja.io maps.
This should be a number >= 0.
Setting the value to 0 means flying will not be possible (only jumping).
Setting the value to a number > 100 will increase flight time beyond the default.
Ninja.io worlds are composed of game objects.
Game objects are things that exist in the game world either physically, graphically or both.
Game objects are composed of one or more of the following components:
1.Graphics - What you can see.
2.Physics - What you can interact with.
3.Attributes – These alter the function, behavior or appearance of the game object.
For instance, the Ninja characters can stand and run on some parts of the terrain while other parts of the terrain are open but still textured. This comes down to how the game objects are composed.
Simply put, everything in the world is a game object, and the graphics, physics and attributes or lack thereof determine how it appears and how it behaves and interacts.
The graphics component contains a description of how the game object should appear.
This component can be configured in the Graphics panel, when one or more game objects are selected.
The physics component contains a description of the physical properties of the game object.
These properties can be altered in the Physics panel, when one or more game objects are selected.
Attributes can be added to a game object to change its behavior, appearance or function.
For instance, a Flag attribute can be added to make the game object a Flag spawn location. Or a Teleport attribute can be added, to make the game object a teleport entrance or exit.
Attributes can be added by first selecting one or more game objects. Then the Attributes panel will appear. Here you can select and modify attributes.
The Game Object panel provides a basic way of adding a new game object to the map.
Click the New button and hover the cursor over the map. It will show a green + icon next to the mouse. When you click, a new empty game object with a checkered placeholder graphic will be added to the map. This placeholder will not be visible in the game but just exists to indicate the existence of an empty object. You can keep clicking to add new game objects, but this is not the usual way you’ll be adding game objects to the map, as it would be incredibly time consuming to individually and and configure game objects(maps often consist of hundreds or thousands of game objects). Click the New button again to stop adding objects.
The Pos X, Pos Y and Rotation(in radians) fields can be used to change the position and rotation of a game object. This alters the rotation of both the graphics and the physics component. However, for this to happen, the game object(s) need to be selected, which can be done with the tool panel as explained below. You are unlikely to need this feature very often as should become clear later.
The Tools panel contains a number of useful tools for adding, removing and manipulating game objects.
The following tools are available:
Press the S button in the Tools panel to activate the selection tool.
Click on a game object to select that object.
Click and hold/drag to select multiple objects.
Press and hold the Shift key while dragging to prevent objects from being dragged.
Multiple selected game objects can be dragged at the same time.
You can test and play around with this feature by adding some game objects with the Game Object panel’s New button.
This tool can be used to manipulate the vertices of shapes in game objects. It is generally used for fine-tuning individual shapes and not for rough positioning.
(Test steps: Add a game object to the map. Then use the Selection tool to select that game object.
Go to the Physics panel and click on the Add button below and to the right of the ‘Gravity scale’ field. This will add the shape type currently selected (polygon by default). The placeholder will disappear and the selected shape type should appear. A physics object has been added to the selected game object.)
Click the V in the Tools panel to activate the Vertex tool. Then click on a shape in a game object to select that shape. Small squares indicate the location of vertices that can be manipulated by dragging. The small triangle can be dragged to rotate the shape. The circle in the center can be used to offset the shape. Keep in mind that changing the offset of the shape does not change the position of the parent game object. It merely offsets the selected game object from the center.
Hold shift and drag to select multiple vertices at once, this also works across multiple game objects.
Note: Avoid doing this for rectangle and circle shapes as it can cause issues.
The copy tool can be used to copy one or more game objects.
Click the C button in the tools panel to activate the copy tool.
Clicking on a game object will create a copy of that game object on top of the existing object.
Clicking and dragging will copy an object and move the copy.
It is possible to copy multiple objects at once. First use the selection tool to select multiple objects and then using the copy tool to copy and drag the selected objects.
The delete tool can delete one or more game objects at once.
Select the xS button and then click on a game object to delete it.
When multiple objects are selected, all of them will be deleted if any one of them is clicked.
The Delete shape button can be used to delete individual shapes inside a game object.
Click on the xV button in the Tools panel to select the delete shape tool, and then click on a shape inside of a game object to delete that shape. When all shapes in a game object are deleted the placeholder graphic will appear.
The Triangulation tool is one of the most useful tools at your disposal.
It allows you to draw a shape and will then automatically triangulate that shape.
What this means is that you can draw a shape and then have it automatically generate all the game objects needed to fill that shape. This saves a ton of manual work.
Click the T button in the Tools panel to select the Triangulation tool.
Now, hold the shift key and keep clicking on the map until you have drawn the desired shape.
Release the shift key and then click one final time to automatically triangulate the shape. The generated triangles are actually game objects that contain a physics component with a triangle shape.
A minimum of 3 points is needed to triangulate at least one triangle.
Hold shift again and start clicking to add a new shape and repeat the process.
Any time you click will add a point that will be used as part of the triangulation process.
The properties selected in the Graphics and Physics panels will be applied to the newly created game objects.
It will often be necessary to trim the resultant game objects as it always generates a convex.
Use the Delete tool to remove excessively triangulated game objects. Zoom in (check the hotkeys section) to search for very stretched and narrow triangles that might occasionally be generated around the edges of the triangulated shape.
Play around with this tool to get a better feel for it.
Click the C button in the Tools panel to activate the Coloring tool.
This tool can be thought of as a brush to apply colors to vertices.
This tool can only be used on game objects that have a physics component and a graphics component that is either colored or textured. Both Poly fill and Vertex colors need to be enabled for the Coloring tool to have any effect.
(Test steps: use the Triangulation tool to add new game objects with triangle polygons, or manually add a new game object with the Game Object panel and then select the new game object(s) with the Selection tool and click Add in the Physics panel to add a polygon shape. Then make sure that all game objects/polygons are selected, and select ‘textured’ from the graphics panel. Then make sure that ‘Poly fill’ and ‘Vertex colors’ are checked in the Graphics panel. Then, with the polygons still selected, click on the empty Texture field in the Graphics panel, and select a texture. You now textured polygons that can be colored. Click the Coloring tool and drag it across the corners of the polygons to activate a color picker, this allows you to then brush across the polygon vertices to apply colors to them)
The color picker also has two input fields: Opacity and Multiplier;
The opacity field can be set to a floating point value between 0.0 and 1.0, where 0.0 will make a vertex transparent, and 1.0 will make a vertex opaque.
The multiplier field can be used to make vertices darker or lighter, to create a shadow effect or a shiny effect.
The grid snapping field in the Tools panel is used to snap vertices to the background grid.
Setting a high value here will make vertices snap to a larger grid. This can sometimes be useful to precisely position and order vertices.
The vertex snapping field in the Tools panel is used to configure the distance whereupon vertices should snap while being dragged. This can be useful to easily ‘connect’ vertices.
This is a very useful but more technical tool.
When a graphics component is assigned a Mesh group ID (this can be done in the Graphics panel, when entering a value in the ‘Mesh group ID’ field while having game objects selected), the Select mesh tool then allows you to later select all meshes with that ID.
This can be done by entering the Mesh Group ID in the ‘Select mesh’ field, and then pressing the Enter key to select the game objects with that mesh group ID. The use of Mesh group ID’s is explained elsewhere in the document.
The checkbox next to the Select mesh input field can be checked such that only the selection will be enabled, and all other game objects will be disabled. This allows for editing game objects with only that mesh group ID without having to worry about accidentally editing other game objects. Click the checkbox again to enable all game objects for editing again.
The physics panel contains fields to configure the physics component of a game object.
When multiple game objects are selected, the changed property will be applied to all of those objects.
The Type property determines the type of the physics component.
This can be either static, kinematic or dynamic.
Static
Static objects cannot move. They have a fixed position in the map.
This type is typically selected for things like terrain, static map decorations and barriers.
Kinematic
Kinematic objects can move and rotate, but will not do so in response to interactions with other objects. Kinematic objects are used to create things like moving platforms or other moving and rotating map elements.
Dynamic
Dynamic objects can move and rotate in response to interactions with other game objects including players, bullets grenades, and force-inducing effects like explosions and beam weapons. Dynamic objects are used to create things like movable boxes, balloons, balls, chains etc.
The category of a physics object further determines how the game object will interact with other objects. It is mainly used to determine what the object can collide with.
For instance, a bridge is typically made of a static type with bridge category.
This means that the object cannot move (static), and that it collides with player objects but allows bullets to pass through (bridge).
The following categories exist: solid, open, barrier, zone, bridge, item-barrier.
Solid
Solid objects collide with all other objects. They do not allow anything to pass through.
This is typically used for solid terrain and obstacles.
Open
Open objects do not collide with anything. They allow bullets, players or anything else to pass through. This category is typically used to create textured open map sections that have a graphics component but no physics interactions, like background terrain, or tunnel background effects.
Barrier
The barrier category is used to create barriers that players can pass through, but bullets and grenades cannot. This category is used for things like sandbags and entrances or force fields that allow only players and flags through.
Zone
Zones are areas that behave like the open category but that still detect when dynamic objects like players, bullets or grenades pass through. The zone category is often used in combination with attributes to create things like accelerators or healing and damage areas.
Bridge
The bridge category does not allow players or items to pass through, but it does allow objectives(flags) and grenades and bullets to pass through.
Item-barrier
This category allows everything except items to pass through. It can be used to create item holders and barriers. Items being held by players can still pass through.
Check the sensor box to turn the game object into a sensor.
Sensors are bit similar to the zone category. Sensor objects are primarily useful to create water regions. Once an object is turned into a sensor, it will allow players to pass through, but it will detect the player passing through.
A solid sensor object will not allow bullets to pass through, but it will allow objectives and other objects to pass through. It will trigger cluster grenades to explode, unless it has a fluid attribute.
For instance, a solid static object turned into a sensor, with the fluid attribute added, will detect players and other objects passing through and make them behave like they are submerged in a liquid. It will also add splash and bubble effects. The actual liquid ‘looks’ of water are purely graphical without and physics component, and are created with separate game objects layered on top of the fluid sensor object to create the appearance of water or other liquids. This is explained elsewhere in the manual.
This determines the density of the physics components of the game object.
This can be thought of as the resistance the object offers to being moved. The mass of the object is a function of the area of the object multiplied by the density. It can be used to make objects feel heavier or lighter.
The density value should be > 0.
Friction determines how much an object will appear to ‘slide’ or allow other objects to slide over it. Objects with higher friction will quickly slow down any other object sliding over it, though the total friction is determined by the friction of both objects involved. This should be a value >= 0. Setting friction to a very low value close to 0 will make that object behave more like ice, while high friction will make it behave more like dirt or rock. Avoid negative or very high values. Preferably keep it between 0.0 and 1.0.
Restitution is used to set the degree to which collisions with the object will be elastic. In other words how bouncy an object will be. A restitution of 1.0 means that the energy during the collision will be mostly conserved, creating a force in opposite direction to that of the collision. This would cause a player or other object to bounce. A restitution of 0 means that all energy is absorbed during a collision and it will generally prevent any bouncing.
Restitution can also be greater than 1.0, which can for instance be used to create bouncing pads. Avoid setting this value too high as it could accelerate players and other objects to great velocities causing glitchy behavior.
Linear damping only applies to dynamic objects. It is the rate at which a dynamic object will slow down once it’s set in motion. The default value is 0, meaning a dynamic object will keep moving according to Newton’s first law. A high value will rapidly slow the object, like it would while moving through thick sludge. This value should always be >= 0.
This is similar to linear damping except that it applies to the angular velocity of the object.
The default of 0 means that once the object rotates it will keep rotating unless an external force acts upon it. A high value will quickly grind the rotation to a halt. This value should always be >= 0.
This value influences how the object interacts with the gravitational field of the map.
The default value of 1.0 means that the object will experience gravitational acceleration exactly as set in the environment settings.
Setting the value to 0.0 will make the object behave like it is free floating in outer space.
A negative value will make the object float up like a balloon, which is the main use case of having a negative value. The X component of gravity is also influenced but should be 0 in almost all maps.
This is a list of shapes that is by default set to polygon.
Use the dropdown list to select a shape to add to the physics object.
Often this is automatically done when drawing terrain with the Triangulation tool, but sometimes you’ll want to do this manually.
Clicking the Add button will add the selected shape. Keep in mind that clicking the add button multiple times will add new shapes on top of the existing shape, which might not be immediately obvious. It’s possible to have multiple shapes in a single game object, but this is usually not desirable except for very specific cases like when creating small barriers or intricate dynamic objects.
Adding multiple shapes should be avoided for any game object that requires proper texturing, as texturing does not work well for multiple shapes in one game object.
Buoyancy is not completely implemented and should not be used.
Adds an anchor to the game object. The anchor appears as a red circle with a red dot in the center. Clicking on the anchor will open the Anchor panel.
Anchors can be assigned a relative position inside the game object, and they can be assigned a numerical ID that should be unique.
Anchors can be used in combination with joint attributes to connect and join game objects. This can be useful to create chains, hinges, connected (weld joined) dynamic objects and other more complex connections. This will be explained more in this document or an attached video.
Activating the Vertex tool in the Tools panel and then clicking on a shape inside the game object will activate the Shape panel.
The shape panel provides additional properties that can be set for individual shapes.
The same categories apply as in the Physics panel.
The shape panel is rarely needed since most game objects will contain only one shape (usually a polygon), and thus only the physics properties in the Physics panel need to be set.
However, there can be situations where for example a dynamic object has a solid shape and an open shape. In this case the Shape panel is needed. It allows for the creation of quirky game objects.
The anchor panel activates when you click on an anchor that was added with the Add anchor button in the Physics panel. The anchor panel provides an ID input, and an Anchor X and Anchor Y input to set the anchor properties.
The ID should be a globally unique integer(there should be no other anchor with this ID) to be able to reference the anchor when adding joint attributes. The anchor X and anchor Y are the X and Y offset of the anchor relative to the center of the game object.
The graphics panel is where the graphics component of selected game object(s) is configured. By default, game objects have no graphics component (type none), and having a graphics component is not mandatory. For instance, force barriers and map boundaries are not necessarily visible but they still exist in the physics engine since they do have a physics component. It’s also possible for game objects to have only a graphics component and no physics component. Background scenery and open terrain is an example of this.
The type of the graphics component. This can be either none (no graphics, default), colored or textured.
None
Select none from the dropdown to disable the graphics component.
Texture and color information will be retained if previously set. The same is true for Mesh group ID, which could cause issues if you have other (visible) game objects with the same mesh group ID. Avoid this situation.
Colored (legacy)
Select colored from the dropdown to create a graphics component that only has color.
This is more of a legacy feature that remained from an older version of Ninja.io.
It’s almost always better to pick the ‘textured’ type and then select the blank texture.
The default color is always white (hex: ffffff). Keep in mind that colored polygons and other shapes will be completely invisible unless the ‘Poly fill’ checkbox I schecked.
Additionally, the ‘Vertex colors’ checkbox has to be checked if you want to color the vertices of a polygon separately.
Textured
This is the preferred type for coloring and texturing polygons in game objects.
The polygon will be invisible until a texture is selected. Then, enable ‘Poly fill’ to make the selected texture fill the polygon.
The ‘Vertex colors’ checkbox has to be checked if you want to color the vertices of a textured polygon separately using the Coloring tool. The color will be multiplied with the texture value. This is useful emulating lighting and shadow effects as well as for tinting polygon meshes.
This field can be used to configure the graphics component(usually a polygon) to be more or less opaque. A value of 0 makes the graphics component invisible.
The rotation of the graphics component in radians. Usually this can be left alone unless you’re dealing with scenery like barriers or barrels.
This will rotate the graphics component relative to the game object. When a physics component is also present, the graphics will be rotated relative to the physics component as well, and the rotation of the physics component will make the graphics component rotate along with it.
This can be used to scale the graphics component independently of the physics component (if present). A negative scale will mirror the graphics along that axis. This can be useful to mirror scenery like barriers and barrels.
This will offset the graphics component relative to the center of the game object.
This is rarely needed.
Whether the selected Texture or color should fill the polygon.
Usually you want this to be enabled, so the texture will neatly fill the polygon or other shape attached to the game object.
One situation where you don’t want to enable this is when dealing with scenery graphics that should not necessarily fit to the shape, like when creating a barrier / sandbag.
You usually want to enable this as well, especially when working with terrain polygons.
It enables the coloring of individual vertices with the Coloring tool.
Clicking on the texture input field will open the Assets panel.
The assets panel contains a grid of available textures as well as a filter dropdown to choose a different category of textures. The seamless textures are used to seamlessly texture large polygon meshes. The scenery textures contain scenery graphics like barriers and barrels.
This will open a color picker where you can change the tint of the graphics component.
These input fields can be used to configure the UV coordinates of the texture.
UV coordinates describe how the texture is mapped onto the underlying polygons.
You will usually not tweak these manually.
Instead, the game offers a number of hotkeys that can be used to modify, scale and move textures. These are described in the Texturing and Hotkeys section.
This field is used to set the Z index of a graphics component.
The Z index is a very important property that determines the depth ordering and the layer that the graphics object will be assigned to. An object with a higher Z index will appear in front of objects with a lower Z index. Objects with the same Mesh group ID should have the same Z-index. The Z indexes in the editor view might not always be up to date. Press the Z key to force the Z ordering to sync.
Solid statics objects will be rendered with a shadow stroke around their edge for specific Z index values. This helps distinguish solid terrain from open terrain.
Ninja characters exist between Z index 399 and 400. They will appear in front of any object less than Z index 400 and behind any object >= Z index 400.
Solid static objects with Z indexes <200 and Z indexes >= 600 and < 800 will have a shadow stroke applied. Some particles like shell casings will also bounce off of them.
You will usually want to assign a Z index between 600 and 800 to solid terrain objects.
This allows an ID to be assigned to one or more game objects, causing them to become grouped. This has implications for how the grouped objects are rendered.
There are a few important requirements for objects with the same mesh group ID:
1. Objects with the same ID must have the same Z index.
2. Objects with the same ID must have the same texture.
3. Objects with the same ID must have the same color.
Grouped objects will be rendered as one single mesh rather than separate polygons. This can improve performance.
It’s also possible to select grouped objects all at once with the ‘Select mesh’ field in the Tools panel. Objects can also be grouped this way if they don’t have a graphics component, but this would have no effect other than having them conveniently grouped for selection in the editor, or for descriptive purposes.
It’s generally a good practice to group objects that share a common texture, z index and color, as is often the case with terrain elements.
It’s best to avoid grouping objects that are spread out all the way across the map, since this will also stretch their bounding box across the entire map, causing them to never be culled and always be rendered, which can slow down the game.
The attributes panel will appear whenever you select a game object.
It contains a dropdown with a list of attributes that can be added to the selected game object(s). A game object can have multiple attributes. Click the Add button to add an attribute.
When an attribute is added, you can select it from the list in the attributes panel by clicking on it. The right side of the panel will then display the attribute properties.
(Note: it might sometimes be necessary to scroll the scrollbar in the attributes panel up to show available properties in case it was previously scrolled down. This has to be fixed.)
The following attributes are available:
The player spawn attribute should usually be added to a static, open object without graphics (this is not required though). It serves as a spawn location for players.
Important: Maps *must* have at least 1 player spawn location.
The Team property should be either 0 or 1.
0 will spawn players for team red, while 1 will spawn players for team blue.
This value is ignored in modes without teams, such as deathmatch or 1v1.
The Mode property indicates the mode for which this spawn point is valid.
The default is all, which means the spawn point will be available in all game modes.
This can be changed to dm for deatchmatch only, tdm for Team Deathmatch only, ctf for Capture the Flag only, db for dodgeball only.
Usually this value can remain set to all, since the Team property already limits spawning for modes where teams are relevant.
If a map should be playable in both DM and CTF or TDM, then the DM spawn locations(usually distributed all throughout the map) would be set to dm, while the other spawn points(the ones specific to team modes) would be set to all and have a Team property configured to either 0 or 1. This way players can spawn anywhere in DM mode, while in CTF and TDM players will only spawn in their respective base spawnpoints.
The Region width and Region height property are used to increase the size of the spawn location. Players will spawn at a random location inside this region. The region can be thought of as an invisible rectangle centered on the game object that the Player spawn attribute is attached to.
Important: Be careful when configuring the region width, as a large region size could cause the spawn location to overlap with the map terrain, causing players to spawn and get stuck inside terrain polygons.
The Velocity X and Velocity Y property are used to set the initial velocity of newly spawned players. A negative Y velocity will cause the player to be launched up, negative X will cause them to be launched to the left etc. Usually set to 0. Do not set the velocity values too high when you decide to change them.
Allows adding a particle emitter to a game object.
Emit type: Currently the only valid emitters are ‘SteamEmitter’ and ‘SmokeEmitter’.
Frequency: How often should the particle have a chance to appear. A value of 1 means every frame. A value of 60 means once every 60 frames. (technically frequency is not the right term here)
Probability: What is the probability of the particle actually appearing. 0.0 = never. 1.0 is always. 0.5 would mean there’s 50% probability.
Limit: What is the maximum number of particles that can exist at any time. 0 = infinite.
Scale: The scale of the particle.
Region width and height: Random offset in the X and Y axis of a newly spawned particle.
Adding the boundary attribute turns a game object into a boundary.
When a player touches a boundary their character will instantly respawn.
The lethal attribute will make a game object instantly kill anyone who touches it.
KillType determines how the player ragdoll should respond when the player touches the lethal object and dies. If left empty, the ragdoll will simply become limp. When the value is all, the ragdoll will essentially explode and amputated limbs will be thrown in different directions.
The following values will amputate the respective bodypart: head, torsoupper, torsolower, armleftupper, armleftlower, armrightupper, armrightlower, legleftupper, legleftlower, legrightupper, lergrightlower. Any other value is invalid.
Team can be configured to only kill players of a specific team. This has not yet been implemented and is currently ignored.
Game objects with a damage attribute will damage players over time.
Team will only damage players of that specific team. This has not yet been implemented and is currently ignored.
Rate determines the rate at which a player loses health. It is the amount of damage inflicted 6 times a second. Players have 100 health by default meaning that a setting of 1 takes about 16.7 seconds to kill a player. A setting of 5 will take about 3.3 seconds to kill a player.
Set a static object to the Zone category to enable damage while remaining open.
Game objects with a heal attribute will heal players over time.
Team will only heal players of that specific team. This has not yet been implemented and is currently ignored.
Rate determines the rate at which a player gains health. It is the amount of health gained 6 times a second. Players have 100 health by default meaning that a setting of 1 takes about 16.7 seconds to fully heal a player. A setting of 5 will take about 3.3 seconds to fully heal a player.
Set a static object to the Zone category to enable healing while remaining open.
The item attribute allows a game object to serve as an item spawn. Like the player spawn this will typically be a static object with an open category.
Emit type: The type of item it should emit. Here is a list of possible items:
Single spawn: Whether it can spawn one or more items. 0 = unlimited, 1 = 1.
Limit charges: Whether the total number of items spawned should be limited. 0 = unlimited.
Charge multiplier min / max: ignored;
Spawn probability: The probability that an item will spawn during each spawn period. 1.0 is always, 0 = never. 0.5 = 50% probability.
Spawn period: How often the item should attempt to spawn. Equal to the number of seconds / 2. For instance, a value of 15 means that the item will attempt to spawn every 7.5 seconds.
Spawn limit: the maximum number of items originating from this spawn point that should be in the map at any given time (not including carried items).
Start time: The start point of the spawn timer of this spawn point. If the start time is equal to the spawn period, then the item will attempt to spawn immediately when the map is loaded.
The default value is 0, meaning the item will not attempt to spawn until the spawn period time is reached. This value is also equal to the number of seconds / 2.
Spawn amount: How many items should attempt to spawn.
TTL: How long newly spawned items should remain in the map. Divide by 60 to get the time in seconds. For instance, a TTL of 60 means the item will despawn after 1 second. A value of 5000 means the item will despawn after ~83 seconds.
Face: The direction that the newly spawned item should be facing. 0 = random. 1 = left, 2 = right. (note that items can be left or right facing; picking up the item and dropping it in the opposite direction will flip its facing)
The gravity scale attribute changes the gravity scale of an object separately from the physics engine implementation as configured in the Physics panel.
Offset: The Y offset from the center of the map to which the object will gravitate.
Ratio: The strength of the gravitational pull towards this point, a multiple of the gravitational strength of the map and the gravity scale of the object.
This attribute can be used to make a dynamic object gravitate towards a specific Y position in the map. Can be used to create platforms that mainly move in the X axis but also slightly bob up and down in the Y axis. Rotation locking will soon be added, which would then enable this attribute to be used to create platforms that can freely float in 1 dimension without rotating.
This can be used to create a revolute joint between two objects, similar to the type of joint used for the Ninja ragdolls.
Anchor A and B: The ID’s of the anchors that the joint attaches to. Anchors are added with the Add anchor button in the physics panel.
Collide: Whether the joined objects should be able to collide. 1 = yes, 0 = no.
L: Limit; Should the joint have limits? 0 = no, 1 = yes.
lowerAngle: The minimum angle between the joints, in radians.
UpperAngle: The maximum angle between the joints, in radians.
Motor: Whether the joint has a motor. 1 = yes, 0 = no.
motorTorque: The torque of the motor. Should be a positive or negative floating point value if motor is enabled.
This can be used to create a weld joint. Weld joints essentially ‘weld’ objects together in such a way that they behave as though they are part of the same solid object.
Anchor A and B: The ID’s of the anchors that the joint attaches to. Anchors are added with the Add anchor button in the physics panel.
This attribute will turn a game object into a flag spawn location. This only works in Capture the Flag mode.
Team: The team for which this flag spawn should work. 0 = team red(alpha), 1 = team blue(bravo).
Important: a map should never have more than 1 flag spawn location per team. While it’s technically possible to add more than one flag spawn per team, this should never be done as it will cause multiple flags to appear, which will lead to glitching and unpredictable behavior.
This adds an accelerator attribute to a game object. This will cause players to be accelerated in the specified X and Y direction. You’ll typically use a static object with a zone category for this.
Ax and ay: the x and y direction that players should be accelerated in.
Players will continue to be accelerated for as long as they are in contact with the game object that has this attribute.
Game objects with the teleport attribute will teleport a player to another teleporter when they contact that object.
Name: The name of this teleporter. This can be used to allow other teleporters to target this one.
Target: The target of this teleporter. This should be the name of another teleporter. This is where a player will be teleported to.
Touch: Whether the player should teleport when touching the teleporter. Setting this to 0 will make it a one way teleporter that can only serve as a target. Setting it to 1 will make it both a target and an entrance.
Note: when multiple teleporters have the same name and this name is targeted by another teleporter, then the player will be randomly teleported to one of them.
The animation attribute allows kinematic objects to be animated. This can be used to create moving platforms and such. This feature is subject to change as the current implementation is not consistent and difficult to work with. However, it is still usable.
FollowSteps: This property is set to either 1 or 0, where 1 indicates that the steps field will be used, and 0 means it will not be used.
Steps: This is a description in JSON format that describes the individual steps that the animation should walk through. An example value as used in the ctf_FacingWorlds map is "{"steps":[{"target":"t2elevbottom","time":1,"pause":3},{"target":"t2elevtop","time":1,"pause":3}]}"
Where target indicates the uid (a unique ID) of the waypoint attribute that should be targeted in a step, time indicates how fast the object should move to the new location, and pause how long the animation should pause between steps.
Changes will soon be made to improve working with animations, as well as the synchronization of animated kinematic objects.
Rotate: whether the animated object should rotate and how fast (in radians/frame).
Loop: whether the animation should loop.
Reverse: whether the animation should reverse when the final step is reached.
A waypoint attribute that can be used as an animation target.
Uid: the globally unique ID of the waypoint.
No longer working. Was meant to be used exclusively in Battle Royale mode.
Label
Can be used to add a text label to a game object (as seen in the training map for instance).
Text: The text of the label.
Size: The font size of the text.
Color: The color of the text.
This attribute can be added to a game object so that players inside it will be immortal.
This attribute is typically added to a static zone object, like in the Arrival (training) map, where newly spawned players are immortal.
Pvb: Player vs bot is allowed when set to 1.
bot: Bots in this zone are immortal when set to 1.
player: Players in this zone are immortal when set to 1.
Add the fluid attribute to a static solid object with the sensor property enabled to make this game object behave like fluid. Players and objects submerged in fluid will behave differently.
Density: the density of the fluid. A higher density will make players, bullets and other objects slow down much faster (increased damping).
Waves: Can be used to create a deformation effect in a fluid mesh. Usually not used because the water itself is preferably rendered with a grouped mesh with a single Transform attribute.
The transform attribute is used to create animated meshes, such as when rendering water, flag effects(like in LonelyIsland map), etc.
Important (!!): When you have a collection of triangles grouped into a mesh (Mesh group ID in Graphics panel), then only one of them should have the transform attribute.
You can check and verify this by opening existing map files with water in them.
Right now the amplitude and frequency values do not behave as they should (the shaders were updated with newer versions of the graphics library but still had to accommodate older map configurations). Test until you get the desired effect and use existing maps for reference.
Generally, none of the values except for X and Y origin should be 0.
Frequency indicates how fast the transform should cycle through its wavy motion. Higher values mean faster motion.
This attribute is used to make a texture move in the direction indicated by the Velocity X and Y inputs. The values can be positive or negative.
Important: Like with the Transform attribute, only one of the polygons in a grouped mesh should have the UV translate attribute.
This is a useful attribute for creating conveyor belt or streaming water effects.
This attribute is used to make a texture rotate.
Important: Like with the Transform attribute, only one of the polygons in a grouped mesh should have the UV rotate attribute.
This feature is not properly implemented.
Experiment with the input values until you get the desired effect.
This attribute can add a bot spawn to a game object.
Available Bot types are Ghost and Trainer.
Region width and height indicate the region surrounding the bot spawn in which the bots will be randomly distributed.
Velocity X and Y determine the initial velocity at which bots will be launched upon spawn.
Amount is the number of bots that will spawn.
Target should be left empty.
V – Zoom in
C – Zoom out
WASD – Move around
Z – Sync Z index of visible objects
Move textures: Drag Right mouse on selected, textured objects
Zoom textures: SHIFT + Drag Right mouse on selected, textured objects
Rotate textures: ALT + Right mouse on selected, textured objects
Mirror selected objects: CTRL + SHIFT + Left mouse click
Expand objects: Press N with objects selected
Contract objects: Press M with objects selected
Rotate objects: ALT + left mouse
6 Map creation
6.1 Basics
6.1.1 Texturing
6.1.2 Terrain
6.1.3 Barriers
6.1.4 Item spawning
6.1.5 Boundaries
6.2 Advanced
6.2.1 Water
6.2.2 Teleportation
6.2.3 Joints
6.2.4 Accelerators
6.2.5 UV translation
7 Modes
7.1 Deathmatch
7.2 Team deathmatch
7.3 Capture the Flag
7.4 Dodgeball
8 Optimization