home *** CD-ROM | disk | FTP | other *** search
/ Instant Doom Levels / Instant.Doom.Levels.-.Level.Master.II.iso / EDITORS / RMB / MANUAL.TXT < prev    next >
Text File  |  1995-02-23  |  92KB  |  1,914 lines

  1.               RMB: REJECT MAP BUILDER  Version 2.1
  2.               ++++++++++++++++++++++++++++++++++++
  3.  
  4.              Software by  Jens Hykkelbjerg
  5.  
  6.  
  7.  
  8.                 =+=+=+=+=+=+=+=+=+=+=+=
  9.                 U S E R     M A N U A L
  10.                 =+=+=+=+=+=+=+=+=+=+=+=
  11.  
  12.                   written by
  13.                Jens Hykkelbjerg and Steve Benner
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20. 0. CONTENTS
  21. ===========
  22.  
  23. 1. REJECT MAP BUILDER: SOME FAQs
  24.      1.1 What is RMB?
  25.      1.2 What is the REJECT resource?
  26.      1.3 What is REJECT efficiency?
  27.      1.4 Why use RMB?  Can't any WAD editor do this?
  28.      1.5 I'm not a WAD designer but can I use RMB on other people's WADs?
  29.      1.6 Will RMB alter the way the game plays (apart from speed)?
  30.      1.7 Tell me more about these special effects
  31.      1.8 Hmmm... Interesting.  What use is it, though?
  32.      1.9 So I can use RMB with impunity, then?
  33.      1.10 How do I optimise someone else's WAD safely, then?
  34.      1.11 How thorough is RMB?
  35.      1.12 Does RMB work with any WAD?
  36.      1.13 OK, so how do I use RMB?
  37.  
  38. 2.  INSTALLATION AND USE
  39.      2.1 Installation
  40.      2.2 RMB Utilities
  41.       2.2.1 DxBETTER
  42.       2.2.2 INSPECT
  43.       2.2.3 RMB
  44.       2.2.4 EFFECT
  45.      2.3 USING OPTIONS FILES
  46.       2.3.1 Combining REJECT optimisation and special effects
  47.       2.3.2 The structure of an Options file
  48.       2.3.3 RMB options: a full list
  49.       2.3.4 Processing time implications of RMB options
  50.      2.4 Miscellaneous
  51.  
  52. 3.  OPTIONS REFERENCE
  53.      3.1 Explanation of argument types
  54.      3.2 Individual Option Details
  55.      3.3 Combining Options
  56.  
  57. 4. TROUBLESHOOTING
  58.  
  59. 5. COPYRIGHT NOTICES, DISCLAIMER AND CONDITIONS OF USE
  60.  
  61. 6. AUTHOR'S NOTE
  62.  
  63. 7. ACKNOWLEDGEMENTS
  64.  
  65.  
  66.  
  67. 1. REJECT MAP BUILDER: SOME FAQs
  68. ================================
  69.  
  70. 1.1 What is RMB?
  71. ----------------
  72. Reject Map Builder (RMB) is a DOS-based program designed to allow DOOM users 
  73. and level-designers to both optimise and customise the REJECT resource 
  74. associated with either their id-supplied DOOM.WAD or other third-party PWAD 
  75. files.  This includes any DOOM 1, DOOM ][ or Heretic PWAD.
  76.  
  77. Using RMB can provide greatly improved playing-speed, particularly in complex 
  78. WADs with many monsters.  The REJECT resource also provides scope for the WAD 
  79. designer to implement a number of special effects, to which RMB provides full 
  80. and easy access.  The RMB package contains utilities to inspect and report on 
  81. REJECTs in any single- or multi-level WAD.  There are also a few sample WADs 
  82. for DOOM 1 to demonstrate the potential of the special effects which become 
  83. available through the REJECT map.
  84.  
  85. 1.2 What is the REJECT resource?
  86. --------------------------------
  87. The purpose of the REJECT map within a WAD file is to tell the Doom gaming 
  88. engine whether or not it is feasible for a monster located in a particular 
  89. sector to see anything to shoot at, or attack, thereby saving the engine from 
  90. having to work this out for itself while a game is in progress.  Within the 
  91. resource, the information is stored as a series of bits, which, on a sector by 
  92. sector basis, we may think of as a table, thus:
  93.  
  94.             Sector the player is in
  95.              0    1    2    3    4 ....       NB: Doom *never*
  96.                   +----------------------------           uses this table to
  97.   Sector the   0  |  b    b    b    b    b ....           determine what the
  98.    monster     1  |  b    b    b    b    b ....           PLAYER might be able
  99.     is in      2  |  b    b    b    b    b ....           to see.
  100.            3  |  b    b    b    b    b ....
  101.            :  |  :    :    :    :    :
  102.            :  |  :    :    :    :    :
  103.  
  104. The value of each bit, b, has the meaning:
  105.   (0)  player's sector can be seen (at least in part) from monster's sector;
  106.   (1)  player's sector cannot be seen at all from monster's sector.
  107.  
  108. The following WAD map, for example:
  109.  
  110.     o-------------o----------------o-----------o
  111.     |             :                :           |      The numbers indicate
  112.     |      1      :       2        :     3     |      SECTORS
  113.     |             :                :           |
  114.     |             o----------------o-----------o      Dashed/solid lines are
  115.     |             |                                   1-sided LINEDEFs
  116.     |             |
  117.     |             |                                   Dotted lines are
  118.     o.............o                                   2-sided LINEDEFs
  119.     |             |
  120.     |      0      |                                   o's are VERTEXES
  121.     |             |
  122.     o-------------o
  123.  
  124. would give rise to the following REJECT table:-
  125.  
  126.               (Player sector)
  127.              0    1    2    3  
  128.           +-------------------
  129.            0  |  0    0    0    1 
  130.    (Monster    1  |  0    0    0    0 
  131.     Sector)    2  |  0    0    0    0 
  132.            3  |  1    0    0    0 
  133.  
  134. which indicates that all sectors can see every other sector, with the 
  135. exception of sectors 0 and 3, which are not in direct line of sight of each 
  136. other.
  137.  
  138. Note that this does not mean that any monsters in sector 0, say, will 
  139. definitely see the player who enters sector 2: it merely means that it is 
  140. feasible for them to do so.  Any number of factors may prevent a monster from 
  141. actually spotting the player during play - not all of the player's sector may 
  142. be visible from the monster's actual location; the monster may be looking in 
  143. the wrong direction and so on.  In the example above, the game engine will 
  144. have to resolve the actual line of sight between a monster in sector 0 and a 
  145. player in sector 2 at game time.  On the other hand, the presence of a 1 in 
  146. the REJECT map indicates immediately to the game engine that it is *not* 
  147. feasible for monsters to see from one of these sectors to the other.  In such 
  148. cases, the engine will not bother to perform any line-of-sight (los-) 
  149. calculation and will move on to considering other monster-occupied sectors.  
  150. As los-calculations are often not trivial, any such calculations that can be 
  151. avoided while the game is in play will improve game speed and make frame 
  152. updates smoother.  Obviously in the simple example above, the amount of work 
  153. being saved is small: the benefits during play provided by this particular 
  154. REJECT map are probably undetectable.  For large WADs with many monsters and 
  155. complex geography, however, the time savings that can be had from a fully 
  156. optimised REJECT table may be considerable and can make all the difference to 
  157. the playability of the level.
  158.  
  159. 1.3 What is REJECT efficiency?
  160. ------------------------------
  161. It should be obvious from the discussion above that, in general, the more 1's 
  162. there are in the REJECT map, the greater the potential savings in los-
  163. calculation time.  RMB uses this simple fact to provide a rough indication of 
  164. the effectiveness of a WAD's REJECT map.  Whenever RMB is used to create or 
  165. inspect a REJECT map, it will count the number of 1's in the resource and then 
  166. report this as a percentage of the total number of entries.  This so-called 
  167. efficiency figure will only give a rough indication of the amount of speed-up 
  168. of the level attributable to the REJECT map (this will obviously depend 
  169. ultimately on the number and distribution of monsters in the level) but for 
  170. most practical WADs a high efficiency rating usually means that the speed-up 
  171. will be good in most areas.
  172.  
  173. 1.4 Why use RMB?  Can't any WAD editor do this?
  174. -----------------------------------------------
  175. Although it is a simple structure to understand, the calculations which are 
  176. needed to generate the REJECT map successfully are quite involved and can be 
  177. fairly time consuming, even with a fast processor.  Consequently, the majority 
  178. of WAD editors currently available prefer not to bother about this resource, 
  179. concentrating instead on other areas of WAD construction.  Most editors simply 
  180. generate an empty REJECT, (i.e. a table entirely of 0's) which benefits 
  181. playability not one iota.  It was to address this lack that RMB was written: 
  182. with RMB, the Doom level developer can easily integrate automatic REJECT 
  183. generation into his edit/play development cycle.  Or he may choose to leave 
  184. REJECT optimisation to the end, using RMB just on the final WAD.  
  185.  
  186. 1.5 I'm not a WAD designer but can I use RMB on other people's WADs?
  187. --------------------------------------------------------------------
  188. You may be tempted to use RMB to try to speed up your favourite third-party 
  189. WAD.  This is OK provided you proceed with caution, as explained below.
  190.  
  191. 1.6 Will RMB alter the way the game plays (apart from speed)?
  192. ------------------------------------------------------------
  193. The answer to this question is no.. and yes!  To understand this answer, let 
  194. us look briefly at how the Doom engine resolves monster behaviour during play.  
  195. In grossly over-simplified form, the Doom monster control loop works something 
  196. like this:-
  197.  
  198. for each monster
  199.   if the REJECT map says it's feasible then         <-- i.e. REJECT entry of 0
  200.     if player is in sight then                      <-- note los calculation
  201.       if monster is awake then                     \
  202.     if monster within range of player then      |
  203.       attack player                             |
  204.     else                                        |
  205.       move to get in range                      | 
  206.     endif                                       |    This part
  207.       else                                           >   skipped if player
  208.     wake monster                                |    cannot be seen
  209.       endif                                         |
  210.     else                                            |
  211.       if monster is awake then                      |
  212.     try to home in on player                    |
  213.       endif                                        /
  214.     endif
  215.   else
  216.     if monster is awake then                       <--  Note the duplication
  217.       try to home in on player                     <--   of this
  218.     endif 
  219.   endif
  220. next monster
  221.  
  222. This shows how a REJECT entry of 0 makes no difference to Doom's monster 
  223. decision-making: hopefully you can also see that in the cases where the REJECT 
  224. map contains 1's (where a los-calculation would definitely fail because the 
  225. two sectors are not in sight of each other) there is no difference in the 
  226. logic either: a los-calculation is merely avoided.  Rest assured, therefore, 
  227. that supplying Doom with a REJECT map that has all unsighted sector pairs 
  228. marked will make no difference to monster behaviour during game play.  The 
  229. only change you should see is an increase in playing-speed.
  230.  
  231. What about the other half of the answer to our question above?  How may it 
  232. come about that RMB can change the playing characteristics of a WAD?  Well, 
  233. RMB is a fully featured REJECT map builder: in addition to its default 
  234. 'automatic' mode, RMB provides the WAD designer with full access to the REJECT 
  235. map, allowing individual bits to be set or cleared at will.  This can 
  236. introduce some useful (or at least novel!) special effects which the WAD 
  237. designer may wish to exploit.
  238.  
  239. 1.7 Tell me more about these special effects
  240. --------------------------------------------
  241. By way of an example, consider our earlier 4-sector map.  Here is the REJECT 
  242. map that RMB would generate by default:
  243.  
  244.              0    1    2    3   (Player Sector)
  245.           +-------------------
  246.    (Monster    0  |  0    0    0    1 
  247.     sector)    1  |  0    0    0    0 
  248.            2  |  0    0    0    0 
  249.            3  |  1    0    0    0 
  250.  
  251. If this table were to be altered thus:
  252.  
  253.              0    1    2    3   (Player Sector)
  254.           +-------------------
  255.    (Monster    0  |  0    0    0    1 
  256.     sector)    1  |  0    1    0    0         <- one bit changed at 1,1
  257.            2  |  0    0    0    0 
  258.            3  |  1    0    0    0 
  259.  
  260. the effect would be to make monsters in sector 1 unable to see any player in 
  261. that sector!  Under these circumstances, the effect during play would be that 
  262. while in sector one, the player would be immune from attack by monsters in the 
  263. sector with him.  Note, though, that he may still be attacked by monsters from 
  264. other sectors.  Furthermore, if he moved out of sector 1, any monsters left 
  265. there would then be able to see him and attack him.  It is important to 
  266. remember that this 'blindness' of monsters is a function of the sectors they 
  267. occupy, not of the monsters themselves. In this example, assuming monsters are 
  268. not constrained from moving between sectors by other factors, if the player 
  269. entered sector 1 (from sector 0, say) and was spotted by a monster in sector 
  270. 3, that monster would wake up and would start to pursue (and possibly fire at) 
  271. the player.  The monster would move from sector 3 into 2, where it could still 
  272. see the player and so may continue to fire.  Once it entered sector 1, 
  273. however, the player would 'disappear' from view, as far as the gaming engine 
  274. is concerned, and the monster would now cease its attacks.  Note from the 
  275. logic presented earlier, though, that the monster would continue to track the 
  276. player and, of course, would resume its attack as soon as either it or the 
  277. player left sector 1.  A single bit change in the REJECT map has produced an 
  278. unusual but interesting behavioural change in the game.  
  279.  
  280. 1.8 Hmmm... Interesting.  What use is it, though?
  281. -------------------------------------------------
  282. We could make a couple of other changes to the map:
  283.  
  284.              0    1    2    3           Note the whole of the 
  285.           +-------------------          player sector 1 column
  286.    (Monster    0  |  0    1    0    1           set to 1's.
  287.     sector)    1  |  0    1    0    0 
  288.            2  |  0    1    0    0 
  289.            3  |  1    1    0    0 
  290.  
  291. Here we have produced a map where the player is completely 'safe' in sector 1:  
  292. no monster anywhere can see him there.  There is potential here for producing 
  293. 'safe havens' in areas of complete mayhem, areas where a player can catch his 
  294. breath before returning to the fray (provided he can recognise the 'haven' and 
  295. get to it, or course :-) -  better than having the player keep reaching for 
  296. the pause key!
  297.  
  298. Alternatively, here:
  299.  
  300.              0    1    2    3   (Player sector)
  301.           +-------------------
  302.     (Monster   0  |  0    0    0    1 
  303.      sector)   1  |  1    1    1    1          <-- whole row set to 1's.
  304.            2  |  0    0    0    0 
  305.            3  |  1    0    0    0 
  306.  
  307. we've produced a sector (1, again) which is completely 'blind'.  Monsters in 
  308. it will not see anything in any sector.  Note that although these monsters 
  309. will not awaken or attack if the player moves in front of them (they can never 
  310. see him while they remain in sector 1), they can still be awakened by noises 
  311. (assuming they're not flagged as deaf, of course - and just what use deaf 
  312. *and* blind monsters would be, I'm not sure: although even those monsters will 
  313. wake up if hit with shot) whereupon they will start tracking the player - and 
  314. will fall upon him once they are no longer in sector 1!  There is scope here 
  315. for rooms full of sleeping monsters through which a player must creep in order 
  316. to find the means of disposing of them.
  317.  
  318. These are just two examples of special effects which can be introduced to a 
  319. WAD by means of the REJECT map.  Naturally, RMB provides simple access to 
  320. these and to a range of others for WAD designers - full details of each effect 
  321. option are given in the "Options Reference" section of this manual.  You can 
  322. introduce as many (or as few) such effects as you wish - none of them add 
  323. anything to the size of a WAD and they may even speed it up into the bargain 
  324. (they will certainly never slow it down any): of how many things can that be 
  325. said in Doom?  By default, of course, RMB applies no special effects at all, 
  326. so that you need not worry about any such things being introduced unexpectedly 
  327. to your WADs.
  328.  
  329. 1.9 So I can use RMB with impunity, then?
  330. -----------------------------------------
  331. Up to a point, yes.  If you are the designer of a WAD, you will of course know 
  332. whether your WAD needs any of the special effect settings that RMB provides 
  333. and you will be using RMB accordingly.  If you don't want any special effects, 
  334. then just use RMB to optimise the REJECT table for speed and away you go.  If, 
  335. however, you are using RMB to try to improve the performance of someone else's 
  336. WAD, you should proceed with caution.  The reason for this is that the 
  337. original WAD author may have edited the REJECT map to produce some special 
  338. effect or other at some place in the WAD.  Running RMB on such a WAD will 
  339. destroy the tailored REJECT and replace it with a 'plain' (albeit optimised) 
  340. one and the special effects will be lost.  This could completely destroy the 
  341. functionality of the WAD.  Naturally, applying RMB to a WAD which already has 
  342. a fully optimised REJECT map will achieve nothing (but then it shouldn't do 
  343. any damage, either).
  344.  
  345. 1.10 How do I optimise someone else's WAD safely, then?
  346. --------------------------------------------------------
  347. The recommended method for using RMB with another designer's WAD (where you 
  348. know nothing about the REJECT map beforehand) is as follows:
  349.  
  350. Start by making a back-up copy of the WAD: that way it doesn't matter what 
  351. damage you do!  Then use the RMB's INSPECT utility (described later) to test 
  352. the WAD for special effects.  If INSPECT finds special effects it is, of 
  353. course, not a good idea to process the WAD with RMB, as that would remove the 
  354. special effects.  
  355.  
  356. INSPECT only reports symmetry errors, so some special effects could still be 
  357. hiding even if INSPECT reports that there are none.  If INSPECT doesn't find 
  358. any special effects the efficiency is reported.  A reported efficiency of 0 
  359. indicates that the REJECT map is empty: in all such cases, RMB can be used 
  360. quite safely, as there is no information in the REJECT map to damage.  A very 
  361. low but non-zero efficiency on the other hand, (say only a dozen 1's out of a 
  362. few thousand) means that you probably have a WAD where the author has 
  363. deliberately set bits to achieve special effects but has not bothered to 
  364. optimise the rest of the table.  It is probably best not to apply RMB to such a 
  365. WAD, unless you can be sure of keeping the existing 1's intact.  Such WADs are 
  366. likely to be very rare in reality - any author so REJECT-aware would almost 
  367. certainly have optimised the table (unless, of course, they didn't have a 
  368. program as good as RMB!)  In cases where INSPECT reports a high efficiency 
  369. there is almost certainly nothing to be gained by applying RMB to the WAD.  RMB 
  370. may produce a higher efficiency but the resulting speed difference may not be 
  371. detectable and, of course, you will have destroyed any special effects in the 
  372. process!
  373.  
  374. 1.11 How thorough is RMB?
  375. -------------------------
  376. To perform a complete check on all inter-sector lines-of-sight, in any fair-
  377. sized WAD, would require a vast number of calculations.  In order to achieve a 
  378. good working compromise between the number of absolute 'blind pairs' which are 
  379. located and the time taken to find them, RMB uses a number of processing 
  380. short-cuts of which the WAD designer needs to be aware.  There are options to 
  381. extend RMB's processing to locate more true 'blind pairs' but these are not 
  382. likely to be needed very often: usually only when trying to build special 
  383. effects, (when it is probably easier to take full manual control of the 
  384. problem areas anyway,) or for WADs where you need the absolute maximum amount 
  385. of speed-up possible.
  386.  
  387. Another point to bear in mind about RMB's methodology is that it always 
  388. defaults safe - by this we mean that it will, unless instructed otherwise, 
  389. introduce no extraneous special effects (after all, nothing spoils a WAD more 
  390. than monsters who don't want to play!)  Once again, special processing 
  391. 'limitations' are imposed to ensure this behaviour.
  392.  
  393. The first such limitation is that RMB considers only lines-of-sight in the 2-
  394. dimensional plane of the WAD map: no height differences are taken into 
  395. consideration.  This limitation is imposed for reasons of both speed and 
  396. safety.  As you will be aware, height differences between sectors may be only 
  397. a temporary thing in DOOM: consider the following area of a map, seen here as 
  398. a side view:-
  399.  
  400.                 4      5 
  401.              |------|------|        The numbers identify
  402.              |         o   |        sectors;
  403.              |         -\  |
  404.    Sector 4 is a lift in |          /\ |        
  405.    the 'up' position. -> |------|------|        
  406.              |      :   ^ 
  407.              |   S  :   |
  408.        1       2      3  |   H  :   example player
  409.     |------|------|------|   A  :   position
  410.     |                        F  :
  411.     |                        T  :
  412.     |                           :
  413.     |------|------|------|......:
  414.  
  415. Here, sectors 4 & 5 are not in view from sectors 1, 2 & 3 (and vice versa).  
  416. RMB will be unaware of this, however, as it will only consider the map view:-
  417.  
  418.     o------o------o------o------o------o
  419.     |      :      :      :      :      |   where every sector appears to
  420.     |  1   :   2  :   3  :   4  :  5   |   be able to see all others.
  421.     |      :      :      :      :      |
  422.     o------o------o------o------o------o
  423.  
  424. This is a desirable state of affairs, because we would not wish to block the 
  425. line of sight between sectors 3 & 4 which will exist as soon as the lift 
  426. descends.  Similar arguments also apply either side of doors.  
  427.  
  428. There being no mechanism for changing resources during play, the REJECT table 
  429. must allow for all *eventual* lines-of-sight.  The only limitation which 
  430. results from RMB's methodology in the above example, is that the true 
  431. obstruction to the lines-of-sight between sectors pairs 1-5 and 2-5 will go 
  432. unrepresented in the REJECT map and in these particular instances, Doom will 
  433. have some unnecessary los-checking to do at game-time.  This is a small price 
  434. to pay for correct monster behaviour in this area.  Any time you spent 
  435. searching out and correcting the few sector pairs that are affected by this 
  436. short-coming would most likely be time wasted.
  437.  
  438. The other short-cut that RMB uses in order to speed up its calculations, is to 
  439. treat all sectors that are wholly enclosed within another sector (and 
  440. consequently have no 1-sided LINEDEFs) as part of the enclosing sector.  In 
  441. most WADs, this greatly cuts down the number of sectors that RMB needs to 
  442. consider (inter-sector connections rising as the square of the number of 
  443. sectors).  Think of this as processing by the 'room', rather than by the 
  444. sector and you'll see that it makes sense.  A variety of options exist to make 
  445. RMB vary this short-cut to suit your individual WAD (these are explained in 
  446. detail in section 3 of this manual): most of the time you should find that the 
  447. default mode works just fine.
  448.  
  449. 1.12 Does RMB work with any WAD?
  450. --------------------------------
  451. RMB v2.0 will work with any WAD, single- or multi-level, IWAD or PWAD, 
  452. produced with any WAD editor, provided that a REJECT resource of the correct 
  453. size is present in the WAD.  (Its contents are of course immaterial.)  RMB 
  454. will work with WADs for Doom (v1.1 - 1.666), Doom2 or Heretic.  If you 
  455. encounter a problem WAD, please contact the author (contact details are at the 
  456. end of this manual) with a description of the problem.
  457.  
  458. 1.13 OK, so how do I use RMB?
  459. -----------------------------
  460. Read on: the next section of this manual tells you how to install the program 
  461. and describes the various utilities supplied with it.  After that, Section 3 
  462. gives full details of the various options which can be used with RMB.
  463.  
  464.  
  465. 2.  INSTALLATION AND USE
  466. ========================
  467.  
  468. 2.1 Installation
  469. ----------------
  470. Installation of RMB is very simple: just unpack it into its own directory 
  471. (you've probably done this already).  You will find that apart from the main 
  472. RMB.EXE itself, there are a number of other .EXE utilities (these are 
  473. described below) as well as some .BGI files which are required for correct 
  474. graphical display of the map as RMB processes the WAD.  There is also a couple 
  475. of batch files which you can use to run through all of your (registered copy) 
  476. Doom levels, to optimise them one by one: details below.
  477.  
  478. 2.2 RMB Utilities
  479. -----------------
  480. NOTE:  When the syntax of a command is given, the follow conventions apply:
  481.        items in square brackets are optional parameters; 
  482.        items in curly brackets indicate possible choices; <an item> like 
  483.        this refers to a particular type of item (usually obvious);
  484.        nothing in RMB is case-sensitive.
  485.  
  486.        For example, for a command specified thus: 
  487.  
  488.    EFFECT <WADfile> [<level id>] {BLIND, SAFE} {0, 1} {<sector number>, ALL} 
  489.  
  490.        any of the following are valid:-
  491.  
  492.    effect myfile.wad blind 0 22
  493.    effect my2file.wad E1M2 safe 1 43      (for use with Doom 1 WAD)
  494.    effect myfile.wad MAP02 blind 0 all    (for use with Doom 2 WAD)
  495.  
  496. (An explanation of this command is given in section 2.2.4, below.)
  497.  
  498. Note also that all examples assume that the commands are typed while in the 
  499. RMB directory.  WAD designers who are likely to make heavy use of RMB may wish 
  500. to prepare DOS batch files to perform the necessary directory switching for 
  501. them: I (Steve) use a set like this:-
  502.  
  503. FIX.BAT                        invokes my editor with a chosen WAD
  504.    cd waded                    (no, I don't use DEU - just call me perverse)
  505.    waded %1.wad
  506.    cd ..
  507. ---------
  508. MAKEFX.BAT                     lets me edit my RMB option file (see below)
  509.    edit waded\%1.rej
  510. ---------
  511. REJECT.BAT                     invokes RMB   
  512.    rmb ..\waded\%1.wad ..\wads\%1.wad %2
  513. ---------
  514. TRY.BAT                        lets me play-test the WAD
  515.    doom -file wads\%1.wad -devparm -warp %2 %3
  516. ---------
  517. TRYRAW.BAT                     lets me play-test the version without REJECT
  518.    doom -file waded\%1.wad -devparm -warp %2 %3
  519. ---------
  520.  
  521. No doubt, each developer will prefer their own.
  522.  
  523. 2.2.1 DxBETTER
  524. --------------
  525. The D1BETTER.BAT utility supplied with RMB will run through all of your 
  526. (registered copy) Doom1 levels, optimising them one by one.  To use it, copy 
  527. your DOOM.WAD to your RMB directory, type D1BETTER then go and make some 
  528. coffee.  When you have finished your cup(s) of coffee, rename your original 
  529. DOOM.WAD to something like DOOM.BAK, copy the new one back to the DOOM 
  530. directory and try it out.  (Remember that when you have changed the original 
  531. Doom files, Id offers no support...)  [If you're short on disk space (and who 
  532. isn't?) copy RMB.EXE to your Doom directory, make a file called DOOM.REJ with 
  533. a single line saying NOMAP in it and then type \RMB\D1BETTER (or whatever is 
  534. necessary to locate the batch file).  Of course, if this goes wrong, you'll 
  535. have to re-install DOOM.WAD.  But then you've got the original disks, haven't 
  536. you?]  Another batch file called D2BETTER.BAT is supplied to work the same 
  537. wonders with the Doom2 WAD.  It is used in precisely the same way as D1BETTER, 
  538. except that you will have time to make and drink a large flask of coffee, go 
  539. for a jog, wash and polish the Porsche (don't worry if you don't have a 
  540. Porsche right now: you may have one by the time D2BETTER finishes...;-) 
  541.  
  542. 2.2.2 INSPECT
  543. -------------
  544. The INSPECT utility will report on a WAD's current REJECT map without changing 
  545. it.  This is useful for finding out whether a third party WAD has anything in 
  546. its REJECT or not, prior to using RMB on it.  It also can be used to provide 
  547. reassurance that any specific processing you requested has taken effect.  The 
  548. statement syntax is: 
  549.  
  550.    INSPECT <WADfile> [<level id>] [{<sector number>, TEST}]
  551.  
  552. <WADfile> specifies the path and filename of the file to be inspected.  Be 
  553. sure to include the .WAD file extension.
  554.  
  555. Use the optional <level id> parameter to specify the level you want to inspect 
  556. in a multi-level WAD.  Levels are specified in the standard ExMy format for 
  557. Doom1 WADs, or in MAPnn form for Doom2 WADs.  Omitting this parameter results 
  558. in just the first map in the WAD being inspected.
  559.  
  560. When a <sector number> is specified, INSPECT will report the list of all 
  561. sectors that are currently flagged as potentially visible from the sector of 
  562. interest. 
  563.  
  564.      >inspect c:\wadfiles\think12.wad 2 
  565.  
  566.      Sectors visible from sector 2:    0,1,2,... 
  567.  
  568. If no <sector number> is given, INSPECT will just calculate and report the 
  569. efficiency of the WAD's current REJECT map. 
  570.  
  571. e.g.     >inspect c:\wadfiles\think12.wad 
  572.  
  573.      Efficiency: 40% 
  574.  
  575. Instead of the sector number you can also specify TEST.  In that case INSPECT 
  576. will test whether the REJECT map is symmetric.  The REJECT map is symmetric if 
  577. for all sectors A that can see sector B, B can also see A.  Most special 
  578. effects will destroy this symmetry, so the TEST option can be thought of as a 
  579. test for special effects. In fact, INSPECT will report either 'No special 
  580. effects found' or 'Special effects found' as a result of a TEST query.
  581.  
  582.      >Inspect c:\wadfiles\think12.wad test
  583.  
  584.      No special effects found...
  585.  
  586. 2.2.3 RMB
  587. ---------
  588. Note: The syntax has changed since v1.0 
  589.  
  590. The syntax for the main REJECT Map Builder (RMB) is:-
  591.  
  592.    RMB <InputWADfile> <OutputWADfile> [<Level id>]
  593.  
  594. The input WAD filename may be the same as the output WAD filename if you wish 
  595. (gain, don't forget the .WAD file extensions here): the original will be 
  596. overwritten.  Most WAD developers will no doubt cringe at this idea and it is 
  597. certainly not recommended unless you have a back-up of the file.  (Some people 
  598. like to live dangerously, though, and who are we to stop them?  See the 
  599. REJECT.BAT batch file above for one suggested better way of doing things 
  600. though.)
  601.  
  602. The optional <Level id> is either a Doom1 episode and mission number like 
  603. E2M3, or a Doom2 map number like MAP03.  RMB will process the specified map 
  604. or, if none is specified, the first level in the WAD.
  605.  
  606.   Doom1 example:   >rmb c:\wadfiles\starwar2.wad mystar2.wad e1m2 
  607.    (Processes e1m2 from starwar2.wad; saves the result in mystar2.wad). 
  608.  
  609.   Doom2 example:   >rmb doom2.wad doom2.wad MAP13 
  610.    (Processes map 13 of doom2.wad). 
  611.  
  612. During the processing of a WAD, a map of the level being processed is shown on 
  613. the screen, with the number of the sector currently being processed given in 
  614. the top left corner of the screen, together with the total number of sectors 
  615. to process in the level.  The map may look a little different from the view of 
  616. the WAD that you are used to seeing: all 2-sided LINEDEFs appear initially in 
  617. blue with a selection of 1-sided LINEDEFs in white.  As the program looks at 
  618. each sector in turn and works round all the sector's 2-sided LINEDEFs, lines 
  619. on the map will turn red (to show that they're being processed) and then cyan 
  620. (when finished).  From the current (red) LINEDEF, it will be possible to see 
  621. other 2-sided LINEDEFs.  The first of these out from the sector being 
  622. processed will show yellow on the display for a while, finally turning magenta 
  623. as processing on it completes.  As the program progresses, there should always 
  624. be a red and a yellow line, showing where the program is currently processing 
  625. los-calculations.  The sector count will rise steadily: processing finishes 
  626. when all sectors have been examined.
  627.  
  628. When processing is complete, the program will create the specified WAD file, 
  629. writing the new REJECT map to it, along with the rest of the WAD's resources. 
  630. The final efficiency of the REJECT will be reported, and RMB will beep to let 
  631. you know that it has finished (and drag you away from your coffee drinking).
  632.  
  633. 2.2.4 EFFECT
  634. ------------
  635. The EFFECT command allows simple special effects to be applied to WAD files 
  636. through the REJECT map.
  637.  
  638. The syntax of the EFFECT command is: 
  639.  
  640.    EFFECT <WADfile> [<Level id>] {SAFE, BLIND} {0,1} {<sector number>, ALL}
  641.  
  642. Once again, don't forget the .WAD file extension to the <WADfile> parameter.
  643.  
  644. The optional <Level id> is either a Doom1 episode and mission number like 
  645. E2M3, or a Doom2 map number like MAP03.  EFFECT will process the specified map 
  646. or, if none is specified, the first level in the WAD.
  647.  
  648. The SAFE option makes sectors safe, as described in section 1.8 above.  As 
  649. long as a player is in a safe sector, he can't be seen: monsters won't wake up 
  650. or attack.  The other available effect is BLIND: this blinds a sector so that 
  651. monsters in it will be prevented from seeing the player, wherever he might be.
  652.  
  653. The parameter immediately following the SAFE or BLIND keyword specifies the 
  654. degree of safety or blindness that the EFFECT command will produce.  Currently 
  655. only 0 or 1 are supported here.  Their meanings are:
  656.  
  657. SAFE:  (0) : Sector is completely safe: no sector has sight of it;
  658.        (1) : Sector is safe only from other sectors: monsters within it can
  659.          see the player;
  660.  
  661. BLIND  (0) : Sector is completely blind: no sectors can be seen from it;
  662.          player cannot be seen in it;
  663.        (1) : Sector is blind only to other sectors: monsters within it can see
  664.          the player in it.
  665.  
  666. In all four cases above, you can use ALL instead of the sector number for the 
  667. last parameter.  With a degree setting of 0, this will make all sectors 
  668. totally safe (or blind - there is no distinction between the two, the table 
  669. being filled with 1's either way): all monsters will be total pacifists.  A 
  670. degree setting of 1 creates a level full of near-sighted monsters, who will 
  671. only notice players in the same sector as themselves.
  672.  
  673. Making all monsters blind will make for a very dull game but it may be useful 
  674. for play-testing a WAD, to check, for instance that all monsters are placed 
  675. correctly (but do remember that noises will wake them up and cause them to 
  676. move around) or to see what the absolute maximum REJECT speed-up of the WAD 
  677. would be like.
  678.  
  679. Although this command is quite powerful, it is really only intended as a quick 
  680. way of applying the occasional special effect.  For more comprehensive 
  681. application of special effects, as well as specialist processing, it is 
  682. recommended that the RMB command be used, in conjunction with an options file: 
  683. see the next section.
  684.  
  685. Remember also that if you use the RMB command on a WAD after it has been 
  686. EFFECTed, you will remove all of the added effects!  (Most editors will 
  687. happily do this for you too!)
  688.  
  689. 2.3 USING OPTIONS FILES
  690. -----------------------
  691.  
  692. 2.3.1 Combining REJECT optimisation and special effects
  693. -------------------------------------------------------
  694. So far, we have demonstrated the use of RMB to optimise a WAD's REJECT table 
  695. and have presented the utility EFFECT, which introduces special effects to a 
  696. WAD via its REJECT resource.  For some users, the simple application of these 
  697. utilities as described above will be sufficient.  For the serious WAD 
  698. developer, however, the more convenient and powerful approach will be to 
  699. utilise RMB options files during WAD development.  These allow full control of 
  700. RMB's optimisation methodology, as well as complete 'manual' access to the 
  701. REJECT resource.  RMB does not need to be invoked in any special way to make 
  702. use of an options file: all you need to do is create a text file containing 
  703. the options you wish to apply, making sure that it is located in the same 
  704. directory and has the same name as the WAD file you wish to process but with 
  705. the extension .REJ.  So, to apply a set of RMB options to MYLEVEL.WAD located 
  706. in your \NEWWADS directory, saving the new, processed WAD in your \REJWADS 
  707. directory, you would create an options file MYLEVEL.REJ in \NEWWADS and issue 
  708. the command:-
  709.  
  710.   >rmb \newwads\mylevel.wad \rejwads\mylevel.wad
  711.  
  712. RMB will automatically notice your \NEWWADS\MYLEVEL.REJ file and apply it.
  713.  
  714. 2.3.2 The structure of an Options file
  715. --------------------------------------
  716.  
  717. Note: The way RMB reads the option file has changed since v 2.0
  718.  
  719. RMB options files do not need to have a particular structure beyond being 
  720. straightforward ASCII text files, with a single RMB option statement on each 
  721. line (empty lines are permitted).  Options can be entered in upper or lower-
  722. case.  Options can appear in the file in any order: the only exception being 
  723. that options intended for particular levels in multi-level WADs must be grouped 
  724. together under a heading for that level.  The first part of the file before the 
  725. first level identifier contains the default options, which RMB will always use.
  726.  
  727. A sample .REJ options file should make this clearer (full details of the RMB 
  728. options used in this example are given in the next section of this manual):
  729.  
  730. MYWAD.REJ:
  731. # This is an example of a multilevel options file, for use with MYWAD.WAD.
  732.  
  733.    # The first lines are the defaults.
  734.    # These options will always be used.
  735.  
  736.    length 17 
  737.    Distance 800 
  738.  
  739.    # Now comes the options used to process E1M1:
  740.  
  741.    E1M1
  742.    # ^ This marks the end of the defaults, and the beginning 
  743.    #   of the options that apply to e1m1. 
  744.    #   Use MAPxx for options to levels in Doom2 WADs 
  745.  
  746.    Left 311 
  747.    Right 217 
  748.  
  749.    E1M2 
  750.    # ^ Here end the options for episode 1 mission 1:
  751.    #   options for episode 1 mission 2 begin.
  752.  
  753.    Length 14 
  754.    # ^ This option overrides the LENGTH option in the defaults section.
  755.    #   Read the section 'Overriding options' later.
  756.    Report 14 
  757.    Block 23 56 
  758.  
  759.    E1M1
  760.    # ^ Here the options for E1M1 take over again.
  761.  
  762.    INCLUDE (4) (6)
  763.    EXCLUDE (2) (3)
  764.  
  765.    # If RMB is called with a mission that is not in the options 
  766.    # file (e.g. "e1m3" here), only the default options at the beginning of 
  767.    # the file are used. 
  768.  
  769.    # ==END OF OPTIONS==
  770.  
  771.  
  772. To summarise:  if you want to apply different options to different levels in a 
  773. multilevel WAD, you must divide your 'wad_filename.rej' option file into 
  774. sections started by a line containing nothing but the level id.  For WADs 
  775. containing only one level, you can just use the default options without worry. 
  776.  
  777. 2.3.3 RMB options: a full list
  778. ------------------------------
  779. As explained earlier, in its default operation, RMB tries to maintain a 
  780. balance between complete optimisation of the REJECT map and the time taken to 
  781. locate blind pairs, while at the same time preserving the behavioural 
  782. integrity of the WAD.  The use of an RMB options file permits the designer to 
  783. vary RMB's processing, in order to achieve greater or lesser degrees of 
  784. optimisation, or produce particular special effects.  A full list of the 
  785. available options, with a short explanation of the function of each, is given 
  786. below.  Detailed descriptions of the operation of each option (ordered 
  787. alphabetically) is left to the next section.  
  788.  
  789. NOTE: options marked with & gained new syntax in v2.1;
  790.       options marked with + are new to v2.1;
  791.       no options require the PERFECT option to function correctly any more;
  792.       options marked with ! can cause problems in combination with PREPROCESS.
  793.  
  794.    #         Marks a comment line in the option file
  795. +  BAND      Makes 'bands' of blindness/ safety
  796. &! BLIND     Makes sector(s) blind (or partially so)
  797.    BLOCK     Stops monsters seeing through a pair of specified lines
  798.    DISTANCE  Specifies how far (on the ground) monsters can see generally
  799.    DOOR      Specifies the max. # of doors monsters can see through generally
  800.    EnMy      Marks start of options for a particular Doom1 level
  801. &  EXCLUDE   Forces exclusion of view from one sector to another
  802. +  GROUP     Merges sectors into one. (Sectors get the same REJECT maps)
  803. &  INCLUDE   Forces inclusion of view from one sector to another
  804. &  INV BLIND Makes sector(s) long-sighted
  805. &  INV SAFE  Makes sector(s) invisible to close monsters (but not far ones)
  806.    LEFT      Makes a 2s line one-way see-through (from left to right)
  807.  ! LENGTH    Specifies how far (by sector) monsters can see generally
  808.    LINE      Makes a 2s line impossible to look through for monsters
  809.    MAPxx     Marks start of options for a particular Doom2 map
  810. &  NODOOR    Marks sector(s) as not being a door [used only with DOOR option]
  811.    NOMAP     Removes the graphical display; reports progress as dots instead
  812. +  NOPROCESS Only applies special effects; no processing done. Very fast.
  813.    ONE       Same as BLOCK, but only operates in one direction
  814.    PERFECT   Generates a perfect REJECT map: forces processing of all sectors
  815. +  PREPROCESS Groups sectors to gain processing speed. (The efficiency drops)
  816. &  PROCESS   Forces processing of specified sector(s)
  817.    REPORT    Reports all detected distances >=DISTANCE setting to file
  818.    RIGHT     Makes a 2s line one-way see-through (from right to left)
  819. &! SAFE      Makes sector(s) invisible to far monsters
  820. +  TRACE     For debugging only: use is not recommended
  821.  
  822. INV is short for INVERT. Any option can be abbreviated to its shortest unique 
  823. form. If you wish SAFE can be abbreviated S, as no other options start with S.  
  824. Equivalently PREPROCESS can be abbreviated PRE, but not PR as PROCESS also 
  825. starts with PR.
  826.  
  827. 2.3.4 Processing time implications of RMB options
  828. -------------------------------------------------
  829. Because many of these options alter RMB's processing methodology, their use 
  830. will have implications for the time taken by RMB to build the REJECT map.  
  831. Below is a list of all the options, graded by their effect on the program's 
  832. processing speed.
  833.  
  834. These options speed RMB up (greatest first):
  835.     NOPROCESS  [<Wadfile> [<Level id>]]
  836.     PREPROCESS <Number>
  837.     LENGTH     <Distance>
  838.     DISTANCE   <Map distance>
  839.     DOOR       <Number>
  840.     GROUP      <Sector> <Sector list>
  841.     BLIND      <Distance> <Sector list>
  842.     LINE       <Line no>
  843.     LEFT       <Line no>
  844.     RIGHT      <Line no>
  845.     BLOCK      <Line no> <Line no>
  846.     ONE        <Line no> <Line no>
  847.  
  848. These options have no effect on speed:
  849.     #         <Comment>
  850.     EnMy
  851.     MAPxx
  852.     NOMAP
  853.     INCLUDE   <Sector> <Sector>
  854.     EXCLUDE   <Sector> <Sector>
  855.     SAFE      <Distance> <Sector list>
  856.     INV SAFE  <Distance> <Sector list>
  857.     INV BLIND <Distance> <Sector list>
  858.     BAND      {SAFE, BLIND} <Distance> <Distance> <Sector list>
  859.     INV BAND  {SAFE, BLIND} <Distance> <Distance> <Sector list>
  860.  
  861. These options cause RMB to slow down (greatest last):
  862.     REPORT    <Distance>
  863.     NODOOR    <Sector list>
  864.     PROCESS   <Sector list>
  865.     TRACE     <Sector list>
  866.     PERFECT 
  867.  
  868. Bear in mind that the longer RMB works, the greater the final efficiency of 
  869. the REJECT table (and the better the final speed-up) is likely to be.  
  870. Nevertheless, there will come a point where the additional return will not be 
  871. worth the extra effort.
  872.  
  873. 2.4 Miscellaneous
  874. -----------------
  875.  
  876. A few example WADs are supplied with the RMB package. Take a look at the .REJ 
  877. files, and play the WADs to get some idea about what RMB can do.  Not all 
  878. possible uses has been covered in these WADs, but they give some idea about 
  879. what RMB is all about.  The WADs are all very small, so you won't be able so 
  880. notice any speedup. As a rule of thumb, you need a WAD with more than 200 
  881. sectors and lots of monsters before you start feeling the speedup.
  882.  
  883.  
  884. 3.  OPTIONS REFERENCE
  885. =====================
  886.  
  887. 3.1 Explanation of argument types
  888. ---------------------------------
  889. The following terms are used to describe the arguments which RMB options take:
  890.  
  891. <Comment>  Any text, terminated by end-of-line.
  892.  
  893. <Distance> A distance, measured in sectors, including the specified sector,
  894.        so that 0 means "no distance"; 1 means "this sector only"; 
  895.        2 means "this and all immediately adjacent sectors" and so on.
  896.  
  897. <Line no>  The identification number of a 2-sided LINEDEF bordering two
  898.               different sectors. e.g. a line with the 2s bit set and two
  899.               sidedefs that point to two different sectors. You will find the
  900.               linedef number in your WAD editor. (If yours won't tell you,
  901.               you're using the wrong one!) 
  902.  
  903. <Map distance> Distance as measured in Doom map co-ordinates.  Opinions
  904.        vary as to how this equates to distance in the real world: a 
  905.        good rule of thumb seems to be 1 map unit is equivalent to 2cm.
  906.  
  907. <Number>   A positive integer.
  908.  
  909. <Sector>   The identification number of a SECTOR, determined from a WAD 
  910.        editor. 
  911.  
  912. <Sector list> A list of <sectors>, separated from each other by spaces
  913.        and surrounded by brackets.  e.g. (1 2 5 7 9)
  914.  
  915.  
  916. 3.2 Individual Option Details
  917. -----------------------------
  918. This section contains full details of the operation of each RMB option, 
  919. arranged in alphabetical order:
  920.  
  921.  
  922. =================================================================
  923. # [Comment]     Syntax: # <Comment>
  924. =================================================================
  925.  
  926. Lines in the options file which start with a # character are regarded by RMB 
  927. as comment lines: the entire line will be ignored.  Comments are terminated by 
  928. an end of line and may contain any characters whatsoever.  Use comments in 
  929. your options file to remind yourself of what you are trying to achieve in the 
  930. file, or to temporarily disable options in the file without deleting them.
  931.  
  932.  
  933. =================================================================
  934. BAND            Syntax: BAND {BLIND, SAFE} <From> <To> <Sector list>
  935. =================================================================
  936.  
  937. (The <From> and <To> part of this option are both distances by sector).
  938.  
  939. The BAND option is more complicated than the SAFE and BLIND options. f you 
  940. haven't read about those yet maybe you should do that, and return here later.
  941.  
  942. The BAND option is used to create 'bands' of blindness (or of safety).  Each 
  943. sector in the <Sector list> is processed separately with all sectors lying 
  944. between <From> and <To> sectors away marked as BLIND to (or SAFE from) the 
  945. sector being processed.
  946.  
  947. Applied to this map:
  948.  
  949.     o----o----o----o----o----o----o----o----o
  950.     |    :    :    :    :    :    :    :    |
  951.     | 1  : 2  : 3  : 4  : 5  : 6  : 7  : 8  | (a ':' marks a 2s line)
  952.     |    :    :    :    :    :    :    :    | (The numbers are sector numbers)
  953.     o----o----o----o----o----o----o----o----o 
  954.  
  955.  the option 
  956.  
  957.    BAND BLIND 3 5 (1 2)
  958.  
  959. will create two bands of blind sectors: all of those between 3 and 5 sectors 
  960. from sector 1; and those the same distance from sector 2. In this example, this 
  961. means that monsters in sector 1 will be unable to see players in sectors 3, 4 
  962. or 5; similarly, monsters in sector 2 will be blind to players in 4, 5 or 6. 
  963. Note that the sectors at the <To> and <From> distances are included in the 
  964. band.
  965.  
  966. The option
  967.  
  968.     BAND SAFE 2 3 (1 2)
  969.  
  970. will create the same bands of sectors as before but will mean that a player in 
  971. sector 1 or 2 will be safe from monsters in the appropriate band. 
  972.  
  973. Any BAND option can also be inverted:
  974.  
  975.     INVERT BAND SAFE
  976.  
  977. will make the specified sectors safe from anything outside the band; and
  978.  
  979.     INVERT BAND BLIND
  980.  
  981. will make the specified sectors blind to anything outside the band. For 
  982. instance, using:
  983.  
  984.     INVERT BAND BLIND 2 3 (1 2)
  985.  
  986. will cause monsters in sectors 1 and 2 unable to see anything outside the band, 
  987. making sector 1 able to see only sectors 3, 4 and 5, whereas sector 2 will be 
  988. able to see sectors 4, 5 and 6 but nothing else.
  989.  
  990.  
  991. =================================================================
  992. BLIND           Syntax: BLIND <Distance> <Sector list> 
  993. =================================================================
  994.  
  995. This is a similar option to the BLIND parameter in the EFFECT utility but with 
  996. rather more flexible usage.  It turns all of the sectors in the <sector list> 
  997. blind for the specified <distance>.  A value of 0 for <distance> will produce 
  998. a sector in which monsters can see nothing at all.  A <distance> of 1 prevents 
  999. monsters from seeing out of the sector.  With <distance> 2, monsters can see 
  1000. their own sector and all immediately neighbouring sectors, and so on. 
  1001.  
  1002. Applied to this map:
  1003.  
  1004.     o----o----o----o----o----o----o----o----o
  1005.     |    :    :    :    :    :    :    :    |
  1006.     | 1  : 2  : 3  : 4  : 5  : 6  : 7  : 8  | (a ':' marks a 2s line)
  1007.     |    :    :    :    :    :    :    :    | (The numbers are sector numbers)
  1008.     o----o----o----o----o----o----o----o----o 
  1009.  
  1010.  the option 
  1011.  
  1012.    BLIND 3 (5 7)
  1013.  
  1014. will allow monsters in sector 5 to see up to 3 sectors each way (counting 
  1015. their own sector) i.e. sectors 3, 4, 5, 6 and 7 but not sectors 1, 2 or 8.  In 
  1016. addition, monsters in sector 7 get to see into sectors 5, 6, 7 and 8, but not 
  1017. sectors 1, 2, 3 or 4. 
  1018.  
  1019. This option is useful if you want to restrict monsters' viewing range in 
  1020. certain areas, to allow for low light intensities, perhaps; or just to prevent 
  1021. them from waking too soon.
  1022.  
  1023. The BLIND option can be prefixed by the option INV as below:
  1024.  
  1025.      INV BLIND 1 (2 3 4)
  1026.  
  1027. While BLIND (without INV) makes monsters near-sighted or totally blind, 
  1028. inverting this with INV BLIND makes monsters LONG-sighted.  This means that a 
  1029. monster in any of the sectors specified in <sector list> will only be able to 
  1030. see sectors *beyond* the specified <distance>.  This means that where BLIND 1 
  1031. <sector list> makes the monsters in one of the specified sectors unable to see 
  1032. anything but their own sector, INV BLIND 1 <sector list> will make them unable 
  1033. to see their own sector, but quite capable of seeing all sectors beyond it. 
  1034.  
  1035. There may be occasions when you want to prevent a sector from seeing other 
  1036. sectors within a range of distances, say between 2 and 4 sectors distant.  RMB 
  1037. allows you to achieve this effect by combining the BLIND and INV BLIND options 
  1038. in the following way:  if you specify both INV BLIND and BLIND options for any 
  1039. particular sector(s) and the value you specify as the distance for the INV 
  1040. BLIND option is greater than that for the BLIND option, then RMB will blind 
  1041. the specified sector(s) from only those sectors located where the two 
  1042. distances overlap.  For example, if you use
  1043.  
  1044. INV BLIND 4 1
  1045. BLIND 2 1
  1046.  
  1047. RMB interprets this to mean "make sector 1 blind to only those sectors which 
  1048. are closer than 4 but further away than 2".  Note that this is a specific 
  1049. exception to the general rules about the combination of options which are set 
  1050. out in the next section.
  1051.  
  1052. An easier way of making the same would be to use the BAND option 
  1053. (BAND BLIND 2 4 <Sector list>).
  1054.  
  1055. In cases where BLIND and INV BLIND options affect the same sector and the INV 
  1056. BLIND distance is the smaller of the two, standard combination rules apply:
  1057.  
  1058. INV BLIND 2 1
  1059. BLIND 4 1
  1060.  
  1061. will be interpreted as "make sector 1 blind to sectors closer than 2 and to 
  1062. sectors further away than 4".  Here, each option is applied just as would be 
  1063. expected. The same thing can again be achieved by 
  1064.  
  1065. INV BAND BLIND 2 4 <Sector list>
  1066.  
  1067.  
  1068. =================================================================
  1069. BLOCK           Syntax: Block <Line no> <Line no> 
  1070. =================================================================
  1071.  
  1072. This option sets a block to any los-calculation that attempts to pass through 
  1073. *both* of the specified <Line no>'s.  The ability to set such blocks is 
  1074. provided to compensate for RMB's over-cautious treatment of vertical 
  1075. differences between sectors (remember that it ignores height changes in its 
  1076. own los-calculations).  Recall our earlier lift shaft?  With the lift in the 
  1077. 'down' position, it looks like this (in side view):
  1078.  
  1079.                 4      5 
  1080.              |------|------|        Plain numbers identify
  1081.              |         o   |        sectors;
  1082.              |         -\  | 
  1083.              |          /\ |        Sector 4 is a lift in
  1084.              |      |------|        the 'down' position.
  1085.              |      |   ^ 
  1086.              |      |   |
  1087.        1       2      3  |      |   example player
  1088.     |------|------|------|      |   position
  1089.     |                           |
  1090.     |                           |
  1091.     |                           |
  1092.     |------|------|------|------|
  1093.       #0     #1     #2     #3      <- These numbers identify 2-s 
  1094. LINEDEFs
  1095.  
  1096. Because of the relative floor and ceiling heights, sectors 1 and 2 cannot see 
  1097. sector 5 or vice versa.  RMB cannot work this out from the level map, however, 
  1098. which looks like this:
  1099.  
  1100.     o------o------o------o------o------o
  1101.     |      :      :      :      :      |
  1102.     |  1   :   2  :   3  :   4  :  5   |   where every sector appears to
  1103.     |     #0     #1     #2     #3      |   be able to see all others.
  1104.     |      :      :      :      :      |
  1105.     o------o------o------o------o------o
  1106.  
  1107. If you want RMB to know about this particular blocked line-of-sight, you'll 
  1108. need to tell it.  In this case, the block is between line #1 and line #3 (i.e. 
  1109. nothing to the left of #1 can see anything to the right of #3 and vice versa) 
  1110. and you would use the option
  1111.  
  1112.    BLOCK 1 3 
  1113.  
  1114. As already mentioned, hunting through your WADs for blocks such as this just 
  1115. to gain some playing speed is unlikely to pay off.  The BLOCK option is useful 
  1116. for chopping short particularly long lines of sight, such as those identified 
  1117. for you by the REPORT option (see below); or for handling those areas where 
  1118. you want to make absolutely sure (as in the example above) that monsters don't 
  1119. see more than is good for them (or good for you, at any rate!)  
  1120.  
  1121. [You may be interested to know that the Doom game engine does not seem to know 
  1122. too much about vertical blocks such as these either: if you'd like to see an 
  1123. example, check out the accompanying RMBTESTS.ZIP].
  1124.  
  1125. Obtain the <Line no> identification of the lines you wish to BLOCK from your 
  1126. WAD editor.
  1127.  
  1128. Note that for a BLOCK to be successfully specified with this option, both of 
  1129. the specified lines must be on inter-sector boundaries.  Internal lines, 
  1130. acting as triggers or monster-blockers, cannot be specified, as they occupy 
  1131. only one sector and the REJECT map only contains information about inter-
  1132. sector sight-lines.  If you need to set a block at a particular line within a 
  1133. sector, you will need to divide the sector into additional sectors using your 
  1134. WAD editor, before applying RMB.
  1135.  
  1136.  
  1137. =================================================================
  1138. DISTANCE        Syntax: DISTANCE <Map distance> 
  1139. =================================================================
  1140.  
  1141. The DISTANCE option allows you to set a limit on how far monsters can see 
  1142. generally, in the WAD you are processing: sectors further apart than the 
  1143. specified distance will not be able to see each other (subject to some 
  1144. conditions, set out below).  DISTANCE is similar in operation to the LENGTH 
  1145. option, but it takes a distance parameter specified in Doom map units, rather 
  1146. than sectors: this is usually the better way to limit the lines of sight.
  1147.  
  1148. The distance being specified is the maximum distance by which you want sectors 
  1149. in sight of each other to be separated.  It is important to realise, however, 
  1150. that RMB will not start to check on whether or not to apply any DISTANCE 
  1151. limitation until the sectors being examined are three or more sectors removed 
  1152. from each other, thus:
  1153.  
  1154.     o------o------o------o------o------o----------o--
  1155.     |      :      :      :      :      :          :
  1156.     |  1   :   2  :   3  :   4  :  5   :     6    :  7
  1157.     |      :      :      :      :      :          :
  1158.     o------o------o------o------o------o----------o--
  1159.        <------d4----->                d4 = distance between sector 1 & 4
  1160.        <----------d5-------->         d5 = distance between sector 1 & 5
  1161.        <--------------d6----------->     etc.
  1162.  
  1163. Here, sector 1 will be marked as seeing sectors 2 and 3 regardless of any 
  1164. DISTANCE option setting.  Along any sight-line from sector 1 (and there is 
  1165. only one here), subsequent sectors will be considered until the inter-sector 
  1166. distance (here d4, d5, d6 etc.) exceeds the value specified in the DISTANCE 
  1167. option.  Sectors within the distance are within sight, those further away are 
  1168. marked as being out of sight.  In the above example, if we take each dash (-) 
  1169. on the map to equate to 10 Doom map units, then the distances between sector 1 
  1170. and all of the other sectors shown are:
  1171.  
  1172.     d4:  140
  1173.     d5:  210
  1174.     d6:  280
  1175.     d7:  390    etc.
  1176.  
  1177. If the option 
  1178.  
  1179.   DISTANCE 300
  1180.  
  1181. was specified for this level, then sector 1 would be able to see all other 
  1182. sectors as far as sector 6.  Sector 7, however, would be too far away and 
  1183. consequently would be marked as out-of-sight.  A DISTANCE setting of 130 would 
  1184. prevent sector 1 from seeing as far as sector 4.  There is no setting of this 
  1185. option that you could use to prevent sector 1 from seeing sectors 2 or 3.
  1186.  
  1187. To gain some feel for how far any distance setting actually is, bear in mind 
  1188. that a normal door is 128 units wide.  Another good rule of thumb, which many 
  1189. designers use, is that one Doom (horizontal) unit equates to about 2cm in the 
  1190. real world.  A setting of
  1191.  
  1192.     DISTANCE 1000 
  1193.  
  1194. would therefore prevent monsters from seeing between any sectors that were 
  1195. more than (approx.) 20 (virtual) metres apart at their closest point (provided 
  1196. there were at least two sectors in between). 
  1197.  
  1198. Use this command to increase the efficiency of the REJECT map, by preventing 
  1199. monsters from seeing great distances.  Don't use it, of course, if you have 
  1200. areas of your WAD that rely for effect on monsters being able to see long 
  1201. distances: like in E2M3 of DOOM.WAD, for example.
  1202.  
  1203. Take care also not to confuse this option with LENGTH.
  1204.  
  1205.  
  1206. =================================================================
  1207. DOOR            Syntax: DOOR <Number> 
  1208. =================================================================
  1209.  
  1210. This option makes RMB attempt to recognise sectors which are doors and then 
  1211. adjust the REJECT table to prevent monsters from seeing through more than the 
  1212. specified <number> of doors at any one time.
  1213.  
  1214. The option is provided to allow an increase in the REJECT map efficiency by 
  1215. utilising the fact that it is usually hard for monsters to see through a long 
  1216. string of doors (more than 4 or 5, say) because they are unlikely ever to all 
  1217. be open at the same time.  Choose the value with care: 5 is usually safe; 3 
  1218. can be: you may have to experiment to find the best setting for your WAD.  
  1219. Remember that monsters can open some doors.  Remember too that during Death 
  1220. Match or Co-operative play there may be up to four players all capable of 
  1221. opening doors simultaneously.  (I didn't say it was likely, I merely said it 
  1222. could happen!)
  1223.  
  1224. Sectors are identified as doors by RMB if they have their floor and ceiling 
  1225. heights set to the same value.  If you have sectors set this way that you 
  1226. don't want RMB to treat as a door for the purposes of sight-line blocking 
  1227. (because it stays open, for example), you can use the NODOOR option (see 
  1228. below) to tell RMB which sectors to ignore.
  1229.  
  1230.  
  1231. =================================================================
  1232. EXCLUDE         Syntax: EXCLUDE <Sector list1> <Sector list2> 
  1233. =================================================================
  1234.  
  1235. This option allows you to specifically exclude particular inter-sector lines 
  1236. of sight.  Its action is to make it impossible for monsters in any of the 
  1237. sectors in <Sector list1> to see any of the sectors in <Sector list2>.  Note 
  1238. that EXCLUDE operates only in one direction (affecting just a single bit in the 
  1239. REJECT map for each sector pair) and that it overrides ALL other option 
  1240. settings for the specified sight-line. 
  1241.  
  1242. EXC can be used to make small adjustments after the wider application of other 
  1243. options, or to make minor modifications to a REJECT table.  It is particularly 
  1244. useful for setting small 'safe' areas within larger rooms. The option:
  1245.  
  1246.     EXCLUDE (1 2) (4 5)
  1247.  
  1248. will exclude all the LOS pairs: (1,4) (1,5) (2,4) and (2,5).
  1249.  
  1250. =================================================================
  1251. GROUP           Syntax: GROUP <Sector> <Sector list>
  1252. =================================================================
  1253.  
  1254. The group option is used to make RMB consider multiple sectors as one.  When 
  1255. the following option is used:
  1256.  
  1257.     GROUP 5 (2 4 7)
  1258.  
  1259. sectors 2, 4, 5 and 7 will be considered by RMB to be one big sector.  This 
  1260. will speed up RMB, as it now only needs to process one sector in the place of 
  1261. four!  The only disadvantage is that the efficiency of the generated REJECT map 
  1262. might drop.  If, for instance, in the above example only sector 4 is able to 
  1263. see sector 6, this will be copied, resulting in sectors 5, 2 and 7 having a 
  1264. zero in the REJECT map at position 6, too.  Thus, the number of bits set will 
  1265. drop by three.  Provided only neighbouring sectors are grouped, this loss of 
  1266. efficiency should be very small. Whether you notice this or not in the final 
  1267. WAD will obviously depend upon the number and distribution of monsters and the 
  1268. layout of sectors.
  1269.  
  1270. Once sectors have been GROUPed using this option, they will be treated as one 
  1271. sector for all of RMB's processing. Options cannot be applied to individual 
  1272. members of the group, with the exception of the INCLUDE and EXCLUDE options.
  1273.  
  1274. If you want to apply special effects to the group as a whole, you must refer to 
  1275. the single sector into which you have grouped all of the others. This is the 
  1276. number specified in the single <Sector> parameter: 5, in the example above.
  1277.  
  1278. This can be used when you want multiple sectors to be able to see exactly the 
  1279. same things.  If for instance sectors 2, 4, 5 and 7 are ambush spots, and you 
  1280. want the monsters in these sectors to wake up when the player enters sector 10, 
  1281. you can give the following options:
  1282.  
  1283.     GROUP 5 (2 4 7)
  1284.     BLIND 0 (5)
  1285.     INCLUDE 5 10
  1286.  
  1287. This will do the trick: the only thing seen from sectors 2, 4, 5 and 7 now will 
  1288. be sector 10. As a further example of the processing of grouped sectors, 
  1289. consider the following options:
  1290.  
  1291.     GROUP 5 (2 4 7)
  1292.     BLIND 1 (5)
  1293.  
  1294. Here BLIND 1 means that the grouped sector 5 will be able to see itself, but 
  1295. what does that mean?  It means that all the sectors in the group: i.e. sector 2 
  1296. can see sectors 2, 4, 5 and 7. 
  1297.  
  1298.  
  1299. =================================================================
  1300. INCLUDE         Syntax: INCLUDE <Sector list> <Sector list> 
  1301. =================================================================
  1302.  
  1303. This option allows you to force particular sight-lines to be examined by the 
  1304. game engine at game-time.  It marks it as feasible for monsters in the first 
  1305. <Sector list> to see a player in any of the second <Sector list>, no matter 
  1306. what all the other options say.  INCLUDE overrides all other options except 
  1307. EXCLUDE.  The option:
  1308.  
  1309.     INCLUDE (1 2) (5 6)
  1310.  
  1311. Will include the following LOS in the REJECT map: (1,2) (1,5) (2,5) and (2,6).
  1312.  
  1313. It can be used to make special effects like this:  
  1314.  
  1315. Blind a sector completely with BLIND 0. Put a lot of monsters in it, then make 
  1316. a platform in sight of the blinded sector.  Use the INC option to make the 
  1317. monsters able to see the platform and nothing else.  If it is difficult for 
  1318. the player to see from the platform to the blinded sector, the player will be 
  1319. surprised when he is suddenly attacked... 
  1320.  
  1321. "I stepped onto the platform and took the key. There was no sound of doors 
  1322. opening, so I was home free... suddenly, the room was flying with fireballs. 
  1323. Where the <censored> did those imps come from?" 
  1324.  
  1325. =================================================================
  1326. INVERT BAND     Syntax: INVERT BAND BLIND <From> <To> <Sector list>
  1327. ==============          INVERT BAND SAFE <From> <To> <Sector list>
  1328.  
  1329. See the BAND option for details of the INVERT BAND option.
  1330.  
  1331.  
  1332. =================================================================
  1333. INVERT BLIND/SAFE  Syntax: INV BLIND <Distance> <Sector list> 
  1334. ==============             INV SAFE <Distance> <Sector list> 
  1335.  
  1336. See BLIND and SAFE for details of the INVERT option.
  1337.  
  1338.  
  1339. =================================================================
  1340. LEFT            Syntax: LEFT <Line no> 
  1341. =================================================================
  1342.  
  1343. This option makes a two-sided LINEDEF, specified through its <Line no>, into a 
  1344. line through which monsters can only see from its left side.  This option is 
  1345. useful if you have a wall (or curtain) that has a solid texture on one side 
  1346. but not on the other and you want monsters to respond logically to it.  
  1347. (Normally, monsters can see through all 2-sided LINEDEFs, irrespective of 
  1348. their textures.)
  1349.  
  1350. Note that for this option to be applied successfully, the specified line must 
  1351. be on an inter-sector boundary.  Internal lines cannot be specified: if you 
  1352. need to apply this type of block to a particular line within a sector, you 
  1353. will need to divide the sector into additional sectors along this line using 
  1354. your WAD editor, before applying RMB.
  1355.  
  1356.  
  1357. =================================================================
  1358. LENGTH          Syntax: LENGTH <Distance> 
  1359. =================================================================
  1360.  
  1361. The LENGTH option allows you to set a limit on how far (in terms of sectors) 
  1362. monsters can see generally: sectors further apart than the specified distance 
  1363. will not be able to see each other.  The <Distance> limit is the number of 2-
  1364. sided LINEDEFs through which monsters can see.
  1365.  
  1366. Use this command to increase the efficiency of the REJECT map by preventing 
  1367. monsters from seeing too many sectors ahead.  Use it with care, however.  A 
  1368. setting of 20 is often safe: any lower may make monsters behave strangely - if 
  1369. you want your monsters to be able to see from the top to the bottom of a 
  1370. flight of stairs, for instance, you must allow sufficient sectors in the 
  1371. LENGTH option to cover the entire staircase.  For most WADs, the DISTANCE 
  1372. option gives better (more realistic) results.
  1373.  
  1374.  
  1375. =================================================================
  1376. LINE            Syntax: LINE <Line no> 
  1377. =================================================================
  1378.  
  1379. This option makes it impossible for monsters to see through a 2-sided line at 
  1380. all.  This is useful if you have such a line with texture on both sides, so 
  1381. that the player can't see through it.  Normally monsters can see through *any* 
  1382. 2-sided line: with this option you can prevent them from doing so. 
  1383.  
  1384. Note that for this option to be applied successfully, the specified line must 
  1385. be on an inter-sector boundary.  Internal lines cannot be specified: if you 
  1386. need to apply this type of block to a particular line within a sector, you 
  1387. will need to use your WAD editor to divide the sector into additional sectors 
  1388. along this line, before applying RMB.
  1389.  
  1390.  
  1391. =================================================================
  1392. NODOOR         Syntax: NODOOR <Sector list>
  1393. =================================================================
  1394.  
  1395. This option allows you to specify which sectors should not be considered to be 
  1396. doors, when processing the DOOR option.  (See DOOR for details.)  Obviously, 
  1397. there is only any point specifying sectors that could be mistaken for doors 
  1398. (by virtue of them having their floor and ceiling at the same height).
  1399.  
  1400. RMB does not consider doors unless the DOOR option is used, so the NODOOR 
  1401. option does nothing unless a DOOR option is in effect. 
  1402.  
  1403.  
  1404. =================================================================
  1405. NOMAP          Syntax: NOMAP
  1406. =================================================================
  1407.  
  1408. This option instructs RMB not to display the graphical view of the level being 
  1409. processed.  Instead, the number of the sector being processed is shown, 
  1410. followed by a dot as each sector adjacent to the current sector is processed.  
  1411. In effect, a new dot is printed each time a line would have changed to yellow 
  1412. on the map display. 
  1413.  
  1414. It takes *exactly* the same time to process a wad in the graphics mode as it 
  1415. takes in the text mode. 
  1416.  
  1417. When NOMAP is used you can start the program without being in the same 
  1418. directory as RMB. 
  1419.  
  1420.  
  1421. =================================================================
  1422. NOPROCESS      Syntax: NOPROCESS [<Wadfile> [<Level id>]]
  1423. =================================================================
  1424.  
  1425. The NOPROCESS option allows you to add just a few special effects to your WAD's 
  1426. REJECT map, without having to wait for RMB to complete all other line-of-sight 
  1427. calculations. You can use this option if you only want to add special effects 
  1428. and are not interested in optimising the REJECT, or if you want to add some 
  1429. more effects to a WAD that has already been optimised.
  1430.  
  1431. If you specify NOPROCESS, the only other options that will have any effect are:
  1432.  
  1433.     INCLUDE, EXCLUDE, BLIND 0/1, SAFE 0/1 and GROUP
  1434.  
  1435. The NOPROCESS options is provided for reasons of speed. If all you want to do 
  1436. is to add a few simple special effects, and you don't want to optimise the 
  1437. REJECT structure NOPROCESS will do the job for you.
  1438.  
  1439. If NOPROCESS is used with no arguments, your source WADfile's current
  1440.  
  1441.   REJECT map is loaded as the starting basis of the remaining option
  1442. processing.
  1443.  
  1444.  
  1445.  
  1446. If you specify a <WADfile> for this option, the starting REJECT will be read 
  1447. from this file, rather than your source WAD. It makes no sense at all to load a 
  1448. REJECT map from a WAD that is not related to your source WAD, of course. If the 
  1449. REJECT map in the specified file is not of the correct size, this option will 
  1450. be ignored and the whole WAD processed from scratch.
  1451.  
  1452. RMB works much faster with the NOPROCESS option turned on.  The only problem is 
  1453. that the REJECT map will not be optimised in any way.  The only thing that 
  1454. happens is that the special effects will be added.  If you have just built the 
  1455. REJECT map and you find that you need just one more INCLUDE for your special 
  1456. effect to work, specifying NOPROCESS might be the thing to do!
  1457.  
  1458. If you are working with a (big!) WAD and want to use RMB every time you have 
  1459. made changes, you could make a batch file like this:
  1460.  
  1461.    EDITOR thefile.WAD   
  1462.    RMB thefile.WAD tmp.wad
  1463.    DOOM -file tmp.wad
  1464.  
  1465. Maybe you would also like to run a nodebuilder, in which case you just run it 
  1466. before RMB. (Some nodebuilders destroy the REJECT map). In your option file you 
  1467. can now specify:
  1468.  
  1469.    NOPROCESS tmp.wad
  1470.  
  1471. This means that the REJECT map previously built and saved in tmp.wad will be 
  1472. loaded and used to apply RMB's special effects quickly.  It is a little 
  1473. dangerous to use this scheme, as RMB will not be able to detect a change in the 
  1474. WAD, if the number of sectors hasn't changed.  If you have moved some lines 
  1475. around changing the sector pairs that can see each other, maybe you should 
  1476. rebuild the REJECT map.  Rebuilding can easily be achieved by deleting the 
  1477. 'tmp.wad' file, or by renaming it.  That would force RMB to rebuild from 
  1478. scratch the next time you run the batch file.
  1479.  
  1480. For multilevel WAD's you might need to provide the NOPROCESS option with the 
  1481. extra <level id> parameter.  For example if you are editing a doom 2 multilevel 
  1482. wad this might make sense:
  1483.  
  1484.    NOPROCESS tmp.wad MAP03
  1485.  
  1486.  
  1487. =================================================================
  1488. ONE            Syntax: ONE <Line #1> <Line #2> 
  1489. =================================================================
  1490.  
  1491. Whereas BLOCK blocks a line-of-sight both ways across two specified lines, the 
  1492. ONE option sets a block in one direction only: from <Line #1> to <Line #2>.  
  1493. This is useful in areas where you would ordinarily use a BLOCK option, but you 
  1494. know that there is already some other one-way block in operation (a RIGHT or 
  1495. LEFT, say) somewhere between the two BLOCK lines, making RMB's further 
  1496. blocking of both directions superfluous.  Reducing such extraneous operations 
  1497. will increase the speed of RMB's processing.
  1498.  
  1499. Note that for a block to be successfully specified with this option, both of 
  1500. the lines must be on inter-sector boundaries.  Internal lines, which act just 
  1501. as triggers and monster-blockers, cannot be specified: if you need to set a 
  1502. block at a particular line within a sector, you will need to use your WAD 
  1503. editor to divide the sector into additional sectors along that line, before 
  1504. applying RMB.
  1505.  
  1506.  
  1507. =================================================================
  1508. PERFECT        Syntax: PERFECT 
  1509. =================================================================
  1510.  
  1511. Ordinarily, RMB will treat all sectors that are totally enclosed within 
  1512. another sector as part of the enclosing sector (provided they have no 1-sided 
  1513. LINEDEFs).  In most WADs, this greatly cuts down the number of sectors that 
  1514. RMB needs to consider.  It also leads to a less than perfect REJECT map: use 
  1515. the PERFECT option to prevent RMB from taking this processing short-cut and 
  1516. make it consider all sector-to-sector sight-lines.  Be prepared for long 
  1517. processing times, however, if you have a large WAD.
  1518.  
  1519. Note that from v2.0 of RMB, all sectors referenced in a SAFE, BLIND, BLOCK, 
  1520. ONE, LEFT, RIGHT or PROCESS option will be processed, regardless of whether 
  1521. PERFECT has been specified or not.  However, sectors that are internal to the 
  1522. sectors referenced in the SAFE or BLIND options will not be treated separately 
  1523. from their enclosing sector, unless PERFECT has been specified or PROCESS has 
  1524. been used for these specific sectors.  If you don't use PERFECT or PROCESS, any 
  1525. sector specified as SAFE, say, will have all its internal sectors marked safe 
  1526. as well.  Don't be tempted to use PERFECT just to prevent the SAFE and BLIND 
  1527. options from working in this way over a small area, especially if you are 
  1528. processing a larger WAD.  You will add a large processing over-head to prevent 
  1529. only a small number of unwanted effects: it is better to identify the areas 
  1530. which will be treated incorrectly (to your way of thinking) and force their 
  1531. inclusion in RMB's processing with a PROCESS option (see below).  Using PERFECT 
  1532. on large WADs can add considerably to RMB's processing time for very little 
  1533. gain in REJECT efficiency.
  1534.  
  1535. You may find it beneficial to think in terms of rooms, rather than sectors 
  1536. when planning and applying your special effects: in the default mode of 
  1537. operation (i.e. without PERFECT) if you apply the SAFE option to a sector that 
  1538. encloses other sectors (a room), you will make all the 'decorational' sectors 
  1539. in that room safe too: this is usually what is wanted.  Consider this room, 
  1540. for example:
  1541.  
  1542.    ---o------------------------------------o--    Sector 12 is main room;
  1543.       :                                    :      v. low light levels
  1544.       :   o.......o       o.....o   o...o  :
  1545.       :   :       :       :     :   :   :  :      sectors 13, 14, 15 are
  1546.       :   :       :       :  14 :   : 7 :  :      platforms in the room
  1547.       :   :   13  :       o.....o   o...o  :      also at v. low light
  1548.       :   :       :   12                   :      levels;
  1549.   10  :   :       :       o.....o   o...o  : 11   
  1550.       :   o.......o       :     :   :   :  :      sectors 7, 8 are
  1551.       :                   :  15 :   : 8 :  :      areas brightly lit.
  1552.       :                   :     :   o...o  :
  1553.       o.....o             o.....o          :
  1554.       :  9  :                              :      sector 9 = high ledge
  1555.    ---o-----o------------------------------o---
  1556.  
  1557. You may decide that because the room is very dark, the player should not be 
  1558. seen there easily and you would like it to be safe from attack from monsters 
  1559. who aren't in it: in sectors 10 & 11, for instance, or off to the east and 
  1560. west, somewhere.  You would therefore use the option SAFE 1 12. Without 
  1561. PERFECT, the resulting REJECT table looks like this:
  1562.  
  1563.             PLAYER
  1564.        7   8   9  10  11  12  13  14  15     Note that all other bits in
  1565.     +-------------------------------------   the player sector columns
  1566.     7   |  0   0   0   0   0   0   0   0   0       7, 8, 12, 13, 14 & 15
  1567.  M  8   |  0   0   0   0   0   0   0   0   0            will be 1's.
  1568.  O  9   |  1   1   0   0   0   1   1   1   1  
  1569.  N 10   |  1   1   0   0   0   1   1   1   1  
  1570.  S 11   |  1   1   0   0   0   1   1   1   1  
  1571.  T 12   |  0   0   0   0   0   0   0   0   0  
  1572.  E 13   |  0   0   0   0   0   0   0   0   0  
  1573.  R 14   |  0   0   0   0   0   0   0   0   0  
  1574.    15   |  0   0   0   0   0   0   0   0   0  
  1575.  
  1576. You should be able to see that this makes all sectors inside sector 12 (as 
  1577. well as sector 12 itself) safe from attack from monsters outside the room.  
  1578. [Note that the platform, sector 9, has not been included in the room here: it 
  1579. has a 1-sided LINEDEF, as well as a connection with another sector and 
  1580. therefore is not an enclosed sector.]  Within the 'room' (i.e. the main sector 
  1581. and all its enclosed sectors), though, monsters can see everything.  
  1582.  
  1583. If the PERFECT option had been specified, on the other hand, the REJECT map 
  1584. would have looked like this:-
  1585.  
  1586.             PLAYER
  1587.        7   8   9  10  11  12  13  14  15
  1588.     +-------------------------------------
  1589.     7   |  0   0   0   0   0   1   0   0   0    Note: all other bits in
  1590.  M  8   |  0   0   0   0   0   1   0   0   0     player sector 12 will
  1591.  O  9   |  0   0   0   0   0   1   0   0   0           be 1's.
  1592.  N 10   |  0   0   0   0   0   1   0   0   0  
  1593.  S 11   |  0   0   0   0   0   1   0   0   0  
  1594.  T 12   |  0   0   0   0   0   0   0   0   0  
  1595.  E 13   |  0   0   0   0   0   1   0   0   0  
  1596.  R 14   |  0   0   0   0   0   1   0   0   0  
  1597.    15   |  0   0   0   0   0   1   0   0   0  
  1598.  
  1599. Notice that here none of the enclosed sectors act as part of the larger 'room' 
  1600. any more: no longer are they safe (from anything, anywhere) and monsters in 
  1601. them will behave oddly, in that they can no longer fire into the main sector.
  1602.  
  1603. By and large, you will usually find that the default operation of RMB (i.e. 
  1604. without PERFECT) will give more 'desirable' handling of the SAFE and BLIND 
  1605. special effects.
  1606.  
  1607. If you then want certain enclosed areas not to inherit the general level of 
  1608. safety of the overall room, use a PROCESS option to prevent it. (See below)
  1609.  
  1610.  
  1611. =================================================================
  1612. PREPROCESS     Syntax: PREPROCESS <number>
  1613. =================================================================
  1614.  
  1615. If you think RMB is slow, PREPROCESS is the option for you.  PREPROCESS will 
  1616. group neighbouring sectors almost at random.  The number you specify is the 
  1617. maximum number of sectors you want in one such group.  The reason for grouping 
  1618. sectors is to gain processing speed. A setting of 
  1619.  
  1620.    PREPROCESS 2
  1621.  
  1622. means that RMB only needs to process half as many sectors.  When there is no 
  1623. option file found, RMB applies a default preprocessing with 4 sectors in every 
  1624. group.  This causes RMB v 2.1 to become a lot faster than v 2.0, as this type 
  1625. of preprocessing was not performed by version 2.0.  Naturally grouping like 
  1626. this can cause some troubles for your special effects, so the default 
  1627. preprocessing is disabled when an option file is detected and it is left up to 
  1628. you to decide if it's safe to PREPROCESS.  It is always safe to use 
  1629. PREPROCESSing when you don't use any options with a length (by sector) 
  1630. parameter above 1.  This means that 
  1631.  
  1632.     BLIND 1 (2 3)
  1633.  
  1634. is OK to use together with PREPROCESS, but
  1635.  
  1636.     SAFE 2 (2 3)
  1637.  
  1638. isn't (because 2 is used as a length by sector parameter).
  1639.  
  1640. Note that the options LENGTH, SAFE and BLIND are the ones that specify los-lengths by sector. You need to use 
  1641. PREPROCESS with care in conjunction with these options.
  1642.  
  1643.  
  1644. =================================================================
  1645. PROCESS        Syntax: PROCESS <Sector list>
  1646. =================================================================
  1647.  
  1648. This option forces RMB to process fully the sectors specified in the <Sector 
  1649. list>, regardless of whether they happen to be contained wholly within another 
  1650. sector or not.  The option is designed to force processing in areas where you 
  1651. are applying special effects, where you wish to prevent the grouping of 
  1652. enclosed sectors with their surrounding sector, or where you need rigorous 
  1653. optimisation of the REJECT map.  Naturally, its use is entirely superfluous if 
  1654. you also use the PERFECT option.
  1655.  
  1656. In the example room used to demonstrate the PERFECT option above, it would 
  1657. make sense for the player to come under fire from monsters outside the room if 
  1658. he stepped into the brightly lit areas (sectors 7 and 8), because he would now 
  1659. become more visible.  To achieve this, simply use PROCESS 7 8 in the options 
  1660. file: this will result in RMB processing these two sectors separately from the 
  1661. rest of the room.  In effect, the bit settings for sectors 7 & 8 shown in the 
  1662. second of the two REJECT maps (the PERFECT version) will be substituted for 
  1663. those shown in the earlier map, and the player will now be open to attack from 
  1664. all monsters while in the two brightly-lit areas of our room.  Of course, this 
  1665. will also mean that monsters in sectors 7 & 8 will now no longer be able to 
  1666. see into the main 'room' (because these sectors have no been processed as if 
  1667. they were separate from it).  If you don't think that monsters in these 
  1668. sectors will be dazzled by the extra light and would like them to be able to 
  1669. fire into the room, you'll need to use a couple of INC options to override 
  1670. this aspect of the PROCESS effect.
  1671.  
  1672.  
  1673. =================================================================
  1674. REPORT         Syntax: REPORT <Distance> 
  1675. =================================================================
  1676.  
  1677. If this option is used, a file with the same name as the WAD file but with the 
  1678. extension .RPT is generated.  After the execution of RMB, this file will 
  1679. contain a list of all sector pairs that are separated from each other by a 
  1680. distance in excess of that specified (measured in sectors) and are also in 
  1681. line of sight of each other.  This is useful for the identification of areas 
  1682. where sight-lines would seem to be excessively long.  In practice, such lines 
  1683. of sight are more than likely blocked by differences of floor and ceiling 
  1684. height, or by several doors.  The REPORT file will then help you identify 
  1685. suitable places to apply a BLOCK. 
  1686.  
  1687. Using a REPORT <distance> factor greater than any distance specified in a 
  1688. LENGTH option would be a waste of time, as RMB will already have applied a 
  1689. BLOCK itself.  It is often a good idea, though, to use REPORT and LENGTH 
  1690. together, with the same <distance> value.  A value around 20 is generally a 
  1691. good one to use (although see comments on LENGTH values, above.)
  1692.  
  1693.  
  1694. =================================================================
  1695. RIGHT          Syntax: RIGHT <Line no>
  1696. =================================================================
  1697.  
  1698. This option works exactly as LEFT, except that it allows monsters to see 
  1699. through the line from its right side only.  See LEFT for details.
  1700.  
  1701.  
  1702. =================================================================
  1703. SAFE           Syntax: SAFE <Distance> <Sector list>
  1704. =================================================================
  1705.  
  1706. This option operates much as the SAFE parameter in the EFFECT command, but 
  1707. with rather more flexible usage.  The <Distance> parameter allows you to 
  1708. specify how close (in sectors, of course) monsters must be in order to see 
  1709. into the specified sector(s).  Distance is reckoned exactly the same way as 
  1710. for the BLIND option: SAFE 0 indicates that a sector is only safe from within 
  1711. itself; SAFE 1 sets a sector that is unsighted from all of its neighbours but 
  1712. can be seen by monsters actually in the sector, and so on.
  1713.  
  1714. The SAFE option can be prefixed by the option INVERT as here:
  1715.  
  1716.      INVERT SAFE 1 (2 3 4)
  1717.  
  1718. This option allows you to specify sectors which are safe from the attention of 
  1719. monsters *within* the specified <distance> but which will still suffer attacks 
  1720. from monsters further away.  Because it is in the nature of monsters to always 
  1721. try to move closer to the player, this will have the effect that the monsters 
  1722. will disable themselves as they move closer to INVERT SAFE sector(s)! 
  1723.  
  1724. INV SAFE and SAFE can be combined to cover ranges of distances, in the same 
  1725. way as INV BLIND and BLIND:  see the BLIND option for more details.
  1726.  
  1727. =================================================================
  1728. TRACE          Syntax: TRACE <Sector list>
  1729. =================================================================
  1730.  
  1731. The use of this option is not recommended.  It is mainly used for debugging 
  1732. purposes, to see if RMB processes correctly.  TRACE only works when the graphic 
  1733. is enabled, and it displays the LOS being processed.  Every time the user 
  1734. presses a key, RMB takes another step in its processing.  This is very slow, so 
  1735. don't use it unless you are very interested in the way RMB works.  While 
  1736. tracing, the available memory is displayed in the top left corner (the number 
  1737. to the right of the three numbers).
  1738.  
  1739.  
  1740. 3.3 Combining Options
  1741. ---------------------
  1742. Most RMB options can be applied quite independently of other options.  It is 
  1743. possible, however, for conflicting options to be specified for individual 
  1744. sectors and it is important to understand how RMB resolves these conflicts.
  1745.  
  1746. In cases where an attempt is made to apply the same option to any particular 
  1747. sector in different ways, as here, for example:
  1748.  
  1749. SAFE 2 3
  1750. SAFE 0 3
  1751.  
  1752. it is only the last version that is applied.  In this example, the SAFE 2 3 
  1753. option is never used.  This is the only case where the order of options in an 
  1754. options file is significant.
  1755.  
  1756. Generally, if different options are applied to the same sector in such a way 
  1757. as to produce a conflict, both options will be applied fully with any los-
  1758. blocks created by one of the options preserved, whatever the other options 
  1759. say.  
  1760.  
  1761. In this example:
  1762.  
  1763. SAFE 1 3
  1764. BLIND 0 3
  1765.  
  1766. the BLIND option will blind sector 3 from itself despite the SAFE option 
  1767. implying that it shouldn't.  Reversing these two options in the options file 
  1768. would make no difference to the resulting REJECT map.
  1769.  
  1770. There are a number of specific exceptions to this general rule:
  1771.  
  1772. I.  the BLIND and INV BLIND options can be combined in a special way to 
  1773. produce 'bands' of blindness: this occurs when the distance parameter supplied 
  1774. to INV BLIND exceeds that supplied to BLIND.  See the description of the BLIND 
  1775. option for details.  From version 2.1 it is now possible to do the same thing 
  1776. with the BAND option, which is recommended.
  1777.  
  1778. II.  the SAFE and INV SAFE options can be combined in the same way as BLIND 
  1779. and INV BLIND: see the description of the SAFE option for details.
  1780.  
  1781. III.  the BAND SAFE option overrides any other SAFE option for the sector in 
  1782. question.  And BAND BLIND overrides any other BLIND option for the sector. But 
  1783. BLIND or SAFE can't override BAND BLIND/SAFE (respectively).
  1784.  
  1785. IV.  the INC option overrides all other options, except EXC.
  1786.  
  1787. Sometimes it is a good thing to be able to override options. If you have an 
  1788. option file for a multilevel WAD with a general part containing a few general 
  1789. options, you can override some of the general options in the specific level 
  1790. parts. Options that can be overridden are:
  1791.  
  1792. BAND, BLIND, DISTANCE, DOOR, LENGTH, NOPROCESS, PREPROCESS, REPORT, SAFE.
  1793.  
  1794. This means that if you apply
  1795.  
  1796. SAFE 0 (1 2 3)
  1797. SAFE 1 (3 4 5)
  1798.  
  1799. The safe parameter for sector 3 will be overridden, and sector 3 becomes SAFE 1
  1800.  
  1801. The BAND <SAFE/BLIND> option must NOT be used in conjunction with a 
  1802. <SAFE/BLIND> option for the same sector.  The following is illegal:
  1803.  
  1804. BAND BLIND 2 4 (3 5)
  1805. INV BLIND 0 (1 5)
  1806.  
  1807. Here a BLIND option is used twice for sector 5, which can cause surprising 
  1808. effects, as BLIND is not supposed to be combined with BAND BLIND for the same 
  1809. sector! (The same applies to SAFE).
  1810.  
  1811. BAND BLIND can, of course, be combined with SAFE and vice versa (as well as for 
  1812. the same sector)
  1813.  
  1814. 4. TROUBLESHOOTING
  1815. ======================================================
  1816.  
  1817. RMB won't run
  1818. -------------
  1819.  
  1820. Check that you have given the right path to the RMB.EXE, and that the file you 
  1821. are trying to process exists.  If RMB still doesn't run try to make an option 
  1822. file for your WAD, with only one option: NOMAP.  An option file like that will 
  1823. simplify the way RMB executes, and maybe it will run.
  1824.  
  1825. Also RMB might not run if your WAD has more than 1200 sectors. The precise 
  1826. upper bound before RMB get memory problems is unknown because WADs with more 
  1827. than 1000 sectors are rare.  If you suspect that RMB has memory problems try 
  1828. the TRACE <Sector list> option to see how much free memory is left.
  1829.  
  1830. RMB doesn't display the graphics
  1831. --------------------------------
  1832.  
  1833. This is normally because RMB can't find the .BGI files needed, or because the 
  1834. .BGI files doesn't work with your graphics card.  In the first case try to set 
  1835. the environment variable RMB:
  1836.  
  1837. set RMB=c:\RMBdir
  1838. (Or wherever you want to store the BGI files)
  1839.  
  1840. If RMB still won't display the graphics, you might as well make an option file 
  1841. with the NOMAP option in it, and get the ASCII output instead.
  1842.  
  1843. The troubleshooting section doesn't help me with my problem
  1844. -----------------------------------------------------------
  1845.  
  1846. Send me a mail! My internet address is: hykkelbj@daimi.aau.dk.
  1847. My snail mail address is:
  1848.  
  1849.     Jens Hykkelbjerg
  1850.     Haslehoejvej 5 b
  1851.     8210 AArhus V.
  1852.     Denmark (DK)
  1853.  
  1854. But who wants to waste money on snail mail?
  1855.  
  1856. 5. COPYRIGHT NOTICES, DISCLAIMER AND CONDITIONS OF USE
  1857. ======================================================
  1858. This program is copyright of its author, Jens Hykkelbjerg.  This documentation 
  1859. is copyright of its authors Jens Hykkelbjerg and Steve Benner.
  1860.  
  1861. Doom and Doom 2 are Id software products, and are not free of charge. 
  1862.  
  1863. The credit for any WADs mentioned in this text goes to the respective authors. 
  1864.  
  1865. This program and its documentation is supplied completely free of charge.  The 
  1866. program and its documentation may be freely distributed, providing that it is 
  1867. intact and has not been modified in any way.  The program, documentation or 
  1868. parts thereof may NOT be used for commercial purposes or financial gain or be 
  1869. included in commercial packages (including shareware releases).  You may not 
  1870. charge for handling or distributing this program, its documentation of any 
  1871. part thereof.
  1872.  
  1873. The author accepts no responsibility for ANYTHING that may happen as a result 
  1874. of using this software.  If your computer mutates into something large, pink 
  1875. and savage, that's your problem.
  1876.  
  1877.  
  1878. 6. AUTHORS' NOTES
  1879. =================
  1880. This software was written by Jens Hykkelbjerg:  email: hykkelbj@daimi.aau.dk
  1881.  
  1882. I am a 24 year-old student at the University in Aarhus, Denmark.   It was 
  1883. inspired by a discussion on the Doom-editing list (long may it run) and 
  1884. written entirely from scratch using Borland's Turbo Pascal 6.0.
  1885.  
  1886. I use DEU5.21 and IDBSP for my own WADs.  I recommend the use of a rule 
  1887. checker like the one in DEU5.21 before using this program!  
  1888. If you want to use the sector based special effects, you might want to find a 
  1889. node builder that doesn't renumber the sectors. IDBSP always renumbers
  1890. the sectors, but lots of node-builders like BSP doesn't.
  1891.  
  1892. The manual was written by Jens Hykkelbjerg and Steve Benner: email 
  1893. S.Benner@lancaster.ac.uk
  1894.  
  1895. Steve is a computer support officer for the Environmental Science Dept at 
  1896. Lancaster University, UK.  He has been playing computer simulations for more 
  1897. years than he likes to admit.  He uses WADED for his WADs but wouldn't want to 
  1898. start an argument over it!
  1899.  
  1900.  
  1901. 7. ACKNOWLEDGEMENTS
  1902. ===================
  1903. "The Unofficial Doom Specs" was a great help in the production of this 
  1904. program: without it, this program could never have been written. 
  1905.  
  1906. Thanks also to Steve Benner for mangling, mutilating and generally hacking 
  1907. this manual into its current form: if it's too long now, blame him.  Send any 
  1908. moans, grumbles or suggestions for improvement that you may have about the 
  1909. documentation to him: email: S.Benner@lancaster.ac.uk
  1910.  
  1911. ================================
  1912. Jens Hykkelbjerg / Steve Benner
  1913. 23 Feb 95
  1914.