Progs Dump Manual 300
Progs Dump Manual 300
0
27 September 2022
Contents
Contents
      What is progs_dump?
      What can you do with progs_dump?
Installation
Development Notes
Spawnflags
      Trigger Spawned Monsters
      Appearance Flags
Monsters
      Behavior Modifiers
      Infighting System
      misc_infight
      Custom Projectile Speed
      Homing Projectiles
      Custom Monster Models
      Custom Monster Sounds
      pain_threshold
      pain_target
      monster_boss2
      monster_oldone2
      Enhanced Zombies
      Enhanced Hellknights
      Monster Styles
      Grunt styles
      Enforcer Styles
      Hellknight Styles
      Ogre styles
      Shambler Styles
      Turret Mode
      func_monster_spawner
      info_monster_spawnpoint
      misc_teleporttrain
      Custom Monster Example
Items
        Respawning Items
        Custom Item Models
       item_armor_shard
       item_health_vial
       item_backpack
       item_key_custom
       item_key1 & item_key2
       weapon_shotgun
       Item Customization Table
Custom Sounds
      Attenuation
      play_sound_tiggered
      play_sound
      ambient_general
      ambient_thunder
      ambient_water1
      ambient_wind2
      ambient_fire
Enhanced Triggers
      is_waiting
      trigger_changetarget
      trigger_changelevel
      trigger_heal
      trigger_look
      trigger_multiple
      trigger_push_custom
      trigger_monster_jump
      trigger_take_weapon
      trigger_monsterface
      trigger_setgravity
      trigger_shake
      trigger_usekey
      trigger_void
Music Triggers
       trigger_cdtrack
       trigger_changemusic
       music/track99.ogg
trigger_teleport
        info_destination_random
        info_teleport_changedest
Enhanced Platforms
      func_new_plat
Elevators
       func_elvtr_button
Fog System
      trigger_fogblend
      target_fogblend
Train System
       func_train
       path_corner
       misc_modeltrain
Ladders
      trigger_ladder
Breakables
      func_breakable
Effect Entities
        play_explosion
        play_spawnexpl
       play_lavalsplash
       play_brlight
       play_dimlight
       play_mflash
       play_brfield
       play_gibs
       play_tele
       func_bob
       misc_bob
Particle Effects
        misc_sparks
        misc_particle_stream
        func_particlefield
        misc_particles
        misc_particlespray
Cutscenes
      trigger_camera
      info_movie_camera
      info_focal_point
      info_script
      info_script_sound
      Creating a Simple Cutscene
      Complex Cutscenes
      Cutscene Best Practices
Rotation Entities
       func_rotate_entity
       path_rotate
       func_rotate_train
       func_movewall
       rotate_object
       func_rotate_door
Sample maps
Credits
QuakeC Sources
Appendices
      Appendix A: Included Assets
      Using Model Flags
      pd_bpack.mdl skins
      k_spike2.mdl skins
      w_spike.mdl skins
      teleport.mdl skins
      pd_r_key.mdl skins
      pd_b_key.mdl skins
      pd_w_key.mdl skins
      v_spike.mdl skins
      Alternate Health Vials
      Appendix B: Finding Custom Models
      Appendix C: Development Folder
What is progs_dump?
progs_dump is a development kit for id software’s Quake. Its purpose is to give mappers more
creative options and “quality-of-life” improvements over the original “vanilla” version of the
game. The progs_dump dev kit has dozens of unique and powerful features that are explained
in this manual, in the FGDs and in the included sample maps.
The best way to get an overview of all these features is to load up the start map and play
through the short sample levels. Only a few of these have monsters and not every feature is
shown but the majority are.
 Your project should be released as a stand-alone mod and installed into its own folder
 in the Quake directory NOT in the progs_dump folder.
First, there’s the progs_dump “mod” folder. This holds all the sample maps, mapping assets,
source code and the documentation you are reading now.
The second element is the my_mod folder inside the mod_template.zip file. This is a
streamlined version of progs_dump with just the assets you need to make your mod.
Use the progs_dump mod as a reference and learning tool, then create your own Quake mod
with the my_mod folder as a base.
What can you do with progs_dump?
The devkit started as a simple project to add custom sounds and models to the game but has
grown into a powerful toolkit aimed at beginner and intermediate mappers. Most features are
from existing mods both old and recent, but there is a lot of new and unique code as well.
Features include:
Monster Customization:
No other Quake mod allows this amount of customization in such an easy way. Add custom
sounds, skins, models, health, damage, names, obituaries and much more without any coding
required. This includes customizing monsters’ models, gibs and projectiles. Grunts, Enforcers,
Shamblers, Deathknights and Ogres have multiple new attack options and we’ve added killable,
gibbable versions of the original Quake bosses as well. Rotfish even gib.
Quality-of-Life Features:
Trigger spawned monsters, continuous monster spawning and random monster spawning.
Respawn items and suspend them in mid-air. Add custom backpack pickups, drag and drop
gore decorations and create visual effects like explosions and lightning effects. Custom models,
sprites and sound effects. Multiple targets and targetnames, dormant triggers, enhanced
platforms and more.
Unique new features like trigger_look, sight_trigger, pain_target, Doom-style door behaviors and
item_key_custom.
Mission pack additions like custom gravity triggers, rotating entities, candles and proper
elevators.
Enhanced teleporters with random destinations, monster only options, changeable destinations
and more.
Popular requests like ladders, cutscenes and breakables are included. In fact, there are two
styles of breakable. An “easy” method and a completely “custom” method.
Collisions for most objects are disabled in noclip making testing and reviewing your level a bit
easier.
Bug fixes
Traditional fixes to the Shambler’s collision during combat, the Rotfish “kill count” bug, door
unlock sounds and many more “under-the-hood” code fixes. This includes fixes to the mission
packs QuakeC as well. In version 3.0.0 we’ve included most of the Quake Info Pool fixes as
well.
Credits & Acknowledgements
Programming:
iw
bmFbr
ILike80sRock
dumptruck_ds
Additional programming:
NullPointPalidin
TheRektafire
whirledtsar
TheSolipsist
JaycieErysdren
paavohuhtala
Zungrysoft
Inky
starshipwaters
Thanks to the following people for their assistance and generosity. We could not have
compiled this mod without their guidance either directly, through tutorials, mapping,
code, comments or forum posts:
Kebby, Jpal, Inky, ryanscissorhands, onetruepurple, Qmaster, RennyC, c0burn, ydrol, Preach,
Joshua Skelton, Spike, Khreathor, Shamblernaut, ericw, metlslime, necros, negke, Baker, sock,
G1ftmacher, NewHouse, Joel B, iJed, ionous, Yoder, Danz, thoth, vbs, Lunaran, Voidforce,
NullPointPaladin, Twitchy, Paril, fairweather, shinola, SunkPer, KONair, xaGe, seven,
Greenwood, hemebond, and many others on the Quake Mapping Discord and func_msgboard.
We also want to thank Pinchy, Mugwump, Len and PalmliX for their help with bug hunting in the
early days.
 A special thank you to Ian “iw” Walshaw for his excellent advice, coding, detailed
 comments and for fixing a massive list of bugs starting with version 1.1.1
Simply put, progs_dump would not have been as stable or ambitious without him.
Apologies if we're forgetting anyone else who assisted! Please let me know.
You can inquire about progs_dump on the progs_dump dev Discord. Check out dumptruck’s
Quake videos including the progs_dump playlist.
Recommended Quake Engines
progs_dump requires a modern Quake engine and was developed with Quakespasm
Quakex
(a.k.a. Quake Enhanced, Quake Remastered and KEX Quake)
Steam
https://store.steampowered.com/app/2310/QUAKE/
Do not copy new versions of progs_dump over existing installations. It’s always best to
make a new folder and move any work-in-progress maps and assets there.
   1. Unzip the progs_dump archive into your Quake folder. This will create a pd_300 folder
      inside. This directory will be a learning tool and reference for the features of the dev kit.
      Play it like any other Quake mod using the start map to explore a hub with sample maps.
      The development folder contains the FGD and DEF files that allow JACK, TrenchBroom
      and other editors to use the features of the devkit. Please refer to your map editor
      documentation for information on how to load mods and FGD files. In addition, there is a
      wad file that you can use to load the textures used in the sample maps. The QuakeC
      source code is included as well.
   2. When you are ready to create your own mod, unzip the mod_template.zip into your
      Quake directory and rename the my_mod folder to the name of your mod (lowercase
      with no spaces). This folder is a stripped down version of progs_dump without the
      sample maps and other files. However, the new models, sounds, sprites, progs.dat and
      QuakeC source code are included.
   3. When you are ready to release your mod, zip up your mod directory and make sure to
      include the progs_dump-devkit-readme.txt file and the QuakeC source folders in your
      release. If you modify the QuakeC code, make sure and include that version in your zip.
       Remove any cfg files, screenshots or save game files before zipping up your
       mod folder!
   4. Please do not include the original progs_dump sample maps in your mod. But feel free
      to use the entity setups from the samples and prefab maps in your own projects. e.g.
      particle effects or custom monster entities.
5. Make sure and share your work on the progs_dump dev Discord.
  ●   You can launch Quake with -nomonsters on the command line to disable monsters in
      your map for testing. You can also set nomonsters to 1 in the console and enter restart
      to relaunch your current map without monsters.
  ●   To check what version of the dev kit you are running, enter impulse 100 in the console.
  ●   While using the noclip command, you will not collide with item pickups and many
      triggers.
  ●   The cheat code impulse 9 will give the player any custom keys used in the current map
      in addition to all ammo, weapons and standard keys.
  ●   Triggers that feature the message key have a new spawnflag Message All Players. This
      is useful for co-op gameplay when it’s important that every player get the message.
  ●   The FGDs are not included in the my_mod folder since they aren’t required to play your
      mod. You can find the FGD and DEF files in the development folder. For more info on
      loading FGDs, refer to the documentation for your editor of choice.
  ●   The included maps prepended with pd_ and prefab_ should be enough to demonstrate
      the features of the devkit. However, I have zipped up most of the other test maps made
      during development. These can be downloaded here. Please refer to the readme for
      more info.
Spawnflags
Starting in version 3.0.0 use the Spawn Silently flag to suppress visual and sound effects when
a monster trigger spawns. In previous versions, this was enabled with the wait 1 key | value pair.
This will still work but has been removed from the FGDs.
Appearance Flags
Nearly every entity in the devkit has an expanded set of “Appearflags” compared to vanilla
Quake. These new flags allow you to customize what shows up in a specific mode of the game.
Spawnflag 16384 is not used here because it's already used for something else in progs_dump.
The new spawnflags complement and complete the set of built-in spawnflags provided by the
engine, which of course are:
These spawnflags were inspired by Quoth 2 (Kell and Necros, 2008), which included two
additional spawnflags for all entities: Not in Coop and Coop Only. In contrast to Quoth 2, the
spawnflags implemented here are Not in Coop and Not in Single Player, for symmetry with the
built-in Not in Deathmatch spawnflag.
The set of built-in spawnflags doesn't allow a mapper to treat the Hard and Nightmare skill
levels differently, because it only includes one spawnflag, 1024, which excludes an entity from
both Hard and Nightmare. The new Not on Hard Only and Not on Nightmare Only spawnflags
allow the mapper to exclude an entity from one of these skill levels without affecting the other.
The original spawnflag will supersede the new flags.
Monsters
 Some of the new features in progs_dump can drastically change the way the game
 plays. Always use proper game design principles and communicate to the player that
 there is something different than they might expect.
