• Register

NetTD is a 2D space-based shooter with a handful of planned game modes. The game began as a multiplayer tower defense, hence the nickname NetTD, but has evolved far past that in our expectations. Players will take control of ships, which will have unique abilities, and will outfit them with turrets and modules as they would like. Tower defense games will take place on rectangular maps in which creeps and their paths are pre-determined. Players can construct towers on pre-determined platforms in the map. All of the pre-determined aspects are packaged in the map files and a map editor will be available for use at launch. The tower defense aspect offers a unique way to play the TD genre by forcing unconventional strategies and solutions.

Post tutorial Report RSS NetTD maps manual editing

Guide to create and edit NetTD maps with just a text editor.

Posted by on - Intermediate Mapping/Technical

NetTD supports two map file formats, JSON text files that are human readable (.map) and a compressed format (.cmap). If you want to edit a compressed map, you can use the map utilities.exe program which comes with the client.

To edit NetTD maps you need to know the JSON format. On json.org is a quick guide on the right side, this guide will explain the NetTD specific data structures, not JSON itself.

The origin of the coordinate system of the map is the bottomleft corner (0,0).
The main structure of the file is an object, or in python terms a dict. {}
It has the following keys:
paths
labels
header
objects
terrains
rounds

As only DM is working at this point, only what is needed for such a map is outlined in the following.

paths
for a DM map should always be "paths" : []

labels
Allows text to be placed on the map. It works but will likely change a lot, so just set it to "labels" : []

header
Another object/dict, it's keys are:

spawn Array, containing spawn points. A spawn point is an array of [x,y]

version Map format version, currently 1 ("version" : 1)

gamemodes set it to "gamemodes" : ["Arena"] for deathmatch

size
2 element array, of "size" : [width, height]
Both values have to be dividable by 256 without remainder.

rounds set it to "rounds" : 0

name Assuming we want to name the map Tutorial, we'd write "name" : "Tutorial"

objects
array of map objects, it's entries are arrays with 2 members of a certain format:

Wormhole example
[0,
{"entry" : [256,256],
"exit" : [1024,1024],
"radius" : 256,
"horizon" : 30,
"pull force" : 3000,
"push force" : 1000
}
]
The first element, here 0, determines the object type, in this case wormhole.the second element is an object/dict. Entry and exit are the teleporter endpoints, radius is effect radius of both the graphics and pull effect. horizon is the radius to the center in which the teleportation triggers. Pull force is the strength with which the teleporter sucks entities in and push force is the strength with which the entity is flinged out after teleportation.

Maelstrom example
[1,
{"pos" : [512,512],
"radius" : 256,
"direction" : 1,
"pull force" : 3000,
"push force" : 1000
}
]
Maelstrom's object ID is 1.
In the data area, pos is the position of the maelstrom, radius is again the effect radius.
Direction is the rotation direction, clockwise and counterclockwise (1 or -1).
Pull force is here a transversal velocity that is induced, while push force is the direct force to push out players. It does not suck in like a teleporter to prevent players from beeing stuck.

Terrains
array of terrains. Each terrain is represented by an object/dict.

Red damage terrain example
{
"type" : 1,
"rect" : [512,1024,128,256]
}

The red damage area ID is 1, speed is 2 and slow down is 3.
The rect argument is in the form of [x,y,width,height].

Rounds
set to "rounds" : []

Post a comment

Your comment will be anonymous unless you join the community. Or sign in with your social account: