Quake Entities

Original text info on entities by Niklata (Nicholas Dwarkanath)
Additions and HTMLization by Thomas Winzig

Here's a good list of entities and their properties. This should help you in making editors/building MAP files. If you find an error, or figure something out that I don't know, please email Niklata. I'll put your contribution and you'll get your name in here as well.

You can get the most up-to-date version of the Quake Entity Specs from Niklata's Technical Resources.

When I give you frameworks for a structure, the individual entries can be in any order, and lots are optional. I try to mark if an entry is optional. Lots of stuff here may be optional, I just haven't tested it yet to know. I'll clean up this list later once I do some testing, so don't worry.

In a "" block, your choices for that block are delimited by commas.

I'll get to describing the "spawnflags" tag in a bit - it controls stuff like difficulty levels, etc. It won't take me long to do... I'll have it finished soon.


Table of Contents

Section 1: Intro
1.1: What's New
1.2: Contributors

Section 2: General entity/.map information
2.1: .map Header (entity #0)
2.2: "spawnflags" tag
2.3: Optional parameters for triggers
2.4: General entity syntax
2.5: General entity list

Section 3: Entity 'class' examples
3.1: Lights
3.2: Player movement tags
3.3: Movers (Doors, plats, etc)
3.4: Triggers/Switches
3.5: Traps/Things harmful to you
3.6: Misc./Stuff I have no idea about

Section 4: Special Entity-related structures
4.1: Moving platforms
4.2: Monsters and triggers


Section 1: Intro

1.1 What's new:

More organized, table of contents, contributors list, fixed some stuff. The "model" tag is something you don't have to worry about. This is just a reference that QBSP puts into the final BSP file, telling Quake which brush the entity behavior attaches to. Everything that I used to give a "model" tag in here now tells you that it must attach to a brush. This means that it must be put inside the actual brush declaration statement. Ex:

{
    "classname" "trigger_changelevel"
    "map" "e1m1"    // Map to change to on trigger

    {
    <INSERT BRUSH DATA HERE>
    }

}

Back to TOC


1.2 Contributors:

Thomas Winzig - Confirmation on the "model" tag's behavior. HTMLization of this doc. Clarified several things. Reorganized the document structure a little bit.

Brian Hackert - Info on how to use func_train and path_corner. Told me that "targetname" and "target" can have real names for their argument, not just numbers.

Back to TOC


Section 2: General entity/.map information

2.1 .map Header (entity #0):

"sounds" "#"             // Tells the CD player which track to play.
"classname" "worldspawn" // Tells Quake to spawn the world
"wad" "DIRPATH" // tells what graphics (texture) WAD2 file to use.
"message" "TITLE" // The title of the level
"worldtype" "#" // Describes environment? 0, 1 (Ziggurat Vertigo's), 2 will work

Back to TOC


2.2 "spawnflags" tag:

I believe that anything with an origin tag can have an optional 'spawnflags' tag. This is not confirmed, however. Tags can be combined by addition or bitwise or (really the same thing).

1    - Larger Health/Larger Ammo
2    - Megahealth
256  - Normal Skill or higher
512  - Hard Skill or higher
1792 - Appears in deathmatch only

Back to TOC


2.3 Optional parameters for triggers:

"message" "MESSAGETEXT" (use \n for linebreaks) - Displays message
 on screen.  Can be put in any trigger block - but will only work in some. For
 example, Quake won't give an error if you put a "message" block in a monster's
 declaration, but you won't see the message, either (AFAIK).

"wait" "#" // Waits # 10ths of a second.  Can be put in any trigger block.

Back to TOC


2.4 General Entity syntax:

In order to complement the Unofficial Quake Specs, rather than confuse, we will follow what those authors have described as far as entities are concerned. Maybe this document will eventually be added into the UQS?

John Wakelin (a partial author of UQS) says this about the entities in Quake:

The entities define the monsters, things, but also the positions in space where something must happen. So they are the Quake equivalent of both the THINGS and the LINEDEF types from DOOM.
The entity definitions are made up of a series of specific details that define what each is, where it starts, when it appears etc. Each specific is followed by a modifier that arguments it. All definitions have the classname specific that identifies that entity. The classname specifics relate intimately with the code lump and are the names of functions written in QuakeC.
I have chosen the terms ``specific'' and ``arg'' for the two different parts of each detail of the definition. These terms may or may not suit but, they will have to do until we learn what id calls them.
Line feeds (ASCII 0x0a) separate each definition and each line in the definition. Spaces (ASCII 0x20) separate specifics from args. I tried changing them around and it does not seem to matter what separates them as long as it is white space.

I should add that you can also use C++ style comments in map files, as we do throughout the entity descriptions. Here are the known 'specifics' and 'args' in Quake shareware (mainly reproduced from the UQS):

Specifics    Args      Description
--------------------------------------------------------------------------------
"classname"  "name"    // Type of entity to be defined (mandatory)
"origin"     "X Y Z"   // Coordinates of where it starts in space.
"angle"      "#"       // Direction it faces or moves (sometimes in degrees)
"light"      "#"       // Used with the light classname.
"target"     "t#"      // Matches a targetname.
"targetname" "t#"      // Like a linedef tag.
"wad"        "wadfile" // The wad2 graphics file used by the world for textures.
"spawnflags" "#"       // Used to flag/describe an entity that is not default.
{BRUSH INFO}           // In entities that describe triggers/doors/platforms, etc,
                       // the brush info is inserted into the entity brackets,
                       // delimited by another set of brackets.

"model" specifics/args:

"speed"      "#"       // How fast the model is moved.
"wait"       "#"       // How long a pause between completion of movement or
                       // return to original position (in seconds or 10ths)
"lip"        "#"       // Seems to be a means of adjusting the starting position.
"style"      "#"       // Possibly similar to a spawnflag?
"dmg"        "#"       // How much damage the model causes when it shuts on you?
---------------------------------------------------------------------------------

{
    "specific1" "arg1" // The first descriptors (usually classname)
    "specific2" "arg2" // The second
    ...                // Etc...

    {
        <INSERT BRUSH INFO HERE> // for entities like doors/triggers/platforms/etc
    }
}

Back to TOC


2.5 All known entities:

air_bubbles                   : Rising bubbles

ambient_drip                  : Dripping sound
ambient_drone                 : Engine/machinery sound
ambient_comp_hum              : Computer background sounds
ambient_swamp1                : Frogs croaking
ambient_swamp2                : Slightly different sounding frogs croaking

event_lightning               : Lightning (Used to kill Cthon, shareware boss)

func_door                     : Door
func_door_secret              : A door that is triggered to open
func_wall                     : A moving wall?
func_button                   : A button
func_train                    : A platform (moves along a "train")
func_plat                     : A lift/elevator
func_dm_only                  : A teleporter that only appears in deathmatch

info_null                     : no idea
info_intermission             : Cameras positioning for intermission (?)
info_player_start             : Main player starting point (only one allowed)
info_player_deathmatch        : A deathmatch start (more than one allowed)
info_player_coop              : A coop player start (more than one allowed)
info_player_start2            : ? Player2 start?
info_teleport_destination     : Gives coords for a teleport destination using a targetname

item_cells                    : Ammo for the Thunderbolt
item_rockets                  : Ammo for Rocket/Grenade Launcher
item_shells                   : Ammo for both Shotgun and SuperShotgun
item_spikes                   : Ammo for Perforator and Super Perforator
item_health                   : Medkit
item_artifact_envirosuit      : Environmental Protection Suit
item_artifact_super_damage    : Quad Damage
item_artifact_invulnerability : Pentagram of Protection
item_artifact_invisibility    : Ring of Shadows (Invisibility)
item_armorInv                 : Red armor
item_armor2                   : Yellow armor
item_armor1                   : Green armor
item_key1                     : Silver Key
item_key2                     : Gold Key
item_sigil                    : Sigil (a rune)

light                         : A projected light. No visible lightsource.
light_torch_small_walltorch   : Small wall torch (gives off light)
light_flame_large_yellow      : Large yellow fire (does not give off light?)
light_flame_small_yellow      : Small yellow fire (does not give off light?)
light_flame_small_white       : Small white fire  (does not give off light?)
light_fluoro                   : Fluorescent light? (Gives off light, humming sound?)
light_fluorospark             : Fluorescent light? (Gives off light, makes sparking sound)

monster_army                  : Grunt
monster_dog                   : Attack dog
monster_ogre                  : Ogre
monster_knight                : Knight
monster_zombie                : Zombie
monster_wizard                : Scragg (Wizard)
monster_demon1                : Fiend (Demon)
monster_shambler              : Shambler
monster_boss                  : Cthon (Boss of Shareware Quake)

misc_fireball                 : Small fireball (gives off light, harms player)
misc_explobox                 : Nuclear container (explodes upon being shot, harms player)

path_corner                   : Used to define path of func_train platforms

trap_spikeshooter             : Shoots spikes (nails)

trigger_teleport              : Teleport (all trigger_ tags are triggered by walkover)
trigger_changelevel           : Changes to another level
trigger_setskill              : Changes skill level
trigger_counter               :
trigger_once                  : Triggers action only once
trigger_multiple              : Triggers action (can be retriggered)
trigger_onlyregistered        : Triggers only if game is registered (registered == 1)
trigger_secret                : Triggers action and awards secret credit.
trigger_monsterjump           : Causes a targeted monster to jump [off something]?
trigger_relay                 : 

weapon_supershotgun           : SuperShotgun
weapon_nailgun                : Perforator
weapon_supernailgun           : Super Perforator
weapon_grenadelauncher        : Grenade Launcher
weapon_rocketlauncher         : Rocket Launcher
weapon_lightning              : Thunderbolt Cannon

Back to TOC


Section 3: Entity 'class' examples

3.1 Lights

Regular Light:

{
    "classname" "light"
    "origin" "X Y Z"    // Tells where the light is.
    "light" "#"         // Tells how bright the light is. (optional - default 200)
}

Light that must be switched on to give illumination:

{
    "classname" "light"
    "origin" "X Y Z"
    "style" "32"        // Tells Quake light must be switched on (?)
    "targetname" "t#"   // Target i.d. of "switch"
}

Torches:

{
    "classname" "light_torch_small_walltorch"
    "origin" "X Y Z"
    "light" "INTENSITY"
    "style" "#"         // ??? 1,2 will work (optional)
}

Fire:

{
"classname" "light_flame_large_yellow, light_flame_small_yellow, light_flame_small_white"
"origin" "X Y Z"
}

Fluorescent Light:

{
    "classname" "light_fluoro"
    "origin" "X Y Z"
    "light" "#"
}

Fluorescent Light (makes sparking sound):
{
    "classname" "light_fluorospark"
    "origin" "X Y Z" 
    "light" "#"
    "style" "##" // ??? 10 will work 
}

Back to TOC


3.2 Player Movement Entities

Level Change Trigger (attaches to brush):

{
    "classname" "trigger_changelevel"
    "map" "mapname"  // Map to change to on trigger (e.g. e1m8)
    "spawnflags" "#" // Flags describing the object (optional)

    {
        <INSERT BRUSH INFO HERE>
    }

}

Teleport Trigger (attaches to brush):

{
    "classname" "trigger_teleport"
    "target" "t#"     // Teleport destination name to teleport to.

    {
        <INSERT BRUSH INFO HERE>
    {

}

Teleport Destination:

{
    "classname" "info_teleport_destination"
    "origin" "X Y Z"
    "angle" "#"       // angle the player will face upon leaving teleport
    "targetname" "t#" // Teleport's trigger name
}

Back to TOC


3.3 Movers

Door (attaches to brush):

{
    "classname" "func_door, func_door_secret"
    "angle" "#" - angle it faces
    "speed" "#" - speed of movement
    "targetname" "#" - Door's trigger name
    "sounds" "#" - sound it makes
    "wait" "#" - delay before closing
    "spawnflags "#" - Flags describing the object (optional)
    "lip" "#" - ??? (optional)

    {
        <INSERT BRUSH INFO HERE>
    }
}

Possibly a special wall? (attaches to brush):

{
    "spawnflags" "#" // flags for something (optional I'd guess)
    "classname" "func_wall"
}

A platform (i.e. lift or elevator, attaches to brush):

{
    "classname" "func_plat"
    "height" "#" // height it rises? (optional)
    "sounds" "#" // sound it makes (optional)

    {
        <INSERT BRUSH INFO HERE>
    }
}

Moving platform (Attaches to brush):

{
    "classname" "func_train"
    "sounds" "#"  // Sound it makes when activated
    "speed" "#"   // Speed at which it moves (optional)
    "target" "t#" // Trigger name of its first path_corner destination
    "targetname" "t#" // Its trigger name

    {
        <INSERT BRUSH INFO HERE>
    }
}

Describes path of train:

{
    "classname" "path_corner"
    "origin" "X Y Z"
    "target" "t#"     // Trigger name of next train destination.
    "targetname" "t#" // It's trigger name.

    {
        <INSERT BRUSH INFO HERE>
    }
}

Back to TOC


3.4 Triggers/Switches

A button/switch (attaches to brush):

{
    "classname" "func_button"
    "angle" "#"   // Angle button moves?
    "speed" "#"   // Speed it moves in?
    "target" "t#" // Trigger name of target entity
    "sounds" "#"  // Sound it makes when activated
    "wait" "#"    // wait before action?  Wait until retrigger?

    {
        <INSERT BRUSH INFO HERE>
    }
}

Walk-over trigger (attaches to brush):

{
    "classname" "trigger_once, trigger_multiple, trigger_onlyregistered, trigger_secret, trigger_monsterjump"
    "style" "32"      // maybe other #s will work?
    "killtarget" "t#" // switch to "off" state perhaps? Only w/some triggers? (optional)
    "target" "t#"     // Trigger name of target
    "sounds" "#"      // Sound made when triggered

    {
        <INSERT BRUSH INFO HERE>
    }
}

Sounds like an interesting trigger:

{
    "classname" "trigger_relay"
    "origin" "X Y Z" // Where it is located
    "target" "t#" // Trigger name of its target
}

Another strange trigger tag (attaches to brush):

{
    "classname" "trigger_counter" 
    "targetname" "t#" // Its trigger name
    "target" "t#"  // Trigger name of its target

    {
        <INSERT BRUSH INFO HERE>
    }
}

Back to TOC


3.5 Traps/Things harmful to you:

Nail-firing trap:

{
    "classname" "trap_spikeshooter"
    "origin" "X Y Z"
    "angle" "#" // Angle the trap fires at
    "targetname" "t#" // Trap's trigger name
    "spawnflags" "#"  // ??? 1024 works
}

Fireballs:

{
    "classname" "misc_fireball"
    "origin" "X Y Z"
    "speed" "#" // Tells how fast the fireball moves
}

Back to TOC


3.6 Misc/Stuff I have no idea about:


Cameras for the intermission screen:

{
    "classname" "info_intermission"
    "origin" "X Y Z" // location of camera
    "mangle" "X Y Z" // location the camera looks at
    "angle" "#" // angle of the camera
}

Setting difficulty level (attaches to brush):
{
    "classname" "trigger_setskill"
    "message" "#"   // Skill level to change to.

    {
        <INSERT BRUSH INFO HERE>
    }
}

Lightning used to kill the boss of shareware.  I'll figure out how to use
it later...  I pretty much know how, I just want to test it before I
put it here :).  From the testing I've done, the lightning produced will
not damage a player, however.  It probably triggers a script to give the
boss character damage.
{
    "classname" "event_lightning"
    "origin" "X Y Z"  // location of lightning (origin?)
    "targetname" "t#" // It's trigger name
}

Back to TOC


4.1 Moving Platforms:

Creating a moving platform isn't that difficult.  First, you must define the
brush that will do the moving.  Here's an example:

{
"classname" "func_train"
"sounds" "1"
"speed" "128"
"target" "t1dest1"
"targetname" "t1"
    {
        ( -768 0 0 ) ( -768 1 0 ) ( -768 0 1 ) GROUND1_6 0 0 0 1.0 1.0
        ( -640 0 0 ) ( -640 0 1 ) ( -640 1 0 ) GROUND1_6 0 0 0 1.0 1.0
        ( 0 -384 0 ) ( 0 -384 1 ) ( 1 -384 0 ) GROUND1_6 0 0 0 1.0 1.0
        ( 0 -256 0 ) ( 1 -256 0 ) ( 0 -256 1 ) GROUND1_6 0 0 0 1.0 1.0
        ( 0 0 -256 ) ( 1 0 -256 ) ( 0 1 -256 ) GROUND1_6 0 0 0 1.0 1.0
        ( 0 0 -128 ) ( 0 1 -128 ) ( 1 0 -128 ) GROUND1_6 0 0 0 1.0 1.0
    }
}

Now you define each of the path_corners it will travel to.  When it reaches
a path_corner, it will float to the next path_corner defined in the trigger
tag of the path_corner.  The platform will start at the path_corner pointed
to by the platform's trigger tag.  It will continue the loop indefinitely
and it will go through walls to get to its destination.  Here's its path_corners
would look like:

{
"classname" "path_corner"
"origin" "0 0 0"
"targetname" "t1dest1"
"target"" "t1dest2"
}

{
"classname" "path_corner"
"origin" "0 128 0"
"targetname" "t1dest2"
"target"" "t1dest1"
}


Back to TOC


4.2 Monsters and Triggers:

Have you been wondering how you can get events to trigger when a monster dies, as first
seen in E1M2 with the demons?  Well, it's not too difficult.  When you attach a
trigger tag to a monster, the monster's death will trigger the event.  I believe
(not tested) that if other monsters have a triggername tag the same as a monster
with the trigger tag, the trigger event will only occur when all monsters with
a matching triggername tag are dead.  The monster with the trigger tag need not
have the triggername tag.


Back to TOC


Quake is ©1996 id Software. Some information about entities was obtained from the Unofficial Quake Specs, a truly awesome reference guide to Quake editing (although a little outdated in some respects).

Disclaimer: This document is provided as is and may not be perfect. I do not guarentee the validity of any of the information in it. I will not be held liable or responsible for any damages caused from use or misuse of the information contained within this document.