Starting with version 2.x.x, progs_dump focuses heavily on monster customization. There are a
lot of new key | values that can seem overwhelming at first glance. To make things easier to
digest, the new features can be broken down into three categories: behavior mods, models and
sounds.
When creating a custom monster, think of it as giving that monster a costume. You change their
appearance with a compatible model and / or a skin. Change their “voice” with new sounds.
Then disguise their attacks with projectile models, sound effects and behavior modifiers like
custom projectile speeds and damage modifiers. There are dozens of replacement monster
models, skins and sounds from various Quake mods dating back nearly 25 years. Info on where
to find them is in Appendix B.
 It’s important to note the limitations of monster customization before getting started:
   1. To use a custom monster model, it must include the same number of animation frames in
      the same order as the monster you are using as a base. Don’t worry though, there are
      many “replacement” models and skins available. See Appendix B for info.
   2. Custom monster sounds should be roughly the same duration as the original monster
      sounds you are using as a base.
   3. The “rate of fire” for a custom monster cannot be changed but the damage dealt and
      projectile speeds can be! Also, all monster projectiles can be set to homing to behave
      like Vore Balls.
   4. The Shambler’s lightning bolts cannot be replaced.
   5. progs_dump only comes with a handful of built-in models to keep the distribution size to
      a minimum. You will have to provide custom models yourself.
For more info, check out our sections on built-in assets and where to find custom models.
Even with these limitations, you can create a large variety of monsters that feel unique. Also,
progs_dump has a simple “plug-in” system where you will be able to download pre-made
monsters to add to your mods.
Behavior Modifiers
Use the following key | values to change health, damage, spawn times, visual effects and more.
 Key                         Details
                             • 0 Off (Default)
                             • 1 Berserk (skip pain animations)
 damage_mod                  Multiply all damage from this monster by this number (e.g. 4 =
                             Quad damage, 0.5 = half damage)
 delay                       The delay key allows you to add a custom delay to each trigger
                             spawn. Normally, multiple targets will spawn simultaneously. If
                             you want to stagger the time each monster enters the map, add a
                             delay.
                             • 0 None (Default)
                             • 1 Brightfield (yellow particles)
                             • 4 Bright light
                             • 8 Dim light
 waitmin                     When set, homing factor will begin to increase after this many
                             seconds (see below for details)
obit_name                 Custom description of WHO killed the player. When used with
                          obit_method, this will set part of the text for a custom obituary.
obit_method               Custom description of HOW this monster killed the player. When
                          used with obit_name, will set part of the text for a custom
                          obituary.
When using drop_items with keys, take care that the key is accessible by the player
when it spawns. Avoid placing monsters near lava or a void where the key could be
lost or break the player’s progression in other ways.
Infighting System
Monsters have an infight_mode key that affects how they will act toward other monsters. Now
mappers have much more control and can even trigger specific fights using a misc_infight entity.
Keep in mind that in the original game Grunts (monster_army) always infight and that is still the
default in progs_dump.
Selection Details
-1 Never infight
1 Infight with monsters with the same classname but different mdl_body
2 Infight with monsters with the same classname but different skin
misc_infight
This point entity allows a mapper to pit one specific monster against another. You can only use
this with a pair of monsters.
Key Details
Spawnflag Details
 1: Mutual hate       By default, the infighting does not start mutually, that is, target2 will only
                      get mad at target after it has been attacked. If you want them both angry
                      when the misc_infight is triggered then use this spawnflag.
 2: Keep player as    Allows the player to be the activator of anything the fighting monsters do.
 activator            Useful for cutscenes.
Custom Projectile Speed
Starting in version 3.0.0, the speed of a monster’s projectile (not including grenades) can be
modified. Also, these projectiles can be set to homing and the turning rate can be changed.
Similar to damage_mod, the proj_speed_mod key will change the speed of a monster’s
projectile attack. For example, you can increase the speed of the Enforcer’s lasers by setting
proj_speed_mod to 2. Likewise, you can slow it down by setting this to 0.5. The upper limit
differs for each projectile type. The max speed is 2000 Quake units per second. So for instance,
Voreballs max out at 8 and nails at 2.
Homing Projectiles
Also, starting in version 3.0.0, most monster projectiles (excluding grenades) can be set to
homing. Any non-zero value from 0.1 to 1 will enable homing for the applicable projectiles. In
the QuakeC weapons.qc file, ILike80sRock explains how homing works:
 “This finds a vector somewhere between the vector the projectile is currently traveling
 on and the vector it would normally snap to for homing. If you set homing to .25 it will
 go 25% toward the new direction, but keep 75% of the original vector, resulting in a
 wider turning range.”
Lower numbers will mean a wider homing range but homing set to 1 would mean traveling in a
straight line. Additionally, setting the waitmin key will increase the homing factor by .05 over time
after that many seconds. So for example, consider a style 1 Grunt that shoots rockets with its
homing key set to .25. If you set waitmin to 3 seconds, after that amount of time the rocket’s
homing range will increase by .05 every time it recalculates the direction. This means it will
increase the accuracy over time after that delay, and reach its target more quickly.
To disable homing on a Shalrath, set its homing key to -1. This is only applicable to the Sharath.
 Homing and speed modifiers can change the core gameplay of Quake. As always, use
 proper game design theory to communicate any drastic changes to the player so these
 unique attacks aren’t a total surprise. You can do this with on-screen text or by
 isolating the modified monster in a mini-boss arena or some other unique setup.
Here’s a list of monsters that can use these speed and homing features:
 monster_army (rockets)                      monster_wizard
 monster_army (lasers)                       monster_ogre (flak)
 monster_army (nails)                        monster_ogre (sniper)
 monster_enforcer (rockets)                  monster_ogre (lava balls)
 monster_enforcer (lasers)                   monster_boss (Chthon)
 monster_enforcer (nails)                    monster_boss2 (killable Chthon)
 monster_hellknight                          monster_oldone (Shub-Niggurath)
 monster_shalrath                            monster_oldone2 (killableShub-Niggurath)
Custom Monster Models
In Quake it’s easy to replace a monster model. Simply place a different model in the correct
directory with the same name as the monster you want to replace. The drawback is that every
iteration of that monster will have that model in the game. Same with sounds and other assets.
In progs_dump you can use the key | value pairs below to load any compatible model for a
given monster entity in your map. This allows you to mix and match monster types in the same
project. Using this with custom health, damage, sounds and other behaviors, allows you to have
a variety of monsters in your project without any coding required.
Not all of these key | values appear on each monster. For example, the Spawn has no head and
therefore, no head model!
Key Details
 skin                     Skin index number of the body model if multiple built-in skins are included.
                          Defaults to 0.
                          NOTE: If the wrong number is entered here the model will not display in
                          TrenchBroom
 skin_head                Skin index number for head model if multiple built-in skins are included.
                          Defaults to 0
 skin_proj                Skin index number for projectile model if multiple built-in skins are included.
                          Defaults to 0
 You can use Quake compatible sprites and BSPs in addition to models!
Custom Monster Sounds
As with models, progs_dump allows you to replace the sounds a monster makes with custom
audio. Most sounds can be replaced with some exceptions. Each monster entry in the FGD and
DEF details any sounds that are not obvious with a hint in ALL CAPS. e.g. snd_misc2 will
replace the Enforcer's “HALT!” sight sound. You can see tips on how to “audition” existing
sounds and models in the Custom Monster Example section below.
 Custom sound files used with these entities must be in the SOUND folder of your mod
 (or a sub folder under that SOUND folder.) There is no need to add “sound” in the path.
 (e.g. boss2/sight.wav) Most Quake source ports require a mono sound file for custom
 sounds. Do not use stereo files in your mod except for music.
Key Details
 snd_misc               Path to custom sound. Context will be different for various monsters
                        or items.
monster_boss2
monster_oldone2
These are killable variants of the original boss monsters. On Skill 1 (Easy) these both have
1000 HP. On Normal, Hard and Nightmare the HP is set to 3000. You can also set a custom
heath value, as with other monsters. Upon death, Shub will always gib but Chthon will only gib if
his HP drops below -50 with one hit (Quad Damage, etc.)
Enhanced Zombies
Zombies have more options in progs_dump. First off, there are motionless, silent versions of the
crucified “decorative” zombie. You can also create a sleeping zombie that will not awaken until
triggered. You must target these zombies if the Spawn Sleeping spawnflag is set. If you trigger
spawn a sleeping zombie into a map, you will have to target them a second time to “wake” them
up. You can see examples of the new features in the pd_zombies sample map. Spawnflag
examples:
Enhanced Hellknights
KA-BOOM! As of version 3.0.0, Hellknights now have spikes that can explode on contact using
the projexpl key. There is also a new lightning style for Hellknights detailed below.
Grunt styles
0 Shotgun (default)
1 Rockets yes
2 Grenades
3 Lasers yes
4 Nails yes
1 Rockets yes
2 Grenades
4 Lightning
As with the Grunt and Ogre you can use the mdl_ and snd_ keys to replace projectiles, head,
body, sounds and skins to create variations of the Enforcer.
Hellknight Styles
0 Default yes
 1                     Lightning
Ogre styles
0 Grenades (default)
You cannot replace mdl_proj on an Ogre set to style 3 but all other projectiles and models can
be replaced. If you prefer “lava spikes” for the Flak Ogre, set the Ogre’s skin_proj key to 1.
Style 4 Ogres shoot Chthon’s spinning, explosive lavaballs by default. As with most other styles,
you can replace the projectile model with mdl_proj and the projectile’s skin with skin_proj. You
can set the cust_avelocity key to a custom angle velocity (yaw, pitch and roll) to make the
projectile rotate faster or slower on other axes. The default is 200 100 300. Or you can set this
to 0 0 1 to disable spinning, so you can use other projectile models like rockets or spikes that
shouldn’t rotate but still explode on contact. You can set the lava ball to home in on targets with
the homing key (described above). By default, two sounds are played when lava balls are
launched: snd_misc2 is the sound made when Shalraths launch voreballs. And snd_attack is
the whoosh sound the lava ball makes while flying. Both of these can be customized. Check out
the sample map prefab_styles to see this in-game.
Shambler Styles
A Shambler set to Style 1 will throw Chthon’s spinning, explosive lavaballs. As with most other
styles, you can replace the projectile model with mdl_proj and the projectile’s skin with skin_proj.
You can set the cust_avelocity key to a custom angle velocity (yaw, pitch and roll) to make the
projectile rotate faster or slower on other axes. The default is 200 100 300. Or you can set this
to 0 0 1 to disable spinning, so you can use other projectile models like rockets or spikes that
shouldn’t rotate but still explode on contact. You can set the lava ball to home in on targets with
the homing key (described above). By default, snd_attack is the whoosh sound the lava ball
makes while flying. This can be customized. Check out the sample map prefab_styles to see
this in-game.
Turret Mode
Grunts, Enforcers, Ogres, Ogre Marksmen, Deathknights, Shalrath, Shamblers and Zombies
can be set to turret mode via a spawnflag. This includes styled versions like Rocket Grunts and
so on. They will never pursue the player “on-foot”, so keep that in mind when placing them.
Also, when the player is out of sight they will cease fire. Zombies and Ogre Marksman variants
are partially z-aware. The Shambler’s lightning attack range is increased by 300 to account for
vertical positions. Same with the Enforcer and Deathknight lightning styles. You can see turret
mode in action in the pd_turrets sample map.
We’ve included models with a few simple custom skins for styled monsters that can be set in the
skin key. But you can use your own choice of models and skins too.
func_monster_spawner
When activated, it spawns standard id1 monsters to its targeted info_monster_spawnpoint. The
monster total is updated upon each spawn unless disabled by a spawnflag (see below).
Choose the Style of monster via dropdown. Refer to the FGD dropdown for choices. Style2 set
to a value of 1 overrides Style and chooses a random monster. Count is how many
monsters to spawn in (default is 5). Wait is the default time between spawns (default is 5
seconds). Berserk can be set to 1 to skip pain animations. Can only use default health, models
and sounds. New in progs_dump 3 are the following spawnflags:
Spawnflag Details
2: Don’t spawn angry Will wait until angered to attack and move
3: Don’t add to count Does not contribute to final monster kill count
A func_monster_spawner will wait to spawn until there is nothing that can take damage around
a 128 unit radius. The info_monster _spawnpoint only sets the position for the spawn, the
func_monster_spawner determines if a monster is in range. So ensure both entities are close
together as pictured below. You cannot use multiple func_monster_spawners with one spawn
point.
 Because monster bounding boxes are so varied, it’s best to pay attention to the larger
 bounding box of the info_monster_spawnpoint. Keep it clear of doors, buttons and
 other geometry so your monsters have some room to enter this dimension!
