Files
ordoor/doc/formats/sets.md

2.4 KiB

Set format information

*.set files seem to act as a palette of objects for a .map file. The map file loads a set, and can then reference objects by a small number.

Since a maximally-filled map file seems to be able to reference 91,000 * 4 objects, this is a necessary optimization for 1998-era hardware.

Complete parser implementation here.

Structure

These files are plain-text. A template.set is handily included:

set template

Defs

40 40 40 80


dirt
h_dirt
rocks
blank
blank
blank
blank
blank
blank
blank #
blank
blank
blank
blank
blank
blank
blank
blank
blank
# ...

The files are of varying lengths. template.set is 220 lines, map10.set only 83.

Whitespace and comments (#) are ignored. We have the following lines:

  • Set description (informational only)
  • Defs literal
  • 4 space-separated numbers - count of entries in each of four subsections:
    • Surface
    • Left
    • Right
    • Center
  • A list of sum(counts) .asn/.obj filename prefixes, sometimes with comments
  • They all seem to end with a comment of some sort, e.g. # meaningless comment

The groups in the Defs section are equivalent to the four types of object referenced in each map cell.

The .MAP files reference these tiles as palette entries. Each cell in the map has an object index and frame number. I suspect the object index is relative to the correct section of the palette. TODO: check this.

The references to objects can be qualified like _N. When pointing to an object with multiple sprites in it, this seems to instruct WH40K_TD.exe to assemble the sprites into one logical sprite with some height.

Example: pillar.obj. Only referred to as pillar_2 in .set files. It has 6 frames: 2x bottom, middle and tops of pillars. All 6 sprites are shown individually when referenced as pillar, but only 2 sprites, with a blue height indicator (presuambly), are shown when referenced as pillar_2:

| pillar.obj as pillar | |pillar.obj as pillar_2 |

Remaining questions

Do positions in the palette have special meaning? e.g. is a particular range always reserved for walls?

Are there any special values that don't appear as files in the Obj/ directory? blank.obj exists, so I expect not.

Once the map format is fleshed out a little more, can investigate by creating a map with a single object from the set in it and seeing what line that works out to be.