Thing
In Doom, things are used to represent players, monsters, pick-ups, and projectiles. Inside the game, these are known as actors. There are three ways to get an actor into your map. Most things are actors, so the names are often used interchangeably. A few things, however, are not actors, such as player start points.
Contents |
Referencing things
DoomEd numbers are the numbers used in the editor to represent an actor. When the map is loaded, an actor that corresponds to that number will be spawned at the location of that map thing. Although many actors have DoomEd numbers, not all of them do. For instance, a blue key card has a DoomEd number, but a rocket flying through the air does not.
Spawn numbers are the numbers used by specials such as Thing_Spawn to spawn actors in the game once the user has started playing the map. Although DoomEd numbers and spawn numbers both describe actors, they are not interchangeable—you must not use a spawn number on a map thing, and you must not use a DoomEd number for instance as a Thing_Spawn parameter.
Actor Names are the actual names each actor has internally (to test these you may want to try out the summon console command). These are used with the functions SpawnSpot and Spawn which allow you to spawn any actor available with Thing_Spawn and also all other actors (though some actors aren't meant to be spawned) such as cameras, scenery or whatever you might require.
If you create a new actor with the DECORATE lump, you can specify both the spawn number (SpawnID), and the DoomEd number (DoomEdNum). The name you give the new DECORATE item is also its actor name, so you can also spawn it using that.
There is also a third set of numbers used to represent actors that is only important for DeHackEd and similar. These numbers correspond to the order the actors were defined in the vanilla exe. They have no meaning outside of ZDoom's DeHackEd loader and as a result are not a property. In Strife, they were used to identify actor classes in conversations, but ZDoom turned these into the ConversationID property because identical actors had different numbers in the different versions of Strife available.
Specification (Doom format)
| Bytes | Data type | Description | Notes |
|---|---|---|---|
| 0-1 | Signed short | X position | |
| 2-3 | Signed short | Y position | |
| 4-5 | Unsigned short | Angle | 0=East, 45=NE, 90=North 135=NW, 180=West, 225=SW, 270=South |
| 6-7 | Unsigned short | Type | See the list of standard editor numbers |
| 8-9 | Unsigned Short | Spawn flags |
Specification (Hexen format)
| Bytes | Data type | Description | Notes |
|---|---|---|---|
| 0-1 | Unsigned short | Thing ID | This value is used for scripts and specials |
| 2-3 | Signed short | X position | |
| 4-5 | Signed short | Y position | |
| 6-7 | Signed short | Z position | |
| 8-9 | Unsigned short | Angle | 0=East, 45=NE, 90=North 135=NW, 180=West, 225=SW, 270=South |
| 10-11 | Unsigned short | Type | See the list of standard editor numbers |
| 12-13 | Unsigned short | Spawn flags | |
| 14 | Unsigned byte | Action special | An action to be executed when this thing is destroyed or picked up |
| 15 | Unsigned byte | Action argument 1 | |
| 16 | Unsigned byte | Action argument 2 | |
| 17 | Unsigned byte | Action argument 3 | |
| 18 | Unsigned byte | Action argument 4 | |
| 19 | Unsigned byte | Action argument 5 |
Spawn flags
There are several conflicts in the flag list, depending on game. Map translators are used to define how values are associated to flags in a binary map. UDMF allows to solve these conflicts by not using a bitfield array but instead referring to each flag by name. Several flags are only available in this map format.
| Flag | Z-Bit | Z-Hex | D-Bit | D-Hex | S-Bit | S-Hex | Description | UDMF name |
|---|---|---|---|---|---|---|---|---|
| EASY | 0 | 0x0001 | 0 | 0x0001 | 0 | 0x0001 | Thing is spawned on skills #1 and #2 | skill1 + skill2 |
| MEDIUM | 1 | 0x0002 | 1 | 0x0002 | 1 | 0x0002 | Thing is spawned on skill #3 | skill3 |
| EASY | 2 | 0x0004 | 2 | 0x0004 | 2 | 0x0004 | Thing is spawned on skills #4 and #5 | skill4 + skill5 |
| AMBUSH | 3 | 0x0008 | 3 | 0x0008 | 5 | 0x0020 | Thing is lying in ambush (AMBUSH flag is set) | ambush |
| DORMANT | 4 | 0x0010 | Thing is DORMANT until activated | dormant | ||||
| FIGHTER | 5 | 0x0020 | Thing is spawned when player class #1 is present | class1 | ||||
| CLERIC | 6 | 0x0040 | Thing is spawned when player class #2 is present | class2 | ||||
| MAGE | 7 | 0x0080 | Thing is spawned when player class #3 is present | class3 | ||||
| SINGLE | 8 | 0x0100 | Thing appears in single-player games | single | ||||
| COOPERATIVE | 9 | 0x0200 | Thing appears in cooperative games | dm | ||||
| DEATHMATCH | 10 | 0x0400 | Thing appears in deathmatch games | coop | ||||
| SHADOW | 11 | 0x0800 | 8 | 0x0100 | Thing is 25% translucent | translucent | ||
| SHADOW | 12 | 0x1000 | 9 | 0x0200 | Thing is invisible | invisible | ||
| FRIENDLY | 13 | 0x2000 | 6 | 0x0040 | FRIENDLY monster using Strife logic | strifeally | ||
| STANDSTILL | 14 | 0x4000 | 3 | 0x0008 | Thing stands still (only useful for specific Strife monsters or friendlies) | standing | ||
| SECRET | Thing is a secret pickup | countsecret | ||||||
| NOTSINGLE | 4 | 0x0010 | 4 | 0x0010 | Thing does not appear in single player | |||
| NOTDEATHMATCH | 5 | 0x0020 | Thing does not appear in single deathmatch | |||||
| NOTCOOPERATIVE | 6 | 0x0040 | Thing does not appear in cooperative | |||||
| FRIEND | 6 | 0x0040 | Thing is a friendly monster using MBF logic (remapped to FRIENDLY) | friend | ||||
| BADEDITORCHECK | 8 | 0x0100 | Thing was placed in a map editor that sets undefined flags | |||||
| Thing is spawned on skill #1 | skill1 | |||||||
| Thing is spawned on skill #2 | skill2 | |||||||
| Thing is spawned on skill #4 | skill4 | |||||||
| Thing is spawned on skill #5 | skill5 | |||||||
| Thing is spawned on skill #6 | skill6 | |||||||
| Thing is spawned on skill #7 | skill7 | |||||||
| Thing is spawned on skill #8 | skill8 | |||||||
| Thing is spawned on skill #9 | skill9 | |||||||
| Thing is spawned on skill #10 | skill10 | |||||||
| Thing is spawned on skill #11 | skill11 | |||||||
| Thing is spawned on skill #12 | skill12 | |||||||
| Thing is spawned on skill #13 | skill13 | |||||||
| Thing is spawned on skill #14 | skill14 | |||||||
| Thing is spawned on skill #15 | skill15 | |||||||
| Thing is spawned on skill #16 | skill16 | |||||||
| Thing is spawned when player class #4 is present | class4 | |||||||
| Thing is spawned when player class #5 is present | class5 | |||||||
| Thing is spawned when player class #6 is present | class6 | |||||||
| Thing is spawned when player class #7 is present | class7 | |||||||
| Thing is spawned when player class #8 is present | class8 | |||||||
| Thing is spawned when player class #9 is present | class9 | |||||||
| Thing is spawned when player class #10 is present | class10 | |||||||
| Thing is spawned when player class #11 is present | class11 | |||||||
| Thing is spawned when player class #12 is present | class12 | |||||||
| Thing is spawned when player class #13 is present | class13 | |||||||
| Thing is spawned when player class #14 is present | class14 | |||||||
| Thing is spawned when player class #15 is present | class15 | |||||||
| Thing is spawned when player class #16 is present | class16 |
UDMF properties
In addition to the UDMF-exclusive spawn flags above, the following properties can only be used on a thing in UDMF mode:
- Conversation = <int>: assigns a conversation ID to the thing. This corresponds to the id property of a conversation, allowing for dialogue trees specific to a given thing rather than to an entire actor class.
- arg0str = <name>: gives a string value to the first argument. This is used for named scripts and Hexen breakable items.
- arg1str = <name>: gives a string value to the second argument. This is used by certain Thing spawning specials.