misc_teleporttrain
This was used for the final boss level in the original game. In progs_dump you can use it as a
moving decoration with a custom model or even target it as a spawn point for a
func_monster_spawner.
 Make sure and select the Don't Rotate spawnflag when a func_monster_spawner is
 targeting a misc_teleporttrain, or you'll experience a pretty hilarious game breaking
 effect! You have been warned!
NOTE: This is a new model in progs_dump that replaces the original. You can use this new
model as a decoration or custom projectile for other monsters. Take a look at the different skins
here.
You set this up like a func_train using path_corners. By default, it will move automatically
between path corners upon map load. However, you can have it wait to move by giving it a
targetname. If you need to target it as a spawner and want it to move on map load, use the Start
On spawnflag. Here’s a video tutorial on how to use trains and path_corners in Quake.
You can add effects using the dropdown, use a custom model using the mdl_body keyvalue and
even make it Invisible with spawnflag 8. For example, you can animate a moving light around a
level using the dimlight effect with the invisible flag set.
 When using this entity to spawn in monsters, it’s best to not use it as a destination for
 the player to use. This can cause a crash under certain conditions.
Custom Monster Example
We’ve created a “plug-in” monster template for progs_dump that will make it easy to share or
reuse custom monsters. The first example of this is the Hellrath which you can download here.
This monster uses the monster_shalrath as a base and adds a replacement body model,
projectile model, a new skin, new sounds and some modifications to health and damage to
make a “new” mini-boss.
 Make sure you credit the original creators of the assets you are using in the readme file
 for your mod. And of course, make sure you are free to modify and distribute their
 work.
In this section, we’ll cover the basic steps we followed to get this working in progs_dump but we
cannot go into detail on how to use each application. Some of the apps you can use are:
Quake 1 Model Viewer view models and animations, import and export skins
AdQuedit 1.3 Powerful app that allows editing of most Quake files formats
AdQuedit Manual
PakScape Browse PAK files and export their contents.
Quake Model Editor a.k.a QME
TexMex Texture manager
Wally texture editor
Wally Tutorial
Ocenaudio excellent cross-platform, donationware audio editor
Grafx2 cross-platform, free, 8 bit paint program (a bit clunky but great for quick edits)
Grafx2 Tutorial on YouTube
Links to 8 bit friendly graphic apps
The first step was choosing a custom Shalrath model created by “Chillo'' as part of their
replacement monster pack. You can see animation frames and export a .bmp skin file with the
Quake 1 Model Viewer. Unfortunately, you can only overwrite the existing skin file. However,
AdQuedit can add skin files without replacing the original. Note that AdQuedit uses the .pcx
image format not .bmp.
We decided this monster should fire lava projectiles instead of the standard “voreballs”. Using
Quake 1 Model Viewer we changed a flag on the model to have a rocket trail. Here’s more info
on using model flags.
Next we added a skin to the existing model. Using a paint program to add a lava texture to its
limbs. We used AdQuedit to insert the .pcx format skin into the model.
 Keep in mind when you are making skins they must be in the Quake palette. You can
 learn more about Quake’s textures on Quakewiki.org and in the dumptruck_ds texture
 series on YouTube.
After that, we created some audio files to replace the standard Shalrath sounds. These must go
into the sound directory of your mod. In this case, we named a subfolder hrath_snds.
 The sounds should roughly be the same duration of the original monster sounds you
 are replacing or they might cut off in-game.
You can audition and extract sounds, models and other files using PakScape. Make sure and
use a compatible sound format. 11k, 16bit mono was used for the Hellrath. More on that in the
Custom Sounds section below.
The model files for Hellrath go in their own folder inside your mod folder. Usually Quake models
are found under the progs folder. You can place your models there if desired, it will work either
way.
Remember, model files go in their own folder (or inside the progs folder) and sounds must be in
a folder inside the sound folder of your mod.
The next step is to add these paths to your monster in your map editor. The paths to the new
sounds do not need to include sound in the value so you start instead with the hrath_snds folder
as seen below. However, if the models are in the progs directory (not pictured) you need to add
progs to that path.
The monster below does 1.5 times the damage of a Shalrath and has 600 health. When a
player is killed by this monster the obituary will read: “Player was banished by a Hellrath”.
It’s really easy to make a typo as all these entries are done by hand. So if for some reason your
monster isn’t working, check your paths for typos or other mistakes. Most of the time, this is
the culprit.
 The process for adding custom models for ammo, health and other items in the game
 is the same as above.
Multiple targets, targetnames and killtargets
Most entities can now trigger up to four separate targets at once (target, target2, target3 and
target4). They can also have multiple targetnames (targetname, targetname2, targetname3 and
targetname4). Mappers can also create setups with killtarget and killtarget2. In addition,
mappers can use target and killtarget in the same entity. This is not possible in vanilla Quake.
Multiple triggers can be used in nearly any combination or order. For example: target3 can
trigger targetname2 in a different entity.
 IMPORTANT: When using path corners or other similar entities, use the primary target and
 targetname fields for navigation only. The additional numbered fields may not function as
 expected in these cases. The Quoth mod has the same feature and the rule of thumb applies
 here. As Preach states on the Quoth tutorial site: A recommended structure is to use the
 original targetname field to give entities unique identifiers, and use the remaining fields for
 group triggers.
Items
Most items have enhanced capabilities in progs_dump. This includes ammo, weapons, keys
and power-ups. Items can be suspended in mid-air via a spawnflag or trigger spawned just like
monsters. Set a targetname for the item and select the Trigger Spawned spawnflag. Like
monsters, they can spawn silently or with the “t-fog” teleport visual and sound effects.
The effects key allows you to add some built-in visual effects to items. A drop down is available
with brightfield (yellow particles), bright light and dim light effects. The alpha key controls the
model transparency so you can have “ghostly” items or monsters.
Respawning Items
Most items can also be set to respawn. Setting the ritem key value to 1 will cause the items to
respawn. Items will respawn based on the default time settings for a deathmatch game. You can
set a custom respawn time using the respawndelay key and control how many times an item
respawns with the respawncount key. By default, items will display the “t-fog” effects when
respawning. You can mimic deathmatch respawns with the Respawn with DM Effect spawnflag.
This skips the “t-fog” effect and plays a more subtle sound effect.
In the example below, the super nailgun is trigger spawned when the player presses a button
targeting “t2”. After the player picks up the weapon it will respawn in 45 seconds but only 3
times.
Custom Item Models
Similar to monsters; health, ammo, armor, artifacts and other items in the game can use custom
models. Also, for health and ammo boxes, mappers can choose the original .bsp models or .mdl
versions by setting the worldspawn entity style key to 1. Mdls will “accept” the light on the brush
directly beneath them. Bsp models are “pre-lit” at a set value. Using .mdls can make for more
realistic lighting in your maps. Many thanks to Lunaran for sharing these mdls from his excellent
Copper mod! Of course, you can use any model for these by setting the mdl_body key as with
other entities.
Some custom models may have a different origin than the item you are replacing. If you trigger
spawn these items, the teleport “t-fog” particles will be off center. Use the particles_offset key to
adjust the coordinates. It may take a little trial and error to get the right adjustment.
You may want to edit the model’s origin using AdQuedit or a modeling program. Again, it might
take a little trial and error depending on the model. Models that rotate should not be edited like
this unless you remove the rotate flag.
Before
AdQuedit
                                               After
item_armor_shard
Originally progs_dump was less ambitious and the end goal was just an “enhanced” vanilla
Quake for mappers. But as ladders, breakables and rotating brushes were requested, that strict
goal was relaxed. Armor shards have been controversial in the single player community, but can
be useful for mappers who want to guide the player in certain directions or reward them with a
less potent power-up. These shards originally were part of the canceled RemakeQuake project.
The code has been modified a bit from that version and pd_300 has a new original model
created by starshipwaters.
                               You can set a custom model with the mdl_body key, select a skin,
                               change its name with obit_name and use a custom pickup sound
                               with snd_misc.
item_health_vial
Featuring a redesigned base theme for pd_300, these are worth 5 health. Vials will now “over
heal” the player to a max of 250 health and then “rot” as with the megahealth. As with other
items, you can set these to trigger spawn and respawn. You can set a custom model with the
mdl_body key, select a skin and use a custom pickup sound with snd_misc. See the FGD for
more info. If the new vial design is not to your liking, find out how you can download a pack of
alternate models here.
item_backpack
Use this as an alternate ammo pickup for secret areas or for other special gameplay setups.
This entity requires you to set an ammo type spawnflag. If the All Ammo flag is selected,
item_backpack gives roughly half the ammo from each of the 4 standard pickups:
                                          10 Shells
                                           12 Nails
                                          2 Rockets
                                            3 Cells
Or you can check off spawnflags to mix and match types. e.g. Shells and Cells. Override the
spawnflag defaults by adding custom amounts to the keys for ammo_shells, ammo_nails,
ammo_rockets or ammo_cells. Make sure and select both the spawnflag and matching ammo_
type. Remember, player ammo counts will always max out at 100 or 200 depending on the type!
 item_backpack can be trigger spawned, spawn silently and be suspended but cannot
 be set to respawn.
 Make sure and select one or more ammo_ type spawnflags for this to appear in your
 map. All Ammo will always override any other spawnflags.
item_backpack uses a new model created for progs_dump by starshipwaters. However, you can
use any other model similar to how monsters work with the mdl_body key. You can change the
pickup sound with snd_misc.
There are 12 different skins you can choose from, including distinct versions for the four
standard ammo types. The FGDs feature a dropdown for easy skin selection.
If you prefer the original vanilla backpack, use skin 12 or set the mdl_body key to
progs/backpack.mdl. You can set a skin index if you are using a different custom model with
built-in skins. To make an invisible backpack set mdl_body to progs/s_null.spr.
 Grunts, Enforcers and Ogres will still drop the standard vanilla backpack when they are
 killed unless you set keep_ammo to 1.
