-------------- USERS MANUAL ---------------------------- My English is not that good, so if you feel like writing a better manual please contact me. (Email: hykkelbj@daimi.aau.dk) (All comments are welcome) 1. Introduction 2. How to use the Reject Map Builder 3. How to use the Inspect Utility 4. Making Special Effects 5. Using an Option File 6. Multilevel wads 7. Copyright notice 8. Authors note. --------------- 1. Introduction ---------------------- The reject map builder is a utility that takes a PWAD file and finds out which sectors can be seen from a sector. This information is used by DOOM to speed up the real time action! The program should be used with care. The best would be, if it's only used by the author of a wad. The reason it should be used with care is that the reject map can be used for some special effects. These will be removed if the PWAD file is processed with RMB. The program was made after inspiration from a discussion on the doom editing mail list. Keep that list running! ;) The program was written in Turbo Pascal 6.0, and I started totally from scratch. "The Unofficial Doom Specs" has been a great help to me. Without it this program had never been made... NOTE: When the syntax of some command is given anything in square brackets is an optional parameter, and anything in curly brackets is a choice between more possibilities. The syntax: EFFECT .WAD [EnMx] {BLIND, SAFE} {0, 1} means that all these commands can be used: effect file.wad blind 0 22 effect file.wad e1m2 safe 1 43 effect file.wad e1m1 blind 1 55 ... See the section on how to make special effects for an explanation of the effect utility. (or even better learn to write an option file) ------- 2. How to use the reject map builder ----------- Note: The syntax has changed since v1.0 To use the reject map builder you need to unpack it into it's own directory, like c:\reject. When you want to run it on a WAD like for instance starwar1.wad simply go to the directory where you have put the program e.g: > cd c:\reject and type "RMB .WAD .WAD". That's all there is to it... > rmb c:\wadfiles\starwar1.wad c:\wadfiles\mystarw1.wad The input and output files can be identical. If the file is a multilevel WAD (like starwar2 and others) this will make RMB process the first level in the wad. To process another level just type "RMB .WAD .WAD EnMx" where EnMx gives the episode and mission number. > rmb c:\wadfiles\starwar2.wad mystar2.wad e1m2 (to process episode 1 mission 2 in starwar2.wad, and put the result in mystar2.wad). If the EnMx parameter isn't used RMB will process the first map in the WAD. When the program has finished processing, the efficiency will be shown. The efficiency is the percentage of 1's in the reject map. A high efficiency means that the speedup will be good. There is no need to run RMB on a PWAD that has already been processed. To check whether a file has been processed you can use the INSPECT tool. During the execution of the program a map of the level being processed is shown. In the top left corner of the screen there will be a number showing the current sector, and the total number of sectors. The program will process all sectors one by one, and for all sectors it will calculate how much can be seen from every 2s line in the sector. The 2s line currently being processed is shown in red, and when the program has finished processing the line, it turns cyan. From the 2s line it's possible to see other 2s lines. these will be shown in yellow, and turn purple when they have been processed. So there should always be a red and a yellow line, and the program is currently processing a LOS calculation from the red towards (through) the yellow line. To optimise the original DOOM.WAD there is a little batch file included called ORIGINAL, that runs through all DOOM levels, and optimises them one by one. (You can easily make and drink a cup of coffee meanwhile) All you have to do is copy the doom.wad file to your RMB directory, and then type ORIGINAL . When you are done you can take a backup of your original doom.wad, and copy the new doom.wad back. (remember, that when you have changed the original doom files ID offers no support...) -------- 3. How to use the inspect utility ------------- The inspect utility inspects the current reject map of a PWAD without changing it. The statement syntax is: INSPECT .WAD [EnMx] [Sector number] If it is used without a sector number, it will calculate the efficiency of the current reject map. > inspect c:\wadfiles\think12.wad Efficiency: 40% Called with a number after the WAD filename, It will tell you the sector numbers, that monsters can (presumably) see from this sector. > inspect c:\wadfiles\think12.wad 0 Sectors visible from sector 0: 0,1,... The "EnMx" option lets you process multilevel wads. The following command: > inspect c:\wadfiles\starwar2.wad e1m2 0 Sectors visible from sector 0: 0,1,... means that you want to inspect episode 1 mission 2 in the WAD. If you don't use the EnMx option, you will automatically inspect the first map in the file. ---------------- 4. Making Special Effects ---------------- NOTE: if you use the RMB utility all special effects are removed unless you use an option file for RMB. (some wad editors will gladly remove all special effects too)... With the EFFECT utility you can make special effects with the reject map. The syntax of EFFECT is: EFFECT .wad [EnMx] {SAFE, BLIND} {0, 1} The SAFE option makes safe sectors. As long as you are in a safe sector the monsters won't shoot you. A safe sector is made like this: EFFECT .wad SAFE 0 The '0' means, that at a distance of 0 or above, the monsters can't see you. currently only 0 and 1 is supported here. (1 meaning that monsters inside the safe sector can see you, but others can't) The other effect is BLIND. The following command makes all monsters inside a sector totally blind: EFFECT .wad BLIND 0 again the zero can be exchanged with a 1, in which case the monsters are only extremely near sighted... (The effect of this is, that the monsters can only see you when you are in their sector). Note, that the monsters gain perfect vision, if they move out of the blinded sector. In all cases you can use ALL instead of the sector number (last argument). This will make all sectors safe or all monsters near sighted... Making all monsters blind will make a very dull game, but it may be good for playtesting a wad, to see, that all monsters are placed correctly... --------------- 5. Making an Option File --------------- NOTE: The syntax of BLIND and SAFE (+inv) has changed since v1.1. An option file is a file that can be used to make more special effects in a WAD. The option file has the same name as the WAD file, and is placed in the same directory. The option file should have extension '.REJ' RMB will automatically detect the .REJ file, and process it. That is if the WAD is called MYLEVEL.WAD the option file would be MYLEVEL.REJ Now follows a list of all commands that can be used in the option file. Listed with the fastest first. # The '#' marks a comment line LENGTH DISTANCE BLIND LINE LEFT RIGHT BLOCK ONE INC EXC NOMAP SAFE INV SAFE INV BLIND REPORT PERFECT The distance is the number of SECTORS between two sectors Counted in a strange way. For instance if you want the monsters in a sector to be totally blind use 'BLIND 0'. If you want them to be able to see their own sector use 'BLIND 1', for neighbours use 2 and so on. Is the distance as we know it. A normal door is 128 wide, which is the euclidian distance across the door. Is the number of a TWO SIDED line. This line number can be found using almost every WAD builder. (DEU5.21 recommended) Is the number of a sector. can also be found by a WAD builder. Is a list of sector numbers terminated by end of line example: 1 2 5 7 9 Is a list of the sectors 1, 2, 5, 7 and 9. In the following each command is explained in detail, but first a brief explanation: (sorted alphabetically) * BLIND Specifies the distance a monster can see (near sighted) BLOCK Monsters can't look through BOTH 2s lines (One is ok) DISTANCE The maximum distance a monster can see. EXC Excludes view from 1st sector to 2nd. (Overrides all other opt) INC Includes LOS from 1st sector to 2nd. (Overrides all other opt) * INV BLIND Specifies that monsters can only see outside the distance. * INV SAFE Monsters can't see this sector(s) inside the distance. LEFT Makes a 2s line that can only be looked through left to right. LENGTH Specifies the max # of sectors any monster can see. LINE Makes a 2s line impossible to look through for monsters. NOMAP Removes the graphical look, and prints only ASCII ONE Same as block, but only stops LOS one way. PERFECT Generates a perfect reject map. REPORT Reports all detected distances >= to .RPT RIGHT Makes a 2s line that can only be looked through right to left. * SAFE Monsters can't see this sector(s) outside the distance. All options marked with '*' can change when combined with an inverted (INV) command for the same sector. More on this later. The next sections will explain the options in alphabetical order. 5.1 BLIND Syntax: Blind The blind option makes the monsters in the sectors in the sector list totally blind or near sighted. With distance zero the monsters can't see a thing. With distance 1 they can see their own sector. With distance two they can see their own sector and all neighbouring sectors, and so on. In this example we will use the option BLIND 3 5 7 That means that monsters in sectors 5 and 7 can only see across 2 two-sided lines. |----|----|----|----|----|----|----|----| | : : : : : : : | | 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 | (a ':' marks a 2s line) | : : : : : : : | (The numbers are sector numbers) |----|----|----|----|----|----|----|----| With this configuration of sectors 'blind 3 5 7' means, that a monster in sector 5 can see sectors 3, 4, 5, 6 and 7 but not sectors 1, 2 and 8; while a monster in sector 7 can see sectors 5, 6, 7 and 8, but not sectors 1, 2, 3 and 4. 5.2 BLOCK Syntax: Block RMB only processes the 2D map. If two sectors can't see each other because of some difference in height, the BLOCK option is perfect to make RMB realize this. An example where two sectors can't see each other is a high lift. The drawing here is seen from the side: ---- D E |------|------| | o | | #3 -\ | | /\ | | |------| | | ^ | LIFT | | A B C | | example player |------|------|------| | position | | | #0 #1 #2 | | | |------|------|------|------| Here the sectors are marked with capital letters, and the two-sided lines are marked with a '#' and their line number. Because of the 3d difference in floor and ceiling heights sectors A and B can't see sector E. This is because you can't see from line #1 to line #3, and by using the option BLOCK 1 3 The generated reject map will look like: A B C D E A x x x x B x x x x C x x x x x D x x x x x E x x x an 'x' means that you can see from one sector to the other. Note that just as expected sector E can't see sector A and B, and sector A and B cant see sector E. (where see means that the monsters in one sector cant see you if you are in the other sector.) Having the possibility to do 3d things like this may encourage you to go around your wad trying to find places where a BLOCK is in place. However if you do this just for gaining speed, you are bound to be disappointed, and the time invested will probably not pay off. 5.3 DISTANCE Syntax: DISTANCE Distance will stop monsters from looking too far. It is very easy to get the Length and the Distance options mixed up, but where length makes an upper bound on the number of 2s lines monsters can look through, Distance is a better way to limit the distance of sight. The distance parameter makes it impossible for monsters to see further than a given distance. To gain some intuition on how far a distance of say 600 is, it is a good thing to note, that a normal door is 128 wide, which means that a distance of 600 corresponds to about 5 doors after each other (side by side). This means that if you set the option: Distance 600 Monsters will not be able to see sectors more than 600 away, corresponding to a distance of 5 times the width of a door. However the distance option will first start to work after the first two sectors, meaning, that the monsters will always have the opportunity to see you if you are no more than 2 sectors away. (That is if there is no wall blocking the LOS in between) |-----|-----|-----|-----| | : : : | | 1 : 2 : 3 : 4 | | : : : | |-----|-----|-----|-----| <-----------> (the <--> shows the distance 1 to 4) This marks the distance between sector 1 and 4. note: It's always the minimum distance that counts. A monster in sector 1 will always be able to see sectors 2 and 3 regardless of the distance used, but it will only be able to see sector 4, if the shown distance is smaller than the number given in the distance option. 5.4 EXC Syntax: Exc Exc makes it impossible for monsters in Sector1 to see you if you are in Sector2. (This only affects a single bit in the reject map) Note: This option overrides ALL other options, and can be used to make small modifications like "if you stand in this sector all monsters in the surrounding room can't see you. 5.5 INC Syntax: Inc Inc makes possible for monsters in Sector1 to see you in Sector2, no matter what all the other options say. This can be used to make special effects like: Blind a sector completely with BLIND 0. Put a lot of monsters in the sector, and make a platform in sight of the blinded sector. now use the INC option to make the monsters able to see the platform and nothing else. If it's difficult to see from the platform to the blinded sector, the effect will be that the player will be surprised when he is suddenly attacked... "I stepped onto the platform and took the key. There was no sound of doors opening, so I was home free, but suddenly the room was flying with fireballs... Where the did those imps come from" Note: This option overrides all other options except EXC. 5.6 INV BLIND Syntax: Inv Blind Where BLIND makes monsters near sighted or totally blind INV BLIND makes monsters LONG sighted. This means that a monster inside any of the sectors in the sector list can only see sectors outside the distance. This means that where BLIND 1 makes the monsters inside one of the sectors in the sector list unable to see anything but their own sector, INV BLIND 1 will make them unable to see their own sectors, but now they will be able to see all sectors further away from their own sector. 5.7 INV SAFE Syntax: Inv Safe (Please read the section about safe first) Where safe means that when you are in a safe sector the monsters has to get close to you to see you. INV SAFE means that only monsters outside the range can see you. As monsters will always try to move closer to you, the monsters will disable themselves as long as you are in the INV SAFE sector! 5.8 LEFT Syntax: Left This option makes a two sided line into a one way look through line (for monsters). This means that if you have made a wall that is one way look through (texture on one side but not on the other) this option can help you make monsters respond logically to it. A B C |----|----|----| | ^ ^ | | #1 #2 | | : : | |----|----|----| the '^' shows that the two-sided lines are pointing up If line #1 has been made as a secret wall with a texture on it's right side but not on the left side. It should be possible to look through it only from the left to the right. This can be made by LEFT 1 5.9 LENGTH Syntax: Length The length parameter makes an upper bound to the distance of any LOS. Distance here means the number of 2s lines, that's crossed when you look from one sector to the other. An option like LENGTH 20 is often safe, but you should take great care if you want to set it lower, as this could make monsters behave strangely. (If you have set LENGTH 10 and created a stair with 10 steps a monster at the top of the stair won't be able to see you at the button) NOTE: As this option affects ALL sectors care should be taken when you use a distance below 20. In most cases use the DISTANCE option instead of LENGTH! 5.10 LINE Syntax: Line This option makes it impossible for monsters to see through a two-sided line. This is good if you have a 2s line with texture on both sides, so you can't see through it. Normally monsters will look through ANY 2s line, but with this option you can prevent them if you want. 5.11 NOMAP Syntax: NoMap This option makes the visual map of the level disappear. Instead the number of the current sector being processed is shown. At the same time one dot "." is typed every time it start to process another sector immediately visible from the original sector. |---|---|----| | 1 : : | |...: 2 : | | : 5 |----| |.......:....: 6 | | 3 : 4 : | |----|-------|----| Here sectors 3, 4 and 5 are immediately visible from sector 1 through sector 2. Sector 6 is further away, and a dot is not printed for it (to avoid too many dots). A dot is printed every time a new yellow line would have been drawn if the map was on. (I call sector 2 a neighbour to sector 1, and neighbours are always visible, so no processing is done on sector 2 when Sector one is the current sector. Thats why I put dots for sectors 3, 4 and 5, but not for sector 2) It takes EXACTLY the same time to process a wad in the graphics mode as it takes in the text mode. When NOMAP is used you can start the program without being in the same directory as RMB. 5.12 ONE Syntax: One Where BLOCK blocks both ways ONE blocks only one way. This option is good in combination with one way look through walls (the left/right options). If you know for a fact, that there is a wall that blocks the LOS one way, so that It's only possible to look through the two lines one way, there is no need to make any extra calculations for the other way. That's why a ONE way block is a good idea. A B C D |----|----|----|-----| | ^ ^ : | | #1 #2 #3 | | : : : | |----|----|----|-----| Imagine that sector C is a lift sector, and line #1 can only be looked through from right to left. Now we want to block the LOS between sectors A and D, but since #1 is one way look through, we only need to block one way: RIGHT 1 ONE 3 1 The generated reject map is: A B C D A x B x x x x C x x x x D x x x 'x' means that one sector can see the other. Here A can't see B,C and D because line #1 is right to left look through. D can't see A because of the one way block. (If A were connected to more sectors to the left they wouldn't be able to see B,C,D either, and D wouldn't be able to see them. only B and C would be able to see everything). 5.13 PERFECT Syntax: Perfect When the perfect option is given, RMB will use more time to find sectors, that can't see each other. Without the perfect option all internal sectors (Sectors lying totally inside another sectors) will be able to see the same thing as the sector surrounding them. (Sectors that has a 1s linedef in them can't be internal sectors.) This means that without the perfect option internal sectors won't be processed. This means that SAFE, BLIND, BLOCK and ONE options that uses internal sectors, or lines adjacent to internal sectors won't be processed correctly! (They won't be processed at all) The good part about this is, that if you have a room with some decoration (Chairs, ...) generated by internal sectors, you can refer to all sectors in this room by using the sector number of the surrounding sector (the room). However if you have made a chair, and want the player to be safe when standing on it, you have to use the 'Perfect' option. (and of course the safe option for the sector). Unfortunately the 'Perfect' option means that all sectors are generated perfectly. There is no way you can specify that only a part of the map should be perfect. This might come in the next version, if I ever get around to that :-) (The next version is out in two weeks as they say from ID soft :) 5.14 REPORT Syntax: Report If the report option is used a file with the same name as the WAD file but with '.RPT' extension is generated. This file contains all pairs of sectors that can see each other and lies at a distance greater than the given distance. Using a REPORT factor greater than the LENGTH factor is waste of time. It's a good idea to use the report with a distance equal to the length factor like this. LENGTH 18 REPORT 18 This will give you all pairs of sectors that lies at distance 18. Often these sectors will be very far apart, and maybe the line of sight is blocked by a lot of doors on the way. In that case maybe It's an idea to make a BLOCK around the doors. (normally It's impossible to open more than 3 doors before the first door closes. This means that it's normally safe to place a block around 4 doors BLOCK <1st line of 1st door> maybe you can even make a block around two or three doors. That depends on how fast the player can get to the next door to open it. However remember that monsters can open doors... :) 5.15 RIGHT Syntax: Right Right makes a two sided line that can only be looked through by monsters right to left. (See also left) 5.16 SAFE Syntax: Safe Safe means that monsters has to get close to you to see you while you are in one of the safe sectors. If you use 'safe 0 ' they can't see you even if they are in the same sector as you. 'safe 1 ' means that monsters can only see you if they are in your sector. 'safe 2 ' means the monsters can only see you if they are in a neighbouring sector or in your sector. 'safe ' means that monsters can only see you if they are closer than . (if the number of 2s lines between you and them is less than (or equal to) dist-1). ---------------- 5.17 Combining Options ---------------- If you combine options like INV SAFE and SAFE for the same sector different things can happen. In this section all references will be to the following map: |-----|-----|-----|-----|-----|-----|-----|-----| | : : : : : : : | | 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 | | : : : : : : : | |-----|-----|-----|-----|-----|-----|-----|-----| (all numbers are sector numbers) if the distance in INV SAFE is greater than the distance in SAFE like: Safe 2 1 Inv Safe 4 1 both sectors with a distance below 2 and a distance above 4 can see sector 1. (that is monsters in sectors 1,2,5,6,7 and 8 can see sector 1) if the distance in INV SAFE is less than the distance in SAFE like: Safe 4 1 Inv Safe 2 1 only sectors with a distance above 2 and a distance below 4 can see sector 1. (that is monsters in sectors 3 and 4 can see sector 1) For BLIND the same rules apply: if the distance in INV BLIND is greater than the distance in BLIND like: Blind 2 1 Inv Blind 4 1 both sectors with a distance below 2 and a distance above 4 can be seen from sector 1. (that is a monster in sector 1 can see you if you are in one of the sectors 1,2,5,6,7 or 8) if the distance in INV BLIND is less than the distance in BLIND like: Blind 4 1 Inv Blind 2 1 only sectors with a distance above 2 and a distance below 4 can be seen from sector 1. (that is a monster in sector 1 can see you if you are in one of the sectors 3 or 4) ----------------- 6. Multilevel wads ------------------ You have already seen in the previous sections how to handle multilevel wads together with the inspect and effect utilities. But what about the option file. Making a option like LEFT 311 in the option file doesn't mean that you want this option to work for all levels in a multilevel wad. (line number 311 in one level has got nothing to do with line number 311 in another level...) To make options that only apply to a specific level you can add lines of the form "EnMx" to the options file. example: # This is an example of a multilevel option file. # # The first lines are the default options. # These options will be used if RMB is called without # the EnMx parameter, or if there is no matching EnMx # in the options file. length 17 Distance 600 # Now comes the options used to process E1M1: E1M1 # ^ This marks the end of the defaults, and the beginning # of the options that apply to e1m1. Length 17 Distance 800 Left 311 Right 217 E1M2 # ^ Here stops the options for episode 1 mission 1, # and options for episode 1 mission 2 starts. Length 14 Report 14 Block 23 56 # If RMB is called with a mission that is not in the options # file e.g. "e1m3", the default options at the beginning of # the file are used. # Otherwise RMB will search the options file until # it finds the correct EnMx, and then it will process # the options until it meets the next EnMx, where it stops. # Therefore it doesn't work if you write E1M2 (example) # more than once in an options file. (at least whats after the # second E1M2 will never be processed). Remember that if you want the options after any EnMx to be processed instead of the default options in the beginning, you must give the EnMx parameter to RMB. e.g. rmb c:\wadfiles\starwar2.wad c:\wadfiles\starwar2.wad e1m1 For wads containing only one level, you can just use the default options without worry. ----------------- 7. Copyright notice ------------------ Copyright: This program is totally free of charge. The program may be freely distributed. However the program or parts of it may NOT be used for commercial purposes or be included in commercial packages. (this includes shareware releases). Other notes: Doom is an Id software product, and is not free of charge. All wads mentioned in this text are not mine, and all credit for these wads should go to the respective authors --------------- 8. Authors note --------------------------- I am a 23 year old student at the university in Aarhus, Denmark. Any speling mislakes and semantic other errors has been introduced because of my lack of knowledge about the English language 8^) I use DEU5.21 and IDBSP for my own WADS. It is a good thing to use a rule checker like the one in DEU5.21 before using this program! Jens Hykkelbjerg Email: hykkelbj@daimi.aau.dk