home *** CD-ROM | disk | FTP | other *** search
/ Igromania 1999 February / 17_02_1999.iso / doom / ddbin065p.exe / docs / logs / changes.log
Text File  |  1998-12-22  |  100KB  |  2,089 lines

  1. Andy Baker's Log
  2.  
  3. DATE: 15/09/1998
  4.  
  5. One of major problems with having to break an engine in-order to fix it
  6. properly is that it can quite often turn into a long slog of a job, one
  7. of the major things that needed to be fixed were the saved games, which
  8. had to be altered on a large scale to handle the additional pointers
  9. that otherwise would be left undeclared and a definite crash hazard.
  10.  
  11. One of the many things that has been added to the program structures are
  12. linked-lists (attack types, current game objects (mobj_t) and so forth).
  13. The purpose was to make it easy to do a linear search, although the
  14. speed of a search is not the fastest possible.
  15.  
  16. One of the possible solutions for pointers is to declare them as NULL and
  17. get the game to assign values again: however the problem that exist that
  18. some pointers would be looked for would be found to be NULL and in some
  19. cases will crash the game (due to the fact that the number of safeguards
  20. in the code is designed to prevent crashes on a running game and assumes
  21. that the procedures are correctly handling pointers) also monsters would
  22. be asleep when the game is resumed, since they have no knowledge of targets
  23. etc; the cheat ability is not good, so this option was scrapped.
  24.  
  25. The second option and the one I have choosen to implement is to record the
  26. position in the linked-list of that type. Therefore the position of the
  27. target is the current mobj_t list is recorded and restored on loading the
  28. game. This works because the mobj_t list is stored in the save game using
  29. the same order as was present in the game on saving; the reconstruction
  30. order is the same as in the save game. The only flaw in this is that it
  31. assumes that the information lists (mobjinfo_t, attacktype_t etc..) are
  32. in the same order on loading as they were when saved, this is always
  33. correct if the procedures and files for DDF are the same. May be worth
  34. storing a checksum of the DDF Files within a savegame.
  35.  
  36. The new warp parameter is: -Warp <DDF-NAME-OF-MAP>
  37. Since currently only Doom II is functional thats usually MAPxx, so
  38. for map 05, you would use -WARP MAP05.
  39.  
  40. DATE: 13/09/1998
  41.  
  42. Added Fixed and Time Functions to the DDF reader, it is now possible to
  43. use both time & fixed-point numbers using numbers with a decimal point:
  44. all commands that need such numbers have been altered. This was something
  45. that needed to be added to the reader for some time: Since in order to
  46. function remotely, DOSDoom requires information in the form of these
  47. numbers.
  48.  
  49. Another minor change I made to the reader, was the that the file was read
  50. directly into memory and then examined as opposed to the reading and
  51. interpretation directly from the file.
  52.  
  53. Teleports no longer use a set effect object for the start and exit points
  54. of a teleporting thing. They can be now be defined in sceneryDDF and
  55. are indicated by the linedeftype. The linedeftype can specify the effect
  56. object at the position left (in) and the position reached (out). SFX
  57. cannot be specificed directly, based on the fact that the teleport effect
  58. creates the noise. This new system allows for slient teleporters, invisible
  59. effects that just produce noise and different teleport types: the hardest
  60. trouble I had implementing this the hash table search :).
  61.  
  62. Finished the final work on making the commands in linedef more friendly to
  63. the joe-dooming-public.
  64.  
  65. DATE: 11/09/1998
  66.  
  67. I probably not the best person to work with any type of graphics or the like
  68. and I very much tend not touch them with a barge pole, however I have been
  69. working with mobj->playxtra to test its effects when used with a DOSDoom
  70. defined creature. Originally Doom used to create alterate palettes
  71. (calculated at runtime) which were based on the base palette with the
  72. exception of altering 0x70->0x7f (Player Sprite Greens) to another group of
  73. colours: The original colours were GREY (called indigo), BROWN & RED; they
  74. were a form of re-indexing basically, so when a sprite was drawn and had
  75. the flags that setup GREY, BROWN or RED, they would use an the alternate
  76. palette instead of the base when the sprite was drawn - this translation
  77. (remapping) is done at DrawColumn level. Instead of using flags, JC's new
  78. 8 player support had to use 4 more colours and as opposed to using more
  79. flags, he choose to use a byte (playxtra) that held the number of the
  80. translation table (an alternate palette). John Cole had purposed that we
  81. use an indexing system (start palette colour, number of colours used) for
  82. remapping patches, other multiplayer related stuff and I suppose the player
  83. sprite-greens also. I originally implemented the indexing code into patches
  84. code (the menu-colour alterations in V0.64 for example) - this system had
  85. only one real flaw: To work properly the base palette had to be set out in
  86. 16 shades of one colour, 16 shades of another and so forth; continuing
  87. through the 256 colours (16 colours with 16 shades). Unfortunately the base
  88. palette was only organised in places like this, not all of it: this made
  89. any remapping limited, the problem was that to get any sharp contrasting
  90. colours, you would of had to remap spreading yourself through the palette.
  91. This disallowed I decent contrasting white shade and a few other colours!
  92.  
  93. Note: The translation patching in V0.64 remapped all colours into the 16
  94. indexed.
  95.  
  96. My solution is simple, have a pre-compiled remap lump that allows the maximum
  97. of 32 colours be re-indexed to create new translation tables. A table
  98. consists of 32 remaps, a remap consists of two bytes: the first held the
  99. number of the colour index to be replaced, the second held the colour index
  100. that would used in replacing. A single remap table would therefore take up
  101. only 64 bytes (although expansion to include remapping of the entire palette
  102. may be wise and would take up 512 bytes pre table). The wad entry lump that
  103. I have included to use this is called PALREMAP and consists of 21 remap
  104. tables:
  105.  
  106. 1)  Player Green -> Player Grey (Indigo?)
  107. 2)  Player Green -> Player Brown
  108. 3)  Player Green -> Player Dull Red
  109. 4)  Player Green -> Orange
  110. 5)  Player Green -> Light Grey
  111. 6)  Player Green -> Bright Red
  112. 7)  Player Green -> Pink
  113. 8)  Player Green -> Gold
  114. 9)  Player Green -> Blue
  115. 10) Player Green -> Dark Blue
  116. 11) Player Green -> Dark Green
  117. 12) Player Green -> Dark Red
  118. 13) Player Green -> Red Skin
  119. 14) Player Green -> Pale Skin
  120. 15) Player Green -> Grey
  121. 16) Text Colour Red -> White
  122. 17) Red Skin -> Pale Skin
  123. 18) Red Skin -> Grey Skin
  124. 19) Red Skin -> Blue Skin
  125. 20) Red Skin -> Green Skin
  126. 21) Red Skin -> Bright Red Skin
  127.  
  128. The player-green remaps are for multiplayer sprites, the Text Colour Red
  129. remap is used for the white text and the Red-Skin remaps are test remaps,
  130. the red-skin types are used for virtually ever doom creature for skin or
  131. blood (most notable are the Demon (whole body), the Baron (Torso) and the
  132. Chaaingunner (Clothing); to demo this remapping use the commandline
  133. parameter '-andymagic'): I'm sure a skilled artist could do a more impressive
  134. job of this.
  135.  
  136. Missing:
  137. Draw Translucent-Translated Column routine; This is something that is was
  138. never written from when the translucency code was added (before the team was
  139. created). The translucency is drawn, but none of the colour translation
  140. (remapping) is handled - NEEDED URGENTLY - would recommend C & ASM Versions;
  141. also I would recommend that someone ASM-codes the translucency code: those
  142. plasma firing games slow to a crawl.....
  143.  
  144. Worked on an idea for expanding the key selection that I put to Kester, with
  145. his recent developments on linedefs. It is now possible to list the keys
  146. you need for a door and the suggest if you need either one of the listed keys
  147. or require all of the listed keys (you can now give a list of keys in the
  148. linesDDF file). It is now possible to say "you must have the red skull, blue
  149. card & yellow skull" or "you need either a red skull or a blue skull". I also
  150. had to alter the status bar (st_stuff.c) to show a combination graphic for
  151. having both the keys & cards of a specific colour. (added STKEYS6 -> 8 to
  152. DOSDoom.WAD) I recommend someone looks into better gfx for these!
  153.  
  154. DATE: 09/09/1998
  155.  
  156. More minor bug fixing: 1) many WAD's like TeamTNT's Eternal WAD use an
  157. effect which causes a floor, a set of stairs or a door to make an
  158. instant movement, unfortunately this effect is a WAD Hack, as opposed to
  159. design feature. Kester's code had correctly assumed the movement direction
  160. required, but the movement speed being used was the default and was not the
  161. instant effect required by the WADs. Therefore the different default of -1
  162. was used, which now represents instant movement and can be applied to any
  163. linedef. The problem here was the WAD trick used, not the code: it was
  164. correct.
  165.  
  166. 2) I mixed up the teleport stomp code, if the thing stomping was a player
  167. and the currentmap flags had MPF_NOSTOMP set, then no stomp would take
  168. place; should of been if the thing stomping was not player...oops.
  169.  
  170. DATE: 07/09/1998
  171.  
  172. Bug-fixes: "Stuck-to-a-special-line" monster bug was detected and prompty
  173. swatted, the problem was that P_TryMove was testing the movement over
  174. special lines and returning false only when the object was referencing
  175. a line that it was on the back of, it wasn't taking into account that
  176. the linedef could not be activited by the object in question. The
  177. solution was to that the activate procedure would return true or false
  178. to the question, is it possible for the action to happen, this is then
  179. used as the the return value for P_TryMove if the object-in-question was
  180. on the front side of a special line.
  181.  
  182. "Changing sector ceiling/floor texture" bug, the problem was the movingPlane
  183. structure, it had a set definition for the texture - char tex[9] and due to
  184. use of void pointers, and error was not generated when an attempt at
  185. mallocing space for a string and giving it to tex; suffice to say that
  186. the string referencing was way off. fixed by changing tex[9]->*tex.
  187.  
  188. Fixed two compiler warnings in lu_sound.c & i_sound.c.
  189.  
  190. Formatting: I have a wierd tab setting which makes a lot of source files
  191. look odd. Its not unusual for me to go through the code and reformat code
  192. from:
  193.  
  194. if (onenumber == anothernumber) {
  195.         anothernumber = 0;
  196.         onenumber = 10;
  197. }
  198.  
  199. to:
  200.  
  201. if (onenumber == anothernumber)
  202. {
  203.   anothernumber = 0;
  204.   onenumber = 10;
  205. }
  206.  
  207. Its all spaces aswell, so no confusion arises...
  208.  
  209. DATE: 06/09/1998
  210.  
  211. Toyed with a few ideas, had a nice thought on a meandering state sequence
  212. and player supporting monsters, by midday I had all the imps ripping apart
  213. everything, but me on MAP18 of Doom II. Works very well. Will push it
  214. further and iron out any bugs; might be a useful extension to DDF.
  215.  
  216. Received an update from Kester and merged my bugfixs from two days ago and
  217. the current new ideas with the codebase. Worked fine, I made a point of
  218. flicking through the linedef pages to make sure it all worked and I
  219. understood it: also I did some cleaning up of the code in general I viewed
  220. so I could understand it myself!
  221.  
  222. Had to make a few modifications to the new mouse/joystick handling code. The
  223. Joystick code (in i_system.c) had a problem with joy_hat as a static int or
  224. anything for that matter, so I had to modify the code accordingly (everything
  225. names joy_hat became joy_ht); secondly, the two-stage turning (the first 6
  226. tics of turning are slow, the rest are done at the speed of the actual
  227. movement) was only designed to work with the Joystick and the keyboard, NOT
  228. the mouse. It makes playing with the mouse (as I do) very awkward: therefore
  229. I have added a two_stage turning option the analogue option menu. The menu
  230. has been renamed from mouseoptions -> analogueoptions.
  231.  
  232. It seems that a lot of the code had been written to make any movements by
  233. the analogue object (be it mouse or joystick) to be greatly reduced, this
  234. meant that the mouse movement was so low that it became unplayable therefore
  235. I have set up a slider for forward/slide/turning movement, that allows the
  236. user to select the best choice. I did remember that this was once one of the
  237. reasons I used to play Doom95 over Doom in DOS: the mouse sensitivity was
  238. better arranged in Doom95, with this new method it allows for proper
  239. config of the mouse for each user. A well-choosen set of defaults would not
  240. go a miss here either.
  241.  
  242. "The Transporters are off-line" bug; not a bug really, just an oversight,
  243. the teleport procedure in P_telept.C was looking for MT_TELEPORTMAN in
  244. every sector for its destination - oops, again - the type references are
  245. no longer relevant to any object created within the game, therefore no
  246. destination points were being found. I fixed the problem by using the mobj
  247. linked list to find an mobj (referencing the specials[]) in that sector,
  248. the other bug I found in the code was for some reason the distance of the fog
  249. from the teleporting object was 40*FRACUNIT, when it should be 20*FRACUNIT.
  250.  
  251. DATE: 04/09/1998
  252.  
  253. Fixed two irrating bugs I made with the P_ActShotAttack: first I was
  254. not setting the correct source angle, which meant that targeting wasn't
  255. happening. most notable on MAP29 of Doom II; where the chaingunner on the
  256. opposite ledge should hit the guys in front of you at the beginning of the
  257. level, however he spent most the time firing above our heads (the enemy and
  258. the player object). I made the mistake of subtituting (zero) for the object
  259. angle, oops. Error number 2: If the horzaccshift was zero that the
  260. objangles angle would be altered by (Random Number - Random Number)
  261. bit shifted left (<<) by horzaccshift - yes I should make sure I'm awake
  262. before coding. oops again. In my process of missing the object, I did solve
  263. the problem of bullets hitting the base of wall with a backsector that had
  264. a sky-hack ceiling.
  265.  
  266. Sorted the demo recording and playback. The problem was that the startskill
  267. was nor being stored at all, when you started. Not a good thing, sorted that.
  268. Also the demos now record the DDF Name of the level, so that its not limited
  269. by the gamemap/episode system...
  270.  
  271. Just a note: the top bugfix about when the bullets don't show up against a
  272. wall is a good example why demo support of V1.9 is not a good idea. Spawning
  273. smoke/puff from a wall uses P_Random(), immediately de-syncing any demo
  274. on the spot because the Random Number Generator is now out of sync. 
  275.  
  276. DATE: 05/08/1998 -> 29/08/1998
  277.  
  278. Remember to update often or you leave yourself a hell of Log to write and
  279. a lot to remember. During the last fortnight I have began to implement
  280. some more major parts of DDF: Creatures/levels/game-setup/languages. For
  281. Languages, lu_str.h & lu_str.c have been replaced by ddf_lang.c. This file
  282. uses an external file - an LDF (not a DDF) file - which holds the definitions
  283. for a language, when DOSDoom looks for a language definition it uses
  284. DDF_LanguageLookup(char *ref). The reference it gives is checked against the
  285. Language linked list and if the ref is found it will return a pointer to
  286. the string referenced itself.
  287.  
  288. In order to do this I had to add a string reading function to the DDF_Reader,
  289. as like all parsers it relys on characters to direct it, the string function
  290. uses the normal '"' action, that when one is found it reads every character
  291. for what it is: ignoring nothing, the only exception is that the DDF Parser
  292. will detect the '\n' sequence and substitute a carriage return: when another
  293. '"' is found the parser returns to normal operation.
  294.  
  295. An LDF is formatted like this:
  296. <DefinitionName>=<String>
  297.  
  298. so:
  299. MAP01Desc="MAP01: ENTRYWAY";
  300.  
  301. defines "MAP01Desc" as a reference for "MAP01: ENTRYWAY", which means
  302. that DDF_LanguageLookup("MAP01Desc") returns a pointer to "MAP01: ENTRYWAY"
  303. obviously. This is used when a DDF needs a string, for example: Items.ddf
  304. needs a message to display when an item is picked up, this entry is added
  305. to an item in items.ddf:
  306.  
  307. PICKUP_MESSAGE=GotMediKit;
  308.  
  309. would ref this in an LDF:
  310. GotMediKit="Picked up a medikit, hey!";
  311.  
  312. so that when this object was picked up it would ref "GotMediKit" in an LDF
  313. and for the example LDF "Picked up a medikit, hey!" would be printed.
  314.  
  315. I have implemented a linked list to replace to current set array for the
  316. mobjinfo table, with the removal of the type enum (soon to be effected). The
  317. number of mobjinfo types in now "limitless". There is a small table
  318. of (mobjinfo_t *specials[NUMMOBJSPEC]) pointers to the specials in the list
  319. that will be needed regardless of what other things are added.
  320.  
  321. The specials are: Player, Smoke, Blood, Puff, Teleport Fog, Respawn Fog and
  322. the teleport-end position.
  323.  
  324. This work has taken place now as it is a requirement that needs to be
  325. achieved for DDF, the handling of set down - thing related must be
  326. dealt with a reference to its info ref. 90% of this work was done on the 6th
  327. so if need to view the changes: look for -ACB- 1998/08/06 in the files
  328. P_Enemy.C, P_Map.C & Rad_Trig.C.
  329.  
  330. Implemented and setup the map structure; A map has the following attributes:
  331.  
  332. typedef struct mapstuff_s
  333. {
  334.   char *name;                    // DDF Name
  335.   char *description;             // Description (automap etc..)
  336.   char graphicname[9];           // Name used in Intermission
  337.   char lump[9];                  // lump name in the WAD
  338.   char sky[9];                   // graphic sky name
  339.   char music[9];                 // music name
  340.   char surround[9];              // flat used for the surround 
  341.   int flags;                     // flags (see below)
  342.   int partime;                   // par-time
  343.   struct intermis_s *interscr;   // intermission screen type
  344.   struct mapstuff_s *next;       // next in the maplist
  345.   struct mapstuff_s *nextlevel;  // next level to go
  346.   char *nextmapname;             // name of the next normal level
  347.   char *secretmapname;           // name of the secret level
  348. }
  349. mapstuff_t;
  350.  
  351. The pointer nextlevel is set when an exit is reached at the end of the
  352. currentmap: if the secret exit is used, the name is secretmapname is searched
  353. for (compared against each DDF name) and when a match is found, a pointer
  354. to it is passed to nextlevel, the nextmapname is used in the same fashion
  355. when the level is exited normally.
  356.  
  357. Map Handling FLAGS:
  358. Each map has a set of flags, with the id levels only MPF_NOSTOMP is set
  359. (with the exception of Map30 of DoomII/TNT/Plutonia, because monsters
  360. can stomp you). For new levels, designers have the option to disable such
  361. features that effect gameplay or force others. A purist can disable all
  362. the new features: these flags override the gameplay menu; if a designer
  363. forces a setting, the option menu will not change it.
  364.  
  365. typedef enum
  366. {
  367.   MPF_NOJUMPING   = 1,             // Disable Jumping
  368.   MPF_NOMLOOK     = 2,             // Disable Freelook
  369.   MPF_NOTRANSLUC  = 4,             // Disable Translucency
  370.   MPF_NOCHEATS    = 8,             // Disable Cheats
  371.   MPF_ITEMRESPAWN = 16,            // Force Item Respawn
  372.   MPF_NOITEMRESPN = 32,            // Disable Item Respawn
  373.   MPF_FAST        = 64,            // Force Fast Monsters
  374.   MPF_RESMONSTER  = 128,           // Force Resurrect Monsters
  375.   MPF_TELMONSTER  = 256,           // Force Teleport Monsters
  376.   MPF_STRETCHSKY  = 512,           // Force Stretch Sky
  377.   MPF_NORMALSKY   = 1024,          // Force Normal Sky
  378.   MPF_NOTRUE3D    = 2048,          // Disable True 3D Gameplay
  379.   MPF_NOSTOMP     = 4096,          // Monsters cannot stomp players
  380.   MPF_NORMBLOOD   = 8192           // Use Normal Blood activity
  381. }
  382. mapsettings_t;
  383.  
  384. ATTACKS...
  385. I have finished through the creature.ddf/attacks.ddf files, which handle the
  386. movement/actions of the other moving objects in DOSDoom. Formally in a attack
  387. frame, the procedure called was specific: an A_* procedure. All new
  388. DDF code is P_Act*.* and is used within P_Action.C. The difference between
  389. the original code and DDF handling is that you setup a ranged attack and/or
  390. close combat attack and called a procedure during a state that calls the
  391. individual attack or make a choice between each one. Normally, the object
  392. would use a very specific routine, i.e for a baron-of-hell it would fire
  393. the item enumed MT_BRUISERSHOT which did a damage in the range of 1-to-8 and
  394. multiplied by a number (depending on the missile itself), 8 for our example.
  395. The only thing that defined what the objects attack was the very specific
  396. attack routines used by the object states, Unfortunately this wasn't very
  397. useful for defining and handling of attacks. Instead we have a new attack
  398. structure that defines an attack and represents the choosen form of
  399. aggression by an object:
  400.  
  401. typedef struct attacktype_s
  402. {
  403.   char *name;                    // Attack name (referencing)
  404.   int attackstyle;               // Attackstyle
  405.   int initsound;                 // Initialisation Sound
  406.   int sound;                     // Misc Sound
  407.   int accuracy;                  // Accuracy of the attack
  408.   int xoffset;                   // X-offset relative to the obj (proj only)
  409.   int yoffset;                   // Y-offset relative to the obj (proj only)
  410.   int height;                    // Height from the floor (proj only)
  411.   int range;                     // Maximum range of the assault
  412.   int speed;                     // Speed (Launch-self assault only)
  413.   int flags;                     // Flags
  414.   int count;                     // Count (Shot attacks, multiple blasts)
  415.   int tooclose;                  // If less than, close to target for attack
  416.   int damage;                    // Set Damage Value
  417.   int damagerange;               // Damage Range (Doom Damage Calc)
  418.   int damagemulti;               // Damage Multiplier (Doom Damage Calc)
  419.   int objinitstate;              // Spawned object initial state
  420.   int notracechance;             // Chance of no tracing (Tracers only)
  421.   struct mobjinfo_s *projectile; // Object to create
  422.   struct attacktype_s *next;     // Next in the list of attacks.
  423. }
  424. attacktype_t;
  425.  
  426. Attack->Name:
  427. ^^^^^^^^^^^^^
  428. Used for descriptive and reference purposes, stores the name given to it by the
  429. user (in attacks.ddf) and is referenced by the creatures in creatures.ddf.
  430.  
  431. Attack->Attackstyle:
  432. ^^^^^^^^^^^^^^^^^^^^
  433. An attackstyle can be any of the following:
  434.  
  435. typedef enum
  436. {
  437.   ATK_PROJECTILE,    // Projectile: some sort of flying object
  438.   ATK_SPAWNER,       // Spawner: Spawns a defined object in targets direction
  439.   ATK_TRIPLESPAWNER, // Spawner: Spawns a defined object in three directions
  440.   ATK_SPREADER,      // Spreader: shoots projectiles in a spread (fixed)
  441.   ATK_RANDOMSPREAD,  // Spreader: shoots projectiles in a spread (random)
  442.   ATK_SHOT,          // Shot: Pellet Warfare, traces line to target
  443.   ATK_TRACKER,       // Tracker: Launch an attack that follows
  444.   ATK_CLOSECOMBAT,   // Close-combat: do damage direct
  445.   ATK_SKULLFLY,      // Launch Self: Attack using self as the missile
  446.   NUMATKCLASS
  447. }
  448. attackstyle_t;
  449.  
  450. ATK_PROJECTILE: Launchs an attack at the object's target; Uses the
  451.                 attack->height, attack->xoffset & attack->yoffset to
  452.                 define where the projectile starts from. The positions
  453.                 are relative to the object firing, the height is got
  454.                 from object->z + attack->height. A minus xoffset gives
  455.                 a position to the left of the object, a positive one
  456.                 gives a position to the right of the object. A minus
  457.                 yoffset gives a position behind the object, a positive
  458.                 one in front of an object. Normally both xoffset and
  459.                 yoffset are 0. Note: if there is a blocking line
  460.                 between the object and the projectile pos, it will not
  461.                 be fired.
  462.  
  463. ATK_SPAWNER: Launches a spawned object towards its target and the new
  464.              object's initial state is held in attack->objinitstate. This
  465.              can be used to a good advantage: the pain elemental uses the
  466.              second attack frame of a lost soul to make sure it hurtles
  467.              towards the target when it is spawned.
  468.  
  469. ATK_TRIPLESPAWNER: Same as above, but spawns an object behind, to the left
  470.                    and to the right of the attacker; this was purely
  471.                    designed for the spawning of the lost souls upon death
  472.                    of a pain elemental. However It can be put to an
  473.                    inventive use me thinks.
  474.  
  475. ATK_SPREADER: A Spreader is an project that is aimed at its target and then
  476.               the angle is then offset. The purpose of this is to counter
  477.               balance the movement of the object's target. The Doom user of
  478.               this is the Mancubus. The goes through a fixed cycle:
  479.                 1) Object angle is altered by 11.25 degrees.
  480.                 2) Projectile angle is altered by 11.25 degrees.
  481.                 3) Object angle is altered by -11.25 degrees.
  482.                 4) Projectile angle is altered by 22.5 degrees.
  483.                 5) Projectile angle is altered by -5.625 degrees.
  484.                 6) Projectile angle is altered by 5.625 degrees.
  485.  
  486.               The action RESET_SPREADER (P_ActResetSpreadCount) resets the
  487.               order to 1 should it be required.
  488.  
  489. ATK_RANDOMSPREADER: Same as the above, except that the projectile only is
  490.                     altered by an angle offset that is the numeric value for
  491.                     90 degrees divided by a "random-number" between 1 and 64.
  492.                     More unpredictable this is.
  493.  
  494. ATK_SHOT: Bullet warfare; This is the attack that covers shotting with
  495.           pistols, shotguns & chainguns etc. How it works is by tracing a
  496.           path from the source and following it until it hits a wall or
  497.           another object. If it is a thing the relevant damage is done and
  498.           the relevant effect takes place (blood or smoke depending on the
  499.           thing), if it hits a wall, floor or ceiling, then smoke is
  500.           generated. The ACCURACY setting is something that comes into play
  501.           here: multiple firing objects cannot be accurate or they would do
  502.           some serious damage, so making the shots less then accurate
  503.           simulates reality as any machine gun will not have the accuracy of
  504.           a sniper rifle.
  505.  
  506. ATK_TRACKER: Spawns the attack->projectile at the position of the target,
  507.              what happens next is dependent on both the projectile and
  508.              the attacker. This attack was designed upon the Arch-Vile
  509.              attack. To emulate the arch-vile attack, the tracker
  510.              (attack->projectile) would use the TRACKER_FOLLOW actions
  511.              where it would follow its assigned target if it the attacker
  512.              can see its target, thats all the tracker will do. The action
  513.              now happens where the attacker uses EFFECT_TRACKER: This
  514.              basically causes the explosion damage; If the tracker for one
  515.              reason or another does not exist, the explosion damage is not
  516.              done, but the basic damage is done. The explosion damage is
  517.              obviously done if the tracker still exists. Although this
  518.              is the primary purpose of the tracker, it can be used to
  519.              spawn an explosion at the target area. In true you can spawn
  520.              any projectile at its target.
  521.  
  522. ATK_CLOSECOMBAT: Does calculated damage to the attackers target if the
  523.                  attacker is within meleerange of it's target. Nice
  524.                  and simple. 
  525.  
  526. ATK_SKULLFLY: Launchs its self at speed towards its target and does damage
  527.               on collision. This is called SKULLFLY because it is the
  528.               attack used by the lost-soul.
  529.  
  530. Attack->initsound:
  531. ^^^^^^^^^^^^^^^^^^
  532. This is the SFX number used when an attack is being attempted, it is called
  533. automatically using (P_ActSkullAttack - ATK_SKULLFLY) or can be called using
  534. actions CLOSEATTEMPTSND (P_ActMakeCloseAttemptSound) & RANGEATTEMPTSND
  535. (P_ActMakeRangeAttemptSound).
  536.  
  537. Attack->sound:
  538. ^^^^^^^^^^^^^^
  539. SFX Number referenced when an attack takes place. This is different for
  540. each attack:
  541.  
  542.  ATK_CLOSECOMBAT - Sound made when closecombat damage is done.
  543.  ATK_SHOT        - Sound made when attack is made.
  544.  ATK_SKULLFLY    - Sound made when attacker hits target.
  545.  ATK_TRACKER     - Sound made when tracker is put into effect.
  546.  
  547.  ATK_SPREADER       }
  548.  ATK_RANDOMSPREADER }- Sound made when projectile is launched.
  549.  ATK_PROJECTILE     }
  550.  
  551.  ATK_SPAWNER / ATK_TRIPLESPAWNER - Sound made when object is spawned.
  552.  
  553. Attack->accuracy
  554. ^^^^^^^^^^^^^^^^
  555. Accuracy level, if zero the shot is perfect, otherwise it performs an
  556. random offset bitshifted varied by the accuracy level. This effects
  557. the angle of the attack. 
  558.  
  559. To be completed.....
  560.  
  561.  
  562. DATE: 04/08/1998
  563.  
  564. Added source (struct mobj_s*) to the mobj_t: it is clear trying to make
  565. any sense of the procedures was difficult with confusing references. For
  566. example: the spawn missile procedure places the source of the procedure in
  567. mobj->target, its makes things worse when tracers (revenant missiles) &
  568. fires have to know their targets. The original id solution was to add a
  569. new struct mobj_s* tracer to hold it - suffice to say it was bloody confusing
  570. when reading the code through, the new suitation is:
  571.  
  572. * mobj->source - holds the source of the missile/fire
  573. * mobj->target - holds the target of any object
  574. * mobj->tracer - holds the fire for the source mobj (normally an arch-vile)
  575.  
  576. P_Mobj.C, P_Map.C & P_Enemy.C require changes.
  577.  
  578. It worth noting for all those people who use DOSDoom as a base and stops them
  579. getting as confused as me :).
  580.  
  581. Implemented a fix from Erik Sandberg to allocate space for stateinfo in
  582. DDF_MainSplitIntoState: so moron who remain nameless (i.e. me) forgot
  583. to allocate space for it, something that Win95 appeared to let me get
  584. away with. In DOS it would crash out with a page fault (for obvious reasons).
  585.  
  586. Fixed the problem within the resurrect code that cause monsters to
  587. start up and head off in one direction and do nothing until it hit
  588. a wall: The movecount was not being reset to Zero, movecount is
  589. being used as a counter until respawn. (In P_Mobj.C).
  590.  
  591. Added P_MobjCreateObject, this procedure is the same as P_SpawnMobj
  592. with the exception of using a pointer to an mobjinfo_t as opposed
  593. to a enum reference. Eventually P_SpawnMobj will be removed. As a lot
  594. of new procedures, or modified versions of existing ones come into play,
  595. the original ones will be deleted as they are not needed. This is for
  596. the transition to DDF from the fixed style originally used. I'm looking
  597. at naming procedures with a ref to the file they are in aswell as the
  598. type of procedure they are..for example:
  599.  
  600. P_RemoveFlyingMissile -> P_MobjRemoveMissile
  601. P_itemRespawn         -> P_MobjItemRespawn
  602.  
  603. has been done: P_Mobj is the file, the latter is a description. Its good for
  604. people who need to pick up the source and educational purposes.
  605.  
  606. Added/Finalised the attacktype_t which will be used when a mobj goes on the
  607. offensive, the mobj_t has a currentattack and mobjinfo_t holds two:
  608. closecombat and rangeattack.
  609.  
  610. Added new procedures to P_action.C for the attacks side of DDF:
  611. P_ActLaunchMissile is like P_SpawnMissile, however the type of missile
  612. launched is an mobjinfo_t* not an enum plus uses the new attacktype_t
  613. to discern what projectile is fired, offsets used, height of attack etc..
  614. P_ActCheckMissileSpawn is the same as P_CheckMissileSpawn in P_enemy.C:
  615. the code is placed here as eventually P_CheckMissileSpawn will be
  616. removed for P_enemy.C as it will no longer be needed.
  617.  
  618. Moved the #define BASEYCENTER to a global variable that is calculated in
  619. multires setup. BASEYCENTER is used player weapons. There was a minor offset
  620. that "fixed" weapon heights for 400x300 and 800x600 because of the different
  621. aspect ratio, the offset being an increase. This caused weapons in a res of
  622. 640x400 to appear one pixel above the bottom of the screen, this is fixed by
  623. reducing the offset, if this is not done by half a FRACUNIT the weapon
  624. clipping is wrong for 400x300 and 800x600.
  625.  
  626. DATE: 31/07/1998
  627.  
  628. Rewrote the entire Items.DDF & Scenery.DDF files to pick the sprite at
  629. each state this was necessary, because I had not anticipated the combinations
  630. of sprites that have occured, one name for the spawned object and a
  631. different name for the death frames.
  632.  
  633. All the DDF_*.* have been changed to reflect the use of a void pointer in
  634. commandlist_t: it was previously a int pointer, I had made the mistake of
  635. not setting this as void earlier, so that it is generic. allows the use
  636. of any data type pointer in commandlist_t third parameter.
  637.  
  638. A dummy procedure exists to replace procedures that have no useful function
  639. on certain DDF files (switches and animations for example, they do not need
  640. to read the name).
  641.  
  642. P_RemoveFlyingMissile was added to p_mobj.c, this was to handle missiles
  643. that went through the sky properly. The missile should remove itself, but
  644. it should not stop the sound it is playing, the fact it is the sky doesn't
  645. mean you cannot hear the sound. New code has been added to handle a
  646. missile hitting a floor or ceiling that is a sky-hack (P_Z & P_XYMovement).
  647.  
  648. Added in Kester's additional code: DDF_Anim.C has been added.
  649.  
  650. DATE: 30/07/1998
  651.  
  652. Bug fixes mostly: Ghosting BUG caused when an arch-vile or new nightmare
  653. respawn raises a creature that was gibbed (Height and Radius of Zero) and
  654. the radius and height remain like this, height and radius are now restored
  655. from the info table, not the fallen mobj.
  656.  
  657. Fixed the spawning of a stasis imp at 0,0 - P_KillMobj was not setting
  658. the mobj with a MF_DROPPED flag and when the item was attempting to respawn
  659. an object that held no info on its original status or position.
  660.  
  661. Itemrespawn-que was made "limitless" and different respawn times
  662. are now possible, this has been added to Items DDF. As opposed to
  663. two set lists of time and mapthings, it is now a double-linked list of
  664. items. item-in-que being the entry.
  665.  
  666. newnmrespawn, respawnparm & respawnmonsters have been replaced with
  667. respawnsetting; Nice and easy with one.
  668.  
  669. Added these files to cover DDF Requirements:
  670.       * DDF_ATK.C  - Attack types
  671.       * DDF_CTRE.C - Creature types
  672.       * DDF_GAME.C - Game Configuration
  673.       * DDF_LEVL.C - Level Configuration
  674.       * DDF_LINE.C - Linedefs
  675.       * DDF_SECT.C - Sector Definitions
  676.       * DDF_SWTH.C - Switch Definitions
  677.       * DDF_WEAP.C - Player Weapons
  678.  
  679. DATE: 29/07/1998
  680.  
  681. Removed some of those awful goto's that existed in P_Map.C; trying to trace
  682. a goto is a bastard most of time, without it being badly done. I also
  683. removed A_ChaseNoMissile from P_Enemy.C, this was an earlier replacement
  684. for several goto's within A_Chase and found a more understandable way
  685. of writing the code. Found a bug in D_IdentifyVersion, it was adding Plutonia
  686. in DOSDoom mode (it should only add Doom.wad & Doom2.wad); I reworked
  687. an old version of the code I had written and replaced the existing that
  688. works, looks in the correct directory and loads the right wads (sorry,
  689. Kester - had to nuke your code again).
  690.  
  691. Heres a description of the DDF Parser, which is long overdue.
  692.  
  693. The DDF Parser is a simple reader that is very limited in error checking,
  694. however it can adapt to most tasks, as is required for the variety of stuff
  695. need to be loaded in order to configure the DOSDoom Engine.
  696.  
  697. The parser will read an ascii file, character by character an interpret each
  698. depending in which mode it is in; Unless an error is encountered or a called
  699. procedure stops the parser, it will read everything until EOF is encountered.
  700.  
  701. When the parser function is called, a pointer to a readinfo_t is passed and
  702. contains all the info needed, it contains:
  703.  
  704. * message               - message displayed on the screen.
  705. * filename              - filename to be read, returns error if NULL
  706. * DDF_MainCheckName     - function called when a def has been just began
  707. * DDF_MainCreateEntry   - function called when a def has been completed
  708. * DDF_MainFinishingCode - function called when EOF is read
  709. * currentcmdlist        - Current list of commands
  710.  
  711. Also when commands are referenced, they use currentcmdlist, which is
  712. a pointer to a list of entries, the entries are formatted like this:
  713.  
  714. * name - name of command
  715. * routine - function called to interpret info
  716. * numeric - pointer to an int value (possibly changed by routine)
  717.  
  718. name is compared with the read command, to see if it matchs.
  719. routine called to interpret info, if command name matches read command.
  720. numeric is used if a numeric value needs to be changed, by routine.
  721.  
  722. The different parser modes are:
  723.   waiting_newdef
  724.   reading_newdef
  725.   reading_command
  726.   reading_data
  727.   reading_remark
  728.  
  729. 'waiting_newdef' is only set at the start of the code, At this point every
  730. character with the exception of DEFSTART is ignored. When DEFSTART is
  731. encounted, the parser will switch to reading_newdef. DEFSTART the parser
  732. will only switches modes and sets firstgo to false.
  733.  
  734. 'reading_newdef' reads all alphanumeric characters and the '_' character -
  735. which substitudes for a space character (whitespace is ignored) - until
  736. DEFSTOP is read. DEFSTOP passes the read string to DDF_MainCheckName and
  737. then clears the string. Mode reading_command is now set.
  738. All read stuff is passed to char *buffer.
  739.  
  740. 'reading_command' picks out all the alphabetic characters and passes them to
  741. buffer as soon as COMMANDREAD is encountered; DDF_MainReadCommand looks
  742. through for a matching command, if none is found a fatal error is returned.
  743. If a matching command is found, this function returns a function pointer
  744. (into DDF_ReadFunction which is used to interpret the data), a command
  745. reference number to command ref and sets the mode to reading_data. if
  746. DEFSTART is encountered the procedure will clear the buffer, run
  747. DDF_MainCreateEntry (called this as it reflects that in Items & Scenery if
  748. starts a new mobj type, in truth it can do anything procedure wise) and then
  749. switch mode to reading_newdef.
  750.  
  751. 'reading_data' passes alphanumeric characters, plus a few other characters
  752. that are also needed. It continues to feed buffer until a SEPERATOR or a
  753. TERMINATOR is found. The difference between SEPERATOR and TERMINATOR is that
  754. a TERMINATOR uses the DDF_ReadFunction and then sets the mode to
  755. reading_command, whereas SEPERATOR uses the DDF_ReadFunction and a looks for
  756. more data on the same command. This is how the multiply states and specials
  757. are defined.
  758.  
  759. 'reading_remark' does not process any chars except REMARKSTOP, everything
  760. else is ignored. This mode is only set when REMARKSTART is found, when this
  761. happens the current mode is held in formerstatus, which is restored when
  762. REMARKSTOP is found.
  763.  
  764. The maximum size of BUFFER is set in the BUFFERSIZE define.
  765.  
  766. DDF_MainReadFile & DDF_MainProcessChar handle the main processing of the
  767. file, all the procedures in the other DDF files (which the exceptions of the
  768. Inits) are called directly or indirectly. DDF_MainReadFile handles to opening,
  769. closing and calling of procedures, DDF_MainProcessChar makes sense from the
  770. character read from the file.
  771.  
  772. DATE: 27/07/1998
  773.  
  774. Cleaned up P_Local.H to be understandable (just) and rewrote the
  775. P_CalcHeight in P_User.C so that when dead, you don't bob. Also only
  776. calculates bobbing when your are alive. Freelook is now limited by
  777. two defines: LOOKUPLIMIT & LOOKDOWNLIMIT; Makes this readable.
  778.  
  779. New Action Procedures are now contained in new file P_Action.c; So all
  780. the new action code was transfered from P_Enemy.c and use a prefix of
  781. P_Act* as opposed to A_*. I hope to include all the new generic action
  782. code with P_Action.C. DDF_Main.C's Action Pointer Table was changed to
  783. reflect this.
  784.  
  785. DATE: 26/07/1998
  786.  
  787. Stream-lined the existing DDF Code; I was still using some virtually
  788. identical functions for some things, so DDF_MainGetNumeric,
  789. DDF_MainLookupSound & DDF_MainCheckCommand replaced their ddf_item &
  790. ddf_scen counterparts; passed a pointer to the respective commandlists also,
  791. that being was the only difference in code. DDF_MainLoadStates also
  792. had a minor revamp. Added the additional bits and pieces to sceneryDDF
  793. for explosive items, now complete. Can be variable or set damage from
  794. explosions.
  795.  
  796. DATE: 25/07/1998
  797.  
  798. Worked on the networking code, developed the extended options and made
  799. the display more friendly. Continued expanding sceneryDDF to include
  800. the explosive items (which at the moment stands at a barrel). I had
  801. a lot a played with the idea of key selection. Looks like this
  802. will need some changes to networking code. I have tested the networking
  803. code and believe the problem caused by a true3d option. Will need to further
  804. investigate that little problem.
  805.  
  806. DATE: 24/07/1998
  807.  
  808. Recieved ASM code from Rasem for the R_DrawColumn & R_DrawSpan; Very
  809. impressed as it shaved a huge 4.7fps off the current speed in hicolour mode.
  810. Although bits and pieces can be slower. DrawSpan is faster, allowing
  811. for a noticable difference. 
  812.  
  813. DATE: 21/07/1998
  814.  
  815. Removed the fatal error in P_SpawnMapThing (where it reads a thing that
  816. is not defined, i.e. no matching doomednum in mobjinfo_t) for JDS Compliance,
  817. this only makes a report to the debugfile when DEVELOPERS is defined.
  818.  
  819. Fixed the bug in P_FindNextHighestFloor: The procedure was not taking
  820. into account floors of the same height, it should have been returning
  821. this value.
  822.  
  823. DATE: 20/07/1998
  824.  
  825. Rethought a lot of the plans for DDF in DOSDoom, it was clearly apparent that
  826. certain things need to be generalised (DDF) procedures; The "pellet
  827. warfare" attacks should all be one procedure for example. Removed Menu Shade
  828. Selections: maybe that wasn't such a great idea :). There are now two control
  829. menus (standard & extended) based on the space and also the two distinctive
  830. sets of controls. Standard Controls are need to play the game; Extended
  831. Controls are assistance controls.
  832.  
  833. DATE: 19/07/1998
  834.  
  835. Fixed the flicking weapons bug (my fault, not resetting centerfrac in
  836. r_things) and completed the integration of M Howe's Work. I have also
  837. added in the NightVision code and added it to Items.ddf.
  838.  
  839. Continued by clean-up of the DDF Parser and added DDF_MainFinishingCode which
  840. is called when the EOF is found on the current DDF File.
  841.  
  842. Added the following files:
  843.         DDF_Scen.C      -       Scenery Objects Parser Code
  844.         D_Debug.H       -       Kester's Debug File
  845.  
  846. Removed the 'offensive' end messages from dstrings.h (Note: fix the filename)
  847. I was getting an increasing number of mails on this, so i removed it and
  848. cleaned up the code in M_Menu.c.
  849.  
  850. Cleaned up DDF_Main.C & H again:
  851.        * Removed any scenery items
  852.        * Removed any unused states
  853.        * Corrected the enums
  854.        * Added the actions table  (straight string comparison)
  855.        * Added the specials table (straight string comparison)
  856.        * Made states & sprite checking code generic, moved for ddf_items.c
  857.        * Added addition action code to p_enemy.c (add new file to place this)
  858.        * God knows what else.... :).
  859.  
  860. Added Kester's major bugfix to V_Init8 and V_Init16.
  861.  
  862. Added the i_love_bill setting in: use '-ihatebill' to switch it off.
  863.  
  864. DATE: 17/07/1998
  865.  
  866. The demos work fine, but the networking is completely up the creek which is
  867. something I did anticipate and will need to spend some time fixing. I have
  868. spent a lot of time playing around with the menus and decided that the menu
  869. shades had to go and seperated the controls menu into standard and extended
  870. controls. There is still a lot of work to be done on the menu system. I took
  871. a look at the true3d stuff (putting Martin Howe's stuff in) and realised that
  872. there are a few things that were not anticipated by Kilbert the person
  873. who originally sent in the code and I will need to talk to Martin on this.
  874.  
  875. The Debug File stuff in d_net.c, now has DEVELOPERS wrappers around and
  876. uses the debug_Printf system from d_debug.h.
  877.  
  878. I attempted to add the code by Erik Sandberg for new Code for MMX, but it
  879. sadly was not designed for a normal Pentium with MMX (K6 more like) and
  880. even with the MMX code disabled it caused havoc with my sister's P120. So
  881. I have remarked it out, until Erik can find the problem, also there are 
  882. problems with using it with an AWE64. However he did manage to get the
  883. original ASM working with the limitless screen allocation bits (great!).
  884.  
  885. I will include More of Erik's, Dave's and Martin's work when I continue the
  886. work on networking, cause it affects a lot of the work.
  887.  
  888. DATE: 13/07/1998
  889.  
  890. With Kester removal of the demolimit and made the required changes to
  891. the ticcmd_t, vertangle and extbuttons added: vertangle is the change in
  892. the vertical angle of a player weapon, extbuttons used for new dosdoom only
  893. stuff; JUMPING etc. I had to add an entry to mobj_t also, vertangle again -
  894. it is actually easier putting it here than in the player structure; DOSDoom
  895. had a very hacked approach: it set a global variable that was altered
  896. directly, It seems to work a lot better than it did before and mlook is now
  897. record in demos and passed over the network, which breaks compatibility with
  898. the original EXE. This compatiability is a pain, I feel that when ID released
  899. a new version they cared little for compatibility with older version so why
  900. should we?
  901.  
  902. DDF code got reworked, The code was rigged to only work for items DDF and
  903. did not allow any flexability. The call to DDF_MainReadFile now passes a
  904. pointer to a struct with the filename, message and the functions required.
  905.  
  906. I will be continuing my efforts to clean up the DDF parser code.
  907.  
  908. Took a dive into the Radius Trigger Parser, had to make some adjustments so
  909. that DDF and Rad_triggers work together, the object generated is referenced
  910. by its mapnumber (so the docs will need updating) and also corrected an error
  911. where an object was being generated and its was not checking whether it landed
  912. on something, therefore the object does not generate if it lands on something.
  913.  
  914. DATE: 04/07/1998
  915.  
  916. Spent the entire week learning how NOT to fix certain problems; I have been
  917. looking at getting the demos to sync properly: mlook is not recorded in the
  918. demo as its implementation would require an few changes to ticcmd_t; I do not
  919. know whether we should support original demos: this causes problems as
  920. DOSDoom's handling of events is sufficently different that of the id EXE.
  921. This requires further thought, One of the major problems that always crops up
  922. is maintaining compatibility and I am having my doubts about the wisdom of
  923. doing so.
  924.  
  925. Fixed a minor bug with weapon selection; Games without the double-barrel now
  926. do not have a key to select them.
  927.  
  928. DATE: 02/07/1998
  929.  
  930. Demos now record as with a Version number of 065, the additional features
  931. that would effect gameplay are now stored within the demo. Will be adding
  932. the additional mlook code to it. Mlook will auto-aim if it can find a target:
  933. if not the weapons shoots it the direction it was fired.
  934.  
  935. DATE: 30/06/1998
  936.  
  937. Apart from three bugs..is what I should have said: I was trying to compare
  938. an unknown pointer with a string (amatuerish mistake). I have been looking
  939. at at syncing the demos: Doom V1.9 sync without problem, assuming you haven't
  940. got any of the features enabled, DOSDoom does not record its addition features
  941. and this does cause some hiccups along the way. I need to investigate further
  942. and solve any more problems that crop up. Also added a CPU check at the
  943. beginning to assist the asm coders: it will allow us to choose the specific
  944. routine optimial for that processor.
  945.  
  946. DATE: 29/06/1998
  947.  
  948. Hooked in the DDF Reader and apart from 2 bugs, if worked fine! The items
  949. that are picked up are now defined in the items DDF. I need to do more ground
  950. work to complete this for all functions, however I am a bit happy. The
  951. work here was rewriting/writing the reader functions and the correct handling
  952. for all of it. I'm too tired to explain the whole bunch of things.
  953.  
  954. DATE: 27/06/1998
  955.  
  956. Finally got round to updating this log after numerous hic-cups. The
  957. Ground work for weapon selection and DDF Items has been done, all that needs
  958. to be done is the reader and the file itself.
  959.  
  960. I have had chance to add in code from:
  961.  
  962. Kester: Contined work of removing of limits, ddbug12.wad (Ian Wilson) &
  963. runbuddy.wad (Chris Dale sent this) both now work! Hey, hey.
  964.  
  965. Martin: Ground work for a jetpack, added this as a benefit type for DDF Items.
  966.  
  967. File changes:
  968.  
  969.         LU_INFO.*  => DDF_MAIN.*
  970.         DOOMSTAT.* => DM_STATE.*
  971.         DOOMDEF.*  => DM_DEFS.*
  972.         DOOMDATA.* => DM_DATA.*
  973.         DOOMTYPE.* => DM_TYPE.*
  974.         LIBAMP.H   => MUS_LIB1.H
  975.         JGMOD.H    => MUS_LIB2.H
  976.         D_ITEMS.*  => OBLIVION (got removed, table moved to DDF_MAIN.*)
  977.         OBLIVION   => DDF_ITEM.* (New DDF Features)  
  978.  
  979. SOURCE DIRECTORY CHANGES:
  980.         Removed DJGPP dir, moved contents back into Main directory.
  981.          (Since we have no time to work on LINUX Version, lets make things
  982.           as simple as possible).
  983.         Added MAKEFILE for all those who don't like RHIDE.
  984.         Added LIBS directory and placed the LIBJGMOD.a & LIBAMP.a files.
  985.          (The purpose of this is that we should limit the size of src zip
  986.           where possible, post sources at the website).
  987.  
  988. P_INTER.C has been changed on a major scale, P_TouchSpecialThing has been
  989. altered to give the benefit from the mobjinfo_t table as opposed to checking
  990. to see what sprite the thing has (it was sprite-ist!).
  991.  
  992. All the procedures have been altered to accept actual amounts from the things
  993. and also the limits imposed. The duration of each benefit can be specfied
  994. assuming that the benefit is judged in length of time: as opposed to the old
  995. method of a LUT, there is also a limit to the benefit time, which is specified
  996. in the thing, to use the original effect you have give the same amount as the
  997. limit (no higher, no lower - that value or else), making bigger limits
  998. gives the user chance to top-up on the time they have left on a benefit.
  999.  
  1000. The Ammo amount is give directly, as opposed to number of clips for that ammo.
  1001.  
  1002. If the armour value given is bigger than 100 the armour type is 2 (blue armour
  1003. class), else it is 1 (green armour class) - limit for this is specified in
  1004. the thing.
  1005.  
  1006. mobjinfo_t has a new addition - backpack_t (a pointer to), which contains
  1007. info on weapons held, ammo for all types, the most ammo carried for all types,
  1008. the keys carried, armour and the armour type. This allows multiple different
  1009. backpacks to be generated by DDF-Items.
  1010.  
  1011. P_SpawnPlayerBackpack (new Procedure in P_INTER.C) is a bit experimental,
  1012. it gives all the stuff a dead player died with and generates a backpack with
  1013. all this stuff in. It does work, but until the Multi-player works properly
  1014. I can't tell you if it works in deathmatch. 
  1015.  
  1016. P_USER.C/ST_STUFF.C/P_INTER.C: Keys 1->7 have a mapping system, you can choose
  1017. a primary and secondary weapon for each key, if you have a weaponed mapped to
  1018. a specfic key it will show up on the weapons owned table. It has no menu so
  1019. far (working on it). It does mean that if the Double-Barrel is owned, but the
  1020. single-barrel is not then the number 3 will show up (which it did not before).
  1021.  
  1022. Changed the weapon enum order in to a logical order and gave the weaponinfo_t
  1023. a new entry - weapon name. This will be used in the M_Option.C file for
  1024. selecting weapons as described before-hand.
  1025.  
  1026. weaponupdate is the flags that tells the weapon widgets on the status bar to
  1027. update.
  1028.  
  1029. DDF_MAIN.C (DDF_OldThingInit) just sents up the benefits info for the existing
  1030. things, When I get the reader sorted, I will removed these and their entries
  1031. within mobjinfo[] and state[] tables.
  1032.  
  1033. DATE: 18/06/1998
  1034.  
  1035. Lesson: Don't bugger about with something you don't fully understand. The
  1036. modifications to I_ALLEGV.C cause more problems than it solved. I've
  1037. tracked the problem down to the use of allegblit(). When this is used
  1038. it treats black as being see-through, subed the use bankedblit instead.
  1039.  
  1040. added SCREENDEPTH a global variable that holds the calculation of
  1041. SCREENHEIGHT*BPP.
  1042.  
  1043. DATE: 14/06/1998 
  1044.  
  1045. Reworked the PatchIndirect system, it normally scales the graphics up to the
  1046. actual res, which when your running 400x300 or 512x384 it looks somewhat
  1047. tackly, instead downsized the graphics to a ratio of 320x200. Anything that
  1048. is between 320x200 and 640x400 has a scaled res of 320x200, anything between
  1049. 640x400 and 800x600 has a scaled res of 640x400 and so forth.
  1050.  
  1051. Attempt to fix the dodgy resolutions by forcing either the use of VGA or
  1052. VESA2L modes (which seemed to work for me) in I_ALLEGV.C.
  1053.  
  1054. The Options Menu and other text menus center themselves vertically.
  1055.  
  1056. New Mouse Options menu.
  1057.  
  1058. DATE: 10/06/1998
  1059.  
  1060. Add HUlib_drawTextLineTrans(), just like HUlib_drawTextLine() except it
  1061. uses the translation table for colour by JC. First Change: In Rad_trig.C
  1062. changed HUlib_drawTextLine() to HUlib_drawTextLineTrans() with grey as the
  1063. colour (TIP_DisplayTips).
  1064.  
  1065. Forced the status bar to refresh when a key is picked up. Fixes problem
  1066. when a key picked-up did not show up on the status bar. (P_GiveCard) in
  1067. P_Inter.C.
  1068.  
  1069. Added Linedefs #9000-9006 (scrolling walls), coded passed to me by JC.
  1070. P_SPEC.C (P_SpawnSpecials & P_UpdateSpecials). Piece of advice, don't enable
  1071. all of these at one room - does your head in! May have to change to linedef
  1072. number as not to impose on those already used by other ports.
  1073.  
  1074. DATE: 09/06/1998
  1075.  
  1076. Fixed the error with selecting the supershotgun in doom/utlimate doom.
  1077. added check for the gamemode in ST_STUFF.C. If the user tries 'idgive3'
  1078. nothing will happen, 'idfa' and 'idkfa' do not make the supershotgun
  1079. available.
  1080.  
  1081. Users can no longer try 'idgive6' & 'idgive7' when in shareware doom (also
  1082. in ST_STUFF.C).
  1083.  
  1084. Removed all references to '-cdrom' parameter on account that noone should
  1085. be playing this from a CDROM.
  1086.  
  1087. Fixed the 'You haven't picked a quicksave slot yet!cD' Bug (also the
  1088. French Nightmare Message Bug). Insufficent space allocated from the display
  1089. string in m_menu.c (m_drawer), increase size from 40 to 50 chars.
  1090.  
  1091. Set he length of tips in rad_trig.c to 50 (56 is too big).
  1092.  
  1093. Fixed to problem with displaying HU_text at High Resolutions - Wasn't not
  1094. displaying the text (only half). (HU_LIB.C).
  1095.  
  1096. DATE: 30/05/1998 
  1097.  
  1098. DOOMSTAT.H - Added lostsoulability & spectreability as extern ints.
  1099.  
  1100. D_MAIN.C   - Added lostsoulability & Spectreability as ints.
  1101.  
  1102. P_ENEMY.C  - (A_Look, A_StandardRefire, A_FaceTarget)
  1103.                 added invisibility decrease check (if thing stealth)
  1104.  
  1105.              (A_Chase)
  1106.                 added invisibility increase check (if thing stealth)
  1107.  
  1108.              (A_Fall)
  1109.                 set invisibility = 0 (visible).
  1110.  
  1111. P_INTER.C  - (P_DamageMobj),
  1112.                 added invisibility decrease check (if thing stealth).
  1113.  
  1114. P_MOBJ.H   - Removed MF_TRANSLUC25 / 50 / 75 flags in the flags enum.
  1115.              Added   MF_STEALTH flag to the flags enum.
  1116.              Added invisibility setting to mobj_t
  1117.                 (0=Visible >> stages of translucency >> 4=invisible)
  1118.  
  1119. R_THINGS   - (R_ProjectSprite)
  1120.                setup that if thing is invisible ignore (return).
  1121.  
  1122.              (R_DrawVisSprite)
  1123.                if transluc then use transluc 50% draw.
  1124.                check vis->invisibility to set transluc draw.
  1125.  
  1126. P_MOBJ.C   - (P_MobjThinker) Add sections of code to change lost souls and
  1127.              spectre flags for their visibility/ability.
  1128.  
  1129. M_OPTION.C - Two New Procedures:
  1130.                (M_ChangeLostAbility & M_ChangeSpectreAbility), alters the
  1131.                info->flags of lost souls/spectres respectively. If also sets
  1132.                the update flag so that P_MobjThinker will update all the
  1133.                relevant things when they "think".
  1134.  
  1135.                Added the options to the options menu. Re-ordered the
  1136.                look-up table colours. Doom-Red is now default.
  1137.  
  1138.                Translucency is now only on and off.
  1139.  
  1140.                Spectres and Lost souls can be:
  1141.                 Visible/part-invis/translucent/stealth.
  1142.  
  1143.              Renamed all local procedures M_* to be consistent.
  1144.  
  1145. G_GAME.C   - Unremarked translucent settings and picked out things that were
  1146.              requested to be translucent. Added code to change the flags of
  1147.              lost souls and spectres according to lostsoulability &
  1148.              spectreability respectively. 
  1149.  
  1150. DATE: 26/05/1998 
  1151.  
  1152. Notes:
  1153.    Temporary fixes for all DDF altered stuff (i.e. correct damage done).
  1154.  
  1155.    Added Global Video Variables:
  1156.        SCREENWMULTIPLIER, SCREENHMULTIPLIER,
  1157.        SCREENWDIVISIER, SCREENHDIVISIER for deltax? and deltay? in the
  1158.        V_Video?.? so that program does not calculate these each time -
  1159.        InDirectPatch procedures.
  1160.  
  1161.    Added:
  1162.       V_DrawPatchTrans8() + V_DrawPatchInDirectTrans8() in V_Video1.C
  1163.       V_DrawPatchTrans16() + V_DrawPatchInDirectTrans16() in V_Video2.C
  1164.       V_Trans.H added (colour translation)
  1165.       M_WriteTextTrans() in M_Menu.C
  1166.       Menu Colour Configuration in Menu
  1167.       (All above code from John Cole - cheers).
  1168.  
  1169.       Options, Video, Control and Gameplay have new graphical title
  1170.                                                         (in dosdoom.wad)
  1171.       Options, Video and Gameplay menu centered.
  1172.  
  1173.       Options Menu has new functions:
  1174.         Zombie Targeting (uses lessaccuratezom which is default....
  1175.                 ...be a psycho, put zombie targeting on perfect!)
  1176.                 (Uses code for DDF STUFF)
  1177.  
  1178.         Monster Respawn (None/Teleport/Resurrect Style)
  1179.  
  1180.       ST_STUFF.C:
  1181.         Added the new cheat codes (see dosdoom.his)
  1182.  
  1183.       Pre-DDF Hacks added.
  1184.  
  1185.       A LOT OF CODE CLEANUP!
  1186.  
  1187. DATE: 26/04/1998
  1188.  
  1189.    Notes:
  1190.         Human Madness REMOVED
  1191.         Human Explosions REMOVED
  1192.         New AI Temporarily Removed
  1193.         mobjinfo_t in INFO.H has new items - (Definable things) continuning
  1194.  
  1195.    * P_ENEMY.C & INFO.C (new procedures):-
  1196.         A_ChaseNoMissile       - program re-structuring
  1197.         A_ZombiePistolAttack   - replaces A_POSATTACK (Definable things)
  1198.         A_ZombieShotgunAttack  - replaces A_SPOSATTACK (Definable things)
  1199.         A_ZombieChaingunAttack - replaces A_CPOSATTACK (Definable things)
  1200.         A_DeadlyPistolAttack   - new accurate enemy pistol attack
  1201.         A_DeadlyShotgunAttack  - new accurate enemy shotgun attack
  1202.         A_DeadlyChaingunAttack - new accurate enemy chaingun attack
  1203.         A_StandardAttack       - replaces normal enemy attack (not complete)
  1204.         A_StandardRefire       - replaces refire for CPOS, BSPI & SPID 
  1205.  
  1206.    Overview of changes:
  1207.         Human Madness & explosions removed (crap I did earlier).
  1208.  
  1209.         New AI was temp. removed - to be added to the definable thing.
  1210.  
  1211.         The new procedures are added and existing ones are replaced to make
  1212.         the doom engine more dynamic. The aim is to have all the thing info
  1213.         loaded at runtime from a ASCII file - this will make dehacked obsolete
  1214.         as you can directly tell the engine all the info for a thing and
  1215.         modify it accordingly. This is the earliest very stable version I have
  1216.         and the definable thing is well on its way to completion. Hopefully
  1217.         doom with a -game parameter is possible. INFO.H is also the focus for
  1218.         change. NB: Until I complete the standard attack procedure, all close
  1219.         combat damage will be that of a Baron of Hell! A standard attack is
  1220.         the normal attack used by imps, cacodemons, barons, hellknights,
  1221.         cyberdemons and arachnotrons, it takes the missile type from the
  1222.         actor->info, I have to work on a closecombat attacks - where
  1223.         applicable.
  1224.  
  1225.         A_ChaseNoMissile replaced a goto statement - I may try to get
  1226.         a C++ compile out of this.
  1227.         
  1228. John Coles Log
  1229. -----------------------------------------------------------------------------
  1230. Date: 31 May 1998 
  1231.  
  1232. DOOMSTAT.H      /
  1233. V_VIDEO*.C      /
  1234. DJGPP/I_VIDEO.C - Fixed the problem with the global variables by removing
  1235.                   SCREENWMULTIPLIER, SCREENHMULTIPLIER etc. (Sorry Andy)
  1236.                   It display's properly again in higher resolutions.
  1237.  
  1238.                   Now uses vars : int DX,DXI,DY,DYI,DY2,DYI2;
  1239.  
  1240.  
  1241.                   Also in v_video1.c for some reason it was using Y Co-ords
  1242.                   for both x & y in the follwing :
  1243.  
  1244.                          V_DrawPatchInDirect8
  1245.                          V_DrawPatchInDirectFlipped8
  1246.                          V_DrawPatchShrink8
  1247.                          V_DrawPatchInDirectTrans8    (Why didn't I see it?)
  1248.                          V_DrawPatchInDirect8
  1249.  
  1250.                   Funnily enough they were correct in all the 16-bit
  1251.                   functions (v_video2.c).
  1252.  
  1253. DJGPP/I_ALLEGV.C /
  1254. M_MISC.C         /
  1255. M_OPTION.C     -  Added "No Vert" to the main option menu, "Vertical Retrace"
  1256.                   to the Video Menu. VRetrace stops the screen shearing.
  1257.                   (Both options are now saved into the DEFAULT.CFG file)
  1258.  
  1259.                   No Vert is only useful if you are like me and don't believe
  1260.                   in using MLOOK with Doom :)
  1261.  
  1262.                   Vertical Retrace will be overridden if the "-dblbuffer"
  1263.                   parameter is specified at the command line.
  1264.  
  1265. -----------------------------------------------------------------------------
  1266. Date: 28 May 1998 
  1267.  
  1268. RAD_TRIG.C - (DoRadiTrigger)Fixed a bug which cause SpawnThing to crash. 
  1269.              Caused by items respawning without any thing info in mapthing_t.
  1270. R_MAIN.C   - (R_ExecuteViewSize) Now displays the status bar properly at
  1271.              any resolution (Looks good at 400x300 now).
  1272.  
  1273. -----------------------------------------------------------------------------
  1274. Date: 21 May 1998 
  1275. Removed lastepisode var from game.c (not used anymore)
  1276. Finalised rad_trig.c
  1277.  
  1278. -----------------------------------------------------------------------------
  1279. Date: 11 May 1998 
  1280. + Added Radius_Trigger(TM) :) Scripting Language, with TIP handling functions.
  1281.   Files Added    : djgpp/rad_trig.c - Parser / Scripting Language / Trigger
  1282.                                       handler / Tip Processor
  1283.                    djgpp/rad_trig.h - Function Prototypes
  1284.  
  1285.   Files Modified : djgpp/d_main.c   (D_DoomMain)   -Script Loader/Parser
  1286.                    djgpp/p_user.c   (P_PlayerThink)-Trigger Event Handler Call
  1287.                    djgpp/hu_stuff.c (HU_Drawer)    -Tip Event Handler Call
  1288.                    djgpp/g_game.c   
  1289.                        + Added lastmap var(global) to accomodate the script
  1290.                          function GOTO_MAP <mapno>, ensures map names are
  1291.                          displayed correctly. (Used in function G_DoLoadLevel)
  1292.                        (G_DoReborn)
  1293.                        (G_Ticker) - No also resets/restarts radius triggers
  1294.                                     depending on whether the player has died,
  1295.                                     gone to a new level or is playing a
  1296.                                     netgame.
  1297.  
  1298. + Some code cleanup.
  1299.                    djgpp/r_things.c (R_DrawVisSprite)
  1300.                                     - Commented out a block of code which is
  1301.                                       now irrelevant. To render a translated
  1302.                                       player the engine relies on the playxtra
  1303.                                       var to contain the palette translation
  1304.                                       offset multiplier.
  1305.                    djgpp/p_mobj.c   (P_SpawnPlayer)
  1306.                                     - Reworked most of the code. It should
  1307.                                       be easier to understand and now just
  1308.                                       sets playxtra to define the players
  1309.                                       translation colours.
  1310.                    djgpp/g_game.c   (G_CheckDemoStatus)
  1311.                                     - Rolled up code which set playersingame
  1312.                                       1..MAXPLAYERS to 0;
  1313.                                     (G_DoNewGame)
  1314.                                     - Same as previous entry.
  1315.                    djgpp/d_net.c    (D_TryRunTics)
  1316.                                     - I misunderstood the original code
  1317.                                       thinking it did something else (when
  1318.                                       I was figuring out the 8 player stuff
  1319.                                       back in the CTFDoom days :) ).
  1320.                                       So the old code has been put back in.
  1321.                    djgpp/hu_stuff.c (HU_Drawer)
  1322.                                     - Show info cheat shows the x & y co-ords
  1323.                                       normally rather than a fixed point
  1324.                                       number. Will make it easier when using
  1325.                                       the Radius Triggers when finding
  1326.                                       coordinates.
  1327.                                       
  1328. Kester Maddock's Log File.
  1329. ----------------------------------------------------------------------------------------------------------------------------
  1330. NOTES:
  1331. ----------------------------------------------------------------------------------------------------------------------------
  1332. Suggested changes to Allegro:
  1333.   Boost sound volume:mixer.c:185
  1334.      mix_vol_table[j][i] = (i-128) * j * 768 / MIX_VOLUME_LEVELS / mix_voices;
  1335.   Disable detection of default.cfg in current directory:digmid.c:467
  1336. /*
  1337.    replace_filename(path, __crt0_argv[0], "", sizeof(path));
  1338.    if (try_patch_location(path, dir, file))
  1339.       return TRUE;
  1340. */
  1341.   Fix Joystick:allegro.h:641
  1342.                   ((joy[0].stick[1].axis[1].d1) ? 4 :       \
  1343.                  ((joy[0].stick[1].axis[1].d2) ? 2 :    \
  1344.  
  1345. ----------------------------------------------------------------------------------------------------------------------------
  1346. 21-12-98
  1347. ----------------------------------------------------------------------------------------------------------------------------
  1348. Fixed Network play.
  1349. States can handle misc1 and misc2 refs.
  1350. Smoothed invisibility.
  1351. Fixed BFG
  1352.  
  1353. ----------------------------------------------------------------------------------------------------------------------------
  1354. 17-12-98
  1355. ----------------------------------------------------------------------------------------------------------------------------
  1356. Fixed DOS mode Bugs:
  1357.   ddf_weap.c:176 realloc errors.
  1358.   i_system.c:754 Error in I_Error.  Use nosound variable instead of cmd check.
  1359.   s_sound.c:764  Cannot assume channels[i].sfxinfo != NULL
  1360. Changed CD mode to non loop.
  1361. Removed default for mlook.
  1362. Added world map status to savegames.
  1363. Give a default to nosound
  1364. Cleared intermission status on new game.
  1365.  
  1366. ----------------------------------------------------------------------------------------------------------------------------
  1367. 16-12-98
  1368. ----------------------------------------------------------------------------------------------------------------------------
  1369. Moved all flags that affect gameplay into a special struct: gameflags_t.  There
  1370.   is a gameflags struct and a settingflags struct.  The gameflags struct holds
  1371.   the flags for the current game/demo and the settingflags hold the user's
  1372.   preferences.  This is so eg demos do not change user's prefs.
  1373. All iwads in the current directory will be loaded. -iwad parameter changes
  1374.   which dir to look in and also can be used to load a single iwad.
  1375. Added a shareware version check.
  1376. Added left + right monitors as seen in v1.1 of Doom.  Use -viewangle 90 for left
  1377.   and -viewangle 270 for right.  As you may have guessed, you can use any angle
  1378.   specified in degrees.
  1379. Made freelook smooth.
  1380. Infinite number of ammo types.
  1381. Finished Intermission screens.
  1382. DDF files can be loaded from wad files:  ddfanim, ddfatk, ddfgame, ddflang, ddflevl,
  1383.   ddfline, ddfcrtr, ddfitem, ddfcnry, ddfsect, ddfsfx, ddfswth, ddfweap.
  1384. Also the -ddf param specifies the dir to look for base ddf files.
  1385. Attack projectiles flags are no longer implicit.
  1386. Added fast param to creature and attack ddf files.  This is how much that monster/
  1387.  missile is speeded up in nightmare.
  1388. Added episode param to levels.ddf.
  1389. Removed limits on states and spritenames.
  1390. Added #define command to ddf files.
  1391. Fixed another bug in the ddf fixed_t getter.
  1392. Made players part of ddf in creatures.ddf
  1393. Added Jumpheight and maxfall to creatures.ddf
  1394. Finished weapons.ddf:  finished chainsaw and plasma.  Added weapon feedback effects!
  1395. Added viscosity to sectors.ddf.  This specifies how 'thick' a sector is: 0 is air,
  1396.   1 is solid. 0.5 should be about water.  This is mainly designed for zero gravity
  1397.   sectors, so the player can get down without a jetpack.
  1398. Fixed major bugs in backpack code: writing to null pointers meant backpacks crashed
  1399.   the game.
  1400. Removed a lot of bastard sfxs.  Added jetpack sounds to this list.
  1401. Added 8 button joystick support.
  1402. Removed old hi colour trans routines. (Erik's made new ones.)
  1403. Fixed SFX Decaching routine.
  1404. On startup, I_CalibrateJoystick accepts joystick buttons as well as keys.
  1405. Hicolour I_SetPalette works properly now for non DOOM palettes.
  1406. Inlined Fixed point funcs into m_fixed.h for more speed.
  1407. Made most of the funcs in m_options.c static.
  1408. Added a help line to the bottom of the options screen.
  1409. Added Z check to melee attack for true3d
  1410. Made smart projectiles work.  These make the cyberdemon a nast foe now... Enemies
  1411.   using this attack style can work out how much to lead a target, so the hit rate
  1412.   should increase big time.  Try the levels e2m8 and map32 with this enabled.  I
  1413.   dare you.
  1414. Fixed not being able to close doors.
  1415. Discovered save games were clobbered! Fixed them.
  1416. Ignore missing animations.
  1417. Fixed colourmap changing in hicolour.
  1418. Finished my smoothing draw column. Doesn't give much framerate past 400x300, but
  1419.   it looks awesome.  Compile with -DSMOOTHING to allow, -UseSpan KM -UseCol KM to
  1420.   activate. Uses Erik's trans routines in hicolour.  Unfortunately, I cannot smooth
  1421.   sprites.
  1422. Added savegame radius trigger.
  1423. New SFX code: Mobjs can make more than one sound at once.  A sound will only be
  1424.   cut if that mobj makes another sound with the same singularity.
  1425. Added some wad file checking funcs compile with -DWAD_CHECK, but be warned: this
  1426.   will print every wad cache request to the debug file.  It takes less than 30
  1427.   seconds to make a 40 meg debug file.
  1428. Added Title screens etc to mission.ddf
  1429. Removed mus database and lu_sound.c.  Unnecessary.
  1430. Episode Menu generated dynamically.
  1431.  
  1432. I think we are quite close to release now. :-)
  1433. ----------------------------------------------------------------------------------------------------------------------------
  1434. 25-11-98
  1435. ----------------------------------------------------------------------------------------------------------------------------
  1436. RAD_Scripts can be loaded from wad files and be included from disk or wad files.
  1437. Weapons.ddf more or less finished. (Chainsaw vibrations not.)
  1438. DOSDoom now takes advantage of Erik's trans routines, objects have 65536 levels
  1439.   of translucency.
  1440. Finales generalised.
  1441. Monster accuracy is now a fixed_t
  1442. Fixed a bug in DDF_MainGetFixedHelper which means decimals with more than one
  1443.   decimal place work.
  1444. Wrote some radius scripts to take care of specials in Doom, eg Exit level on
  1445.   cyberdemon's death in E2M8.
  1446. Rocket Jumping.
  1447. Fixed Bug in Wi_stuff.c that meant MAP30 crashed.
  1448. Added z coordinate to idinfo cheat.
  1449. Removed MMX disable check as Allegro October 25 has fixed FPU bugs in it.
  1450. Removed Screen Resolutions with extreme aspect ratios.
  1451. Added ability to scroll backwards through list.
  1452. Made Blood more violent. :-)
  1453. Changing gravity in menu affects instantly instead of next level.
  1454. Faded teleportation has three settings: Off, On, and No teleflash.
  1455. Rewrote my super-smooth span texture mapping routine.  Maps in two directions now.
  1456.   Looks fantastic, but slows a P2 266 down to 10fps!
  1457. New Radius trigger commmands: #version, #include, ondeath.
  1458. Radius trigger Tip functions can handle graphics.
  1459.  
  1460.  
  1461. BUGS:
  1462.   Chainsaw doesn't vibrate.
  1463.   Chainsaw gets pumped up for berserk.
  1464.  
  1465.  
  1466. ----------------------------------------------------------------------------------------------------------------------------
  1467. 29-10-98
  1468. ----------------------------------------------------------------------------------------------------------------------------
  1469. Moved RAD_Script init so rad scripts can be loaded from wad files. (TODO)
  1470. Languages all contained in one file. (default.ldf)
  1471. Tons of stuff added to lines.ddf + sectors.ddf
  1472. New attack type: LaunchSmartProjectile.  This attack attempts to lead the
  1473.  target, (usually :-) increasing the chance of hit.
  1474. Changed SFX to eliminate runtime lookups, and allow random sfx on everything.
  1475. Foreign characters like 'ä' are allowed in translations.  Note some of them
  1476.  don't have graphics.  All the ones needed now have graphics.
  1477. Seperated out CD audio, so CD audio can be started/stopped from menu.
  1478. Fixed SFX Caching.  This is important for DDF, because SFX used to be preloaded.
  1479.  Adding new sfx would eventually limit memory.
  1480. Added a timeout to the shutdown sound loop.
  1481. Extended keys defined by macro.
  1482. Joystick calibration routine works.  It used to ask you to move the joystick to
  1483.  the lower right corner, then end.  But because you had right pressed, joystick
  1484.  would trigger calibration again.  Fixed by asking to calibrate centre again.
  1485. Wrote a 16-bit blended column drawing routine.
  1486. Fixed sector raise and change, by searching backwards.  Fixes MAP03, but somewhere
  1487.  else probably doesn't work... :-(
  1488. Added #defines so you can compile a version without MOD/MP3 music. NOMOD and NOMP3
  1489. Fixed P_SphereAttack not damaging according to range.
  1490. Changed chaingun sound to chgun from pistol?
  1491. Changed the linedef security system.  In the ddf file, if a + prefixes the key
  1492.   then that key is required, eg BLUE_CARD,BLUE_SKULL is blue keycard OR skull,
  1493.   but +BLUE_CARD,+BLUE_SKULL is blue keycard AND blue skullkey.
  1494. Added colfuncs for Translated + Translucent objects.
  1495. Radius triggers fixed for DDF: START_MAP x (x) changed to START_MAP xxx, where
  1496.  xxx is the level name eg MAP01
  1497. Zone is aligned to 32 (cache line) on Pentium Pros.
  1498.  
  1499. Checked everything compiled optimised
  1500. Checked everything compiled debug-mode
  1501. Wrote this update
  1502. Prepared for send
  1503.  
  1504. TODO: allow searching through hi-res list backwards.
  1505.  
  1506. ----------------------------------------------------------------------------------------------------------------------------
  1507. 30-9-98
  1508. ----------------------------------------------------------------------------------------------------------------------------
  1509. Used a modified qsort on vissprites.  Eliminated the need for an extra sorting stage.
  1510. Finished Sectors.ddf
  1511. Cache SFX
  1512.  
  1513.  
  1514. ----------------------------------------------------------------------------------------------------------------------------
  1515. 27-9-98
  1516. ----------------------------------------------------------------------------------------------------------------------------
  1517. Fixed Blood + bullet puffs in true3dmode. Added MF_NOCLIP flag
  1518. Fixed bullet puffs not exploding against floors/ceilings.
  1519. Merged in Martin's True 3d/Jetpack code.  This is the coolest.
  1520. Generalised Lights.
  1521. Added a fix from Erik p_maputl.c P_InterceptVector
  1522. Added fix as suggested by Erik concerning SFX Init failure and resulting lockup at exit.
  1523. Wrote DDF file for Sectors.  Need to generalise Floors/Ceilings even more to finish.
  1524. Finished DDF file for SFX.
  1525. Bug (reported by Erik:)  Probably fixed.  Floors not going back up.
  1526. Fixed bug introduced by True3d whereby monster missiles don't aim upward.
  1527.  
  1528. Known Bugs:
  1529.   Where a sector raises and changes texture eg MAP03.
  1530.   Special sectors 10 + 14 (Doors) don't work.  Need to merge p_floors.c + p_ceilng.c
  1531.  
  1532. TODO: Stuff I want:
  1533.   Use better sorting methods on vissprites and visplanes.
  1534.   Make DDF storable into wad files.
  1535.   Add an #include directive to DDF to allow a patch file to include the stock doom DDFs
  1536.   Multiple languages in LDF file, eg under header
  1537.     [DEFAULT]
  1538.     string1="my string one";
  1539.     string2="my string two";
  1540.   
  1541.     [GERMAN]
  1542.     string1="my string one in german";
  1543.     If a string doesn't exist, it should fall back to the default
  1544.   Cache SFX
  1545.   Help text in options menu
  1546.  
  1547. ----------------------------------------------------------------------------------------------------------------------------
  1548. 17-9-98
  1549. ----------------------------------------------------------------------------------------------------------------------------
  1550. Merged in Andy's update.
  1551. Changed Fixed point/Time DDF.
  1552. Merged update by Erik.
  1553. Profiled ColumnFuncs for P2.
  1554. Changed linedef tag 33 back to red???
  1555.  
  1556. ----------------------------------------------------------------------------------------------------------------------------
  1557. 6-9-98
  1558. ----------------------------------------------------------------------------------------------------------------------------
  1559. Changes:
  1560.         MMX is not enabled by default, as it crashes with sound turned on.  Crashes
  1561.          in draw column func.  The only thing I could think of was to disable
  1562.          interrupts while drawing, but that didn't work.  I'm fairly sure there is
  1563.          no fpu code in the sound library.
  1564.         Had tons of fun with the dynamic res changing... :)
  1565.             Test mode works, time delay is 5 secs
  1566.             No crash if res mode isn't available.
  1567.             Added all of Allegro's constant resolutions, ie ModeX, and SVGA 640x480
  1568.             Moved res config info from dosdoom.cfg to default.cfg
  1569.         Started a sounds.ddf, gave up because of all the tables that rely on sfx numbers
  1570.          Will be easier to complete when more of ddf is finished.
  1571.         Pressing Escape when the joystick asks you to calibrate it at the init phase
  1572.          will load config data from the config file.
  1573.  
  1574. Bugs Fixed:
  1575.      In the menu.c, wierd bug to do with M_Responder recieving an extra keypress. (And
  1576.        acting on it.) (if (ch == -1) )
  1577.      Added fix by Erik to R_InitPlanes()
  1578.  
  1579. Ideas:
  1580.       I found I can run multiple DOSDooms in Windows95.  By writing a network driver
  1581.        that can link them all I can test network code.
  1582.  
  1583. ----------------------------------------------------------------------------------------------------------------------------
  1584. 3-9-98
  1585. ----------------------------------------------------------------------------------------------------------------------------
  1586. Changes:
  1587.      Joystick/Mouse code combined within DOSDoom, you can individually assign
  1588.        a joystick/mouse axis to a function.  Also support for a hat switch.
  1589.        Hey, so my brother bought a Wingman Warrior, and I just had to make it
  1590.        work somehow...
  1591.      Removed the wait at the start:  Should load as fast as possible. :-)
  1592.      Changed the way SFX pitching works
  1593.      P_Ceilng.c + P_Floor.c rewritten for DDF
  1594.      P_Enemy.c Lines.DDF breaks end of level special effects, ie, when you kill
  1595.        both Barons at the end of episode 1, the walls come down to allow you to
  1596.        finish the level.  Fixed this.
  1597.      P_Saveg.c Changed for Lines.DDF.
  1598.      P_Spec.c Lines.DDF :)  Shooting/Walking/Pushing lines all call P_ActivateLine
  1599.        to determine what happens
  1600.      P_Switch.c push special line calls P_ActivateLine.
  1601.  
  1602.      When activating a special line, walking can now cause a switch to change texture.
  1603.      This could lead to interesting effects, eg walk onto a hot plate, and the lights
  1604.      around it light up.
  1605.  
  1606.      R_Defs.h Seperate pointer for ceilings/floors/lights.  A sector can now have
  1607.        all three at once.
  1608.  
  1609.      P_Doors.c/P_Plats.c No longer needed.  Functionality is in p_ceilng.c/p_floors.c
  1610.  
  1611. New Stuff:
  1612.      Added a get boolean func to DDF
  1613.      Lines.ddf file
  1614.      Added support for looped SFX to the sound code.
  1615.      Options in m_option.c to choose analogue binding
  1616.  
  1617. Bugs Fixed:
  1618.      DDF_Main.c: In the sprite list, NULL terminator was omitted
  1619.                  GetSound func: error made helpful.
  1620.                  Found splitstateinfo, version m is already fixed :-)
  1621.      This won't be a bug until we move to the next WIP of Allegro, but fixed it
  1622.        anyway in i_music.c concerning finding the end of a midi song
  1623.      A bug in p_map.c after I noticed Skulls slamming into boxes of rockets.
  1624.  
  1625. TODO:  Stuff that should be addressed:
  1626.      DOSDoom is slower than it ever was.  My P2 starts struggling at 640x400. (30fps)
  1627.      This shouldn't happen, but comparing with Chi's framerate table, there isn't too
  1628.      much difference.
  1629.      MMX + Sound don't mix.
  1630.      P_Ceilng.c and p_floor.c are close enough to be merged into one file.
  1631.      Lots of visplanes/vissprites could slow down DOSDoom.  Suggest change sprite's
  1632.        linked list to a heap, visplanes to a hash table.
  1633.  
  1634. ----------------------------------------------------------------------------------------------------------------------------
  1635. 31-8-98
  1636. ----------------------------------------------------------------------------------------------------------------------------
  1637. Notes to self:
  1638.      Crushing ceilings stop 8*fracunit above floor
  1639.      fastCrushAndRaise ceilingspeed = 2 * ceilingspeed
  1640.      doors rise to -4 * frac below ceiling
  1641.      blazing door speed = 4 * VDOORSPEED
  1642.      linedef special 53 is now buggered with respect to demos
  1643.      MMX doesn't work with sound.
  1644.      Dosdoom is slow
  1645.      Grill Andy about leaving limits in DDF :-)
  1646.  
  1647. TODO:
  1648. Linedefs.ddf
  1649.      linedeftype 53
  1650.      combine floors/ceilings.
  1651.  
  1652. Misc
  1653.      SFX - Chainsaw stops when oof sound is played
  1654. ----------------------------------------------------------------------------------------------------------------------------
  1655. 31-7-98
  1656. ----------------------------------------------------------------------------------------------------------------------------
  1657. Bugs Fixed:
  1658.      d_debug.h: Z_CheckPointer(p) checks a pointer returned from Z_(Re)Malloc
  1659.      d_items.c: Deathstate.  Had to fix this to get a test version running;
  1660.        still crashes on barrels :-(
  1661. New Stuff:
  1662.      DDF Switchs and Wall/Flat Animations - changes in
  1663.        ddf_anim.c ddf_swth.c p_spec.? p_switch.c ddf_main.h ddf_locl.h
  1664.      The disk icon that appeared when DOOM was loading stuff is back.
  1665.        i_video.c, w_wad.c
  1666.  
  1667. Changes:
  1668.      Episode 3 bunny is fixed.
  1669.      Sound volume dynamic range changed from 0 - 240 -> 0 - 255
  1670.      Changed Cheat inputs: Music Change!\nEnter Music Name: etc...
  1671.        Music cheat accepts RUNNIN instead of D_RUNNIN; E1M1 instead of D_E1M1
  1672.      User input from messages in a different colour.
  1673.      Options menu changes: M_CalibrateJoystick etc functions can calibrate the
  1674.        joystick from within DOSDoom
  1675.      F5 (used to be change Detail; not implemented) now brings up options menu.
  1676.      R_bsp.c r_segs.c r_plane.c couple more error checks made, skytexture can be
  1677.        animated now. :-)
  1678.      z_zone.c: detect if OS failed memory allocation attempt.
  1679.  
  1680.  
  1681. ----------------------------------------------------------------------------------------------------------------------------
  1682. 21-7-98
  1683. ----------------------------------------------------------------------------------------------------------------------------
  1684. New Stuff:
  1685.      Z_CheckPointer(p) in d_debug.h.  Checks a Zone pointer.
  1686.      V_ClearPageBackground(int x): clears the space around a scaled pic.  Doesn't blank the
  1687.        whole screen, just the border left when drawing a pic. Example:
  1688.        +---------------------------------------------------+
  1689.        |***************************************************|
  1690.        |***************************************************|
  1691.        |***+-------------------------------------------+***|
  1692.        |***|                                           |***|
  1693.        |***|                                           |***|
  1694.        |***|                                           |***|
  1695.        |***|           Scaled Pic.                     |***|
  1696.        |***|                                           |***|
  1697.        |***|                                           |***|
  1698.        |***|                                           |***|
  1699.        |***+-------------------------------------------+***|
  1700.        |***************************************************|
  1701.        |***************************************************|
  1702.        +---------------------------------------------------+
  1703.        The * bits are all blanked.
  1704.        x is the screen to blank, it is substituted directly into screens[x]
  1705.         (Needed for intermission)
  1706. Changes:
  1707.      Blood is no longer a slider, but a toggle.
  1708.      Removed quit messages limit.  Again.  Andy was using #define NUM_QUITMESSAGES,
  1709.        but I count them dynamically.  I also don't see any problem with
  1710.        "Don't quit now. We're still spending you money."
  1711.      Removed Ad from startup.
  1712. Bugs Fixed:
  1713.      Blood floating in air when a lift goes down.
  1714. Limits Removed:
  1715.         none. Sorry.
  1716. Limits remain:
  1717.     openings:  used like malloc system.  Resizing it invalidates a lot of pointers :-(
  1718.         events:       ring buffer.
  1719.         maxplayers: Tons of stuff depends on this.
  1720.         braintargets:  Possible.
  1721.         basedefault:   used once.
  1722. Known Bugs:
  1723.         Somewhere in visplanes.  R_MapPlane gets passed 65535.  Only occurs with
  1724.           large heapsizes, and hi-res.
  1725.         True3DGameplay can cause blood to float upwards, and crashes to dos when
  1726.           using the chaingun.
  1727.         IDFA doesn't give you any form of shotgun.
  1728.         Bunny scene isn't scaled.
  1729. ----------------------------------------------------------------------------------------------------------------------------
  1730. 10-7-98
  1731. ----------------------------------------------------------------------------------------------------------------------------
  1732. Changes:
  1733.     Savegames are saved to the savegame directory.  Number of savegames changed to 65536
  1734.         Max Number of Screenshots changed to 10000
  1735.         Added a backup plan for flats in wadfiles.  Fix gothic2.wad
  1736.         Begin preparation for dynamic screen res changing.
  1737.         M_StartMessage made global, use for things that used to be errors, but
  1738.          can be resolved, eg wrong demo version.  Puts a message in the middle
  1739.          of the screen (like the quit messages.)
  1740.  
  1741. Bugs Fixed:
  1742.     dosdoom.wad is now loaded after main wad, allowing patches such as titlepic.
  1743.         midi music fixed. (Thanks to Capt Mellow for pointing this out)
  1744.  
  1745. Limits removed:
  1746.     Demo recording. (-maxdemo is now ignored)
  1747.         Savegame size.
  1748.  
  1749. Limits remain:
  1750.     openings:  used like malloc system.  Resizing it invalidates a lot of pointers :-(
  1751.         events:       ring buffer.
  1752.         maxplayers: Tons of stuff depends on this.
  1753.         braintargets
  1754.         basedefault
  1755. ----------------------------------------------------------------------------------------------------------------------------
  1756. 23-6-98
  1757. ----------------------------------------------------------------------------------------------------------------------------
  1758.  
  1759. Limits Removed:
  1760.     Clipsegs.  I think this may fix ddbug12.wad crashing :-)
  1761.  
  1762. Changes:
  1763.     Added a line to the idinfo cheat showing how much memory is allocated for how many visplanes/vissprites/drawsegs/clipsegs.
  1764.           Say the number shown for visplanes is 128.  We have allocated enough memory for 128 visplanes.
  1765.         Wrote a C version of the pseudo code to build a block map.
  1766.     Blockmap is now an array of ints, not shorts, to aid building larger maps.
  1767.         DOSDoom Version is now in hex.  This allows versions such as 0.65a for an alpha release.
  1768.         DOSDoom Version updated to 0.65
  1769.  
  1770. Bugs Fixed:
  1771.     Fixed a bug in the visplanes limit.
  1772.         Dropped init allocation of drawsegs memory to 128 drawsegs, 'cause memory is now allocated dynamically.
  1773.         Blockmap load code was loading the pointers signed, changed to unsigned.
  1774.           This should fix runbuddy.wad.
  1775.         Allegro blit.  Now it blits the whole screen instead of just the bits that have changed.  Slow, but actually works.
  1776.         Bug in m_menu.c fixed whereby if you don't have the episode, the message wasn't printing, because the string array
  1777.           wasn't visibly global.
  1778.  
  1779. Known Bugs
  1780.     None :-)
  1781. ----------------------------------------------------------------------------------------------------------------------------
  1782. 13-6-98
  1783. ----------------------------------------------------------------------------------------------------------------------------
  1784. Eliminated Limits:
  1785.     maxintercepts
  1786.         maxspecialcross
  1787.         maxanims (in p_spec.c)
  1788.         maxlineanims
  1789.         v_res.c
  1790.           maxheight
  1791.           maxwidth
  1792.     Savegame buffer
  1793.  
  1794. Bugs Fixed:
  1795.     Skytexture bug for doom 2 missions 12 through 21
  1796.  
  1797.         Discovered a bug present in some limit removal: if limit is indexed with an int, it is ok; if indexed with a pointer,
  1798.           when the memory is Z_ReMalloced, the pointer will still point to the old place.
  1799.  
  1800.             Limits Fixed            Limits unaffected
  1801.         deathmatchstarts        activeplats
  1802.                 visplanes            activeceilings
  1803.                 vissprites                      wadfiles
  1804.                 drawsegs                        linespeciallist
  1805.         anims                switchlist
  1806.                 intercepts            buttonlist
  1807.                                                 maxspecialcross
  1808.                                                 maxwidth
  1809.                                                 maxheight
  1810. Changes:
  1811.     Removed a goto from r_bsp.c
  1812.         Changed the order wadfiles are loaded, Ultimate Doom wad is quite dodgy!
  1813.  
  1814.  
  1815. ----------------------------------------------------------------------------------------------------------------------------
  1816. 13-6-98
  1817. ----------------------------------------------------------------------------------------------------------------------------
  1818. Created this log
  1819.  
  1820. After a long and arduous :) process, applied Andy's updates.
  1821.  
  1822. Eliminated limits:
  1823.     deathmatchstarts,
  1824.         acitveplats,
  1825.         activeceilings,
  1826.         visplanes,
  1827.         vissprites,
  1828.         drawsegs,
  1829.         wadfiles,
  1830.         linespeciallist,
  1831.         switchlist,
  1832.         maxlineanims,
  1833.         buttons
  1834.   Note that elimanting limits means they are dynamically allocated.  This means that where you used to get an overflow,
  1835.     it will just eat more memory (and keep working.)  The limit now depends on the heapsize and available memory.
  1836.     The problem is this: if you go from a large level that has extended the limits, to a small level then this extra
  1837.     memory is wasted (not leaked though.)  Between each level, the memory should be downsized to its default value.
  1838. Limits still left:
  1839.     maxplayers: leave till last
  1840.         maxnetnodes: leave till last
  1841.         maxspecialcross
  1842.         maxintercepts
  1843.         maxanims
  1844.         maxlightscale, maxlightz - this might be non removeable, linked with colourmaps
  1845.         r_bsp.c
  1846.           maxsegs - this might be non removeable
  1847.         v_res.c
  1848.           maxheight
  1849.           maxwidth
  1850.  
  1851. Bugs Fixed:
  1852.     sfx volume bug
  1853.         sfx length bug
  1854.         gamemission bug
  1855.         supershotgun in doom 1 bug (a different (better?) way to Andy ;-)
  1856.  
  1857. Changes:
  1858.     d_main.c::IdentifyVersion() made more advanced.  Uses a loop instead of hard coding
  1859.         w_wad.h   functions made __attribute__((const)) to aid gcc's optimisation :-)
  1860.         sprites in a pwad done a different way
  1861.         flats are mixed properly
  1862.     moved i_net.h djgpp/i_net.h -- note you will have to do this manually as this patch
  1863.           can't fix that
  1864.  
  1865. New Stuff:
  1866.         gamemode = dosdoom.  This means that it will now load all the wads at once, and allow you to choose
  1867.           any episode from ultimate doom to doom 2.  Not tested with non ultimate doom, or plutonia/tnt, but
  1868.           should work. :-)  You can still use -doom -doom2 -tnt etc. to override this.
  1869.         Until DDF, the wad file location is found from dosdoom.cfg.  Change to the DDF get routine in
  1870.           d_main.c::IdentifyVersion() when it comes about.
  1871.         Texture files are mixed.
  1872.         Blood trails: increasing the tics for S_BLOOD3 means they stay on the floor, whereby you can track down
  1873.           your enemy by his trails of blood.  Check out what happens to anything facing a spiderdemon!
  1874.         In F_BunnyScroll, after the end is shot out, the background fades to black.
  1875.  
  1876. -----------------------------------------------------------------------------
  1877. 17-5-98 
  1878. -----------------------------------------------------------------------------
  1879. ** All changes have been made to the RHIDE project file **
  1880.  
  1881. Cleanup of functions + names.  NORMALUNIX removed.  Dehacked removed.
  1882.  strings.* tables.* sounds.* info.* => lu_str.* lu_math.* lu_sound.* lu_info.*
  1883.  allegvid.* multires.* optmenu.* mus.* mp3.* midi.*
  1884.    => i_allegv.* v_res.* m_option.* mus_mus.* mus_mp3.* mus_midi.*
  1885.  
  1886. Support for a dosdoom.wad: if you merge a doom 2 wad and an ultimate doom wad
  1887.  (mixing the texture resources of course) you get a dosdoom.wad.  This means
  1888.  misc changes throughout the source, ie gamemode == commercial to gamemission
  1889.  == doom.
  1890.  
  1891. To print stuff use I_Printf instead of printf or fprintf(stderr, )  The format
  1892.  is the same as printf, and it will also print to the debug file.  Also, in
  1893.  graphics modes, will print to the message line instead of 40x25 text (yuk!)
  1894.  
  1895. Use Debug_Printf to print to the debug file.  This only works with DEVELOPERS
  1896.  #defined,  if it is undefined Debug_Printf optimises to nothing.  It will print
  1897.  a report of the form FUNCTION: string to the debug file, automatically putting
  1898.  the function name in :-)
  1899. Doom's red status line at the top of startup has been implemented.  Shows
  1900.  DOSDoom version and DOOM compatibility version.
  1901. Skytexture on Floor and Ceiling in large sectors bug fixed.
  1902. Cleaned up some stuff in the sound code.
  1903. Number of Demos limit removed.
  1904. Changed mallocs to Z_Mallocs
  1905.  
  1906. -----------------------------------------------------------------------------
  1907. 4-5-98 
  1908. -----------------------------------------------------------------------------
  1909. Nearptr removed from djgpp/allegvid.c djgpp/i_main.c djgpp/i_net.c (correction
  1910.   of idea sent to Andy in d_net.c)  There was no good reason why DOSDoom runs
  1911.   with Nearptrs enabled, as it relies on __djgpp_conventional_base etc being
  1912.   constant
  1913. djgpp/i_system.c djgpp/i_video.c
  1914.   Clean up.  System functions put in i_system.c from i_video.c.  Timer changed
  1915.   from 200Hz to 35Hz. I_GetMilliTime removed (and it's use in hu_stuff.c changed
  1916.   to use I_GetTime)
  1917.   I_Quit uses puttext instead of nearptr
  1918.   I_GetEvent moved to i_system.c from i_video.c
  1919.   Fixed devparm problem in I_FinishUpdate
  1920.   Allegro startup code is now in I_Init
  1921. st_stuff.c
  1922.   Uses CD_Next and CD_Prev and CD_Play instead of accessing CD direct.
  1923. optmenu.c
  1924.   Added a slider for CD music volume.
  1925. s_sound.?
  1926. djgpp/i_sound.?
  1927. djgpp/mus.?           Handles Standard Music
  1928. djgpp/mus_mod.c       Handles MOD music
  1929. djgpp/mod.h
  1930. djgpp/mp3.?           Handles MP3 music
  1931. djgpp/libjgmod/*.*    Library of MOD functions
  1932. djgpp/libamp/*.*      Library of MP3 functions
  1933. linux/i_sound.c
  1934.   All new sound code :-)  Volume sent to low level routines now ranges from 1-255.
  1935. d_net.c
  1936.   Calls to music code in loops while waiting for a tick, to keep MP3 music fed.
  1937. z_zone.?
  1938.   Wrote a Z_ReMalloc routine.  Currently, there are a few optimisations to be made.
  1939.   (If the old size is larger that the new size - if MINFRAGMENT was reached or the
  1940.   block is to be reduced in size.)  Start removing all those limits!
  1941.  
  1942.  
  1943. Erik Sandberg's Log
  1944.  
  1945. 1998/12/18
  1946.  
  1947. Made 8-bit versions of Kester's R_DrawSpan16_KM and R_DrawColumn16_KM.
  1948.  
  1949. 1998/11/29
  1950.  
  1951. Optimised the 16-bit translucency algorithm.
  1952.  
  1953. 1998/11/28
  1954.  
  1955. Made the new teleport settings togglable from the menu. Fixed a few small
  1956. bugs.
  1957.  
  1958. 1998/11/08
  1959.  
  1960. Used the new translucency to improve the ColorXForm wipe algorithm. Also
  1961. created slow 16-bit versions of the new translucency routines.
  1962.  
  1963. 1998/10/29
  1964.  
  1965. Implemented a new translucency algorithm for 8-bit colour, and used it to
  1966. create a fading effect at teleportation.
  1967.  
  1968. 1998/09/11
  1969.  
  1970. Improved multires handling at startup: It now just does some first time stuff
  1971. like transtable inits, followed by a R_ChangeResolution call.
  1972.  
  1973. 1998/08/25
  1974.  
  1975. Added a -fast_startup parameter.
  1976. Fixed the alignment of the R_Draw*_id routines
  1977.  
  1978. 1998/08/24
  1979.  
  1980. Some minor cleanups
  1981.  
  1982. 1998/08/20
  1983.  
  1984. Added dynamic resolution changing.
  1985.  
  1986. 1998/08/14
  1987.  
  1988. Added a routine for run-time alignment in v_res.c. Changed r_span.S and
  1989. r_column.S to get aligned run-time.
  1990.  
  1991. 1998/08/13
  1992.  
  1993. i_system.c, i_system.h, v_res.c: Minor change in the cputype_t struct.
  1994. Corrected some incorrect detections. Added -list parameter (lists all
  1995. available routines).
  1996.  
  1997. Added R_DrawSpan8_id and R_DrawSpan8_id_Erik, and optimised
  1998. R_DrawColumn8_id_Erik further.
  1999.  
  2000. 1998/08/06
  2001.  
  2002. Minor change in the MMX routines: Stack is used instead of mmxcomm variable,
  2003. as a workaround for DJGPP's misalignment. Should speed up the routines on
  2004. Intel MMX processors by either 0% or about 50% (randomly), and generally
  2005. less on non-Intel MMX processors.
  2006.  
  2007. 1998/08/05
  2008.  
  2009. Fixed bug in original R_DrawColumn16 asm version and moved the routine to
  2010. r_column.S. Also simplified the screenwidth patching in r_draw2.c
  2011.  
  2012. 1998/08/05
  2013.  
  2014. New CPU checking system. Each known CPU type (486, Pentium, K6, Pentium II...)
  2015. now has its own struct telling its attributes (CPU name and which routines to
  2016. use). Each CPU-specific routine also has an own struct, telling its name,
  2017. location and MMX usage.
  2018.  
  2019. Added cmd-line options "-UseCol" and "-UseSpan" to choose drawing routine,
  2020. overriding the default. For example, -UseCol Rasem means that Rasem's asm
  2021. version of R_DrawColumn is used.
  2022.  
  2023. Files affected:
  2024. i_system.c: CPU detecting code, routine choosing
  2025. i_system.h: CPU structs
  2026. v_res.c: Actual modification of function pointers
  2027.  
  2028. 1998/08/05
  2029.  
  2030. Made the following .c files include their own .h files:
  2031. d_net.c
  2032. i_video.c
  2033. lu_str.c
  2034. m_argv.c
  2035. m_random.c
  2036. p_mobj.c
  2037. p_saveg.c
  2038. p_setup.c
  2039. p_spec.c
  2040. p_tick.c
  2041. rad_trig.c
  2042. r_bsp.c
  2043. r_draw1.c
  2044. r_draw2.c
  2045. r_main.c
  2046. r_plane.c
  2047. r_segs.c
  2048. r_things.c
  2049. (ie. added #include "p_mobj.h" in p_mobj.c, etc)
  2050. I do this because if any function prototype changes, and you forget to change
  2051. that in the .h file, you'll now get a warning. Else it would result in a bug
  2052. that may be hard to trace.
  2053.  
  2054. 1998/08/04
  2055.  
  2056. Converted id's original R_DrawColumn code to .S format. This is
  2057. self-modifying, which is very time-consuming on newer CPUs, but I guess it is
  2058. fast on a 486. Also made a further optimised version of it, optimised
  2059. according to the optimisation rules I know for 486. The names are
  2060. R_DrawColumn8_id and R_DrawColumn8_id_Erik, respectively.
  2061.  
  2062. Files affected:
  2063. r_column.s: The routines
  2064. r_draw1.h: Prototypes
  2065.  
  2066. 1998/08/01
  2067.  
  2068. Optimised R_DrawColumn8 for Pentium and Pentium MMX. Moved all inline asm
  2069. routines from r_draw1.c to r_column.s and r_span.s, and simplified the system
  2070. for run-time screenwidth patching in r_draw1.c.
  2071.  
  2072. Files affected:
  2073. r_column.s
  2074. r_span.s
  2075. r_draw1.c
  2076. r_draw1.h
  2077.  
  2078. 1998/07/24
  2079.  
  2080. Optimised R_DrawSpan8 for MMX processors (K6, PII, PMMX).
  2081.  
  2082. 1998/07/05
  2083.  
  2084. Optimised R_DrawColumn8 for K6/PII, using MMX instructions.
  2085.  
  2086.  
  2087. p_user.c
  2088. 1998/12/07 - Added jetpack sounds in wad & code to implement them.
  2089.