The default pickup message is `You got a backpack.` But you can set a custom message with
the netname key. 'You got' will be the prefix and the mapper chooses the rest of the message.
e.g. For 'You got a bunch of rockets!' the netname value would be 'a bunch of rockets!' In the
example below, the backpack will have the rocket skin (3), give 99 rockets only, trigger spawn
and be suspended in mid-air. Use the effects key to add lighting and particle effects.
item_key_custom
This allows mappers to use any Quake compatible model, sprite or BSP as a key. We’ve also
included new key models with many different color variations.
The new key models are not hard-coded, but you can find them in the progs folder and
set their paths in the mdl key. See Appendix A for more details and screenshots.
Key Details
 Custom keys are not represented on the player’s HUD, so keep this in mind if you are
 going to use them extensively. You will want to communicate to the player what key
 they require for a specific task using text or other methods.
The keyname value is used both for the pickup message and to associate the key with the entity
that it unlocks. To make a func_door or trigger_usekey require this key, set the keyname value
of that entity so that it matches the keyname value of the item_key_custom entity.
If different item_key_custom entities have the same keyname value, they will be treated as
different copies of the same key and may be used interchangeably. A map may have a
maximum of 23 unique keyname values across all entities.
The behavior of an item_key_custom should be as the player expects (based on the behavior of
the silver and gold keys), except for the fact that it will not appear as an icon in the player's
status bar when picked up. This is a limitation of the engine. Finally, there is a sample map
called pd_keys you can review.
weapon_shotgun
This is a pickup model that should be used when you want a player to spawn with only an ax
and then later, get the shotgun. e.g. When using trigger_take_weapon or reset_items 2 in
worldspawn.
Item Customization Table
Items have different levels of customization options depending on the type:
artifacts yes no no
weapons no no no
runes no no no
NOTE: If the wrong number is entered in the skin key the model will not display in TrenchBroom.
Custom Sounds
 Custom sound files used with these entities must be in the SOUND folder of your mod
 (or a sub folder under that SOUND folder.) There is no need to add “sound” in the
 “noise” path. (e.g. boss2/sight.wav) Most Quake source ports require a mono sound
 file for custom sounds. Do not use stereo files in your mod except for music.
Attenuation
A note on the “speed” key (a.k.a attenuation factor) in sound entities. Attenuation in Quake
means the reduction of a sound over a distance. Here’s a table of what the different speed keys
mean in progs_dump.
play_sound_tiggered
Play a sound when triggered. Most of these key / value pairs can be left to their defaults. Can
be looping or a “one off” sound.
Key Details
Spawnflag Details
 You may encounter problems triggering sounds that are far away from the player. If you
 do, move the sound and trigger closer to each other.
play_sound
Plays a “one off,” non-looped sound at a random interval. Like thunder or a monster sound.
IMPORTANT: Do not use looped sounds with this entity. For looped sounds see
ambient_general below. Check out this video tutorial on creating looping sounds for Quake.
Key Details
ambient_general
Plays a custom looped sound. Cannot be toggled off or triggered. noise = path of the sound to
play (e.g. ambience/suck1.wav)
ambient_thunder
Originally unused in the game. Plays the sound of thunder at a random interval. You only need
one of these in your map. It will play everywhere. If you want it to play locally instead, use a
play_sound with a different speed setting. The path for the sound is: ambience/thunder1.wav
ambient_water1
Swirling water sound effect. Usually this is added automatically to maps with water when you
run VIS. If you want to place these in your map by hand, you can run VIS with the -noambient
command line switch.
ambient_wind2
Howling wind sound effect. Usually this is added automatically to outdoor sections of maps with
sky textures. If you want to place these in your map by hand, you can run VIS with the
-noambient command line switch.
ambient_fire
This is a simple looping sound from the torches. Use this if you are using custom fire sprites or
models. This is the same effect as FireAmbient in earlier versions of progs_dump.
Custom Models and Sprites
misc_model
A point entity for displaying models and sprites. A frame range can be given to animate the
model. Starting with version 3.0.0, misc_model has many more features including the ability to
trigger animations on and off via a target_setstate entity. There are now spawnflags that add
gravity, solidity, and new animation options. Additionally, models can be set to Start Hidden and
can be toggled off and on. You can also set a custom bounding box size. See below for details.
 Key                                            Details
Here’s a link to an older progs_dump video that has some more info and tips for using
misc_models in your mod.
Enhanced Triggers
is_waiting
If this value is set to 1, triggers will do nothing until another trigger activates it. The FGD
provides a dropdown selection or you can enter the value by hand. See the Entity State System
section for more details.
 *In order to use is_waiting on a trigger_teleport, make sure and use targetname2 to
 “wake it up” instead of targetname.
trigger_changetarget
Use this to change the target field on an entity to a different value.
Key Details
                                                    target (default)
                                                    target2
                                                    target3
                                                    target4
trigger_changelevel
We’ve made some changes to this entity in version 3.0.0 that allows mappers to display the
“Congratulations” graphics and a custom message. These are displayed in the original game at
the end of an episode when the player gets a rune or defeats a boss. This feature can also
display multiple “pages” of text before the player warps to the next level using added
info_intermissiontext entities. If no message is set in the trigger_changlevel, the entity will work
as usual.
The setup for the custom ending screen is pretty simple. Set a string of text in the message key
of a trigger_changelevel entity. There is a limit of 40 characters on each line, so use “\n” to
continue the text on the next line if needed. If you want another page of text, use the message
key in an info_intermissiontext entity. Set the cnt to 2, which tells the game to display this as the
second “page” of text. If you want more pages, add additional info_intermissiontext entities and
set the cnt to 3 for the third page and so on.
On trigger_changelevel entities that point to a hub or start map, the Use info_player_start2
spawnflag will spawn the player on the info_player_start2 entity when the map changes. Use
this to skip skill selection when completing an episode as in the original game. Or you can return
the player to a different part of a hub map.
 Ensure there is an info_player_start2 on the map you are changing to when the
 info_player_start2 spawnflag is used.
Key Details
Spawnflags Details
1 No Intermission
2 Ignore info_intermissiontext
8 Start off
 16                   Use info_player_start2
trigger_heal
When a player enters this trigger they are healed at a rate of 5 HP per second (by default.)
Key Details
The entity targeted by trigger_look needs to be an entity with a bounding box (bbox), collision
(solid), be targetable and visible (not moved out of bounds). A func_wall is a great example
although entities like gibs, lasers, dead monsters, or others can be targeted as long as they are
"solid" by using the solid spawnflag where applicable.
A func_illusionary doesn’t work because it doesn't have a bbox that interacts with the player. A
func_detail is ignored, as it cannot be targeted.
If you need an invisible brush, use a skip textured func_wall. If you need to avoid triggering
a second time use a trigger_relay to killtarget the trigger_look's target or the trigger_look itself.
Also, the default distance from the player to the look target is 500 Quake units. If the target
needs to be farther away or closer, set the speed key to the proper distance. Use a brush as a
"ruler" to measure the distance in TrenchBroom if needed. You can set a custom sound by
setting sounds to 4 and adding a path to the sound in the noise1 value.
This will not work or is not recommended with the following brushes: func_illusionary, any func
detail variant, func_group, func_particle_field, non-solid func_laser, func_bossgate or
func_togglewall.
 Don’t use items or monsters as the trigger as they can be removed and /or lose their
 bbox upon death. .
Key Details
In this example, we used a func_wall textured in skip. The reason this is used instead of the
rune is that the rune’s bounding box is smaller and farther away, making it harder to trigger
correctly during testing.
We used a larger brush in this case and killtargeted it before the player could collide with it. If
the setup is in a smaller area you will likely be able to use the entity itself. Test early! Test often!
One tip is to have a backup method of targeting entities in case the player doesn’t look at what
you need them to trigger! In this map, we used the button nearby to killtarget the func_wall just
in case the player missed this moment in the “story.”
trigger_multiple
We’ve added a Wait for retrigger spawnflag to the standard trigger_mutiple. This allows you to
toggle these in more simple setups without having to use target_setstate entities.
trigger_push_custom
This can be used to create traps, jump pads, water currents and more.
If the Start Off spawnflag is set the entity will not trigger until targeted. This can be targeted and
toggled off and on. If the Silent spawnflag is set it won't make the standard “windfly” sound. Use
Custom Noise spawnflag and the noise key/value together to use a custom push sound.
Custom sounds should be "one off” sounds NOT looping sounds. A good way to simulate a
water current is to have the trigger_push_custom under the surface of your water brush by
about 32 units. You can see an example in the pd_gallery.map
trigger_monster_jump
If the Start Off spawnflag is set the entity will not trigger until targeted. This can be targeted and
toggled off and on. So monsters can be attacking from a distance and then be triggered to jump.
trigger_take_weapon
This will remove the shotgun from the player’s inventory and all shells. Place this over an
info_player_start to have the player start with only the ax… or use this trigger to surprise the
player in some devious way. Make sure and place a weapon_shotgun in your map for the player
to get eventually!
An alternative would be setting reset_items to 2 in your worldspawn if you want an “ax only”
start.
trigger_monsterface
Running monsters that cannot see their target and touch this, will face in the direction of the
trigger's angle instead of the unseen target. Use this trigger to make monsters leave their
sniping spot and execute complex maneuvers.
Key Details
But you can guide the monster once they lose sight of the player with a series of two or more
trigger_monsterface brushes. As you can see below, the triggers point the monster in the
correct direction using the angle key. This won’t upgrade the monster AI, but it’s a powerful new
tool for monster setups if used wisely.
 The amount of gravity can only be changed by touching another trigger_setgravity with
 a different setting.
The gravity key defaults to 0 which is normal gravity. Lower numbers (e.g. 25) equal lower
gravity. Setting 100 is normal gravity. Numbers above 100 will make the player “heavier”, i.e.
harder to jump.
 If you want multiple trigger setgravity triggers in one room or area, make sure the
 brushes are not touching each other. This can cause the triggers not to work properly.
trigger_shake
Earthquake trigger - shakes players in its radius when active. Strength of the tremor is greatest
at the center.
dmg is strength at center (default is 120.) wait duration of shake (default is 1.) count effect
radius (default is 200.) noise path of sound to play when starting to shake. noise1 path of sound
to play when stopping. We’ve included one earthquake sound effect, see Appendix A for details.
targetname must be triggered. The VIEWONLY spawnflag shakes the view, but player
movement is not affected. Check out the pd_bosses and pd_lava sample levels to see this in
action.
trigger_usekey
Variable sized single use trigger that requires a key to trigger targets. Must be targeted at one or
more entities. Use the message key to create a custom message for this. e.g. “Bring the Gold
Key here mortal!” This trigger can be set to dormant with is_waiting 1. Setting cnt to 1 will not
remove the key from the player’s inventory, which mimic’s the key behavior of Doom. Make sure
and add this key | value to all doors and / or let the player know the default key behavior has
changed. e.g. Perhaps a pickup message on the keys that reads: “This key works on many
doors.”
trigger_void
Use this for a 'void' area. Removes monsters, ammo, etc... also kills players. Spawnflags can be
used to protect players or monsters.
Music Triggers
These allow you to change or start a music track. One is brushed based and the other is a point
entity that needs to be activated by a trigger. They basically work the same with some
differences noted below. The reason there are two methods is to ensure backward compatibility
with an older progs_dump based mod.
Unfortunately, you cannot fade music up or down and the music track will begin immediately.
 We recommend using track numbers 12 and up for your custom music since track02
 through track11 are the original track names. Some players like to play maps with the
 original soundtrack.
