From NWN1 Custom Content Guide
The SET file
This file tries to explain the various entries in a tileset`s ".set" file.
I use the rural "ttr01.set" for this.
Note that not all lines are explained. That is because I either don`t know what
they do or am at least unsure about it.
This is not carved in stone. If you notice an error or think something is badly
explained, let me know.
You`ll have to have some basic understanding on how a .set is used to understand this.
Common problems when editing a .set file:
- The comment lines (lines that begin with ';') are only valid at the beginning of the file, anywhere else, they cause corruption
- Counts aren`t sequential. It`s important that all entries are sequential and have the correct 'Count=' value (see below)
- Duplicate STRREF entries will cause problems, you don`t have to use any STRREF in a .set (see below and the palstd.itp site)
General
; NEVERWINTER NIGHTS TILESET FILE
; DO NOT EDIT MANUALLY - UNLESS YOU KNOW WHAT YOU ARE DOING
|
| [GENERAL] |
Begin of General Section |
| Name=TTR01 |
The "internal" name. Other files like doortypes.2da and loadscreens.2da reference to it. |
| Type=SET |
Seems obvious. |
| Version=V1.0 |
I edited this once and the toolset crashed. |
| Interior=0 |
Set this to "1" to have weatherand day/night FX enabled by default |
| HasHeightTransition=1 |
If the tileset uses raise/lower and looks for height=1 in [TILE] description
|
| EnvMap=ttr01__ref01 |
The default environment map (used for reflections on armor, weapons and
the like) |
| Transition=5 |
The height difference of model placed (in meters) at Height
0 and Height 1. This only describes the models height, and does
not change anything in the tilemodel itself.
You`ll have to use the raise/lower feature to make this work.
Make sure this is an integer (eg 5 ) not a float ( eg. 5,5 ) . |
| DisplayName=1606 |
The name displayed when selecting a tileset in the toolset.
It references an entry in dialog.tlk.
Change this to "-1" and add a line
"UnlocalizedName=MY_TILESETS_NAME" to make that name appear instead. |
| Border=Grass |
The Terrain of the Area`s edges. See CityExterior Tileset
for an example. |
| Default=Grass |
The default terrain that is placed everywhere when creating
a new area using this tileset. |
| Floor=Grass |
The terrain placed when using the "eraser". |
</td>
SelectorHeight=10 |
This option may not exist but does control the green placing box within toolset. For a raised tileset, raising this above 5 is recommended. |
</tr>
</td>
</tr>
|
</td>
</tr>
Grass
| [GRASS] |
The settings for the grass that appears if a walkmeshnode
of the tilemodel is set to "3 / grass" |
| Grass=1 |
Set this to "0" to turn of grass completely. You
can then remove the following lines. |
| Density=5.000 |
How strong the grass grows. |
| Height=1.200 |
The height of the grass in meters. |
AmbientRed=0.500
AmbientGreen=0.600
AmbientBlue=0.300 |
The colour settings of the grass. RGB settings. |
DiffuseRed=0.500
DiffuseGreen=0.600
DiffuseBlue=0.300
|
|
</td>
</tr>
|
</td>
</tr>
Terrain Types
[TERRAIN TYPES]
Count=3
|
The number of terrain types used in the tileset. |
| [TERRAIN0] |
First Terrain entry. Make sure ALL count entries in your tileset
begin with "0" and the last entry is count-1 |
| Name=Grass |
The name of the terrain as it will be used in the [TILE] entries
later. (CASE SENSITIVE !) |
| StrRef=63635 |
The reference to name-string in "dialog.tlk" leave this out
if you create a custom terrain and use
RESREF
RESREF
Grass
STRING
NAME
MyTerrainName
with the ITP-Tool
(See palstd.itp section)
You can use this combination with CrosserTypes, too.
|
| |
|
[CROSSER TYPES]
Count=4
|
Similar to [TERRAIN TYPES], just for crossers like road and
stream |
| [CROSSER0] |
|
| Name=Stream |
|
| StrRef=63302 |
|
</td>
</tr>
|
</td>
</tr>
Primary Rules
[PRIMARY RULES]
Count=28
|
The primary rules section. Here is determined what terrain
type is allowed to place, and what happens if a certain terrain
type is placed on and next to another. |
| [PRIMARY RULE0] |
The first primary rule.Again, watch the count ! |
| |
The use of Primary Rules is hard to explain. You got to know that terrain
is always determined
using the corners (NOT the edges) and if you place something, all tiles
adjacent are placed again, too.
(That`s why tiles change around a placed one, even if you just place basic
floor tiles)
According to BioWare`s TilesetTutorial, these aren`t really needed and
just add some logical pattern to the .SET ( ?! ) .
I`ll explain it the way I read it:
|
| Placed=Grass |
If "Grass" is placed.... |
| PlacedHeight=0 |
...and the height of the Tile is 0 |
Adjacent=Grass
AdjacentHeight=0 |
...and the adjacent tile`s corner is "Grass" with
a height of "0" |
Changed=Grass
ChangedHeight=0 |
...the terrain at the adjacent gets changed to "Grass"
with a height of "0". |
</td>
</tr>
|
</td>
</tr>
Secondary Rules
[SECONDARY RULES]
Count=0
|
UNKNOWN - it`s never used in any tileset |
| |
|
|
Tiles
[TILES]
Count=259
|
Begin of the [TILE] section. The settings in this section
mainly describe the looks and use of a given tilemodel.
We`ll use ttr01_a11_01 for this example. |
| |
Image:Tileset set1.jpg
The same tile from above and aligned to fit [Tile] entry.... |
|
|
| [TILE9] |
The number of the tile entry |
| Model=ttr01_a11_01 |
The file reference to ttr01_a11_01.mdl and it`s
walkmesh file "ttr01_a11_01.wok" |
| WalkMesh=msb01 |
|
TopLeft=Grass
TopLeftHeight=0
TopRight=Water
TopRightHeight=0
BottomLeft=Grass
BottomLeftHeight=0
BottomRight=Grass
BottomRightHeight=1 |
The tile-description section.
Take a look at above picture and you`ll understand how it`s read.
Remember tiles are always read over corners and if you place a tile, adjacent
corners are placed, too.
This starts a "snowball system" of placing tiles.
Note the edges that are left out. It looks like they aren`t affected if
you place something, but in fact
the tiles there are affected by the tiles placed at the corners. |
Top=
Right=
Bottom=
Left=
|
Here are the entries for crossers.
Crossers are additionally used over edges, not only over corners. |
MainLight1=1
MainLight2=1
SourceLight1=1
SourceLight2=1
AnimLoop1=1
AnimLoop2=1
AnimLoop3=1 |
This section is used to turn the various tile options on and
off.
The options have to be set in the model, else nothing will happen.
If there are no "sl" nodes in the model , no sourcelight (torches)
will appear for example.
You`ll see the checkboxes for this section if you rightclick on a tile. |
| Doors=0 |
The number of doors in the tile. I`ll do an door example further
down.... |
| Sounds=0 |
This is never used in any tileset .. I wonder what it does. |
| PathNode=Q |
This is a descriptor for the walkmesh type and is used in
the pathfinding routines.

The lines describe on which edge the tile can be left/entered. |
| Orientation=180 |
Turn the Pathnodes with this (in +/- 90 degrees) to tell the
engine how the tile can be passed through.
Positve values are Counter-Clockwise Rotations,
Negative Values are Clockwise. |
| VisibilityNode=A |
Same as PathNode, but for Line-Of-Sight only - Can be left
out if same as PathNode |
| VisibilityOrientation=0 |
Same as Orientation, but for Line-Of-Sight only- Can be left
out if same as PathNode |
| DoorVisibilityNode= |
Visibility Orientation for tiles that contain doors, this
node sets Visibility for closed doors |
| DoorVisibilityOrientation= |
see above |
ImageMap2D=MITR01_A11
|
This is the reference to the image that is displayed on the
map for this tile.
(MItr01_a11.tga in this case)
It should be 16x16 px , 24bit TGA, but it can be larger/smaller. |
</td>
</tr>
|
</td>
</tr>
Doors
ON DOORS
|
| Remember the Doors=0 entry above ? |
| Let`s assume it would have been Doors=1 or more. |
| In that case the [TILE] entry must be directly
followed by |
| [TILE9DOOR0] |
This is the entry for the FIRST door in a given tile.
The first part "[TILE9" references to the tile, while "DOOR0]" is the sequential number of the door.
If there would be more than one door in the tile, the next would have to
be [TILE9DOOR1] and so on. |
| Type=65 |
This references to the entry number in "doortypes.2da".
If it`s not "=0" it is a TilesetSpecific door.
Entries of "=0" let you place doors from "genericdoors.2da"
(simple doors).
Tileset specific doors get auto-placed when the tile is placed, while you
have to place simple doors by hand. |
X=2.78
Y=0.00
Z=0.00 |
The position of the door. Values are in meters. |
| Orientation=-90.0 |
The facing of the door. |
</td>
</tr>
|
</td>
</tr>
Groups
[GROUPS]
Count=63 |
The Groups section and it`s count.
Everything that is not bound in a group is subject to be placed either through
Terrain or Crosser placement and is either considered a Feature or Group,
based on your ITP entry. |
| [GROUP3] |
The FOURTH group entry (remember, 0 is the first !) |
| Name=DragSkel_1x2 |
The name of the group. It`s "for your eyes only"
as it`s not used elsewhere. |
| StrRef=63637 |
The reference to dialog.tlk entry.
You can leave this line out if you use a STRING NAME combination with ITP
tools. |
Rows=1
Columns=2 |
The size of the Group.
When placing a group it first reads all row "Tile=" entries and
then the collumns.
(hope to be right on this) |
| Tile0=127 |
The first Tile to be placed with a group and the tile that you have to
reference to
with the ITP-entry. [Tile0] is always the tile in the lower left corner of your group.
So look up the model name of [TILE127], what is "ttr01_o06_01" And create your ITP:
RESREF
RESREF
ttr01_c06_01
STRING
NAME
DragonSkeleton_1x2
|
| Tile1=128 |
The subsequent tiles. Once a tile is bound, it`s unavailable
for Terrain/Crosser placement. |
| |
A small trick: if you set a "Tile#=" to "-1"
(example: Tile3=-1), a random tile will be placed, according to terrain. |
</td>
</tr>
|
</td>
</tr>