10/12/98 Rand's seg adjust proved to be the better after measuring, so my experiment was removed in favor of his code. Fixed a calculation in the blockmap that now allows zero guardband around level, hence slightly smaller blockmaps. 10/8/98 Replaced brute force internal blockmap calculation with one much faster. Difference on a 64K blockmap is 5 sec vs 32 sec. Wrote a slightly different implementation of the seg adjustment idea of Rand's that uses a bit more accurate arithmetic and provably flattens all vertices to the line they came from. Rand's code is more elegant, but I believe this is slightly better. 9/23/98 Fixed a bug that didn't allow trailing backslashes in parameters for the -save option. 9/12/98 DETH can now be put in the path and work anywhere. The DETH.INI in the local directory is still required - but can now load the pwads, so typing DETH in a directory can open the wad developed there automatically (along with any resource wads it requires). This makes creating shortcuts to wad sessions far simpler - just set the working directory on a shortcut to DETH.EXE, and set the mode to full screen. CMAPTOOL now generates a BMP consisting of an array of squares of color not a spectrum of vertical lines, making editing the palette by hand easier. It also supports +V and -V for only modifying the invuln colormap or not modifying the invuln colormap. 9/11/98 Thanks to Rand's analysis of the underwater fireball medusa problem -- tracking it down to there being far more sprites active than there should have been, was able to trace the problem to a mistaken parameter to R_AddSprites in R_Subsector in R_BSP. The temporary sector used to fake the heights underwater was being passed and validcount was not working to stop the sprites from being added once per subsector instead of once per sector. Fixed a bug in R_SEG's R_PointToDist that allowed division by zero if the player was exactly on a vertex, and the node builder worked a certain way, causing segviol on startup. Fixed the sole call to it to avoid doing so when division by zero would result. 9/8/98 Removed 1S wall escape. Was causing problems when the player was moved by monster attacks and was not sufficient to solve line-line teleporter problem. 9/6/98 Added a logical console output routine that all console output is directed thru. Each physical output is tagged with by a class identifer from: LO_INFO informational header - no new information present LO_CONFIRM informational - but outputs information that confirms a setting LO_WARN an error, but not too serious - execution continues LO_ERROR an error, may be serious enough to abort - execution continues LO_FATAL an error, BOOM will exit LO_DEBUG used for outputs that are for debugging LO_ALWAYS used to tag outputs that should always be shown, like build date Which outputs are allowed to pass to standard output, and which are sent to the console when standard output is redirected is controllable by two masks. These masks can be set by command line switches -cout and -cerr, each followed by a string of letters from ICWEFDA to indicate which classes pass to output and error console resp. Added files LPRINTF.C and LPRINTF.H. Modified G_GAME.C, HU_STUFF.C, AM_MAP.C, D_DEH.C, D_NET.C, I_SOUND.C, I_SYSTEM.C, M_MENU.C, MMUS2MID.C, I_MAIN.C, S_SOUND.C, W_WAD.C, WI_STUFF.C, R_MAIN.C, R_DATA.C, M_MISC.C, D_MAIN.C, MAKEFILE. Modified BOOM.TXT to change "No Limits" to "No Static Limits". 8/28/98 Added right shift to "into/outof wall" calculation to avoid overflow in FixedMul. This was causing 1S walls to be walkable thru on occasion. Also added compatibility flag to change. All in P_MAP.C. 8/14/98 Restricted escape from 1S walls to players until I can figure out why it allows monsters to embed themselves in walls while walking around. Fixed IDCLEV to not accept 33 or 34 in DOOM2. Leads to crash if allowed. Affected M_CHEAT.C Fixed "Raise to shortest texture linedefs". Now the regular linedef triggers raise to actual texture height, not min(64,textureheight) unless compatibility mode is set. Generalized linedefs always raise to actual texture height now. Problem was caused by missing textures being represented by texture 0, AASHITTY, which had height 64. Affects P_SPEC.C and P_FLOOR.C. 8/13/98 Fixed tendency of monsters to get stuck in doorways, flagged by compatibility global. P_ENEMY.C affected. 8/9/98 Imported ZDoom's fix to the openings limit removal to R_SEGS.C 8/8/98 Changed behavior of being stuck in a 1S wall so that motion out of the wall is still allowed. This "fixes" the line-line teleport problem and the DM start embedding problem. P_MAP.C affected. Added the Flicker special to P_SAVEG, where it was left out when the special was added to DOOM II. P_SAVEG.C and P_SPEC.H affected. Added better initialization of scrolling message display to HU_STUFF.C 8/7/98 Fixed update of HUD so it occurs on every refresh to avoid problems caused by lag on slower systems. HU_STUFF.C affected 7/14/98 Corrected padding size in G_GAME.C to allow for 128 bytes in v200 demos and 64 bytes in v201 and later demos. Fixed EV_BuildStairs routine in p_floor.c to use the buggy code order in compatibility mode, and the new order otherwise. This fixes some problems with existing wads that depended on the old buggy order. Fixed the comment for MIDItoMidi in MMUS2MID.C 6/19/98 Fixed rising stairs so that the step height does not increase twice as much when redirected by a moving step. 6/3/98 Fixed misspelling in chat string variable in M_MISC.C. 6/1/98 Fixed bug in switches caused by inadvertant deletion of sidedness check, in P_SWITCH.C 5/24/98 Added documentation on predefined lumps to BOOMREF.TXT 5/23/98 Fixed a bug in the numeric model texture changers where the loop variable was being modified in the loop thru adjacent sectors. This could cause crashes and missed changes. 5/20/98 Removed conditional from net testing code to make sources completely done outside bugs discovered after this. D_NET.C, D_NET.H, M_MISC.C. 5/17/98 Fixed a bug in lights to max neighbor that would cause it to set all tagged sectors to the maximum lighting near the first sector searched. 5/16/98 Added temporary config variable, "oldnetcode" to M_MISC.C to select between Lee and Stan's version of net code so both can be tested at once. Removed LEESFIXES from makefile. Formatted D_NET.C and I_NET.C. Fixed "may change without notice" paragraph about generalized linedefs in BOOMREF.TXT. 5/12/98 Finished source formatting/documenting for: p_floor.c am_map.h hu_lib.c p_switch.c am_map.c hu_lib.h p_genlin.c hu_stuff.c p_plats.c mmus2mid.c hu_stuff.h p_ceilng.c mmus2mid.h st_lib.c p_doors.c st_lib.h p_lights.c Moved wind/thing controller from 4001/2 to 5001/2 and made corresponding change to documentation and utilties. Added new ENDBOOM with new URL, and made change in text files. Fixed a bug of uninitialized delay in generalized close/delay/open doors affecting P_DOORS.C. Fixed a possible crash due to dereferencing a sector backside that didn't exist in stair building in P_FLOOR.C. Fixed an error in donuts allowing an already active pool to have another thinker started on it in P_FLOOR.C. Added Rich Nagel's DIGMID instructions to SNDDRVR.TXT 5/3/98 Formatted P_SPEC.C and P_SPEC.H. Fixed a bug in getNextSector that returned the same sector as passed when a line referenced to that sector on both sides existed. 4/29/98 Added new ENDBOOM lump by Ty to INFO.C 4/28/98 Fixed bug in message review display that caused overwritten characters and incomplete erasure of lines when screen not fullsize. Files affected: HU_LIB.H HU_LIB.C HU_STUFF.C 4/26/98 Fixed bug in status bar display when New Game started after a DM demo in which spy mode had been used. G_GAME.C affected. Re-re-removed IDK cheat from ST_STUFF.C as it was causing a compiler error and no justification had been made for it. 4/25/98 Fixed bug Ty spotted in WI_STUFF.C that was preventing animated backgrounds in non-DOOM II versions. 4/24/98 Added DOOM support to MUSPUT.EXE. Fixed a bug in secret exits for non-commercial games. The wolf level check was incorrectly being applied to them, and was preventing their use. Files affected G_GAME.C Fix a bug in the sprite loading that caused the presence of an A0 lump to clear the rotate flag on the sprite definition, even when it wasn't used because the rotations were already defined. Files affected R_THINGS.C Make the text color translation tables predefined lumps to support palette changes in TCs better. Files affected: V_VIDEO.C V_VIDEO.H INFO.C D_MAIN.C 4/23/98 Add exit color line to automap, default not shown. Affects M_MENU.C, M_MISC.C, AM_MAP.C Add endian macros, SHORT, LONG to BMP screenshot routine in M_MISC.C 4/22/98 Fixed a lockout problem in HU_STUFF.C, when the Setup changed the number of messages to 1 when the message review was displayed. This would prevent any messages from being displayed. Now if hud_msg_lines is 1 or less, message_list is cleared to false, preventing this. 4/21/98 Added "-dumplumps file" switch to BOOM command line that writes the predefined lumps out as a wad, where authors can extract them to lumps for modification or understanding them enough to replace them File affected: INFO.H INFO.C D_MAIN.C BOOM.TXT 4/20/98 BOOM.TXT updated for -iwad parameter changes. Fixed printout of IWAD found: with blank string when IWAD not found. Files affected: D_MAIN.C Added two digit printout to support v2.01 rather than v2.1 when version was 201 in VERSION.H Files affected: D_MAIN.C Upped BOOM version to 201 in VERSION.H 4/19/98 Rewrote the IWAD search to be more flexible and to eliminate some bugs still present in it. The -iwad parm on the command line can now be one of three things. The full pathname of the IWAD (.WAD optional), the directory in which a standard IWAD is to be found, or the filename of a standard or custom IWAD that is to be loaded (.WAD optional). The environment variables DOOMWADDIR and HOME can also now specify a full IWAD pathname if desired. If a filename for a custom or standard IWAD is specified thru -iwad, then it replaces any filename in DOOMWADDIR or HOME during the search. Examples: BOOM Searches current dir, exe dir, DOOMWADDIR dir or path, HOME dir or path for a standard iwad or one fully specified in DOOMWADDIR or HOME BOOM -iwad doom Tries to locate doom.wad in current dir, exe dir, DOOMWADDIR dir or HOME dir BOOM -iwad c:\doom2 Looks for any standard iwad in c:\doom2, reports not found if none BOOM -iwad c:\doom_se\doom Reports not found unless c:\doom_se\doom.wad exists Once the IWAD file is located it is checked for an IWAD tag in the header, and the retail, registered, shareware, or commercial nature of the IWAD is determined from which levels are present. All levels corresponding to the mode must be present for detection, though the search allows Map31 and Map32 to be missing in the commercial version for the german edition. The french language version is detected from the IWAD filename doom2f.wad. 4/16/98 Updated BOOM.TXT, BOOMDEH.TXT Updated DOOM17.DAT with new teleporters Added release ENDBOOM to INFO.C Fixed leak in IdentifyVersion in D_MAIN.C Removed call to AM_clearMarks in AM_levelInit, and put it in G_InitNew, so that it is not cleared on map_key press whenever the level has changed, even if the save loaded contains marks. 4/14/98 Added 8 teleport types to P_SPEC.H and P_SPEC.C. Monster only silent variants and line-line reversing teleports. The reversing teleports have problems, but the regular ones share them. 4/12/98 Cleared markpointnum in G_DoWorldDone to avoid carrying over marks from one level to the next. 4/11/98 Fixed IDMUS00 to not crash 4/10/98 Fixed string/int check in M_MISC.C by adding a field to the default structure to specify this, rather than relying on the default value's size to determine which. 4/7/98 Skipped MF_NOBLOCKMAP things in P_CheckSector, as the original routine didn't see these - they weren't in the blocklinks lists. This brings the bullet puffs back in Map06. Fixed elevators so if floor or ceiling is blocked, other doesn't move 4/6/98 Removed conditional LEESFIXES from P_SPEC.C and P_MAP.C Fixed background color of automap to default to 247, not 0 4/5/98 Fixed failure of crushers to change switch on second activation in P_CEILNG.C P_GENLIN.C and P_SPEC.H Added STCFN096(`) as predefined lump in INFO.C , enabled it in HU_STUFF.C Changed P_CheckSector to always call P_ChangeSector until segviol problem understood 4/3/98 Switched automap back to disabling features on color 0, not -1 in AM_MAP.C Added generalized keyed doors to automap display Fixed lower ranges for automap in M_MISC.C Removed upper limits on mouse sensitivities in M_MISC.C and clamped display of thermometer in M_MENU.C Fixed breaking of list in P_CheckSector in P_MAP.C by keeping track of two nodes after current instead of just one. 4/2/98 Made corrections to BOOM.TXT Made additions and corrections to LINEDEFS.TXT, renamed to BOOMREF.TXT 4/1/98 Added pre-release ENDOOM to INFO.C, used it in I_SYSTEM.C Added last few things to BOOM.TXT Fixed Seg Viol in P_CheckSector caused by passing NULL thing pointer to PIT_ChangeSector. Not sure why this pointer is NULL, but I'm not passing any more that are. P_MAP.C affected. Fixed problem with keyed doors giving away their type when shot, even when they weren't keyed doors. Fixed corresponding problem for walkove doors. P_SPEC.C affected. 3/31/98 Fixed problem with stair builders, normal and generalized, namely they never set the type field in the thinker and could fall into the texture change cases of T_MoveFloor. P_FLOOR.C P_GENLIN.C P_SPEC.H affected. 3/30/98 Added option to make screenshots in .BMP format to account for inability of MSPaint to display .PCX correctly. New config variable screenshot_pcx (1 by default) controls which. M_MISC.C affected. Made some revisions to LINEDEFS.TXT and BOOM.TXT. Added BOOM.TXT to CVS system. Added support for "not-deathmatch" and "not-coop" thing flags in P_MOBJ.C. 3/29/98 Fixed use of 2S flag rather than two-sidedness in EV_DoDonut in P_SPEC.C Fixed glitch in new crusher check routine in P_MAP.C that was using the next pointer from a node after its removal from touching_thinglist. Fixed lack of sound and switch change on second activation of instant toggle linedefs in P_PLATS.C 3/27/98 Fixed skies in Ultimate DOOM, so they wouldn't all be SKY1. The Linux port had confused pack_tnt and pack_plut with gamemodes, which were matching the gamemode retail. They also forgot to account for DOOM and Ultimate DOOM completely in G_DoLoadLevel. Also removed the redundant sky setting code in G_InitNew. Files affected G_GAME.C 3/26/98 Changed escape character in hud messages strings for color changes from \ to actual escape \x1b, in order not to mess \ in path strings printed out with messages. Files affected HU_LIB.C HU_STUFF.C 3/25/98 Fixed problem that duplicated IWAD search in . in D_MAIN.C Fixed bad value for defaultskill default in M_MISC.C 3/24/98 Fixed "looking for iwad files in..." message to read "looking for IWAD in...". Added config file param default_skill 1-5 for setting your skill preference once and for all. If -skill is used it overrides the setting temporarily. If you set skill with the menu, default_skill remembers the setting. Files affected: D_MAIN.C G_GAME.C M_MENU.C M_MISC.C DOOMDEF.H Added parms -iwad and -save to the command line. -iwad is tried before all other choices if present, otherwise the order remains the same. The -save parm is check for existence and being a dir. If either fails, or -save is not present the iwad directory is used. Files affected D_MAIN.C Moved the switchlist and animation table into predefined lumps, SWITCHES, and ANIMATED that can be replaced by wad authors. Created a utility SWANTBLS.EXE that will turn a text file into two .LMP files suitable for insertion in a PWAD. Created the default text file source DEFSWANI.DAT. Text file format: # # This file is input for SWANTBLS.EXE, it specifies the switchnames # and animated textures and flats usable with BOOM. The output of # SWANTBLS is two lumps, SWITCHES.LMP and ANIMATED.LMP that should # be inserted in the PWAD as lumps. # #switches usable with each IWAD, 1=SW, 2=registered DOOM, 3=DOOM2 [SWITCHES] #epi texture1 texture2 1 SW1BRCOM SW2BRCOM 1 SW1BRN1 SW2BRN1 1 SW1BRN2 SW2BRN2 1 SW1BRNGN SW2BRNGN 1 SW1BROWN SW2BROWN 1 SW1COMM SW2COMM ... #animated flats, spd is number of frames between changes [FLATS] #spd last first 8 NUKAGE3 NUKAGE1 8 FWATER4 FWATER1 8 SWATER4 SWATER1 8 LAVA4 LAVA1 ... #animated textures, spd is number of frames between changes [TEXTURES] #spd last first 8 BLODGR4 BLODGR1 8 SLADRIP3 SLADRIP1 Files affected: P_SPEC.H P_SPEC.C P_SWITCH.C 3/22/98 Added new linedef flag, ML_PASSUSE, bit 9, value 512 that enables a push action to pass thru the line, allowing several linedef actions to take place from one push. Fixed crash in DETH on inserting vertex or thing before anything else. Files affected: DOOMDATA.H P_MAP.C 3/21/98 Made cheats individually disabled for netgame/demorecord so that IDMUS can still be used in those conditions. Files affected: ST_STUFF.C 3/20/98 Made ceilings more orthogonal by using shortest UPPER texture around in the move by shortest texture type. Files affected: P_SPEC.H P_SPEC.C P_GENLIN.C 3/19/98 Changed DETH to reflect combination of sludge and ice, removed wind thing flags (too early - sorry!) fixed crash clicking outside a menu, increased limits on rectangle size and curved stair angle. Used new mobj list structures to improve crusher code Changed p_spec.h to reflect combination of ice and sludge effects. Fixed indirection error in d_deh.c causing exception in MS-DOS. 3/18/98 Fixed bug in idmusnum handling. Restoral from idmusnum=-1 as a byte in savegame was incorrectly converted to 255 as an integer, causing an abort when S_ChangeMusic tried to load it (it checks for -1). Fixed hang in I_Init and incorrect key shift/LED handling. Was a bug in Allegro, a failure to disable interrupts around a low level call to a keyboard io routine - causing 2E6 retries, hence the hang, and the lack of function when it didn't succeed. Faster systems (like Lee's) would not see this or be intermittent due to less time spent in interrupts. Files affected: G_GAME.C I_SYSTEM.C in Allegro: KEYBOARD.C 3/17/98 Added FRG line in place of KEY line in HUD when deathmatch true. Display shows the top four frag counts with highest at left, each number in the player's color. Fixed failure to restore IDMUS selected music. MUSIC reverts to original on end of level or IDCLEV, otherwise IDMUS selection remains in force. Fixed crash from space after IDMUS cheat. Files affected: ST_STUFF.C HU_STUFF.C G_GAME.C D_MAIN.C S_SOUND.C 3/15/98 Added 2 more save/load slots for 8 total. Added pure texture change type, trigger model, on 215-218 types. Added pure texture change type, numeric model, on 78,239-241 types. Files affected: P_SPEC.H P_SPEC.C P_SWITCH.C P_FLOOR.C COMMON.CFG DOOM17.DAT DOOM19.DAT P_GENLIN.C M_MENU.C 3/14/98 Made the 1 and 8 in the HUD weapons display show green when in possession of berserk power-up. Added oldspecial type to floormove_t and ceilng_t so that texture changes copy both the old and new special fields, thereby avoiding bugs in the automap display and possibly other places. Added generalized sector types. Limited lighting types to looking at lower 5 bits, added damage and secret detection from generalized bits. Fixed automap to recognize new secret bits. Created masks for new damage, secret, ice, sludge and wind bits. sector type bit assignments: Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 wnd slg ice sec damage lighting Added instant toggle floor linedef type between floor and ceiling height to support scrolling changers for Lee. Also can be used for building binary combination locks. Files affected: P_SPEC.C P_SPEC.H P_SWITCH.C P_PLATS.C COMMON.CFG DOOM17.DAT DOOM19.DAT P_LIGHTS.C AM_MAP.C P_CEILNG.C HU_STUFF.C 3/13/98 Found and fixed problem with delta-time accumulation in MMUS2MID.C, probable cause of "scrambled tracks" reports. Did more numeric overflow protection concerning shortest texture surrounding in the case of no surrounding textures. Files affected: P_SPEC.C P_FLOOR.C P_GENLIN.C 3/12/98 Provisionally removed linedef #s 211-218 and 223-226 as no longer being needed to support floor height based scrolling. These are intended to allow more room for vector based effects within DCKs range of 0-255 for linedef types. Changed MININT and MAXINT limits in P_SPEC.C in highest and lowest surrounding floor/ceiling searches to 32000*FRACUNIT or -32000*FRACUNIT to avoid wrapping heights around during floor/ceiling motion. Files affected: P_SPEC.C P_SWITCH.C P_GENLIN.C P_FLOOR.C COMMON.CFG DOOM17.DAT DOOM19.DAT 3/9/98 Lights in tagged sector to max neighbor on fully open and to min neighbor on fully closed extended to generalized manual doors. Added map_secret_after option to hide secrets on the automap until after they are found. Fixed glitch in cycling HUD where the medium display would flash in lower left corner while switching to scattered display. Files affected HU_STUFF.C 3/8/98 Fixed length of local string variables for ammo etc in HUD drawer that were no longer adequate post-DEH. Allowed -1 for disabling in mouse bindings and automap colors in config file. Wrote program to output config file keycode, when key is struck. Added generalized substitution syntax to CLED. Supports changing old lindef types to new and any other level object fields as well. Modified Allegro to not use floating point in AWE32 midi driver interrupt. Other option is to remove all floating point from our code, now and in future. Fixed bug in HUD that caused removed keys to remain in display. Revised DETH to 4.08, now includes thing flags for WIND type, plus not-single, not-DM, and not-coop flags (not implemented in engine yet). Files affected HU_STUFF.C, M_MENU.C, M_MISC.C 3/7/98 Switched HUD keys display to use status bar graphics for keys. Allowed room for 2 more digits in automap coordinate display. File affected: HU_STUFF.C 3/6/98 Renumbered linedefs 300,301 to 248,249 and linedefs 310-315 to 250-255 so that DCK can use them and save them. Fixed erroneous range for gamma correction. Files affected P_SPEC.C, M_MISC.C 3/5/98 Fixed inability of monsters to use new teleporters Affected P_SPEC.C, P_SWITCH.C Added some more text to SNDDRVR.TXT to try to clarify what needs to be done. Affected SNDDRVR.TXT Fixed some problems in initialization of mus to midi converter, no change in behavior detected here though. Affected MMUS2MID.C 3/4/98 1) Checking range of boom.cfg variables, and OPTIONALLY outputting a help string for each. The help strings can be disabled thru the new variable config_help. When you add a new variable you can assign its minvalue and maxvalue fields in the structure, right after the defaultvalue, and place a help string after those. The symbol UL as a limit will allow the range not to be checked for either minvalue or maxvalue or both. Affected: m_misc.c 2) Fixing a bug in HUD that made it not react to F5 in full screen Affected: m_menu.c 3) Redo of coordinate display in automap to stack X,Y,Z over each other in upper right of screen, using old font. Affected: hu_stuff.c 4) Addition of TRAN50 and TRAN66 lumps to info.c, they are not called, just implemented as predefined lumps. Affected: info.c 5) Fixing the stairs bug Jou pointed out, multiple tagged sectors wouldn't always rise do to corruption of loop variable thru tagged sectors. Affected: p_floor.c, p_genlin.c 6) After reading sound docs in Allegro again last night have put code in I_SOUND.C to first detect each device, and then reserving voices for it according to the number of voices returned by each call, THEN calling install sound. Music is slightly improved on my system, hoping this will affect others similarly, and get rid of the install_sound errors which Allegro says can be caused by calling install_sound when the default number of voices is greater than the card can provide. The sound volume is somewhat down from before, but I still want to try this experiment. The variable detect_voices in BOOM.CFG allows you to return to old setup by setting it to 0. 1 is default. Affected: i_sound.c 7) Made some experimental changes to HUD. Distributed the display over the screen as part of the F5 cycle, removed the readyweapon brackets, added weapon 1, and reduced the update lag. Affected: m_menu.c m_misc.c hu_stuff.c 8) detect_midi_device and detect_digi_device turn out not to work with the autodetect code. Fixed the install of sound so that the detect_voices only happens in the case that specific values are input for music_card and sound_card. Affected: i_sound.c 3/3/98 Added ENDBETA as predefined lump in INFO.C and displayed it place of ENDOOM in I_SYSTEM.C 3/2/98 Added Rand's static help screen as a predefined lump in INFO.C and loaded and displayed it in M_MENU.C. Fixed a misplacement of the zero-tag trigger checks for generalized linedefs in P_SPEC.C and P_SWITCH.C. Fixed a failure to initialize the sector used to search for a model for numeric model changes in P_SPEC.C Removed #ifdef LEESFIXES in ST_STUFF.C, all changes were good. Added Lee's new scrolling types to COMMON.CFG 2/27/98 Fixed a bug in generalized stair builders. They would retrigger before completing the build causing crazy stair configurations to arise. Added link fields to next and prev step in sector_t, and a lock flag, stairlock. During build the links between stairs are set and stairlock is set to -2 for each step. As each thinker completes its stairlock is set to -1 and the chain of steps is checked for any still at -2. If none are, all locks are cleared to 0. The stair builder will not start again until the initial step has a stairlock of 0. Indices rather than pointers were used in the link fields so the savegame need not be modified. p_setup.c initializes all sector links to -1, and all stairlocks to 0 or no next or previous step, unlocked, though this is not relied upon by the stair building code. This affects both P_GENLIN.C and P_FLOOR.C Fixed a bug in the original stair builders, namely the crush field was never initialized. Set it to false for build8 stairs and true for build16 stairs, as that is what DMSPEC claims. P_FLOOR.C affected. Fixed COMMON.CFG again to remove the 303 and 302 types I had gotten carried away and added. There are no switch types for silent line teleporters. Added STTMINUS as a predefined lump in INFO.C to allow v1.2 to work with BOOM if anyone ever fixes demo format incompatibility. Prevented non-manual 0 tag triggers of floor moving or ceiling moving variety from operating in !demo_compatibility. manual types, lighting, exits, non-line teleporters, and scrolling specials may have 0 tag. Affects P_SPEC.H, P_SPEC.C and P_SWITCH.C Added range checks and adjustments to M_MISC.C for variables I added where out-of-range conditions could cause an exception or serious misoperation. Added CR_LIMIT at end of color range enum in V_VIDEO.H for range checks above. 2/26/98 Added previous messages display to HUD. If not in chat mode, key_enter causes the last hud_msg_lines to be displayed in screen upper left, and to scroll as new messages come in, latest at top. The color of text is determined by hudcolor_list. A solid window background can be enabled with hud_list_bgon. When in message list display mode, chat entry is locked out. Files affected were HU_LIB.C, HU_LIB.H, HU_STUFF.C. Background graphics added to INFO.C. Options added to M_MISC.C. Also fixed the comment about keys[NUMCARDS+3] in ST_STUFF.C and updated common.cfg for Lee's silent teleporter. 2/24/98 Added double keys to status bar display. You can now see that you possess both card and skull of a given color. 2/23/98 HUD functions fixed according to consensus, mostly, anyway they compile. Fixed a merge error in p_plats.c where some changes I made got wiped. Changed default of sts_pct_always_gray to 1. Added P_ActiveSector to P_SPEC.C used to test if a sector is available for a special action. If demo_compatibility is true, returns true if ANY special is active, else returns true only if the same type of special inquired about is active. This prevents demos losing sync thru inadvertantly starting multiple specials on the same sector. This finishes the multiple thinker support for elevators. Tuned the HUD font some. Made the drop shadow black for all characters. Reduced the ragged diagonals in some characters. Lightened the blue range for better visibility. 2/22/98 Moved HUD control to F5 (default key, set key_detail in DEFAULT.CFG). hud_active in DEFAULT.CFG now has three states 0,1,2. 0 disables HUD display, 1 shows a small HUD (no keys or kills/secrets status) and 2 shows the full HUD. Pressing F5 cycles between these states. If the hud_active state becomes 1 from 0, the screen is expanded to show the small HUD, expanded to full HUD on next F5, and then restored to previous screensize on next F5, allowing those using small screensize to check the HUD without readjusting screensize. The secrets line can still be disabled with hud_nosecrets=1, for those that prefer not to see this information. Making screensize max with = will show the current HUD state, none, small, or full. Added z coordinate to automap coordinate display. Removed active ceiling limits and changed savegame accordingly. Fixed two bugs in the general crusher - a failure to take ceilings in stasis out of stasis in EV_DoGenCrusher in P_GENLIN.C, and failure to reverse crusher direction on bottom of stroke in P_CEILNG.C, caused by another bugfix last week. Replaced specialdata field in sector_t with floordata, ceilingdata, lightingdata to allow independent thinkers to operate simultaneously. Fixed savegame correspondingly. There is an issue with compatibility flagging here, since savegames under one mode cannot be restored under another. Left unflagged for now, CRUSHER.LMP remains in sync. Weakened compatibility flags on detection of floor or ceiling moving thru the other to demo_compatibility. Added elevator linedef specials, for up to next floor, down to next floor, and move to floor in front of activating switch. Added these to common.cfg as well. 2/21/98 Fixed difference between initialized HUD line titles and caculated HUD string titles. Removed colons from display, shrunk spacing. 2/20/98 Removed a temporary fix from M_MISC.C that was obviated by the bugfix of 2/18. Fixed a bug in the divide down of string creation for HUD in HU_STUFF.C. Added a new lighter font for HUD to HU_STUFF.C and INFO.C. This font only has :/[], upper alphas, and numbers, currently, you'll get the char from the older font otherwise. 2/19/98 Optimized V_DrawPatchTranslated to avoid so much of a performance hit from HUD. Added several variables to make it more configurable. hud_active can now be set to -1 to avoid hud completely. hud_nosecrets can be set non-zero to suppress display of the top line showing kills/items/secretes. sts_always_red may be set non-zero to suppress use of color in status numerals. 2/18/98 Fixed bug in HU_Erase that was causing the status bar to be overwritten when the HUD was erased. Also added hud_active to DEFAULT.CFG in M_MISC.C so hud is displayed on start of level if it was in previous level or game. Finally added a condition to hud activation in M_MENU.C so that the code wouldn't screw up on + key with reduced screen. 2/15-17/98 Fixed bug in automap where secret sectors were not shown as secret after you entered them once. The engine clears the sector type after you enter a secret sector. Added oldspecial field to sector_t in R_DEFS.H and initialized it from the special field in P_SETUP.C, and used this field in the automap in AM_MAP.C to fix this. Added a new routine, V_DrawPatchTranslated, in V_VIDEO.C to support color translation of patches and graphics, as required in the HUD to write non-red text. Added some range tables as well to define color ranges usable as source or destination of the translation. Added declarations for the new routine and ranges to V_VIDEO.H. The ranges avaiable to translation are: CR_BRICK, //0 CR_TAN, //1 CR_GRAY, //2 CR_GREEN, //3 CR_BROWN, //4 CR_GOLD, //5 CR_RED, //6 CR_BLUE, //7 CR_ORANGE, //8 CR_YELLOW, //9 These may be used as index to colrngs to produce a point to a colrng_t type, or the same number can be used in a text string output by the HUD or messager to change its color, syntax "\\nText" writes Text in color range n instead of red. Added ammo_red,ammo_yellow, armor_red, armor_yellow, armor_green, health_red, health_yellow, health_green variables to DEFAULT.CFG in M_MISC.C to set points at which status and hud displays change color. Also added hudcolor_titl for color of automap title, and hudcolor_xyco for color of coordinate display. Added hudcolor_mesg and hudcolor_chat to set the colors of message and chat text. Changed ST_STUFF.C ST_LIB.C and ST_LIB.H so that the large numerals on the status bar would change color according to the range variables added to M_MISC.C above. Added support to HU_*.C for a true heads-up display that shows six lines of information. The top line shows kills/total, items/total, and secrets/total. The next line shows which of the six keys you have. The third line displays which weapons you have, the current weapon in brackets and the ammo available to each roughly indicated by the number's color as determined by ammo_red and ammo_yellow. If a weapon doesn't use ammo it displays in gray. The chainsaw displays as 8 and the super shotgun as 9. The fourth line shows ready weapon ammo as a bar graph and ammo/fullammo. The color of the line indicates how close to running out you are as usual. The fifth line shows health with bargraph and number, and its color also indicates the health status according to the default variables. The bargraph saturates at 100 health to provide more resolution of low health amounts, but the number does not. The sixth line is like the fifth except the variable displayed is current armor. Files affected HU_LIB.C, HU_LIB.H, HU_STUFF.C, HU_STUFF.H. To support the HUD bargraphs, five new characters were created and defined as predefined lumps in INFO.C. Each is a set of vertical lines from 4 of them to 0 for bargraph construction. Finally, added code to M_MENU.C to turn the HUD off and on when the zoom keys (+/-) are used when screen is at maximum. DOOMSTAT.H was also changed to make hud_active global. Work still remains to make the message window variable line scrolling and to make the hud repositionable. 2/14/98 Fixed bug in automap. Erroneously mistook FB for a color when it was an index into the frame buffers. Files affected: AM_MAP.C M_MISC.C. 2/12/98 Fixed an inadvertent change to crusher ceilings that was causing loss of demo sync in CRUSHER.LMP. P_CEILNG.C affected. Fixed all W1 and G1 regular linedefs to check the result of the line function before clearing the special. Added int returns to the line functions that didn't have them. Fixed some cosmetic errors in the general linedefs. 2/09/98 Made generalized stairs retrigger in opposite direction each time, fixed failure to initialize floor->crush there. 2/08/98 Added native midi lump support to BOOM. I_SOUND.C tries to convert from midi first, and if the correct header is not found, tries mus. Files affected : MMUS2MID.H, MMUS2MID.C, and I_SOUND.C 2/04-07/98 Added bit field linedef types that allow any combinattion of parameters for each type. There are types for Floors, Ceilings, Doors, Locked Doors, Lifts, Stairs, and Crushers. The allocation of linedef type field numbers is according to the following table: Type Start Length (Dec) ----------------------------------------------------------------- Floors 0x6000 0x2000 (8192) Ceilings 0x4000 0x2000 (8192) Doors 0x3c00 0x0400 (1024) Locked Doors 0x3800 0x0400 (1024) Lifts 0x3400 0x0400 (1024) Stairs 0x3000 0x0400 (1024) Crushers 0x2F80 0x0080 (128) ----------------------------------------------------------------- Totals: 0x2f80-0x7fff 0x5080 (20568) The following define the placement and meaning of the bit fields within each linedef category. Fields in the description are listed in increasing numeric order. ------------------------------------------------------------------ generalized floors (8192 types) field description NBits Mask Shift ------------------------------------------------------------------ trigger W1/WR/S1/SR/G1/GR/D1/DR 3 0x0007 0 speed slow/normal/fast/turbo 2 0x0018 3 model trig/numeric -or- nomonst/monst 1 0x0020 5 direct down/up 1 0x0040 6 target HnF/LnF/NnF/LnC/C/sT/24/32 3 0x0380 7 change nochg/zero/txtonly/type 2 0x0c00 10 crush no/yes 1 0x1000 12 Notes: 1) When change is nochg, model is 1 when monsters can activate trigger otherwise monsters cannot activate it. 2) The change fields mean the following: nochg - means no texture change or type change zero - means sector type is zeroed, texture copied from model txtonly - means sector type unchanged, texture copied from model type - means sector type and floor texture are copied from model 3) down/up specifies the "normal" direction for moving. If the target specifies motion in the opposite direction, motion is instant. Otherwise it occurs at speed specified by speed field. 4) Speed is 1/2/4/8 units per tic 5) If change is nonzero then model determines which sector is copied. If model is 0 its the sector on the first side of the trigger. if model is 1 (numeric) then the model sector is the sector at destination height on the opposite side of the lowest numbered two sided linedef around the tagged sector. If it doesn't exist no change occurs. ------------------------------------------------------------------ generalized ceilings (8192 types) field description NBits Mask Shift ------------------------------------------------------------------ trigger W1/WR/S1/SR/G1/GR/D1/DR 3 0x0007 0 speed slow/normal/fast/turbo 2 0x0018 3 model trig/numeric -or- nomonst/monst 1 0x0020 5 direct down/up 1 0x0040 6 target HnC/LnC/NnC/HnF/F/sT/24/32 3 0x0380 7 change nochg/zero/txtonly/type 2 0x0c00 10 crush no/yes 1 0x1000 12 Notes: 1) When change is nochg, model is 1 when monsters can activate trigger otherwise monsters cannot activate it. 2) The change fields mean the following: nochg - means no texture change or type change zero - means sector type is zeroed, texture copied from model txtonly - means sector type unchanged, texture copied from model type - means sector type and ceiling texture are copied from model 3) down/up specifies the "normal" direction for moving. If the target specifies motion in the opposite direction, motion is instant. Otherwise it occurs at speed specified by speed field. 4) Speed is 1/2/4/8 units per tic 5) If change is nonzero then model determines which sector is copied. If model is 0 its the sector on the first side of the trigger. if model is 1 (numeric) then the model sector is the sector at destination height on the opposite side of the lowest numbered two sided linedef around the tagged sector. If it doesn't exist no change occurs. ------------------------------------------------------------------ generalized doors (1024 types) field description NBits Mask Shift ------------------------------------------------------------------ trigger W1/WR/S1/SR/G1/GR/D1/DR 3 0x0007 0 speed slow/normal/fast/turbo 2 0x0018 3 kind odc/o/cdo/c 2 0x0060 5 monster n/y 1 0x0070 7 delay 1/4/9/30 (secs) 2 0x0300 8 Notes: 1) The odc (Open, Delay, Close) and cdo (Close, Delay, Open) kinds use the delay field. The o (Open and Stay) and c (Close and Stay) kinds do not. 2) The precise delay timings in gametics are: 35/150/300/1050 3) Speed is 2/4/8/16 units per tic ------------------------------------------------------------------ generalized locked doors (1024 types) field description NBits Mask Shift ------------------------------------------------------------------ trigger W1/WR/S1/SR/G1/GR/D1/DR 3 0x0007 0 speed slow/normal/fast/turbo 2 0x0018 3 kind odc/o 1 0x0020 5 lock any/rc/yc/bc/rs/bs/ys/all 3 0x01c0 6 sk=ck n/y 1 0x0200 9 Notes: 1) Delay for odc kind is constant at 150 gametics or about 4.333 secs 2) The lock field allows any key to open a door, or a specific key to open a door, or all keys to open a door. 3) If the sk=ck field is 1 (y) skull and cards are different keys, otherwise they are treated identically. Hence an "all" type door requires 3 keys if sk=ck is 1, and 6 keys if sk=ck is 0. 4) Speed is 2/4/8/16 units per tic ------------------------------------------------------------------- generalized lifts (1024 types) field description NBits Mask Shift ------------------------------------------------------------------- trigger W1/WR/S1/SR/G1/GR/D1/DR 3 0x0007 0 speed slow/normal/fast/turbo 2 0x0018 3 monster n/y 1 0x0020 5 delay 1/3/5/10 (secs) 2 0x00c0 6 target LnF/NnF/LnC/LnF<->HnF(perp.) 2 0x0300 8 Notes: 1) The precise delay timings in gametics are: 35/105/165/350 2) Speed is 1/2/4/8 units per tic 3) If the target specified is above starting floor height, or does not exist the lift does not move when triggered. NnF is Next Lowest Neighbor Floor. 4) Starting a perpetual lift between lowest and highest neighboring floors locks out all other actions on the sector, even if it is stopped with the non-extended stop perpetual floor function. ------------------------------------------------------------------- generalized stairs (1024 types) field description NBits Mask Shift ------------------------------------------------------------------- trigger W1/WR/S1/SR/G1/GR/D1/DR 3 0x0007 0 speed slow/normal/fast/turbo 2 0x0018 3 monster n/y 1 0x0020 5 step 4/8/16/24 2 0x00c0 6 dir dn/up 1 0x0100 8 igntxt n/y 1 0x0200 9 Notes: 1) Speed is .25/.5/2/4 units per tic 2) If igntxt is 1, then the staircase will not stop building when a step does not have the same texture as the previous. ------------------------------------------------------------------- generalized crushers (128 types) field description NBits Mask Shift ------------------------------------------------------------------- trigger W1/WR/S1/SR/G1/GR/D1/DR 3 0x0007 0 speed slow/normal/fast/turbo 2 0x0018 3 monster n/y 1 0x0020 5 silent n/y 1 0x0040 6 Notes: 1) Speed is 1/2/4/8 units per second, faster means slower damage as usual. 2) If silent is 1, the crusher is totally quiet, no start/stop sounds ------------------------------------------------------------------- Added these generalized linedefs to DETH linedef menu, creating arrays of buttons for each type to set the parameters. Readback is currently primitive, only the general class is reported. Created a DOS command line tool TRIGCALC to calculate the value of a given generalized linedef type based on answers to questions about its properties. Exercised each field of each type with small test wads. Also fixed the W1 Teleport bug, where it was used up being crossed in the wrong direction. Files affected: P_SPEC.H, P_SPEC.C, P_SWITCH.C, P_FLOOR.C, P_CEILNG.C, P_PLATS.C, P_DOORS.C, and a new file P_GENLIN.C was added. 2/03/98 Added functionality to manual doors, so that their tag specifies a sector or sectors that will go to max neighbor light level on the door completely opening, and to min neighbor light level on the door completely closing. Changes to P_DOORS.C P_SPEC.H P_SAVEG.C. Added TNTEM cheat code that will kill all monsters now alive. Simply borrowed the code from Chi's .046 port, as it works and looks fine. Unless you develop wads you may not appreciate how useful this code can be :). Changes to ST_STUFF.C. Relabelled Lee's WR Silent Teleport to 208, with W1 on 207, S1 on 209, and SR on 210, as 203 was already being used by a ceiling function. Changes to P_SPEC.C, P_SWITCH.C, and COMMON.CFG. Fixed an automap bug that was showing secret doors. Change to AM_MAP.C. Added P_FindNextLowestFloor routine to support downward linedef functions. Simply borrowed Lee's P_FindNextHighestFloor and reversed some inequalities. New linedefs: 211-214 Lower Floor 24 215-218 Lower Floor 32 Fast 219-222 Lower Floor to Next Lower 223-226 Raise Floor 32 Fast Changes to P_SPEC.C, P_SPEC.H, P_SWITCH.C, and P_FLOOR.C 1/30/98 Fixed the "monster squished - no floor lower" bug in P_FLOOR.C. Floors moving down were being halted if a monster on the periphery of the sector had insufficient headroom, this did not make sense, a bug. Reformatted P_CEILNG.C, P_FLOOR.C, and P_PLATS.C as part of their documenting (so I could read them!). Added 85 linedef type to make right scrolling animated walls. Added new linedef functions for ceiling to lowest neighbor ceiling, and ceiling to maximum neighbor floor. Added new gun exit linedefs, normal and secret. 1/29/98 Filled out the linedef specials to include SR, S1, WR, and W1 varieties for all functions it makes sense for. Created new file COMMON.CFG which documents the new linedef types and provides new menus for DETH so that they may be entered normally with that editor. 1/26/98 Fixed a problem in P_PLATS.C where a raiseAndChange plat type would bounce, and go down but not be removed, disallowing any future access to it. Fixed another problem in P_PLATS.C where the same raiseAndChange type of plat would bounce, without the low height of the plat ever being initialized. This could cause unpredictable behavior and plats that lowered forever. Fixed the twoSided routine in P_SPEC.C so that it returns whether a line has two sides, not whether it is marked 2S (means "can be transparent"). Fixed getNextSector routine in P_SPEC.C to ignore 2S flag and actually use whether a line has two sides. Fixed P_FindHighestFloorSurrounding routine in P_SPEC.C to use MININT as it initialization for the highest search rather than the arbitrary -500 units it did. Fixed P_FindHighestCeilingSurrounding routine in P_SPEC.C to use MININT as it initialization for the highest search rather than the arbitrary 0 units it did. Fixed EV_DoDonut in P_SPEC.C to not dereference NULL if the lowest numbered line in the donut sector was one-sided. 1/25/98 Fixed the floor crusher bug. It was not resetting the floor position when it encountered a monster blockage, allowing the monster to live if the floor reached its destination before the monster died from crushing. 1/24/98 Added new variables for nomonsters, respawnparm, and fastparm to store their command line invocation value. Change code in G_GAME.C to use these values to initialize the old variables in level start, so they persist thru demo play and IDCLEV changes. Fixed a failure to initialize the floor move special field in lower and change texture type actions (triggers 37 and 84). This would cause an illegal texture change to create an invalid sector type if the model sector was not found. The change is in P_FLOOR.C, EV_DoFloor. Removed I_Error exit from P_PlayerInSpecialSector routine in P_SPEC.C and just output a player message with dprintf instead. Can't find any reason this should cause a crash or problems. 1/23/98 Added W_CoalesceMarkedResource routine to W_WAD.C to organize directory entries for sprites and flats into a single marked block, allowing them to be read from PWADS. Commented out several error checks in R_InstallSpriteLump in R_THINGS.C that were no longer appropriate and rewrote to use the last loaded rotation definition for sprite frames. Reversed the order of lumps searched in R_InstallSprite. Added automap support for setting color to -2 to disable the line drawing at all, and setting color to -1 to suppress new automap features. Removed some code that would have displayed secret walls, but was disabled already by using the normal color for them. Rewrote MMUS2MID nearly entirely to be self contained and to provide a routine for full MIDI conversion for future ports. Also fixed a bug that would fail to zero out tracks not used in the next music piece that were used in the previous one. 1/22/98 Added command line parms for -nosfx, -nomusic, and -nosound to allow disabling sound from the command line. Added returns in S_SOUND.C to skip sound functions when disabled. Also added code in I_SOUND.C to suppress music thru nosfxparm and nomusicparm when Allegro returns an error from install_sound. Made sure I_ShutdownSound did not register with atexit if sound was never installed. 1/21/98 Removed I_Error exit on error loading MUS lump into Allegro in I_SOUND.C, used dprintf to show a player message in its place. Moved the music sound volume routine down to the music API. Stopped using destroy_midi, just reallocate track structure on new music load, and stop_midi when done. 1/18/98 Added variables sound_card and music_card to DEFAULT.CFG to support manually setting the sound card and music card type for Allegro when autodetect fails. Change in M_MISC.C and I_SOUND.C. Tweaked music volume for maximum volume possible. 1/17/98 Brought up the music volume setting routines in I_SOUND.C. 1/16/98 Added basic mus to midi memory converter module in MMUS2MID.C, brought up music calls in I_SOUND.C. 1/14/98 Removed old color defines from AM_MAP.C, no longer needed, supplanted by variables added to DEFAULT.CFG. 1/10/98 Added support for secret sector boundaries being displayed on automap. Also enabled code to show teleporter lines. 1/7/98 Added variables to DEFAULT.CFG to support automap color configuration. 1/5/98 Added initial support in automap for showing keyed doors, opening doors, and with double IDDT, keys. 12/28/98 Fixed 0-index confusion in ST_STUFF.C that was not allowing IDCLEV to work in the Linux port.