trigger_cdtrack
A point entity. The number of the track to play goes in the count key. e.g. 32 for track32.ogg
See trigger_changemusic below for more information on formats etc. NOTE: the track number
uses the count key here but trigger_changemusic uses the sound key for the same info. Also,
this entity does not use the entity state system while trigger_changemusic can.
trigger_changemusic
A trigger brush that changes the currently playing music track. The number of the track to play
goes in the sounds key (just like worldspawn). Most Quake engines require the XX for
trackXX.xxx format. e.g. 02 for track02.ogg or 98 for track98.mp3
Different Quake engines play different formats. This is why Quakespasm, Ironwail and vkQuake
are recommended, as they can play mp3, ogg, wav and FLAC formats. You can read more
about formats here and much more detailed information about how to format music for Quake
here.
music/track99.ogg
We’ve added this silent file to progs_dump so mappers can “stop” a music track altogether if
desired. Simply use one of the two methods above and change the track to 99 in the
appropriate key for track99.ogg You can rename this to whatever you’d like as long as it follows
the naming scheme described above.
trigger_teleport
info_destination_random
progs_dump adds a number of new features to trigger_teleport. These are selected with new
spawnflags. In the case of the random spawnflag, there is a new entity info_teleport_random
which is a random destination marker for the trigger. info_teleport_changedest in another entity
that can be used to tell a trigger_teleport to change its target value to a different destination.
More info below.
Spawnflag Details
Using the random spawnflag on trigger_teleport requires use of the count key and targeting a
info_teleport_random (instead of the regular info_teleport_destination). This causes the
teleporter to send the player to a random destination among the info_teleport_random markers
in the level. In the count key, add a number equal to the number of info_teleport_random entities
you placed.
info_teleport_changedest
Allows a mapper to change the target of a teleport_trigger. Useful in maps where the player may
fall into a void and the mapper wants to update where they "respawn" as they progress through
the level. Could also be used for teleport puzzles and more. This requires the addition of a
trigger_multiple in some setups.
Key Details
NOTE: The best way to understand how this works is to look at the sample map
pd_change_dest.
The basic workflow is to set up a trigger_teleport with a target as usual, then add a targetname.
However, instead of using an info_teleport destination, the targetname will be referenced by an
info_teleport_changedest point entity. The info_teleport_changedest’s target key should match
the targetname of the trigger_teleport. The message key is the “replacement” targetname for the
trigger_teleport. Finally, the targetname is used to trigger this entity. This pattern can be
duplicated multiple times to change the destination of a single trigger_teleport.
The text below was adapted from the Alkaline Devkit Mapping Guide by bmFbr.
Starting in version 3.0.0 progs_dump has a state system somewhat similar to AD's "estate"
system and Copper's target_lock entity. With it you can disable/enable entities at will, giving you
greater control over complex map scripting and events. Entity behavior when disabled is
class-dependent. Take a look at the prefab_estate sample map for examples.
target_setstate
You set an entity's state using the target_setstate point entity. You can directly disable, enable,
or toggle the state. Target entities can start the map already disabled through the spawnflag
Targets start disabled.
If you need to target an entity that has its behavior changed when given a targetname (like
func_door or trigger_teleport), you can make the target_setstate target the entity's targetname2
field.
This system is integrated with dormant triggers (is_waiting key), meaning that you can "wake" a
trigger not only by triggering it, but also by using a target_setstate on it.
The entity's state is kept under the estate field, with 0 meaning enabled/normal operation, and 1
disabled. So for triggers, you're able to make them start off by directly setting this value to 1.
You cannot do that to doors nor buttons, in those cases you need to use a target_setstate with
"start disabled" set. In some cases, the FGD will not display the estate field, but you can add
this by hand if needed. A lot of entities support enabling/disabling:
When disabled, most trigger_* brush entities get their touch action turned off. This includes
self-sufficient entities that don't need to target anything, like fog triggers, ladders, monsterjumps,
changelevels, etc.
Also, any entity that fires their targets won't do it while disabled (like trigger_relay), and a
trigger_counter won't get its use count increased.
Doors
Like in Copper, disabling a door makes it not respond to touches or triggers, and disables its
trigger field. Doors will also close immediately when disabled. Toggling doors or with wait -1 set
won't close by default, but you can change that behavior using the spawnflag Force all doors to
close. In this case, if re-enabled, the door will return to the position it was before disabling.
Buttons
Also similar to Copper, buttons depress themselves when disabled and cannot be activated. If
the button has a wait -1 value (that is, it's a press-once button), when re-enabled it'll reset back
to its un-pressed state regardless if it had been activated before. You can change that using the
spawnflag Don't reset button state, in which case it'll revert to its previous state when
re-enabled.
Key Details
Spawnflag Details
The text below was adapted from the Alkaline Devkit Mapping Guide by bmFbr.
trigger_filter
This point entity relays only if a given condition evaluates to true, unleashing ultimate scripting
capabilities. You can test various fields on the entity targeted by the include field (you can target
another entity's targetname2 as well). If you leave the include field empty, it'll test against the
activating entity instead, be it a player, a monster or anything else - see trigger_everything
below for more details.
You can, for example, relay a trigger only if a door or plat is in a certain position, or if a targeted
enemy is alive or dead or below a certain health amount, or if the player is carrying some
specific weapon or item, or if the activator is a certain type of weapon projectile - the possibilities
are almost endless.
In case you're filtering to activate only in case if it's a specific weapon projectile (like a grenade
for example), you can make the targets fire with the activating entity's owner as the activator
with the spawnflag Relay activator as owner - say, if the trigger is activated by a player's
grenade, it'll fire with the player as activator, instead of the grenade itself.
There are various fields available to test, selectable through the style key. They all fall into three
field types (float, flag and string), and for each there's a set of operations available to evaluate,
selectable through the weapon key.
Float types can do all operations, and are compared to this entity's count field. Flag types
support Equal and bitwise AND, and are compared to the aflag field. String types have only
Equal evaluation, and are compared to this entity's type field. You can set the trigger to fire if the
condition evaluates to false by activating the spawnflag Trigger if false. It'll never fire if the entity
targeted by include isn't found, regardless of this spawnflag.
If you need to evaluate more than one condition, you can chain multiple filters in a row. Also, the
state of the last evaluation is stored in this entity's state field (1 for fired, 0 for not fired).
trigger_everything
A no-holds-barred touchable solid trigger. Everything triggers it. Players, monsters, projectiles,
gibs, even other solid entities like doors and plats.
It can only fire targets matching its target field. Due to its "fire-all" nature, it doesn't have support
for the 'target2-4' fields, neither message nor killtarget. Useful when used in conjunction with the
trigger_filter point entity to filter out its firing.
By default it'll fire for each and every registered touch, even if simultaneous. If given a wait
value, it'll act like a trigger_multiple, where a single activation puts it on hold for wait seconds. If
the target is a trigger_filter, you can set it to wait only if the filter evaluates to true through the
spawnflag Wait only if trigger_filter evaluates to true.
Enhanced Platforms
func_new_plat
This entity adds new capabilities to plats. It uses spawnflags to dramatically change its behavior.
As with the standard plat, build your plat in the raised position so the entity will be lit correctly
when you compile your map.
 You must use one of the following spawnflags with func_new_plat. Even though they
 use the same entity name, each spawnflag creates a very different plat.
Spawnflag 1: Setting the Plat Start at Top spawnflag creates a plat that starts at the top and
when triggered, goes down, waits, then comes back up. health = number of seconds to wait
(default 5)
Spawnflag 2: Setting Toggle Plat creates a plat that will change between the top and bottom
each time it is triggered.
 You must use the height key when Toggle Plat is used. Use a negative height number
 to start the plat off in a lower position.
Spawnflag 16: Plat2 creates a plat in the bottom position, just like the standard plat. If a plat2 is
the target of a trigger, it will be disabled in the lowered position until it has been triggered. Delay
is the time before the plat returns to its original position.
You can set the height to tweak the amount of lip needed. See The Gallery map for an example.
Elevators
func_elvtr_button
This entity turns a func_new_plat into a multi-floor elevator. Here are the steps to follow to
create one. You can see this setup in the pd_elevator demo map:
First, create a func_new_plat. Select the Elevator spawnflag (4). Set the cnt key to the number
of floors (3 in the demo map). Next, set the height key to the vertical distance between floors
(256 in the demo map). Then, give the func_new_plat a targetname.
By default, the elevator starts at the bottom floor, so that's where the func_new_plat needs to be
positioned in the editor. Alternatively, if the mapper wants it to start at the top floor, they can
manually position the bmodel at the top floor and set spawnflag (8) Elevator Start at Top.
With the func_new_plat done, create any number of func_elvtr_button entities. Make each
func_elvtr_button target the func_new_plat. A func_elvtr_button is an "up" button by default. To
make it a "down" button, use the spawnflag Down Button.
When the spawnflags are set to elevator the wait key on a func_new_plat is defaulted to zero.
This means the player will be able to hit another button right away between floors as seen in the
demo map. The wait key on a func_elvtr_button behaves just as a regular func_button would,
controlling how long before you can hit a button each subsequent time.
NOTE: any func_elvtr_button will act as a "call" button if the elevator isn't already at that floor.
Fog System
Starting in version 3.0.0, progs_dump has a new fog system that allows mappers to change fog
values over time or distance. One example of this would be an outdoor area with one fog color
and density and when the player moves inside an indoor area these values change. These new
entities are based on The Copper mod’s implementation with changes that were incorporated
into the Alkaline mod by bmFbr. They also work similarly to the fog triggers in Arcane
Dimensions.
Most modern Quake engines feature a fog system and most of these are identical since they all
stem from the same source code. Usually, a mapper can simply set a global fog density and
color in the worldspawn entity. It’s important to note that these triggers don’t use these values.
Lunaran explains all this in detail in the Copper manual:
 An important thing to remember: the fog key / value that goes on Worldspawn doesn't interact
 with this system. It is a feature of various engines (such as those in the Fitzquake family) and
 isn't interpreted by game code. The reason for this is that it's interpreted as four values (one
 for density and three for color) and set by the engine at load time. The numeric fields that are
 passed on to the game code (ie Copper), however, can only be one value (a float) or three (a
 vector). If you set fog in your world with a fog parameter on worldspawn, and never bother
 with fog_color and fog_density on any entities, you'll get the usual static global fog the way it's
 always worked. Color and density on a player start will be evaluated on the first frame of
 gameplay, and will override any fog set by the engine.
If you are planning to use the fog system in progs_dump, use the key | values in the various
controller entities instead of setting this in the worldspawn.
 These fog entities can cause slowdowns and other issues if your triggers are too large.
 Also, a bug in most quake engine ports will reset the eye position smoothing that
 happens when climbing stairs or riding a plat on every frame that a 'stuffcmd' is sent,
 so fog transitions during upwards motion will cause noticeable stuttering.
If you want to learn more about how fog is used in Quake check out my Skyboxes and Fog
tutorial on Youtube. There’s also some good information on the VDU website.
trigger_fogblend
Acts as a smoothly blending portal between two zones of different fog. Sets the fog for any client
passing through it, blending their global fog settings between fog_color and fog_density and
fog_color2 and fog_density2 proportional to their position within the trigger.
Key Details
 angle             The axis of motion on which the blend happens is defined by angle, pointing to
                   whatever zone has color2 and density2. Trigger therefore has two 'sides': the side
                   that angle points to, and the opposite side.
 distance          Override the length of the blend period in world units - defaults to bounds size on
                   'angle' otherwise. This is only useful for diagonal triggers.
target_fogblend
Activator's fog will be blended over time from start to end values.
Key Details
 angle             The axis of motion on which the blend happens is defined by angle, pointing to
                   whatever zone has color2 and density2. Trigger therefore has two 'sides': the side
                   that angle points to, and the opposite side.
speed2 Time to blend back, if different than speed (-1 for instant)
Spawnflag Details
1 One-Way Only
2 Reverse Start/End
 4                 All clients
Other Enhanced Entities
Shooters
The original trap_spikeshooter shot only nails and lasers. All three of these entities can now
shoot lavaballs, rockets, Voreballs, grenades or gibs. Set the spawnflag accordingly. Use the
silent spawnflag if needed. Use the key state 0 for initially off, 1 initially on. (0 default) Refer to
the table below for specifics on how to trigger these.
Entity Details
Thanks to xaGe, starting in pd_300, the shooter type selected via spawnflag will display the
correct projectile in TrenchBroom 2022.1 and above.
func_counter
This is used to trigger things in a series. You can do some amazing new game play setups with
these. Make sure and take some time to play with this one and take a look at the pd_counter
sample map.
func_oncount
For use as the target of a func_counter. When the counter reaches the value set by count,
func_oncount triggers its targets. count specifies the value to trigger on. Default is 1. delay how
much time to wait before firing after being triggered. You can see func_oncount in action when
the sarcophagi burst open in pd_zombies.map and when used to animate the particle fields in
pd_ladders.map.
func_door
Setting cnt to 1 will not remove keys from the player’s inventory, which mimic’s the key behavior
of Doom. Make sure and add this key / value to all doors and let the player know the default key
behavior has changed. e.g. Perhaps a pickup message on the key that reads: “This key works
on many doors.”
Usually, key doors will remain open after use. However, func_door has a new spawnflag called
Doom-style unlock that will close the door after unlocking it. Setting this spawnflag will set the
door to cnt 1 automatically, retaining the key in the player’s inventory.
func_bossgate
From Quakewiki.org: In vanilla Quake func_bossgate is used in the start map to block entrance
leading to the ending level with the final "Boss". When a player completes all four episodes and
collects four item_sigils (Runes), the floor would be removed once the player enters the start
map again. progs_dump now has a spawnflag that will reverse this functionality.
func_episodegate
From Quakewiki.org: The func_episodegate is used in vanilla Quake to create a special
func_wall in the start level. It is tied to a specific item_sigil (Rune) in the player's possession
upon entering a level. In the game it is used to block access to an episode that has already
been completed by the player. As such there are four different func_episodegates each one
related to a specific item_sigil. progs_dump now has a spawnflag that will reverse this
functionality.
func_explobox
An explosive brush entity. Works just like misc_explobox but is made from a brush you create as
opposed to the default model.
func_fall
A brush that drops and fades away when touched and/or triggered. Add some spice to your
jumping puzzles or other scripted sequences! Monsters will not trigger func_fall but will be
gibbed if one falls on them. noise = sound to play when triggered, the default is a switch sound.
wait = wait this long before falling. Use the DONT_FADE spawnflag if desired.
 When a func_fall brush touches another brush or entity it will stop, which can look odd
 in certain situations.
func_fall2
This is an enhanced version of func_fall that has different properties than the original and a lot
more functionality. For example, func_fall2 will not gib monsters but you can set them to trigger
it, unlike the original. These take a bit of set up, so refer to pd_prefab_func_fall2.map for more
information and examples you can modify for your maps. Whirledtsar has generously added the
Breakable spawnflag in version 3.0.0.
Key Details
If you need a falling brush to remain solid, use the original func_fall and not func_fall2.
 When the spawnflag is set to Breakable, you can set one of 32 styles from the Style
 dropdown menu just as with func_breakable. One key difference is that cnt is already
 used in func_fall2 for a different function. So set the count key to the amount of debris
 you want. (default is 5)
When using the avelocity key, add an origin textured brush at the point you want the brush to
rotate around. This brush must be part of the func_fall2 brush entity. In TrenchBroom you would
control click both brushes and then right click to make them a func_fall2.
func_togglewall
Creates an invisible wall that can be toggled on and off. START_OFF spawnflag means the wall
doesn't block until triggered. noise is the sound to play when the wall is turned off. noise1 is the
sound to play when the wall is blocking. dmg is the amount of damage to cause when touched.
You can see an example of this in the pd_ladders example map above the barred teleport area.
func_togglevisiblewall
A brush model that can be toggled on and off. Behaves much like a traditional func_wall in any
other way, but you can target it to toggle visible/invisible. If the entity has a switchable shadow it
also toggles. Spawnflag 1 will start the brush off. Spawnflag 2 sets it as non-solid.
func_laser
A togglable laser, hurts to touch, can be used to block players. START_OFF: Laser starts off.
LASER_SOLID: Laser blocks movement while turned on. Keys: dmg damage on touch. default
1 alpha approximate alpha you want the laser drawn at. default 0.5. alpha will vary by 20% of
this value. message message to display when activated message2 message to display when
deactivated.
 Use fullbright textures with func_lasers to ensure they stand out against darker
 backgrounds. Kreathor’s Prototype wad has a good selection.
Lightning Entities
ltrail_start
ltrail_relay
ltrail_end
These lightning trail entities can be used for traps, decoration or for other scripted events. For
the example below there are two entities. ltrail_start and ltrail_end, they are targeting each
other.
If you want a chain of lightning events you would use a number of ltrail_relays between the start
and end targeting one to the other, much like you would a path_corner with a func_train.
 The key / values are weirdly named in these entities. This is a quirk of QuakeC, where
 coders try to limit the amount of fields used by “recycling” unused fields to save
 memory.
ltrail_start Starting point of a lightning trail. Set currentammo to the amount of damage you
want the lightning to do. Default is 25. Set frags to the amount of time before the next item is
triggered. Default is 0.3 seconds. Set weapon to the amount of time to be firing the lightning.
Default is 0.3 seconds. Set sounds to 1 for no sound. (Yes, it is weird.) Set the TOGGLE
spawnflag if you want the lightning shooter to continuously fire until triggered again. Set the
START ON spawnflag to have the lightning shooter start on. Do NOT use both these spawnflags
at once.
ltrail_relay Relay point of a lightning trail. Set currentammo to the amount of damage you want
the lightning to do. Default is 25. Set frags to the amount of time before the next item is
triggered. Default is 0.3 seconds. Set weapon to the amount of time to be firing the lightning.
Default is 0.3 seconds Unfortunately, ltrail_relay entities cannot be set to silent.
ltrail_end Ending point of a lightning trail. Does not fire any lightning. Set frags to the amount of
time before the next item is triggered. Default is 0.3 seconds.
 To have a continuously firing bolt between two points, have a ltrail_start and ltrail_end
 targeting each other in a loop and set frags to -1. The sound this makes is not ideal, so
 consider making these silent and use a play_sound_triggered with a custom looping
 sound. This is shown in the pd_lasers sample map. In the devkit,
 sounds/dump/elec22k.wav is included for this very reason.
gib_(classname)
Easily add these bloody decorations to your map. (Also see monster_dead_(classname) below.
You can use the SOLID spawnflag to enable collision on the model but clip brushes will work
even better.
If you are using TrenchBroom take extra care when rotating these entities. The way
TrenchBroom handles rotations for custom models requires a work around in some cases. If you
want to simply rotate the gib model around the z axis there is no problem. However, if you wish
to rotate the model in the X and Y or any combination, you will need to manually type in X Y and
Z values before using the rotate tool. To do this, add the angles key (with an s) and type in
something like 0 45 0 as the values. Then you can select the rotate tool and adjust the other
values using the widget. Keep in mind the values 0 0 0 will not work. Also the angle key (no s)
should be blank or set to 0 when using the angles key.
monster_dead_(classname)
e.g. monster_dead_ogre More decorations for your maps. You can use the SOLID spawnflag to
enable collision on the model but clip brushes will work even better. Keep in mind the same
issue with rotation mentioned above applies to these models as well.
Worldspawn
Features a reset_items key (default 0). Set to 1 to make the player start with the default shotgun
and ax. Set to 2 for an ax only start. Starting with progs_dump 3, you can set default models.
This allows you to on a map-by-map basis select "default" health / ammo / armor mdls.
IMPORTANT: If you are replacing the armor model, make sure it uses multiple skins as the
original does, or you will get an error on Yellow or Red armor in-game.
Saves the game when triggered by a player. Never appears in multiplayer. The messages tend
to stomp any other prints on screen in most Quake engines, So use a delayed trigger_relay if
you fire this from an important pickup or trigger that puts text on screen more important than the
autosave blurb.
 By default, the quake.rc file in progs_dump automatically binds the F8 key to load
 autosaves similarly to how you can quicksave and quickload in the vanilla game with
 F6 and F9 respectively.
light_candle
               A simple light emitting candle from Mission Pack 2. You can place them into the
               ground for shorter varieties and rotate them for variety.
light_sprite_flame
New in pd_300, this is a drag and drop light entity with an animated flame sprite created by
starshipwaters. Currently, the sprite cannot be displayed in the TrenchBroom entity browser. The
start of the 13 frames of animation is randomized so each iteration will look slightly different.
Train System
Starting with version 3, progs_dump has reworked trains that offer many more options including
the ability to animate models (including monsters) along a series of path_corners, trigger events
at path_corners, easier alignment options and more. There are now two train options: func_train
and misc_modeltrain. The new system was created by bmFbr based on the Alkaline devkit and
the custom alignment feature was added by TheRektafire. See prefab_trains for an example of
these new entities.
 The 3.0.0 version of func_train is incompatible with prior versions of the devkit. The
 original RETRIGGER spawnflag was 1. It has been reworked and now is spawnflag 2
 Move on trigger. In addition, the noise keys have changed and have new functionality.
func_train
Trains are moving platforms that players, monsters and items can ride on. The target's origin
specifies the min point of the train at each corner but you can now use an origin brush as part of
the train to make alignment easier (see below). The train spawns at the first target it is pointing
at. If given a targetname, it'll only start moving after triggered. path_corners with a wait -1 value
will stop the train. Trigger the func_train again to resume its path. Also, a train can fire targets
when it arrives at a specific path_corner by using the path_corner's target2-4 keys. So for
example, you could spawn in a monster with target2 when a train arrives at a specific
path_corner with a matching targetname2.
Key Details
Spawnflags Details
 Move on trigger                                   will force the train to resume its path when
                                                   triggered, even when temporarily waiting at a
                                                   path_corner
 Stop on trigger                                   will stop the train at the next path_corner
                                                   when triggered. Trigger it again to resume
 The Move on trigger and Stop on trigger flags above are mutually exclusive and will
 cause an objerror when selected simultaneously.
Similar to func_fall2, you can add an origin brush to a func_train to change its functionality. In
this example, setting the Custom alignment spawnflag uses the origin brush as the “center” of
the train as opposed to the mins (corner) of the model.
On the next page you can see the two different methods to align a train to path corners.
Using an origin brush and the Custom alignment method as seen in-game with r_showbboxes
set to 1.
Using the standard method of aligning via the min corner of the train.
path_corner
These are waypoints for func_train and misc_modeltrain entities. In progs_dump they have
additional keys that can alter some settings on those two entities. For example, setting a faster
speed key on a path_corner will change the speed of a func_train that arrives there. Many of
these new keys are specific to misc_modeltrain.
 If you want to explicitly set frame 0 in any *_frame fields, you must use -1 instead, or
 else the code understands 0 as a blank field.
Key Details
The model can smoothly orient itself towards the next path_corner when moving. The turning
speed is automatic and based on the movement speed, but you can set a multiplier for the
turning speed with the multiplier key. Set it to -1 to turn instantly. You can define two different
frame ranges and animation speeds, for when the model is stopped and moving. If you don't
need different stopped/moving animations, only setting first_frame/last_frame/frtime is enough.
If you don't need any animation at all, just set first_frame to the desired frame and all other fields
can go blank.
 If you want to explicitly set frame 0 in any *_frame fields, you must use -1 instead, or
 else the code understands 0 as a blank field.
Key Detail
sounds Options:
                  0 (None)
                  1 (Ratchet Metal)
                  2 (Base door)
Spawnflags Details
Move on trigger   Will force the train to resume its path when
                  triggered, even when temporarily waiting at a
                  path_corner
Non-Solid No collision
   1. Set up path corners as you would with a regular func_train. You can see a video tutorial
      on func_trains here.
As you can see, first_frame2 is the starting frame of the dog model’s run cycle and last_frame2
is the last. You can use Quake 1 Model Viewer (or the FTEQW engine) to examine animation
frames as seen below. I changed the multiplier to 3 which makes the dog turn more quickly to
the next path_corner. A speed of 200 seemed pretty close to a monster_dog’s running speed.
Much more advanced setups with models that start, stop and trigger events can be seen in the
prefab_trains sample map.
Ladders
trigger_ladder
Create a small trigger_ladder brush covered with the trigger texture. Make sure the outside
edge of the brush is flush with your ladder geometry. Set the angle key to the direction the
player is facing when approaching the ladder. You can use a wedge shaped clip brush to
smooth out any “sticky” movements at the top of the ladder as seen below. Please refer to
pd_ladders.map for examples.
Breakables
func_breakable
Breakables may seem overwhelming to new mappers, however it’s not as complicated as it
looks. Also, there are two methods to choose from. One is the Built-in (easy) method and the
other is the Custom method (more flexible.)
The Built-in method: Create your brush and make it a func_breakable. You can ignore any
keys that begin with brk or breakable. Those are used with the custom method. With the built-in
method you will set the style to one of thirty-two options from the original id1 texture wads listed
below. By default, the breakable spawn 5 pieces of debris. You can change this amount with the
cnt key/value. The default health of the brush is 20.There are placeholder sounds but you can
use the noise1 key to set a custom sound path. If you give the breakable a targetname it will
only break when triggered. Use the Explosion spawnflag for an explosive brush. Use the dmg
key to set a custom damage value. You can also use the No Monster Damage spawnflag to
keep monsters from breaking the brush. As with monsters, you can use the drop_item key to
spawn a Silver or Gold key, vial or armor shards upon breaking.
Style   Texture basis   Image   Description
2 custom Concrete
You can also use .bsps from other mods (check if you have permission to do so.) In the example
below, we are only using one piece and duplicating it when the brush is “broken.” Set the Use
custom mdls or bsp models spawnflag to enable this mode. Then set the path to the .bsp or
model in break_template1. The brk_obj_count1 determines how many instances of that bsp will
be used. You can have 5 different pieces of debris total (break_template1-5) and control how
many instances each of those templates spawns with brk_obj_count1-5. noise1 is the path to
the sound when breaking. Style and cnt are not used in this method but health and dmg are.
Creating debris
You can create break_templates as tiny maps and compile them into bsps. Create one piece at
a time as their own map file. Create the debris at the center of the map (origin 0, 0, 0) Compile
with qbsp.exe and light. No need to run vis.exe on these. You can add a light key/value to the
Worldspawn to uniformly light the piece of debris.
Place these pieces in your maps folder or a subfolder under maps called debris or breakables
and remember to include these when you distribute your map.
 If you want debris to fall during an earthquake or similar event, use a skip texture to
 create an invisible breakable. Make sure the player cannot touch the brush, as skip
 textured brushes have collision. Clip textures won’t work for this. You can see an
 example of this in the pd_bosses sample map.
Effect Entities
You can trigger the following visual effects.
Effect Details
                             When triggered, this shows the teleport particle effects and sound.
 play_tele
                             Same as tele_fog from earlier versions. Use this when killtargeting
                             an entity if the player can see it happen. You can see an example
                             on the Shambler near the trigger_use key entity in The Gallery
                             map.
misc_bob
Same as above but uses a custom model instead of a brush. Use the mdl key to set the path of
the model. There’s a quirk in TrenchBroom that will not display the model in its proper
orientation once you set the angle key as seen here. This is only in the editor, in-game the
model will be correct.
 It’s best to NOT use func_bob and misc_bob for jumping puzzles, as they can get “get
 out of sync” and not allow the player to progress in certain instances.
Light and Shadow Features
Select the FADE IN / OUT spawnflag for a smooth fade in / out effect on non-animated lights.
The speed key controls the light transition time. Default 0.1
Switchable Shadows
Thanks to bmFbr, progs_dump now has the switchable shadow system from Alkaline. Every
brush entity, except triggers and func_detail variants, can have toggleable shadows by adding a
_switchableshadow 1 key to it. func_door, func_breakable and toggle_visiblewall already have
built-in support for that, so all you need to do is select the key for it to work automatically.
For other entity classes, like func_shadow, you need to set up a misc_shadowcontroller point
entity to control their switchable shadows. Here’s how:
Currently, ericw's LIGHT tool supports switchable shadows only when the map isn't using
bounce lighting. That's been already corrected in development versions however, and should be
out in a future release. (as of September 2022).
func_shadow
An invisible, non-solid brush entity that can be used to cast shadows In order for it to work
correctly you need to either set a _shadow 1 or a _switchableshadow 1 key. See the
prefab_shadows sample map for examples.
misc_shadowcontroller
Controls switchable shadows on any bmodel entity (except doors and breakables). Target this
entity to toggle the shadows on/off with an optional fading animation.Targeted bmodel must
have _switchableshadow set to 1. If the target entity changes its default behavior when
'targetname' is set (such as breakables), you can target the entity's 'targetname2' key. See the
prefab_shadows sample map for examples.
Particle Effects
misc_sparks
Produces a burst of yellow sparks at random intervals. If targeted, it will toggle between on or
off. If it targets a light, that light will flash along with each burst of sparks. NOTE: targeted lights
should be set to START_OFF. Spawnflags = SPARKS_BLUE: sparks are blue in color
SPARKS_PALE sparks are pale yellow in color. wait is the average delay between bursts
(variance is 1/2 wait). Default is 2. cnt is the average number of sparks in a burst (variance is
1/4 cnt). Default is 15. sounds 0 = no sound, 1 = sparks. noise is the path to a custom spark
sound effect, sounds must be set to 1.
misc_particle_stream
A particle stream! It appears when triggered. This entity is one end of the stream, target
another entity as the other end-point. Usually an info_notnull, but you should be able to target
anything (like monsters). target = This entity's origin is the end-point of the stream dmg = 1st
Color, use this by itself if you want a single color stream cnt = 2nd Color, mixes particles of both
colors. noise = Sound to play when triggered. See color palette reference below. NOTE: You
can see this in action in the pd_counter sample map and at the end of the pd_lasers map.
func_particlefield
Creates a brief particle flash roughly the size of the defining brush each time it is triggered. You
can see an example of this in the pd_ladders example map. In this case, the particle fields are
animated in sequence to create a force field effect. USE_COUNT when the activator is a
func_counter, the field will only activate when count is equal to cnt. Same as using a
func_oncount to trigger. cnt is the count to activate on when USE_COUNT is set. color is the
color of the particles. Default is 192 (yellow). count is the density of the particles. Default is 2.
noise is the sound to play when triggered. Do not use a looping sound here. dmg is the amount
of damage to cause when touched.
If you want to use another color for the particle field, refer to the Quake color palette below
NOTE: not all colors will work:
misc_particles
Produces a continuous particle splash for waterfalls and other effects. Can be triggered and
toggled. Spawnflags = START_OFF The default behavior has the particles shimmering in an
upward motion. color = color of particles. 0 through 15, corresponds to a row of the quake
palette (see above for palette numbers). (default 0) movedir = average movement vector of
particles (default 0 0 4) NOTE: Play with negative numbers to change the movement direction.
wait = time between particle generation cycles. (default 0.1) volume = density of particles.
(default 10)
misc_particlespray
Shoots particles either when triggered, or continuously when not triggered by anything.
color is the palette color of the particles. (default 47) movedir is the vector distance that the
particles will travel before disappearing. (in x y z) NOTE: Play with negative numbers to change
the movement direction. delay is the delay between each triggering (default 0.1) duration is the
amount of time that it will continue to release particles so that it can release a long stream of
particles with only one triggering, count is the number of particles to make each time (default 15)
noise is the name of the .wav file to play when triggered.
The two particle effects above are similar but there are some key differences. Take a look at the
pd_counter map for some different examples.
You can check out this video tutorial that goes into detail on most of the particle effects above.
Enhanced Text Tools
We’ve added enhanced text entities and other features, starting in progs_dump 3.0.0, that allow
for many more storytelling opportunities. These include additions to trigger_ changelevel
info_intermissiontext and the textstory entities.
info_intermissiontext
Created by ILike80sRock, this is used with a trigger_changelevel entity to display the
“Congratulations” graphics and a custom message. These are displayed in the original game at
the end of an episode when the player gets a rune, kills a boss or defeats the game. This entity
can display multiple “pages” of text before the player warps to the next level. More information
on how to use this functionality is described in the trigger_changelevel section above.
trigger_textstory
This new trigger from bmFbr shows long centerprint texts. Messages remain on screen while the
player is inside the trigger volume. Can have custom sounds, or be made silent. Horizontal
space is limited to 40 characters, so you must place linefeeds (\n) into your text. Use fade_amt
to set the background fade to a custom value (default is 160). You can set it to show the
message only when the player is facing a certain angle within the trigger. Set the central angle
with mangle, and the maximum angle offset with view_ofs (both in 'pitch yaw 0' format). See
illustration below.
Key Details
Spawnflag Details
target_textstory
Point entity version of trigger_textstory that shows long centerprint texts. Message remains on
screen for the duration of wait. Can have custom sounds, or be made silent. Horizontal space is
limited to 40 characters, so you must place linefeeds (\n) into your text. Use fade_amt to set the
background fade to a custom value (default is 160).
Key Details
Spawnflag Details
Key Details
info_movie_camera
This is the target of the trigger_camera and controls the viewport of the cutscene. When using
multiple cameras in a sequence, you need at least three cameras (see “complex cutscenes”
below).
Key Details
info_script
This controls the on-screen timing and the optional message text fields.
Key Details
 message (optional)                              Optional text that will stay on screen for the
                                                 amount of time set in script_delay. It’s safest
                                                 to limit this to a max of 64 characters.
info_script_sound
You can use this optional entity to add a sound when text is displayed or you can even trigger
custom sounds and add dialogue to your scenes!
Key Details
Notice they both have the same focal_point key. Now create that info_focal_point give it these
key | values:
Now for the info_script. Note the script_num matches the script key from trigger_camera. The
next_script value is set by hand to zero, this is really important to add or your cutscene will
break! It’s set to zero, because it’s the last script of the scene.
The length of the scene is controlled by the script_delay key in the info_script. Leave the
message key blank if you just want a shot without text. Now you can move the focal point and
camera around for your desired “angle”. The following screenshots show in-editor and then the
in-game vantage points.
Complex Cutscenes
You can add more cameras, scripts and focal points for a more complex scene. You can also
animate the camera from one point to another but getting good looking “shots” takes a bit of
time and tinkering.
I’ve created smaller demo levels for easy reference in addition to the pd_cutcenes map. These
maps are not accessible from the progs_dump start map but you can load them via the console.
 When moving the camera, even between just two points, you will need three
 info_movie_cameras. (This is due to some quirks in the original QuakeC and took me a long
 time to figure out!) If you only want two vantage points in your scene, simply use the wait key
 on the second to last camera. Set this to a longer amount of time than is controlled by the
 script_delay key in your info_script for that section of the cutscene. You can see this clearly in
 pd_cutscn_tracking and in pd_cutscenes.
Cutscene Best Practices
● Make small test maps to set up your cutscenes. Scenes require a lot of testing and
tweaking. When they are working, paste them into your map and adjust as needed.
● Do not quit the game while in a cutscene, this will reset your mouse sensitivity and
console viewsize. Add this info in the readme for your mod so players know not to quit!
● Keep your cutscenes as simple as possible. Things can break very quickly as you ramp up
the complexity.
● Timing is controlled in two places when using multiple cameras. (script_delay in info_script
and wait in info_movie_camera) That makes it harder to make small changes. Break up
longer sequences into smaller parts.
● Camera moves in X and Y will display a bit of “player bob”. Play with the speed key to make
the move faster and it won’t be as apparent.
● As in other Quake entities, you can add a line break in a message by adding \n with no
space before the text of the second line. Here I’ve added two to make a blank line between
sentences.
● Do not reuse info_scripts for different cutscenes. Things will break. You can reuse
info_movie_cameras as long as they are triggered by different trigger_camera entities.
● Don’t overdo it. Quake is a fast paced game. Few players want to watch a three hour Quake
movie with terrible voice acting!
Rotation Entities
 By request, the Hipnotic (Quake Mission Pack 1) rotation entities have been added but are
 unsupported. Use at your own risk! The text below is taken from the Quake C code for the
 rotation system. Refer to the included sample map pd_rotate for examples. Also, here are the
 steps to create rotating entities. Enjoy!
func_rotate_entity
Creates an entity that continually rotates. Can be toggled on and off if targeted. TOGGLE =
allows the rotation to be toggled on/off START_ON = whether the entity is spinning when
spawned. If TOGGLE is 0, the entity can be turned on, but not off.
If "deathtype" is set with a string, this is the message that will appear when a player is killed by
the train. The mapper can set "deathtype" on either an "inflictor" entity or an "attacker" entity (in
the mission pack, it only worked when set on an attacker). The inflictor and attacker are often
one and the same entity, but there are some cases where they are not: for example, if a player
gets crushed by a func_movewall which is controlled by a func_rotate_entity, the func_movewall
is the inflictor and the func_rotate_entity is the attacker.
"rotate" is the rate to rotate. "target" is the center of rotation, "speed" is how long the entity takes
to go from standing still to full speed and vice-versa.
path_rotate
(Train with rotation functionality) Path for rotate_train. ROTATION tells the train to rotate at a
rate specified by "rotate". Use '0 0 0' to stop rotation. ANGLES tells the train to rotate to the
angles specified by "angles" while traveling to this path_rotate. Use values < 0 or > 360 to
guarantee that it turns in a certain direction. Having this flag set automatically clears any
rotation. STOP tells the train to stop and wait to be retriggered. NO_ROTATE tells the train to
stop rotating when waiting to be triggered. DAMAGE tells the train to cause damage based on
"dmg". MOVETIME tells the train to interpret "speed" as the length of time to take moving from
one corner to another. SET_DAMAGE tells the train to set all targets damage to "dmg" "noise"
contains the name of the sound to play when the train stops. "noise1" contains the name of the
sound to play when the train moves. "event" is a target to trigger when the train arrives at
path_rotate.
func_rotate_train
In path_rotate, set speed to be the new speed of the train after it reaches the path change. If
speed is -1, the train will warp directly to the next path change after the specified wait time. If
MOVETIME is set on the path_rotate, the train interprets "speed" as the length of time to take
moving from one corner to another. "noise" contains the name of the sound to play when the
train stops. "noise1" contains the name of the sound to play when the train moves. Both "noise"
and "noise1" defaults depend upon the "sounds" variable and can be overridden by the "noise"
and "noise1" variables in path_rotate.
Also in path_rotate, if STOP is set, the train will wait until it is retriggered before moving on to
the next goal.
Trains are moving platforms that players can ride. "path" specifies the first path_rotate and is the
starting position. If the train is the target of a button or trigger, it will not begin moving until
activated. The func_rotate_train entity is the center of rotation of all objects targeted by it.
If "deathtype" is set with a string, this is the message that will appear when a player is killed by
the train. speed (default 100) dmg (default 0) sounds 1 = ratchet metal
func_movewall
Used to emulate collision on rotating objects. VISIBLE causes brush to be displayed. TOUCH
specifies whether to cause damage when touched by a player. NONBLOCKING makes the
brush non-solid. This is useless if VISIBLE is set. "dmg'' specifies the damage to cause when
touched or blocked.
rotate_object
This defines an object to be rotated. Used as the target of func_rotate_door.
func_rotate_door
Creates a door that rotates between two positions around a point of rotation each time it's
triggered. STAYOPEN tells the door to reopen after closing. This prevents a trigger-once door
from closing again when it's blocked. "dmg" specifies the damage to cause when blocked.
Defaults to 2. Negative numbers indicate no damage. "speed" specifies how the time it takes to
rotate "sounds" 1 = medieval (default), 2 = metal, 3 = base 4 = silent
Sample maps
You can find these in the maps folder along with a wad file containing all the textures used in the
development folder. You are welcome to copy and paste the entity setups and adjust as needed
to use them in your maps. Please do not copy brushes or geometry from these maps. The
following chart shows what examples exist in each map. Not all entities are demonstrated in the
sample maps.
 Maps prepended with pd_ are playable maps. Prefab maps are more simple in
 presentation, but are specifically designed for you to copy and paste more complex
 setups.
 pd_breakables                  func_breakable,
                                misc_candle
 pd_change_dest                 info_teleport_changedest,
                                info_teleport_random,
                                play_tele, trigger_shake,
                                misc_sparks,
                                play_sound_triggered,
                                misc_teleporttrain
 pd_counter                     func_counter,
                                func_oncount,
                                misc_particle,
                                misc_particle_stream,
                                misc_particlespray
 pd_cutscenes                   trigger_look,
                                info_movie_camera,
                                info_focal_point,
                                info_script,
                                info_script_sound,
                                trigger_changemusic,
                                trigger_cdtrack
pd_elevator          func_new_plat,
                     func_elvtr_button
pd_ladders           trigger_ladder,
                     func_particlefield,
                     misc_sparks,
                     func_breaklable,
                     func_togglewall
pd_lightning         func_counter,
                     ltrail_start,ltrail_relay,
                     ltrail_end,
                     trap_switched_shooter
pd_meat              meat_shower,
                     func_counter, gib_*,
                     monster_dead_*
pd_zombies                    func_counter,
                              func_oncount, enhanced
                              zombies, trigger spawned
                              monsters
prefab_homing                 homing and waitmin key |   Shows off different homing settings.
                              values
QuakeC Sources
Zerstörer QuakeC Development Kit - Dave 'Ace_Dave' Weiden and Darin McNeil
https://www.quaddicted.com/reviews/zer.html
trigger_look by NullPointPalidin
https://nullpointpaladin.wordpress.com/
Copper style noclip from Copper by Lunaran
http://lunaran.com/copper/modding/
Additional code assistance and examples from iw, NullPointPaladin Qmaster, RennyC,
Khreathor, Spike, ILike80sRock, Whirledtsar and c0burn.
 A note about key | value pairs. You may notice some strange naming of key fields in
 progs_dump. For example, the currentammo in a lightning trail relay represents
 damage. This is because some of the code in progs_dump is from a time when the
 memory requirements for Quake were high for PCs of the day. Programmers would
 reuse certain keys to save memory, as each key field took up precious RAM. 25 years
 later, we have plenty of processing and RAM to dispose of. As a result, some of the
 newer keys are a bit more intuitive.
Models
 You should always save a copy of the model if you change its flag so you can use them
 both for their separate applications.
Here are examples of the different flags available. These are hard coded by the engine so you
can not modify them, only enable or disable one flag at a time.
pd_bpack.mdl skins
This model has the Green Trail flag set by default. Special thanks to Kebby_ for helping solve a
technical issue with this one!
teleport.mdl skins
If you’d prefer a different style of health pack, you can download these and replace the default
health vial using the mdl_body key as with other assets in the devkit. You can also set the
default in the Worldspawn key. These were all created by starshipwaters. The models have the
Model Rotate flag set by default.
Appendix B: Finding Custom Models
As this manual is being written, Quake is entering its 25th year. Over those years, hundreds of
Quake mods have included custom models, many of which are compatible with the stock Quake
assets. Below are some of the resources we’ve used to test with progs_dump. Following that, a
short overview of how to extract models and check them for compatibility.
 Don’t forget to check if you have permission to use mod assets in your projects.
 Usually this is stated in the readme.
 The Keep mod                 mod            A huge mod based on the Arcane Dimensions
                                             codebase. It’s still in development as of
                                             December 2020. This mod takes hundreds of
                                             monsters and other assets from scores of mods
                                             and lumps them into one giant release. This one
                                             resource makes it really easy to find monster
                                             replacements for the stock id creatures from a
                                             variety of mods. More info.
 Arcane Dimensions            mod            Features all kinds of skins for all the traditional id
                                             monsters. Versions 1.8 and above, use PAK
                                             files. You’ll need PakScape to extract assets. Or
                                             use 1.7 and below for unpacked assets.
Chillo's Model Pack 1.7 mod Replacement models for almost every monster.
 ReMakeQuake                  mod            canceled mod, assets are free to use per the
                                             author
 Drake (beta)                 mod            Fun mod with dragons and all kinds of monster
                                             skins and misc models.
 If you come across custom content for Quake that uses PK3 and/or MD3 files, it’s likely
 that that modification will only work with the DarkPlaces engine. We don’t recommend
 using DarkPlaces with progs_dump for a variety of reasons.
Once you have a model you want to use in progs_dump you may need to extract it with
PakScape. Just open the PAK file and click on the progs folder. Drag and drop the model to
extract it. Models should be placed under the progs directory in your mod but you can use sub
folders to keep them organized.
Remember that you can also use sprites (.spr) in progs_dump with a variety of entities. And of
course, sound (.wav) files.
Next, take a look at the animations and compare them to the original id models in Quake 1
Model Viewer using the animation tab. You can also just load the models in progs_dump and
see if they work!
Appendix C: Development Folder
The development folder in the main progs_dump mod contains the source files for the sample
maps and prefab maps, the entity definition files, a texture wad file and the QuakeC source.
fgd_def
FGD and DEF files are used by map editors to display entity information. progs_dump has three
of these for different applications. Great care has been taken to update these files with as much
information from this manual as possible. Also, the light and worldspawn entities have expanded
definitions for ericw’s compiling tools.
File Details
If you use the pd_300 fgd you will see custom models in TrenchBroom including skin selections.
map src
This folder contains the .map files for all the sample and prefab maps as well as the custom
debris .map files as described in the custom breakables section above.
quakec scr
This folder contains the QuakeC source files for the mod. You are free to use this as a basis for
a new mod. Please give us credit and include the source files for your mod in the public release.
These QuakeC files are also included in the mod_template.zip folder and should always be
included with your mod whether you modify them or not.
wads
pd_300.wad is a single wad file containing all of the textures used in the sample maps. This
includes key door textures for the included pd_key models. Use this when you refer to the
sample files in a map editor. You are free to use any included texture in your own projects.