Dr Sleep's DOOM Apothecary
  Latest News
  Editing Clinic
  Tutorials
  jDoom
  AddOn Levels
  Downloads
  About
  Doom Builder Guide
 Articles and Guides
  Doom Builder Guide
  WinDEU for Beginners Guide
  Managing Textures
  REJECT Tricks and Tips
  jDOOM and Hi-Res Textures
  WAD Author's DOOM Reference
 Related Sites
  Doomsday HQ
  NewDoom.Com
  Doom Wad Station
  DoomWorld: Top 100 PWADs
  The Megawad Project Page


Doomsday HQ Link

Doomsday HQ Link

Check out our host: NewDoom.com
Hosted by NewDoom

Copyright @ 2004 by
John W. Anderson
johnwanderson@verizon.net

 

Dr Sleep's DOOM Apothecary
Home  |  Editing Clinic  |  Tutorials  |  jDoom  |  Levels  Downloads About  Email
Editing Clinic: REJECT Table Tips and Tricks
PWAD Designer's Reference | REJECT | Textures | Graphics | Architecture |Aesthetics

Continued from previous page.

All level editors (that I'm aware of) create empty REJECT maps, because the LOS algorithm is fairly complex and may take a couple minutes to complete even on a fast machine. And most nodes builders trash the REJECT map unless you set the parameter for them to ignore it. The only way to generate a REJECT map is to use a tool designed specifically for that purpose.

What Do REJECT Tools Do?

At their most basic, REJECT utilities can examine your level, perform the LOS calculations for every Sector pair, and then populate the REJECT table with 1s and 0s where appropriate. All utilities use certain shortcuts in their LOS calculations (only RMB - Reject Map Builder - has an option to create a perfect REJECT table), and these methods are explained in their documentation. Of the four REJECT builders I'm aware of - RMB v3.0, Reject v1.1, WARM v1.6, and ZenNode v1.1.0 - I've chosen RMB and ZenNode for in-depth discussion not only because they're the most popular, but also because I believe they produce the most efficient REJECT tables.

ZenNode v1.1.0, written by Marc Rousseau, is best known as possibly the fastest DOOM BSP builder yet. Besides its extremely fast BSP functions, it has built-in REJECT capabilities, BLOCKMAP compression, plus PWAD merge and extraction functions, which make it a very versatile tool indeed.

ZenNode will create the BLOCKMAP, build the nodes, then create  the REJECT table and report the efficiency of your level. If you don't want to rebuild the nodes (or BLOCKMAP) and only want the REJECT table, these can be turned off with the -n- and -b- parameters. Likewise, the REJECT function can be turned off for quicker node builds with the -r- or -rz- options. There are several other options for doing faster (but less accurate) REJECT builds. (Click here to see all of ZenNode's options.)

ZenNode's REJECT build is more efficient than any other REJECT tool, even RMB's default build; in fact, it is nearly on par with RMB's PERFECT build. The only thing it lacks is RMB's various options which change individual bits in the REJECT map to achieve certain special effects. (In emails with Marc Rousseau this week I learned that he plans a major update soon, plus implementation of many of RMB's special effect options. This is great news, since RMB is no longer supported by its author.)

ZenNode works with multi-level PWADs, can process only specific levels if desired, extract specific levels to another PWAD, or even merge two separate PWADs to a single one. ZenNode has good documentation which explains all of its options. You can find it (and other fine BSP and REJECT utilities) in my Downloads section, or get it now. (Also visit ZenNode's homepage.)

The one thing you need to remember is that most editors and nodes builders will trash your REJECT map, creating an empty one when saving or writing your level. So optimizing the REJECT map is not something you really have to do until your level is finished and ready for release. Of course, you'll want to know how your level is running as you add monsters to it. So I recommend running REJECT on a level every once in a while as you go along just to get a feel for the difference it makes in your level's speed and frame rate.

The most full-featured REJECT tool is Reject Map Builder v3.0 by Jens Hykkelbjerg. RMB can build a very efficient REJECT map fairly quickly by default; or one can use the PERFECT parameter which takes longer, but forces processing of all Sectors. (An in-depth review of how RMB makes its calculation choices is discussed at the end of this article.) It can also display a graphical map of your level and show each Sector and LineDef in coded colors as they're being processed.

The RMB package comes with two other tools, Inspect and Effect. Inspect can tell if a WAD's REJECT map has been tinkered with and report the efficiency of it. EFFECT is used for the special effects we'll talk about later called SAFE and BLIND.

Most importantly, RMB has a long list of options which allow individual bits in the REJECT map to be set or cleared as you please; the potential for special effects can add strategic dimensions to your level that you may have considered, but never thought possible. RMB comes with a set of example WADs showing how the various effects work their magic on monsters. The documentation is top-notch, with verbose explanations of each option. The next two sections explore several of RMB's most useful options: BLIND, SAFE, DISTANCE, and LENGTH.

Special REJECT Effects: BLIND and SAFE

There are a lot of special effects that can be achieved by manipulating the REJECT table. Since a Sector bit set at 1 tells DOOM that that Sector cannot be seen from certain other Sectors under conditions that we can set, this means no monster will be able to see a player who is in that Sector. You could conceivably set up a room as a SAFE zone where the player can stop for a breather. Or you might make Sectors very dark so the player can "hide" in the shadows, BLIND to any monsters anywhere.

Figure 1.3: The Sector pairs 3-0 and 0-3 have their bits set to 1.

Using our little map as an example again, consider the REJECT table in Figure 1.4:
 

                                 Player Sector

Monster Sector

  0 1 2 3
  0 0 1 0 1
  1 0 1 0 0
  2 0 1 0 0
  3 1 1 0 0

Figure 1.4:  Sector 1 is SAFE: the player who enters Sector 1 cannot be seen by any monster from any Sector.

This is a map where the player is SAFE in Sector 1. No monsters anywhere can see into it. Once the player enters Sector 1, it's as though he has disappeared. RMB can set this condition with the SAFE parameter while still building a proper REJECT map for the rest of the level.
 

                                 Player Sector

Monster Sector

  0 1 2 3
  0 0 0 0 1
  1 1 1 1 1
  2 0 0 0 0
  3 1 0 0 0

Figure 1.5:  Sector 1 is BLIND: monsters cannot see any Sectors outside of it.

In this map, monsters in Sector 1 are BLIND to all other Sectors. In the SAFE example, monsters can't see in to a Sector. With BLIND, they can't see out of a Sector. Now, these effects can be set to have varying ranges. You could set Sector 1 to be BLIND only to Sectors beyond the closest one, two, or three Sectors. Say you've got a long hallway composed of 8 Sectors (for different light levels). An Imp in the middle of a lit Sector might see one or two Sectors ahead and behind (because it's very bright), but not beyond that (because it's very dark). Catching on to the possibilities?

I suppose I've made this sound much more complicated that it really is. For a really good example of a larger map with SAFE and BLIND imposed to cool effect, go on to the next section.

Click here to continue.