diff --git a/docs/rh-log.txt b/docs/rh-log.txt index 126bc8762..9b58ca0ce 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -1,17183 +1,17200 @@ -March 27, 2008 (Changes by Graf Zahl) -- Fixed: DCajunMaster::End was missing a write barrier for getspawned. The - same problem in D_DoomMain. -- Made bglobal a pointer because it was causing problems with the garbage - collector. - -March 26, 2008 -- Added FMOD_OPENONLY to the callback version of CreateStream() to prevent it - from doing prebuffering of the song. This was causing the Linux version to - hang while waiting for input from the pipe, since Timidity hadn't been - started yet. I tried using a select call in the FillStream() method, but it - always seems to return the pipe as having nothing available. Unfortunately, - the game still falls all over itself if Timidity isn't available. Instead - of execvp failing nicely, X errors kill the game. I don't know why it's - doing that. My advice for Linux music: Skip Timidity++ and get a DLS patch - set (/WINDOWS/system32/drivers/gm.dls is probably the most common by far) - and set the snd_midipatchset cvar to point to it. It's faster and also - sounds a whole lot better than the crappy freepats Ubuntu wants to install - with Timidity++ (thank goodness I have the official patches from a real - GUS so I don't need to use them). -- GCC fixes. - -March 26, 2008 (Changes by Graf Zahl) -- Fixed: After starting new music the music volume has to be reset so that - the song's relative volume takes effect. -- Removed the arbitrary 1024 bytes limit when the file being played is a MIDI - file. I had a D_DM2TTL that's only 990 bytes. -- Restructured I_RegisterSong so that $mididevice works again and also supports - selecting FMOD. -- Added Jim' Linux fix. -- Added MartinHowe's fix for mugshot display in status bars. - -March 25, 2008 -- The garbage collector is now run one last time just before exiting the game. -- Removed movie volume from the sound menu and renamed some of the other - options to give the MIDI device name more room to display itself. -- Moved the midi device selection into the main sound menu. -- Added FMOD as MIDI device -1, to replace the MIDI mapper. This is still the - default device. By default, it uses exactly the same DLS instruments as the - Microsoft GS Wavetable Synth. If you have another set DLS level 1 patch set - you want to use, set the snd_midipatchset cvar to specify where it should - load the instruments from. -- Changed the ProduceMIDI function to store its output into a TArray. - An overloaded version wraps around it to continue to supply file-writing - support for external Timidity++ usage. -- Added an FMOD credits banner to comply with their non-commercial license. -- Reimplemented the snd_buffersize cvar for the FMOD Ex sound system. Rather - than a time in ms, this is now the length in samples of the DSP buffer. - Also added the snd_buffercount cvar to offer complete control over the - call to FMOD::System::setDSPBufferSize(). Note that with any snd_samplerate - below about 44kHz, you will need to set snd_buffersize to avoid long - latencies. -- Reimplemented the snd_output cvar for the FMOD Ex sound system. -- Changed snd_samplerate default to 0. This now means to use the default - sample rate. -- Made snd_output, snd_output_format, snd_speakermode, snd_resampler, and - snd_hrtf available through the menu. -- Split the HRTF effect selection into its own cvar: snd_hrtf. -- Removed 96000 Hz option from the menu. It's still available through the - cvar, if desired. -- Fixed: If Windows sound init failed, retry with DirectSound. (Apparently, - WASAPI doesn't work with more than two speakers and PCM-Float output at the - same time.) -- Fixed: Area sounds only played from the front speakers once you got within - the 2D panning area. - -March 25, 2008 (Changes by Graf Zahl) -- Added Karate Chris's submission for multiplayer Strife conversations. -- Increased the limit for 'imp/active' to 6. This sound definitely benefits - from a higher limit. -- Fixed: $limit should not apply to sounds played from the menu. -- Fixed: The SNDSEQ parser tried to set bDoorSound before actually creating - the sound sequence data. -- Changed Lemon so that it always writes the header. It still kept recompiling - the grammar over and over again once it had been changed locally. -- Fixed: ANIMATED allowed animations between different texture types. -- Added a debuganimated CCMD that can be used to output some information - if a WAD shows broken animations. - -March 24, 2008 -- Removed xlat_parser.h from the repository. Lemon was always being run on - xlat_parser.y because both files had the same time stamp after an update, - and Lemon only rewrites the header file if it's changed. -- Added $volume SNDINFO command. This is multiplied with the volume the sound - is played at to arrive at the final volume (before distance attenuation). -- Added the CHAN_AREA flag to disable 3D panning within the min distance of a - sound. Sector sound sequences (except doors) use this flag. -- Added the CHAN_LOOP flag to replace the S_Looped* sound functions. -- Restored the sound limiting. - -March 24, 2008 (Changes by Graf Zahl) -- Fixed: THe handling for enum values in Xlat was incorrect. The rule with - value assignment must set the counter one higher than the current value. -- Fixed: The definition of enums in the Xlat grammar was right-recursive - which could create stack overflows in the parser. Made it left-recursive as - recommended in Lemon's docs. -- Added Thomas's submissions for decal assignment to puffs and NOINFIGHTING flag. -- Reverted changes of r715 in v_collection.cpp because they broke loading - of status bar face graphics belonging to skins. -SBARINFO update #15 -- Fixed: Monospacing fonts wasn't quite correct. -- Fixed: The new mug shot code forgot to use the first arg of drawmugshot (the - one that picks the default sprite prefix). -- Added: lowerHealthCap variable to SBarInfo, which is set to true by default. -- Added: ininventory event to SBarInfo to detect if one or two items are in (or - not in) the player's inventory. -- Added: The ability to print global vars using drawnumber. I need someone to - test it though. -- Added: aspectratio command to detect what the user's aspect ratio is. -- Added: missing spacing argument to drawstring. -- Changed the sbarinfo display routine for drawnumber to not use cmd.value to - store what it is about to display. Now it uses a new variable. -- More conversions from DrawImage to screen->DrawTexture. I think only the - inventory bar drawing functions have to be changed now. - -March 23, 2008 (Changes by Graf Zahl) -- Fixed: The Sequence pointer in ASoundSequenceSlot was not declared as - a pointer and it was missing both read and write barriers. -- Fixed: The sector translators must clear unused bits because they might - render a sector's special inoperable. -- Expanded the args for MAPINFO special actions to 32 bit integers as in - the rest of the game. -- Fixed: The specialaction list was not copied properly when transferred - from the defaultinfo. -- Fixed: The defaultinfo for MAPINFO wasn't cleared fully after MAPINFO - parsing was completed. -- Made Doom-format linedef translators a map property so that it's easier - to define replacements or extensions. - -March 22, 2008 -- Changed MIDI playback to not bother playing super short songs that don't - contain enough music to fill the initial output buffers. -- Removed the read barrier around ADehackedPickup::RealPickup. If the real - pickup is picked up, it may very well destroy itself before the dehacked - wrapper's stubs that use it are called. -- Reverted revision 840. For a file we don't want end users to be touching, - making DEHSUPP plain text sends out mixed messages: "Don't mess with this. - Oh, by the way, it's plain text now to make it easier for you to edit." - Is there some reason other than a desire to do away with binary lumps to - make the distributed lump text? -- Added a new speakermode for Stereo + HRTF: "Headphones". This is the only - way to get the HRTF low pass filter effect now. -- Fixed: No more than one sector could make noise at once. -- Trying out sound without varying priorities again. -- Fixed: Need to use setSpeakerMix to let 2D sounds (aka streamed music) use - their full volume range. - -March 22, 2008 (Changes by Graf Zahl) -- Added sector type translation to xlat_parser and removed the old sectorx - lump. -- Added Line_SetTextureOffset special. -- Added 'allowprotection' keyword to terrain definitions to allow damaging - flats that don't damage players with a radiation suit. -- Fixed: SNDINFO rolloff setting for Strife was missing. -- Added more options to Light_ForceLightning: Setting the first arg to 0 - will behave as before, setting it to 1 will create exactly one lighting - and setting it to 2 will terminate lightning for the current level - completely. And it will also work on maps that don't have lightning set - in MAPINFO now. -- Added: Sector movement that causes deep water to change its height now - will trigger associated sector actions and adjust the actor's water level. -- Fixed: The serializer for side_t::part never read the texture information - from a savegame. -- Fixed: side_t::StopInterpolation called setinterpolation instead of - stopinterpolation. Also moved the clearinterpolation call in - P_SetupLevel after the P_FreeLevelData to make absolutely sure that - nothing in there can leave an interpolator behind by accident. -- Applied Linux fixes by Jim. -SBARINFO update by Blzut3: -- Fixed: the playerclass command needed a null pointer check to prevent - crashing on respawn. -- Fixed: Mug Shot states were not reset on respawn. -- Removed keepoffsets flag since apparently it was keeping the offsets by - default. The means that the only thing not affected by the offsets was using - nullimage as a background. Since I wasn't able to get a result I liked I'm - going to say that if you want a black background with high res positioning - you will have to create your own bar image. Maybe I'll fix it some other - time. -- Added: monospacefonts variable which allows for all of the fonts to be - monospaced by a specified character (from their fontset of corse). -- Made SBarInfo recognize the bar names for the Strife popups but they don't - do anything beyond that. The names are: popuplog, popupkeys, and popupstatus. -- Started converting the drawing routine to be more flexable towards high - resolution status bars. (Only did one call so far.) - -March 21, 2008 -- Fixed: Actor-less sounds that aren't played on CHAN_AUTO should still be - subject to channel overriding. -- Re-added priority selection based on sound usage. -- Reduced the number of virtual channels to match the number of real - channels. -- Added customizable rolloff, including Doom's standard linear gain rolloff. - SNDINFO commands are: - $rolloff -- linear gain (like Doom) - $rolloff linear -- linear volume - $rolloff log -- logarithmic - $rolloff custom -- use SNDCURVE lump - Anything closer than min distance is full volume and anything further than - max distance is inaudible. Logarithmic rolloff does not have a maximum - distance; it has a scalar that controls how quickly the volume drops off - instead. - -March 21, 2008 (Changes by Graf Zahl) -- Disabled scrolling of 3DMIDTEX textures. Due to the special needs this - cannot work properly. -- Added new Scroll_Wall special to allow more control over wall scrolling. - Since it uses fixed point parameters it can only be used in scripts though. -- Added flags parameters to all wall scroller specials that didn't use - all 5 args. -- Separated scrolling of the 3 different texture parts of a sidedef. - While doing this I did some more restructuring of the sidedef structure - and changed it so that all state changes to sidedefs that affect rendering - have to be made with access functions. This is not of much use to the - software renderer but it allows far easier caching of rendering data - for OpenGL because the only place I need to check is in the access functions. -- Added Karate Chris's ThingCountSector submission. -- Made texture indices in FSwitchDef full integers. Since that required - some data restructuring I also eliminated the MAX_FRAMES limit of 128 - per switch. - -March 20, 2008 -- Removed some debug output from SBarInfo::ParseSBarInfo(). -- Fixed: Heretic linetype translations included the wrong file. -- Removed all 2D sound positioning code from s_sound.cpp. Everything uses - FMOD's 3D engine now. -- Removed all the channel selection code from s_sound.cpp. FMOD has code to - handle this sort of thing, so let's use it. -- Replaced S_StopSoundID() with S_CheckSingular(). There is no longer a limit - on the number of copies of a particular sound that can be playing at once, - aside from Strife's special singular sounds. (Sorry, Heretic and Hexen.) - Consequently, the SNDINFO $limit command is now ignored. -- Removed ATTN_SURROUND, since FMOD Ex doesn't exactly support it, and it - only worked as intended on stereo speakers anyway. -- Cleaned out ancient crud from i_sound.cpp. - -March 20, 2008 (Changes by Graf Zahl) -- Fixed: A_CustomMissile with aimmode 2 ignored spawnofs_xy. -- Changed savegame versioning so that the written version is never lower - than the minmum one reported as compatible. -- Added mirrored movement modes for linked sectors. -- Added Eternity-style initialization for linked sectors as a new subtype - of Static_Init. -- Added linked sectors. The control sector determines how they move but if - any one of the linked sectors is blocked, movement for all linked sectors - will be affected. This will allow lifts consisting out of more than one - sector without the risk of breaking them if only one of the sectors is - blocked. -- Fixed: A_Mushroom created an actor on the stack. - -March 19, 2008 -- Fixed: lempar.c needs to specify the __cdecl calling convention for malloc - and free under VC++. -- Fixed: The source no longer built with GCC. - -March 19, 2008 (Changes by Graf Zahl) -- Added a new parameter to all crushing action specials that selects - which crushing mode is used: 0 uses the game's default for compatibility, - 1 uses Doom's mode (crushers continue to move while damaging any actors ) and - 2 uses Hexen's mode (crushers stay at blocking actor's top until they die). - Since Generic_Crusher already used all 5 args I created a second version for - Hexen crushing mode. -- Added PICKUP flag to DECORATE. -- Integrated xlatcc into ZDoom.exe so that the linedef translation files - don't need to be compiled and can be stored as text in zdoom.pk3. -- Removed thingdef_specials.h and thingdef_specials.gperf and replaced - line special definition with something that automatically gets updated - if new specials are added. -- Added copyright/license headers to a few files. -- Fixed: ACS SetMugShotState needs to check the StatusBar pointer for the - proper object type. -- Move SBarInfo loading code in d_main.cpp into a static method of DSBarInfo. -- Removed dobject.err from the repository. It only contained a list of compiler - errors for some very old version of dobject.cpp. -- Fixed: A_JumpIfCloser was missing a z-check. -- Added Blzut3's SBARINFO update #13: - - Split sbarinfo.cpp into two files sbarinfo_display.cpp and sbarinfo_parser.cpp - - Rewrote the mug shot system for SBarInfo to allow for scripting and custom - states for different means of death. - - SBarInfo now loads all SBarInfo lumps instead of just the last one. Clashing - status bar definitions will now be cleared before the bar is read. - - Fixed: When using transparency with bars the new drawing method (bg over fg) - didn't work. In the case that the border value is set to 0 it will revert to - the old method (fg over bg). - - Fixed: drawbar lost any high res information it was given. - - Added: ACS command SetMugShotState(str state) which sets the mug shot state - for the activating player. - - Added: keepoffsets flag to drawbar. When set the offsets in the fg image will - also be applied when displaying the bar. - -March 18, 2008 -- Added a cheap pitch shifting for underwater environments that should be fairly - close to Duke's. It sounds okay for some sounds, but others like the BFG, where - the timing of the sound actually matters, don't sound good. I shall have to - replace it with a real pitch shifter DSP unit. -- Removed hardware 3D sound support, since software is cooler. -- Fixed the TArray serializer declaration. - (Thank you for your warnings, GCC! ;-) -- Changed root sector marking so that it can happen incrementally. - -March 18, 2008 (Changes by Graf Zahl) -- VC++ doesn't seem to like the TArray serializer so I added a workaround - to be able to save the 3dMidtex attachment info. -- Fixed: The TArray serializer needs to be declared as a friend of TArray - in order to be able to access its fields. -- Since there are no backwards compatibility issues due to savegame version - bumping I closed all gaps in the level flag set. -- Bumped min. Savegame version and Netgame version for 3dMidtex related - changes. -- Changed Jump and Crouch DMFlags into 3-way switches: - 0: map default, 1: off, 2: on. Since I needed new bits the rest of - the DMFlag bit values had to be changed as a result. -- fixed: PTR_SlideTraverse didn't check ML_BLOCKMONSTERS for sliding - actors without MF3_NOBLOCKMONST. -- Added MAPINFO commands 'checkswitchrange' and 'nocheckswitchrange' - that can enable or disable switch range checking globally per map. -- Changed ML_3DMIDTEX to force ML_CHECKSWITCHRANGE. -- Added a ML_CHECKSWITCHRANGE flag which allows checking whether the - player can actually reach the switch he wants to use. -- Made DActiveButton::EWhere global so that I can use it outside thr - DActiveButton class. - -March 17, 2008 (Changes by Graf Zahl) -- Changed P_LineOpening to pass its result in a struct instead of global - variables. -- Added Eternity's 3DMIDTEX feature (no Eternity code used though.) - It should be feature complete with the exception of the ML_BLOCKMONSTERS - flag handling. That particular part of Eternity's implementation is - sub-optimal because it hijacks an existing flag and doesn't seem to make - much sense to me. Maybe I'll implement it as a separate flag later. - -March 17, 2008 -- Fixed: The botinfo field of DCajunMaster was improperly listed as an object - pointer. - -March 16, 2008 (Changes by Graf Zahl) -- Fixed: FreshThinkers's max. index is MAX_STATNUM so the code shouldn't - to access FreshThinkers[MAX_STATNUM+1]. - -March 15, 2008 -- Fixed: The only time bestslideline is ever NULL is before it ever gets set. - That means my P_BounceWall() "fix" from March 6 wasn't really a working fix. -- Fixed: If an object is flagged for euthanization while it's in the gray - list, it should just be ignored during the propagation stage. -- After sleeping on it and realizing what was really going in, I generalized - the inventory fix from the 13th: The actor is flagged by Destroy(), then it - is later inserted into the thinker list by DThinker::SerializeAll(). So - rather than unlinking the skipped player from their inventory, just make - sure any flagged thinkers aren't inserted into a list. -- Fixed: FCanvasTextureInfo::Viewpoint needed a read barrier, and the whole - list should serve as a root. - -March 14, 2008 (Changes by Graf Zahl) -- fixed: A_PainShootSkull was missing a NULL pointer check for the spawn type. -- implemented Vavoom's vertex height things (1504, 1505) that can explicitly - define slopes for triangular sectors. The height is specified as the thing's - z-coordinate. - -March 14, 2008 -- Reimplemented SPC playback as a custom codec for FMOD. -- Removed spc_frequency, because snes_spc only supports the SPC's native - frequency of 32000 Hz. - -March 13, 2008 -- Fixed: When returning to a hub map, inventory belonging to the temporary - copies of the players stored in the archive would be destroyed and break - apart the STAT_INVENTORY thinker list. Now they aren't destroyed while - loading the archive but are unlinked from the inventory list instead, so - the garbage collector will get them later. -- Changed pointer substitution to return the number of pointers changed. - -March 13, 2008 (Changes by Graf Zahl) -- Fixed: Pointer substitution changed the pointers for the thinker ring list - resulting in a freeze. - -March 12, 2008 -- Fixed: DACSThinker::ActiveThinker was missing a read barrier. -- Loading a save game now initiates a collection. -- Added a finalization cost to the sweep stage. -- Fixed: D_dehacked.cpp/PatchThing() allocated an actor on the stack. -- Changed the sentinels in the thinker lists into proper thinkers. The old - way wasn't playing well with the write barriers. -- Fixed: DFrameBuffer::WriteSavePic needs to fix the canvas in place while - using it. -- Fixed: The sound system was updated every frame, which is a complete waste - of time. Doing it only once each tic is quite sufficient, since nothing - really moves between tics, even if the display makes it look otherwise. - -March 12, 2008 (Changes by Graf Zahl) -- Fixed: The SimpleCanvas in FCanvasTexture must be declared as a soft - root to the garbage collector. -- Changed DObject's pointer substitution so that the pointers inside an - object are handled by a virtual function. This allows subclasses to - implement their own handling if they need it. -- Bumped the minimum savegame version because the current version crashes - each time an old savegame is loaded. - -March 11, 2008 -- Removed lots of spc_* cvars that are no longer meaningful and changed - spc_amp from a x.4 fixed point number to a normal float. -- Switched SPC playback from the external SNESAPU.DLL to Blargg's LGPL - snes_spc library. I've compiled it with the fast DSP rather than the - highly accurate one, since I didn't notice a meaningful difference between - the two in my limited testing. In short: SPC playback is now built in to - ZDoom. You don't need to download anything extra to make it work, and it - also works on Linux as well as Windows (though building with Linux is - currently untested). -- Fixed: Stereo separation was calculated very wrongly when in 2D sound mode. - -March 10, 2008 -- EAX is a pain in the butt to get it to work reliably. Why? I can get the - reverb to work just fine with software, but with hardware, I hear nothing - special at all. -- Fixed: Sounds apparently don't default to location 0,0,0 so I need to set - that explicitly for 2D sounds in 3D mode. -- Fixed: I had forgotten to actually set the head relative flag for 2D sounds - played in 3D. -- Fixed: Reverb was applied to digital music in software 3D mode. I tried - turning off reverb for 2D sounds too, but that turned it off for _all_ - subsequent sounds and not that specific channel. - -March 9, 2008 (Changes by Graf Zahl) -- fixed: StreamSong::SetPosition required a NULL pointer check. -- fixed: The release build still linked to the old FMOD version. -- fixed: SPCSong only works for Win32 so its definition must be excluded for Linux. - -March 8, 2008 -- Fixed: If you wanted to make cleandep with MinGW, you had to specifically - specify Makefile.mingw as the makefile to use. -- Added a normalizer to the OPL synth. It helped bring up the volume a little, - but not nearly as much as I would have liked. -- Removed MIDI Mapper references. It doesn't work with the stream API, and - it doesn't really exist on NT kernels, either. -- Reworked music volume: Except for MIDI, all music volume is controlled - through GSnd and not at the individual song level. -- Removed the mididevice global variable. -- Added back support for custom streams. - -March 7, 2008 -- I think the new FMOD Ex code should support everything the old FMOD 3 code - did, sans custom streaming sounds. -- Removed snd_midivolume. Now that all music uses a linear volume scale, - there's no need for two separate music volume controls. -- Increased snd_samplerate default up to 48000. -- Added snd_format, defaulting to "PCM-16". -- Added snd_speakermode, defaulting to "Auto". -- Replaced snd_fpu with snd_resampler, defaulting to "Linear". -- Bumped the snd_channels default up from a pitiful 12 to 32. -- Changed snd_3d default to true. The new cvar snd_hw3d determines if - hardware 3D support is used and default to false. -- Removed the libFLAC source, since FMOD Ex has native FLAC support. -- Removed the altsound code, since it was terribly gimped in comparison to - the FMOD code. Its original purpose was to have been as a springboard for - writing a non-FMOD sound system for Unix-y systems, but that never - happened. -- Finished preliminary FMOD Ex support. - -March 6, 2008 -- Fixed: If P_BounceWall() can't find a wall when it does its trace, but it - was entered because a line blocked the projectile, then it should still use - that blocking line for the bounce. -- The full master volume SysEx is now always sent to the MIDI device, even if - it seems to have a working volume control. -- Renamed music_midi_stream.cpp to music_midi_base.cpp. -- Moved the WinMM MIDI code into a new container class. -- Fixed: StatusBar and screen need to be barriered, because they are roots - but can also change at runtime. -- Fixed: Objects that are forcibly deleted outside the GC need to be removed - from the gray list too. - -March 5, 2008 -- Fixed: Thinkers needed write barriers when they were removed from their - lists. -- Fixed: DLevelScript::Link() and Unlink() needed write barriers. - -March 4, 2008 -- Moved the identical code between the MUS and MIDI streamers into a new base - class so that all the low-level details of MIDI streaming are kept in - one place. -- Converted the SMF MIDI playback to use the same MIDI streams as MUS - playback. -- Moved MUS playback back into its own thread so that it can continue - uninterrupted if the main thread is too busy to service it in a timely - manner. -- Fixed: The MEVT_* values are not defined shifted into their spot for a - MIDIEVENT, so I need to do it myself. -- Fixed: Pausing a MUS and then changing snd_midivolume caused the paused - notes to become audible. - -March 3, 2008 -- Changed MUS playback to use MIDI streams, like it did during the early days - of ZDoom, except now the entire song isn't prebuffered in large chunks, so - I can insert MIDI events into the playback with fairly low latency. This - should offer more precise timing than the combination of low-level MIDI and - WaitForMultipleObjects timeouts that it replaces. -- Fixed: PTR_BounceTraverse only checked for projectiles that were too - high to pass through two-sided lines, but not ones that were too low. -- Fixed: SBARINFO couldn't detect the extreme death damage type for the - player face animation. - -March 1, 2008 (Changes by Graf Zahl) -- fixed: A_CountdownArg used 0 based indices although all uses of it assumed - it is 1-based. -- added MF5_DONTRIP flag. -- added CheckActorFloorTexture, CheckActorCeilingTexture and - GetActorLightLevel ACS functions. -- added IF_ADDITIVETIME flag to create powerups that add their duration - to the one of the currently active item of the same type. -- fixed: bouncecount wasn't decreased when bouncing on walls. -- Added MF5_ALWAYSRESPAWN and MF5_NEVERRESPAWN flags that selectively - enable or disable monster respawning regardless of skill setting. -- Prettified deprecated flag handling. -- Fixed: When starting a level while the music has been paused S_Start has - to stop the old music so the new one always starts at the beginning. -- Fixed:: AActor::master was not serialized. -- Fixed: Sound targets pointing to dead players should be cleared before - respawning the player. -- Fixed: When the DONTMOVE flag is set A_Chase must not call P_NewChaseDir. -- Changed PowerupGiver initialization so that the actual powerup class is looked - up during postprocessing. -- Gave Strife's instant death sector type its own damage type. - -February 29, 2008 -- Changed the default GC parameters to make it run more aggressively. -- Added NULL checks to the GC::WriteBarrier() wrappers. -- Fixed: The DObject destructor set GC::SweepPos incorrectly if it pointed - at that object being deleted. -- Added "soft roots" to the garbage collector. These are similar in - purpose to setting the OF_Fixed bit, but they behave as full-fledged roots - as far as the collector is concerned, so any objects reachable through - them will not be collected. -- Added support for the OF_Fixed bit. This is ONLY for simple objects which - do not contain pointers to other objects, because all it does is prevent - an object that is otherwise dead from being freed. It does not include - the object in the propagate stage if it is unreachable, so any objects - that are only reachable through it will still be freed unless they are - also fixed. -- Fixed: R_SetupAddClampCol() checked add4cols' memory instead of - adclamp4cols' memory when deciding if it should skip modification. - -February 28, 2008 -- Fixed: The colormap changes by column, so the assembly rt_* routines need - to be setup for every column group, not once per image. -- Fixed: rt_Translate1col() had a couple of bugs. - -February 27, 2008 -- Added assembly versions of rt_add4cols and rt_addclamp4cols. -- Added a read barrier to FArchive::SerializeObject() to make sure that - objects that are being euthanized are not stored in the archive. - -February 26, 2008 -- Added an assembly version of rt_shaded4cols, since that's the main decal - drawing function. The most improvement came from being able to turn some - constant variables into immediate values with self-modifying code, but I - also managed to reorder it to make it a little faster. It's about 9% faster - than VC++'s code and 19% faster than GCC's code. That's not a huge - improvement (for VC++), but at least it's measurable. -- Removed the solid fill "optimization" from rt_shaded4cols(), because in my - testing, it didn't help any and in fact, hurt just a little bit. -- In the name of simplification, all the rt_tlate* drawers were changed to do - the translation in one step and the drawing in another. This lets me call - the untranslated drawer to do the real drawing instead of mostly duplicating - them. Performance wise, there is practically no difference from before. -- Fixed: Using +stat from the command line caused a crash. -- More write barriers and pointer declarations. Here are rules I've come up - with so far for when write barriers can be ommitted: - * Initializing pointers for a newly created object: A new object can never - be black, so none of its pointers that get set by the constructor (or code - just following its creation) need to be behind write barriers. - * Creating a new thinker and storing it in a pointer: The thinker - constructor already puts it behind a write barrier when it links it into - the thinker list, so you don't need to do it again. - * As a corollary of the above: No pointers to thinkers should need to be - behind write barriers, because it is incorrect to have a thinker that is - live but not in a thinker list. I realized this while I was going through - the long list of actor target references, so there are some write barriers - for those in place already, since they don't hurt to have them around. - As a consequence of the last point, I think I'm done placing write barriers - in all their necessary places without even touching most of the code. I'm - going to let it sit like this for a few days to see if I can think of a - counter-example where a live thinker wouldn't be in a thinker list, but it - feels correct to me right now. - -February 25, 2008 (Changes by Graf Zahl) -- Fixed: The DECORATE expression evaluator's random function could produce - incorrect results for ranges > 255. Changed so that FRandom's default - implementation is used instead. - -February 24, 2008 -- Fixed: DDecalFader::Tick() still referenced TheDecal even after destroying - it. -- Added write barriers around the thinker list insertions in dthinker.cpp. - -February 23, 2008 (Changes by Graf Zahl) -- Fixed: AWeaponPiece didn't declare its FullWeapon pointer as such. -- Fixed: Hexen's random player class skill menu was missing the '$' indicating - a string table identifier. -- Fixed: DCorpsePointer::Serialize didn't call the super method. - -February 22, 2008 -- Moved DSeqNode's and its children's destructor code into their Destroy() - methods. -- Moved DSectorEffect's destructor code into a Destroy() method. -- Changed the myoffsetof definition to match DECLARE_POINTER's because GCC - started complaining about its use in p_setup.cpp, though I'm not sure why. -- Added a pointer list to DACSThinker so that the collector can find scripts - instead of thinking they're all dead. -- Added read barriers to sector_t's pointers. -- Used the HAS_OBJECT_POINTERS macros to locate places to place TObjPtrs to - form read barriers. - -February 21, 2008 -- Fixed: DThinker::SerializeAll() did not serialize any thinkers in the - FreshThinkers lists. These thinkers would still be saved in the savegame if - there were other references to them, but they would not go in any thinker - lists when loading the savegame. An easy way to exercise this bug is to - give yourself something new with the console and then save the game right - away without closing the console by using the "save" command. The item - would be stored in the savegame thanks to its presence in the Inventory - list, but it wouldn't be in a thinker list when the game was reloaded - because it was still in the FreshThinkers list when the game was saved. -- Fixed: PO_Busy() did not check for a NULL return from GetPolyobj(). -- Fixed two problems with printfs from the net controller stuff: one of them - is totally valid, and the other is GCC not being as nice as VC++. -- Fixed: The case for defining SAVESIG when SVN_REVISION_NUMBER == 0 did not - work for GCC (and presumably VC++, though I never ran into that case with - it) because it tried to stringify something that wasn't a macro argument. - -February 20, 2008 -- Changed the DHUDMessage deletions into destroys. -- Added read barriers to the pointers inside AActor. -- Split the AActor::LastLook union into its constituent parts. - -February 20, 2008 (Changes by Graf Zahl) -- Added a modified version of Karate Chris's submission for killing specific - monsters with the 'Kill' ccmd. - -February 19, 2008 -- Added a rough initial garbage collector, based largely on Lua's. There are - no write or read barriers in place yet, so it's not a very close - approximation of the pointer cleaning code that was in place before, but it - does collect stuff. But guess what! Nuts.wad ran at 1-2 FPS before. Now - it's way, way more and easily stays above 35 FPS. The performance hit when - the GC is running is pretty minimal compared to the old way, which was in - many ways like a full garbage collection every tic. -- Changed the status bars into DObjects. -- Fixed: FBaseStatusBar::Tick() deleted hud messages instead of destroying - them. -- Changed the global Args object to a pointer to one. -- Changed several DArgs deletions into destroys. -- Removed DBoundingBox from the DObject hierarchy. - -February 18, 2008 -- Added vid_refreshrate cvar to override Windows' automatic refresh rate - selection. -- Singleplayers maps using allowrespawn now filter respawn inventory like - coop games, since that's essentially what they are. -- Fixed m_alloc.cpp compilation on Linux. - -February 18, 2008 (Changes by Graf Zahl) -- Applied Blzut3's sbarinfo update #12: -* When the drawbar code was optimized border was accidently used as how many - pixels to reserve from the background instead of the foreground. I've - reversed how the code works (bg over fg instead of fg over bg). -* Added armorclass to drawnumber. -* Added an interpolateArmor variable which acts just like interpolateHealth - except the effect is applied to armor. -* Added armor flag to drawgem since we can interpolate armor now. -* Added a reverse flag to drawgem. -* Fixed drawgem didn't allow for '|' to separate the flags. - -- Fixed: Menu texts for skill definitions unconditionally interpreted - the given text as an index into the string table. - -February 16, 2008 -- Fixed AInventory::PickupFlash setting with GCC. -- Fixed: The MusicVolumes list was allocated with M_Malloc but freed with - delete. -- Fixed: demobuffer was inconsistantly handled with new[]/delete[] and - malloc/free. -- Added used memory tracking to M_Malloc() and M_Realloc(). This - necessitated the addition of an M_Free() call to track frees. -- Removed M_Calloc since it was only used in one place, and can just as well - be done with an M_Malloc/memset pair. -- Bumped DEMOGAMEVERSION for the new net controller codes. - -February 16, 2008 (Changes by Graf Zahl) -- Added patch by Karate Chris: - - The net arbitrator can add or remove players to an access list so they - can or cannot control game settings: - * net_addcontroller - Adds a player to the control list. - Only net arbitrators have access to this command. - * net_removecontroller - Removes a player from the control - list. Only net arbitrators have access to this command. - * net_listcontrollers - Lists the players who are able to control the game - settings. - - Fixed: The 'Printf' occurrences in the 'addplayerclass' console command - were all missing a '\n' at the end. - - Enhanced the 'playerinfo' console command so more information about each - setting is shown. -- Added customizable pickup flash. -- Added option to show shorter messages for save game and screenshot confirmation. - Also added this to the 'Messages' menu. - -February 14, 2008 -- Version bump to 2.2.0. -- Disabled console alpha when the console is fullscreen. -- Re-enabled maybedrawnow for the software renderer. This should be replaced - with a different progress bar implementation at some point that can work - with hardware graphics. - -February 14, 2008 (Changes by Graf Zahl) -- Added Karate Chris's patch for 0-tid == activator in action specials - Thing_SetSpecial and Thing_SetTranslation. -- -moved BUG_FORUM_URL to version.h - -February 13, 2008 -- Removed most checks on vid_hw2d/test2d. This now gets checked only once per - frame to avoid the remote possibility that it could change during the middle - of drawing the frame and cause strange things to happen. -- Renamed test2d to vid_hw2d. - -February 12, 2008 -- Added the ACS script type "return". These are executed by players who return - to a map they've previously been to. This is analagous to enter scripts, but - whereas enter scripts execute only the first time a player enters a map, - return scripts execute all but the first time. -- Improved map scrolling when rotation is on and follow mode is off. - -February 11, 2008 -- Fixed: Turning off follow mode with automap rotating enabled did not - function in an easy-to-understand manner. -- Fixed: D_AddWildFile() blindly assumed that all matches were files. -- Added back the dead player check to CheckIfExitIsGood(), but now it - applies only if the next map is part of the same hub. Otherwise, you can - still exit the map while dead. -- Removed the SpawnedPuff global variable and made it a return value from - P_LineAttack(). -- Fixed: P_SpawnPuff() played sounds for temporary puffs. - -February 9, 2008 -- Fixed: G_StartTravel() inadvertantly removed players' TIDs. -- Modified FLAC/share/alloc.h to define SIZE_T_MAX if it isn't defined - already. For some reason, a stock install of MinGW doesn't define it, but - if you compile your own GCC, it installs headers that do. -- After thoroughly messing up my MinGW/MSYS installation, I deleted the whole - thing and reinstalled everything using the latest zips. Much to my surprise, - the MSYS-detection in the makefiles no longer worked because OSTYPE wasn't - being exported to process launched by the MSYS shell. I've now switched to a - different method I found through the power of Google that asks the shell - what version it is to see if the version string contains "msys". - -February 8, 2008 -- Applied Blzut3's sbarinfo update #11: - * SBarInfo will also accept a '|' between flags for those who are really - bothered by the indefinite "arguments" in the middle of the statement. - * Added: completeBorder. When set to true SBarInfo will draw the border where - the status bar normally goes. - * Fixed: I forgot to accept TK_None on "base" and "statusbar". - * Fixed: "base" was apparently broken when the SBarInfo init code was moved to - d_main.cpp. Also, if "base Strife" was used then it would not use the - default log message of "find help". -- Fixed: D_ReadUserInfoString() parsed the final element of a compact string - as the empty string. Since that was the player class, this meant that any - games with more than one class would pick a random class in multiplayer. -- Fixed: FCanvasTexture::RenderView() should not have color 0 in its output. - -February 5, 2008 -- Updated the GCC-targeted makefiles to turn off two optimizations that cause - fmopl.cpp to compile incorrectly: tree-dominator-opts and tree-fre -- Fixed: Morphed pig and chicken players made normal human *usefail sounds. -- G_DoSaveGame() now receives the filename and description from its arguments - rather than global variables, so autosaves and manual saves can be done - in close proximity to each other without overwriting the parameters for - one of them. -- Fixed potential buffer overrun in G_SaveGame() and added a check so that - you can't interfere with saves that are still pending. -- Fixed: P_LineAttack() creates temporary puffs to get damage types, but this - had the side effect of creating particles for the puff. -- Fixed: The Heretic status bar tried to use the graphic "SELECTBOX" for the - inventory selector. The correct name is "SELECTBO". -- Fixed: Using allowrespawn for a single-player map would fire off enter - scripts instead of respawn script because the player wasn't assigned the - state PST_REBORN. -- Fixed: P_CheckMissileSpawn() now passes the BlockingMobj to - P_ExplodeMissile() so that it can select the appropriate death state. -- Added the manifest to MinGW-compiled builds of updaterevision so you can - build under Vista with MinGW without needing administrative privileges. - (But I still want to know why Vista thinks it needs elevated privileges - without a manifest telling it otherwise.) -- Using four 0xFF bytes for the final note of an IMF song should signal the - end of the song. - -February 4, 2008 -- Applied a modified version of Karate Chris's screenshot naming patch. -- Sbarinfo optimization: Creating and destroying bar textures every frame is - a relatively expensive operation. We can skip the custom texture entirely - and just draw the bars directly to the screen, using the clipping parameters - for DrawTexture(). This also means bars are no longer limited to the game - palette, and the bar itself has the same resolution as the screen. - -February 2, 2008 -- Removed support for numeric flags from sbarinfo's drawmugshot command since - it was previously declared unrecommended and deprecated. -- Added Blzut3's sbarinfo update #10: - * Fixed: drawmugshot now adjust to the player's max health like it should. - * drawgem can now accept negative paddings. - * Added: You can now specify a border on drawbar which will reserve x - amount of pixels on each side of the fg image. - * Added: weaponammo command which allows for determining what kind of ammo - the current weapon uses. - * Added: Drawkeybar to SBarInfo - -January 31, 2008 (Changes by Graf Zahl) -- Fixed: The STYLEF_Alpha1 flag intended for STYLE_Normal was set for STYLE_Fuzzy. -- Fixed: The render style table for old decorations was missing STYLE_Stencil so - STYLE_Translucent was mapped incorrectly. - -January 30, 2008 (Changes by Graf Zahl) -- Added support for AttackZOffset to P_RailAttack. -- Fixed: ParseDrawTextureTags read DTA_RenderStyle as ERenderStyle, not FRenderStyle. - -January 29, 2008 -- Added pixel-doubled and -quadrupled screen modes to D3DFB so that users with - recent NVidia drivers can still use resolutions below 640x480, since NVidia - saw fit to remove all support for them. - -January 27, 2008 (Changes by Graf Zahl) -- Added a PrecacheTexture virtual function to DFrameBuffer because it's the - renderer which should decide how to precache a texture. -- Added SnowKate709's APROP_MaxHealth submission. -- Fixed: FTexture::GetScaledWidth/Height always rounded down which could result in - imprecisions (e.g. when scaling from 128 to 96.) -- added a mastervolume CVAR for Timidity because for me its output is considerably - louder than everything else. -- reverted removal of AddPatch call in crosshair initialization. -- Modified makewad.c so that it doesn't write file names with '[]^' to the - dependency file. Apparenly make can't handle these names and an incomplete - list is still better than something that doesn't work at all. -- Changed license for r_data.cpp because there isn't anything of id's original - code left in that file. -- Cleaned up r_data.cpp. -- Fixed: FTextureManager::FindTexture should not print error messages if it - doesn't find the texture. -- Added Karate Chris's patch for fixing Strife quit messages. - -January 26, 2008 -- Added preloading of fonts to reduce the chance that characters from a single - font will require more than one hardware texture to display. -- Fixed: P_RailAttack() crashed if you didn't specify a puff for a rail. -- Decided that allowing arbitrary alpha values for color remaps isn't so hot. - Changed it back the way it was. - -January 26, 2008 (Changes by Graf Zahl) -- Got rid of most TexMan.AddPatch calls because they are no longer needed. -- Got rid of R_InitPatches because the new texture init code needs to preload - everything to work correctly. -- Rewrote texture manager initialization to order textures primarily by WAD - rather than by type. This way later textures will always override earlier - ones. The only exception is that TEX_MiscPatch are only used as a fallback - if nothing else can be found. -- Optimized the tryany case of FTextureManager::CheckForTexture. It is not - necessary to scan the hash chain twice. The required information can be - retrieved during the first pass as easily and even offers a little more - control. -- Made FFont destructor virtual. -- Added 'Ice' translation to DECORATE. -- Added Karate Chris's patch for teamplay MAPINFO option. -- Added Karate Chris's patch for custom damage color per player class. -- Added Karate Chris's patch for respawnlimit skill property. -- Added Karate Chris's patch for Strife quit messages. -- Fixed: P_RailAttack ignored the puff's damage type. -- Fixed: ACS used incompatible values for APROP_RenderStyle. It needs to use - the exact same values as previous ZDoom versions -- Added a DECORATE 'stencilcolor' property so that the stencil render style - can be used. -- Added some NULL pointer checks to the font loading code. - -January 25, 2008 -- Undid some of the changes from lempar.c v1.30->v1.31, because it broke - error handling. -- Fixed: dehsupp/scanner.re defined "}" as the token RPAREN. dehsupp/parse.y - also defined action_list_def as needing a RBARCE. I'm surprised it worked - at all before. I guess Lemon really was too accepting. I have verified that - the lump it outputs is unchanged from before. -- Changed the way that xlatcc handles include statements so that I don't need - to modify the logic of lempar.c. I also discovered that the grammar was - improperly defined and only accepted the first statement. It worked before - because Lemon used to accept multiple times before reaching the EOF token. - I have also verified that it is still generating the proper lumps. -- Removed some unused wadsrc files from the repository. -- Fixed my re2c upgrade. -- Back to lemon.c v1.53 now. The bad change was v1.51: "Changes lemon so - that the generated parser does not accept prior to seeing the EOF token." - This seems like a valid change, which means I need to rethink my strategy - for handling include statements, since this change breaks what I was - doing before. -- Lemon is now producing parsers that don't accept anything, so I'm going - back to v1.43 and trying each intermediate version to see where things - went wrong. - -January 24, 2008 -- Updated Lemon to its latest versions as of today. - (lemon.c: v1.53, lempar.c: v1.31) -- Added .txt files to the list of types (wad, zip, and pk3) that can be - loaded without listing them after -file. -- Fonts that are created by the ACS setfont command to wrap a texture now - support animated textures. -- FON2 fonts can now use their full palette for CR_UNTRANSLATED when drawn - with the hardware 2D path instead of being restricted to the game palette. - -January 23, 2008 -- Fixed: Toggling vid_vsync would reset the displayed fullscreen gamma to 1 - on a Radeon 9000. -- Added back the off-by-one palette handling, but in a much more limited - scope than before. The skipped entry is assumed to always be at 248, and - it is assumed that all Shader Model 1.4 cards suffer from this. That's - because all SM1.4 cards are based on variants of the ATI R200 core, and the - RV250 in a Radeon 9000 craps up like this. I see no reason to assume that - other flavors of the R200 are any different. (Interesting note: With the - Radeon 9000, D3DTADDRESS_CLAMP is an invalid address mode when using the - debug Direct3D 9 runtime, but it works perfectly fine with the retail - Direct3D 9 runtime.) (Insight: The R200 probably uses bytes for all its - math inside pixel shaders. That would explain perfectly why I can't use - constants greater than 1 with PS1.4 and why it can't do an exact mapping to - every entry in the color palette. -- Fixed: The software shaded drawer did not work for 2D, because its selected - "color"map was replaced with the identitymap before being used. -- Fixed: I cannot use Printf to output messages before the framebuffer was - completely setup, meaning that Shader Model 1.4 cards could not change - resolution. -- I have decided to let remap palettes specify variable alpha values for - their colors. D3DFB no longer forces them to 255. - -January 22, 2008 -- Updated re2c to version 0.12.3. -- Fixed: A_Wander used threshold as a timer, when it should have used - reactiontime. -- Fixed: A_CustomRailgun would not fire at all for actors without a target - when the aim parameter was disabled. -- Made the warp command work in multiplayer, again courtesy of Karate Chris. -- Fixed: Trying to spawn a bot while not in a game made for a crashing time. - (Patch courtesy of Karate Chris.) - -January 21, 2008 -- Removed some floating point math from hu_scores.cpp that somebody's GCC - gave warnings for (not mine, though). -- Fixed: The SBarInfo drawbar command crashed if the sprite image was - unavailable. -- Fixed: FString::operator=(const char *) did not release its old buffer when - being assigned to the null string. -- The scanner no longer has an upper limit on the length of strings it - accepts, though short strings will be faster than long ones. -- Moved all the text scanning functions into a class. Mainly, this means that - multiple script scanner states can be stored without being forced to do so - recursively. I think I might be taking advantage of that in the near - future. Possibly. Maybe. -- Removed some potential buffer overflows from the decal parser. - -January 18, 2008 -- Applied Blzut3's SBARINFO update #9: - * Fixed: When using even length values in drawnumber it would cap to a 98 - value instead of a 99 as intended. - * The SBarInfo parser can now accept negatives for coordinates. This - doesn't allow much right now, but later I plan to add better fullscreen - hud support in which the negatives will be more useful. This also cleans - up the source a bit since all calls for (x, y) coordinates are with the - function getCoordinates(). -- Added support for stencilling actors. -- Added support for non-black colors specified with DTA_ColorOverlay to the - software renderer. -- Fixed: The inverse, gold, red, and green fixed colormaps each allocated - space for 32 different colormaps, even though each only used the first one. -- Added two new blending flags to make reverse subtract blending more useful: - STYLEF_InvertSource and STYLEF_InvertOverlay. These invert the color that - gets blended with the background, since that seems like a good idea for - reverse subtraction. They also work with the other two blending operations. - -January 17, 2008 -- Added subtract and reverse subtract blending operations to the renderer. - Since the ERenderStyle enumeration was getting rather unwieldy, I converted - it into a new FRenderStyle structure that lets each parameter of the - blending equation be set separately. This simplified the set up for the - blend quite a bit, and it means a number of new combinations are available - by setting the parameters properly. - -January 16, 2008 (Changes by Graf Zahl) -- Fixed: The StatusBar pointer was not NULLed after being deleted. - -January 15, 2008 -- Plugged more leaks in SBARINFO. -- Spawned actors that have MF2_DORMANT set in their default instance now have - Deactivate() called on them immediately after spawning. - -January 15, 2008 (Changes by Graf Zahl) -- Fixed: Skip_Super didn't clear the current state label list. - -January 14, 2008 -- Fixed: ACS translations were loaded into the wrong slot after restoring a - savegame. -- Fixed exploit: Dropping ammo at baby and nightmare skill levels would give - you back more than you dropped. - -January 13, 2008 (Changes by Graf Zahl) -- Moved A_Punch from Inventory to Actor. Apparently there are WADs that use it - for monsters. The function works fine for monsters as it is. - -January 12, 2008 -- Applied Blzut3's SBARINFO update #8: - * Fixed: Drawbar had a few memory leaks. -- Applied Blzut3's SBARINFO update #7: - * Added drawstring to SBARINFO. - * Added animatedgodmode flag to drawmugshot, also changed the flags to use the - standard named arguments instead of numbers. The old way is considered - deprecated. - * Added kills, monsters, items, totalitems, secrets, and totalsecrets to - drawnumber. Drawbar can also use kills, items, and secrets. - * Added weaponicon to drawimage which will display the inventory.icon of the - currently selected weapon. - * Fixed: I apparently forgot to add the "rampage" face to drawmugshot. - -January 12, 2008 (Changes by Graf Zahl) -- Moved renderer dependent part of savegame pic creation into DFrameBuffer - as a virtual function so that it can be overridden. -- Fixed: M_SaveBitmap::prior was too small. It must be 3 bytes per pixel, - not 1. -- Replaced INVGEM** graphics with PNG versions so that they have the - correct colors when used on the AltHUD in Strife. - -January 11, 2008 -- Added support for 24-bit screenshots, so now accelerated 2D screenshots - can work. -- Tweaked the box splitting algorithm for packed textures to hopefully - produce less wasted space. -- For compatibility with the software renderer, D3DFB::DrawTextureV needs to - truncate the coordinates to integers before sending them to the hardware. - Otherwise, there can be one pixel gaps compared to the software renderer, - because the hardware is rounding to nearest but the software renderer is - simply truncating the fractional part of the coordinate. This is the real - cause of the gap above the status bar at 1152x864 (and another gap to the - left of the status bar at 800x500). -- Fixed: When D3DFB::DrawTextureV had to clip a tile, it adjusted the - texture coordinates erroneously, still using the old calculations from - before texture packing was implemented. -- Moved thingdef_codeptr.cpp into thingdef/ with the other thingdef files. - -January 11, 2008 (Changes by Graf Zahl) -- Added Skulltag's pickup sprite and related information to the pistol. This - will also double as the pistol's icon in the AltHUD. -- Added a generic log display that can show Strife's log messages in all games - regardless of the current game, active status bar and HUD mode. -- Added GZDoom's alt HUD. - -January 10, 2008 -- Fixed: After loading a savegame, G_UnSnapshotLevel() destroyed the - unmorphed versions of players because it thought they were extras. -- Fixed: Weapon positions were only adjusted in 1280x1024 if the status - bar was hidden. -- Fixed: If you died in co-op and somebody else ended the map before you - respawned, you would start the next map with only default inventory, no - matter what dmflags was set to. -- Applied Karate Chris's TEAMINFO logo patch. - -January 10, 2008 (Changes by Graf Zahl) -- Moved the code that renders the view from D_Display into a virtual function - of the frame buffer so I can get rid of the last remaining renderer check - outside the display code in GZDoom. -- made V_SetResolution a virtual function in IVideo. It's probably not a perfect - solution but at least it allows overriding it (which I need in GZDoom.) - Note: There's a lot of redundancy between hardware.cpp/h in the SDL and Win32 - folders so some cleaning up might be a good idea. -- defined a constant for the crosshair menu entry's index to get a direct - reference out of the function code. In GZDoom the menu contains different - information. -- Fixed: The BrainExplosions should not perform any collision detection. To - achieve this their Damage value must be set to 0 when being spawned. - -January 9, 2008 -- Added Blzut3's SBARINFO update #6: - * Fixed: A tutti-frutti like effect would occur if transparent images were - used in bars. - * Fixed: drawswitchableimage didn't count having 0 of an item as not having - the said item. - * Added alwaysshowcounter flag to both drawinventorybar and - drawselectedinventory. - * Added armoricon image type to drawimage. - * Added low-on secondary coloring and high-on coloring to drawnumber. -- Added texture packing to D3DFB so that textures that are temporally related - can share the same hardware texture. This greatly reduces the number of - DrawPrimitive calls that need to be made when drawing text (or any 2D - graphics in general), so now hardware text is much faster than software text - all around. (As an example, one scenario went from 315 fps to over 1635 fps - for hardware, compared to 540 fps for software.) -- Fixed: The mouse was being grabbed in windowed mode again. -- Modified M_DrawFrame() and R_DrawTopBorder() so that they call FlatFill() to - draw the edges of the frames. This at least seems a bit faster for hardware - 2D. -- Implemented FlatFill() for D3DFB. It seems to be exactly as fast as the - default implementation that just calls DrawTexture() to tile the pieces onto - the screen, so I'm not sure it was worth the bother. -- Merged the separate line and quad vertex buffers in D3DFB back into a single - vertex buffer, made line batching automatic, and added an index buffer for - use when batching quads. The index buffer actually offered more of a - performance boost than simply batching the quads alone did. - -January 9, 2008 (Changes by Graf Zahl) -- Added a safety check to savegame versioning so that an invalid revision - (reported as 0) will be handled without breaking savegame compatibility. -- Fixed: 'Painchance' in DECORATE failed when reading custom damage type names. -- Added Karate Chris's patch for menu opening console commands. - -January 8, 2008 -- Fixed: When starting a teamplay netgame, players who did not specify a team - were not informed about which team they ended up joining. -- Added Skulltag's DF2_SAME_SPAWN_SPOT flags. -- Fixed: DF2_YES_DEGENERATION was pretty much guaranteed to go out of sync - because it used gametic for timing. -- Added DoubleAmmoFactor as a skill property for the DF2_YES_DOUBLEAMMO flag. -- Renumbered the dmflags2 entries to match Skulltag's again. -- Added Karate Chris's infinite inventory patch. - -January 7, 2008 -- Added support for user-defined crosshairs in the Display Options menu. See - xhairs.txt in zdoom.pk3. It's pretty simple. -- Fixed: P_BounceWall() cannot assume that BlockingLine is the line the actor - should bounce off of. Since the order lines in a blockmap cell are checked - for collision is essentially undefined, there could be another line closer to - the actor that it should bounce off of instead. -- Fixed: Thing_SetTranslation still used a 16-bit word to hold the translation. -- Bumped the maximum resolution up to 2560x1600. -- Fixed: DCanvas::DrawTexture() only expanded virtual screen sizes for widescreen - resolutions but left 5:4 modes alone. This fix neccessitated the addition of - DTA_Bottom320x200 for the status bar to use so that it could be flush with the - bottom of the screen rather than sitting slightly above it. -- Fixed: FConfigFile::ReadConfig()'s definition of whitespace was too broad. -- Fixed: Defining custom translation ranges in descending order and/or with gaps - made for crashes. - -January 7, 2008 (Changes by Graf Zahl) -- Added fix for Heretic IDKFA cheat by Karate Chris. -- Added fix for Strife's AlienSpectre obituary by Karate Chris. - -January 6, 2008 (Changes by Graf Zahl) -- Re-converted icebreak.flac because the old version apparently didn't work. -- Added SBARINFO update #5 by blzut3: - - Fixed: Playerclass still didn't work due to comparing of improper numbers. - - Fixed: The arrows on drawinventorybar had a hard coded location instead of - relative to the specified coordinates. - - Added noarrows flag to drawinventorybar to remove the blue arrows drawn when - there are more items to the left or right of the viewable bar. - - Added forcescaled flag to the statusbar command. This is ignored on the - inventory and inventoryfullscreen types. -- Added obituary fix for Strife peasants by Karate Chris. -- Added fix for loading during demo playback by Karate Chris. -- Added scoreboard fix by Karate Chris. -- Added teamgame fix for menu by Karate Chris. -- Added GZDoom's Sector_Outside sector type which forces outside fog - regardless of ceiling texture. - -January 6, 2008 -- Fixed: Since the minimum size for a texture is 2x2, FBarShader can't use - a one-dimensional texture. -- Added back the code to allow some variation to the players' shades when - players are on teams. -- Set TEAM_None back to 255. Since a player's team has already been accessible - through ACS, needlessly redefining this is a bad thing to do, since it can - break existing maps. 255 different teams should still be more than enough. -- Fixed: At certain resolutions, there was a one pixel row between the status - bar and the rest of the screen, thanks to rounding error. -- Added automatic batching of quads to D3DFB. Screens with a lot of text are - ever-so-slightly faster now, though still only about half the speed of - sofware-only text. I suppose the only way to see a marked improvement is - going to be by stuffing multiple glyphs in a single texture. -- Fixed: Crosshairgrow's animation was not framerate-independent. - -January 5, 2008 (Changes by Graf Zahl) -- Added: Automap markers are stored in savegames now. Also moved the call - to AM_LevelInit to its proper place in G_DoLoadLevel, right after - the call to P_SetupLevel to make it work as intended. -- Changed savegame versioning to use the SVN revision number instead of - an arbitrarily defined value. This reduces the amount of relevant values - that have to be defined in version.h to 1 (the minimum compatible savegame - version) instead of previously 3. - -January 4, 2008 -- Fixed: FBarShader::PrepareShader() set a member variable to point at a - local variable just before returning. Then I made some more changes so that - it can be a properly functioning texture. After doing that, I decided to - rewrite the texture generation to be easier for me to read and hopefully - faster, since this thing is getting generated every frame. (Please don't - hurt me if I got it wrong. I'm basing this on the description in the wiki, - since I couldn't wrap my head around what the code was doing by looking - at it.) Then I realized that there's really no reason to have more than four - of these ever, and they can be statically generated, so I simplified it some - more. -- Added Blzut3's latest SBARINFO patch: - * Fixed a massive memory leak in SBARINFO. The leak also lead to progressive - CPU usage. - * Fixed: Playerclass didn't work in SBARINFO. - * Fixed: Artiflash was improperly initialized causing it not to display the - first time. - * Changed the variable SBarInfoScript to be a pointer to prevent more memory - leaks. - -January 4, 2008 (Changes by Graf Zahl) -- Removed the patches for the Doom/Heretic E1 intermission screens from - R_InitPatches. This isn't needed anymore because all these are loaded through - an intermission script. -- Fixed: A_SpawnDebris read the third and fourth arguments from the first one's - address. - -January 3, 2008 -- Moved the pixel shaders' color information out of the constant registers - and into the vertex data. -- Added functions for doing line drawing with Direct3D, including a new pair - of functions to do batched line drawing so that the map can actually be - drawn faster in hardware than in software (instead of an order of magnitude - slower). - -January 2, 2008 -- Tried adding bilinear filtering support for paletted textures, but the - shader seems to be producing crappy output, so it's disabled for now. - Specifically, it produces distorted output at regular intervals for - textures that aren't power-of-2-sized, and it's still doing visible - filtering when the texture is rendered at its original size, so - obviously it's not doing something right. -- Fixed the use of power-of-2-sized native textures for smaller game - textures again. -- Fixed: D3DFB did not restore all the state it needed to after resetting - the device. -- Fixed: R_DrawTopBorder() must clip itself around the 3D view, since it's - now drawn later. -- With full software rendering, palette flashes once again affect the whole - screen. - -January 1, 2008 -- The mouse is no longer grabbed at all unless you're actually in a level, - since I couldn't think of any reason why it should be grabbed at any other - time. (This only applies to windowed mode, where it makes sense to let the - OS have control of the pointer.) -- Moved the view border drawing into the 2D mode part. When using Begin2D() - now, the only part of the software buffer that gets updated to the screen - is the part with the actual 3D scene and only if you tell it to. -- Fixed a D3D memory leak on every frame in windowed mode and the same thing - for the screen wipes. Note to self: If it's an interface, be sure to - Release it, because it will be AddRef'ed before being returned to you. -- Moved the BlendView() call out of DBaseStatusBar::Draw() so that it can be - applied before copying the 3D scene to the screen underneath the 2D parts. -- Restored the console's darkening level to its old table-based amount. -- Fixed D3DFB::SetColorOverlay()'s incorrect calculations. -- Fixed the D3D screen wipes for letterboxed modes. - -January 1, 2008 (Changes by Graf Zahl) -- Fixed: A_JumpIfTargetInLOS had inconsistent parameter definitions. - -December 31, 2007 -- Removed the screenshot parameter from D_Display(), since it was a relic of - a long-abandoned experiment to write directly to video memory instead of - to a temporary buffer in system memory. -- Added Direct3D versions of the melt and burn screenwipes. -- Fixed the strip sizes for the melt screenwipe to match what Doom would have - produced on a 320x200 screen, rather than producing more, thinner strips - for wider screens. - -December 29, 2007 -- Started writing Direct3D-friendly wipe code. It's just a Q&D crossfade for - now. - -December 29, 2007 (Changes by Graf Zahl) -- Changed the FStatusBarTexture for Doom so that it can create a true color - image. - -December 28, 2007 -- Fixed position of the Doom HUD selectbox as per SnowKate709's guidance. - -December 28, 2007 (Changes by Graf Zahl) -- Changed FImageCollection so that it accepts a matching texture of any type. - This is necessary to load hires sprite replacements for certain icons. -- Added a check to Wads.CheckNumForName to return -1 for names longer than - 8 characters which contain path separators. -- Fixed: Hires texture replacement must replace all matching textures, not - just the first one found. This is particularly important for icons based - on sprites. -- added a con_alpha CVAR to set the console's translucency. -- Added MartinHowe's submission for A_CustomBulletAttack aimfacing parameter. -- Added MartinHowe's submission for A_PlaySoundEx attenuation parameter. -- Fixed: Bots shouldn't target friendly monsters. -- Fixed a typo in sbarinfo.cpp (noatribox instead of noartibox.) - -December 27, 2007 -- Fixed cases where a larger power-of-2-sized native texture had to be - allocated. (I wonder if D3D actually handles this automatically when you use - D3DPOOL_MANAGED, because I'm pretty sure my laptops's x300 doesn't support - non-power-of-2 texture sizes, yet it worked just fine before.) -- Fixed vertical positioning of 2D elements in letterboxed modes. -- Removed DCanvas::Blit(), as it's no longer used. -- Added a function to create a texture from a stand-alone PNG file. The save/ - load menus now use this to get their thumbnails. - -December 27, 2007 (Changes by Graf Zahl) -- Fixed: DFrameBuffer::CopyPixelData copied data as RGBA instead of BGRA. -- Temporarily changed FPNGTexture and FDDSTexture to always create True Color - native textures to preserve the original colors. -- Darkened the console background a little after finding out that on - very bright title pics it became quite hard to read the console's contents. -- Fixed: PROP_Translation needed to be changed for the new value format. -- Added GZDoom's MAPINFO fog parameters as no op dummies so I can use - WADs that contain them without constantly having to edit the MAPINFO. - It also allows using them to optimize hardware fog for WADs that should - run with ZDoom as well. - -December 26, 2007 -- Changed the way gamma works for D3DFB: In windowed mode, the display is - drawn to a texture, then that texture is copied to the real back buffer - using a gamma-correcting pixel shader. In fullscreen mode, SetGammaRamp - is used. -- Fixed flashing of vid_fps display when fps > 1000. -- Fixed loading of RGB textures for native 2D mode. -- Changed the first rotozoomer's data because it just became too obvious when - the backdrop is drawn with a full 256 distinct colors available. -- Set the player backdrop to update no more frequently than 35 FPS, so opening - the player setup menu before starting a game won't produce a very fast - moving backdrop. -- Changed the player backdrop into a texture so that it can be drawn like - anything else. -- Enhanced TMap so that you can get at the iterator types by accessing them - like class members. - -December 26, 2007 (Changes by Graf Zahl) -- Fixed: The FSpecialFont constructor copied the untranslated colors directly - from the source palette instead of the font's identity map. -- Split off the entire translation code from r_draw.cpp into r_translate.cpp. -- Moved the common code of ACS and DECORATE translation generation into the - FRemapTable class. -- Fixed: The DECORATE translation code was not changed for the new data structures. -- Expanded range of ACS and DECORATE translations to 65535. -- Fixed: R_CopyTranslation was not altered for the new functionality. - I removed the function and replaced the one use with a simple assignment. - -December 25, 2007 -- Fixed: The fullscreen console crashed when opened before starting a game. -- Discovered that Shader Model 1.4 clamps my constants, so I can't use - palettes smaller than 256 entries with the shader I wrote for it. Is there - a list of gotchas like this listed some where? I'd really like to see it. - - Well, when compiled with SM2.0, the PalTex shader seems to be every-so- - slightly faster on my GF7950GT than the SM1.4 version, so I guess it's a - minor win for cards that support it. - -December 25, 2007 (Changes by Graf Zahl) -- Replaced 'C:\\ZDOOMDAT' with a #define in version.h. -- Moved screenshot code into DCanvas so that it can be overridden by - subclasses with a different buffer. -- added a P_PointInSector function and replaced all calls to retrieve an - actor's sector in the game engine code with it. This way there's a clear - distinction between renderer-specific and game-specific calls. -- added UseInventory/UseActorInventory ACS functions. - -December 24, 2007 -- Fixed: ST_Endoom() failed to free the bitmap it used. -- Added the DTA_ColorOverlay attribute to blend a color with the texture - being drawn. For software, this (currently) only works with black. For - hardware, it works with any color. The motiviation for this was so I could - rewrite the status bar calls that passed DIM_MAP to DTA_Translation to - draw darker icons into something that didn't require making a whole new - remap table. -- After having an "OMG! How could I have been so stupid?" moment, I have - removed the off-by-one check from D3DFB. I had thought the off-by-one error - was caused by rounding errors by the shader hardware. Not so. Rather, I - wasn't sampling what I thought I was sampling. A texture that uses palette - index 255 passes the value 1.0 to the shader. The shader needs to adjust the - range of its palette indexes, or it will end up trying to read color 256 - from the palette texture when it should be reading color 255. Doh! -- The TranslationToTable() function has been added to map from translation - numbers used by actors to the tables those numbers represent. This function - performs validation for the input and returns NULL if the input value - is invalid. -- Major changes to the way translation tables work: No longer are they each a - 256-byte array. Instead, the FRemapTable structure is used to represent each - one. It includes a remap array for the software renderer, a palette array - for a hardware renderer, and a native texture pointer for D3DFB. The - translationtables array itself is now an array of TArrays that point to the - real tables. The DTA_Translation attribute must also be passed a pointer - to a FRemapTable, not a byte array as previously. - -December 24, 2007 (Changes by Graf Zahl) -- added some functionality to FDynamicColormap to allow not creating - the colormap data. -- also replaced the AM crosshair drawer by a DCanvas::DrawPixel function. -- moved the AM line drawer into DCanvas as a virtual function. While testing - this code I discovered that the antialias precalculation was never used - except for the very first frame of AM drawing. However, since I couldn't - detect even a marginal performance improvement using this code on 2 computers - I just disabled it completely because it severely complicates a more generic - implementation. I also disabled am_ovtrans in the process because I couldn't - see any positive effects of using this cvar. All it does is adding some - ugly distortion to the lines it affects without any apparent benefits. -* Added fix by Karate Chris containing: -- Added a 'No team changing' DMFlag2 which prevents players from changing teams - unless they are not on a team. -- Added a 'No respawn' DMFlag2 which prevents a player from respawning after - they have died. -- Added a 'Keep frags gained' DMFlag2 which allows you to choose whether you - want to reset the frags of each player next level or not. -- Added a small visual enhancement to the cooperative scoreboard to show - if a player has died. -- Fixed: If the 'teamplay' console variable was set to 'true' in a cooperative - game, the scoreboard would show team play related items as opposed to - cooperative items. -- Fixed: The 'bot_observer' console variable should not work in network games. -- Fixed: Bots made intermission skip really fast. - -December 23, 2007 (Changes by Graf Zahl) -- Fixed a few font related problems. -- Fixed: ASkyViewpoint::Destroy was missing the super call. -- Added SnowKate709's A_LookEx update. -- Moved M_DrawPlayerBackdrop into DCanvas as a virtual function. Since this - directly accesses the frame buffer it must be overridable for rendereres - that work differently. -- Added Blzut3's third SBARINFO update: - * Added drawshader to draw Heretic style transparency gradients. - * Added artiflash flag to drawselectedinventory. - * Fixed: Drawgem used the wrong operator when determining the chain size. - * Fixed: ZDoom would crash if an undefined font was used. - * I also started cleaning up the source a little. I have been informed that - when checking for flags the "== flagname" is redundant. -- Added indexfont anf hudfont from GZDoom to zdoom.pk3 so that they are always - available when defining custom status bars. -- Added Karate Chris's 'sv_losefrag' submission. -- Added Karate Chris's 'sv_degeneration' submission. -- Fixed: 'Bot joined the team' message was passing an FString to Printf. -- Backported GZDoom's true color font mappings for use with native textures - when the time comes. -- Added Karate Chris's 'sv_doubleammo' submission. -- Added Karate Chris's 'Take' console command submission. -- Changed DTA_Translation parameter for DrawTexture to an integer to avoid - passing renderer specific data to the function. Also added DTA_Font so - that the renderer can fetch font translations from the proper font. - DIM_MAP/ConShade had to be made a regular translation table to make it - work. -- Added Karate Chris's fix for scoreboard displaying team play related data - in non teamplay games. -- Fixed: The team selection menu didn't work. -- Fixed: UpdateTeam passed an FString to Printf. - -December 22, 2007 -- Modified DFrameBuffer::DrawRateStuff() so that it can do its thing properly - for D3DFB's 2D mode. Before, any fullscreen graphics (like help images) - covered it up. -- Had a look at sbarinfo.cpp and noticed a few places where it allocated - character arrays and never freed them. Those have been replaced with - uses of FString. (One of these was even an instance of a member variable - being set to point at a stack variable.) - -December 22, 2007 (Changes by Graf Zahl) -- Added Karate Chris's teamdamage in MAPINFO submission. -- Added Blzut3's second SBARINFO update. -- Fixed: The second flash state of the chaingun called A_Light1 instead of A_Light2. -- Added Blzut3's SBARINFO update. - -December 21, 2007 -- Added versions of Dim and Clear to D3DFB for use in 2D mode. -- Added a new color parameter to DCanvas::Clear() that specifies the - ARGB value of the color. This is used if the old color parameter, - which specifies a palette entry, is -1. -- Fixed: TEAMINFO broke bot parsing for bots with invalid team names by - redefining TEAM_None from 255 to -1. - -December 21, 2007 (Changes by Graf Zahl) -- Added Karate Chris's fix for TEAMINFO definitions with just one team. - -December 20, 2007 (Changes by Graf Zahl) -- Added Blzut3's SBARINFO submission. -- Added SnowKate709's A_LookEx submission. -- Added Karate Chris's TEAMINFO submission. -- Added true color processing to FDDSTexture. This is untested so far - because I don't have any DDS textures to check it with. -- Fixed: FTexture::~FTexture() must destroy the associated native texture - if present. -- Modified GZDoom's true color texture copy functions and added them - to generate 32 bit D3D textures. Paletted TGAs and PCXs are also handled - this way but I don't think these 2 formats are worth some more special - handling. - (Question: Is it worth it to implement special handling for paletted PNGs - so that they are used as 8 bit textures internally?) -- Fixed: DCanvas::Blit unlocked the destination twice instead of unlocking - both dest and src. Also changed this function so that it is owned by the - destination canvas of the operation which is necessary if it needs to - be overridden by subclasses. -- Fixed: The StrifePlayer defined the wrong color range for its translations. - -December 19, 2007 -- Added a framework for drawing the 2D screen elements with Direct3D textures. - They are not actually drawn with it yet, nor is it complete, but it's - something to start with. While doing this, I noticed the DTA_Shadow stuff - doesn't do anything. I'll probably remove them rather than fix them, since - it's easier to draw the shadow with a separate DrawTexture call. -- Split up DCanvas::DrawTexture() into more pieces to make it easier to - virtualize. -- Removed support for non-32-bit palette textures from D3DFB. What kind of - card supports pixel shaders but not 32-bit textures? - -December 17, 2007 -- Fixed: In the video modes menu, pressing Enter tried to change the screen - mode, even if the cursor wasn't on one of the mode items. -- Fixed: Heretic's mace never respawned in deathmatch games. -- Fixed: At resolutions taller than 600 pixels or so, tall sky textures were - drawn a row too low. This was quite visible on Hexen MAP06. -- Fixed: P_CheckSlopeWalk() must return false if floorsector != sector, or - the actor will be yanked down to the floorsector by P_TryMove(). -- Fixed: ClearActorInventory, GiveActorInventory, and TakeActorInventory - only affected the first actor with the given TID. -- Fixed: The color boxes for the colorpicker menu items were drawn a little - too low. -- Fixed: Clean scaling at 720x480 looked borked. -- New: When using the D3D9 framebuffer, palette blending is now applied only - to the 3D area of the screen. This means the console and (the primary - rectangular area of) the status bar are no longer blended. Maybe somedays - when I'm feeling adventurous, I'll exclude all the 2D graphics from the - blending. - -December 17, 2007 (Changes by Graf Zahl) -- Fixed: When a skybox viewpoint is destroyed it should clear all - sector references to itself. - -December 14, 2007 -- Fixed: G_QueueBody() should only change the translation to one of its - private slots if the one currently used is a player range. -- Fixed: Changing the fraglimit during the middle of a game would not trigger - a level change if somebody was already over the new limit. -- Added "\c" support to ParseCommandLine() when it parses quoted strings. -- Fixed: When changing your name from the menu, you got an extra " appended - to your name if it ended with a backslash. -- Added escape sequences for user info strings, so now they can contain - embedded backslashes. -- Fixed an array-out-of-bounds access when drawing the player setup menu with - an invalid team number. - -December 10, 2007 -- Fixed: The MAPINFO flags that control jumping, crouching, and freelook, - rather than overriding the dmflags values, actually overwrote the dmflags - values, so they would continue to be in effect on later maps that didn't - explicitly specify them. -- Fixed: Redefining a decal did not rebind any old references to the decal, so - they would be left pointing at invalid data. -- Fixed some more GCC warnings. -- Updated project files for nasm 2.0, which is now named nasm.exe for the - Windows version, rather than nasmw.exe. Also fixed the annoying new warnings - it generated. - -December 10, 2007 (Changes by Graf Zahl) -- Fixed: M_VerifyNightmare must use the selected skill level to start the - game, not always 4. - -December 9, 2007 (Changes by Graf Zahl) -- Fixed: There was no working means to pass 'no state' to A_Chase. - Now 0 or an empty string will do that. -- Copied the empty string fix for SC_CheckNumber to SC_CheckFloat. - -December 8, 2007 -- Fixed: SECSPAC_EyesSurface and SECSPAC_EyesDive did not trigger due to - crouching motion. -- Fixed: The keypress for nightmare mode verification appeared in the console - if the fullscreen console was open while using the menu. -- Added support for scaling down large console fonts in the customize - controls menu. -- Fixed: Joining a negative team was possible. -- Fixed: Skill level confirmation only worked with Doom. Also fixed parsing - of MustConfirm: It looked for TK_String when it should have used TK_StringConst. -- Fixed: When travelling to a new non-hub map, any items being carried with - amounts of 0 would be upped to 1. -- Fixed: When the game starts with the net pane open, the abort button - receives the input focus. When the pane is closed, the focus doesn't - return to any window, so even though the window is still active, it no - longer has the focus and does not receive input events. -- Fixed: The network synch timer was still left running after the game - started. (Windows only) -- Fixed: When a player leaves the game at the exact moment they are being - damaged, the game could crash because their actor still had a valid player - pointer, but the player's mo pointer had been NULLed. -- Fixed: MAPINFO is parsed before the text colors are read, so the TextColor - option for skills wouldn't work. -- Changed the PowerTimeFreezer "blink" effect back to checking against - EffectTics (now + 1), because I wasn't convinced of the correctness of - using level.time. -- Fixed: SC_CheckNumber() considered the empty string "" as the number 0. -- Reverted the 'None' name change from r569. - -December 6, 2007 -- Fixed the PowerTimeFreezer, too. It got easier once I realized that I only - need to be concerned about changing the flag on odd tics, since A_Tracer() - is called every two tics, not four. -- Fixed: Using the freeze command would make the Revenant missiles switch - their seekingness. The only sane way to deal with this seemed to be to - sync the freeze changes with the timer check in A_Tracer(), so that's what - I did: Freeze mode only changes every four tics now. -- Added IWAD-based [*.Autoload] ini support for games that have more than one - IWAD. They are: - * [Doom1.Autoload] - * [Doom2.Autoload] - * [Plutonia.Autoload] - * [TNT.Autoload] - * [HexenDK.Autoload] - These are loaded after the more general game-specific [Doom.Autoload] and - [Hexen.Autoload] sections if those are present. -- Changed the banner texts for the Final Doom IWADs to identify them as Final - Doom rather than as DOOM 2. I know this differs from the original behavior, - but they're marketed as Final Doom, not Doom 2. -- New: On Windows, the game now checks the registry to see if you have Steam - installed. If so, it checks your SteamApps directory for any IWADs you may - have purchased through Steam and adds any it finds to the list of available - IWADs you can play. This means that if you bought your id games through - Steam, you can just extract ZDoom anywhere you like and run it without doing - any additional setup. -- Fixed: The FLAC/makefile.mgw should use md5.o as an OBJ, not md5.c. -- Fixed: The Linux makefile probably shouldn't be using the bundled zlib headers, - either. - -December 6, 2007 (Changes by Graf Zahl) -- Added Karate Chris's submission for scoreboard enhancement. -- Fixed: A_PainDie and A_DualPainAttack could fail to spawn the correct actor - if the first spawned one died and executed some code in its death state. - -December 5, 2007 -- Fixed: The Linux makefile should use the include files for the system FLAC - installation, not the bundled copies which might not match what is installed. -- Upgraded bundled FLAC from version 1.1.2 to version 1.2.1. - -December 2, 2007 (Changes by Graf Zahl) -- Added Karate Chris's submission for 'allowrespawn' MAPINFO option. -- Added Karate Chris's submission for customizable skill confirmation text. -- Fixed: Doom's statusbar only checked for primary attacks, not secondary ones when - setting Doomguy's face. (Thanks to Karate Chris for the fix.) - -November 29, 2007 (Changes by Graf Zahl) -- added Skulltag's FORCEYBILLBOARD and FORCEXYBILLBOARD flags to the DECORATE parser. - Even though the software renderer has no use for them it is necessary to support them - so that mods can use these flags without becoming incompatible with ZDoom. - -November 28, 2007 (Changes by Graf Zahl) -- after looking at the most recent Vavoom update I realized that A_FastChase should not - use the multi-purpose special2 as counter for strafing so I added a new variable - for this purpose. - -November 24, 2007 (Changes by Graf Zahl) -- added Floor_MoveToValue and Ceiling_MoveToValue action specials. - -November 19, 2007 (Changes by Graf Zahl) -- Changed first name from 'none' to ''. The internal constant is still NAME_None, - though. -- Fixed: Picking up a backpack incorrectly set the maximum amount for any ammo - type that didn't have a BackpackMaxAmount to 0. - -November 18, 2007 (Changes by Graf Zahl) -- Fixed TableShit0 definition. - -November 13, 2007 (Changes by Graf Zahl) -- Fixed Berserk pickup sound. -- Fixed: When the DONTMOVE flag for A_Chase was used, movecount was not decreased - resulting in missile attacks not working. -- Fixed: Hitscan attacks used the puff's position to calculate the trajectory for - weapon kickback. - -November 11, 2007 (Changes by Graf Zahl) -- Fixed: The FMOD stream player must specify whether it wants to play the - sound looped or not when playback is started, not when the stream is created. -- Fixed: A_Saw didn't use the puff's damage type. -- Fixed: The AxeBlood's death state was using the wrong sprite frame. - -November 10, 2007 (Changes by Graf Zahl) -- Fixed: The Mancubus had an attack sound defined even though it shouldn't. - -November 9, 2007 (Changes by Graf Zahl) -- Fixed: ACS's CheckWeapon must do a case insensitive string comparison to - compare the weapon name with the ready weapon's type. - -November 8, 2007 (Changes by Graf Zahl) -- Changed PowerFlight so that Hexen's infiniteness is not controlled by being - in a hub but by a level flag instead. - -November 7, 2007 (Changes by Graf Zahl) -- Fixed: Floor and ceiling huggers must set themselves to floor and ceiling each - time they move. -- Added a LEVEL_NOMONSTERS flag so that G_ChangeLevel doesn't have to mess with - the dmflags CVAR to start the level without monsters. - -November 4, 2007 (Changes by Graf Zahl) -- Fixed: Backpacks didn't increase the ammo capacity to BackpackMaxAmount if - an ammo type's BackpackAmount was 0. -- Fixed some minor bugs in custom skill code. - -November 3, 2007 (Changes by Graf Zahl) -- Added text color options to menu code so that the skill definitions can set - the color of the menu's text. -- Externalized skill settings to ZDoom.pk3 - -November 2, 2007 (Changes by Graf Zahl) -- Added skill definitions to MAPINFO. - -October 29, 2007 (Changes by Graf Zahl) -- added two new things which can set a sector's color without the need of tags - or scripts. ColorSetter (#9038) sets the sector's color and FadeSetter (#9039) - sets the fog color. -- added new flags MF5_ALWAYSFAST and MF5_NEVERFAST. These flags unconditionally - enable or disable fast movement logic, regardless of skill settings. -- added an abstraction layer for skill related settings. This is a preparation - for implementing custom skill definitions but right now all it does is - returning the original values but keeping the related information all in one - place - -October 28, 2007 (Changes by Graf Zahl) -- Fixed: The pointer cleanup code must also check a sector's sky box pointers. - -October 27, 2007 (Changes by Graf Zahl) -- Fixed: Right after teleporting P_SlideMove could cause player movement. - Added a check for reactiontime to prevent that. -- Fixed: PainChances and Damagefactors were never freed. -- Added option to A_Chase that prevents the monster from moving. -- Fixed: The stained glass shards were missing the HEXENBOUNCE flag. - -October 20, 2007 (Changes by Graf Zahl) -- Added some NULL pointer checks to AActor::GiveAmmo. -- Fixed: The FSwordMissile was missing the special damage handling that - reduces damage when hitting a player. - -October 19, 2007 (Changes by Graf Zahl) -- Fixed: APlayerPawn::UpdateWaterLevel must check if the actor is still - connected to a player. -- Fixed: POwered up weapons with a different ready state than their base - weapon didn't change back when the powerup expired. -- Fixed: The powered up version of Heretic's Gauntlets missed the proper - state assignments for Ready, Lower and Raise. - -October 17, 2007 (Changes by Graf Zahl) -- Fixed: The Strife player was missing its pain state. - -October 12, 2007 (Changes by Graf Zahl) -- Fixed: Revenant missiles couldn't home in on targets with a height lower than - 40. -- Fixed: The code which checked for hitscan traces hitting actors from above - and below must test whether the calculated hit position is actually inside - the actor being checked. If it crosses the top/bottom plane outside the - bounding box there can't be a hit. -- Changed: State labels in code pointer calls must now be enclosed in quotation marks. - This was done to ensure compatibility with parsers that will parse these as - identifier-aware script code later. - -October 8, 2007 (Changes by Graf Zahl) -- Fixed: The code that checked hitscans entering an actor from above and below - calculated the hit position wrong. - -October 5, 2007 (Changes by Graf Zahl) -- Fixed: Tne Imp's raise state sequence was wrong due to a typo. -- Fixed: The shotgun had spawn ID 21 instead of 27. -- Fixed: All 3 states in the DoomUnusedStates actor need to end with a 'stop'. - -October 3, 2007 (Changes by Graf Zahl) -- Fixed: The DECORATE TakeInventory functions didn't check the IF_KEEPDEPLETED - flag. - -September 29, 2007 (Changes by Graf Zahl) -- Fixed: ClearInventory should leave ammo in the inventory because it might be - referenced by undroppable weapons. -- Fixed: Several functions in a_artifacts.cpp were missing a check for a valid - owner. -- Fixed: sc_man counted lines wrong when ungetting strings but getting tokens - next. - -September 27, 2007 (Changes by Graf Zahl) -- Fixed: When I changed the scaling of textures to full fixed point precision - I forgot to change the call that draws the automap marker numbers. -- Fixed: The chaingun-flash-checking code always checked the first player, - not the calling one. -- Fixed: Hitscan traces didn't hit actors when entering from above or below -- Fixed: The DECORATE expression evaluator was reading the operator token - from the wrong variable in a few places resulting in incorrect calculations. -- Fixed: MP3/OGG music always looped because the looping flag was always - set when FMOD was called to play it. -- Removed upper limit of 1 for an actor's gravity factor. -- Fixed: A_VileTarget spawned the fire at coordinate (target->x, target->x) - instead of (target->x, target->y). (Old vanilla bug.) - -September 26, 2007 (Changes by Graf Zahl) -- Fixed: F_StartFinale shouldn't get the information if the game is about - to end from level.nextmap. For example, this check is wrong for a secret - exit. - -September 25, 2007 (Changes by Graf Zahl) -- Fixed: AActor::CopyFriendliness must not copy the target if it has the - MF3_NOTARGET flag set. -- Fixed: Picking up weapons in deathmatch gives 2.5 times as much ammo as - in other modes. - -September 23, 2007 (Changes by Graf Zahl) -- fixed: The #include command in DECORATE always tried to look up the name - as a normal WAD lump name. It only should do that if the name is not longer - than 8 characters and doesn't contain any '/'-characters. - -September 11, 2007 (Changes by Graf Zahl) -- fixed: The Timidity player didn't close its temporary files and left them - behind because it couldn't delete them. -- added a $MidiDevice option to SNDINFO which can either set the preferred - MIDI device for a song to Timidity or Windows' standard MIDI device. - The reason for this: About 80% of my MIDI music collection sounds better - with Timidity and the other 20% with Windows' standard synth and I'd like - to be able to use each with the one that sounds better. For MUS files you - can also force the use of OPL playback. - -September 8, 2007 (Changes by Graf Zahl) -- added telefrag option to A_SpawnItemEx. - -September 5, 2007 (Changes by Graf Zahl) -- Fixed: Several options while changing maps only worked for the regular exit - but caused problems when used with the secret exit. Rewrote the code to - set the next map at the beginning and removed all subsequent parts that - tried to resolve it from the original data again. - -August 19, 2007 (Changes by Graf Zahl) -- Fixed: dumpmap crashed when used outside a map. - -August 10, 2007 (Changes by Graf Zahl) -- Exported A_DeQueueCorpse to DECORATE. It seems I forgot this when exporting - A_QueueCorpse. - -August 9, 2007 (Changes by Graf Zahl) -- Moved setting of gameskill from M_ChooseSkill to G_DoNewGame because it - doesn't work in M_ChooseSkill when the full console is open. - -July 28, 2007 (Changes by Graf Zahl) -- fixed: The BFGBall's explosion sequence was missing a state. -- fixed: The brown Chaos Serpent in Hexen had an incorrect sprite for its - ice death sequence set. -- fixed: Ammo upon game start does not get multiplied when on easy skill. - Implementing this as an inventory flag IF_IGNORESKILL also allows to create - ammo/weapon/backpack types that don't multiply the ammo given when on this - skill. - -July 24, 2007 (Changes by Graf Zahl) -- moved Doom exit sounds into SNDINFO as $random definitions. - -July 18, 2007 (Changes by Graf Zahl) -- Fixed: Dying Lost Souls could be reset to their see state if they slammed into - something. - -July 12, 2007 (Changes by Graf Zahl) -- Added DTA_TopOffset and DTA_LeftOffset values to the automap background drawer. -- Fixed: DECORATE color translations with explicit colors didn't work because the - code treated byte values as fixed point. -- Fixed: LEVEL_NOALLIES must clear MF_FRIENDLY off any spawned actor except players. - Otherwise it doesn't work properly. -- Fixed: Entering a backslash in the player's name box caused a crash because - the code analyzing the string was missing a NULL pointer check. -- Fixed: Thing_Hate and Teleport_ZombieChanger unconditionally made state jumps, - even for dead monsters. -- Fixed: The palette flash for item pickup was not reset upon a player's death. -- Fixed: P_DamageMobj tried to get damage multiplier information from the - damage inflictor, not the attacker. -- Fixed: PowerTimeFreezer::DoEffect did not call its superclass method. -- fixed: When morphed monsters died they tried to set MF3_STAYMORPHED for the - attacker, not themselves. This caused a crash when they were killed by a crusher. - -May 28, 2007 (Changes by Graf Zahl) -- Split thingdef.cpp into several files so that the state and property code - no longer gets in the way of the main parser. -- Changed A_MissileAttack, A_MeleeAttack and A_ComboAttack so that they use - metadata. Now all the hack code associated with these functions can be removed. -- Fixed: deadthings.txt contained a superfluous ';' which created parsing errors - with my changed code. -- Cleaned up DECORATE parser a little - moved the old style parsing code into its - own file and rearranged a few things. -- Made ProcessStates non-static so that it doesn't need to be passed as an argument - to all functions in the DECORATE parser. -- Moved DECORATE parser files into their own subdirectory. -- Optimization: SC_GetToken no longer sets sc_name for identifiers. In most cases - this creates needless overhead by adding a potentially unneeded name to the name - table and looking up the name. In almost all cases where a name is needed it's as - easy to assign sc_String to the name variable. -- Added enum definitions to DECORATE. - -May 27, 2007 (Changes by Graf Zahl) -- Fixed: Hirestex replacements for sprites didn't work properly due to some - incorrect calculations in R_ProjectSprite. -- Fixed: The speed definition of PowerSpeed used PROP_SpeedFixed instead of - PROP_SpeedLong. -- Fixed: The Chainsaw's kickback was initialized to the default - not 0. - -May 26, 2007 (Changes by Graf Zahl) -- Fixed: Resurrecting a player must set mo->special1 to 0 because it is used - as a counter by the Hexen fighter's fist weapon. - -May 25, 2007 (Changes by Graf Zahl) -- Fixed: The Wraithwerge's spirits shouldn't attack friends. -- Fixed: The Heresiarch's balls must not adjust their z-position after the - Heresiarch dies. - -May 24, 2007 (Changes by Graf Zahl) -- Added damage type specific pain chances and an MF5_NOPAIN flag that can be used - to suppress entering the pain state altogether. -- Changed font initialization so that you can define replacements for the default - fonts in FONTDEFS. -- Removed the 'add a bot' menu option since bots are beyond repair and therefore - mostly useless. -- Fixed: Hitscan attacks must always spawn a puff so that it and its properties - can be used as damage inflictor. - -May 20, 2007 (Changes by Graf Zahl) -- Copied railgun sound fix from Skulltag. - -May 19, 2007 (Changes by Graf Zahl) -- Made infighting a level flag. The old method still exists but the level flags - will take precedence if set. - -May 13, 2007 (Changes by Graf Zahl) -- fixed: meleethreshold only has meaning when the attacking monster actually - has a melee attack. -- copied a colormap fix from Skulltag. - -May 12, 2007 (Changes by Graf Zahl) -- Added a compatibility option to restore the original behavior of the Invisibility - powerup. -- Changed: Weapons are no longer checked for the EXTREMEDEATH and NOEXTREMEDEATH flags. - For all damage related actions it will always be the projectile (or puff for hitscan - attacks) that is treated as the damage inflictor. -- Fixed: Hexen's fourth weapons made extreme death depend on the weapon the player - is holding, not the projectile that did the kill. The WIF_EXTREME_DEATH flag - no longer exists as a result. -- Expanded PowerSpeed so that subclasses can be derived that alter the speed factor. -- Added an MF5_USESPECIAL flag that allows using things to execute their specials. -- added MF4_FORCERADIUSDMG flag so that exploding items can be created which - are able to hurt boss monsters. -- moved ML_BLOCK_PLAYERS to the value 0x4000 to bring it in line with Skulltag's - implementation. - -May 9, 2007 (Changes by Graf Zahl) -- added Skulltag's custom F1 help screen MAPINFO option. - -May 4, 2007 (Changes by Graf Zahl) -- Fixed: Resurrecting a player must restore all flags words, not just the first one. -- Fixed: APowerWeaponLevel2::EndEffect must check PendingWeapon for WP_NOCHANGE. - -May 3, 2007 (Changes by Graf Zahl) -- added Skulltag's high jump rune as a powerup - -May 2, 2007 (Changes by Graf Zahl) -- Added Skulltag's Drain and Regeneration runes as powerups and used specific player - sounds for their sound effects instead of using misc/i_pkup. - (If I ever decide to implement runes it will be in a way that can use the regular - powerups instead of having to define specific classes for them.) -- Added Skulltag's PowerQuadDamage and PowerQuarterDamage as more customizable - PowerDamage and PowerProtection. These new powerups allow free customization of - the damage modification per damage type by inheriting from these classes and - setting specific values. Such derived damage/protection powerups will be considered - as separate powers so that for example a QuadDamage and a DoubleDamage item can be - stacked which would result in 8x damage. - -May 1, 2007 (Changes by Graf Zahl) -- merged player_t::cheats and player_t::Powers into one variable. -- Fixed: player_t::Powers was not saved in a savegame. -- Removed all unused PW_* player power flags. -- Added Skulltag's TimeFreezer powerup. -- Moved most of the menu strings (except options and player setup menu) into the - string table. - -April 30, 2007 (Changes by Graf Zahl) -- Fixed: GetLumpOffset must call SetLumpAddress when being called for uncompressed - Zip entries. -- Fixed: Some of Doom's weapon obituaries didn't have the $-prefix that indicates a - reference to the string table. -- Fixed: The check for a valid weapon's spawn state for weapon dropping was incorrect. - -April 29, 2007 (Changes by Graf Zahl) -- Increased precision of texture scaling factors to full fixed point. In the process - I got rid of the old tx and ty CVARs because they made the texture scaling - much more complicated than it was actually needed (and besides, they were completely - useless except for testing purposes anyway.) -- Added a simple check for abstract weapon classes so that I can properly define - the DoomWeapon base class. -- Fixed: When the Tome of Power runs out it must also set any pending weapon - back to their regular state. - -April 27, 2007 (Changes by Graf Zahl) -- Added damage factors that allows to make monsters more or less resistant - to specific damage types. -- Changed Dehacked parser to use the DECORATE symbol tables for code pointers - instead of creating its own ones. - -April 26, 2007 (Changes by Graf Zahl) -- Removed the HandleNoSector hack and changed A_Look so that it uses the sector's - sound target for actors with MF_NOSECTOR regardless of compatibility settings. -- Moved initialization of weapon slots after the actor initialization. - With default weapons exported to DECORATE it can't be done earlier. -- Converted Doom weapons to DECORATE. -- Changed backpack definition so that Doom's backpack is no longer the base - class that implements its functionality. Now there is an abstract base class - all backpack-like items derive from. Also moved the actual definition of Doom's - backpack to DECORATE. - -April 22, 2007 (Changes by Graf Zahl) -- added a CANUSEWALLS flag which allows a monster to activate 'use' specials - like doors. This flag is on by default for any monster which was the - previous behavior. -- Optimized the DECORATE flag parser so it can more efficiently handle - the deprecated flags. As a side effect of this optimization the deprecated - flags became usable in A_ChangeFlag again. -- Changed LONGMELEERANGE flag into a MeleeThreshold property. -- Changed SHORTMISSILERANGE flag into a MaxTargetRange property. -- Added Thing_Stop action special. -- Changed ACS's SetActorState so that it isn't limited to only one sublabel. - This change also enables the implicit mapping of the old special death - state names. -- Fixed: ShowErrorPane deleted the StartScreen instead of just calling - NetDone. -- moved the DIM_MAP define into v_palette.h so that it can be accessed - from outside the status bar code. -- Fixed: The check for non-swimmable water in UpdateWaterLevel checked for - SECF_UNDERWATER instead of SECF_UNDERWATERMASK. - -April 12, 2007 -- Switched ACS world and global arrays to the TMap class instead of - TAutoGrowArray. A map can handle a wide range of key values better than - an array. - -April 10, 2007 -- Added a templated associative array class, TMap, that uses Lua's "chained - scatter table with Brent's variation" algorithm. I had considered using - hash_map until I discovered that it's not standard STL, and there are two - major but incompatible implementations of it. So I rolled my own, and Lua - seemed like a good place to go to for an efficient algorithm, since it - makes heavy use of tables. - -March 28, 2007 -- Fixed some const char * -> char * conversions flagged by GCC 4.2.0 in the - Win32-specific code. -- Fixed: The Win32 neterror() should return a const char *. -- Adding blinky text to the ENDOOM screen. - -March 24, 2007 -- Changed MakeKey's hash algorithm from a CRC32 to Paul Hsieh's SuperFastHash. - -March 20, 2007 -- Moved the implementation for the Thing_Damage special into another function - so that I can create the ACS function Thing_Damage2. It's exactly the same as - Thing_Damage, except the damage type is specified by name. When I did this, - I noticed that it didn't do anything useful for a TID of 0, so I made it - affect the activator in that case. - -March 19, 2007 -- Added a new SetActorState ACS function: - int SetActorState (int tid, str statename, optional bool exact); - If tid is 0, it affects the script activator, otherwise it affects all the - matching actors. Statename is the name of the state you want to put the - actor in. The final parameter, exact, specifies whether or not partial - state name matches are accepted. If you don't specify it or set it to - false, if you try to do something like: - SetActorState (0, "Foo.Bar"); - And the actor has a Foo state but no Foo.Bar state, it will enter the Foo - state. If you set exact to true: - SetActorState (0, "Foo.Bar", true); - Then the actor must have a Foo.Bar state, or it will not change state at - all, even if it has a Foo state. - The return value for this function is the number of actors that successfully - changed state. Note that you should refrain from using this function to - enter special states such as Death, or unpredictable results could occur. - -March 13, 2007 -- Fixed: Morphed players did not regain their innate armor when unmorphing. - (Only Hexen has players with innate armor, under normal conditions.) - -March 12, 2007 -- Changed the default player.startitem amount from 0 to 1. - -March 9, 2007 -- Converted the TTY startup screen to a class for Linux. - -March 8, 2007 -- Increased the limit for the SorcererBallPop to 3 to be inline with the - other Heresiarch ball sounds. -- Fixed: In Strife, using the shadow armor a second time while it is still - active should make you completely invisible and your first-person weapon - inverse grayscale. - -March 7, 2007 -- Changed P_SpawnPlayerMissile() to use the same height calculation as - P_(Aim)LineAttack(). -- Added an AttackZOffset to PlayerPawn. This is the offset from the - center of the player at which their attacks are fired and scales - according to their crouched height. -- Changed the version of P_SpawnPlayerMissile() that takes coordinates - to use that location as an offset from the standard attack location - rather than as an explicit attack location. - -March 6, 2007 -- Added an IF_KEEPDEPLETED flag for inventory items to keep them in the - player's inventory even when they have been used up. If the item also - has an inventory bar icon, it will be drawn darkened while it is - depleted. - -March 5, 2007 -- Fixed: Thing_ProjectileAimed did not set the missile's speed correctly. - -March 3, 2007 -- The net start pane is now given focus when it is created, so it can - receive keyboard input. -- Added playback of the "WeaponPickup" sound when a Hexen net game starts. -- Separated the different startup screens into classes for better - modularization (which I should have done in the first place). - -February 28, 2007 -- Changed the net start pane to open underneath the existing window instead - of scrunching the startup screen up to make room for it. -- Added the red net notches for Hexen's startup screen. -- Added hprintf and status simulation for Heretic's startup screen. -- Fixed: When I converted the P_Thing_Projectile() code for target leading - to use the new vector routines, I had made dist calculate the squared - length of the aim vector instead of the correct length. -- Fixed: When starting a new game from the menu while the fullscreen console - was open, the game was frozen before its initial setup tick until the - console was closed. The most obvious result of this is that your view was - stuck on the floor until the console closed. -- Fixed: Pressing ESC while editing your player name completely cleared the - menus instead of simply canceling the name change. -- Fixed: The status bar still showed the rampage face if you held the fire - button down while frozen. - -February 24, 2007 -- Added << operators for FString that function exactly like +=, except they - are left-associative, so you can use them like you would with an ostream - and append to a string in a single expression without any overhead from - allocating temporary strings as would happen if you used the + operator. - In other words, instead of this: - string += "Some string " + "that is assembled" + " in parts"; - You can do this and be more efficient while still being just as readable: - string << "Some string " << "that is assembled" << " in parts"; -- Changed PCD_PRINTBIND to include the command in its output if it isn't - bound. -- Fixed: ACS_ExecuteWithResultValue could not be used inside a script because - DLevelScript::RunScript() was not reentrant, thanks to having a global stack. - The stack should be local to each instance of RunScript. -- Fixed: rt_draw4cols() could get stuck in rare situations where it thinks it - should be drawing something but doesn't. Since long-term I plan to just - replace all the masked drawing the variants of maskwallscan, I'm not going - to try and find the real cause and fix it there. Instead, it just detects - the situation and bails out when it finds it. - -February 24, 2007 (Changes by Graf Zahl) -- Fixed: In the Doom2 cast finale it was impossible to toggle the console. -- Added APROP_Friendly actor property for ACS. -- Added a new flag, MF2_DONTREFLECT that prevents missiles from being reflected. -- Fixed: ALoreShot::DoSpecialDamage must check whether the shooter is still - present. If it had been removed before the projectile hits its target - a crash could occur. -- Fixed: GetPlayerInfo was missing breaks and always returned 0 as a result. -- Added Grubber's submission for printing key bindings in ACS. - -February 19, 2007 -- Fixed: $Ambient SNDINFO commands zeroed the AmbientSound structure, which - is a no-no when using FString. -- Fixed: DEM_WIPEON/OFF commands should be ignored during demo playback and - not pause the game, or the whole thing will be out of sync. -- Fixed: Playing a demo in windowed mode no longer grabs the mouse. - -February 14, 2007 -- Added two new net commands: DEM_WIPEON and DEM_WIPEOFF. They keep track of - when a player is going through a screen wipe and act like a pause, so the - game doesn't run several tics afterward to catch up with it. -- Fixed: EV_Teleport() did not set players to their idle state, so if they - were running when the teleported, they would still be running afterward - even though they weren't moving anywhere. Normally, P_XYMovement() does - this when they stop due to friction. -- Fixed: AActor::TakeSpecialDamage() completely bypassed the standard rules - for target switching on actors with MF5_NODAMAGE set. -- Changed the return values of the ACS spawn, spawnspot, and spawnspotfacing - commands to be the total count of things spawned, rather than a pretty - much useless reference to the actor spawned at the last map spot. -- Fixed: DLevelScript::DoSpawn() takes a byte angle, but DoSpawnSpotFacing() - passed it a full-length angle. -- Fixed: When MF_SKULLFLY is removed because an actor slams into something, - it was set to a see or spawn state, resetting its tic count and bypassing - the effectiveness of the MF2_DORMANT flag. While I was at it, I decided - dormant skulls shouldn't do slamming damage, either. -- Fixed: P_Thing_Spawn() returned success only if all thing instances were - successfully spawned. As long as at least one thing was spawned, it should - be considered a success. -- Fixed: Flipped single rotation sprites were only flipped every other 22.5 - degree interval. -- Fixed: S_ClearSoundData() did not stop any channels before freeing the - samples, a problem for the alternate sound renderer if it happened to be - playing any sounds at the time, since it would try to keep on playing them. - -February 12, 2007 -- Added two new cvars (win_x and win_y) that keep track of the window - position when not playing in fullscreen mode. -- Changed the upper-left window positioning that was always used in debug - builds into a command line option (-0), so debug and release builds behave - the same. - -February 10, 2007 (Changes by Graf Zahl) -- Changed earthquake code to not add all the intensities but use the maximum - in DEarthQuake::StaticGetQuakeIntensity. The reason for this: Quakes were - never supposed to be additive. Many maps, including Hexen's own have placed - quake spots so that they cover a larger area but the areas covered by the - single spots overlap. On such maps the view will shake like crazy and - render the map nearly unplayable. - -February 4, 2007 (Changes by Graf Zahl) -- Fixed: The powered up Mace was missing its HoldAtkState. -- Added: Using "*" with ACS's music commands will play the level's default - music set in MAPINFO. - -February 3, 2007 -- Added two new MAPINFO flags to control what actor activates impact lines: - * MissileShootersActivateImpactLines - the current behavior. - * MissilesActivateImpactLines - the original Hexen behavior. -- Fixed: The changecamera special should remove "past viewer" information - from the renderer in case the camera changed position or direction since - the last time it was looked through. Otherwise, the renderer will - interpolate from its previous view for one frame when it is switched to. -- Removed the 63-character limit on sound names. -- Reduced the rate at which drowning damage increases. -- Added more player water sounds: - *dive - Played when your head goes below water. - *surface - Played when your head goes back above water. - *gasp - Played when you were drowning and get your air back. - If your head surfaces and you were drowning, only *gasp plays, not both. -- Added damage-specific player death sounds, in the same fashion as the - damage-specific player pain sounds. It looks for a sound with a name like - "*death-damagetype" first and then "*death" if the first sound didn't exist. -- Removed the constraint that player sounds must be reserved before they can - be assigned. Hence, the $playerreserve command has been eliminated, because - it is no longer needed and it was never accessible from user wads, so I - don't need to worry about breaking anything by removing it. - -February 2, 2007 -- Added a new fixrtext tool that sets the IMAGE_SCN_MEM_WRITE flag for - .rtext sections in the assembly object files. Now I can avoid doing this at - runtime, which means that ZDoom is now UPX-compatible if anyone wants to - pack it. - - You will need to do a rebuild or manually delete the old assembly .obj files - for the first build from this revision to succeed, since there are no - changes to the assembly files themselves, and the build process will not be - able to automatically detect that they need to be rebuilt. -- Fixed: The SafeDivScales used a signed shift for their if test. This fails - when a == 0x80000000, because the result of abs will still be negative as - long as we use signed math. -- Fixed: SafeDivScale31 performed DivScale32 instead. -- Fixed: R_DrawSpanP_ASM had a short jump into a different section. - -January 30, 2007 -- Fixed: When quiting from fullscreen mode, RestoreConView() did not ungrab - the mouse. -- Fixed an old Doom bug: Firing the chaingun with only one bullet still made - it play its sound twice. -- Added an operator += for FString that takes an FName as input, since GCC - is unable to synthesize one. -- Converted xlatcc to use lemon during its build process. Now you don't need - bison to rebuild everything anymore. - -January 27, 2007 -- Added support for damage-specific player pain sounds. -- Removed the constraint that all $playerreserve SNDINFO commands must come - before the other $player commands. -- Fixed: TArray::Reserve did not construct its newly allocated entries. -- Changed the damage type for drowning from 'Water' to 'Drowning'. -- Fixed: Since FMemLump is now implemented on top of FString, it never - contains a NULL point, so the GetMem() method should fake it by - returning NULL when the string is empty. Reverted p_xlat.cpp to its - old revision. - -January 26, 2007 (Changes by Graf Zahl) -- Fixed: The rewrite of FMemLump broke the non-standard use of it in - P_TranslateLinedefs. -- Fixed: ShowErrorPane can be called before ST_NetDone is valid so it has to - check whether it is NULL. -- Fixed: The Megasphere had an incorrect pickup sound. - -January 25, 2007 (Changes by Graf Zahl) -- Fixed: The new video initialization code could set the screen's Font pointer - to NULL, causing a crash with levels that start in a secret sector. - -January 24, 2007 -- Fixed: If you called the FString assignment operator that accepts a - const char * with a string inside its buffer, it released the buffer - before copying the string. -- Added a new FString constructor that creates the string from a lump. - -January 23, 2007 -- Fixed: G_DoReborn() calls G_InitNew() with mapname set to level.mapname. - G_InitNew() then copies it onto level.mapname, which is undefined - behavior (although it does work as we want it to). -- Modified FMemLump to store its data using FString. That class provides - a convenient method of storing reference counted data, so now FMemLump - doesn't need to muck about sneakily using const_casts and possibly - tricking its users into thinking that an old one is still valid after - being assigned to a new one. -- Fixed: The IMGZ, PNG, PCX, and JPEG loaders assumed the files were - large enough for their headers without actually checking. - -January 22, 2007 -- Fixed: The simulated palette blends when the menu or console are open - were applied even when the status bar wasn't drawn. (In other words, even - in situations where a real palette blend wouldn't have happened.) -- Added a range check for the PNG grAb chunks. -- Fixed: AddLine() could corrupt memory if the length of the text being - added was longer than the console buffer. -- Fixed: FTexture::GetScaled(Left|Top)Offset returned the Width and Height - instead when the scale values were 0. -- Removed the unnecessary "mov ecx,c" from mscinlines.h:Scale(). -- Fixed: The simulated palette blend used when the console is down needs to - force a full screen update the next frame. -- Fixed: LocalViewPitch could overflow and wrap around when a netgame stalls. -- Changed the vertheight and rounding-error-checking code in - DCanvas::DrawTexture() to calculate off the actual bottom of the image - instead of the height, improving precision. Now the scaled status bar is - flush with the bottom of the screen at 1280x1024, for instance. -- Added a new WIF_NO_AUTO_SWITCH flag for weapons that should never be - switched to automatically when the player picks them up. - -January 18, 2007 -- Added D3DCREATE_FPU_PRESERVE to the IDirect3D9::CreateDevice() call. - Normally Direct3D sets the FPU to single precision. We don't want that, - since it can mean going out of sync with machines that are using the - standard precision. Additionally, the nodebuilder requires the extra - precision that single precision lacks. -- Replaced the vector math routines with the ones I developed for the FP code. - -January 15, 2007 -- Added a summonfoe CCMD, which is analagous to summonfriend but forces the - summoned creature to be hostile instead. -- Changed the default snd_output under Linux to OSS. -- Added a GTK+ version of the IWAD selection dialog box. That brings the - Linux port one step closer to feature parity with the Windows version. - -January 15, 2007 (Changes by Graf Zahl) -- added Grubber's submission for customizable gravity per actor. - -January 14, 2007 (Changes by Graf Zahl) -- Fixed: A_Jump didn't work for weapons or CustomInventory items. - -January 13, 2007 (Changes by Graf Zahl) -- Adjusted AlterWeaponSprite so that it properly handles multiple - invisibility powerups at the same time. - -January 13, 2007 -- Integrated the fatal error display into the text logger. - Next: Figure out how to do all this fancy new startup window stuff with GTK+ - so Linux users don't feel left out. - -January 12, 2007 (Changes by Graf Zahl) -- Converted the StrifePlayer to DECORATE. Even though it requires exporting - 3 new code pointers without general use it was necessary to handle - GiveDefaultInventory consistently for all players without the need to - subclass this function. -- Added a Player.RunHealth property to expose the StrifePlayer's behavior of - not being able to run when its health is below 10. -- Changed APlayerPawn::GiveDefaultInventory so that it always adds a HexenArmor - and a BasicArmor item to the inventory. If these items are not the first ones - added to the inventory anything else that might absorb damage is not guaranteed - to work consistently because their function depends on the order in the inventory. -- Changed handling of APowerup's DoEffect so that it is called from the owner's - Tick function, not the item's. This is so that the order of execution is - determined by the order in the inventory. When done in the item's Tick function - order depends on the global thinker table which can cause problems with the - order in which conflicting powerups apply their effect. Now it is guaranteed - that the item that was added to the inventory first applies its effect last. -- Fixed: Added checks for Speed==0 to A_Tracer and A_Tracer2 because this could - cause a divide by zero. -- Fixed: P_MoveThing must also set the moved actor's previous position to - prevent interpolation of the move. -- Fixed: APowerInvisibility and its subclasses need to constantly update - the owner's translucency information in case of interference between different - subclasses. Also changed Hexen's Cleric's invulnerability mode to disable - the translucency effect if an invisibility powerup is active. - -January 9, 2007 (Changes by Graf Zahl) -- Added Skulltag's REDMAP and GREENMAP. -- Fixed: The PlayerSpeedTrail must copy the player's scaling information - (from Skulltag) -- Added r_maxparticles CVAR from Skulltag. -- Changed PCX loader so that it always loads the last 768 bytes of 8 bit graphics - as a palette - -January 8, 2007 -- Added escape code support to the echo CCMD, so you can use colors with it. -- Changed the color scheme for the startup log to light text on a dark - background and added color support to it. -- When a fatal error occurs, the log window is now scrolled so the final - lines are guaranteed to be visible. -- Fixed: ShowErrorPane() crashed if it was called before the main window was - created. -- Removed the game title banner for the ENDOOM display and replaced it with a - short prompt at the bottom of the window. -- Halved the number of times the Strife startup screen updates the progress - bar so that it spends less time drawing and gets done loading faster. -- Fixed: The quad FBD3D draws to the screen was one pixel too tall. - -January 7, 2007 (Changes by Graf Zahl) -- Fixed: Sorting of files in Zips was broken. -- Ported GZDoom's deep water splash code so that splashes are handled properly - in Boom maps with non-swimmable water. -- Changed ENDOOM CVAR so that there is an option to show only modified versions. - -January 6, 2007 -- Added simulation of Strife's startup screen. -- Switched from a 14-pixel tall VGA font to a 16-pixel tall one for the - Heretic loading screen (and ENDOOM). - -January 6, 2007 (Changes by Graf Zahl) -- Added ENDOOM screen. It will only be shown when the game is exited via the - main menu and there is an option to switch it off for those who don't want - to wait. - -January 5, 2007 -- Added simulation of Heretic's startup screen. -- Changed copyright notice for i_main.cpp, since none of it is really id's - code. - -January 5, 2007 (Changes by Graf Zahl) -- Added customizable border textures. They will be defined with the - MAPINFO keyword 'bordertexture' and are settable per map. -- Fixed: When used in DECORATE A_Explode must use A_ExplodeParms. -- Added custom label support to A_Chase. To enable resurrection from the - customizable version I also moved all A_VileChase stuff into p_enemy.cpp. - -January 4, 2007 -- Added simulation of Hexen's startup screen (currently minus net notches). - -January 2, 2007 (Changes by Graf Zahl) -- Fixed: The ANIMATED parser must read the bytes for the speed as unsigned bytes. -- Fixed: The screen wipe must be disabled for Heretic's underwater ending. If - not, the wipe will try to mix pictures with different palettes. - -December 31, 2006 (Changes by Graf Zahl) -- Fixed: Several actors for Doom were missing their spawn ID. - -December 29, 2006 -- Fixed: APlayerPawn::GiveDefaultInventory() used two different variables - both named item. -- Switched ddraw.dll to be delay loaded. With D3D9 now being the default - display code, this avoids wasting time loading DDraw if it isn't needed. - -December 28, 2006 -- Fixed: The Win32 I_FatalError() did not set alreadyThrown, so it could get - stuck in an endless fatal error loop. -- Fixed: The SDL input code must convert the event.data1 to uppercase. -- Added more resolution options when playing windowed under SDL. -- Changed SDL mouse handling to be basically identical to the (non-DirectInput) - Win32 code. The mouse is polled periodically and constantly warped to the - center of the window. Despite what the SDL docs specify, SDL_WM_GrabInput() - is apparently no longer a reliable means of obtaining continuous relative - mouse motion events. -- Fixed: The non-Windows implementation of I_FindClose() did not check for -1 - handles. -- Fixed all the warnings from GCC 4.2, including a handful that were present in - older GCCs. -- Fixed: The VC++ project was not set up to redefine RM using del in - wadsrc/Makefile, nor did it use the makefile for cleaning. -- Added ST_NetMessage() for mixing miscellaneous messages with the network - startup meter, since they get mixed in the same space on the Linux terminal - and must be handled properly to avoid looking bad. -- Fixed the new network status display for the Linux terminal. - -December 25, 2006 (Changes by Graf Zahl) -- Converted the Communicator to DECORATE. -- Renamed the new armor properties to use the same names as Skulltag to avoid - confusion. They still don't need a separate base class as in Skulltag though. -- Added Skulltag-type armor bonus that increases the max amount that can be given - by other armor items. -- Separated all armor related code from a_pickups.cpp into a_armor.cpp. - -December 24, 2006 (Changes by Graf Zahl) -- Replaced several calls to S_GetSoundPlayingInfo with S_IsActorPlayingSomething - because S_GetSoundPlayingInfo cannot properly resolve player and random sounds. -- Fixed: S_IsActorPlayingSomething has to resolve aliases and player sounds. -- Took S_ParseSndSeq call out of S_Init. This doesn't work when parsing SNDINFO - in D_DoomMain. -- Moved SNDINFO reading back to its old place after MAPINFO. This is necessary - for Hexen's music definitions. -- Added new flag MF5_NOBLOODDECALS that prevents bleeding actors from spawning - blood decals. - -December 23, 2006 (Changes by Graf Zahl) -- Fixed: The Cacodemon doesn't have a melee attack defined as I mistakenly - assumed when writing its DECORATE code. -- Fixed: Commander Keen's death sequence had one state duplicated. -- Fixed: Due to the changes for custom states the internal weapons shouldn't - define a holdatk state unless it differs from the attack state. -- Fixed: The bot code tried to spawn ACajunBodyNode instead of CajunBodyNode. -- Changed: MF2_BLASTED doesn't work well for players so I had to take it out - of A_BlastRadius. -- Fixed: When MF2_BLASTED was cleared MF2_SLIDE got cleared as well, no matter - whether it was set by default or not. Now the MF2_SLIDE check checks both - flags and the BlastRadius code doesn't set MF2_SLIDE anymore. - -December 22, 2006 -- Fixed: If anyone other than the most recently-connected player aborted - during i_net handshaking, everybody who connected after them would have - the wrong idea of what their player number was. -- Guests can now watch as other guests connect during i_net handshaking. -- Fixed: The host would let more than the desired number of players connect. -- Decreased the frequency of packets in ST_NetLoop() to two per second. -- Fixed: During the i_net handshaking, guests never verified that the messages - they received were from the host. -- Removed the -net command line option. I'm not sure it even worked anymore. - -December 20, 2006 -- Turned on warning level 4 just to see what it would produce: a lot of - warnings. At first, I was going to try and clean them all up. Then I decided - that was a worthless cause and went about just acting on the ones that - might actually be helpful: - C4189 (local variable is initialized but not referenced) - C4702 (unreachable code) - C4512 (assignment operator could not be generated) - -December 19, 2006 -- Fixed: D3DFB::Reset() also needs to restore the texture border color, - otherwise it gets reset to black and unused. -- Fixed: I_SetWndProc() needs to be called before any of the DirectX - interfaces are initialized, because DirectX subclasses the window itself, - and I_SetWndProc() undoes that subclassing. - -December 19, 2006 (Changes by Graf Zahl) -- Fixed: Inventory.Icon printed error message for all the missing icons in - Strife's teaser. -- Fixed: st_start.cpp needed a - #define _WIN32_WINNT 0x0501. -- Fixed a few uninitialized variables warnings for GCC. - -December 18, 2006 -- Reorganized the network startup loops so now they are event driven. There is - a single function that gets called to drive it, and it uses callbacks to - perform the different stages of the synchronization. This lets me have a nice, - responsive abort button instead of the previous unannounced hit-escape-to- - abort behavior, and I think the rearranged code is slightly easier to - understand too. -- Increased the number of bytes for version info during D_ArbitrateNetStart(), - in preparation for the day when NETGAMEVERSION requires more than one byte. -- I noticed an issue with Vista RC1 and the new fatal error setup. Even after - releasing a DirectDraw or Direct3D interface, the DWM can still use the - last image drawn using them when it composites the window. It doesn't always - do it but it does often enough that it is a real problem. At this point, I - don't know if it's a problem with the release version of Vista or not. - After messing around, I discovered the problem was caused by ~Win32Video() - hiding the window and then having it immediately shown soon after. The DWM - kept an image of the window to do the transition effect with, and then when - it didn't get a chance to do the transition, it didn't properly forget about - its saved image and kept plastering it on top of everything else - underneath. - -December 16, 2006 -- Added a network synchronization panel to the window during netgame startup. -- Fixed: PClass::CreateDerivedClass() must initialize StateList to NULL. - Otherwise, classic DECORATE definitions generate a big, fat crash. -- Resurrected the R_Init progress bar, now as a standard Windows control. -- Removed the sound failure dialog. The FMOD setup already defaulted to no - sound if initialization failed, so this only applies when snd_output is set - to "alternate" which now also falls back to no sound. In addition, it wasn't - working right, and I didn't feel like fixing it for the probably 0% of users - it affected. - -December 16, 2006 (Changes by Graf Zahl) -- Fixed: The smartaim logic was incorrect. Also added another mode: Autoaim only - at monsters. -- Merged FActorInfo::FindStateExact and FActorInfo::FindState into one function - because the differences are only minimal. -- Removed all the varargs FindState functions because they aren't really needed. - The engine itself never explicitly checks for more than 2 labels and for the - rest a function that gets passed a FName array is more suitable anyway. -- Changed state label storage so that each actor owns all the state labels itself - and doesn't have to traverse parent lists to find them. This is required for - Dehacked actors that inherit states (e.g. NonsolidMeat and Spectre) but it also - makes the data much easier to handle. -- Merged the fallingdamage setting into one menu item and added Strife damage to it. -- Moved deathmatch options into their own category in the gameplay options menu. -- Added the sv_smartaim code from GZDoom which tries to avoid autoaiming - at friendlies or shootable decorations if there are monsters that can be shot. -- Added: SetThingSpecial treats a tid of 0 as the activator. - -December 15, 2006 -- Fixed: The edit control used for logging output added text in reverse order - on Win9x. - -December 13, 2006 (Changes by Graf Zahl) -- Fixed: The particle fountains' names were different than before -- Fixed: FTexture::CheckForTexture should return NULL if the texture it - finds is of type FTexture::TEX_Null. If this isn't done not all occurences - of AASHITTY being used to silence an editor's error checker will be handled - correctly. In particular the transparent door trick will break. - -December 10, 2006 (Changes by Graf Zahl) -- Fixed: When a DehackedPickup replacement object is created it must copy - the state labels of the parent object. - -December 9, 2006 -- Went back to the roots and made graphics initialization one of the last - things to happen during setup. Now the startup text is visible again. More - importantly, the main window is no longer created invisible, which seems - to cause trouble with it not always appearing in the taskbar. The fatal - error dialog is now also embedded in the main window instead of being a - separate modal dialog, so you can play with the log window to see any - problems that might be reported there. - - Rather than completely restoring the original startup order, I tried to - keep things as close to the way they were with early graphics startup. In - particular, V_Init() now creates a dummy screen so that things that need - screen dimensions can get them. It gets replaced by the real screen later - in I_InitGraphics(). Will need to check this under Linux to make sure it - didn't cause any problems there. -- Removed the following stubs that just called functions in Video: - - I_StartModeIterator() - - I_NextMode() - - I_DisplayType() - I_FullscreenChanged() was also removed, and a new fullscreen parameter - was added to IVideo::StartModeIterator(), since that's all it controlled. -- Renamed I_InitHardware() back to I_InitGraphics(), since that's all it's - initialized post-1.22. - -December 9, 2006 (Changes by Graf Zahl) -- Fixed: P_LookForTid should abort its search when it discovers that it has - cycled through the entire list of actors. -- Reverted AActor::FindState to its R407 version because the change in R408 - doesn't compile properly with VC++. -- Changed FIXMAPTHINGPOS further so that it also affects objects that are - not directly on a wall but closer than its radius. -- Changed FIXEDMAPTHINGPOS to move objects completely out of the wall and - adjusted the radii of all affected objects to actually represent half - the sprite's width. - -December 8, 2006 (Changes by Graf Zahl) -- Fixed: The Acolyte's obituary wasn't printed. -- Fixed: The fighter player's attack state used the Cleric's sprite. - -December 5, 2006 (Changes by Graf Zahl) -- Moved A_ThrowGrenade from Inventory to Actor because it can also be used by - monsters -- Added velocity multiplicators to A_SpawnDebris. -- Changed: A_JumpIfNoAmmo should have no effect for CustomInventory items. -- Fixed: DECORATE jump commands must set the call state's result to 0 - even when they have to return prematurely. -- Added obituaries for Strife's and Hexen's monsters. -- Converted Strife's Bishop to DECORATE. -- Added momx, momy and momz variables to the DECORATE expression evaluator. - -December 3, 2006 -- Modified the trustInfo for updaterevision.exe so that it should be - fine even with the buggy mt.exe that comes with Visual C++ 2005. - (Note that the Platform SDK for Windows Server 2003 R2, and later - versions of the Windows SDK also come with a working mt.exe that - work fine with the old trustInfo.) - -December 2, 2006 (Changes by Graf Zahl) -- Converted the Heretic sound sequences and the particle fountains to DECORATE. -- Added DECORATE support for setting an actor's args. If this is done - it will also disable the actor's special that can be set in a map. This - is for actors that want to use A_CountdownArg or similar functions - that use the args for something different than the special's parameters. -- Converted a_sharedmisc.cpp to DECORATE. -- Added a new NActorIterator that can search for classes specified by name. -- Added a new constructor to TThinkerIterator that can search - for DECORATE defined subclasses that are not represented by a real C++ class. -- Fixed: BuildInfoDefaults must set the parent symbol table so that - all actors can get to the global symbols stored in AActor. -- Fixed some minor inconsistencies in the Arch-Vile's DECORATE definition. -- Fixed: A_VileAttack moved the flame without relinking it into the sector - lists. It also forgot to set the z-position correctly. (original Doom bug.) -- Fixed: The Doom 2 cast finale didn't work with the dynamic state name handling. - -November 30, 2006 -- Finished the framework for specifying all action functions externally, - including restricting them to particular classes. -- Removed all the "fast" and unused code from FColorMatcher. Today's - computers are fast enough that the difference isn't even noticeable - unless you're doing hundreds of thousands of matches, and I never had - any plans to improve the algorithm the "fast" code used. -- Fixed: BestColor() should not by default return 0 as a possible match, - since it's normally the transparent color. -- The DSimpleCanvas constructor now fills MemBuffer with zeros. -- Fixed: If the FBTexture wasn't exactly the same size as the screen, - D3DFB::PaintToWindow() would still lock it with D3DLOCK_DISCARD. Alas, - I saw no speedup for using a dirty region. (Side note: The Radeons are - apparently slower compared to DirectDraw because they must do - power-of-2 textures. If they ever add non-power-of-2 support like nvidia, - I assume they will also see a speed gain.) -- Changed fb_d3d9.cpp so that instead of trying to compensate for Geforce - off-by-one errors in the pixel shader, it automatically detects where - the error occurs and modifies the way the palette is uploaded to - compensate. Palette color 255 is then represented using the texture - border color instead of actually being part of the palette. This should - work correctly with all cards, since I had a report of an FX where the - off-by-one occurred in a different spot from the place where I observed - it on a 6 and 7 series cards. Since the shader now has one fewer - instruction, I notice a very marginal speedup. (Interestingly, removing - the flash blending from the shader had no perceivable performance gain.) - -November 29, 2006 (Changes by Graf Zahl) -- Fixed: The DECORATE expression evaluator evaluated operators of same - precedence right to left instead of left to right. -- Added global constants to DECORATE so that I can define meaningful flag - names for some DECORATE functions. Technically these will be constants - of the AActor class but that will make them accessible in all other actor - classes. -- Made the constructor of PSymbolTable inline. Having this a real function - adds 100kb to the EXE, mostly needless exception handling code. - -November 28, 2006 (Changes by Graf Zahl) -- Fixed: The StrifePlayer couldn't obtain his default inventory because - APlayerPawn::GiveDefaultInventory gave him some HexenArmor even though - he doesn't need it. -- Added custom blood type properties to DECORATE. -- Converted Blood to DECORATE and made some minor changes to the code - in preparation for custom blood types. -- Converted the bot helper things to DECORATE. -- Added damage type specific crash states. - -November 28, 2006 -- Started adding action function declarations to objects. -- Added integer constant declarations to objects. -- Added some new token-based functions to sc_man.cpp that know about keywords - and record proper type information, so parsers don't need to treat - everything as strings. -- Added a simple symbol table to PClass. - -November 27, 2006 (Changes by Graf Zahl) -- Changed: When playing a shareware game no external WADs are loaded at all, - not even zvox.wad or the skins directory. -- Minor improvement of Hexen's Demons: They now transfer the translation - to the chunks they spawn so that they look correct if they are color - translated. See Resurrection of Chaos for an example. -- Converted Key gizmos to DECORATE. -- Converted Heretic's Beast (Weredragon) to DECORATE. -- Added a randomness parameter to A_SpawnItemEx. This allows - spawning objects with a random chance without the need to write - complicated A_Jump constructs. -- Converted Heretic's Mummy to DECORATE. -- Converted Hexen's Demons to DECORATE. - -November 26, 2006 (Changes by Graf Zahl) -- Converted Ettin and Centaur to DECORATE. -- Made the Ettin's and Centaur's howling sound an actor property. -- Added A_CustomComboAttack function to finally have something that can - replace the old A_ComboAttack function. -- Added A_SpawnItemEx function that removes the problems with A_SpawnItem - and which also should make most of the A_CustomMissile abuse unnecessary. -- Added A_QueueCorpse to the list of DECORATE code pointers. -- Made the size of Hexen's corpse queue configurable by CVAR - (sv_corpsequeuesize.) Setting this CVAR to -1 will disable corpse - queuing completely so that even in Hexen all corpses will stay forever. -- Added random2 function to DECORATE's expression evaluator. This is to - better emulate some calculation of internal code pointers. -- Added named RNG support to DECORATE's expression evaluator. Just use - random[name](min, max). - -November 25, 2006 -- Reverted updaterevision.vcproj to r385 and added a note as a build event - explaining the need to use mt.exe 6.0 or newer. Here is the note: - VERY IMPORTANT: You must copy the mt.exe from %VSINSTALLDIR%\Common7\Tools\bin - on top of the version in %VSINSTALLDIR%\VC\bin or your computer may restart - while building. -- Changed the ASecretTrigger::Activate() fix: There's no reason open scripts - shouldn't be able to activate secret triggers; players just won't get - credit for it in coop. -- Added a NULL actor check to R_SetupFrame(). -- Fixed: The player sounds in DEHSUPP were defined incorrectly. - -November 25, 2006 (Changes by Graf Zahl) -- Fixed: SecretTriggers that were activated in an OPEN script caused a crash. -- Converted Heretic's Clink (Sabreclaw) to DECORATE. -- Added MissSound parameter to A_CustomMeleeAttack. -- Converted Heretic's Snake (Ophidian) to DECORATE. -- Added an option to A_CustomMissile to jump to the see state if - the caller's target is dead. -- Fixed: A_ThrowGrenade didn't play the missile's spawn sound. -- Added MF_SPAWNSOUNDSOURCE flag so that Raven's missile spawning code - pointers can be recreated with DECORATE. -- Converted a_ravenambient.cpp to DECORATE. - -November 24, 2006 -- Fixed: The backpack didn't give extra ammo in baby and nightmare modes. -- Fixed: When P_SpawnPlayer() calls DObject::PointerSubstitution() to - redirect player pointers, it affects the bodyque too. That meant that in - multiplayer games, once the bodyque filled up, anybody was in danger of - being rudely destroyed the next time somebody respawned. - -November 22, 2006 -- Added a manifest with a trustinfo section to updaterevision.exe so that - the build process can run uninterrupted under Vista. -- Fixed: DIRECT3DCREATE9FUNC needs WINAPI added to its prototype so that it - works properly in release build, which defaults to __fastcall. - -November 20, 2006 -- Fixed: Polyobjects are serialized before players, which means that a call - to PO_MovePolyobj() from P_SerializePolyobjs() for a crushing polyobject - that touches a player actor will not have a valid actor->player->mo chain - for P_DamageMobj and crash if it happens to touch the player. Since the - polyobject was presumably in a good spot when the game was saved, we can - just skip this step entirely and let it take care of itself the next time - it moves (by which time, the players will be valid). -- Fixed: When transitioning from fullscreen to windowed mode with D3DFB, the - window kept the WS_EX_TOPMOST style. -- Slight correctness fix: When in fullscreen, the window should have WS_POPUP - style. -- Added a NULL target check to P_SpawnMissileXYZ(), A_DemonAttack1(), - A_DemonAttack2_1(), and A_DemonAttack2_2(). - -November 18, 2006 -- Fixed: DFrameBuffer and related classes did not use DECLARE_CLASS macros, - so there was no guarantee that they would allocate the proper amount of - memory. This tripped me up when I was using D3DFB and it was writing beyond - the end of allocated memory. -- Added a new D3DFB class that should be more compatible with modern systems - than the 8-bit paletted DDrawFB. - Pros: - - Much cleaner code. - - No performance penalty when running in a window. - - Slightly faster fullscreen performance on Geforce 6 and 7 cards. - - Vista ought to love it. - Cons: - - Requires Pixel Shader 1.4 or better. - - Fullscreen on an ATI Mobility x300 is a little slower (but still faster - than DirectDraw in a window). - Note that this is not hardware accelerated rendering. The screen is still - drawn as before by the CPU to an 8-bit paletted surface. The difference is - in how that surface makes its way to the visible display. Here, the surface - is copied to an 8-bit texture, and a pixel shader converts it to RGB when - drawing it. - -November 14, 2006 (Changes by Graf Zahl) -- Made AActor's xscale and yscale properties full precision fixed point - so now larger scales than 4 can be done. - -November 10, 2006 (Changes by Graf Zahl) -- Added a check to P_CheckMissileSpawn to decrease the monster counter - if it was called for spawning a monster with A_CustomMissile. -- Added a ML_BLOCK_PLAYERS line flag. - -November 5, 2006 (Changes by Graf Zahl) -- Converted Heretic's and Hexen's players to DECORATE. -- Made Hexenarmor factors configurable by DECORATE. -- Added support for selecting the invulnerability mode per item as well. -- Made Invulnerability and Healing radius behavior selectable by player - class instead of hard coding the special behavior to the Hexen classes. -- Converted the DoomPlayer to DECORATE. -- Extended all A_Jump commands to take labels as parameters in addition - to offsets. -- Removed the deprecation warnings for the state assignment commands - in DECORATE. While it is still recommended not to use them anymore - they will continue to work with custom state support and existing - DECORATE code doesn't have to be changed. However, they will remain - limited to the existing functionality, nothing more. - -November 4, 2006 (Changes by Graf Zahl) -- Replaced the static string buffer in ProcessStates with an FString. -- After doing some tests with state label scopes I had to conclude that - using '.' both for separating sub-state-labels and scope resolution - identifiers does not work reliably unless all actor class names were - prohibited from being used as state labels. Since that is undesirable - the only solution is to change the scope resolution operator. Fortunately - no WADs so far have used it so implementing such a breaking change isn't - a major issue. Now it uses '::', like C++ for this purpose. -- Converted Revenant, Mancubus and Pain Elemental to DECORATE. -- Converted Arachnotron, Archvile, Cyberdemon, Spidermastermind and - CommanderKeen to DECORATE. -- Converted ExplosiveBarrel, BulletPuff and DoomUnusedStates to DECORATE. -- Added VSpeed DECORATE property so that an actor can be given an initial - vertical speed. -- Removed the barrel check in P_DamageMobj. AActor::Die is doing the same - operation unconditionally so this is redundant. -- Added A_BarrelDestroy to the list of DECORATE code pointers so that - the same effect can be recreated for other items as well. -- Renamed A_BarrelRespawn to A_Respawn, changed it so that it works for - monsters and added it to the list of DECORATE code pointers. Now Quake-style - zombies should be possible. ;) -- Changed handling of MF4_RANDOMIZE so that it applies to all actors being - spawned and not just projectiles. -- Converted Berserk and Megasphere to DECORATE. -- Fixed: HealThing should respect the stamina a player has and the Dehacked - health compatibility flag if max is 0. To do that it calls P_GiveBody now. - -November 1, 2006 (Changes by Graf Zahl) -- Fixed: The Cacodemon had a FastSpeed definition even though it shouldn't. -- Fixed: FastSpeed was used unconditionally when defined. - -October 31, 2006 (Changes by Graf Zahl) -- Fixed: SetActorPitch with a 0-tid (i.e. affect the activator) set the angle - instead of the pitch. -- Fixed: The check for special death states in AActor::TakeSpecialDamage didn't - work. -- Fixed: The global WeaponSection string was never freed. It has been replaced - with an FString now. -- Fixed: The music strings in the default level info were never freed and - caused memory leaks when used repeatedly. -- Fixed: The intermusic string in the level info was never freed. -- Fixed: The default fire obituary should only be printed if the damage - came from the environment. If it comes from a monster the monster specific - obituary should be used instead. -- Added custom damage types from the floating point test release. -- Changed Pain Elemental's massacre check. Now A_PainDie checks for the damage - type and doesn't spawn anything if it is NAME_Massacre. A_PainDie can also - be used by other actors so a more generalized approach is needed than hard - coding it into the Pain Elemental. -- Converted a few of Doom's monsters to DECORATE because I couldn't test the - first version of the custom state code with the corpses inheriting from them. -- Added custom states from last year's floating point test release and fixed - some bugs I found in that code. Unfortunately it wasn't all salvageable - and it was easier to recreate some parts from scratch. - -October 30, 2006 -- Version bump to 2.1.7. -- Fixed: Placing a /* */ comment at the very end of a file without a - terminating newline would not parse reliably. -- Added a NULL WallSpriteTile check to R_RenderDecal(). - -October 28, 2006 (Changes by Graf Zahl) -- Changed parameter storage for states to use a separate member variable - instead of forcing it into misc1/misc2. Although this increases the EXE's - size by 30k it has several advantages: - * State parameters are no longer limited to 65535 for all states combined. - * State parameters can be used with long durations. - * Some special handling in the weapon state set functions can be removed. - -October 26, 2006 -- Removed A_JumpSet and merged its functionality with A_Jump by turning - A_Jump into a varargs function. -- Fixed: P_MorphPlayer() should check that the desired type is actually a - PlayerPawn. -- Added an optional parameter to the morphme ccmd that specifies the player - class to morph into. -- Changed the SetActorPitch, SetActorAngle, Thing_Spawn*, Thing_Projectile*, - and Thing_Move functions so that TID 0 affects the activator. - -October 25, 2006 (Changes by Graf Zahl) -- Fixed: The MinotaurFriend's MF4_NOTARGETSWITCH was put on AMinotaurFX1. -- Moved the sector type translation for Doom format maps into a simple lump - in zdoom.pk3. -- Changed Line_SetIdentification so that the fifth arg is a high-byte for the - line ID. - -October 23, 2006 -- Added the A_JumpSet function for what seems to be a fairly common scenario. - It is like A_Jump, except it accepts up to 20 jump targets. The jump - probability is still the first parameter and controls whether any jump is - taken at all; use 256 if you always want to jump. If a jump is taken, then - one of the jump targets will be chosen at random, with each target having - an equal chance of being chosen. -- Fixed: The unfreeze ccmd was not multiplayer-safe. And I renamed it to thaw, - since it has nothing to do with the freeze ccmd. - -October 22, 2006 (Changes by Graf Zahl) -- Added MF5_PIERCEARMOR flag that allows damaging objects that aren't - affected by armor. -- Added an unfreeze CCMD so that frozen players can be unfrozen for testing. -- Added special death states for projectiles hitting actors. -- Added ACS SetActorPitch/GetActorPitch functions. -- Added cameraheight property for actors. - -October 21, 2006 (Changes by Graf Zahl) -- Fixed: The yellow color range contained gaps in its definition which - resulted in incorrect colors. -- Fixed: FFont::BuildTranslations didn't clamp the RGB color values. This - can happen if some font colors overflow or underflow due to incomplete - range specifications. - -October 20, 2006 -- Fixed: ExpData::EvalConst() did not NULL the children pointers for binary - operators after deleting them, so ~ExpData() would try to delete them again - later. - -October 19, 2006 -- Added a new MapMarker actor. Instead of appearing in the 3D view, it appears - on the automap instead. If its first argument is zero, the map marker itself - appears on the automap, otherwise it is drawn on top of any actor with a TID - matching that argument. If the second argument is one, then the map marker - will only be appear if the player has previously seen the sector it is one. - You can use Thing_Activate and Thing_Deactivate on markers to turn them on - and off. And if you subclass MapMarker with DECORATE, you can easily make - your own custom markers. -- Fixed: Map markers could not be drawn partially off the map. They were - drawn either fully or not at all. -- Fixed: Map markers appeared in the wrong place on a rotated overlay map if - screenblocks < 10. -- Added the MF2_PASSMOBJ for P_Thing_Spawn() from January 4, 2003, to - DLevelScript::DoSpawn(). -- Changed VectorNormalize() (and VectorNormalize2) to use doubles for storing - the vector lengths, fixing desyncs between GCC/VC++ games that happened - because the two compilers produced slightly different results for some - slopes. GCC kept them in registers, so they were never truncated to floats. - VC++ stored them to memory and reloaded them in order to truncate them to - the defined precision. Lesson learned: Floating point numbers in local - variables should always be doubles to produce the best code with VC++ that - has the best chance of matching GCC's default behavior. -- Removed netget and netsend function pointers. PacketGet and PacketSend are - now called directly. -- Fixed: Watching a demo from the point of view of someone other than the - first player could cause a crash when the demo ended. -- Removed invcount from the expression evaluator at Grubber's suggestion, - because it doesn't work. -- Fixed: vid_nowidescreen should fire off setsizeneeded so that changes to it - can happen immediately instead of at the next resolution change. -- Modified the way autosaves are done. Instead of setting gameaction to - ga_autosave, write DEM_CHECKAUTOSAVE to the net stream. When this is - processed, it will check if it's okay to do an autosave. If it is, it writes - DEM_DOAUTOSAVE to the net stream, which the sets gameaction to ga_autosave. - Essentially, about half of the functionality was moved out of G_DoAutoSave() - and into Net_DoCommand(). -- Minor changes to OS detection: The os_WinNT enumeration has been renamed to - os_WinNT4, since every new OS coming out of Microsoft these days is - essentially NT. NT 5.2 and 6.0 are now properly identified as "Windows - Server 2003" and "Windows Vista" respectively, and any unknown NT versions - Microsoft introduces in the future will now be displayed as "Windows NT" - instead of "Windows 2000" if the minor version is 0 and "Windows XP" if the - minor version is non-0. Win32s detection has also been removed. Presumably - if somebody is foolish enough to try to run this on Windows 3.x with Win32s, - it won't even load due to missing DLLs. - -October 15, 2006 (Changes by Graf Zahl) -- Changed the rocket so that the FX_ROCKET flag is set in the actor - definition and not in BeginPlay. -- Changed the special explosion behavior of the rocket to a flag - (MF5_DEHEXPLOSION) so that its effects can be used on other actors - as well without having to inherit from the rocket. - -October 9, 2006 -- Fixed: Demos with NETD chunks should not set netgame to true unless they - have more than one player. And since netdemo is ignored if netgame is - false, it doesn't need to set that either. -- Fixed: FTexture::GetScaled* functions did not check for scale values of 0. - -October 7, 2006 (Changes by Graf Zahl) -- Fixed: PrintAlias passed FString objects directly to Printf. -- Added bitwise not (~) operator to ACS. - -October 6, 2006 (Changes by Graf Zahl) -- Fixed: Hires texture replacements must call AddPatch if the texture - isn't defined yet in order to replace lumps that are not in the - list of preinitialized graphics. -- Changed font initialization to occur after textures have been completely - initialized. This is necessary so that the font characters can be - replaced with hires versions. - -October 5, 2006 (Changes by Graf Zahl) -- Fixed: Hires texture replacements and auto-scaled flats require the - bWorldPanning flag. Also added some NULL pointer checks to the - hires texture loading code. -- Added Sector_SetFloorScale2 and Sector_SetCeilingScale2 line specials. - They are mostly the same as Sector_Set*Scale but take fixed point parameters. - This makes them easier to use and more precise than the old ones which - offered very small fractional precision. -- Changed Thing_Deactivate so that passing a tid of 0 deactivates the calling - actor. -- Added MeansOfDeath parameter to DamageThing. - -October 4, 2006 -- Added alias parameter substitution. Instances of %x in the alias command - string will be replaced with parameter x when the alias is executed. -- Fixed: When FString::LockBuffer() had to create a new string because the - RefCount was higher than one, the new string was not actually locked. -- FConsoleAlias now stores the commands in FStrings. -- BuildString() now returns an FString. -- Added the muslib license text to muslib.h. - -October 4, 2006 (Changes by Graf Zahl) -- When exiting the level on a damaging floor the player could be in the pain - state and make its pain noise at the start of the next level. -- Fixed: The FPS counter obstructed the key display in Doom's fullscreen HUD. - -October 2, 2006 -- Fixed: V_BreakLines() failed to produce output for the final line if it was - only one character long. -- Fixed: When players respawned in multiplayer, scripts that started on their - old body kept executing on that body instead of being transferred to the new - one. I'm doing this with general pointer substitution now, so everything - that pointed to the old body will use the new one; not sure if that's best, - or if it should applied exclusively to scripts, though. -- Fixed: Hexen's delay ACS command actually waited one extra tic. Now if - you're playing Hexen and an old-style ACS script delays it will wait one - extra tic in ZDoom as well. -- Fixed: When G_FinishTravel() created a temporary player, P_SpawnPlayer() - thought the old player actor was a voodoo doll and stopped its scripts - and moved its inventory. - -September 30, 2006 -- Fixed: player_t::GetSpawnClass() always returned the spawn flags for the - local player, so co-op games would spawn only the things relevant for the - local player and not all the things relevant for all players. - -September 30, 2006 (Changes by Graf Zahl) -- Fixed: Default flags for APlayerPawn and APlayerChunk were not defined. -- Fixed: The PCD_GETPLAYERINFO case in p_acs.cpp was missing a break. - -September 27, 2006 (Changes by Graf Zahl) -- Fixed: Monsters should never target friends, even if the friendliness - state has changed since the target has been acquired. -- Fixed: Multiplayer telefrag obituaries must be handled before weapon - dependent obituary messages. - -September 26, 2006 -- PClass::StaticInit() now sorts the class metadata so that operations that - iterate over it (such as the "give all" cheat) are compiler-independant. - -September 25, 2006 (Changes by Graf Zahl) -- Fixed: ACustomInventory::CallStateChain couldn't be called recursively - so any item that was giving another CustomInventory item didn't work - as intended. -- Fixed: CustomInventory items didn't process A_Jump... commands properly - for non-players. - -September 23, 2006 (Changes by Graf Zahl) -- Fixed: Starting a new game didn't remove the deferred scripts. - -September 22, 2006 -- Fixed: FNodeBuilder::ShoveSegBehind needs to check that the result from - Heuristic is positive, not just non-zero. - -September 20, 2006 (Changes by Graf Zahl) -- Fixed: Summoned friendly monsters added to the total kill count. - -September 19, 2006 -- Added a dialog that gives the user the chance to fix things if the config - could not be saved for some reason. -- Added the writeini console command to write the config file, optionally - specifying a specific file name for it. -- Fixed: "Multiplayer" demos that only had one player were not played back - properly because the demo playback code only checked the number of players - to determine if it should be played as a netdemo. -- Assembly code is disabled when building with __APPLE__ defined, for now. -- If you aren't targeting x86, m_fixed.h only includes basicinlines.h now. -- Moved x64inlines.h into basicinlines.h. -- Replaced uses of __int64 with types from doomtype.h. -- The stop console command no longer ends single player games, just the demo - that was being recorded. -- In C mode, the sc_man parser no longer allows multi-line string constants - without using the \ character to preface the newline character. This makes - it much easier to diagnose errors where you forget the closing quote of a - string. -- Fixed: V_BreakLines() added the terminating '\0' to the last line of the - input string. -- Added font as a parameter to V_BreakLines and removed its keepspace - parameter, which was never passed as anything other than the default. - -September 18, 2006 -- Removed REGEXEPEEK. It was only there for a Dev-C++ project, and the Dev-C++ - project was long ago removed, thanks to that particular IDE being so agonizingly - slow. - -September 17, 2006 (Changes by Graf Zahl) -- Fixed: Texture scale calculations for HIRESTEX were incorrect. -- Fixed: The sky scrolling calculations caused an integer multiplication overflow. -- Fixed: Voodoo dolls should not start ENTER scripts. -- Fixed: ActorDamage must not parse the enclosing parentheses as part of the - expression. That will produce an error if a flag set or clear command immediately - follows. -- Fixed: P_DamageMobj ignored MF2_NODMGTHRUST if the damaging object had no - owner. -- Added a 'font' parameter to A_Print. -- Changed A_CustomMeleeAttack to take one damage parameter only. Since expressions - can be used this value is not used as a factor for a random value but as - a direct damage value instead. -- Fixed: AActor::SetState must check whether a called action function resulted - in the actor's destruction. A_Jump constructs to a 0-length terminating - state will hang if this isn't checked. - -September 13, 2006 -- Moved the vid_fps display to the upper-right of the screen. -- The stat display can now show multiple stats at once. -- Fixed: cycle_t was still a DWORD and not a QWORD under GCC. -- The stat meters now return an FString instead of sprintfing into a fixed - output buffer. -- NOASM is now automatically defined when compiling for a non-x86 target. -- Some changes have been made to the integral types in doomtype.h: - - For consistancy with the other integral types, byte is no longer a - synonym for BYTE. - - Most uses of BOOL have been change to the standard C++ bool type. Those - that weren't were changed to INTBOOL to indicate they may contain values - other than 0 or 1 but are still used as a boolean. - - Compiler-provided types with explicit bit sizes are now used. In - particular, DWORD is no longer a long so it will work with both 64-bit - Windows and Linux. - - Since some files need to include Windows headers, uint32 is a synonym - for the non-Windows version of DWORD. -- Removed d_textur.h. The pic_t struct it defined was used nowhere, and that - was all it contained. - -September 9, 2006 (Changes by Graf Zahl) -- Added support for scaled textures to DCanvas::DrawTexture. -- Changed deh.MaxHealth use to be consistent with other source ports. -- Added NULL pointer checks to APlayerPawn's state set functions. If these - remove the player from the game a crash is the inevitable result. - -September 8, 2006 -- Fixed: Weapons did not give you double ammo at baby and nightmare skills. -- Fixed: SetTextureNoErr() in p_setup.cpp assumed that all color values were - six characters. Although this was the intended way to specify colors, - earlier versions did no error checking, so other lengths worked too. -- Fixed: FPatchTexture waited until MakeTexture() to call CalcBitSize(), - so the width and height bit sizes weren't available when using it as a - source for a warp texture. -- Fixed: R_InitSkyMap() should only warn about two sky textures not being - the same height when they are used as part of a double sky. -- Added a NULL state check in AActor::Tick() before advancing the current - state. Note that this should not happen, so there's an assert there for - the debug build as well as a regular check for the release build. - -September 1, 2006 -- Version bump to 2.1.5. -- Fixed: P_LoadSegs() checked for invalid vertices too late. - -August 31, 2006 -- Changed: Starting a new game or reloading an old one reset the chasecam. -- Removed the r: ACS print cast. You can do it yourself with s: and an array. -- Replaced all the bool arguments to the ACS ReplaceTextures and SectorDamage - commands with a single flags argument. SectorDamage also gained extended - functionality: you can now make it hurt only players, only non-players, or - both. Previously, hurting only non-players was not possible. -- Added the HUDMSG_COLORSTRING flag for ACS hudmessages. If you OR it in with - the message type, the color will be treated as a string naming the color - you want to use, so now you can use custom colors with hudmessages. - -August 30, 2006 -- Added the FNameNoInit class that is exactly like FName except it does not - initialize its index, so it can be used from inside Actors without - overwriting the runtime default value. -- V_BreakLines() now returns an array of FStrings instead of char *'s. -- Added support for custom text colors in messages like this: - print (s:"\c[Chartreuce]This text is in the color 'Bleargh'"); - This also obsoletes some of the functionality of the r: print specifier - before it even saw a release version, because you can do this with the - standard colors too: - print (s:"\c[Green]Some text"); -- Added two new decorate functions: A_PlaySoundEx("sound_name", "channel" - [, bLooping]) and A_StopSoundEx("channel"), where "channel" is "Auto", - "Weapon", "Voice", "Item", "Body", "SoundSlot5", "SoundSlot6", or - "SoundSlot7". -- Added a third parameter to S_IsActorPlayingSomething() to allow it to check - if the actor is playing a specific sound. - -August 29, 2006 -- Moved the text color definitions out of the executable and into an external - data file. -- Removed the setcolor CCMD. It's been obsolete for years, ever since color- - aware cvars were added. -- Changed V_GetColorStringByName() to return an FString, because it did a - copystring() call. -- Extended V_GetColorFromString() so that it accepts HTML-style #RRGGBB and - #RGB color strings. - -August 27, 2006 (Changes by Graf Zahl) -- fixed: callstatechain didn't check for NULL code pointers - -August 25, 2006 -- Fixed: Multiple-choice sound sequences could not be assigned IDs for use - with polyobjects and the sound sequence selector things. - -August 24, 2006 -- Removed the 64 seg limit for polyobjects defined with Polyobj_ExplicitLine. -- Polyobj_StartLine and Polyobj_ExplicitLine can now set a line's ID. This is - the fourth parameter for Polyobj_StartLine and the fifth parameter for - Polyobj_ExplicitLine. -- Added support for DDS textures compressed with DXT1, DXT3, or DXT5. - -August 23, 2006 -- Fixed incorrect spawn ID for cell pack. - -August 22, 2006 -- Added Martin Howe's code for replacing environment variables in partial IWAD - search paths. -- Added support for casting color names in ACS print-type statements. What that - means is that instead of writing this: - print (s:"\cDSome text"); - You can write this: - print (r:CR_GREEN, s:"Some text"); -- Added some new colors, based on the ones jimmy91 posted in the forum: cream, - light blue, black, olive, dark green, dark red, dark brown, purple, and dark - gray. -- Simplified FFont::BuildTranslations() and BuildTranslations2() to make adding - new colors easier. - -August 22, 2006 (Changes by Graf Zahl) -- Removed a few redundant calls to FTexture::GetWidth because all textures - are now fully initialized when being created. -- Added GZDoom's HI_START/HI_END namespace and HIRESTEX support. -- Added sprite scaling support to the weapon drawing code - -August 21, 2006 (Changes by Graf Zahl) -- Added support for PCX textures (1, 4, 8 and 24 bit variants.) - -August 20, 2006 (Changes by Graf Zahl) -- Changed: Patch and IMGZ textures now initialize their dimensions upon creation. - The lump is open anyway at that time so deferring this action until the information - is needed doesn't give any speed improvements. Now GetDimensions and all its - associated overhead is gone. -- Added support for TGA textures. It can handle all of the common variations - of this format. -- Changed: GI_PAGESARERAW is no longer checked. It wasn't really necessary before - because the chance of texture misidentification is absolutely minimal. - But raw pages are now restricted to textures of type TEX_MiscPatch only. -- Changed the automap parchment to use a regular texture. The previous - FAutomapTexture is only used as a last resort fallback now. If the code - finds a recognizable graphic it will create a proper texture for it now. -- Fixed: Flats were only auto-scaled when in Doom flat format. -- Fixed: FMultiPatchTexture::CheckForHacks blindly assumed that all patches - were FPstchTextures. Since the texture code does not have any type information - I added a new flag bIsPatch for this purpose. -- Moved all texture classes into their own source files and created a new - subdirectory 'textures' for that. -- Cleaned up the texture management code and added some stricter checks for - the validity of Doom patches. The old code liked to crash when being passed - some non-graphic data. - -August 19, 2006 (Changes by Graf Zahl) -- Added custom fail messages to the puzzle items. - -August 17, 2006 (Changes by Graf Zahl) -- Added a check to the map loader to check whether the map label - is in the same WAD as the following lump. -- Did some minor reorganization of code in r_data.cpp (mostly to make - handling of textures easier in GZDoom.) -- Did some preparations to allow loading folders on the HD into the lump - directory. -- Took MF2_WINDTHRUST off AMorphedMonster. This is something that should not - be a default setting. -- Moved a_artiegg.cpp to g_shared and renamed it to a_morph.cpp to better reflect - its meaning. -- Fixed: AMorphProjectile's PlayerClass and MonsterClass members must be serialized - as FNames. Serializing them as ints is not safe because name indices are not - guaranteed to be the same each time the game is started. Same for APlayerPawn's - MorphWeapon member. -- Converted EggFX, ArtiEgg, PorkFX and ArtiPork to DECORATE. -- Added a new parameter to A_FireCustomMissile. Previously it always aimed - straight ahead and altered the projectile's angle according to the resulting - direction. If the 6th parameter is 1 now it will aim at the specified angle - directly. -- Changed custom morphing to be based on a new MorphProjectile class, not - the Heretic specific EggFX. The EggFX properties are now prefixed with - 'MorphProjectile.'. - -August 16, 2006 -- Updated thingdef_specials.h for the new thingdef_specials.gperf file. -- Created a new MorphedMonster class that Chicken and Pig now derive from. - This class automatically takes care of unmorphing the monster when its - time is up. -- Made PlayerClass and MonsterClass properties of EggFX. You can override - these in a subclass to create new kinds of morpher projectiles. Along with - that, MorphWeapon is a new property of PlayerPawn that controls what type - of weapon you have available while morphed ("None" means you have no - weapons). -- Changed morphed monsters to record the time when they want to unmorph, not - the time left until they unmorph. This simplifies calling - P_UpdateMorhpedMonster() because you don't need to pass it a tic count. -- Added an optional second parameter to A_SpawnDebris and an optional - fifth parameter to A_SpawnItem that both do the same thing: If you set it - to 1, then the spawned actor will be assigned the same translation table - as the actor that called the function. -- Moved the blood colorization in P_SpawnBlood() ahead of the SetDamage() - call so that the blood color will available to the states of the blood - actor. -- Extended the puke command so that giving it a negative script number will - act like ACS_ExecuteAlways and always execute the script. (Ugh. Why did I - use's Raven's cheat code to name this command?) -- Added action special support to the thingdef expression evaluator. Now you - can use them like normal functions, which is probably most useful for - ACS_ExecuteWithResult. -- Switched to IJG code for reading JPEG images. I have included a stripped- - down version of the library with the ZDoom source. (It actually uses less - space than zlib now.) Unix users probably ought to use the system-supplied - libjpeg instead. I modified Makefile.linux to hopefully do that. I'm sure - Jim or someone will correct me if it doesn't actually work. - -August 14, 2006 -- Added JPEG texture support, courtesy of Ken's Picture Library. I will - probably switch to the IJG library once I pare it down. (Ken's code is 18K - of C source but does not support progressive JPEG. The IJG library is over - a megabyte of source and supports pretty much everything you would ever - need ever.) -- Fixed endianness issue in FTextureManager::CreateTexture(). -- Added support for interlaced PNGs. Now ZDoom is a mostly complete PNG - reader. The only thing missing is 48-bit RGB and 16-bit grayscale support, - which are just wastes of bits here, but also less likely to appear than - an interlaced PNG. (However, if you are using interlaced PNGs for textures, - then you are needlessly wasting space, since the image won't display - progressively.) -- Fixed: Writing named screenshots didn't work. - -August 12, 2006 -- Added support for truecolor PNG textures. They still get resampled to the - global palette, but at least they are visible now. -- Optimized UnfilterRow() in m_png.cpp a little. - -August 11, 2006 (Changes by Graf Zahl) -- Fixed: P_CheckOnMobjZ returned the first thing an actor could stand on, - not the highest possible. -- Added disintegration damage to SectorDamage. -- Bumped savegame version, min. savegame version, netgame version and - demo version because the inventory and damage changes are incompatible - with the old code. - -August 11, 2006 -- Added the ACS commands - ReplaceTextures (str old_texture, str new_texture, optional bool not_lower, - optional bool not_mid, optional bool not_upper, optional bool not_floor, - optional bool not_ceiling); and - SectorDamage (int tag, int amount, str type, bool players_only, bool in_air, - str protection_item, bool subclasses_okay); -- Added the vid_nowidescreen cvar to disable widescreen aspect ratio - correction. When this is enabled, the only display ratio available is 4:3 - (and 5:4 if vid_tft is set). -- Added support for setting an actor's damage property to an expression - through decorate. Just enclose it within parentheses, and the expression - will be evaluated exactly as-is without the normal Doom damage calculation. - So if you want something that does exactly 6 damage, use a "Damage (6)" - property. To deal normal Doom missile damage, you can use - "Damage (random(1,8)*6)" instead of "Damage 6". -- Moved InvFirst and InvSel into APlayerPawn so that they can be consistantly - maintained by ObtainInventory. - -August 10, 2006 (Changes by Graf Zahl) -- Gave Strife's PhosphorousFire the MF2_NODMGTHRUST flag so that its - damage is truly thrustless. The 'thrustless' parameter disabled all - thrust done by PIT_RadiusDamage but not the one done by P_DamageMobj. - Also gave Hexen's poison cloud the MF3_BLOODLESSIMPACT flag and made - spawning of blood decals in PIT_RadiusAttack depend on that. Since with - these changes the 'bombthrustless' argument to P_RadiusAttack is no - longer useful I removed it. -- Fixed: CheckActorInventory stored the return value in the wrong address - on the ACS stack. -- Fixed: Skin sounds weren't properly restored after a SNDINFO reset. - -August 6, 2006 (Changes by Graf Zahl) -- Added a more flexible ACS ChangeLevel function. It gets passed a level name - instead of a level number and has several additional options (e.g. changing - skill, starting the map without monsters and clearing the players' inventories. -- Changed Thing_Activate so that passing a tid of 0 activates the calling actor. -- Changed Thing_Remove so that passing a tid of 0 removes the calling actor. -- Added DECORATE parameters to A_Saw. - -August 2, 2006 -- Fixed: The ACS VM made no checks for object files without strings, assuming - that if it didn't have any strings, then it didn't matter what it calculated - for the location of the string table because it would never be referenced. - While this is true for a script all by itself, it means a crash if you have - a map script without strings that imports a library with strings and the - library tries to use one of its strings. - -August 1, 2006 -- It turns out that the Visual C++ 2005 runtime calls IsDebuggerPresent, which - is not available under Windows 95. Since this is (or at least should be) the - only thing preventing us from running under Windows 95, I added a stub that - replaces __imp__IsDebuggerPresent@0 with a pointer to a function that checks - for the real thing. - -August 1, 2006 (Changes by Graf Zahl) -- Fixed: The pickup message for Hexen's fighter's axe was assigned to the - AxePuff, not the weapon itself. -- Fixed: P_RunEffects used the consoleplayer's camera without checking its - validity. -- Fixed: CopyFriendliness needs to copy target to LastHeard as well in order - to make newly spawned monsters chase their spawner's target. - -July 31, 2006 (Changes by Graf Zahl) -- Added a type check to Spawn(actorname,...) to allow it to print a - meaningful message instead of the nondescript - 'Tried to spawn a class-less actor'. -- Converted AGlassJunk to DECORATE and made the spawn function a little - more flexible so that replacing the shard is easier. -- Converted ABloodSplatter to DECORATE. -- Removed A_Jiggle because it never worked properly. -- Changed DECORATE parser to allow commas between arguments for multi- - argument properties. For all newly added properties this format will - become mandatory but for backwards compatibility it is optional for - old ones. -- Added a check for negative indices to TAutoGrowArray::SetVal to prevent - passing an index of -1 from crashing the game. -- Fixed: Morphing must clear the weapon's flash sprite. -- Fixed: Resurrecting a morphed player caused a crash. -- Fixed: Random sounds that recursively refer to themselves caused a stack - overflow. Now they print a warning and get ignored. - -July 30, 2006 (Changes by Graf Zahl) -- Added Grubber's GetPlayerInfo ACS function. -- Fixed: Starting a game without skill menu always started the first episode. -- Changed A_AlertMonsters so that it can be placed directly in a weapon state. - -July 29, 2006 (Changes by Graf Zahl) -- Fixed: Frozen corpses of stealth monsters were invisible. -- Added: Calling Radius_Quake with a tid of 0 now uses the activator - as the quake's center. -- Used the new explosion handling to clean up the old style projectile - definitions. The SimpleProjectile class is gone and it uses the meta - data and A_ExplodeParms instead now. -- Removed the deprecation warnings for explosion parameters again because - the new system is fully inheritable and therefore useful again. -- Changed the explosion properties into meta data and adjusted A_ExplodeParams - to use these when called without any parameters. Also removed all special - parsing for A_Explode so now this function can be called with expressions - like any other function. -- Changed DECORATE parsing so that functions with completely optional - parameter lists don't create an empty list when called without parameters. - -July 28, 2006 -- Version bump to 2.1.4. -- Fixed: Friendlies would not turn to face you when you engaged them in - conversation, nor would they reliably return to their original facing when - you stopped talking to them. -- Added deprecation warnings for the DontHurtShooter, ExplosionRadius, and - ExplosionDamage actor "properties." They were considered deprecated before; - now this is explicitly stated when they are used. The problem with them is - that they are not really properties and do not behave like other properties - and cannot be inherited, because they are really just an alternate way of - specifying parameters for A_Explode. (Anything that currently prints a - deprecation warning will be removed completely in 2.2.0, which will be the - version where custom state labels make their debut.) - -July 26, 2006 (Changes by Graf Zahl) -- Changed player sprite translation for the menu so that it uses a regular - translation table instead of a local custom buffer. -- Fixed: ResetBaggage must set MeleeDamage to 0. - -July 21, 2006 -- Made SafeReadMemory() in i_crash.cpp more readable. -- Here's something MinGW users will probably like: i_crash.cpp no longer needs - dbghelp.h if you compile with GCC. - -July 19, 2006 -- Added some simple translucency map analysis for BOOM maps to more - intelligently pick the value to use for TranslucentLine's second argument. -- Added a queryiwad_key cvar to control which key can force the IWAD selection - to appear. It can be either "shift" or "control". Any other value will - disable its functionality. -- Fixed: A_SkullPop() and A_FreezeDeathChunks() did not transfer the player's - inventory to the new dismembered head "player". - -July 18, 2006 -- Fixed: C_midPrint() needs a NULL status bar check. - -July 17, 2006 (Changes by Graf Zahl) -- Fixed: PClass::CreateDerivedClass forgot to NULL FActorInfo::Replacee. - -July 16, 2006 (Changes by Graf Zahl) -- Fixed: S_ClearSoundData cleared PlayerClasses instead of PlayerClassLookups. -- Added NecroMage's submission for bitwise/shift assignment operators for ACS. -- Added replacement handling to A_BossDeath. -- Fixed: The check for no skill menu was incorrect when a custom player - class menu was present so instead of starting the game specific skill menu - it always started Hexen's. -- Fixed: When a non-player tried to play a player sound it tried to access - the actor object as an APlayerPawn. -- Changed PlayAttacking2 to always use the melee state instead of different - implementations per player and hard coding it to MissileState+1. Also - changed PlayAttacking for the HereticPlayer to use the same animation as - PlayAttacking2. Now the special handling for Heretic in the FireWeapon - functions can be removed. -- Fixed: PlayerStartItem created a duplicate of the item's class name before - converting it into an FName. -- Removed game check for Doom from P_BloodSplatter. The BloodSplatter actor - is compatible with all games now so the explicit handling is no longer needed. -- Moved replacement handling back into AActor::StaticSpawn but controlled - by a (mandatory) parameter. Also added replacement to most other - instances in the game where non-inventory items are spawned. Replacement is safe - nearly everywhere except for inventory related spawns. -- Fixed: Due to the player class inclusion A_NoBlocking never called - NoBlockingSet for monsters. -- Changed: Sounds can be specified by full path now in SNDINFO and S_SKIN. - -July 15, 2006 -- Fixed: Makefile.mgw was mysteriously missing some targets. After fixing that, - I also removed some of GCC's warnings. - -July 14, 2006 (Changes by Graf Zahl) -- Fixed: Any kill in multiplayer games that could not be credited to a player - didn't count at all - not even toward the global level statistics. -- ...and removed it again. It was not an accident. The only reason the PowerupGiver - had its own RespawnTics was to account for the pickup flash delay. - But that is better handled by checking the flag and adding the additional 30 - tics in AInventory::Hide because then it affects all items that have one - - and only those. The AT_GAME_SET function didn't work anyway because it was - called after parsing DECORATE. - -July 13, 2006 -- Restored the PowerupGiver AT_GAME_SET function. I assume its removal was an - accident from merging in Grubber's custom player classes. - -July 13, 2006 (Changes by Graf Zahl) -- Removed the game filter check from addplayerclass. If a player class is added - here the game filter is irrelevant and there's nothing that should prevent - the HereticPlayer being added to a Hexen game, for example. -- Changed: The addplayerclass CCMD was far too paranoid and needlessly aborted - the game for any error being encountered. Since an empty player class list - is checked for elsewhere outputting the messages to the console is sufficient. -- Generalized Hexen's class-based spawning to be a property of the player class - so now it is available in all games. -- Replaced the call to A_FlameSnd in the HereticPlayer's burn death sequence - with A_FireScream and defined *burndeath for Heretic. -- Added Grubber's custom player class support. - -July 12, 2006 -- Changed decorate replacement to be opt-in instead of opt-out. This allows for - greater flexibility in what can be replaced (replaced actors need not be ancestors - of actors that replace them) at the expense of not having universal actor - replacement. Instances where replacements work: - - Line specials that spawn things (Thing_Spawn and related) - - ACS spawning commands (SpawnSpot and the like) - - Spawning mapthings at level load time in P_SpawnMapThing() - - Spawning items off of dead dudes in P_DropItem() - - The A_SpawnItem decorate function - - The summon and summonfriend console commands - - ThingCount will count both original actors and their replacements as the same - things. - TBD: Should the ACS inventory functions use replacements too, or not? -- Fixed: The game would crash after informing you of a duplicate class registration - because PClass::CreateDerivedClass() did not initialize everything before calling - InsertIntoHash(). -- Fixed: Forcefully removing a weapon from a player's inventory would not reset - the player's refire counter. -- Fixed: FreeKeySections() was called before M_SaveDefaults() during shutdown, - so all custom keys would go to a "(null)" section instead of their intended - section. - -July 11, 2006 -- Restored the previous level flag values to avoid needlessly breaking some - savegames at this point in time. -- Fixed: R_ClearPlanes() did not clear skybox planes for a full clear. -- Streamlined zip file loading by delaying the processing of the local file - header until it is actually needed. - -July 11, 2006 (Changes by Graf Zahl) -- Changed the additive scrollers option into a compatibility flag so that it can - be changed from the menu. - -July 10, 2006 -- Fixed closed doors between the front sector's floor and ceiling the right way. - I was just missing a non-null texture check. -- Removed references to texturewidthmask. What was that? - -July 10, 2006 (Changes by Graf Zahl) -- Fixed: The earthquake code needs to check whether a quake's spot is still valid. - Super Sonic Doom crashed due to this. -- Fixed: G_DoAutosave could divide by 0 if autosavecount was 0. - -July 9, 2006 (Changes by Graf Zahl) -- Fixed: The calls to DCanvas::Dim in c_console.cpp were missing some type casts. -- Fixed: CCMD(dir) passes FStrings directly to Printf. -- Fixed: The defaultbind command still treated the bindings as char pointers and - as a result didn't work. -- Added SpawnSpotFacing ACS function which is the same as SpawnSpot but it uses - the map spot's angle. -- Added ThingCountName ACS function which is the same as ThingCount but it takes - an actor's type name instead of a spawn ID. - -July 9, 2006 -- Fixed: If the sector behind a seg was closed, but it was closed between the - ceiling and floor of the front sector, the renderer did not add it to the - solid clip list. - -July 8, 2006 (Changes by Graf Zahl) -- Fixed: Specifying 'strifefallingdamage' in MAPINFO cleared all other flags. -- Fixed: maxstepheight and maxdropoffheight were stored as ints instead of - fixed_t's by the DECORATE parser. - -July 7, 2006 -- Blends created with the ACS fade commands now degrade to transparent overlays - when the console is visible, just as they do for the menu. -- Added actor replacement for DECORATE. This works at a higher level than - using duplicate DoomEdNums and will affect all attempts to spawn the - replaced actor. However, because this happens for all spawns and not just - at map load, the replacing actor must be compatible with the replaced - actor, which means that an actor can only serve as a replacement for one - of its baseclasses. For example, if you want to use a modified imp, you can - use this DECORATE: - actor MyImp : DoomImp replaces DoompImp - { - // Put changed properties here - } -- New: The IWAD dialog now remembers the last IWAD you picked and - automatically highlights it the next time you run the game. This also - applies if you check "Don't ask me this again": The IWAD selected will be - the one that gets automatically loaded, not the one located first. (Using - the -iwad parameter will not change the default IWAD.) In addition, you - can now bring the dialog up even if you disable it by holding down SHIFT - during startup. -- Changed ExtractFilePath() and ExtractFileBase() to return FStrings instead - of writing to a provided output buffer. ExtractFileBase() can also - optionally keep the file's extension in the result. -- Removed the -heapsize parameter entirely. The informational message should - no longer be needed. -- Removed -maxdemo parameter. There's no point to having it around since - the demo buffer grows automatically. - -July 3, 2006 (Changes by Graf Zahl) -- Fixed: Changed initialization of Weapon.Kickback so that it is only done - for direct descendants of AWeapon and not for every weapon being defined. -- Changed parsing of actor names back to not use C-mode. This change breaks - any definition that contains periods in their name and apparently there's - more than anyone could expect. Also altered the parser to manually check - for colons inside the parsed string so that placing spaces around them - is no longer necessary. -- Fixed: Weapons could be picked up for ammo even if they gave none. -- Fixed: A_Beacon was missing a NULL pointer check for the beacon's owner. -- Fixed: The status bar tried to access CPlayer->camera without checking - its validity. In spy mode there is a possibility that it is NULL. - -July 2, 2006 (Changes by Graf Zahl) -- Fixed: G_NewInit destroyed the players' userinfo data. -- Changed the special radius damage handling for the barrel and boss brain - into an actor flag. -- Added A_RadiusThrust code pointer for DECORATE and adjusted the radius - attack functions accordingly. - -July 1, 2006 (Changes by Graf Zahl) -- Fixed: In multiplayer games, when trying to change targets, A_Chase forgot - to check whether the new target was the same as the old one and treated - this case as a real target change. - -June 30, 2006 -- Changed the earthquake view shaking so that it works for anything and not - just players. - -June 29, 2006 -- Added some hackery at the start of MouseRead_Win32() that prevents it from - yanking the mouse around if they keys haven't been read yet to combat the - same situation that causes the keyboard to return DIERR_NOTACQUIRED in - KeyRead(): The window is sort of in focus and sort of not. User.dll - considers it to be focused and it's drawn as such, but another focused - window is on top of it, and DirectInput doesn't see it as focused. -- Fixed: KeyRead() should handle DIERR_NOTACQUIRED errors the same way it - handles DIERR_INPUTLOST errors. This can happen if our window had the - focus stolen away from it before we tried to acquire the keyboard in - DI_Init2(). Strangely, MouseRead_DI() already did this. -- When a stack overflow occurs, report.txt now only includes the first and - last 16KB of the stack to make it more manageable. -- Limited StreamEditBinary() to the first 64KB of the file to keep it from - taking too long on large dumps. -- And now I know why gathering crash information in the same process that - crashed can be bad: Stack overflows. You get one spare page to play with - when the stack overflows. MiniDumpWriteDump() needs more than that and - causes an access violation when it runs out of leftover stack, silently - terminating the application. Windows XP x64 offers SetThreadStackGuarantee() - to increase this, but that isn't available on anything older, including - 32-bit XP. To get around this, a new thread is created to write the mini - dump when the stack overflows. -- Changed A_Burnination() to be closer to Strife's. -- Fixed: When playing back demos, DoAddBot() can be called without an - associated call to SpawnBot(). So if the bot can't spawn, botnum can - go negative, which will cause problems later in DCajunMaster::Main() - when it sees that wanted_botnum (0) is higher than botnum (-1). -- Fixed: Stopping demo recording in multiplayer games should not abruptly - drop the recorder out of the game without notifying the other players. - In fact, there's no reason why it should drop them out of multiplayer at - all. -- Fixed: Earthquakes were unreliable in multiplayer games because - P_PredictPlayer() did not preserve the player's xviewshift. -- Fixed: PlayerIsGone() needs to stop any scripts that belong to the player - who left, in addition to executing disconnect scripts. -- Fixed: APlayerPawn::AddInventory() should also check for a NULL player->mo - in case the player left but somebody still has a reference to their actor. -- Fixed: DDrawFB::PaintToWindow() should simulate proper unlocking behavior - and set Buffer to NULL. -- Improved feedback for network game initialization with the console ticker. -- Moved i_net.cpp and i_net.h out of sdl/ and win32/ and into the main source - directory. They are identical, so keeping two copies of them is bad. -- Fixed: (At least with Creative's driver's,) EAX settings are global and not - per-application. So if you play a multiplayer ZDoom game on one computer - (or even another EAX-using application), ZDoom needs to restore the - environment when it regains focus. -- Maybe fixed: (See http://forum.zdoom.org/potato.php?t=10689) Apparently, - PacketGet can receive ECONNRESET from nodes that aren't in the game. It - should be safe to just ignore these packets. -- Fixed: PlayerIsGone() should set the gone player's camera to NULL in case - the player who left was player 0. This is because if a remaining player - receives a "recoverable" error, they will become player 0. Once that happens, - they game will try to update sounds through their camera and crash in - FMODSoundRenderer::UpdateListener() because the zones array is now NULL. - G_NewInit() should also clear all the player structures. - -June 29, 2006 (Changes by Graf Zahl) -- Added a 'default' setting to all color selection menu items that leaves - the font untranslated. -- Fixed: Heretic's monsters were missing the MF2_MCROSS flag. - -June 28, 2006 (Changes by Graf Zahl) -- Fixed: Bouncing projectiles should not bounce off horizon lines. Now they - vanish instead. -- Changed masses of ice chunks and glass shards to make small splashes -- Fixed: P_UndoPlayerMorph didn't properly transfer the inventory. It just - copied the pointer instead of using ObtainInventory. - -June 24, 2006 -- Moved the version resource into the "compile-time directives" section of - the resource script so that Developer Studio won't replace the version macros - in it with their literal values. Now updating version.h is guaranteed to be - enough to bump the version everywhere it's used. - -June 24, 2006 (Changes by Graf Zahl) -- Fixed: PIT_CheckThing checked AActor::tid instead of TidToHate to determine - whether a monster of the same species can be hurt. -- Added new ice chunk sprites submitted by Enjay. -- Replaced all occurences of 'ZDoom' in i_crash.cpp with a define from version.h - so that this file doesn't need to be changed for altering the texts. -- Deleted the programmer death script from strifehelp.acs because it is no - longer used. -- Fixed: strfhelp.acs and the PUMPUPS cheat need to give 10 UpgradeStaminas - because that item is using Inventory::Amount now. - -June 23, 2006 -- Changed the archive format for crash reports from tar.gz to zip. -- Went back to a single process model for crash reporting. It appears there - are some machines that don't like having another process collect the - information and report it. I still feel that having another process do - it _should_ be more reliable, because that process can execute in a known - good state. Ah well. I haven't yet seen anything that left the main process - in a totally unrecoverable state, so it's probably okay. Unlike before, this - single-process version is still GCC-compatible. - -June 23, 2006 (Changes by Graf Zahl) -- Fixed: The resurrect cheat didn't reset the player's damage type so - if he died by being frozen the blue blend didn't disappear. -- Fixed: FWarpTexture::MakeTexture must be declared virtual so that - the FWarp2Texture version of it can be called. - -June 22, 2006 (Changes by Graf Zahl) -- Fixed: The check to prevent items from being given to dead players - didn't work properly. It has to be done in the cheat code, not in - APlayerPawn::AddInventory. -- Fixed: The medikit and stimpack used a MaxAmount of 100 so that - stamina upgrades were ineffective. -- Fixed: Jumping and crouching at the same time created jerky results. - Now jumping takes precedence and you can't crouch while pressing the - jump key (which causes an uncrouch.) - -June 21, 2006 -- Fixed: DF_NO_COOP_WEAPON_SPAWN was handled backwardly. -- Fixed: G_InitLevelLocals() needs to OR in the crouching bits, otherwise it - discards the jumping bits. -- ProcessActor() now sets C mode before retrieving the actor's name. -- Fixed: The new SC_GetString() scanner accepted slashes at the end of tokens - when not in C mode, even if they were the start of a comment. Now if you - want a slash at the end, you must quote it. - -June 21, 2006 (Changes by Graf Zahl) -- Fixed: Decal actors with an invalid decal texture caused a crash. -- Fixed: Player could crouch while dead. -- Fixed: The sidedef loader could allocate insufficient memory if a map - contained unused sidedefs. -- Fixed: Color control sequences were written to the log file. Since any - entered console command contains such a sequence it was quite noticable. -- Fixed: The obituary code didn't use the attacker's name for kills caused - by other players. -- Fixed: PIT_StompThing never checked for COMPATF_NO_PASSMOBJ. -- Fixed: COMPATF_TRACE returned true for all two-sided lines, not just for - those with the same sector on both sides. - -June 20, 2006 -- Added grubber's thingdef_exp.cpp. I might not use it later, but I can still - use it now. -- Unlimited the monster pain sounds in Hexen after I played as the Cleric a - while and killed several centaurs with the flechette. -- Fixed: Moving to an old level in a hub caused the old player's inventory to - spawn owned by the current player (but still hanging off the old player), so - the game would hang when trying to delete it. -- Modified re2c so that it doesn't add a date to the file it generates. Thus, - if it regenerates a file during a full rebuild, SVN won't see it as a change. - Also updated it to 0.10.5. -- Fixed: SC_GetString() did not properly terminate sc_String when the last - token in the file had no white space after it. Since I could not actually - find the problem (it works fine in debug mode and I saw no logic errors), - I decided to take this opportunity to reimplement it using an re2c-generated - scanner. Now it's 1.6x faster than before and correctness is easier to - verify. - -June 19, 2006 -- Fixed: FMODSoundRenderer::Shutdown() also needs to reset NumChannels. -- Added back the Manifest to zdoom.rc for non-VC8 Windows compilers. -- Fixed MinGW compilation again. Now it uses the same method as Makefile.linux - to find all the source files so that it doesn't need to be manually updated - each time source files are added or removed. -- Added the SVN revision number to the version string. A new tool is used to - obtain this information from the svnversion command and write it into a - header file. If you don't have the svn command line tools installed or didn't - check it out from the repository, you can still build. I added some rules for - this to Makefile.linux, and I assume they work because they do for - Makefile.mingw. -- Fixed: MIDISong2 did not delete MusHeader in its destructor. - -June 19, 2006 (Changes by Graf Zahl) -- Removed the unused sfx_ variables for the chainsaw sounds. -- Fixed map name checks in idclev, hxvisit, for +map and the titlemap. -- Changed handling of Zips so that the patches/, graphics/, sounds/ and - music/ subdirectories no longer are placed in the global namespace. Instead - new namespaces are defined. These namespaces aren't merged, however and - searching in them either returns a lump inside it or one from the global - namespace when it doesn't come from a Zip file. Proper order of files is - still observed though. As a result proper use of the directories inside Zips - is strictly enforced now so that for example anything used as a patch must be - in the patches/ directory and won't be found anywhere else. - -June 18, 2006 (Changes by Graf Zahl) -- Added another set of ACS inventory functions which take a tid for the actor - and aren't limited to the script's activator. -- Added GetSectorLightLevel(tag), GetActorCeilingZ(tid) and - SetActorPosition(tid, x, y, z, fog) ACS functions. -- Fixed: First initialization of camera textures should not mark the rendered - lines as mapped. - -June 17, 2006 -- Finally implemented code to keep some or all of your inventory intact when - respawning in coop. Now the new inventory code should finally be complete. :-) -- Fixed: PROP_Inventory_PickupMessage was improperly defined for non-VC++ - compilation. - -June 17, 2006 (Changes by Graf Zahl) -- Converted a_doomhealth.cpp to DECORATE. -- Added a PickupMessage property to the internal actor parser, replaced - most of the virtual PickupMessages with it and placed the code that - reads the metadata into AInventory::PickupMessage. Now the - PickupMessage method is truly virtual and I can do: - Added a Health.LowMessage property to define double message items like - Doom's medikit in DECORATE. -- Since defining Mana3 as an ammo type and then overriding the TryPickup - method means that this item defeats all ammo checks in the game it might - as well be defined as a CustomInventory item. At least this fixes the - amount given in easy and very hard skills. -- Converted all ammo items to DECORATE. -- Changed internal property setting of ammo types and sister weapons - to use fuglyname as for DECORATE definitions. This allows to export - the ammo definitions into DECORATE definitions without doing it for - the weapons themselves. -- Replaced obituary methods with actor properties. -- Fixed: The secret map check didn't work for maps inside Zips. - -June 14, 2006 -- Fixed loading of Build/Blood maps. -- FWadLump::Read() now handles Blood decryption directly. -- Fixed: A fatal error thrown during map loading after the sectors have been - counted but before they are allocated crashed in PointerSubstitution(). -- Removed my "backwards compatibility fix" for APROP_Speed. It turns out that - in all the public versions where monster speed is not fixed point, you - couldn't modify the monster's speed due to a bug in P_Move() anyway. So - there's nothing to be backward compatible with. - -June 14, 2006 (Changes by Graf Zahl) -- Fixed: Saving on maps that don't contain a MAPINFO definition didn't work. -- Fixed: The Zip loader loaded all WADs inside a Zip into the lump directory. - This is only supposed to be done for WADs in the root directory. - -June 12-14, 2006 (Changes by Graf Zahl) -- Complete restructuring of the map loading code. Previously the only way - to put maps into Zips was to load them as embedded WADs which caused - some problems, most importantly that the map's file name was irrelevant - and the internal map label was used instead. With the new code there - is now a properly defined way to add maps to Zips: - * Maps are placed in a subdirectory called 'maps'. - * Maps are stored as WADs that contain all map related lumps. - * The first lump in the map's WAD directory must be the map label. - * All lumps not belonging to the first map are ignored. - * The map's file name determines the name the map is identified with. - For maps stored this way the internal map label is ignored so with this - method renaming maps is as easy as renaming a file and it is no longer - necessary to manipulate the map label. - With the new code it is also possible to load external maps without - adding them to the WAD list. Type 'open mapfile.wad' in the console - to start such a map. - The new code also performs stricter lump name checks to prevent accidental - loading of non-map data. - -June 13, 2006 -- Moved level scroller information out of G_InitLevelLocals() and into - P_FreeLevelData() so that it also gets performed at shutdown. -- Fixed: In the past, ZDoom worked like Doom and used integral values for - monster speeds. Now it uses fixed point so that an actor's speed property - can always be considered is always fixed point. So DoSetActorProperty() - should scale very slow speeds, just like dehacked's PatchThing() has done - for some time now. - -June 11, 2006 (Changes by Graf Zahl) -- Changed UpgradeStamina to use AInventory's Amount and MaxAmount to - control the amount of upgrade and the maximum that can be reached. - -June 10, 2006 (Changes by Graf Zahl) -- Fixed: The skin loader assumed that all skin textures are in Doom patch - format. Now it calls FTexture::CreateTexture to do proper checks. -- Removed the PickupSound method from FakeInventory and changed it so that - it uses AInventory::PickupSound to store its custom pickup sound. -- Removed the PickupMessage method from FakeInventory. This can be handled - by the standard pickup message code now that it uses the meta data for the - message. -- Fixed: The maximum indices for StrifeTypes were inconsistent. Now the - allowed range is 0-1000 in all situations. -- Fixed: Setting a local SNDINFO for a map deleted all skin based sounds. -- Added a crouchsprite property to the skin info. -- Fixed: Crouching sprites must be checked each frame, not just each tic. -- Added an srand call to D_DoomMain in order to randomize the values returned - by rand which is being used to shuffle the playlist. - -June 10, 2006 -- Fixed: Information added with addkeysection and addmenukey was never freed. -- Fixed: A classic decorate FakeInventory's PickupText was never freed. -- Fixed: Colored lights were never freed. -- Fixed: When a dehacked patch was applied, the dehacked StateMap was never - freed. -- Removed termdone checks around atterm(S_ClearSoundData) and - atterm(S_Shutdown) because atterm() already checks for duplicates. -- Fixed: S_ClearSoundData() should unload all sounds before it clears S_sfx. -- Fixed: AltSoundRenderer::LoadSound() didn't check if the sound had already - been loaded and lost the old sound data if it had been. -- Fixed: FinishDehPatch() needlessly duplicated the new DehackedPickup's name. -- Fixed: PatchStrings() allocated a private string and never freed it. - -June 8, 2006 (Changes by Graf Zahl) -- Changed music name handling in MAPINFO so that music can be specified by - full path of a file in a Zip. -- Fixed: intermusic in MAPINFO was limited to WAD lumps and couldn't handle - external data. - -June 8, 2006 -- Fixed: Trying to play a 0-length song from a wad inside a zip caused a crash. - -June 7, 2006 (Changes by Graf Zahl) -- Fixed: A_CustomPunch didn't use the range parameter correctly. - -June 6, 2006 -- Integrated recent ZDBSP improvements into the internal nodebuilder: - - ClassifyLine now chooses either SSE2 or regular x87 math depending on whether - or not SSE2 is available at runtime. Since most of the time is spent in - ClassifyLine, using SSE2 in just this one function helps the most. - - Nodebuilding is a little faster if we inline PointOnSide. - - Changed FEventTree into a regular binary tree, since there just aren't enough - nodes inserted into it to make a red-black tree worthwhile. - - Added more checks at the start of ClassifyLine so that it has a better chance - of avoiding the more complicated checking, and it seems to have paid off with - a reasonably modest performance boost. - - Added a "vertex map" for ZDBSP's vertex selection. (Think BLOCKMAP for - vertices instead of lines.) On large maps, this can result in a very - significant speed up. (In one particular map, ZDBSP had previously - spent 40% of its time just scanning through all the vertices in the - map. Now the time it spends finding vertices is immeasurable.) On small maps, - this won't make much of a difference, because the number of vertices to search - was so small to begin with. - -June 3, 2006 (Changes by Graf Zahl) -- Added a StartConversation special that allows automatic activation of Strife - dialogs. -- Added Thing_Raise special that allows Arch-Vile like resurrections from scripts - or DECORATE states. -- Added a RadiusDamageFactor property for actors. This replaces the hard coded - factor of 0.25 for Hexen's players. -- Added new SpawnProjectile function to ACS. It's the same as Thing_Projectile2 - but the projectile is specified by name, not spawn ID. -- Added MAPINFO option to set the compatibility flags. If this is done these - explicit settings will take precedence over the compatflags CVAR. - -May 31, 2006 -- Merged in recent ZDBSP fixes: - - Added code to explicitly handle outputting overlapping segs when - building GL nodes with ZDBSP, removing the check that discarded - them early on. - - AddIntersection() should convert to doubles before subtracting the vertex - from the node, not after, to avoid integer overflow. (See cah.wad, MAP12 - and MAP13.) A simpler dot product will also suffice for distance calculation. - - Splitters that come too close to a vertex should be avoided. (See cata.wad.) - - Red-Black Tree implementation was broken and colored every node red. - - Moved most of the code for outputting degenerate GL subsectors into another - function. - -May 31, 2006 (Changes by Graf Zahl) -- Fixed: Ammo items dropped by monsters that have a default amount of 1 didn't - contain any ammo at all. -- Fixed: PClass::FreeIndices was declared as TArray in the header but - as TArray in the cpp file. - -May 28, 2006 (Changes by Graf Zahl) -- Fixed: PowerFrighteners must check Owner for NULL in InitEffect and EndEffect. - -May 28, 2006 -- Fixed: When building GL nodes for Deathkings MAP42, one polyobject had one - of its segs thrown away, so the map could not start. This was because the - nodebuilder assumed all subsectors would be 2D and could not handle the - case where a degenerate 1D subsector is created. In this case, that happens - because that map has three polyobjects in the middle of the void, so the only - way to assign them to a subsector is to use a 1D subsector. - -May 28, 2006 (Changes by Graf Zahl) -- Fixed: Monsters couldn't hurt other monsters of the same species if they - were supposed to hate them. -- Since I was editing the file anyway I added checks for Heretic's and Strife's - damaging floor types to DCajunMaster::IsDangerous. -- Added a NULL pointer check to DCajunMaster::TurnToAng because a crash log - indicated that this can happen. -- Fixed: Strife's energy pod contains 20 units when dropped by monsters. - To achieve this I added an Ammo.DropAmount property because there are - no other means to control this from inside a conversation script. - -May 27, 2006 (Changes by Graf Zahl) -- Fixed: FString::FormatHelper must not alter the null string. -- Fixed: FString::FormatHelper should use ReallocBuffer instead of directly - calling Realloc. This caused crashes with the ACS print function. -- Fixed: The dummy player spawned in G_FinishTravel must not start any ENTER - scripts. - -May 26, 2006 -- Changed makewad's zip routines so that it simply stores files that cannot be - compressed smaller instead of using deflate anyway. Saves 133 bytes currently. - -May 26, 2006 (Changes by Graf Zahl) -- Fixed: CallStateChain relied on CallingState being preserved across the - call of the state's action function. This is not the case when a missile - is being spawned and exploded right away. - -May 25, 2006 -- Fixed: The C code in AltSoundRenderer::CopyAndClip() did not shift the sample - data enough (2 bits instead of 8), so it was super loud and aliased. -- Fixes for GCC 4.1: Several type-punned pointer warnings, but more - importantly, declaring a friend function inside a class body is no longer - enough to declare that function globally; you must declare it again outside - the class. -- Upgraded FArchive::SerializePointer so that it can store 32-bit indices. -- ACS printing pcodes now build their string in an FSttring instead of a fixed - sized buffer on the stack. - -May 24, 2006 -- Modified ccdv-win32 to show "Generating X" messages when running lemon and - re2c instead of "Linking X". -- Updated lemon and re2c to the latest versions and ported dehsupp to use them - for code generation. (Xlatcc is next.) -- Added function level linking for Makefile.mingw. -- Disabled RTTI generation and enabled function-level linking in the VC 2005 - zdoom project. -- Fixed: TAG_MORE now uses __va_copy to copy the taglist when building with - GCC, so that should let it build under x86-64 and any other GCC targets. - -May 24, 2006 (Changes by Graf Zahl) -- Fixed: A_SpawnItem performed an integer multiplication with fixed point - values to calculate the spawn position. -- Fixed: A_SpawnItem tried to set the spawned actor's angle before checking - the validity of the returned pointer. - -May 23, 2006 -- Added missing linker dependencies for Visual C++ 2005 Express Edition and - fixed building of the assembly files when the source is located in a path - with spaces. - -May 22, 2006 -- Fixed: The new sound pausing on menu open interrupted Strife conversations. -- Did some very preliminary support for x64 compiling. -- Now I see why makewad is using the __fastcall calling convention by default: - Because the release zlib is built with it as well. -- Fixed: Conversion from 'const char *' to 'char *' in DEM_SAVEGAME case in - Net_DoCommand(). -- Updated the project files for Visual C++ 2005. -- Fixed: The new Thing_ChangeTID check would infinite loop if an actor - scheduled for destruction was encountered. - -May 22, 2006 (Changes by Graf Zahl) -- Fixed: Thing_ChangeTid must check whether the actor whose tid is about to - be changed is scheduled for destruction. -- Fixed: G_FinishTravel added the player to the hash chain twice. -- Fixed: The animations for Doom's E3 intermission used incorrect patch names. -- Added a check for MF_NOLIFTDROP to PIT_CeilingRaise because the overlapping - bridges in 007LTSD got moved by this function. - -May 21, 2006 -- Fixed GCC 4 warnings in FNodeBuilder::CreateSubsectorsForReal(). -- Changed f_finale.cpp/atkstates[] into a static variable, since its - anonymous type prevents it from being accessed from other files anyway. -- Fixed: The behavior of the eventtail advancement in d_net.cpp/CheckAbort() - was compiler-dependant. -- Fixed warnings GCC 4 threw up while compiling re2c and lemon. -- Removed __cdecl from makewad.c again. This is already defined as a builtin - for MinGW, and redefining it produces a warning. (Why is main explicitly - declared __cdecl anyway?) -- Fixed building ccdv-win32 with GCC 4. GCC 4 creates a memcpy call, which - won't work because it doesn't get linked with the standard C library. - -May 20, 2006 -- Fixed default.cbd and Makefile.mingw for current code state. -- New: Pausing the game (through any means, not just the pause key) now pauses - sound effects as well as music. "PauseMusicInMenus" has been added as a - MAPINFO flag to also pause the music when a menu or the console are open. - -May 20, 2006 (Changes by Graf Zahl) -- Fixed: The automap code had the check for rotation reversed. -- Changed type PClass::FreeIndices to TArray because that's - the type of the indices. -- Fixed: makewad.c needs __cdecl for non-Windows builds. -- Fixed: FinishThingdef didn't check whether the WeaponClass pointer in - AWeaponPiece was a valid name. - -May 19, 2006 -- Fixed: FloorAndCeiling_Raise/Lower did not work with slopes because they - used ZatPointDist instead of PointToDist to calculate the destination - distance for the plane equation. -- Fixed: Sky scroll positions could "jump" once they wrapped past position - 32767. An fmod now keeps them within range of the sky textures' real widths. - -May 19, 2006 (Changes by Graf Zahl) -- Increased the StrifeTypes array to 999 entries so that custom WADs have - more flexibility when defining dialogs. - -May 18, 2006 -- Added a check against rw_havelow in the "sky hack" part of R_NewWall(). - This prevents the front ceiling from being moved up if there has been no - texture defined to draw on the wall. This makes various parts of The - Darkest Hour render properly again while still allowing the crosses in - heroes2.wad and lamasery.wad to render correctly. -- Added a NULL sector check to P_CheckFakeFloorTrigger() because there was - a crash report indicating that an actor being pushed up by a moving floor - had a NULL sector. Since this field should be valid for every actor, the - debug build gets an assert here, and the release build just returns without - doing anything. -- Fixed: Camera textures were not rendered properly when the underlying - canvas's pitch and width were different (which, really, only happens if - you use ridiculously large camera textures). -- Fixed: FCanvasTextureInfo's were never freed. -- Fixed: MAPINFO special action structures were not freed. -- Fixed: FSingleLumpFont::LoadFON2() never freed its widths2 array. - -May 17, 2006 (Changes by Graf Zahl) -- Fixed: In case the path to strife1.wad didn't contain any '/' an - incorrect path was created for voices.wad. -- Fixed: The code building the path for Strife's voices.wad called the - wrong FString constructor. -- Fixed: LS_Thing_SetGoal set MF5_CHASEGOAL in flags, not flags5. - -May 17, 2006 -- Fixed: M_NotifyNewSave() needlessly created a copy of the filename. -- Fixed: Any touching_sectorlists for actors unlinked in G_StartTravel() were - lost forever. -- Fixed: DLightningThinker::Serialize() did not delete the old - LightningLightLevels array when loading from an archive. -- Fixed: Although I moved the correct polyobject freeing code into - P_FreeLevelData(), I left the old wrong code there too, which just deleted - the array without deleting anything hanging off of it. -- Texture animation improvements: - * Animations are now millisecond-accurate, so delays in ANIMDEFS can have - fractional parts. - * Cleaned up the animation code and moved it into r_anim.cpp. - * Blood's oscillating texture animations are now available for use by actual - supported games by adding the word "oscillate" after a "range" definition - in ANIMDEFS. - * Not exactly texture animation, but it's handled in the same function as - texture animations: Scrolling skies also have millisecond precision. - -May 16, 2006 -- Implemented Quasar's suggestion to use line flag 2048 as a "reserved" flag - that, if set, clears all the non-original-Doom flags on a line. This is - only for Doom format maps when playing Doom. -- Added support for automatically loading ACS objects (even for Doom-format - maps). To use it, compile the ACS files as ordinary libraries placed - between A_START/A_END markers. Then outside the markers, create a lump - called LOADACS. This is just a plain text lump that lists all the libraries - you want to autoload with every map. You can do this with as many libraries - as you want, and LOADACS lumps are also cummulative. -- Fixed: ApplyActorDefault() must ensure that dataint is non-negative before - calculating a non-NULL state. When compiling with Visual C++, states are - stored in the defaults list as byte values, but when compiling with GCC, - they are passed as 32-bit arguments to the function directly. So in VC++, - using ~0 to specify a NULL state appears as 255, but in GCC, it appears as - -1. - -May 16, 2006 (Changes by Graf Zahl) -- Added a missing NULL pointer check to APlayerPawn::Tick. -- Fixed: The falling scream should not be played when the player is under - water. - -May 15, 2006 -- Fixed: CopyPlayer() in p_saveg.cpp should use normal assignment, not - memcpy to copy the player structures. -- Fixed compilation with MinGW again and removed most of the new warnings. -- Changed the memory management for FString. Instead of using a garbage - collected heap, it now uses normal heap calls and reference counting to - implement lazy copying. You may now use bitwise operators to move - (but not copy!) FStrings around in memory. This means that the - CopyForTArray template function is gone, since TArrays can now freely - move their contents around without bothering with their specifics. - - There is one important caveat, however. It is not acceptable to blindly 0 - an FString's contents. This necessitated the creation of a proper - constructor for player_s so that it can be reset without using memset. I - did a quick scan of all memsets in the source and didn't see anything else - with a similar problem, but it's possible I missed something. -- Fixed: Build tiles were never deallocated. -- Fixed: Using Build's palette.dat only got half the palette right. - -May 14, 2006 (Changes by Graf Zahl) -- Added a show_obituaries option to disable obituaries without disabling - other more important message types which have lower priority for some - reason. -- Added a menu option for show_messages after accidentally switching it - off far too often and wondering why no messages appear. -- Added crouching DoomPlayer sprites submitted by Enjay. -- Fixed DF_NO_CROUCH was not checked. -- Fixed: The intermission script parser had some of its cases in the - keyword parser incorrectly sorted. -- Fixed: atterm was still defined to take a STACK_ARGS function argument. -- Added an AltFlash state for weapons. -- Turned FloatSpeed into an actor property and changed the value to 5 - for all floating Strife actors, as a comment in the source indicated. -- Added GZDoom's code for Vavoom slope things because I wanted to test - something with a map from Silent Steel. -- Added nocrouch and allowcrouch MAPINFO commands and a DF_NO_CROUCH - dmflag. -- Added GZDoom's crouching code after cleaning it up so that adding - crouching sprites will be easier. - -May 13, 2006 (Changes by Graf Zahl) -- Fixed: P_StartScript was missing a NULL pointer check for the error - message. When trying to puke a script outside a map it crashed. -- Fixed: The random number generator for large numbers must mask out the - sign bit before performing a modulo. -- Now that the conversation states are pointers there is no need to make - AActor::ConversationAnimation virtual. No class overrides this method - anymore. -- Replaced AMacil1::TakeSpecialDamage with MF5_NODAMAGE. -- Fixed: AMacil2::TakeSpecialDamage and AOracle::TakeSpecialDamage didn't - check whether inflictor was NULL and crashed when used with 'kill monsters'. -- Fixed: Some Strife decorations didn't loop their animation -- Changed: The decision whether blood splatter sprites are spawned is no - longer determined by game. Instead there's a new flag, MF5_BLOODSPLATTER - which is deciding what to do. To keep backwards compatibility this flag - is unset for projectiles in Doom and Strife and set for them in Heretic - and Hexen. The same applies to DECORATE but of course the flag can be - manipulated here. -- BLODxx sprites are now globally renamed to BLUDxx when not playing Doom. - This allows using the same states in every game, including the - Raven-specific blood actors. -- Gave the bullet puff and the axe blood masses of 5 so that the make small - splashes. -- Added A_Light(value) code pointer for DECORATE to generalize the weapon - light effect. -- Added 'noskillmenu' option to MAPINFO episode definitions. This is for - WADs that want to implement a skill selection level. -- Added APROP_ChaseGoal and APROP_Frightened actor properties for ACS. -- Added MF5_CHASEGOAL flag that makes monsters to go after their goal even - if they have a valid target. -- Fixed some issues with the changes to P_NewChaseDir I made to include - MBF's dropoff logic. -- Added a PowerFrightener powerup class. It seemed like such a waste to - have this cool feature but no means to use it in a decent fashion. -- Fixed: S_Init and S_ParseSndInfo should call atterm only once but not - each time they are called. - -May 11, 2006 -- Merged a lot of these static destructor-only structs into regular - functions added to the exit chain with atterm so that they can be called - in a deterministic order and not whatever order the linker decides to put - them in. -- Fixed: DCajunMaster did not free its getspawned. -- Fixed: P_FreeLevelData() did not free ACS scripts. -- Fixed: Level snapshots were not freed at exit. -- Fixed: The save/load menu list was not freed at exit. -- Fixed: FCompressedMemFile needs a destructor to free the m_ImplodedBuffer. -- Fixed: G_DoLoadGame() did not free the engine string. -- Fixed: M_ReadSaveStrings() did not free the engine string. -- Fixed: Processing DEM_SAVEGAME did not free the pathname string. -- Added a check for truncated flats to FFlatTexture::MakeTexture() because - Heretic's F_SKY1 is only four bytes long. -- Added a dump of the offending state to the "Cannot find state..." diagnostic. -- Fixed: FCompressedFile did not initialize m_Mode in its default constructor. -- Fixed: Heretic and Hexen status bars did not initialize ArtiRefresh. -- Fixed: PNGHandle destructor should use delete[] to free TextChunks. - -May 11, 2006 (Changes by Graf Zahl) -- Converted the stealth monsters to DECORATE. -- Added string replacement option to obituary strings. -- Changed lock and pickup message handling so that it is either a real - string or a LANGUAGE identifier. The only reason I did the mixed format - in the first place were Hexen's lock messages but they have been - replaced by unique strings in the mean time so the feature isn't needed - any more. -- Added a flags parameter to TranslucentLine. -- Extended the second arg of Line_SetIdentification to set not only - ML_ZONEBOUNDARY but all 8 bits of the third byte in the flag word. - This allows a relatively simple means of setting all the new flags - directly. -- Moved ML_ZONEBOUNDARY to doomdata.h so that it is in the same place as the - other line flags. -- Fixed: Strife's teleport swirl didn't loop its animation. -- Fixed: Strife's rat is not supposed to be shootable. -- Fixed: Strife's MiniMissile pickup amount was still incorrect. -- Moved Strife's random dialogs into the string table. Now it should also be - possible to define dialogs for other actors as well. - -May 10, 2006 -- Fixed: When revisiting a map in a hub, the player could spawn at the wrong - height if the floor had moved while they were there before. This was because - the player was spawned on the original copy of the map before the changes to - it were dearchived, so they didn't know about the new floor height. -- Fixed: Calling BaseFileSearch() and letting it fill in the file's extension - didn't work because the space for the path was deallocated before it - returned. -- Guess we're not leak-free yet. Try travelling around in a hub and see that - it leaks. I don't have time to track it down right now. -- Yay! We now seem to be free of memory leaks! The next step will be to - merge a lot of these static destructor-only structs into regular - functions added to the exit chain with atterm so that they can be called - in a deterministic order and not whatever order the linker decides to put - them in. (Interestingly, the amount of memory used when repeatedly - executing the same map command at the console varies up and down, but it - now stays relatively stable rather than increasing unbounded.) -- Fixed: The list of resolutions in the video modes menu was not freed - at exit. -- Fixed: mus_playing.name was not freed at exit. -- Fixed: SN_StopAllSequences() should be called at the start of - P_FreeLevelData(), not just before the call to P_SetupLevel() in - G_DoLoadLevel(), so it can run even at exit. And C_FullConsole() can - call P_FreeLevelData() to free more memory too. -- Fixed: StatusBar was not freed at exit. -- Fixed: spritesorter was not freed at exit. -- Fixed: Bad things happened if FString's data pool was destroyed before - all C_RemoveTabCommand() calls were made. -- Added an overload for FArchive << FString. -- Fixed: The players' log text was not freed at exit. -- Fixed: Bot information was not freed at exit. -- Fixed: doomcom was not freed at exit. But since it's always created, - there's no reason why it needs to be allocated from the heap. My guess - is that in the DOS days, the external packet driver was responsible for - allocating doomcom and passed its location with the -net parameter. -- Fixed: FBlockNodes were not freed at exit. -- Fixed: Openings were not freed at exit. -- Fixed: Drawsegs were not freed at exit. -- Fixed: Vissprites were not freed at exit. -- Fixed: Console command history was not freed at exit. -- Fixed: Visplanes were not freed at exit. -- Fixed: Call P_FreeLevelData() at exit. -- Fixed: Channel, SoundCurve, and PlayList in s_sound.cpp were not freed at - exit. -- Fixed: Sound sequences were not freed at exit. -- Fixed: DSeqNode::Serialize() did not resize the m_SequenceChoices array - when loading. -- Fixed mvlineasm1 and mvlineasm4 so that they can be used with textures - taller than 256 pixels. There was a very slight performance hit for this, - but I was able to tweak mvlineasm4 to make it approximately as fast as - before. Interestingly, maskwallscan manages to be nearly as fast as - wallscan despite having to check every pixel for transparency. I'm - tempted to dump all the old masked rendering code and use - (trans)maskwallscan for everything for the sake of simplicity: Only - two functions to maintain for each render style, and much less - complicated supporting code. Currently, I need five different functions - for each rendering style: One traditional column-at-a-time style like - Doom did it originally, two for rt_draw4cols, and two for transmaskwallscan. - (Right now, I have cheated, and just done the ones that can be used - by walls for transmaskwallscan, so the actual number of different functions - isn't quite so high.) For small textures, such as font characters and - far-away sprites, I'm sure maskwallscan is faster than the current code. - For large textures, it's probably still competitive even if it isn't faster. - But considering how similar wallscan and maskwallscan perform, the - difference is probably pretty minimal, and maskwallscan still might come - out ahead due to its simpler overhead. - -May 10, 2006 (Changes by Graf Zahl) -- Fixed: PClass::CreateNew didn't check whether the class had valid - defaults and tried to copy data from a NULL pointer. -- Fixed: FireThing and BrassTorch were misspelled in hexendecorations.txt -- Changed A_ChangeFlag so that it doesn't need to alter the flag - string. With strings being passed as names this is unsafe. -- Removed unused parameter types from the function parameter parser for - DECORATE. -- Changed: All actor name parameters in DECORATE are now passed as - FNames, not as strings. -- Fixed: The MAPINFO parser stored the RedirectType as a type pointer. - But at this point DECORATE hasn't been read yet so this was limited to - the internal classes. -- Fixed: TXT_NEED_IDCARD wasn't terminated with a ';'. -- Fixed: Strife's DeadRebel was missing its DoomEdNum. -- With names as type identifiers it is no longer necessary to remap - the monster types to internal constants in A_BossDeath. -- Fixed: A_BossDeath got the string from a name - just to get a name from - the string. Using the name directly is sufficient. - -May 9, 2006 -- Redid ClearLcoks() fix that I accidentally removed. -- Added a new setting for am_rotate: 2 will enable rotation only for the - overlay map while leaving the regular map unrotated. -- Added a new setting for am_overlay: 2 will disable the normal automap and - show only the overlayed version. -- Fixed?: WallSpriteColumn apparently needs to set dc_texturefrac. At least - Valgrind seems to say so. -- Fixed: The FWadCollection destructor needs to use free to free the LumpInfo - and Wads arrays. -- Fixed: The ColorMapKiller needs to use the delete[] form of delete. -- Fixed: FConfigFile::ClearCurrentSection() should be calling the delete[] form - of delete to free the entry. -- Fixed: FPatchTexture::MakeTexture() does not need to blindly recreate the - Spans if they already exist. -- Fixed: The FMultiPatchTexture destructor did not call its Unload() method. -- Restored the original padding calculation to FMultiPatchTexture::MakeTexture(). - I believe the Valgrind errors were caused by accessing off the end of the - screen buffer, not from accessing off the end of a texture. -- Backported the classnames-are-names changes from the FP code. -- Backported the improved hierarchical dumpclasses command from the FP code. -- Updated Jim's Makefile.linux. -- Added support for wrapping midtextures vertically. -- Since zdoom.wad is now zdoom.pk3, the default mapinfos can use full pathnames. - So now they do. -- Fixed: The DSimpleCanvas constructor used a pitch too narrow on screens wider - than 640 pixels when using a non-AMD processor and the processor's L1 cache - line size could not be determined. I think this should fix the issue of - weirdly rendered 8 pixel wide borders on the left and right of the screen that - some people experienced. -- Fixed: The secnodes were never freed. - -May 9, 2006 (Changes by Graf Zahl) -- Fixed a few Strife ammo amount values. -- Fixed the ClearLocks function so it doesn't crash when called before the - ActorInfos have been created. -- Fixed: The FSpecialFont constructor created the name string twice. -- Fixed: The animated door parser was still leaking memory when it encountered - an invalid animation due to missing textures. -- Fixed: The music volume list wasn't freed. -- Fixed: The image for WADs that were loaded from inside Zips was never freed. -- Changed FDoorAnimation deletion so that the array takes care of it. The - original destructor approach would have necessitated a lot more supporting - code to work as intended. -- Fixed: Skin definitions were never freed. -- Fixed: Names in terrain definitions were never freed. Replacing them with - FNames would have been a good idea anyway. -- Fixed: The lock definitions were never freed. -- Fixed: FDoorAnimation was missing a destructor. -- Fixed: animation and switch definitions were never freed. -- Replaced all other places where FindType was used with FNames with - IFindType. -- Fixed: If you want to use a name as the missile parameter for the basic - attack functions the type search in DoAttack must be case insensitive. -- Fixed: APowerup::DoEffect must do more thorough checks before resetting - the fixed colormap. - -May 8, 2006 -- Fixed: The names in the Depths array in m_options.cpp were never freed. -- Fixed: FDoomEdMap needed a destructor. -- Fixed: Decal animators were never freed. -- Fixed: Colormaps were never freed. -- Fixed: Memory allocated in R_InitTranslationTables() was never freed. -- Fixed: R_InitParticles() allocated way more memory than it needed to. (And the - particle memory was never freed, either.) -- Fixed: FMetaTable::FreeMeta() should use delete[] to free string metadata. -- Fixed: FConfigFile::ClearCurrentSection() must cast the entry to a char * - before deleting it, because that's the way it was allocated. -- Fixed definitions of DeadZombieMan and DeadShotgunGuy in doom/deadthings.txt. - Skip_super resets the dropitem list, so having it after "DropItem None" is - pointless. -- Fixed: Decorate DropItem information was never freed. -- Fixed: FinishStates() allocated even 0-entry state arrays. -- Fixed: Default actor instances were never freed. -- Fixed: FRandomSoundList never freed its sound list. -- Fixed: Level and cluster strings read from MAPINFO were never freed. -- Fixed: Episode names were never freed. -- Fixed: InverseColormap and GoldColormap were never freed. Since they're always - allocated, they can just be arrays rather than pointers. -- Fixed: FFont destructor never freed any of the character data or the font's name. -- Fixed: Fonts were not freed at exit. -- Fixed: FStringTable::LoadLanguage() did not call SC_Close(). -- Fixed: When using the -iwad parameter, IdentifyVersion() did not release the - buffer it created to hold the parameter's path. -- Blends created with the ACS fade commands now degrade to transparent overlays - when the menu is visible, so they can no longer obscure the menu. - -May 7, 2006 (Changes by Graf Zahl) -- Added a misc/secret sound definition for Heretic. -- Fixed: Powered up weapons were not properly deselected when the level ended - and their ready state was different from the main weapon's. -- Made some improvements to A_CountdownArg. -- Removed the 'Yes', 'No' and 'Greetings' state assignment commands. They haven't - been documented and thus haven't been used at all so far. Therefore they don't - need to be handled considering that they will go away anyway. -- Changed the DECORATE state parser so that Stop can also be specified right after - a label, in addition to goto. - -May 6, 2006 -- The game is now free of leaks up to the point just after the wads are loaded. -- Fixed: Although TypeInfos are now deleted at exit, their FlatPointers or ActorInfo - data was not freed. I chose not to use a destructor to handle this, because then it - would no longer be a POD type that can be statically initialized. -- Fixed: Aliases were not deleted at exit. -- Fixed: FWadCollection did not free its hash tables, lump info, full names, or the - list of open files when destroyed. -- Updated Italian strings that someone kindly e-mailed to me. -- The CRT no longer detects any memory leaks when I run to the IWAD picker and quit. -- Fixed: The memory used to hold the path to zdoom.wad/.pk3 was not freed if - the IWAD picker was cancelled. -- Fixed: Some implementations of cvar->GetGenericRep (CVAR_String) returned a - statically allocated string and others returned a dynamically allocated string. - To be consistant, they should all be static. -- Fixed: DObject also has three static TArrays that should not be explicitly - initialized: Objects, FreeIndices, and ToDestroy. -- Added a new do-nothing constructor for TArray that can be used for BSS objects - that are manipulated before startup. Specifically, this was added because - C_AddTabCommand() is called before main, but the TabCommands constructor is - called after the array already has over 100 entries in it, orphaning everything - that was already inserted. And since the code is much nicer-looking now, I didn't - want to revert to the old non-TArray version. - - This could also have been used to fix FName, but I consider the current - implementation to be better than the old one, so I'm leaving it as-is. - -May 6, 2006 (Changes by Graf Zahl) -- Converted a_zombie.cpp and most of a_strifestuff.cpp to DECORATE. -- Converted a_strifekeys.cpp to DECORATE and moved the pickup messages to the - string table. -- Removed the WIF_HITS_GHOSTS weapon flag and replaced it with MF2_THRUGHOST. - There is no need to keep two flags around with virtually the same meaning. -- Changed the ShadowArmor to use the VISIBILITYPULSE flag to change its translucency. - It looks much better now than the cheap code pointer based blinking it used before. -- Converted most of a_strifeitems.cpp to DECORATE and moved the pickup messages - to the string table. -- Converted a_strifearmor.cpp to DECORATE and moved the pickup messages to the - string table. -- Moved the messages for killing spectres to the string table. -- Converted the quest items to DECORATE. Also changed A_GiveQuestItem to get - the messages it prints from the string table instead of the quest item's tag - string. - -May 5, 2006 (Changes by Graf Zahl) -- Removed the hopelessly outdated thingdef_doc.txt file from the repository. -- Converted a_peasant.cpp and a_ratbuddy.cpp to DECORATE. -- Fixed: C_DoKey didn't treat an empty string as 'no binding' when checking for - valid double bindings. -- Converted a_merchants.cpp to DECORATE. -- Added MF5_NODAMAGE flag to generalize the behavior of Strife's merchants which - can be shot but take no damage from getting hurt. -- Converted a_beggars.cpp to DECORATE. -- Added an Inventory.GiveQuest property. This makes it possible to define all of - Strife's original items that also give a quest item in DECORATE but it is also - useful to define items like the ones in Day of the Acolyte without ugly workarounds. -- Added a Tag property and Strife teaser conversation IDs to DECORATE so now it is - possible to define many of Strife's items. -- Added a FastSpeed property to DECORATE so that projectiles can finally be - assigned a higher speed for fast mode. -- Added a ACS_LockedExecuteDoor special. It is basically the same as the existing - ACS_LockedExecute but it uses the 'door' message instead of 'remote'. This - cannot be integrated into ACS_LockedExecute because all its arguments are already - in use. -- Added a fully customizable A_CustomMeleeAttack function for DECORATE. - -May 5, 2006 -- Fixed: Scanned IWAD paths were not freed if you exited without selecting one. -- Fixed: Dynamically allocated cvars were not freed on exit. -- Fixed: FConfigFile's destructor did not free space used for Values. -- Added "DropItem None" as a way for inherited actors to avoid dropping items if - their superclass normally does. This is only needed if somebody dehacks - DeadZombieMan or DeadShotgunGuy. -- Moved Doom's dead body actors into DECORATE so that I can finish and verify the - implementation of "States { StateLabel: goto SomeOtherLabel }" constructs. The - alternate method of overriding inherited states is now deprecated, since it's - incompatible with the coming custom state labels. -- Changed TAG_MORE to pass a va_list pointer instead of a va_list because it's a - non-POD type when targeting several non-ix86 targets with GCC. Hopefully this works. - (Guess it didn't. Boohoo.) - -May 4, 2006 -- Rewrote FName to use only POD types for its static data so that it can be used - without any explicit constructors being called. -- Fixed: ZTwinedTorchUnlit, ZWallTorchUnlit, ZFireBullUnlit, and ZCauldronUnlit - were missing game filters. - -May 4, 2006 (Changes by Graf Zahl) -- Added Poisondamage property for DECORATE. I first did this for one of the first - DECORATE updates but the code seems to have gotten lost. -- Converted A_Puzzleitems.cpp and parts of A_HexenSpecialdecs.cpp to DECORATE. -- Converted A_Hexendecorations.cpp to DECORATE. -- Changed the lower decal spawning code to transfer the main decal's color if - the lower decal's default color is the same as the main decal's. -- Changed the decal stretcher back to use the specified size parameters as a - scaling factor and not a destination size because this is more consistent with - the rest of the decal code. Also adjusted the blood smear definition in DECALDEF - and the description in the Wiki for this. -- Added Jim's most recent fixes. - -May 3, 2006 -- Fixed: Conversion of c_bind.cpp to FString was incomplete. -- Fixed some functions that were declared as taking size_t's but defined as taking - unsigned ints. -- Added a dummy object to delete sound environments on exit. -- Fixed: FWarpTexture did not delete its Spans when destroyed. -- Changed wadclusterinfos and wadlevelinfos arrays into TArrays. -- Added the TypeInfo::AutoTypeInfoPtr for TypeInfo::m_RuntimeActors so they can - be automatically deleted. -- Changed TypeInfo::m_Types into a TArray so it will be automatically deleted - on exit. -- Fixed: TArray::Resize() did not deconstruct entries when shrinking the array. -- Changed TArray::Push() so that it calls Grow() instead of duplicating the growth - calculations itself. -- Calling TArray::Grow() for a small amount when the array is short should grow it - a bit more than it was doing. -- Removed generational garbage collection from the string pool because it didn't - actually work. -- Turned the list of TabCommands into a TArray because I saw lots of console - commands in the memory leak report at exit. Then I realized those were actually - key bindings, so I changed the Bindings and DoubleBindings arrays into FString - arrays. -- Fixed: FStringCVar was missing a destructor. -- Added TArray::Insert(). -- Fixed: TArray::Delete() used memmove(). -- Renamed Malloc(), Realloc(), and Calloc() to M_Malloc(), M_Realloc(), and - M_Calloc() so that the debug versions can be defined as macros. -- Enabled the CRT's memory leak detection in WinMain(). -- Moved contents of PO_DeInit() into P_FreeLevelData(). -- Removed "PolyBlockMap = NULL;" from P_SetupLevel(), because the P_FreeLevelData() - call it makes next does the exact same thing, but also freeing it if needed. -- Fixed: Unneeded memcpy in UnpackUserCmd() when ucmd and basis are the same -- Removed -bpal parameter. Blood's blood.pal is loaded from blood.rff, and - its tiles are loaded from the same directory. -- RFF files now load their entire directories into the lumplist. -- Added char * and const char * type coversions for FString, so FStrings can be - freely passed to functions expecting C strings. (Except varargs functions, - which still require manually fetching the C string out of it.) -- Renamed the name class to FName. -- Renamed the string class to FString to emphasize that it is not std::string. - -May 3, 2006 (Changes by Graf Zahl) -- Converted A_Speedboots.cpp, A_HexenArmor.cpp and A_Hexenkeys.cpp to DECORATE -- Fixed a few memory allocation issues pointed out by Jim's Valgrind dump. -- Removed doom.x, heretic.x and strife.x from the SVN repository. These - are generated files. -- Fixed: A_PainDie has to check whether a valid target exists before - calling IsFriend. -- Fixed: FDecalLib::FindAnimator needs a signed counter to work properly. - -May 1, 2006 (Changes by Graf Zahl) -- Added support for game specific pickup messages, if only to be able - to define Raven's invulnerability item in DECORATE. -- Removed A_TreeDeath because it is no longer used. -- Fixed: When picking up a PowerupGiver for an active powerup the - blend color and the duration were transferred to a temorary item - and never took effect. They have to be trnasferred to the newly created - powerup item before trying to give it to the player, not afterward. -- Made the colormap of the InvulnerabilitySphere item specific. - The base power class still needs to have its color adjusted - per game though and since Raven's invulnerability item is used in both - Hexen and Heretic it can't define its own colormap/blend. -- Separated the invulnerability colormaps from the game being played - and made them item specific. They can also be specified as regular - blend colors in DECORATE now. -- Converted a_hereticarmor.cpp and most of a_doomartifacts.cpp, - a_hereticartifacts.cpp and a_heretickeys.cpp to DECORATE. -- Changed the Soulsphere to be a real health item with the Dehacked - modifications made in d_dehacked.cpp as for most other items which - need to be adjusted. -- Added IF_BIGPOWERUP flag to AInventory to expose the RESPAWN_SUPER - dmflag to DECORATE. Also removed the now obsolete ShouldRespawn methods - from AInvulnerabilitySphere and ABlurSphere. -- Converted a_splashes.cpp to DECORATE. -- Converted most of a_debris.cpp to DECORATE. - -May 1, 2006 -- Made loading of Build's palette.dat automatic if it's found inside a loaded - group file, but the -bpal parameter remains for now. -- Made loading of Build art tiles automatic if they are found inside a group - file. Removed the corresponding command-line parameter. -- Added support for Ken Silverman's group files. - -April 30, 2006 (Changes by Graf Zahl) -- Removed the DCorpseQueue class. It was no longer used and since - the savegames it might have been used in have become incompatible - a long time ago there is no reason to keep it around anymore. -- Fixed: level.maptime must be set to 0 every time a level is loaded. -- Converted a_doomarmor.cpp and a_doomkeys.cpp to DECORATE. -- Replaced all need key messages that weren't already in LANGUAGE with - a LANGUAGE identifier. Also made the messages for Hexen's keys unique - strings instead of constructing them at run time. -- Added: Pickup messages can now handle embedded localized strings - like - the need key messages -- Converted a_hereticdecorations.cpp as well. -- Time to put the capabilities of Zip files to good use: - Converted a_doomdecorations.cpp into a DECORATE lump to test my changes. - (The EXE got 24 kb shorter by that - much more than I expected...) -- Added a 'game' property to DECORATE so that game specific IDs can be - defined. -- Added an #include directive to the DECORATE parser. -- Also removed ABreakableDecoration. Using AActor and the metadata - for the death and burn height gives the same results with less code. -- Removed the ADecoration class. It just inherited from AActor without - adding any functionality of its own. -- Added functions to sc_man to save and restore the full script state. - This allows recursive use of the script parser. -- Changed SC_Open to check for full names in a ZIP first. -- Fixed: Ammo2 no longer gets displayed when it is identical to Ammo1. -- Re-enabled the death camera due to public demand but made it switchable - by a CVAR. - -April 29, 2006 (Changes by Graf Zahl) -- ZDoom now loads zdoom.pk3 instead of zdoom.wad. -- Fixed: StreamSong::SetVolume should check the m_stream pointer. This can - happen when a TimiditySong doesn't use FMOD and outputs the sound itself. -- Fixed: 'use' sector actions were using the incorrect sector on several - occasions. -- Added a wi_noautostartmap CVAR and a noautostartmap intermission option - that force the user to manually end the 'entering level' page. - -April 23, 2006 (Changes by Graf Zahl) -- Added a clipmidtextures level flag which exposes the ML_CLIP_MIDTEX - feature globally per level. Also moved the setting of this flag for Strife - into MAPINFO. -- Added MBF's logic to move monsters away from a dropoff but changed it - so that it doesn't require a general change in the movement code. -- Added: The Trace function needs a compatibility option to exclude - two-sided lines with both sides in the same sector from being checked. - Originally this wasn't done and some WADs (e.g. Alien Vendetta MAP15) - need the original behavior to work. - -April 22, 2006 (Changes by Graf Zahl) -- Removed ABossEye::Serialize because it didn't do anything. -- Fixed the issues with .96x's railgun code and added it to the current - version. -- Fixed: Setting of the friendly Minotaur's angle was inconsistent and - could cause it to move backwards in a féw situation. -- Fixed: The minotaur did checks for type by checking for the MF_FRIENDLY - flag, not by checking for the actor class. That made it impossible to - spawn friendly 'normal' minotaurs. -- Moved a few virtual methods which are only applicable to the friendly - minotaur to AMinotaurFriend. -- Fixed: The friendly minotaur checked the master's health instead of - the target's when deciding whether to switch targets. Replaced with - MF4_NOTARGETSWITCH. -- Fixed: maybedrawnow must not draw the console unless the background - texture has been set up. -- Fixed: V_InitCustomFonts initialized lastlump to -1 instead of 0. -- Fixed: CreateTexture never checked whether it could read from the - texture lump. Since the minimum valid length is 13 bytes for a - 1x1 pixel patch everything below that will now return with an error. -- Fixed a few occurences of mismatched free's for new'd memory. - -April 21, 2006 (Changes by Graf Zahl) -- Fixed: To prevent the pointer cleanup code from crashing numsectors has - to be set to 0 when the sectors array is deleted. -- Added Zloba's fix for Linux's I_FindFirst. - -April 20, 2006 (Changes by Graf Zahl) -- Fixed: Doom's status bar assumed that STBAR was always in Doom patch format. -- Added MF3_DONTSPLASH to the newly created sound sequence things. -- Fixed: makewad.c used C++ syntax. -- Fixed: Strife's ending check included destroying the computer - an event - that happens before the branch in the story. -- Fixed: The overloaded FRandom::Random2 function with mask parameter didn't - use its parameter. -- Added Jim's latest makefile.linux - -April 20, 2006 -- Fixed: Crash when opening the player setup menu when you're so dead that - your head has popped off your body. -- Fixed: When item respawning is on and you play on skill 1 or 5, picking - up ammo would permanently double the amount of ammo received from that - item the next time it gets picked up. -- Added a check to PlayerIsGone() for players who have already had their - actors destroyed before calling it. -- Fixed: G_CheckDemoStatus() only restored your name, autoaim, and color - settings after playing back a demo. -- Added DEM_SPRAY net command so that sprayed decals work in multiplayer - and demos. -- Changed DEM_GIVECHEAT to use a word for specifying the item quantity. - This is useful mainly for giving yourself more than 255 health at a time. -- Fixed: DEM_SUMMONFRIEND was not handled by Net_SkipCommand(). -- Fixed compilation with mingw again. -- Added multiple-choice sound sequences. These overcome one of the major - deficiences of the Hexen-inherited SNDSEQ system while still being Hexen - compatible: Custom door sounds can now use different opening and closing - sequences, for both normal and blazing speeds. -- Moved the TArray serializer into farchive.h so that tarray.h doesn't need - farchive.h at all because GCC was much pickier than VC. Because of this, - I don't need the FArchive change I made yesterday that hid FArchive's - TArray uses behind pointers. -- Added a countof macro to doomtype.h. See the1's blog to find out why - it's implemented the way it is. - -- Added a new method to FRandom for getting random numbers larger than 255, - which lets me: -- Fixed: SNDSEQ delayrand commands could delay for no more than 255 tics. -- Fixed: If you're going to have sector_t.SoundTarget, then they need to - be included in the pointer cleanup scans. - -April 19, 2006 -- Added a serializer for TArray. This required I make a couple changes to - FArchive in order to avoid circular references between farchive.h and - tarray.h. -- Ported back newer name code from 2.1. -- Fixed: Using -warp with only one parameter in Doom and Heretic to - select a map on episode 1 no longer worked. -- New: Loading a multiplayer save now restores the players based on - their names rather than on their connection order. Using connection - order was sensible when -net was the only way to start a network game, - but with -host/-join, it's not so nice. Also, if there aren't enough - players in the save, then the extra players will be spawned normally, - so you can continue a saved game with more players than you started it - with. -- Added some new SNDSEQ commands to make it possible to define Heretic's - ambient sounds in SNDSEQ: volumerel, volumerand, slot, randomsequence, - delayonce, and restart. With these, it is basically possible to obsolete - all of the $ambient SNDINFO commands. -- Fixed: Sound sequences would only execute one command each time they were - ticked. -- Fixed: No bounds checking was done on the volume sound sequences played at. -- Fixed: The tic parameter to playloop was useless and caused it to - act like a redundant playrepeat. I have removed all the logic that - caused playloop to play repeating sounds, and now it acts like an - infinite sequence of play/delay commands until the sequence is - stopped. -- Fixed: Sound sequences were ticked every frame, not every tic, so all - the delay commands were timed incorrectly and varied depending on your - framerate. Since this is useful for restarting looping sounds that got - cut off, I have not changed this. Instead, the delay commands now - record the tic when execution should resume, not the number of tics - left to delay. - -April 19, 2006 (Changes by Graf Zahl) -- Fixed: Hexen's ammo display in the status bar cannot be refreshed - partially because the background patch has to be drawn always to - overwrite the old display. -- Fixed: Giving a health item to a non-player caused a crash. -- Added a compatibility option to limit deh.MaxHealth to the health bonus. - Originally this value wasn't used for health packs. Doing this was a bug - in Boom but since there's quite a few maps out there which require - Boom's altered behavior it has to be compatibility optioned. -- Fixed: The health bonus's max health must be defined by deh.MaxHealth, - not deh.MaxSoulsphere. To achieve this deh.MaxHealth's handling had to - be altered because it has to default to 100. -- Fixed: ZDBSP created incorrect side references with compressed sidedefs - and both sidedefs of a linedef being the same. This only affects the - external tool because the internal node builder is run after uncompressing - the sidedefs. -- Added Jim's latest makefile.linux. -- Added a consistency check to the PNAMES loader because one crash log - indicated that it crashed due to a corrupt PNAMES lump. -- Brought back the sector based sound target handling as a compatibility - option. This radical change just broke far too many maps that depend - on the original behavior. Strife's special AI functions are excluded - though because they work better with the new method. -- Fixed: Hexen had no default sound sequence for doors and passed a NULL - pointer to SN_StartSequence in DoorSound. - -April 18, 2006 (Changes by Graf Zahl) -- Fixed A_CHolyAttack used linetarget to set the spirits' target actor. - But it assumed that this variable was still valid from shooting the - weapon. Not only is that not guaranteed. When used by the ClericBoss - it is an unwanted effect because the linetarget is most likely the - last thing the player fired at which normally is the ClericBoss itself. - A_CHolyAttack now sets tracer to the intended target instead of - relying on linetarget being preserved. -- Fixed: Strife's grenades only bounce twice off the floor. They also - bounce off all actors and immediately explode when hitting liquids. -- Fixed: Strife's flame thrower gives 100 ammo as a pickup item but only - 40 when given in a dialog. -- Moved the sky change script starts for the Programmer into MAPINFO as - special death actions. -- Changed the sky in MAP09 of Strife to the blue sky to make it more - consistent. Now the sky change occurs when the player wakes up after - fighting the programmer. - -April 18, 2006 -- Fixed: DBaseStatusBar::DrBNumber() should behave like Doom's - STlib_drawNum(), and FDoomStatusBarTexture::DrawToBar() should add - the textures left offset to the x coordinate before drawing. - These fix Twice Risen's status bar. -- Changed: VPrintf now uses string.VFormat(), instead of vsprintf(). - -April 17, 2006 (Changes by Graf Zahl) -- Fixed: The Oracle Pass is an item, not a key. Strictly speaking the - same applies to the Prison pass but having that as a key masks - some bad design in Strife so it is better to leave it a key. -- Fixed: The spectral lightning spot used a weird combination of flags - that made it act quite unexpectedly. After removing all flags except - MF_NOBLOCKMAP it seems to do what it is supposed to do. I also had - to add a new flag, MF5_NODROPOFF to prevent the spot from moving over - tall ledges. -- Fixed: When giving an autoactivatable item to the player a copy is - created to allow respawning. But when the item had been successully - used the original was destroyed, not the copy. -- Fixed: dssiglup was misspelled as dssglup in SNDINFO so the Sigil's - charging sound never played. -- Fixed: The sigil doesn't use the generic weapon pickup sound. It should - use weapons/sigilcharge. -- Fixed: P_Move never checked whether a monster has the MF2_PUSHWALL flag. - As a result everything using A_Chase was able to activate pushable - walls and not just the monsters which are allowed to activate them. -- Fixed: P_Move must split the move if the step size is larger than the - radius. -- Fixed: tmfloorpic was set in P_LineOpening. But this is not guaranteed - to set the correct picture because the end result depends on the line - ordering and not the sector heights. It must be set in PIT_CheckLine. -- Fixed: Due to the previously missing ceilingsector variable bouncing - missiles could use the incorrect sector when hitting an edge between - ceilings of different height. -- Fixed: Missiles exploding on the edge of a ceiling neighboring to a - sky vanished instead of exploding if the missile's center was in the - sky sector. To do this I added ceilingsector and ceilingpic variables - to AActor, similar to the already existing floorsector and floorpic. -- Fixed: ZDoom now looks for ZDoom.wad in the program directory first. - -April 16, 2006 -- Fixed: After respawning in a singleplayer demo, demo playback went out - of sync becase the RNG seed was being altered during recording but not - during playback. This was caused by an inappropriate fix for a similar - problem: -record calls G_InitNew() before it actually starts recording - the demo, but -playdemo calls G_InitNew() after it starts playback. So - the rngseed stored in the demo was already altered. The correct thing - to do is not to prevent the rngseed from changing during playback but - to move the call to G_InitNew() after the call to G_BeginRecording(). -- Fixed: After respawning in a demo, demo playback was prematurely - terminated. - -April 16, 2006 (Changes by Graf Zahl) -- Increased the limit for the sound DoorCloseLight in Hexen to 4 because - it got cut off in the polyobject crusher in MAP01. -- Fixed: A player that has no body (as in the head popped off in Heretic - and Hexen) must not be resurrected. -- Fixed: Repeatable switches that are being activated while the switch - animation was still running didn't react properly. -- Fixed: Not all paths in P_LoadSegs freed the vertchanged array. -- Fixed: With infinitely tall actors on P_CheckPosition must not - check for stepping on things. -- Fixed: R_FakeFlat used the control sector's floor light level for - ceilings of deep water areas. -- Fixed: Dormant floating monsters still adjusted their height to their - target. -- Fixed: Invisible special things should never create terrain splashes. -- Changed: The Demon no longer reduces the actual state durations for - fast mode. Now this is done by AActor::SetState and controlled by - actor flags. -- Fixed: Friendly monsters are now completely excluded fron being counted - as kills. - -April 15, 2006 (Changes by Graf Zahl) -- Changed -warp for ExMy to use atoi to parse the parameters. This is - more robust than reading the characters directly. -- Expanded thing and line args to 32 bit. -- Extended Makewad so it can write Zip files in addition to WAD files. - -April 14, 2006 (Changes by Graf Zahl) -- Moved SC_CheckFloat into sc_man.cpp. -- Fixed several issues with the DECORATE parser: - * Floating point parameters couldn't be parsed correctly - * Some code pointers used parameters incorrectly. - * Parameters with default value 1 didn't work as expected -- Added GZDoom's HI_START/HI_END lump namespace. Even though it doesn't do - anything (yet) suppporting it allows to make WADs that use hires texture - replacements but are able to run with ZDoom as well. -- Added GZDoom's Zip-support but changed it so that lumps are sorted - alphabetically. -- Added the missing file 'flac/private/float.h' to the repository. -- Added: For Zip-support the sound code has to be able to load music data - from memory, not just from files. -- Re-added I_SetMusicVolume to optionally reduce the music volume in Strife - conversations. -- Fixed: The total game time must not be restored when loading a snapshot - during a hub transition. - -April 13, 2006 -- Fix farchive.cpp swappers for GCC again. Now that they use entirely integer - math, they should work with all GCC versions. -- Update FLAC readers to #define FLAC__NO_DLL to match the new FLAC builds. - -April 13, 2006 (Changes by Graf Zahl) -- Made weapons/bowhit unlimited. With a limit of 2 it won't be played - consistently. -- Fixed: 'Give' worked for dead players. -- Added checks for sectors without lines to all Find* functions in p_sector.cpp -- Fixed: Dehacked patches weren't loaded when not playing Doom. -- Fixed: Thing_Remove must not remove living players from the map. -- Fixed: Using $MAP in SNDINFO overrode music definitions in MAPINFO. This - made it impossible to define music in MAPINFO for Hexen. -- Fixed: Resurrecting a morphed player must first restore the unmorphed - version. -- Fixed: Resurrect must set the player's weapon to a valid state. -- Fixed: The decal stretcher is supposed to stretch the decal to a specifiable - size but it used that size as a scaling factor instead. The old code allowed - a maximum scaling factor of 4 which masked this bug to a large extent but - with the increased precision the blood smears were stretched to abnormal - proportions. -- Fixed: A non-spectral attack set any spectral target to its missile state. - This is not supposed to happen. -- Fixed: The Prison Key was misspelled in the pickup message. -- Added missing lock messages for Strife. -- Fixed some ammo pickup values for Strife. -- Added the missing messages when killing a spectre in Strife. -- Fixed: DImpactDecal's default constructor called ChangeStatNum which caused - a crash. Now it calls DBaseDecal's constructor that allows changing the - statnum. -- Added additive translucency to the Ironlich's projectiles. -- Added a check for AInventory to PickConversationReply before giving an item - to the player. This could crash if non-inventory items were given. -- Added a few console commands useful for map testing: - * 'monster' lists all monsters and their position. - * 'items' does the same for items. - * 'changesky' changes the sky texture. Useful for trying out different skies. - * 'linetarget' prints some information about the monster the player is aiming - at. - -April 12, 2006 -- Fixed: Using printinv before starting a game crashed. -- Fixed: DMover::MovePlane() would not stop moving the plane when it exactly - reached its target height unless it was a floor moving down. -- Fixed: Actors that can't attack should not be valid haters for Thing_Hate. -- Fixed: AArtiBlastRadius::BlastActor() should not set MF2_SLIDE for missiles. -- Fixed: sdl/i_input.cpp should check !iscntrl() before generating EV_GUI_Char - messages. -- Added Jim's Makefile.linux. -- Changed: Decal scales now use full precision fixed point numbers. -- Changed: Keeping impact decals in their own statlist is enough to keep track - of them for when one needs to be destroyed. There's no need to maintain a - separate list for them. -- Fixed: Decal actors did not spread their decals across neighboring walls. -- Fixed: Decal groups did not initialize their IDs and could not be reliably - used with the decal actor. -- Fixed: Decals on moving polyobjects were not interpolated. R_RenderDecal() - now uses the decal's LeftDistance to calculate its visible location, so it - always stays in sync with the wall's vertices. This also lets me dump some - code from the polyobjects that maintained the decals' (x, y) coordinates. - Also, the decals' x and y information is redundant and can be removed. - Doing this revealed a bug with slider decals and horizontal sliding: - That is, it didn't work at all. I have opted to simply remove the horizontal - sliding support so that I don't have to worry about what happens when a - decal slides across the edge of a wall. -- Fixed: DBaseDecal::LeftDistance was calculated as a 30.2 fixed point number. - It should be 2.30 fixed point. - -April 12, 2006 (Changes by Graf Zahl) -- Fixed: SAVEVER was still 231 although MINSAVEVER was 232. -- Fixed: Decal spreading used an incorrect z-coordinate. It has to use - the one originally passed to DImpactDecal::StaticCreate. - -April 11, 2006 -- Fixed: GCC misoptimized the SWAP macros in farchive.cpp. -- Fixed: Compiling with mingw once again works. -- Fixed: ACS improperly calculated the address of local variables when - returning from one function to another function when the function that - was called was used as part of an expression. -- Fixed: Using Thing_Hate with arg0 (hater) set to 0 from an open script - could crash. -- Fixed: Some items along ledges in Hexen's MAP32 (Orchard of Lamentations) - appeared at the bottom of the ledge (and consequently inside it) instead - of on top of it because the items were placed directly on the lines. - AActor::LinkToWorldForMapThing() needs to use the original R_PointOnLineSide() - code to handle situations like this. Previously, it just used the original - code for straight horizontal/vertical lines and used the new code for - diagonal lines. -- Fixed: FWadCollection::MergeLumps() used in incorrect realloc. -- Fixed: FPlayList::NextLine() did not properly handle blank lines in the - playlist. -- Changed: Decals now use lightweight thinkers instead of actors. (76 bytes - versus 396, so you save 320k if you have 1024 decals present.) -- Fixed: Wads added with pullin were loaded immediately after the IWAD. - Exec files are now processed immediately before -file but after autoloading - wads in D_DoomMain(). -- Fixed: sdl/i_system.h unconditionally defined SHARE_DIR, preventing - redefinition from the command line. -- Fixed: The standard way to include SDL.h is , not . -- Fixed: Returned FActiveInterpolation::HashKey()'s return type to size_t, - avoiding a pointer truncation warning. - -April 11, 2006 (Changes by Graf Zahl) -- Fixed: Strife's dialogs don't give weapons to the player he already has. -- Fixed: The INDIANA cheat in Hexen gives 25 of each item, not just 1. -- Fixed: The stair builder's compatibility mode must do a linear search - for sectors. Searching the hash chain doesn't work here. -- Fixed: Any monster with a TakeSpecialDamage method should call the - super class's method instead of simply returning the damage amount. -- Fixed: Hexen's mash monsters cannot be frozen. No matter how you kill - them they just vanish. This means they need the NOICEDEATH flag. -- Fixed: Morphing a monster must also copy its translucency settings. -- Fixed: The first Macil must react to weapon fire, even though he - doesn't get hurt by it. -- Fixed: Anything with a raise state needs the MF_CORPSE flag when dying - because otherwise it can't be revived. -- Fixed: Player names in Heretic, Hexen nand Strife could only be 13 - characters because the input routine did an unnecessary font size check. -- Added: After saving the game the savegame should be checked - and in case of an error an appropriate message be output. -- Fixed: The pig player had an initial health of 100, not 30. -- Fixed: Morphing a player removes the armor after transferring the - inventory to the morphed version - but it tried to remove it from the - unmorphed player instead. -- Fixed: Heretic uses Backspace to activate the Tome of Power by default. -- Fixed: 'Use all' should not try to use puzzle items. -- Made FileReader's methods virtual. Right now this isn't important - but when ZIP support will be added it is needed. Also added a - MemoryReader class that derives from FileReader. -- Added a pointer check to DI_Acquire and DI_Unacquire. GZDoom definitely - had problems with that so it might be a good idea to always check these - pointers. -- Added an engine signature to the savegame. The inability to distinguish - between ZDoom and GZDoom savegames constantly forced me to use some ugly - tricks which broke the versioning system. This may also be useful for - other derivates that have to save additional data in a savegame. -- Due to the savegame version bump I removed all compatibility code. -- I had to bump the minimum savegame version because I got some strange - effects with old savegames. On the positive side, this allows me to - do a few more radical changes to the savegame code. ;) -- Fixed: CanvasTextures weren't saved in a savegame. -- Fixed: Multiple warp commands for the same texture were cumulative. -- Changed FPatchTexture::MakeTexture and FIMGZTexture::MakeTexture so they - don't re-initialize the texture's size information repeatedly. This can - cause problems if code was added that manipulates these values after loading - the textures. -- Changed FPatchTexture::GetDimensions to use ReopenLumpNum instead of - OpenLumpNum. Once ZIP handling is added the current code won't work anymore - without adding a highly expensive copy operator to FWadLump. -- Added Transfer_WallLight special. This is similar to Transfer_Floor/Ceilinglight - but affects walls instead. -- Fixed: P_TestActivateLine must check whether a valid actor is trying - to activate the line. -- Added a check for MF2_NOTELEPORT to the special activation check for - Booms generic triggers. This excludes most items from activating these - lines that are not supposed to do that. -- Added a sv_dropstyle CVAR so that the way items are dropped is no longer - dependent on the game being played. -- Added MF4_FRIGHTENED flag from .96x. -- Added a CVAR that disables the automap background graphic in Heretic - and Hexen. -- Added more color options to the automap, including the option to show - secrets. -- Added menu option for the monster movement interpolation CVAR. -- Fixed: Strife's grenades don't make bouncing sounds. -- Fixed: Strife's grenades lose 50% of their momentum when bouncing, - not 30% like in Hexen. -- Fixed: HexenHack must be reset for each MAPINFO lump being parsed. -- Turned monster falling damage into a level flag so that it can be - used in all games, not just Hexen. -- Added the map's lump name to the savegame information. This is useful - for those who remember maps by their lump name and not the description. -- Added a total game time counter and made the total time display on - the intermission screen operrable. Also added an optional total time - display for the automap. -- Added support for full hub intermission statistics. To make this work - properly level.time is now being reset after changing hubs. -- Added GZDoom's local SNDINFO/SNDSEQ code. This was supposed to be in - .96x but that was cancelled before I had the chance. -- Made DCanvas::FlatFill virtual so it can be overridden by other - types of canvases (e.g. OpenGL.) -- Fixed: CR_UNTRANSLATED was uninitialized for FON2 fonts -- Fixed: Hexen uses a view height of 48, not 41. -- Changed: Multiplayer weapons will be spawned in coop games now - unless the player explicitly disables this. There are many WADs - out there that need the additional weapons in coop games. -- Added code that remaps MF_NOSECTOR to RF_INVISIBLE for all items - touched by Dehacked and for ABossEye. MF_NOSECTOR makes any - item completely deaf so it is very dangerous to use with monsters - or other things that depend on their sound target. -- Fixed: The Dehacked code cleared one of the translation flags. -- Fixed: The dehacked parser must set EnglishStrings to NULL after - freeing the memory. -- Copied a fix for restoring the weapon slots from 2.1.0. -- Fixed: APathFollower::Interpolate needs some NULL pointer checks. -- Added MF2_NOTELEPORT to ABlood and AIceChunk. Teleporting blood can - seriously mess up one-time teleporters - plus it looks just weird. -- Fixed: It was possible to use things through closed walls when the wall - was further away than 64 map units. -- Added a check for MF3_BLOODLESSIMPACT to P_LineAttack so that bloodless - hitscan attacks can be created. -- Added a check to P_CheckSlopeWalk that prevents sliding when hanging over - a sloped dropoff. -- Fixed: The line id hash chains used signed shorts to link their elements. - This completely broke line manipulation for linedef indices >= 32768. -- Fixed: Changed PL_SKYFLAT from 0x8000 to 0x10000 because otherwise it - doesn't work with linedef indices >= 32768. Also expanded sector_t::sky - from WORD to int to make this work. -- Added the flag parser fix from GZDoom. It was still incorrect. -- Added an escape flag to sc_man. This was necessary to parse the frame names - correctly which can contain backslashes so they must be excluded from - converting \" to ". -- Fixed: The 'ELVIS' cheat code wasn't terminated with 255. -- Fixed: When an object without any death state dies it has to be destroyed. -- Added 'nofog' parameter to Thing_Move -- Added a check for Teleport_ZombieChanger to P_TranslateTeleportThings. -- Fixed: Dumpmap crashed when the loaded map has GL nodes because it tried - to access the linedef of a miniseg. Needless to say, the BSP that is - written in this case is completely broken but at least it doesn't crash - anymore. -- Fixed: z-momentum application in P_ZMovement was incompatible with - the original method. Unless MF2_FLOATBOB is set it must be done before - applying gravity to momz. -- Fixed: AActor::Massacre caused an infinite loop when it wasn't able to - hurt the actor. -- Fixed: Due to movement interpolation the viewsector could be incorrect - if the actual camera's position and the interpolated position were not - in the same sector. -- Fixed: Assigning an empty string to a 'string' object NULLed - the Chars pointer. This cannot be done because it makes the - string object invalid. -- Fixed: Default intermission handling for E1-E3 should only happen when - playing Doom 1 and Heretic. -- Fixed: 'Give all' cheat must not try to give an item of type 'All'. -- Fixed: In rare circumstances DBoundingBox::AddToBox could produce - incorrect results. -- Fixed: The node builder still used NO_INDEX for initializing non-existent - sidedefs. -- Added MaxStepHeight and MaxDropoffHeight actor properties to DECORATE. -- Added new code pointers from GZDoom: A_FireAssaultGun, A_FadeIn and - the target inventory functions. Also added changes to several other - code pointers. -- Fixed: The FlameThrowerParts were missing the IF_INVBAR flag. -- Added a third parameter to A_BFGSpray to customize the amount of damage. -- Added A_DualPainAttack code pointer submitted by Justin for GZDoom. -- Fixed: AFatShot must have a height of 8, not 32. -- Fixed: AFighterPLayer::DoHealingRadius initialized the armor item - incorrectly so it was ineffective. -- Fixed: Strife's Brass Key needs a DoomEdNum of 39. -- Removed all the obsolete code and variables from the keys. With the - LOCKDEFS lump the original key numbers were deleted anyway and the - NeedKey messages are taken from the lump now. - -April 10, 2006 (Changes by Graf Zahl) -- Fixed: The Teleporter Beacon was missing the pickup message. -- Made the IronLich's projectiles bright. Using them in non-bright state - in dark sectors looks truly odd. -- Fixed: Using bot_observer cleared the FRIENDLY flag off the player. -- Fixed: Changed some decals from DecalScorch to DecalScorchLower. -- Fixed: Added the missing intermission lumps and LOCKDEFS to zdoom.wad -- Changed the damage formula for Strife's dagger. This change has already - been added to the 2.1.0 source but not to the current version. -- Added a call to P_HitFriend to A_SentinelRefire to prevent it from shooting - at friends. -- Fixed: The Inquisitor's grenades should not teleport. -- Fixed: The Inquisitor isn't supposed to be thrust by damage so its mass - has to be increased. -- Fixed: Strife's Inquisitor can be hurt by radius damage as long as this - damage comes from a non-Inquisitor. -- Fixed: AArtiDarkServant::Use must always report successful use of the item. - This function cannot fail. It either spawns a Minotaur or a new artifact - but never nothing at all. -- Fixed: Hexen's temp flames have two spawn IDs each. Since ZDoom doesn't - support multiple spawn IDs per item I added copies of these objects - to assign the second set od IDs. -- Fixed: Hexen's wall torch was missing the MF4_FIXMAPTHINGPOS flag. -- Fixed: A_CStaffCheckBlink must call A_WeaponReady because otherwise the - weapon bobbing becomes slightly erratic. -- Fixed: AGoldWandPuff2 had incorrect values set for flags2. -- Clamped the vertical speed of Heretic's Mace's balls. When shot at a high - vertical angle their movement becomes erratic. -- Fixed: Doom's corpses must clear the MF3_ISMONSTER flag inherited from - their monster parents. - -April 9, 2006 -- Fixed: The strupr() implementation in w_wad.cpp relied on compiler-dependant - behavior. -- Fixed fix: ParseActorProperties() still wasn't sending + or - to - ActorFlagSetOrReset(). -- Fixed: [GZ] An item without use state won't be removed when being picked up. - The call to GoAwayAndDie is missing. -- Fixed: [GZ] A_GiveInventory sets the amount to give to a value passed to - this function. This is ok for everything except Health items. They should - give their original amount multiplied with the passed parameter. - -April 3, 2006 -- Fixed: Potential buffer overrun when launching timidity. - -March 13, 2006 -- Fixed: ActorFlagSetOrReset() wasn't receiving the + or - character from - ParseActorProperties(). -- Fixed: The decorate FindFlag() function returned flags from ActorFlags - instead of the passed flags set. -- Fixed: The CHT_CHAINSAW, CHT_POWER, CHT_HEALTH, and CHT_RESSURECT needed - NULL player->mo checks. -- Fixed: The "give all" command didn't give the backpack in Doom, and it - must give the backpack before giving ammo. -- Fixed: P_SetPsprite() must not call the action function if the player is - not attached to an actor. This can happen, for instance, if the level is - destroyed while the player is holding a powered-up Phoenix Rod. As part - of its EndPowerup() function, it sets the psprite to the regular version, - but the player actor has already been destroyed. -- Fixed: FinishThingdef() needs to check for valid names, because weapons - could have inherited valid pointers from their superclass. -- Fixed: fuglyname didn't work. -- Fixed: Redefining $ambient sounds leaked memory. -- Added Jim's crashcatcher.c fix for better shell support. -- VC7.1 seems to have no trouble distinguishing between passing a (const - TypeInfo *) reference to operator<< and the generic, templated (object *) - version, so a few places that can benefit from it now use it. I believe - VC6 had problems with this, which is why I didn't do it all along. The - function's implementation was also moved out of dobject.cpp and into - farchive.cpp. -- Fixed: UnpackPixels() unpacked all chunks in a byte, which is wrong for the - last byte in a row if the image width is not an even multiple of the number - pixels per byte. -- Fixed: P_TranslateLineDef() should only clear monster activation for secret - useable lines, not crossable lines. -- Fixed: Some leftover P_IsHostile() calls still needed to be rewritten. -- Fixed: AWeaponHolder::Serialize() wrote the class type in all circumstances. - -March 12, 2006 -- Fixed: A_SpawnItem() should use CopyFriendliness(). -- Fixed: AExplosiveBarrel should have MF2_MCROSS set. -- Fixed: Passing 0 numrays to A_BFGSpray should default to 40. -- Fixed: New A_JumpIfCloser() function. -- Future-proofing: thingdef.cpp/FindState() allows the 2.1 names for - SwitchingDecorations. -- Fixed: ASwitchingDecoration declared itself as deriving from AActor instead of - ASwitchableDecoration. - -March 9, 2006 -- Fixed: AWeaponHolder::Serialize() did not call its supermethod. - -March 1, 2006 -- Rewrote MusicVolumes handling so it's a list and not an array. -- Removed I_SetMusicVolume(). It isn't used. -- Moved P_IsFriend(), P_IsHostile(), and P_GetSpecies() into AActor. - -February 18, 2006 -- Various fixes for compilation with GCC/Linux. -- Various fixes from Graf Zahl: Wrong blood color with P_BloodSplatter2() and - P_RipperBlood(). Wrong MF3_BLOODLESSIMPACT check in PIT_CheckThing(). - P_BloodSplatter() used R_PointToAngle(). A_CPosRefire() did not check for - hitting a friend. A_CentaurDefend() did not clear the reflective flag. - DHUDMessage::ResetText() did not check for con_scaletext==2. Wrong Raven - scroller speeds for COMPATF_RAVENSCROLL off. P_Init() should call - P_InitKeyMessages(). Missing decorate decal code from decallib.cpp. New - FFontChar1 code only made it into 2.1.0 and not 2.0.x. Missing copy - constructor for FMusicVolume. -- Fixed: ACustomInventory::TryPickup() failed to call the superclass - implementation of the function. -- Fixed: Friendly pain elementals killed by a player shot friendly lost souls - that attacked the player. Now those lost souls aren't friendly. - -February 6, 2006 -- Fixed: Except for A_Explode512, all of Strife's A_Explode functions also call - P_RecursiveSound. -- SpectralLightningSpot's RenderStyle is now STYLE_Translucent. It isn't really - part of the lightning itself, so it should probably not be additive. -- Fixed: Macil2 and the Oracle are invulnerable to the first stage Sigil, and - the first Macil should be completely unkillable. -- Fixed: The FlameThrowerParts' spawn state was unset, and it used a generic - pickup message. -- Fixed: Strife step heights vary depending on the type of actor: If it bleeds - it can go up 16 unit steps, if it's a missile it can go up 4 unit steps, and - everything else can go up 24 unit steps. And everything can stand over a 32 - unit dropoff. MaxStepHeight and MaxDropOffHeight are now actor properties. -- Fixed: Strife floating monsters are not blocked by monster blocking lines, so - they all need to have MF3_NOBLOCKMONST set. -- Fixed: APowerCoupling::Die() should destroy the unbroken coupling. -- Fixed: AActor::TakeSpecialDamage() should allow damage if the actor has - no death state at all. (Taken from GZDoom) -- Fixed: Killing something that drops an alarm with the second-stage mauler - would not show the alarm text if it was directly hit by the main torpedo. - Added a third argument to P_SpawnSubMissile() that indicates what the - new missile's "target" should be, so if the missile dies right away, it - has the correct target information. -- Fixed: Added Graf Zahl's fix for manually closing animated doors with - something inside them. -- Fixed: The A key should be bound to +jump by default in Strife. -- Fixed: F_BunnyScroll() should fill the widescreen border with black, not - the FinaleFlat. -- Fixed: Strife linetype 52 can be used to advance to the next map by setting - its tag to 0. It should also be flagged repeatable. -- Fixed: A_Look2() is supposed to randomly choose self->SpawnState + 3 if - MF4_STANDSTILL is unset, not + 4. -- A_AcolyteDie() now resets the acolyte's RenderStyle to turn off any shadow - effects they may have. - -January 24, 2006 -- First changes of 2006! 1.5 months later! :( -- Added a new level.maptime variable that keeps track of the time you've been - on a single level and is unaffected by hubs. -- Fixed: ASoulsphere::Use() could reduce your health. -- Fixed: cht_Suicide() did not clear the MF2_INVULNERABLE flag. -- Increased the sidedef limit to 2^32-1. -- Fixed: Stacked sectors inside a skybox would be drawn from the player's - origin instead of the skybox's origin, which would easily lead to infinite - recursion because the engine would try to render the skybox again instead - of the other side of the stack. In order to avoid any other infinite - recursion problems, the maximum number of skybox visplanes per scene has now - been capped at 100. -- Changed the inventory flag IF_CHEATNOTWEAPON to the weapon flag - WIF_CHEATNOTWEAPON. - -December 11, 2005 -- Started integrating changes from 96x into 2.0.99. - -December 10, 2005 -- Fixed: GetFinaleText() did not null-terminate the string it retrieved. -- Fixed: When changing levels, sky1pos and sky2pos were not reset to 0. -- Removed the check for 26,26 at offset 33 in SPC files because somebody found - a file that had them as 0,0 instead, and some players played it fine. -- Fixed: Before resorting to "Person", the dialogue code should use the actor's - tag name as a default name. -- Increased the Entity's alpha value to 50% to make it more visible. -- Fixed: F_StartSlideshow() needs to reset any blending. -- When a Macil speech ends, the level's original music is now restored. -- Fixed: The music for Strife's slideshows is D_DARK and not D_SLIDE. Go figure. - -December 4, 2005 -- Removed the ancient and unused Fixed(Mul|Div)_(ASM|C) functions. -- Discovered the GCC outputs nice code for MulScale and friends, so I removed - the assembly for those routines in gccinlines.h. Alas, the same cannot be said - of DivScale's variants. -- Removed the assembly code for BigShort and BigLong and replaced it with - compiler intrinsics provided by VC++. - -December 1, 2005 -- Backported miscellaneous sc_man.cpp fixes from 2.1.0. -- Fixed: P_BobWeapon() checked flags instead of WeaponFlags for WIF_DONTBOB. -- R_ProjectSprite() now checks for NULL things passed to it. -- Fixed: The game crashed if a slope thing of type 9500 or 9501 was placed - directly on its target line. Now you get a warning in the console instead. -- Returned Berserk's behavior to giving you 100 health instead of 100% health. -- Changed: When no screenshot_dir is specified, the game now tries to save - screenshots to the program directory instead of the current directory. If - you really want screenshots to be saved to the current directory, you can - do so by setting screenshot_dir to "." -- Fixed: StringFormat::VWorker cleared the zero flag for numbers. (I know I - tested this, so I'm not sure when it went wrong.) -- Fixed: The game did not check if actors had pain states before putting them - in their pain states. -- Fixed: The shazam cheat could not deactivate the Tome of Power, nor did it - display any text informing you of its action. -- Added additional decals from Graf Zahl's DECALDEF. -- Updated the obituaries in english-us.txt for Heretic to reflect the published - names of various Heretic monsters. -- Fixed: There is no reason why the Heretic and Hexen status bars should clamp - the displayed health to a maximum of 100. -- Fixed: P_PlayerInSpecialSector() duplicated the damage done by - P_PlayerOnSpecialFlat(). -- Fixed: The actor serializer was off by one when checking the number of - conversation nodes in a script. -- Fixed: In Strife dialogues, yes texts are printed even when it jumps - immediately to another dialogue node. I think this is bad design, and the - yes text should be part of the normal dialogue, but the person in the - east room of MAP27 abuses this, so I need to support it too. This also means - the notify text is no longer hidden when the menu is up. (Maybe they - mistakenly made it jump, and you were really supposed to try talking to him - again when he tells you the master doesn't like visitors.) -- Fixed: Anybody in Strife who does not have their name provided in their - dialogue script should use the default name "Person". -- Fixed: P_RecursiveSound() did not consider closed split doors as closed. -- Fixed: MummyFX1 and Whirlwind should have the MF2_SEEKERMISSILE flag set. -- Fixed: A_VileChase() did not clear the MF3_CRASHED flag. -- Fixed: P_SpawnPlayer() should always attach the StatusBar if the - consoleplayer is spawning. -- Fixed: HateTarget did not take damage due to its lack of a death state. -- Fixed: CheckInventory(), TakeInventory(), and GiveInventory need NULL type - checks. -- Fixed: SC_GetString() did not understand escaped quote characters in strings. -- Fixed: There were synchronization issues while drawing the console. Calls to - DrawTexture() can trigger input events to be processed, which can cause the - contents of the console to change WHILE THE CONSOLE IS BEING DRAWN. So now - any changes that would alter the contents of the console text buffer are - deferred until after the buffer is drawn, and a copy of the command line is - drawn instead of the real command line. - -November 22, 2005 -- Fixed: Dssswtchx and dspistol are obviously wrong choices for Strife menu - sounds. I don't think it uses anything for those sounds, but I picked analogs - for them anyway. -- Fixed: Merchants ignored attacks from "silent" weapons. -- Fixed: Strife humans did not play their "yeargh!" sound for their zap deaths. -- Added a new Travelled() method for inventory items. This is called each time - an item travels to a new map and gives it a chance to perform any needed - reinitialization. Specficially, PowerTargeter needs it to set the player's - psprites again. -- Fixed: Dropping coins should do so in increments of 50 if you have enough, not - increments of 1. -- Added IF_UNDROPPABLE to HealthTraining and GunTraining. Because HealthTraining - also gives GunTraining when picked up, you could cheat by dropping the - HealthTraining item and picking it up to get as many GunTraining upgrades as - you wanted. GunTraining doesn't really need to be undroppable; the flag is just - there for it for the sake of symmetry. -- Fixed: It looks like just about everything in Strife should have MF2_FLOORCLIP - set. Strife probably applied floorclip to everything without MF_NOGRAVITY set. -- Fixed: The perfectly vertical missile movement fix was backwards with regards - to damage values. -- Fixed: AddCommandString() scanned past terminating '\0's in unclosed - strings while searching for semicolons that break commands. Thus, if the - previous command added had a semicolon in just the right place, it could - try to add it again. -- Fixed: The fly cheat did not check to make sure you had a body. - -November 18, 2005 -- Fixed: You could create a chain reaction where merchants would continually - enter their pain state because there was a delay between the time when they - alerted and the time they alerted others. -- Fixed: If the Inquisitor died while flying, it would continue to play the - flying sound. -- Fixed: The LEGO cheat didn't check if the Sigil was successfully added and - would set the player to the NULL weapon if it wasn't (which happens with - the shareware). -- Fixed: Macil was alerted by water splashing. -- Reworded some of the compatibility options menu items so they fit on - the screen when playing Strife. -- Fixed: The Oracle's Death checked the wrong quest item to determine if - you had already killed Macil. - -November 17, 2005 -- Fixed: Various Strife actors had MF_COUNTKILL that didn't need it: - Beggar, KneelingGuy, Macil1, RatBuddy, and AcolyteToBe. -- Fixed: PowerMask and PowerShadow both need the IF_HUBPOWER flag. -- Fixed: The Strife quest log should be initialized with the text "Find - help". - -November 14, 2005 -- Fixed: ClientObituary() crashed if the killing player didn't have a - weapon. -- Fixed: The Touch functions assumed the toucher was a valid player and - crashed if it wasn't. -- Fixed: APlayerPawn::Die() assumed the actor was always associated with - a player and crashed if it wasn't and you had weapon dropping turned on. -- Fixed: There were two pfile variables defined in R_InitTextures(). - -November 13, 2005 -- Fixed: The user-configurable BOOM startup strings were always printed, - even if they were empty. - -November 8, 2005 -- Fixed: APowerStrength::GetBlend()'s equation did not match Doom's. -- Fixed: If you have weapon sprites in a wad and try to use a frame from - that sprite that does not exist, the game accesses might crash. Fixing - this involves two things: Make the range checks in R_DrawPSprite() - unconditional, so they exist in both debug and release builds. Also add - a check for the Null texture to catch "holes" in the available frames. -- Fixed: Setmodeneeded is always true before starting a game, because it - only gets cleared when the StatusBar is around. The most obvious - manifestation of this problem is that you cannot move left and right - in the video modes menu before starting a game. -- Fixed: The "give all" cheat did not give a backpack, and the non-console - equivalents always gave you a backpack, even if you weren't playing Doom. -- Fixed: The "give armor" cheat gave you armor with a SavePercent of .5 in - Heretic. This would be correct for the others games, but not for Heretic, - where .5 is what the lesser armor provides. - -November 7, 2005 -- New: Games saved for different PWADs but the same IWAD now show up in - orange on the save/load menu. -- Fixed: R_RenderViewToCanvas() did nothing if viewactive was false. Thus, - savegame screenshots would be garbage if you saved while looking at the - automap. -- To avoid potential conflicts with the Windows headers, the LONG and SHORT - routines were renamed to LittleLong and LittleShort. BELONG and BESHORT - were also renamed to BigLong and BigShort to match. -- Fixed: S_ChangeMusic() had a cast from 'const char *' to 'char *' that was - missed by VC++ 7.1 and GCC, but not the latest VC++ 2005 beta. -- Fixed: Although bit 27 of the actor's flag is now used for something - different than in Doom, it's okay to specify it by number in a Dehacked - patch, because it's used to set the color translation. When the translation - is set, it will be 0'ed then. -- Fixed: FActorInfo::ApplyDefaults() should initialize datastr to NULL. -- Fixed: TArray::Delete's parameter should be unsigned. -- Fixed: The fix for rotating polyobjects broke polyobject doors. -- Fixed: Using the IDBEHOLDS cheat did not give you full health. -- Backported the fix for scrolling Heretic/Hexen/Strife specials from 2.1.0. -- Increased KneelingGuy's height to 17 so that you cannot step on top of the - projector without jumping. -- Added a confirmation screen for the menu choices that reset your options. -- Added a new automap menu underneath the display options menu. Moved all the - automap options into it and added a few new ones. - -November 2, 2005 -- Fixed: WIF_NOAUTOFIRE did not actually do anything. -- Added zloba's save/load console commands. -- Adjusted Static_Init:Init_Color so that you don't have to specify both - fog and color with it. -- Fixed: A_GenWizard() and A_SpawnBishop() did not decrement total_monsters if - the monster spawned inside something and needed to be destroyed. -- Fixed: Hexen monsters also move faster in nightmare mode. -- Added a map color customization menu. -- Renamed the "Standard map colors" option to "Use traditional Doom map colors". -- Fixed: Switching the MIDI device after a one-shot song had finished would - try to restart the song. -- Removed the BufferReturnEvent from music_midi_stream.cpp, since it was - unused. - -October 26, 2005 -- Merged in Chris's Linux patch. -- Fixed: Redefining a decal that had already been assigned to an actor would - not update the actor's reference to the decal. -- Fixed: CheckForPushSpecial() could pass a NULL actor to P_ActivateLine() if - a missile did not have an "owner." -- Fixed: snd_reset assumed GSnd was valid, but it wouldn't be if you passed - -nosound on the command line. -- Fixed: When a doll-spawned minotaur in Hexen died, it checked to see if any - other minotaur were still up for that player. It assumed there were no free- - standing minotaurs and crashed if there were. - -October 24, 2005 -- Added armor->BecomeItem() calls to ABasicArmorPickup::Use() and - ABasicArmorBonus::Use(). AActor::AddInventory() no longer calls BecomeItem() - itself. - -October 22, 2005 -- Fixed: FloorAndCeiling_LowerRaise would move one or the other but not both. -- Fixed: PIT_RadiusAttack() calculated negative distances for things exploding - directly above other things. -- Fixed: Ripper missiles ignored MF3_BLOODLESSIMPACT and always sprayed blood - onto the walls. -- Fixed: Firing a missile into a wall while standing right next to the wall - would not cause any specials to activate on that wall. - -October 18, 2005 -- Changed: DThinker::DestroyThinkersInList() performed a pointer cleanup after - destroying each and every thinker. The better thing to do is clean up in the - functions that call it: DestroyAllThinkers() and DestroyMostThinkers(). - -October 17, 2005 -- Fixed: BloodySkull and IceChunkHead are supposed to subclass PlayerChunk, not - PlayerPawn. -- Fixed: Behaviors for Generic_Floor change types 2 and 3 were swapped. -- Fixed: Non-320x200 INTERPICs once again display properly. -- Changed drawing operations in F_BunnyScroller() so that non-320x200 background - images should work. -- Fixed: The m_Dist member of DPolyAction was declared signed when it should have - been unsigned. -- Fixed: SetScriptState() in p_acs.cpp did not check to make sure the ACS thinker - actually existed. -- Fixed: Crashing when travelling between maps in a hub. For some reason the list - of pointers for AActor used 12-byte-wide pointers-to-members. Every other class - (including those that derive from AActor) use 4-byte-wide values. This left - DObject::PointerSubstitution() and DObject::DestroyScan() able to identify only - the first pointer declared in AActor. Rather than try to figure out why - pointers-to-members of AActor are weird, I decided to revert to my original - implementation: An array of offsets into the class. GCC complained about this, - which is why I switched to a pointers-to-members implementation. But I found a - way to make GCC compile it without warning, so yay! - - And since I was working with this code anyway, I decided to make a change that- - is hopefully a speed optimization. Rather than walking up the chain of TypeInfos - every time an object's pointers need to be checked, I now do this once and build - an array of every pointer in a class instance (as opposed to just those pointers - defined for that class and not any of its superclasses). This should mean fewer - scattered memory accesses and hence, better cache utilization. - - (Question: Why did this problem show up in 2.0.97 and not 2.0.96? The only - relevant change to the code was a macro to make the array const for VC++ but not - for GCC, because some GCC optimizations tried to write to it at runtime despite - its constness.) - -September 26, 2005 -- Released this old code as 2.0.97. -- Backported the text-based LANGUAGE and IMF code from 2.1.0. -- Updated to zlib 1.2.3. - -February 21, 2005 -- Provided alternate versions of the TArray-related friend template functions for - the string and name classes. I have no idea which compiler is right, but VC++ is - certainly nicer about it. - -February 19, 2005 -- Fixed: In C mode, SC_GetString() would not consider '-' to be a token. -- Added a global name table. - -February 18, 2005 -- Added lots of explicit casts and changed some types to turn off 64-bit compatibility - warnings. -- Added a string class I've been playing with for a while now and made some - adjustments to TArray so that it can work with non-basic types. - -February 11, 2005 -- Removed the MOD_FIRE hack in PIT_RadiusAttack and replaced it with a new thrustless - flag to P_RadiusAttack. -- Removed the multiplayer check from AInventory::ShouldRespawn(). Now the dmflag is - always respected, even without alwaysapplydmflags. -- Added a check for a NULL StatusBar to PlayerIsGone() in d_net.cpp. -- Fixed: ADehackedPickup::TryPickup() set the MF_DROPPED flag. This flag is now set - by default, so it should clear it instead. This kept hacked weapons from staying - and respawning, because the RealPickup it tests against was always flagged as - dropped. -- Fixed: The MagePlayer used A_Scream instead of A_PlayerScream when he died. -- Fixed: The Heresiarch spawned new balls above its head after it killed its target - and re-entered its SpawnState. -- Fixed: Using chasecam while spying on another player would not show that player. -- Rewrote the spy code to not need displayplayer. -- Switched to the combination of DirectDrawCreate/QueryInterface to obtain an - IDirectDraw2 interface. That should be slightly more compatible, since - DirectDrawCreate can create an IDirectDraw interface even if it isn't properly - registered. - -February 10, 2005 -- Fixed: The screen fading ACS commands did not work when viewing through a camera - because DBaseStatusBar::BlendView() did not think there was a player to get those - values from. Now, the blend comes from either the player viewing from or the - console player if the current view is not from a player. -- Fixed: Returning to a previously visited level in a hub with fewer players than you - had when you left the level would result in "zombie" bodies from the former players. - The fix is in G_UnSnapshotLevel(): After restoring the level, any actors that point - to a player who is no longer in the game are destroyed. -- Fixed: P_ExplodeMissile() should zero the projectile's speed before putting it into - its DeathState, not after. Strife's flamethrower needs it like this, and I'm not - sure when or why it was moved to happen after the state change. -- Fixed: R_DrawSkyBoxes() needs to save and restore viewx and viewy as well as viewz - for drawing masked items. -- Fixed: P_MorphPlayer() did not properly transfer ownership of inventory items, so - when it destroyed the player's armor, it also unlinked anything after the armor in - the player's inventory. -- Fixed: The Hexen players should call A_FireScream() on the first frame of their - fire death, not the first shared frame of their fire death. -- Attached obituaries to the projectiles used by Doom's projectile weapons, so they - can have obituaries again. This is just something I put off finishing when I changed - from a means-of-death system to a damage type system. -- Fixed: Pain Elementals did not transfer their friendly flag to the Lost Souls - they spawn. And since I've got the same code doing this sort of thing in several - places, I replaced them all with a call to the new method AActor::CopyFriendliness. -- Fixed: Bots are idiots after co-op level changes because the CajunMaster forgets - about them and so doesn't tell them to do anything different from what they were - when the level change happened. -- Fixed: G_FinishTravel() needs to retrieve the next player before changing the - current one's statnum. -- Made some fixes to SDLVideo's Lock() and and Update() synchronization. -- Fixed: DSimpleCanvas::Lock() and ::Unlock() did not properly use the lock count. -- Fixed: In Strife, the fastCrushAndRaise ceilings (line types 6 and 77) are twice - as fast as their Doom counterparts. -- Fixed: Strife auto-uses the best ammo first, not the worst. I got confused because - in Strife ARM1 is the best armor, but in Doom it's ARM2 that is best. -- Fixed: Strife does not double ammo at its highest skill level. -- New: Using Degnin Ore will drop it, similar to the Teleporter Beacon. -- Fixed: In nightmare skill, every actor is spawned with a reactiontime of 0. This - make's Strife's HE Grenades explode immediately, because they use their reactiontime - as a countdown timer. The solution: Only set the reactiontime to 0 for monsters. - (Strife may not do this at all. I'm not sure.) - -February 9, 2005 -- New feature: Missiles with negative damage now give you health. -- Changed P_GiveBody so that it works with any actor, not just players. -- Fixed: Picking up a BasicArmorPickup without any existing BasicArmor gave you - a new BasicArmor without calling BecomeItem to unlink it from the world. Since - there are probably other areas where this happens, and it's kind of easy to forget -- Added a division-by-0 check to the very end of P_HitSlideLine for the very rare - cases when inter3 ends up being 0. -- Clamped the upmove speed in P_PlayerThink() to avoid super fast speeds from - joystick users. -- Fixed: A_SorcererRaise() did not transfer friendliness info to the new D'Sparil. -- Added: Trying to use actors that have the UsePuzzleItem special now works just - like trying to use a wall with the same special: You use the item if you have it, - and you say "hmm" if you don't. -- Fixed: APuzzleItem::Use() should not remove the item from the inventory but let - the caller do it instead. -- Fixed: P_TranslateLineDef() should clear the ML_MONSTERSCANACTIVATE flag on lines - with ML_SECRET set. Otherwise, monsters can open otherwise secret doors in Doom - format maps. -- Renamed the Porkalator's missile sprite from EGGM to PRKM, so it doesn't have the - same name as the Morph Ovum's missile. -- Fixed: The warp cheat was always applied to the local player and not the player who - used it. -- TypeInfo::CreateDerivedClass() now initializes OwnedStates and NumOwnedStates for - actors. -- Fixed: PrepWall and PrepLWall clamped the final texture column so that it was not - visible unless it was fully visible. -- Fixed writing of RDosPlay raw songs. It was a very very very stupid mistake: I had - the order of the register and data bytes reversed. Now it works fine, and since it - took me a while to figure out the problem, ZDoom can now play raw OPL songs. - -February 7, 2005 -- Added the writeopl command to write a song in RDosPlay raw OPL format. It's usage is: - writeopl [songname] - If the currently playing song is a MUS song being played through the OPL emulation, - then you just need to specify the filename. Otherwise, you need to provide the - songname (such as D_E1M1) as well. Unfortunately, the result is unplayable with - AdPlug, so I must be doing something wrong. - -February 4, 2005 -- Merged in Graf Zahl's Caverns of Darkness patch. -- Fixed: Using the screenshot command to specify a filename without any extension - automatically adds the extension. - -February 3, 2005 -- Played around with polymost some more. The good: Wall projection is now totally - independant of the non-polymost code, so walls don't get clipped to what would have - been the screen boundaries without true look up/down. With the filled polygon mode, - it looks awesome. The bad: I'm getting precision problems when clipping the left - side of walls to SCISDIST. This problem is not present when clipping the right side, - and it's not present in jfDuke, so what am I doing wrong? Setting SCISDIST to a large - value like 128 makes the problem disappear, but that's much too large. Someday, when - it can handle doing a second pass to draw behind you, SCISDIST needs to be as small as - possible to avoid a visible gap between the front and back views. - -February 2, 2005 -- Added a damagetype parameter to AActor::TakeSpecialDamage(). The default implementation - of this function now uses it to reject damage if the actor doesn't have a matching - death state. (Meaning, you can leave an actor without a normal death state, and it will - only take damage from special attacks.) Since this negates the need for A_TreeDeath, - that function is gone. -- Fixed: The adjustment for negative y-offset, non-power-of-2-height textures is - now only done for textures aligned at the top and not the bottom. -- Fixed: APowerFlight::DrawPowerup() did not check if SPFLY0 actually existed before - using it. -- Fixed: P_SpeekerMissile() did not check for zero-speed actors, so you could get a - division by zero error if it needed to move vertically. - -January 30, 2005 -- Threw together a quicx mock-up of a polymost-based renderer. It is essentially - just the standard software renderer with some parts commented out and the clipping - done with polymost instead of a few one-dimensional arrays. The display itself is - just the standard view with the polymost view overlayed in wireframe. - -January 29, 2005 -- Fixed: BOOM-style carrying floors that use speeds values less than STOPSPEED - no longer change the actor's momx and momy but are passed as extra parameters - to P_XYMovement(). Faster speeds still change momx and momy, so conveyor belts - can fling objects off of them. -- Fixed: Items in inventory would "scroll" on scrolling floors. -- Fixed: Every place that copies the friendly flag from one actor to another also - needs to copy the FriendPlayer. -- Fixed: In A_Chase(), a friend's selection of target based on who last hurt the - player did not take into consideration that a friend may have accidentally hurt - the player. -- Fixed: P_NightmareRespawn() did not copy a monster's custom translation to - its new body. -- Fixed: FMODStreamCapsule::Play() did not record the channel the stream was - playing on, so you could not change its volume during playback. -- Added the sucktime mapinfo option. This is the time, in hours, that the - player must play before the intermission tells them their time sucks. If this - is 0, then they cannot suck. If they do suck, their time is still shown - (unlike Doom) in the normal spot, with the suck above it. I had to shift the - positions of the time displays in the Doom intermission a little so that there - was room for the hour field. This is also retrievable with the GetLevelInfo() - command by passing LEVELINFO_SUCK_TIME. -- Fixed: Using the suicide cheat on the "end of game hell hack" on E1M8 would - infinitely loop because that sector type actually prevents you from dying, - but the cheat code was waiting for you to die. - -January 27, 2005 -- Added mouse handling to the testpolymost screen so that I can actually drive - it. That let me find a few more bugs in my port of the code that needed to be - fixed. - -January 26, 2005 -- Changed the Puffy actor (used by Heretic's weredragon/beast's fireball trail) - to do 0 damage. Similarly, A_LastZap() now sets the projectile it spawns to - do 0 damage so it can be once again like Hexen. -- Fixed: Picking up an ammo item for the first time with more than the max - amount for that ammo type would let you get more than the max. -- Fixed: Specifying a defaultmap in MAPINFO disabled lax monster activation - checking instead of deducing it from the game's Hexen/not-Hexen status. -- Fixed: Mirrors were accumulated to the WallMirrors list while viewing the - automap, so after you turned the map off, a few thousand mirrors could be - processed, resulting in a noticable delay before the view became visible. -- Added support for using the Teleport_NewMap class of specials with title maps - so that you can use more than one map as a title map. Using the gametype() - ACS function will return GAME_TITLE_MAP if the map is being used for a title - display instead of regular play. -- Added a fourth parameter to ThrustThing to accept a TID of something to - thrust. -- Fixed: Deactivating an actor mover without activating it first reset its - target's flags to 0. -- Fixed: Picking up two or more berserk packs only gave the red tinting for - the first one. -- Fixed: Monsters following a path entered their see state whenever they - reached a patrol point. I don't know what I was thinking when I did that. -- Fixed: Since pre-2.0.90 demos no longer play back, they should be rejected - without even trying to play them. Similarly, new demos need to be - recorded indicating they won't play back with earlier game versions. - Unfortunately, I didn't bump the demo version between 2.0.63a and 2.0.90, so - anything pre-2.0.97 won't play with 2.0.97, even though there's probably - no changes that would cause desynching between 96 and 97. Oh well. -- Fixed DBaseStatusBar::DrBNumber(Outer) to work when some of the big number - graphics are missing. - -January 15, 2005 -- Fixed: ACS cos and sin were using signed shifts when calculating the fineangle. - -January 13, 2005 -- Fixed: Instead of assigning the empty sound a basepriority of -1000, - S_StartSound() should not even attempt to play it. -- Fixed: FCanvasTextureInfo::Add() did not change the FOV when reassigning an - existing camera->texture mapping. -- Fixed: SetCameraToTexture did not check if the texture name actually existed as - a texture. It just assumed it did. - -January 10, 2005 -- Fixed: P_MorphPlayer() needs to set the player's momx and momy to 0, because - morphing doesn't maintain the player's momentum. -- Fixed: The Cyberdemon, SpiderMastermind, AlienSpectre*, Crusader, and - Programmer need MF3_DONTMORPH set. Otherwise, morphing them and killing them - before they unmorph will skip any of their special death actions. Technically, - the Inquisitor doesn't need it set, but he's a boss monster, so it seems best - if he can't be morphed. (For that matter, should any of the mechanical monsters - in Strife be morphable, since they're not organic?) -- Redid: Invnext and invprev wrap around the inventory list. -- Unmorphing a player now removes the weapon(s) they received in their morphed - form. -- Redid the dehsupp fix from March 22, 2002. - -January 8, 2005 -- Fixed: Dead players could still be morphed, at least with the morphme cheat. - I'm not sure if morph projectiles did it or not, but now they definitely don't. -- Added a call to SN_StopAllSequences() inside S_StopAllChannels(). This - prevents moving sector sounds from playing during the finale (and any other - time when sound effects were supposed to have been stopped). -- Fixed: R_DetailDouble() must not do anything when viewactive is false. - -January 7, 2005 -- Ported the polymost visualization code from Ken's prototype so that I can - verify the correctness of my C++ port. Which was not quite correct. :-( - -January 5, 2005 -- Fixed: R_SetupBuffer() calculated ylookup for the height of the screen, and - not the height of the render target. This meant using camera textures taller - than the screen would probably crash. But wait! There's more! new_visplane - must also allocate top and bottom arrays wide enough for any view, not just - the screen. So I decided to just make it allocate enough for MAXWIDTH. -- Removed some possible unused variable warnings spewed by GCC. -- Fixed: The parser for DEM_SUMMON(FRIEND) tested if type was NULL when it - should have tested typeinfo instead. -- Changed the actor defaults for GCC to use a function to initialize the - default actors instead of an initializer list. With newer GCC versions, I - can no longer count on variables being emitted in the same order they are - defined, so using an initializer list is impossible. This looks like it adds - ~300k to the executable, which I suppose isn't too bad. - -January 4, 2005 -- Changed the object pointer offset lists to not be const when compiling with - GCC. Some versions and options cause GCC to try to initialize them at - run-time, even though they are read-only and therefor protected from - writing. -- Added Makefiles for building with MinGW. Since Chris did the hard part by - posting a Makefile for the main exe on the forum, I only needed to make - Makefiles for the auxilliary projects. And then I spent some time porting - ccdv to Win32, so the make output will look pretty. - -January 3, 2005 -- Fixed: The self-modifying code in tmap3.nas was still in the .data section - instead of .rtext, so it couldn't be used with data-execution prevention - enabled. - -January 1, 2005 -- Fixed: ParseDecorate() needlessly allocated new TypeInfo objects. -- Fixed: The status bar constructor did not initialize CPlayer. Thus, when - the Doom status bar's AttachToPlayer method was called it would not do - the proper face initialization if the status bar was freed and then - reallocated in the exact same spot. This bug didn't show up in the debug - build, because the debug CRT automatically fills newly freed and allocated - memory. -- Fixed: P_SpawnMapThing() does not need a special check for the Lost Soul. - -December 24, 2004 -- New: Instead of using a static image as a title, you can now use a map. - Just create it as normal, being sure to do something interesting with - scripting, and rename it TITLEMAP. It will load just like a normal map, - but it will behave like a title picture. -- Fixed: The intermission did not compensate for non-4:3 aspect ratios. -- Fixed status bar border for widescreen ratios other than 16:9. -- Corrected clean scaling calculations for widescreens. -- Changed: Giving a BasicArmorBonus now also multiplies the original amount - by the specified amount instead of just using the specified amount. -- Fixed: When P_SpawnPlayer() transfers a voodoo doll's inventory to the new - player, it also needs to transfer the InventoryID property so that items - picked up later won't receive the same ID as an item they already have. -- Fixed: ArtiPoisonBag::BeginPlay() did not call the superclass's version of - the function. -- Changed A_FireScreamReplace to A_FireScream. Now it plays the sound itself. - On a related note, moved A_ClericBurnScream to the start of the ClericBoss's - flaming death and changed the old instance back to A_Scream. -- Fixed: Forgot to delete some old code in AActor::Tick(). -- Fixed: The second sidedef-only constructor for DScroller did not set up an - interpolation. -- Fixed: R_DrawSkyBoxes() initialized the clipping drawseg's siz values to - 1<<31, which is actually INT_MIN, not INT_MAX! -- Fixed: Some properties were not properly transferred when unmorphing an - actor. -- Fixed: You got HOM around the status bar in widescreen mode if you didn't - scale the status bar. -- Fixed: You could use the down arrow key to select blank entries on the last - line in the video mode menu if that line was not full. -- Fixed: The backpack handled pickups for everything after you got one. - -December 23, 2004 -- Made the bottom of the viewborder visible when the status bar doesn't cover - the full width of the screen and no border would normally be visible. -- Added SetAmmoCapacity (str typename, int maxamount) and - GetAmmoCapacity (str typename) ACS commands. Also added the ACS log command. - It is exactly like printbold, except it prints directly to the console instead - of the middle of the screen. BTW, ACS has static local variables ala C now. - They are exactly the same as map variables, except they can only be used in - the script or function that defines them. -- Fixed some fullscreen pages to work properly with non-4:3 aspect displays. -- Fixed DCanvas::DrawTexture() so that all virtual sizes (not just 320x200wide) - work with non-4:3 aspect screens. (So long as the virtual size is 4:3.) - -December 22, 2004 -- Fixed: The backpack was not added to the player's inventory, although there - was code present to handle removing it from the inventory. -- Loading a BEHAVIOR without any scripts but with other content crashed. -- More revelations with the sprite splitting experiment: Drawsegs are not - always created when you might think they are. Probably the biggest problem - is when you look at a line straight-on, so you see the sectors on each side - of it but not the line itself. I conceded defeat and stuck an #if 0 around - the related code. If I or someone else want to revisit it later, it's still - there but inactive. I don't think it's worth the effort to make it work - properly. A z-buffer would be much easier, more reliable, and possibly even - quicker when there are a lot of two-sided lines in view. So the solution - seems obvious: Use hardware acceleration and let it worry about sprite - clipping. Or stick with the way things are and ignore it. :-) (Community - Chest 2, MAP15, building number 4 makes a great test-case for this, BTW.) - -December 21, 2004 -- Messed around with splitting sprites along drawsegs some more. This is far - from being as straight forward as I had thought. One unexpected problem I - realized: Most (if not all) of the sprites that stand on the ground are - actually sunk into the ground, but splitting sprites is not a win unless you - clip them to the floor and ceiling. So I tried bumping the sprites up so that - they are aligned with the bottoms of their actor so I could clip them to the - floor. Now it looks much better. When it works. Unfortunately, there are - lots of cases that still don't work properly. - -December 20, 2004 -- Added some code to split sprites along drawsegs. -- Changed the sprite-in-front of drawseg calculations. Now it compares inverse - Z values in screen space. -- Fixed: The MinotaurFriend targetted friendlies other than itself. -- Fixed: An actor's floorpic was not serialized by name. -- Fixed: Each piece of Hexen armor only gave you one AC. -- Fixed: Morphing a monster didn't copy the original monster's friendliness and - TID hating to the morphed version. - -December 18, 2004 -- Fixed: Slideshows in Strife are supposed to change the music to D_SLIDE. -- Fixed: Merchants played their greeting animation in place of their "yes" - animation. (Or rather, the greeting was played immediately after starting the - "yes" one, so you only saw the greeting.) -- Fixed: The Strife health bar texture assumed that the vial level would always - be non-negative. It can go negative if the player dies then cheats to give - themself health, but not enough for their real health to go positive. -- Fixed: Creating a fade-in-out hudmessage with a fadetime of 0 crashed, because - it assumed the fade-in time would always be positive. -- Fixed: Instead of calling G_StartTravel(), idclev should set the player's - health to 0, so the player will do a complete spawn on the new level. -- Fixed: DrBNumberOuter(Font) and DrINumberOuter drew the shadow from one digit - on top of the next digit. -- Fixed: The Doom HUD drew the selected inventory item on top of the secondary - ammo if both were present. -- Moved the DrawPowerups() call out of DBaseStatusBar::Draw() and into - DrawTopStuff(), so the Doom HUD key display won't cover them up -- Fixed: If you started flying and then pressed the land key, you wouldn't be - able to fly again until the Wings of Wrath wore off. This was done by changing - several checks for a player with MF2_FLY into checks for a player with - MF_NOGRAVITY. MF2_FLY just indicates that the player is using the Wings; - for the player to fly, MF_NOGRAVITY must also be set. If MF_NOGRAVITY is not - set, but MF2_FLY is, then the pressing +moveup/down reactivates fly mode. -- Changed the receipt of BasicArmorPickup so that the SaveAmount is multiplied - by the given amount (via the give cheat or ACS giveinventory) in order to make - it compatible again with earlier versions of ZDoom. -- Fixed: Picking up an armor bonus after using up your armor left you with - useless armor until you picked up a full-fledged armor item. -- Fixed: Even though voodoo dolls couldn't pick up items, they could still touch - them without pretending to be a real player and mess things up in the player's - inventory. -- Fixed: Strife's alien spectres did not execute specials attached to them upon - death, because they have MF_SPECIAL set. -- Changed the inventory left/light gems (that indicate if you have more items in - that direction) to blink with gametic instead of level.time, so now they can - blink while the game is paused. -- Fixed: You could use items while the game was paused. -- I just noticed the fighter's fist doesn't meet the edge of the screen when you - swing it. What's a good, clean way to handle this situation? -- Brought over the startup log viewer I had added for my Duke port. Unlike my - Duke port, however, this window is normally hidden and only shows itself when - a fatal error occurs. Now if something goes wrong during the startup - sequence, you can review the console log to try and figure out why. I tried - making it show up at startup as a sort of revival of the way the startup - process worked once upon a time in DOS land, but too much of the code now - requires the video to be one of the first things initialized and it just isn't - practical to rearrange things to make it init later. - -December 16, 2004 -- New: ZDoom.wad is now managed along with the source code. - -December 15, 2004 -- Added support for letterboxing, so people without widescreen displays can still - use widescreen modes without running in a window. Note that if the video card - enumerates any widescreen displays, then the game will assume they are displayed - as widescreen, even if they really aren't. Letterbox modes are automatically - generated from the existing 4:3 modes, but if an existing resolution already has - the same size, then that resolution won't be available in letterbox form. The - video modes menu displays LB next to any modes that are letterboxed, so you can - tell them apart without trying each one. -- Corrected widescreen displays for non-90 degree FOVs. - -December 14, 2004 -- Added support for 16:10 and (if vid_tft is true) 5:4 displays. Also rearranged - the video modes menu, removing the depth choice and replacing it with an aspect - ratio choice. - -December 13, 2004 -- Rewrote the interpolators to use a hash table instead of a linear array, for - improved insertion and deletion performance. -- Added interpolation for scrolling floors, ceilings, and walls. Floors especially - need it, because the lack of interpolation really sticks out when you're being - carried along by a floor that only moves at 35 FPS. -- Resolutions are now sorted, and you can pick widescreen resolutions if you play - in a window even if your don't have any fullscreen widescreen modes. (Yep, 16:9 - modes are now supported.) - -December 11, 2004 -- Decided it's time to bring the goodness of Polymost to ZDoom. Stage 1 complete: - Convert the clipper to a stand-alone C++ class. Stage 2 to be completed some - time in the indeterminate future. There's really other things that I should be - doing right now, ne? - -December 9, 2004 -- Fixed: APlayerPawn::BestWeapon() did not know about the Tome of Power, so - when you ran out of sufficient ammo for your tome'd weapon, it could select - the untome'd version of that weapon, which would turn into the tome'd version - when it was raised, so you would be stuck in a cycle until the tome ran out or - you picked a different weapon manually. -- Fixed AMinotaur::Die() should have used a thinker iterator instead of an - actor iterator to look for minotaurs that are still alive. -- Added Graf's deltaviewheight fix for climbing stairs made of actors. -- Fixed up the pickup ammo amount for the BFG. (Was 100, should be 40.) -- Merged in Jim's ACS character array printing support. - -December 6, 2004 -- Fixed: Fog boundaries flashed with gunfire. That's wrong because foggy - sectors don't flash. -- Fixed: Masked textures in a skybox would determine their height from the - viewz used for the last skybox drawn instead of the viewz for the skybox they - belong to. -- Fixed: "*fistgrunt" was undefined, so A_FPunchAttack() was unable to play it. -- Fixed: Hexen players did not play their burn death sounds. Neither did the - cleric boss. -- Fixed: Thingcount should not count items in somebody's inventory. -- Fixed: AInventory::BecomeItem() did not remove the item's TID, so it could - still be manipulated by scripts even after being picked up. -- Fixed: CheckBossDeath() should consider frozen corpses as not dead, because - A_BossDeath() is not called until the corpse shatters. -- Changed APlayerPawn::Die() to use P_DropItem() to spawn a new weapon when - weapondrop is turned on instead of dropping the player's actual weapon. -- Fixed: P_DropItem() needs to clear the MF_NOGRAVITY flag because some Hexen - items have it set. -- Fixed: ArtiTeleport::Use() called P_UndoPlayerMorph with its player instead of - its owner's player. - -December 4, 2004 -- Updated the libraries and moved them out of src and into the base directory. - Now zlib is at version 1.2.2, libFLAC is version 1.1.1, and src contains only - the ZDoom-specific files. -- Updated to zlib 1.2.2. - -December 3, 2004 -- Fixed: 256 entries per column is not enough for dc_tspans. Each column should - have MAXHEIGHT entries available, because a column that alternates drawn/not- - drawn pixels each row will need one entry per row. - -December 2, 2004 -- Fixed playback of SPCs when spc_8bit is true. SNESAPU renders them unsigned, - but we need them to be signed. Also fixed: Altering spc_stereo and spc_8bit - while a SPC was playing could crash. -- Added new stuff to the alternate sound renderer: MMX CopyAndClip routine, - interpolated mixers, FLAC sample loading, streams, and slightly tighter - inner. So now it's a bit more of a realistic alternative to FMOD. All it - really lacks is MP3, Vorbis, and MOD support. The snd_interpolate cvar can - even select between linear (1) and quadratic (2) interpolation, so it can - sound better than FMOD, which only does linear interpolation. - - I'd like to compare the performance of the new code with FMOD, but - unfortunately, I can't seem to figure out a good way to calculate % CPU used - by the mixer. My attempts lead to numbers that fluctuate quite a lot for - relative constant environments. At least it ought to be attractive to the - Linux folks if it gets modified to support SDL as well as DirectSound, even - if I have no idea how well it performs. - -December 1, 2004 -- Reorganized the sound interface code to make it easier to target multiple - sound renderers. - -November 29, 2004 -- Added the CTRL-X keypress for clearing the current console command line. -- Changed tab completion to be more Bash-like: When there is more than one - possible completion, and they all have a common prefix longer than what - has been typed so far, the full prefix will be filled in for you. (e.g. - Typing "sn[TAB]" will append "d_" for you because every command that - starts with "sn" also starts with "snd_".) Note that this only works if - you have the completion list turned on (con_notablist is false). -- Fixed: Only the first berserk pack you picked up would give you health. -- Fixed: Soul sphere played the wrong pickup sound. - -November 25, 2004 -- Added render-to-texture support to the engine. Using it requires you do two - things: - (1) Define a texture that can be drawn into. You do this with a line in - ANIMDEFS: - - cameratexture [fit ] - - e.g. - - cameratexture CAMTEX1 64 64 - Creates a texture called CAMTEX1. - - cameratexture CAMTEX2 100 50 fit 80 50 - Creates a texture called CAMTEX2. Its actual dimensions are 100x50, - but it will be scaled to fit into an area 80x50 units large. - - cameratexture STARTAN2 64 64 - Replaces the existing texture STARTAN2 with a new one that can be - rendered into. Since no fit size was provided, this new texture will - be sized to occupy the same space as the old STARTAN2 texture, which - is 128x128. - - cameratexture STARTAN2 64 64 fit 64 64 - Replaces the existing texture STARTAN2, but leaves the texture - unscaled by specifying a fit size that matches the real size. - - Square textures use less memory than non-square textures. However, if - you want to use a camera that can see the texture it renders into, you - should use a non-square texture. - - (2) Use ACS to identify which camera renders to the texture: - - SetCameraToTexture (, , ); - - e.g. - - SetCameraToTexture (100, "CAMTEX1", 90); - -November 24, 2004 -- Expanded the definition of local for such things as "localambientsound" so - that players will still hear the sound if they are looking through a camera. -- Added the summonfriend command. -- Made P_RandomChaseDir() truely random. The only real randomness it had before - was in deciding whether monsters preferred to go east or southeast. - -November 20, 2004 -- Fixed: AInventory::BecomeItem() must remove the actor from all the touching - sector lists. Otherwise, you can get crashes if a floor or ceiling in a - sector touching the item moves later. -- Fixed: Patrols only went to the first goal and then got stuck. -- Fixed: Recurssion when an unloading script tries to change to a different - map. The map change is already under way, so the script cannot start another - map change. -- Moved BasicArmor's PostBeginPlay icon fixing into Tick, so it can cope with - the "give armor" cheat removing the icon when the player already has armor. - -November 18, 2004 -- New ACS stuff: - bool playeringame (int playernumber); - Returns true if the player [0..7] is in the game and false if not. - - bool playerisbot (int playernumber); - Returns true if the player [0..7] is a bot and false if not. - - script unloading - { - ... - } - Executed by the level just before it unloads because the players are - about to move to another one. Everything up until the first latent - function will have a chance to execute. If the script needs to wait, - it will continue execution when the players return to the map. Since - this type of script is executed with the equivalent of ACS_Execute - and not ACS_ExecuteAlways, it can block itself from executing the - next time the level is unloaded if it hasn't finished with its - business yet. - - script (int playernumber) disconnect - { - ... - } - This type of script is executed when a player disconnects in a - multiplayer game (including bots). THIS SCRIPT IS EXECUTED BY THE - WORLD, NOT BY THE PLAYER WHO LEFT. By the time the script is run, - the player is already gone, so you can't do anything to that player. - The number of the player who left is passed as the only argument to - this script. -- Selecting a conversation choice that stays at the same dialogue node no - longer moves the current selection. -- Added a gold display when talking to merchants. -- Fixed: Poison bolts shouldn't kill merchants. -- Fixed: An ActorMover didn't prevent the renderer from interpolating the - actor when it was moved onto the path to start off. -- Fixed: AInterpolationPoint::ScanForLoop() got stuck if the path looped, but - the initial point wasn't part of the loop. -- Fixed: Giving an interpolation point the ambush flag in an editor would - cause it to not join a path. -- Added Graf Zahl's fix for shootable walls with invalid sector tags that - some wads use to make things you can break. Also added a parameter to the - GlassBreak special that you can set to 1 if you don't want it to throw out - any shards. -- Fixed: MF3_NOTARGET should only be respected my monsters of the same - friendliness. -- Fixed: D'Sparil and the Heresiarch always summoned hostile helpers even if - they were friendly. -- Fixed: DCajunMaster::ThinkForMove() needed more NULL checks for the - player's ready weapon. -- Fixed: When using the Tome of Power, only the first weapon in a slot could - be selected with the slot command, because FWeaponSlot::PickWeapon() didn't - consider the powered-up version as a match for the current weapon. -- Fixed: If a player is telefragged and drops a weapon (or anything else), it - can mess up the floor/ceiling determination in P_TeleportMove() thanks to - the heavy reliance on global variables in the physics code. Those make it - very much non-reentrant. -- Fixed: Monsters did not activate player-cross lines when strict checking - was turned off. -- Fixed divide by 0 in the Hexen status bar's DrawKeyBar() method when the - armor slot increments are 0. -- Changed the ACS random command so you can specify the max and min as either - parameter. This fixes a divide by 0 when the maximum is one less than the - minimum (because now the maximum cannot be less than the minimum). -- Fixed PROP_FLY with SetPlayerProperty. -- Removed MF_NOBLOCKMAP from IceChunk, IceChunkHead, the Heretic imp chunks, - Meat, and Junk. -- Removed LEVELINFO_START_TIME, since it's useless outside of timedemo. -- Fixed log HUD messages (and print statements) were logged to the console but - not to the log file. -- Fixed scrolling bounds when automap rotation is on and follow is off. Issues - remaining: The grid in rotation mode only works well if follow is on, and - rotation is relative to the player rather than the center of the screen. I'm - tempted to just rewrite the whole map package to be more rotation friendly - (and be more modular so there could be multiple instances on the HUD, as was - requested a couple of times in the past). - -November 17, 2004 -- Corrected movement of the automap background when map rotate and follow are - turned on. - -November 16, 2004 -- Separated the drawing of HUD messages from the main status bar pass. Now HUD - messages that are meant to be drawn on top of the status bar are drawn on top - of the status bar. - -November 13, 2004 -- Fixed: Dehacked's PatchThing() needs to translate the old damage type flags to - the new damage type value. -- Changed AActor::Die() so it doesn't reset the target if the source is NULL. -- Changed A_CustomBulletAttack() and A_BulletAttack() back to getting their damage - type from the puff, like they (indirectly) did before. -- Added division/modulus by zero checks to all the PCD_DIV/MOD* p-codes. -- New SNDINFO command to deal with several Strife sounds: $singular . - Use this, and only one copy of the sound will play *anywhere*. This is different - from $limit, which is distance based and can stop currently playing sounds. There - are actually a lot of singular sounds in Strife. I only chose to make a few of - them singular, in particular the alarm. TBD: Should new singular sounds cut off - an already playing copy or not play at all? -- Klaxon tweaks: Now klaxons clear off the LastHeard property using the same - recursion that sets it (with P_NoiseAlert). -- Fixed: G_DoReborn() could only fake as players 5-8 when playing Doom or Heretic. -- Fixed: P_SpawnMapThing() calculated the player number wrong for player starts > 4. -- Fixed: AWeapon::AttachToOwner() did not call the status bar's - ReceivedWeapon method. -- Fixed: Even though I fixed the A_CallSpecial parsing, I broke its handling. - -November 5, 2004 -- Corrected the pickup sounds for Strife items. -- Added the MF3_NORADIUSDMG flag to the Inquisitor so he won't kill - himself so readily. -- Fixed: Armorer hair color was wrong. (Cyan instead of gray.) -- Fixed: Starting the game from a fullscreen console with fullscreen false - prevented anything from being drawn, becaues the primary surface would be - lost by the time DDrawFB::PaintToWindow() was reached. - -November 4, 2004 -- Fixed: The C span drawers all drew 64x64 textures in row-major order - instead of column-major order. (They were correct for other sizes, though.) -- Changed the Oracle's spectre (#3) to have MF_SPAWNCEILING and not bob in - its spawn states. Now it behaves more like the Strife original despite - being defined even less like it. -- Increased the opacity of alien spectres to 66%. -- Fixed: A_ExplodeParms() checked against the size of AttackList instead - of ExplodeList, and it had the distance and damage type parameters to - P_RadiusAttack() swapped. -- Fixed player morphing crashing when using the morphme command in a game - that doesn't normally have morphed players. -- Made the Strife burning player more correct: You can run around for a bit - before collapsing, and then you stop flailing your arms around. -- Fixed: I forgot to change the prototype for the Soulsphere's Use function, - so it did nothing. -- Fixed: The AFourthWeaponPiece class destroyed the fourth weapon after giving - it to you if weapon stay was off. -- Fixed: Picking up a torch or light amp while invulnerable cancelled out - the special colormap for the invulnerability effect. -- Fixed: In Doom, you didn't raise your weapon at the start of a new game if - you had neverswitchonpickup on. -- Added the ChangeSky ACS command so that I can remedy another slight Strife - problem: The sky on all maps should become gloomy after killing the - Programmer. -- Fixed: The post-closing Strife slideshow music should be D_FAST, not D_INTRO. -- Fixed: The opening Strife slideshow is supposed to play D_INTRO, not D_DARKER. -- Changed Ceiling_LowerAndCrush so that it uses the same speed for down and - "up", so crushers that stay down can slow down when they hit something. Fixes - the Templar crushers on Strife MAP12. -- Fixed: In Strife, crushing ceilings that don't go back up are supposed to - go to the floor. -- Fixed: Strife linetype 180 didn't copy the sector properties. -- Fixed: Strife instant death sectors were not implemented for the player, and - the damage done by sector type 4 (strobe and hurt) was wrong. - -November 3, 2004 -- Fixed: Talking to friendly PCs made them hate you. -- Fixed: When P_SpawnPlayer() moved a voodoo doll's inventory to the new - player, it didn't fix the items' Owner links. -- Fixed: AAmmo::HandlePickup() didn't check for a NULL ReadyWeapon when - picking up ammo that you had previously run out of. -- Fixed: New check in PlayerLandedOnThing() prevents both *grunt and *land - from being played if they are defined as the same sound. -- Fixed: The minimum velocity P_ZMovement() checks against to decide if your - view should be squatted should not vary with gravity. Same for grunting in - PlayerLandedOnThing(). -- Fixed: The Archvile and Boss Brain did not transfer their friendliness. -- Fixed: Animated door Open/CloseSounds were left uninitialized if the - definition didn't specify them. -- Fixed: AMageStaffFX2::SpecialMissileHit() did the wrong damage type. -- Fixed: Forgot to change the prototype for the Megasphere's Use function. - -November 2, 2004 -- Added HUDMSG_FADEINOUT style HUD messages. -- Added the GetLevelInfo ACS command, which can be used to collect information - before jumping to an intermission-style map. -- Added support for loading 1, 2, and 4 bit PNG images. -- Merged in Graf Zahl's customizable animated doors submission. -- Added the sound effect for Strife's mask powerup. -- Reimplemented water-breathing with the iron feet. -- Fixed: Closing doors made frozen corpses disappear instead of shatter. -- Added fire and disintegration deaths for the Strife player. -- Removed MF2_ICEDAMAGE, MF2_FIREDAMAGE, and GetMod() from AActor in favor of - a DamageType property. -- Fixed: Masked textures visible through multiple skyboxes would be rendered - multiple times. -- Fixed: Skybox planes were drawn in front of any masked textures behind them. -- Fixed: Strife's armor is auto-activated when you pick it up only if you don't - already have some in your inventory. -- Fixed: The ACS ClearInventory command should leave undroppable items in place, - but there is a special exception to zero out the armor slots for a HexenArmor - item, which is almost the same as removing it. - -November 1, 2004 -- Fixed: ArtiBoostArmor didn't work in Hexen. -- Fixed: Hexen players need to start with HexenArmor in their inventory, or else - they won't get their class-specific armor bonuses until they pick up other armor. - Since each player must start with HexenArmor, that means I can make a fifth slot - to hold their class armor and get rid of GetAutoArmorSave(), GetArmorMax(), - and GetArmorIncrement() and make the armor handling somewhat more homogenous. -- Disabled left-right aiming when autoaim is 0. -- Added support for the newer version of the Strife Teaser that everybody but - me seems to have downloaded. -- Changed rail handling to be closer to Strife's: If you approach the rail from - the low side, you can jump "into" the railing. This is still better than - Strife's approach, which lets you jump into rails from either side. It's needed - to get out of an area on MAP04, and possible others as well. Unfortunately, it's - really ugly behavior and will probably be reported as a bug by somebody who - doesn't know why he got stuck in a rail. -- Fixed: P_ChangeSwitchTexture() did not set a value for *quest if no switch - textures were found on the sidedef, so you could get random stat increases in - Strife by breaking two-sided glass lines if only one side of the line had a - "switch" texture. -- Improved the wandering behavior of friendly monsters. Now they use the actual - chase states instead of the look states, so they animate naturally. -- Fixed: P_RandomChaseDir() thought angles were sorted in the wrong order, so it - never picked a random chase direction. -- Fixed: I forgot to flag the DoomPlayer as friendly. -- Added the friendly flag for use in DECORATE. -- Fixed: AWeapon::CreateTossable() let you drop sister weapons independantly from - each other. It should only create a tossable version of the primary weapon and - make the other one go "poof." -- Fixed: Shadow Armor used the same invisibility powerup as Doom. It should be - a separate one, because Strife doesn't have the fuzz effect. -- Fixed: Strife uses a LINEHEIGHT of 19 for its menus, not 16 like Doom. There are - also a few other positional differences between the menus. -- ZDoom now offers the exact same translation tables as Strife, which change the - colors for more than just the player's suit. -- Changed P_RadiusAttack() so that anything that does fire damage does not thrust - the thing it hurts vertically. This fixes the phosphorous grenades' fire. -- Fixed: The Strife grenades should have MF3_CANBOUNCEWATER set so they can bounce - off liquid flats. They're not like Heretic bouncers in this respect. -- Fixed: Strife liquid flats *do* clip sprites ala Heretic/Hexen. I did not - know that. That means the StickInWater also needs to have MF2_FLOORCLIP set. - That also explains why WaterfallSplash doesn't show up in Strife. -- Fixed: StrifePuff should use the same actor-hit animation as StrifeSpark. They - only differ by their non-actor-hit animations. -- Fixed: The surgery kit ought to give you full health, not 100 health. -- Fixed: Flying mini-missiles used the wrong states from StrifePuff. -- Fixed: G_PlayerReborn() only gives the default inventory to the first copy of a - player in a level, which means a voodoo doll can get the inventory, while the - real player gets nothing. P_SpawnPlayer() must check if the player already had - an actor spawned for it and if so, transfer the old actor's inventory to the new - actor. -- Fixed: R_InitFuzzTable() is the wrong place to initialize fuzzviewheight. -- Fixed: The "give armor" cheat gave you the wrong armor. -- Fixed: The Dehacked ammo parser didn't calculate new BackpackAmount and - BackpackMaxAmount values. -- Fixed: A_CheckReload() still had AltFire and PrimaryFire swapped. -- Fixed: The NULL weapon check in P_CheckWeaponFire() was in the wrong spot. -- Fixed: The give cheat gave you X number of item instances instead of just setting - the item's Amount field. The same goes for ACS's GiveInventory command. - -October 30, 2004 -- Fixed: G_StartTravel() should only affect living players. Otherwise, the body of a - dead player will replace the live body that was spawned on the new level and the - player will stay dead. -- Fixed: Strife line type 188 needs to be repeatable so you can cross over it without - QuestItem16 and then cross over it again later with the item for it to have effect. - This opens the door to the castle. - -October 29, 2004 -- Fixed: The idclev cheat needs to call G_StartTravel(). -- Added a BackpackAmount and BackpackMaxAmount to the Ammo definition, so the amount of - ammo received with a backpack can differ from the amount picked up from a base ammo - item, and so the max amount can be configured too. -- Fixed: If you already had enough of something a merchant tried to give you, you would - get both the "enough" response and the affirmative response. -- Fixed: The Sigil was draining armor and not just health. -- Fixed: The Oracle's spectre wouldn't immediately chase after you if you killed the - Oracle with a dagger, and it wouldn't aggressively attack until you attacked it. -- Fixed: Strife floater blocking lines were not properly translated. -- AActor::DropInventory() now clears the MF_NOGRAVITY flag, since several Hexen items - had the flag set. -- Fixed: Not coop/deathmatch thing flags in BOOM maps did not work. MBF's friendly flag - wasn't handled either. - -October 28, 2004 -- Fixed: The player's inventory was wiped out when switching levels in deathmatch. The - player needs to be reborn every time they are spawned in a deathmatch game so that - they can get the default inventory. -- Fixed: P_ThingProjectile() should set the spawned thing's speed only if it is truely - a missile. -- Fixed: FindMostRecentWeapon() failed if a tome-ed weapon was ready. -- Fixed: AInventory::GoAway() returned false for items that should stay. -- Fixed: The flags for maplinedef2_t were signed. They were correctly unsigned for - maplinedef_t. -- Fixed: Ripper didn't set its death state. -- Fixed: GoldWandPuff2 should inherit from GoldWandFX1, not GoldWandPuff1. -- Fixed: AWeapon::CheckAmmo() thought you had enough ammo to use a weapon's alternate - fire mode if it didn't have an alternate fire. Hence, you could e.g. select the poison - crossbow right after receiving Strife's crossbow, even if you didn't have any poison - bolts. -- Fixed: The StrifePuff had the hit actor and hit wall states swapped. -- Fixed: APigPlayer::ActivateMorphWeapon() didn't check if you already had a snout. -- Fixed: The +moveup and +movedown keys only worked under water. -- Fixed: G_FinishTravel() needs to check for NULL duplicate players, which can happen if - a start spot doesn't exist for the player on the new map. -- Fixed: Puzzle items did not define their own use sound. -- Fixed: Most of the Doom powerups were stackable. -- Fixed: The fuzzy column drawer did not correctly clip the bottom of the posts to the - screen bottom of y-doubling was turned on. -- Fixed: The chainsaw's UpSound was mis-spelled as "weapos/sawup". -- Fixed: FindMostRecentWeapon() called P_SetPsprite to drop the old PendingWeapon. - But since it was a PendingWeapon, this meant it wasn't actually visible, so doing so - would change the weapon sprite. Worse, this function is only processed locally, so - it could mess up multiplayer and demos. Now A_Raise() checks for a pending weapon and - starts the current one dropping if it finds one. -- Added a NULL name check to FFont::FindFont() and FWadCollection::CheckNumForName() to - fix Daedalus crashing immediately. To fix it for real, the FBehavior constructor needs - to call UnencryptStrings() before calling FindLanguage(). Otherwise, none of the - strings are available. -- Fixed: Weapons you dropped magically had ammo, so you could cheat by dropping your - weapon and then picking it back up to give yourself more ammo. -- Fixed: DCanvas::DrawTexture() called NetUpdate() when a menu was open. This is bad - because it can cause menu keypresses to be processed during the menu's drawer - function. Specifically, the case that brought the badness of this to my attention - was the Strife conversation menu. If a choice was made while the menu was being drawn, - it would alter the data used for drawing the menu, and it could crash. This is probably - also why the screenshot in the load menu would sometimes disappear after selecting a - game. - -October 27, 2004 -- Fixed: AM_drawThings() drew bounding boxes in the wrong locations if am_rotate - was false. -- Did some miscellaneous GCC 3.4 cleanup. -- Moved the project files out of the src directory and into the base directory. - -October 26, 2004 -- Fixed: AHealth should have a default MaxAmount of 0, not 100, so it maxes out at - whatever the player's current max health is. -- Fixed: Using Dehacked to make an ammo-less weapon use ammo left the AmmoUse1 - property at 0. -- Fixed: A_CallSpecial() parsing was broken. -- Fixed: The peasants are not all the same speed. -- Fixed: A_AcolyteDie() was incomplete. -- Fixed: Light green and blue acolytes are supposed to have 60 health, not 70. -- Fixed: Changing Dehacked MaxArmor did not update ArmorBonus. Changing Dehacked - MaxSoulsphere did not update HealthBonus. - -October 25, 2004 -- Fixed: A_KlaxonBlare() used threshold when it should have used reactiontime. -- Fixed: The KlaxonWarningLight from Strife should not have its initial tic randomized, - so all the klaxons in a level can stay synchronized. -- Fixed: A_ItBurnsItBurns() didn't set the death sound to the burning death sound. -- Fixed: The "peasant/death" sound no longer links to all three death sounds, just the - first one, because that's the only one Strife actually played. -- Fixed: AActor::DropInventory() needs to call P_TryMove() on the dropped item, or - sector information might not be filled out correctly. -- Fixed: After changing item dropping to start the item out as not-pickup-able, - A_Beacon() was no longer able to clear the MF_SPECIAL flag, because AInventory::Tick() - would set it again. A_Beacon() needs to set DropTime to 0 as well. -- Fixed: The final frame for ExplosiveBarrel2 was fullbright. -- Fixed: If a powerup was blinking and you used an item to restore it, APowerup:: - HandlePickup() would restore the powerup without actually using the item. -- Fixed: AInventory::Tick() and AInventory::CreateTossable() now handle solid items - (specifically, the Degnin ore). -- Fixed: ASigil::SpecialDropAction() now gives a Sigil piece to every player in the - game. Previously, it tried giving it only to whoever the Sigil dropper was - targetting. If the monster was killed quickly enough, it was possible for it to - be targetting nothing at all. And there was also the possibility for it to be - targetting a non-player. -- Added a NULL player check to AWeapon::AttachToOwner(). -- Added IF_ALWAYSPICKUP for auto-activated items that you can have a maximum of 0 of - (such as the armor bonus), so you can take them off the map even if you don't really - need them. AHealth::TryPickup() also uses it for the Doom health bonuses. -- Fixed: Doom HUD crashed when trying to draw an inventory item without a valid icon. -- Fixed: ArtiBoostArmor tried to give the player BasicArmor instead of a - BasicArmorBonus when not playing Hexen. -- Fixed: A_FireCGun() could crash if the weapon's state was before the first - attack state. -- Fixed: Monsters always activated player-cross lines. -- Changed ArtiInvisibility to give you the newly added PowerGhost instead of - PowerInvisibility. Now you can use both types of invisibility without being - restricted by whether or not you are playing Heretic. -- Fixed: I forgot to make PowerupGiver's EffectTics do anything. Also added - BlendColor to PowerupGiver at Graf's suggestion. -- Fixed: I forgot to add IF_PICKUPFLASH for the Speed Boots and Tome of Power. -- Changed P_DamageMobj() so that spectral entities are subject to non-spectral - damage if the damage amount is one million or more. This lets P_Massacre() - kill them. -- Fixed mobj_statenames[] array in thingdef.cpp -- Fixed: I forgot to add a case for ADEF_MinMissileChance in infodefaults.cpp. - -October 21, 2004 -- 2.0.91 time, just so people stop posting the same crash log. -- Added a pickup delay after dropping, but it still seems to be problematic. -- Fixed: Classic BEHAVIOR lumps weren't having their scripts sorted. -- Fixed: P_TestActivateLine() always returned false for SPAC_MCROSS lines if the - ML_MONSTERSCANACTIVATE line was not set. -- Fixed: A_Wander() now clears the MF4_INCOMBAT flag, so you can talk to peasants - after fighting in their vicinity. Strife does not clear this flag there, nor do - I know if it ever cleared it anywhere. -- Fixed: AInventory::GoAwayAndDie() left the MF_SPECIAL flag set, so it was possible - for a player to try to pick up the item in the next tic before it destroyed itself. -- Fixed: AHealthTraining::TryPickup() ignored its superclass's return value. -- Fixed: Intermission screen tried to show post-E3 maps in Heretic. -- Fixed: Now that FWadCollection::FindLump() ignores lumps outside the global - namespace, skins couldn't be loaded. -- Fixed: PROP_Weapon_YAdjust used an unsigned byte, so negative yadjusts didn't work. -- Changed the size boxes around actors in map cheat view into a real feature instead - of something I quickly threw in for debugging. It's now accessed with am_cheat 3 - and works properly with rotating maps. -- Fixed: FActorInfo::BuildDefaults() checked ADEF_SkipSuper as a byte instead of - a word. -- Fixed: The artifact flash was not cleared from the Raven status bars when the - last item was used. -- Fixed: A_CustomBulletAttack tried to use A_CustomMissile instead. -- Fixed: New flag4 names in thingdef.cpp. -- Fixed: Cyberdemon was MF4_LONGMELEERANGE instead of MF4_MISSILEMORE. -- Fixed: Fullscreen inventory bar positions were wrong in Doom. -- Fixed: Hexen armor was quite broken. -- Fixed: S_StartSound() no longer tries to play sound ids below 0. -- Fixed: Terrain splash sounds were initialized to -1 instead of 0. - -October 20, 2004 -- Time to release 2.0.90, I think? -- Added some Strife keys to the controls menu. -- Did more work on the Strife status bar. I think it's feature complete now. -- Finished reimplementing the Heretic status bar. -- Made cholycount, mstaffcount, and flamecount local to the weapons that use them - instead of the players who fire them. The rain1 and rain2 members are now stored - in the shooter's inventory instead, so it should be safe to use the rain with - monsters. - -October 19, 2004 -- Added extrapolation for the Strife popscreen scrolling. - -October 14, 2004 -- Fixed: Using -warp with an ExMy game and only providing the map number only worked - if -warp wasn't the last parameter on the command line. -- Updated some powerup-related code for the new inventory system. - -October 12, 2004 -- Fixed: Quitting a game and returning to the title screen would not zero the - palette blend. -- Fixed: Missiles disappearing on horizon lines were still exploded. - -October 8, 2004 -- Added a scrolling effect for switching between pages in the keys pop screen. - -October 6, 2004 -- Fixed: Missiles with MF2_BOUNCE2 set did no normal damage. -- Added particle blood for the Heretic/Hexen blood functions. -- Added a fix for negative row offsets to non-power of 2 height textures. -- Continued my R_FakeFlat() fix from yesterday: It didn't copy the control sector's - lighting either. -- LEVEL_SWAPSKIES is now ignored if LEVEL_DOUBLESKY is set. -- Fixed a possible crash in SC_GetString() if whitespace is the last character(s) - in a script. -- Fixed the sliding along diagonal walls behavior in P_HitSlideLine() so that it - uses correct math. (from code submitted on the forum) - -October 5, 2004 -- Removed MF_NOBLOCKMAP from ColonGibs, SmallBloodPool, BrainStem, and BloodPool. I - can't see any good reason for them to have this flag set. -- Fixed: player_s::Serialize() set PendingWeapon to WP_NOCHANGE. I have no idea why. -- Added a playing of "minotaur/attack3" to A_MinotaurAtk3(). -- Fixed: R_FakeFlat() did not set FakeSide to FAKED_BelowFloor when viewing a - fake plane with SECF_CLIPFAKEPLANES and SECF_FAKEFLOORONLY set and the fake floor - was above the real ceiling. -- Fixed: DArgs::GatherFiles() would hang on files with unexpected extensions. -- Autostarting games (i.e. co-op) of Hexen now use the map set as the first map, - so you can play co-op Deathkings without knowing Deathkings starts on MAP41. -- Added range checks to C_DoKey(), C_ChangeBinding(), and C_GetBinding(). -- Fixed integer overflow in P_SetSlope() for very extreme slopes. -- Stopped outputting the exception information to the crash log for an - EXCEPTION_ACCESS_VIOLATION when run under a pre-NT kernel, because those seem to - fill it with 0xFF instead of anything meaningful. - -October 4, 2004 -- Fixed: The mace death ball did full damage to teammates. -- Fixed: The font translation builders counted the transparent color as a visible - color and erroneously included it in the calculations, making every range lighter - than they should have been. -- Fixed: Giving the player a weapon when they were not already using one would not - bring the weapon up. (Note: Not bringing the new weapon up if the player is - already using a weapon is normal behavior.) -- Fixed: PickNextWeapon() and PickPrevWeapon() crashed when the player had no - ready weapon. -- Changed MakeKey to return a value of 0xFFFFFFFF for NULL strings. -- Changed the centerview command to send a DEM_CENTERVIEW event instead of using the - ticcmd_t structure to do it. Now it works while the game is paused. -- Changed particle visibility calculations so they use r_SpriteVisibility instead of - a separate variable pre-multiplied by 2. So now there is no r_ParticleVisibility - to overflow. -- Removed the 3-digit restriction on large fullscreen HUD numbers. -- Fixed: G_LoadGame() did not check for a NULL name. -- Added the -nojoy command line parameter to disable the enumeration of joysticks, - effectively disabling joysticks regardless of the use_joystick cvar. -- Reduced the maximum FOV from 175 to 170. -- New: With the (non-overlayed) automap on, a cut-down rendering process is performed - so that the automap can update while you move around. -- Fixed the switch and animation parsers so they can use overridden textures. -- Changed the warp command so that it gets sent across the loopback device. -- Changed the default item respawning behavior so that the dmflag is observed in all - multiplayer games, not just deathmatch. -- Fixed: Thing_Projectile did not set the projectile's speed. -- Fixed: The banishment device did not work on non-monsters. Normally, that's okay, - but it didn't work on players either. -- Fixed: Ambient sounds in Doom-format maps could prevent players from spawning. -- Fixed: The scripted version of Scroll_Texture_Both now checks to make sure the - specified line side is valid. -- After P_SetupLevel() calls P_LoadThings(), it now sets the healths of the players - to match their actors, in case their voodoo dolls were were fragged during the - spawn process. (Plutonia MAP06) -- FindShortestTextureAround() and FindShortestUpperAround() now return the height of - the null texture if none of the sector's side have a corresponding texture. -- Changed the minotaur drops so that (1) Minotaur always drops and (2) MinotaurFriend - never drops. -- Added a dummy actor with doomednum 32000, so Doom Builder's camera won't show up - in maps. -- Added a minimum screen size of 320x200 to the Win32Video mode enumerator. - -September 29, 2004 -- Removed the bStaticName texture flag. -- Added support for autoactivating items with a MaxAmount of 0. This lets me use the - same armor classes for Strife (which can stack armor) and Doom/Heretic (which cannot - stack). - -September 28, 2004 -- Merged in my the old Linux changes I made just after releasing 2.0.63. - -September 7, 2004 -- Stopped "*** SOUND DEBUG INFO ***"'s flashing. -- Changed the default resolution from 320x200 to 640x480. -- Added some sound precaching now. Sounds that are stored in an Actor's members - are now loaded at level load time, and those that aren't are unloaded. Is this - enough or should I also scan scripts for strings that could be sounds? -- Fixed a bug I added when I fixed the palette scrambling just after switching to - fullscreen mode. The WM_PALETTECHANGED message could be received during a drawing - operation, but it was still handled immediately anyway. So after doing that, the - screen would no longer be locked, and drawing operations would be referencing a - NULL pointer. Now the reosurce freeing and restoring waits until the next Lock call. - -August 31, 2004 -- Fixed: The vampiric mode of the serpent staff brought you down to 100 health if you - were over it. - -August 25, 2004 -- Fixed: PIT_CeilingRaise would move overlapping things that did not have MF2_PASSMOBJ - set. -- Fixed: Selecting an episode not present in the shareware Heretic told you you needed - to buy Doom. -- Fixed: PTR_UseTraverse didn't consider ML_BLOCKEVERYTHING lines to be blocking. -- Fixed: PTR_AimTraverse didn't consider ML_BLOCKEVERYTHING lines to be blocking. -- Fixed: After pressing +use to load a save game after you die, +use would still be - down after the load finished, and you could open doors immediately. Nasty if there - was some mean thing behind the door all set to kill you. -- Fixed: Sector special transferring moving floors also copied a sector's secret flag. -- Changed the player setup menu to use the arrow cursor instead of the skull cursor. -- Changed FWarpTexture::MakeTexture() to allocate a temporary buffer instead of using - a fixed sized 256-byte one. -- Changed sprite flipping so it flips the sprite's left offset too. -- Fixed: You could use items on the intermission screens between levels. -- Changed the ACS thingsound command to use CHAN_AUTO like the other ACS functions. -- Fixed: Flying things could get stuck inside rising floors. - -August 14, 2004 -- Fixed sign problms with door light tags. -- Fixed: PIT_CheckOnmobjZ()'s "under thing" check used < instead of <=. This - is why falling stacks of monsters would get stuck and be unable to move. - -August 10, 2004 -- Added support for drawing masked and translucent flats that are part of - a stack. The amount of translucency is controlled by the first argument - of the 9077 and 9078 things. At the moment, this is only for unsloped flats. - -July 29, 2004 -- Added checks in AAmbientSound::(De)Activate so that you can't activate it - when it's already activated or deactivate it when it's already deactivated. -- Fixed: addmenukey did not ensure that the ControlsMenu.items pointed to the - first entry of CustomControlsItems, so if you added too many controls and the - array needed to resize, the ControlsMenu would no longer point to valid data. -- Did some fullscreen palette work now that I somehow ended up with a program - that _always_ blows up my palette within a second of switching to fullscreen - mode. Now when the game receives WM_PALETTECHANGED messages from other windows - while it's fullscreen, it immediately queues up a palette update event to - undo what the other window did. Other programs shouldn't be messing with - the palette when they don't even have the focus, but this obviously doesn't - stop them from doing it anyway. :-( Hopefully, this makes vid_palettehack - obsolete. Also added vid_showpalette cvar to draw the palette to the screen - for debugging purposes. Thanks to that, I can see that the first and last 10 - colors are being kept at the standard system palette colors after some other - program alters the palette in fullscreen mode, and no amount of - IDirectDrawPalette::SetEntries() calls will change them. I need to release - and recreate my surfaces and palette, or I won't be able to touch them. -- Added separate rgamma, ggamma, and bgamma cvars to control the gamma of - individual color components in fullscreen mode. These are multiplied to - with the gamma cvar, so that cvar still controls the overall gamma. I need - this because my monitor is extra green, and the drivers don't gamma adjust - paletted displays for me. - -July 28, 2004 -- Stopped using FSOUND_Sample_Upload for everything. It seems to be even more - broken with the latest FMOD. - -July 26, 2004 -- Added a NULL pointer check to the main P_TraceBleed function that takes a - target, because D-ONAHD can cause this to happen some times when the imps - shoot their BFGs in A_BFGSpray. So linetarget also gets copied to a local - variable before being used in A_BFGSpray, since P_DamageMobj apparently can - change it. -- Updated the FakePickup and DehackedPickup classes so that they work with the - new inventory system. -- Added coop starts 5-8 for Strife because they're on the Bishop's Tower map - for some reason. -- Finally added the special deathmatch logic for the enemy-finding used by - rebels spawned from a teleporter beacon. - -July 22, 2004 -- Fixed the default Heretic MAPINFO: The episode 5 maps are supposed to play the - music from episode 2 (not 1), and the episode 6 maps didn't have any music at - all. -- Fixed: The Heretic ambient sounds were off by one. -- Changed the default for opl_freqeuncy to 49716, since that's the rate the - chip actually played at in SoundBlaster/AdLib cards, and the emulator performs - very poorly when it needs to downsample. Also added new OPL frequencies to - choose from in the menu. -- Fixed: OPLmusicBlock::ServiceStream could crash on non-looping songs, because - the return value FALSE was never passed along to tell FMOD to stop the stream. - -July 19, 2004 -- Changed DDrawFB::LockSurf so that a result of DDERR_UNSUPPORTEDMODE when - trying to recreate a surface is non-fatal. The game should now be able to - survive a screen saver and power suspend. -- Reimplemented the key display on Doom's status bar. - -July 16, 2004 -- Reimplemented the Hexen status bar's key bar. Also improved the status bar so - that it can show ammo from other games. -- Fixed the ammo and key displays for Heretic's status bar. Plus, now Heretic's - status bar will properly update when you lose a key, which it didn't before. -- Reimplemented the invulnerability powerup. - -July 15, 2004 -- Fixed: Morphing a monster and then using the kill monsters cheat would crash - because the original unmorphed version would be destroyed, then when the - morphed one died, it tried to destroy the original again, because the - pointer hadn't been set NULL yet. Since the actual crash is from unlinking the - actor twice, AActor::Destroy() now sets MF_NOSECTOR and MF_NOBLOCKMAP after - unlinking an actor. -- Fixed: Trying to use "-" as a sky with MBF's 271/272 linetypes crashed. Now - it ignores the control line and just draws a normal sky. -- Fixed: G_DoReborn() needs to do a complete new game, not just a reload of the - current map, if the player is dead and wants to respawn without a most recent - save. -- Changed FWadCollection::FindLump() so that it only returns lumps that are in - the global namespace. Now it won't return lumps that got moved into a skin - namespace. On a related note, FWadCollection::SkinHack() now prints a warning - when it thinks it finds a skin wad with maps in it. -- Fixed: The "you are here" marks on Heretic's inter-level maps were no longer - drawn. -- Updated to FMOD 3.73. - -July 14, 2004 -- Moved the full-screen HUD coordinate logic out of DBaseStatusBar and into - DCanvas::DrawTexture. This is so that powerups can draw their status icons - themselves without needing to hook into the status bar. -- Reimplemented the Tome of Power. -- Removed DCanvas::DrawPageBlock(). - -July 13, 2004 -- Fixed positioning of ML_DONTPEGBOTTOM for lower textures. Putting a sky - ceiling on both sides of the line always makes unpegged positioning - relative to the back sector's ceiling, not just when the back ceiling is - above the front ceiling. -- Fixed: Saving a game would momentarily stop floatbobbers from bobbing. - Since actors have a FloatBobPhase member, their height doesn't need to be - adjusted when serializing them. (However, since the adjustment just gets - undone, I'm not sure why it was a problem.) -- Fixed 16-rotation sprites so that the rotation boundaries are where you would - expect them to be. -- Re-Fixed: CT_Drawer could try drawing the scoreboard when deathmatch is - true, but you hadn't started a game yet. -- Added the inverse video flash when firing the Sigil. -- I don't know why the Oracle's spectre is able to teleport across its - monster blocking lines, so I've given it the MF3_NOBLOCKMONST flag. -- Translucency of things in Strife has been corrected. Strife uses 25%/75% - translucency. Walls are 75% and it's flipped to 25% for sprites. However, - the spectres are really hard to see, so I've given them 33% translucency. -- Added genuine Strife falling damage. It is extremely unforgiving, so you'd - better try not to fall too far while playing Strife. -- Added the yellow and red colors for the Strife health bar when your health - drops to 20 and 10 respectively. - -July 12, 2004 -- Finished a play through of Strife, from beginning to end. (Woohoo! It works!) - Now to finish the things that aren't quite right... -- Miscellanoues Strife bug fixing. - -July 10, 2004 -- The eight SPAC type has now been assigned: SPAC_PTOUCH, for when projectiles - either impact or cross a line. Strife line type 182 needs this. - -July 9, 2004 -- Miscellaneous Strife fixing. -- Better support for not having a ready weapon at all. -- Changed the Sigil to use the normal weapon sprite instead of the flash - sprite to show how many pieces you have. - -July 8, 2004 -- Fixed: Interpolations were not cleared when loading a brand-new level. -- Added support for snesapu.dll 2.0, which happened to be as simple as - changing the version check, since none of the changes from 1.01 affect - the functions I use. - -July 7, 2004 -- "Fixed:" Missiles that moved perfectly vertical would do no damage. Now - missiles without any x/y velocity are given a very small x/y velocity so - that they are not quite moving vertical. -- Added the GetSigilPieces() ACS command, which returns the number of Sigil - pieces the activator has obtained. -- Added a third parameter to Teleport_NewMap that, when set to TRUE, will - cause the player to keep their current facing when they move to the new map. -- Added the Hexen intermission text between hubs that I had forgotten about. -- Added map redirects, so if a player is carrying a particular item, they go - to a different map instead. (Used for Strife maps 3 and 7.) - -July 6, 2004 -- Added support for the teaser version of Strife. It seems to be based on an - older version of Strife than the one that was released to retail, so the - mobjinfo list is different, the dialogues are slightly different, and some - items have different names. The Teaser is fully playable. - -June 30, 2004 -- Added Strife's fire and disruptor deaths. -- Corrected the missile attack chances for the Strife monsters. - -June 26, 2004 -- Added Strife's breaking glass. - -June 25, 2004 -- Added a fix for Strife's LASERB01 texture. The Doom renderer ignored patch - y offsets on masked mid-textures, so it got drawn as if the beam was at the - top of the texture instead of the bottom. The "fix" is to adjust the rowoffset - of the sides that it appears on. - -June 24, 2004 -- Made some corrections to the Strife blood and bullet puffs. -- Removed the global variable PuffType. It's now a parameter to those - functions that use it. HitPuffType is also gone, because giving a puff a - CrashState can make the same distinction. -- Added Strife's scanner. -- Added Strife's targeter, although it's kind of a useless item when the - player can just go to the options menu and turn on a crosshair. - -June 23, 2004 -- Added th IF_INVBAR flag so that only selected items show up on the inventory - bar. - -June 21, 2004 -- Removed the soundtarget sector property and made it an actor property. Now - newly spawned actors won't wake up if you happened to make noise near their - spawn point earlier. - -June 20, 2004 -- Fixed: A_FreezeDeathChunks could divide by zero for very small actors. -- Fixed: The EndPic "map" in mapinfo didn't work. It always tried to show the - graphic "endseq" instead of what was specified in MAPINFO. - -June 19, 2004 -- Finished adding all of Strife's slideshows. - -June 18, 2004 -- Removed F_DrawPatchCol, since DrawTexture can do its own clipping. - -June 15, 2004 -- Added the Sigil, except for the inverse colors when shooting it. Does anyone - else think its fourth mode really weak compared to the third and fifth? - -June 10, 2004 -- Moved the chicken speed mods out of P_MovePlayer and into - AChickenPlayer::TweakSpeeds. -- Added a check for NULL cameras to the very end of CT_Drawer() where it checks - to see if the scoreboard should be shown. -- Fixed: Trying to activate some manual types of specials would activate every - tag 0 sector in the map if the back sector was already moving. -- Added support for paths with . in them to DArgs::GatherFiles when it checks - if a file was specified with an extension or not. -- Added support for \ as a path seperator in DefaultExtension on Win32. -- Added the vid_displaybits cvar to control how many bits per pixel the - fullscreen display gets created with. The game is still rendered in 8-bit, - but this is for the benefit of cards that don't support that or work better - with non-8-bit displays. -- The vid_attachedsurfaces cvar is now ignored unless you are running NT 4. - -June 9, 2004 -- Fixed: FDynamicColormap::BuildLights() did not check for a NULL Maps pointer. -- Fixed: Masked textures and sprites were not drawn correctly inside nested - skyboxes because they would be drawn in the front skybox before drawing the - second skybox, so the second skybox would cover up the ones in the first - skybox. - -June 2, 2004 -- Removed all the other network commands related to managing weapon slots. - Determination of which weapon to switch to is now done entirely on the - local machine and sent using DEM_INVUSE, so the slots don't need to be - replicated to the other players. - -May 28, 2004 -- Removed DEM_WEAPSEL as part of the inventory rewrite. DEM_INVUSE works - instead. This also means the weapon console command is no more. - -May 18, 2004 -- Added division/modulus by zero checks to the ACS VM. -- Implemented the ACS_ExecuteWithResult special so the Strife specials - implemented in ACS can function correctly. - -May 17, 2004 -- Removed the TeleportSide global variable and made it a line special parameter, - which it should have been from the very beginning. -- Increased the limit for local script variables from 20 to 65535. - -May 11, 2004 -- Added Strife's delayed damage sectors. -- M_ActivateMenuInput now resets the state of the game buttons, so +use will - work right away after talking to somebody. -- Added another validity check to FPatchTexture::MakeTexture to make sure the - column doesn't go past the end of the patch when fed bad data. -- Added Strife's merchant conversation animations. - -May 7, 2004 -- Added Strife's animated doors. - -May 6, 2004 -- Added support for clipping midtextures on all lines, because I think Strife - looks better that way. (Even though it looks like Strife does not do this.) -- Added Strife's railing and floater-blocking line flags. -- Add Strife's status bar popup screens. - -May 5, 2004 -- Moved artifacts to the new inventory system. - -May 1, 2004 -- Fixed: Build palette loading was unreliable after adding desaturation support - to Sector_SetColor. - -April 30, 2004 -- Did some work on Strife's status bar. - -April 25, 2004 -- Added Strife's title sequence. - -April 21, 2004 -- Added Degnin Ore. - -April 20, 2004 -- Added lots of Strife line specials, ~30 done entirely through ACS. -- New ACS p-codes: - PCD_CASEGOTOSORTED: Faster replacement for PCD_CASEGOTO. - PCD_LSPEC5RESULT: Same as PCD_LSPEC5, but the result of the special's - execution is left on the stack. -- New ACS internal functions: - int GetLineRowOffset (); - Returns the front side's rowoffset for the activating line. - - fixed GetActorFloorZ (int tid); - Returns the highest floor point underneath the actor. - - int GetActorAngle (int tid); - Returns the actor's angle. 65536 is 360 degrees. - - fixed GetSectorFloorZ (int tag, int x, int y); - Returns the sector height (fixed point) at coordinates (x, y). - (x, y) are not fixed-point, so you should specify (32, 16) - instead of (32.0, 16.0). - - fixed GetSectorCeilingZ (int tag, int x, int y); - Same as GetSectorFloorZ, except for ceilings. - - void SetResultValue (int value); - Set's a script's "result value." Needs to be used before any - functions that make the script wait. ACS_ExecuteResult and - ACS_LockedExecuteResult will return this value. - -April 12, 2004 -- Changed the respawnmonsters flag into an int that holds the respawn - interval, since Strife respawns at 16 second intervals, and Doom uses - 12 second intervals. - -April 11, 2004 -- Added Strife's Templar. - -April 10, 2004 -- Added Strife's Loremaster and Stalker. - -April 9, 2004 -- Added Strife's ceiling turret and fixed the alarm klaxon. -- Added the Strife quest items. - -April 8, 2004 -- Converted keys to the new inventory system and added Strife's. - -April 7, 2004 -- Added Strife door sounds. - -April 6, 2004 -- Added Macil. - -April 2, 2004 -- Converted the Heretic and Hexen artifacts to the new inventory system. - -March 31, 2004 -- Converted Doom's powerups to the new inventory system. - -March 30, 2004 -- Converted armor and health to the new inventory system. - -March 26, 2004 -- Fixed: The mauler's secondary fire had the wrong states. -- Started transitioning over to the Unreal-like inventory system, starting - with the easiest first: Puzzle items (since they basically just sit in your - inventory until used), then ammo and the backpack. -- Made the dialogues prettier with shadow boxes behind the text. - -March 23, 2004 -- More dialogue work: Now you can pick responses to the things NPCs tell you - and drive the conversations along further. You can also get items from the - responses. However, item checks aren't in yet, so no item-specific dialogue - branches work. -- P_NoiseAlert now sets a new object flag, OF_IsSoundTarget, so that - soundtarget clearing will work with non-players. -- Changed P_NoiseAlert( self, self->target ) in A_AlertMonsters() to - P_NoiseAlert( self->target, self ), so monsters will target the player - who shot the projectile instead of the projectile itself. - -March 22, 2004 -- Started work on the Strife conversation system. You can now +use things and - they will say something to you, but you can't do any sort of conversing yet. - Plus, Strife monsters now drop stuff when they die. -- Added autoloading of voices.wad when playing Strife. - -March 17, 2004 -- Changed COMPATF_NOTOSSDROPS behavior so that the items spawn at the monster's - feet instead of on the floor. -- Changed the maximum thrust in P_DamageMobj() to 10*FRACUNIT. (Previously, it - was only clamped to this if it was so large that it went negative.) -- Added AmmoPics for the Strife ammo types. -- Fixed: The phosphorus grenades used the HE grenades pickup message. -- Added some code from P_SpawnProjectile to P_Thing_Projectile so that it can - support floor/ceiling huggers. - -March 13, 2004 -- Fixed: ARealGib's PROP_SpawnState was accidentally deleted. -- Fixed: P_Thing_Projectile always returned false when spawning non-missiles, - and when spawning missiles, only returned the status of the last missile. -- Fixed: P_SpawnPlayerMissile used the original angle instead of the aimed - angle to rotate the projectile in the X-Y plane. -- Fixed: AHolySpirit::SpecialBlastHandling() compared "< BLAST_FULLSTRENGTH" - instead of "== BLAST_FULLSTRENGTH". -- Changed the parser for SS_CMD_VOLUME in s_sndseq.cpp to use a floating point - division instead of an integer division. (Whoops!) -- Fixed: Pressing backspace on a file in the save game menu and then answering - "no" when asked if you really want to delete the file would mess up the - savegame menu. -- Removed the WeaponNames array from p_acs.cpp, because wpnlev1info provides - the same information. - -March 8, 2004 -- Removed WIF_FIREDAMAGE, as it was unused. -- Changed AWeapon::OldStyleID() so that it is no longer virtual. Instead, it - searches the wpnlev1info array to find the info that points to that class. -- Replaced A_CallSpecial and A_Script keywords in the thingdef parser with - support for using specials by name. (e.g. Instead of using - A_CallSpecial (80,...) or A_Script (...) you use ACS_ExecuteAlways (...) - instead. -- Changed SC_ScriptError to be varargs, so passing parameters for the format - string is more straight-forward. - -March 3, 2004 -- Eliminated the CustomActor class by moving some of its data into class - metadata and the rest of it into function parameters. Now custom actors - can properly derive from built-in classes. -- Replaced A_Explode in thingdef.cpp with A_ExplodeParms, so the explosion - parameters can be a property of the state instead of a property of the - actor. -- Renamed __BIG_ENDIAN__ to WORDS_BIGENDIAN to match autoconf's name for the - #define. - -March 2, 2004 -- Added metadata support for TypeInfo, so classes can carry metadata around - with them. This is intended to allow actors in DECORATE to properly derive - from built-in actors. Whenever a scripting language for DECORATE gets - implemented so that everything can be defined there instead of in C++, the - metadata should no longer be needed. - -February 10, 2004 -- Upgraded to zlib 1.2.1. -- Merged in Graf Zahl's additions to thingdef.cpp. -- Fixed: Heretic wind specials would effect you while you were underwater. - Also turned off the Heretic wind for noclipping things. -- Added a check for empty subsectors to P_LoadSubsectors. - -February 6, 2004 -- Fixed: DObject::IsKindOf used StaticClass instead of GetClass. -- Added Graf Zahl's thingdef.cpp implementation and modified it to work with - a more C-like mode in sc_man. -- Fixed: P_CheckFakeFloorTriggers could crash if the action caused the player - to teleport to a new sector without any sector actions. -- Fixed the Hexen armor depletion so that it doesn't overflow on very large - damage amounts. -- Fixed: An extremely dead imp that crashes before executing A_ImpXDeath2 would - get stuck floating in the air. -- Changed menuactive into an enum and merged WaitingForKey into it. Now closing - the menu automatically disables the menu's key waiting mode. Also fixed, - C_ToggleConsole so that the console can never be dropped down while the menu - is open. Before, it was possible to do this by pressing Esc and ` during the - same tic. - -February 5, 2004 -- Altered the BOOM pusher/puller/current effects to apply to anything with - MF2_WINDTHRUST and removed the restriction that it doesn't apply to things - with MF_NOGRAVITY. To make it work, I also had to remove MF_NOBLOCKMAP from - all the wind-thrustable Heretic/Hexen projectiles. -- Fixed: Using the spray command with a non-existant decal crashed. - -February 3, 2004 -- Removed r_experimental. - -January 29, 2004 -- Added the -oldsprites command line argument to rename sprites in all - wads instead of just sprites in the IWAD. -- Changed Heretic's knight sounds to be prefaced by hknight/ instead of - knight/. -- Changed the Strife weapon names for the ACS inventory commands to match - their actor names. -- Added Hexen's water drip (spawnnum 95). Changed the Hexen WATR->UWAT - renaming to WATR->HWAT. -- Added a note to the map command that suggests you use changemap instead - while playing a network game. -- Fixed: Chat mode could not be used outside of an actual level. -- Fixed: The automap still tried to draw teleporters with custom colors even - when am_usecustomcolors was false. -- Fixed the Hexen armor saves so that it doesn't overflow on very large damage - amounts. -- Put back the AKey::TryPickup restriction on picking up more than one key of - the same type, but now it's restricted to multiplayer games only. Single - player will still be able to pick up more than one. - -January 26, 2004 -- Fixed: FLOATRANDZ overflowed when the space between ceiling and floor was - more than 297 units. - -January 22, 2004 -- Fixed: side_s::GetLightLevel() got the light of "sidedef" instead of "this". -- 2.0.61 -- Optimized R_PrecacheLevel() so that it does not unload graphics that are - definitely used on the level. -- Optimized the primary loop in P_GroupLines() so that it is much faster on - large maps. It was previously O(m*n); now it is O(m+n), and Vrack 3 loads - in well under a second. -- Changed the Heretic's imp's sounds to use the himp/ prefix instead of imp/. - -January 21, 2004 -- Fixed: The Heresiarch's spell balls above his head did not update their - sector information as they rotated. Neither did his shield balls. -- Fixed silent teleporter orientation in EV_Teleport(). -- Fixed calls to P_Teleport() in a_korax.cpp and a_teleportother.cpp that used - weird parameters. -- Changed FDecalLib::GetDecalByName() so that it does not call GetDecal() on - the decal it finds, so it can be used to get decal groups. -- Fixed: Saving a game on one version of a map, then adding a BEHAVIOR to it, - then reloading would not fully invalidate the player when starting a new - game after the resulting error message. (G_NewInit now initializes players - to PST_DEAD). -- Added a screenshot_dir cvar to allow automatically-named screenshots to be - saved somewhere other than the current directory. -- Fixed: M_ScreenShot left the display locked if it could not open the file to - write to. -- Added decals for the marine hitscan weapons. (I think it's funny that the - term "hitscan" has come to be used to describe Doom's instant-hit weapons - even though it comes from Build. :-) - -January 17, 2004 -- Fixed: PIT_CheckOnmobjZ would not let things stand on corpses. -- Fixed a bug in A_MinotaurLook where I forgot to convert a special1 reference - to a tracer reference. -- Fixed: Obituaries were shown when voodoo dolls died. -- Fixed: Light_Fade and Light_Glow divided by zero when using zero as the - tics argument. -- Fixed: Killing a PlayerPawn that isn't attached to a player crashed. -- Fixed: Summoning before starting a game crashed. -- Fixed: Block everything lines did not block railguns. - -January 13, 2004 -- Fixed: +moveup and +movedown did not work with the fly cheat. -- Fixed: The Sentinel was missing the MF_DROPOFF flag. Also reduced its - "bouncing" when it was in a float. I still wasn't satisfied with that, so - I took its MF_FLOAT bit away. -- Fixed: The Strife flamethrower's refire state wasn't using frame B. -- Fixed: Acolytes only used frames A and B in their chase states because I - forgot to change them when copying and pasting. -- Removed the nightmare warning when starting a bloodbath game in Strife. -- Fixed: Nightmare skill ignored the starting map defined with episodedef. -- Changed sv_fastweapon 2 handling so that it only applies to weapon - psprites and not flash psprites. -- Changed Thing_Activate/Deactivate so they can be used to prevent frozen - corpses from shattering automatically after a delay. (They can still be - shattered by shooting them or pushing them off a ledge, however.) - -January 12, 2004 -- Changed AKey::TryPickup so that it doesn't fail if the player already has a - key of the same type. -- Fixed: The TranslucentLine special could not used in a script if a line was - used to activate the script. -- Changed the damage amount for automatic death from 10 thousand to 1 million, - for people who like really strong monstres. - -January 8, 2004 -- Added some more player properties that let you add and remove player powers - through ACS. -- Renamed pw_shield and pw_health2 to pw_unused1 and pw_unused2 because Heretic - never used them. For the sake of savegame compatibility, they have not been - removed. -- Changed the dragon skin bracers so that when they're used outside of Hexen, - they add 50 points of armor. Also changed the armor bonus so that if you have - more than 200 armor points, picking one up won't drop you down to 200. -- Added the WIF_AMMO_OPTIONAL flag so that the fighter's hammer and axe can be - specified as using ammo so that they show up in Doom's fullscreen HUD. -- Changed masked texture drawing so that Y offsets behave like any other walls: - by texel unless the texture requests otherwise. -- Changed APuzzleItem::ActivateArti() so that it always plays *puzzfail if the - puzzle item could not be used. -- Fixed: Splashing on a fake floor with SECF_CLIPFAKEPLANES set would use the - main sector's floor terrain instead of the control sector's floor terrain. -- Moved even more functionality out of A_WeaponReady so that weapon ready - animations can use delays longer than one tic and still fire well. -- Fixed my September 25, 2003 "fix" of the massacre code so that it doesn't - make already dead bodies shootable. -- Changed P_SightCheckLine() so that it also uses the absence of ML_TWOSIDED as - an indicator to stop the search, as it did a long time ago. -- Fixed: A_M_Refire did not terminate the attack if the marine had no missile - attack and the target had moved out of range. -- Fixed: DTA_VirtualHeight scaled the texture's y location by the display's - width instead of its height. -- Added sprite renaming so that unique actors can use unique sprites. Only - sprites in the main IWAD are renamed, so if you want to supply a new sprite - in a PWAD, you need to use the sprite's new name instead of its old name. - Sprites are renamed as follows: - heretic.wad: HEAD -> LICH - - hexen.wad: ARM1 -> AR_1 - ARM2 -> AR_2 - ARM3 -> AR_3 - ARM4 -> AR_4 - BARL -> ZBAR - CAND -> BCAN - GIBS -> POL5 (this makes it the same as Doom's gib sprite) - ROCK -> ROKK - SUIT -> ZSUI - TRE1 -> ZTRE - TRE2 -> TRES - WATR -> UWAT (unused, but Strife also has a WATR) - - strife1.wad: ARM1 -> ARM3 - ARM2 -> ARM4 - BAR1 -> BARC - BARL -> BBAR - BLST -> MAUL - CNDL -> KNDL - LOGG -> LOGW - MISL -> SMIS - PMAP -> SMAP - POT1 -> MPOT - SHRD -> SHAR - SHT2 -> MPUF - SPID -> STLK - TLMP -> TECH - TRE1 -> TRET - TRCH -> TRHL - VASE -> VAZE -- Fixed: The Doom Allmap powerup played the normal item pickup sound instead of - the powerup pickup sound. -- Fixed: Fog boundaries were still drawn when using a fixed colormap. - -January 6, 2004 -- Fixed: R_InitTextures() did not ensure that the final TEXTURE1/TEXTURE2 lumps - had not already been read, so it could end up loading them with the wrong - PNAMES. The easiest example of this bug is to start the game with: - -iwad doom2 -file doom doom2 -- Fixed: You could take Heretic keys but you couldn't check them with ACS. Also - added support for doing both with Hexen keys, since it was missing. -- Added some checks to A_SpawnFly to appease anybody who tries to break things - by using dehacked patches where they don't belong. -- Fixed: If you used spynext/spyprev to look through another player's eyes and - that player quit, the game would crash because it will still try to draw - through that player's eyes. -- Added a DEM_SINFCHANGEDXOR message for flag cvars that alter server settings - (i.e. all of them). The reason for this is because if you exec a script that - alters multiple flags, only the last change would take effect, because they - don't get processed until after the script finishes execution. -- Fixed: G_AddViewPitch() adjusted LocalViewPitch even when the dmflag - DF_NO_FREELOOK was set. -- Fixed: PIT_StompThing was missing the MF2_TELESTOMP check for Heretic/Hexen. -- Fixed: Starting a game with the dmflag DF_NO_FOV set would set everybody's - view to an FOV of 0 because the dmflags callback gets called before the - arbitrator's DesiredFOV is initialized. - -January 2, 2004 -- Changed P_FinishLoadingLineDefs so that it rounds the wall length to the - nearest integer when determining TexelLength instead of always round down. -- Fixed: Using an empty string with HUDMSG_TYPEON caused a crash. -- Fixed: A buried wraith could enter its pain state while rising from the - ground and not properly finish raising, so its bottom portion would remain - clipped for the rest of its existance. -- Fixed: Using a switch to start a script on another map would not make the - switch switch. -- Fixed: Sliding along the backside of a blocking two-sided line was bad. -- Fixed: The second sky on a map defaulted to -NOFLAT- instead of the same - texture as the first sky. -- Moved the key blocks from Heretic's fullscreen HUD so that they don't overlap - the health vial. - -December 13, 2003 -- Added another case to ScanForFlatHack to fix darkhour.wad: F_START - flats - - FF_END - more flats - F_END. I'm surprised it worked before, but it did, so - I'm inclined to again make it work unmodified, even if the wad _is_ wrong. - -December 12, 2003 -- Added a hack check for Doom 1's BIGDOOR7 texture, which y offsets its patches - at -4. (Doom clamped all negative patch y offsets to 0, which is why it shows - up okay in Doom.) -- Added a fix to the blockmap tracers where all the blocks along the trace are - crossed on their corners. -- Fixed a potential crash in DBaseStatusBar::DrawMessages() when a HUD message - removes itself as part of its drawing process. -- Fixed: A few of the Strife weapons were erroneously defined with WIF_NOALERT. -- Fixed: Sky textures defaulted to 0 if a map had a MAPINFO that did not - specify the sky. Now they default to -NOFLAT- so you don't have to worry - about division by zero in R_DrawSkyStriped if the map tries to show a sky. -- Fixed: The floorLowerAndChange type for EV_DoFloor modified sec instead of - a temporary, which could cause crashes at worst and odd behavior at best - because sec is used again to determine whether a floor moved instantly. -- Changed a DivScale19 in R_RenderMaskedSegRange into a SafeDivScale19. -- Fixed: Trying to use the mdk command before starting a game caused a crash. -- Fixed: CreateFrameBuffer would not properly retry. -- Changed the maybedrawnow recursion inhibitter to use the current state - of the screen object instead of a local static variable. - -December 8, 2003 -- Fixed: If a wad had TEXTURE1 and TEXTURE2 lumps, then any duplicates in - TEXTURE2 took precedence over TEXTURE1. It is supposed to be the other way - around, with TEXTURE1 taking precedence over TEXTURE2. -- Prefixed the names of the Strife grenade launcher actors with "Strife". -- Fixed: DDoor did not serialize m_LightTag. -- Fixed the P_TranslateTeleportThings rewrite so that it sets the Teleport - special's TID to 1 instead of the tag. -- Added a check for MNTRZ0 to AT_GAME_SET(Minotaur). -- Fixed: The chaingun flash only showed frame one and not both frames one and - zero. - -December 6, 2003 -- Rewrote P_TranslateTeleportThings() so that it only assigns TIDs to things - in sectors with tag 0. -- Fixed: Teleporters by TID didn't work. -- Fixed: P_SpawnMissileXYZ spawned floor/ceiling huggers as if they could move - with a vertical component to their velocity. They can't, so it could result - in very slow moving projectiles when aiming at something nearby in the X/Y - plane but far away on the Z axis, because most of the projectile's speed would - try to go on the Z axis. -- Changed the Minotaur state fixup to be based on the presence of MNTRZ1 - instead of the game type. - -December 5, 2003 -- Fixed: When I went back to the blockmap-based sight code, I forgot to bring - over the enhancements for block-everything lines I had made for the BSP- - based sight code. -- Added a second argument to Teleport and a third argument to Teleport_NoFog - specials. This is a sector tag to filter the teleport dests with. Only - dests in a sector with a matching tag will be selected if the tag parameter - is non-zero. If tid is zero and tag is non-zero, then the old (and slow) - teleport dest based on sector tag is used so that Mordeth's trick can work. -- Added support for the BOOM local door light effect by adding an additional - parameter to all the Door_* specials to serve as the lighttag parameter. - The first argument still determines the door to open, so unlike BOOM, you - can use the effect with remote doors if you like. In the case of the - Generic_Door special, OR the type (the third argument) with 128, and the - first argument will be used as the lighttag parameter instead of the tag - parameter. -- Fixed two bugs with using the ACS setfont call to create fonts from images: - GlobalKerning was left uninitialized, and they weren't added to the global - font list, so they were recreated every time they were setfont'ed. - -December 4, 2003 -- Fixed: Voodoo dolls would also trigger the teleport zoom. -- Added 2048x2048 as the maximum size for a patch as a simple sanity check. -- Added a fix to the console's maybedrawnow() function to prevent recursive - calls to it. - -December 3, 2003 -- Fixed: The transfer lights specials are supposed to copy the source sector's - light level instead of propagating along changes from other transfer lights - specials. -- Added an armor display to Heretic's fullscreen HUD to match Doom's. -- Added a check for a NULL spot to Earthquake::Tick() so that if somebody - removes an earthquake's spot before the quake is over, it won't crash. -- Fixed: The Boom use-through flag was only being translated to SPAC_USETHROUGH - for lines with generalized line types and not for lines with normal line types. -- Fixed: P_ActivateLine() did not consider SPAC_USETHROUGH lines when deciding - if it should flip a switch texture. -- Fixed: In EV_DoCeiling(), ceilLowerToNearest made the ceiling go up instead - of down. -- Fixed: PIT_AddThingIntercepts() did not add anything the trace started in, - because none of the thing's sides faced the start of the trace. -- Added a check to A_FireCGun() to try to catch Dehacked patches that do - naughty things to the chaingun's flash states. -- Fixed: The bNoDecals property was not copied to every texture in an - animation range. -- Added the "range" keyword to ANIMDEFS so that it can be a true replacement - for ANIMATED. -- Fixed: Crushers in Hexen made monsters disappear instead of turning them into - piles of giblets. -- Changed P_SpawnPlayer() so that it doesn't telefrag *everything* inside the - player. Only monsters and other players will be telefragged now. -- Fixed: Hurting a voodoo doll and then dying from something else didn't - completely kill you. -- Fixed: mouse_sensitivity was no longer affecting mouselooking. - -November 26, 2003 -- Fixed: Ceiling type ceilRaiseToLowest (used exclusively by Ceiling_Generic) - set the direction to -1 instead of 1. -- Fixed: P_TranslateLineDef() ignored the BOOM passthrough flag due to - bad ordering. -- Fixed: A_WeaponReady did not center the sprites in case they had been - repositioned earlier. (Only really an issue with Hexen.) -- Fixed kerning support in V_BreakLines. - -November 24, 2003 -- Moved the +mlook and +strafe button handling for joysticks into - DI_JoyCheck(). -- Changed bots.cfg loading so that it is relative to progdir instead of the - current directory. -- Removed support for loading zdoom.ini from the user's profile directory - under Windows. -- Added Strife's acolytes. -- Added Strife's rebel(s). -- Added Strife's beggar(s). -- Added Strife's zombie spawner. -- Fixed: No map names were shown for custom maps in the intermissions. -- Added simple default kerning for fonts so that DBIGFONT can use it to - overlap the edges of two adjoining character cells. It does not support - per-character kerning pairs and probably never will. -- Added error checks to invnext, invprev, and useflechette so that they won't - crash if you try to use them before starting a game. -- Fixed: Picking up a DECORATE item would clear its special, so you wouldn't - be able to pick it up again if it respawned. -- Added translucency to lots of Heretic and Hexen actors. -- In PIT_CheckThing(), any checks against a bridge will treat the moving - actor as if it has MF2_PASSMOBJ set, even if it doesn't. This lets scrolling - floors carry scenery items underneath a bridge without causing the chaos - that removing MF2_PASSMOBJ globally would cause. -- Removed the dead player check from CheckIfExitIsGood() so that dead - players can exit a level, as they could in Doom. -- Added god mode and invulnerability as things that can replenish your air - supply, so you won't die almost immediately if you spend your time - underwater with them on and then they go away before you surface. -- Added checks to D_PostEvent so that it won't turn the players head when - the game is effectively paused. -- Added a new player flag, CF_WEAPONREADY, so that weapons which don't use - A_WeaponReady (like the fighter's axe) can still bob. -- Fixed: The savegame version number for 2.0.54/2.0.55 didn't get bumped - up. So the .55 update really only helps people who want to load pre-.52 - savegames. :-( - -November 23, 2003 -- Oops. Quick update from 2.0.54 to 2.0.55 to let old savegames load again. - Hopefully nobody downloaded 2.0.54 in the hour it was available. -- The sector an actor resides in now gets stored in savegames, because - different rules are applied for things spawned at level start than for - things spawned afterward. -- Added calls to SetWindowLongPtr to take away the window's border in - fullscreen mode and put it back in windowed mode. -- Fixed DBaseStatusBar::RepositionCoords() so that LilWhiteMouse's Chosen - ammo icons appear on the fullscreen HUD again. - -November 21, 2003 -- Added Strife's "Becoming Acolyte". -- Added Strife's zombie. -- Added Strife's grenade launchers. - -November 20, 2003 -- Added Strife's merchants. -- Added a check for a NULL texture to the player setup drawer, even though - that should never happen. -- Fixed: GiveInventory would not let you have more than one puzzle item of a - certain kind because I thought Hexen restricted you that way. -- Fixed: Starting a non-deathmatch game, changing the deathmatch cvar to true, - and then starting a new game would still show the ARMS graphic on the - status bar because the status bar graphic was not reloaded. -- Changed the fast floor dropping behavior so that Hexen format maps use the - Hexen behavior and Doom format maps use the Doom behavior. - -November 19, 2003 -- Added Strife's peasants. -- Added the Strife translation tables. -- Changed dehacked parsing so that the "Far attack frame" for players cannot - be changed. Fixes insaned1.deh and insaned2.deh that come with insane.wad. -- Fixed: The intermission screen did not lookup level names. -- Added a check for a NULL target to A_FiredAttack. -- Fixed: Enter, respawn, and death scripts were run with the equivalent of - ACS_Execute instead of ACS_ExecuteAlways, preventing them from executing - for more than one player at once. This especially defeats the purpose of - enter scripts, because those are always run at the same time for each - player when the level starts, so only the first player would actually - run any enter scripts. -- Fixed: The read-modify-write map array ops in p_acs.cpp took the array - index from the world var store instead of the map var store. - -November 18, 2003 -- Added Strife's Sentinel. -- Adjusted P_SpawnMissileXYZ so that if a missile would normally shoot over - the player's head, it will be aimed slightly lower. -- Added the first half of Strife's Bishop. -- Added Strife's Crusader (minus its special death action). - -November 17, 2003 -- Added a check for bad sidedefs to P_SaveLineSpecial. - -November 15, 2003 -- Added Strife's high-explosive and white phosphorous grenades (but not the - grenade launchers). -- Fixed: AActor defined both reactiontime and ReactionTime. -- Moved weapon bobbing out of A_WeaponReady so that weapons can bob every - tic even if A_WeaponReady isn't called every tic. (Such was the case with - the mauler, and it looked really bad seeing it move jerkily only every six - or seven tics.) -- Added Strife's mauler, minus the disintegration. -- Added a few of Strife's cheat codes. - -November 14, 2003 -- Added the Light_Stop line special to stop a currently running light effect. -- Changed the Door_Raise speed checks for monsters in P_TestActivateLine() - so that they are consistant for cross, use, and push lines. -- Changed text lookups for map names and intermission text so that they - happen each time they are needed and not just when the MAPINFO is parsed. -- Added a check for the null texture to R_RenderBoundWallSprite. -- Added a check for non-positive-sized patches, so if one tries to load, - it gets replaced by the new -BADPATCH graphic I just added to zdoom.wad. -- Added support for flechette inventory graphics named ARTIPSB1, ARTIPSB2, - and ARTIPSB3 that can be used in place of ARTIPSBG to differentiate - between the different forms of the flechette when a script gives the - player specific ones. -- Cluster infos now get created the first time they are referenced by a - map. Without this, all Hexen maps were implicitly on the same hub (the - "default" one), because Hexen didn't use clusterdef MAPINFO entries. -- Brought back the blockmap-based P_CheckSight and fixed the iterator in - it and its equivalent in p_maputl.cpp so that it properly handles the - case where a trace crosses the corner of a block. - -November 12, 2003 -- Added Strife's flame thrower. -- Added Strife's mini-missile launcher. -- Added Strife's assault gun. -- Added Strife's electric and poison crossbows. However, the poison bolt - does not have any of its special properties implemented, so it currently - acts like a super high damage projectile. -- Added all the Strife ammo pickups. -- Added Strife's scrolling sector type. -- Added the Strife weapon preferences to the WeaponPrefs array. -- Added placeholder weapon and ammo slots for the Strife weapons so that - when/if I add more, I won't need to update the player_t serializer again - to maintain compatibility with old save games. -- Added StepHeight to gameinfo_t to indicate the maximum height step a - player can walk up. This is 24 in every game except Strife, which has it - lower at 16. - -November 10, 2003 -- Fixed: ANIMDEFS animations animated every frame in the animation instead - of just the base texture. -- Fixed: Texture animations defined in ANIMATED did not animate each frame - in the sequence properly. - -November 2, 2003 -- Stopped using validcount to keep track of which Actors have already been - checked by P_BlockThingsIterator. P_CheckSight and P_TraceBleed can both - make validcount go up, so it is totally useless for P_RadiusAttack, which - wound up doing damage to a thing for each block it touched that was in the - blast area. -- Added DTA_ClipTop, DTA_ClipLeft, and DTA_ClipRight so that FlatFill can now - use DrawTexture and draw the textures right-side-up again. -- Renamed negonearray to zeroarray to better reflect its contents. -- Changed PTR_TraceIterator() so that it will look at a line's flags and if - it doesn't have ML_TWOSIDED set, then it will pretend it doesn't have a - back side, even if it does. -- Fixed: BFG Marines could crash with a stack overflow during their refire - pause because A_M_BFGSound() switches the marine back to its chase state, - which tries to switch it back to its attack state. The solution: Make sure - the marine's MF_JUSTATTACKED bit is set as long as its special1 is non-zero. - Then A_Chase won't try to attack. -- Reduced the player's missile range from 20480 to 8192, because Doom's trace - code is too inaccurate for long traces. - -November 1, 2003 -- Removed the missile attack from the chainsaw marine. -- Fixed: The cast finale ignored the player's gender setting because it didn't - actually play the player's death sound from the player. -- Fixed: The Heretic episode 2 ending restored the palette in PLAYPAL instead - of the one computed from PLAYPAL at the start of the game. -- Removed gamma stuff from FPalette, since Win32Video is responsible for - handling gamma. -- Changed P_DoCrunch() so that it copies the render style from the crushed - thing to the gib actor. -- Changed PIT_FloorDrop() so that only Hexen will let things fall with gravity - when a floor quickly drops. The other games will yank them down. -- Changed missile attacks so that monsters behind block everything lines will - try to shoot through the lines if they are set for impact activation and - run a script. The assumption is that the script will remove the blocking - flag so they can shoot past the line on their next attack. -- Changed back to the BSP-based sight checking for better accuracy. -- Changed the automap so that it uses 12 bits of fractional precision instead - of 16 in order to display maps that are relatively close to the limits of - the possible map extents. -- Changed the STCFN121 hack so that instead of discarding STCFN121 if it's - in the IWAD, it will discard it if STCFN120 and STCFN 122 are not present. - This should accomodate wads that provide their own fonts and copied it as - an I instead of a y, and also wads that provide a real set of lower-case - characters. -- Changed the sector soundorg calculation so that it can't overflow. - -October 31, 2003 -- Added Strife's Reaver. Aside from its unknown flag, it should be fully - functional. -- Added Strife's dagger-wielding fist. It has a chance of doing 0 damage, - which seems odd. -- Extended P_SpawnPuff() so that you can give a puff a crash state, and then - it will use that state if something was hit. -- Added a simple status bar for strife. - -October 30, 2003 -- Moved SKYFLATNAME into the gameinfo structure. -- Added a bunch more Strife things. -- Restricted the use of SPAC_OTHERCROSS to just the BOOM generalized line type - containers, since those are the only specials it's needed for. -- Fixed: Each level's intermission name was always drawn as text, even if - it had a graphic that was supposed to be displayed instead. -- Rewrote the flat hack used to make the flats in Gothic DM 2 load and - verified that it once again works. - -October 29, 2003 -- Added a few Strife things. -- Fixed another Doom bug/oversimplification: PIT_AddThingIntercepts() checked - the trace against a line running through the middle of the thing. Now it - checks against the thing's actual bounding box, so chainsawing big things - like the Spider Mastermind is much easier now. This also means - P_LineAttack() doesn't need to position puffs/bullet splats closer along the - trace since the hit location won't be inside the thing anymore. -- Changed blockmap thing linking so that things link to every block they touch - and not just the block at their center, fixing an old Doom bug. -- Changed the summon command so that it spawns things in front of you based on - their radius rather than a fixed 64 units away. -- Fixed: The joystick read rate was determined by the framerate instead of - being a constant 35 Hz. - -October 28, 2003 -- Changed: Decals are not allowed on warping textures by default. You can allow - them by appending "allowdecals" to the warp statement in ANIMDEFS. (e.g. - "warp texture foofoo allowdecals") -- Fixed: Bots whose teams were defined by name instead of numbers would always - be on the red team (team 0). -- Fixed: Puzzle items need to stick around in multiplayer games. -- Fixed: Saving in multiplayer games would try to save to the same full path - on all machines, even if the different machines had ZDoom installed in - different directories. The only one who was guaranteed to be able to save - because of this was the person who used the save command. -- Fixed: Poison damage in multiplayer games did not respect the teamdamage - setting. -- Added a minimum size limit of 1024 bytes for MOD/stream songs to work around - a bug in the current version of FMOD 3.70. -- Fixed: Sprites with weird rotation flipping (e.g. the Hell Knight) did not - display properly. -- Fixed: Even things that are not monsters could activate monster-allowed - lines in BOOM (and presumably DOOM). -- Fixed: Compat_useblocking also needs to block non-use lines with specials, - not just use lines. -- Fixed: Assigning a special to a line that would normally block the use of - lines behind it would enable those lines to be used. -- Fixed: If a texture had the bNoRemap0 flag set and it was part of an - animation sequence, the flag would not be propagated to the other - textures in the sequence. -- Added a check for a NULL SaveComment in the for loop that draws the comment - on the save/load menus. -- Fixed: Hexen does not always pass the three ACS script arguments as the - first three variables as a script. Instead, it looks at the number of - used arguments and only copies the arguments that are used, initializing - the rest to 0. -- Fixed the COLORMAP fixer so that it works correctly for palettes where - an exact match for color 0 does not exist. -- Added a check for empty VERTEXES lumps to the map loader. - -October 27, 2003 -- Fixed: You could not override the levelnums of the IWAD maps with levelnums - pointing to differently named maps because levelnums were search first to - last, and there was no check done to make sure that previous matching - levelnums were removed. -- Moved the R_Init() call before DecalLibray.ReadAllDecals() so that decals - can use any textures (including the plasma ball sprite). -- Fixed Heretic intermission problems: The maps were not shown because the - cluster numbers changed when I moved its MAPINFO into zdoom.wad, and the - "Now entering:" and "Finished" texts were incorrectly centered. - -October 25, 2003 -- Increased MAX_ACS_TRANSLATIONS to 255. -- Added APROP_Invulnerable. -- Changed savegames so that they store textures by name and usetype instead of - by index. Also removed support for loading save games created with ZDoom - versions earlier than 2.0.43 just for the purpose of removing obsolete code. -- Fixed: Unscaled skies taller than 128 were positioned incorrectly. -- Fixed: Redefining a clusterinfo with MAPINFO would not zero out the old - clusterinfo. -- Fixed: When a palette had no duplicate entries, it used the blue and green - parts of color 255 to pick a replacement for color 0. - -October 24, 2003 -- Added MF4_ACTLIKEBRIDGE flag. -- Fixed: Inventory items would fall through invisible bridges. -- Changed the P_TeleportMove() call in P_SpawnPlayer() so that it uses ONFLOORZ - instead of mobj->z, which fixes some stuckiness that can occur with start - spots that are too near a wall. - -October 23, 2003 -- Fixed: Overlapping bridge things would stand on each other. -- Changed TX_START/TX_END loading to load textures from first to last instead - of last to first, so ANIMDEFS animations that use them will behave as - expected. -- Fixed: m_filter did not average the mouse input. It just cut it in half. -- Fixed: Mouse pitch only changed in increments of 16. -- Fixed: ZDoom set the display mode twice at startup: Once at the very - beginning and again right after its initialization finished. -- Fixed: AImpactDecal::StaticCreate() checked the texture on a wall using - translation, so it would stick decals on animated textures unless the - first frame was showing. -- FMOD_File_SetCallbacks() does not seem to work with FMOD 3.70. Fortunately, - FMOD 3.70 also makes it obsolete for my purposes, so I can work around it. - (Okay, so it was fixed again in a later FMOD 3.70. But I already removed - the use of FMOD file callbacks, so I won't undo my changes now.) - -October 22, 2003 -- Rewrote my TAG_MORE handling to use va_list and make GCC happy. -- Fixed the default Heretic/Hexen automap wall colors so that they look - good on the parchment background. -- Fixed: FindShortestTextureAround() and FindShortestUpperAround() returned - their results as ints (without a fractional part) instead of fixed_ts. -- Changed the mapthing position fixing so that it only applies to those things - that request it (specifically, Heretic's WallTorch). -- Moved all the default MAPINFO out of the executable and into zdoom.wad. - As a side effect, Dehacked patches can no longer change the music played - on a map. (Do any patches actually do this?) -- Converted all the decals in zdoom.wad into PNGs. I was considering doing - the same for the crosshairs, but XHAIRB2 was the only one that got smaller - from the conversion from IMGZ to PNG. - -October 20, 2003 -- Added the CreateTexture() method to the texture manager. It checks the - contents of a lump to determine what type of image it contains, creates a - texture of the appropriate type, and adds it to the database. Everything - that was previously hard-coded to use patches now uses this instead. The - primary reason for this: PNG texture support. Just make sure your PNGs are - paletted. They do not need to have the exact same palette as the one - inside PLAYPAL, since they will be remapped to fit the game palette. ZDoom - also supports two proprietary PNG chunks: - grAb (8 bytes): - SIGNED DWORD x - SIGNED DWORD y - grAb stores the offset information and works just like the - equivalent information in a patch. The name is taken from the - ILBM GRAB chunk, which does the same thing for ILBMs. - alPh (0 bytes) - alPh is valid for grayscale images only (colortype 0). Its presence - signifies that the image data is really an alpha channel and contains - no color information. This is used by all of the decals in zdoom.wad. -- Added the m_filter cvar (false by default) to smooth out mouse movement for - those unfortunate enough to be stuck with a mouse sampling rate of just 40 Hz. - -October 18, 2003 -- Added super-preliminary support for playing Strife as an IWAD. -- Added fading "Read This!" screens. -- Morphed players are now allowed to predict their positions. -- Revisited the local player turning from October 10. My original - implementation had the players transmit the direction they wanted to face. - Unfortunately, this messes up the gauntlets and chainsaw, so I have reworked - it so that the players again send deltas. Any amount that accumulates between - packet sends is added to the player's local view angles. When they get sent, - they are zeroed. - -October 17, 2003 -- Fixed: GetLightLevel() used some globals instead of this to get the sidedef. - -October 16, 2003 -- Fixed: Using a cycling alias to rapidly change the player's color would - animate the player's status bar face at each color change. - -October 15, 2003 -- Updated to FMOD 3.70. -- Did more cleanup for GCC. Its "variable might be used uninitialized" - warnings are very annoying. Oh well. -- Did some cleanup so that Visual C++ 6 will compile without warnings. Alas, - it has some really weird errors where it complains about not being able - to #include .h files that are excluded inside an #ifdef block. They do not - effect the compilation any and seem to be generated before cl is even run; - it just looks untidy. Trivia, since I now have the opportunity to check: - When built with exactly the same settings, compared to the VC6 version, the - VC7 version is ~100k smaller, marginally faster, and takes slightly less - time to build from scratch. -- Added the MAPTEXF_WORLDPANNING flag to indicate that a maptexture wants to - be panned by world units instead of texels, so you can create high-res - drop-in replacements for existing textures. -- Fixed: The grid was not drawn properly on a rotated automap because the - x or y coordinates of the gridlines were not reset after being rotated. It - still looks bad if you turn off follow mode, but I'd rather not worry about - that. -- Fixed: Movement prediction did not preserve the ordering of blockmap links, - so the local player would always be the first entry in his blockmap cell. - The effects of this were first noticed as Pain Elementals reliably causing - the game go out of sync eventually. I imagine it probably caused desyncs in - other cases, too. - -October 14, 2003 -- Fixed: You could push actors with the MF2_PUSHABLE flag while doing movement - prediction, which would almost invariably make network games go out of sync. -- Uncommented the check that excluded the loading of STCFN121 only if it was - in the main IWAD. Note to anybody modding ZDoom who loads a resource wad - before the IWAD: This check in the FFont constructor assumes the IWAD is - at position 1. You will need to change this for your mod. -- Fixed: Pig players could still change back to their original weapons. -- Replaced the use A_BeakReady with A_WeaponReady. A_BeakReady was basically - just a stripped-down version of A_WeaponReady, so A_WeaponReady works just - as well. -- Added the ActivateMorphWeapon method to APlayerPawn as a replacement for - P_ActivateMorphWeapon(). - -October 13, 2003 -- Improved the error-checking in FPatchTexture::MakeTexture() so that it will - detect overlapping spans. -- Fixed: Scaled, lower unpegged masked textures were positioned incorrectly - vertically. -- Fixed vertical positioning of scaled sky textures. -- Made MF_COUNTITEM actors dynamically counted like MF_COUNTKILL actors. -- Fixed: Morphed players returned to their player skin unless playing Hexen. -- Fixed: The chicken and pig players did not have MF3_NOBLOCKMONST set. -- Moved P_MorphPlayerThink() into an overridable method of PlayerPawn. -- Fixed: Colored sectors changed the color of the crosshair. - -October 11, 2003 -- Dropped MISSILERANGE back to its original value (2048 units) and added a new - PLAYERMISSILERANGE for player weapons, which is still at 20480 units. - -October 10, 2003 -- Fixed: Using the last inventory item in a Doom game would not redraw the - Doom guy's face on the status bar until the next time it animated. -- Fixed: The view was interpolated when switching in and out of chasecam mode. -- Changed player turning to be local. Also changed the mouse reading so that - it happens every frame instead of every tic. Together, these two changes - keep the mouse feeling responsive even when the framerate drops below 35 FPS. - It also helps a lot when playing with vsync enabled. -- Modified the interpolation system so that it knows what it is interpolation - (beyond being just a generic fixed_t *). Now it can be stored in save games. -- Fixed: Ceiling_CrushAndRaise and similar specials that passed a 0 height - to EV_DoCeiling/EV_DoFloor did not interpolate. -- Fixed: Thing_Projectile2 did not pop its parameters off the stack. -- Modified tab completion slightly. Pressing tab once now displays a list - of possible completions. Pressing tab multiple times will continue to - function as it did before. -- Added the fading notify text I had written for my Duke port. - -October 8, 2003 -- Changed titlepic and conback drawing to always be unmasked, because - 2nd_enc.wad's TITLEPIC has holes in it. -- Stripped out a bunch of obsolete code from v_draw.cpp. -- Moved the state of the automap cheat into the am_cheat cvar. -- Changed P_TestActivateLine() so that monsters cannot activate Door_Raise - lines with speeds of 64 or above, in order to mimic Doom. -- Fixed: Vertical view doubling crashed. -- Made the secret wall color on the automap configurable through the - am_secretwallcolor cvar. -- Added a ga_togglemap gameaction, because the new parchment can cause - commands to dispatch while the background is drawing. If one of those - is togglemap and it gets handled right away, the mapback texture gets - unloaded, and AM_clearFB will crash. -- Added the parchment background used by the Heretic and Hexen automaps. -- Added some support for console fonts that don't use 8x8 character cells. -- Fixed: A_WraithMissile was missing a NULL target check. -- Fixed: The player did not make any noise during the cast finale. -- Added the player's attack sound to the finale. -- Added a check to the cast finale for monsters that have been dehacked to - have no attack states so that they won't crash the finale. - -October 7, 2003 -- Added DoomBounce, HereticBounce, and HexenBounce as valid properties for - DECORATE projectiles. -- Fixed: Monster telefrags still reported that the monster had killed the - player normally. (Note: The only time a monster will normally be able to - telefrag a player is on Doom2 MAP30, although this can be changed with - MAPINFO.) -- Made AM_changeWindowLoc scale the window movement so the automap will scroll - at the same rate no matter what resolution you play at. -- Fixed: Reopening a door while it was closing would not play the opening - sound. -- Fixed: You could still (de)activate dead monsters. Activating a dead monster - would make it disappear, because dead monsters usually have their next frame - set to NULL. -- Fixed an off-by-one error for the vertical positioning of the elements on - the Hexen status bar. - -October 3, 2003 -- Fixed: Missing TAG_DONE is WI_slamBackground(). -- Fixed: ZDoom no longer tries to read non-V3.0 Dehacked patch files. Earlier - ones are apparently all binary, which has never been supported and could - make it crash. - -October 1, 2003 -- Added support for specifying animated texture sequences in ANIMDEFS by name - instead of by number. i.e. Instead of: - texture x_water1 - pic 1 rand 5 12 - pic 2 rand 5 12 - pic 3 rand 5 12 - pic 4 rand 5 12 - - You can write: - texture x_water1 - pic x_water1 rand 5 12 - pic x_water2 rand 5 12 - pic x_water3 rand 5 12 - pic x_water4 rand 5 12 -- Added a check for the front sky layers of parallax skies so that the front - texture does not have color 0 remapped, because it really does use color 0 - as transparent. (Note that since color 0 is now the transparent color for - everything, you can use normal transparent regions for front sky textures.) - -September 27, 2003 -- Changed the transparent color index from 255 back to 0. 0 is more convenient - because: - 1) Images that are used as alpha masks (primarily decals) already - use color 0 as transparent, so they no longer need special processing. - 2) PNG images need 255 fewer bytes to mark color 0 as transparent than they - need to mark color 255 as transparent. But this won't really be important - until I add support for PNG images (which will probably happen, but who - knows when). - The only reason I switched to 255 was because that was what BUILD used, so by - using the same transparent index, I could memory map its tiles read-only and - use them directly. - -September 26, 2003 -- Fixed: If a switch defined in a SWITCHES lump used the same "on" and "off" - graphics, the game would crash. Now it gets skipped, because it's not really - a switch if it doesn't change its image. - -September 25, 2003 -- Fixed: Using the MDK cheat always flung the dead things at you. Related, the - maximum thrust to have something fall forward on death is now 10 units/tic. -- Fixed: ClearInventory always crashed because using GiveInventory to give a - weapon afterward would not bring the weapon up, so the player's ready weapon - would be left as something that doesn't exist. -- Fixed: The overlayed automap showed statistics when not viewing through a - player's eyes. -- Increased MISSILERANGE to 20480 (was 2048). -- Changed the massacre code so that it sets the shootable bit for any monsters - that have it cleared (such as Serpents, usually), so they die too. -- Fixed: Masked midtextures beneath a fake floor (or above a fake ceiling) - only inheritted their light level and not their light color from the control - sector. -- Added code so that when a map thing is spawned directly on a line, it will - be moved 1/4 unit in toward the middle of the subsector so that it will be - clipped reliably by the renderer. See the torch right in front of the player - at the start of Heretic E1M1 for an example of this bad practice. -- Changed: MF2_FLOATBOB actors no longer splash on liquids. -- Fixed: P_AimLineAttack() clamped the player's vrange to 1 degree maximum - instead of 1 degree minimum, so it would not aim past any two-sided lines - if you were using 0 autoaim because the toppitch and bottompitch would be - the same before even entering PTR_AimTraverse. This was the cause of - chainsaw not always pulling you in and melee weapons sometimes missing - monsters that were clearly in range. -- Fixed: P_SpawnPuff() used linetarget instead of its hitthing parameter - to determine if it should play the puff's SeeSound or AttackSound. -- Improved(?) the Bloodscourge so that its initial target search only looks - in front of the player. -- Fixed: MStaffSpawn used linetarget, but P_AimLineAttack was never called - to set it. -- Fixed: P_CheckMissileSpawn would destroy ripping missiles if they spawned - inside something. -- Fixed: Dark servants could not be morphed in Hexen. -- Fixed: MageWandSmoke was not translucent. -- Combined all the WeaponPrefs list for each game into a single list. -- Added text skipping for the Hexen chess ending. -- Fixed: The chessboard finale drawer looked at userinfo.PlayerClass instead - of CurrentPlayerClass to decide which chess piece to draw, so random players - would always appear as the fighter. -- Fixed: When V_BreakLines() inserted newlines for word wraps, the default - text color was restored for the new lines. Now it adds color escape - sequences after any soft line breaks, but it leaves hard line breaks alone. -- Added support for marking scripts that are "safe for multiplayer". To do - this, add net after the script header but before the script body. e.g.: - script 1 (void) net { ... } - script 1 open net { ... } - script 1 enter net { ... } - etc. -- Added the sethudsize ACS command. It takes three parameters: - sethudsize (width, height, statusbar). The width and height is the size - of the screen that hudmessage thinks it's drawing on. If this is different - from the real screen size, the hudmessage will be scaled to make it fit. - If statusbar is 1, then the height parameter covers the status bar and you - can draw on top of the status bar. If it is 0, then the hud message will - be stretched differently depending on whether the status bar is visible or - not, because the height available to draw in is shorter when the status bar - is visible. (However, a value of 0 will still let you draw on the status - bar if the hud message extends below the height you specified.) - - After using sethudsize, hudmessage coordinates also behave differently. - You now need to specify actual pixel coordinates and not numbers in the - [0.0, 1.0] range. However, they are still fixed point, so you need to keep - the decimal point. e.g. If you used SetHudSize (320, 200, 1); and want to - draw a hudmessage at the center of the screen, you should pass it the - coordinates (160.0, 100.0) and not (0.5, 0.5). - - The fractional part of the coordinates effect what part of the hud message - you are positioning: - For x: .0 = positions center of box - .1 = positions left edge of box - .2 = positions right edge of box - .4 = centers text inside box - .4 can also be added to either .1 or .2 to get .5 or .6 - - For y: .0 = positions center of box - .1 = positions top edge of box - .2 = positions bottom edge of box - - e.g. If you used SetHudSize (320, 200, 1);, then the coordinates (160.1, 100.1) - will position the upper-left corner of the hud message. The coordinates - (160.2, 100.2) will position its lower-right corner instead. - - To make hudmessage behave as normal, use SetHudSize (0, 0, 0);. - - In summary, use sethudsize for hud messages that are really graphics, and don't - use it for text (unless you want your text to appear the same size at all - resolutions, such as a title with a special font or something). - -- Added the getcvar ACS command. It returns the value of a cvar as an int, - so scripts can alter their behavior based on cvars. -- Added the strlen ACS command. It behaves just like its C counterpart. -- Added support for loading compressed GL nodes when regular nodes are - unavailable. -- Fixed: You could pick up items above your head because P_CheckPosition() - added an extra 24 units of height to detect when you might step up inside - another actor. It still does, but now PIT_CheckThing() takes this into - consideration before touching it. - -September 24, 2003 -- Fixed a crash bug in A_SorcOffense2: It did not check for a NULL target. -- Added support for compressed nodes. Not only do they take up less space - on disk than regular nodes, but the also remove the limits on number of - segs, subsectors, and nodes that normal nodes have. They also store the - extra vertices as 16.16 fixed point numbers like GL nodes, so split segs - can have fractional end points. - -September 23, 2003 -- Finished switching from memory-mapped I/O to normal file I/O. Partly, this - was done for portability, because some systems don't support MMIO, but - mostly it was done because the in-memory format of textures no longer - matches their on-disk format, so I can't use the wads themselves as a - texture cache anymore. Since I can't do that anymore, there's not much - reason to dedicate any address space to them. - -September 13, 2003 -- Added r_skyboxes cvar so that skyboxes can be turned off. -- Fixed: Using noinventorybar in MAPINFO still showed the selected artifact - in the Doom status bar. -- Note to self: I am no longer using Whole Program Optimization because: - 1. It makes the executable around 200k bigger right now. - 2. Its performance improvements are debatable. In fact, ZDBSP is about - half a second slower on a big map when using it. - 3. It makes the linking stage of a release build take a lot longer - (which would be worth it if it actually helped, but I haven't seen it). -- Changed the PNG reader so that it caches all basic chunk information in - memory the first time the file is scanned so that chunk searches can be - much quicker. This means that when you have a lot of .zds files, the save - and load menus should hopefully appear faster the first time you use them. - In the process of implementing this, I discovered a glaring bug: - G_DoLoadGame() never closed the file after loading all the data from it. -- Added a check to disallow predefined 2D images as textures on walls, floors, - and ceilings at map load time. I purposefully left this check out of ACS - because they *can* be useful, so it's nice to have some way to use them. -- Added TX_START/TX_END markers for new graphics. They can override existing - wall textures and flats. - -September 9, 2003 -- Fixed: STFBANY was not added to the texture manager, so multiplayer Doom - games crashed when the status bar tried to draw it. -- Fixed: Options menu titles were drawn using SmallFont instead of BigFont. - -September 6, 2003 -- Fixed: Trying to delay for 0 tics in a script would delay for 4294967296 - tics instead. - -September 2, 2003 -- Fixed relative lighting was never applied to masked midtextures because I - had the check contingent upon the absence of a sector colormap. But every - sector always has a colormap; I should have been checking for a black - fade instead. - -August 28, 2003 -- Fixed: Spawning an item with ACS that was Dehacked would not transfer the - special or TID from the original item to the dehacked item. -- Fixed: AnimType was left uninitialized when parsing ANIMDEFS. - -August 14, 2003 -- Fog boundaries alone are no longer sufficient to clip a sprite. - -August 13, 2003 -- Fixed mirror flipping in R_ProjectSprite(). I was treating tx as if it were - in screen coordinates, but it's not. This was generally unnoticable because - tx has 16 fractional bits, so subtracting it from viewwidth was vear near - subtracting it from 0. -- Changed sprite clipping by slopes to be more like sprite clipping by unsloped - floors and ceilings. -- Removed the check for MF_SOLID in P_TestMobjZ(). Nonsolid things should - still be blocked by invisible bridges. (So no more corpses will fall through - invisible bridges.) -- Added the ability for monsters to walk on invisible bridges. Note that the - bridge's top must be below or at the monster's height. Bridges that require - even a slight step up will still be impassible to monsters. (For now. Maybe - some time in the future I will change that. Maybe.) -- Fixed: R_ProjectParticle() could project 0-width particles. This could cause - a single column of a fog boundary behind the particle to be drawn more than - once. -- Fixed a bug in R_RenderMaskedSegRange() that caused one-pixel wide ranges - to not be drawn when using r_columnmethod 1. -- Added support for extended ID666 amplification tags in SPC files. Doing so, - I discovered one change from snesapu 0.95 to 0.98: SetDSPAmp's scale has - 12 more fractional bits in 0.98 than it did in the earlier versions. -- Updated SPC support for snesapu.dll version 1.01, meaning that I allowed for - a higher minimum version returned by SNESAPUInfo. Nothing else needed to - change, so I'm not sure why the minimum version got bumped. I did need to - change the mixer parameter of SetAPUOpt from 0 to -1, but 0 was also defined - as no mixer in snesapu 0.95, so I'm not sure why it worked with the older - DLL. -- Added a check for textures that try to reference a patch not in the PNAMES - lump. - -August 11, 2003 -- Removed the +1 from the damage calculations in PIT_RadiusAttack(). I'm not - sure what that was doing there. -- Changed the VirtualProtect() call that makes the self-modifying code - writable from PAGE_EXECUTE_WRITECOPY to PAGE_EXECUTE_READWRITE after - Timmie found out Win9x doesn't know what PAGE_EXECUTE_WRITECOPY is. - -August 5, 2003 -- Changed the ignoreInvisibility parameter of P_CheckSight() to a flags - parameter so that I can pass another flag (2) to indicate that the sight - check should see past "block everything" lines (the former default). By - default, sight checks no longer see past "block everything" lines, so - monsters will not be able to melee attack you through them, and explosions - will not be able to do splash damage through them. -- Fixed: Hitscan weapons always triggered the front side of an impact line, - even when they struck the back side. -- Added a fifth argument to Sector_SetColor to control how much the - palette should be desaturated. 0=leave it alone, and 255=shades of - gray. The palette is desaturated before it gets colored. The test color - console command can also take this parameter now. -- Added a new polyobject start spot (#9303) that causes the polyobject to - deal damage whenever it touches a player. -- Changed sprite loading so that you can have sprites with gaps in their - defined frame ranges again. (e.g. create frames A-D and H-N but not E-G) -- Fixed: Minisegs were messing up the polyobject seg detection code when - GL nodes were used. -- Fixed: Fullbright sprites would be drawn fullbright in levels with their - own fadtable (IOW, every foggy Hexen map) because g_level.cpp never made - a note for the renderer to look at discover that the level used a custom - fadetable. -- Added separate floor and ceiling skyboxes. Set the sky picker's second - argument according to what you want to set: 0=floor and ceiling, - 1=ceiling only, or 2=floor only. -- Fixed: Undefined sky textures are once again replaced by the default - texture instead of the empty texture. -- Fixed: Shooting a railgun while standing on a ledge could make you fall - through the ledge because the railgun invisible moves you to the hit - point in case it needs to make a water splash, then moves you back to - your start spot. However, when it moved you back, it did not restore - some important variables like floorz. -- Changed the weaponless marines so that their spawn state does not cycle - between frames A and B. This holds even if you give them a weapon later - in a script, but it does not hold for marines that spawn with a weapon, - even if you take the weapon from them later. -- Fixed: The Heresiarch's orbiting balls did not have their floorz updated - when the Heresiarch's changed, so if the Heresiarch's head went below its - original floor height, its balls would rapidly jump between its head height - and the old floor height. Since it seemed relevant, I also did the same - for ceilingz. I also did it for the SorcFX2 effect (invulnerability - indicator). -- Added support for nested skyboxes. Now you can have one skybox look into - another skybox. The changes required were surprisingly minor. - -August 2, 2003 -- Fixed: Returning from one function to another function failed to take into - account the presence of the calling function's return info when it restored - its local variable pointer. - -July 31, 2003 -- Fixed a crash when using path followers with incomplete paths. - -July 30, 2003 -- Added CheckModified() method to FTexture for the benefit of ZDoomGL. -- Added nonexistant texture check to the warping texture setup. - -July 28, 2003 -- Removed the ScaleCopy canvas from DBaseStatusBar, because everything is now - drawn to the screen directly even when the status bar is scaled. -- Changed the pitch calculations in the DSimpleCanvas constructor to provide - better wall drawing performance at all resolutions. -- Corrected ::ST_Y calculation so that a scaled status bar does not have its - topmost line overwritten by the view window at certain resolutions. - -July 25, 2003 -- Added DTA_WindowLeft and DTA_WindowRight tags for DCanvas::DrawTexture - to restrict the portion of the source texture that gets drawn to the - screen. Changed doom_sbar.cpp to use these, keeping in mind that they don't - clip the vertical range of the texture. -- Improved the behavior of R_DrawMaskedColumn(Horiz) so that when using - non-integral scaling and drawing adjacent columns that end at different y - locations, the shorter column lines up better with the longer one. -- Fixed: R_SetSpanSize_ASM had the x and y sizes swapped when called in a - release build but not a debug build. To fix, I just removed its __regargs - entry point. - -July 20, 2003 -- Disabled interpolation for sliding polyobjects that complete their movement - in fewer than three tics. (The moving crate effect in Massmouth 2 this fixes - needs two tics to reloop the crate.) -- Turned off interpolation of instant movement floors and ceilings so as not - to ruin the fake moving sector effect used in a few wads. -- Added a call to R_SetupBuffer() at the end of R_RenderViewToCanvas so that - the ylookup table will be correct if the game was saved while watching the - automap. -- Fixed: Every two-sided line was storing midtexture information even if it - didn't have a midtexture. -- Changed ylookup into an array of ints instead of BYTE*s so that I can still - use the common column drawers for everything even when the viewwindow does - not start at (0,0). If you were using "dc_ylookup[y]" before, now you need to - use "dc_ylookup[y] + dc_destorg" to get the same value. -- Fixed: Skybox ceilings could sometimes be left undrawn if they were in the - same sector as a skybox floor because I was missing a check for plane height - in R_FindPlane. This only applies to skyboxes; the check was present for - normal skies. - -July 19, 2003 -- Fixed spacing of the characters on the finale text. -- Fixed clipping of scaled sprites in deep water. - -July 18, 2003 -- Fixed: remove was uninitialized in ParseEpisodeInfo(). - -July 17, 2003 -- Moved the P_LoadBlockmap() call so that it occurs after the nodes are - processed, so if a node build is necessitated, the blockmap gets rebuilt too. -- Fixed detection of empty rejects. -- Stopped loading REJECTs that are too small. They're probably caused by an - outdated node build, so there contents are invalid and using them it is wrong. -- Added more checks for seg validity in P_LoadSegs(). - -July 2, 2003 -- Removed the FROMCEILINGZ128 #define in p_local.h. I'm not sure what that was. -- Added support for properly tiling wall textures whose widths are not a power - of 2. -- Fixed: Heretic and Hexen status bars' artifact flash effect was tied to the - framerate instead of the ticrate. -- Changed the IMGZ loader so that it maps color 0 to 255 and color 255 to 254. -- Changed the cast finale so that it draws "our hero" using the player's suit - color instead of the default green. -- Changed the BOSSBACK drawing so you can make it some size other than 320x200 - if you want. -- Moved StringWidth() out of DCanvas and into FFont, where it really belongs. - -July 1, 2003 -- Changed FPatchTexture::MakeTexture() so if it is loading a patch used by a - decal it remaps color 255 to 254 rather than to whatever is the closest - matching color in the palette. This is because decals are usually shade - maps rather than paletted graphics, so changing color 255 to something - in the middle of the palette looks bad. I also changed it so that it - contstructs spans from the existing column data instead of rescanning the - image for the transparent color, so it should be slightly faster, although - it probably doesn't matter, since each patch will only be loaded at most - once per level. -- Added a fix for sprites that have some, but not all, of their frames - defined. I found this one when I tried to play Doom Raider. Ironically, - it worked in 2.0.47 because I had a bug in the code that detected - undefined frames. To fix, any undefined frames are made into copies of - the first defined frame. - -June 30, 2003 -- Added a check to P_TestActivateLine() so that doors faster than 32 cannot - be opened by monsters. -- Fixed: If only the right-most texture column of a wall is visible, the - left-most texture column would be drawn instead. -- Added the ability for the SetFont ACS command to load normal pictures as - fonts. When used this way, it creates a new font with only the letter A - defined, and the letter A is drawn as whatever the picture is. This - effectively allows you to use HudMessage like a HudPic command. The - drawback to this method is that you cannot use any color translations, as - you can with real fonts. - -June 28, 2003 -- Removed i_remapkeypad cvar. The keypad is now always considered separate - from the main keyboard. This was really just something I had left over from - the very early days of ZDoom before it even had Quake-style keybinding. -- Added prioritization of HUD messages. Lower-numbered IDs are drawn in front - of higher-numbered IDs. An ID of -1 is identical to 0, except it gets drawn - behind everything else. -- Made the puke console command work across the network. -- Fixed a crash bug in the node builder when the back side of a line - shares endpoints with another seg, but the front side does not. -- Reimplemented texture warping for the new texture system. You should - even be able to warp sprites if you make their widths and heights - powers of 2, but I did not bother creating any such sprites to test - with. -- Added another BOOM fix I just now became aware of: Donuts in Doom would start - even if the pool sector was already moving. - -June 26, 2003 -- Removed all the masked block functions, since they are no longer used. -- Changed fonts into collections of textures. -- Extended my CPUID code to gather more information. -- Spent enough time with a P4 to find out which of the vlinetallasm4 - routines works best with it. Answer: They are about the same, and both - are about 20% slower than the Athlon version running on an Athlon. - -June 25, 2003 -- Moved all the self-modifying code out of the .data section and into the - .rtext section. Unfortunately, NASM does not support creating writeable - code sections (even though the object file format does support this), so - I create them as regular read-only code sections in NASM and then modify - them to be writeable using VirtualProtect() at run-time. -- Tried unrolling vlinetallasm4 to see if I could eek out some more - performance from it. Unfortunately, it was slower at first and about the - same at best, so I decided not to keep the unrolled version. - -June 23, 2003 -- Tried writing an optimized version of DFrameBuffer::CopyFromBuff() using - prefetchnta and movntq, but it performed just as well as memcpy. Probably - because video memory is much slower than system memory, so you don't really - notice any of the inefficiencies of the rep movsd instruction that memcpy - uses. -- Modified vlinetallasm4 slightly so that it executes in about 65%-81% of the - time it used to take on my Athlon XP (depending on resolution) by reordering - the instructions for parallelism. Note that this is the exact same - optimization I tried earlier that reduced performance on a Pentium III-M. - Also, the old version of the function still uses fewer cycles on a P3 than - the new version uses on an Athlon XP. (7 cycles/pixel compared to 4.8 - cycles/pixel at 800x600). I am curious which version a Pentium 4 likes more. - I will keep them both around and only select the new version for people with - AMD processors belonging to family 6 or higher. The K6 might also like the - Athlon version, but I don't have a K6 to test with, so I will leave it as - it is now. - -June 21, 2003 -- Modified R_DrawColumnP_ASM() so that it has an alternate version of the - inner loop without any writes to ch and hence, no partial register stalls. -- Removed the R_StretchColumn() function. -- Consolidated all the different patch drawing functions from DCanvas into a - single DrawTexture() function. Amiga-style tag lists are used to pass it - optional parameters to produce the same results as the old functions. - -June 20, 2003 -- Changed FImageCollection so that it is nothing more than an array of - texture indices. - -June 19, 2003 -- Finished moving everything to the new texture system. There is still a - little work yet to do, but at least the only place where patches are used - any more is in the texture loaders. - -June 13, 2003 -- BTW, with the new texture system, you don't need to have every single texture - defined in a single TEXTURE1 or TEXTURE2 lump. You do need to restrict - yourself to just one TEXTURE1 and/or TEXTURE2 lump per wad, but they don't - need to contain definitions for all the textures from the IWAD, since each - wad's texture definitions are loaded separately. -- Fixed decals for the new texture system. -- Added support for the rotation information Blood added to the art files. - -June 12, 2003 -- Changed screenshot capturing slightly so that it does not need to redraw the - screen, so now it can capture the framerate in the corner. -- Added support for animating Build tiles. -- Added a new thing to use for spawning sprites in Build maps. -- Got sprites working with the new texture system. - -June 11, 2003 -- Fixed X-Y scale of Build maps. I had it twice as big as it should have been. -- Fixed the assembly slope drawer to work with non-square textures. - -June 10, 2003 -- After putting it off for far too long, I finally started working on a unified - texture system that will let me treat sprites, flats, and wall textures all - the same. Sprites are not done yet, but now Build maps can be viewed with - the correct floors and ceilings. One consequence of this change is that flats - are now stored in column-major format instead of row-major format, so I had - to changed the span drawers to account for this. -- Added a new MAPINFO flag: NoInventoryBar - prevents the inventory bar from - ever appearing in a Doom map. Also changed the Doom inventory bar so that it - won't be drawn if you have no inventory items, even if you press the inventory - selection keys. -- Changed PTR_UseTraverse() to continue traversal when a backward-facing line - is encountered. - -June 9, 2003 -- Fixed: Batman Doom no longer crashes during the cast finale. -- Made the texture error checking slightly more lax. It seems there is some tool - that likes to write to unused areas of the texture directory meaninglessly. -- Fixed a prediction bug caused by moving between sectors with different friction - levels. P_GetFriction() is sensitive to the ordering of the touching_sectorlist, - so I need to preserve this ordering before and after prediction. - -June 7, 2003 -- Changed my transparent color from 0 to 255. An analysis of the original Doom, - Heretic, and Hexen graphics revealed that this color was never used. It was - probably going to be the transparent color before the Doom engine switched to - using spans. But the real reason for the switch is because 255 is the color - the Build engine uses for transparency, so I can draw its sprites without - doing anything special. - -June 6, 2003 -- Made a slight fix to the frame interpolation: The time when the game tic is - run is the base time I need to use for interpolation. Otherwise, the display - could glitch if a tic passes between the time the gametic is run and the time - it is displayed. -- Added a workaround for NT 4: Somebody goofed, and the default registry entry - for CLSID_DirectInput under NT 4 has the wrong GUID. Two of the hexits are - swapped so that it is stored in the registry as - {25E609E0-B259-11CF-BFC7-444535540000} instead of as - {25E609E0-B259-11CF-BFC7-444553540000}. You can fix this by running - "regsvr32 dinput.dll" from a command prompt, or you can bypass it by loading - dinput.dll and using DirectInputCreate to obtain an interface. Since I can't - expect everybody running NT 4 to run regsvr32, I have to do the latter. :-( -- Fixed: Killing a morphed monster left an inert copy of the original monster - around, so scripts that depended on being able to use thingcount() to determine - when all the monsters of a certain type are dead would fail. -- Changed the Pig's and Chicken's MF_COUNTKILL bit to MF3_ISMONSTER, so morphing - a monster does not add to the total number of monsters on the level. -- Fixed: FDoomStatusBar::DrawToSBar could create a partially transparent status - bar because it left color 0 alone. I use color 0 as a transparent color for - image blocks like this. (Though the status bar doesn't really need to be - drawn with transparent parts, it was convenient to do it that way.) -- Changed the tid and TIDtoHate members of AActor from unsigned to signed, so - that you can use negative tags with your teleporters. - -June 2, 2003 -- Fixed: Absolute lighting on walls was very dark. I don't think I have this - feature accessable through Doom/Hexen maps, so you only notice it if you - try to load a BUILD map. -- Added some command-line parameters to help make BUILD maps look better: - -art Specifies the directory with the TILESxxx.ART files. - -bpal Specifies the palette.dat file. - So if I want to look at the Blood maps, I can do this: - zdoom -art d:\games\blood -bpal d:\games\blood\palette.dat -file d:\games\blood\*.map - (assuming that I have already extracted all the maps from the RFF file). - Unfortunately, the tiles only show up on walls. I need to create a unified - texture system so that wall textures and flats can be used identically. -- Fixed: Bots would only move on the arbitrator's computer in a net game. -- Fixed: If foggy and non-foggy areas were visible simultaneously, gun - flashes would sometimes light the foggy area. -- Fixed: R_ResetViewInterpolation did not actually work. -- Fixed: Line-to-line teleporters did net reset the view interpolation. -- Fixed: The super-fast projectiles in Heretic and Hexen with custom Tickers - did not update their previous positions, so they could not be interpolated - correctly by the renderer. - -May 31, 2003 -- Added support for loading Blood maps. They are no more playable than - normal BUILD maps, but since I can already load Blood sounds and BUILD maps, - it seemed like the thing to do. -- Fixed: Loading BUILD maps was broken because they did not initialize - sectors' ZoneNumber. -- Changed the default for vid_vsync from true to false, because with the - unlimited framerate, no vsync actually produces better control. - -May 30, 2003 -- Added interpolation for moving polyobjects. -- Optimized SpawnPolyobj() and IterFindPolySegs() so that they are loads - faster. - -May 29, 2003 -- Fixed Dehacked support for patches that swap sprite names instead of - changing them to something completely new. -- Fixed the new net code to recover properly in situations where there is - high packet loss. Except for one instance: If a player quits with -netmode - 1, and the packet with that quit notification gets dropped, it never gets - sent again, so any players left will hang waiting for tic updates for a - player who is no longer there. -- Rewrote D_ArbitrateNetStart() so that all data passes through the host. - This should allow computers on separate networks to play together as long - as they can all talk to the host and you use -netmode 1. -- Bumped BACKUPTICS up from 12 to 36. -- Finally finished decoupling -dup from the game ticker. Getting it to work - without consistancy failures was a lot more work than I expected. - Fortunately, I think it was worth it. I can notice little difference now - between -dup 5 and no -dup (aka -dup 1). Before, doing that would take - your framerate down to 7 FPS, rendering the game practically unplayable. - -May 28, 2003 -- Started decoupling -dup from the framerate. -- Fixed an obscure crash bug caused by drawing past the bottom of composite - textures whose heights are not powers of 2. If the composite texture was - constructed at the end of a page of memory, the game could read into the - next page, which is bad if the next page is not mapped in. - -May 27, 2003 -- Framerates above 35 FPS should now be done. Whether or not it's good in a - net game, I'm not sure, since they require rather precise timing to play - smoothly. -- Added interpolation for every actor in the game, after I watched a rocket - flying and it was obvious that its position was updating less often than - the view. -- Added functions from BUILD for interpolating floor and ceiling movement. -- Added some view interpolation to allow frame rates above 35 FPS. It looks - very nice (and playing at 35 FPS now looks very bad), _except_ it sometimes - misses a tic so you get an annoying hiccup that is worse than just keeping - things locked at 35 FPS. This is despite my sprinkling NetUpdate calls to - some of the most frequently used rendering functions. [edit: It seems the - hiccups were because I had a background program running; even at idle - priority, it still stole a little time away from ZDoom every now and then.] - -May 23, 2003 -- Got a crash in R_SetWindow() when it was setting the value of the r_viewsize - cvar. After recompiling with the _CRTDBG_CHECK_ALWAYS_DF flag, I could not - reproduce it to find out why it happened. Poo. -- Added player movement prediction to make network games feel more responsive - when gametic is lagging behind maketic. You can turn it off by setting - cl_noprediction to true. -- Fixed: Using -extratic with the packet server crashed because it tried - to send tic -1, which doesn't exist. I don't know why it didn't cause - problems with the regular peer mode. -- Stopped using all named RNGs to check game consistancy. I have too many - named ones that aren't all used in the gameplay loop. Now I just pick a - few key RNGs and use those. -- Added another byte to the packets sent from the master to the slaves that - contains the master's maketic. This is so that the slaves speed up or - slow down to match the master instead of each other. - -May 22, 2003 -- Corrected my misunderstanding of how the frameskip array is used in - d_net.cpp. -- I found out how to make three player games perform fine on XP: Set the - processor scheduling back from "Background services" to "Programs". - Here's a link to an article that explains the values for the - HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\PriorityControl\ - Win32PrioritySeparation key that this setting changes: - . I think - it's probably more the short time slices than anything else that makes - it perform well. Why had I changed it from "Programs" in the first place? - Because I was having trouble with background console programs sucking - up all the CPU time, so I wanted to give everything equal time slices. - I now have the registry key set to 0x20, which is short, fixed time slices. - Not quite the same as the "Programs" setting. - Using the release build - instead of the debug build obviously helps performance, too. - -May 21, 2003 -- Tried playing a multiplayer game on two machines for the first time in - ages, and it went out of sync very quickly. It turns out that my laptop - had genblockmap false, and my desktop had genblockmap true. Since this - obviously makes it go out of sync, I'll have to make it a server var. - Gennodes will need the same treatment, since it also implies genblockmap - even if genblockmap is false. For ZDoomGL, however... I suppose I'll need - to disable the blockmap regeneration if the nodes are only being built - to get GL information. -- Wrote some code to let the net arbitrator function as a packet server. It - makes everybody jerky, but that might just be because I'm running two - clients on XP, and XP seems to do much worse at dividing processor time - up equally between processes than NT 4. A two player game on one machine - runs fine after a second or two, but three players is crap. - [Okay, tried it on three separate machines, and it wasn't jerky, so that's - a relief. Gametic was lagging behind maketic by 4 on the host, however, so - it wasn't quite as responsive as I would have liked. That's opposite what - I would have expected, since the host gets the ticcmds from the other - players first. Maybe I need to investigate the code where it "speeds up - time" some more. Or maybe I need to have the master send as many tics as - it has for the other machines instead of the lowest common number of tics; - e.g. If it has 1 tic from one machine and 2 tics from another, it should - send all of them to a third machine instead of just 1 tic each from the - first two machines. For comparison, a 2 player game (which is effectively - always peer-to-peer even with packet server turned on), had gametic lag - behind maketic by 2.] -- Removed the names from these RNGs: pr_chainwiggle, pr_afx, pr_decal, and - pr_decalchoice. I don't know why it happens, but they can sometimes - disagree with each other in a network game, particularly pr_decal. Since - they don't have any real impact on game sync, removing their names keeps - them from affecting the sync check, but it also means they won't be - remembered across save games. -- Added DEM_EMPTYUSERCMD so that if a player's input doesn't change from one - tic to the next, I can save one byte in the network packet. That makes the - minimum packet size for one tic 5 bytes: 2 for the header, 2 for - consistancy, and 1 for the tic itself. I'd call that a big improvement over - the previous minimum size of 14 bytes (8 header, 2 to hold the list of - players in that packet, 2 for consistancy, and 2 for the tic). -- Fixed: Damaging a monster would not reset its threshold value, so it would - be more willing to switch targets than it should have been. -- Changed AActor::StaticSpawn() to not initialize the LastLook member for - non-monsters. This caused the game to go out of sync when non-essential - actors were spawned on one machine and not another (e.g. decals and bot - aiming helpers). - -May 20, 2003 -- Beefed up the consistancy checking so that it now considers more than just - the players' X positions. - -May 19, 2003 -- Optimized the size of the network packets some. The minimum header size is - now 2 bytes instead of 10. Note that I removed the checksum from the header. - The network transport should already be doing error checking and not provide - us with any corrupt packets. In the highly unlikely event that somebody ports - this back to DOS, they'll need to add a checksum in there. Also made some - corrections to the packets that get sent around before the game begins. - -May 16, 2003 -- Made active powerup colors customizable via dehacked misc section. -- Changed the netbuffer checksum to use CRC32 (which gets used like a CRC28 - because the top 4 bits are chopped off to make room for some command bits). - I could probably get rid of the checksum entirely, since UDP packets - already include their own checksum field. -- Fixed: When one player in a network game unexpectedly quit, everybody else - would bomb out with ECONNRESET. Now the i_net.cpp code pretends that those - players sent out NCMD_EXIT packets. Why a connectionless protocol like UDP - would return a connection-oriented error code, I do not know. -- Starting a network game with the -join parameter before the host started - would fail with ECONNRESET. This is no longer an error, so you don't - need to start the host first anymore. -- Added MF2_NOTELEPORT to TeleportFog. - -May 5, 2003 -- Fixed: P_Move() used the actor's default speed instead of the actor's - speed. - -May 2, 2003 -- Added mousewheel support to the console. - -April 26, 2003 -- Uploaded 2.0.47. -- Added support for custom episode definitions (for all games, not just - those that are already divided into episodes). -- Fixed: Doom Shareware does not have an ENDPIC graphic, so don't try to - show it. -- Added a visible inventory bar for Doom. - -April 25, 2003 -- Added APROP_Ambush for Set/GetActorProperty. -- Added myasctime() function, which is equivalent to - asctime(localtime(&time(NULL))), except it doesn't crash when the current - time is before Jan 1, 1970 (which makes localtime return NULL). - -April 20, 2003 -- Added a NULL file check to M_NotifyNewSave(). I was sent a crash report - where this appears to have been the cause. -- Fixed: Using teleporters with actor hits ceiling/floor triggers was - problematic because the actor would still be clipped to its new ceiling - or floor even if the teleport made it unnecessary -- Finished Thing_ProjectileIntercept so that it works in three dimensions. - Big thanks to all those on the notgod phorum who helped me with the math. - -April 16, 2003 -- Extended my speedup trick for 1024x768 so that it also gets used for - 2048x1536 and 512x384. I can now play the beginning of MAP01 in 2048x1536 - at ~28 fps instead of 14 fps. 512x384 is so small that it doesn't really - matter, but I think it is a few tenths of a millisecond faster now. What - I think is going on: If the screen's pitch is a power of 2, then drawing - columns (which Doom does a lot of in its renderer unless you're looking at - the floor) will flush the cache lines a bunch and bring performance - plummetting, as it has to transfer much more data to and from main memory. - By making the pitch slightly larger so that it isn't a power of 2, the - cache gets utilized better, so performance goes up. -- Started adding Thing_ProjectileIntercept special (175). It is identical to - Thing_ProjectileAimed, except it leads the target. -- Fixed: Activating SoundEnvironment actors did not work, because I forgot - to include the AActor * parameter in the prototypes. - -April 14, 2003 -- Uploaded 2.0.46. -- Added support for adding new projectiles to DECORATE. -- Changed the summon cheat so that it can be used to shoot projectiles - and not just spawn them in place. -- Made the Lost Souls spawned by Pain Elementals inherit the Pain - Elementals' hate information. -- Fixed the poison dart's poison application. -- Added a NULL-actor check to P_DisconnectEffect(), because I received a - crash log where it was called with a NULL actor. - -April 12, 2003 -- Fixed: The calulation of secplane_t::ic was different in p_setup.cpp's - slope spawners than it was in secplane_t's serializer, so if a demo was - made on a level with slopes, and the game was saved during the course of - the demo, the demo would desync if the player went on a slope after the - save. -- Fixed: If a DirectInput 8 interface could not be obtained, the game would - hang while trying to read mouse input using the DirectInput 3 interface. - This is because DI8 has a DIDEVICEOBJECTDATA structure that is 4 bytes - larger than DI3's. Unfortunately, IDirectInputDevice::GetDeviceData() does - not do anything useful when passed a structure larger than it recognizes. - It leaves the buffer alone, does not touch *pdwInOut, and returns DI_OK, - which is quite misleading. I had to step into DirectInput before I - realized what was going on, although I could have also discovered it by - browsing dinput.h more thoroughly. - -April 11, 2003 -- Moved joystick reading out of I_GetEvent() and into I_StartFrame(). That's - where it was in the original DOS Doom, because reading a traditional - gameport can be an expensive operation (though I think USB is much faster). - -April 9, 2003 -- note to self: Remove BOOGA s -- Fixed: Thing_Projectile2 wasn't shifting the zspeed over. -- Fixed: The slopes created with P_SetSlope() had their orientations inverted. -- Time to upload 2.0.45. -- Made "cyborg" a synonym for the "other" gender, for compatibility reasons. -- Fixed: Forget "== 0" after stricmp (Line1, "No Ice Death"). - -April 8, 2003 -- Uploaded 2.0.44. -- Changed A_FreezeDeathChunks() to not use S_FREETARGMOBJ. It just destroys - the actor instead. I should probably get rid of S_FREETARGMOBJ globally, - since it isn't really needed with my stale pointer cleanup code. -- Fixed lockups caused by changing the TID of an actor stored in another - actor's LastLook member because of Thing_Hate. -- Made MF4_NOICEDEATH accessible through Dehacked as "No Ice Death". -- Added "No Autofreeze" as a misc Dehacked setting. -- Fixed the "Entering Unnamed" text that could be seen when finishing a game. -- Fixed: Frozen things could not be shattered with radius damage, because the - thrust they got after the damage would reset their tic counters to 3 seconds. -- New: The marines now start with the same sprite scaling as the player, and - AScriptedMarine::SetSprite() now copies the scaling of the actor it's taking - the new sprite from. -- Added some code to check for fake floor/ceiling sector actions when an actor - moves up or down because of moving floors and ceilings. -- Fixed: SetActorProperty for APROP_Health assumed you were working with - players after I added the player fix for it. -- Fixed: The plasma ball still had MF2_ICEDAMAGE from my testing. -- Fixed: Gender selection in the menu was broken because I had changed to - "cyborg" to "other" in m_menu.cpp but not in d_netinfo.cpp. Justification: - You can have male and female cyborgs, so cyborg isn't a proper gender. -- Some files were missing from the VC6 and Dev-C++ projects, so fixed that. - -April 7, 2003 -- Uploaded 2.0.43. -- Fixed incorrect end-of-LevelInfos detection. Interestingly, it only crashed - when compiled with GCC. -- Updated the crash logger to display the exception information for an - access violation. -- Added Thing_Projectile2 ACS command. It's mostly a clone of the - Thing_Projectile and Thing_ProjectileGravity specials, but it lets you give - the projectile a TID. -- Added a newtid parameter to the Thing_ProjectileAimed special. -- Fixed flat warping so that it does not crash with flats smaller than 64x64. -- Fixed: The secondary frost shards shed by the mage's primary frost missile - could damage the player who shot them. -- Made the randomization of the starting tic count for missiles an actor flag. - This is so that Heretic and Hexen missiles can be better used in a Doom game. - -April 6, 2003 -- Added a check for NULL players to DCajunMaster::WhatToGet() because I got - a bug report where that happened. -- Fixed: MF3_NOTARGET only worked if the attackers's TID was non-0 or you used - Thing_Hate on the target. -- Fixed: The Heretic staff was able to damage ghost enemies, which it - isn't supposed to be able to do. -- Fixed: In their charge attack, Minotaurs could only do damage to other - monsters and not to players. - -April 5, 2003 -- Created a minimal FLAC distribution with just the parts ZDoom needs to - compile, so the lazy people who want to build don't need to grab the - library themselves. -- Changed A_FreezeDeathChunks() so that it spawns more ice chunks for large - things than it does for small things. -- Added a generic ice death, so things can turn to ice and shatter without - having a specific ice death. Now you can use bex to create a Doom missile - that does ice damage and watch Hexen's cool ice death. -- Fixed: Radius damage did more thrust as your distance from the bomb - source increased. - -April 2, 2003 -- Changed ripper projectiles to do damage per-tic and not per-step. This is - more intuitive and also makes for better Heretic/Hexen compatibility, - since those games don't adjust the step count with projectile size (unless - the radius > 15, but none of their ripping projectiles are that big). -- Fixed some weirdness that can happen when the listener is positioned - directly on a sound source in 3D sound mode by moving the listener - back slightly from its true location. It was especially pronounced with - the nForce but can also be heard with the Audigy depending on the - environment settings. -- Fixed: Sector sounds always played at Z coordinate 0, so they weren't - always audible when using 3D sound. -- Added all the EAX presets from UT2003 and verified that the SNDEAX parser - actually works. Also tweaked the EAX editor a bit. - -April 1, 2003 -- Updated to FMOD 3.62. -- Fixed: Loading more than one dehacked patch (through some means other - than an include statement) that altered state information would not work - because only the first one would be able to find the correct locations - of the original numbered states. - -March 31, 2003 -- Fixed: PCD_PRINTNAME with input values 1 through 8 did not work properly. - -March 29, 2003 -- Added support for normal, buring, and frozen deaths to decorations. Still - need to test these. -- Changed P_SeekerMissile() to aim at the center of targets when seeking - vertically, rather than at the targets' feet. -- Fixed: MF_ICECORPSE was not being set when things froze to death. -- Changed DCanvas::TextSWrapper() so that it can draw characters that are - clipped, since that was fixed in the underlying block drawers a long - time ago. -- Fixed: V_BreakLines() crashed if it encountered a character wider than the - width of the box used to break the text in. - -March 27, 2003 -- Added support for playing SLIGE-generated maps without running them through - a node builder first. - -March 26, 2003 -- Added support for FLAC music and sounds. See - for more information about what FLAC is. Since it's a lossless codec, I - don't really want to see people using it for music, but the option is - there none-the-less. All the sounds in zdoom.wad (sans DSEMPTY) have now - been compressed using FLAC. -- Added a fix for fonts that contain color 255 in their glyphs. LWM had some - fonts like this, and it counts as a bug in imagetool (which I have now - fixed). - -March 22, 2003 -- Made more flags available to decorations. - -March 21, 2003 -- Added Alt-Enter as a hotkey for toggling between fullscreen and windowed - modes, as is customary for Windows programs. Also discovered that I can't - seem to run fullscreen through the debugger anymore without the game - window minimizing. [Must have been something screwy going on then; I can - run it fullscreen under the debugger now.] -- Revamped the joystick menu to support axis mapping and multiple controllers. - Under Windows versions that send DBT_DEVNODES_CHANGED broadcasts, it even - updates itself automatically when you attach/detach USB controllers. -- Changed MF2_REFLECTIVE behavior so that missiles also get reflected - vertically. -- Changed all the weapon state functions' prototyes from (player_t*, pspdef_t*) - to (AActor*, pspdef_t*). Now they have the same first parameter as the - standard state functions, so bex/dehacked patches should be able to use the - standard code pointers with players, so long as they don't need a target - or something similar that player's don't maintain. It also means that weapon - functions that do very generic things like just playing a sound should work - with non-weapons. -- Changed AActor::UpdateWaterLevel to accurately reflect when a player's eyes - are underwater. -- Made setslot usable from KEYCONF lumps. - -March 19, 2003 -- Updated the joystick code to use DirectInput instead of the old multimedia - system. -- Removed dxcrap.cpp. I am linking with dinput(8).lib again. -- Fixed: If Trace() did not hit a wall in a sector with a fake floor before - the trace ran out, it would not set CrossedWater even if the trace crossed - below the fake floor. -- Altered P_LineAttack() so that it doesn't spawn bullet puffs on lines - using the Line_Horizon special. - -March 17, 2003 -- Added a check for a NULL lastenemy in A_LightningClip() because Mike B. had - a crash where this was NULL. -- Gave the fist and chainsaw AmmoUse values of 1, so dehacked patches that make - them ammo-using will use ammo without needing to specify a new AmmoUse. -- Added new sound sequences for the Heretic doors, because they don't have the - same sound usage as Doom's. -- Fixed: The powered-up phoenix rod would use ammo when a Tome of Power ran out - and infinite ammo was enabled. -- Added SpawnPoint initialization to AActor::StaticSpawn(), so things that get - spawned during the game can respawn someplace other than (0,0). -- Changed projectile impact lines so that the projectile's owner activates the - script instead of the projectile itself. Projectile cross lines will still be - activated by the projectile. -- Fixed: The window drew over the video window when WM_PAINT was received while - playing a movie in windowed mode. -- Fixed: Closing the window while a movie was playing would close the window - without quitting the game. -- Fixed: Fake inventory items cleared their special after being picked up. -- Added support for setting the player's speed using SetActorProperty() - and APROP_Speed. This speed gets multiplied to the player's normal - speed. -- Changed A_BrainSpit() so that it does not rely on a pointer to the - DBrainState in the BrainEye that calls it. This allows it to be used - by actors other than the eye, which is necessary because of Dehacked. - -March 13, 2003 -- Fixed: Loading a FON2 font without a space or N character would read - (essentially) undefined memory when calculating the width to use for the - space character. - -March 11, 2003 -- Removed the old midiStream-based code. -- Wrote a SNDEAX lump parser. -- Fixed: Aliases defined in KEYCONF lumps were still saved to the ini. They - could also override aliases stored in the ini. Now, if an alias is defined - in a KEYCONF, it will not be saved to the ini, and if there is an alias with - the same name already defined in the ini, the original alias will be kept in - the ini when you quit. - -March 10, 2003 -- Fixed: Defining an animation for a non-existant texture could stomp on memory. -- Added support for different sound zones with individual EAX settings. To assign - sectors to different zones, you either make them physically unconnected or you - use a Line_SetIdentification with the second parameter set to 1. -- Fixed: Changed FindLevelByWarpTrans() search order to return later warptrans - matches in favor of earlier ones, so you can start Hexen DK with the menu - again. -- Fixed: AZShrub2::GetExplodeParms() and AZXmasTree::GetExplodeParms() were - mis-named and had the wrong prototypes, so they were never called. -- Added a hack when playing Hexen so that the BLANK texture is permanently mapped - to the empty texture. The standard Hexen maps use it as an empty texture, - even though it isn't really empty. - -March 8, 2003 -- Changed sprite initialization so that TNT1 is always the first sprite. This - is what I wanted a long time ago, and I think it used to be like this but - got changed when I rearranged the sprite table initialization. -- Changed the TID target search so that it looks for actors in the same block - before it searches the actor chains. Helm's Deep's AI seems a bit quicker once - things get going now, but there are still bits of architecture (lots of masked - mid textures) that are going to slow it down, and it's still slow at the - beginning and when the second wave starts moving. - -February 24, 2003 -- Decided to take up the challenge and figure out how to load Strife textures. - It looks like they just removed some unused fields from the texture - directory. Now you can actually load strife1.wad and look at the maps, but - there are still plenty of oportunities to make it crash if you try to use - it as an iwad. -- Added a check for negative texture patchcounts to R_InitTextures(), just - for the people who try to use -iwad strife1.wad. -- Fixed: The game would hang when trying to overwrite an read-only savegame - for the same reason it used to hang when playing back a save operation - recorded in a demo: The save itself was cancelled, but the request to save - was not cancelled, so it would endlessly try to save the game. -- Fixed: P_BounceWall() would bounce every bounce type off of walls, but it - shouldn't have done anything for MT2_HERETICBOUNCE. - -February 18, 2003 -- Changed: P_RadiusAttack no longer tries to apply damage when distance is 0. - -February 15, 2003 -- Changed P_SetSlope() to scale by ANGLE_90 instead of ANGLE_180. Silly me; - Scale() works with signed ints, but ANGLE_180 is to big for that, so it - could overflow. - -Feburary 13, 2003 -- Changed: When locating a map by its warptrans number fails, it can now try - to locate it by map number instead. Apparently, an old version of the Hexen - demo did not have warptrans. - -February 12, 2003 -- 2.0.42 time. -- Fixed: If weapon drop was on and a player respawned before their body went - nonblocking, they wouldn't actually drop a weapon. -- Dehacked compatibility fix: MF3_ISMONSTER now copies the state of - MF_COUNTKILL for any actors that get patched. -- BOOM compatibility fix: Lines with a type of 0 still need their ID set to - their tag. P:AR's rotating light on E1M1 requires this for the teleport line - its voodoo doll uses. -- Added code to set the MIDI output device's volume to full for devices that - support it. That makes the full range of volumes available without having - to set the volume with the Windows mixer. -- Fixed: The GiveInventory command would give one inventory item if the amount - was 0. -- Fixed: Inventory items that were not present in a savegame were not reset to - 0 when the savegame was loaded. - -February 10, 2003 -- Added wildcard support to the cmdlist and cvarlist commands, so you can look - at just a subset of the lists. -- Fixed: The total monster count reset when loading saved games so that it would - no longer include monsters that spawned after the start of the level. -- Uploaded 2.0.41. -- Fixed: When a MIDI or MUS song stopped because it reached the end of the song - (if it was nonlooping), the midiOut device would not be released. -- Removed the DirectMusic MIDI option because it wasn't working, and Timidity++ - is a better sounding solution if you can't do hardware wavetable MIDI. -- Fixed: ProduceMIDI() crashed because it had the wrong header check. -- Fixed looping problems with the new MUS player because I accidentally moved - some code in the wrong place. The new MUS and MIDI players also had semi- - random default channel volumes for the same reason. - -February 8, 2003 -- Uploaded 2.0.40. -- Added support for Apogee's EMIDI controllers. - -February 7, 2003 -- Wrote new MUS and MIDI player routines that do not use MIDI streams. Instead, - they use a time critical thread and midiOutShortMsg to send MIDI messages to - the playback device. I have not tried this with a lesser OS like Win98, so I - hope it works okay there. I want to remove the old player code so I that I - just have one method to use for playing MIDI data. This approach offers two - advantages over the stream method as it was employed: 1) Minimal setup time, - so music changes can happen faster. 2) Volume support for everything that - supports channel volume controllers, which is everything I tried. I think I - might also add support for the Apogee Sound System's EMIDI files just because - I have some docs for it. - -February 6, 2003 -- Added mouse and joystick option menus. Also added an option not to - prescale the mouse movements. I've done this all along because it - feels like the vertical sensitivity is much higher than the horizontal - sensitivity, so the prescaling compensates for that perceived difference. - But it could be the reason some people gripe that "ZDoom's mouse feels - different from Doom's! It sux0rz delux0rz!" So now they can turn it off - with a single switch instead of messing with the various mouse sensitivities - to decompensate. -- Fixed: The game did not give up the mouse if use_mouse was false. -- Changed the default ID for lines without a Line_SetIdentification or - similar special to -1 instead of 0. This is so that you can use - Line_SetIdentification to give a line ID 0 and still tell it apart - from all the other lines on the map without IDs. This emulates standard - Hexen behavior and also fixes a bug on caldera.wad, MAP10 where almost - every line on the map would get set to a switch texture right after - you entered it. -- Added support for Hexen's warptrans mapinfo command. I see now that it - gets used to determine which map you start on for a new game. -- Changed MAPINFO parsing so that maps named ExMy will automatically get - their levelnum set to xy unless you specify something different. MAPxx - maps were already getting this treatment. -- Added a syntax error message if you don't specify a valid keyword for a - block in ANIMDEFS. -- Added a non-player check to the A_DoomSkinCheck and A_HereticSkinCheck - functions. I guess if somebody uses Dehacked to assign the player death - states to something else, they could get called by something that isn't - a player. - -February 5, 2003 -- Changed A_KeenDie() to search among whatever called it and not exclusively - among Keens. - -February 4, 2003 -- I can now build a fully working version of ZDoom with MinGW. Perheps now it - is time for me to turn my attention back to Linux. - -February 3, 2003 -- Fixed a stupid bug I added to the tl_tab calculations in fmopl.cpp. -- Fixed: Monsters that hated both players and monsters would crash if there - was more than one player in the game. -- It's 2003 now, isn't it? - -February 2, 2003 -- Uploaded 39.cab. -- Fixed: Dormant actors still bled. -- Added a PatrolSpecial actor (doomednum 9047). It works like - InterpolationSpecial, but for PatrolPoints instead of InterpolationPoints: - When a monster reaches a PatrolPoint, it will execute the specials of any - PatrolSpecials with the same TID as that PatrolPoint. -- Added a new ACS command: SetMarineSprite (tid, "otherClass"); You give it - TID of the marine(s) to change and the name of an actor class to get the - sprite from. - -February 1, 2003 -- Fixed a Heretic/Hexen bug: Actors with a crash state would not crash if - they died on the ground. -- Changed I_InitInput to request a DirectInput 3 interface instead of - whatever the header specifies. It should work with NT 4 again, now. -- Added checks to the marines' attacks to prevent crashes if their targets - unexpectedly disappear. -- Fixed: Monsters could start targetting themselves if they blew up a - nearby barrel (or pod). -- Changed A_VileAttack() so that the Archvile can't hurt itself with its - own fire. -- Fixed: In Hexen you can queue scripts for maps on other hubs. They don't - get cleared along with the world variables, as I had mistakenly believed. - -January 31, 2003 -- Removed the need to press D to set the default resolution at the video - modes menu. This seemed to be a common point of confusion (despite having - the directions right there in the menu), but more importantly it makes the - menu fit on one screen when using 9 pixels per row of text instead of 8. - Heretic and Hexen both look better with 9 pixels of room rather than 8. -- Fixed: Scrolling up past the top of the menu was hard-coded to assume - the Doom font when finding the bottom of a menu, so it didn't work - correctly for Heretic or Hexen. -- Fixed: When pressing up arrow to scroll the top of a menu, its scrollpos - could get set to -1. -- Removed the limit on the number of frames that can assigned to an - animation sequence with ANIMDEFS. - -January 30, 2003 -- Fixed: The old Thing_Hate behavior no longer worked. -- Added the Thing_ChangeTID(oldtid, newtid) special to change the TID of - anything with oldtid to newtid. If oldtid is zero, then whatever activates - it gets its TID changed to newtid. -- Added the ActivatorTID() ACS command to retrieve the TID of the actor - that activated a script. -- Added the PlayerNumber() ACS command for finding out which player is - executing a script. Returns 0-7 for an actual player and -1 for - anything else. -- At GooberMan's request, added bool as a synonym for int to ACC. -- Added support for a KEYCONF lump. This is a limited console script that - can only execute the commands alias, defaultbind, addkeysection, - addmenukey, weaponsection, and addslotdefault. Now a wad with custom - key and weapon bindings doesn't need a separate .cfg file to operate. -- Added weaponsection console command for specifying that the weapon slot - assignments go to some ini section other than the default. -- Fixed: Processing an ACS object's MINI chunk initialized one map variable - too many. -- Fixed: Map variables that were not stored in a savegame were not - zero'd when the game was loaded. -- Changed: Include directives in Dehacked patches will now look for the - specified file in the same directory as the patch they are used from - before they look in the current directory. - -January 29, 2003 -- Changed: Just loading a game is no longer enough to assign a quicksave - slot. You need to either save a game or quickload first. -- New: The pullin command now looks for wads in the same directory as the - script that executed it before it looks for them in the current directory. -- Fixed: Switch definitions in ANIMDEFS with an on state that ends on the same - texture it began on would crash instead of properly detecting the error - and quitting with a useful error message. -- Changed: Voodoo dolls no longer affect a player's deltaviewheight. -- Changed: Voodoo dolls can now be pushed around by damage even when the - player is invulnerable. -- Fixed a bug in P_DamageMobj() I introduced after some reformatting that - prevented voodoo dolls from being pushed around. -- Changed the final output of the OPL2 synth to look like this: - final_output = (chip_output * 1.5) - 18000 - This is because most of the instruments the Doom games use create - waveforms that are primarily located in the upper half of the wave. - (Because, of the four basic waveforms of the OPL2, all but one of them - only use the upper half of a sine wave.) -- Fixed the assembly part of OPLmusicBlock::ServiceStream() to work with - odd-sized buffers. -- Fixed: When the player does not have the invisibility power active, the - weapon would always be drawn with STYLE_Normal instead of whatever style - the player had. -- Added the cleric and mage Icon of the Defender behavior. - -January 27, 2003 -- Fixed the finetuning of double-voice OPL2 instruments, so now the Heretic - musics don't sound like crap. -- Changed the OPL2 emulator to write data to the output buffer a voice at a - time instead of a sample at a time. The speedup isn't as great as I would - have liked, but it does let me avoid doing work for voices that aren't - playing anything, and it should make it easier to optimize in the future. -- Just a note: I think the OPL2 outputs samples at ~49716 Hz. -- Removed the x2 amplification from fmopl2.c's output, because some of the - Heretic songs made it overflow. Looking at sampled output however, it seems - most of the data is going only into the positive half of the wave, so perhaps - I could subtract some constant from the data and keep the amplification. -- Reduced the length of the OPL stream so that it gets filled fourteen times - each second, so that it interrupts the main thread more consistantly and - has less of an impact on the game's "smoothness". - -January 25, 2003 -- Changed the frequency calculations in the OPL2 player to match DMX's (or - so I think). -- Fixed an amplitude problem with the OPL2 synth I inadvertantly introduced - while trying to optimize it. - -January 24, 2003 -- Uploaded 38.cab. -- Added a fix to prevent you from becoming a zombie player when there are - voodoo dolls on a level, and each accumulates enough damage to kill you, - but none of the dolls receives enough damage individually to die. -- Changed monster patrols so that when a monster reaches the end of a path, - it looks in the same direction as the final patrol point. -- Fixed: PIT_RadiusAttack() ignored MF2_NODMGTHRUST, so Hexen's poison cloud - would push things away from it. I also used this to determine if that - function will spray blood splats, but perhaps a poison damage flag would - be better? -- Added the ACS commands SetPlayerProperty and GetPlayerProperty. -- Added different versions of the scripted marine that each use a different - weapon. There's also an ACS command to let you change their weapons at - any time. - -January 23, 2003 -- Added some more Thing_Hate types that can be used to make monsters that hunt - both monsters and players or to ignore players that attack them. -- Made Bishops spawned by Heresiarchs and Wizards spawned by D'Sparil inherit - their masters' hate preferences. -- Made Heresiarchs and Bishops ignore each other. I didn't check if this was - original Hexen behavior or not, but it seems stupid for a Heresiarch to kill - a Bishop it just summoned simply because the Bishop happened to hit it. -- Added a new invisible thing (#9076) that you can make monsters attack using - Thing_Hate. It's probably best to place this next to something solid, since - it blocks projectiles (including the player's) and affects the player's aim. - The angle you give it determines how much health it has, 1 degree is 10 hit - points, 2 degrees is 20 hit points, etc. Give it an angle of 0, and it never - dies. The angle field is used for this instead of one of the argument fields - so that it can still execute a death special. -- Fixed: P_NightmareRespawn() assigned the old body's spawn parameters to the - teleport flash instead of to the new body, so when the new body respawned, - it would respawn at (0,0) instead of its original location. Also set the - respawn chance back to ~1.6% instead of the 100% I had been using earlier - for testing. - -January 22, 2003 -- Uploaded 37.cab. -- Played with A_Chase() a bit more so that monsters that hate monster groups - will look for closer monsters on their way to a monster they can't see. - -January 21, 2003 -- Improved Thing_Hate with a third parameter. Now we have Thing_Hate (tid1, - tid2, type). If type is 0, it behaves just like before: Everything with tid1 - chases after the first thing with tid2 and then promptly forgets their hate - once that thing dies. Set it to 1, and it's much like normal except instead - of looking for players everything with tid1 looks for something with tid2. - And if type is 2, it's just like type 1, except the monsters with tid1 don't - actually need to see any monsters with tid2 before they start chasing after - them, so it's somewhat closer to type 0 than type 1 is. -- Changed Hexen player jumping velocities from 9 to 9.75 because they weren't - jumping as high as they should have been, even though 9 is the value Hexen - uses. The 9.75 was arrived at by playing Hexen.exe, standing next to a wall - to see how far up the texture the player gets when he jumps, and then - tweaking until ZDoom was approximately the same. It is enough, at least, to - make the clock gear in hexdd MAP57 accessible without the Wings of Wrath. - -January 20, 2003 -- Fixed: Dormant monsters should not enter their SeeState when Thing_Hate is - used on them. -- Fixed: In Hexen, the Wings of Wrath do not expire at all in single player - games. I had erroneously believed that landing on the ground would - temporarily halt their timer until you started flying again (which is - incorrect). -- Fixed: At the easiest difficulty, P_DamageMobj halves damage. If the damage - was one, it would become zero. Now if the damage is one, it stays one. - -January 18, 2003 -- Added a PointerSubstitution() method to DObject to replace all pointers - to one object with pointers to another object. This is so that when - something morhps or unmorphs, enemies targetting that actor will be - targetting the correct actor instead of the stale one. -- Added: In Heretic, killing a player as a chicken turns you into a - "super chicken." ZDoom was missing this. -- Removed the redundant P_HealRadius() function. -- Fixed: Palette remapping isn't enough to make Doom skins work with Heretic - because the two games also use different death animations. -- Fixed: The Icon of the Defender gave the name of the Ring of Invincibility - when it was picked up. -- Fixed: The warp console command crashed if you didn't specify enough - parameters. -- Added means-of-death as a third parameter to Thing_Damage. -- Fixed: Items that had been dehacked would not have their MF_DROPPED bit set. -- Added a ShouldStay() method to ADehackedPickup() so that it can get - rerouted to the real pickup. -- Fixed: Single player demos played back with different RNG seeds than they - were recorded with. - -January 16, 2003 -- Fixed assignment of partner segs in FNodeBuilder::FixSplitSharers(). - -January 14, 2003 -- Added NULL-actor checks to P_CheckSight(). - -January 13, 2003 -- Fixed: Advancing to a new level would subtract the number of live monsters - on the old level from the total number of monsters on the new level. -- Fixed: The game tried to play the hall music when doing non-Hexen endings. -- Added world and global arrays for ACS. They are somewhat different from - map arrays: They are one-dimensional and you don't specify a size when - you declare them. Instead, they grow as-needed during normal use. -- Removed sp from DLevelScript, because the stack pointer is always 0 when - RunScript() returns. -- Fixed: PCD_INCMAPARRAY and PCD_DECMAPARRAY used the wrong stack value for - the array index. - -January 11, 2003 -- Assigned spawnid 154 to the Baron's fireball (to be added as T_BARONBALL - to zdefs.acs). - -January 10, 2003 -- Changed sectorsound to use CHAN_AUTO instead of CHAN_BODY. Otherwise, not - all the Hexen "puzzle" switches sound right. -- Fixed: The STREAM_ENUM macro in a_artifacts.h used call-by-value instead of - call-by-reference, so artifact types could be written to an archive, but - they couldn't be read back from it. -- Removed inventorySlotNum, as it was unused. -- Fixed: Reading strings with FArchive would never return NULL, and it left - copies of all the strings read behind in memory. -- Fixed: When sprites were renumbered in a recompile, the sprite scanner in - FArchive would find matching-named skin sprites instead of the real sprites. -- Added a "vapor" SaveVersion 205. This is a version 204 save written by - versions 2.0.33-2.0.36 because arti_pork was added in 2.0.33 and I did not - bump the version. There will be no savegames that are actually written as - version 205, because I changed the way artifacts are saved so I won't have - to worry about this particular problem again in the future. -- Uploaded 36.cab. -- Added a new player property for ACS (PROP_TOTALLYFROZEN #4). When active, it - won't let the player do anything but press +use, which is what PROP_FROZEN - was really supposed to be. -- Added MF_NOLIFTDROP flag for no-gravity things that should not move down - with lifts if they are standing on the lift. This is only used with the - various bridge actors because various ZDoom maps break if they move with the - lift, and the Hexen bridge has visual glitches if it moves so I doubt - anybody used this Hexen behavior. -- Got rid of the orbit table for Hexen's bridge balls. Now they move every tic - instead of every fifth tic and use the finecosine/finesine tables directly. -- Fixed: When a monster was spawned through a script but there was no room - for it, it would still count toward the total monsters on the level. -- Fixed: P_Thing_Spawn() set MF2_PASSMOBJ for flags instead of flags2, so it - was really setting MF_NOCLIP, and the P_TestMobjLocation() check would - always succeed. - -January 9, 2003 -- Added a new player property for ACS (PROP_FLY #3). -- Added a level flag to set monster death special behavior to the Hexen mode: - The things that die activate the specials; not the things that kill them. - You can use MAPINFO to turn this off in Hexen and turn it on in Heretic/Doom. -- Fixed: The Heresiarch used its death inflictor instead of itself as the - activator of its death script. -- Fixed: DLevelScript did not have its activator member recorded in its list - of object pointers. -- Fixed: Saving a game in a demo would cause the program to hang when that - point was reached in the demo. -- Made the game recover from failures during dearchiving thinkers so that - you can actually do more stuff without it crashing. Just needed to add - a try/catch block so that it can undo what was done before it failed. -- Added the -savedir option to specify where savegames are stored. -- Fixed a bug in PIT_FindFloorCeiling(): It used tmthing even though - P_FindFloorCeiling() didn't set it. - -January 8, 2003 -- Fixed: The hexen main menu showed the spinning skulls from Heretic instead - of the fire bulls. - -January 7, 2003 -- Uploaded 35.cab. -- Fixed the node builder to successfully create GL nodes with >64k segs. -- And now the node builder is fixed point again. (Undo is nice.) Making it - exclusively floating point made vrack2big3's BSP take 10 seconds longer to - build. Since the goal was to avoid the cost of int-to-float conversions - every time PointOnSide was called, I'd say it backfired miserably. With just - the change to PointOnSide, it's only about 1 second slower than 2.0.34. -- Okay, the node builder now uses floating point for all its calculations. -- Changed FNodeBuilder::PointOnSide() to use floating point to avoid overflow. - Methinks I should just change the node builder to use floating point - exclusively. Then it won't have to do int-to-float calculations repeatedly. -- Changed A_Tracer() to set the puff type before it calls A_SpawnPuff(). -- Fixed: P_RecursiveSound crashed if it encountered a line that was marked - two-sided but lacked a second side. -- Fixed: The cursor in the Advanced Sound Options menu started one line too - high. -- Added Hexen support to giveinventory/takeinventory/checkinventory and made - them work with cross-game items. -- Fixed: Clock gear 3's inventory image was misspelled as ARLTIGER3. - -January 4, 2003 -- Fixed: findFreeChannel() in mlopl.cpp would try very high channels instead - of the correct ones and access undefined memory. -- Fixed: The Thing_Spawn special would fail to spawn things without - MF2_PASSMOBJ set if there was something already occuping their x,y space, - whatever that thing's z coordinate. This was problematic with the Hexen - bridges. -- Fixed: DDrawFB::PaintToWindow() can get called during the render process - when a WM_PAINT message is received. If the framebuffer was already locked, - this would overwrite the buffer pointer and pitch with those of the - physical screen. This is not normally a problem, but one way to get a - repeatable crash was to turn on any of the pixel doubling modes and switch - from fullscreen to windowed. Simple fix: PaintToWindow() does nothing if - the screen has a non-zero LockCount, and Update() zeros LockCount before - it calls PaintToWindow(). - -January 3, 2003 -- Uploaded 34.cab. -- Added a parameter to AActor::LinkToWorld() to tell it to use the original - incorrect point-on-line side calculations of the Doom engine. This is just - so that the map spots in the emerald key room of Hexen MAP01 will spawn in - their intended sector and not the sector that is technically correct. -- Added a new compatibility option: compat_usewallblocking. Now I see that - there are wads that used non-use lines to block the player from activating - a use line. -- Changed AActor::StaticSpawn() again. When spawning map things, the floor - and ceiling z's are taken from the actor's center point. When spawning - things during gameplay, the true z's are found instead. So P:AR's player - starts are still working, non-players placed in the map will be able to - get stuck in the floor of a neighboring sector, and anything spawned - during the game with ACS (or otherwise) will have the "correct" behavior - and know what their true floor and ceiling z range is. TBD: Should this - be players-only? Decided: Yes, otherwise bullet puffs will appear on - window sills instead of the actual spot where the bullet hit. -- Changed P_FindFloorCeiling() to use different global variables than - P_CheckPosition(), because it can be called within P_CheckPosition(). - Doom has too many global variables for its physics code. - -January 2, 2003 -- Uploaded 33.cab. -- Fixed A_RestoreSpecialPosition() for MF2_FLOATBOB actors. -- Fixed: Made the porkalator and morph ovum separate artifacts. -- Fixed: In Heretic and Hexen, MF2_FLOATBOB objects are always positioned - relative to the floor. In ZDoom, they bob around a central z height, so - they need to have gravity applied to them in order to best approximate - the orginal behavior. -- Created a new function (P_FindFloorCeiling) to find the floor and ceiling - for newly-spawned things. P_CheckPosition() has side effects, so I can't - use it. This is also used by P_TeleportMove() now. -- Uploaded 32.cab. -- Fixed: EV_DoCeiling() only set the crush value for the moving ceiling if it - had a crushing type, so BOOM generalized ceilings could not do crushing - damage. -- More GCC 3.2 cleanup. Everything compiles now--except for zdoom.rc. Windres - can't handle it so I had to settle with a precompiled version. -- Split off the system-specific code from w_wad.cpp into i_wad.cpp. -- Changed AActor::StaticSpawn() so that it uses P_CheckPosition() to get the - real floorz and ceilingz to use in case the actor overlaps a line. -- Gave the fatso's fireball spawnid 153. In zdefs.acs, T_CACODEMONSHOT was - incorrectly named T_MANCUBUSSHOT. -- Created one-parameter version of the W_MapLump functions that return pointers - to const data so that the compiler can be issue warnings if they get assigned - to non-const pointers. -- Added MF2_PUSHWALL to all the Heretic monsters. -- Put back MF2_PASSMOBJ because of the unexpected consequence removing it had: - Overlapping things would push each other to the ceiling. This was most - visible with the invisible bridges, which people have commonly overlapped. - I have taken a different approach to the situation that caused me to remove - it: Now you can't push anything without MF2_PASSMOBJ while riding a lift. - -January 1, 2003 -- Uploaded 30.cab. I hope I didn't break anything I haven't already caught by - getting rid of the zone heap and switching to memory-mapped files. -- Made more input cvars global config (such as m_pitch and m_yaw). -- Changed the sound rolloff factors for Heretic and Hexen. -- Fixed: Unlike Doom and Heretic, Hexen crushers do not continue to move if - there is something being crushed underneath them. Instead, they wait for the - thing underneath to either die or move out of the way. The crushing pillars - you find the first time you visit Hexen MAP03 do not actually kill you if - they don't wait for you to die before fully closing. -- Added support for "fake" lumps so that the music system can continue to play - on-disk music files without having to include them on the command line with - -file. These "fake" lumps are automatically unmapped when they are done being - used so that their memory can be decommitted, but their file handles remain - open because I don't want to deal with also removing lumps at runtime. - -December 31, 2002 -- Changed FRandom::StaticClearRandom() so that different seeds produce more - disparate results in the different RNGs. -- Fixed: FRandom::StaticClearRandom() was not being called after rngseed was - set at game startup. -- Changed the wad loader to use memory mapped files, so now I have better - caching than what the zone heap could hope for, since the VM system does all - the work for me. -- Added a fixup in R_InitTextures() for the Doom E1 sky, which has its patch's - y origin at -8 instead of 0. -- Added the F_EndFinale() function to clean up after the finale is over, since - I can't let the zone heap do it automatically anymore. - -December 30, 2002 -- Removed the zone heap. Everything is done using new/delete and malloc/free - now, so you don't have to worry about specifying a heap large enough. -- Fixed: The [.NetServerInfo] ini sections were still read in single player - games. -- Fixed: The player class filter in P_SpawnMapThing() used SinglePlayerClass[] - instead of player_t::CurrentPlayerClass. -- Put the FMUSIC loader back the way it was so that MODs in WADs work again. -- Changed EV_Teleport() so that if it can't find any teleport destinations, - it looks for a matching map spot instead. This fixes the southern teleporter - in Hexen MAP10. -- Added MF3_DONTMORPH to the Hexen boss monsters. -- Removed MF2_PASSMOBJ flag and made it standard behavior for all actors - because of a test map I received: If an actor with MF2_PASSMOBJ rides up - a lift underneath a non-MF2_PASSMOBJ actor, the top actor would fall inside - of the bottom one once the lift stops. - -December 28, 2002 -- Changed the nodebuilder timer to use I_MSTime() instead of clock/unclock, - because very large maps can make it exceed the 32-bit resolution of - the clock/unclock macros. -- Uploaded 29.cab. -- Moved the R_ClearParticles() call out of G_InitNew() and into P_SetupLevel(). -- Experimented with the 3D sound parameters to find a rolloff factor that - best approximates the software sound. -- Updated to FMOD 3.61. -- Fixed: S_UpdateSounds() still multiplied the SoundCurve volume by 2, so - things decayed twice as quickly as they should have. I would like to get - rid of the SoundCurve use, but I'm not sure how Raven modelled the curve - for Heretic and Hexen. - -December 27, 2002 -- Fixed: The FireDemon could not be perceived to move except when strafing - because it still used PROP_SpeedLong instead of PROP_SpeedFixed. Because - this was the only place where PROP_SpeedLong was used, I got rid of it. - -December 26, 2002 -- Changed the internal subsector_t struct to use 32 bits to keep track of - segs instead of 16, and fixed the node builder up so that it works with - >64k segs. -- Changed the internal node_t struct to allow for more than 32768 subsectors - and nodes. -- Fixed: The fighter played PlayerFighterGrunt instead of FighterGrunt on his - third punch because I didn't realize the two sounds had different names. -- Changed PIT_FloorDrop() to more accurately reflect Hexen's behavior. Things - under gravity move down with the floor if the floor moves fewer than 9 units - in one tic (not 24), and no-gravity things always move down with the floor - (no matter how fast it drops) if they were standing on it. -- Changed forwardmove and sidemove scaling calculations in P_MovePlayer() - so that they won't overflow. -- Changed server vars so that only compatflags and forcewater are archived. - -December 24, 2002 -- Fixed: Autosave still worked when the player was dead. -- Fixed: The Quietus pieces had the wrong spawnids, so they were overriding - the stained glass shards. I'm not sure why they had the wrong numbers. -- Fixed: AZWingedStatueNoSkull and AZGemPedestal had their see and melee - states swapped, so they wouldn't change their appearance when activated. -- Uploaded 28.cab. -- Fixed: When "Monsters Ignore Each Other" was set, monsters could not be - hurt by ACS-spawned projectiles. -- Fixed: Underwater reverb did not work on Audigies anymore because FMOD was - only reporting them as supporting EAX3 reverb and not also EAX2 reverb. -- Fixed: Empty console command lines are not added to the history list. -- Added a new ini section so that select ServerInfo cvars can be remembered - across games. There is a different one for single player games and for net - games, and the net game version is only saved on the machine that acts as - host. -- Added useflechette command, which acts like "use ArtiPoisonBag1,2,or3" - depending on the player that uses it. -- Moved the default +showscores key in Hexen to Scroll Lock, because \ is - already used by "use ArtiHealth". -- Added the Hexen default keys for quick-use of inventory items. -- Added addslotdefault command to only put a weapon in a slot if it isn't - already assigned to a slot. -- Changed P_FindNamedInventory() to use the same names as the actors that - represent the inventory items, for consistancy. -- Gave the pod and explosive barrel MF3_DONTGIB flags so that if -- Changed the setslot and addslot commands so that you cannot have more than - one copy of a weapon in a single slot. - -December 23, 2002 -- Did some cleanup for GCC 3.2. -- Added a fix for wads that have things like FF_END immediately followed by - F_END. - -December 22, 2002 -- Fixed: ThrustFloorUp and ThrustFloorDown did not have spawnids, nor did they - override Activate() and Deactivate(). -- Fixed: P_LoadBuildMap() read numsectors out of the Build map before checking - to make sure there was actually enough data for numsectors to be present. - -December 21, 2002 -- Changed pointer tracking in pointy classes to use pointers to members instead - of offsetof, as per GCC 3.2's suggestion. - -December 20, 2002 -- Turned the vertex and linedef indices in the map data structures into - unsigned words. Everything compiled without warning, so maybe big level - support really is that easy. -- Fixed: Maps with >32k unpacked sidedefs could not be loaded because - sidei_t::a.map in p_setup.cpp was still signed. -- Changed: REJECT lumps with 0 length won't even be loaded now. And REJECTs - that have some length but are nothing but 0s will be freed. -- Fixed: The sprintf in the first case of D_WriteUserInfoStrings() had an - extra comma, so it would crash, making demo recording impossible. -- Fixed: DArgs::CheckValue() did not check to ensure that value is valid. - (That is, that it does not begin with + or -). -- Fixed: Trying to add more bots than there are starts in a coop game would - leave the extra bots as "active", so you could not spawn them even after - removing the existing bots. -- Fixed: Players could not choose their weapons if they loaded a savegame - before starting a new game because weapon assignments were only transmitted - at the start of a new game. -- Added separate translation tables for the player corpses so that when a - player dies and comes back with a sprite that uses a different palette - translation range (i.e. a mage dies and is reincarnated as a fighter), - the corpse will retain the translation the player had at death. This also - means you can't change the color of your corpses anymore. - -December 19, 2002 -- Uploaded 27.cab. -- Fixed: The internal node builder was not setting bPolySeg, so segs would - be randomly marked as belonging to polyobjects if you used the internal - node builder. -- Uploaded 26.cab. -- Fixed: TELEFOGHEIGHT was not being used everywhere it needed to be. -- Changed: P_DropItem() uses the standard Doom drop for items that don't - have gravity (such as the Mage's lightning weapon). -- Changed: Dying puts you into chasecam mode. -- Fixed: The fighter's axe and hammer could not be picked up for mana by the - other classes. -- Moved the assignment to waitingforspawn inside SpawnBot() past the checks - to see if any bots are left to spawn. - -December 18, 2002 -- Fixed the "give armor" cheat for Hexen. -- Added artifacts and puzzlepieces as categories for the give cheat. -- Replaced Killough's blockmap builder with the one I had written for ZDBSP. - The MBF one was found to be incorrect near vertex 0 of Doom's E3M6. There - are probably other problem spots, but that's the one that was first - noticed. -- Fixed: Hexen_sbar.cpp had WPIECEM1 misspelled as WPEICEM1, so the top - part of the Bloodscourge would not appear in the status bar until you had - the complete weapon, which causes a different graphic to be drawn. -- Fixed the elusive hub crashing bug introduced by my November 26 but/hub - "fix". Parsing of NEW_PLR_OBJ and NEW_PLR_CLS_OBJ when m_HubTravel is - true would wait until the object had been parsed before mapping it to - an index. It needs to be mapped immediately after being created so that - any references to it in its stored data will actually refer to it and - not the next object in line. -- Fixed P_SetSectorFriction() so that using a friction amount of 100 - calculates the standard movefactor 2048 instead of 255. -- Changed Sector_SetFriction so that when it's used from a script, it will - clear and set the sector's friction flag as needed. -- Fixed: The fighter's axe and hammer would still use mana when infinite - ammo was turned on. -- Fixed: P_SpawnPlayerMissile spawned missiles with a facing direction - slightly to the right of their real direction when there were no monsters - for it to autoaim at. Among other things, this made the frost cone fire - right of center. -- Fixed: Picking up a flechette would only give you the fighter's variety - because I forgot to uncomment some code after adding the other two player - classes. - -December 13, 2002 -- Uploaded 25.cab. -- Added a hack for 256-tall textures with patches that mark their post - lengths as 0. This lets pleiades.wad and its skies work. -- Multiplied the output of the OPL chips by two so that they aren't so - quiet. -- Gave opl_onechip a callback so that changes to it can take effect - immediately. -- Fixed: findFreeChannel() in mlopl.cpp could crash when going from two - chips to one, because it did not reset the value of last. - -December 12, 2002 -- Fixed an original Hexen bug: EV_RotatePoly() set the first polyobject's - special data to a rotator, then it created a new rotator and assigned it - to the mirror polyobject's specialdata, and then it also assigned the - second rotator to the first polyobject. This left the first rotator - forgotten, and if a player got in the way of one of the polyobjects so - the other one destroyed the rotator, it could crash. -- Uploaded 24.cab. Why cab? Because LZX compression is better than ZIP, and - I'm stuck uploading files with a 56k modem. That's why. The source code - archive alone is almost 700k smaller as a cab than as a zip. That's at - least four or five fewer minutes that I need to wait uploading it. -- Fixed: Bloodscourge projectiles would not pass through non-boss monsters - because AMageStaffFX2::SpecialMissileHit() was incomplete. It is a much - more dangerous weapon now. -- Fixed: ACircleFlame needed a GetExplodeParms() member function so that it - would do the correct damage and not harm the player. -- Uploaded 23.cab. -- Fixed: Dehacked weapon patches did not set the new FWeaponInfo::givingammo - field. - -December 10, 2002 -- Uploaded 22.cab. -- Fixed: If you had a bot with you in a co-op game and you switched levels, - the bot would come with you as normal, and it would also spawn a new copy - of itself later, so you would now have two bots instead of one. -- Moved the player name display for spying up slightly so that it isn't - obscured by the Hexen status bar. -- Added support for terrain-defined friction, so the Hexen ice flat can - behave like ice. -- Fixed: Weapon pieces were not behaving like weapons with sv_weaponstay on. -- Fixed: The spinning invulnerability and maulator icons that appear at the - top of the screen when they are active were not right-aligned. -- Fixed: The maulator artifact had the wrong status bar image. -- Fixed: Using Dragon Skin Bracers to get more than 100% armor would mess - up the armor display in Hexen's automap status bar. -- Now I know why I didn't direct hudmessage and print commands to the - screen of spying players. Changed it back to the way it used to be, so - it doesn't pay attention to the player's camera when deciding whether it - should take effect or not. One solution for this would be to have - separate status bars for each player and just route the messages to the - appropriate status bars. Probably too much effort at this point. -- Fixed: The player faces showed up on the scoreboard even when not playing - Hexen. -- Fixed: The extralight from your gunshots would be used if you weren't - looking through the eyes of a player. -- Uploaded 21.cab. -- Fixed an accidental problem when travelling between levels because - I mis-blocked some code in WI_End(). -- Fixed: Using a flat as an intermission background instead of a full - graphic would not print any text. -- Fixed: FWeaponSlots::StreamInSlots() only cleared the even slots, - so weapnext/weapprev failed, and weapon selection in odd slots would - work wrong. - -December 9, 2002 -- Fixed: Dormant monsters would respawn when monster respawning is - enabled, losing their dormant state and any specials they were given. -- You can spy through your teammates' eyes in deathmatch now, and you - can also see them on the automap. -- Added face icons to the Hexen scoreboard. -- Gave the bots some minor knowledge of Hexen weapons. -- Fixed: The fighter would not get any mana when he picked up his axe - or hammer. -- Added the Hexen finale and intermission screens. - -December 6, 2002 -- Removed M_PBOX from zdoom.wad. M_DrawFrame() draws the box around the - player in the menu now, since it works with all games and not just Doom. -- Added some more choices to the sound options menu. -- Added support for setting player sounds by their real names in skins - (i.e. *xdeath instead of pspdiehi), and added a few more sound mappings - for the Legacy names. -- Added simple palette remapping for skins so that Doom skins can be used - while playing Heretic. - -December 2, 2002 -- Added software OPL2-synthesis for MUS music in order to mimic "the - good old days." I haven't had a soundcard with an OPL chip in six years, - so I don't know how accurate the sound is, but I think it's reasonable. - Pity it takes around 10% of the CPU time on my Athlon XP 1600 (at 44.1 KHz). - The MUS player part of it comes from Vladimir Arnost's MUS Lib, and the - OPL2 part of it is from MAME. - -November 28, 2002 -- Fixed the player setup menu to work with scaled sprites, and added an - option to skins so you can set the scale for more than just the base - sprite. -- Gave each player their own set of weapon slots, so custom slots can be - used in net games and demo playback. -- Added player translations for Hexen. -- Added player class filtering for the Hexen fourth weapon pieces. - -November 26, 2002 -- Added player class filtering for the Hexen weapons. -- Added the "Healing Radius" artifact. -- Fixed a hub travel bug when playing with bots. If there were more bots - in the level being travelled to than the one travelling from, the load - would fail. -- Fixed: ASorcBall::Serialize() did not call its super method. -- Fixed a hub travel bug introduced by the version tracking code: - SaveVersion would not be set before a game was actually saved or loaded, - so snapshots would not load back properly until that happened. Another - related problem is that somebody could load an old savegame with - multiple snapshots and then save it again without revisiting all the - snapshots. Thus, a savegame could have snapshots created with different - versions of the game, so each snapshot needs to carry version information - around with it. - -November 25, 2002 -- Changed the ACS print and hudmessage commands so that if a projectile - activates a script, they will print to the screen of whoever fired the - projectile instead of failing because the projectiles don't have a screen. - Also changed them so that they show up for anybody spying on the person - who activated the script. -- Added the pig. -- Disabled skins in Hexen, and changed the player setup menu to show class - instead of skin when playing Hexen. -- Added "random" as a choice in the Hexen class/new-game menu. -- Fixed: p_GiveArmor() gave the negative value of the desired armor, which is - effectively the same as always giving blue armor. -- Fixed the weapon slots so that they can accurately determine if a weapon - using both types of mana can be selected. - -November 23, 2002 -- Put Hexen's new game menus in place, although you still can't select a - player class. -- Disabled blood splats for players using the god mode cheat. -- Added palette flashes for Hexen's poison and ice damage and the Wraithverge - and Bloodscourge. -- Added the Bloodscourge and Wraithverge. -- Changed sound loading to use the heap instead of zone memory, so large sounds - can be used (although it's probably a bad idea nonetheless). Also added a - fallback mechanism so that sounds that are too big for hardware buffers will - be created in software instead. -- Fixed the Doom status bar so that removing a key from the player's inventory - will remove the key from the status bar without having to manually hide the - status bar first. -- Added FloorClip as a property for use with DECORATE. - -November 22, 2002 -- Added WAVE loading to the alternate mixer. - -November 21, 2002 -- Added an alternate sound mixer that bypasses FMOD and and does all the sound - mixing itself, feeding it to a DirectSound buffer directly. This is not - meant to be a complete replacement for FMOD, so it's pretty basic. It's not - even particularly optimized. I only wrote it in the hope that it alleviates - the BSODs a very few people got without -nosound. - -November 19, 2002 -- Changed ThrustThing to mimic the original P_XYMovement() MAXMOVE clamping. - Setting the third parameter 1 will let you use any thrust you want. -- Put back the maxmove restriction for underwater actors, but it should - probably be handled differently. -- Fixed: Respawning in single player would execute respawn scripts instead of - enter scripts, and travelling to a new map without being dead would not - execute respawn or enter scripts. -- Fixed: Only the first entry in each DECORATE lump would be processed. -- Fixed P_XYMovement() so that startx, starty, onestepx, and onestepy are - properly recalculated after sliding along a wall. This seems to have fixed - the ability to go through walls at corners when moving very quickly. I hope - there aren't any other bugs lurking in there. -- Fixed recording of compressed demos: The demobodyspot and democompspot - pointers were not being moved when demobuffer would get realloced, so - replacing the BODY chunk with compressed data would stomp on invalid memory. -- Fixed: P_SlideMove()'s stairstep case still used mo->momx instead of tryx. -- Fixed G_QueueBody() and the pointer cleanup in dobject.cpp so that it - doesn't try to destroy bodies that were already destroyed outside of - that function (such as by a crusher squishing the body). - -November 15, 2002 -- Added the Quietus. - -November 13, 2002 -- Hexen has a status bar now. - -November 9, 2002 -- Changed CheckIfExitIsGood() so that dead players cannot exit a level. -- Fixed: The ThrustThing special is supposed to add to the actor's velocity, - not set it. - -November 8, 2002 -- Imported the node builder fix that splits segs collinear with a splitter - with any events they cross. This is only necessary for bad maps that have - overlapping linedefs. -- Changed dehacked text replacement so that if a pickup sprite's name is - changed, the identification map used by DehackedPickup is also updated. - This lets you pick up Strain's shotgun, plasma rifle, and BFG replacements. -- Changed bot_observer mode so that it does not set the player's MF_SHADOW - bit. -- Changed P_LookForPlayer() so that it does not "find" players without the - MF_SHOOTABLE bit set. -- Added floorclip adjustments for sectors that have their floorpics changed - or move their floors. -- Fixed floorclipping so that it chops off the same amount of space for all - vertical sprite scales (as opposed to chopping off x rows from the bottom - of the source sprite). - -November 6, 2002 -- Removed the menu title graphics from zdoom.wad because they can just be - drawn using BigFont. -- Moved "Player Setup" into the options menu and removed the last vestiges - of the old fire effect for that menu. -- Extralights don't work with the release build. Oh well. -- #if-ed out the decal-out-of-range code again, because I think it should - finally be fixed thanks to the recent changes to PrepWall. -- Made some changes to allow for loading earlier format savegames. Right now, - that means ZDOOMSAVE200 games can still be loaded. Earlier versions won't be - supported. -- Added Dehacked Gravity and LowGravity code pointers. -- Made demo_compress a global config cvar. -- Changed the ini's location to be "$PROGDIR/zdoom-$USERNAME.ini" because - some people have multiple copies of ZDoom installed in different directories - for different IWADs, and they might want to use different configs with them. -- Fixed sector triangle finding for area-less sectors. - -November 4, 2002 -- Added more correctness checks to PrepWall() and PrepLWall() to check for - out-of-bounds texture columns. The very-near-a-decal-crashing problem should - be solved now. - -November 2, 2002 -- Restored the menu_gameplay command I had accidentally removed. - -October 31, 2002 -- Added a check to A_Lower() to ensure that the pendingweapon is not - wp_nochange. -- Fixed: The ACS SetWeapon command checked if there was enough weapon to use - the current weapon, not the one being switched to. -- Fixed: The FFont* serializer could only use already loaded fonts. It could - not load any new ones, so some FFont pointers could be initialized to NULL - after reloading a savegame from a previous session. - -October 30, 2002 -- Merged the separate floorcolormap and ceilingcolormap sector members back - into a single ColorMap member. -- "3D lights" can color floors and ceilings now. - -October 29, 2002 -- Decided to do something fun, so I added support for rendering "3D lights" - on walls. -- Changed HealThing special so that it does nothing if the actor's health - is already above the specified maximum. -- Fixed: The eyes crossing fake floor/ceiling special actions were only - checked when moving vertically. They also need to be implemented for - horizontal movement in case the fake floor/ceiling is sloped. - -October 23, 2002 -- Fixed: The MF3_GHOST flag was not cleared when the invisibility - artifact wore off. - -October 21, 2002 -- Added Ceiling_Waggle as special 38. -- Added a check for a 0 maxmove to P_XYMovement() because P_DoCrunch() sets - the gib's radius to 0. - -October 15, 2002 -- Restored the old x2 calculation in R_ProjectSprite and changed the - iscale calculation so that it is based on the x1, x2 values instead of - the inverse of xscale. - -October 14, 2002 -- Reenabled the error check in WallSpriteColumn() because it seems it can - still happen. Now it has a bunch more debug spew and exits with - I_FatalError(). -- Changed the x2 calculation in R_ProjectSprite() because the old method - could cause a sprite to be drawn one pixel too wide under rare - circumstances. -- Fixed: R_ProjectSprite() did not add one to thing->xscale. -- Added a check to the node builder for maps without any lines so that - it can exit gracefully instead of crashing. -- Made Sector_SetFriction work from inside scripts. -- Changed Floor_RaiseByValueTxTy so that if it isn't activated by a line, - the target's sector type is set to 0, and its floor is left alone. This - should be much better than crashing. - -October 12, 2002 -- Imported all the changes from the standalone node builder to increase - accuracy and add support for GL nodes. - -October 10, 2002 -- Fixed the ordering of the WTSRegisterSessionNotification call so that it - (again) occurs after the window is created, so the message loop can - actually receive the messages. -- Replaced the %p and %I64x format specifiers I was using in i_crash.cpp to - equivalent %x replacements, because the Windows 9x version of wsprintf - does not understand them. -- Made MinotaurSpecial, DSparilSpecial, IronlichSpecial, and - SpecialAction_KillMonsters accessable through MAPINFO. -- Changed message handling in P_CheckKeys() so that the correct Heretic key - messages will show up even if you don't flag the keys as "either will do"-- - a rather pointless thing for Heretic since it only has three unique keys. - -October 1, 2002 -- Fixed a bug in P_XYMovement() that could cause you to move exponentially - faster when running on a slope along a wall. - -September 30, 2002 -- Fixed the Doom status bar so that the ouch face will show up when it was - intended to. - -September 27, 2002 -- Removed Infight from DehInfo so that monster infighting can be completely - controlled by the cvar. - -September 26, 2002 -- Fixed FDoomEdMap so that it works with negative thing numbers without - crashing. -- Fixed dehacked text substitution trying to compare against a null music name - in the predefined mapinfos. -- Fixed "Monster Ignore Each Other" infighting mode so that player projectiles - can damage monsters. -- Changed P_SlideMove so that it can use the smaller steps from - P_XYMovement, so if something is moving very fast and slides along the wall, - it shouldn't be able to pass right through small obstacles next to the wall. -- Fixed: If a move was split into multiple steps and you went through a - teleporter, the remainder of the move would still be executed from your - original position, rendering the teleport useless. - -September 21, 2002 -- Played around with a 140 Hz TICRATE for a while. The high framerate was - nice, but there are too many places that implicitly depend on a 35 Hz TICRATE - (physics in particular) for me to try and truly fix the game for variable - TICRATEs before a final release. -- Removed the unused P_CalcSwing() function and its related global variables. - -September 18, 2002 -- Fixed the use of seg grouping in the node builder so it actually works as - intended. The mechanism GroupSegPlanes() uses to group segs was also - changed before I discovered the real problem with it: SelectSplitter() - was using r = pseg->planenum & 7; instead of r = 1 << (pseg->planenum & 7); - The new grouping scheme may not have been necessary, but it should be - faster at least. - -September 17, 2002 -- Removed playernumber from DCajunMaster. The only time it was used for - something non-local was in the ThinkForMove method, but its use there - was inconsistant with its other uses. Apparently, ThinkForMove expected it - to be the maximum player number plus one, but SpawnBot stored the most - recently spawned bot there instead. This could crash ThinkForMove if - the most recent bot spawned was player 0. Replacing its use in ThinkForMove - with MAXPLAYERS seems acceptable. - -September 14, 2002 -- Added optional logging of ACS hud messages. -- Upped the number of local script variables to 20 to match ACC 1.25. - -September 12, 2002 -- Changed ACS function importing so that imported functions cannot be - "chained" from one library to the next. -- Added code to properly tag string arrays. -- Fixed a hang that could occur when importing ACS arrays. -- Added a little more information to the crash report. -- Changed WndProc so that it only resets the language if the WM_SETTINGCHANGE - message was sent as the result of a locale change. -- Figured out how to make the crash collector work with secondary threads: - Using an UnhandledExceptionFilter, the information for that thread is - collected, the thread is put to sleep, and an APC is queued on the primary - thread. Once the APC executes, it raises a software exception that gets - caught by the outer-most __try block, and the primary thread shuts down - and shows the crash dialog. I think it would be better if I could raise - exceptions in any thread I wanted, but this will suffice. As long as - I_GetEvent() is called often enough to put the thread in an alertable state - using SleepEx, the APC should be able to execute without much delay. - -September 11, 2002 -- Finished the crash information collection code. - -September 9, 2002 -- Changed "give armor" cheat to give armor equivalent to blue armor, even when - Dehacked is used to modify the blue AC. - -September 7, 2002 -- Fixed: Imported libraries had their source libraries recorded wrong. - -September 5, 2002 -- Fixed hud messages so that they restore the screen's previous font instead - of always assuming the previous font was "SmallFont". -- Changed the node builder so that segs with the same front and back sector - can be a part of a subsector with segs from a different sector. Although the - result is not a proper subsector, it is okay because such segs can only add - masked mid textures to the scene, and those use the seg (not the subsector) to - find out which sector they belong to. This fixes the area by the fence in - tqtrust MAP04 when the internal node builder is used. -- Changed PTR_SlideTraverse so that blocking two-sided lines are treated like - one-sided lines. -- Fixed the nodebuilder so it works again without crashing. -- Fixed: ExtractFileBase did not understand files with a drive specifier but - no path. i.e. It would consider the base file name for d:myfile.foo as - d:myfile and not myfile. - -September 3, 2002 -- Changed the "This map has errors that must be fixed" message to be more - specific about what exactly needs to be fixed. -- Made MDK work only in non-deathmatch games, even if sv_cheats is true. -- Added the following contributions from Stevie-O: - + Fixed: AImpactDecal::CloneSelf() would cause ImpactCount accounting to mess - up if the clone had to be destroyed because it hit the sv_maxdecals limit. - + Fixed: Using MDK cheat would print blank lines to the console. - + Fixed: Respawning monsters could spawn inside other things because - P_NightmareRespawn() was not changed to account for thing-over-thing. - + Fixed: Telefragged players would still show the FX_RESPAWNINVUL effect if - it was active when they died. - + When bot_observer is true, players can no longer fire their weapons. - + Added sv_fastweapons cvar. - -September 2, 2002 -- Fixed: New-style behavior lumps without any scripts would crash the game. - -August 31, 2002 -- Made R_InitTextures more forgiving of errors. -- Changed DrawWrapper to clip columns to the patch's height. This "fixes" - malgnant.wad's corrupt titlepic that crashed the game. - -August 26, 2002 -- Added a workaround to the DObject::DestroyScan()s because the bglobal object - is not showing up in the Objects list. -- Added whereisini command to make finding the .ini easier for users. -- Removed MBF torque simulation. It made the corpses fall off the bridge - at the beginning of the Hexen MAP40, and it was also responsible for the - "boogying" chaingunners in the last room of Doom2 MAP22. I haven't checked - MBF to see if they do it in MAP22 there too, but I thought it best just - to remove it, since it was causing so many reports of anomalies--enough - reports that I probably copied something wrong. Okay, checking MAP22 with - PrBoom, the chaingunners do slide perpetually but nowhere near as bad as - they were doing with ZDoom before. -- Fixed: After drawing the underwater scene after Heretic E2M8, the normal - game palette was not being restored. -- Changed ASoundWaterfall's gametype from Raven to just Heretic. Although it - exists in Hexen, it cannot be spawned in a map because of conflicting - doomednums. -- Removed Linux -cdrom support because it's not needed. -- Used the new run-time subclassing abilities to add support for pickup items - that are identified by sprite instead of by class. For it to work, a - dehacked patch needs to modify an actor (in any way) with the pickup flag. - Any pickup items touched like this will cause a new class to be derived - from DehackedPickup. This class will clone the defaults of the original - actor, and the original actor will be modified so that it does nothing - but spawn the clone. DehackedPickup implements the functionality to spawn - a copy of the desired item just long enough to pick it up. -- Changed DDrawFB::LockSurf so that it retries the resource creation - multiple times if the error DDERR_UNSUPPORTEDMODE is returned (presumably - because the NT Security dialog was opened and then closed). -- Added a check for players without bodies to R_SetupFrame(). This should - never happen during normal play, but a dehacked patch could cause it to - happen. - -August 23, 2002 -- Added a console warning when multiple actors try to map to the same - doomednum. -- Removed Printf_Bold. Use Printf with a level of PRINT_BOLD instead. The - result is exactly the same. -- Fixed a demo sync bug. When the user alt-tabs away, the game is paused, - but the demo continues playing anyway. The fix is to change G_Ticker() so - that if the game is paused, and the demo didn't do it, don't fetch more - tic commands from the demo until the game becomes unpaused. Unfortunately, - hitting a breakpoint in debug mode will still mess up demo playback, so - I avoid pausing the game at all when the window is deactivated and a - demo is playing if _DEBUG is defined. -- Fixed: When a multi-step move is blocked in P_XYMovement, the move needs - to actually stop right away. This seems to be what caused wallrunning: In - the first step, the player hit the wall, so his movement got clipped to it. - In the next step, the player would continue in his original direction and - travel further along the wall. Since I know what causes wall running now, - I added the compat_wallrun cvar to enable it as desired. -- Reduced maxmove in P_XYMovement from (mo->radius*2 - FRACUNIT) to just - mo->radius. This brings back wallrunning (unexpected), but I'm hoping it - stops things shooting through walls when they're very fast. The original - maxmove I chose seems quite high. I don't know why I did that. -- Changed Megasphere back to being pickup-able even when you're already full - on health and armor. -- Fixed: Automap powerup did nothing. - -August 22, 2002 -- Fixed: Heretic's gauntlets are supposed to have their kickback set to 0 so - that they don't push monsters away. -- Updated the source for FMOD 3.60: Changed FSOUND_Sample_SetLoopMode to - FSOUND_Sample_SetMode and removed A3D support. -- Gave PTR_BounceTraverse() knowledge of ML_BLOCKEVERYTHING lines. -- Moved the check for MF2_BOUNCETYPE to the beginning of P_BounceWall(). -- Added support for custom inventory classes. These are actors that behave - like an inventory item and execute their special when touched, but they - don't actually go in the inventory. -- Added a new field to DObject to record the object's real type. Now derived - types created at runtime can be detected. I am now one step closer to having - the scripting language in place. :-) - -August 20, 2002 -- Added support for custom decorative classes through the use of a - DECORATE lump. Currently, all objects generated like this are - recognized as being type Decoration instead of their real type. - This isn't really a problem, but I would like to figure out a way - to easily support objects that are identified as being of a - run-time-created type. - -August 19, 2002 -- Fixed: DumpHash would count all the aliases and commands, not just - the ones it counted. - -August 16, 2002 -- Added some new initialization code that was missing for old Hexen - behaviors. -- Fixed: World and global variables were not stored in save games. -- Changed sidedef indices to be unsigned, so now you can have up to - 65535 of them in a level. - -August 14, 2002 -- Added support for 8 mouse buttons using DirectInput and at least 5 - mouse buttons using standard Windows messages. I extrapolated from - Microsoft's docs for WM_XBUTTONDOWN/UP, so it will probably work with - up to 8 buttons if Microsoft ever releases a mouse with more buttons. - -August 12, 2002 -- Finished adding support for ACS libraries. Now I just need to test it - some more. -- Fixed: ACS arrays were not serialized. - -August 3, 2002 -- Added compressed demo support. -- Fixed: PCD_ASSIGNMAPARRAY accessed ACS_WorldVars instead of level.vars, - so storing to arrays was unpredictable unless you never touched any world - vars. In that case, it would always store to the first array declared. - -July 31, 2002 -- Fixed some stuff with local doors already performing a ceiling action. - In particular, if the ceiling was moving but not as a door, its thinker - would be replaced with a door thinker instead of being left alone. -- Wallrunning seems to be gone. I don't know when it disappeared. I - certainly set out trying to fix it. -- Fixed: The stairstep case for stepping along the x-axis in P_SlideMove() - was the subject of some incomplete copy-and-paste, which is probably why - it was so easy to get stuck on diagonal walls. - -July 30, 2002 -- Added a third parameter to the TranslucentLine special to select the - translucency type. Currently it can be 0 for normal translucency or 1 for - additive translucency. Also updated the translators to handle Legacy's - 284, 285, and 287 types. -- Made textures with patchless columns work. - -July 29, 2002 -- Finally did the math for the conversion of the SSG's vertical spread from - slope to pitch and discovered that I had it slightly too small. -- Added COMPATF_SILENTPICKUP flag to play item pickup sounds locally only. -- Moved NO_PASSMOBJ flag from dmflags to compatflags. -- Moved sv_ihatesounds into compatflags as COMPATF_MAGICSILENCE. -- Removed SNDCURVE from zdoom.wad. Playing Doom will now generate a sound - curve compatible with the Doom's original distance attenuation. - -July 22, 2002 -- Started work on an output class that using IDirect3D8 instead of - IDirectDraw2, but then I found out IDirect3D8 can't do paletted output. - I was hoping to get descent blitter support out of it, but if I have to - translate the image every frame, it might not be worth it. I could try - getting tricky with the hardware gamma ramp so that I need only copy - pixels out to the back buffer without doing any format conversion, but I - don't know if it's worth it. - -July 17, 2002 -- Fixed session notification mysteriously crashing the game with a release - build. Because the default calling convention for the release build is - set to __fastcall, I need to explicitly specify that the functions I - retrieved using GetProcAddress are __stdcall. (But that doesn't explain - why they worked with the debug build.) - -July 11, 2002 -- Fixed some bugs when I_MovieDisableSound() is called when there are - repeating sounds playing. -- Added some support for XP's session locking and fast user switching. Now - you can use either, and the window will be able to properly restore itself, - and it shuts down the sound when the session is locked. For some reason, - I cannot get MIDIs to play in my other account. I would blame stupid - Audigy bugs, but it doesn't work with Microsoft's GS synth either. - -July 9, 2002 -- Changed the behavior of MF_SPECIAL actors so that non-inventory actors - will execute their specials when touched. - -July 2, 2002 -- Changed sector_t::FindShortestTextureAround and ::FindShortestUpperAround - to not consider texture 0 for height determinations, so now they can return - lengths greater than 64 if any lines around the sector have an untextured - side. The compat_shortTex cvar can be used to get the original Doom - behavior back. These functions now know about scaled textures and always - return the result in world units. - -June 25, 2002 -- Made the C versions of the plane drawers work with non-64x64 flats. -- Added automatic scaling of 128x128 and 256x256 flats so that they get - treated as if they were only 64x64 world units in size. Also added support - for 8x8, 16x16, and 32x32 flats, which are not automatically scaled larger - to fit a 64x64 cell. - -June 19, 2002 -- Added support for 128x128 and 256x256 flats on slopes. - -June 14, 2002 -- Added support for 128x128 and 256x256 flats on normal planes. - -June 13, 2002 -- Fixed: When a player spawned, the local player's view would be reset to - whoever they spied through last. -- Fixed positioning of scaled pegged upper textures. I was not compensating - for the texture's scale. -- Fixed: Demo sequence would loop to DEMO2 instead of DEMO1. -- Fixed handling of PNG tEXt chunks. I misread the specs, thinking that the - keyword always occupied 80 bytes, but that's just the maximum size for the - keyword. It can be smaller and does not get padded with zeros. - -June 12, 2002 -- Fixed: When missiles destroyed themselves right away in their death state, - the game would crash if it tried to move them again (because their movement - was divided into multiple steps). - -June 11, 2002 -- Fixed: BestColor_MMX set ebx before saving it, and it did it after ecx - had already been shifted. I don't know why it worked at all. -- Changed the project settings to statically link to the CRT under VC7 - because I don't want to redistribute MSVCR70.dll. -- Experimented with separating the various games into libraries but stopped - when I found out that I had no easy way to bring all the actor definitions - into the executable that I wanted. -- Removed lots of warnings when VC7 is set to look for 64-bit portability - complications. -- Added MF_COUNTKILL to ALostSoul and changed the monster counting to - happen in AActor::StaticSpawn instead of at map load time. -- Fixed stylization of console backgrounds that are derived from title pics - that are not 320x200. -- Added named thread support to the FHelperThread class. -- Moved zdoom.ini to the CSIDL_APPDATA directory so different users can have - different zdoom.ini files. -- Added -cdrom support under Linux courtesy of Hirogen2. -- Added the work-around to allow FBaseCVar::ToInt() to compile with GCC 2.95. -- Added XP visual styles support for the dialogs. -- Added more OS names to I_DetectOS(). -- Removed PROP_STATE_BASE because I could not get it to compile with VC7. - All state sharing must now be done using inheritance. -- Changed the ALavaSomke definition to set the default alpha using an - AT_GAME_SET function. Aside from causing VC7 to gobble up all available - memory and crash horribly, using the PROP_Alpha macro in this situation is - incorrect because it depends on information that is not available at compile - time. - -May 6, 2002 -- Fixed spawn(spot) so that they only set MF_DROPPED for items and not - everything. -- Changed R_DrawColumnInCache() so that it correctly draws patches with - a negative originy. -- Added Thing_Hate special. -- Added a name string ("Unnamed") to the default level info so that using - changemap to switch between maps without an associated level info does - not crash (although it does prevent saving on those levels). -- Fixed the stringlist utility to sort string names case-insensitively - because the game uses a case-insensitive search to find them. -- Initialized air_finished in P_SpawnPlayer so that if you spawn underwater - after drowning in a multiplayer game, you won't start drowning immediately. -- Fixed: AArtiEgg and AGibs did not have spawn states so they could not be - placed on a map. -- Fixed: Say(_team) did not check that they were called with any parameters. - -April 27, 2002 -- Added more error checks when loading the BSP tree. - -April 18, 2002 -- Removed the bot things list because it couldn't handle items that had been - removed from the level. -- Changed movie playback to only exit when escape is pressed. Also disabled - Alt-Tabbing away from fullscreen movies so that I don't have to worry - about the messed-up state that can put things in. -- Fixed: When a movie was not found, I_PlayMovie could try to restore video - resources it never released because runningFull was not initialized right - away. -- Added a new Thing_ProjectileAimed special (178). -- Added MF2_SEEKERMISSILE to the RevenantTracer. -- Added slopes and aligned flats to the BUILD loader. -- Changed P_GivePower() to not check if the player already has the power - when playing Doom. -- Added pattern matching for the -file parameter. - -April 17, 2002 -- Added a loader for BUILD maps. It's not very useful since the Doom engine is - so much more limited than BUILD, but it's fun to be able to load them anyway. -- Added a NoAlert flag for splashes that you don't want monsters to hear. -- Removed the option of specifying multiple footstep sounds for terrain - because the $random SNDINFO command can do the job better. (And no, footsteps - are still not implemented.) -- Made splash sounds work even without a corresponding splash actor. -- Removed the MF3_VERYFAST flag. Any missiles with a speed of 100 or more will - automatically be offset closer to the originator than a normal missile. - -April 16, 2002 -- Changed P_XYMovement() to take smaller steps when moving faster than is good - for the actor's size. - -April 15, 2002 -- Changed floor bounces so that they properly reflect off of slopes. -- Added the CVAR_NOSAVE flag so that I can use it with sv_gravity and - sv_aircontrol to avoid archiving them with a savegame. If I do save them, - then reading them back will override the real settings for those variables - that are stored in the level structure. -- Added the Thing_Damage special (119). It's similar to DamageThing, except it - hurts things by TID instead of whoever activated it. -- Removed the LEVEL_NOSOUNDCLIPPING flag. When sounds are at maximum distance, - they are very quiet and hard to hear so it didn't seem worthwhile to keep - the code around for this. - -April 9, 2002 -- Fixed: Particles were not drawn in the color of their containing sectors - when using light amp goggles. -- Added code to make the pain elemental move down if it's too close to the - ceiling to successfully launch a lost soul. - -April 6, 2002 -- Fixed: P_TestMobjLocation() should test the central z of an actor with - float bob, not its current z. -- Fixed: Only the colormap stored in the wad was created with new. The rest - were still on the zone heap. There's also no reason why they need to be - aligned to 256 byte boundaries. - -April 5, 2002 -- Added SPC music support using snesapu.dll. - -April 4, 2002 -- Changed text scaling at 800x600 and similar resolutions to keep everything - square. -- Added two rotozoomers on top of the plasma to make it look more interesting. -- Fixed: Colors set with setcolor now carry over to new maps. -- Removed the sv_friction cvar because it was never used. -- Added a few substitutions for chat messages. Set chat_substitution to true, - and $health, $weapon, $armor, $ammo, and $ammocount will be replaced by - appropriate strings. -- Added /me support for chat messages. -- Changed the setweapon ACS command to disallow switching to a weapon the - player does not have enough ammo for. -- Changed S_ChangeMusic() so that an empty string will also stop the currently - playing music. -- Changed the announcements for player team and name to be shown only if the - new values are different from the old ones. - -April 2, 2002 -- Added another bounce flag so that the bounce type can be selected by actor - instead of by game. -- Fixed the [*.Autoload] ini sections so that they work with wildcards for - files that are not in the current directory. -- Replaced the fire in the player setup menu with a plasma. -- Moved thinkers off of the zone heap. - -April 1, 2002 -- Changed R_FreeTags to move the rover back to the beginning of the zone. -- Moved sprite frames off of the zone heap because they constituted a lot - of small locked blocks. Did the same for texture column directories, - colormaps, switches, terrain types, skins, sound sequences, msecnodes, - and SNDCURVE. The only things left on the heap now that are unpurgable - are the level data. -- Added a calling history to the zone heap when compiled with _DEBUG so I - can see where all the zone memory is going. -- Changed Z_Malloc so that it only throws away purgable blocks if doing so - will result in a block large enough for the requested allocation. - -March 28, 2002 -- Added an extra max parameter to HealThing. 0 will uses the creature's - spawn health as max. 1 will use the max soulsphere health as max. Anything - above that will be used as an absolute maximum. - -March 25, 2002 -- Made sky textures that are scaled vertically draw properly. -- Made the sky textures scalable horizontally. -- Verified that the PNG loader really can handle the different filters. -- Made the weapon slots configurable. -- Commented out the code that prevents people from using dehacked with - Heretic and Hexen. -- Changed the decision of whether or not to spawn puffs when a line attack - strikes an actor into an actor property. -- Added code to set PuffType for all the bullet attacks in Doom. -- Changed P_CheckMissileSpawn to not decrement the missile's first tics if - the tics are less than one. Now the Centaur Leader can shoot his missile - when spawned in Doom. -- Added the projectiles Hexen only spawns from scripts. -- Fixed: $pitchshift could not be used before defining a sound, so none - of the Hexen sounds that don't want to be shifted stayed unshifted. -- Fixed: ZXmasTree, ZBell, and ZSuitOfArmor had undefined mass. -- Fixed: ZPoisonShroom had undefined health and mass, and it didn't spawn - a poison cloud on death. -- Fixed: The Heretic snake did not have an attack sound. - -March 23, 2002 -- Fixed: PCD_SETTHINGSPECIAL fell through to PCD_THINGSOUND. - -March 22, 2002 -- Fixed: When the minotaur stops charging, he now properly turns off his - invulnerability. -- Fixed: The dehsupp utility was case-sensitive when adding names but not - when using them, so bex patches could not specify the NOGRAVITY flag by name - because it has the same name as the NoGravity function, and both versions - of the name were stored in the dehsupp lump. -- Using a dehacked patch to set the initial bullets to 0 will now cause the - player to start with their fist raised instead of the pistol. -- Changed the error message for switches with invalid second texture names - to a warning. -- Fixed: The fighter boss's extreme death crashed the game because it used - A_SkullPop, which assumed that the actor's player member was non-NULL. -- Gave the bots some knowledge of Heretic weapons so they don't slow things - down so bad in that game. - -March 21, 2002 -- Added a teamplay scoreboard. -- Added: Bots now join a random team if they aren't specifically assigned a - team in bots.cfg. -- Added: When teamplay is true, players (finally) use their team colors. -- Added a sector action that gets triggered when an actor hits the sector's - fake floor. (doomednum 9989) -- Added another flash state to the pistol so that if people want to use a - patch to make it behave like a railgun or plasma rifle (and keep the flash - states), it will work without crashing. -- Fixed: A_FireCGun() assumed that flash states were present. This is not - normally a problem, but dehacked patches can make this precondition false. -- Fixed: Ambient sounds saved their NextCheck time in gametics, so you - wouldn't be able to hear them after a load until the game had been running - at least as long as it had been running when you saved. -- Added support for encrypting ACS strings, and added the ACS_ExecuteWait - shortcut to ACC. ACS_ExecuteWait(x, ...) is equivalent to ACS_Execute(x,...); - ScriptWait(x); It uses the existing p-codes instead of introducing more of - its own. Think of it as syntactic sugar. - -March 20, 2002 -- Added code to the node builder to group segs by their line equations so that - when there are several segs that would create the same partition line, only - one of them needs to be checked to see if it is a good splitter. - -March 19, 2002 -- Changed polyobj container detection in the node builder to work the same - way it does in the game: A polyobject's subsector is determined by its - center after it gets translated to its start spot--not by the start spot - itself. One case where this distinction is important is the polyobject north - of the dining room in Hexen MAP33; its start spot is in a sector different - from where it appears. - -March 18, 2002 -- Fixed: When I inlined the point-on-line-side functions, I messed up and - counted being right on the line as being behind it, when it should count - as being in front of the line. -- Changed polyobject container detection to just mark the segs that form - a loop around the polyobject spawn spot instead of all the segs in the - sector. This helps keep the BSP from getting too deep around containers - in nonconvex sectors and is also necessary for Hexen, MAP39 to build - correctly. -- Improved the polyobject container splitting avoidance so that splitters - colinear with the segs of the container are valid. - -March 16, 2002 -- Added code to the node builder to detect sectors polyobjects appear - within and try hard to avoid using splitters that touch their segs. -- Improved the node builder so that it can split up convex areas with - segs from different sectors so that each subsector only references - one sector. -- Added support for loading maps without nodes or a reject matrix. -- Tweaked the heuristic used by the node builder to give more weight to - splitters that split few lines. - -March 15, 2002 -- Fixed the console ticker so the node builder can use it. -- Changed subsector_t's firstline and numlines members to be unsigned, - doubling the maximum number of segs a map can have. The built-in node - builder doesn't try very hard to minimize splits. -- Added an internal node builder so that if any 0-length lines are removed, - the nodes will still be valid. This may or may not actually be necessary - depending on the node builder originally used; it's just to be safe. I - make no attempt to fix convex areas belonging to more than one sector, so - it's still a good idea to fix the map and use a better node builder. At - least this one seems pretty fast: I can rebuild Vrack2's nodes in just a - few seconds using a debug build. - -March 14, 2002 -- Lines of 0 length are now removed entirely from the map. Massmouth had - invalid front sector references only on its 0-length lines, so removing - them conveniantly lets it run again despite the beefed-up error checking. -- Removed the angle member from seg_t because it isn't really needed. -- Undid Killough's relayout of R_PointToAngle2 so that I can actually read it - and do some optimization. Its compiled size is now 256 bytes less than - before. - -March 11, 2002 -- Added the mage's first weapon. -- Changed A_SpawnFly to play "brain/spawn" instead of "misc/teleport". - Changed the spawn cube explosion sound to "brain/cubeboom". -- Changed $ambient point attenuation parsing to use IsFloat() to check if - the attenuation is present. -- Changed SNDINFO parsing so that non-male players can use random sounds. -- Did some space tuning to R_RenderBoundWallSprite() and R_DrawVisSprite(). -- Fixed R_ProjectSprite() to calculate the correct left and right edges for - horizontally scaled sprites. -- Changed the sound limit for Heretic's horn rod. -- Added LEVEL_SPECKILLMONSTERS to the definitions for Heretic's ExM8, where - x >= 2, so killing the boss monsters will kill the rest of the levels' - monsters, as it should. -- Fixed: The minotaur would stay invulnerable if his charge was interrupted - before his one-second charge time was up (i.e. he hit something or went into - his pain state). - -March 10, 2002 -- Fixed: If you visited Doom E2M9, saved, and then reloaded after quitting and - restarting, the game would crash at the intermission because it would try - to draw the Fortress of Mystery without loading its graphic first. This - would also happen if you started with -warp 2 9. - -March 9, 2002 -- Added the cleric's first three weapons and the mage's second and third - weapons. - -March 8, 2002 -- Added the fighter's axe and hammer. -- Added Hexen's cleric and mage bosses and Korax. -- Fixed: PTR_AimTraverse crashed when non-players aimed at ghosts. - -March 7, 2002 -- Added Hexen's puzzle items, boots of speed, krater of might, and fighter - boss. - -March 6, 2002 -- Added Hexen's armor, bat spawner, and teleport other and dark servant - artifacts. - -March 5, 2002 -- Added Hexen's wraiths, fog patches, flames, disc of repulsion, and dragon. -- Changed EttinMace, CentaurShield, and CentaurSword to use a crash state - instead of A_CheckFloor. Now I can get rid of A_CheckFloor. - -March 4, 2002 -- Fixed: SendWeaponSlot and SendWeaponChoice need to be initialized to 255 at - compile time. If they're left at 0, then weapon switch commands will be - generated for the very first tic run if the level has not been loaded yet. - This happens when playing demos from the command line, because they tic - before loading anything (including themselves). -- Changed the health bonus's spawn id to 152 so that it isn't the same as the - scripted marine's. -- Fixed: GetWordSpace in d_dehacked.cpp only allocated half as much memory - as was needed. (But since x86 processors are fine with unaligned accesses, - I don't really need to allocate memory. Ah well.) - -March 2, 2002 -- Fixed TossChunks() to toss the demons' chunks out in the correct directions. -- Finished migrating the code to the new RNG system. In the process, I - discovered that constructors for static objects local to a function will - not be called until the first time the function containing it is called. - So all FRandom objects need to have global scope or else loading a savegame - won't find any RNGs that haven't been used yet. - -February 28, 2002 -- Changed the random number generator system to use objects to represent - different generators instead of array indices. Why? Because it makes - adding new RNGs quicker--I just create a new FRandom object, and nothing - else that uses random numbers needs to be recompiled. - -February 27, 2002 -- Changed the PNG reader and writer to use zlib streams directly without - wrapper functions in order to use less memory. As part of this, I was - able to test the case where a PNG has multiple IDATs to ensure that it - gets read correctly, and ZDoom might now write a PNG with multiple IDATs. -- Fixed problems with the impact decal serializing: 1) The list of impact - decals was messed up when loading a game. 2) Too many impact decals would - cause a stack overflow because each impact decal would cause the next - decal to write itself out before it finished writing itself, because it - had to follow the list maintained in the tracer field. -- Extended the changemap command so that it can take an optional position - number for maps that have multiple player starts. - -February 26, 2002 -- Fixed saving games without savepics. (Technically, because PNG is now used - to store savegames, setting storesavepic to false will still leave an image - in the savegame, because we need to create a valid PNG--but the image is - only a 1x1 black grayscale pixel, so it adds just a few bytes to the file. -- Made savepics slightly taller to 162 pixels so that they look right when - viewed with square pixels and no stretching. -- Fixed CRC calculations for extra PNG chunks so IE can be used to look at - savegames, and there shouldn't be any problems loading them into image - editors. -- Changed sprite serialization to save the sprite names instead of indices - so that simply adding more sprites won't break savegames. - -February 22, 2002 -- Renamed snd_dolby cvar to snd_matrix. -- Made a few more general-purpose action functions accessible through BEX. -- Changed particles' right and bottom edges back to being inclusive instead - of exclusive. -- Fixed: Shadowed masked blocks that were clipped drew the shadow on top of - the regular image. The window when the clipping versions of the routine - were used was also slightly smaller than needed. -- Fixed: Network games didn't work because the game forgot it was running a - network game before it even loaded the map. -- Fixed the spawn and spawnspot ACS commands. - -February 20, 2002 -- Changed the savegame format to use PNG as a container. The use of chunks - for different types of data helps reduce the need for introducing a new - savegame version every time I change some little thing in what the - savegames store, but the primary purpose for the switch is so that you - can load the savegame into a paint program and see the savepic without - having to do any extra work (except possibly changing the file extension - to .png). It also gives launcher writers a public standard to use for - loading the savegame pictures if they want to do so. -- Added the png_gamma cvar to control the gamma saved to PNG - screenshots. Setting it to 0 will use the same gamma as the screen. - -February 19, 2002 -- Added support for writing PNG screenshots. PCX is still available as an - option because it takes longer to create a PNG even at minimum compression. - -February 18, 2002 -- Changed LeftOffset and TopOffset in FTileSizes to signed words so that - they can handle negative offsets (like they're supposed to). - -February 16, 2002 -- Changed actors' active sounds so that they only play if the actor is not - already playing something on its voice channel. -- Removed the MF3_SEEISALSOACTIVE flag. Random sounds do the job better. -- P_SpawnPlayer() now clears spreecount, multicount, and listkilltime. -- Fixed: Spying through a bots eyes and then removing the bot would crash. -- Added \movebob\.25 as a default for bots. -- Fixed: P_SpawnPlayer() could not use the Hexen player 5-8 starts. -- Fixed: The view could still bob when you were dead if stillbob was non-0. -- Fixed an NT 4.0 waveout heap corruption bug that appeared with FMOD 3.5. - I don't know if it's FMOD's fault, NT's fault, or the Audigy's drivers - fault, but I have to initialize FMOD with FSOUND_OUTPUT_DSOUND before - using FSOUND_OUTPUT_WINMM, or a heap used by the sound card's drivers - will be corrupted when FSOUND_Close() is called. -- Updated the reverb code for FMOD 3.5. - -February 14, 2002 -- Added the friendly minotaur for Hexen. -- Added Hexen's flechette. -- Changed the Heresiarch's bishops so that they will automatically target - whatever the Heresiarch is targetting. - -February 13, 2002 -- Added Hexen's keys. -- Changed P_BounceWall to take advantage of the BlockingLine global and use - that as the line to bounce off of, if non-NULL. -- Added support for loading hexdd.wad as an IWAD, which really just means that - hexen.wad is automatically loaded before it. - -February 12, 2002 -- Added Hexen's Heresiarch (Sorcerer). -- Fixed: Decals on an upper side used the lower texture to determine if decals - are allowed and vice versa. - -February 11, 2002 -- The player_s struct now serializes the camera. Before, it always set it to - mo when loading. I'm not sure why I did that, because it meant you lost your - camera view when loading a game saved from a different camera. -- Fixed: SetWeapon only worked if passed the name of a Doom weapon. Anything - else would make it crash. -- Changed HealThing so that it can max out at 200 for players. -- Added error checks for loading maps that don't have their BSP built. -- Added back "Health" as an item for checkinventory and "Armor" for - checkinventory, takeinventory, and giveinventory. -- Fixed: The status bar face background was not translated to the player's - current color. If you were playing a botmatch, the colored background would - also not appear until you changed your color or respawned. -- Fixed: Loading a game before starting one would reset the skill to 0. -- Removed mouse grabbing from the Win32 I_InitInput. That happens later - when the in_input cvar's callback is executed. This solves the problem of - the mouse still being grabbed when startup fails. -- Changed startup handling so that if the game gets into its loop in the - GS_STARTUP state, it will switch to GS_FULLCONSOLE so that the console will - be useable. This can happen, for instance, if you specify an invalid file - for -loadgame. -- Changed -loadgame to automatically append .zds to the specified file if it - isn't already present. -- Fixed: DamageThing(0) did nothing instead of killing the activator. -- Fixed a potential crash when an alias causes itself to be removed as part of - its execution. -- Fixed: Thanks to some left-over code when I changed the realiasing of - existing aliases, the alias would be realiased, deleted, and then recreated. - It should have just been realiased and not deleted. -- Fixed: Respawning after getting your head blown off (in Heretic or Hexen) - would crash multiplayer games and could occasionally crash single player - games as well. Those games set special2 to 666 when the player pressed - space to respawn, and the severed head used this as a signal to remove - itself. Because ZDoom cleans up stale pointers, this would leave the player - without a valid camera for at least one frame before the player actually - respawned, and the game would crash when it tried to draw the view. Now the - severed heads wait until their player field becomes NULL before they destroy - themselves. -- Fixed: BloodySkull and IceChunkHead would appear using the player's sprites - because they were attached to players and inherited the skin. The fix is to - add a dummy first state with a different sprite so that SetState will use - the correct sprite. -- Added snd_fpumixer cvar. - -February 8, 2002 -- Added a new line to the miscellaneous dehacked section: "Monsters Ignore - Each Other" will cause monsters never to target other monsters. - -February 7, 2002 -- Fixed: deh.MaxHealth was unused. -- Fixed: Operator<< for podoortype_t was call-by-value instead of call-by- - reference, so polyobject doors could not be loaded properly. -- Changed sound code again so that unpositioned sounds do not call - S_StopSoundID. -- Added A_SetFloorClip and A_UnSetFloorClip action functions for use by the - cacodemon when it dies/resurrects. -- Added MF2_FLOORCLIP to the HellKnight. -- Moved the P_RunEffects() call so that it can be frozen in freeze mode. -- Added some new SNDINFO commands. $limit controls how many copies of a sound - S_StopSoundID will allow. $pitchshiftrange controls how much a sound's - pitch can change when using pitched sounds. And $pitchshift allows control - of pitch shifting for a single sound. - -February 5, 2002 -- Did away with the longest-playing change to S_StopSoundID because it made - looping sounds of the same type near each other fight for precedence, and - the result sounded horrible. Now I use distance to limit the set of sounds - considered for stopping. Only sounds within 256 units of the new sound will - possibly be stopped by this function. Also removed sound tags because they - served the same purpose as the distance comparison. -- Added $playercompat SNDINFO command to create special aliases from the old - SNDINFO player sounds to the new ones. These are special in that after they - get created, any attempts to modify them will modify there target instead. -- Added the addrocketexplosion cvar. If true, then rockets use additive - translucency when the explode. Otherwise, they use normal translucency. This - can still be overridden with a Dehacked patch. - -February 4, 2002 -- Realized that because I now project particles as their subsectors are - entered, I have enough information to clip the particles when they are - projected. By changing my code to take advantage of this, I can avoid - running through all the drawsegs for each particle on-screen. When there are - many drawsegs and particles on-screen at once, the improvement is quite - impressive--far better than I expected. - -February 2, 2002 -- Added MF2_FLOORCLIP to many of the Doom monsters so that they can have their - feet cut off when standing in shallow water, provided that the appropriate - terrain definitions exist. -- Put back the limit of two identical sounds playing at once from Heretic and - Hexen in order to prevent the SSG from making super loud splashes that drown - out everything else. Tweaked S_StopSoundID so that it will use oldest time - for selecting a sound to stop if it can't find any with lower priority. -- Set all the puffs except BeakPuff back to their default masses. -- Changed splashes so that if a fake flat has a terrain with a splash, you can - shoot or drop below it and leave a splash. -- Fixed anomalies with the way the railgun made splashes. -- Added code to group particles into subsectors so that I can subject them to - the same fake floor clipping as normal sprites. I also found a problem with - lighting of particles in fake sectors and fixed it. - -January 31, 2002 -- Fixed: Fog boundaries could be erroneously drawn in underwater areas because - R_FakeFlat did not change the fake sector's colormap when calculating the - back side of a line. -- Fixed: Using -skill at the command line always set skill to 0. -- Added a check for freeze mode around P_ThinkParticles and the various - decal animator tickers. -- Fixed .cfg file parsing so that if comments appear on the same line as a - command, the command will still be executed. -- Fixed ParseCommandLine to work with unterminated quotes. -- Added "proper" support for tall textures by introducing a different patch - format that uses words instead of bytes to store column lengths and offsets. - All tall and multipatch textures get converted to this format at runtime, so - tall textures work equally well on one-sided and two-sided lines, and I - don't have to worry about sliding windows while generating the composite - textures. - -January 30, 2002 -- Fixed: Addkeysection did not load bindings from the ini. -- Fixed: Quicksave did not quicksave. -- Fixed: Savegames could be listed in the menu twice, once with the full path - and again with just the file name. -- Fixed: Suiciding and giving stuff to a player without an actor crashed. -- Fixed: Loading savegames was broken. - -January 28, 2002 -- Fixed: Using allowdecals in ANIMDEFS was broken. -- Added more ways to create slopes, all of which are thing-based: - - Things 9500 and 9501: The first argument to these things is a line id. - For each matching line, the sector on the same side of the line - has its floor or ceiling sloped so that it passes through this thing. - The thing does not necessarily need to be in the sector(s) being - sloped. 9500 slopes the floor, and 9501 slopes the ceiling. - Things 9502 and 9503: Set the plane equation for the sector they are in - directly. The first argument determines how far it tilts from - horizontal and is measured in degrees. 90 degrees is perfectly - horizontal. Values close to 90 have less slope than values further - from 90. The thing's angle is used to determine what direction the - slope faces. The floor or ceiling will be adjusted so that it passes - through this thing. 9502 slopes the floor, and 9503 slopes the - ceiling. - Things 9510 and 9511: The first argument to these is a sector tag. The - plane equation from the first sector with a matching tag will be - copied to the sector that this thing is in. 9510 copies the floor - plane, and 9511 copies the ceiling plane. - - Things 9500-9503 are processed after slopes created with linedef specials, - so they can be used to further adjust the resultant slope. Things 9510 - and 9511 are processed after all other slopes are set up, so they override - any slopes that might have been created in their sectors already. - -January 26, 2002 -- Assigned spawn numbers to most of the Heretic actors and added one for - Doom's health bonus. -- Added ChangeSkill special (#179). -- Changed A_FireRailgun to use the ammouse field to determine how much ammo - to eat up. -- Added a minammo member to FWeaponInfo and made it dehacked-settable. -- Fixed: Savegames went in the current directory instead of the program - directory. -- Fixed: Aliases could not realias themselves reliably. -- Fixed: Particle drawing was erratic in sectors with fake floors. -- Improved detection of windows into below-deep-floor areas to have fewer - false positives with complex geometry. It works for all the test cases I - have now, so hopefully all the false positives have been eliminated. - -January 25, 2002 -- Because I can't figure out what's going wrong with the blitter, when loading - an ini from a previous ZDoom version, vid_noblitter will now be reset to - true, because I'm not sure it's benefiting anyone. -- Removed DFrameBuffer::PartialUpdate. -- Added more debugging spew and tried different blit techniques, and blits - still take too long. They're supposed to be asynchronous, but my timings - indicate otherwise--the blit times are proportional to the size of the - blit, BltFast almost never returned DDBLT_WASSTILLDRAWING when I removed the - _WAIT flag, and a 1600x1200 blit takes ~15 ms to complete (memcpy only needs - ~4 ms to do the same thing). It seems like it's not using DMA at all but - some lame software emulation instead, so I tried obtaining an - IDirectDrawSurface2 interface and PageLocking the blitter surface, but it - made no difference. Why did it work before but it doesn't now? -- Removed the unlock/lock around D_NetUpdate when rendering. This is only - needed when a video memory surface is locked under Win9x. Since my - experiment with writing directly to video memory is gone, this never - happens. -- Fixed: Alt-tabbing away and back when using the blitter would fail to - restore the lost surfaces, because system memory surfaces don't normally - get lost from such a situation, so the LockSurf call would return ok, and - the BltFast in Update would fail later. - -January 24, 2002 -- Added heapsize cvar so you don't need to use -heapsize if you always want - to use a heap other than 8 megabytes. Moved Z_Init to happen after loading - the config file so that the cvar is available when it gets called. -- Lines with sky on the front and back are no longer considered fog - boundaries. As long as fog does not effect the sky, it looks bad to be - drawing the boundaries of different fogs in outdoor areas. -- Fixed: R_ProjectParticle() did not set vis->cx, so R_DrawSprite() was - unable to properly determine if a drawseg was in front of a particle or - not. -- Added a #wadauthor switch to ACC to cause it to create dummy scripts for - all the real scripts in the map so WadAuthor's error checking will know - about them. I had to change my ACSe detection to no longer look for scripts - that appear to have 0 scripts and strings. Since the standard ACC will - never generate object files with the ACSe tag, this should be safe. -- I think I must have messed up the blitter code somewhere, because now it - slows down the machine it used to speed up. I don't see anything wrong - though! Changed the default for vid_noblitter to true until I can figure - out what's going on. -- Added vid_vsync cvar to control whether or not vsync is used when flipping - the display. Since the framerate gets clamped well below the refresh rate, - turning off vsync is probably useless. - -January 23, 2002 -- Fixed: Deleting the most recently saved game and then dying would crash - because the game would try to load that game and fail because it no longer - exists. -- Added disableautosave cvar to control when autosaves happen. At 0, autosaves - always happen. At 1, they only happen when an autosave special is activated. - At 2, they never happen. Also disabled autosaving when starting a new game. - Autosaves now happen only when advancing to a new map. -- Fixed: Exiting a level in Heretic crashed. -- Fixed: FSOUND_OUTPUT_WINMM was always used if snd_output was not set to - dsound. Also added "directsound" as a synonym for "dsound" when used with - this cvar. - -January 22, 2002 -- Changed the in-game priority class to normal so ZDoom won't give itself - a high priority when running. -- Added "Ammo use" field for dehacked weapon modifications. -- Fixed palette translation through Dehacked again. While I was at it, I - decided to remove translation control from the actor's flags member - entirely and just rely on the Translation member. -- Fixed: Bouncing a missile off a floor/ceiling near a wall could crash if - no missiles had already bounced off a wall. -- Fixed: PIT_RadiusAttack() only pushed things in directions with positive - x and y. -- Gave names to the anonymous structs in p_setup.cpp/sidei_t so that it - compiles with GCC 2.95.3. -- Rearranged FBaseCVar::ToInt() to try and compile it with GCC 2.95.3. - -January 20, 2002 -- Fixed: Picking items up when item respawn is enabled would mess up collision - detection because the items would move themselves back to their original - positions, and the collision detection code is not reentrant. They now - relocate themselves as the result of a state change later on. -- Made some changes to the renderer to support drawing textures with different - scales on the same wall and to also support obtaining textures scaling from - some of the previously unused bytes in the maptexture_t structs stored in - the wad. - -January 19, 2002 -- Added support for DeePsea's tall patches. -- Fixed: Sky textures wider than 1024 could not scroll properly because the - sky position was always clamped past 255. - -January 17, 2002 -- Added a new player property: PROP_INSTANTWEAPONSWITCH (2). When set, the - player can switch weapons instantly without lowering and raising them. - -January 16, 2002 -- Fixed: Autoaim could mess up. Same reason as PTR_SightTraverse below. -- Changed giveinventory when giving a weapon so that the weapon will not be - brought up automatically if the player did not have it already. If this is - desired, it can be simulated with setweapon. -- Disabled drawing of the crosshair when the camera is not a player. -- Fixed a problem under NT4 when using waveout for sound effects and playing - MIDI music: A memory block would be modified after being freed. The fix is - a 50 ms delay between stopping the song and shutting down the sound. -- Added "waveout" as a synonym for "winmm" for the snd_output cvar. -- Added CheckWeapon and SetWeapon ACS commands. -- Added support for a -1 translation in Thing_SetTranslation to set the - target's translation to that of the activator's. - -January 14, 2002 -- Fixed a bug in PTR_SightTraverse() that could cause it to think something - was visible when it really wasn't. -- Fixed: Masked mid textures in foggy areas could be drawn with the wrong - light level, because they checked the foggy flag to determine if they were - in a foggy area. This flag is not set when drawing masked mid textures. -- Added a tx cvar to test different horizontal wall texture scales. -- Fixed some errors GCC found and added GetFlashedPalette() to SDLVideo - so that ZDoom compiles under Linux again. - -January 12, 2002 -- Added a ty cvar to test different vertical wall texture scales. - -January 10, 2002 -- Added a vid_noblitter cvar to force memcpy to be used for copying from - system to video memory, even when the blitter is available to do the job. - On my P3-866 with a GeForce2 Go, the blitter is about twice as fast as - memcpy. On my Athlon XP 1600+ with GeForce2 MX, memcpy is about three - times faster than the blitter. I need more data before I can decide what - a reasonable default for different systems is, but right now it defaults - to false. -- Fixed: The blitter surfaces would only flip when logging was enabled - because I had the Flip call enclosed inside a LOG1 macro. -- Fixed the case where the video driver reported it could blit from system - to video memory, but the blitter surfaces could not be allocated. When this - happened, the screen would not update. - -January 9, 2002 -- Changed P_CheckSlopeWalk() to return false if the actor's floorsector is - different from the actor's sector. It seems to fix the problem with the - "push pad". The whole Doom collision detection/movement code is a mess and - deserves to be rewritten from the ground up. -- Changed sky texture positioning to match older versions. It should be based - on the height of the screen, not the height of the texture. -- Commented out a check at the beginning of wallscan(), because sky boxes can - make the check invalid. - -January 8, 2002 -- By default, animated textures will no longer have decals drawn on top of - them. This can be changed by adding "allowdecals" to the animation sequence - in ANIMDEFS. -- Moved the SpawnableThings/DoomEdMap initialization out of - FActorInfo::StaticGameSet() into ::StaticSetActorNums() so that Dehacked - patches that change doomednums will work as expected. - -January 7, 2002 -- Added an error message for switches that have more than one sound for their - on or off states. -- Fixed: Creating a switch with a valid start texture but an invalid second - texture would crash when you tried to use the switch. Now you get an error - when the ANIMDEFS is parsed. - -January 5, 2002 -- Wrote some code for Convert24(). Since my video card does not support 24-bit - displays, I had to test it using a 32-bit display instead, but it seems to - be working. -- Removed the special case for writing to 8-bit windowed displays in - win32video.cpp. -- Added turnspeeds command to adjust the keyboard turning rate. -- Added sin, cos, and vectorangle ACS functions. They use 16-bit angles. 0 is - 0 degrees, and 65536 would be 360 degrees if it didn't wrap to 0. - -January 4, 2002 -- Fixed: CheckIWAD() would consider as valid any files that were present in - the search, even if they weren't IWADs. Hence, something like - "zdoom -iwad zdoom.exe" would be accepted and cause a crash. - -January 3, 2002 -- Got rid of the divide in P_AdjustLine when it calculated the slopetype for - diagonal lines. Because only the sign of the result is significant, a - simple xor is enough. Did the same for UpdateSegBBox. -- Turned R_PointOnSide into a simple inlining of DivScale32. Multiplies are - cheaper than mispredicted branches, so I took out the special cases for - perfectly horizontal and vertical lines. Also made similar changes to - P_PointOnLineSide and P_PointOnDivlineSide, which are exactly the same - thing, except they use different line representations. Also inlined - P_MakeDivline, because it's so simple. - -January 2, 2002 -- Moved cl_bobscale and cl_stillbob into userinfo (and renamed them to - movebob and stillbob). There are sector actions that depend on the player's - eye height, so these values need to be sent across the network. -- Optimized R_DrawFogBoundary() by drawing horizontal spans instead of - vertical strips. - -December 24, 2001 -- Added a check for sectors without any lines in p_setup.cpp. If any are - found, their tags are set to 0 so that they cannot be used by most specials. - -December 22, 2001 -- Fixed: If you saved over a savegame from a different ZDoom version, the menu - would still list it as being from a different version until you quit and - restarted the game. -- Added the CreateTranslation ACS command and Thing_SetTranslation special to - allow changing the translation used by any actor. -- Added a ScriptedMarine actor. It looks just like the player but wears indigo - and acts like a monster (except its attacks don't actually do anything). - Doomednum 9100, spawnable #151. - -December 21, 2001 -- Added function and array support to ZDoom's ACS VM. - -December 18, 2001 -- Fixed: Player corpses would revert to the default skin if the player - respawned before their death animation finished. -- Changed the Doom weapons so that they use the ammouse member of FWeaponInfo. - This way, when a deh patch sets a weapon to no ammo, I can set its ammouse to - 0, and nothing will change when the weapon is fired.. -- Changed video code so that if the blitter is not being used to copy the - frame from system memory, all the drawing will still happen in system memory - because the processor has faster access to it than video memory. -- Changed video code so that it works with drivers that do not support - FLIP_NOVSYNC. - -December 16, 2001 -- Changed the SSG flash to not last longer than the associated weapon frame. - -December 8, 2001 -- Fixed: CheckIfExitIsGood() always returned false if self was NULL. This - meant open scripts could not change the level. -- Fixed: Exit_Normal and Exit_Secret specials ignored their position - arguments and always used position 0. - -December 7, 2001 -- Changed PIT_RadiusAttack() to be closer to the original behavior. Doom does - radius damage in a square pattern, not a circle. Oops! - -November 23, 2001 -- Changed translationtables into an array of translation tables and fixed a - bug with the serialization of decals with custom translations in the - process. -- Added the CreateTranslation command to ACC. -- Redesigned the layout of ACSe/ACSE files so that they can be included with - editors other than ZETH. The new format looks like a normal ACS\0 file with - some junk in the string area but no actual scripts or strings. The old - ACSe/ACSE format is still supported for people who took the time to compile - the ACC 1.16 source I had posted. - -November 22, 2001 -- Changed the translation member of AActor to an index into the - translationtables array. -- Added the Thing_SpawnFacing special. It works like Thing_Spawn(NoFog) - except the angle of the new actor is taken from the spot where it spawns at. -- Corrected the xspeed and yspeed arrays in p_enemy.cpp so that they better - reflect diagonal movement at the correct speed of 1. - -November 20, 2001 -- More tool work: Added IMGZ, FON1, and FON2 loading support and ILBM, PCX, - and BMP writing support to imagetool. It loads FON1 and FON2 as images, not - fonts, so converting to/from FON1 and FON2 requires extra work on the user's - part. However, it does make it possible to obtain an editable image for - the font that can be used to create another font of the same type. It also - makes imagetool usable as a general-purpose image conversion program, which - is fitting considering that it was spawned from an ILBM to PCX converter I - had written earlier. - -November 19, 2001 -- Changed FFont to construct a font whose glyphs are all the same height so - that I don't need to keep track of the height and y-offset of individual - characters. -- Fixed the FONTA63 character in zdoom.wad to be a proper copy of the - underscore character for Heretic/Hexen. -- Fixed: The Beak's weapon infos did not have their type member filled in. - -November 15, 2001 -- Changed fog boundary handling so that black fog is treated like diminishing - light rather than fog, so it will not appear on a boundary. -- Fixed: The Fortress of Mystery appeared on the intermission map when - entering E2M8 instead of E2M9. It will also stay on the map after you - finish it now. -- Fixed: When using the changemap command to switch episodes in Doom 1, only - the episode just finished would be shown during the intermission. -- Renamed CONCHARS to CONFONT. -- Merged all of the FONTB?? graphics in zdoom.wad into a single DBIGFONT - lump, partly to save space but mostly because I wanted an example font to - include with imagetool when I distribute it. -- After inspiration struck, I added some code to make fog boundaries look - better: At a two-sided line where the front fog is different from the back - fog, draw a solid-colored window of varying translucency in the color of - the front fog color. This is effectively what creating a new colormap for - each fog color already does for sprites and one-sided lines. - -November 13, 2001 -- Added FON2 creation support to imagetool. Like FON1, this is a font format, - but this one supports characters of varying widths and a custom palette. - -November 12, 2001 -- Tool work: Added pcx, bmp, and patch loading support to imagetool. -- Fixed: Screen shots did not capture the palette blend. -- Added the ability for HUD messages to resize themselves when the screen - size changes. -- Removed precachefonts command from ACC, as I decided it was not needed. - -November 10, 2001 -- Implemented the setfont command. -- Fixed: HUD messages were not saved with save games. -- Added decal teleporting support to TeleportInSector so that decals can move - between the different shafts of a fake 3D elevator. Then I commented it out - because doing it right is too hard. - -November 9, 2001 -- Added the ACS functions setfloortrigger, setceilingtrigger, getactorx, - getactory, and getactorz. The first two are to make convincing fake 3D - lifts possible. The last three are there because they have been requested - a lot. - -November 8, 2001 -- Fixed: Elevators did not set floordata or ceilingdata, so you could not - tagwait on them. -- Improved sprite clipping by fake flats further. Now you can look into an - underwater area through a window, and the sprites in it will still show - when your view is above water. - -November 7, 2001 -- Fixed: Autosaves do not become the default quicksave if the player has not - saved a game manually yet. -- FMOD 3.33 also has some division by zero issues, so now I'm back to using - FMOD 3.40--but this one was updated with some more checks that seem to be - keeping the division errors away. Unfortunately, the updated FMOD 3.40 - isn't available for Linux yet. -- Fixed: G_InitNew() was calling StaticGameSet(), but that only needs to be - called during startup. Calling it again later can cause some Dehacked - changes to be undone. -- Fixed: Swimming into a one-sided line while in water would try to jump you - out of the water. Since there's nothing on the other side of the line, - that's rather pointless. -- Made R_DrawSkyBoxes() set the camera properly. -- Changed most instances of camera->Sector in the renderer with viewsector - so that deep water clipping can behave as expected when using a chase - camera that moves out of the same sector as the camera. -- Improved clipping of sprites by sloped fake floors. To be completely - correct, the clip line should be sloped with the floor, but it's still - horizontal because I am feeling lazy right now. At least things don't - appear and disappear as you move around underneath a sloped fake floor. -- Added a sound to A_HeadAttack() so that the Cacodemon can be given a melee - sound through SNDINFO. -- Changed A_CPosAttack() to use self->AttackSound instead of hard-coding it - to "chainguy/attack". Now the WolfSS can have a different attack sound. -- Fixed: secplane_t::FlipVert() was wrong. It needs to negate everything, not - just c and d. This prevented sloped fake floors and ceilings from - displaying properly. - -November 6, 2001 -- Added things 9983 and 9982 to perform actions when going below and above - fake ceilings. -- Added some more Transfer_Heights modifiers: 16 causes the control sector - to have no effect at all on the target sector. With this modifier, it is - used solely for triggering sector actions. 32 causes the control sector to - not effect the lighting in the target sector. -- Added two new sector actions: SecActEyesDive (9993) and SecActEyesSurface - (9992). When used in conjunction with TeleportGroup, these can produce the - Duke3D silent teleport to and from underwater sectors effect. -- Changed TeleportGroup so that if group_tid is 0, it treats the activator - as the group. - -November 3, 2001 -- Made some changes to P_ExplodeMissile() so that missiles exploding on a - corner are more likely to leave behind decals. -- Added the cvars cl_bobscale and cl_stillbob to control the amount of view - bob when moving and standing still, respectively. - -November 2, 2001 -- Improved the accuracy of EV_SilentLineTeleport(). The original function was - written as if the actor was always exactly on the line, so it calculated a - destination position directly on the line and fudged with it to get the - player on the correct side. It's better to find the closest point on the - source line and the corresponding point on the destination line and then - offset off of the destination line so that the actor is in the same - relative position as it is to the source line. This eliminates the need for - fudging, and I can't get stuck in the wall when teleporting in a sample - level anymore. -- Why does the Doom map format have to store sectors only implicitly? Because - of this, people can create maps with oodles of unclosed sectors. I've - already had to modify my P_Trace() function because of this. Now I found - out that they can cause problems if I don't always divide front space in - R_RenderBSPNode(): I made it conditional because I assumed it was - unconditional because of precision problems with using polar coordinates to - perform the transformations. When sectors are well formed (and most are), - having the check causes no visible problems. But when sectors are badly - formed, it is possible that sprites in the sectors will not be drawn because - the sectors do not actually get visited, even though the space they occupy - is drawn. -- Changed the Doom fullscreen HUD so that health and armor counts are drawn - at a location based on the actual font height. -- Fixed: DCanvas::DrawShadowedMaskedBlock and ::ScaleShadowedMaskedBlock did - not check to make sure the shadow was drawn inside the screen. Now they do, - and if the shadow lies partially off the surface, the image and shadow get - drawn in two passes instead of one. - -October 31, 2001 -- Fixed: The bloodbath announcer was not entirely silent in single player - games. -- Fixed AImpactDecal::SpreadLeft() and SpreadRight() so that they can spread - across adjacent loops without getting stuck in an infinite loop. -- Fixed: Corpses can fall to the bottom of deep water now. -- Fixed a bug in P_Trace() when the trace is on the floor or ceiling and it - hits a two sided line that blocks it. -- New: Instant hit weapons can make splashes in liquids, even deep ones. - The size of the splash is determined by the weapon's puff's mass, so I set - several of the puff actors to have masses of 5 so their trails only leave - small splashes instead of big ones. -- Renamed DThinker::RunThink() to Tick(). - -October 30, 2001 -- Finally added a playmovie command to ACS. -- Fixed: FDecalLibrary::GetDecalByNum() would only find the decal if it was - on the right-most branch of the tree. -- Changed the subsector pointer in AActor to a sector pointer. The only place - where it wasn't used to get the actor's containing sector was an early-out - in P_CheckSight(). Since the sight checking in ZDoom uses the blockmap - instead of the BSP, I doubt it provided much benefit, especially since it - was rarely taken. - -October 29, 2001 -- Put back some code that lets you see underwater areas through windows. It - is not perfect and cannot be used at the same time that you can see the - abovewater area of any deep sectors. -- Fixed: The back side of a mirror could clip sprites in front of it because - the determination of which side of a line a sprite is on was being done in - world space. The solution is to use camera space for the determination - instead. Since I was already calculating all the necessary values, the - solution mostly involved extending vissprite_t and drawseg_t to hold the - extra information. -- Fixed: Sectors set to drop their ceilings after 30 seconds would not go - back to their original height if they were blocked while closing. -- Added the con_ctrl_d cvar so that I can set it to "quit" and press Ctrl-D - at an empty console prompt to quit the game. -- Added the exit command as a synonym for quit. -- Added the defaultbind command. - -October 27, 2001 -- Made a slight optimization for sprite drawing by moving the floorclip - clipping out of R_DrawMaskedColumn and into R_DrawSprite. -- Fixed: Spawning objects in a swimmable water area would create a splash on - the water surface. -- Fixed: Passing +map at startup just prints a warning to the console instead - of quitting altogether if the map could not be found. -- Added new options to Transfer_Heights: By setting the second argument to 2, - only the deep water effect will be created. By setting it to 4, the fake - floor and/or ceiling will only show if it is "inside" the sector, but only - if the real sector's and the control sector's corresponding planes are not - sloped. This also effects the texturing in that the control sector's - textures are used for both the top and bottom of the surface they correspond - to, and the sector being faked keeps its textures for its normal range. - Set the first argument to 8, and it will be made into water even without a - WaterZone actor in the control sector. These can be added together to - combine effects. So Transfer_Heights (tag, 12) should produce an effect - similar to Doom Legacy's 280 linetype. -- Added the test and eval console commands. Test is like if/then/else, and - eval evaluates an expression, possibly storing the result in a variable. - This should take care of all the major functionality the console was - missing before. - -October 26, 2001 -- Made the atexit cvar a command that registers different commands to - execute when the game quits. -- Cfg files listed at the start of the command line now get executed as if - they had appeared after +exec. (i.e. "zdoom foo.cfg" works just like - "zdoom +exec foo.cfg") -- Added the pullin command so that .cfg scripts loaded at startup can cause - one or more wads to be loaded. (They "pull in" the wads they need.) -- Changed the exec command so that it can execute more than one file. -- Added the addkeysection and addmenukey commands for people writing console - scripts. - -October 25, 2001 -- Added ACS commands fadeto, faderange, and cancelfade to do some palette - blending stuff under scripted control. -- Added BloodSplash, BloodSplashBase, SlimeSplash, and SlimeChunk classes - for anyone who wants to use them in a TERRAIN lump. -- Added the atexit cvar. It gets executed like an alias when the game quits. -- Added archivecvar command to force user-defined cvars to save themselves - in the config file. -- Added snd_waterreverb cvar to disable the use of underwater reverb. -- Added support for specials with variable argument counts to ACC so that - specials which have had parameters added (such as Thing_Spawn) can still - be used without the extra parameter. -- Added TeleportOther (76) and TeleportGroup (77) specials. -- Added autosave capabilities. Up to four autosaves are kept at a time, - and they get created whenever a player enters a map. The level designer - can also place them at strategic locations in the level using special - 15 or linetypes 348/349. - -October 24, 2001 -- Fixed: The level name shown on the automap included the hours of the - current time if the map was in a hub. -- Added Line_Horizon to DOOMX/HERETICX as linetype 337. -- Added am_showitems cvar to show the item count on the automap. -- Added pattern matching support to D_AddConfigWads(). -- Fixed: Variable substitution only worked for the last argument of a - command line. -- Removed FCommandLine::AllButFirstArg(). It did not handle variable - substitution, and since you can escape quotes inside strings, it's not - really neccessary, either. -- Added a generator line for the Spider Mastermind to DECALDEF. -- Added some division-by-zero checks to the projection calculations in - R_AddLine(), R_CheckBBox(), and R_RenderBoundWallSprite(). - -October 23, 2001 -- Added Scale and Decal properties to Dehacked thing sections. Added Decal - property to Dehacked weapon sections. -- Changed the scalars in DECALDEF to be 1-based instead of 64-based. This - lets me silently expand its range in the future without breaking existing - decal definitions. -- Fixed: fixedlightlev was being applied to skies. It looks weird to see a - torch lighting up the entire sky, so skies should ignore the setting of - fixedlightlev. -- Fixed the scaled status bar. I was simply forgetting to add the image - offsets in DBaseStatusBar::DrawImage() before calling CopyToScreen(). -- Added code to let decals move with sliding and rotating polyobjects. -- Fixed: The wait console command waited one tic too few. -- Fixed a resizing problem with playing movies windowed. -- I think checkinventory, giveinventory, and takeinventory are fully working - now. -- Made checkinventory not crash in open scripts. -- Made AInventory::TryPickup() public so that I can use it with - giveinventory and avoid printing a message about the pickup. -- Passing an amount of 0 to takeinventory now removes all of that item - from the player's inventory. -- Made TakeInventory work in open scripts. -- Removed the Health option from GiveInventory. -- Changed DamageThing so that negative damages cause it to act like - HealThing. -- Added OldStyleID() methods to AFist, APistol, AStaff, and AGoldWand. - -October 22, 2001 -- Made clearinventory work in open scripts. -- Made ambientsound use CHAN_AUTO instead of CHAN_BODY, so you can have - multiple overlapping ambientsounds. -- Fixed: Setplayerproperty was using the set property as the who property. -- Fixed: Closing the console when the overlay automap is active and the view - window does not cover the width of the screen would not redraw the border. -- Fixed: The overlay automap did not center itself inside the view window. -- Fixed: When neverswitchonpickup was changed during a game, it would always - become false in the playerinfo struct. -- Made the rocket explosion style modifiable through dehacked in the misc - section. Use the keys "Rocket Explosion Style" and "Rocket Explosion Alpha" - to change it. -- Changed the sky drawer so that it properly tiles skies of any height and - not just those that are a power of 2. -- Changed R_InitSkyMap() so that tall skies will always be aligned at the - top of the screen when looking all the way up. Now 240-tall skies will - actually be useful, since so many people seem to think skies need to be - that tall to be considered "tall" even though anything taller than 128 - pixels is "tall". -- Fixed: Files specified at the start of the command line were treated as - if they were listed after a -bot parameter. -- Modified DArgs::GatherFiles() so that it can handle files listed after - multiple instances of the same parameter (e.g. "-file 1.wad -file 2.wad") -- Changed ConsiderPatches() so that it tries appending both .deh and .bex to - files listed after both -deh and -bex parameters, which means the two - parameters now behave identically and are just synonyms for each other. -- Made a fix to BaseFileSearch() when it retries with an extension. - -October 20, 2001 -- Added range checks to R_SetVisibility to prevent visual glitches caused by - too high visibility/fov combinations. -- Made r_visibility unchangeable in netgames. -- Made FOV changes get sent through the net interface, so they can be - recorded in demos, and also so that they can be restricted with the new - sv_nofov cvar. -- Fixed: Bool cvars (such as sv_nomonsters) would change their associated - serverinfo var without going through the network. -- Fixed: The Doom status bar would not update the arms/frags area when the - deathmatch cvar is changed during the game. -- Fixed: Player corpses could still make the grunt sound when they hit the - ground. -- Fixed: StreamSong would always play at full volume until snd_musicvolume - changed because it kept its own internal copy of the volume that was not - updated with the actual volume until the cvar was changed. -- Made crushing ceilings call PlayCeilingSound() again, but only if the - ceiling is not playing a looping sound. This fixes the almost silent crusher - in Doom2 MAP04 that had become totally silent. -- Fixed: The weapon sprite did not flash when invisibility was about to run - out. -- Made DECALDEF generators support using "None" to remove decals from actors. -- Added fullbright flag to the BFG lightning and plasma scorch decals. -- Fixed: Ambient things could not be spawned silent, because they start - themselves with PostBeginPlay, which gets called after Deactivate - when their dormant bit is set. So they would stop themselves and then - immediately start again. Using BeginPlay fixes this, since it gets - called before the dormant Deactivate. -- Fixed: S_RelinkSound() should not be able to move repeating sounds to - positioned sounds. This fixes removing continuous ambient sound things - from not stopping the sound immediately. -- Fixed: Deactivating a continuous ambient sound thing would not stop the - sound until it was either overridden by more important sounds or disappeared - out of range. -- Fixed: The bex include directive ignored the file name if it appeared in - files that mark line endings with CR/LF instead of just LF. (AFAIK, that's - all bex files that exist.) For files that just use LF, it would try to - include the file but crash. -- Win32Video::EnumDDModesCB() now rejects modes whose widths are not - multiples of 8, because there are various places in the source that assume - this to be true, and I have no alternative code (or desire to write such - code) to handle cases when this is not true. I don't know of any standard - modes that would be rejected by this, but it's better to be safe than sorry. -- Fixed: Viewwindows with widths that are not divisible by 16 could crash - when doubling pixels horizontally, because the MMX routines write to - quadwords at a time. Now the non-MMX code is always used in such cases, - since they are rare (only when the window is the full width of the screen - and the screen width is not a multiple of 16). -- Removed vid_bufferarea and related code to switch between buffered and - unbuffered display based on translucent areas visible in the last frame. -- Fixed: Savegames did not remember which levels had been marked visited for - the Doom 1 intermission screen. -- Fixed: Actors' alphacolor was not serialized. -- Fixed vid_setmode not always resizing the window to a reasonable size under - Win ME because the OS sends out WM_GETMINMAXINFO before performing the - resize with SetWindowPos(). - -October 19, 2001 -- Added the ability for DDrawFB to draw to a system memory surface and then - blit it to the primary surface. This can greatly improve performance, both - because the video card can write to its own memory faster than the CPU, but - also because the next frame can start rendering in a separate surface while - the blit is underway. The net result is that drawing to system memory is - only a little slower than drawing directly to video memory (if at all), and - there is really no reason for me to support writing directly to the primary - surface any more. I can even run 1400x1050 at 35 fps, though it is somewhat - jumpy, and it does get slower if the scene is too complicated. But just - being able to run it full speed at all at that high a resolution rocks! Even - a 300 MHz P2 can run the standard levels at a full 35 fps at 800x600, which - it couldn't before. - -October 18, 2001 -- Need to fix windowed 256 color updating for systems that cannot lock the - primary surface. (result is DDERR_CANTLOCKSURFACE when you try) -- Added a performance counter for blitting the frame buffer to the screen and - discovered that it is a real performance sink. When no pixel format - conversion is involved, it should be no slower than wall drawing, right? Well, - it's about twice as slow. -- Improved performance at 1024x768 by using a pitch larger than the width for - the underlying SimpleCanvas at that resolution (so that successive pixels - drawn in columns are not exactly 1k apart and can make better use of the - cache). The result is that wall pixels take about 5.4 cycles to draw, which - is in line with what the other resolutions manage. - -October 17, 2001 -- Did some performance tests at different resolutions and discovered something - very weird: up to and including 800x600, wall drawing ranges between 4.5 and - 5.2 cycles/pixel. But at 1024x768, it jumps up to a whopping 18 cycles per - pixel. Even stranger, 1280x1024 only uses 7 cycles/pixel, and 1400x1050 takes - just 5.5 cycles/pixel. (These numbers include all overhead such as traversing - the BSP and creating visplanes, not just the time actually spent stuffing - pixels to the framebufer.) -- Changed the mode iterator to allow resolutions taller than 1024 pixels, - since there is nowhere in the source that this restriction exists. (There - is a limit of 1200 pixels tall, but this is easily changed with a #define.) -- Massaged the assembly output of vlinec4 to produce vlinetallasm4. This - new function is about 7% faster than provlineasm4 and is not limited to - 256 pixel tall columns, so I stopped using provlineasm4. I don't know - how it compares to vlineasm4 on a Pentium, but my guess is that vlineasm4 - is faster on such a machine. It's probably worth also noting that contrary - to my initial belief, self-modifying code was essential to getting this - function to perform well. Also, I did not even bother trying to optimize - it for a Pentium, just Pentium Pro and above. Moving things around to help - pairing on a Pentium actually reduced performance on this P3-M. - -October 15, 2001 -- Wrote C versions of vlineasm1 and vlineasm4. On a P3, vlinec4 performs - about half way between vlineasm4 and provlineasm4. P2 performance is - probably similar. -- Got rid of all the 2-column drawers. Whatever performance improvements - they might have been able to offer was negated by the complexity of the - code neccessary to use them. This let me greatly clean up rt_draw4cols() - and actually make it readable. - -October 12, 2001 -- Fixed: I_InitMusic() was not called if -nosound or -nosfx was passed. -- Changed visplanes so that the bottom array stores the pixels just below - the plane--a simple semantic change that lends itself to a few more - optimization chances elsewhere in the engine, since it unifies the way - top and bottom arrays are handled everywhere. -- Enhanced wallscan so that it can get a texture column using any function. - This lets me use it for layered skies. - -October 10, 2001 -- Drawing of a single sky layer now uses wallscan. -- Removed the use of dc_mask from all of the non-wallscan column drawers, - since they are only used for masked columns, which never repeat and hence - never need masking. -- Tried out the new code on a P2-300. It is also slightly faster. Drawing a - wall covering the entire screen is about 10ms faster at 800x600 on it. This - made me decide to do away with BlastColumn, R_RenderSegLoop1, and - R_RenderSegLoop2. There is just one R_RenderSegLoop now, using vlineasm4. - -October 9, 2001 -- Added Build's vlineasm4 and associated code to speed up wall drawing. - Surprisingly, it only offers a marginal improvement on this P3-866 equipped - notebook: The higher resolutions are only a few FPS faster than - r_columnmethod 1. When I get a new monitor, I will have to try it out with - my main system, since it still has a P2-350. I think the biggest benefit - should be for people with Pentium-class or less processors. - Since it is faster, I'll keep it. I also improved it so that it works with - textures taller than 256 pixels (or should, I haven't tested). - -October 4, 2001 -- Fixed fullscreen video playback so that it does not minimize the game - window immediately after the video is stopped. -- Improved dragging the ZDoom window around by making the window procedure - pay attention to WM_PAINT messages and redraw the screen as needed. Making - WM_SIZE invalidate the client rect also lets it redraw as the window is - shrinking. - -October 3, 2001 -- Fixed DDrawFB::CreateSurfacesComplex() so that it can retry without - requesting video memory. This lets it work with Mode X, so presumably it - will also let it work with old video cards that lack proper DirectDraw - support. -- Commented out the GammaControl stuff in win32video.cpp. Too many people - complained about not being able to compile it (get a newer DX SDK!), and - it does not provide me much benefit when working with paletted displays - anyway. Nor was it ever actually implemented. - -October 2, 2001 -- Fixed: DROPPED bit was defined twice in DEHSUPP. -- Updated my source files with the new BSD-ish license. -- Renamed p_spark.cpp to g_shared/a_spark.cpp. -- Removed d_items.cpp and d_items.h. They have been obsolete ever since I - changed the give command to accept class names. -- Changed the randomized sound names in DEHSUPP from their individual names - to their new base name. (i.e. grunt/sight1, 2, and 3 all become grunt/sight) -- Fixed a typo in DEHSUPP: gatso/death should have been fatso/death. - -October 1, 2001 -- Added a playmovie command to play a file using DirectShow. Currently, it - works best with windowed mode. - -September 27, 2001 -- Added Line_Horizon special to extend a sector's floor and ceiling to - infinity--should be useful for skyboxes. It is not meant for use with - slopes, so don't do that. -- Fixed: ceilingclip/floorclip generation in R_DrawSkyBoxes was wrong for - unused portions of the sky box's visplane (when pl->top[x] == 0xffff). - This could cause problems when taking the snapshot for savegames. -- Fixed: Quicksaving would continue to ask for a save slot until a normal - save had been done. -- Fixed: Bad decal texture coordinates could crash the game. These were - generated when the camera gets extremely close to a decal, so I chose to - use the same tactic I used with masked mid textures and not render them - at all if they get too close. I think the only time something like this - becomes a real issue is when somebody is noclipping around the level. - -September 26, 2001 -- Fixed P_LoopSides() to not trash memory when loading a map with a - single-sided line that does not attach to anything at its right end. (E1M3 - is one such map.) -- Fixed decals not drawing their full height except when they were on upper - textures; BlastColumn was storing wallbottom wrong. -- Fixed inconsistant usage of ceilingclip. It is supposed to store the top - good y, but some places still treated it as the y just above the first good - y, as it was in the original renderer. -- Fixed the GCC version of qinterpolatedown16short(). It wrote 2 more - entries than it was supposed to and could start writing one entry before - it was supposed to. -- Previous log entries were accidentally lost when I was improving the - todos/fromdos scripts. Now only the files that have changed get copied - across, and I can avoid rebuilding every source file each time I transfer - the code between partitions. Under Linux, this is a big deal, because GCC - is so slow. - -September 17, 2001 -- Added cl_missiledecals cvar to turn off decals left behind by missile - explosions. -- Added cl_bloodsplats cvar to turn off blood splats while leaving other - decals alone. -- Added -timerdelay parameter to specify how fast the game timer tics (in - milliseconds). This is just here so that when I occasionally get demos - illustrating problems, I can easily fast forward through them. -- Made A3D the default for snd_3d again, because A3D has one more hardware - channel than DirectSound on my Vortex2 and because it seems to work - better than DirectSound. -- Changed I_StartSound3D() so that it starts sounds on a specific channel - instead of using FSOUND_FREE, because it loses sounds with DirectSound - if I let FMOD pick a channel. Oddly, FSOUND_FREE with A3D works fine. - [Nevermind, that doesn't work with DirectSound, either. It seemed to be - working the first time I tried it, but when I tried again later, it - was not working anymore.] [Another footnote: A3D seems to position the - sounds wrong that DirectSound does not play. What's going on?] -- Let I_SetChannels() change the number of channels available so that all - the available hardware channels can be used if using 3D audio. -- Made CPU speed detection more accurate. -- Added underwater reverb for hardware 3D sound. -- Updated sound code for FMOD 3.4. -- Fixed timer resolution checking in WinMain--my parentheses were misplaced. -- Put SectorSilencer back at doomednum 9082. I don't know why I had changed - it to 9002. - -September 15, 2001 -- Fixed: Monsters that reached the end of a patrol path did not have their - reactiontime reset, so they would wait a very long time before attacking. -- Fixed: STYLE_Shaded ignored special colormaps like invulnerability. -- Added support for autoloading wads through the config file. Create a - section called [Game.Autoload] and place "Path=" beneath it for each - file to be automatically loaded. They are loaded after the files in the - skins directory and before any files on the command line. Game can be - Global to load the files for any game. Global files are added before game- - specific files. -- Fixed StreamSong when using 3D sound: The stream was not created with - FSOUND_2D, so it was being positioned in the world. - -September 14, 2001 -- Made the ACS spawn and spawnspot commands automatically prepend A to their - type names. They remain untested, however. -- Added decals for all remaining Doom things. Heretic is next. -- Fixed pitch calculation in P_TraceBleed() when a missile's velocity is used - to determine pitch. - -September 12, 2001 -- Added decal stretchers, sliders, combiners, and colorchangers. Also added - a few more decals. - -September 11, 2001 -- Fixed FDecalLib::GetDecalByNum() and ::GetDecalByName() so that they do not - crash if the decal is not found. -- Tried putting back in the BSP-based sight checking code that was in the - Linux Doom 1.10 source, and the result was quite surprising. Using the BSP - to check sight was actually slower than using the blockmap, sometimes - significantly so--Vrack 2 spent between 4 and 6 times as much time checking - site using the BSP as it did without. In the best case, the BSP routines - were about as fast as the blockmap ones, so I took the BSP routines back - out, because they offer no benefit over the Hexen code I had been using for - some time now. -- Fixed: Maps with starts for players 5-8 would trample over memory - when saving the starts for those players. -- Added blood splats for instant hit weapons. - -September 10, 2001 -- Made alpha affect STYLE_Shade. -- Fixed: rt_shaded4cols sometimes drew texels too dark because it - calculated the value of fill wrong. -- Fixed: Decals that used picnums (i.e. all of them) could not be flipped - horizontally. -- Stopped using actors' memory locations as their phase shift for float - bob motion. This works fine for single player, but in multiplayer, - there's no way to ensure that the same actor will have the same phase - on different machines. Now I use the random number generator instead. - -September 8, 2001 -- Added decal faders so that decals that are likely to bog things down - (such as the plasma rifle's) can disappear sooner than if they wait for - cl_maxdecals to be hit and get cycled out. [Edit: I only use these for - special effect decals right now.] -- Added the ability for missiles to leave behind decals on walls. -- Fixed a sub-pixel alignment problem for vertically flipped sprites. -- Fixed: Adding bots and then changing the map could crash because the bot's - "player" was still carrying around the actor from the previous level. -- Bumped the barrel respawn time back up to 1050 tics--forgot I had dropped - it down to 50 for testing. -- Added support for loading sounds from RFF files so that I can have the - Bloodbath announcer. - -September 7, 2001 -- Fixed: Dehacked patches that set weapons to ammo type 5 (what was once - am_noammo) would use am_crossbow, because that is type 5 now. - -September 5, 2001 -- Fixed: Trying to alias a command through the .ini file would crash - because the game would actually try to do it instead of giving a warning. - -September 4, 2001 -- Added the falling splat sound to A_PlayerScream(). -- Changed skin semantics in AActor::SetState() again so that players can - actually burn because the burn states use the FDTH sprite instead of - the normal player sprite. Now, if the actor is not a player, or the - player does not have a skin, or the state's sprite is not the same as - the sprite the player was spawned with, the state's sprite will be - used. Otherwise, the skin's sprite will be used. -- Fixed burning and icy deaths to not crash. -- Fixed a stack overflow in Heretic/Hexen that could happen after death - because A_Chase and A_Look would repeatedly cause the other function - to execute, ad nauseum. -- Added Hexen's Ice Guy/Ice Golem. -- The SkyboxViewPoint's angle is now used to adjust the yaw when drawing - a skybox. This means you can rotate a skybox by rotating its viewpoint - (which is courrently only possible with an actor mover and several - overlapping interpolation points). -- Added simple Dolby Pro Logic surround support to s_sound.cpp using code - from a post on the message board. - -September 3, 2001 -- Fixed: The alias command will no longer try to set or remove aliases for - normal console commands. -- Fixed an error in C_RemoveTabCommand() that moved one extra name down - at the end of the array. -- Added Hexen's Serpent/Water Lurker, Centaur, Demons, and mana. - -September 1, 2001 -- Reintroduced MF_CRASHED, this time as MF3_CRASHED, so that I don't need a - special case to crash FireDemons that die on the floor. -- Added Hexen's FireDemon/Fire Gargoyle/Imp, just because it's been so long - since I added anything from Hexen. - -August 29, 2001 -- Changed ADecal::StickToWall() to add decals to the end of the list so that - new decals get drawn on top of old ones. -- Fixed: Actors with STYLE_None were still being projected to the screen, - needlessly wasting time. - -August 28, 2001 -- Fixed: Quicksaving into an existing slot would rename the quicksave to the - name of whatever was saved most recently instead of keeping the name - of the quicksave slot unchanged. -- Fixed: PWADs that replaced sprite frames that originally only had a rotation - 0 with multiple rotations would only show the first rotation. -- Fixed: When the light to dark part of R_CalcTiltedLighting() clamped the - end of the range, it set lightfiller to a value calculated with - (NUMCOLORMAPS-1)<player != source->player). This is just so that voodoo doll damage - cannot be reduced by turning on teamplay and changing teamdamage. - -August 2, 2001 -- Fixed: Items were respawning at the location where they were picked up when - they should have respawned where the level author placed them on the map. -- Changed the criteria for executing thing death specials from MF_COUNTKILL to - !MF_SPECIAL. Now you can give a barrel a special, and it will be executed when - the barrel is destroyed. -- Added the print command to print a string from the string table. -- Added the contributed Italian translation. -- Fixed: OB_UNDEAD said "revevant" instead of "revenant". -- Added names for all the new keys I found when looking at the dinput.h from - the DX8 SDK. -- Fixed: Bindings for kp= would not save in the ini file properly. -- Added rebind command to change the binding of the key that activated it. - This is intended to allow the creation of generic sequential aliases. (That - is, a series of aliases that do something, then bind a key to the next alias - in the sequence.) Like this: - alias dumb1 "echo one; rebind dumb2" - alias dumb2 "echo two; rebind dumb1" - -July 26, 2001 -- Fixed the TMulScale definitions for GCC. - -July 25, 2001 -- In I_InitSound(), A3D is no longer the default if snd_3d is true. -- Moved s_sfxvolume, s_midivolume, and s_musicvolume into their appropriate - i_* files and integrated them with the functions they called. Also made - their ranges uniform at [0.0,1.0]. - -July 23, 2001 -- Added some more checks to p_setup.cpp to catch bad maps. In this - case, the checks were added for ma_sincity.wad, which has two one- - sided linedefs that have -1 as their front sector and will crash if - you look at them. - -June 8, 2001 -- Fixed: Single files added with -file were recorded with their lump - names instead of the file names so if they got closed, they could - not be reopened. - -June 3, 2001 -- Finished TiMidity++ support for the Win32 version. It has two modes - of operations: 1) Just play as normal. This only works if the sound - card can play multiple wave streams at a time. 2) The default, have - TiMidity output wave data through a pipe and use that to fill an - FMOD stream. This will work with all sound cards and offers a little - more control over the output. The only problem I could not figure out - how to solve was how to make TiMidity quit (safely) when ZDoom wants - it to without modifying TiMidity. The solution I ended up using was to - have TiMidity start a thread that waits on a special named event and - calls exit when the event becomes signalled. - Ironically, the whole purpose of being able to use TiMidity for music - was that it could provide better music support under Linux, yet the - Linux side of things has not even been done yet. When I do write it, it - should work fine with an unmodified TiMidity. - -June 1, 2001 -- Put back the " operator *()" members of the different cvar - classes because VC++ always uses a bitwise copy when passing a class - to a varargs function EVEN IF THE COPY CONSTRUCTOR IS DEFINED. This - means that something like printf ("%d", dmflags); will actually copy - dmflags to the stack instead of just dmflag's value. To make it work - as expected, you need to use printf ("%d", (int)dmflags);. Since - printf ("%d", *dmflags); is more compact, I decided operator * is - useful after all. - I just hope the timidity cvars are the only ones I used with printf - style functions. I did not see any others when I scanned the source, - but that doesn't mean I didn't miss any. :-( -- Changed the name of the variable passed to cvar callbacks from "var" - to "self" to make its use more obvious. -- Changed the " operator *()" of the different cvar types to - "operator ()" so that fetching a cvar's value looks just like - fetching any other variable's value. - -May 30, 2001 -- Added snd_midiprecache cvar so that people without GUSes can turn off - the precaching. -- Fixed: snd_surround was ignored. -- Fixed: snd_reset turned off MIDI. -- Added assembly routines for the different r_detail settings. - -May 28, 2001 -- Fixed: LEVEL_SPECOPENDOOR opened the door at a speed of 8*TICRATE instead - of 8*FRACUNIT, about 1872 times slower than it should have been. - -May 26, 2001 -- Fixed the positioning of y-doubled view windows and changed the x-doubling - so that it works with the optimized column drawer and does not need the - columnofs table. -- Fixed: M_FindResponseFile had a poor parser that considered lots of things - to be white space that weren't and did not treat quotes specially. Now it - uses essentially the same parser as the console. -- Fixed Heretic/Hexen wind specials so that they can apply even when an - actor's current velocity is 0. -- Added MF3_NOBLOCKMONST flag to indicate which things can cross - ML_BLOCKMONSTERS lines (because this is a better way than writing a - special case for Heretic's APod). -- Removed MaxSpecialCross, since it isn't needed anymore. - -May 25, 2001 -- Fixed: ATreeDestructible's default list was missing the mass property. -- Added Hexen's falling damage code and made the two types of falling damage - (ZDoom or Hexen) selectable from the level and dmflags. The dmflags falling - damage selector can now be used to enable falling damage but not to disable - it to avoid cheating in levels meant to be played with falling damage. -- Added a new dmflag (sv_nopassover) to make thing z-checking work as it - did in Doom (that is, not at all, except for missiles). -- Fixed: Chat macros did not work because Windows sends WM_SYSCHAR instead of - WM_CHAR when ALT is held down. - -May 14, 2001 -- Added decal groups and generators to DECALDEF. -- Fixed potential crash when defining decals with SpawnIDs. - -May 3, 2001 -- Added lightning scripts, which get executed whenever lightning strikes in - a level. -- Added the OutdoorLightning sector special (197) so that skyboxes can - flash outdoor (as opposed to indoor) lightning without fancy scripts. - -May 2, 2001 -- Fixed: When teleporting in a non-hub environment, the level's snapshot - would stay around if the player had saved while in it. This was especially - obvious if the player was moving to the same map he just left. -- Enabled key repeating in the menus. -- Added Hexen's lightning and fixed a bug in Hexen's code: It is not safe - to assume that the number of sectors that lightning can apply to will - remain constant through the level (thanks to ACS). - -May 1, 20001 -- Fixed: The SkyBox member of sector_t was not serialized. - -April 26, 2001 -- Fixed: When loading savegames, bobbing actors would have semi-random - heights because they get loaded in a different memory address than they - were saved at. The actor's address is used to determine its phase shift - compared to other bobbing actors, so when the actor was restored there - was no way to restore the original cycle. The solution is to take out the - bob offset before saving and add it back in when restoring. -- Added some DrawChar functions to DCanvas. -- Fixed DCanvas::StringWidth() for high ASCII characters. -- Changed the arrangement of codes in ESpecialGUIKeys to document the - standard ASCII codes in the range [1,31]. -- Changed text color escape character from 0x81 to 0x1c, because 0x81 is a - printable character (though most Windows fonts seem to leave it undefined). -- Added support for WM_CHAR messages (they get fired off as EV_GUI_Char), so - now you can do all the standard Windows text manipulation stuff when typing - text at the console or elsewhere. -- Fixed: Decals were being saved to savegames but were not restored properly. - I think this was also causing crash problems after loading savegames. -- Changed mouse pointer hiding to change the cursor to an invisible cursor - instead of changing its visibility. This is to ensure that it works - correctly all the time instead of just most of the time. -- Removed testing for WM_ACTIVATE in the window procedure. Looking for - input focus is what we really want to do where the window's active status - was being checked. -- Got rid of I_Pause/ResumeMouse() and let the code in i_input.cpp decide - whether or not the pointer should be visible. - -April 25, 2001 -- Changed action command handling so that multiple keys bound to the same - action can coexist peacefully. That is, if you are pressing two keys bound - to the same action and release one of them, the action will still persist - until the second key is also released. This is like Quake. -- Added a check for key bindings to check if a binding contains the substring - "bind". Only if it does is the binding copied before being executed. - Previously, the command was always copied, even if it was unneccessary. -- Changed C_DoCommand()'s argument to a const char *. - -April 24, 2001 -- Changed command line handling for console commands so that argv and argc - are not calculated until the first time they are needed. - -April 23, 2001 -- Added shuffle parameter to playlist command. - -April 22, 2001 -- Added playlistprev and playlistnext commands. -- Pressing F1 at the save/load menu replaces the comment with the actual - file name of the savegame. -- Added GK_ entries for the function keys. -- Fixed: Quicksaving without saving/loading first crashed. -- Added reverse tab-completion to the console, when pressing Shift-Tab. - -April 21, 2001 -- Fixed: P_GiveAmmo() did not check userinfo.neverswitch before setting the - pendingweapon. -- Got rid of P_GiveWeapon() and moved its functionality into AWeapon:: - TryPickup() and added some more AWeapon member functions just so that - picking up a weapon with sv_weaponstay true will produce all the standard - pickup feedback. This breaks the "give weapons" cheat, but you can still - summon them, so how bad is that really? -- Changed P_GroupLines() to warn about lines that lack frontsectors instead of - crashing. - -April 20, 2001 -- Fixed: In Heretic and Hexen, things are supposed to gib at negative half - their original health. - -April 17, 2001 -- Fixed: It was possible to stand at the very edge of a steep slope and not - fall off of it. It is still possible to "balance" by running away from the - edge, but I think that will take more time to fix than it's worth (especially - if I really do go ahead and rewrite the level geometry collision detection.) -- Added in-air friction that depends on aircontrol: The greater aircontrol is, - the more friction affects things. Only affects players. -- Made level gravity and aircontrol accessible through MAPINFO as well as ACS. -- Disabled migration of zdoom.cfg. Perhaps it is better to make a clean break - from the old format than to try and import it if zdoom.ini is not found. -- Fixed: When the status bar face graphic changed and the status bar was - scaled, only the area enclosing the new graphic was updated to the screen. - It should update the entire face box. -- Fixed: When a dehacked/bex patch changed a level's name, the change was not - reflected in the level infos, so it did not actually become visible. - -April 14, 2001 -- Modified S_LookupPlayerSound() to detect player sounds which were defined - but did not have any valid lumps and automatically try again using male. -- Added storesavepic cvar. -- Added sorting to the savegame menus. -- Finally tested the savegame menus to make sure that they work with more - save games than are visible and discovered that they didn't, so I fixed - them so they do work. -- DCanvas::StringWidth() now knows about '\n' characters and returns the - length of the longest line. -- Changed the savegame menus to display games saved with an incompatible - ZDoom version so that the user has a more convenient means of deleting them - than by opening the savegames in a hex editor to find out which version each - one was saved with. -- Added "name" support to archives. Basically, names are just managed strings - that allow duplicates to be stored by index instead of duplicating the - string. - -April 13, 2001 -- Fixed: Particles were rendered as if they were being drawn to the main - frame buffer, even when they weren't. -- Fixed: After deleting the last save game, the menu would think you still - had a game selected and crashed if you tried to delete again. -- Discovered the problem with some of Tei Tenga's cameras: They have invalid - heights that put them above/below the sector. Copied the viewz clamping - from P_CalcHeight() into R_SetupFrame() to compensate. I don't know why - they worked in earlier versions. -- Moved zvox.wad loading to happen after loading the IWAD. There are certain - places where the IWAD is assumed to be the second wad loaded. - -April 12, 2001 -- Added a new game menu for Hexen that explains you cannot start Hexen from - a menu yet. -- Made the names stored in DEHSUPP case-insensitive. -- Fixed: R_RenderViewToCanvas() did not lower the Heretic weapons to the - bottom of the rendered area. -- Fixed positioning of the save/load menu titles and the save game cursor - at high resolutions. -- Fixed: Many ammo types were derived from AInventory and not AAmmo, so - they did not play the dedicated ammo-pickup sound. -- Fixed AAmbientSound::Activate() to check that the ambient sound assigned - to it actually exists. If not, it destroys itself. -- Changed doomtype.h to use the ANSI instead of defining its - own limits. - -April 10, 2001 -- Fixed: FindNextFileA() returns 0 on failure, which is the opposite of - _findnext(), and I did not realise that when I changed I_FindNext() - to use the Win32 API function. - -April 9, 2001 -- Made some code changes to allow for compilation with GCC again - (specifically, Cygwin's GCC). Fixed a few latent bugs in the process, - thanks to GCC's more stringent default warnings. -- Fixed: FHelperThread must have a virtual destructor, which might - explain why I was having so much trouble with it before. - -April 7, 2001 -- Added r_drawtrans cvar to allow disabling the drawing of translucent - things. -- Fixed: The stretched Doom status bar would not properly clear away the - big ammo count when switching to a weapon that does not use ammo. -- Fixed: At certain screen heights, scaled status bars would not touch the - bottom of the screen because of inaccuracy in the calculation of ::ST_Y - in DBaseStatusBar::SetScaled(). -- Added separate pickup sounds for health, armor, and ammo items. -- Improved sound link resolution in S_StartSound() so that regular sounds - can alias player sounds. -- Reimplemented idmypos in a more useful manner. - -April 3, 2001 -- Fixed: DLevelScript::RunScript() sets TeleportSide according to its - lineSide property instead of assuming that it is already set correctly. -- Fixed: ASectorAction::CheckTrigger() should set TeleportSide to 0 so that - teleports always work. - -March 29, 2001 -- Added language cvar. -- Fixed: Float bobbing objects would warp to the floor when on a rising - platform. -- Fixed: "Torque" should not be applied to float bob objects. (Hexen MAP11 - is a good example of why not.) -- Fixed: Spree messages should only be shown in deathmatch. -- Changed sound effect loading to try the sound as DMX format first instead - of last. (FMOD was recognizing CHICPK2 in heretic.wad as some compressed - format.) -- Made skins work with the new player sound system. - -March 28, 2001 -- Changed player sounds to exist separately from the main sound list (sort - of). The generic player sounds (e.g. "*death") now exist as actual sound - entries, but they only serve as a context for getting an index into a - separate list of class/gender specific sounds which index back into the - main sound list and provide the actual sound to play. This also reduces - the total number of sounds that need to be registered. Several new SNDINFO - commands were introduced to support this. -- Fixed: When the tomed phoenix rod ran out of flame, the weapon disappeared. -- Fixed: Intensity calculations in InitPalette() could overflow and cause - the invulnerability colormap to be wrong. - -March 27, 2001 -- Made the Ambients array in s_advsound.cpp a list of pointers to - AmbientSounds instead of a container of AmbientSounds, since the array is - usually nowhere near full and just wasting memory. - -March 26, 2001 -- Fixed: Using sound names in a dehacked Thing section works again. -- Enhanced the soundlist command to show links and random lists. -- Added an overloaded Printf() that does not take a print level, but just - prints at PRINT_HIGH. -- Added the $random SNDINFO command. -- Moved the template functions into templates.h and added the BinarySearch - template function. -- Fixed: The spectre had sounds defined in SNDINFO, but its defaults didn't - specify any sounds, so it used the demon's sounds instead. -- Implemented a suggestion from the message board to A_VileChase so that - negative speed archviles do not run away from corpses. - -March 24, 2001 -- Fixed: Monsters following a patrol path would not have their reactiontime - reset to 0 if they heard a player before seeing her. -- Fixed: Picking up a thing by walking over it would remove it from the - blocklist and make it possible to walk into another thing near it, because - the P_BlockThingsIterator would not find anymore actors in that block for - that call. -- Tried making DThinker::Delete() private so as to enforce the "use Destroy - with thinkers" rule, but it didn't work. If the object's constructor can - throw an exception, the caller of new needs to be able to call delete in - order to remove the partially constructed object. However, I did change - the definition of DECLARE_STATELESS_ACTOR so that all actors have nothrow - constructors (since they're not allowed to use a constructor), which should - help reduce the size of a lot of the CreateObject()s. -- Split the Thinkers list into two in order to guarantee that every thinker - will have a chance to think during the same tic when it is created. -- Fixed: A thinker that destroyed itself in PostBeginPlay() would block the - ticks for all actors after it for that game tic. - -March 23, 2001 -- Fixed: Float bobbing was not properly centered around the object's "ideal" - height. -- Added A_SPosAttackUseAtkSound(). This is the same as A_SPosAttack(), except - it plays the actor's attack sound instead of being hardcoded to play - "shotguy/attack". Now changing spider/attack in SNDINFO can have an effect. - -March 22, 2001 -- Wrote a fully-functional gccinlines.h compatible with GCC 2.95. - -March 20, 2001 -- Undid: When I made float bobbing work for variable heights, I started - clamping bobbing objects to the floor/ceiling. Heretic and Hexen do not do - this, so I stopped clamping them. -- Fixed: P_BloodSplatter() should only be called for Raven's games, not Doom. -- Changed sound ID 0 to mean "no sound" instead of -1. -- Changed actor default sounds from strings to IDs so that I don't have to - worry about tracking a bunch of pointers when loading/saving games, because - this information gets saved out now. -- Fixed: Midtextures on two-sided lines are not drawn if they pass too close - to the player. What is considered "too close" was determined empirically. -- Fixed typo: Wizard's spawnhealth should be 180, not 100. -- Turned off monsters killing other monsters when the player is dead and - the game is Doom. -- Added global ACS variables. These are like world variables, except they - do not get cleared when moving to a new hub. -- Reduced the ACS stack size from 200 to 64. - -March 19, 2001 -- Added a list of needed wads to savegames. -- Moved the SAVESTRINGSIZE definition into version.h so that I can be - sure all the files that use it use the same value. One file had it - at 32, and the rest used 24, which was causing crashes when switching - levels after saving a game. -- Fixed a Doom bug: If a boss eye tried to shoot a cube at a boss target - with the same y-coordinate as itself, the game would crash with a divide - by 0 because only the difference in y-coordinates was used to determine - how long it would take for the cube to reach the target. - -March 17, 2001 -- Rewrote the save and load menus to support the new savegame features and - to also support far more files than before. -- Fixed: The patch drawers in v_draw.cpp crashed with patches that had - useless 0-length posts. -- Fixed: Sound sequence SS_CMD_END was being generated wrong. -- Fixed: Sound sequences with no current sound were archived wrong. - -March 16, 2001 -- Added screenshots to save games, ala all the Build games I've played. - Also added comments that currently just indicate the time when the game - was saved. -- Added R_RenderViewToCanvas() and rearranged r_main.cpp a little to - accomodate it. - -March 15, 2001 -- Added page up/down support for long options menus (i.e. controls menu). -- Changed console paging keys: Ctrl-Home and Ctrl-End now move to top/bottom - of console buffer, and Shift-PageUp and Shift-PageDown move up/down by - pages. -- Fixed: Trace() picked PT_ADDTHINGS based on ActorMask instead of actorMask. - The most obvious consequence of this was that hitscan weapons worked - sporadicly with the chasecam on. -- Fixed: Backpack was only giving one of each ammo type instead of one clip - of each ammo type. - -March 14, 2001 -- Added MBF "torque" to fix "The items that the monsters drop when they die - sometimes float in the air (happens very often when the monsters die in - stairs)." Although it does fix this, I think it looks goofy to see ammo - clips go careening down the stairs at the beginning of MAP01. The better - solution to this particular situation would probably be to adjust the - pickupable items' radii to accurately reflect their physical sizes, but - I fear that might make them harder to grab. Maybe if they were noclip? -- Fixed dumpmapthings command. -- Space tuning: Shrank FState from 28 to 16 bytes. -- Fixed spree and multikill messages to correctly display the killer. -- Fixed DPusher::ChangeValues() to properly convert from byte angles to - fineangles. -- Added PROP_STATE_BASE to AMaceFX3's defaults, so that it gets the right - death state. - -March 11, 2001 -- Changed bex string section handling to simulate old death messages - (without %o and %k). -- Added support for international characters to the FFont class and also - added some corresponding characters to zdoom.wad. -- Changed Heretic/Hexen font loading to use name plates like Doom fonts - instead of FONTA/FONTB markers, because templates allow for gaps in the - character set. -- Tweaked string loading so that variant-neutral strings are loaded before - loading strings from any variant of the specified language. -- Toned down the alpha on BFG and plasma projectiles. -- Changed rocket explosions back to STYLE_Translucent. -- Fixed ADEF_SkipSuper handling, though I wonder if it wouldn't be better - to rework the situations that use it, so it isn't needed at all. -- Fixed: Music for Doom 1 was wrong. -- Fixed: The cast finale was messed up. -- Fixed: The new actor members were not being serialized. -- Fixed: None of the new actor fields were being serialized. -- Fixed: The FState * serializer did not use TAutoSegIterator. -- Fixed: Dehacked monsters could be really slow, because monsters speeds - are now fixed point but weren't before. -- Fixed: M_QuitDOOM() was not getting DOSY through GStrings. -- Fixed: Stringlist did not write out enough information in the name table, - so FStringTable could not figure out which index belonged to which name. -- Fixed: String names were not loaded before using a bex string section. - -March 9, 2001 -- Added PCD_SETTHINGSPECIAL and its analagous Skull Tag special, - Thing_SetSpecial. -- Added obituary messages for the Heretic monsters. -- Added %o and %k substitutions for obituaries, ala Unreal. -- Fixed: Player obituaries were not being displayed unless it was a player - who did the killing. -- Extended SexMessage() to handle %o and %k. -- Fixed: tmfloorsector was being calculated wrong, which could cause - problems moving around in slopy areas. -- Replaced all the DivScale30() calls in WallMost() to SafeDivScale30(). - -March 8, 2001 -- Wrote support for the string tables into the game, which shrank it 28k - (but only because the text data got moved into the wad). - -March 7, 2001 -- Wrote a tool to compile localized string tables. - -March 5, 2001 -- Fixed: PTR_TraceIterator expected to be able to cross closed sectors. That - is, when it stepped across a two-sided line, it assumed that the next line - in sequence would belong to the sector it had stepped into. -- Fixed: P_SightTraverseIntercepts() needs to set up openbottom and opentop - before calling PTR_SightTraverse so that the results of P_CheckSight() - are always defined. -- Fixed: Using include in bex patches caused the DehSupp data to be freed - prematurely. -- Got the code to fully compile again with default lists. The executable is - only 104k smaller than before (I had hoped for something more dramatic), - but at least now it only takes one minute to link the release build. - -February 28, 2001 -- Changed the console command implementation so that new commands do not - require subclasses (and all the function overhead that goes with them). -- Finished building default lists for every actor. - -February 27, 2001 -- Began the tedious process of converting to actor default lists. -- Simplified the IMPLEMENT_CLASS macros to not require the parent type - because that information can be derived thanks to the DECLARE_CLASS macros. -- Removed the distinction between serializable and non-serializable DObjects - so only objects that do some specific serialization actually need - Serialize() methods. -- Fixed: Teleport_EndGame works again. -- Added WALLF_NOAUTODECALS flag to sidedefs, so certain lines will not - get impact decals (bullet holes) on them, specifically: scrolling walls. -- Increased the precision of P_InterceptVectors so that it can handle longer - lines. - -February 26, 2001 -- Added limitpainelemental cvar to control whether or not Pain Elementals - will limit their attacks based on the number of Lost Souls in the level. - -Feburary 24, 2001 -- Fixed some class serializers that did not call their superfunction. - -February 23, 2001 -- Changed P_DropItem() so that negative special values will not be stored in - the item's health field. This is primarily to support exoteric DeHackEd - patches, as it doesn't matter under normal circumstances. - -February 22, 2001 -- Removed the ClassInit class, and made TypeInfo constructors register - themselves, saving around 20k. -- Fixed: Places that use P_SpawnMissile() and then manipulate the missile - somehow now check for NULL returns. -- Fixed: AMovingCamera::Serialize() did not call its superfunction. - This is an oversight I keep making, so I added some code to DObject and - FArchive to look for this error. - -February 20, 2001 -- Fixed: Normal skies did not reflect in mirrors, and sky boxes mostly failed - to be drawn at all in mirrors. - -February 19, 2001 -- Added PCD_PUSHBYTES and PCD_PUSHxBYTES p-codes to ACS, since PCD_PUSHBYTE - was a fairly common sequence. - -February 17, 2001 -- Made G_DoLoadLevel() remove any existing HUD messages. -- Made BLOCKMAP lumps optional (sort of--the lump still needs to be there, - but it can be length 0). -- Rearranged P_SetupLevel() so that a map's behavior is loaded before - anything else (in order to make enter scripts work when a map is just - loaded). -- Changed I_RegisterSong() to not bother loading a song if -nomusic. -- Added support for these Skull Tag script types: Death, Enter, and Respawn. -- Added cl_showsprees and cl_showmultikills cvars. -- Fixed: A_Look made stealth monsters visible. -- Fixed: BlurSphere needs to be STYLE_Translucent for the pulse to be - visible. -- Fixed: StealthDemon was STYLE_Add instead of STYLE_Translucent. -- Fixed: Col2RGB8_2 needs to have cover most entries from Col2RGB8, not just - half of them.. -- Fixed: Net_SkipCommand() was still calculating the length of - DEM_SINFCHANGED based on the old semantics. -- Changed startup command processing again. Now, all commands are processed - at once, but ones considered "not safe" to be executed before everything - is set up will have their execution delayed. - -February 15, 2001 -- Changed autoexec.cfg parsing to be similar to command line parsing. - All sets are run as soon as possible, then other commands are executed - later after all the subsystems are initialized. -- Changed BEGIN_CUSTOM_CVAR/END_CUSTOM_CVAR pair to CUSTOM_CVAR. -- Changed BEGIN_STAT/END_STAT pair to ADD_STAT. -- Changed BEGIN_COMMAND/END_COMMAND pair to CCMD. -- Added detection for Windows 2000, so the sound code will default to - DirectSound under that OS instead of WinMM. - -February 12, 2001 -- Changed Die for missiles set as shootable so that they explode instead - of doing a regular death. -- Changed MF2_FLOATBOB handling to not use health or special1. (So now - it works with monsters.) -- Sorted the list of skins for a more user-friendly experience in the - player setup menu and to make R_FindSkin() faster. -- Removed all traces of COM_Parse(). -- Added support for ACS scripts that store p-codes and certain other values - in bytes instead of dwords. This can offer considerable space savings. - Also tweaked the interpreter to help keep the program counter and stack - pointer in registers. - -February 11, 2001 -- Fixed: I_ShutdownMusic() should call S_StopMusic() so that the general - sound code knows the song no longer exists. Having it free the song itself - could crash if the game lost and regained focus while quitting. - -February 8, 2001 -- Added Anubis cheat. -- Really fixed rotated flats on sloped planes. The previous fix only affected - floors at certain angles and did nothing for ceilings. - -February 5, 2001 -- Fixed: FPS meter with vid_fps was always 0. -- Fixed: Tilted floors/ceilings did not rotate properly. -- Fixed: Mirrors did not reflect slopes properly. -- Changed P_ProcessSwitchDef() so that not specifying a game name is the - same as specifying "any". -- Fixed: Typo in zdoom.animdefs prevented SW1STRTN/SW2STRTN from switching. -- Fixed: -iwad did not work with wads that included a path. -- Tweaked P_TestActivateLine() so that only actual missiles will be promoted - to activate player cross teleports. -- Did away with I_SetGUICapture(). It was too prone to error. Now the input - code checks what kind of events it should generate each time I_StartTic() - is called. -- Fixed: "Screenshot" mis-spelled as "screeshot" in controls menu. -- Fixed: The cursor in the option menus was one pixel too low. -- Fixed: Standard automap colors were all black if the game was started with - am_overlay set to true. -- Fixed a typo in P_CheckKeys() that prevented the yellow skull and cards - from being equivalent for 3-key doors. While I was at it, I rewrote the - function, although it's still not what I would consider very readable. :-( -- Removed cheat-changing Dehacked support. -- I think I've got the problems with changing a thing's MF_SHADOW bit with - Dehacked worked out now. - -February 3, 2001 -- Added "Alpha" and "Render Style" lines to Thing sections of dehacked - patches. -- Fixed: Changing a thing's doomednum with dehacked would not update the - DoomEdMap hash table, so it would have no effect. -- Fixed: Changing a thing's doomednum also changed its scale. -- Fixed: Modifying a hanging ceiling thing with dehacked would usually not - reset the height to its Doom default. (Was using sizeof(OrgHeights) - instead of NumOrgHeights.) -- Changed actor's translucency variable to alpha to reflect that it - controls the alpha value for more than just translucency. -- Centralized column drawer selection to make adding more render styles - in the future more convenient. The function is R_SetPatchStyle(). The - selection of fg2rgb and bg2rgb has also been moved out of the various - column drawers and into R_SetBlendFunc() so that they can be more - generalized. What was a translucent column drawer is now blending without - clamping, and what was an additive column drawer is now blending with - clamping. Their names have been changed to reflect this. -- Changed WallMost()'s frac bits back to 30, but now it uses SafeDivScale. - Now it should never crash there. -- Fixed: -playdemo did not like to use files in other directories. - -February 1, 2001 -- Fixed: Particles would not draw properly if a mirror was visible. -- Fixed: Viewing decals in mirrors could crash because PrepWall() only knew - about non-mirrored surfaces when it clipped the lwall values. -- Changed the number of frac bits in WallMost() when clipping a line to 28 - instead of 30 to (better) avoid possible integer overflow. -- Fixed: Hub travel would hang when visiting a previously visited level. -- Got rid of linear.nas. It was only there to try and make things better for - 486s, and as I care even less about 486s now, there didn't seem to be much - point in having it around wasting space in the executable. -- Removed RF_FORCECENTER renderflag and added a new RenderStyle actor member - that's used to specify the render style instead of renderflags. Some - styles are just aliases to other styles based on cvars (r_drawfuzz and - transsouls), and others are styles that specify drawing. I also added a - new style: STYLE_Add (additive blending) and made many of the DOOM - projectiles that I had previously made translucent use it instead. - -January 30, 2001 -- Fixed xtoviewangle generation in R_InitTextureMapping(). (It was phase - shifted 90 degrees) -- Removed R_ScaleFromGlobalAngle(), rw_distance, rw_angle1, and - rw_normalangle. - -January 27, 2001 -- Fixed: Things made fuzzy with dehacked appeared no different when - r_drawfuzz is false, because they also need to have their translucency set. -- Set the default for vid_bufferarea to 0, because large translucent areas - suddenly coming into view (such as firing the BFG) can cause a very - noticeable slowdown. I may take out the support for unbuffered output - entirely. -- Fixed: Demons in nightmare mode would end up with 0 tic chase states. -- Fixed: A_BFGSpray() was using the player's autoaim setting for finding - things to spray. - -January 19, 2001 -- Fixed some text prompts (e.g. "Do you want to quit?") so that they properly - release the input code from GUI mode. -- Fixed ABossEye::Serialize() and DBrainState::Serialize(). -- Extended Dehacked thing sound replacements so that you can use any sound - defined in a SNDINFO lump. -- Fixed Dehacked thing sound replacements -- a 0 sound index means "no sound" - and should not be treated as an offset into the sound list. -- Fixed translation table selection in R_ProjectSprite when using flags to - specify a translation. -- Fixed HeadsOnAStick to be solid. - -January 18, 2001 -- Added some invisible bridge things. -- Fixed the sky around the tunnel in E1M1. -- Fixed P_DrawSplash2 not centering splashes around their point of origin. -- Fixed assignment of codepointers in [CODEPTR] sections of bex files. - -December 24, 2000 -- Added the firstvissprite and firstdrawseg variables so that I can restrict - the vissprites and drawsegs drawn in skyboxes without changing their base - pointers, which could move when they get realloced. - -December 19, 2000 -- Fixed Ceiling_LowerByValue acting like Ceiling_RaiseInstant. -- Fixed game grabbing the mouse during startup when the IWAD dialog - is shown. -- Fixed dmflags not changing in gameplay menu. -- Fixed standard Doom colors not showing up on automap if the game was - started with am_usecustomcolors 0. -- Fixed demons moving very slowly in nightmare mode. -- Fixed dehacked patches not setting bright frames properly. -- Fixed dehacked patches that change the player sprite's name. -- Fixed dehacked patches setting a thing's fuzzy property. -- Moved lots of supplementary dehacked data into zdoom.wad so that it's - only in memory when it's needed. - -December 18, 2000 -- Fixed my sidedefs decompressor so that it works with maps that have - unused sidedefs. As a consequence of this, the ordering of sidedefs in - memory may be completely different from their ordering on disk. -- Fixed P_LoadSectors() to clamp each sector's light to the range [0,255] - instead of ignoring the high byte stored in the wad. -- Fixed rendering of shaded decals when the light amp is on. -- Fixed the generation of the shading tables in R_InitTranslationTables() to - not create values > 64. -- Gave spawnids to some things that were missing them. -- Reduced the default for vid_bufferarea to 6000. -- Reread the description of the SAL/SAR/SHL/SHR instructions. The OF - flag is undefined for shifts other than 1--not unchanged. Rewrote - the stretchers in blocks.nas to correct for this. On my Pentium II, - the OF flag is left unchanged, so I got the desired result, but - other processors can change it. :-( -- Added back triple buffering, because double buffering can be - (but is not always) significantly slower. -- Fixed up the sound code for the new FMOD 3.3 API. - -December 15, 2000 -- Fixed fourth and fifth episodes not appearing in the menu for the - extended Heretic IWAD. -- Reorganized DCajunMaster::WhatToGet() so that Reachable() is called - less often. -- Fixed multikill messages appearing for everyone and not just whoever - got it. -- Divided thinkers into thinking and non-thinking classes. By default, - a FThinkerIterator will not iterate through non-thinking classes. - Those must be specified explicitly. Made the decals non-thinking so - the think code doesn't waste any time on them. -- Fixed bots not being able to spawn in deathmatch mode if there are - not enough coop starts. -- Added support for compressed SIDEDEFS lumps. -- Made the splash bases MF_NOGRAVITY so that they stay at the surface - of BOOM deep water instead of sinking into it. -- Made splashes work as expected in sectors with the BOOM deep water - effect (and set as a water zone). -- Fixed positioning of weapon sprite. (Was one pixel too high.) -- Fixed vertical aiming on railgun being swapped. -- Fixed SUBCLASS_NS macro in a_doomdecorations.cpp. It was using radius - as the height. - -December 14, 2000 -- Fixed lines not being considered for rendering when at least one side - is sloped but the heights on each side of the line are identical at - both ends. -- Fixed physics and rendering of non-horizontal slopes. They were both - messed up because I had been subtracting b*y in the ZatPoint - calculations when I should have added it. Clipping the right edge of - non-horizontal slopes to the screen was also wrong because I was - subtracting from x instead of y for the y component of the point - intersecting the screen. -- Fixed automap being all black when am_usecustomcolors is false. -- Updated Heretic status bar for unbuffered output. -- Stopped creating the primary surface as a complex flipping surface so - that I can set colors 0 and 255 under NT. -- Made the video code better able to cope with different surface lost - conditions. -- Fixed alt-tab killing the program by listening to WM_ACTIVATEAPP and - forcing buffering (that never gets flushed to the screen) when the app - goes inactive. -- Moved the palette change to occur immediately after the page blit. -- Fixed GUI capture being lost when the demo cycle returns to the title - screen and the menu is active. -- Fixed being able to get stuck in the edges of sloped ceilings. In - PIT_CheckLine(), I was using the actor's current position instead of its - desired position to calculate the nearest point on the line. -- Fixed skyboxes so that sprites seen through multiple visplanes are visible - in all the visplanes and not just the first one. -- Made a bunch of changes to slope walking to try to make walking along the - very edge of a slope work better. This included adding a floorsector field - to AActor that records the sector that the floorz field came from. -- Changed the nearest point on line calculation in PIT_CheckLine() to use - floats, because ints aren't large enough for the intermediate calculations. -- Changed S_StopSoundID() to not stop sounds with the same priority. -- Fixed normal mace balls so that they fall down after some distance. - Apparently, in Heretic MF2_LOGRAV has precedence over MF_NOGRAVITY. -- Fixed sky boxes so they are not lit by extralight. - -December 13, 2000 -- Fixed image collections not remapping any instances of color 0 in a patch - to a different color. This was most evident in the multiplayer status bar - where the background could be seen through the player's eyes and eyebrows. -- Made normal skies work with animations found in an ANIMDEFS lump. -- Made screen melts work by forcing them to use buffered output. -- Reimplemented screenshot command. -- Changed DCanvas::Dim() to read and write four pixels at a time so that - the first frame dimmed before buffering is forced only takes about 1/4th - the time to draw as it would if single pixels were read and written. -- Made shaded and fuzzy decals count toward transparent area. -- Fixed not being able to pick up a Megasphere if your armor is already full. -- Fixed Dehacked patches not being able to clear a frame's fullbright - property. - -December 12, 2000 -- Renamed zdoom.cfg to zdoom.ini so that old versions can coexist in the - same directory as this one with less hassle. -- Reimplemented decals. -- Changed the player setup menu to use number instead of named teams. -- Fixed stack overflow caused by floating point imprecision when setting - turbo out of range. -- Fixed DGlow not working properly because lightlevels are now unsigned. -- Fixed the second DScroller constructor not setting m_vdx and m_vdy. -- Changed R_SetDefaultColormap() to look in the colormaps namespace before - looking in the global namespace. -- Fixed fade MAPINFO command not working. -- Fixed picking up the green armor showing the generic pickup message. -- Fixed massacre cheat to not let pain elementals spew out lost souls upon - their death. This also fixes massacre from crashing if the dead lost soul - was patched to actually stick around in a map. -- Separated AGibs into ARealGibs and AGibs. ARealGibs is what gets spawned - automatically when something gets crushed. AGibs is what gets spawned when - gibs are explicitly placed on a map. -- Fixed C_BackupCVars() recording the specific value of a cvar instead of - making a copy of that value. - -December 11, 2000 -- Fixed generic ceilings with texture/type changes from using model floor - sectors instead of model ceiling sectors if they had type raise to highest - ceiling or type lower to highest ceiling. -- Fixed elevators. - -December 9, 2000 -- Made old Doom level translation programmable through the use of simple - precompiled scripts that the game loads from a wad. - -December 6, 2000 -- Restored Doom's original 50-element fuzzoffset table and rewrote the - fuzz drawers to accomodate it while still using as few branches as I - thought reasonable. - -December 5, 2000 -- Got the display mostly up and running again without PTC. The new design - allows for automatic switching between buffered and unbuffered modes - based on how many transparent pixels were visible in the previous frame, - similar to Build. Unlike Build, the cutoff is always a specific amount - of pixels (cvar-controlled) instead of one-eighth the total area of the - screen. - -November 28, 2000 -- Removed the use of PTC and returned to my rudimentary DirectDraw support. -- Got rid of all the funky multiple palette handling stuff in v_palette.cpp. - Paletted textures haven't been realized yet, and if they ever are, the way - I had things set up probably isn't the way to utilize them. - -November 25, 2000 -- Fixed BossTargets automatically destroying themselves. -- Got rid of the global brain state and moved it into a thinker that gets - spawned if any BrainEyes are present on the level. -- Made PIT_RadiusAttack() calculate damage based on distance from the - thing's bounding cylinder instead of its center point. -- Made thinkers use Exec-style lists because of their simple insertion and - deletion code. -- Made R_TextureNumForName() return 1 instead of 0 for missing textures so - levels that lack textures are easier to navigate. -- Changed ADecal's doomednum to 9200 to deconflict with Hexen coop start 5. -- Created an MMX version of the color picker routine. Building a fade table - with it is about 15% faster than with the straight C version. Not exactly - a stunning speed increase, but on slower machines, the speedup should at - least be slightly noticable. - -November 24, 2000 -- #ifdef'ed out most of the FColorMatcher class. Too many colors are - visibly off when building fog with it. :-( -- Simplified the calculations in DoBlending() and created an MMX version. - -November 20, 2000 -- Implemented Scroll_Floor and Scroll_Ceiling specials for ACS scripts. -- Fixed drawing of masked midtextures that are used as special effects (i.e. - invisible platforms). -- Updated R_AddLine() to only treat as solid two-sided lines if the upper or - lower tier (whichever is appropriate) actually has a texture. -- Made doors close to the current floor height instead of whatever the floor - was at when the door started lowering. -- Rearranged P_DoCrunch() somewhat so that non-shootable things do not block - moving floors/ceilings. (Same behavior as Doom.) -- Fixed model sector changes in EV_DoFloor() and EV_DoCeiling(). -- Added mdk command to kill whatever the player is aiming at. -- Added the BOOM fix to getNextSector() so that lines that have the same - sector on both sides and are also part of the sector will not return - that sector. -- Fixed PathFollower not initializing PrevNode and CurrNode when it is - spawned. - -November 18, 2000 -- Added per-sidedef lighting control. Also added two new mapinfo fields - (vertwallshade and horizwallshade) to control the relative light of - vertical/horizontal walls with the sectors. Evenlighting is now obsolete. - -November 17, 2000 -- Added a new thing (SectorSilencer) to prevent actors from making noise in - specific sectors, in case anybody wants to use noisy actors in their - sky boxes. -- Fixed skyboxes to draw all visplanes with a skybox and not just the first - one. -- Added tilted floor physics. Actors can walk around on floors with slopes - as large as 45 degrees. For anything steeper than that, they slide down. - Monsters will treat steep floors like drop offs and avoid getting on them. - -November 16, 2000 -- Added a bForceSlide parameter to P_XYMovement() to force actors to slide - against walls when blocked, even if they don't specify MF2_SLIDE. This - allows for better operation of conveyor belts with corners. -- Fixed volcano sounds in Heretic. -- Revised carrying sectors again. Removed sc_carry_players. Each thing - checks the sectors it is standing on to see if they have any carry - properties. If they do, it adds those values to its momx and momy. - Thinkers are still used to set the carry properties, which are reset - to 0 at the beginning of each tic. In order to make sure all carry - properties have been set before any actors think, I introduced the - concept of statnums for DThinkers ala Build. DScrollers have lower statnums - than actors, so they all get executed before actors. - All carriers for a single sector are cumulative. If an actor is straddling - multiple sectors with carry properties, then those properties are averaged. - (X and Y components are averaged separately.) This should give the best - compromise between BOOM carry behavior and realistic behavior at sector - boundaries. - -November 15, 2000 -- Made A_WaterfallSound() and A_WindSound() play looped sounds. -- Fixed spelling error in SNDINFO: Heretic's waterfall sound is - waterfl, not watrfl. -- Changed P_ActivateLine() to call P_TestActivateLine() and changed - P_TestActivateLine() to allow missiles to activate regular teleporters. - This is neccessary for the Mace's Death Ball. -- Took the momz and tics setting out of P_SpawnPuff(). It is the - responsibility of the spawned puff to set these things as desired. I had - meant to do it a long time ago but forgot all about it. -- Changed deferred scripts to remember the player who triggered them. - -November 14, 2000 -- Removed the code for F*CVar::GetRealType() from c_cvars.h and moved it - into c_cvars.cpp. Virtual inline functions are not inlined and cause the - function to be generated for every source file the class is used in. -- Fixed bug with Transfer_CeilingLight special. I was or'ing CeilingLight - with SECF_ABSLIGHTING instead of CeilingFlags. - -November 11, 2000 -- Slopes don't work in mirrors. :-( -- Removed the viewangletox table and rewrote R_InitTextureMapping() to - generate xtoviewangle without it. -- Added support for per-skybox control of visibility. - -November 10, 2000 -- Implemented sky boxes. Total time: ~40 minutes. :-) Should probably test - it some more, though. - -November 9, 2000 -- Fixed a sprite clipping bug at the right edge of mirrors. - -November 8, 2000 -- Reimplemented mirrors. -- Improved positioning of masked mid textures. - -November 7, 2000 -- Increased the fractional precision of swall calculations. -- Removed all references to Doom's light tables. - -November 6, 2000 -- Moved the lighting calculation out of the main loop in R_MapTiltedPlane() - (and its assembly equivalent) into a separate function, since it can now - be linearly interpolated. This does away with the use of CMOVs in the - assembly code, so now I won't need to write a non-CMOV version of it. It's - also somewhat faster, especially in the non-assembly version. - -November 3, 2000 -- Tweaked the brown color range for console fonts to actually look brown. -- Generalized FFont::BuildTranslations() some so it's not so big. Did the - same for the FConsoleFont version. - -November 1, 2000 -- Got the tilted plane lighting working without the LUT in 320x200. Also - removed the divide from the nontilted version. - -October 31, 2000 -- Got the plane light calculation without using zlight to match the light - when using zlight (aside from the finer gradiation). Woohoo! Now to get - rid of the divide... -- Fixed creation of large (>64k) blockmaps. Also replaced the Boom version - of P_CreateBlockMap() with the MBF version. - -October 17, 2000 -- Tried to remove the use of the zlight lookup for plane mapping, but I'm - having a hard time actually duplicating its results. (Nevermind that I - should be able to derive the properly formula without difficulty...) -- Noticed distant sprites were way too jumpy. At first, I thought it was - because I was only using 8 bits of precision, so I temporarily upped it - back to 16 bits, and the problem persisted. It was caused by calculating - 1/z in R_ProjectSprite() (as a fixed 16.16) and multiplying by that. - Dividing by z instead fixed the problem. - -October 16, 2000 -- I think I have all the sector movers set to properly handle tilty areas. -- Set P_SpawnDoorCloseIn30() and P_SpawnDoorRaiseIn5Mins() to set the - thinker's m_BotDist. -- Upped the fractional bits of precision for view space coordinates to 12. - This drops the upper FOV limit to ~172.8. - -October 10, 2000 -- Fixed pillar floors using the ceiling plane for calculations. -- Changed P_Thing_Spawn() and P_Thing_Projectile() to only set MF_DROPPED - for special things, so spawned monsters can be crushed to gibs. -- Added carrymomx, carrymomy, and carrycount members to AActor. DScroller - now effects these rather than momx and momy. Slow scrollers work now, - and there's no possibility of drift caused by friction. -- Changed earthquake behavior to match Hexen's. - -October 9, 2000 -- Added Unreal teleport zoom effect controlled by the telezoom cvar. -- Reduced the renderer's precision along the (x,y) plane in view space to - 8 bits of fractional precision in order to accomodate large FOVs. - -October 7, 2000 -- Fixed lighting to not vary with different FOVs. -- Changed the initialization of finetangent to not phase shift the table, - as I did previously for finesine. - -October 6, 2000 -- Added support for panning, scaling, and rotating of tilted flats. - -October 5, 2000 -- Added FloorLight and CeilingLight members to sector_t. Changed - Transfer_FloorLight and Transfer_CeilingLight to use a thinker to copy - light levels over to these fields. -- Fixed serialization of sectors: The ceiling's xoffs was stored twice - instead of storing both xoffs and yoffs. - -October 4, 2000 -- Added back the "too far off side?" check to R_ProjectSprite(), since - sprites are now projected into a view space with a constant 90 degree FOV. - Also added a test for sprites above/below the screen. This test is - different from Lee Killough's test in Boom, which I never managed to get - working right with freelook (not that I tried very hard, either...). - -October 2, 2000 -- Added an optimization to R_AddLine(): 2-sided lines that cannot be seen - past because their openings are off-screen will be marked as solid. -- Changed the pointers in drawseg_t to ptrdiff_t so the "fun" stuff in - R_StoreWallRange for expanding the openings array and adjusting - pointers is unnecessary. -- Did the changes I talked about on September 23, except the calculations - are still associated with R_StoreWallRange() so they don't need to be - performed if the wall is entirely clipped (but they only get done once - per wall, no matter how many ranges it gets clipped to). - -September 27, 2000 -- Moved wall texture calculation (i.e. prepwall) back to floats, just to be - safe as far as integer overflow goes. - -September 26, 2000 -- All right, I've caved in. I'm now using some Build code. Build already does - everything necessary for good quality rendering, and it seems a shame to - needlessly duplicate all of Ken's work. - -September 23, 2000 -- After trying to get slopes to look nicer, I have come to the following sad - conclusion. Clipping walls into pieces and then doing all the drawing - calculations in R_StoreWallRange() is not the way to go when you have - slopes, since all fractional precision is lost at the edges of the - drawsegs, making an accurate calculation of (x,y) for slope calculations - impossible. So my plan for now is: Move most of the functionality of - R_StoreWallRange() into R_AddLine(), and leave R_StoreWallRange() around as - a function that just creates drawsegs and calls the texture mapping - routines. -- Made solidsegs a fixed-size array that is big enough. (It was not actually - growing before, so it might as well have been fixed!) - -September 21, 2000 -- Fixed C_WriteCVars() so that it doesn't delete the strings it gets - using GetGenericRep(). -- Reduced the FOV range to [5,175] to combat integer overflow with extreme - values. -- Removed excess precision from texturecolumn calculations in BlastColumn, - since it was overflowing occasionally. - -September 20, 2000 -- Removed the offset field from r_segs, as it is no longer necessary. (Walls - are now mapped based on their linedefs, not their individual segs.) -- Bumped the wall mapper down to only 4 bits of fractional precision. The - results look just as good as floats, and don't overflow so easily--a wall - 15296 units long didn't overflow. (I didn't check any longer, since walls - that long are highly unlikely to occur in any Doom map, because the - original Doom engine would render them with horrible jitter.) - - In the process, I decided to go the Build route and give walls a texture - width (the number of texels that fit across the wall). When arbitrarily - moveable walls are implemented, I think it will be more useful to maintain - a constant spread of texels across a wall than to maintain a constant - texel width. Without moveable walls, this approach just makes diagonal - walls align nicer. - -September 19, 2000 -- Swapped the meanings of the m and n vectors for the wall texture mapper - and got the correct vectors to use. Unfortunately, under most - circumstances, they generate values too big for 16.16 fixed point. - -September 18, 2000 -- Changed R_RenderBSPNode() to check against the bbox for front nodes as - well as back. Must remember to be on the lookout for drawing errors this - might cause, since the old R_CheckBBox() was too inaccurate for this. -- Tried to change wall texture mapping to use the same "magic" vectors that - I use for tilted planes, but I don't trust the vectors I derived: The - u/z vector depended on (x,y), but v/z depended only on x, just the opposite - of what it should be. -- About the adjacent wall problem, that was caused by a subsector with a - single seg viewed almost head-on. Changing R_CheckBBox() to use the same - transforms as R_AddLine() fixed the problem. -- Fixed some bad cases for my clipping code in R_AddLine(). Although I had - already used it in my prototype engine with several Build maps, I found - problems in Doom2 MAP02 that needed fixing. - -September 16, 2000 -- Changed wall projection in r_bsp.cpp to use more standard 1/z perspective - projections instead of polar coordinates and got the desired result: no - more excessively jiggly walls. Now I need to do it with the wall texture - mapper, so that wall textures don't jiggle either. One minor problem: - Adjacent walls can sometimes be one pixel apart. (Why?) - -September 13, 2000 -- Added the 181 special to slope floors/ceilings at two-sided walls. -- Fixed sporadic rendering problems with masked mid textures caused by - not ensuring sprflipvert was false. -- Added "world" as a valid ambient sound type, for consistancy with the - other types. Ambient sounds without a type specified still default to - world. -- Change P_AimLineAttack() to return a pitch instead of slope. It also - returns the actor's pitch instead of 0, if nothing to aim at was found. - Also changed it to be responsible for limiting the player's autoaim, - since this is a more logical place than in the routines that call it. - This simplified P_SpawnPlayerMissile() and P_BulletSlope(). - -September 12, 2000 -- Created a generic Trace() function. - -September 11, 2000 -- Finished the assembly plane drawer. Or, rather, the Pentium Pro and higher - version, since it uses CMOV instructions. -- Things to do: - Create a Pentium version of the plane drawer. - Create a trace function that knows about planes and replace all the - redundant code in the different traversal iterators. - Fix the bots so they understand planes. - Fix movement code so that planes are treated as planes and not as a - bunch of discrete steps. - -September 9, 2000 -- Started work on the assembly plane drawer. It's your standard subdividing - affine mapper using the overlapped FDIV trick, but with Doom-style lighting. - It's about four times faster than the previous C version, and at high enough - resolutions, it's even faster than the wall drawer. But it's not complete: - It doesn't draw incomplete subspans at the end of a span. - -September 6, 2000 -- Made some optimizations to the plane renderer. It now runs nearly 13 times - faster than before (in the debug build). Adding some inline assembly to - R_MapTiltedPlane() to convert floats to ints (instead of using (int) to - cast it) sped it up to 20% of its original time. Most of the rest was - achieved through the standard technique of splitting it up into spans and - using affine mapping for those spans. Interestingly, in the debug build, - the span-based approach is only about half the speed of the "perfect" - implementation and no faster. ("Perfect" is in quotes because there is - some error built up by using deltas between pixels instead of calculating - 1/z, u/z, and v/z anew each pixel, so it's not really perfect, but it is - very close.) Hopefully converting this to assembly will give another good - speed up. - -September 5, 2000 -- Finished preliminary renderer for planes. They draw properly, but very - slowly. (With one divide, seven multiplies, and three compiler-generated - calls to ftol per pixel, that's to be expected.) - -September 4, 2000 -- Continued work on planes. - -September 2, 2000 -- Moved R_DoorClosed() into R_AddLine() so it can use the already-calculated - ceiling/floor heights without making them global variables. - -September 1, 2000 -- Continued work on planes. - -Removed tsilheight and bsilheight from drawseg_t, since they're not - particularly useful when the floor or ceiling isn't at a constant height. - -August 30, 2000 -- Continued work on planes. - -August 29, 2000 -- Started work on adding real floor/ceiling planes. (And I do mean planes, - not just slopes.) - -August 28, 2000 -- Removed the "too far off the side?" check from R_ProjectSprite(). The fix - for wide FOVs made sprites disappear when they weren't very far away. -- Started work on extended skins by writing the spec notes in skins.cpp. - -August 24, 2000 -- Fixed memory corruption when trying to add more coop bots than there are - enough single player starts for: DoAddBot needs to check for the start, - not PlayerThink. Otherwise, when DoAddBot calls G_DoReborn, it thinks - the player is -1, because it gets the player number from the player start - for the index passed instead of using the index itself. -- Tried to prevent drawing areas behind mirrors through a mirror. If no - segs cross the line defined by the mirror, no walls will be drawn - through the mirror. However, things can still show up through the mirror. - Another issue is that gaps can be seen through the junction of two - adjoining mirrors. I can live with this; A mirror with restrictions is still - better than no mirror at all, right? -- Added proper view positioning for mirrors at any angle. - -August 23, 2000 -- Made mirrors actually flip the view. I still need to handle mirroring - around arbitrary mirrors instead of just horizontal/vertical ones. - -August 21, 2000 -- Started working on mirrors by adding semi-portals. -- Simplified P_InitAnimDefs() by getting rid of the explicit state machine - and using a separate function to parse flat and texture animations. -- Fixed sprite clipping for high FOVs. -- Changed R_DrawPlanes() to calculate texture coordinates relative to the - middle of the screen instead of the left edge of the screen. Thanks to - this change, I was able to remove the distscale variable, as it is no - longer needed. Flats now line up with walls as perfectly as they're going - to get, given the jiggly nature of wall rendering. - -August 19, 2000 -- Added support for animating switches and extended the ANIMDEFS lump to - support defining them. Converted the ANIMATED lump in zdoom.wad to an - ANIMDEFS lump, and changed the code to support multiple ANIMDEFS lumps. - -August 15, 2000 -- Added more consistant sorting for sprites in the same (x,y) location: In - the event of a tie, the sprites' tops are used for sorting. If that is - insufficient, the sort order is undefined, as before. -- Removed all references to CALC_TABLES. The game will always generate the - tables on startup now. -- Changed finecosine to a class with a single inline operator[] member. - Now cosine lookups are just as fast as sine lookups, because it's not - necessary to dereference a pointer. -- Changed ylookup, columnofs, r_dsclipbot, r_dscliptop, floorclip, - walltop, wallbottom, negonearray, screenheightarray, xtoviewangle, - ceilingclip, yslope, and spanend back into fixed-size arrays. Their - maximum possible values aren't *that* big, and the compiler can generate - more efficient code when it always knows where the array will be. -- Another optimization: The renderer no longer draws underneath the console. -- Thanks to the span renderer's improved accuracy, I have been able to do - some optimizations to bring R_MapPlane() down to five multiplies per span. - This is better than the previous eight and also better than the original - Doom's worst case of six multiplies per span. Doom also used a cache that - could give it a best case of just three multiplies per span, but I'm not - sure doing so is really worthwhile. - - As an added bonus, visplanes with the same orientation will line up with - each other no matter where they are on screen. Now I just need to fix the - wall jittering... (That may be too much to ask from the Doom engine.) - - As part of the optimizations, I: - - Removed the distscale array and replaced it with a single value. - - Renamed spanstart to spanend to reflect the fact that it now holds the - right edges of spans instead of their left edges. Also changed it to an - array of shorts. - - Made R_DrawPlanes() responsible for maintaining the texture coordinates. - Now all R_MapPlane() has to do is scale and pan them. - - Removed most of my comments from R_DrawPlanes(), since the texture - coordinates are no longer calculated in a single location. - -August 14, 2000 -- Added code in w_wad.cpp to limit the number of open wads to some preset - amount instead of keeping all the wads open at a time, in case the user - has more wads s/he wants to use than there are file handles available. -- Figured out the crash from the other day: Decals were only being cached - if their sizes were unknown; they were not recached if they had been - flushed. - -August 12, 2000 -- Added bullet holes. It crashed once in testing when I was foolishly - running fullscreen, so now I am trying to replicate the problem. The - error occured in WallSpriteColumn() where it called drawfunc() and was - an access violation. -- Implemented RF_FULLBRIGHT for wall sprites. -- Moved most virtual function bodies that were in header files out of the - headers so that the compiler wouldn't generate code for them for every - derived class that didn't supply their own versions. -- Added FDecalLib and supporting classes. - -August 10, 2000 -- Removed the MF3_CARRIED flag and replaced it with the carrysec member. The - intent of MF3_CARRIED was to prevent neighboring sectors from having an - accelerative effect on actors (an undesirable effect in at least one of - Heretic's maps), but it also prevented multiple carriers in a single sector - from having a cumulative effect on the player. -- Optimized R_DrawSprite() to initialize the sprite clipping arrays to their - largest possible range instead of initializing them to a special "not - clipped" value. This saves the time needed to set "not clipped" columns - to valid values later. It also saves the trouble of making any passes for - clipping sprites in fake floor/ceiling sectors. Also redid the clipping - loops so that VC++ produces more optimal code for them. -- Fixed R_InitTables() to produce an accurate sine table instead of a sine - table that was slightly off. Also implemented the optimization suggestion - that was in the code. -- Moved the << 10 scaling out of R_MapPlane() and into the calculation of - xscale and yscale in R_DrawPlanes() with the intent to speed up plane - mapping slightly. As a bonus, adjacent visplanes with the same texture - now match up far better than before, so it was worth it even if it didn't - give a huge speedup. - -August 8, 2000 -- Changed FHelperThread() to use MsgWaitForMultipleObjects() instead of - MsgWaitForMultipleObjectsEx(), because the latter is not available under - Windows 95. I also had to change FCDThread to not use QueueUserAPC() to - handle play finished notifications, since MsgWaitForMultipleObjects() is - not an alertable function. Fortunately, the reason I used an APC in the - first place no longer applies, because the CD_WndProc will always be - called from the helper thread's context, since the window is now being - created in the thread's context. (See my July 14 log; I don't know why - it even worked under 98.) -- Fixed FHelperThread() to call Init() from within the context of the newly- - created thread, as it should. -- Eliminated BestColor() from the game and replaced its use with - ColorMatcher. Then I found a bug in R_BuildPlayerTranslation(): RGB values - were not clipped to the range [0,255]. - -August 7, 2000 -- Wrote the FColorMatcher class to do color matching much quicker than - BestColor() with nearly the same quality. - -August 5, 2000 -- Changed the command parser in c_dispatch.cpp to something simpler, but - which also allows for using \" inside quoted strings. - -August 2, 2000 -- Implemented RF_ALPHASHADED for wall sprites. - -August 1, 2000 -- Implemented RF_REL* flags. They use the texture pegging flags of the linedef - to keep them in line with the underlying textures if the sector height - changes. - -July 29, 2000 -- Implemented RF_CLIPUPPER and RF_CLIPLOWER. RF_CLIPFULL also works for - one-sided lines, since that was the first case I did when I added the - bound wall sprites. -- Added vertical flipping for wall sprites. - -July 28, 2000 -- Made fullbright a separate field in FState instead of merging it with - the frame index. - -July 27, 2000 -- Added these fields to AActor: renderflags, picnum, and alphacolor, although - they still need to actually be implemented. Also changed the sizes of the - sprite and frame fields. -- Started work on wall sprites bound to walls (i.e. decals). Right now, it - can clip the sprite to one-sided walls. -- Fixed hotkeys not selecting appropriate item(s) in the menus. - -July 22, 2000 -- Fixed console drawing extra lines above the top of the screen. -- Added IWADPaths section to the config file to indicate a default set of - directories to search for IWADs. -- Added screenshot_quiet cvar to prevent the screenshot command from - displaying any messages when a screenshot is captured. -- Added wait and unset console commands. -- Changed C_DoKey() to execute a copy of the command bound to a key instead - of the original, because the key might rebind itself and mess up the - parser if the original command is executed. - -July 21, 2000 -- Changed FindSprite() in d_dehacked.cpp to use DWORDs for comparisons. -- Added Thing_Move and ThrustThingZ specials from Skull Tag. Also added - Skull Tag's newtid parameter to Thing_Spawn(NoFog). -- Changed blocked pillars to stay in one place until not blocked, because - they had stopped doing that, probably because of something I did for - stacked things on moving sectors. - -July 20, 2000 -- Removed the use of memmoves in R_ClipWallSegment(). VC++ generates more - optimal code using for loops, because memmove generated a function call. -- Fixed R_DrawVisSprite() not always drawing the full width of a sprite when - using r_columnmethod 1. -- Added x and y thing scaling factors. Range is 0-255, and 63 is the default. - Actual scale is (scale+1)/64. -- Changed R_DrawSprite() to clip sprites against drawsegs based on depth - and not vertical scale. Also added an extra parameter to - R_ScaleFromGlobalAngle() that receives the depth of the passed angle. -- Fixed Heretic's bloody skull transitioning to one of the player's states. -- Removed MF3_SKINNED flag and added a skin field for every actor. -- Made -host 1 not start a multiplayer game without starting the network, - because I currently have no TCP/IP stack installed on my computer. -- Fixed players being able to gib infinitely under a crusher. -- Changed crushing ceilings to behave more like Doom again: Things that were - on the floor stay on the floor, and things above the floor get pushed into - it. -- Fixed "jiggly" sprites where each columns' textures were not aligned - properly. Also fixed a bug in rt_map4cols_asm1() and rt_map4cols_asm2() - that was less obvious with the jiggly sprites: The right 2 pixels of - odd-length runs were swapped. -- Fixed bug in R_DrawColumnHorizP_C(): Mapped one pixel too many. -- Condensed R_ClipSolidWallSegment() and R_ClipPassWallSegment() into - R_ClipWallSegment(), since they were nearly identical. - -July 19, 2000 -- Fixed WritePCXfile(). I was writing two extra header bytes. -- Added assembly versions of the scaling masked block drawers and made them - support clipping the block to the screen. - -July 17, 2000 -- Added assembly versions of the non-scaling masked block drawers and made - them support clipping the block to the screen. - -July 15, 2000 -- Slightly optimized parallax sky drawing. -- Changed the controls menu to only grab the mouse when it's waiting for a - key to bind to an action. -- Changed the DirectInput keyboard reader in i_input.cpp to read the entire - keyboard state and generate events based on the differences between that - state and the previous one. Reading key transitions with GetDeviceData() - was more efficient (I assume), but it was too easy for NT to miss - transitions if CPU time got tight. -- Added an absolute parameter to I_SetGUICapture to force the setting of - GUI capturing to a specific setting instead of adjusting a counter. This - is necessary for proper recovery when catching a recoverable error, and - GUI capturing was already enabled. -- Finished CD code (at least I hope I did). Under NT, it can even loop a - track without bringing the game to a halt. (Yay!) Unfortunately, that - seems unavoidable under 9x. Oh well. - -July 14, 2000 -- Under NT, APC calls do not seem to work when there is an outstanding MCI - notification. Now FHelperThread uses an event to signal the thread to quit. -- Here's a mean difference between NT and 98 (as far as I can tell): Under - 98, each thread has its own message queue. Under NT, each thread shares - a single queue for the entire process. Now I use an APC call to restart - playback, because I don't know what context the WndProc is runnning in. - (I could check the OS version and work accordingly, but then I'd have two - methods to do the same thing, and I have no guarantee Microsoft won't - change things in a future version of Windows.) -- Changed autoexec handling so now you can run any number console scripts - automatically. -- Added a new config file format that can store information for multiple - games (i.e. Doom, Heretic, and Hexen) and keep the appropriate settings - separate. This is your basic ini-style file, rather than a list of - console commands. - -July 11, 2000 -- Removed an I_PauseMouse() call from Win32Video::SetMode() that was - preventing the game from grabbing the mouse in windowed mode at startup. - (Why was that in there?) -- Implemented localized ACS strings in the game. It's even smart enough to - detect when the user changes the regional settings! - -July 8, 2000 -- Created enhanced ACS format (ACSE) and used it to add string localization - support to the language. -- Added InterpolationSpecial (#9075) whose special is activated whenever - a PathFollower reaches an InterpolationPoint with the same special. -- Fixed stack overflows when all the patrol points in a path are so close - together that a monster can touch them all at once, by setting - MF_JUSTATTACKED when the monster reaches one point to force it to move - when SetState() is called instead of cycling to the next point. -- Renamed AWayPoint to APatrolPaint. - -July 5, 2000 -- Moved the StatusBar->Tick() call inside P_Ticker() so that the status bar - doesn't tick when the game is paused. -- Reworked the string-building p-codes in p_acs.cpp so that the string gets - built as each p-code is encountered instead of waiting until the end p-code. - This is safe because a properly-generated script will never enter a wait - state between the begin and end p-codes (which I initially thought it - might). -- Changed the meaning of some HUD message X coordinates: - [ 0.0, 1.0]: Position between left and right edge valid box locations - [-1.0, 0.0): Position between left and right edge of screen - ( 1.0, 2.0]: Same as [0.0,1.0], but center each line inside box - [-2.0, 1.0): Same as [-1.0,0.0), but center each line inside box -- Added FHUDMessageTypeOnFadeOut class. -- Added an id for use with Attach/DetachMessage(). The status bar can now - keep track of HUD messages for you and automatically deletes an old version - of a message when a newer one is attached. An id of 0 means not to track - the message. -- Added the hudmessage ACS command. -- Tried improving the accuracy of span drawing by increasing precision (i.e. - a>>6 is better than (a>>16)<<10), but it didn't seem to do any good. Still, - as a remnant of that there is now a function FixedMulDiv(a,b,c) that - calculates the fixed point result of a*b/c. Even if it's not much more - precise than FixedDiv(FixedMul(a,b),c), it's at least marginally faster, - since it does no shifts. -- Changed APathFollower::Activate() to reposition itself to the first node so - that it doesn't briefly appear at its old location when activated. -- Changed AInterpolationPoint::PostBeginPlay() to FormChain(). Now it's called - whenever something that uses the path wants to get on the path. Thus, we can - be sure that the path is actually completed when the thing wants to get on - it (at level start), which it wouldn't be if the thing was placed on the map - before all the points of the path. -- Simplified AInterpolationPoint::ScanForLoop(). - -July 4, 2000 -- Added sector actions for players landing on floor, hitting ceiling, entering - a sector, leaving a sector, hitting use inside a sector, or hitting use on - a sector's wall. The way this is exposed to level designers is the same as - Skull Tag's 9999 thing (action taken whenever the player is on the floor), - but is more flexible because it supports multiple activation types and you - can have multiple actions in a single sector. - -July 3, 2000 -- Added an effect for respawn protection. -- Added dmflags2 cvar, and consolidated weapondrop and nobfgaim into it. Also - implemented Skull Tag's respawn protection and barrel respawning into it. -- Added the FFlagCVar class. This just maps onto a FIntCVar (i.e. dmflags) - and allows a more meaningful way for the user to manipulate it than by - changing bit values directly. - -June 27, 2000 -- Removed the restriction in ChangeCamera that it can only change the - player's view to SecurityCameras. Now the proper way to activate a - moving camera is to use both ChangeCamera and Thing_Activate. ChangeCamera - sets the player's view to the camera, and Thing_Activate gets it moving. -- Changed the automap so that changes to the am_*color cvars take effect - immediately instead of the next time the automap is toggled. - -June 26, 2000 -- Got rid of cvar_t and switched to a subclassable FBaseCVar class. Now the - game actively recognizes different cvar types. - -June 14, 2000 -- The -iwad parameter can now specify a directory, as in BOOM. -- Changed -warp parameter so that using -warp x with ExMx games will use - episode 1, map x instead of episode x, map unknown. -- Added a dialog box to select the IWAD to use if the game finds more than - one. -- Switched the compression library from mini-LZO to zlib. Zlib gives better - compression, but still seems pretty fast (hard to judge on a P2-350 :-). - More importantly, zlib is not GPL (it has a BSD-style license) and I can't - have something so relatively minor as a compression library trying to attach - its license terms to the included Heretic and Hexen source, which are not - GPL. - -June 10, 2000 -- Modified FindLevelByNum() to check that a map exists before returning a - level with that number, because I have Doom 1 and 2 using the same levelnums - for different maps. - -June 7, 2000 -- Added MF3_SKINNED flag to prevent sprite changing when calling SetState(). -- Added fallingdamage and nofallingdamage MAPINFO flags. -- Added support for RIFF CDDA files. -- Added support for CD tracks as music. The cdtrack and cdid MAPINFO keys can - be used to select it for a specific map. - -June 6, 2000 -- Added the CVAR_NOINITCALL flag to allow for cvars with callbacks that - aren't called automatically during initialization. - -June 5, 2000 -- Moved all the CD-related MCI calls into a separate thread in an attempt to - avoid pauses when looping a CD track. A ring buffer is used to send - commands from the main thread to the helper thread. Unfortunately, the game - still stalls on MCI_PLAY commands. Apparently, every thread in the process - calling mciSendCommand() is halted until the play has begun. :-( Even - though the separate thread turned out to be useless, I'm keeping this - architecture, because if there is someway to avoid the pause, it probably - won't be by using the game thread for CD control. - -June 3, 2000 -- Started work on CD support after (finally) finding information about using - different CD drives hidden in the Microsoft Knowledgebase. -- Added Win32 clipboard support (copy & paste) to the console and chat mode. - -May 29, 2000 -- Implemented some spiffy interpolated path stuff: APathFollower, - AMovingCamera, and AActorMover. -- SetPlayerProperty should work in open scripts now. Needed to make sure it - was non-NULL. - -May 24, 2000 -- Did a release build under Win98, and it took ~4.25 minutes to link--about - twice as long as NT. Ack! -- Fixed improperly freeing a MUSSong after playing a MIDI. I guess - redefined virtual member functions for subclasses don't work in a - superclass's destructor. (Which makes sense, since the subclass's stuff - is already gone by the time any classes it's derived from destruct.) So - I replaced MIDISong::IsMUS() with a variable MUSSong::m_IsMUS. - -May 2, 2000 -- Seem to have fixed 3D sound crashes; listener position and velocity were - being calculated using FLOAT2FIXED instead of FIXED2FLOAT, so they were - very big and apparently overflowed the drivers. Unfortunately, the sounds - are really noisy. - -April 28, 2000 -- Revised the event system by creating a generic EV_GUI_Event type in - anticipation of creating at least a minimal windowing system. The console - now uses this system for input, which will hopefully resolve certain - console key down misses under NT. (Running 98 right now, so can't check.) - -April 27, 2000 -- Tried to add 3D sound support. Gave up after several nasty crashes that - left me with no clue what I was doing wrong. - -April 13, 2000 -- Fixed P_DamageMobj not pushing things if the source was a player. - -April 11, 2000 -- Increased map and world variable counts to the amounts Ty Halderman raised - them to in acc. -- Implemented clearinventory, checkinventory, giveinventory, and takeinventory - ACS functions. Still need to test them. -- Added support for playing a specific order of a MOD and changing the song - from ACS. - -April 10, 2000 -- Skins with sounds that precede the S_SKIN identifier now work. A side-effect - of this is that skin wads can no longer replace non-skin resources. (This is - intentional.) -- Added the sc_carry_players type to DScroller, which only carries players - (hence the name), to match Heretic and Hexen. -- Added an MF3_CARRIED flag to keep track of which actors have been pushed - by a DScroller, so that adjacent small sectors with the same scrolliness - do not have cumulative effects on a thing. -- Changed I_StartSound to let FMOD pick a free channel at the suggestion - someone e-mailed to me. It still seems to work for me, and hopefully it - will work for everyone else now, too. - -April 4, 2000 -- Why did I decide to use the MFC names for the macros RUNTIME_TYPE and - RUNTIME_CLASS? It's confusing. _TYPE: Return the TypeInfo for an existing - instance of an object. _CLASS: Return the TypeInfo for a class. -- Fixed running with -nosfx crashing the game when trying to play a MOD/MP3. - -April 3, 2000 -- Change P_Move() again so that monsters stepping down steps move down - immediately instead of falling under gravity because it looks better. -- Changed FMOD initialization sequence to be more tolerant of failure. -- Added checks for self->target to the A_FatAttack? routines. - -March 29, 2000 -- Fixed dehacked patches changing "BFG Cells/Shot". -- Fixed PickPrevWeapon to properly wrap from low to slot 0 to 9. - -March 28, 2000 -- Added the ACS internal functions spawn and spawnspot. Also added support - internal functions with optional parameters to acc. -- Fixed console not maintaining correct text color when splitting lines. - -March 27, 2000 -- Fixed ACS sound commands only supporting volumes 0 and 127 (was not - converting to float when dividing). -- Changed the status bar number drawers to round down to the closest "good" - number if the space allocated for the number's display is too small. -- Changed friendly fire so that it is a scaler like UT, and not a simple - on-off dmflag. Of course, this means it's a cvar now. -- Changed teamplay so you can still hurt yourself even if you can't hurt your - teammates. You can also telefrag teammates now in those instances where you - happen to respawn where a teammate is standing. -- Added MF3_NOTARGET flag so that Heretic bosses can be ignored if they happen - to hurt something, but Doom bosses are not. -- Added a playerinfo command to peek at the userinfo for any player in - the game. -- Fixed D_ReadUserInfoStrings() ignoring the last value in a compacted - userinfo list, causing neverswitchonpickup to not be replicated during - netgame startup. - -March 25, 2000 -- Skins with no frames get removed from the list. -- Duplicate skins get renamed to avoid conflicts. - -March 24, 2000 -- Fixed crash when running with +set developer 1. -- Fixed savegame slots drawn too high in the Doom menus. (I unwittingly - raised them at some point.) -- Turend off auto-monster respawning on skill 4 when not playing Doom. -- Fixed locked, repeatable, local doors being translated with their tags - intact (should be 0). -- Disabled highlighting of teleport lines if their activation type is - monster cross. -- Added support for Doom maps that use teleport dests in sectors with 0 tags. -- Fixed Heretic stair speeds (was 1/4 too slow, because they were going at - Doom speed). -- Fixed cursor drawn in wrong column on video modes menu. (184 is not the - same as 104.) - -March 13, 2000 -- Linking the release build now takes 2:35. :-( -- Added some more debug output to i_sound.cpp. -- Added a hack to PIT_RadiusAttack() to make the Romero head easier to hit. -- Fixed rippers doing no damage because P_CreateSecNodList() altered tmthing. -- Fixed the holdatkstate used by the powered-up phoenix rod. -- Fixed "bouncing" problems when standing still on the waggly muck in - Hexen map08. -- Discovered only players were having their z velocity reset to 0 when they - hit the floor. Fixed. Now I don't need the MF_CRASHED flag I added earlier. -- Made demon scroller more efficient. -- Fixed bunny scroller showing end screen for first 230 tics. -- Changed quit message for non-Doom games. - -March 8, 2000 -- Fixed New Game menu not displaying properly with Ultimate Doom. -- Made FImageCollection::Uninit() more complete to avoid potential problems - when turning off the crosshair. - -March 6, 2000 -- Stepping out of a floorclipping sector now adjusts the player's viewheight. -- Added the Hexen decorations. - -March 5, 2000 -- Tweaked P_CheckPosition() some more. -- Changed DThinker::DestroyAllThinkers() to call EndFrame() after each - thinker gets destroyed. - -March 2, 2000 -- Fixed console not showing top line of its buffer. -- Made some DeHackEd compatibility fixes. -- Fixed stealth Hell Knight having same doomednum as stealth Baron. -- Changed sound code to not override sounds with the same priority. Fixes - continuous ambient sounds fighting for the same channel in low channel - environments. (e.g. only one sfx channel) -- Fixed the monster morphers to transfer tids and specials to the morphed - monsters. -- Fixed ambient sounds replaying too soon (i.e. one tic after they start). -- Changed DoLoad in i_sound.cpp to use FSOUND_Sample_Upload instead of - FSOUND_Sample_Lock. Hopefully will fix sound problems on some cards. -- Fixed PatchAmmo() not checking to make sure a weapon is present before - checking its ammo member. - -March 1, 2000 -- Added dummy entries for the splash sounds to the Doom section of zdoom.wad's - SNDINFO to avoid warnings when starting Doom. -- Set BaronOfHell to proper mass. -- Modified DObject::DestroyScan (both versions) to scan each sector's - soundtarget field if a destroyed object is a PlayerPawn and clear - matching fields. -- Made jumping velocity a PlayerPawn property -- Set MF3_DONTSPLASH for chicken feathers. -- Fixed Heretic secret level exits. -- Fixed imps/lost souls slamming into things and crashing because they - ended up calling P_CheckPosition recursively. -- Fixed crashing when trying to scroll past the top of options menus that - fit entirely on the screen. -- Added Hexen cheats. (Note that not all Heretic and Hexen cheats are - implemented, because I didn't feel it was worth reimplementing their - behavior--such as Heretic's gimme or Hexen's version of the same). - -February 29, 2000 -- Redid cheat parser and added Heretic cheats. -- Added heretic.wad, heretic1.wad, and hexen.wad to the list of iwads - searched for. -- Fixed to properly detect and use shareware heretic1.wad. -- Fixed morphed player making normal player pain sounds. -- Fixed P_MorphPlayer not setting camera and morphTics. -- Fixed activated monsters not triggering SPAC_MCROSS lines, because - AActor::Activate was clearing everything in flags2. (Used ! instead of ~). -- Fixed mapthings being spawned with wrong angles due to round-off error. -- FWeaponSlot::AddWeapon no longer adds a single weapon to a slot more than - once. Fixes nextweap not working with fast monsters. They were added once - at init time, and again when fast monsters were set. -- Added LeavingIntermission state for intermission to avoid trying to draw - after the graphics have been freed. -- Loaded BigFont for Doom game. - -February 27, 2000 -- Implemented infinite ammo option for Heretic weapons. -- Set particle fountain heights back to 0 (missed them during conversion). -- Added option to flip player view in player setup menu between front - and back. -- Fixed stepping onto a thing and getting stuck inside another thing - above you. -- Fixed crash when starting with -loadgame. -- Fixed moving into walls when on top of things (such as when killing - something next to a wall with gauntlets and being pulled forward on top - of the dead thing before it clears MF_SOLID). -- Fixed text aligned improperly at high resolutions on the intermission's - "now entering" screen. -- Fixed missiles climbing up steps before exploding (very noticeable with - mace balls.) -- Gave AMaceFX1 MF_DROPOFF. (It was missing it.) -- Fixed P_HitFloor to return true/false based on the floor's liquid status. -- Fixed Heretic weapons drawn too high at high resolutions with st_scale 0. -- Fixed mummies not attacking you. Forgot to uncomment some stuff I had - commented out for checking the collision detection. - -February 25, 2000 -- Did a release build and timed it as ~70 seconds spent linking. -- Disabled messagemode when confirmation messages are up. -- Switched to the console font to display key names in the controls menu, - because the Raven fonts don't have enough characters for all the keys. - -February 24, 2000 -- Gave the Heretic imp chunks masses of 5 so they make small splashes. -- Made the color for locked doors default to green. -- Added more items to the controls menu and made it scrollable. -- Doom, Heretic, and Hexen now use separate config files. - -February 23, 2000 -- Added support for a TERRAIN lump. - -February 22, 2000 -- Added translations for Heretic's skullrod rain, lifegem, and player cape. - -February 21, 2000 -- Tried making the chasecam use the player's viewheight to smoothly move - itself up when the player stepped up, but it looked odd to see the player - jump up while the camera moved smoothly, so I took it out. -- Wrote 4 different iterators for P_ChangeSector that should be able to - properly handle moving things standing on top of other things. Such - situations were completely ignored before. -- Removed limit on intercepts. - -February 20, 2000 -- Fixed setting skill from menu when fullscreen console is active. - -February 18, 2000 -- Fixed annoying screen "jiggling" when jumping up onto ledges. -- Fixed Plat_DownByValue handling. -- Fixed a lockup problem in situations where stairs are triggered and then - retriggered, but from the opposite end. - -February 15, 2000 -- Fixed the display of the player's name on spynext/prev. -- Added the FHUDMessage class and change C_MidPrint to use it. This class - can be used to display text at any location on-screen and is patterned - after Half-Life's text messages. Additional effects besides plain on and - off are accomplished by subclassing it. -- Reimplemented Doom's status bar. -- Fixed instances when bots were not respawning themselves. -- Fixed bodyque so that it is actually used again. -- Fixed an (obscure?) error when a thinker destroys the next thinker - scheduled for thinking while it thinks. The problem can be reproduced - with the following steps using a deathmatch map with only one start, one - player, and weapondrop on: 1. You spawn. 2. You spawn a bot without moving. - 3. The bot telefrags you. 4. You drop a clip, then the bot picks it up - when it moves and destroys it. 5. Because DThinker::RunThinkers() had cached - the next thinker, it doesn't know the clip was destroyed and tries to make - it think. The clip thinks, and relinks itself into the world, and causes a - whole bunch of problems. - -February 14, 2000 -- Tried separating the different game directories into static libraries to - see if that would reduce the link time. It didn't seem to have made - much of a difference, and some classes weren't being linked into the - executable, so I went back to linking everything together into a single - executable without any intermediate libraries. The different game - directories stayed, though, since I like the organization. - -February 13, 2000 -- Made the Heretic and Hexen scrollers accurately mimic their counterparts - from those games. -- Added more endgame types, including a customizable picture viewer. - -February 12, 2000 -- Also in the way of movement code, I fixed a problem that caused the - player's view to jump drastically when jumping onto another thing, - because I was using the player's z in two places where it should have - been the other thing's z. -- After much juggling, I believe I finally have the movement code fixed so - that floating monsters won't float themselves into other monsters. Testing - was done in Heretic E1M1 by summoning a bunch of mummies and wizards. - I also cleaned up P_FakeZMovement() so that it's much leaner. I was able - to find the following causes of the problem: 1. When monsters went up - steps, they didn't check to make sure there was nothing in the way above - them. 2. When P_CheckOnmobj() found a monster's move to be blocked, the - monster could still float down inside the head of its blocker, causing - the blocking monster to get stuck until it floated up again. - -February 9, 2000 -- Added fixeddiv, fixedmul, setgravity, and setaircontrol commands to acs. -- Added floorclipping from Hexen/Heretic. -- Moved the turn180 code over to P_PlayerThink. - -February 2, 2000 -- Got ZDoom to link against ELK and run. While trying to get a setup that - worked properly with the Scheme reset procedure, I accidentally got a - setup where Scheme code was calling the main loop every tic. The result - was that it had to garbage collect a lot. And then I realized that - Scheme is not the way to go for implementing a real-time game scripting - language. If the GC has to work a lot when we only call a single - procedure 35 times a second, think how horrible it would be if 100 - different procedures were called that often (for 100 different actors). - Ugh. I think I'll do something with ACS instead. - -February 1, 2000 -- Got ELK (Extension Language Kit) to compile into a usable library. The - idea was to use it as a simple way for the end user to create new action - functions for actors. - -January 1, 2000 -- Fixed P_FakeZMovement so it knows about underwater movement. -- Added a workaround for the imps continuosly performing their crashstate. - When P_ZMovement sets the crashstate, it also sets a MF_CRASHED flag, so - it knows not to do it again. I can't see why Heretic doesn't exhibit - the same problem. :-( - -December 30, 1999 -- Changed the changemap command to return harmlessly if called without an - instigator. -- Tried adding the Heretic Imp, and it worked, kind of; the imps continuosly - spew chunks of flesh when they hit the ground after death. - -December 29, 1999 -- Changed mobjinfo handling so they get set by a class' SetDefaults() method. - This means that every actor needs to have its own class, but they get more - control over their defaults depending on the game mode, and it also - condenses code some, because they only need to list the values different - from the actor defaults. - -December 17, 1999 -- Added the dumpmapthings command. -- Removed the testgibs cvar. -- Added angle and speed parameters to security cameras, so now they can turn - like Duke's. Also add pitch parameter. -- Made ambient sounds recognize activate and deactivate. -- In DCajunMaster::FakeFire(), the maximum distance a bot will trace is now - SAFE_SELF_MISDIST. Since they will fire if the trace would have hit - something past this, there's no sense in wasting time going further if the - trace hasn't hit anything by the time it gets that far away. - -December 16, 1999 -- Set the default for fullscreen under Win32 back to 1. Not sure why I had - it at 0. -- Made mobjinfos dynamic so they don't need to be in one monolithic info.cpp. - Now they can be in the file with their related code, and subclassing AActor - is useful. - -December 12, 1999 -- Changed DPolyAction::m_Dist to be signed. I'm not sure why I changed it - to unsigned, because there are lots of places where it gets checked if - it's less than zero. -- Added sorting of the cvars that get sent during netgame arbitration. In - the old system, they were sent out in whatever order they were registered, - which was compiler-dependant. This worked fine when playing against a copy - built with the same compiler, but broke when trying to play a version - built with a different compiler. Thus, Windows, Linux, and OSF/1 versions - could not play each other. - -December 11, 1999 -- Made some changes to get the code to compile and run without - unaligned accesses on Alpha processors. ZDoom will now compile and run - under OSF/1. It appears to play ordinary Doom levels properly. Levels - with Hexen features will crash it, and savegames seem to have problems, - too. (Some of which, I think, is attributable to using LZO for - compression. It apparently isn't 64-bit friendly.) - -November 30, 1999 -- Made the Scroll_Texture_Both and TranslucentLine specials dynamic. - That is, they can be used from inside the game after the level is - loaded. - -November 26, 1999 -- Added the hud_scale cvar to control scaling of the fullscreen hud. -- Removed targettic from AActor, because it's no longer meaningful (and - hasn't been for quite a while). Replaced it with dummies in the - AActor serializer so that savegame compatibility can be retained. -- Fixed a next thinker determination problem in DThinker::RunThinkers(). - A thinker can destroy itself during its RunThink(), so the next thinker - to run needs to be determined before we run the current thinker, not - after. -- Added calls to I_FinishUpdateNoBlit() and I_BeginUpdate() at - strategic locations in R_RenderPlayerView(). - -November 25, 1999 -- Removed the outer layer of compression from savegames. Since all - the snapshots in the savegame are already compressed, compressing - them again will do little good. -- Fixed archiving of defered ACS scripts. There were actually two - problems here. One, if there were any, it would get stuck in an - infinite loop. Two, they were being saved in a format different - from what they were being loaded as. -- Fixed the operation of FLZOMemFile's serializer so that it restores - to the state it was archived in (e.g. an imploded file stored in - m_ImplodedBuffer, as opposed to an uncompressed file stored in - m_BUffer). - -November 24, 1999 -- Fixed BOOM generalized locked doors so that the open/close type will - actually close. - -November 23, 1999 -- Machines that use -join will now select their port automatically. -- Here's another problem the bots helped me catch: DThinker:: - DestroyAllThinkers() was still deleting each thinker. The correct - approach now is to call Destroy() on each thinker, and then call - DObject::EndFrame() to perform the actual deletion. -- Those bots are great for stress testing. Thanks to them, I was able to - find and correct a problem with my Destroy() implementation: DThinker - also needs to implement Destroy() to get the object out of the thinker - list. Otherwise, you can do things like destroy an actor, then have - the thinking code move it before it gets removed from the thinker list, - which leaves the block and/or sector pointers messed up and causes all - sorts of odd and nasty behavior. - -October 27, 1999 -- Added my own fixes for -host and -join to handle aborts better. -- Tweaked underwater friction in P_GetFriction(). -- Added Jeffrey Cuenco's fixes for the -host and -join parameters. - -October 26, 1999 -- Added a check in A_Scream() to make sure the actor has a death sound. -- Fixed demo sync problems caused by playing demos back with a cl_pufftype - different from what they were recorded with. I have no idea why it should - make a difference, since the puffs are supposed to be inert, but spawning - them and keeping them hidden when cl_pufftype is 1 fixes the problem. -- Implemented stale pointer cleaning. If you want to remove an object now, - call its Destroy() method instead of deleting it. The object will be - placed in a queue. At the end of the frame, all objects will be scanned - for references to objects in the queue, and any references that are found - will be NULLed. Then the objects will be deleted. - - Any objects that have (DObject *) (or some subclass of DObject) members - need to be implemented with the IMPLEMENT_POINTY_SERIAL or - IMPLEMENT_POINTY_CLASS macros. See the implementation of AActor in - p_mobj.cpp for an example of their use. - -September 15, 1999 -- Fixed a nasty bug when saving big games. FArchive used pointers into the - m_ObjectMap array when mapping objects to indices. Now it uses indices - all the way through so that they will still remain valid if m_ObjectMap - has to grow. -- Reduced the rate at which arbitration packets are sent out to 4 times per - second. Combined with their reduced size, this will hopefully solve - problems I understand some people were having using 1.18 with DoomServ. - (Based on the assumption that their problems were caused by the lack of - bandwidth offered by modems.) -- Reduced the size of netgame arbitration packets by removing the names of - the cvars the values represent. When playing with the same copy of the - executable, these are implicit in the order in which the values appear in - the stream, so storing the name of the key is essentially redundant. -- Pulled out the original 1.18a source and fixed loading of savegames before - a new game is begun. The problem was in DCajunMaster::RemoveAllBots(), - where the consoleplayer's camera is restored to the console player if - viewing a bot. Before the game begins, the camera field is NULL. Also - changed caught recoverable errors so that bots are removed and level - snapshots are deleted. - -September 12, 1999 -- Made actor movement floating-point based. I had already done the fp time - system (to an extent) before I had to pull out the 1.18 source and fix - bugs. Gravity seems to be inversely proportional to the ticrate. Can't - figure out why. - -Okay, I was stupid. I accidentally erased the version of the log file that -contained my changes from 1.18 to 1.18a. - -September 5, 1999 -- The +moveup and +movedown commands finally do something. -- Added a fly cheat. -- Changed the handling of action commands so that they increment and - decrement numbers in an array instead of setting and clearing bits in an - int. -- Fixed R_AlignFlat(). Apparently, I broke it sometime (or it never worked - properly in the first place). Also made it simpler. - -September 3, 1999 -- Added localambientsound and activatorsound ACS commands. -- Fixed the DLevelScript constructor to place new scripts in the array of - RunningScripts (if not ACS_ExecuteAlways). - -September 2, 1999 -- Replaced the error abort in FArchive.cpp when an attempt is made to store - a DObject, with a NULL object save instead. There are conditions that will - come up during regular gameplay that will result in dangling pointers. - Example: A lost soul attacks a monster. The attacked monster then sets its - target field to the lost soul. Something kills the lost soul, and it - destroys itself. The other monster is now left with a pointer to nowhere. - The only reasonable solution to this problem I can think of is to collect - a list of all objects that want to destroy themselves. At the end of each - tic, they get destroyed, *and* all thinkers are searched for pointers to - those object. If any pointers are found, they get NULLed. - -September 1, 1999 -- Significantly cleaned up G_ParseMapInfo(). It's easier to follow what it's - doing, and now it's smart enough to give you an error message if you make - a mistake in your MAPINFO lump instead of hanging. -- Added a flat warping effect similar to Quake's liquid textures. - -August 31, 1999 -- Added swimmable water. The forcewater cvar can be used to make all BOOM - deep water swimmable. -- C_MidPrint() now adds messages to the console as well as the middle of - the screen. -- Fixed the "you need a key" messages to only appear for the player who - tries to activate the locked door. -- Restored the code for storing server cvars in savegames. - -August 30, 1999 -- Made items respawn the default for -deathmatch. -- After creating some huge log files, I believe I finally fixed the demo - and network sync with bots. The bots use P_CheckPosition() to determine - if a spot is free. This function can also causes items to be picked up. - Thus, on the arbitrator's machine, bots pick up items before they do - on the other machines, and they can also pick up items that they decide - not to touch (and so don't pick them up on other machines). To fix, I - made a wrapper for the bots that turns off their MF_PICKUP flag before - performing the check and then sets it back after the check is made. -- Fixed the loading of the "straight-ahead" status bar graphics for skins. - The corresponding patches weren't being moved into the skin's namespace. - -August 28, 1999 -- Fixed the bot's FakeFire() so that it doesn't do damage to anything - that it might hit, by adding another thing instead of using MT_HEADSHOT. -- Another cause of the sync problem is in P_CheckSight(). If a monster - is invisible, a random number is used to determine if the thing - should be reported as not visible. -- Found part of the problem with bot sync: P_SpawnPlayerMissile() used - a special routine when a bot wanted to fire. The routine aimed at - whatever the bot's enemy was set at. Only on the arbitrary (and not - during demo playback), can enemy ever be non-NULL. Changed this to - just disable autoaim for bots. Should be effectively the same. -- Changed P_SpawnPlayerMissile() so that if a player has autoaim set to - 0, it doesn't try adjusting the angle left and right. -- Fixed projectile velocities by using vector math. Doom calculated the - velocity on a 2D plane, then added in the vertical component. -- Fixed the bot's vertical aiming. -- Rewrote the parts of the Cajun that used degrees to use binary angles - instead. -- Changed the Cajun's TurnToAng() function to let it turn both left and - right, depending on which results in a shorter distance. - -August 27, 1999 -- Added the Cajun 0.97 code. Needs work yet: Bot looks up/down too far, - always turns right, demos don't stay in sync, and networking with bots - probably doesn't work either. - -August 14, 1999 -- Cleaned out a lot of the no longer relevant docs from the docs dir that - came from the Linux source. -- Changed IdentifyVersion() so that it can look for an IWAD in one of four - directories: current, program, $DOOMWADDIR, and $HOME. (The same search - order used by BOOM.) - -August 13, 1999 -- Fixed the DLevelScript constructor. (Using local vars with the same names - as member vars still isn't a good thing. :-) - -August 12, 1999 -- Made the vertical calculations in the renderer subpixel-accurate. This - negates some of the work I did on the 10th. A pity. Something also needs to - be done about the walls--they are horribly jittery. -- Moved the calculation of the initial texture coordinate out of the column - drawers and into their callers. Besides making the column drawers simpler, - it also allows for some optimizations of masked texture/sprite rendering, - where the initial coordinate is almost always 0. -- Added variable field of view. Use the fov command to change it. - -August 11, 1999 -- When using -nosound, MIDAS's dsmClearBufferFloat() sometimes tries to free - memory that isn't allocated (apparently already freed). To compensate, I - avoid initializing MIDAS when -nosound or -nosfx is specified instead of - setting MIDAS's nosound option. -- Found that when a stat display is active when the game is quit, a pure - virtual function call was being made. Unfortunately, when I tried to track - it down, the problem stopped. -- Optimized away two multiplies I had added to R_MapPlane() earlier. Oddly, - performance seems unaffected. - -August 10, 1999 -- Did some performance tuning for the yslope movement loop in - R_SetupFrame(). memmove() is not an intrinsic function, so I wrote some - loops that VC++ optimizes nicely. (Other optimizing compilers should be - able to do the job just as well.) I also split up the loop that calculates - the yslope values into three cases so that the body of the loop can be as - simple as possible. - It probably wasn't worth the effort... -- Changed P_SpawnPlayer to set player_t::attacker to NULL so that invalid - attackers aren't carried over across levels, which can cause the problems - if you try to save your game before being attacked on the new level. -- Finished reimplementing hub travel. The new code in FArchive worked - properly on the first try. (Yay!) - -August 7, 1999 -- Added some code to FArchive that distinguishes player-controlled actors - (but not voodoo dolls) so that the stored actors can be overridden by - explicitly spawned ones when travelling between levels in a hud. Untested, - but I think it should work. -- For curiosity's sake, a did a comparison of savegame sizes with 1.17c and - test9. The map tested was map29, just after spawning. The 1.17c snapshot - for the level was 99542 bytes uncompressed (20659 compressed). The test9 - snapshot was 111786 bytes uncompressed (14824 compressed). So the new - archive format is bigger but compresses better, which I'll consider to be - a good thing, because snapshots are normally stored in memory in their - compressed state. - -August 6, 1999 -- Changed the tag changing behavior of W_CacheLumpNum(). Before, it would - always change a block's tag. Now, it will only change the tag if the new - one is less than the previous. This way, a block can be promoted from - PU_CACHE to PU_STATIC, but not the other way around. This was the cause - of intermittant bugs that were visible in st_new.cpp. ST_New uses some - graphics that also serve as sprite graphics. When those sprites are drawn, - their tags were changed to PU_CACHE, and with enough spawning, their data - could be overwritten, and st_new would never know. - -August 5, 1999 -- Changed M_Drawer() to use V_BreakLines() to split lines for prompt - messages, because it wasn't working right. Also fixed a bug in - V_BreakLines() so that now it will recognize blank lines. -- Added nofilecompression cvar to prevent compression of LZO files. -- Fixed savegames. -- Made the thinkers the first thing that gets serialized in a level - snapshot (instead of sectors and walls), because a sector's specialdata - fields might cause a thinker to be serialized. But when - DThinker::SerializeAll is called, it destroys all existing thinkers, - including the ones that were created while reading the sectors. Storing - the thinkers before anything else avoids this. -- Moved the serialization of player data into G_SerializeLevel. The bots - use pointers to some actors in their player_s, so we need to keep the - player data in the same context as the actors they reference. (i.e. They - need to go in the level snapshot instead of outside of them as was done - previously.) -- Also fixed a bug with FLZOFile::Write. If a large write request was made, - it would only double the amount of memory to store the file in, which - might not have been enough. Now it doubles it until the buffer is large - enough to store the new data. -- Figured out what was wrong with storing FLZOMemFiles in an archive: I was - forgetting to add the 8 bytes of header to the size of the block to write - out. - -August 4, 1999 -- Hubs somewhat work. Level data is properly stored on exit and loaded when - reentering the level. I just need to fix the player spawning. Savegames - are another matter. I seem to be having trouble embedding an FLZOMemFile - inside an archive. It appears to be getting saved properly, but trying to - decompress it crashes. -- Got the FArchive class working. It is now able to write out objects and - reconstruct them, filling in pointers as appropriate. Cool. - -August 3, 1999 -- Instead of relying on Z_FreeTags to remove all thinkers when a new level - is started, I now call DThinker::RemoveAllThinkers, so that any subclasses - of DThinker that have custom destructors can have them called. Currently, - the only one with a destructor is DACSThinker, which destroys all the - active scripts. -- Created a thinker responsible for running the ACS scripts, because it - makes serializing them easier. -- Moved some of the mobj handling functions into the AActor class. Most - notably, P_SpawnMobj and P_RemoveMobj are gone. Use the new and delete - operators instead. AActor has a constructor that takes the same parameters - as P_SpawnMobj, so converting old code to use new is easy enough. - -August 1, 1999 -- Changed the code in i_music.cpp to use a simple class hierarchy for - defining music formats and how to play them. This removed some (messy) - switch statements and the nameless unions (that I guess mingw32 chokes on). -- Rearranged the atterm functions so that I_ShutdownMusic() is called before - I_ShutdownSound() to prevent crashes when a MOD is playing at shutdown time. - -July 31, 1999 -- Removed the lists of active ceilings and plats, mainly because it makes - the serialization code simpler, but also because the same result can be - achieved (albeit more slowly) by searching the list of thinkers for each - instance of DCeiling or DPlat. -- Made the active buttons (button_t) and earthquakes (quake_t) subclasses of - DThinker (DActiveButton and DEarthquake, respectively). -- Created a TThinkerIterator template class to manage iterating through the - list of active thinkers. - -July 28, 1999 -- Ever since I added the extra network commands (like say) around a year ago, - I have been executing them the instant they arrived from the network. I - have only now figured out that this is wrong. They should be stored and - only executed when the gametic they arrived with is executed. With commands - like say, the timing is unimportant. With other commands, like changemap, - it can be vital that all machines execute the command on the same gametic. -- Made some changes to the ticcmd building code in d_net.cpp to compensate - for ticdups greater than 1 by dividing pitch and yaw deltas by the ticdup - value so that the end result of moving the mouse a certain distance is the - same as if a ticdup of 1 were used. This is also necessary to make bots - work with ticdups other than 1. -- Fixed the crazy bot turning. The cause? I was calculating angle deltas for - the bots' ticcmds based on their yaw when their think routine was called. - This is incorrect, because that yaw can incorrectly reflect the state of - the current gametic, because maketic can be more than 1 tic in advance of - gametic. The correct way is to take the bot's current yaw, add all the - deltas that haven't been played yet to it, and using the resulting yaw as - the base for the current maketic's yaw delta. In some ways, this is exactly - what you would also do for player prediction. - -July 26, 1999 -- Removed G_InitPlayer(). It was never used and just called G_PlayerReborn(). - -July 23, 1999 -- Spent too many hours tracking down a circular #include dependancy I had - inadvertantly created yesterday. - -July 22, 1999 -- Did some work with the savegame serialization. - -July 21, 1999 -- Changed P_SpawnMapThing() to silently reject mapthings of type -1. -- Fixed kill command to restore player's MF_SHOOTABLE flag before doing the - damage. -- Changed bot observer mode to use noclip instead of noblockmap. Otherwise, - the player is unable to ride lifts while observing. -- The bot code spawns bglobal->body1 and bglobal->body2 actors to help with - aiming. The original code would carry pointers to these over between - levels, even though all actors disappear when travelling between levels. - Not a good thing. Fixed. - -July 20, 1999 -- Changed the network code so that now bots work in network games. Their - ticcmds are sent along with the arbitrator's to the other players in the - game. This way, only one computer is responsible for doing the bot - thinking. (BOOM's random number generator was extremely useful for this.) - Unfortunately, the bots seem to have trouble aiming with more than one - live player and often end up spinning wildly. -- Made weapondrop a server variable. -- Fixed bots so that they can be recorded in savegames. There were two things - preventing it before: 1) The bots ticcmd was being written directly to the - player structure instead of netcmds, so the demo writer never had a change - to see the bot's commands. 2) There are several places in the bot code that - fiddle with the bot's angle directly. The quick (and acceptable) fix was to - keep the fiddling in, but use the new angle to calculate the bot's ucmd.yaw - value and set its angle back to what it was before being fiddled. -- Delayed the call to I_InitMusic() in I_InitSound() until after MIDAS - is initialized. Also removed the call to I_ShutdownMusic() in I_InitSound(), - since I_ShutdownMusic() will be called automatically at exit. - -July 19, 1999 -- Made the network arbitrator changeable, so that if player 1 leaves the game, - someone will still be able to control things. -- Moved the call to I_FinishClockCalibration() before D_CheckNetGame(). - -July 17, 1999 -- Changed several references in am_map.cpp from plr to the console player's - camera. Also added colors for inter- and intra-level teleporters. -- Changed P_PlayerThink() so that the game doesn't die if you try to add more - bots than there are coop starts (in a coop game, of course). -- Fixed removebots command so that if you are looking through a bot's eyes - when you remove the bots, your vision is restored to your own head. - -July 16, 1999 -- Fixed the rotation of player arrows in the rotating automap in coop games. -- Changed wipe_initBurn to allocate FIREHEIGHT+5 rows. Apparently FIREHEIGHT+4 - wasn't enough. -- Fixed SN_StartSequence so that it doesn't attempt to play nonassigned - sequences. I had broken it when I separated part of the code into a - separate TwiddleSeqNum function. - -July 14, 1999 -- Moved the "VectorCopy (RailEnd, end);" line in P_RailAttack() in front of - the for loop. - -July 12, 1999 -- Enclosed the bot thinking code inside if (bglobal->botnum) {} blocks so that - no bot thinking occurs when there are no bots. Also defaulted bot_calcnodes - to 0. If a bot is spawned, and there are no nodes loaded, bot_calcnodes - will automatically be set to 1. Now the bots don't eat up any time if none - are present in the world. -- Added a generic FStat class. Different statistics can be measured and - reported by subclassing it. The console command "stat" provides the - interface to select which stats to view. -- You cannot directly call a constructor from inside another constructor to - help do initialization. Instead, you end up with a temporary object that - is destroyed immediately when the second constructor finishes. This was - causing crashes with wall scrollers, because their constructor was calling - the constructor for more general scrollers. - -July 11, 1999 -- Changed the bot code so that it doesn't go into multiplayer mode until - after a bot is spawned, so the game won't be in coop mode when players have - no intention of playing with bots. - -July 10, 1999 -- Changed ReplaceString() function to properly handle the case where the - string being replaced is the same as the new one. -- Cajun bot now runs under ZDoom, although some things aren't perfect (such - as skin color). - -July 9, 1999 -- Received the Cajun bot source. Started moving it to ZDoom. - -July 7, 1999 -- The sky can now scale horizontally as well as vertically (when using - r_stretchsky), so its aspect ratio is preserved when stretched. -- Redid the Wu line drawer to support 64 intensity levels and wrote a version - that used the translucency tables so that it could look good in overlayed - mode. Also cleaned up the code to make it more readable (to me anyway) and - removed the use of short ints. - -July 6, 1999 -- Restored Cmd_Exec to its 1.17c version. I'm not sure what I was trying to - accomplish with the changes I made, but they broke it under certain - situations. - -July 5, 1999 -- Added Heretic's anti-aliased Wu line drawer to the automap. -- Delayed the execution of cvar callbacks until the video subsystem has been - initialized. - -July 3, 1999 -- ST_Start() now sets the status bar dimensions. -- Fixed some of the DCanvas member functions that used width and height as - parameters. Having two function parameters with the same names as two - member variables is not a good thing... - -July 2, 1999 -- Converted screen_t to class DCanvas and moved a bunch of the screen drawing - functions into it. This let me catch a few instances where the screen - dimensions were being referenced before they were initialized. -- Found this code in i_input.cpp under WM_ACTIVATE: - if (Fullscreen) - { - extern int DisplayWidth, DisplayHeight, DisplayBits; - I_SetMode (DisplayWidth, DisplayHeight, DisplayBits); - } - Apparently, I added it when converting the video code to OpenPTC and - completely forgot about it. I still don't remember adding it. This was - probably the cause of problems starting up in fullscreen mode with some - chipsets. (Banshee and Voodoo3 are the two I know about.) -- Changed refreshDisplay() in i_video.cpp to not do anything during startup. -- Added a WM_GETMINMAXINFO handler to prevent the user from shrinking the - window smaller than the surface. - -July 1, 1999 -- Added default aliases for idclip and idspispopd that point to noclip. -- Further fleshed out the DConsoleCommand and DConsoleAlias classes. Commands - and aliases are now hashed in the same array, and aliases get saved to the - config file again. -- Changed PIT_ChangeSector() to not call P_DamageMobj() if the crushing damage - is 0. This is the way it used to be in Doom (so I hear; I don't feel like - checking), but not in Hexen. -- Added a check to P_SpawnMapThing() to not bother checking mapthings of - type 0. Apparently, some maps in Final Doom actually have these. -- DActor.movecount needs to be signed; there are places in p_enemy.cpp that - test if it is < 0. I had changed it to unsigned. Making it signed again - fixed the problem in test1 that made monsters act as if they had "bad - vision." -- Changed P_AimLineAttack to calculate the top and bottom slope based on a - spherical 64 degree vertical field of view instead of just adding some - values to the center slope. With things that look straight ahead, the - result is the same as the original Doom. With things that don't, the result - is more correct than before. Also fixes the BFG problem in test1. - -June 30, 1999 -- Did some cleanup. Released 118test1. - -June 29, 1999 -- Made the actor's pitch member variable represent an angle between -ANGLE_90 - and +ANGLE_90 exclusive instead of a screen sliding amount. Now the same - representation can be used for the current engine and any possible future - ones that offer true 6 DOF. This also makes the relationship between pitch - and all the slope values Doom uses for collision detection more apparent-- - just take the tangent of the pitch instead of multiplying it by a magic - number. - -June 23, 1999 -- Moved the multiplication by lightscalexmul out of the inner wall - rendering loop so that it can be stepped instead, saving all the time I - used to be spending multiplying. -- Finished converting all cvars to a cvar_t class. Use the macros defined in - c_cvars.h for declaring them. One (possibly significant for mods) change - is that callback functions are now always called when a cvar is created. - If callback depends on something else being initialized to work properly - (see snd_mididevice in i_music.cpp), either make sure the callback only - does its thing once the stuff it needs has been initialized, or don't - create any instances of the cvar until the initialization has finished. - -June 17, 1999 -- Added flat scaling, manual panning, and rotation. -- Fixed a problem with PCD_UNARYMINUS. It was popping the result off the - stack, so any calculations that used it were wrong and could potentially - crash. - -June 15, 1999 -- Got the program to compile and link as C++ code. Some structs have been - transformed into classes, and savegames are disabled until I can get - serialization to work. - -June 11, 1999 -- Found an interesting problem with EV_StartLightFlickering. It takes two - parameters describing the light levels, but they were completely ignored. - Fixed. - -June 7, 1999 -- Changed R_FakeFlat to optionally not care about whether or not the camera's - current sector is also in a sector referenced by a Transfer_Heights special. -- Changed all numspechit loops in the code to test against (numspechit > 0) - instead of (numspechit--). -- Changed Thing_Projectile(Gravity) so that it should work properly with any - non-missiles. -- Fixed a bug in P_NightmareRespawn caused by mindlessly cutting-and-pasting - from P_SpawnMapThing. -- Found a bug in the translation of BOOM generalized floors/ceilings. One - of my bit shifts was off by one. Also fixed the code in zwadconv. -- Changed the boss brain's height back to 16 for compatibility with - Strain MAP20. -- A few days ago, I tried sorting the edges of polyobjects at runtime to - support concave polys at any rotation. It didn't work. I'll probably - have to use a span buffer. -- Stuck in my new span drawer. I actually wrote it about two months ago. - Now it's finally going to be in a release version of ZDoom. It's about - 6 fps (~23%) faster at 1024x768. Also removed ds_colshift (because it is - no longer used) and the unrolled span drawer in linear.nas. -- The turbo cvar's callback wasn't being called when it was set. Fixed. -- This a huge gap between log entries. Sorry, but I've been too lazy to - write anything here. - -March 15, 1999 -- Added support for custom ambient sound attenuations. This is an optional - floating point value that follows the point keyword. -- For 1.17, I had changed the sound volumes in s_sound.c to floats - *except* for the ambient sounds which were still being treated as byte - values between 0-255, so they would always play at full volume. Fixed. - -March 14, 1999 -- Discovered a savegame bug: An mobj's translation table was being saved - improperly and could point to invalid memory on reload. Fixed. -- Added another dmflag, DF_RESPAWN_SUPER, to cause invulnerability and - invisibility to respawn. No room in menu, so you have to set it by hand. -- Added an alwaysapplydmflags cvar that can be used to cause dmflags that - normally only affect deathmatch to apply to single player and coop games - as well. -- Changed P_Thing_Spawn() so that it can spawns things anywhere and not - just at map spots. (Useful for making it look like a monster was carrying - an item.) -- Added support for MBF's sky texture transfer linedefs. Also added support - for Hexen's Sky2 sector special. -- In r_plane.c, spanstop was never used anywhere. Removed it. - -March 10, 1999 -- Made the network code "better." htons is used in the appropriate places, - and the port a packet is sent from is used to determine which node sent - a packet (so now I can test more than two-player games on my machine). -- Added an event-driven timer routine. Instead of busy waiting for a new tic, - I can wait on an event and give other processes some CPU time. This makes - two-player games on one machine run much more smoothly on Windows 95/98. - (It was already smooth for the foreground player on NT.) - -March 8, 1999 -- Fixed a problem with R_DrawPSprite. It was leaving vis->translucency unset, - which could produce odd results depending on the contents of the stack. - -March 7, 1999 -- Discovered a big problem with my linked list of ceiling_t's implementation. - Fixed. - -March 6, 1999 -- Added two new screen wipes: burn and crossfade. -- The mid-screen message gets cleared out on level load now. -- Stopped using the zone heap to store level snapshots. -- Enhanced the stealth monsters so that they will take advantage of all - translucency levels available. -- Fixed the damage for A_MonsterRail. I guess DOOM doesn't copy the damage - amount out of the mobjinfo when an mobj is spawned. -- Added a check to the fullscreen HUD to prevent it from going outside the - array of armor pictures if the AC was above 2. -- The DeHackEd code was setting the Blue AC for max soulsphere health. Fixed. -- Tried out Rick Clark's toxplant.wad and discovered a bug with the - particles: They were colored by whichever sector was drawn last and not - the sector they were in. Fixed. -- Pulled the old info.h from the 1.17a source so I could get things in a - working state to put up a fixed DeHackEd version for the Ground Zero TC. - -March 4, 1999 -- Word of advice: When you have 2847 states and 399 mobjinfos (from Hexen) - to reformat, don't try to do it all by hand. I was smart enough to use a - program to convert all the states into the multigen format, but I thought - I could handle the mobjs myself. Ha ha ha ha ha ha! After a few hours, - my arm was aching, and I had only done about one fourth of the mobjinfos. - Then I wrote a program to convert the ones from Hexen's info.c into - multigen format, and all I had to do was drag them to the correct place - with my mouse. Much easier, and much less strenuous. (Also much less - error-prone.) - - For comparison, Heretic has 161 mobjinfos and 1205 states. - Doom 2 has a mere 137 mobjinfos and 967 states. - -March 3, 1999 -- Had a change of plans about how I want to implement multiple games in a - single executable. All the data in info.c and info.h will be moved to an - external data file whose format is based on that used by multigen (the - tool id used to generate info.c). The list of spawnable things will also - be moved out of p_things.c and into this file. - - This means that everything I did in info.h on March 1 was wasted. Oh well. - -March 1, 1999 -- Pasted labels for the Heretic and Hexen things into info.c. Had to - shuffle a few of them around: - - --- Things renamed --- - MT_MISC* -> MT_DMISC* (if Doom) - MT_HMISC* (if Heretic) - MT_XMISC* (if Hexen) - MT_BARREL -> MT_HBARREL (for Heretic) - MT_DBARREL (for Doom) - MT_TFOG -> MT_DTFOG, MT_HTFOG, MT_XTFOG - created a new MT_TFOG elsewhere. the others should be - copied on top of it as appropriate. - MT_HEAD -> renamed Doom's to MT_CACODEMON - MT_KNIGHT -> renamed Doom's to MT_HELLKNIGHT - MT_FIREBOMB -> MT_HFIREBOMB, MT_XFIREBOMB - - --- Things moved into common Heretic/Hexen section --- - MT_ARTIFLY - MT_ARTIINVULNERABILITY -> ditto - MT_ARTIEGG -> ditto - MT_EGGFX -> ditto - MT_ARTISUPERHEAL -> ditto - MT_ARTITELEPORT -> ditto - MT_SPLASH - MT_SPLASHBASE - MT_LAVASPLASH - MT_LAVASMAKE - MT_SLUDGECHUNK - MT_SLUDGESPLASH - MT_BLOODSPLATTER - MT_BLOODYSKULL - MT_MNTRFX1 - MT_MNTRFX2 (deathsound is sfx_phohit in Heretic, no sound in Hexen) - MT_MNTRFX3 - MT_SOUNDWATERFALL - - --- Things moved to global section --- - MT_BLOOD (note that Hexen's blood has mass 5, not 100. was #38) - MT_TELEPORTMAN (was #41) - MT_PLAYER (was #0) Hexen's is name differently, so it didn't move. - - (Hexen things renamed) - MT_MINOTAUR -> MT_MAULATOR - MT_SOUNDWIND -> MT_XSOUNDWIND - -- Added a pulsating effect for the invisibility powerup that slowly - "pulses" it in and out of visibility, but never going below 25%, so it's - never totally invisible. -- Spent a few hours with the DOSDoom translucency code. I think the - greenness of it is probably more the fault of DOOM's limited palette, - particularly after comparing the 25% translucency table from before - with 25% translucency now. Very low levels of translucency with one - of the colors being dark are still too green, though. - -February 28, 1999 -- Added DOSDoom 0.65's translucency code. I'm not sure if it was really - worth it, though. I tried Allegro's RGB table code to speed up the - generation of the translucency table, but it didn't seem to produce - very satisfactory results, so I use BestColor to find palette colors - to use. The results are satisfactory, but they seem a bit too green. -- Delayed gathering of data on a sprite's patches (width, topoffset, and - offset) until it is needed (either when the level is precached, or when - the sprite is first seen). Game startup is a great deal quicker without - any noticable performance hit elsewhere. Cool. - -February 27, 1999 -- Note: Hexen's friction is roughly equivalent to a Sector_SetFriction of - 171 (ends up as 0xf909, Hexen uses 0xf900). Player movement thrust should - be halved at this level. Changed the calculation of sector->movefactor - accordingly. (With the BOOM code, player thrust was nearly one fourth - normal with that level of friction.) -- Discovered that MBF's code to affect monsters with friction doesn't - work without the change it made to how mobjs are linked into the blockmap. - -February 24, 1999 -- Stopped using stdio in w_wad.c. -- Had left some calls to W_Profile in W_InitMultipleFiles(). Removed. - -February 21, 1999 -- Added support for real looping sounds, because Herian 2 used so many of - them, and the old method sounded pretty bad with them. -- Found a problem with sliding polyobj doors: If, when they try to close, - they can't move anywhere from their open position, they would move - slightly further open and leave a gap when they managed to close. Fixed. -- Added support for auto-loading of skins if they're in a skins directory - in the same directory as the executable. -- Added support for C-style formatting codes to ACS print statements. -- Fixed a problem where, when a player turns into a pile of bloody gibs - (from e.g. a crushing ceiling), they would assume their standing position. - This is because the gibs are a different sprite, and I wasn't letting - player mobjs change their sprite. -- Fixed ceilings so that they stop making noise when they get put in stasis. -- PIT_ChangeSector() can spawn particle blood now. -- Fixed R_DrawSplash2() so that it doesn't draw all the particles to the - left of the impact point. -- Added an A_MonsterRail function so monsters can shoot a railgun too. -- Fixed the railgun sound when you're not the one shooting it. My algorithm - for finding the closest point on the line was wrong and still should - remnants from when I was calculating the distance from the line. -- Fixed some player bobbing problems. - -February 20, 1999 -- Changed sparks to play with static attenuation. -- Found out why pickup messages would sometimes seemingly print several - times for a single item. Some maps have several of the same item on top - of each other so that a player can get more than they would normally - without even realizing it. I get around this by disallowing two identical - pickup messages from being printed back-to-back in a single tic. -- Fixed transsouls. I wasn't calling its callback at initialization, so it - wouldn't take effect until the next time it was changed at the console. -- Recompiled PTC with DDFLIP_WAIT enabled. I had accidentally left it off - from my testing run on January 8. -- Dug up the DirectDraw code from 1.12 and used it to add DirectDraw support - back into the game. Now even people who can't get PTC to work should be - able to use it. - One interesting thing I noticed is that IDirectDrawSurface's Blt method - is horribly slow for blitting between system and video memory. I tried it, - thinking it would be optimized, but it wasn't even close. -- Added the A_Die, A_Detonate, and A_Mushroom routines from MBF. -- Removed the screens array and replaced it with a single variable named - (oddly enough) screen. -- Added a V_SetBlend() to F_StartFinale() to get rid of any palette flashes - that might have been on screen (such as after finishing E1M8). -- Discovered the real reason why the brain shooter wasn't working. DOOM - doesn't explode noclip missiles when they go above the ceiling or below - the floor; it just adjusts their positions. Hexen doesn't have that check - for noclip, so it will explode/remove it. I guess I didn't check MAP30 - after adding Hexen's z-checking. - -February 19, 1999 -- Finally got around to fixing V_DrawPatchFlipped(). Wow, that was easy. I - wonder why I was having so much trouble with it the last time I touched it - many months ago. -- Changed the item pickup sounds to play with a NULL entity for the local - player (like before), but still play on CHAN_ITEM for other players. -- Fixed the problem of monster names not being drawn in the cast finale: I - was still xoring each character with 0x80 to make it red under the old - text system. -- Changed the keyboard code so that the keypad isn't translated into number - keys in full console mode with the menu active. -- Fixed the Read This! sequence of menus in Ultimate Doom. When it's - finished, it's supposed to re-enable the skull and empty the stack. -- Fixed a problem with raise doors. In Doom, you can close them prematurely - by activating them again. I had the right idea: - if (GET_SPAC(line->flags) == SPAC_PUSH) - but it should have been - if (GET_SPAC(line->flags) != SPAC_PUSH) - -February 18, 1999 -- Release 1.17 again, hopefully this time for good. -- Fixed some problems that were already found with 1.17: - * The cubes spawned by the boss on DOOM2/MAP30 would be in the ceiling and - disappear right away. (All I can say is that it worked before; I don't - know why it stopped.) - * Because of my quick hack for voodoo doll obituaries, getting killed by - the world would crash. - * Open scripts above 255 wouldn't properly restart when the level - reloaded because the game thought they were still running. - -February 17, 1999 -- Made a final "final" compile of 1.17. -- Removed the hack that could transform normal exits into Teleport_NewMaps - during the level translation process. -- Realized I had forgotten to do the following, so I did them: - * Support the MF_TRANSLATION bits for DeHackEd patches that use them. - * Add a TRANSLUC75 .bex mnemonic for symmetry. - * Add a defaultmap entry for MAPINFO lumps. - * Make r_columnmethod 1 the default. - * Add a neverswitchonpickup cvar. - * Extralight and fullbright need to be ignored in foggy areas. - -February 16, 1999 -- Did a final compile for 1.17 under both DOS and Win32. This will be the - first release where I release versions for both operating systems - simultaneously. Eventually, I'll have to abandon DOS if I want to keep - progressing, but for now it's nice to be able to do this. -- Removed the limit on the number of sound sequences that can be loaded. - There's still a limit on the number of translation slots, and I think - it's good to leave it that way. -- Added a menu stack, so that pressing escape to back out of a menu only - backs up through the menus the user has visited. -- Tried adding some code to djgpp/i_video.cpp so that it could write - directly to VGA memory. Then I found out that regular VGA mode 13h - doesn't support page flipping, so I took it out. - -February 14, 1999 -- Added some #ifdef's to i_sound.c so that it works equally well with - both VC++ and DJGPP. -- Added support for Hexen's parallax skies. I'm not sure why I thought - the front one was a normal masked texture. (It uses color 0 to indicate - transparency instead.) I also removed R_DrawMaskedSky() and added the - restriction that both sky textures must be the same height. - -February 13, 1999 -- Tried boomedit.wad, and it turns out I was wrong about ML_PASSUSE. Non- - use lines could and did eat uses. Changed it so that only SPAC_USE - does now. -- Moved the functionality of the ML_PASSUSE flag into a new activation - type: SPAC_USETHROUGH. The flag was only applicable to use activation - lines, so it seemed sensely to have it wasting a bit for all other - types. Now I have a free linedef flag if I need it. -- Removed the hack to allow players to move if they were currently stuck. - With it in, polyobjects could push players through walls, which is even - more undesirable. Since I'm now using MBF's momentum code (which, like - Doom's but not Boom's, allows players to build up enough momentum to - escape from walls if they're trivially inside them), I don't really need - the "fix" anyway. -- Added a revert argument to the ChangeCamera special that causes the camera - to move back inside the player's head if he moves. -- Added a SetPlayerProperty special. -- Created things for the particle fountains and sparks. -- Created sound sequences for the appropriate Doom sector movements. I also - had to expand on the language as defined by Hexen a bit. -- Replaced my floor waggling code with Hexen's, so now it's right. -- Added three new level flags: - * evenlighting - * noautosequences - * forcenoskystretch -- Added a progress indicator for the translucency table building process. - -February 12, 1999 -- Removed the round-robin assignment of virtual channels in i_sound.c. Since - we're no longer letting MIDAS pick the sfx channels for us, this is - pointless (and potentially hazard-prone if many sounds are being played - very frequently). -- Added support for sound sequences, so now the polyobjects aren't silent - when they move. - -February 11, 1999 -- Added "support" for 0-length sounds. (Meaning they get replaced by dsempty - instead of crashing when malloc tries to alloc 4 gigs for them.) - -February 10, 1999 -- Adopted Hexen's script parsing code (sc_man.c). It lends itself toward - much cleaner script handling code. [no association with ACS] - -February 7, 1999 -- Incorporated MBF's friction code in place of BOOM's. (Incidentally, I also - discovered that I had left out some of BOOM's. No matter now.) -- Added a hack to P_XYMovement() so that players will still be able to move - if they get stuck inside a line or another thing. - -February 6, 1999 -- Played some deathmatch with gothicdm2 and noticed two problems: - * On rare occasions, I would spawn and be stuck. - * Weapon pickup messages would sometimes print more than once. (Was I - picking them up more than once when I ran over them? Not sure.) - * Once when the other player died, he didn't turn into a corpse. -- Added the ability to activate scripts by picking up items. -- Changed the polyobject functions called from p_lnspec.c so that they take - individual paremeters rather than a byte array of args. -- Demos can now be played from disk without first loading them with the - -file parameter. -- The automap will now follow the console player's camera rather than the - console player himself. -- Added a notice warning that a demo will go out of sync if it was recorded - with a different version of the game. -- Added playdemo and timedemo commands. -- Added colored text support and different message levels. This was - planned for several months, and now I've finally written the code for it. - -February 4, 1999 -- Modified C_AddNotifyString() so that it properly supports lines - ending with '\r' or '\n' instead of assuming that they all end with - '\n' and starting each on a new line. -- Fixed a problem with PTR_CameraTraverse() that could position the - chasecam inside a two-sided wall. -- Removed the handling for ANIM_RANDOM from wi_stuff.c since it wasn't - used anywhere. - -February 3, 1999 -- Removed the use of screens[1] in wi_stuff.c by allocating a new screen - just big enough to hold the background image and then blitting that to - the screen each frame. -- Changed the demo loop a bit so that it will automatically try to play - any number of demos beginning with DEMO1 and continuing up in sequence. - (Of course, since I removed the ability to play old-style demos, it's - only of use for wads that provide their own demos.) -- Did a bunch of miscellaneous cleanup from the Hexen source. -- Fixed player extreme deaths playing "*gibbed" instead of "*xdeath1". -- When a player leaves a network game, their body is now removed. -- Removed the check against monsters crossing secret lines. They *can* - cross secret lines and activate them, they just don't use/push secret - lines. - -January 31, 1999 -- Linedef type 134 was being improperly translated to require a blue key. - It should have been red. -- Fixed a round-off problem in P_ZMovement() that could cause the player's - landing sound to play when the player wasn't falling fast enough. For - some reason, converting the floating point minimum momz to an it was - subtracting one (even though it was already integral). So, for normal - gravity, it was comparing the player's z momentum against -524287 - instead of -524288. -- Fixed a crash bug in M_LoadDefaults() when migrating from a pre-1.14 - config file without any binding for F5. - -January 30, 1999 -- Added blood, gunshot, and grenade particle effects. - -January 29, 1999 -- Fixed up the handling of .bex thing mnemonics and added the names for - the second set of flags (albeit, not many are actually implemented). - -January 27, 1999 -- Created a new traversal function for the rail gun. -- Finally figured out why so many lost souls spawned by pain elementals - were getting stuck. I was spawning two lost souls in the same spot (where - there should have been only one). Oops. -- Found a case where the sight-checking code could trace a line that missed - its ending cell and continue off the edge of the map, thus crashing the - game. Made some changes to compensate: When the ending column or row is - reached, mapxstep or mapystep will be set to 0 to prevent it from - traversing any further in that direction. -- Using spynext and spyprev now briefly display the name of the player - you switched to. - -January 25, 1999 -- Added armor and keys to the fullscreen HUD. - -January 24, 1999 -- Imported Hexen's z-checking code in place of my own. Hopefully it will - work better. Also added a few other Hexenism while I was at it, like - bouncy objects. -- Sped up wipes on tall screens so they should be about the same speed as - one 200 pixels tall. -- Fixed plats so that they properly rebound off the ceiling. I was - checking if the plat's crush field was non-zero when I should have been - checking that it wasn't -1. -- Made some more improvements to D_ErrorLoop(). -- Fixed some problems with the lighting with different r_detail values. -- columnofs[] was being constructed wrong for horizontally stretched - detailed modes (too far to the right). Fixed. -- Added some unrolled drawers based off the Hexen source for 320x200 - and 320x240. I don't expect anything but a 386/486 to benefit from them. - -January 23, 1999 -- Fixed the light-amp so that it doesn't turn off colored lighting. -- Added positional sounds. Now that I have them, I also removed the - temporary switch mobj that was used to provide a place to play the - switch sounds. -- During demo playback, the chase command will now let you switch to - and from the chasecam, so chasedemo isn't really needed unless you want - to start the demo in chasecam mode. -- Added the player's score to the fullscreen HUD in deathmatch. -- Fixed the spynext/spyprev commands so that they properly update the - status bar when you switch to another player. Also fixed it so the - camera doesn't stay in a dead player's corpse if you're not watching - the person who recorded the demo. -- Fixed the alignment of the scores display at high resolutions and also - added a level countdown timer if timelimit is in effect (ala Lithium). -- Removed Hexen's solution for getting the player to produce more than - one sound and adopted Quake's: each mobj has 8 channels with some of - them set aside for predefined uses. - -January 21, 1999 -- Stopped using MIDAS's auto effect channels and started using the ones - calculated by the game's own sound code. This seems to have fixed all - the previous problems with sounds cutting out prematurely. - -January 20, 1999 -- Adjusted the WEAPONTOP #define in p_pspr.c so that the player sprites - will meet the bottom of the screen at higher resolutions instead of - leaving a gap. - -January 17, 1999 -- Added a chasedemo cvar. When it's true, the demo is played back in - chasecam mode. -- Fixed a memory leak when the game had to generate a translucency table. - (out was not being freed.) -- Stopped using Z_Malloc() for temporary compression buffers and switched - to the libc functions. (libc has a bigger memory pool.) -- Fixed problem with skins that used sounds in the IWAD. -- Fixed a bug that could crash the game if something went amiss during - the startup process but after setjmp() was called. Now D_ErrorLoop() - explicitly enters the GS_FULLCONSOLE state before doing anything else. - -January 16, 1999 -- Added particle fountain effects with the following colors: - red, green, blue, yellow, purple, black, and white -- Got rocket trails into a state I think looks nice. -- Improved the particle system further by making the particle sizes - adjustable, letting particles fade out over time, and moving all of - the particle thinking out of the renderer and into the play simulation. -- Imported some of Hexen's sound code to limit the total number of same - sounds playing and also to allow players to make more than one noise - at a time. -- Fixed the operation of FloorAndCeiling_(Raise/Lower)ByValue. Contrary - to what the Hexen specs state, they do not multiply their height - argument by 8. - -January 14, 1999 -- Switched to the p_sight.c of Hexen. This is benefitial for two reasons: - 1. It knows about polyobjects. - 2. It doesn't traverse the BSP tree. Yes, I know this means it's slower, - but it also means I can use it with a portal engine, which doesn't - even have a BSP tree. -- Moved the locating of the polyobj spots out of PO_Init() and into - P_SpawnMapThing(). - -January 12, 1999 -- Added the polyobject stuff from Hexen. -- Copied Hexen's earthquake viewshifting code into R_SetupFrame(). -- Changed P_Thing_Projectile() so that it can play a thing's sight sound - and sets some other values properly. -- Added a delay to open and deferred scripts of one second after seeing - that the Hexen code does it (and it's a good way of avoiding delays in - open scripts to get past the screen wipe). -- Fixed a bug in P_StartScript() that would cause it to crash if someone - tried to start a nonexistant script. - -January 11, 1999 -- Added an r_drawflat cvar to draw segs as flat colors instead of textures. -- In R_StoreWallRange(), changed the lighting calculation so that lines will - have the same amount of light no matter what their orientation if a - non-black fade is applied to them (otherwise the fog effect looks dumb). - -January 10, 1999 -- Added a rocket trail using the particle system. -- Added a particle system. -- Added support for PWADs like Gothic DM2 that used a hack to get sprites-in- - a-pwad with regular Doom by making some changes to W_MergeLumps(). - -January 9, 1999 -- Added a progress-meter to the console. -- Made a fix (submitted by John Cole) to the height-checking code so that if a - player stands on another player, the player on the bottom doesn't get - stuck. -- Changed P_GiveWeapon() to check if there are any graphics for a weapon. If - there aren't, then it won't give the player the weapon. Also changed "give - weapons" to call P_GiveWeapon() so that it won't give the player a weapon - that doesn't exist in the current iwad (like the ssg with doom.wad). -- Fixed psprites so that the muzzleflash has the same visibility (fuzz) flags - as the weapon sprite. -- Added the setting of YourColor when am_usecustomcolors is 0. It should have - been there a long time ago. - -January 8, 1999 -- Since the new column rendering code is essentially done (unless I decide - that it's actually worth the hassle to draw columns in bunches of 8--4 was - enough bother), I took some timings with the new and old routines. These - are for looking directly at a wall, the worst-case scenario for the old - routines. I tried disabling vbl wait, but DirectDraw always seems to do it - even when I don't tell it to, so the numbers for the low resolutions aren't - very informative since they cap at the screen's refresh rate. Rates from - two Build games under similar conditions are also given for comparison. - This is on my PII-350: - - mode old new Blood Duke3D - 320x200 70 70 212 324 - 320x240 60 60 174 274 - 400x300 60 60 120 212 - 480x360 60 60 91 147 - 512x384 40 60 80 128 - 640x400 32 64 60 96 - 640x480 27 57 51 83 - 800x600 27 42 34 51 - 960x720 12 27 24 37 - 1024x768 8 21 21 33 - 1152x864 9 19 17 23 - 1280x1024 6 15 12 17 - - It looks like the new routines are about twice as fast as the old ones. It - also looks like I can draw walls faster than Blood but not Duke. For - rendering a real scene that consists of more than just a single wall, ZDoom - beats them both, since a single wall is the best-case scenario for Build. - Frame rates in ZDoom seem to be pretty even now, which is nice since the - old routines were significantly slower at drawing walls than anything else. - -- Put in a check in R_RenderSegLoop1() and R_RenderSegLoop2() for NULL - walllights. Right after starting a level, it seems walllights isn't - getting set properly, but it appears to work fine afterward. Hmm... -- Got back to school and had a chance to try the new routines on my machine - and, wow! I can now do a steady 35 fps at 800x600. 960x720 hovers around - 27 fps. 1024x768 is around 20 fps. Not bad. - -January 6, 1999 -- Wrote a better assembly version of R_DrawColumnHoriz() with no partial - register stalls and presumably no AGI stalls on regular Pentiums. If it's - faster than the C code, it's not much faster. (At least it's not - significantly slower, anyway.) - -January 5, 1999 -- Tried an assembly version of R_DrawColumnHoriz(). It was actually - slower than the C code by about 8 fps. Probably because of all the - partial register stalls. I guess they really can kill performance. - Stupid Intel processors. :-) -- Continued work on the optimized column drawers so that they have - analogues of all the regular column drawers and can also be used to - draw sprites. On this P-II 300, 720x480 runs at a pretty consistent - 35 fps. 864x480 isn't much worse, either. (Yeah, weird modes, I know.) - 800x600 runs at about 25 fps. Not bad, considering that this is all - C code. -- Added R_StretchColumn() and R_DrawTlatedLucentColumn() functions. - -January 4, 1999 -- Recompiled everything with __fastcall as the default parameter-passing - convention. Is it better? Not sure, but the exe did shrink by 11k. I - think the framerate may have risen by 0.5 fps, too. - -January 3, 1999 -- Added support for using RIFF WAVEs as sound lumps. - -January 2, 1999 -- Fixed EV_StopPlat() so that it doesn't get stuck looping on the first - plat because I had forgot to advance scan inside the while loop. -- Fixed P_LineAttack() so that it can still spawn bullet puffs on the - floor or ceiling even if the bullet path never hits a line within range. - -January 1, 1999 -- Worked some more with the cache optimized column drawers. Now they work - for masked walls and skies as well as solid walls. - -December 28, 1998 -- Added some C code to do "interleaved column drawing" (the method that - proved to be the fastest in my test two days ago). Wall drawing is about - twice as fast at 1024x768. Lower resolutions show less, but still - measurable, improvement. Hopefully converting it to assembly will - result in a further speedup. -- Fixed problem with monsters continuing to attack their target even after - they had killed it. -- Adjusted the minimum distance between the chasecam and a wall/floor/ - ceiling. - -December 27, 1998 -- Added a chasecam. Use the chase command to turn it on and off. - -December 26, 1998 -- Ran a simple texturing test drawing a 128-pixel tall texture into a - 1024x768 block using several different methods. The methods and - average times for one pass of each method are: - > drawing it directly to the buffer: 94.18 ms - > drawing four columns into a temp array and then merging - them into the buffer: 24.456 ms - > interleaving four columns into a temp array and then copying them - into the buffer as a series of longword writes: 24.338 ms - > interleaving four columns into a temp array and then colormapping them - as they get copied to the buffer: 21.71 ms - - using variations of the fourth method for translated columns: - > translating during the copy to the buffer: 21.684 ms - > translation during the mapping to the temp array: 24.29 ms - - using variations of the third and fourth method for translucent columns: - > colormapping into the temp array: 31.75 ms - > colormapping during the copy to the buffer: 30.42 ms - - using variations of the third and fourth method for translated, - translucent columns: - > translating into the temp array: 32.58 ms - > translating during the copy to the buffer: 31.45 ms - - These tests give me an idea of what I need to do to improve the game's - renderer. - -- Added an extension to normal exit lines during translation so that if a - map has a MAPINFO entry, then it gets translated to Teleport_NewMap - instead of Exit_Normal. The levelnum is (tag % 1000) and position is - (tag / 1000). Thus, you can create hubs with regular Doom maps provided - that they have MAPINFO entries. -- The video drivers on this machine at home have a weird bug. Apparently at - random, when the palette is changed, random colors will have their blue - values set to the opposite of what they should be. I can't see any way to - work around it. Ah well. It's not my machine anyway... :-) -- Fixed togglemap so that it does nothing if the player isn't in a level. - (Could have crashed if used on the title screen.) - -December 25, 1998 -- Added Static_Init special (190) to handle BOOM-like control linedefs for - setting sector properties (at the moment: color, fog, damage, and gravity) - at level load time. - -December 24, 1998 -- Fixed a problem in G_CheckSpot() where a corpse would get moved vertically - to check for collisions in a spawn spot, but then it wouldn't be restored - to its original height after the check. -- Fixed a problem I had introduced in P_LookForPlayers(). I had been - operating under the assumption that whenever it was called, actor->target - was NULL. Thus, I thought that assigning actor->goal to actor->target was - safe even if actor->goal was NULL. This isn't the case. In coop, this - function can be called with a valid actor->target. Setting it to NULL can - then play havoc with P_NewChaseDir(), which can get called immediately - afterward in A_Chase(). Now it only sets actor->target to actor->goal if - actor->target is already NULL. - -December 22, 1998 -- Fixed the thing spawners so that they don't spawn monsters if the - nomonsters dmflag is set. -- Changed the imp fireball to be 75% opaque. -- Replaced the am_key?color cvars with am_lockedcolor. Finally rewrote the - code in the automap that uses it, too. (Up until now, it was still using - the old Doom specials to determine locked doors, even though they all get - converted into Door_LockedRaise before the automap ever sees the line. - -December 21, 1998 -- Added ML_BLOCKEVERYTHING linedef flag. - -December 20, 1998 -- Added support for a ChangeCamera special. - -December 19, 1998 -- Added a fire effect to the player setup menu (which I had wanted to do - ever since I saw Unreal). - -December 15, 1998 -- Went through commands.txt, and documented new commands and cvars (and also - some that I had missed from 1.14). I still count 4 undocumented commands, - but I can't figure out what they are even when I compare it with the output - of the cmdlist command. -- Fixed problem with V_BreakLines() not properly setting the pixels width - of lines that were broken. -- Fixed problem of Plat_UpByValue not going back down. - -December 13, 1998 -- Fixed problem of lighting in hires modes lightening too quickly. -- Added outsidefog key to MAPINFO lump parser to set the fog color for - any sectors with sky ceilings. -- Removed the translucency on health bonuses. -- Improved some of the error-handling code in the midi playback routines, - and the problem seems to have gone away. - -December 12, 1998 -- Started experiencing a strange midi problem: it works with the debug - build but not the release. -- Added soundlist command to display the assignment of sounds. -- Added dynamic sound linking so that sounds that refer to the same lump - use the same copy of the sound. Added the soundlinks command to view - the linking of sounds. -- Fixed problem of punching someone to death being treated as an - unknown means of death in the obituaries. -- Spawning players now telefrag things standing at their spawnpoint, so - it's no longer possible to get stuck inside another player when - spawning. Also relaxed the restriction on deathmatch starts so that - only one is needed to start a game. -- Added nobfgaim cvar to disable freeaiming of the bfg. (suggested by - Tony Fabris) -- Was trying to figure out why weapnext and weapprev only worked for - player 0 in network games, when they suddenly started working. - Hopefully it's permanent... [Now that I've thought about it a little - more, I probably just wasn't getting the mouse captured when I alt-tabbed - to the other player's window.] -- Rewrote weapnext and weapprev commands to use the inventory "system." -- Added a dir command. -- Added support for the second joystick device because my joystick somehow - got assigned to it (and made me aware that it exists :-). Also added - joy_xthreshold, joy_ythreshold, joy_xsensitivity, joy_ysensitivity, and - joy_speedmultiplier cvars. -- Added support for double bindings (for double clicking, but it works with - all keys, not just the mouse buttons) to C_DoKey() and some associated - console commands. -- Changed C_DoKey() so that it takes an event as input. -- Added some code to PTR_ShootTraverse so that bullet puffs can appear on - floors and ceilings. - -December 6, 1998 -- Fixed problem of monsters being slow to attack a player if they were - on a route: Their reactiontime was too high. -- Added a gender option to the player setup menu. -- If getsfx() tries to load a sexed sound, and it doesn't exist, it will - try to load a male version of the sound. -- Added an empty sound (dsempty). -- Changed sound handling slightly so that sounds are now loaded when - they are first used instead of during I_InitSound(). They still stick - around forever after that. -- Changed the names of every sound in SNDINFO. It's no longer Hexen- - compatible, but it should at least be compatible with what I want to - do eventually. I also redid the way skin sounds are handled to better - fit my new sound naming conventions: Any gender/skin-specific sounds - can be used by prefacing them with a '*' and passing a player mobj to - a sound function. (If a player mobj is not passed, it defaults to male). -- Fixed the problem of button sounds being played in the wrong place - when they're deactivated. For some reason, I had this line in - P_UpdateSpecials(): - S_StartSound ((mobj_t *)&button->soundorg, "Switch1", 78); - but button->soundorg is an mobj_t *. I'm surprised it didn't crash. -- Changed P_Thing_Spawn() and P_Thing_Projectile() so that they will only - spawn things at map spots and not just anything with a matching tid. -- Fixed P_Thing_Projectile() so that it will still spawn missiles even if - there is something at their spawn spot. - -December 4, 1998 -- Was playing a dark level and noticed that the fog isn't "thick" - enough at higher resolutions: It transitions from darkness to fullbright - far too quickly. -- Tweaked the falling damage some more using some code from Q2. -- Rearranged the startup sequence slightly so that I_Init() gets called - before I_InitGraphics() (like it was before). -- Added support for gendered death messages. -- Rewrote portions of d_dehack.c so that it takes less space when compiled - and also added .bex support. (Tried it with a few .bex files, but didn't - do any extensive testing. Assuming it works. :-) -- Added a check in Printf() to avoid drawing to the console too rapidly - during startup, because that can slow it down. -- Changed P_LoadSegs so that it clears a line's ML_TWOSIDED flag if an - associated sidedef doesn't point to a back sector (otherwise the game - could crash in p_sight.c when the line came into view). -- Removed foreign language "support." It's been broken for a while and was - too hard to add new strings. -- Moved string names out of d_dehack.c and into dstrings.c (which is where - they should have been in the first place.) - -November 30, 1998 -- Had a flash of insight for how I could speed up the rendering of walls. A - quick test shows that filling the screen with columns of shorts is about - twice as fast as filling it with columns of bytes. If I draw wall columns - into memory in consecutive bytes, and then copy them to the screen in - another pass, I should be able to combine the writing of two or more - columns together, obtaining a speed boost that should, at the very least, - let me maintain 35 fps at 800x600 on my machine. I'll have to try it and - see if it actually works in practice. The overhead of writing the walls - twice might kill any performance boost this could offer. On 486s and slow - Pentiums, this will almost certainly be more of a hinderance than a help, - and it's not needed at low resolutions anyway, so I plan on keeping it - optional if it turns out to be benefitial. - -November 29, 1998 -- Tested a theory, and I was right. :-( Drawing vertical columns is - inherantly slower than drawing horizontal spans, probably because drawing - them vertically results in a whole lot more cache misses. What I did to - test it was replace most of D_Display() with a loop that filled the screen - a solid color. At 800x600, filling the screen by columns was no faster than - if I textured the walls (23 fps). Filling by rows, I could get 35 fps. - Apparently, any further optimizations in the renderer will have to focus - on drawing walls by rows instead of colums. - -November 28, 1998 -- Did some slight performance tuning in R_RenderSegLoop() by making more - variables local to only certain blocks in the function. In 800x600, - looking straight at a wall now gives ~23 fps vs ~20 fps before. (I really - wasn't expecting such a marked improvement. It might be worthwhile to try - and tweak this in assembly.) -- Pulled some blending addition code from the Q2 DLL. I had been trying to - do the same thing myself, but couldn't quite manage it until I found - id's code. - -November 26, 1998 -- Added support for cancelling messagemode by pressing escape. -- On the automap, a player with invulnerability is drawn with a color - slightly off from the background rather than being hard-coded to palette - entry 246 (which is almost black with the normal Doom palette). -- Finally got around to working out the bugs in teamplay. (Missiles would - still hurt you even with friendly fire on.) -- Disabled intermission texts in deathmatch. -- Pretty sure I got a non-fatal version of I_Error working now. It uses - setjmp() and longjmp() to do its magic. -- Removed the check for -statcopy in d_main.c. -- Removed the system menu from the ZDoom window. Unfortunately, this also - means it doesn't get a minimize box. Oh well. -- Removed the restriction on using messagemode only during a netgame. -- Added mouse wheel support. Under Win95, it ought to work with DirectInput. - Under NT 4.0 and 98, it should always works. - -November 23, 1998 -- Changed the startup code so that the graphics mode is initialized as early - as possible, allowing us to use the in-game console for most startup text. -- Moved all the functionality of I_StartGraphics() into I_InitGraphics() - because the game starts up in a fullscreen console now. -- Added endgame to quit out of a game and drop to the fullscreen console. -- Removed the ormask parameter from V_PrintStr() and V_PrintStr2(). It was - almost never used, and in those cases where it was, it was easy enough to - just or the string beforehand. -- Adjusted the colors of the CONCHARS lumps and changed a few special - characters. With the fullscreen console, it was obvious that they were - all too dark. -- Added a fullscreen console. -- Changed handling of WM_DESTROY messages in i_input.c to call exit() - directly, because the WM_QUIT message didn't seem to be making its way - into the message stream. -- Removed some unused #defines from doomdef.h -- Removed the store demo check from D_ProcessEvents(). - -November 22, 1998 -- Fixed saving of monster goals (was referencing the tracer field instead). -- Made one-sided lines pushable. -- Made P_PushSpecialLine aware of the side of the line that was pushed. -- Moved the execution of deferred scripts out of P_StartOpenScripts so - that going to a level with a saved snapshot would not terminate the - script prematurely when the snapshot was loaded. - -November 21, 1998 -- Teleport_EndGame and Teleport_NewMap no longer execute if crossed - along a linedef's back side. -- Discovered I had missed implementing Teleport_EndGame, so I added it. -- Fixed problem with level snapshots where plats and ceilings that were - in stasis were saved incorrectly. - -November 15, 1998 -- Just tried listening to D_RUNNIN after a clean boot, and it didn't work - the first time. :-( At least it plays properly after I use iwinit now... - -November 14, 1998 -- Bumped the height of the three small torches up from 34 to 37 units so - that the player can't jump on top of them. -- Tweaked the thing auto step up in PIT_CheckThing some more so that it - will only do the auto step up if you're not in the air. It seemed funny - to be able to jump on top of most monsters. Never mind. I can't seem to - get it to work only when I'm not jumping. :-( -- Added code to mus2strm.c so that it generates a tempo event at the - beginning of the song. (The tempo used appears to be the default for - midiStreamOpen, but I felt like being safe anyway.) AddEventToStream() in - mid2strm.c also keeps track of all instruments used in a song now. This - way I can get around what appears to be a bug in the GUS PnP drivers - that would cause it not to play some instruments if they weren't already - loaded in the card's RAM. Just before I start playing the actual song, I - play each instrument very briefly and very quietly to get the instruments - into the card's RAM. - -November 2, 1998 -- Added snd_mididevice cvar to allow the user to select which MIDI device - to use and a snd_listmididevices cvar to enumerate the available devices. -- Added MIDI volume cvar snd_midivolume and a corresponding menu item. -- Finished mus2strm.c and made a few cleanups to the MIDI streaming code. - Now I just need to switch to MikMod, and I won't have to use temporary - files anywhere. (MIDAS can only load MODs from disk and not from memory.) - -November 1, 1998 -- Started cleaning up qmus2mid.c and transforming it into mus2strm.c. - -October 31, 1998 -- Took the mid2strm sample from the dx5sdk and used it to redo my MIDI - support so that I can use the MIDI stream API now, the primary benefit - being that it lets me set the MIDI volume for just that stream and not the - entire system. -- Changed I_DetectOS() so that it doesn't identify Windows 98 as Windows 95. - -October 24, 1998 -- Discovered the blockmap generation wasn't actually working. Can't figure - out why, since the same code works just fine in BOOM... -- Incorporated several of the changes from BOOM 2.02 such as "loose files", - fire trail elimination, and automatic blockmap generation for large maps. - -October 17, 1998 -- Implemented the Radius_Quake line special. -- Removed limit on the size of recordable demos. -- Changed P_SpawnPlayer() so that it always spawns players on the ground. -- Created an MT_TELEPORTMAN2 that can be used to teleport things to points - above the ground and fixed MT_TELEPORTMAN so that it teleports things onto - the ground. -- Updated the teleport code so that it finds destinations using P_FindGoal() - instead of searching through all the active thinkers. -- Fixed a memory allocation problem with the -iwad parameter. - -October 16, 1998 -- Rewrote IdentifyVersion() so that it identifies IWADs by their contents - instead of their names. (except for tnt.wad and plutonia.wad, since I - don't know of any other way to distinguish them from doom2.wad) -- Doors that needed yellow skull keys to be opened said they needed yellow - cards instead. Fixed. -- Finally added proper support for substituting translucency for the fuzz - effect. Instead of using a NULL colormap to represent fuzz, it takes - advantage of the vissprite's flags field and sets MF_SHADOW. Then the - colormap points to the colormap that would be used if the sprite wasn't - shadow, so that it can be properly shaded when r_drawfuzz is 0. -- Got the colormaps code working. I just wasn't allocating enough space for - the realcolormaps array. Oopsy. - -October 15, 1998 -- Decided to support changing of colormaps via Boom's 242 linedef after all - instead of just changing the blend, so I started adding some code to - support that. Unfortunately, now it doesn't work without any C_START/C_END - colormaps. :-( Will fix tomorrow. - -October 14, 1998 -- Added a callback for the splashfactor cvar that prevents it from being - set to illegal non-positive values and also computes the inverse of the - cvar for scaling of the thrust felt by things that chew on their own - missiles. That way, a player will always rocket jump the same height no - matter what their splashfactor is set to. -- Fixed a problem with continuous sounds that prevented them from being - played. When I had consolidated to using a single mobj thinker for all - sounds instead of splitting them up as I had previously, I was erroneously - setting the activation time for continuous sounds to 0 because I wanted - their thinkers to get called right away. But the mobj thinker decrements - the tic counter and *then* compares it with 0, so it would decrement the - 0, see -1, and then never doing anything with that mobj again. - -October 10, 1998 -- The button list gets saved in level snapshots now. -- Added full support for activation types of projectile cross, projectile - hit, and push. Also added support for a few linedef types to be - monster-activatable depending on their activation type even if - ML_MONSTERSCANACTIVATE is not set. (So that, e.g. a monster can still - open a local door of type Door_Raise without the level designer - having to do anything special.) -- Removed the MAXBUTTONS limit and also fixed a problem with the sound - origin used when activating switches/buttons. -- Changed the error messages in V_DrawWrapper() and V_DrawSWrapper() to - use DPrintf() instead of Printf(). -- Fixed problem with invulnerability I introduced yesterday. (Walls were - still being drawn with the normal colormap.) - -October 9, 1998 -- Spent about an hour changing the rendering code so that each sector can - have its own colormap. The light tables are now indices into a colormap - rather than pointers into one. Spent about half an hour afterward - figuring out why it seemed to be merging visplanes that were alike in - everyway except for colormap. All in all, it was easier than I had - expected. Unfortunately, it's also too slow to build a colormap in the - middle of gameplay, so I guess an open script will have to be used to - build any colormaps before the level starts if anyone wants to change a - sector's color on the fly. - -Ocober 8, 1998 -- I had earlier changed PIT_RadiusAttack() to do only half damage to targets - that originated the explosion, so that rocket jumping didn't hurt so much. - The scale factor has now been moved into the cvar splashfactor and - defaults to 1.0. The former behavior can be restored by setting it to 0.5. - -October 5, 1998 -- Spent about 15 minutes writing a routine to build a colormap for non- - white lights. Tested it using an orange light for the entire level. It - worked nicely, so now I just need to make it possible to set the light - color on a sector-by-sector basis. -- Issue: Teleport destinations need to be flush with the floor instead of - remembering the position they are spawned at. Discovered this while - playing MAP20. A teleport destination lowers a great distance the first - time you land on it. Going on it again will teleport you to its original - height, and you fall from there. Maybe another type for destinations that - remember their height, then? - -October 4, 1998 -- Added say_team and messagemode2 commands and team and teamplay cvars. -- Externalized the obituary messages and added a "Strings" section to the - dehacked code. Since I'm pretty sure I'll be switching to scripted code - ala Quake, this is only temporary (along with everything else dehacked). -- Added support for showing both skull and card keys in the status bar - ala Boom. -- Added Sector_SetDamage and Sector_SetGravity line specials. -- Added another mobj flag (MF2_NOADJUST) so that you can walk on floating - bridges without worrying about them getting bumped up above your head. -- Adjused PIT_CheckThing() so that it allows stepping up on top of things - if their tops are no more than 24 units above the thing moving. - -October 3, 1998 -- Added an MT_AMBIENT mobj (doomed #14065). Its first argument determines - which ambient sound it represents. (And is valid in the range 0-255.) It - also subsumes the earlier MT_AMBIENT0 - MT_AMBIENT63 mobjs (doomed - #14001 - 14064), and P_SpawnMapThing translates them into an - instance of MT_AMBIENT. Also merged the world ambient thinker into the - mobj thinker so that all ambient sounds are controlled with a single - thinker function and not two. -- Removed sounds.h. Everything necessary to use sounds is now found in - s_sound.h -- Disabled the recognition of any display modes other than INDEX8 in - i_video.cpp. I'm no longer sure high/true color is such a good thing. - Without a major loss of performance, I can't see any way to avoid a - huge memory loss with more than a few palettes in those modes. :-( -- Did some work with ARGB8888 modes: I_Blit can now blit from INDEX8 to - ARGB8888 surfaces. The console font now gets drawn on ARGB8888 surfaces - (pretty sure it was before, but it stopped working sometime). -- Fixed the cast drawer so that the names don't get squashed together in - resolutions at least 640 pixels wide. -- Fixed bug where pressing a key with a menu active would move the cursor - to a blank line if it wasn't assigned as a hotkey. -- Added support for actually seeing skins as well as setting them in the - player setup menu. -- Fixed bug with player colors for players 5-8. - -October 1, 1998 -- Continued work with "skins." Everything works now except actually - seeing them. -- Did away with the spriteoffset[], spritewidth[], and spritetopoffset[] - arrays and moved their contents into the sprite frame structure. - -September 30, 1998 -- Started work on supporting Doom Legacy "skins." (Personally, I think - skin is a misnomer, but I'm afraid the term's probably here to stay.) -- Removed the maskdraw_t structure from r_things.c since it wasn't used - anywhere. Here it is preserved for history: - typedef struct { - int x1, x2; - int column; - int topclip, bottomclip; - } maskdraw_t; - Wonder what it was for. - -September 27, 1998 -- Fixed long-standing bug in R_DrawSprite that could cause sprites to be - drawn through the floor of a cliff if you look down just the right amount - (when the top edge of the floor is exactly two pixels above the top of - the screen). -- Added hacked-in support for colormaps with the Transfer_LightsHeights - special. ZDoom actually sets the blending through this special instead - of changing the colormap. To accomodate BOOM levels that use colormaps, - it will average all the colors in the colormap together and derive a - blend from that. Alternatively, you set the blend directly by setting - the appropriate texture name to a hex string of the format AARRGGBB. -- Fixed barrels (again) so that barrel traps work as expected. Not sure if - this problem existed in 1.14a or not, but it's gone now. -- Added ignoreInvisibility parameter to P_CheckSight(), because it is - occasionally used to determine if there is an unblocked line between two - things (not if one can see the other). -- Switched to using a logarithmic scale for pain flashes. -- Added support for Boom's push/pullers, wind, current, and friction effects. - -September 26, 1998 -- Saw this at the Team TNT message board: - - the bug has been found and fixed. What was happening was that the fake - sector was being passed instead of the real one, and this messed up - the check for whether a sector had had its sprites added to the view - already. As a result each sprite generated was being added once per - subsector rather than just once. - - So I went looking around in the code some and found this in R_Subsector(): - "R_AddSprites (frontsector)". I replaced frontsector with sub->sector, and - that seems to have done the trick. A test level I made went from 15 fps to - 35 fps (the max) with this fix. - -September 23, 1998 -- Using -cdrom creates the directory if it doesn't exist (like it used to). -- When used with -cdrom, screenshots now get saved to C:\ZDOOMDAT instead of - the game directory. -- Put back support for taking screenshots by pressing F1 with -devparm - active, since some people probably won't read the docs and realize there's - a screenshot command bound to the "Print Screen" key by default. -- Added "ticker" cvar to control display of the -devparm ticker at the - bottom of the display (so that -devparm is now totally useless). -- Changed the directory for -cdrom from C:\DOOMDATA to C:\ZDOOMDAT and added - support for using that directory to store zdoom.cfg. -- Fixed bug that caused using -devparm or -cdrom to crash the game during - startup. (They referenced the Strings[] table before it was fully - initialized.) - -September 19, 1998 -- Turned off screenwiping when moving between levels in a hub (but only if - the level the player just left has LEVEL_NOINTERMISSION set). -- Fixed a savegame bug I had added with hubs that caused the game to - forget the player's state. -- Added noise cvar to control display of sound debugging info. -- Added turn180 command to quickly turn the player around. -- Added support for the ACS thingsound(), sectorsound(), and ambientsound() - commands. -- Changed every reference to S_StartSound so that they refer to sounds - by name rather than id and specify priority information (since it's - no longer a part of the sfxinfo). - -September 18, 1998 -- Finished S_ParseSndInfo so that it has no maximum number of sounds it - can define and works with more than just ambient sounds. -- Changed w_wad.c back to using the buffered I/O functions again. (I had - done this a long time ago, but thanks to some mistakes on my part, I - ended up putting taking it out. Now it's back for good. :-) It doesn't - seem to have any effect on disk performance, but it will let me use - MikMod functions to load samples and MODs directly from the wad. -- Played around with MikMod some. With the assembly mixer, its - performance seems to be about the same as MIDAS', so I will - probably switch to it at some point. - -September 17, 1998 -- Improved support for analog joysticks by using their full range of - motion instead of treating them like digital devices. - -September 15, 1998 -- Added support for world vars and controlling scripts on other maps. -- Added the hub clusterdef flag and supporting code. -- Figured out what the problem with hub savegames was: Instead - of writing out a copy of the snapshots for each level with one, - I wrote out a copy of the current level's snapshot for each - level with a snapshot. Whoops! Easy fix. - -September 14, 1998 -- Worked with supporting hubs. For maps that belong to a hub, - whenever you exit the level, the game makes a mini-savegame - of the level. When you return, the world state is based on - the mini-savegame. Theoretically, saving games to disk should - be as simple as storing each of these "snapshots" along with - some extra info, but I couldn't get it to work. The current - level worked, but trying to go to a previously visited level - after loading the savegame crashed the game. - -September 13, 1998 -- Redid my ACS code a bit so that scripts are now kept track of - through a private linked list rather than thinkers. The only - real advantage this offers is that I have complete control - over when scripts get executed, so a script that executes a - scriptwait command will be guaranteed to run in the same tic - that the script it's waiting on terminates. - -September 12, 1998 -- Replaced my visplanes code with Lee Killough's hashing method - and got a noticable performance boost in high visplane areas - (even those with <128!). - -September 4, 1998 -- Added weapnext and weapprev commands courtesy of - Papst Johannes Jörg IV. [which were later completely - rewritten by me] -- Add support for suspending and resuming scripts (easy when - you know you can only have one copy running at a time). -- Added checks to ensure that only one instance of a script is - running at a time (like Hexen). - -September 3, 1998 -- Took out the stuff for sliding doors. You want it, then - fake it with a script. -- Ran around in hexen.wad for a while and fixed a few bugs. -- Added support for ACS scripts (except for the sound p-codes - and polywait). - -September 2, 1998 -- Added support for monsters remembering their previous target - from BOOM. -- Made the mobj's targettic a counter that decrements to zero - instead of a time relative to gametic (so that it works properly - across savegames). -- Added more mobj flags bits and consolidated invisible into it. -- Implemented all the Thing_* line specials. -- Added support for stairs that reset and/or have delays and the - sync stair builders. - -September 1, 1998 -- Fixed problem with several plat types that didn't deactivate - themselves. -- Fixed bug that caused Plat_UpWaitDownStay to act like - Plat_PerpetualRaise. -- Made NOINTERMISSION levels work by moving the check for it later - in G_DoCompleted(). -- Added HealThing special to match DamageThing. -- Added full support for the Teleport_NewMap special. Levelnum is - actually used for something in the MAPINFO now, too. - -August 31, 1998 -- Implemented Hexen's thing specials that don't use tids. - -August 30, 1998 -- Added support for Hexen pillars. -- Finished ceilings. -- Finished floors. -- Added compression of .tch files and significantly rewrote the - associated part of v_video.c in the process. Not quite the savings - I would have liked: only about 57%. -- Tried using the LZ(77?) code from the Doom utilities to compress save - games, but it was too slow to be practical. I now use minilzo which - seems to compress about the same but is a *lot* faster. As an example - of the kind of savings this offers, the size of a savegame on one - level shrank to 20% of its original size. -- Used BOOM's code to remove the savegame size limit and fix some other - savegame bugs. -- Used Killough's global boss brain state. -- Tweaked I_FatalError() so that if something really bad happens, you - shouldn't end up in an infinite recursion sequence because Printf() - gets called somewhere during the exit sequence. -- Implemented Floor_Waggle. Unfortunately, it's not the same as Hexen's - since I couldn't find any decent documentation about it and also had - a hard time determining just how every different parameter affected it - by watching it in a test level. It's close, but not the same. - -August 29, 1998 -- Added support for normal (not sync) Hexen stairs. -- Added support for Hexen's phased lighting. - -August 26, 1998 -- Continued on floors. - -August 25, 1998 -- Started getting moving floors working again. - -August 21, 1998 -- Got plats working again. -- Switched to using a linked list to keep track of active ceilings and - plats. This is similar to the way BOOM does it, except I store the - list pointers in the active entities themselves rather than seperately. - -August 20, 1998 -- Fixed a savegame bug I had introduced. They got saved as "version 115" - instead of zdoomsv?.dsg. - -August 8, 1998 - August 15, 1998 -- Did some work converting to Hexen-like line specials. Sorry, I was too - lazy to record the specific changes. - -August 7, 1998 -- Incorporated BOOM's Pain Elemental Lost Soul shooting fix. -- Incorporated some of BOOM's changes to p_map.c. -- Incorporated Killough's changes to p_sight.c. - -August 6, 1998 -- Added snd_surround cvar to control use of surround sounds. If "0", then - anything that would otherwise have been played surround is played - identically from both speakers instead. -- Added cvar_defflags variable to hold any flags automatically applied to - new cvars, the intended purpose being to allow all cvars in a config - file to be flagged as CVAR_ARCHIVE. Useful if one port of ZDoom has cvars - that another doesn't, but you still want them to share the same config - file. - -August 5, 1998 -- Finished keyboard handler and tried to create a mouse handler for the - DOS port. -- Switched to using PTC Mode IDs to describe video modes instead of - bpp since the DOS version of PTC has multiple modes with the same bpp. - -August 4, 1998 -- Created partial keyboard handler for DOS port. - -July 28, 1998 -- Fixed use of config files in paths containing spaces. (I had forgotten to - enclose the pathname in quotes when constructing the exec command string.) -- Added calls to FixPathSeperator() in a bunch of places where it was needed. - -July 27, 1998 -- Uploaded a quick fix to 1.14a that lets it load save games again. -- Renamed the project and workspace to zdoom (rather than doom). -- Created a version info resource for ZDoom and moved the system-specific - files into a new win32 directory in the code tree. - -July 26, 1998 -- Uploaded 1.14a to notgod.com along with a source patch for 1.14->1.14a. -- If FONTA?? is available, it is now used in deference to STCFN??? (i.e. - -file heretic) -- Renamed all the WICHAR?? in zdoom.wad to FONTB?? to match the naming - convention used by Heretic and Hexen. - -July 23, 1998 -- I must be an idiot! I took a fix from BOOM for freeing the lnames array too - soon and stuck it into ZDoom without really thinking about it. In BOOM (and - DOOM) lnames[] is dynamically allocated. In ZDoom, it's static since it - only needs to contain two items (the patch of the level just left and the - patch of the level being entered). Fixed. -- Using the changemap command no longer says you are leaving the map you're - entering when no title patch is provided. (Unless they're one and the same.) - -July 22, 1998 -- Added a z parameter to P_TeleportMove() to properly handle checks in the - third dimension. Previously, I was checking for this, too, but against the - thing's original position. Now I check against the desired z location. This - prevents monsters from teleporting inside of each other. - -July 19, 1998 -- Improved handling of international keymaps (such as the French one) by - moving all responsibility for determining the shifted state of keys into - i_input.c. C_consol.c no longer maintains a ShiftLOT since .data3 of the - key event will contain a character that is sensitive of the current state - of modifier keys. (i.e. .data3 contains 'a' when the A key is pressed and - 'A' when SHIFT-A is pressed.) -- Made some changes to D_DoAdvanceDemo() and G_CheckDemoStatus() so that - using the player setup menu during demo playback is now safe. -- Added a check to C_BackupCVars() so that it doesn't back up CVAR_LATCH - cvars are not saved. This is unnecessary since they don't actually - change until a new game anyway. The primary advantage of this is that - starting a new game during demo playback now uses the selected skill - level (again). -- Anything spawned by a boss shooter will now always telefrag even if - LEVEL_MONSTERSTELEFRAG is not set. -- Modifed PIT_RadiusAttack() (again) so that when a barrel is doing the - exploding, the original damage code is used. -- Removed the bitwise and against 0xff for angle in R_DrawSky() and - R_DrawMaskedSky(). Some skies in various PWADs are wider than this, and - R_GetColumn() masks it to the proper width for us anyway. - -July 18, 1998 -- Changed the unknown thing to have no gravity so that it stays at the - height it was spawned at (useful with Hexen). -- Discovered the source of a memory leak: When I added the thing_list code - from BOOM, I left out some from P_UnsetThingPosition(), so - P_SetThingPosition() was always creating a new thing_list and letting the - old one waste space. Conveyors even work now! Yay! -- Removed support for repeating the left and right arrow keys in m_menu.c - since some people had trouble with it. -- Changed D_DoServerInfoChange() so that it doesn't print messages in - single player games. - -July 16, 1998 -- Added entries for Heretic to SWITCHES and ANIMATED lumps (because I can). -- Did equivalent things for BOOM SWITCHES lumps. -- Removed MAXANIMS limit by scanning through the AnimDefs array to find out - how many entries it contains and then allocating that many anim_t's. Also - added support for BOOM ANIMATED lumps. -- Reduced the Revenant's height from 80 back to 56 to fix a problem with a - trap on DOOM2 MAP27. The new height caused the revenants heads to get - stuck in the ceiling, so the platforms they were on wouldn't lower. Since - there are probably other situations like this elsewhere, I went and gave - all the monsters their original heights back. -- Fixed a problem with BOOM's openings limit removal. Pointers to openings - get stored in drawsegs, and the realloc() of the openings didn't bother - to adjust those pointers. A simple fix in r_segs.c once I figured out what - the problem was. -- Incorporated BOOM's Medusa fix. - -July 15, 1998 -- Added Lee Killough's generalized scrollers from BOOM. -- Added Rand Phares' thing list stuff from BOOM. -- Finished support for BOOM's multiple sector thinkers and threw in the - elevator code in the process (but nothing that calls it). - -July 14, 1998 -- Started adding support for BOOM's multiple actions per sector. -- Uploaded the 1.14 binaries and source to notgod.com. -- Fixed bug that caused the bunny scroller to crash: Using 0 instead of - &screens[0] in the calls to F_DrawPatchCol(). -- Added support for the ML_PASSUSE flag from BOOM. -- Decided using a default texture for unknowns was too complicated to bother - with at this point, so I took it back out. (Left in for flats, though.) - -July 13, 1998 -- Fixed IDKFA cheat to give the correct amount of armor. -- Slightly updated and reformated editing.txt and updated it to use - the new ambient thing numbers. -- Reformatted and updated zdoom.txt. -- Created red and blue checkerboards that get substituted for unknown textures - and flats. - -July 12, 1998 -- Created a new thing that gets substituted for unknown things in a map and - things that are known but have no sprite frames (such as Doom II monsters - using a DOOM I IWAD). -- Kill and kill monsters commands now get sent over the network. -- Reformatted commands.txt to make it fit on a 76-column display and hopefully - be more readable. - -July 11, 1998 -- Renumbered the ambient things to the range 14001-14064. - -July 10, 1998 -- Renamed -nosound to -nosfx to be more compatible with most other Dooms. -- Adjusted the autoaim values used by the player setup menu to not use - such a large range (0-5000 with big steppings in-between). -- During another deathmatch session, discovered a problem on MAP03 with - spawn farthest. No matter what, the dead player would always spawn at - the spawn spot near the beginning of the level. Realized that deathmatch - spawn spots weren't recorded as 16.16 fixed point, so I adjusted - PlayersRangeFromSpot accordingly. -- Was playing around in a deathmatch a little when I tried the changemap - command and the game bombed out in Z_Free() because the block being freed - didn't have a ZONEID. So I added a wrapper around Z_Free() to pass it - the source file and line number of the caller in case this happens again. -- Discovered that I had forgotten to add the server var sending/reading - to the netgame arbitration process, so I added it. -- Added changemap command which should be able to change the level during - netgames and demos. -- Added support for cheat network commands so that they can work in netgames - and demos (if desired). -- Added hack to DeHackEd support to use the original Doom thing height's - if the thing hangs from the ceiling but the patch doesn't set its height. - -July 9, 1998 -- Improved wi_stuff.c so that it can still draw the level name even if a - patch hasn't been designed for it. - -July 8, 1998 -- Fixed aiming. This consisted of two things: First, I needed to change - the way I generated yslopetab and looked into it so that fullscreen - windows and non-fullscreen had the same relative range. (Side effect: - When the status bar is visible, you get a larger freelook range than - before.) Second, I had to adjust my calculation of view pitch->slope - from 0.5 to 0.75 times. I arrived at this value by standing on a cliff - and firing a rocket launcher with different multipliers until I found one - that looked good. -- Fixed sky scaling with different r_detail settings. -- Fixed spacing of the ammo count numbers on the fullscreen HUD. -- Hacked around in i_video.cpp and PTC's idirectx.cpp a little to support - Mode X modes under Windows 95. -- Changed C_Drawer() so that it doesn't call C_EraseLines() if the automap - is active, since it just creates junk on top of the automap. -- Changed the notify text drawer to use Doom's standard red text instead - of white. - -July 7, 1998 -- Made several changes to the code to make it more portable and removed - a few unused variables. DJGPP can now compile the machine-independant - parts with only minimal warnings with -Wall. -- Thank's to gcc's -Wall, I figured out why togglemessages didn't - work: I had left out the parentheses in Cmd_ToggleMessages - when I wanted to call M_ChangeMessages(). Oops. -- Tried compiling r_draw.c with DJGPP and discovered that it doesn't - like long file names, so I renamed everything to fit the 8.3 format. - (Stupid MS-DOS! Grr!) -- Changed the midprinter to use the hu_font instead of the console font - since it looks better and also means that the "You need a * key..." - messages don't need special treatment in the DeHackEd code. -- Changed C_AddNotifyString() to use V_BreakLines(). - -July 6, 1993 -- Created V_BreakLines() and V_FreeBrokenLines() to handle splitting of - text into multiple lines. Unlike the code I had in C_AddNotifyString(), - these will properly break lines at whitespace if possible instead of - the middle of a word. -- Stopped using the pitch field of the S_sfx table to store the sounds' - playback frequencies so that I can handle pitched sounds properly ala - some magic I found in BOOM. - -July 3, 1998 -- Went ahead and took some code from BOOM for "kill monsters" command - since it also kills losts souls spawned by a pain elemntal's death. -- Used BOOM's P_SetMobjState() since it has nifty state cycle detection. -- Removed a lot of stuff from cmdlib.c that I didn't actually use. (Kept - the CRC code around since I *might* use it.) -- Discovered that taking screenshots directly inside the screenshot command - was a bad thing because it can be called during the middle of a screen - draw. Fixed to delay using ga_screenshot. -- Changed the gamma command into a cvar and removed the code for - "floaters" from the options menu, since that was all they were used for. -- Fixed bug in alias code: New aliases would not properly clear the - next field if they were the first one in a bucket. -- Aliases now get saved to the config file. -- Added "Always Mouselook" to the Options menu. I thought it was already - there, but... It wasn't. - -July 2, 1998 -- Added autoexec cvar to determine the autoexec file (partially because - Doom Legacy decided they wanted to use autoexec.cfg--just like they - used config.cfg). -- Renamed menu_video to menu_display and added menu_video, menu_player, - and menu_gameplay commmands. -- Moved I_WaitVBL() into i_system.c and changed it to make a simple Sleep() - call because that's what it's really used for. -- Changed C_DrawNotifyText() to not draw when the menu is up. -- Added proper support for usejoystick and usemouse cvars in i_input.c -- Cleaned up the Convert() table in i_input.c by reformatting it. - -July 1, 1998 -- Tweaked PIT_RadiusAttack() to be more realistic. -- Fixed PCX writing code so that it properly indicates that the image is in - color. - -June 30, 1998 -- Added Gameplay Options menu for setting dmflags. - -June 29, 1998 -- Documented the map command. (How did I miss this?) -- Changed the map command so that it doesn't die fatally if the specified lump - doesn't exist. -- Borrowed some of NTDOOM's mouse input code (using Win32 functions instead of - DirectInput), and the mouse seems smoother under NT. Use the in_mouse cvar - to select which method of input to use. -- Added I_DetectOS() function and in_mouse cvar. - -June 27, 1998 -- Added DF_NO_JUMP and DF_NO_FREELOOK dmflags. -- Made -turbo parameter a normal cvar. - -June 26, 1998 -- Spent most of the day trying to beat MineSweeper at expert difficulty. - Sorry. :-) - -June 25, 1998 -- Implemented fraglimit and timelimit cvars. -- deathmatch is also a cvar now. -- Added q2-like dmflags cvar. It adds some new deathmatch options and also - takes over the duties of the g_falldamage and g_unlimitedammo cvars as well - as the -fast, -respawn, and -nomonsters. -- Added one second delay until respawning after death is allowed (so that when - noexit is active, and you hit an exit switch, you don't instantly respawn). - -June 24, 1998 -- Changes to serverinfo cvars now get transmitted properly in netgames, and - only the key player can change them. -- Finally added cvarlist command and removed the multiple variations of "set". -- Added support for 8 players. Using more should now be as simple as increasing - the MAXPLAYERS #define. -- Created brighter faceback graphics that better represent the player's - chosen color. - -June 23, 1998 -- Added spynext and spyprev commands. Spynext is equivalent to pressing F12 - in the original Doom. -- Added +showscores action. It gets bound to \ by default. -- Save games now hold copies of every serverinfo cvar and the level locals. - With Doom 1, they also contain a list of visited levels. -- The game now keeps a cumulative frag count for each player which is the same - as what gets displayed on the status bar during a deathmatch. -- Removed "Next Weapon" from the controls menu. I need to get the inventory - system working before I can implement it, and I don't feel like doing that - right now. -- With a little help from BOOM, sounds in spy mode now center around the - displayplayer rather than the consoleplayer. - -June 22, 1998 -- Got dynamic player translation tables up-and-running. Status bar also uses - the translation table for the faceback instead of different patches. Automap - now uses the player's chosen color in netgames instead of a fixed array - of color values. -- Left and right arrow keys now repeat in the menus (for sliders). -- Continued work on player setup menu. -- Fixed C_AddNotifyString() so that it doesn't crash if passed a string with - a newline in the middle but not at the end of the string. -- m_menu.c's text input routine now uses the user's preferred keymap. - -June 20, 1998 -- Continued work on player setup menu. -- Fixed a bug in V_Clear(): 8-bit modes ignored left parameter. -- Upped number of savegame slots to 8. -- Removed all alloca() calls by replacing them with Z_Malloc()/Z_Free() pairs. - -June 19, 1998 -- Compiled with warning level 4 and caught a few problems and potential - problems as well as some code that was never executed. (Thanks, Grant.) -- Fixed uppercopy so that it doesn't always copy 8-chars even if the passed - string is shorter. -- Removed , , , and - #includes from d_main.c. - -June 18, 1998 -- Removed R_OK #define from one of the source files and changed the typedef - for bool in doomtype.h. Also created dxcrap.c which holds some information - from dinput.lib and dxguid.lib since Microsoft seems to have left most of - the Watcom DX libraries out of its DX 5 SDK. -- Started work on player setup menu. - -June 17, 1998 -- Got GNU diff and patch to compile under Win32. I intend to use them to - distribute my changes to the PTC source along with the rest of the ZDoom - source. - -June 13, 1998 -- Fixed a shutdown bug in the new sound code. - -June 12, 1998 -- Changed i_sound.c to something inspired by BOOM. It now uses MIDAS's - auto effect channels instead of a bunch of junk left over from the - Linux port to determine which channel to play a sound on. As a result, - it doesn't seem to lose the player's weapon fire anymore. (Yay!) - Also, the snd_channels cvar is now useful. -- Made spawning of unknown things in maps a warning instead of an error. -- Changed R_CheckTextureNumForName() around to use a hash table - instead of a linear search. - -June 11, 1998 -- Added support for BOOM's -fastdemo parameter. -- Made MIDAS initialization failure a non-fatal error. -- Did a small change to R_InitSpriteDefs() so that it scans the list of - sprites backwards. -- Rewrote R_PrecacheLevel() based on BOOM's. -- Found a better way to trap Alt-Space: I listen for WM_SYSCOMMAND messages - and filter out any for SC_KEYMENU events. - -June 10, 1998 -- Removed Martin Howe's sprite rotation fix in R_InstallSpriteLump() - and replaced it with something from BOOM. -- Discovered the Win32 function RegisterHotKey() and used it to trap - Alt-Space so that it doesn't open the window's system menu. Alas, - it doesn't seem to work with DirectDraw. :-( -- Added RGB->HSV and HSV->RGB functions to v_palette.c. - -June 9, 1998 -- Removed WS_POPUP style from the ZDoom window. -- Integrated the changes in PTC 0.73b with mine, and PTC stopped working - with DirectX (again). Thankfully, I managed to get it working again. - (Sometimes I wonder if using PTC is more trouble than it's worth...) - -June 8, 1998 -- Each machine now broadcasts its userinfo in D_ArbitrateNetStart() ala - Doom Legacy 1.11. -- Userinfo settings are now properly set at game startup. -- Modified D_ArbitrateNetStart() to use the stream reading and writing - functions for setting and retrieving some game info. -- Changed the global var startmap to be the actual name of the desired map - and got rid of startepisode global var. -- Chat messages now get sent using special "ticcmds" instead of char-by-char - in a normal ticcmd. -- Layed the foundation for special network commands besides user movement. -- Pressing escape in a menu now backs up one menu instead exiting the menu - system entirely. (And backspace is now used to clear key bindings in the - configure controls menu.) -- Menu now displays messages that don't expect any specific input without - quickly hiding them away. -- Changed some stuff so that ZDoom doesn't grab the mouse when a menu is - active and it's running in a window. -- Added some code so that during a demo, if a key is bound to toggleconsole, - menu_*, sizeup, or sizedown, it will execute that command instead of - activate the menu. -- Removed F1 screenshot hack from m_menu.c. (Use screenshot command.) -- Removed support for picking menu items with the joystick and mouse. -- Integrated the changes in PTC 0.73a with my own. - -June 6, 1998 -- Added -config option in GetConfigPath(). -- Added messagemode and say console commands. -- Fixed C_AddNotifyString() so that it breaks lines without losing characters. -- Changed chat code to use whatever the user's selected keymap is instead of - always Qwerty. Did the same for the console. -- Made it possible to actually send chat messages. -- Added check for chat_on to C_DoKey() so that we don't try to do something - while the player is typing a message. -- Removed French stuff from hu_stuff.c. -- Discovered big booboo on my part. Chat hasn't been working since version - 1.11 has it? I was comparing ev->data1 with 't' in hu_stuff.c, but data1 - is a scancode, not ASCII. -- Removed RCS ID lines from all the source files. I only have RCS on my Amiga, - and that's not the machine I'm using to develop this. - -June 5, 1998 -- Created some new pr_* classes for the gib throwing code. -- Removed RNG shuffling from P_Random() since it was screwing up sync in - demos and network games. - -June 4, 1998 -- Made network ticcmd's variable length using the demo packing. -- Removed reference to turbomesage in G_Ticker(). -- Simplified RefreshPalette() so that generating the invulnerability colormap - uses fewer multipilies and no divides. - -June 3, 1998 -- Fixed P_InitSwitchList() so that the retail version is treated like the - registered version instead of the shareware. -- Removed Martin Howe's code from w_wad.c and replaced it with a combination - of code written by me and code from Boom. (Using hash tables speeds up - level loading a *lot*--far more than I expected!) -- Added key repeating to the console. (So easy, I should have done it sooner.) - -June 2, 1998 -- Removed DEVONLY macro and added DPrintf() function. - -June 1, 1998 -- Fixed a bug in C_InitConsole when it reformats the console buffer. I had - been using Printf (string); to reformat the text, but if string contained - any sequences like "%s" I would be in big trouble. So now I use - Printf ("%s", string); -- Fixed a problem with the invulnerability color map being wrong. I had - been subtracting from 4278190080 when I calculated the inverse. - (Don't know where I got that number from!) Also discovered my other - stuff wouldn't work, so I just went and switched to fp like dcolors.c uses. -- Fixed a bug in the DeHackEd text replacement code I had introduced when - I added support for ambient sounds. It was checking the names of all - sound effects, but the ambient sounds start out with no names, so I - ended up dereferencing a null pointer once I reached sfx_ambient0. - -May 30, 1998 -- Replaced lots of constant 35's with TICRATE (when measuring time). -- Switched to the BOOM random number generator. -- Added onfloor parameter to P_SpawnMobj() for when I actually support - Hexen-style maps (which have a z parameter for Things). -- Changed to using mapthing2_t's internally instead of mapthing_t's. -- Created entries for Hexen-style maps in doomdata.c. -- Added a repeat byte to DEM_USERCMDCLONE to shrink demos even more. - -May 29, 1998 -- While recording a demo, discovered that I can't telefrag monsters. - Must investigate. -- Added DEM_USERCMDCLONE command to indicate that this user command in the - demo is the same as the previous one. Drastically reduced demo sizes. -- Scrapped support for my previous ZDEM format completely and adopted - an IFF FORM instead. -- Changed all SVC_* labels to DEM_* since they have nothing to do with - server-to-client communication and everything to do with demos. - -May 28, 1998 -- Got ZDEM recording and playback working again. -- Got idea from Boom: Rewrote all occurences of P_Random()-P_Random() that - I could find so that they don't make assumptions about the order of - execution. Old demo playback improved noticably (but it still gets out - of sync easily). Even better, ZDEMs now appear to play back properly in - both the release and debug builds. - -May 26, 1998 - May 27, 1998 -- Studied the code generated by the Hexen utility ACC and wrote a utility - capable of disassembling BEHAVIOR lumps. - -******* - -May 25, 1998 -- Released ZDoom 1.13 -- Made gibs toggleable with testgibs cvar. -- Created zdoom.wcf file. -- Wrote some more documentation. -- Finished demo.wad -- Finished ambient sound support: - Point random and periodic. - World (& surround) continuous, random, and periodic. - Limited SNDINFO lump support. -- Added the new level flags to the MAPINFO parser. - -May 23, 1998 -- Continued work on ambient sounds: - Positional sounds with specific volumes work. -- Fixed intermission maps for Doom I. (I had broken them when I stopped - identifying maps by episode and level numbers.) -- Added some more level flags to generalize behavior that had previously - been restricted certain levels. Also removed LEVEL_SECRET and didsecret - references, since I can now mimic them using LEVEL_VISITED. - -May 22, 1998 -- Started support for ambient sounds: - Positional, continuous sounds work. -- Fixed coop intermission stats. -- Fixed bug in I_FinishUpdate() that could cause it to crash if the - fps meter was up and it was called in very quick succession. -- Tried the following to fix the NT mouse bug: - Read the mouse after reading the keyboard. - Poll the mouse's position using GetDeviceState(). - Both methods failed to fix the problem. :-( -- Fixed handling of secret levels in G_WorldDone(). -- Fixed problem with finale writer showing the full text of a message - during wipes. -- Fixed display of cluster entry text in G_WorldDone(). -- Discovered that R_DrawMaskedSky() doesn't work for sky textures that - are actually masked (probably due to the way the composite texture - generator works, but I could easily be wrong). Will investigate - further later. -- Discovered that DITerm() was never being called, so I threw a call to - it into I_ShutdownGraphics(). -- Failure to specify a next map in the MAPINFO now repeats the current - map instead of crashing. -- Added support for maps without music specified in their MAPINFO. - -May 21, 1998 -- Finished MAPINFO parser, began work on demo (and test) wad. - -May 20, 1998 -- Started work on a parser for MAPINFO lumps. - -May 19, 1998 -- Changed ST_doPaletteStuff() to be dynamic and use a larger range of - blendings. -- Added W_FindLump() command. -- Changed W_CacheLumpNum() so that it allocates an extra zero byte after - the end of the lump. -- Modified dehacked code to parse the patch file from memory so that - they can be stored inside a wad file. -- Added limits command to list the state of all dynamic limits. -- Added default binding to the SysRq (Print Screen) key: "screenshot". -- Discovered the pause key wasn't getting bound by default. Fixed. -- Changed .cfg comments to anything starting with '//' rather than lines - starting with ';'. -- Changed the default config file to zdoom.cfg and added the -config - parameter to choose alternate ones. (Blargh! Doom Legacy decided to - use config.cfg as its default config file, when I've been using it - all along!) - -May 18, 1998 -- Tried adding support for saving TGA screenshots and discovered that PTC's - image class doesn't actually do anything for a save. -- Changed M_ScreenShot() to accept a filename (if desired) and added a - screenshot console command that can be used to specify one. -- Changed WritePCXFile to use ARGB values instead of RGB triples so that - I can pass it the colors array from a palette_t. -- Bumped the screenshot limit in M_ScreenShot up to 10000 different - images (properly this time); changed the I_Error to a simple error - message (no reason to kill the program if you can't take a screenshot); - and added support for dumping true color files. - -May 16, 1998 -- Removed the MAXSPECIALCROSS limit. -- Made palette blending dynamic and added the testblend command to - make sure that it actually works properly. -- Moved the gamma correction stuff from v_video.c into v_palette.c. -- Fixed the color of the red player in the automap. -- Changed I_SetPalette() to take a pointer to an array of uints instead - of RGB triples and avoid gamma correction since that should be done - before the call to I_SetPalette(). - -May 15, 1998 -- Added V_Clear() function to set a rectangle to a solid color. -- Added dmflags, fraglimit, and timelimit cvars. Alas, they are just - placeholders for the moment. - -May 14, 1998 -- Discovered a bug in Doom Legacy's assembly R_DrawColumn while I was - in the process of rewriting it: They were calculating (centery-dc_yl) - when it should have been (dc_yl-centery). -- Rearranged FixedDiv_ASM() to make it pair better on a Pentium and - aligned the main division code to a 16 byte boundary. - -May 13, 1998 -- Removed the next and prev links from the definition of a vissprite_t - since they were used only for the bubble sort. -- Changed R_SortVisSprites() to use the stdlib qsort() function instead - of a bubblesort, the end result being that scenes with a lot of sprites - are a *lot* faster than before. For means of comparison, I played DOOM2 - MAP30 until I got MaxVisSprites up to 1824, and the lowest my framerate - ever went was 13 fps. That's compared to my earlier run where a mere 992 - sprites slowed me down to about 3 fps. -- Fixed bug in the C-based R_DrawFuzzColumn?()s: I wasn't properly - masking fuzzpos when I added 3 to it at the end. -- Added preliminary C-based ARGB drawers to r_draw.c. They work, but - slower than I would like. -- Changed the main column drawers in r_draw.c into pointers that can - point to different routines depending on the screen depth (and/or - presence of assembly/MMX routines). This is essentially the route - DOSDoom takes, except I didn't split r_draw.c into two files. - -May 12, 1998 -- Fixed the below bug. I now set dc_mask to 0xff at the beginning of - R_DrawVisSprite() since it wasn't always large enough. A nice side - benefit of this is that it allows for taller sprites than before. - (Considering that I added dc_mask a few weeks ago, I'm surprised it - took me so long to notice this!) -- Discovered a weird bug. Things were occasionally being drawn with their - heads being repeated near their feet but still clipping to the original - shape of the thing. In DPaint, I could do this by drawing the thing once, - then turning the background into a stencil so I can't draw over it and - drawing the thing lower but in the same horizontal position. - -May 11, 1998 -- Started adding gibs (sprite grouping in w_wad.c is always enabled now). -- Started adding support for RGB modes in various spots. -- Separated all the V_DrawPatch* functions into various wrappers and - column drawers. This makes it easy to use the same function for both - indexed and direct color modes and to add more (which I have done) - without too much work. -- Created R_DrawSky() out of first part of R_DrawPlanes() for - double sky drawing. Created R_DrawMaskedSky() that draws masked - sky textures (i.e. the front one for a double sky); it can also - properly tile any height sky but at a performance hit. -- Moved definition of skyiscale from r_things.c int r_sky.c and split - it into sky1iscale and sky2iscale. Also created their inverses: - sky1scale and sky2scale. -- Added r_stretchsky cvar to stretch the sky if it isn't taller than - 128 pixels. -- Rewrote DimScreenPLoop() so that it should be slightly faster now. - Still has lots of AGI stalls, though. :-( - -May 8, 1998 -- Added detail mode setting to display options menu. -- Implemented horizontal pixel doubling. -- Added ds_colshift to go along with ds_colsize. -- Changed R_ExecuteSetViewSize() so that the view window it creates is - always a multiple of 16 bytes wide. -- Moved definition of rowbytes out of tmap.nas and into r_draw.c and - renamed it dc_pitch. Also created ds_colsize variable. Renamed - ASM_PatchRowBytes() to ASM_PatchPitch() and created ASM_PatchColSize(). -- Moved the call to I_BeginUpdate() in D_Display() after the call to - R_ExecuteSetViewSize(). This lets it update the display pitch - properly based on any changes to detailyshift. Previously, it would - use the old pitch for one frame before switching over, which is why - it was crashing yesterday. - -May 7, 1998 -- Started adding detail modes back in. Got vertical doubling working - although I ran into a few unexpected problems. Also crashes when I - switch from doubled to non-doubled. :-( -- Added fullscreen option to video modes menu. -- Created a "Video Modes" patch and changed the "Video Options" patch - to "Display Options." - -May 6, 1998 -- Fixed the drawing of the faceback on the status bar in network games. - (I can't believe I messed that up!) -- Added fragcount to player quit (netgame) messages. -- Added -noidle parameter to disable lowering of ZDoom's priority to - the idle class when the window loses the focus (so that running a - netgame on a single machine doesn't slow down too much because one of - the sessions only receives processor time during idle moments). -- Removed the need for the leading . in IP addresses for -net. -- Added support for different ports per machine in network code. -- Changed i_net.c so that Win32 platforms now print descriptive errors. -- Fixed -net parameter so that address list can end at +commands. -- Added player obituaries. - -May 5, 1998 -- Adjusted options menu code so that pressing ENTER, T, and D always do - their special functions when in the video modes menu and not just when - the current item is of type screenres. -- Hacked double buffering into PTC's idirectx.cpp. Why? Because it - improves compatibility with a lot of video cards under NT (like my - old one) that don't support locking the primary surface directly. -- Mucked around in PTC's idirectx.cpp for several hours and finally got - it to work properly in fullscreen. Yay! (I really hope a future release - has proper support for this built in.) - -May 4, 1998 -- Changed (PTC's) idirectx.cpp so that it allows Ctrl-Alt-Del in - exclusive mode. -- Looked through V_PrintStr2() and finally realized why it was crashing - on non-MMX machines: I failed to check the status of UseMMX before - calling EndMMX(). - -May 1, 1998 -- Downloaded PTC 0.72. It still gets slow on the blits, but at least now - I have the source code for it. -- Tried using PTC's BitBlt() inside I_Blit() and came across a weird - problem: The more blits I do, the slower they get. That sucks. -- Changed the focus-losing and gaining mechanism in i_input.c. Instead - of sending pause events, it just pauses the sound. Changing fullscreen - video modes caused the window to lose and regain its focus a bunch, and - it was messing up the pause sending code, sometimes leaving the game - paused after a mode change. -- Changed R_PlaneInitData() so that it allocates the fixed_t arrays - separately instead of all together. -- Played Blood for a little bit. That, and a prior suggestion concerning - rocket jumping made me decide to make a slight tweak to the freelook - code: You can now look down twice as far as before. - -April 30, 1998 -- Figured out why PTC clipping windowed modes larger than 512x384: - They were larger than the initial window size! I work around it - by resizing the window and then reinitializing PTC. -- Moved some variable declarations out of i_input.h and into - i_input.c, eliminating some in the process. -- Realized that C_AddNotifyString() really *was* perpetuating changes - to its input string. Now I make a copy of that and work with it to - save myself some headaches. Plus, the const identifier is now 100% - correct. - -April 29, 1998 -- Changed R_DrawColumn_ASM() and R_DrawTranslucentColumn_ASM() so - that they check the size of the column *before* looking into - ylookup and columnofs (thus avoiding the occasional page fault). -- Discovered that R_ExecuteSetViewSize() could be called outside of - D_Display(). In this case it was in G_DoLoadGame(), and that - messed things up when I used the -loadgame parameter on the command - line. Now R_InitBuffer() locks the screen before grabbing the - buffer pointer and pitch. - -April 28, 1998 -- Changed cvar() function so that if a cvar of the specified name - exists, it still changes the cvars flags. (i.e. it gets loaded from - the config file before this function is called.) -- Added win_stretchx and win_stretchy cvars to stretch the windowed - display. -- Fixed hang at shutdown: wasn't decrementing counter in I_WaitVBL(). -- Received and installed 128 MB of RAM and a 32x CD-ROM drive. :-) -- Got ZDoom working in a window through PTC. It doesn't do fullscreen - yet, but that's only because I haven't written any code to handle it - yet. It also gets into an infinite loop during shutdown. (Should be - easy to fix.) - -April 25, 1998 -- Started working on PTC-ized i_video.cpp. -- Weird palette problem now. When switching modes, ZDoom will only - very rarely set the palette properly. Me guessing it's a Win95 - problem, since I didn't see this under NT. Shouldn't really matter - since I'm switching to PTC anyway. -- Fixed fuzzoffset[] initialization. I was using screen[0]'s pitch - without first locking it to ensure that the value stored in the - screen was valid. - -April 24, 1998 -- Discovered I have a problem adjusting the fuzzoffset[] table - dynamically. Looks like it still keeps its old values. Will - investigate further tomorrow. -- Finished the video modes menu. My options menu code is nowhere near - as neat as I would have liked. Oh well... -- Implemented mode testing from the video modes menu. D_ProcessEvents() - was hacked to make it work. (There might be a better place, but this - was the first function I saw, and it works.) -- Figured it out: I wasn't reallocating negonearray when I resized the - screen. Doh! Moved its initialization from R_InitSprites() into - R_MultiresInit(). For consistancy, I now allocate screenheightarray - and xtoviewangle in R_MultiresInit() instead of V_SetResolution(), too. -- Noticed I seem to have a problem with the playersprites now. Some - columns aren't getting drawn completely. Which ones and how much is - missing seems to vary depending on the game state. This is worse the - wider the sprite is drawn. At 320 wide, I can't detect it, although - if it covered the entire width of the screen, it would probably pop - up. Don't know what's going on here, since it worked fine before. - When did this happen? - -April 23, 1998 -- Discovered that the boolean being used in i_video.c was only a byte, - so I looked through the standard header files, and it looks like - rpcndr.h is the culprit with this line: - typedef unsigned char boolean; - Went through all my files where I've defined __BYTEBOOL__ by hand and - changed all occurances of boolean to bool. Then I found out that that - caused problems with variables that had been declared as boolean in - header files, so I changed all the remaining instances of boolean to - bool. -- Started work on the video modes menu. - -April 22, 1998 -- Discovered I wasn't locking the back buffer in wi_stuff.c when - I wrote drew the background on it. Fixed. -- Added code to actual change the screen resolution and discovered I - wasn't reallocating the VisPlanes' top and bottom arrays, so you - couldn't switch to a screen larger than what you started with. Fixed. - -April 21, 1998 -- Started work on dynamic resolution changing. Most of it was already - done when I added the multires support. Just need to change the size - of the display surface now; everything else seems to works. -- Fixed evil bug in V_SetResolution(): I had been allocating - xtoviewangle[] with one too few angle_t's. Ouch. -- Fixed a bug in AddToHash() that caused it to "forget" the previous - contents of a bucket when a new entry was added to the beginning - of the bucket. -- Added a callback to the screenblocks cvar, so that ZDoom will sense - changes to it and adjust the screen as needed. -- ...I now allocate two screens for the status bar. If it's not scaled - I continue drawing to the screen as before and pretty much ignore the - second buffer. However, if the status bar is scaled, then I draw all - the changes into the second buffer and then blit the entire thing onto - the screen. It works, but it's also slower. -- Added support for scaling the status bar (use st_scale cvar). When I - did this, I noticed that V_DrawPatchStretched() looks horrid when it - draws multi-post columns, because it doesn't line them up properly. - Plus, the areas that got updated weren't being drawn in exactly the - same spot as what appeared on the screen, so... -- Changed status bar code so that widget coordinates are relative to - the status bar instead of the screen, which makes the next change - easier... - -April 20, 1998 -- Changed the status bar code so that the status bar surface is only as - wide as the status bar and not the underlying screen. -- Fixed the wipe: Inside wipe_doMelt(), I had neglected to account for - the fact that pitch desribed bytes, but d described shorts. -- Removed the use of DDraw's blitter inside I_Blit() since I was still - having problems with it. Now I do it myself, and it works. -- Fixed blitting: needed to make sure both surfaces were unlocked. -- Got the program running again. Blitting surfaces doesn't work yet. :-( - Neither do the wipes. (They skip every other line.) -- Removed the fractional part from the fps display. -- Got the code to a point where it builds again. - -April 18, 1998 -- Added new functions and changed some code in i_video.c to handle - screens as DDraw surfaces. -- Changed R_VideoErase() to take a rect as a parameter and call V_Blit(). - -April 17, 1998 -- Removed SCREENPITCH, SCREENWIDTH, and SCREENHEIGHT variables from - doomdef.c. Now I need to remove all references to them. -- Cleaned up v_video.c somewhat in preparation of integrating PTC with - the video code: created a screen_t structure; transferred SCREENWIDTH, - SCREENHEIGHT, and SCREENPITCH into the screen_t; added some SHORT() - macros where I had omitted them; and fixed some spots where I had - left SCREENWIDTH intact from the original Linux code when it was really - referring to screen pitch. Also added a small amount of code to handle - different bit depths. -- Moved registration of vid_* commands out of c_commands.c and into - i_video.c where they belong. -- Fixed Printf() routine in c_console.c so that it doesn't apply - printxormask to control characters. - -April 16, 1998 -- Added code to i_input.c so that it puts the game in the idle priority - class when the user switches to another window. It also pauses single - player games now, too. -- Added some code to scroll the sky lixe Hexen. Still need to make it - configurable, but at least I know it works. -- Tried making some taller (good-looking) skies. I sucked at it. -- Fixed R_DrawFuzzColumn_ASM so that it never draws columns slightly too - tall. (When drawing the odd pixels before the loop, I had been using - ebx and bl for two very different tasks. Now I use bh and bl instead.) - -April 15, 1998 -- Removed tutti-frutti effect for textures 1, 2, 4, 8, 16, 32, and 64 - units tall. Also allow textures taller than 128 units now. -- Tried holding the sky's vertical position constant when freelooking. - IMO, it's actually worse than letting it move: You can still see it - wrapping, and it looks weird, too. I guess I'll just have to draw - some taller skypics if I want something that really looks nice. -- Adjusted P_FindFloor() and P_FindCeiling() to check the health of - corpses intead of their tics to determine if they have been raised. -- Set the MT_SKULL height back to 56 units from the 30 I had previously - set it at, since they were occasionally getting stuck in the floor. - -April 14, 1998 -- Stayed on MAP30 for about 1.5 hours. MaxVisSprites got bumped all - the way up to 992, and it was slooowwww (except in the corners). Also - noticed that the plats would sometimes get stuck going up, and I - shot right through the resurrected corpses. Must fix tomorrow. - Me go bed now. -- Adjusted the heights of most things to make them better match - their image sizes. Some were okay as they were, while others were - way off. -- Did a very quick netgame to see how things looked. Some things are - too short (like the torches) and others are too tall (like the - barrels). -- For all intents and purposes, 3D collision detection is now done. - There is only one potential problem I can foresee: With enough - vertical velocity, an object could pass right through another - object in midair. I don't think situations like this will arise very - often (if at all), so I'm not going to bother rewriting all my new - code to fix it. At any rate, it's still a lot better than it used - to be. -- Added targettic to mobj_t to create a delay before missiles can - impact the thing that shot them. This fixes the problem of missiles - exploding in the shooter's face before they get anywhere. -- Adjusted P_FindFloor() to search neighboring blocks in the blockmap. - This solved the problem of occasionally falling into things. Did the - same thing to P_FindCeiling(). - -April 13, 1998 -- Worked on more thorough 3D collision detection code than my - previous attempt. (At least it doesn't crash now!) FIXME: - Missiles are often exploding right in front of the shooter's face. - It's still possible to land inside of monsters sometimes. -- PIT_RadiusAttack() can now throw things around in three dimensions. - The only real benefit of this is that it allows for rocket jumping. - (Which is still pretty cool and well worth the effort of coding it.) -- Made health bonuses and muzzle flashes translucent. -- Fixed bug with Arch-Vile resurrecting a 25% or 75% translucent - monster. Did equivalent thing for exploding missiles. -- Put idmus cheat and command back. -- Added CVAR_CALLBACK flag for non-latching cvars. -- Added map command to the console. -- Modified G_InitNew() and associated code to use skill cvar. -- Implemented proper cvar latching. -- Hooked localization code into g_level.c. This also cleaned up - the text patching code in d_dehack.c somewhat, since level names - and cluster messages are no longer special cases. - -April 12, 1998 -- Multi-language support is pretty much done. A nice benefit of this - is that it makes DeHackEd text replacement support easier. -- -iwad and -deh parameters now automatically append the appropriate - extension (.wad or .deh) if none is specified with them. -- IdentifyVersion() now sets gamemission according to which IWAD - it finds. -- Removed -shdev, -regdev, and -comdev parameters. -- Fixed inadvertant bug in st_new.c that prevented ZDoom from - working with the shareware IWAD. I had previously been loading - the ammo patches with W_CacheLumpName() which bombs out if it - can't find a named lump (like CELLA0 which isn't in the shareware - WAD). Now I check for the presence of the lump before I try to - load it. - -April 11, 1998 -- Created strutil utility to create string lumps for ZDoom. Also - created source files for strutil containing the English and French - translations. (Though English will still be stored in the - executable as a fallback and to assist with DeHackEd patch text - replacement.) - -April 10, 1998 -Not much done today: -- Added g_unlimitedammo cvar. -- Added optional fall damage code originally created by Andy Kempling. - -April 9, 1998 -- Fixed the pickup of health bonuses. Before, the bonuses maxed - out at deh_MaxHealth. Now they max out at deh_MaxSoulsphere. -- Added I_SetTitleString() so that we can once again display the - game banner at startup. -- Removed -wart parameter. -- Completely rewrote the tab completion code. :-) It still works - the same from the end-user's point of view, but now the code is - a whole lot cleaner and more flexible. - -April 8, 1998 -- Implemented tab completion for the console. The associated code - is really convoluted, but at least it works. -- Implemented monster infighting for DeHackEd patches. It - was really easy once I looked in the DeHackEd source and - figured out that it was modifying PIT_CheckThing(). Too bad - I didn't do this a day earlier... - -April 7, 1998 -- Updated the documentation and uploaded 1.12 to cdrom.com. -- Put the integer divide code back in FixedDiv_ASM(). - I'm pretty sure the real problem was with my overflow - detection code, which I fixed yesterday when I put in - the float code. It works properly now and always - rounds down. (Some code such as the sprite drawer assumed - that this was the case, but using floats rounded to the - nearest integer.) I just don't understand why the problem - didn't show up much sooner. - -April 6, 1998 -- Added am_showsecrets, am_showmonsters, and - am_showtime cvars. -- Added V_DrawPatchTranslatedCleanNoMove() and - V_DrawTextClean(). Changed console notify text - code and automap text code to clean scale their - text. -- Made a change to P_CrossSubsector() that ought - to speed things up marginally. -- Fixed a small bug in P_DivlineSide() that was - in the original id code. -- Rewrote FixedDiv_ASM() to use floating point - math, and it worked. Also removed division by - zero check, since it appears it's still being - called with b==0. It looks like DOOM doesn't - ensure that it never divides by zero and makes - an assumption about the way FixedDiv() will - handle these cases. -- #defined NOASM to disable the use of assembly - routines, and it seemed to run fine. Recompiled - with assembly routines except FixedDiv_ASM() and - it still worked. - -April 3, 1998 -- This crashing stuff is getting even weirder. At - first, if I disabled optimization in the release - build, it went away. Now it's showing up under - all configurations, and I haven't done anything - to the code. I'm at a loss as to what to do. :-( -- Fixed an obscure bug in FixedDiv_ASM(). When it - overflowed, it was popping esi instead of ebx. - Also added a check for division by zero. - -April 2, 1998 -- Did some bug hunting. The problem is happening in - P_CrossSubsector(), so it's likely something that - happens before then, since I never touched that - function. -- Moved the FPS drawer in I_FinishUpdate() before - the -devparm dot drawer. - -April 1, 1998 -- Added Andy Baker's stealth monsters code. Upon - tessting, a discovered the release build was still - crashing even without loading a .deh file. My guess - is that this is the same problem I had on the P60, - and adding the DeHackEd code just reorganized things - enough for the problem to show up on my machine too. -- Changed P_TouchSpecialThing() so that picking up a - power plays a surround sound. -- Continued DeHackEd support. Most text strings now - get replaced, and almost all miscellaneous info is - supported as well. Still crashes in the release build. - -March 31, 1998 -- Continued work on DeHackEd support. Everything except - miscellaneous info and text changing is supported. - Unfortunately, my release build is experiencing crash - problems not present in the debug build now. :-( -- Ripped the MHFX_LAXSPRITEROTATIONS fix out of - DOSDoom's r_things.c. - -March 30, 1998 -- Started work on DeHackEd support: things, frames, - and weapons done. Sounds mostly done. -- Added minimal code to handle changes to userinfo cvars. -- Changed player movement code to allow for very minimal - corrections to momentum while in mid-air. -- Did a quick test of z-checking for collisions. Needs - more work; disabled for now. -- Optimized FixedDiv_ASM() further using a neat absolute - value trick I discovered on a website somewhere. -- Did the same thing for P_BulletSlope(). One unexpected - twist: bullets always hit walls no matter what their slope. -- Added shoot up/down for projectile weapons with a - quick hack to P_SpawnPlayerMissile(). -- Moved ysheer out of player_t and into mobj_t as pitch. -- Changed P_ExplodeMissile() to set missile explosion - sprites translucent. -- Changed D_DoomMain() so that it always loads zdoom.wad - first instead of second. -- Added m_alloc.(c|h) so that I can finally check to - make sure I get all the memory I ask for with malloc(). -- Finished automap overlay. Use am_overlay cvar. -- Moved automap framebuffer boundary determination out of - AM_LevelInit() and into AM_Drawer(). Did other mucking - about in the automap code so it clips the automap to the - view window when the map is overlayed on top of it. - -March 29, 1998 -- Jotted down some code for truecolor routines. - -March 28, 1998 -- Worked on automap overlay. -- Changed C_DoKey() to return true if the key generated a - command, and false if it didn't. -- Automap can now rotate. Use am_rotate cvar to control it. -- Finished new HUD (for now). It gets the job done, and it's not - too cluttered. - -March 27, 1998 -- Continued work on new options menu: Removed old sound menu. - Created new menu title patches. Created controls menu. - Created video menu. - -March 26, 1998 -- Started work on the new options menu. -- Created binddefaults command. -- Created a bunch of menu_* commands to access the different - menus directly. Also added some of them to the default - bindings string. -- Fixed sky height bug. The key is that skytexturemid is NOT - resolution-dependant. It is a constant. -- Changed yesterday's sky height fix so that it is based on Doom - Legacy's aspect ratio correction rather than what DOSDoom did. - (BTW, this was not done in the 1.11 Doom Legacy source. :-) - -March 25, 1998 -- Fixed sky height with a little help from DOSDoom. -- Started work on the new HUD. Not yet sure what I like. -- Created the C version of Print2CharP_MMX. It sucks. I know there - must be a clever way to do it using bit shifts and masking, but - I don't feel like persuing it right now, since I have an MMX - machine, and MMX makes it very easy to do. - -March 24, 1998 -- Ran ZDoom on the Pentium 60 sitting next to me. It crashed whenever - I tried to enter a level. Some testing is obviously called for. :-( -- Added code to check for the presence of MMX support. -- Created misc.nas and moved the assembly versions of FixedMul() and - FixedDiv() into it. Also created an assembly inner loop for - V_DimScreen(). Also created an assembly routine to plot one conchar - to the screen (Print1CharP) and an MMX version that doubles the - conchar in size. -- Made command parameters in commands.txt consistant with other - parameter lists. (<> for required params, [] for ones that aren't.) - Also added brief descriptions of the different cvar types at the. -- Removed idmypos command. It was redundant with the - "toggle idmypos" command. - -March 23, 1998 -- Added dimamount and dimcolor (defaults to gold) cvars for - V_DimScreen() so that it can shade the screen to any color instead - of just darkening it (although it will revert to its old behavior if - translucency is disabled). -- Added assembly version of R_DrawFuzzColumn as well as a proper - assembly version of R_DrawTranslucentColumn(). -- Changed fuzztable in r_draw.c from 50 to 64 entries so that I can - use a simple mask in R_DrawFuzzColumn() instead of conditionals. - This should speed up that loop significantly (especially once it's - in assembly). Also removed references to frac and fracstep from - R_DrawFuzzColumn() since they weren't needed. -- Can't seem to get V_DrawPatchFlipped() to position patches properly - (they keep getting drawn too far to the left and up), so for now, - it just calls V_DrawPatchIndirect(). -- Added special case to V_DrawPatchStretched for full-screen patches. - Also added a scrn parameter to F_DrawPatchCol to accomodate this. -- Changed cyberdemon and spider mastermind sight and death sounds - in the cast finale to surround. -- Changed brain's pain sound to use ORIGIN_SURROUND2. That way, the - things it throws out won't override it. -- Added ORIGIN_AMBIENT3-4 and ORIGIN_SURROUND2-4 to s_sound.(c|h). - -March 19, 1998 -- Fixed UpdateCursorPosition() in i_input.c so that mouse - sensitivity is independent of the framerate. -- Increased speed of text wipe in f_finale.c. -- Added V_DrawRedTextClean(), V_DrawWhiteTextClean(), and - V_DrawTranslatedPatchStretched(), and V_DrawTranslatedPatchClean() - to v_video.c. -- Fixed bug in V_DrawPatchStretched(). Was using unsigned ints where - I should have used signed ints. -- Rewrote F_Ticker(). -- Specifying -nomusic no longer causes I_InitSound() to allocate - channels for MOD music. -- Changed several V_DrawPatch()es and V_DrawPatchDirect()s to - V_DrawPatchClean() and V_DrawPatchIndirect() in various source files. -- Added V_DrawPatchIndirect(), V_DrawPatchClean(), and - V_DrawPatchCleanNoMove() to v_video.c. -- Made lots of changes relating to level and cluster handling. -- Fixed problem in wi_stuff.c that prevented par times from appearing - on Doom II levels 12 and above. - -March 18, 1998 -- Changed idmus command to changemus. Now it expects its input - to be an actual song name. (Consquently, the idmus cheat is gone.) -- Moved stuff from S_music[] into LevelInfos[]; -- Changed all references to leveltime, totalsecret, totalkills, and - totalitems to level.time, level.total_secrets, level.total_monsters, - and level.total_items respectively. levelstarttic was never used; - got rid of it. -- Removed mapnames* arrays from hu_stuff.c and some ST_MAP* #defines - in st_stuff.c. -- Moved drawing of level name in automap out of hu_stuff.c into am_map.c. - -March 17, 1998 -- Started laying the framework for better customizability of maps. - (Any lump can be a map, use any map for the next and secret maps, - give custom maps a name, custom par times, etc.) -- Played at 640x480 for about 1.5 hours trying to get my machine - to crash. I have had a report of intermittant crashing possibly - related to high resolutions, but have been unable to duplicate - the problem on my machine. On a side note, 640x480 is way too slow. - Doom95 does ~32 fps at 640x400, and Duke 3D does ~25 fps at 640x480. - I get ~10 fps at 640x480 and ~12 fps at 640x400. Wish I knew how - they do it... - -March 16, 1998 -- Hacked in some code into S_ChangeMusic() to allow it to play songs - stored as individual files on disk. Added primarily because I - have a large collection of MODs, and I don't want to be forced - to pick which ones I want to listen to when I start the game - (by specifying them with the -file parameter). -- Discovered the Win32 Demo Programming FAQ. Now I can disable - code segment protection so self-modifying code can stay in - the same segment as all the other code instead of hiding in - the data segment. -- Put in the R_DrawColumn code from Doom Legacy. Took me awhile to - realize that ylookup and columnofs are now pointers instead of - arrays. - -March 14, 1998 -- mb_used changed to a float, so the heap doesn't need to be an - integral number of megs in size. -- Added -heapsize parameter to set size of zone heap at run time. -- Increased size of demoname[] from 32 to 256 chars. -- Rewrote snippets of -playdemo code so that demos can be played - from any directory and with any path. -- Removed all references to basedefault, since it's been replaced - by configfile. -- Fixed a really dumb bug in FixPathSeperator. Was initializing - c to progdir instead of path. Now you can add lumps in different - directories, and still refer to them by name. -- Reformatted w_wad.c for 4 character tabs. -- Looked through the PTC archive. It needs better documentation, but - I think I'll probably switch to it for the third release of ZDoom. - -March 13, 1998 -- Added back some of the stuff I had originally added to w_wad.c. -- Borrowed BT_JUMP and BT_DUCK from DOSDoom. Also added jumping code. -- IDFA and IDKFA now include the backpack. -- Downloaded Prometheus Truecolor. Trying to decide if I should use it - for high- and true-color support. -- Added support for caching the translucency tables to disk. - (TODO: Compress this file.) -- Added support for 25% and 75% translucency (because DOSDoom 0.60 - has it.) -- Copied w_wad.c and w_wad.h from DOSDoom 0.60. (decided not to - bother trying to get PACK support in) -- Moved ConChars data into zdoom.wad as an ordinary patch. zDoom now - generates the neccessary data on the fly. -- Removed MAXCEILINGS limit. (was 30) -- Removed MAX_DEATHMATCH_STARTS limit. (was 10) -- Removed MAXPLATS limit. (was 30) - -March 12, 1998 -- Rewrote P_FindNextHighestFloor() so that it doesn't use an internal - array (thus also removing the MAX_ADJOINING_SECTORS limit). -- Removed some files from the code directory I had added but never used. -- Removed MAXSEGS limit. (was 32.. What are solidsegs anyway?) -- Removed MAXDRAWSEGS limit. (was 256) -- Now allocate R_DrawSprite()'s clipbot and cliptop arrays inside - R_MultiresInit() instead of each time the function is called. Should - have done this in the first place, but I obviously wasn't thinking. - One particularly sprite-laden scene went from ~25 fps to almost 35 fps. -- Created R_MultiresInit() function. Now V_SetResolution() calls it, and - it calls the various R_*() functions related to supporting multiple - resolutions. -- Changed the default am_gridcolor to a decent color that actually fits - with the rest of the color scheme. -- Took a cue from WinDoom and split my keyboard handler between the - DirectInput code and the window's message handler. Ugly, but at least - now it handles Pause and Alt-Tab properly. (The original problem with - Alt-Tab, incidentally, was that I was failing to reacquire the keyboard - when I regained the input focus.) -- Inserting text at the command line in the console now works properly. -- Pressing ` to hide the console now clears the command line. This is - the same behavior as Quake, but previously only Escape would clear the - command line in ZDoom. I found that to be too annoying. -- Pressing up and down arrow keys in the console to scroll through the - history now ensures that the cursor is always visible. -- Changed BuildString() so that if it is called with argc==1, it just - returns a copy of the string unmodified instead of sticking it in - quotes if it contains a space. -- Renamed setcolorbyname to setcolor. The former was just too long. -- Added setcolorbyname command and corresponding V_GetColorStringByName() - function and X11R6RGB lump listing a bunch of named colors. - -March 11, 1998 -- Added crosshair cvar and corresponding code to draw the crosshair. - Put some cheezy crosshairs in zdoom.wad, too. (Now if only you could - actually aim up and down...) -- Added V_DrawLucentPatch() function to draw translucent patches. -- Added freelook, lookspring, lookstrafe, m_pitch, m_yaw, m_forward, - and m_side cvars. - -March 10, 1998 -- Added invertmouse cvar. -- Put the colon back into the "startskill..." message in d_net.c. -- ylookup[] and columnofs[] tables in r_draw.c are now allocated - dynamically based on screen size. Hacked this into R_InitFuzzTable(). -- Status bar finally properly draws borders to the left and right - of itself if the screen is wider than it is. -- Added documentation for am_* and developer cvars in commands.txt. -- Discovered that lines not yet seen but visible thanks to the - automap powerup were not color-configurable. Changed it. -- Changed all color #defines in am_map.c into ints that get - initialized from color values in cvars each time - AM_initVariables is called. Also added back support for the - original automap color scheme regardless of what the user's colors are - through the am_usecustomcolors cvar. -- In single player, automap can now draw the player's arrow using - any color and not just WHITE. -- Removed all references to lightlev in am_map.c, including the - AM_updateLightLev() function. The "strobe" effect was really cheap - anyway, never used, and will be fairly difficult to implement - cleanly when I make the automap colors customizable. -- Changed I_Error() call in ParseHex() to a Printf() call. -- Removed "extern byte *demo_p;" from d_protocol.c. It didn't need to - be there anyway. -- Added V_GetColorFromString() to v_video.c. -- Changed BASEYCENTER #define in r_things.c from - (100-((SCREENHEIGHT-200)/12)) to (100). PlayerSprites are now drawn - in approximately the same location at all resolutions. - -March 9, 1998 -- Seem to have finally fixed the problem with my visplane growing - code. Using calloc() in PrepVisPlanes() instead of malloc() seems - to have solved all my woes. Now on to something else! -- Boy do I feel dumb. Found a bug in C_DrawConsole () where the - revealed variable wasn't always being set before it was used. - Now I rewrote it so that it doesn't need to calculate - revealed at all. It ought to be marginally faster, too (although - it probably won't make a bit of difference during gameplay). - -March 7, 1998 -- Still working on MaxVisPlanes bug. This is proving to be more - elusive than I had expected, since VC++ is being most unhelpful. - The bug doesn't show up in the debug build (heap checking doesn't - even catch anything), and I can't use the debugger on the release - build where the bug does show up! Grrr! - -March 6, 1998 - -- Started changing MAXVISPLANES constant into the growing integer - MaxVisPlanes. Moved some code from R_PlaneInitData() to - R_InitPlanes() and added the GetMoreVisPlanes() function to - allocate more planes. Strange crashing bugs in release but not - debug builds. Probably stomping on memory somewhere. -- Fixed stupid bug in I_ShutdownSound: was calling MIDASfreeSample() - when I should have been calling MIDASfreeChannel(). Also moved - freeing of channels to another for loop (probably not necessary, but...). -- Fixed -file parameter to work with console commands on the - command line. -- Changed MAXVISSPRITES constant into the integer MaxVisSprites, - which is the size of the vissprites[] array. This value can now - grow as needed to accomodate more vissprites. -- Added developer cvar and DEVONLY macro. -- Functions in i_music.c now pay attention to the looping flag. -- C_AddNotifyString() now pays attention to show_messages cvar. -- Added support for specifying console commands on the command line. - +March 27, 2008 +- Changed D3DFB to explicitly request double buffering instead of assuming + that the drivers will treat a BackBufferCount of 0 as a request for + double buffering. +- Fixed: Unsetting a cvar did not remove it from the list of tab + completions. +- Added "" as a synonym for "nullimage" in SBARINFO. +- Fixed: MAKESAVESIG's stringifier in version.h did not work as expected. + It stringified the passed macro name, not the value of the macro. +- Moved DCajunMaster off the DObject hierarchy. +- Changed DCajunMaster::getspawned into a TArray of FStrings. It was + mysteriously being left pointing to uninitialized memory during the + final GC at exit and crashing. +- Fixed: The code that removed hexdd.wad from the list of IWADs when + hexen.wad was not present did not work. + +March 27, 2008 (Changes by Graf Zahl) +- Fixed: DCajunMaster::End was missing a write barrier for getspawned. The + same problem in D_DoomMain. +- Made bglobal a pointer because it was causing problems with the garbage + collector. + +March 26, 2008 +- Added uppercase copies of the IWAD names to the IWAD search for Unix land. +- Added FMOD_OPENONLY to the callback version of CreateStream() to prevent it + from doing prebuffering of the song. This was causing the Linux version to + hang while waiting for input from the pipe, since Timidity hadn't been + started yet. I tried using a select call in the FillStream() method, but it + always seems to return the pipe as having nothing available. Unfortunately, + the game still falls all over itself if Timidity isn't available. Instead + of execvp failing nicely, X errors kill the game. I don't know why it's + doing that. My advice for Linux music: Skip Timidity++ and get a DLS patch + set (/WINDOWS/system32/drivers/gm.dls is probably the most common by far) + and set the snd_midipatchset cvar to point to it. It's faster and also + sounds a whole lot better than the crappy freepats Ubuntu wants to install + with Timidity++ (thank goodness I have the official patches from a real + GUS so I don't need to use them). +- GCC fixes. + +March 26, 2008 (Changes by Graf Zahl) +- Fixed: After starting new music the music volume has to be reset so that + the song's relative volume takes effect. +- Removed the arbitrary 1024 bytes limit when the file being played is a MIDI + file. I had a D_DM2TTL that's only 990 bytes. +- Restructured I_RegisterSong so that $mididevice works again and also supports + selecting FMOD. +- Added Jim' Linux fix. +- Added MartinHowe's fix for mugshot display in status bars. + +March 25, 2008 +- The garbage collector is now run one last time just before exiting the game. +- Removed movie volume from the sound menu and renamed some of the other + options to give the MIDI device name more room to display itself. +- Moved the midi device selection into the main sound menu. +- Added FMOD as MIDI device -1, to replace the MIDI mapper. This is still the + default device. By default, it uses exactly the same DLS instruments as the + Microsoft GS Wavetable Synth. If you have another set DLS level 1 patch set + you want to use, set the snd_midipatchset cvar to specify where it should + load the instruments from. +- Changed the ProduceMIDI function to store its output into a TArray. + An overloaded version wraps around it to continue to supply file-writing + support for external Timidity++ usage. +- Added an FMOD credits banner to comply with their non-commercial license. +- Reimplemented the snd_buffersize cvar for the FMOD Ex sound system. Rather + than a time in ms, this is now the length in samples of the DSP buffer. + Also added the snd_buffercount cvar to offer complete control over the + call to FMOD::System::setDSPBufferSize(). Note that with any snd_samplerate + below about 44kHz, you will need to set snd_buffersize to avoid long + latencies. +- Reimplemented the snd_output cvar for the FMOD Ex sound system. +- Changed snd_samplerate default to 0. This now means to use the default + sample rate. +- Made snd_output, snd_output_format, snd_speakermode, snd_resampler, and + snd_hrtf available through the menu. +- Split the HRTF effect selection into its own cvar: snd_hrtf. +- Removed 96000 Hz option from the menu. It's still available through the + cvar, if desired. +- Fixed: If Windows sound init failed, retry with DirectSound. (Apparently, + WASAPI doesn't work with more than two speakers and PCM-Float output at the + same time.) +- Fixed: Area sounds only played from the front speakers once you got within + the 2D panning area. + +March 25, 2008 (Changes by Graf Zahl) +- Added Karate Chris's submission for multiplayer Strife conversations. +- Increased the limit for 'imp/active' to 6. This sound definitely benefits + from a higher limit. +- Fixed: $limit should not apply to sounds played from the menu. +- Fixed: The SNDSEQ parser tried to set bDoorSound before actually creating + the sound sequence data. +- Changed Lemon so that it always writes the header. It still kept recompiling + the grammar over and over again once it had been changed locally. +- Fixed: ANIMATED allowed animations between different texture types. +- Added a debuganimated CCMD that can be used to output some information + if a WAD shows broken animations. + +March 24, 2008 +- Removed xlat_parser.h from the repository. Lemon was always being run on + xlat_parser.y because both files had the same time stamp after an update, + and Lemon only rewrites the header file if it's changed. +- Added $volume SNDINFO command. This is multiplied with the volume the sound + is played at to arrive at the final volume (before distance attenuation). +- Added the CHAN_AREA flag to disable 3D panning within the min distance of a + sound. Sector sound sequences (except doors) use this flag. +- Added the CHAN_LOOP flag to replace the S_Looped* sound functions. +- Restored the sound limiting. + +March 24, 2008 (Changes by Graf Zahl) +- Fixed: THe handling for enum values in Xlat was incorrect. The rule with + value assignment must set the counter one higher than the current value. +- Fixed: The definition of enums in the Xlat grammar was right-recursive + which could create stack overflows in the parser. Made it left-recursive as + recommended in Lemon's docs. +- Added Thomas's submissions for decal assignment to puffs and NOINFIGHTING flag. +- Reverted changes of r715 in v_collection.cpp because they broke loading + of status bar face graphics belonging to skins. +SBARINFO update #15 +- Fixed: Monospacing fonts wasn't quite correct. +- Fixed: The new mug shot code forgot to use the first arg of drawmugshot (the + one that picks the default sprite prefix). +- Added: lowerHealthCap variable to SBarInfo, which is set to true by default. +- Added: ininventory event to SBarInfo to detect if one or two items are in (or + not in) the player's inventory. +- Added: The ability to print global vars using drawnumber. I need someone to + test it though. +- Added: aspectratio command to detect what the user's aspect ratio is. +- Added: missing spacing argument to drawstring. +- Changed the sbarinfo display routine for drawnumber to not use cmd.value to + store what it is about to display. Now it uses a new variable. +- More conversions from DrawImage to screen->DrawTexture. I think only the + inventory bar drawing functions have to be changed now. + +March 23, 2008 (Changes by Graf Zahl) +- Fixed: The Sequence pointer in ASoundSequenceSlot was not declared as + a pointer and it was missing both read and write barriers. +- Fixed: The sector translators must clear unused bits because they might + render a sector's special inoperable. +- Expanded the args for MAPINFO special actions to 32 bit integers as in + the rest of the game. +- Fixed: The specialaction list was not copied properly when transferred + from the defaultinfo. +- Fixed: The defaultinfo for MAPINFO wasn't cleared fully after MAPINFO + parsing was completed. +- Made Doom-format linedef translators a map property so that it's easier + to define replacements or extensions. + +March 22, 2008 +- Changed MIDI playback to not bother playing super short songs that don't + contain enough music to fill the initial output buffers. +- Removed the read barrier around ADehackedPickup::RealPickup. If the real + pickup is picked up, it may very well destroy itself before the dehacked + wrapper's stubs that use it are called. +- Reverted revision 840. For a file we don't want end users to be touching, + making DEHSUPP plain text sends out mixed messages: "Don't mess with this. + Oh, by the way, it's plain text now to make it easier for you to edit." + Is there some reason other than a desire to do away with binary lumps to + make the distributed lump text? +- Added a new speakermode for Stereo + HRTF: "Headphones". This is the only + way to get the HRTF low pass filter effect now. +- Fixed: No more than one sector could make noise at once. +- Trying out sound without varying priorities again. +- Fixed: Need to use setSpeakerMix to let 2D sounds (aka streamed music) use + their full volume range. + +March 22, 2008 (Changes by Graf Zahl) +- Added sector type translation to xlat_parser and removed the old sectorx + lump. +- Added Line_SetTextureOffset special. +- Added 'allowprotection' keyword to terrain definitions to allow damaging + flats that don't damage players with a radiation suit. +- Fixed: SNDINFO rolloff setting for Strife was missing. +- Added more options to Light_ForceLightning: Setting the first arg to 0 + will behave as before, setting it to 1 will create exactly one lighting + and setting it to 2 will terminate lightning for the current level + completely. And it will also work on maps that don't have lightning set + in MAPINFO now. +- Added: Sector movement that causes deep water to change its height now + will trigger associated sector actions and adjust the actor's water level. +- Fixed: The serializer for side_t::part never read the texture information + from a savegame. +- Fixed: side_t::StopInterpolation called setinterpolation instead of + stopinterpolation. Also moved the clearinterpolation call in + P_SetupLevel after the P_FreeLevelData to make absolutely sure that + nothing in there can leave an interpolator behind by accident. +- Applied Linux fixes by Jim. +SBARINFO update by Blzut3: +- Fixed: the playerclass command needed a null pointer check to prevent + crashing on respawn. +- Fixed: Mug Shot states were not reset on respawn. +- Removed keepoffsets flag since apparently it was keeping the offsets by + default. The means that the only thing not affected by the offsets was using + nullimage as a background. Since I wasn't able to get a result I liked I'm + going to say that if you want a black background with high res positioning + you will have to create your own bar image. Maybe I'll fix it some other + time. +- Added: monospacefonts variable which allows for all of the fonts to be + monospaced by a specified character (from their fontset of corse). +- Made SBarInfo recognize the bar names for the Strife popups but they don't + do anything beyond that. The names are: popuplog, popupkeys, and popupstatus. +- Started converting the drawing routine to be more flexable towards high + resolution status bars. (Only did one call so far.) + +March 21, 2008 +- Fixed: Actor-less sounds that aren't played on CHAN_AUTO should still be + subject to channel overriding. +- Re-added priority selection based on sound usage. +- Reduced the number of virtual channels to match the number of real + channels. +- Added customizable rolloff, including Doom's standard linear gain rolloff. + SNDINFO commands are: + $rolloff -- linear gain (like Doom) + $rolloff linear -- linear volume + $rolloff log -- logarithmic + $rolloff custom -- use SNDCURVE lump + Anything closer than min distance is full volume and anything further than + max distance is inaudible. Logarithmic rolloff does not have a maximum + distance; it has a scalar that controls how quickly the volume drops off + instead. + +March 21, 2008 (Changes by Graf Zahl) +- Disabled scrolling of 3DMIDTEX textures. Due to the special needs this + cannot work properly. +- Added new Scroll_Wall special to allow more control over wall scrolling. + Since it uses fixed point parameters it can only be used in scripts though. +- Added flags parameters to all wall scroller specials that didn't use + all 5 args. +- Separated scrolling of the 3 different texture parts of a sidedef. + While doing this I did some more restructuring of the sidedef structure + and changed it so that all state changes to sidedefs that affect rendering + have to be made with access functions. This is not of much use to the + software renderer but it allows far easier caching of rendering data + for OpenGL because the only place I need to check is in the access functions. +- Added Karate Chris's ThingCountSector submission. +- Made texture indices in FSwitchDef full integers. Since that required + some data restructuring I also eliminated the MAX_FRAMES limit of 128 + per switch. + +March 20, 2008 +- Removed some debug output from SBarInfo::ParseSBarInfo(). +- Fixed: Heretic linetype translations included the wrong file. +- Removed all 2D sound positioning code from s_sound.cpp. Everything uses + FMOD's 3D engine now. +- Removed all the channel selection code from s_sound.cpp. FMOD has code to + handle this sort of thing, so let's use it. +- Replaced S_StopSoundID() with S_CheckSingular(). There is no longer a limit + on the number of copies of a particular sound that can be playing at once, + aside from Strife's special singular sounds. (Sorry, Heretic and Hexen.) + Consequently, the SNDINFO $limit command is now ignored. +- Removed ATTN_SURROUND, since FMOD Ex doesn't exactly support it, and it + only worked as intended on stereo speakers anyway. +- Cleaned out ancient crud from i_sound.cpp. + +March 20, 2008 (Changes by Graf Zahl) +- Fixed: A_CustomMissile with aimmode 2 ignored spawnofs_xy. +- Changed savegame versioning so that the written version is never lower + than the minmum one reported as compatible. +- Added mirrored movement modes for linked sectors. +- Added Eternity-style initialization for linked sectors as a new subtype + of Static_Init. +- Added linked sectors. The control sector determines how they move but if + any one of the linked sectors is blocked, movement for all linked sectors + will be affected. This will allow lifts consisting out of more than one + sector without the risk of breaking them if only one of the sectors is + blocked. +- Fixed: A_Mushroom created an actor on the stack. + +March 19, 2008 +- Fixed: lempar.c needs to specify the __cdecl calling convention for malloc + and free under VC++. +- Fixed: The source no longer built with GCC. + +March 19, 2008 (Changes by Graf Zahl) +- Added a new parameter to all crushing action specials that selects + which crushing mode is used: 0 uses the game's default for compatibility, + 1 uses Doom's mode (crushers continue to move while damaging any actors ) and + 2 uses Hexen's mode (crushers stay at blocking actor's top until they die). + Since Generic_Crusher already used all 5 args I created a second version for + Hexen crushing mode. +- Added PICKUP flag to DECORATE. +- Integrated xlatcc into ZDoom.exe so that the linedef translation files + don't need to be compiled and can be stored as text in zdoom.pk3. +- Removed thingdef_specials.h and thingdef_specials.gperf and replaced + line special definition with something that automatically gets updated + if new specials are added. +- Added copyright/license headers to a few files. +- Fixed: ACS SetMugShotState needs to check the StatusBar pointer for the + proper object type. +- Move SBarInfo loading code in d_main.cpp into a static method of DSBarInfo. +- Removed dobject.err from the repository. It only contained a list of compiler + errors for some very old version of dobject.cpp. +- Fixed: A_JumpIfCloser was missing a z-check. +- Added Blzut3's SBARINFO update #13: + - Split sbarinfo.cpp into two files sbarinfo_display.cpp and sbarinfo_parser.cpp + - Rewrote the mug shot system for SBarInfo to allow for scripting and custom + states for different means of death. + - SBarInfo now loads all SBarInfo lumps instead of just the last one. Clashing + status bar definitions will now be cleared before the bar is read. + - Fixed: When using transparency with bars the new drawing method (bg over fg) + didn't work. In the case that the border value is set to 0 it will revert to + the old method (fg over bg). + - Fixed: drawbar lost any high res information it was given. + - Added: ACS command SetMugShotState(str state) which sets the mug shot state + for the activating player. + - Added: keepoffsets flag to drawbar. When set the offsets in the fg image will + also be applied when displaying the bar. + +March 18, 2008 +- Added a cheap pitch shifting for underwater environments that should be fairly + close to Duke's. It sounds okay for some sounds, but others like the BFG, where + the timing of the sound actually matters, don't sound good. I shall have to + replace it with a real pitch shifter DSP unit. +- Removed hardware 3D sound support, since software is cooler. +- Fixed the TArray serializer declaration. + (Thank you for your warnings, GCC! ;-) +- Changed root sector marking so that it can happen incrementally. + +March 18, 2008 (Changes by Graf Zahl) +- VC++ doesn't seem to like the TArray serializer so I added a workaround + to be able to save the 3dMidtex attachment info. +- Fixed: The TArray serializer needs to be declared as a friend of TArray + in order to be able to access its fields. +- Since there are no backwards compatibility issues due to savegame version + bumping I closed all gaps in the level flag set. +- Bumped min. Savegame version and Netgame version for 3dMidtex related + changes. +- Changed Jump and Crouch DMFlags into 3-way switches: + 0: map default, 1: off, 2: on. Since I needed new bits the rest of + the DMFlag bit values had to be changed as a result. +- fixed: PTR_SlideTraverse didn't check ML_BLOCKMONSTERS for sliding + actors without MF3_NOBLOCKMONST. +- Added MAPINFO commands 'checkswitchrange' and 'nocheckswitchrange' + that can enable or disable switch range checking globally per map. +- Changed ML_3DMIDTEX to force ML_CHECKSWITCHRANGE. +- Added a ML_CHECKSWITCHRANGE flag which allows checking whether the + player can actually reach the switch he wants to use. +- Made DActiveButton::EWhere global so that I can use it outside thr + DActiveButton class. + +March 17, 2008 (Changes by Graf Zahl) +- Changed P_LineOpening to pass its result in a struct instead of global + variables. +- Added Eternity's 3DMIDTEX feature (no Eternity code used though.) + It should be feature complete with the exception of the ML_BLOCKMONSTERS + flag handling. That particular part of Eternity's implementation is + sub-optimal because it hijacks an existing flag and doesn't seem to make + much sense to me. Maybe I'll implement it as a separate flag later. + +March 17, 2008 +- Fixed: The botinfo field of DCajunMaster was improperly listed as an object + pointer. + +March 16, 2008 (Changes by Graf Zahl) +- Fixed: FreshThinkers's max. index is MAX_STATNUM so the code shouldn't + to access FreshThinkers[MAX_STATNUM+1]. + +March 15, 2008 +- Fixed: The only time bestslideline is ever NULL is before it ever gets set. + That means my P_BounceWall() "fix" from March 6 wasn't really a working fix. +- Fixed: If an object is flagged for euthanization while it's in the gray + list, it should just be ignored during the propagation stage. +- After sleeping on it and realizing what was really going in, I generalized + the inventory fix from the 13th: The actor is flagged by Destroy(), then it + is later inserted into the thinker list by DThinker::SerializeAll(). So + rather than unlinking the skipped player from their inventory, just make + sure any flagged thinkers aren't inserted into a list. +- Fixed: FCanvasTextureInfo::Viewpoint needed a read barrier, and the whole + list should serve as a root. + +March 14, 2008 (Changes by Graf Zahl) +- fixed: A_PainShootSkull was missing a NULL pointer check for the spawn type. +- implemented Vavoom's vertex height things (1504, 1505) that can explicitly + define slopes for triangular sectors. The height is specified as the thing's + z-coordinate. + +March 14, 2008 +- Reimplemented SPC playback as a custom codec for FMOD. +- Removed spc_frequency, because snes_spc only supports the SPC's native + frequency of 32000 Hz. + +March 13, 2008 +- Fixed: When returning to a hub map, inventory belonging to the temporary + copies of the players stored in the archive would be destroyed and break + apart the STAT_INVENTORY thinker list. Now they aren't destroyed while + loading the archive but are unlinked from the inventory list instead, so + the garbage collector will get them later. +- Changed pointer substitution to return the number of pointers changed. + +March 13, 2008 (Changes by Graf Zahl) +- Fixed: Pointer substitution changed the pointers for the thinker ring list + resulting in a freeze. + +March 12, 2008 +- Fixed: DACSThinker::ActiveThinker was missing a read barrier. +- Loading a save game now initiates a collection. +- Added a finalization cost to the sweep stage. +- Fixed: D_dehacked.cpp/PatchThing() allocated an actor on the stack. +- Changed the sentinels in the thinker lists into proper thinkers. The old + way wasn't playing well with the write barriers. +- Fixed: DFrameBuffer::WriteSavePic needs to fix the canvas in place while + using it. +- Fixed: The sound system was updated every frame, which is a complete waste + of time. Doing it only once each tic is quite sufficient, since nothing + really moves between tics, even if the display makes it look otherwise. + +March 12, 2008 (Changes by Graf Zahl) +- Fixed: The SimpleCanvas in FCanvasTexture must be declared as a soft + root to the garbage collector. +- Changed DObject's pointer substitution so that the pointers inside an + object are handled by a virtual function. This allows subclasses to + implement their own handling if they need it. +- Bumped the minimum savegame version because the current version crashes + each time an old savegame is loaded. + +March 11, 2008 +- Removed lots of spc_* cvars that are no longer meaningful and changed + spc_amp from a x.4 fixed point number to a normal float. +- Switched SPC playback from the external SNESAPU.DLL to Blargg's LGPL + snes_spc library. I've compiled it with the fast DSP rather than the + highly accurate one, since I didn't notice a meaningful difference between + the two in my limited testing. In short: SPC playback is now built in to + ZDoom. You don't need to download anything extra to make it work, and it + also works on Linux as well as Windows (though building with Linux is + currently untested). +- Fixed: Stereo separation was calculated very wrongly when in 2D sound mode. + +March 10, 2008 +- EAX is a pain in the butt to get it to work reliably. Why? I can get the + reverb to work just fine with software, but with hardware, I hear nothing + special at all. +- Fixed: Sounds apparently don't default to location 0,0,0 so I need to set + that explicitly for 2D sounds in 3D mode. +- Fixed: I had forgotten to actually set the head relative flag for 2D sounds + played in 3D. +- Fixed: Reverb was applied to digital music in software 3D mode. I tried + turning off reverb for 2D sounds too, but that turned it off for _all_ + subsequent sounds and not that specific channel. + +March 9, 2008 (Changes by Graf Zahl) +- fixed: StreamSong::SetPosition required a NULL pointer check. +- fixed: The release build still linked to the old FMOD version. +- fixed: SPCSong only works for Win32 so its definition must be excluded for Linux. + +March 8, 2008 +- Fixed: If you wanted to make cleandep with MinGW, you had to specifically + specify Makefile.mingw as the makefile to use. +- Added a normalizer to the OPL synth. It helped bring up the volume a little, + but not nearly as much as I would have liked. +- Removed MIDI Mapper references. It doesn't work with the stream API, and + it doesn't really exist on NT kernels, either. +- Reworked music volume: Except for MIDI, all music volume is controlled + through GSnd and not at the individual song level. +- Removed the mididevice global variable. +- Added back support for custom streams. + +March 7, 2008 +- I think the new FMOD Ex code should support everything the old FMOD 3 code + did, sans custom streaming sounds. +- Removed snd_midivolume. Now that all music uses a linear volume scale, + there's no need for two separate music volume controls. +- Increased snd_samplerate default up to 48000. +- Added snd_format, defaulting to "PCM-16". +- Added snd_speakermode, defaulting to "Auto". +- Replaced snd_fpu with snd_resampler, defaulting to "Linear". +- Bumped the snd_channels default up from a pitiful 12 to 32. +- Changed snd_3d default to true. The new cvar snd_hw3d determines if + hardware 3D support is used and default to false. +- Removed the libFLAC source, since FMOD Ex has native FLAC support. +- Removed the altsound code, since it was terribly gimped in comparison to + the FMOD code. Its original purpose was to have been as a springboard for + writing a non-FMOD sound system for Unix-y systems, but that never + happened. +- Finished preliminary FMOD Ex support. + +March 6, 2008 +- Fixed: If P_BounceWall() can't find a wall when it does its trace, but it + was entered because a line blocked the projectile, then it should still use + that blocking line for the bounce. +- The full master volume SysEx is now always sent to the MIDI device, even if + it seems to have a working volume control. +- Renamed music_midi_stream.cpp to music_midi_base.cpp. +- Moved the WinMM MIDI code into a new container class. +- Fixed: StatusBar and screen need to be barriered, because they are roots + but can also change at runtime. +- Fixed: Objects that are forcibly deleted outside the GC need to be removed + from the gray list too. + +March 5, 2008 +- Fixed: Thinkers needed write barriers when they were removed from their + lists. +- Fixed: DLevelScript::Link() and Unlink() needed write barriers. + +March 4, 2008 +- Moved the identical code between the MUS and MIDI streamers into a new base + class so that all the low-level details of MIDI streaming are kept in + one place. +- Converted the SMF MIDI playback to use the same MIDI streams as MUS + playback. +- Moved MUS playback back into its own thread so that it can continue + uninterrupted if the main thread is too busy to service it in a timely + manner. +- Fixed: The MEVT_* values are not defined shifted into their spot for a + MIDIEVENT, so I need to do it myself. +- Fixed: Pausing a MUS and then changing snd_midivolume caused the paused + notes to become audible. + +March 3, 2008 +- Changed MUS playback to use MIDI streams, like it did during the early days + of ZDoom, except now the entire song isn't prebuffered in large chunks, so + I can insert MIDI events into the playback with fairly low latency. This + should offer more precise timing than the combination of low-level MIDI and + WaitForMultipleObjects timeouts that it replaces. +- Fixed: PTR_BounceTraverse only checked for projectiles that were too + high to pass through two-sided lines, but not ones that were too low. +- Fixed: SBARINFO couldn't detect the extreme death damage type for the + player face animation. + +March 1, 2008 (Changes by Graf Zahl) +- fixed: A_CountdownArg used 0 based indices although all uses of it assumed + it is 1-based. +- added MF5_DONTRIP flag. +- added CheckActorFloorTexture, CheckActorCeilingTexture and + GetActorLightLevel ACS functions. +- added IF_ADDITIVETIME flag to create powerups that add their duration + to the one of the currently active item of the same type. +- fixed: bouncecount wasn't decreased when bouncing on walls. +- Added MF5_ALWAYSRESPAWN and MF5_NEVERRESPAWN flags that selectively + enable or disable monster respawning regardless of skill setting. +- Prettified deprecated flag handling. +- Fixed: When starting a level while the music has been paused S_Start has + to stop the old music so the new one always starts at the beginning. +- Fixed:: AActor::master was not serialized. +- Fixed: Sound targets pointing to dead players should be cleared before + respawning the player. +- Fixed: When the DONTMOVE flag is set A_Chase must not call P_NewChaseDir. +- Changed PowerupGiver initialization so that the actual powerup class is looked + up during postprocessing. +- Gave Strife's instant death sector type its own damage type. + +February 29, 2008 +- Changed the default GC parameters to make it run more aggressively. +- Added NULL checks to the GC::WriteBarrier() wrappers. +- Fixed: The DObject destructor set GC::SweepPos incorrectly if it pointed + at that object being deleted. +- Added "soft roots" to the garbage collector. These are similar in + purpose to setting the OF_Fixed bit, but they behave as full-fledged roots + as far as the collector is concerned, so any objects reachable through + them will not be collected. +- Added support for the OF_Fixed bit. This is ONLY for simple objects which + do not contain pointers to other objects, because all it does is prevent + an object that is otherwise dead from being freed. It does not include + the object in the propagate stage if it is unreachable, so any objects + that are only reachable through it will still be freed unless they are + also fixed. +- Fixed: R_SetupAddClampCol() checked add4cols' memory instead of + adclamp4cols' memory when deciding if it should skip modification. + +February 28, 2008 +- Fixed: The colormap changes by column, so the assembly rt_* routines need + to be setup for every column group, not once per image. +- Fixed: rt_Translate1col() had a couple of bugs. + +February 27, 2008 +- Added assembly versions of rt_add4cols and rt_addclamp4cols. +- Added a read barrier to FArchive::SerializeObject() to make sure that + objects that are being euthanized are not stored in the archive. + +February 26, 2008 +- Added an assembly version of rt_shaded4cols, since that's the main decal + drawing function. The most improvement came from being able to turn some + constant variables into immediate values with self-modifying code, but I + also managed to reorder it to make it a little faster. It's about 9% faster + than VC++'s code and 19% faster than GCC's code. That's not a huge + improvement (for VC++), but at least it's measurable. +- Removed the solid fill "optimization" from rt_shaded4cols(), because in my + testing, it didn't help any and in fact, hurt just a little bit. +- In the name of simplification, all the rt_tlate* drawers were changed to do + the translation in one step and the drawing in another. This lets me call + the untranslated drawer to do the real drawing instead of mostly duplicating + them. Performance wise, there is practically no difference from before. +- Fixed: Using +stat from the command line caused a crash. +- More write barriers and pointer declarations. Here are rules I've come up + with so far for when write barriers can be ommitted: + * Initializing pointers for a newly created object: A new object can never + be black, so none of its pointers that get set by the constructor (or code + just following its creation) need to be behind write barriers. + * Creating a new thinker and storing it in a pointer: The thinker + constructor already puts it behind a write barrier when it links it into + the thinker list, so you don't need to do it again. + * As a corollary of the above: No pointers to thinkers should need to be + behind write barriers, because it is incorrect to have a thinker that is + live but not in a thinker list. I realized this while I was going through + the long list of actor target references, so there are some write barriers + for those in place already, since they don't hurt to have them around. + As a consequence of the last point, I think I'm done placing write barriers + in all their necessary places without even touching most of the code. I'm + going to let it sit like this for a few days to see if I can think of a + counter-example where a live thinker wouldn't be in a thinker list, but it + feels correct to me right now. + +February 25, 2008 (Changes by Graf Zahl) +- Fixed: The DECORATE expression evaluator's random function could produce + incorrect results for ranges > 255. Changed so that FRandom's default + implementation is used instead. + +February 24, 2008 +- Fixed: DDecalFader::Tick() still referenced TheDecal even after destroying + it. +- Added write barriers around the thinker list insertions in dthinker.cpp. + +February 23, 2008 (Changes by Graf Zahl) +- Fixed: AWeaponPiece didn't declare its FullWeapon pointer as such. +- Fixed: Hexen's random player class skill menu was missing the '$' indicating + a string table identifier. +- Fixed: DCorpsePointer::Serialize didn't call the super method. + +February 22, 2008 +- Moved DSeqNode's and its children's destructor code into their Destroy() + methods. +- Moved DSectorEffect's destructor code into a Destroy() method. +- Changed the myoffsetof definition to match DECLARE_POINTER's because GCC + started complaining about its use in p_setup.cpp, though I'm not sure why. +- Added a pointer list to DACSThinker so that the collector can find scripts + instead of thinking they're all dead. +- Added read barriers to sector_t's pointers. +- Used the HAS_OBJECT_POINTERS macros to locate places to place TObjPtrs to + form read barriers. + +February 21, 2008 +- Fixed: DThinker::SerializeAll() did not serialize any thinkers in the + FreshThinkers lists. These thinkers would still be saved in the savegame if + there were other references to them, but they would not go in any thinker + lists when loading the savegame. An easy way to exercise this bug is to + give yourself something new with the console and then save the game right + away without closing the console by using the "save" command. The item + would be stored in the savegame thanks to its presence in the Inventory + list, but it wouldn't be in a thinker list when the game was reloaded + because it was still in the FreshThinkers list when the game was saved. +- Fixed: PO_Busy() did not check for a NULL return from GetPolyobj(). +- Fixed two problems with printfs from the net controller stuff: one of them + is totally valid, and the other is GCC not being as nice as VC++. +- Fixed: The case for defining SAVESIG when SVN_REVISION_NUMBER == 0 did not + work for GCC (and presumably VC++, though I never ran into that case with + it) because it tried to stringify something that wasn't a macro argument. + +February 20, 2008 +- Changed the DHUDMessage deletions into destroys. +- Added read barriers to the pointers inside AActor. +- Split the AActor::LastLook union into its constituent parts. + +February 20, 2008 (Changes by Graf Zahl) +- Added a modified version of Karate Chris's submission for killing specific + monsters with the 'Kill' ccmd. + +February 19, 2008 +- Added a rough initial garbage collector, based largely on Lua's. There are + no write or read barriers in place yet, so it's not a very close + approximation of the pointer cleaning code that was in place before, but it + does collect stuff. But guess what! Nuts.wad ran at 1-2 FPS before. Now + it's way, way more and easily stays above 35 FPS. The performance hit when + the GC is running is pretty minimal compared to the old way, which was in + many ways like a full garbage collection every tic. +- Changed the status bars into DObjects. +- Fixed: FBaseStatusBar::Tick() deleted hud messages instead of destroying + them. +- Changed the global Args object to a pointer to one. +- Changed several DArgs deletions into destroys. +- Removed DBoundingBox from the DObject hierarchy. + +February 18, 2008 +- Added vid_refreshrate cvar to override Windows' automatic refresh rate + selection. +- Singleplayers maps using allowrespawn now filter respawn inventory like + coop games, since that's essentially what they are. +- Fixed m_alloc.cpp compilation on Linux. + +February 18, 2008 (Changes by Graf Zahl) +- Applied Blzut3's sbarinfo update #12: +* When the drawbar code was optimized border was accidently used as how many + pixels to reserve from the background instead of the foreground. I've + reversed how the code works (bg over fg instead of fg over bg). +* Added armorclass to drawnumber. +* Added an interpolateArmor variable which acts just like interpolateHealth + except the effect is applied to armor. +* Added armor flag to drawgem since we can interpolate armor now. +* Added a reverse flag to drawgem. +* Fixed drawgem didn't allow for '|' to separate the flags. + +- Fixed: Menu texts for skill definitions unconditionally interpreted + the given text as an index into the string table. + +February 16, 2008 +- Fixed AInventory::PickupFlash setting with GCC. +- Fixed: The MusicVolumes list was allocated with M_Malloc but freed with + delete. +- Fixed: demobuffer was inconsistantly handled with new[]/delete[] and + malloc/free. +- Added used memory tracking to M_Malloc() and M_Realloc(). This + necessitated the addition of an M_Free() call to track frees. +- Removed M_Calloc since it was only used in one place, and can just as well + be done with an M_Malloc/memset pair. +- Bumped DEMOGAMEVERSION for the new net controller codes. + +February 16, 2008 (Changes by Graf Zahl) +- Added patch by Karate Chris: + - The net arbitrator can add or remove players to an access list so they + can or cannot control game settings: + * net_addcontroller - Adds a player to the control list. + Only net arbitrators have access to this command. + * net_removecontroller - Removes a player from the control + list. Only net arbitrators have access to this command. + * net_listcontrollers - Lists the players who are able to control the game + settings. + - Fixed: The 'Printf' occurrences in the 'addplayerclass' console command + were all missing a '\n' at the end. + - Enhanced the 'playerinfo' console command so more information about each + setting is shown. +- Added customizable pickup flash. +- Added option to show shorter messages for save game and screenshot confirmation. + Also added this to the 'Messages' menu. + +February 14, 2008 +- Version bump to 2.2.0. +- Disabled console alpha when the console is fullscreen. +- Re-enabled maybedrawnow for the software renderer. This should be replaced + with a different progress bar implementation at some point that can work + with hardware graphics. + +February 14, 2008 (Changes by Graf Zahl) +- Added Karate Chris's patch for 0-tid == activator in action specials + Thing_SetSpecial and Thing_SetTranslation. +- -moved BUG_FORUM_URL to version.h + +February 13, 2008 +- Removed most checks on vid_hw2d/test2d. This now gets checked only once per + frame to avoid the remote possibility that it could change during the middle + of drawing the frame and cause strange things to happen. +- Renamed test2d to vid_hw2d. + +February 12, 2008 +- Added the ACS script type "return". These are executed by players who return + to a map they've previously been to. This is analagous to enter scripts, but + whereas enter scripts execute only the first time a player enters a map, + return scripts execute all but the first time. +- Improved map scrolling when rotation is on and follow mode is off. + +February 11, 2008 +- Fixed: Turning off follow mode with automap rotating enabled did not + function in an easy-to-understand manner. +- Fixed: D_AddWildFile() blindly assumed that all matches were files. +- Added back the dead player check to CheckIfExitIsGood(), but now it + applies only if the next map is part of the same hub. Otherwise, you can + still exit the map while dead. +- Removed the SpawnedPuff global variable and made it a return value from + P_LineAttack(). +- Fixed: P_SpawnPuff() played sounds for temporary puffs. + +February 9, 2008 +- Fixed: G_StartTravel() inadvertantly removed players' TIDs. +- Modified FLAC/share/alloc.h to define SIZE_T_MAX if it isn't defined + already. For some reason, a stock install of MinGW doesn't define it, but + if you compile your own GCC, it installs headers that do. +- After thoroughly messing up my MinGW/MSYS installation, I deleted the whole + thing and reinstalled everything using the latest zips. Much to my surprise, + the MSYS-detection in the makefiles no longer worked because OSTYPE wasn't + being exported to process launched by the MSYS shell. I've now switched to a + different method I found through the power of Google that asks the shell + what version it is to see if the version string contains "msys". + +February 8, 2008 +- Applied Blzut3's sbarinfo update #11: + * SBarInfo will also accept a '|' between flags for those who are really + bothered by the indefinite "arguments" in the middle of the statement. + * Added: completeBorder. When set to true SBarInfo will draw the border where + the status bar normally goes. + * Fixed: I forgot to accept TK_None on "base" and "statusbar". + * Fixed: "base" was apparently broken when the SBarInfo init code was moved to + d_main.cpp. Also, if "base Strife" was used then it would not use the + default log message of "find help". +- Fixed: D_ReadUserInfoString() parsed the final element of a compact string + as the empty string. Since that was the player class, this meant that any + games with more than one class would pick a random class in multiplayer. +- Fixed: FCanvasTexture::RenderView() should not have color 0 in its output. + +February 5, 2008 +- Updated the GCC-targeted makefiles to turn off two optimizations that cause + fmopl.cpp to compile incorrectly: tree-dominator-opts and tree-fre +- Fixed: Morphed pig and chicken players made normal human *usefail sounds. +- G_DoSaveGame() now receives the filename and description from its arguments + rather than global variables, so autosaves and manual saves can be done + in close proximity to each other without overwriting the parameters for + one of them. +- Fixed potential buffer overrun in G_SaveGame() and added a check so that + you can't interfere with saves that are still pending. +- Fixed: P_LineAttack() creates temporary puffs to get damage types, but this + had the side effect of creating particles for the puff. +- Fixed: The Heretic status bar tried to use the graphic "SELECTBOX" for the + inventory selector. The correct name is "SELECTBO". +- Fixed: Using allowrespawn for a single-player map would fire off enter + scripts instead of respawn script because the player wasn't assigned the + state PST_REBORN. +- Fixed: P_CheckMissileSpawn() now passes the BlockingMobj to + P_ExplodeMissile() so that it can select the appropriate death state. +- Added the manifest to MinGW-compiled builds of updaterevision so you can + build under Vista with MinGW without needing administrative privileges. + (But I still want to know why Vista thinks it needs elevated privileges + without a manifest telling it otherwise.) +- Using four 0xFF bytes for the final note of an IMF song should signal the + end of the song. + +February 4, 2008 +- Applied a modified version of Karate Chris's screenshot naming patch. +- Sbarinfo optimization: Creating and destroying bar textures every frame is + a relatively expensive operation. We can skip the custom texture entirely + and just draw the bars directly to the screen, using the clipping parameters + for DrawTexture(). This also means bars are no longer limited to the game + palette, and the bar itself has the same resolution as the screen. + +February 2, 2008 +- Removed support for numeric flags from sbarinfo's drawmugshot command since + it was previously declared unrecommended and deprecated. +- Added Blzut3's sbarinfo update #10: + * Fixed: drawmugshot now adjust to the player's max health like it should. + * drawgem can now accept negative paddings. + * Added: You can now specify a border on drawbar which will reserve x + amount of pixels on each side of the fg image. + * Added: weaponammo command which allows for determining what kind of ammo + the current weapon uses. + * Added: Drawkeybar to SBarInfo + +January 31, 2008 (Changes by Graf Zahl) +- Fixed: The STYLEF_Alpha1 flag intended for STYLE_Normal was set for STYLE_Fuzzy. +- Fixed: The render style table for old decorations was missing STYLE_Stencil so + STYLE_Translucent was mapped incorrectly. + +January 30, 2008 (Changes by Graf Zahl) +- Added support for AttackZOffset to P_RailAttack. +- Fixed: ParseDrawTextureTags read DTA_RenderStyle as ERenderStyle, not FRenderStyle. + +January 29, 2008 +- Added pixel-doubled and -quadrupled screen modes to D3DFB so that users with + recent NVidia drivers can still use resolutions below 640x480, since NVidia + saw fit to remove all support for them. + +January 27, 2008 (Changes by Graf Zahl) +- Added a PrecacheTexture virtual function to DFrameBuffer because it's the + renderer which should decide how to precache a texture. +- Added SnowKate709's APROP_MaxHealth submission. +- Fixed: FTexture::GetScaledWidth/Height always rounded down which could result in + imprecisions (e.g. when scaling from 128 to 96.) +- added a mastervolume CVAR for Timidity because for me its output is considerably + louder than everything else. +- reverted removal of AddPatch call in crosshair initialization. +- Modified makewad.c so that it doesn't write file names with '[]^' to the + dependency file. Apparenly make can't handle these names and an incomplete + list is still better than something that doesn't work at all. +- Changed license for r_data.cpp because there isn't anything of id's original + code left in that file. +- Cleaned up r_data.cpp. +- Fixed: FTextureManager::FindTexture should not print error messages if it + doesn't find the texture. +- Added Karate Chris's patch for fixing Strife quit messages. + +January 26, 2008 +- Added preloading of fonts to reduce the chance that characters from a single + font will require more than one hardware texture to display. +- Fixed: P_RailAttack() crashed if you didn't specify a puff for a rail. +- Decided that allowing arbitrary alpha values for color remaps isn't so hot. + Changed it back the way it was. + +January 26, 2008 (Changes by Graf Zahl) +- Got rid of most TexMan.AddPatch calls because they are no longer needed. +- Got rid of R_InitPatches because the new texture init code needs to preload + everything to work correctly. +- Rewrote texture manager initialization to order textures primarily by WAD + rather than by type. This way later textures will always override earlier + ones. The only exception is that TEX_MiscPatch are only used as a fallback + if nothing else can be found. +- Optimized the tryany case of FTextureManager::CheckForTexture. It is not + necessary to scan the hash chain twice. The required information can be + retrieved during the first pass as easily and even offers a little more + control. +- Made FFont destructor virtual. +- Added 'Ice' translation to DECORATE. +- Added Karate Chris's patch for teamplay MAPINFO option. +- Added Karate Chris's patch for custom damage color per player class. +- Added Karate Chris's patch for respawnlimit skill property. +- Added Karate Chris's patch for Strife quit messages. +- Fixed: P_RailAttack ignored the puff's damage type. +- Fixed: ACS used incompatible values for APROP_RenderStyle. It needs to use + the exact same values as previous ZDoom versions +- Added a DECORATE 'stencilcolor' property so that the stencil render style + can be used. +- Added some NULL pointer checks to the font loading code. + +January 25, 2008 +- Undid some of the changes from lempar.c v1.30->v1.31, because it broke + error handling. +- Fixed: dehsupp/scanner.re defined "}" as the token RPAREN. dehsupp/parse.y + also defined action_list_def as needing a RBARCE. I'm surprised it worked + at all before. I guess Lemon really was too accepting. I have verified that + the lump it outputs is unchanged from before. +- Changed the way that xlatcc handles include statements so that I don't need + to modify the logic of lempar.c. I also discovered that the grammar was + improperly defined and only accepted the first statement. It worked before + because Lemon used to accept multiple times before reaching the EOF token. + I have also verified that it is still generating the proper lumps. +- Removed some unused wadsrc files from the repository. +- Fixed my re2c upgrade. +- Back to lemon.c v1.53 now. The bad change was v1.51: "Changes lemon so + that the generated parser does not accept prior to seeing the EOF token." + This seems like a valid change, which means I need to rethink my strategy + for handling include statements, since this change breaks what I was + doing before. +- Lemon is now producing parsers that don't accept anything, so I'm going + back to v1.43 and trying each intermediate version to see where things + went wrong. + +January 24, 2008 +- Updated Lemon to its latest versions as of today. + (lemon.c: v1.53, lempar.c: v1.31) +- Added .txt files to the list of types (wad, zip, and pk3) that can be + loaded without listing them after -file. +- Fonts that are created by the ACS setfont command to wrap a texture now + support animated textures. +- FON2 fonts can now use their full palette for CR_UNTRANSLATED when drawn + with the hardware 2D path instead of being restricted to the game palette. + +January 23, 2008 +- Fixed: Toggling vid_vsync would reset the displayed fullscreen gamma to 1 + on a Radeon 9000. +- Added back the off-by-one palette handling, but in a much more limited + scope than before. The skipped entry is assumed to always be at 248, and + it is assumed that all Shader Model 1.4 cards suffer from this. That's + because all SM1.4 cards are based on variants of the ATI R200 core, and the + RV250 in a Radeon 9000 craps up like this. I see no reason to assume that + other flavors of the R200 are any different. (Interesting note: With the + Radeon 9000, D3DTADDRESS_CLAMP is an invalid address mode when using the + debug Direct3D 9 runtime, but it works perfectly fine with the retail + Direct3D 9 runtime.) (Insight: The R200 probably uses bytes for all its + math inside pixel shaders. That would explain perfectly why I can't use + constants greater than 1 with PS1.4 and why it can't do an exact mapping to + every entry in the color palette. +- Fixed: The software shaded drawer did not work for 2D, because its selected + "color"map was replaced with the identitymap before being used. +- Fixed: I cannot use Printf to output messages before the framebuffer was + completely setup, meaning that Shader Model 1.4 cards could not change + resolution. +- I have decided to let remap palettes specify variable alpha values for + their colors. D3DFB no longer forces them to 255. + +January 22, 2008 +- Updated re2c to version 0.12.3. +- Fixed: A_Wander used threshold as a timer, when it should have used + reactiontime. +- Fixed: A_CustomRailgun would not fire at all for actors without a target + when the aim parameter was disabled. +- Made the warp command work in multiplayer, again courtesy of Karate Chris. +- Fixed: Trying to spawn a bot while not in a game made for a crashing time. + (Patch courtesy of Karate Chris.) + +January 21, 2008 +- Removed some floating point math from hu_scores.cpp that somebody's GCC + gave warnings for (not mine, though). +- Fixed: The SBarInfo drawbar command crashed if the sprite image was + unavailable. +- Fixed: FString::operator=(const char *) did not release its old buffer when + being assigned to the null string. +- The scanner no longer has an upper limit on the length of strings it + accepts, though short strings will be faster than long ones. +- Moved all the text scanning functions into a class. Mainly, this means that + multiple script scanner states can be stored without being forced to do so + recursively. I think I might be taking advantage of that in the near + future. Possibly. Maybe. +- Removed some potential buffer overflows from the decal parser. + +January 18, 2008 +- Applied Blzut3's SBARINFO update #9: + * Fixed: When using even length values in drawnumber it would cap to a 98 + value instead of a 99 as intended. + * The SBarInfo parser can now accept negatives for coordinates. This + doesn't allow much right now, but later I plan to add better fullscreen + hud support in which the negatives will be more useful. This also cleans + up the source a bit since all calls for (x, y) coordinates are with the + function getCoordinates(). +- Added support for stencilling actors. +- Added support for non-black colors specified with DTA_ColorOverlay to the + software renderer. +- Fixed: The inverse, gold, red, and green fixed colormaps each allocated + space for 32 different colormaps, even though each only used the first one. +- Added two new blending flags to make reverse subtract blending more useful: + STYLEF_InvertSource and STYLEF_InvertOverlay. These invert the color that + gets blended with the background, since that seems like a good idea for + reverse subtraction. They also work with the other two blending operations. + +January 17, 2008 +- Added subtract and reverse subtract blending operations to the renderer. + Since the ERenderStyle enumeration was getting rather unwieldy, I converted + it into a new FRenderStyle structure that lets each parameter of the + blending equation be set separately. This simplified the set up for the + blend quite a bit, and it means a number of new combinations are available + by setting the parameters properly. + +January 16, 2008 (Changes by Graf Zahl) +- Fixed: The StatusBar pointer was not NULLed after being deleted. + +January 15, 2008 +- Plugged more leaks in SBARINFO. +- Spawned actors that have MF2_DORMANT set in their default instance now have + Deactivate() called on them immediately after spawning. + +January 15, 2008 (Changes by Graf Zahl) +- Fixed: Skip_Super didn't clear the current state label list. + +January 14, 2008 +- Fixed: ACS translations were loaded into the wrong slot after restoring a + savegame. +- Fixed exploit: Dropping ammo at baby and nightmare skill levels would give + you back more than you dropped. + +January 13, 2008 (Changes by Graf Zahl) +- Moved A_Punch from Inventory to Actor. Apparently there are WADs that use it + for monsters. The function works fine for monsters as it is. + +January 12, 2008 +- Applied Blzut3's SBARINFO update #8: + * Fixed: Drawbar had a few memory leaks. +- Applied Blzut3's SBARINFO update #7: + * Added drawstring to SBARINFO. + * Added animatedgodmode flag to drawmugshot, also changed the flags to use the + standard named arguments instead of numbers. The old way is considered + deprecated. + * Added kills, monsters, items, totalitems, secrets, and totalsecrets to + drawnumber. Drawbar can also use kills, items, and secrets. + * Added weaponicon to drawimage which will display the inventory.icon of the + currently selected weapon. + * Fixed: I apparently forgot to add the "rampage" face to drawmugshot. + +January 12, 2008 (Changes by Graf Zahl) +- Moved renderer dependent part of savegame pic creation into DFrameBuffer + as a virtual function so that it can be overridden. +- Fixed: M_SaveBitmap::prior was too small. It must be 3 bytes per pixel, + not 1. +- Replaced INVGEM** graphics with PNG versions so that they have the + correct colors when used on the AltHUD in Strife. + +January 11, 2008 +- Added support for 24-bit screenshots, so now accelerated 2D screenshots + can work. +- Tweaked the box splitting algorithm for packed textures to hopefully + produce less wasted space. +- For compatibility with the software renderer, D3DFB::DrawTextureV needs to + truncate the coordinates to integers before sending them to the hardware. + Otherwise, there can be one pixel gaps compared to the software renderer, + because the hardware is rounding to nearest but the software renderer is + simply truncating the fractional part of the coordinate. This is the real + cause of the gap above the status bar at 1152x864 (and another gap to the + left of the status bar at 800x500). +- Fixed: When D3DFB::DrawTextureV had to clip a tile, it adjusted the + texture coordinates erroneously, still using the old calculations from + before texture packing was implemented. +- Moved thingdef_codeptr.cpp into thingdef/ with the other thingdef files. + +January 11, 2008 (Changes by Graf Zahl) +- Added Skulltag's pickup sprite and related information to the pistol. This + will also double as the pistol's icon in the AltHUD. +- Added a generic log display that can show Strife's log messages in all games + regardless of the current game, active status bar and HUD mode. +- Added GZDoom's alt HUD. + +January 10, 2008 +- Fixed: After loading a savegame, G_UnSnapshotLevel() destroyed the + unmorphed versions of players because it thought they were extras. +- Fixed: Weapon positions were only adjusted in 1280x1024 if the status + bar was hidden. +- Fixed: If you died in co-op and somebody else ended the map before you + respawned, you would start the next map with only default inventory, no + matter what dmflags was set to. +- Applied Karate Chris's TEAMINFO logo patch. + +January 10, 2008 (Changes by Graf Zahl) +- Moved the code that renders the view from D_Display into a virtual function + of the frame buffer so I can get rid of the last remaining renderer check + outside the display code in GZDoom. +- made V_SetResolution a virtual function in IVideo. It's probably not a perfect + solution but at least it allows overriding it (which I need in GZDoom.) + Note: There's a lot of redundancy between hardware.cpp/h in the SDL and Win32 + folders so some cleaning up might be a good idea. +- defined a constant for the crosshair menu entry's index to get a direct + reference out of the function code. In GZDoom the menu contains different + information. +- Fixed: The BrainExplosions should not perform any collision detection. To + achieve this their Damage value must be set to 0 when being spawned. + +January 9, 2008 +- Added Blzut3's SBARINFO update #6: + * Fixed: A tutti-frutti like effect would occur if transparent images were + used in bars. + * Fixed: drawswitchableimage didn't count having 0 of an item as not having + the said item. + * Added alwaysshowcounter flag to both drawinventorybar and + drawselectedinventory. + * Added armoricon image type to drawimage. + * Added low-on secondary coloring and high-on coloring to drawnumber. +- Added texture packing to D3DFB so that textures that are temporally related + can share the same hardware texture. This greatly reduces the number of + DrawPrimitive calls that need to be made when drawing text (or any 2D + graphics in general), so now hardware text is much faster than software text + all around. (As an example, one scenario went from 315 fps to over 1635 fps + for hardware, compared to 540 fps for software.) +- Fixed: The mouse was being grabbed in windowed mode again. +- Modified M_DrawFrame() and R_DrawTopBorder() so that they call FlatFill() to + draw the edges of the frames. This at least seems a bit faster for hardware + 2D. +- Implemented FlatFill() for D3DFB. It seems to be exactly as fast as the + default implementation that just calls DrawTexture() to tile the pieces onto + the screen, so I'm not sure it was worth the bother. +- Merged the separate line and quad vertex buffers in D3DFB back into a single + vertex buffer, made line batching automatic, and added an index buffer for + use when batching quads. The index buffer actually offered more of a + performance boost than simply batching the quads alone did. + +January 9, 2008 (Changes by Graf Zahl) +- Added a safety check to savegame versioning so that an invalid revision + (reported as 0) will be handled without breaking savegame compatibility. +- Fixed: 'Painchance' in DECORATE failed when reading custom damage type names. +- Added Karate Chris's patch for menu opening console commands. + +January 8, 2008 +- Fixed: When starting a teamplay netgame, players who did not specify a team + were not informed about which team they ended up joining. +- Added Skulltag's DF2_SAME_SPAWN_SPOT flags. +- Fixed: DF2_YES_DEGENERATION was pretty much guaranteed to go out of sync + because it used gametic for timing. +- Added DoubleAmmoFactor as a skill property for the DF2_YES_DOUBLEAMMO flag. +- Renumbered the dmflags2 entries to match Skulltag's again. +- Added Karate Chris's infinite inventory patch. + +January 7, 2008 +- Added support for user-defined crosshairs in the Display Options menu. See + xhairs.txt in zdoom.pk3. It's pretty simple. +- Fixed: P_BounceWall() cannot assume that BlockingLine is the line the actor + should bounce off of. Since the order lines in a blockmap cell are checked + for collision is essentially undefined, there could be another line closer to + the actor that it should bounce off of instead. +- Fixed: Thing_SetTranslation still used a 16-bit word to hold the translation. +- Bumped the maximum resolution up to 2560x1600. +- Fixed: DCanvas::DrawTexture() only expanded virtual screen sizes for widescreen + resolutions but left 5:4 modes alone. This fix neccessitated the addition of + DTA_Bottom320x200 for the status bar to use so that it could be flush with the + bottom of the screen rather than sitting slightly above it. +- Fixed: FConfigFile::ReadConfig()'s definition of whitespace was too broad. +- Fixed: Defining custom translation ranges in descending order and/or with gaps + made for crashes. + +January 7, 2008 (Changes by Graf Zahl) +- Added fix for Heretic IDKFA cheat by Karate Chris. +- Added fix for Strife's AlienSpectre obituary by Karate Chris. + +January 6, 2008 (Changes by Graf Zahl) +- Re-converted icebreak.flac because the old version apparently didn't work. +- Added SBARINFO update #5 by blzut3: + - Fixed: Playerclass still didn't work due to comparing of improper numbers. + - Fixed: The arrows on drawinventorybar had a hard coded location instead of + relative to the specified coordinates. + - Added noarrows flag to drawinventorybar to remove the blue arrows drawn when + there are more items to the left or right of the viewable bar. + - Added forcescaled flag to the statusbar command. This is ignored on the + inventory and inventoryfullscreen types. +- Added obituary fix for Strife peasants by Karate Chris. +- Added fix for loading during demo playback by Karate Chris. +- Added scoreboard fix by Karate Chris. +- Added teamgame fix for menu by Karate Chris. +- Added GZDoom's Sector_Outside sector type which forces outside fog + regardless of ceiling texture. + +January 6, 2008 +- Fixed: Since the minimum size for a texture is 2x2, FBarShader can't use + a one-dimensional texture. +- Added back the code to allow some variation to the players' shades when + players are on teams. +- Set TEAM_None back to 255. Since a player's team has already been accessible + through ACS, needlessly redefining this is a bad thing to do, since it can + break existing maps. 255 different teams should still be more than enough. +- Fixed: At certain resolutions, there was a one pixel row between the status + bar and the rest of the screen, thanks to rounding error. +- Added automatic batching of quads to D3DFB. Screens with a lot of text are + ever-so-slightly faster now, though still only about half the speed of + sofware-only text. I suppose the only way to see a marked improvement is + going to be by stuffing multiple glyphs in a single texture. +- Fixed: Crosshairgrow's animation was not framerate-independent. + +January 5, 2008 (Changes by Graf Zahl) +- Added: Automap markers are stored in savegames now. Also moved the call + to AM_LevelInit to its proper place in G_DoLoadLevel, right after + the call to P_SetupLevel to make it work as intended. +- Changed savegame versioning to use the SVN revision number instead of + an arbitrarily defined value. This reduces the amount of relevant values + that have to be defined in version.h to 1 (the minimum compatible savegame + version) instead of previously 3. + +January 4, 2008 +- Fixed: FBarShader::PrepareShader() set a member variable to point at a + local variable just before returning. Then I made some more changes so that + it can be a properly functioning texture. After doing that, I decided to + rewrite the texture generation to be easier for me to read and hopefully + faster, since this thing is getting generated every frame. (Please don't + hurt me if I got it wrong. I'm basing this on the description in the wiki, + since I couldn't wrap my head around what the code was doing by looking + at it.) Then I realized that there's really no reason to have more than four + of these ever, and they can be statically generated, so I simplified it some + more. +- Added Blzut3's latest SBARINFO patch: + * Fixed a massive memory leak in SBARINFO. The leak also lead to progressive + CPU usage. + * Fixed: Playerclass didn't work in SBARINFO. + * Fixed: Artiflash was improperly initialized causing it not to display the + first time. + * Changed the variable SBarInfoScript to be a pointer to prevent more memory + leaks. + +January 4, 2008 (Changes by Graf Zahl) +- Removed the patches for the Doom/Heretic E1 intermission screens from + R_InitPatches. This isn't needed anymore because all these are loaded through + an intermission script. +- Fixed: A_SpawnDebris read the third and fourth arguments from the first one's + address. + +January 3, 2008 +- Moved the pixel shaders' color information out of the constant registers + and into the vertex data. +- Added functions for doing line drawing with Direct3D, including a new pair + of functions to do batched line drawing so that the map can actually be + drawn faster in hardware than in software (instead of an order of magnitude + slower). + +January 2, 2008 +- Tried adding bilinear filtering support for paletted textures, but the + shader seems to be producing crappy output, so it's disabled for now. + Specifically, it produces distorted output at regular intervals for + textures that aren't power-of-2-sized, and it's still doing visible + filtering when the texture is rendered at its original size, so + obviously it's not doing something right. +- Fixed the use of power-of-2-sized native textures for smaller game + textures again. +- Fixed: D3DFB did not restore all the state it needed to after resetting + the device. +- Fixed: R_DrawTopBorder() must clip itself around the 3D view, since it's + now drawn later. +- With full software rendering, palette flashes once again affect the whole + screen. + +January 1, 2008 +- The mouse is no longer grabbed at all unless you're actually in a level, + since I couldn't think of any reason why it should be grabbed at any other + time. (This only applies to windowed mode, where it makes sense to let the + OS have control of the pointer.) +- Moved the view border drawing into the 2D mode part. When using Begin2D() + now, the only part of the software buffer that gets updated to the screen + is the part with the actual 3D scene and only if you tell it to. +- Fixed a D3D memory leak on every frame in windowed mode and the same thing + for the screen wipes. Note to self: If it's an interface, be sure to + Release it, because it will be AddRef'ed before being returned to you. +- Moved the BlendView() call out of DBaseStatusBar::Draw() so that it can be + applied before copying the 3D scene to the screen underneath the 2D parts. +- Restored the console's darkening level to its old table-based amount. +- Fixed D3DFB::SetColorOverlay()'s incorrect calculations. +- Fixed the D3D screen wipes for letterboxed modes. + +January 1, 2008 (Changes by Graf Zahl) +- Fixed: A_JumpIfTargetInLOS had inconsistent parameter definitions. + +December 31, 2007 +- Removed the screenshot parameter from D_Display(), since it was a relic of + a long-abandoned experiment to write directly to video memory instead of + to a temporary buffer in system memory. +- Added Direct3D versions of the melt and burn screenwipes. +- Fixed the strip sizes for the melt screenwipe to match what Doom would have + produced on a 320x200 screen, rather than producing more, thinner strips + for wider screens. + +December 29, 2007 +- Started writing Direct3D-friendly wipe code. It's just a Q&D crossfade for + now. + +December 29, 2007 (Changes by Graf Zahl) +- Changed the FStatusBarTexture for Doom so that it can create a true color + image. + +December 28, 2007 +- Fixed position of the Doom HUD selectbox as per SnowKate709's guidance. + +December 28, 2007 (Changes by Graf Zahl) +- Changed FImageCollection so that it accepts a matching texture of any type. + This is necessary to load hires sprite replacements for certain icons. +- Added a check to Wads.CheckNumForName to return -1 for names longer than + 8 characters which contain path separators. +- Fixed: Hires texture replacement must replace all matching textures, not + just the first one found. This is particularly important for icons based + on sprites. +- added a con_alpha CVAR to set the console's translucency. +- Added MartinHowe's submission for A_CustomBulletAttack aimfacing parameter. +- Added MartinHowe's submission for A_PlaySoundEx attenuation parameter. +- Fixed: Bots shouldn't target friendly monsters. +- Fixed a typo in sbarinfo.cpp (noatribox instead of noartibox.) + +December 27, 2007 +- Fixed cases where a larger power-of-2-sized native texture had to be + allocated. (I wonder if D3D actually handles this automatically when you use + D3DPOOL_MANAGED, because I'm pretty sure my laptops's x300 doesn't support + non-power-of-2 texture sizes, yet it worked just fine before.) +- Fixed vertical positioning of 2D elements in letterboxed modes. +- Removed DCanvas::Blit(), as it's no longer used. +- Added a function to create a texture from a stand-alone PNG file. The save/ + load menus now use this to get their thumbnails. + +December 27, 2007 (Changes by Graf Zahl) +- Fixed: DFrameBuffer::CopyPixelData copied data as RGBA instead of BGRA. +- Temporarily changed FPNGTexture and FDDSTexture to always create True Color + native textures to preserve the original colors. +- Darkened the console background a little after finding out that on + very bright title pics it became quite hard to read the console's contents. +- Fixed: PROP_Translation needed to be changed for the new value format. +- Added GZDoom's MAPINFO fog parameters as no op dummies so I can use + WADs that contain them without constantly having to edit the MAPINFO. + It also allows using them to optimize hardware fog for WADs that should + run with ZDoom as well. + +December 26, 2007 +- Changed the way gamma works for D3DFB: In windowed mode, the display is + drawn to a texture, then that texture is copied to the real back buffer + using a gamma-correcting pixel shader. In fullscreen mode, SetGammaRamp + is used. +- Fixed flashing of vid_fps display when fps > 1000. +- Fixed loading of RGB textures for native 2D mode. +- Changed the first rotozoomer's data because it just became too obvious when + the backdrop is drawn with a full 256 distinct colors available. +- Set the player backdrop to update no more frequently than 35 FPS, so opening + the player setup menu before starting a game won't produce a very fast + moving backdrop. +- Changed the player backdrop into a texture so that it can be drawn like + anything else. +- Enhanced TMap so that you can get at the iterator types by accessing them + like class members. + +December 26, 2007 (Changes by Graf Zahl) +- Fixed: The FSpecialFont constructor copied the untranslated colors directly + from the source palette instead of the font's identity map. +- Split off the entire translation code from r_draw.cpp into r_translate.cpp. +- Moved the common code of ACS and DECORATE translation generation into the + FRemapTable class. +- Fixed: The DECORATE translation code was not changed for the new data structures. +- Expanded range of ACS and DECORATE translations to 65535. +- Fixed: R_CopyTranslation was not altered for the new functionality. + I removed the function and replaced the one use with a simple assignment. + +December 25, 2007 +- Fixed: The fullscreen console crashed when opened before starting a game. +- Discovered that Shader Model 1.4 clamps my constants, so I can't use + palettes smaller than 256 entries with the shader I wrote for it. Is there + a list of gotchas like this listed some where? I'd really like to see it. + + Well, when compiled with SM2.0, the PalTex shader seems to be every-so- + slightly faster on my GF7950GT than the SM1.4 version, so I guess it's a + minor win for cards that support it. + +December 25, 2007 (Changes by Graf Zahl) +- Replaced 'C:\\ZDOOMDAT' with a #define in version.h. +- Moved screenshot code into DCanvas so that it can be overridden by + subclasses with a different buffer. +- added a P_PointInSector function and replaced all calls to retrieve an + actor's sector in the game engine code with it. This way there's a clear + distinction between renderer-specific and game-specific calls. +- added UseInventory/UseActorInventory ACS functions. + +December 24, 2007 +- Fixed: ST_Endoom() failed to free the bitmap it used. +- Added the DTA_ColorOverlay attribute to blend a color with the texture + being drawn. For software, this (currently) only works with black. For + hardware, it works with any color. The motiviation for this was so I could + rewrite the status bar calls that passed DIM_MAP to DTA_Translation to + draw darker icons into something that didn't require making a whole new + remap table. +- After having an "OMG! How could I have been so stupid?" moment, I have + removed the off-by-one check from D3DFB. I had thought the off-by-one error + was caused by rounding errors by the shader hardware. Not so. Rather, I + wasn't sampling what I thought I was sampling. A texture that uses palette + index 255 passes the value 1.0 to the shader. The shader needs to adjust the + range of its palette indexes, or it will end up trying to read color 256 + from the palette texture when it should be reading color 255. Doh! +- The TranslationToTable() function has been added to map from translation + numbers used by actors to the tables those numbers represent. This function + performs validation for the input and returns NULL if the input value + is invalid. +- Major changes to the way translation tables work: No longer are they each a + 256-byte array. Instead, the FRemapTable structure is used to represent each + one. It includes a remap array for the software renderer, a palette array + for a hardware renderer, and a native texture pointer for D3DFB. The + translationtables array itself is now an array of TArrays that point to the + real tables. The DTA_Translation attribute must also be passed a pointer + to a FRemapTable, not a byte array as previously. + +December 24, 2007 (Changes by Graf Zahl) +- added some functionality to FDynamicColormap to allow not creating + the colormap data. +- also replaced the AM crosshair drawer by a DCanvas::DrawPixel function. +- moved the AM line drawer into DCanvas as a virtual function. While testing + this code I discovered that the antialias precalculation was never used + except for the very first frame of AM drawing. However, since I couldn't + detect even a marginal performance improvement using this code on 2 computers + I just disabled it completely because it severely complicates a more generic + implementation. I also disabled am_ovtrans in the process because I couldn't + see any positive effects of using this cvar. All it does is adding some + ugly distortion to the lines it affects without any apparent benefits. +* Added fix by Karate Chris containing: +- Added a 'No team changing' DMFlag2 which prevents players from changing teams + unless they are not on a team. +- Added a 'No respawn' DMFlag2 which prevents a player from respawning after + they have died. +- Added a 'Keep frags gained' DMFlag2 which allows you to choose whether you + want to reset the frags of each player next level or not. +- Added a small visual enhancement to the cooperative scoreboard to show + if a player has died. +- Fixed: If the 'teamplay' console variable was set to 'true' in a cooperative + game, the scoreboard would show team play related items as opposed to + cooperative items. +- Fixed: The 'bot_observer' console variable should not work in network games. +- Fixed: Bots made intermission skip really fast. + +December 23, 2007 (Changes by Graf Zahl) +- Fixed a few font related problems. +- Fixed: ASkyViewpoint::Destroy was missing the super call. +- Added SnowKate709's A_LookEx update. +- Moved M_DrawPlayerBackdrop into DCanvas as a virtual function. Since this + directly accesses the frame buffer it must be overridable for rendereres + that work differently. +- Added Blzut3's third SBARINFO update: + * Added drawshader to draw Heretic style transparency gradients. + * Added artiflash flag to drawselectedinventory. + * Fixed: Drawgem used the wrong operator when determining the chain size. + * Fixed: ZDoom would crash if an undefined font was used. + * I also started cleaning up the source a little. I have been informed that + when checking for flags the "== flagname" is redundant. +- Added indexfont anf hudfont from GZDoom to zdoom.pk3 so that they are always + available when defining custom status bars. +- Added Karate Chris's 'sv_losefrag' submission. +- Added Karate Chris's 'sv_degeneration' submission. +- Fixed: 'Bot joined the team' message was passing an FString to Printf. +- Backported GZDoom's true color font mappings for use with native textures + when the time comes. +- Added Karate Chris's 'sv_doubleammo' submission. +- Added Karate Chris's 'Take' console command submission. +- Changed DTA_Translation parameter for DrawTexture to an integer to avoid + passing renderer specific data to the function. Also added DTA_Font so + that the renderer can fetch font translations from the proper font. + DIM_MAP/ConShade had to be made a regular translation table to make it + work. +- Added Karate Chris's fix for scoreboard displaying team play related data + in non teamplay games. +- Fixed: The team selection menu didn't work. +- Fixed: UpdateTeam passed an FString to Printf. + +December 22, 2007 +- Modified DFrameBuffer::DrawRateStuff() so that it can do its thing properly + for D3DFB's 2D mode. Before, any fullscreen graphics (like help images) + covered it up. +- Had a look at sbarinfo.cpp and noticed a few places where it allocated + character arrays and never freed them. Those have been replaced with + uses of FString. (One of these was even an instance of a member variable + being set to point at a stack variable.) + +December 22, 2007 (Changes by Graf Zahl) +- Added Karate Chris's teamdamage in MAPINFO submission. +- Added Blzut3's second SBARINFO update. +- Fixed: The second flash state of the chaingun called A_Light1 instead of A_Light2. +- Added Blzut3's SBARINFO update. + +December 21, 2007 +- Added versions of Dim and Clear to D3DFB for use in 2D mode. +- Added a new color parameter to DCanvas::Clear() that specifies the + ARGB value of the color. This is used if the old color parameter, + which specifies a palette entry, is -1. +- Fixed: TEAMINFO broke bot parsing for bots with invalid team names by + redefining TEAM_None from 255 to -1. + +December 21, 2007 (Changes by Graf Zahl) +- Added Karate Chris's fix for TEAMINFO definitions with just one team. + +December 20, 2007 (Changes by Graf Zahl) +- Added Blzut3's SBARINFO submission. +- Added SnowKate709's A_LookEx submission. +- Added Karate Chris's TEAMINFO submission. +- Added true color processing to FDDSTexture. This is untested so far + because I don't have any DDS textures to check it with. +- Fixed: FTexture::~FTexture() must destroy the associated native texture + if present. +- Modified GZDoom's true color texture copy functions and added them + to generate 32 bit D3D textures. Paletted TGAs and PCXs are also handled + this way but I don't think these 2 formats are worth some more special + handling. + (Question: Is it worth it to implement special handling for paletted PNGs + so that they are used as 8 bit textures internally?) +- Fixed: DCanvas::Blit unlocked the destination twice instead of unlocking + both dest and src. Also changed this function so that it is owned by the + destination canvas of the operation which is necessary if it needs to + be overridden by subclasses. +- Fixed: The StrifePlayer defined the wrong color range for its translations. + +December 19, 2007 +- Added a framework for drawing the 2D screen elements with Direct3D textures. + They are not actually drawn with it yet, nor is it complete, but it's + something to start with. While doing this, I noticed the DTA_Shadow stuff + doesn't do anything. I'll probably remove them rather than fix them, since + it's easier to draw the shadow with a separate DrawTexture call. +- Split up DCanvas::DrawTexture() into more pieces to make it easier to + virtualize. +- Removed support for non-32-bit palette textures from D3DFB. What kind of + card supports pixel shaders but not 32-bit textures? + +December 17, 2007 +- Fixed: In the video modes menu, pressing Enter tried to change the screen + mode, even if the cursor wasn't on one of the mode items. +- Fixed: Heretic's mace never respawned in deathmatch games. +- Fixed: At resolutions taller than 600 pixels or so, tall sky textures were + drawn a row too low. This was quite visible on Hexen MAP06. +- Fixed: P_CheckSlopeWalk() must return false if floorsector != sector, or + the actor will be yanked down to the floorsector by P_TryMove(). +- Fixed: ClearActorInventory, GiveActorInventory, and TakeActorInventory + only affected the first actor with the given TID. +- Fixed: The color boxes for the colorpicker menu items were drawn a little + too low. +- Fixed: Clean scaling at 720x480 looked borked. +- New: When using the D3D9 framebuffer, palette blending is now applied only + to the 3D area of the screen. This means the console and (the primary + rectangular area of) the status bar are no longer blended. Maybe somedays + when I'm feeling adventurous, I'll exclude all the 2D graphics from the + blending. + +December 17, 2007 (Changes by Graf Zahl) +- Fixed: When a skybox viewpoint is destroyed it should clear all + sector references to itself. + +December 14, 2007 +- Fixed: G_QueueBody() should only change the translation to one of its + private slots if the one currently used is a player range. +- Fixed: Changing the fraglimit during the middle of a game would not trigger + a level change if somebody was already over the new limit. +- Added "\c" support to ParseCommandLine() when it parses quoted strings. +- Fixed: When changing your name from the menu, you got an extra " appended + to your name if it ended with a backslash. +- Added escape sequences for user info strings, so now they can contain + embedded backslashes. +- Fixed an array-out-of-bounds access when drawing the player setup menu with + an invalid team number. + +December 10, 2007 +- Fixed: The MAPINFO flags that control jumping, crouching, and freelook, + rather than overriding the dmflags values, actually overwrote the dmflags + values, so they would continue to be in effect on later maps that didn't + explicitly specify them. +- Fixed: Redefining a decal did not rebind any old references to the decal, so + they would be left pointing at invalid data. +- Fixed some more GCC warnings. +- Updated project files for nasm 2.0, which is now named nasm.exe for the + Windows version, rather than nasmw.exe. Also fixed the annoying new warnings + it generated. + +December 10, 2007 (Changes by Graf Zahl) +- Fixed: M_VerifyNightmare must use the selected skill level to start the + game, not always 4. + +December 9, 2007 (Changes by Graf Zahl) +- Fixed: There was no working means to pass 'no state' to A_Chase. + Now 0 or an empty string will do that. +- Copied the empty string fix for SC_CheckNumber to SC_CheckFloat. + +December 8, 2007 +- Fixed: SECSPAC_EyesSurface and SECSPAC_EyesDive did not trigger due to + crouching motion. +- Fixed: The keypress for nightmare mode verification appeared in the console + if the fullscreen console was open while using the menu. +- Added support for scaling down large console fonts in the customize + controls menu. +- Fixed: Joining a negative team was possible. +- Fixed: Skill level confirmation only worked with Doom. Also fixed parsing + of MustConfirm: It looked for TK_String when it should have used TK_StringConst. +- Fixed: When travelling to a new non-hub map, any items being carried with + amounts of 0 would be upped to 1. +- Fixed: When the game starts with the net pane open, the abort button + receives the input focus. When the pane is closed, the focus doesn't + return to any window, so even though the window is still active, it no + longer has the focus and does not receive input events. +- Fixed: The network synch timer was still left running after the game + started. (Windows only) +- Fixed: When a player leaves the game at the exact moment they are being + damaged, the game could crash because their actor still had a valid player + pointer, but the player's mo pointer had been NULLed. +- Fixed: MAPINFO is parsed before the text colors are read, so the TextColor + option for skills wouldn't work. +- Changed the PowerTimeFreezer "blink" effect back to checking against + EffectTics (now + 1), because I wasn't convinced of the correctness of + using level.time. +- Fixed: SC_CheckNumber() considered the empty string "" as the number 0. +- Reverted the 'None' name change from r569. + +December 6, 2007 +- Fixed the PowerTimeFreezer, too. It got easier once I realized that I only + need to be concerned about changing the flag on odd tics, since A_Tracer() + is called every two tics, not four. +- Fixed: Using the freeze command would make the Revenant missiles switch + their seekingness. The only sane way to deal with this seemed to be to + sync the freeze changes with the timer check in A_Tracer(), so that's what + I did: Freeze mode only changes every four tics now. +- Added IWAD-based [*.Autoload] ini support for games that have more than one + IWAD. They are: + * [Doom1.Autoload] + * [Doom2.Autoload] + * [Plutonia.Autoload] + * [TNT.Autoload] + * [HexenDK.Autoload] + These are loaded after the more general game-specific [Doom.Autoload] and + [Hexen.Autoload] sections if those are present. +- Changed the banner texts for the Final Doom IWADs to identify them as Final + Doom rather than as DOOM 2. I know this differs from the original behavior, + but they're marketed as Final Doom, not Doom 2. +- New: On Windows, the game now checks the registry to see if you have Steam + installed. If so, it checks your SteamApps directory for any IWADs you may + have purchased through Steam and adds any it finds to the list of available + IWADs you can play. This means that if you bought your id games through + Steam, you can just extract ZDoom anywhere you like and run it without doing + any additional setup. +- Fixed: The FLAC/makefile.mgw should use md5.o as an OBJ, not md5.c. +- Fixed: The Linux makefile probably shouldn't be using the bundled zlib headers, + either. + +December 6, 2007 (Changes by Graf Zahl) +- Added Karate Chris's submission for scoreboard enhancement. +- Fixed: A_PainDie and A_DualPainAttack could fail to spawn the correct actor + if the first spawned one died and executed some code in its death state. + +December 5, 2007 +- Fixed: The Linux makefile should use the include files for the system FLAC + installation, not the bundled copies which might not match what is installed. +- Upgraded bundled FLAC from version 1.1.2 to version 1.2.1. + +December 2, 2007 (Changes by Graf Zahl) +- Added Karate Chris's submission for 'allowrespawn' MAPINFO option. +- Added Karate Chris's submission for customizable skill confirmation text. +- Fixed: Doom's statusbar only checked for primary attacks, not secondary ones when + setting Doomguy's face. (Thanks to Karate Chris for the fix.) + +November 29, 2007 (Changes by Graf Zahl) +- added Skulltag's FORCEYBILLBOARD and FORCEXYBILLBOARD flags to the DECORATE parser. + Even though the software renderer has no use for them it is necessary to support them + so that mods can use these flags without becoming incompatible with ZDoom. + +November 28, 2007 (Changes by Graf Zahl) +- after looking at the most recent Vavoom update I realized that A_FastChase should not + use the multi-purpose special2 as counter for strafing so I added a new variable + for this purpose. + +November 24, 2007 (Changes by Graf Zahl) +- added Floor_MoveToValue and Ceiling_MoveToValue action specials. + +November 19, 2007 (Changes by Graf Zahl) +- Changed first name from 'none' to ''. The internal constant is still NAME_None, + though. +- Fixed: Picking up a backpack incorrectly set the maximum amount for any ammo + type that didn't have a BackpackMaxAmount to 0. + +November 18, 2007 (Changes by Graf Zahl) +- Fixed TableShit0 definition. + +November 13, 2007 (Changes by Graf Zahl) +- Fixed Berserk pickup sound. +- Fixed: When the DONTMOVE flag for A_Chase was used, movecount was not decreased + resulting in missile attacks not working. +- Fixed: Hitscan attacks used the puff's position to calculate the trajectory for + weapon kickback. + +November 11, 2007 (Changes by Graf Zahl) +- Fixed: The FMOD stream player must specify whether it wants to play the + sound looped or not when playback is started, not when the stream is created. +- Fixed: A_Saw didn't use the puff's damage type. +- Fixed: The AxeBlood's death state was using the wrong sprite frame. + +November 10, 2007 (Changes by Graf Zahl) +- Fixed: The Mancubus had an attack sound defined even though it shouldn't. + +November 9, 2007 (Changes by Graf Zahl) +- Fixed: ACS's CheckWeapon must do a case insensitive string comparison to + compare the weapon name with the ready weapon's type. + +November 8, 2007 (Changes by Graf Zahl) +- Changed PowerFlight so that Hexen's infiniteness is not controlled by being + in a hub but by a level flag instead. + +November 7, 2007 (Changes by Graf Zahl) +- Fixed: Floor and ceiling huggers must set themselves to floor and ceiling each + time they move. +- Added a LEVEL_NOMONSTERS flag so that G_ChangeLevel doesn't have to mess with + the dmflags CVAR to start the level without monsters. + +November 4, 2007 (Changes by Graf Zahl) +- Fixed: Backpacks didn't increase the ammo capacity to BackpackMaxAmount if + an ammo type's BackpackAmount was 0. +- Fixed some minor bugs in custom skill code. + +November 3, 2007 (Changes by Graf Zahl) +- Added text color options to menu code so that the skill definitions can set + the color of the menu's text. +- Externalized skill settings to ZDoom.pk3 + +November 2, 2007 (Changes by Graf Zahl) +- Added skill definitions to MAPINFO. + +October 29, 2007 (Changes by Graf Zahl) +- added two new things which can set a sector's color without the need of tags + or scripts. ColorSetter (#9038) sets the sector's color and FadeSetter (#9039) + sets the fog color. +- added new flags MF5_ALWAYSFAST and MF5_NEVERFAST. These flags unconditionally + enable or disable fast movement logic, regardless of skill settings. +- added an abstraction layer for skill related settings. This is a preparation + for implementing custom skill definitions but right now all it does is + returning the original values but keeping the related information all in one + place + +October 28, 2007 (Changes by Graf Zahl) +- Fixed: The pointer cleanup code must also check a sector's sky box pointers. + +October 27, 2007 (Changes by Graf Zahl) +- Fixed: Right after teleporting P_SlideMove could cause player movement. + Added a check for reactiontime to prevent that. +- Fixed: PainChances and Damagefactors were never freed. +- Added option to A_Chase that prevents the monster from moving. +- Fixed: The stained glass shards were missing the HEXENBOUNCE flag. + +October 20, 2007 (Changes by Graf Zahl) +- Added some NULL pointer checks to AActor::GiveAmmo. +- Fixed: The FSwordMissile was missing the special damage handling that + reduces damage when hitting a player. + +October 19, 2007 (Changes by Graf Zahl) +- Fixed: APlayerPawn::UpdateWaterLevel must check if the actor is still + connected to a player. +- Fixed: POwered up weapons with a different ready state than their base + weapon didn't change back when the powerup expired. +- Fixed: The powered up version of Heretic's Gauntlets missed the proper + state assignments for Ready, Lower and Raise. + +October 17, 2007 (Changes by Graf Zahl) +- Fixed: The Strife player was missing its pain state. + +October 12, 2007 (Changes by Graf Zahl) +- Fixed: Revenant missiles couldn't home in on targets with a height lower than + 40. +- Fixed: The code which checked for hitscan traces hitting actors from above + and below must test whether the calculated hit position is actually inside + the actor being checked. If it crosses the top/bottom plane outside the + bounding box there can't be a hit. +- Changed: State labels in code pointer calls must now be enclosed in quotation marks. + This was done to ensure compatibility with parsers that will parse these as + identifier-aware script code later. + +October 8, 2007 (Changes by Graf Zahl) +- Fixed: The code that checked hitscans entering an actor from above and below + calculated the hit position wrong. + +October 5, 2007 (Changes by Graf Zahl) +- Fixed: Tne Imp's raise state sequence was wrong due to a typo. +- Fixed: The shotgun had spawn ID 21 instead of 27. +- Fixed: All 3 states in the DoomUnusedStates actor need to end with a 'stop'. + +October 3, 2007 (Changes by Graf Zahl) +- Fixed: The DECORATE TakeInventory functions didn't check the IF_KEEPDEPLETED + flag. + +September 29, 2007 (Changes by Graf Zahl) +- Fixed: ClearInventory should leave ammo in the inventory because it might be + referenced by undroppable weapons. +- Fixed: Several functions in a_artifacts.cpp were missing a check for a valid + owner. +- Fixed: sc_man counted lines wrong when ungetting strings but getting tokens + next. + +September 27, 2007 (Changes by Graf Zahl) +- Fixed: When I changed the scaling of textures to full fixed point precision + I forgot to change the call that draws the automap marker numbers. +- Fixed: The chaingun-flash-checking code always checked the first player, + not the calling one. +- Fixed: Hitscan traces didn't hit actors when entering from above or below +- Fixed: The DECORATE expression evaluator was reading the operator token + from the wrong variable in a few places resulting in incorrect calculations. +- Fixed: MP3/OGG music always looped because the looping flag was always + set when FMOD was called to play it. +- Removed upper limit of 1 for an actor's gravity factor. +- Fixed: A_VileTarget spawned the fire at coordinate (target->x, target->x) + instead of (target->x, target->y). (Old vanilla bug.) + +September 26, 2007 (Changes by Graf Zahl) +- Fixed: F_StartFinale shouldn't get the information if the game is about + to end from level.nextmap. For example, this check is wrong for a secret + exit. + +September 25, 2007 (Changes by Graf Zahl) +- Fixed: AActor::CopyFriendliness must not copy the target if it has the + MF3_NOTARGET flag set. +- Fixed: Picking up weapons in deathmatch gives 2.5 times as much ammo as + in other modes. + +September 23, 2007 (Changes by Graf Zahl) +- fixed: The #include command in DECORATE always tried to look up the name + as a normal WAD lump name. It only should do that if the name is not longer + than 8 characters and doesn't contain any '/'-characters. + +September 11, 2007 (Changes by Graf Zahl) +- fixed: The Timidity player didn't close its temporary files and left them + behind because it couldn't delete them. +- added a $MidiDevice option to SNDINFO which can either set the preferred + MIDI device for a song to Timidity or Windows' standard MIDI device. + The reason for this: About 80% of my MIDI music collection sounds better + with Timidity and the other 20% with Windows' standard synth and I'd like + to be able to use each with the one that sounds better. For MUS files you + can also force the use of OPL playback. + +September 8, 2007 (Changes by Graf Zahl) +- added telefrag option to A_SpawnItemEx. + +September 5, 2007 (Changes by Graf Zahl) +- Fixed: Several options while changing maps only worked for the regular exit + but caused problems when used with the secret exit. Rewrote the code to + set the next map at the beginning and removed all subsequent parts that + tried to resolve it from the original data again. + +August 19, 2007 (Changes by Graf Zahl) +- Fixed: dumpmap crashed when used outside a map. + +August 10, 2007 (Changes by Graf Zahl) +- Exported A_DeQueueCorpse to DECORATE. It seems I forgot this when exporting + A_QueueCorpse. + +August 9, 2007 (Changes by Graf Zahl) +- Moved setting of gameskill from M_ChooseSkill to G_DoNewGame because it + doesn't work in M_ChooseSkill when the full console is open. + +July 28, 2007 (Changes by Graf Zahl) +- fixed: The BFGBall's explosion sequence was missing a state. +- fixed: The brown Chaos Serpent in Hexen had an incorrect sprite for its + ice death sequence set. +- fixed: Ammo upon game start does not get multiplied when on easy skill. + Implementing this as an inventory flag IF_IGNORESKILL also allows to create + ammo/weapon/backpack types that don't multiply the ammo given when on this + skill. + +July 24, 2007 (Changes by Graf Zahl) +- moved Doom exit sounds into SNDINFO as $random definitions. + +July 18, 2007 (Changes by Graf Zahl) +- Fixed: Dying Lost Souls could be reset to their see state if they slammed into + something. + +July 12, 2007 (Changes by Graf Zahl) +- Added DTA_TopOffset and DTA_LeftOffset values to the automap background drawer. +- Fixed: DECORATE color translations with explicit colors didn't work because the + code treated byte values as fixed point. +- Fixed: LEVEL_NOALLIES must clear MF_FRIENDLY off any spawned actor except players. + Otherwise it doesn't work properly. +- Fixed: Entering a backslash in the player's name box caused a crash because + the code analyzing the string was missing a NULL pointer check. +- Fixed: Thing_Hate and Teleport_ZombieChanger unconditionally made state jumps, + even for dead monsters. +- Fixed: The palette flash for item pickup was not reset upon a player's death. +- Fixed: P_DamageMobj tried to get damage multiplier information from the + damage inflictor, not the attacker. +- Fixed: PowerTimeFreezer::DoEffect did not call its superclass method. +- fixed: When morphed monsters died they tried to set MF3_STAYMORPHED for the + attacker, not themselves. This caused a crash when they were killed by a crusher. + +May 28, 2007 (Changes by Graf Zahl) +- Split thingdef.cpp into several files so that the state and property code + no longer gets in the way of the main parser. +- Changed A_MissileAttack, A_MeleeAttack and A_ComboAttack so that they use + metadata. Now all the hack code associated with these functions can be removed. +- Fixed: deadthings.txt contained a superfluous ';' which created parsing errors + with my changed code. +- Cleaned up DECORATE parser a little - moved the old style parsing code into its + own file and rearranged a few things. +- Made ProcessStates non-static so that it doesn't need to be passed as an argument + to all functions in the DECORATE parser. +- Moved DECORATE parser files into their own subdirectory. +- Optimization: SC_GetToken no longer sets sc_name for identifiers. In most cases + this creates needless overhead by adding a potentially unneeded name to the name + table and looking up the name. In almost all cases where a name is needed it's as + easy to assign sc_String to the name variable. +- Added enum definitions to DECORATE. + +May 27, 2007 (Changes by Graf Zahl) +- Fixed: Hirestex replacements for sprites didn't work properly due to some + incorrect calculations in R_ProjectSprite. +- Fixed: The speed definition of PowerSpeed used PROP_SpeedFixed instead of + PROP_SpeedLong. +- Fixed: The Chainsaw's kickback was initialized to the default - not 0. + +May 26, 2007 (Changes by Graf Zahl) +- Fixed: Resurrecting a player must set mo->special1 to 0 because it is used + as a counter by the Hexen fighter's fist weapon. + +May 25, 2007 (Changes by Graf Zahl) +- Fixed: The Wraithwerge's spirits shouldn't attack friends. +- Fixed: The Heresiarch's balls must not adjust their z-position after the + Heresiarch dies. + +May 24, 2007 (Changes by Graf Zahl) +- Added damage type specific pain chances and an MF5_NOPAIN flag that can be used + to suppress entering the pain state altogether. +- Changed font initialization so that you can define replacements for the default + fonts in FONTDEFS. +- Removed the 'add a bot' menu option since bots are beyond repair and therefore + mostly useless. +- Fixed: Hitscan attacks must always spawn a puff so that it and its properties + can be used as damage inflictor. + +May 20, 2007 (Changes by Graf Zahl) +- Copied railgun sound fix from Skulltag. + +May 19, 2007 (Changes by Graf Zahl) +- Made infighting a level flag. The old method still exists but the level flags + will take precedence if set. + +May 13, 2007 (Changes by Graf Zahl) +- fixed: meleethreshold only has meaning when the attacking monster actually + has a melee attack. +- copied a colormap fix from Skulltag. + +May 12, 2007 (Changes by Graf Zahl) +- Added a compatibility option to restore the original behavior of the Invisibility + powerup. +- Changed: Weapons are no longer checked for the EXTREMEDEATH and NOEXTREMEDEATH flags. + For all damage related actions it will always be the projectile (or puff for hitscan + attacks) that is treated as the damage inflictor. +- Fixed: Hexen's fourth weapons made extreme death depend on the weapon the player + is holding, not the projectile that did the kill. The WIF_EXTREME_DEATH flag + no longer exists as a result. +- Expanded PowerSpeed so that subclasses can be derived that alter the speed factor. +- Added an MF5_USESPECIAL flag that allows using things to execute their specials. +- added MF4_FORCERADIUSDMG flag so that exploding items can be created which + are able to hurt boss monsters. +- moved ML_BLOCK_PLAYERS to the value 0x4000 to bring it in line with Skulltag's + implementation. + +May 9, 2007 (Changes by Graf Zahl) +- added Skulltag's custom F1 help screen MAPINFO option. + +May 4, 2007 (Changes by Graf Zahl) +- Fixed: Resurrecting a player must restore all flags words, not just the first one. +- Fixed: APowerWeaponLevel2::EndEffect must check PendingWeapon for WP_NOCHANGE. + +May 3, 2007 (Changes by Graf Zahl) +- added Skulltag's high jump rune as a powerup + +May 2, 2007 (Changes by Graf Zahl) +- Added Skulltag's Drain and Regeneration runes as powerups and used specific player + sounds for their sound effects instead of using misc/i_pkup. + (If I ever decide to implement runes it will be in a way that can use the regular + powerups instead of having to define specific classes for them.) +- Added Skulltag's PowerQuadDamage and PowerQuarterDamage as more customizable + PowerDamage and PowerProtection. These new powerups allow free customization of + the damage modification per damage type by inheriting from these classes and + setting specific values. Such derived damage/protection powerups will be considered + as separate powers so that for example a QuadDamage and a DoubleDamage item can be + stacked which would result in 8x damage. + +May 1, 2007 (Changes by Graf Zahl) +- merged player_t::cheats and player_t::Powers into one variable. +- Fixed: player_t::Powers was not saved in a savegame. +- Removed all unused PW_* player power flags. +- Added Skulltag's TimeFreezer powerup. +- Moved most of the menu strings (except options and player setup menu) into the + string table. + +April 30, 2007 (Changes by Graf Zahl) +- Fixed: GetLumpOffset must call SetLumpAddress when being called for uncompressed + Zip entries. +- Fixed: Some of Doom's weapon obituaries didn't have the $-prefix that indicates a + reference to the string table. +- Fixed: The check for a valid weapon's spawn state for weapon dropping was incorrect. + +April 29, 2007 (Changes by Graf Zahl) +- Increased precision of texture scaling factors to full fixed point. In the process + I got rid of the old tx and ty CVARs because they made the texture scaling + much more complicated than it was actually needed (and besides, they were completely + useless except for testing purposes anyway.) +- Added a simple check for abstract weapon classes so that I can properly define + the DoomWeapon base class. +- Fixed: When the Tome of Power runs out it must also set any pending weapon + back to their regular state. + +April 27, 2007 (Changes by Graf Zahl) +- Added damage factors that allows to make monsters more or less resistant + to specific damage types. +- Changed Dehacked parser to use the DECORATE symbol tables for code pointers + instead of creating its own ones. + +April 26, 2007 (Changes by Graf Zahl) +- Removed the HandleNoSector hack and changed A_Look so that it uses the sector's + sound target for actors with MF_NOSECTOR regardless of compatibility settings. +- Moved initialization of weapon slots after the actor initialization. + With default weapons exported to DECORATE it can't be done earlier. +- Converted Doom weapons to DECORATE. +- Changed backpack definition so that Doom's backpack is no longer the base + class that implements its functionality. Now there is an abstract base class + all backpack-like items derive from. Also moved the actual definition of Doom's + backpack to DECORATE. + +April 22, 2007 (Changes by Graf Zahl) +- added a CANUSEWALLS flag which allows a monster to activate 'use' specials + like doors. This flag is on by default for any monster which was the + previous behavior. +- Optimized the DECORATE flag parser so it can more efficiently handle + the deprecated flags. As a side effect of this optimization the deprecated + flags became usable in A_ChangeFlag again. +- Changed LONGMELEERANGE flag into a MeleeThreshold property. +- Changed SHORTMISSILERANGE flag into a MaxTargetRange property. +- Added Thing_Stop action special. +- Changed ACS's SetActorState so that it isn't limited to only one sublabel. + This change also enables the implicit mapping of the old special death + state names. +- Fixed: ShowErrorPane deleted the StartScreen instead of just calling + NetDone. +- moved the DIM_MAP define into v_palette.h so that it can be accessed + from outside the status bar code. +- Fixed: The check for non-swimmable water in UpdateWaterLevel checked for + SECF_UNDERWATER instead of SECF_UNDERWATERMASK. + +April 12, 2007 +- Switched ACS world and global arrays to the TMap class instead of + TAutoGrowArray. A map can handle a wide range of key values better than + an array. + +April 10, 2007 +- Added a templated associative array class, TMap, that uses Lua's "chained + scatter table with Brent's variation" algorithm. I had considered using + hash_map until I discovered that it's not standard STL, and there are two + major but incompatible implementations of it. So I rolled my own, and Lua + seemed like a good place to go to for an efficient algorithm, since it + makes heavy use of tables. + +March 28, 2007 +- Fixed some const char * -> char * conversions flagged by GCC 4.2.0 in the + Win32-specific code. +- Fixed: The Win32 neterror() should return a const char *. +- Adding blinky text to the ENDOOM screen. + +March 24, 2007 +- Changed MakeKey's hash algorithm from a CRC32 to Paul Hsieh's SuperFastHash. + +March 20, 2007 +- Moved the implementation for the Thing_Damage special into another function + so that I can create the ACS function Thing_Damage2. It's exactly the same as + Thing_Damage, except the damage type is specified by name. When I did this, + I noticed that it didn't do anything useful for a TID of 0, so I made it + affect the activator in that case. + +March 19, 2007 +- Added a new SetActorState ACS function: + int SetActorState (int tid, str statename, optional bool exact); + If tid is 0, it affects the script activator, otherwise it affects all the + matching actors. Statename is the name of the state you want to put the + actor in. The final parameter, exact, specifies whether or not partial + state name matches are accepted. If you don't specify it or set it to + false, if you try to do something like: + SetActorState (0, "Foo.Bar"); + And the actor has a Foo state but no Foo.Bar state, it will enter the Foo + state. If you set exact to true: + SetActorState (0, "Foo.Bar", true); + Then the actor must have a Foo.Bar state, or it will not change state at + all, even if it has a Foo state. + The return value for this function is the number of actors that successfully + changed state. Note that you should refrain from using this function to + enter special states such as Death, or unpredictable results could occur. + +March 13, 2007 +- Fixed: Morphed players did not regain their innate armor when unmorphing. + (Only Hexen has players with innate armor, under normal conditions.) + +March 12, 2007 +- Changed the default player.startitem amount from 0 to 1. + +March 9, 2007 +- Converted the TTY startup screen to a class for Linux. + +March 8, 2007 +- Increased the limit for the SorcererBallPop to 3 to be inline with the + other Heresiarch ball sounds. +- Fixed: In Strife, using the shadow armor a second time while it is still + active should make you completely invisible and your first-person weapon + inverse grayscale. + +March 7, 2007 +- Changed P_SpawnPlayerMissile() to use the same height calculation as + P_(Aim)LineAttack(). +- Added an AttackZOffset to PlayerPawn. This is the offset from the + center of the player at which their attacks are fired and scales + according to their crouched height. +- Changed the version of P_SpawnPlayerMissile() that takes coordinates + to use that location as an offset from the standard attack location + rather than as an explicit attack location. + +March 6, 2007 +- Added an IF_KEEPDEPLETED flag for inventory items to keep them in the + player's inventory even when they have been used up. If the item also + has an inventory bar icon, it will be drawn darkened while it is + depleted. + +March 5, 2007 +- Fixed: Thing_ProjectileAimed did not set the missile's speed correctly. + +March 3, 2007 +- The net start pane is now given focus when it is created, so it can + receive keyboard input. +- Added playback of the "WeaponPickup" sound when a Hexen net game starts. +- Separated the different startup screens into classes for better + modularization (which I should have done in the first place). + +February 28, 2007 +- Changed the net start pane to open underneath the existing window instead + of scrunching the startup screen up to make room for it. +- Added the red net notches for Hexen's startup screen. +- Added hprintf and status simulation for Heretic's startup screen. +- Fixed: When I converted the P_Thing_Projectile() code for target leading + to use the new vector routines, I had made dist calculate the squared + length of the aim vector instead of the correct length. +- Fixed: When starting a new game from the menu while the fullscreen console + was open, the game was frozen before its initial setup tick until the + console was closed. The most obvious result of this is that your view was + stuck on the floor until the console closed. +- Fixed: Pressing ESC while editing your player name completely cleared the + menus instead of simply canceling the name change. +- Fixed: The status bar still showed the rampage face if you held the fire + button down while frozen. + +February 24, 2007 +- Added << operators for FString that function exactly like +=, except they + are left-associative, so you can use them like you would with an ostream + and append to a string in a single expression without any overhead from + allocating temporary strings as would happen if you used the + operator. + In other words, instead of this: + string += "Some string " + "that is assembled" + " in parts"; + You can do this and be more efficient while still being just as readable: + string << "Some string " << "that is assembled" << " in parts"; +- Changed PCD_PRINTBIND to include the command in its output if it isn't + bound. +- Fixed: ACS_ExecuteWithResultValue could not be used inside a script because + DLevelScript::RunScript() was not reentrant, thanks to having a global stack. + The stack should be local to each instance of RunScript. +- Fixed: rt_draw4cols() could get stuck in rare situations where it thinks it + should be drawing something but doesn't. Since long-term I plan to just + replace all the masked drawing the variants of maskwallscan, I'm not going + to try and find the real cause and fix it there. Instead, it just detects + the situation and bails out when it finds it. + +February 24, 2007 (Changes by Graf Zahl) +- Fixed: In the Doom2 cast finale it was impossible to toggle the console. +- Added APROP_Friendly actor property for ACS. +- Added a new flag, MF2_DONTREFLECT that prevents missiles from being reflected. +- Fixed: ALoreShot::DoSpecialDamage must check whether the shooter is still + present. If it had been removed before the projectile hits its target + a crash could occur. +- Fixed: GetPlayerInfo was missing breaks and always returned 0 as a result. +- Added Grubber's submission for printing key bindings in ACS. + +February 19, 2007 +- Fixed: $Ambient SNDINFO commands zeroed the AmbientSound structure, which + is a no-no when using FString. +- Fixed: DEM_WIPEON/OFF commands should be ignored during demo playback and + not pause the game, or the whole thing will be out of sync. +- Fixed: Playing a demo in windowed mode no longer grabs the mouse. + +February 14, 2007 +- Added two new net commands: DEM_WIPEON and DEM_WIPEOFF. They keep track of + when a player is going through a screen wipe and act like a pause, so the + game doesn't run several tics afterward to catch up with it. +- Fixed: EV_Teleport() did not set players to their idle state, so if they + were running when the teleported, they would still be running afterward + even though they weren't moving anywhere. Normally, P_XYMovement() does + this when they stop due to friction. +- Fixed: AActor::TakeSpecialDamage() completely bypassed the standard rules + for target switching on actors with MF5_NODAMAGE set. +- Changed the return values of the ACS spawn, spawnspot, and spawnspotfacing + commands to be the total count of things spawned, rather than a pretty + much useless reference to the actor spawned at the last map spot. +- Fixed: DLevelScript::DoSpawn() takes a byte angle, but DoSpawnSpotFacing() + passed it a full-length angle. +- Fixed: When MF_SKULLFLY is removed because an actor slams into something, + it was set to a see or spawn state, resetting its tic count and bypassing + the effectiveness of the MF2_DORMANT flag. While I was at it, I decided + dormant skulls shouldn't do slamming damage, either. +- Fixed: P_Thing_Spawn() returned success only if all thing instances were + successfully spawned. As long as at least one thing was spawned, it should + be considered a success. +- Fixed: Flipped single rotation sprites were only flipped every other 22.5 + degree interval. +- Fixed: S_ClearSoundData() did not stop any channels before freeing the + samples, a problem for the alternate sound renderer if it happened to be + playing any sounds at the time, since it would try to keep on playing them. + +February 12, 2007 +- Added two new cvars (win_x and win_y) that keep track of the window + position when not playing in fullscreen mode. +- Changed the upper-left window positioning that was always used in debug + builds into a command line option (-0), so debug and release builds behave + the same. + +February 10, 2007 (Changes by Graf Zahl) +- Changed earthquake code to not add all the intensities but use the maximum + in DEarthQuake::StaticGetQuakeIntensity. The reason for this: Quakes were + never supposed to be additive. Many maps, including Hexen's own have placed + quake spots so that they cover a larger area but the areas covered by the + single spots overlap. On such maps the view will shake like crazy and + render the map nearly unplayable. + +February 4, 2007 (Changes by Graf Zahl) +- Fixed: The powered up Mace was missing its HoldAtkState. +- Added: Using "*" with ACS's music commands will play the level's default + music set in MAPINFO. + +February 3, 2007 +- Added two new MAPINFO flags to control what actor activates impact lines: + * MissileShootersActivateImpactLines - the current behavior. + * MissilesActivateImpactLines - the original Hexen behavior. +- Fixed: The changecamera special should remove "past viewer" information + from the renderer in case the camera changed position or direction since + the last time it was looked through. Otherwise, the renderer will + interpolate from its previous view for one frame when it is switched to. +- Removed the 63-character limit on sound names. +- Reduced the rate at which drowning damage increases. +- Added more player water sounds: + *dive - Played when your head goes below water. + *surface - Played when your head goes back above water. + *gasp - Played when you were drowning and get your air back. + If your head surfaces and you were drowning, only *gasp plays, not both. +- Added damage-specific player death sounds, in the same fashion as the + damage-specific player pain sounds. It looks for a sound with a name like + "*death-damagetype" first and then "*death" if the first sound didn't exist. +- Removed the constraint that player sounds must be reserved before they can + be assigned. Hence, the $playerreserve command has been eliminated, because + it is no longer needed and it was never accessible from user wads, so I + don't need to worry about breaking anything by removing it. + +February 2, 2007 +- Added a new fixrtext tool that sets the IMAGE_SCN_MEM_WRITE flag for + .rtext sections in the assembly object files. Now I can avoid doing this at + runtime, which means that ZDoom is now UPX-compatible if anyone wants to + pack it. + + You will need to do a rebuild or manually delete the old assembly .obj files + for the first build from this revision to succeed, since there are no + changes to the assembly files themselves, and the build process will not be + able to automatically detect that they need to be rebuilt. +- Fixed: The SafeDivScales used a signed shift for their if test. This fails + when a == 0x80000000, because the result of abs will still be negative as + long as we use signed math. +- Fixed: SafeDivScale31 performed DivScale32 instead. +- Fixed: R_DrawSpanP_ASM had a short jump into a different section. + +January 30, 2007 +- Fixed: When quiting from fullscreen mode, RestoreConView() did not ungrab + the mouse. +- Fixed an old Doom bug: Firing the chaingun with only one bullet still made + it play its sound twice. +- Added an operator += for FString that takes an FName as input, since GCC + is unable to synthesize one. +- Converted xlatcc to use lemon during its build process. Now you don't need + bison to rebuild everything anymore. + +January 27, 2007 +- Added support for damage-specific player pain sounds. +- Removed the constraint that all $playerreserve SNDINFO commands must come + before the other $player commands. +- Fixed: TArray::Reserve did not construct its newly allocated entries. +- Changed the damage type for drowning from 'Water' to 'Drowning'. +- Fixed: Since FMemLump is now implemented on top of FString, it never + contains a NULL point, so the GetMem() method should fake it by + returning NULL when the string is empty. Reverted p_xlat.cpp to its + old revision. + +January 26, 2007 (Changes by Graf Zahl) +- Fixed: The rewrite of FMemLump broke the non-standard use of it in + P_TranslateLinedefs. +- Fixed: ShowErrorPane can be called before ST_NetDone is valid so it has to + check whether it is NULL. +- Fixed: The Megasphere had an incorrect pickup sound. + +January 25, 2007 (Changes by Graf Zahl) +- Fixed: The new video initialization code could set the screen's Font pointer + to NULL, causing a crash with levels that start in a secret sector. + +January 24, 2007 +- Fixed: If you called the FString assignment operator that accepts a + const char * with a string inside its buffer, it released the buffer + before copying the string. +- Added a new FString constructor that creates the string from a lump. + +January 23, 2007 +- Fixed: G_DoReborn() calls G_InitNew() with mapname set to level.mapname. + G_InitNew() then copies it onto level.mapname, which is undefined + behavior (although it does work as we want it to). +- Modified FMemLump to store its data using FString. That class provides + a convenient method of storing reference counted data, so now FMemLump + doesn't need to muck about sneakily using const_casts and possibly + tricking its users into thinking that an old one is still valid after + being assigned to a new one. +- Fixed: The IMGZ, PNG, PCX, and JPEG loaders assumed the files were + large enough for their headers without actually checking. + +January 22, 2007 +- Fixed: The simulated palette blends when the menu or console are open + were applied even when the status bar wasn't drawn. (In other words, even + in situations where a real palette blend wouldn't have happened.) +- Added a range check for the PNG grAb chunks. +- Fixed: AddLine() could corrupt memory if the length of the text being + added was longer than the console buffer. +- Fixed: FTexture::GetScaled(Left|Top)Offset returned the Width and Height + instead when the scale values were 0. +- Removed the unnecessary "mov ecx,c" from mscinlines.h:Scale(). +- Fixed: The simulated palette blend used when the console is down needs to + force a full screen update the next frame. +- Fixed: LocalViewPitch could overflow and wrap around when a netgame stalls. +- Changed the vertheight and rounding-error-checking code in + DCanvas::DrawTexture() to calculate off the actual bottom of the image + instead of the height, improving precision. Now the scaled status bar is + flush with the bottom of the screen at 1280x1024, for instance. +- Added a new WIF_NO_AUTO_SWITCH flag for weapons that should never be + switched to automatically when the player picks them up. + +January 18, 2007 +- Added D3DCREATE_FPU_PRESERVE to the IDirect3D9::CreateDevice() call. + Normally Direct3D sets the FPU to single precision. We don't want that, + since it can mean going out of sync with machines that are using the + standard precision. Additionally, the nodebuilder requires the extra + precision that single precision lacks. +- Replaced the vector math routines with the ones I developed for the FP code. + +January 15, 2007 +- Added a summonfoe CCMD, which is analagous to summonfriend but forces the + summoned creature to be hostile instead. +- Changed the default snd_output under Linux to OSS. +- Added a GTK+ version of the IWAD selection dialog box. That brings the + Linux port one step closer to feature parity with the Windows version. + +January 15, 2007 (Changes by Graf Zahl) +- added Grubber's submission for customizable gravity per actor. + +January 14, 2007 (Changes by Graf Zahl) +- Fixed: A_Jump didn't work for weapons or CustomInventory items. + +January 13, 2007 (Changes by Graf Zahl) +- Adjusted AlterWeaponSprite so that it properly handles multiple + invisibility powerups at the same time. + +January 13, 2007 +- Integrated the fatal error display into the text logger. + Next: Figure out how to do all this fancy new startup window stuff with GTK+ + so Linux users don't feel left out. + +January 12, 2007 (Changes by Graf Zahl) +- Converted the StrifePlayer to DECORATE. Even though it requires exporting + 3 new code pointers without general use it was necessary to handle + GiveDefaultInventory consistently for all players without the need to + subclass this function. +- Added a Player.RunHealth property to expose the StrifePlayer's behavior of + not being able to run when its health is below 10. +- Changed APlayerPawn::GiveDefaultInventory so that it always adds a HexenArmor + and a BasicArmor item to the inventory. If these items are not the first ones + added to the inventory anything else that might absorb damage is not guaranteed + to work consistently because their function depends on the order in the inventory. +- Changed handling of APowerup's DoEffect so that it is called from the owner's + Tick function, not the item's. This is so that the order of execution is + determined by the order in the inventory. When done in the item's Tick function + order depends on the global thinker table which can cause problems with the + order in which conflicting powerups apply their effect. Now it is guaranteed + that the item that was added to the inventory first applies its effect last. +- Fixed: Added checks for Speed==0 to A_Tracer and A_Tracer2 because this could + cause a divide by zero. +- Fixed: P_MoveThing must also set the moved actor's previous position to + prevent interpolation of the move. +- Fixed: APowerInvisibility and its subclasses need to constantly update + the owner's translucency information in case of interference between different + subclasses. Also changed Hexen's Cleric's invulnerability mode to disable + the translucency effect if an invisibility powerup is active. + +January 9, 2007 (Changes by Graf Zahl) +- Added Skulltag's REDMAP and GREENMAP. +- Fixed: The PlayerSpeedTrail must copy the player's scaling information + (from Skulltag) +- Added r_maxparticles CVAR from Skulltag. +- Changed PCX loader so that it always loads the last 768 bytes of 8 bit graphics + as a palette + +January 8, 2007 +- Added escape code support to the echo CCMD, so you can use colors with it. +- Changed the color scheme for the startup log to light text on a dark + background and added color support to it. +- When a fatal error occurs, the log window is now scrolled so the final + lines are guaranteed to be visible. +- Fixed: ShowErrorPane() crashed if it was called before the main window was + created. +- Removed the game title banner for the ENDOOM display and replaced it with a + short prompt at the bottom of the window. +- Halved the number of times the Strife startup screen updates the progress + bar so that it spends less time drawing and gets done loading faster. +- Fixed: The quad FBD3D draws to the screen was one pixel too tall. + +January 7, 2007 (Changes by Graf Zahl) +- Fixed: Sorting of files in Zips was broken. +- Ported GZDoom's deep water splash code so that splashes are handled properly + in Boom maps with non-swimmable water. +- Changed ENDOOM CVAR so that there is an option to show only modified versions. + +January 6, 2007 +- Added simulation of Strife's startup screen. +- Switched from a 14-pixel tall VGA font to a 16-pixel tall one for the + Heretic loading screen (and ENDOOM). + +January 6, 2007 (Changes by Graf Zahl) +- Added ENDOOM screen. It will only be shown when the game is exited via the + main menu and there is an option to switch it off for those who don't want + to wait. + +January 5, 2007 +- Added simulation of Heretic's startup screen. +- Changed copyright notice for i_main.cpp, since none of it is really id's + code. + +January 5, 2007 (Changes by Graf Zahl) +- Added customizable border textures. They will be defined with the + MAPINFO keyword 'bordertexture' and are settable per map. +- Fixed: When used in DECORATE A_Explode must use A_ExplodeParms. +- Added custom label support to A_Chase. To enable resurrection from the + customizable version I also moved all A_VileChase stuff into p_enemy.cpp. + +January 4, 2007 +- Added simulation of Hexen's startup screen (currently minus net notches). + +January 2, 2007 (Changes by Graf Zahl) +- Fixed: The ANIMATED parser must read the bytes for the speed as unsigned bytes. +- Fixed: The screen wipe must be disabled for Heretic's underwater ending. If + not, the wipe will try to mix pictures with different palettes. + +December 31, 2006 (Changes by Graf Zahl) +- Fixed: Several actors for Doom were missing their spawn ID. + +December 29, 2006 +- Fixed: APlayerPawn::GiveDefaultInventory() used two different variables + both named item. +- Switched ddraw.dll to be delay loaded. With D3D9 now being the default + display code, this avoids wasting time loading DDraw if it isn't needed. + +December 28, 2006 +- Fixed: The Win32 I_FatalError() did not set alreadyThrown, so it could get + stuck in an endless fatal error loop. +- Fixed: The SDL input code must convert the event.data1 to uppercase. +- Added more resolution options when playing windowed under SDL. +- Changed SDL mouse handling to be basically identical to the (non-DirectInput) + Win32 code. The mouse is polled periodically and constantly warped to the + center of the window. Despite what the SDL docs specify, SDL_WM_GrabInput() + is apparently no longer a reliable means of obtaining continuous relative + mouse motion events. +- Fixed: The non-Windows implementation of I_FindClose() did not check for -1 + handles. +- Fixed all the warnings from GCC 4.2, including a handful that were present in + older GCCs. +- Fixed: The VC++ project was not set up to redefine RM using del in + wadsrc/Makefile, nor did it use the makefile for cleaning. +- Added ST_NetMessage() for mixing miscellaneous messages with the network + startup meter, since they get mixed in the same space on the Linux terminal + and must be handled properly to avoid looking bad. +- Fixed the new network status display for the Linux terminal. + +December 25, 2006 (Changes by Graf Zahl) +- Converted the Communicator to DECORATE. +- Renamed the new armor properties to use the same names as Skulltag to avoid + confusion. They still don't need a separate base class as in Skulltag though. +- Added Skulltag-type armor bonus that increases the max amount that can be given + by other armor items. +- Separated all armor related code from a_pickups.cpp into a_armor.cpp. + +December 24, 2006 (Changes by Graf Zahl) +- Replaced several calls to S_GetSoundPlayingInfo with S_IsActorPlayingSomething + because S_GetSoundPlayingInfo cannot properly resolve player and random sounds. +- Fixed: S_IsActorPlayingSomething has to resolve aliases and player sounds. +- Took S_ParseSndSeq call out of S_Init. This doesn't work when parsing SNDINFO + in D_DoomMain. +- Moved SNDINFO reading back to its old place after MAPINFO. This is necessary + for Hexen's music definitions. +- Added new flag MF5_NOBLOODDECALS that prevents bleeding actors from spawning + blood decals. + +December 23, 2006 (Changes by Graf Zahl) +- Fixed: The Cacodemon doesn't have a melee attack defined as I mistakenly + assumed when writing its DECORATE code. +- Fixed: Commander Keen's death sequence had one state duplicated. +- Fixed: Due to the changes for custom states the internal weapons shouldn't + define a holdatk state unless it differs from the attack state. +- Fixed: The bot code tried to spawn ACajunBodyNode instead of CajunBodyNode. +- Changed: MF2_BLASTED doesn't work well for players so I had to take it out + of A_BlastRadius. +- Fixed: When MF2_BLASTED was cleared MF2_SLIDE got cleared as well, no matter + whether it was set by default or not. Now the MF2_SLIDE check checks both + flags and the BlastRadius code doesn't set MF2_SLIDE anymore. + +December 22, 2006 +- Fixed: If anyone other than the most recently-connected player aborted + during i_net handshaking, everybody who connected after them would have + the wrong idea of what their player number was. +- Guests can now watch as other guests connect during i_net handshaking. +- Fixed: The host would let more than the desired number of players connect. +- Decreased the frequency of packets in ST_NetLoop() to two per second. +- Fixed: During the i_net handshaking, guests never verified that the messages + they received were from the host. +- Removed the -net command line option. I'm not sure it even worked anymore. + +December 20, 2006 +- Turned on warning level 4 just to see what it would produce: a lot of + warnings. At first, I was going to try and clean them all up. Then I decided + that was a worthless cause and went about just acting on the ones that + might actually be helpful: + C4189 (local variable is initialized but not referenced) + C4702 (unreachable code) + C4512 (assignment operator could not be generated) + +December 19, 2006 +- Fixed: D3DFB::Reset() also needs to restore the texture border color, + otherwise it gets reset to black and unused. +- Fixed: I_SetWndProc() needs to be called before any of the DirectX + interfaces are initialized, because DirectX subclasses the window itself, + and I_SetWndProc() undoes that subclassing. + +December 19, 2006 (Changes by Graf Zahl) +- Fixed: Inventory.Icon printed error message for all the missing icons in + Strife's teaser. +- Fixed: st_start.cpp needed a + #define _WIN32_WINNT 0x0501. +- Fixed a few uninitialized variables warnings for GCC. + +December 18, 2006 +- Reorganized the network startup loops so now they are event driven. There is + a single function that gets called to drive it, and it uses callbacks to + perform the different stages of the synchronization. This lets me have a nice, + responsive abort button instead of the previous unannounced hit-escape-to- + abort behavior, and I think the rearranged code is slightly easier to + understand too. +- Increased the number of bytes for version info during D_ArbitrateNetStart(), + in preparation for the day when NETGAMEVERSION requires more than one byte. +- I noticed an issue with Vista RC1 and the new fatal error setup. Even after + releasing a DirectDraw or Direct3D interface, the DWM can still use the + last image drawn using them when it composites the window. It doesn't always + do it but it does often enough that it is a real problem. At this point, I + don't know if it's a problem with the release version of Vista or not. + After messing around, I discovered the problem was caused by ~Win32Video() + hiding the window and then having it immediately shown soon after. The DWM + kept an image of the window to do the transition effect with, and then when + it didn't get a chance to do the transition, it didn't properly forget about + its saved image and kept plastering it on top of everything else + underneath. + +December 16, 2006 +- Added a network synchronization panel to the window during netgame startup. +- Fixed: PClass::CreateDerivedClass() must initialize StateList to NULL. + Otherwise, classic DECORATE definitions generate a big, fat crash. +- Resurrected the R_Init progress bar, now as a standard Windows control. +- Removed the sound failure dialog. The FMOD setup already defaulted to no + sound if initialization failed, so this only applies when snd_output is set + to "alternate" which now also falls back to no sound. In addition, it wasn't + working right, and I didn't feel like fixing it for the probably 0% of users + it affected. + +December 16, 2006 (Changes by Graf Zahl) +- Fixed: The smartaim logic was incorrect. Also added another mode: Autoaim only + at monsters. +- Merged FActorInfo::FindStateExact and FActorInfo::FindState into one function + because the differences are only minimal. +- Removed all the varargs FindState functions because they aren't really needed. + The engine itself never explicitly checks for more than 2 labels and for the + rest a function that gets passed a FName array is more suitable anyway. +- Changed state label storage so that each actor owns all the state labels itself + and doesn't have to traverse parent lists to find them. This is required for + Dehacked actors that inherit states (e.g. NonsolidMeat and Spectre) but it also + makes the data much easier to handle. +- Merged the fallingdamage setting into one menu item and added Strife damage to it. +- Moved deathmatch options into their own category in the gameplay options menu. +- Added the sv_smartaim code from GZDoom which tries to avoid autoaiming + at friendlies or shootable decorations if there are monsters that can be shot. +- Added: SetThingSpecial treats a tid of 0 as the activator. + +December 15, 2006 +- Fixed: The edit control used for logging output added text in reverse order + on Win9x. + +December 13, 2006 (Changes by Graf Zahl) +- Fixed: The particle fountains' names were different than before +- Fixed: FTexture::CheckForTexture should return NULL if the texture it + finds is of type FTexture::TEX_Null. If this isn't done not all occurences + of AASHITTY being used to silence an editor's error checker will be handled + correctly. In particular the transparent door trick will break. + +December 10, 2006 (Changes by Graf Zahl) +- Fixed: When a DehackedPickup replacement object is created it must copy + the state labels of the parent object. + +December 9, 2006 +- Went back to the roots and made graphics initialization one of the last + things to happen during setup. Now the startup text is visible again. More + importantly, the main window is no longer created invisible, which seems + to cause trouble with it not always appearing in the taskbar. The fatal + error dialog is now also embedded in the main window instead of being a + separate modal dialog, so you can play with the log window to see any + problems that might be reported there. + + Rather than completely restoring the original startup order, I tried to + keep things as close to the way they were with early graphics startup. In + particular, V_Init() now creates a dummy screen so that things that need + screen dimensions can get them. It gets replaced by the real screen later + in I_InitGraphics(). Will need to check this under Linux to make sure it + didn't cause any problems there. +- Removed the following stubs that just called functions in Video: + - I_StartModeIterator() + - I_NextMode() + - I_DisplayType() + I_FullscreenChanged() was also removed, and a new fullscreen parameter + was added to IVideo::StartModeIterator(), since that's all it controlled. +- Renamed I_InitHardware() back to I_InitGraphics(), since that's all it's + initialized post-1.22. + +December 9, 2006 (Changes by Graf Zahl) +- Fixed: P_LookForTid should abort its search when it discovers that it has + cycled through the entire list of actors. +- Reverted AActor::FindState to its R407 version because the change in R408 + doesn't compile properly with VC++. +- Changed FIXMAPTHINGPOS further so that it also affects objects that are + not directly on a wall but closer than its radius. +- Changed FIXEDMAPTHINGPOS to move objects completely out of the wall and + adjusted the radii of all affected objects to actually represent half + the sprite's width. + +December 8, 2006 (Changes by Graf Zahl) +- Fixed: The Acolyte's obituary wasn't printed. +- Fixed: The fighter player's attack state used the Cleric's sprite. + +December 5, 2006 (Changes by Graf Zahl) +- Moved A_ThrowGrenade from Inventory to Actor because it can also be used by + monsters +- Added velocity multiplicators to A_SpawnDebris. +- Changed: A_JumpIfNoAmmo should have no effect for CustomInventory items. +- Fixed: DECORATE jump commands must set the call state's result to 0 + even when they have to return prematurely. +- Added obituaries for Strife's and Hexen's monsters. +- Converted Strife's Bishop to DECORATE. +- Added momx, momy and momz variables to the DECORATE expression evaluator. + +December 3, 2006 +- Modified the trustInfo for updaterevision.exe so that it should be + fine even with the buggy mt.exe that comes with Visual C++ 2005. + (Note that the Platform SDK for Windows Server 2003 R2, and later + versions of the Windows SDK also come with a working mt.exe that + work fine with the old trustInfo.) + +December 2, 2006 (Changes by Graf Zahl) +- Converted the Heretic sound sequences and the particle fountains to DECORATE. +- Added DECORATE support for setting an actor's args. If this is done + it will also disable the actor's special that can be set in a map. This + is for actors that want to use A_CountdownArg or similar functions + that use the args for something different than the special's parameters. +- Converted a_sharedmisc.cpp to DECORATE. +- Added a new NActorIterator that can search for classes specified by name. +- Added a new constructor to TThinkerIterator that can search + for DECORATE defined subclasses that are not represented by a real C++ class. +- Fixed: BuildInfoDefaults must set the parent symbol table so that + all actors can get to the global symbols stored in AActor. +- Fixed some minor inconsistencies in the Arch-Vile's DECORATE definition. +- Fixed: A_VileAttack moved the flame without relinking it into the sector + lists. It also forgot to set the z-position correctly. (original Doom bug.) +- Fixed: The Doom 2 cast finale didn't work with the dynamic state name handling. + +November 30, 2006 +- Finished the framework for specifying all action functions externally, + including restricting them to particular classes. +- Removed all the "fast" and unused code from FColorMatcher. Today's + computers are fast enough that the difference isn't even noticeable + unless you're doing hundreds of thousands of matches, and I never had + any plans to improve the algorithm the "fast" code used. +- Fixed: BestColor() should not by default return 0 as a possible match, + since it's normally the transparent color. +- The DSimpleCanvas constructor now fills MemBuffer with zeros. +- Fixed: If the FBTexture wasn't exactly the same size as the screen, + D3DFB::PaintToWindow() would still lock it with D3DLOCK_DISCARD. Alas, + I saw no speedup for using a dirty region. (Side note: The Radeons are + apparently slower compared to DirectDraw because they must do + power-of-2 textures. If they ever add non-power-of-2 support like nvidia, + I assume they will also see a speed gain.) +- Changed fb_d3d9.cpp so that instead of trying to compensate for Geforce + off-by-one errors in the pixel shader, it automatically detects where + the error occurs and modifies the way the palette is uploaded to + compensate. Palette color 255 is then represented using the texture + border color instead of actually being part of the palette. This should + work correctly with all cards, since I had a report of an FX where the + off-by-one occurred in a different spot from the place where I observed + it on a 6 and 7 series cards. Since the shader now has one fewer + instruction, I notice a very marginal speedup. (Interestingly, removing + the flash blending from the shader had no perceivable performance gain.) + +November 29, 2006 (Changes by Graf Zahl) +- Fixed: The DECORATE expression evaluator evaluated operators of same + precedence right to left instead of left to right. +- Added global constants to DECORATE so that I can define meaningful flag + names for some DECORATE functions. Technically these will be constants + of the AActor class but that will make them accessible in all other actor + classes. +- Made the constructor of PSymbolTable inline. Having this a real function + adds 100kb to the EXE, mostly needless exception handling code. + +November 28, 2006 (Changes by Graf Zahl) +- Fixed: The StrifePlayer couldn't obtain his default inventory because + APlayerPawn::GiveDefaultInventory gave him some HexenArmor even though + he doesn't need it. +- Added custom blood type properties to DECORATE. +- Converted Blood to DECORATE and made some minor changes to the code + in preparation for custom blood types. +- Converted the bot helper things to DECORATE. +- Added damage type specific crash states. + +November 28, 2006 +- Started adding action function declarations to objects. +- Added integer constant declarations to objects. +- Added some new token-based functions to sc_man.cpp that know about keywords + and record proper type information, so parsers don't need to treat + everything as strings. +- Added a simple symbol table to PClass. + +November 27, 2006 (Changes by Graf Zahl) +- Changed: When playing a shareware game no external WADs are loaded at all, + not even zvox.wad or the skins directory. +- Minor improvement of Hexen's Demons: They now transfer the translation + to the chunks they spawn so that they look correct if they are color + translated. See Resurrection of Chaos for an example. +- Converted Key gizmos to DECORATE. +- Converted Heretic's Beast (Weredragon) to DECORATE. +- Added a randomness parameter to A_SpawnItemEx. This allows + spawning objects with a random chance without the need to write + complicated A_Jump constructs. +- Converted Heretic's Mummy to DECORATE. +- Converted Hexen's Demons to DECORATE. + +November 26, 2006 (Changes by Graf Zahl) +- Converted Ettin and Centaur to DECORATE. +- Made the Ettin's and Centaur's howling sound an actor property. +- Added A_CustomComboAttack function to finally have something that can + replace the old A_ComboAttack function. +- Added A_SpawnItemEx function that removes the problems with A_SpawnItem + and which also should make most of the A_CustomMissile abuse unnecessary. +- Added A_QueueCorpse to the list of DECORATE code pointers. +- Made the size of Hexen's corpse queue configurable by CVAR + (sv_corpsequeuesize.) Setting this CVAR to -1 will disable corpse + queuing completely so that even in Hexen all corpses will stay forever. +- Added random2 function to DECORATE's expression evaluator. This is to + better emulate some calculation of internal code pointers. +- Added named RNG support to DECORATE's expression evaluator. Just use + random[name](min, max). + +November 25, 2006 +- Reverted updaterevision.vcproj to r385 and added a note as a build event + explaining the need to use mt.exe 6.0 or newer. Here is the note: + VERY IMPORTANT: You must copy the mt.exe from %VSINSTALLDIR%\Common7\Tools\bin + on top of the version in %VSINSTALLDIR%\VC\bin or your computer may restart + while building. +- Changed the ASecretTrigger::Activate() fix: There's no reason open scripts + shouldn't be able to activate secret triggers; players just won't get + credit for it in coop. +- Added a NULL actor check to R_SetupFrame(). +- Fixed: The player sounds in DEHSUPP were defined incorrectly. + +November 25, 2006 (Changes by Graf Zahl) +- Fixed: SecretTriggers that were activated in an OPEN script caused a crash. +- Converted Heretic's Clink (Sabreclaw) to DECORATE. +- Added MissSound parameter to A_CustomMeleeAttack. +- Converted Heretic's Snake (Ophidian) to DECORATE. +- Added an option to A_CustomMissile to jump to the see state if + the caller's target is dead. +- Fixed: A_ThrowGrenade didn't play the missile's spawn sound. +- Added MF_SPAWNSOUNDSOURCE flag so that Raven's missile spawning code + pointers can be recreated with DECORATE. +- Converted a_ravenambient.cpp to DECORATE. + +November 24, 2006 +- Fixed: The backpack didn't give extra ammo in baby and nightmare modes. +- Fixed: When P_SpawnPlayer() calls DObject::PointerSubstitution() to + redirect player pointers, it affects the bodyque too. That meant that in + multiplayer games, once the bodyque filled up, anybody was in danger of + being rudely destroyed the next time somebody respawned. + +November 22, 2006 +- Added a manifest with a trustinfo section to updaterevision.exe so that + the build process can run uninterrupted under Vista. +- Fixed: DIRECT3DCREATE9FUNC needs WINAPI added to its prototype so that it + works properly in release build, which defaults to __fastcall. + +November 20, 2006 +- Fixed: Polyobjects are serialized before players, which means that a call + to PO_MovePolyobj() from P_SerializePolyobjs() for a crushing polyobject + that touches a player actor will not have a valid actor->player->mo chain + for P_DamageMobj and crash if it happens to touch the player. Since the + polyobject was presumably in a good spot when the game was saved, we can + just skip this step entirely and let it take care of itself the next time + it moves (by which time, the players will be valid). +- Fixed: When transitioning from fullscreen to windowed mode with D3DFB, the + window kept the WS_EX_TOPMOST style. +- Slight correctness fix: When in fullscreen, the window should have WS_POPUP + style. +- Added a NULL target check to P_SpawnMissileXYZ(), A_DemonAttack1(), + A_DemonAttack2_1(), and A_DemonAttack2_2(). + +November 18, 2006 +- Fixed: DFrameBuffer and related classes did not use DECLARE_CLASS macros, + so there was no guarantee that they would allocate the proper amount of + memory. This tripped me up when I was using D3DFB and it was writing beyond + the end of allocated memory. +- Added a new D3DFB class that should be more compatible with modern systems + than the 8-bit paletted DDrawFB. + Pros: + - Much cleaner code. + - No performance penalty when running in a window. + - Slightly faster fullscreen performance on Geforce 6 and 7 cards. + - Vista ought to love it. + Cons: + - Requires Pixel Shader 1.4 or better. + - Fullscreen on an ATI Mobility x300 is a little slower (but still faster + than DirectDraw in a window). + Note that this is not hardware accelerated rendering. The screen is still + drawn as before by the CPU to an 8-bit paletted surface. The difference is + in how that surface makes its way to the visible display. Here, the surface + is copied to an 8-bit texture, and a pixel shader converts it to RGB when + drawing it. + +November 14, 2006 (Changes by Graf Zahl) +- Made AActor's xscale and yscale properties full precision fixed point + so now larger scales than 4 can be done. + +November 10, 2006 (Changes by Graf Zahl) +- Added a check to P_CheckMissileSpawn to decrease the monster counter + if it was called for spawning a monster with A_CustomMissile. +- Added a ML_BLOCK_PLAYERS line flag. + +November 5, 2006 (Changes by Graf Zahl) +- Converted Heretic's and Hexen's players to DECORATE. +- Made Hexenarmor factors configurable by DECORATE. +- Added support for selecting the invulnerability mode per item as well. +- Made Invulnerability and Healing radius behavior selectable by player + class instead of hard coding the special behavior to the Hexen classes. +- Converted the DoomPlayer to DECORATE. +- Extended all A_Jump commands to take labels as parameters in addition + to offsets. +- Removed the deprecation warnings for the state assignment commands + in DECORATE. While it is still recommended not to use them anymore + they will continue to work with custom state support and existing + DECORATE code doesn't have to be changed. However, they will remain + limited to the existing functionality, nothing more. + +November 4, 2006 (Changes by Graf Zahl) +- Replaced the static string buffer in ProcessStates with an FString. +- After doing some tests with state label scopes I had to conclude that + using '.' both for separating sub-state-labels and scope resolution + identifiers does not work reliably unless all actor class names were + prohibited from being used as state labels. Since that is undesirable + the only solution is to change the scope resolution operator. Fortunately + no WADs so far have used it so implementing such a breaking change isn't + a major issue. Now it uses '::', like C++ for this purpose. +- Converted Revenant, Mancubus and Pain Elemental to DECORATE. +- Converted Arachnotron, Archvile, Cyberdemon, Spidermastermind and + CommanderKeen to DECORATE. +- Converted ExplosiveBarrel, BulletPuff and DoomUnusedStates to DECORATE. +- Added VSpeed DECORATE property so that an actor can be given an initial + vertical speed. +- Removed the barrel check in P_DamageMobj. AActor::Die is doing the same + operation unconditionally so this is redundant. +- Added A_BarrelDestroy to the list of DECORATE code pointers so that + the same effect can be recreated for other items as well. +- Renamed A_BarrelRespawn to A_Respawn, changed it so that it works for + monsters and added it to the list of DECORATE code pointers. Now Quake-style + zombies should be possible. ;) +- Changed handling of MF4_RANDOMIZE so that it applies to all actors being + spawned and not just projectiles. +- Converted Berserk and Megasphere to DECORATE. +- Fixed: HealThing should respect the stamina a player has and the Dehacked + health compatibility flag if max is 0. To do that it calls P_GiveBody now. + +November 1, 2006 (Changes by Graf Zahl) +- Fixed: The Cacodemon had a FastSpeed definition even though it shouldn't. +- Fixed: FastSpeed was used unconditionally when defined. + +October 31, 2006 (Changes by Graf Zahl) +- Fixed: SetActorPitch with a 0-tid (i.e. affect the activator) set the angle + instead of the pitch. +- Fixed: The check for special death states in AActor::TakeSpecialDamage didn't + work. +- Fixed: The global WeaponSection string was never freed. It has been replaced + with an FString now. +- Fixed: The music strings in the default level info were never freed and + caused memory leaks when used repeatedly. +- Fixed: The intermusic string in the level info was never freed. +- Fixed: The default fire obituary should only be printed if the damage + came from the environment. If it comes from a monster the monster specific + obituary should be used instead. +- Added custom damage types from the floating point test release. +- Changed Pain Elemental's massacre check. Now A_PainDie checks for the damage + type and doesn't spawn anything if it is NAME_Massacre. A_PainDie can also + be used by other actors so a more generalized approach is needed than hard + coding it into the Pain Elemental. +- Converted a few of Doom's monsters to DECORATE because I couldn't test the + first version of the custom state code with the corpses inheriting from them. +- Added custom states from last year's floating point test release and fixed + some bugs I found in that code. Unfortunately it wasn't all salvageable + and it was easier to recreate some parts from scratch. + +October 30, 2006 +- Version bump to 2.1.7. +- Fixed: Placing a /* */ comment at the very end of a file without a + terminating newline would not parse reliably. +- Added a NULL WallSpriteTile check to R_RenderDecal(). + +October 28, 2006 (Changes by Graf Zahl) +- Changed parameter storage for states to use a separate member variable + instead of forcing it into misc1/misc2. Although this increases the EXE's + size by 30k it has several advantages: + * State parameters are no longer limited to 65535 for all states combined. + * State parameters can be used with long durations. + * Some special handling in the weapon state set functions can be removed. + +October 26, 2006 +- Removed A_JumpSet and merged its functionality with A_Jump by turning + A_Jump into a varargs function. +- Fixed: P_MorphPlayer() should check that the desired type is actually a + PlayerPawn. +- Added an optional parameter to the morphme ccmd that specifies the player + class to morph into. +- Changed the SetActorPitch, SetActorAngle, Thing_Spawn*, Thing_Projectile*, + and Thing_Move functions so that TID 0 affects the activator. + +October 25, 2006 (Changes by Graf Zahl) +- Fixed: The MinotaurFriend's MF4_NOTARGETSWITCH was put on AMinotaurFX1. +- Moved the sector type translation for Doom format maps into a simple lump + in zdoom.pk3. +- Changed Line_SetIdentification so that the fifth arg is a high-byte for the + line ID. + +October 23, 2006 +- Added the A_JumpSet function for what seems to be a fairly common scenario. + It is like A_Jump, except it accepts up to 20 jump targets. The jump + probability is still the first parameter and controls whether any jump is + taken at all; use 256 if you always want to jump. If a jump is taken, then + one of the jump targets will be chosen at random, with each target having + an equal chance of being chosen. +- Fixed: The unfreeze ccmd was not multiplayer-safe. And I renamed it to thaw, + since it has nothing to do with the freeze ccmd. + +October 22, 2006 (Changes by Graf Zahl) +- Added MF5_PIERCEARMOR flag that allows damaging objects that aren't + affected by armor. +- Added an unfreeze CCMD so that frozen players can be unfrozen for testing. +- Added special death states for projectiles hitting actors. +- Added ACS SetActorPitch/GetActorPitch functions. +- Added cameraheight property for actors. + +October 21, 2006 (Changes by Graf Zahl) +- Fixed: The yellow color range contained gaps in its definition which + resulted in incorrect colors. +- Fixed: FFont::BuildTranslations didn't clamp the RGB color values. This + can happen if some font colors overflow or underflow due to incomplete + range specifications. + +October 20, 2006 +- Fixed: ExpData::EvalConst() did not NULL the children pointers for binary + operators after deleting them, so ~ExpData() would try to delete them again + later. + +October 19, 2006 +- Added a new MapMarker actor. Instead of appearing in the 3D view, it appears + on the automap instead. If its first argument is zero, the map marker itself + appears on the automap, otherwise it is drawn on top of any actor with a TID + matching that argument. If the second argument is one, then the map marker + will only be appear if the player has previously seen the sector it is one. + You can use Thing_Activate and Thing_Deactivate on markers to turn them on + and off. And if you subclass MapMarker with DECORATE, you can easily make + your own custom markers. +- Fixed: Map markers could not be drawn partially off the map. They were + drawn either fully or not at all. +- Fixed: Map markers appeared in the wrong place on a rotated overlay map if + screenblocks < 10. +- Added the MF2_PASSMOBJ for P_Thing_Spawn() from January 4, 2003, to + DLevelScript::DoSpawn(). +- Changed VectorNormalize() (and VectorNormalize2) to use doubles for storing + the vector lengths, fixing desyncs between GCC/VC++ games that happened + because the two compilers produced slightly different results for some + slopes. GCC kept them in registers, so they were never truncated to floats. + VC++ stored them to memory and reloaded them in order to truncate them to + the defined precision. Lesson learned: Floating point numbers in local + variables should always be doubles to produce the best code with VC++ that + has the best chance of matching GCC's default behavior. +- Removed netget and netsend function pointers. PacketGet and PacketSend are + now called directly. +- Fixed: Watching a demo from the point of view of someone other than the + first player could cause a crash when the demo ended. +- Removed invcount from the expression evaluator at Grubber's suggestion, + because it doesn't work. +- Fixed: vid_nowidescreen should fire off setsizeneeded so that changes to it + can happen immediately instead of at the next resolution change. +- Modified the way autosaves are done. Instead of setting gameaction to + ga_autosave, write DEM_CHECKAUTOSAVE to the net stream. When this is + processed, it will check if it's okay to do an autosave. If it is, it writes + DEM_DOAUTOSAVE to the net stream, which the sets gameaction to ga_autosave. + Essentially, about half of the functionality was moved out of G_DoAutoSave() + and into Net_DoCommand(). +- Minor changes to OS detection: The os_WinNT enumeration has been renamed to + os_WinNT4, since every new OS coming out of Microsoft these days is + essentially NT. NT 5.2 and 6.0 are now properly identified as "Windows + Server 2003" and "Windows Vista" respectively, and any unknown NT versions + Microsoft introduces in the future will now be displayed as "Windows NT" + instead of "Windows 2000" if the minor version is 0 and "Windows XP" if the + minor version is non-0. Win32s detection has also been removed. Presumably + if somebody is foolish enough to try to run this on Windows 3.x with Win32s, + it won't even load due to missing DLLs. + +October 15, 2006 (Changes by Graf Zahl) +- Changed the rocket so that the FX_ROCKET flag is set in the actor + definition and not in BeginPlay. +- Changed the special explosion behavior of the rocket to a flag + (MF5_DEHEXPLOSION) so that its effects can be used on other actors + as well without having to inherit from the rocket. + +October 9, 2006 +- Fixed: Demos with NETD chunks should not set netgame to true unless they + have more than one player. And since netdemo is ignored if netgame is + false, it doesn't need to set that either. +- Fixed: FTexture::GetScaled* functions did not check for scale values of 0. + +October 7, 2006 (Changes by Graf Zahl) +- Fixed: PrintAlias passed FString objects directly to Printf. +- Added bitwise not (~) operator to ACS. + +October 6, 2006 (Changes by Graf Zahl) +- Fixed: Hires texture replacements must call AddPatch if the texture + isn't defined yet in order to replace lumps that are not in the + list of preinitialized graphics. +- Changed font initialization to occur after textures have been completely + initialized. This is necessary so that the font characters can be + replaced with hires versions. + +October 5, 2006 (Changes by Graf Zahl) +- Fixed: Hires texture replacements and auto-scaled flats require the + bWorldPanning flag. Also added some NULL pointer checks to the + hires texture loading code. +- Added Sector_SetFloorScale2 and Sector_SetCeilingScale2 line specials. + They are mostly the same as Sector_Set*Scale but take fixed point parameters. + This makes them easier to use and more precise than the old ones which + offered very small fractional precision. +- Changed Thing_Deactivate so that passing a tid of 0 deactivates the calling + actor. +- Added MeansOfDeath parameter to DamageThing. + +October 4, 2006 +- Added alias parameter substitution. Instances of %x in the alias command + string will be replaced with parameter x when the alias is executed. +- Fixed: When FString::LockBuffer() had to create a new string because the + RefCount was higher than one, the new string was not actually locked. +- FConsoleAlias now stores the commands in FStrings. +- BuildString() now returns an FString. +- Added the muslib license text to muslib.h. + +October 4, 2006 (Changes by Graf Zahl) +- When exiting the level on a damaging floor the player could be in the pain + state and make its pain noise at the start of the next level. +- Fixed: The FPS counter obstructed the key display in Doom's fullscreen HUD. + +October 2, 2006 +- Fixed: V_BreakLines() failed to produce output for the final line if it was + only one character long. +- Fixed: When players respawned in multiplayer, scripts that started on their + old body kept executing on that body instead of being transferred to the new + one. I'm doing this with general pointer substitution now, so everything + that pointed to the old body will use the new one; not sure if that's best, + or if it should applied exclusively to scripts, though. +- Fixed: Hexen's delay ACS command actually waited one extra tic. Now if + you're playing Hexen and an old-style ACS script delays it will wait one + extra tic in ZDoom as well. +- Fixed: When G_FinishTravel() created a temporary player, P_SpawnPlayer() + thought the old player actor was a voodoo doll and stopped its scripts + and moved its inventory. + +September 30, 2006 +- Fixed: player_t::GetSpawnClass() always returned the spawn flags for the + local player, so co-op games would spawn only the things relevant for the + local player and not all the things relevant for all players. + +September 30, 2006 (Changes by Graf Zahl) +- Fixed: Default flags for APlayerPawn and APlayerChunk were not defined. +- Fixed: The PCD_GETPLAYERINFO case in p_acs.cpp was missing a break. + +September 27, 2006 (Changes by Graf Zahl) +- Fixed: Monsters should never target friends, even if the friendliness + state has changed since the target has been acquired. +- Fixed: Multiplayer telefrag obituaries must be handled before weapon + dependent obituary messages. + +September 26, 2006 +- PClass::StaticInit() now sorts the class metadata so that operations that + iterate over it (such as the "give all" cheat) are compiler-independant. + +September 25, 2006 (Changes by Graf Zahl) +- Fixed: ACustomInventory::CallStateChain couldn't be called recursively + so any item that was giving another CustomInventory item didn't work + as intended. +- Fixed: CustomInventory items didn't process A_Jump... commands properly + for non-players. + +September 23, 2006 (Changes by Graf Zahl) +- Fixed: Starting a new game didn't remove the deferred scripts. + +September 22, 2006 +- Fixed: FNodeBuilder::ShoveSegBehind needs to check that the result from + Heuristic is positive, not just non-zero. + +September 20, 2006 (Changes by Graf Zahl) +- Fixed: Summoned friendly monsters added to the total kill count. + +September 19, 2006 +- Added a dialog that gives the user the chance to fix things if the config + could not be saved for some reason. +- Added the writeini console command to write the config file, optionally + specifying a specific file name for it. +- Fixed: "Multiplayer" demos that only had one player were not played back + properly because the demo playback code only checked the number of players + to determine if it should be played as a netdemo. +- Assembly code is disabled when building with __APPLE__ defined, for now. +- If you aren't targeting x86, m_fixed.h only includes basicinlines.h now. +- Moved x64inlines.h into basicinlines.h. +- Replaced uses of __int64 with types from doomtype.h. +- The stop console command no longer ends single player games, just the demo + that was being recorded. +- In C mode, the sc_man parser no longer allows multi-line string constants + without using the \ character to preface the newline character. This makes + it much easier to diagnose errors where you forget the closing quote of a + string. +- Fixed: V_BreakLines() added the terminating '\0' to the last line of the + input string. +- Added font as a parameter to V_BreakLines and removed its keepspace + parameter, which was never passed as anything other than the default. + +September 18, 2006 +- Removed REGEXEPEEK. It was only there for a Dev-C++ project, and the Dev-C++ + project was long ago removed, thanks to that particular IDE being so agonizingly + slow. + +September 17, 2006 (Changes by Graf Zahl) +- Fixed: Texture scale calculations for HIRESTEX were incorrect. +- Fixed: The sky scrolling calculations caused an integer multiplication overflow. +- Fixed: Voodoo dolls should not start ENTER scripts. +- Fixed: ActorDamage must not parse the enclosing parentheses as part of the + expression. That will produce an error if a flag set or clear command immediately + follows. +- Fixed: P_DamageMobj ignored MF2_NODMGTHRUST if the damaging object had no + owner. +- Added a 'font' parameter to A_Print. +- Changed A_CustomMeleeAttack to take one damage parameter only. Since expressions + can be used this value is not used as a factor for a random value but as + a direct damage value instead. +- Fixed: AActor::SetState must check whether a called action function resulted + in the actor's destruction. A_Jump constructs to a 0-length terminating + state will hang if this isn't checked. + +September 13, 2006 +- Moved the vid_fps display to the upper-right of the screen. +- The stat display can now show multiple stats at once. +- Fixed: cycle_t was still a DWORD and not a QWORD under GCC. +- The stat meters now return an FString instead of sprintfing into a fixed + output buffer. +- NOASM is now automatically defined when compiling for a non-x86 target. +- Some changes have been made to the integral types in doomtype.h: + - For consistancy with the other integral types, byte is no longer a + synonym for BYTE. + - Most uses of BOOL have been change to the standard C++ bool type. Those + that weren't were changed to INTBOOL to indicate they may contain values + other than 0 or 1 but are still used as a boolean. + - Compiler-provided types with explicit bit sizes are now used. In + particular, DWORD is no longer a long so it will work with both 64-bit + Windows and Linux. + - Since some files need to include Windows headers, uint32 is a synonym + for the non-Windows version of DWORD. +- Removed d_textur.h. The pic_t struct it defined was used nowhere, and that + was all it contained. + +September 9, 2006 (Changes by Graf Zahl) +- Added support for scaled textures to DCanvas::DrawTexture. +- Changed deh.MaxHealth use to be consistent with other source ports. +- Added NULL pointer checks to APlayerPawn's state set functions. If these + remove the player from the game a crash is the inevitable result. + +September 8, 2006 +- Fixed: Weapons did not give you double ammo at baby and nightmare skills. +- Fixed: SetTextureNoErr() in p_setup.cpp assumed that all color values were + six characters. Although this was the intended way to specify colors, + earlier versions did no error checking, so other lengths worked too. +- Fixed: FPatchTexture waited until MakeTexture() to call CalcBitSize(), + so the width and height bit sizes weren't available when using it as a + source for a warp texture. +- Fixed: R_InitSkyMap() should only warn about two sky textures not being + the same height when they are used as part of a double sky. +- Added a NULL state check in AActor::Tick() before advancing the current + state. Note that this should not happen, so there's an assert there for + the debug build as well as a regular check for the release build. + +September 1, 2006 +- Version bump to 2.1.5. +- Fixed: P_LoadSegs() checked for invalid vertices too late. + +August 31, 2006 +- Changed: Starting a new game or reloading an old one reset the chasecam. +- Removed the r: ACS print cast. You can do it yourself with s: and an array. +- Replaced all the bool arguments to the ACS ReplaceTextures and SectorDamage + commands with a single flags argument. SectorDamage also gained extended + functionality: you can now make it hurt only players, only non-players, or + both. Previously, hurting only non-players was not possible. +- Added the HUDMSG_COLORSTRING flag for ACS hudmessages. If you OR it in with + the message type, the color will be treated as a string naming the color + you want to use, so now you can use custom colors with hudmessages. + +August 30, 2006 +- Added the FNameNoInit class that is exactly like FName except it does not + initialize its index, so it can be used from inside Actors without + overwriting the runtime default value. +- V_BreakLines() now returns an array of FStrings instead of char *'s. +- Added support for custom text colors in messages like this: + print (s:"\c[Chartreuce]This text is in the color 'Bleargh'"); + This also obsoletes some of the functionality of the r: print specifier + before it even saw a release version, because you can do this with the + standard colors too: + print (s:"\c[Green]Some text"); +- Added two new decorate functions: A_PlaySoundEx("sound_name", "channel" + [, bLooping]) and A_StopSoundEx("channel"), where "channel" is "Auto", + "Weapon", "Voice", "Item", "Body", "SoundSlot5", "SoundSlot6", or + "SoundSlot7". +- Added a third parameter to S_IsActorPlayingSomething() to allow it to check + if the actor is playing a specific sound. + +August 29, 2006 +- Moved the text color definitions out of the executable and into an external + data file. +- Removed the setcolor CCMD. It's been obsolete for years, ever since color- + aware cvars were added. +- Changed V_GetColorStringByName() to return an FString, because it did a + copystring() call. +- Extended V_GetColorFromString() so that it accepts HTML-style #RRGGBB and + #RGB color strings. + +August 27, 2006 (Changes by Graf Zahl) +- fixed: callstatechain didn't check for NULL code pointers + +August 25, 2006 +- Fixed: Multiple-choice sound sequences could not be assigned IDs for use + with polyobjects and the sound sequence selector things. + +August 24, 2006 +- Removed the 64 seg limit for polyobjects defined with Polyobj_ExplicitLine. +- Polyobj_StartLine and Polyobj_ExplicitLine can now set a line's ID. This is + the fourth parameter for Polyobj_StartLine and the fifth parameter for + Polyobj_ExplicitLine. +- Added support for DDS textures compressed with DXT1, DXT3, or DXT5. + +August 23, 2006 +- Fixed incorrect spawn ID for cell pack. + +August 22, 2006 +- Added Martin Howe's code for replacing environment variables in partial IWAD + search paths. +- Added support for casting color names in ACS print-type statements. What that + means is that instead of writing this: + print (s:"\cDSome text"); + You can write this: + print (r:CR_GREEN, s:"Some text"); +- Added some new colors, based on the ones jimmy91 posted in the forum: cream, + light blue, black, olive, dark green, dark red, dark brown, purple, and dark + gray. +- Simplified FFont::BuildTranslations() and BuildTranslations2() to make adding + new colors easier. + +August 22, 2006 (Changes by Graf Zahl) +- Removed a few redundant calls to FTexture::GetWidth because all textures + are now fully initialized when being created. +- Added GZDoom's HI_START/HI_END namespace and HIRESTEX support. +- Added sprite scaling support to the weapon drawing code + +August 21, 2006 (Changes by Graf Zahl) +- Added support for PCX textures (1, 4, 8 and 24 bit variants.) + +August 20, 2006 (Changes by Graf Zahl) +- Changed: Patch and IMGZ textures now initialize their dimensions upon creation. + The lump is open anyway at that time so deferring this action until the information + is needed doesn't give any speed improvements. Now GetDimensions and all its + associated overhead is gone. +- Added support for TGA textures. It can handle all of the common variations + of this format. +- Changed: GI_PAGESARERAW is no longer checked. It wasn't really necessary before + because the chance of texture misidentification is absolutely minimal. + But raw pages are now restricted to textures of type TEX_MiscPatch only. +- Changed the automap parchment to use a regular texture. The previous + FAutomapTexture is only used as a last resort fallback now. If the code + finds a recognizable graphic it will create a proper texture for it now. +- Fixed: Flats were only auto-scaled when in Doom flat format. +- Fixed: FMultiPatchTexture::CheckForHacks blindly assumed that all patches + were FPstchTextures. Since the texture code does not have any type information + I added a new flag bIsPatch for this purpose. +- Moved all texture classes into their own source files and created a new + subdirectory 'textures' for that. +- Cleaned up the texture management code and added some stricter checks for + the validity of Doom patches. The old code liked to crash when being passed + some non-graphic data. + +August 19, 2006 (Changes by Graf Zahl) +- Added custom fail messages to the puzzle items. + +August 17, 2006 (Changes by Graf Zahl) +- Added a check to the map loader to check whether the map label + is in the same WAD as the following lump. +- Did some minor reorganization of code in r_data.cpp (mostly to make + handling of textures easier in GZDoom.) +- Did some preparations to allow loading folders on the HD into the lump + directory. +- Took MF2_WINDTHRUST off AMorphedMonster. This is something that should not + be a default setting. +- Moved a_artiegg.cpp to g_shared and renamed it to a_morph.cpp to better reflect + its meaning. +- Fixed: AMorphProjectile's PlayerClass and MonsterClass members must be serialized + as FNames. Serializing them as ints is not safe because name indices are not + guaranteed to be the same each time the game is started. Same for APlayerPawn's + MorphWeapon member. +- Converted EggFX, ArtiEgg, PorkFX and ArtiPork to DECORATE. +- Added a new parameter to A_FireCustomMissile. Previously it always aimed + straight ahead and altered the projectile's angle according to the resulting + direction. If the 6th parameter is 1 now it will aim at the specified angle + directly. +- Changed custom morphing to be based on a new MorphProjectile class, not + the Heretic specific EggFX. The EggFX properties are now prefixed with + 'MorphProjectile.'. + +August 16, 2006 +- Updated thingdef_specials.h for the new thingdef_specials.gperf file. +- Created a new MorphedMonster class that Chicken and Pig now derive from. + This class automatically takes care of unmorphing the monster when its + time is up. +- Made PlayerClass and MonsterClass properties of EggFX. You can override + these in a subclass to create new kinds of morpher projectiles. Along with + that, MorphWeapon is a new property of PlayerPawn that controls what type + of weapon you have available while morphed ("None" means you have no + weapons). +- Changed morphed monsters to record the time when they want to unmorph, not + the time left until they unmorph. This simplifies calling + P_UpdateMorhpedMonster() because you don't need to pass it a tic count. +- Added an optional second parameter to A_SpawnDebris and an optional + fifth parameter to A_SpawnItem that both do the same thing: If you set it + to 1, then the spawned actor will be assigned the same translation table + as the actor that called the function. +- Moved the blood colorization in P_SpawnBlood() ahead of the SetDamage() + call so that the blood color will available to the states of the blood + actor. +- Extended the puke command so that giving it a negative script number will + act like ACS_ExecuteAlways and always execute the script. (Ugh. Why did I + use's Raven's cheat code to name this command?) +- Added action special support to the thingdef expression evaluator. Now you + can use them like normal functions, which is probably most useful for + ACS_ExecuteWithResult. +- Switched to IJG code for reading JPEG images. I have included a stripped- + down version of the library with the ZDoom source. (It actually uses less + space than zlib now.) Unix users probably ought to use the system-supplied + libjpeg instead. I modified Makefile.linux to hopefully do that. I'm sure + Jim or someone will correct me if it doesn't actually work. + +August 14, 2006 +- Added JPEG texture support, courtesy of Ken's Picture Library. I will + probably switch to the IJG library once I pare it down. (Ken's code is 18K + of C source but does not support progressive JPEG. The IJG library is over + a megabyte of source and supports pretty much everything you would ever + need ever.) +- Fixed endianness issue in FTextureManager::CreateTexture(). +- Added support for interlaced PNGs. Now ZDoom is a mostly complete PNG + reader. The only thing missing is 48-bit RGB and 16-bit grayscale support, + which are just wastes of bits here, but also less likely to appear than + an interlaced PNG. (However, if you are using interlaced PNGs for textures, + then you are needlessly wasting space, since the image won't display + progressively.) +- Fixed: Writing named screenshots didn't work. + +August 12, 2006 +- Added support for truecolor PNG textures. They still get resampled to the + global palette, but at least they are visible now. +- Optimized UnfilterRow() in m_png.cpp a little. + +August 11, 2006 (Changes by Graf Zahl) +- Fixed: P_CheckOnMobjZ returned the first thing an actor could stand on, + not the highest possible. +- Added disintegration damage to SectorDamage. +- Bumped savegame version, min. savegame version, netgame version and + demo version because the inventory and damage changes are incompatible + with the old code. + +August 11, 2006 +- Added the ACS commands + ReplaceTextures (str old_texture, str new_texture, optional bool not_lower, + optional bool not_mid, optional bool not_upper, optional bool not_floor, + optional bool not_ceiling); and + SectorDamage (int tag, int amount, str type, bool players_only, bool in_air, + str protection_item, bool subclasses_okay); +- Added the vid_nowidescreen cvar to disable widescreen aspect ratio + correction. When this is enabled, the only display ratio available is 4:3 + (and 5:4 if vid_tft is set). +- Added support for setting an actor's damage property to an expression + through decorate. Just enclose it within parentheses, and the expression + will be evaluated exactly as-is without the normal Doom damage calculation. + So if you want something that does exactly 6 damage, use a "Damage (6)" + property. To deal normal Doom missile damage, you can use + "Damage (random(1,8)*6)" instead of "Damage 6". +- Moved InvFirst and InvSel into APlayerPawn so that they can be consistantly + maintained by ObtainInventory. + +August 10, 2006 (Changes by Graf Zahl) +- Gave Strife's PhosphorousFire the MF2_NODMGTHRUST flag so that its + damage is truly thrustless. The 'thrustless' parameter disabled all + thrust done by PIT_RadiusDamage but not the one done by P_DamageMobj. + Also gave Hexen's poison cloud the MF3_BLOODLESSIMPACT flag and made + spawning of blood decals in PIT_RadiusAttack depend on that. Since with + these changes the 'bombthrustless' argument to P_RadiusAttack is no + longer useful I removed it. +- Fixed: CheckActorInventory stored the return value in the wrong address + on the ACS stack. +- Fixed: Skin sounds weren't properly restored after a SNDINFO reset. + +August 6, 2006 (Changes by Graf Zahl) +- Added a more flexible ACS ChangeLevel function. It gets passed a level name + instead of a level number and has several additional options (e.g. changing + skill, starting the map without monsters and clearing the players' inventories. +- Changed Thing_Activate so that passing a tid of 0 activates the calling actor. +- Changed Thing_Remove so that passing a tid of 0 removes the calling actor. +- Added DECORATE parameters to A_Saw. + +August 2, 2006 +- Fixed: The ACS VM made no checks for object files without strings, assuming + that if it didn't have any strings, then it didn't matter what it calculated + for the location of the string table because it would never be referenced. + While this is true for a script all by itself, it means a crash if you have + a map script without strings that imports a library with strings and the + library tries to use one of its strings. + +August 1, 2006 +- It turns out that the Visual C++ 2005 runtime calls IsDebuggerPresent, which + is not available under Windows 95. Since this is (or at least should be) the + only thing preventing us from running under Windows 95, I added a stub that + replaces __imp__IsDebuggerPresent@0 with a pointer to a function that checks + for the real thing. + +August 1, 2006 (Changes by Graf Zahl) +- Fixed: The pickup message for Hexen's fighter's axe was assigned to the + AxePuff, not the weapon itself. +- Fixed: P_RunEffects used the consoleplayer's camera without checking its + validity. +- Fixed: CopyFriendliness needs to copy target to LastHeard as well in order + to make newly spawned monsters chase their spawner's target. + +July 31, 2006 (Changes by Graf Zahl) +- Added a type check to Spawn(actorname,...) to allow it to print a + meaningful message instead of the nondescript + 'Tried to spawn a class-less actor'. +- Converted AGlassJunk to DECORATE and made the spawn function a little + more flexible so that replacing the shard is easier. +- Converted ABloodSplatter to DECORATE. +- Removed A_Jiggle because it never worked properly. +- Changed DECORATE parser to allow commas between arguments for multi- + argument properties. For all newly added properties this format will + become mandatory but for backwards compatibility it is optional for + old ones. +- Added a check for negative indices to TAutoGrowArray::SetVal to prevent + passing an index of -1 from crashing the game. +- Fixed: Morphing must clear the weapon's flash sprite. +- Fixed: Resurrecting a morphed player caused a crash. +- Fixed: Random sounds that recursively refer to themselves caused a stack + overflow. Now they print a warning and get ignored. + +July 30, 2006 (Changes by Graf Zahl) +- Added Grubber's GetPlayerInfo ACS function. +- Fixed: Starting a game without skill menu always started the first episode. +- Changed A_AlertMonsters so that it can be placed directly in a weapon state. + +July 29, 2006 (Changes by Graf Zahl) +- Fixed: Frozen corpses of stealth monsters were invisible. +- Added: Calling Radius_Quake with a tid of 0 now uses the activator + as the quake's center. +- Used the new explosion handling to clean up the old style projectile + definitions. The SimpleProjectile class is gone and it uses the meta + data and A_ExplodeParms instead now. +- Removed the deprecation warnings for explosion parameters again because + the new system is fully inheritable and therefore useful again. +- Changed the explosion properties into meta data and adjusted A_ExplodeParams + to use these when called without any parameters. Also removed all special + parsing for A_Explode so now this function can be called with expressions + like any other function. +- Changed DECORATE parsing so that functions with completely optional + parameter lists don't create an empty list when called without parameters. + +July 28, 2006 +- Version bump to 2.1.4. +- Fixed: Friendlies would not turn to face you when you engaged them in + conversation, nor would they reliably return to their original facing when + you stopped talking to them. +- Added deprecation warnings for the DontHurtShooter, ExplosionRadius, and + ExplosionDamage actor "properties." They were considered deprecated before; + now this is explicitly stated when they are used. The problem with them is + that they are not really properties and do not behave like other properties + and cannot be inherited, because they are really just an alternate way of + specifying parameters for A_Explode. (Anything that currently prints a + deprecation warning will be removed completely in 2.2.0, which will be the + version where custom state labels make their debut.) + +July 26, 2006 (Changes by Graf Zahl) +- Changed player sprite translation for the menu so that it uses a regular + translation table instead of a local custom buffer. +- Fixed: ResetBaggage must set MeleeDamage to 0. + +July 21, 2006 +- Made SafeReadMemory() in i_crash.cpp more readable. +- Here's something MinGW users will probably like: i_crash.cpp no longer needs + dbghelp.h if you compile with GCC. + +July 19, 2006 +- Added some simple translucency map analysis for BOOM maps to more + intelligently pick the value to use for TranslucentLine's second argument. +- Added a queryiwad_key cvar to control which key can force the IWAD selection + to appear. It can be either "shift" or "control". Any other value will + disable its functionality. +- Fixed: A_SkullPop() and A_FreezeDeathChunks() did not transfer the player's + inventory to the new dismembered head "player". + +July 18, 2006 +- Fixed: C_midPrint() needs a NULL status bar check. + +July 17, 2006 (Changes by Graf Zahl) +- Fixed: PClass::CreateDerivedClass forgot to NULL FActorInfo::Replacee. + +July 16, 2006 (Changes by Graf Zahl) +- Fixed: S_ClearSoundData cleared PlayerClasses instead of PlayerClassLookups. +- Added NecroMage's submission for bitwise/shift assignment operators for ACS. +- Added replacement handling to A_BossDeath. +- Fixed: The check for no skill menu was incorrect when a custom player + class menu was present so instead of starting the game specific skill menu + it always started Hexen's. +- Fixed: When a non-player tried to play a player sound it tried to access + the actor object as an APlayerPawn. +- Changed PlayAttacking2 to always use the melee state instead of different + implementations per player and hard coding it to MissileState+1. Also + changed PlayAttacking for the HereticPlayer to use the same animation as + PlayAttacking2. Now the special handling for Heretic in the FireWeapon + functions can be removed. +- Fixed: PlayerStartItem created a duplicate of the item's class name before + converting it into an FName. +- Removed game check for Doom from P_BloodSplatter. The BloodSplatter actor + is compatible with all games now so the explicit handling is no longer needed. +- Moved replacement handling back into AActor::StaticSpawn but controlled + by a (mandatory) parameter. Also added replacement to most other + instances in the game where non-inventory items are spawned. Replacement is safe + nearly everywhere except for inventory related spawns. +- Fixed: Due to the player class inclusion A_NoBlocking never called + NoBlockingSet for monsters. +- Changed: Sounds can be specified by full path now in SNDINFO and S_SKIN. + +July 15, 2006 +- Fixed: Makefile.mgw was mysteriously missing some targets. After fixing that, + I also removed some of GCC's warnings. + +July 14, 2006 (Changes by Graf Zahl) +- Fixed: Any kill in multiplayer games that could not be credited to a player + didn't count at all - not even toward the global level statistics. +- ...and removed it again. It was not an accident. The only reason the PowerupGiver + had its own RespawnTics was to account for the pickup flash delay. + But that is better handled by checking the flag and adding the additional 30 + tics in AInventory::Hide because then it affects all items that have one - + and only those. The AT_GAME_SET function didn't work anyway because it was + called after parsing DECORATE. + +July 13, 2006 +- Restored the PowerupGiver AT_GAME_SET function. I assume its removal was an + accident from merging in Grubber's custom player classes. + +July 13, 2006 (Changes by Graf Zahl) +- Removed the game filter check from addplayerclass. If a player class is added + here the game filter is irrelevant and there's nothing that should prevent + the HereticPlayer being added to a Hexen game, for example. +- Changed: The addplayerclass CCMD was far too paranoid and needlessly aborted + the game for any error being encountered. Since an empty player class list + is checked for elsewhere outputting the messages to the console is sufficient. +- Generalized Hexen's class-based spawning to be a property of the player class + so now it is available in all games. +- Replaced the call to A_FlameSnd in the HereticPlayer's burn death sequence + with A_FireScream and defined *burndeath for Heretic. +- Added Grubber's custom player class support. + +July 12, 2006 +- Changed decorate replacement to be opt-in instead of opt-out. This allows for + greater flexibility in what can be replaced (replaced actors need not be ancestors + of actors that replace them) at the expense of not having universal actor + replacement. Instances where replacements work: + - Line specials that spawn things (Thing_Spawn and related) + - ACS spawning commands (SpawnSpot and the like) + - Spawning mapthings at level load time in P_SpawnMapThing() + - Spawning items off of dead dudes in P_DropItem() + - The A_SpawnItem decorate function + - The summon and summonfriend console commands + - ThingCount will count both original actors and their replacements as the same + things. + TBD: Should the ACS inventory functions use replacements too, or not? +- Fixed: The game would crash after informing you of a duplicate class registration + because PClass::CreateDerivedClass() did not initialize everything before calling + InsertIntoHash(). +- Fixed: Forcefully removing a weapon from a player's inventory would not reset + the player's refire counter. +- Fixed: FreeKeySections() was called before M_SaveDefaults() during shutdown, + so all custom keys would go to a "(null)" section instead of their intended + section. + +July 11, 2006 +- Restored the previous level flag values to avoid needlessly breaking some + savegames at this point in time. +- Fixed: R_ClearPlanes() did not clear skybox planes for a full clear. +- Streamlined zip file loading by delaying the processing of the local file + header until it is actually needed. + +July 11, 2006 (Changes by Graf Zahl) +- Changed the additive scrollers option into a compatibility flag so that it can + be changed from the menu. + +July 10, 2006 +- Fixed closed doors between the front sector's floor and ceiling the right way. + I was just missing a non-null texture check. +- Removed references to texturewidthmask. What was that? + +July 10, 2006 (Changes by Graf Zahl) +- Fixed: The earthquake code needs to check whether a quake's spot is still valid. + Super Sonic Doom crashed due to this. +- Fixed: G_DoAutosave could divide by 0 if autosavecount was 0. + +July 9, 2006 (Changes by Graf Zahl) +- Fixed: The calls to DCanvas::Dim in c_console.cpp were missing some type casts. +- Fixed: CCMD(dir) passes FStrings directly to Printf. +- Fixed: The defaultbind command still treated the bindings as char pointers and + as a result didn't work. +- Added SpawnSpotFacing ACS function which is the same as SpawnSpot but it uses + the map spot's angle. +- Added ThingCountName ACS function which is the same as ThingCount but it takes + an actor's type name instead of a spawn ID. + +July 9, 2006 +- Fixed: If the sector behind a seg was closed, but it was closed between the + ceiling and floor of the front sector, the renderer did not add it to the + solid clip list. + +July 8, 2006 (Changes by Graf Zahl) +- Fixed: Specifying 'strifefallingdamage' in MAPINFO cleared all other flags. +- Fixed: maxstepheight and maxdropoffheight were stored as ints instead of + fixed_t's by the DECORATE parser. + +July 7, 2006 +- Blends created with the ACS fade commands now degrade to transparent overlays + when the console is visible, just as they do for the menu. +- Added actor replacement for DECORATE. This works at a higher level than + using duplicate DoomEdNums and will affect all attempts to spawn the + replaced actor. However, because this happens for all spawns and not just + at map load, the replacing actor must be compatible with the replaced + actor, which means that an actor can only serve as a replacement for one + of its baseclasses. For example, if you want to use a modified imp, you can + use this DECORATE: + actor MyImp : DoomImp replaces DoompImp + { + // Put changed properties here + } +- New: The IWAD dialog now remembers the last IWAD you picked and + automatically highlights it the next time you run the game. This also + applies if you check "Don't ask me this again": The IWAD selected will be + the one that gets automatically loaded, not the one located first. (Using + the -iwad parameter will not change the default IWAD.) In addition, you + can now bring the dialog up even if you disable it by holding down SHIFT + during startup. +- Changed ExtractFilePath() and ExtractFileBase() to return FStrings instead + of writing to a provided output buffer. ExtractFileBase() can also + optionally keep the file's extension in the result. +- Removed the -heapsize parameter entirely. The informational message should + no longer be needed. +- Removed -maxdemo parameter. There's no point to having it around since + the demo buffer grows automatically. + +July 3, 2006 (Changes by Graf Zahl) +- Fixed: Changed initialization of Weapon.Kickback so that it is only done + for direct descendants of AWeapon and not for every weapon being defined. +- Changed parsing of actor names back to not use C-mode. This change breaks + any definition that contains periods in their name and apparently there's + more than anyone could expect. Also altered the parser to manually check + for colons inside the parsed string so that placing spaces around them + is no longer necessary. +- Fixed: Weapons could be picked up for ammo even if they gave none. +- Fixed: A_Beacon was missing a NULL pointer check for the beacon's owner. +- Fixed: The status bar tried to access CPlayer->camera without checking + its validity. In spy mode there is a possibility that it is NULL. + +July 2, 2006 (Changes by Graf Zahl) +- Fixed: G_NewInit destroyed the players' userinfo data. +- Changed the special radius damage handling for the barrel and boss brain + into an actor flag. +- Added A_RadiusThrust code pointer for DECORATE and adjusted the radius + attack functions accordingly. + +July 1, 2006 (Changes by Graf Zahl) +- Fixed: In multiplayer games, when trying to change targets, A_Chase forgot + to check whether the new target was the same as the old one and treated + this case as a real target change. + +June 30, 2006 +- Changed the earthquake view shaking so that it works for anything and not + just players. + +June 29, 2006 +- Added some hackery at the start of MouseRead_Win32() that prevents it from + yanking the mouse around if they keys haven't been read yet to combat the + same situation that causes the keyboard to return DIERR_NOTACQUIRED in + KeyRead(): The window is sort of in focus and sort of not. User.dll + considers it to be focused and it's drawn as such, but another focused + window is on top of it, and DirectInput doesn't see it as focused. +- Fixed: KeyRead() should handle DIERR_NOTACQUIRED errors the same way it + handles DIERR_INPUTLOST errors. This can happen if our window had the + focus stolen away from it before we tried to acquire the keyboard in + DI_Init2(). Strangely, MouseRead_DI() already did this. +- When a stack overflow occurs, report.txt now only includes the first and + last 16KB of the stack to make it more manageable. +- Limited StreamEditBinary() to the first 64KB of the file to keep it from + taking too long on large dumps. +- And now I know why gathering crash information in the same process that + crashed can be bad: Stack overflows. You get one spare page to play with + when the stack overflows. MiniDumpWriteDump() needs more than that and + causes an access violation when it runs out of leftover stack, silently + terminating the application. Windows XP x64 offers SetThreadStackGuarantee() + to increase this, but that isn't available on anything older, including + 32-bit XP. To get around this, a new thread is created to write the mini + dump when the stack overflows. +- Changed A_Burnination() to be closer to Strife's. +- Fixed: When playing back demos, DoAddBot() can be called without an + associated call to SpawnBot(). So if the bot can't spawn, botnum can + go negative, which will cause problems later in DCajunMaster::Main() + when it sees that wanted_botnum (0) is higher than botnum (-1). +- Fixed: Stopping demo recording in multiplayer games should not abruptly + drop the recorder out of the game without notifying the other players. + In fact, there's no reason why it should drop them out of multiplayer at + all. +- Fixed: Earthquakes were unreliable in multiplayer games because + P_PredictPlayer() did not preserve the player's xviewshift. +- Fixed: PlayerIsGone() needs to stop any scripts that belong to the player + who left, in addition to executing disconnect scripts. +- Fixed: APlayerPawn::AddInventory() should also check for a NULL player->mo + in case the player left but somebody still has a reference to their actor. +- Fixed: DDrawFB::PaintToWindow() should simulate proper unlocking behavior + and set Buffer to NULL. +- Improved feedback for network game initialization with the console ticker. +- Moved i_net.cpp and i_net.h out of sdl/ and win32/ and into the main source + directory. They are identical, so keeping two copies of them is bad. +- Fixed: (At least with Creative's driver's,) EAX settings are global and not + per-application. So if you play a multiplayer ZDoom game on one computer + (or even another EAX-using application), ZDoom needs to restore the + environment when it regains focus. +- Maybe fixed: (See http://forum.zdoom.org/potato.php?t=10689) Apparently, + PacketGet can receive ECONNRESET from nodes that aren't in the game. It + should be safe to just ignore these packets. +- Fixed: PlayerIsGone() should set the gone player's camera to NULL in case + the player who left was player 0. This is because if a remaining player + receives a "recoverable" error, they will become player 0. Once that happens, + they game will try to update sounds through their camera and crash in + FMODSoundRenderer::UpdateListener() because the zones array is now NULL. + G_NewInit() should also clear all the player structures. + +June 29, 2006 (Changes by Graf Zahl) +- Added a 'default' setting to all color selection menu items that leaves + the font untranslated. +- Fixed: Heretic's monsters were missing the MF2_MCROSS flag. + +June 28, 2006 (Changes by Graf Zahl) +- Fixed: Bouncing projectiles should not bounce off horizon lines. Now they + vanish instead. +- Changed masses of ice chunks and glass shards to make small splashes +- Fixed: P_UndoPlayerMorph didn't properly transfer the inventory. It just + copied the pointer instead of using ObtainInventory. + +June 24, 2006 +- Moved the version resource into the "compile-time directives" section of + the resource script so that Developer Studio won't replace the version macros + in it with their literal values. Now updating version.h is guaranteed to be + enough to bump the version everywhere it's used. + +June 24, 2006 (Changes by Graf Zahl) +- Fixed: PIT_CheckThing checked AActor::tid instead of TidToHate to determine + whether a monster of the same species can be hurt. +- Added new ice chunk sprites submitted by Enjay. +- Replaced all occurences of 'ZDoom' in i_crash.cpp with a define from version.h + so that this file doesn't need to be changed for altering the texts. +- Deleted the programmer death script from strifehelp.acs because it is no + longer used. +- Fixed: strfhelp.acs and the PUMPUPS cheat need to give 10 UpgradeStaminas + because that item is using Inventory::Amount now. + +June 23, 2006 +- Changed the archive format for crash reports from tar.gz to zip. +- Went back to a single process model for crash reporting. It appears there + are some machines that don't like having another process collect the + information and report it. I still feel that having another process do + it _should_ be more reliable, because that process can execute in a known + good state. Ah well. I haven't yet seen anything that left the main process + in a totally unrecoverable state, so it's probably okay. Unlike before, this + single-process version is still GCC-compatible. + +June 23, 2006 (Changes by Graf Zahl) +- Fixed: The resurrect cheat didn't reset the player's damage type so + if he died by being frozen the blue blend didn't disappear. +- Fixed: FWarpTexture::MakeTexture must be declared virtual so that + the FWarp2Texture version of it can be called. + +June 22, 2006 (Changes by Graf Zahl) +- Fixed: The check to prevent items from being given to dead players + didn't work properly. It has to be done in the cheat code, not in + APlayerPawn::AddInventory. +- Fixed: The medikit and stimpack used a MaxAmount of 100 so that + stamina upgrades were ineffective. +- Fixed: Jumping and crouching at the same time created jerky results. + Now jumping takes precedence and you can't crouch while pressing the + jump key (which causes an uncrouch.) + +June 21, 2006 +- Fixed: DF_NO_COOP_WEAPON_SPAWN was handled backwardly. +- Fixed: G_InitLevelLocals() needs to OR in the crouching bits, otherwise it + discards the jumping bits. +- ProcessActor() now sets C mode before retrieving the actor's name. +- Fixed: The new SC_GetString() scanner accepted slashes at the end of tokens + when not in C mode, even if they were the start of a comment. Now if you + want a slash at the end, you must quote it. + +June 21, 2006 (Changes by Graf Zahl) +- Fixed: Decal actors with an invalid decal texture caused a crash. +- Fixed: Player could crouch while dead. +- Fixed: The sidedef loader could allocate insufficient memory if a map + contained unused sidedefs. +- Fixed: Color control sequences were written to the log file. Since any + entered console command contains such a sequence it was quite noticable. +- Fixed: The obituary code didn't use the attacker's name for kills caused + by other players. +- Fixed: PIT_StompThing never checked for COMPATF_NO_PASSMOBJ. +- Fixed: COMPATF_TRACE returned true for all two-sided lines, not just for + those with the same sector on both sides. + +June 20, 2006 +- Added grubber's thingdef_exp.cpp. I might not use it later, but I can still + use it now. +- Unlimited the monster pain sounds in Hexen after I played as the Cleric a + while and killed several centaurs with the flechette. +- Fixed: Moving to an old level in a hub caused the old player's inventory to + spawn owned by the current player (but still hanging off the old player), so + the game would hang when trying to delete it. +- Modified re2c so that it doesn't add a date to the file it generates. Thus, + if it regenerates a file during a full rebuild, SVN won't see it as a change. + Also updated it to 0.10.5. +- Fixed: SC_GetString() did not properly terminate sc_String when the last + token in the file had no white space after it. Since I could not actually + find the problem (it works fine in debug mode and I saw no logic errors), + I decided to take this opportunity to reimplement it using an re2c-generated + scanner. Now it's 1.6x faster than before and correctness is easier to + verify. + +June 19, 2006 +- Fixed: FMODSoundRenderer::Shutdown() also needs to reset NumChannels. +- Added back the Manifest to zdoom.rc for non-VC8 Windows compilers. +- Fixed MinGW compilation again. Now it uses the same method as Makefile.linux + to find all the source files so that it doesn't need to be manually updated + each time source files are added or removed. +- Added the SVN revision number to the version string. A new tool is used to + obtain this information from the svnversion command and write it into a + header file. If you don't have the svn command line tools installed or didn't + check it out from the repository, you can still build. I added some rules for + this to Makefile.linux, and I assume they work because they do for + Makefile.mingw. +- Fixed: MIDISong2 did not delete MusHeader in its destructor. + +June 19, 2006 (Changes by Graf Zahl) +- Removed the unused sfx_ variables for the chainsaw sounds. +- Fixed map name checks in idclev, hxvisit, for +map and the titlemap. +- Changed handling of Zips so that the patches/, graphics/, sounds/ and + music/ subdirectories no longer are placed in the global namespace. Instead + new namespaces are defined. These namespaces aren't merged, however and + searching in them either returns a lump inside it or one from the global + namespace when it doesn't come from a Zip file. Proper order of files is + still observed though. As a result proper use of the directories inside Zips + is strictly enforced now so that for example anything used as a patch must be + in the patches/ directory and won't be found anywhere else. + +June 18, 2006 (Changes by Graf Zahl) +- Added another set of ACS inventory functions which take a tid for the actor + and aren't limited to the script's activator. +- Added GetSectorLightLevel(tag), GetActorCeilingZ(tid) and + SetActorPosition(tid, x, y, z, fog) ACS functions. +- Fixed: First initialization of camera textures should not mark the rendered + lines as mapped. + +June 17, 2006 +- Finally implemented code to keep some or all of your inventory intact when + respawning in coop. Now the new inventory code should finally be complete. :-) +- Fixed: PROP_Inventory_PickupMessage was improperly defined for non-VC++ + compilation. + +June 17, 2006 (Changes by Graf Zahl) +- Converted a_doomhealth.cpp to DECORATE. +- Added a PickupMessage property to the internal actor parser, replaced + most of the virtual PickupMessages with it and placed the code that + reads the metadata into AInventory::PickupMessage. Now the + PickupMessage method is truly virtual and I can do: + Added a Health.LowMessage property to define double message items like + Doom's medikit in DECORATE. +- Since defining Mana3 as an ammo type and then overriding the TryPickup + method means that this item defeats all ammo checks in the game it might + as well be defined as a CustomInventory item. At least this fixes the + amount given in easy and very hard skills. +- Converted all ammo items to DECORATE. +- Changed internal property setting of ammo types and sister weapons + to use fuglyname as for DECORATE definitions. This allows to export + the ammo definitions into DECORATE definitions without doing it for + the weapons themselves. +- Replaced obituary methods with actor properties. +- Fixed: The secret map check didn't work for maps inside Zips. + +June 14, 2006 +- Fixed loading of Build/Blood maps. +- FWadLump::Read() now handles Blood decryption directly. +- Fixed: A fatal error thrown during map loading after the sectors have been + counted but before they are allocated crashed in PointerSubstitution(). +- Removed my "backwards compatibility fix" for APROP_Speed. It turns out that + in all the public versions where monster speed is not fixed point, you + couldn't modify the monster's speed due to a bug in P_Move() anyway. So + there's nothing to be backward compatible with. + +June 14, 2006 (Changes by Graf Zahl) +- Fixed: Saving on maps that don't contain a MAPINFO definition didn't work. +- Fixed: The Zip loader loaded all WADs inside a Zip into the lump directory. + This is only supposed to be done for WADs in the root directory. + +June 12-14, 2006 (Changes by Graf Zahl) +- Complete restructuring of the map loading code. Previously the only way + to put maps into Zips was to load them as embedded WADs which caused + some problems, most importantly that the map's file name was irrelevant + and the internal map label was used instead. With the new code there + is now a properly defined way to add maps to Zips: + * Maps are placed in a subdirectory called 'maps'. + * Maps are stored as WADs that contain all map related lumps. + * The first lump in the map's WAD directory must be the map label. + * All lumps not belonging to the first map are ignored. + * The map's file name determines the name the map is identified with. + For maps stored this way the internal map label is ignored so with this + method renaming maps is as easy as renaming a file and it is no longer + necessary to manipulate the map label. + With the new code it is also possible to load external maps without + adding them to the WAD list. Type 'open mapfile.wad' in the console + to start such a map. + The new code also performs stricter lump name checks to prevent accidental + loading of non-map data. + +June 13, 2006 +- Moved level scroller information out of G_InitLevelLocals() and into + P_FreeLevelData() so that it also gets performed at shutdown. +- Fixed: In the past, ZDoom worked like Doom and used integral values for + monster speeds. Now it uses fixed point so that an actor's speed property + can always be considered is always fixed point. So DoSetActorProperty() + should scale very slow speeds, just like dehacked's PatchThing() has done + for some time now. + +June 11, 2006 (Changes by Graf Zahl) +- Changed UpgradeStamina to use AInventory's Amount and MaxAmount to + control the amount of upgrade and the maximum that can be reached. + +June 10, 2006 (Changes by Graf Zahl) +- Fixed: The skin loader assumed that all skin textures are in Doom patch + format. Now it calls FTexture::CreateTexture to do proper checks. +- Removed the PickupSound method from FakeInventory and changed it so that + it uses AInventory::PickupSound to store its custom pickup sound. +- Removed the PickupMessage method from FakeInventory. This can be handled + by the standard pickup message code now that it uses the meta data for the + message. +- Fixed: The maximum indices for StrifeTypes were inconsistent. Now the + allowed range is 0-1000 in all situations. +- Fixed: Setting a local SNDINFO for a map deleted all skin based sounds. +- Added a crouchsprite property to the skin info. +- Fixed: Crouching sprites must be checked each frame, not just each tic. +- Added an srand call to D_DoomMain in order to randomize the values returned + by rand which is being used to shuffle the playlist. + +June 10, 2006 +- Fixed: Information added with addkeysection and addmenukey was never freed. +- Fixed: A classic decorate FakeInventory's PickupText was never freed. +- Fixed: Colored lights were never freed. +- Fixed: When a dehacked patch was applied, the dehacked StateMap was never + freed. +- Removed termdone checks around atterm(S_ClearSoundData) and + atterm(S_Shutdown) because atterm() already checks for duplicates. +- Fixed: S_ClearSoundData() should unload all sounds before it clears S_sfx. +- Fixed: AltSoundRenderer::LoadSound() didn't check if the sound had already + been loaded and lost the old sound data if it had been. +- Fixed: FinishDehPatch() needlessly duplicated the new DehackedPickup's name. +- Fixed: PatchStrings() allocated a private string and never freed it. + +June 8, 2006 (Changes by Graf Zahl) +- Changed music name handling in MAPINFO so that music can be specified by + full path of a file in a Zip. +- Fixed: intermusic in MAPINFO was limited to WAD lumps and couldn't handle + external data. + +June 8, 2006 +- Fixed: Trying to play a 0-length song from a wad inside a zip caused a crash. + +June 7, 2006 (Changes by Graf Zahl) +- Fixed: A_CustomPunch didn't use the range parameter correctly. + +June 6, 2006 +- Integrated recent ZDBSP improvements into the internal nodebuilder: + - ClassifyLine now chooses either SSE2 or regular x87 math depending on whether + or not SSE2 is available at runtime. Since most of the time is spent in + ClassifyLine, using SSE2 in just this one function helps the most. + - Nodebuilding is a little faster if we inline PointOnSide. + - Changed FEventTree into a regular binary tree, since there just aren't enough + nodes inserted into it to make a red-black tree worthwhile. + - Added more checks at the start of ClassifyLine so that it has a better chance + of avoiding the more complicated checking, and it seems to have paid off with + a reasonably modest performance boost. + - Added a "vertex map" for ZDBSP's vertex selection. (Think BLOCKMAP for + vertices instead of lines.) On large maps, this can result in a very + significant speed up. (In one particular map, ZDBSP had previously + spent 40% of its time just scanning through all the vertices in the + map. Now the time it spends finding vertices is immeasurable.) On small maps, + this won't make much of a difference, because the number of vertices to search + was so small to begin with. + +June 3, 2006 (Changes by Graf Zahl) +- Added a StartConversation special that allows automatic activation of Strife + dialogs. +- Added Thing_Raise special that allows Arch-Vile like resurrections from scripts + or DECORATE states. +- Added a RadiusDamageFactor property for actors. This replaces the hard coded + factor of 0.25 for Hexen's players. +- Added new SpawnProjectile function to ACS. It's the same as Thing_Projectile2 + but the projectile is specified by name, not spawn ID. +- Added MAPINFO option to set the compatibility flags. If this is done these + explicit settings will take precedence over the compatflags CVAR. + +May 31, 2006 +- Merged in recent ZDBSP fixes: + - Added code to explicitly handle outputting overlapping segs when + building GL nodes with ZDBSP, removing the check that discarded + them early on. + - AddIntersection() should convert to doubles before subtracting the vertex + from the node, not after, to avoid integer overflow. (See cah.wad, MAP12 + and MAP13.) A simpler dot product will also suffice for distance calculation. + - Splitters that come too close to a vertex should be avoided. (See cata.wad.) + - Red-Black Tree implementation was broken and colored every node red. + - Moved most of the code for outputting degenerate GL subsectors into another + function. + +May 31, 2006 (Changes by Graf Zahl) +- Fixed: Ammo items dropped by monsters that have a default amount of 1 didn't + contain any ammo at all. +- Fixed: PClass::FreeIndices was declared as TArray in the header but + as TArray in the cpp file. + +May 28, 2006 (Changes by Graf Zahl) +- Fixed: PowerFrighteners must check Owner for NULL in InitEffect and EndEffect. + +May 28, 2006 +- Fixed: When building GL nodes for Deathkings MAP42, one polyobject had one + of its segs thrown away, so the map could not start. This was because the + nodebuilder assumed all subsectors would be 2D and could not handle the + case where a degenerate 1D subsector is created. In this case, that happens + because that map has three polyobjects in the middle of the void, so the only + way to assign them to a subsector is to use a 1D subsector. + +May 28, 2006 (Changes by Graf Zahl) +- Fixed: Monsters couldn't hurt other monsters of the same species if they + were supposed to hate them. +- Since I was editing the file anyway I added checks for Heretic's and Strife's + damaging floor types to DCajunMaster::IsDangerous. +- Added a NULL pointer check to DCajunMaster::TurnToAng because a crash log + indicated that this can happen. +- Fixed: Strife's energy pod contains 20 units when dropped by monsters. + To achieve this I added an Ammo.DropAmount property because there are + no other means to control this from inside a conversation script. + +May 27, 2006 (Changes by Graf Zahl) +- Fixed: FString::FormatHelper must not alter the null string. +- Fixed: FString::FormatHelper should use ReallocBuffer instead of directly + calling Realloc. This caused crashes with the ACS print function. +- Fixed: The dummy player spawned in G_FinishTravel must not start any ENTER + scripts. + +May 26, 2006 +- Changed makewad's zip routines so that it simply stores files that cannot be + compressed smaller instead of using deflate anyway. Saves 133 bytes currently. + +May 26, 2006 (Changes by Graf Zahl) +- Fixed: CallStateChain relied on CallingState being preserved across the + call of the state's action function. This is not the case when a missile + is being spawned and exploded right away. + +May 25, 2006 +- Fixed: The C code in AltSoundRenderer::CopyAndClip() did not shift the sample + data enough (2 bits instead of 8), so it was super loud and aliased. +- Fixes for GCC 4.1: Several type-punned pointer warnings, but more + importantly, declaring a friend function inside a class body is no longer + enough to declare that function globally; you must declare it again outside + the class. +- Upgraded FArchive::SerializePointer so that it can store 32-bit indices. +- ACS printing pcodes now build their string in an FSttring instead of a fixed + sized buffer on the stack. + +May 24, 2006 +- Modified ccdv-win32 to show "Generating X" messages when running lemon and + re2c instead of "Linking X". +- Updated lemon and re2c to the latest versions and ported dehsupp to use them + for code generation. (Xlatcc is next.) +- Added function level linking for Makefile.mingw. +- Disabled RTTI generation and enabled function-level linking in the VC 2005 + zdoom project. +- Fixed: TAG_MORE now uses __va_copy to copy the taglist when building with + GCC, so that should let it build under x86-64 and any other GCC targets. + +May 24, 2006 (Changes by Graf Zahl) +- Fixed: A_SpawnItem performed an integer multiplication with fixed point + values to calculate the spawn position. +- Fixed: A_SpawnItem tried to set the spawned actor's angle before checking + the validity of the returned pointer. + +May 23, 2006 +- Added missing linker dependencies for Visual C++ 2005 Express Edition and + fixed building of the assembly files when the source is located in a path + with spaces. + +May 22, 2006 +- Fixed: The new sound pausing on menu open interrupted Strife conversations. +- Did some very preliminary support for x64 compiling. +- Now I see why makewad is using the __fastcall calling convention by default: + Because the release zlib is built with it as well. +- Fixed: Conversion from 'const char *' to 'char *' in DEM_SAVEGAME case in + Net_DoCommand(). +- Updated the project files for Visual C++ 2005. +- Fixed: The new Thing_ChangeTID check would infinite loop if an actor + scheduled for destruction was encountered. + +May 22, 2006 (Changes by Graf Zahl) +- Fixed: Thing_ChangeTid must check whether the actor whose tid is about to + be changed is scheduled for destruction. +- Fixed: G_FinishTravel added the player to the hash chain twice. +- Fixed: The animations for Doom's E3 intermission used incorrect patch names. +- Added a check for MF_NOLIFTDROP to PIT_CeilingRaise because the overlapping + bridges in 007LTSD got moved by this function. + +May 21, 2006 +- Fixed GCC 4 warnings in FNodeBuilder::CreateSubsectorsForReal(). +- Changed f_finale.cpp/atkstates[] into a static variable, since its + anonymous type prevents it from being accessed from other files anyway. +- Fixed: The behavior of the eventtail advancement in d_net.cpp/CheckAbort() + was compiler-dependant. +- Fixed warnings GCC 4 threw up while compiling re2c and lemon. +- Removed __cdecl from makewad.c again. This is already defined as a builtin + for MinGW, and redefining it produces a warning. (Why is main explicitly + declared __cdecl anyway?) +- Fixed building ccdv-win32 with GCC 4. GCC 4 creates a memcpy call, which + won't work because it doesn't get linked with the standard C library. + +May 20, 2006 +- Fixed default.cbd and Makefile.mingw for current code state. +- New: Pausing the game (through any means, not just the pause key) now pauses + sound effects as well as music. "PauseMusicInMenus" has been added as a + MAPINFO flag to also pause the music when a menu or the console are open. + +May 20, 2006 (Changes by Graf Zahl) +- Fixed: The automap code had the check for rotation reversed. +- Changed type PClass::FreeIndices to TArray because that's + the type of the indices. +- Fixed: makewad.c needs __cdecl for non-Windows builds. +- Fixed: FinishThingdef didn't check whether the WeaponClass pointer in + AWeaponPiece was a valid name. + +May 19, 2006 +- Fixed: FloorAndCeiling_Raise/Lower did not work with slopes because they + used ZatPointDist instead of PointToDist to calculate the destination + distance for the plane equation. +- Fixed: Sky scroll positions could "jump" once they wrapped past position + 32767. An fmod now keeps them within range of the sky textures' real widths. + +May 19, 2006 (Changes by Graf Zahl) +- Increased the StrifeTypes array to 999 entries so that custom WADs have + more flexibility when defining dialogs. + +May 18, 2006 +- Added a check against rw_havelow in the "sky hack" part of R_NewWall(). + This prevents the front ceiling from being moved up if there has been no + texture defined to draw on the wall. This makes various parts of The + Darkest Hour render properly again while still allowing the crosses in + heroes2.wad and lamasery.wad to render correctly. +- Added a NULL sector check to P_CheckFakeFloorTrigger() because there was + a crash report indicating that an actor being pushed up by a moving floor + had a NULL sector. Since this field should be valid for every actor, the + debug build gets an assert here, and the release build just returns without + doing anything. +- Fixed: Camera textures were not rendered properly when the underlying + canvas's pitch and width were different (which, really, only happens if + you use ridiculously large camera textures). +- Fixed: FCanvasTextureInfo's were never freed. +- Fixed: MAPINFO special action structures were not freed. +- Fixed: FSingleLumpFont::LoadFON2() never freed its widths2 array. + +May 17, 2006 (Changes by Graf Zahl) +- Fixed: In case the path to strife1.wad didn't contain any '/' an + incorrect path was created for voices.wad. +- Fixed: The code building the path for Strife's voices.wad called the + wrong FString constructor. +- Fixed: LS_Thing_SetGoal set MF5_CHASEGOAL in flags, not flags5. + +May 17, 2006 +- Fixed: M_NotifyNewSave() needlessly created a copy of the filename. +- Fixed: Any touching_sectorlists for actors unlinked in G_StartTravel() were + lost forever. +- Fixed: DLightningThinker::Serialize() did not delete the old + LightningLightLevels array when loading from an archive. +- Fixed: Although I moved the correct polyobject freeing code into + P_FreeLevelData(), I left the old wrong code there too, which just deleted + the array without deleting anything hanging off of it. +- Texture animation improvements: + * Animations are now millisecond-accurate, so delays in ANIMDEFS can have + fractional parts. + * Cleaned up the animation code and moved it into r_anim.cpp. + * Blood's oscillating texture animations are now available for use by actual + supported games by adding the word "oscillate" after a "range" definition + in ANIMDEFS. + * Not exactly texture animation, but it's handled in the same function as + texture animations: Scrolling skies also have millisecond precision. + +May 16, 2006 +- Implemented Quasar's suggestion to use line flag 2048 as a "reserved" flag + that, if set, clears all the non-original-Doom flags on a line. This is + only for Doom format maps when playing Doom. +- Added support for automatically loading ACS objects (even for Doom-format + maps). To use it, compile the ACS files as ordinary libraries placed + between A_START/A_END markers. Then outside the markers, create a lump + called LOADACS. This is just a plain text lump that lists all the libraries + you want to autoload with every map. You can do this with as many libraries + as you want, and LOADACS lumps are also cummulative. +- Fixed: ApplyActorDefault() must ensure that dataint is non-negative before + calculating a non-NULL state. When compiling with Visual C++, states are + stored in the defaults list as byte values, but when compiling with GCC, + they are passed as 32-bit arguments to the function directly. So in VC++, + using ~0 to specify a NULL state appears as 255, but in GCC, it appears as + -1. + +May 16, 2006 (Changes by Graf Zahl) +- Added a missing NULL pointer check to APlayerPawn::Tick. +- Fixed: The falling scream should not be played when the player is under + water. + +May 15, 2006 +- Fixed: CopyPlayer() in p_saveg.cpp should use normal assignment, not + memcpy to copy the player structures. +- Fixed compilation with MinGW again and removed most of the new warnings. +- Changed the memory management for FString. Instead of using a garbage + collected heap, it now uses normal heap calls and reference counting to + implement lazy copying. You may now use bitwise operators to move + (but not copy!) FStrings around in memory. This means that the + CopyForTArray template function is gone, since TArrays can now freely + move their contents around without bothering with their specifics. + + There is one important caveat, however. It is not acceptable to blindly 0 + an FString's contents. This necessitated the creation of a proper + constructor for player_s so that it can be reset without using memset. I + did a quick scan of all memsets in the source and didn't see anything else + with a similar problem, but it's possible I missed something. +- Fixed: Build tiles were never deallocated. +- Fixed: Using Build's palette.dat only got half the palette right. + +May 14, 2006 (Changes by Graf Zahl) +- Added a show_obituaries option to disable obituaries without disabling + other more important message types which have lower priority for some + reason. +- Added a menu option for show_messages after accidentally switching it + off far too often and wondering why no messages appear. +- Added crouching DoomPlayer sprites submitted by Enjay. +- Fixed DF_NO_CROUCH was not checked. +- Fixed: The intermission script parser had some of its cases in the + keyword parser incorrectly sorted. +- Fixed: atterm was still defined to take a STACK_ARGS function argument. +- Added an AltFlash state for weapons. +- Turned FloatSpeed into an actor property and changed the value to 5 + for all floating Strife actors, as a comment in the source indicated. +- Added GZDoom's code for Vavoom slope things because I wanted to test + something with a map from Silent Steel. +- Added nocrouch and allowcrouch MAPINFO commands and a DF_NO_CROUCH + dmflag. +- Added GZDoom's crouching code after cleaning it up so that adding + crouching sprites will be easier. + +May 13, 2006 (Changes by Graf Zahl) +- Fixed: P_StartScript was missing a NULL pointer check for the error + message. When trying to puke a script outside a map it crashed. +- Fixed: The random number generator for large numbers must mask out the + sign bit before performing a modulo. +- Now that the conversation states are pointers there is no need to make + AActor::ConversationAnimation virtual. No class overrides this method + anymore. +- Replaced AMacil1::TakeSpecialDamage with MF5_NODAMAGE. +- Fixed: AMacil2::TakeSpecialDamage and AOracle::TakeSpecialDamage didn't + check whether inflictor was NULL and crashed when used with 'kill monsters'. +- Fixed: Some Strife decorations didn't loop their animation +- Changed: The decision whether blood splatter sprites are spawned is no + longer determined by game. Instead there's a new flag, MF5_BLOODSPLATTER + which is deciding what to do. To keep backwards compatibility this flag + is unset for projectiles in Doom and Strife and set for them in Heretic + and Hexen. The same applies to DECORATE but of course the flag can be + manipulated here. +- BLODxx sprites are now globally renamed to BLUDxx when not playing Doom. + This allows using the same states in every game, including the + Raven-specific blood actors. +- Gave the bullet puff and the axe blood masses of 5 so that the make small + splashes. +- Added A_Light(value) code pointer for DECORATE to generalize the weapon + light effect. +- Added 'noskillmenu' option to MAPINFO episode definitions. This is for + WADs that want to implement a skill selection level. +- Added APROP_ChaseGoal and APROP_Frightened actor properties for ACS. +- Added MF5_CHASEGOAL flag that makes monsters to go after their goal even + if they have a valid target. +- Fixed some issues with the changes to P_NewChaseDir I made to include + MBF's dropoff logic. +- Added a PowerFrightener powerup class. It seemed like such a waste to + have this cool feature but no means to use it in a decent fashion. +- Fixed: S_Init and S_ParseSndInfo should call atterm only once but not + each time they are called. + +May 11, 2006 +- Merged a lot of these static destructor-only structs into regular + functions added to the exit chain with atterm so that they can be called + in a deterministic order and not whatever order the linker decides to put + them in. +- Fixed: DCajunMaster did not free its getspawned. +- Fixed: P_FreeLevelData() did not free ACS scripts. +- Fixed: Level snapshots were not freed at exit. +- Fixed: The save/load menu list was not freed at exit. +- Fixed: FCompressedMemFile needs a destructor to free the m_ImplodedBuffer. +- Fixed: G_DoLoadGame() did not free the engine string. +- Fixed: M_ReadSaveStrings() did not free the engine string. +- Fixed: Processing DEM_SAVEGAME did not free the pathname string. +- Added a check for truncated flats to FFlatTexture::MakeTexture() because + Heretic's F_SKY1 is only four bytes long. +- Added a dump of the offending state to the "Cannot find state..." diagnostic. +- Fixed: FCompressedFile did not initialize m_Mode in its default constructor. +- Fixed: Heretic and Hexen status bars did not initialize ArtiRefresh. +- Fixed: PNGHandle destructor should use delete[] to free TextChunks. + +May 11, 2006 (Changes by Graf Zahl) +- Converted the stealth monsters to DECORATE. +- Added string replacement option to obituary strings. +- Changed lock and pickup message handling so that it is either a real + string or a LANGUAGE identifier. The only reason I did the mixed format + in the first place were Hexen's lock messages but they have been + replaced by unique strings in the mean time so the feature isn't needed + any more. +- Added a flags parameter to TranslucentLine. +- Extended the second arg of Line_SetIdentification to set not only + ML_ZONEBOUNDARY but all 8 bits of the third byte in the flag word. + This allows a relatively simple means of setting all the new flags + directly. +- Moved ML_ZONEBOUNDARY to doomdata.h so that it is in the same place as the + other line flags. +- Fixed: Strife's teleport swirl didn't loop its animation. +- Fixed: Strife's rat is not supposed to be shootable. +- Fixed: Strife's MiniMissile pickup amount was still incorrect. +- Moved Strife's random dialogs into the string table. Now it should also be + possible to define dialogs for other actors as well. + +May 10, 2006 +- Fixed: When revisiting a map in a hub, the player could spawn at the wrong + height if the floor had moved while they were there before. This was because + the player was spawned on the original copy of the map before the changes to + it were dearchived, so they didn't know about the new floor height. +- Fixed: Calling BaseFileSearch() and letting it fill in the file's extension + didn't work because the space for the path was deallocated before it + returned. +- Guess we're not leak-free yet. Try travelling around in a hub and see that + it leaks. I don't have time to track it down right now. +- Yay! We now seem to be free of memory leaks! The next step will be to + merge a lot of these static destructor-only structs into regular + functions added to the exit chain with atterm so that they can be called + in a deterministic order and not whatever order the linker decides to put + them in. (Interestingly, the amount of memory used when repeatedly + executing the same map command at the console varies up and down, but it + now stays relatively stable rather than increasing unbounded.) +- Fixed: The list of resolutions in the video modes menu was not freed + at exit. +- Fixed: mus_playing.name was not freed at exit. +- Fixed: SN_StopAllSequences() should be called at the start of + P_FreeLevelData(), not just before the call to P_SetupLevel() in + G_DoLoadLevel(), so it can run even at exit. And C_FullConsole() can + call P_FreeLevelData() to free more memory too. +- Fixed: StatusBar was not freed at exit. +- Fixed: spritesorter was not freed at exit. +- Fixed: Bad things happened if FString's data pool was destroyed before + all C_RemoveTabCommand() calls were made. +- Added an overload for FArchive << FString. +- Fixed: The players' log text was not freed at exit. +- Fixed: Bot information was not freed at exit. +- Fixed: doomcom was not freed at exit. But since it's always created, + there's no reason why it needs to be allocated from the heap. My guess + is that in the DOS days, the external packet driver was responsible for + allocating doomcom and passed its location with the -net parameter. +- Fixed: FBlockNodes were not freed at exit. +- Fixed: Openings were not freed at exit. +- Fixed: Drawsegs were not freed at exit. +- Fixed: Vissprites were not freed at exit. +- Fixed: Console command history was not freed at exit. +- Fixed: Visplanes were not freed at exit. +- Fixed: Call P_FreeLevelData() at exit. +- Fixed: Channel, SoundCurve, and PlayList in s_sound.cpp were not freed at + exit. +- Fixed: Sound sequences were not freed at exit. +- Fixed: DSeqNode::Serialize() did not resize the m_SequenceChoices array + when loading. +- Fixed mvlineasm1 and mvlineasm4 so that they can be used with textures + taller than 256 pixels. There was a very slight performance hit for this, + but I was able to tweak mvlineasm4 to make it approximately as fast as + before. Interestingly, maskwallscan manages to be nearly as fast as + wallscan despite having to check every pixel for transparency. I'm + tempted to dump all the old masked rendering code and use + (trans)maskwallscan for everything for the sake of simplicity: Only + two functions to maintain for each render style, and much less + complicated supporting code. Currently, I need five different functions + for each rendering style: One traditional column-at-a-time style like + Doom did it originally, two for rt_draw4cols, and two for transmaskwallscan. + (Right now, I have cheated, and just done the ones that can be used + by walls for transmaskwallscan, so the actual number of different functions + isn't quite so high.) For small textures, such as font characters and + far-away sprites, I'm sure maskwallscan is faster than the current code. + For large textures, it's probably still competitive even if it isn't faster. + But considering how similar wallscan and maskwallscan perform, the + difference is probably pretty minimal, and maskwallscan still might come + out ahead due to its simpler overhead. + +May 10, 2006 (Changes by Graf Zahl) +- Fixed: PClass::CreateNew didn't check whether the class had valid + defaults and tried to copy data from a NULL pointer. +- Fixed: FireThing and BrassTorch were misspelled in hexendecorations.txt +- Changed A_ChangeFlag so that it doesn't need to alter the flag + string. With strings being passed as names this is unsafe. +- Removed unused parameter types from the function parameter parser for + DECORATE. +- Changed: All actor name parameters in DECORATE are now passed as + FNames, not as strings. +- Fixed: The MAPINFO parser stored the RedirectType as a type pointer. + But at this point DECORATE hasn't been read yet so this was limited to + the internal classes. +- Fixed: TXT_NEED_IDCARD wasn't terminated with a ';'. +- Fixed: Strife's DeadRebel was missing its DoomEdNum. +- With names as type identifiers it is no longer necessary to remap + the monster types to internal constants in A_BossDeath. +- Fixed: A_BossDeath got the string from a name - just to get a name from + the string. Using the name directly is sufficient. + +May 9, 2006 +- Redid ClearLcoks() fix that I accidentally removed. +- Added a new setting for am_rotate: 2 will enable rotation only for the + overlay map while leaving the regular map unrotated. +- Added a new setting for am_overlay: 2 will disable the normal automap and + show only the overlayed version. +- Fixed?: WallSpriteColumn apparently needs to set dc_texturefrac. At least + Valgrind seems to say so. +- Fixed: The FWadCollection destructor needs to use free to free the LumpInfo + and Wads arrays. +- Fixed: The ColorMapKiller needs to use the delete[] form of delete. +- Fixed: FConfigFile::ClearCurrentSection() should be calling the delete[] form + of delete to free the entry. +- Fixed: FPatchTexture::MakeTexture() does not need to blindly recreate the + Spans if they already exist. +- Fixed: The FMultiPatchTexture destructor did not call its Unload() method. +- Restored the original padding calculation to FMultiPatchTexture::MakeTexture(). + I believe the Valgrind errors were caused by accessing off the end of the + screen buffer, not from accessing off the end of a texture. +- Backported the classnames-are-names changes from the FP code. +- Backported the improved hierarchical dumpclasses command from the FP code. +- Updated Jim's Makefile.linux. +- Added support for wrapping midtextures vertically. +- Since zdoom.wad is now zdoom.pk3, the default mapinfos can use full pathnames. + So now they do. +- Fixed: The DSimpleCanvas constructor used a pitch too narrow on screens wider + than 640 pixels when using a non-AMD processor and the processor's L1 cache + line size could not be determined. I think this should fix the issue of + weirdly rendered 8 pixel wide borders on the left and right of the screen that + some people experienced. +- Fixed: The secnodes were never freed. + +May 9, 2006 (Changes by Graf Zahl) +- Fixed a few Strife ammo amount values. +- Fixed the ClearLocks function so it doesn't crash when called before the + ActorInfos have been created. +- Fixed: The FSpecialFont constructor created the name string twice. +- Fixed: The animated door parser was still leaking memory when it encountered + an invalid animation due to missing textures. +- Fixed: The music volume list wasn't freed. +- Fixed: The image for WADs that were loaded from inside Zips was never freed. +- Changed FDoorAnimation deletion so that the array takes care of it. The + original destructor approach would have necessitated a lot more supporting + code to work as intended. +- Fixed: Skin definitions were never freed. +- Fixed: Names in terrain definitions were never freed. Replacing them with + FNames would have been a good idea anyway. +- Fixed: The lock definitions were never freed. +- Fixed: FDoorAnimation was missing a destructor. +- Fixed: animation and switch definitions were never freed. +- Replaced all other places where FindType was used with FNames with + IFindType. +- Fixed: If you want to use a name as the missile parameter for the basic + attack functions the type search in DoAttack must be case insensitive. +- Fixed: APowerup::DoEffect must do more thorough checks before resetting + the fixed colormap. + +May 8, 2006 +- Fixed: The names in the Depths array in m_options.cpp were never freed. +- Fixed: FDoomEdMap needed a destructor. +- Fixed: Decal animators were never freed. +- Fixed: Colormaps were never freed. +- Fixed: Memory allocated in R_InitTranslationTables() was never freed. +- Fixed: R_InitParticles() allocated way more memory than it needed to. (And the + particle memory was never freed, either.) +- Fixed: FMetaTable::FreeMeta() should use delete[] to free string metadata. +- Fixed: FConfigFile::ClearCurrentSection() must cast the entry to a char * + before deleting it, because that's the way it was allocated. +- Fixed definitions of DeadZombieMan and DeadShotgunGuy in doom/deadthings.txt. + Skip_super resets the dropitem list, so having it after "DropItem None" is + pointless. +- Fixed: Decorate DropItem information was never freed. +- Fixed: FinishStates() allocated even 0-entry state arrays. +- Fixed: Default actor instances were never freed. +- Fixed: FRandomSoundList never freed its sound list. +- Fixed: Level and cluster strings read from MAPINFO were never freed. +- Fixed: Episode names were never freed. +- Fixed: InverseColormap and GoldColormap were never freed. Since they're always + allocated, they can just be arrays rather than pointers. +- Fixed: FFont destructor never freed any of the character data or the font's name. +- Fixed: Fonts were not freed at exit. +- Fixed: FStringTable::LoadLanguage() did not call SC_Close(). +- Fixed: When using the -iwad parameter, IdentifyVersion() did not release the + buffer it created to hold the parameter's path. +- Blends created with the ACS fade commands now degrade to transparent overlays + when the menu is visible, so they can no longer obscure the menu. + +May 7, 2006 (Changes by Graf Zahl) +- Added a misc/secret sound definition for Heretic. +- Fixed: Powered up weapons were not properly deselected when the level ended + and their ready state was different from the main weapon's. +- Made some improvements to A_CountdownArg. +- Removed the 'Yes', 'No' and 'Greetings' state assignment commands. They haven't + been documented and thus haven't been used at all so far. Therefore they don't + need to be handled considering that they will go away anyway. +- Changed the DECORATE state parser so that Stop can also be specified right after + a label, in addition to goto. + +May 6, 2006 +- The game is now free of leaks up to the point just after the wads are loaded. +- Fixed: Although TypeInfos are now deleted at exit, their FlatPointers or ActorInfo + data was not freed. I chose not to use a destructor to handle this, because then it + would no longer be a POD type that can be statically initialized. +- Fixed: Aliases were not deleted at exit. +- Fixed: FWadCollection did not free its hash tables, lump info, full names, or the + list of open files when destroyed. +- Updated Italian strings that someone kindly e-mailed to me. +- The CRT no longer detects any memory leaks when I run to the IWAD picker and quit. +- Fixed: The memory used to hold the path to zdoom.wad/.pk3 was not freed if + the IWAD picker was cancelled. +- Fixed: Some implementations of cvar->GetGenericRep (CVAR_String) returned a + statically allocated string and others returned a dynamically allocated string. + To be consistant, they should all be static. +- Fixed: DObject also has three static TArrays that should not be explicitly + initialized: Objects, FreeIndices, and ToDestroy. +- Added a new do-nothing constructor for TArray that can be used for BSS objects + that are manipulated before startup. Specifically, this was added because + C_AddTabCommand() is called before main, but the TabCommands constructor is + called after the array already has over 100 entries in it, orphaning everything + that was already inserted. And since the code is much nicer-looking now, I didn't + want to revert to the old non-TArray version. + + This could also have been used to fix FName, but I consider the current + implementation to be better than the old one, so I'm leaving it as-is. + +May 6, 2006 (Changes by Graf Zahl) +- Converted a_zombie.cpp and most of a_strifestuff.cpp to DECORATE. +- Converted a_strifekeys.cpp to DECORATE and moved the pickup messages to the + string table. +- Removed the WIF_HITS_GHOSTS weapon flag and replaced it with MF2_THRUGHOST. + There is no need to keep two flags around with virtually the same meaning. +- Changed the ShadowArmor to use the VISIBILITYPULSE flag to change its translucency. + It looks much better now than the cheap code pointer based blinking it used before. +- Converted most of a_strifeitems.cpp to DECORATE and moved the pickup messages + to the string table. +- Converted a_strifearmor.cpp to DECORATE and moved the pickup messages to the + string table. +- Moved the messages for killing spectres to the string table. +- Converted the quest items to DECORATE. Also changed A_GiveQuestItem to get + the messages it prints from the string table instead of the quest item's tag + string. + +May 5, 2006 (Changes by Graf Zahl) +- Removed the hopelessly outdated thingdef_doc.txt file from the repository. +- Converted a_peasant.cpp and a_ratbuddy.cpp to DECORATE. +- Fixed: C_DoKey didn't treat an empty string as 'no binding' when checking for + valid double bindings. +- Converted a_merchants.cpp to DECORATE. +- Added MF5_NODAMAGE flag to generalize the behavior of Strife's merchants which + can be shot but take no damage from getting hurt. +- Converted a_beggars.cpp to DECORATE. +- Added an Inventory.GiveQuest property. This makes it possible to define all of + Strife's original items that also give a quest item in DECORATE but it is also + useful to define items like the ones in Day of the Acolyte without ugly workarounds. +- Added a Tag property and Strife teaser conversation IDs to DECORATE so now it is + possible to define many of Strife's items. +- Added a FastSpeed property to DECORATE so that projectiles can finally be + assigned a higher speed for fast mode. +- Added a ACS_LockedExecuteDoor special. It is basically the same as the existing + ACS_LockedExecute but it uses the 'door' message instead of 'remote'. This + cannot be integrated into ACS_LockedExecute because all its arguments are already + in use. +- Added a fully customizable A_CustomMeleeAttack function for DECORATE. + +May 5, 2006 +- Fixed: Scanned IWAD paths were not freed if you exited without selecting one. +- Fixed: Dynamically allocated cvars were not freed on exit. +- Fixed: FConfigFile's destructor did not free space used for Values. +- Added "DropItem None" as a way for inherited actors to avoid dropping items if + their superclass normally does. This is only needed if somebody dehacks + DeadZombieMan or DeadShotgunGuy. +- Moved Doom's dead body actors into DECORATE so that I can finish and verify the + implementation of "States { StateLabel: goto SomeOtherLabel }" constructs. The + alternate method of overriding inherited states is now deprecated, since it's + incompatible with the coming custom state labels. +- Changed TAG_MORE to pass a va_list pointer instead of a va_list because it's a + non-POD type when targeting several non-ix86 targets with GCC. Hopefully this works. + (Guess it didn't. Boohoo.) + +May 4, 2006 +- Rewrote FName to use only POD types for its static data so that it can be used + without any explicit constructors being called. +- Fixed: ZTwinedTorchUnlit, ZWallTorchUnlit, ZFireBullUnlit, and ZCauldronUnlit + were missing game filters. + +May 4, 2006 (Changes by Graf Zahl) +- Added Poisondamage property for DECORATE. I first did this for one of the first + DECORATE updates but the code seems to have gotten lost. +- Converted A_Puzzleitems.cpp and parts of A_HexenSpecialdecs.cpp to DECORATE. +- Converted A_Hexendecorations.cpp to DECORATE. +- Changed the lower decal spawning code to transfer the main decal's color if + the lower decal's default color is the same as the main decal's. +- Changed the decal stretcher back to use the specified size parameters as a + scaling factor and not a destination size because this is more consistent with + the rest of the decal code. Also adjusted the blood smear definition in DECALDEF + and the description in the Wiki for this. +- Added Jim's most recent fixes. + +May 3, 2006 +- Fixed: Conversion of c_bind.cpp to FString was incomplete. +- Fixed some functions that were declared as taking size_t's but defined as taking + unsigned ints. +- Added a dummy object to delete sound environments on exit. +- Fixed: FWarpTexture did not delete its Spans when destroyed. +- Changed wadclusterinfos and wadlevelinfos arrays into TArrays. +- Added the TypeInfo::AutoTypeInfoPtr for TypeInfo::m_RuntimeActors so they can + be automatically deleted. +- Changed TypeInfo::m_Types into a TArray so it will be automatically deleted + on exit. +- Fixed: TArray::Resize() did not deconstruct entries when shrinking the array. +- Changed TArray::Push() so that it calls Grow() instead of duplicating the growth + calculations itself. +- Calling TArray::Grow() for a small amount when the array is short should grow it + a bit more than it was doing. +- Removed generational garbage collection from the string pool because it didn't + actually work. +- Turned the list of TabCommands into a TArray because I saw lots of console + commands in the memory leak report at exit. Then I realized those were actually + key bindings, so I changed the Bindings and DoubleBindings arrays into FString + arrays. +- Fixed: FStringCVar was missing a destructor. +- Added TArray::Insert(). +- Fixed: TArray::Delete() used memmove(). +- Renamed Malloc(), Realloc(), and Calloc() to M_Malloc(), M_Realloc(), and + M_Calloc() so that the debug versions can be defined as macros. +- Enabled the CRT's memory leak detection in WinMain(). +- Moved contents of PO_DeInit() into P_FreeLevelData(). +- Removed "PolyBlockMap = NULL;" from P_SetupLevel(), because the P_FreeLevelData() + call it makes next does the exact same thing, but also freeing it if needed. +- Fixed: Unneeded memcpy in UnpackUserCmd() when ucmd and basis are the same +- Removed -bpal parameter. Blood's blood.pal is loaded from blood.rff, and + its tiles are loaded from the same directory. +- RFF files now load their entire directories into the lumplist. +- Added char * and const char * type coversions for FString, so FStrings can be + freely passed to functions expecting C strings. (Except varargs functions, + which still require manually fetching the C string out of it.) +- Renamed the name class to FName. +- Renamed the string class to FString to emphasize that it is not std::string. + +May 3, 2006 (Changes by Graf Zahl) +- Converted A_Speedboots.cpp, A_HexenArmor.cpp and A_Hexenkeys.cpp to DECORATE +- Fixed a few memory allocation issues pointed out by Jim's Valgrind dump. +- Removed doom.x, heretic.x and strife.x from the SVN repository. These + are generated files. +- Fixed: A_PainDie has to check whether a valid target exists before + calling IsFriend. +- Fixed: FDecalLib::FindAnimator needs a signed counter to work properly. + +May 1, 2006 (Changes by Graf Zahl) +- Added support for game specific pickup messages, if only to be able + to define Raven's invulnerability item in DECORATE. +- Removed A_TreeDeath because it is no longer used. +- Fixed: When picking up a PowerupGiver for an active powerup the + blend color and the duration were transferred to a temorary item + and never took effect. They have to be trnasferred to the newly created + powerup item before trying to give it to the player, not afterward. +- Made the colormap of the InvulnerabilitySphere item specific. + The base power class still needs to have its color adjusted + per game though and since Raven's invulnerability item is used in both + Hexen and Heretic it can't define its own colormap/blend. +- Separated the invulnerability colormaps from the game being played + and made them item specific. They can also be specified as regular + blend colors in DECORATE now. +- Converted a_hereticarmor.cpp and most of a_doomartifacts.cpp, + a_hereticartifacts.cpp and a_heretickeys.cpp to DECORATE. +- Changed the Soulsphere to be a real health item with the Dehacked + modifications made in d_dehacked.cpp as for most other items which + need to be adjusted. +- Added IF_BIGPOWERUP flag to AInventory to expose the RESPAWN_SUPER + dmflag to DECORATE. Also removed the now obsolete ShouldRespawn methods + from AInvulnerabilitySphere and ABlurSphere. +- Converted a_splashes.cpp to DECORATE. +- Converted most of a_debris.cpp to DECORATE. + +May 1, 2006 +- Made loading of Build's palette.dat automatic if it's found inside a loaded + group file, but the -bpal parameter remains for now. +- Made loading of Build art tiles automatic if they are found inside a group + file. Removed the corresponding command-line parameter. +- Added support for Ken Silverman's group files. + +April 30, 2006 (Changes by Graf Zahl) +- Removed the DCorpseQueue class. It was no longer used and since + the savegames it might have been used in have become incompatible + a long time ago there is no reason to keep it around anymore. +- Fixed: level.maptime must be set to 0 every time a level is loaded. +- Converted a_doomarmor.cpp and a_doomkeys.cpp to DECORATE. +- Replaced all need key messages that weren't already in LANGUAGE with + a LANGUAGE identifier. Also made the messages for Hexen's keys unique + strings instead of constructing them at run time. +- Added: Pickup messages can now handle embedded localized strings - like + the need key messages +- Converted a_hereticdecorations.cpp as well. +- Time to put the capabilities of Zip files to good use: + Converted a_doomdecorations.cpp into a DECORATE lump to test my changes. + (The EXE got 24 kb shorter by that - much more than I expected...) +- Added a 'game' property to DECORATE so that game specific IDs can be + defined. +- Added an #include directive to the DECORATE parser. +- Also removed ABreakableDecoration. Using AActor and the metadata + for the death and burn height gives the same results with less code. +- Removed the ADecoration class. It just inherited from AActor without + adding any functionality of its own. +- Added functions to sc_man to save and restore the full script state. + This allows recursive use of the script parser. +- Changed SC_Open to check for full names in a ZIP first. +- Fixed: Ammo2 no longer gets displayed when it is identical to Ammo1. +- Re-enabled the death camera due to public demand but made it switchable + by a CVAR. + +April 29, 2006 (Changes by Graf Zahl) +- ZDoom now loads zdoom.pk3 instead of zdoom.wad. +- Fixed: StreamSong::SetVolume should check the m_stream pointer. This can + happen when a TimiditySong doesn't use FMOD and outputs the sound itself. +- Fixed: 'use' sector actions were using the incorrect sector on several + occasions. +- Added a wi_noautostartmap CVAR and a noautostartmap intermission option + that force the user to manually end the 'entering level' page. + +April 23, 2006 (Changes by Graf Zahl) +- Added a clipmidtextures level flag which exposes the ML_CLIP_MIDTEX + feature globally per level. Also moved the setting of this flag for Strife + into MAPINFO. +- Added MBF's logic to move monsters away from a dropoff but changed it + so that it doesn't require a general change in the movement code. +- Added: The Trace function needs a compatibility option to exclude + two-sided lines with both sides in the same sector from being checked. + Originally this wasn't done and some WADs (e.g. Alien Vendetta MAP15) + need the original behavior to work. + +April 22, 2006 (Changes by Graf Zahl) +- Removed ABossEye::Serialize because it didn't do anything. +- Fixed the issues with .96x's railgun code and added it to the current + version. +- Fixed: Setting of the friendly Minotaur's angle was inconsistent and + could cause it to move backwards in a féw situation. +- Fixed: The minotaur did checks for type by checking for the MF_FRIENDLY + flag, not by checking for the actor class. That made it impossible to + spawn friendly 'normal' minotaurs. +- Moved a few virtual methods which are only applicable to the friendly + minotaur to AMinotaurFriend. +- Fixed: The friendly minotaur checked the master's health instead of + the target's when deciding whether to switch targets. Replaced with + MF4_NOTARGETSWITCH. +- Fixed: maybedrawnow must not draw the console unless the background + texture has been set up. +- Fixed: V_InitCustomFonts initialized lastlump to -1 instead of 0. +- Fixed: CreateTexture never checked whether it could read from the + texture lump. Since the minimum valid length is 13 bytes for a + 1x1 pixel patch everything below that will now return with an error. +- Fixed a few occurences of mismatched free's for new'd memory. + +April 21, 2006 (Changes by Graf Zahl) +- Fixed: To prevent the pointer cleanup code from crashing numsectors has + to be set to 0 when the sectors array is deleted. +- Added Zloba's fix for Linux's I_FindFirst. + +April 20, 2006 (Changes by Graf Zahl) +- Fixed: Doom's status bar assumed that STBAR was always in Doom patch format. +- Added MF3_DONTSPLASH to the newly created sound sequence things. +- Fixed: makewad.c used C++ syntax. +- Fixed: Strife's ending check included destroying the computer - an event + that happens before the branch in the story. +- Fixed: The overloaded FRandom::Random2 function with mask parameter didn't + use its parameter. +- Added Jim's latest makefile.linux + +April 20, 2006 +- Fixed: Crash when opening the player setup menu when you're so dead that + your head has popped off your body. +- Fixed: When item respawning is on and you play on skill 1 or 5, picking + up ammo would permanently double the amount of ammo received from that + item the next time it gets picked up. +- Added a check to PlayerIsGone() for players who have already had their + actors destroyed before calling it. +- Fixed: G_CheckDemoStatus() only restored your name, autoaim, and color + settings after playing back a demo. +- Added DEM_SPRAY net command so that sprayed decals work in multiplayer + and demos. +- Changed DEM_GIVECHEAT to use a word for specifying the item quantity. + This is useful mainly for giving yourself more than 255 health at a time. +- Fixed: DEM_SUMMONFRIEND was not handled by Net_SkipCommand(). +- Fixed compilation with mingw again. +- Added multiple-choice sound sequences. These overcome one of the major + deficiences of the Hexen-inherited SNDSEQ system while still being Hexen + compatible: Custom door sounds can now use different opening and closing + sequences, for both normal and blazing speeds. +- Moved the TArray serializer into farchive.h so that tarray.h doesn't need + farchive.h at all because GCC was much pickier than VC. Because of this, + I don't need the FArchive change I made yesterday that hid FArchive's + TArray uses behind pointers. +- Added a countof macro to doomtype.h. See the1's blog to find out why + it's implemented the way it is. + +- Added a new method to FRandom for getting random numbers larger than 255, + which lets me: +- Fixed: SNDSEQ delayrand commands could delay for no more than 255 tics. +- Fixed: If you're going to have sector_t.SoundTarget, then they need to + be included in the pointer cleanup scans. + +April 19, 2006 +- Added a serializer for TArray. This required I make a couple changes to + FArchive in order to avoid circular references between farchive.h and + tarray.h. +- Ported back newer name code from 2.1. +- Fixed: Using -warp with only one parameter in Doom and Heretic to + select a map on episode 1 no longer worked. +- New: Loading a multiplayer save now restores the players based on + their names rather than on their connection order. Using connection + order was sensible when -net was the only way to start a network game, + but with -host/-join, it's not so nice. Also, if there aren't enough + players in the save, then the extra players will be spawned normally, + so you can continue a saved game with more players than you started it + with. +- Added some new SNDSEQ commands to make it possible to define Heretic's + ambient sounds in SNDSEQ: volumerel, volumerand, slot, randomsequence, + delayonce, and restart. With these, it is basically possible to obsolete + all of the $ambient SNDINFO commands. +- Fixed: Sound sequences would only execute one command each time they were + ticked. +- Fixed: No bounds checking was done on the volume sound sequences played at. +- Fixed: The tic parameter to playloop was useless and caused it to + act like a redundant playrepeat. I have removed all the logic that + caused playloop to play repeating sounds, and now it acts like an + infinite sequence of play/delay commands until the sequence is + stopped. +- Fixed: Sound sequences were ticked every frame, not every tic, so all + the delay commands were timed incorrectly and varied depending on your + framerate. Since this is useful for restarting looping sounds that got + cut off, I have not changed this. Instead, the delay commands now + record the tic when execution should resume, not the number of tics + left to delay. + +April 19, 2006 (Changes by Graf Zahl) +- Fixed: Hexen's ammo display in the status bar cannot be refreshed + partially because the background patch has to be drawn always to + overwrite the old display. +- Fixed: Giving a health item to a non-player caused a crash. +- Added a compatibility option to limit deh.MaxHealth to the health bonus. + Originally this value wasn't used for health packs. Doing this was a bug + in Boom but since there's quite a few maps out there which require + Boom's altered behavior it has to be compatibility optioned. +- Fixed: The health bonus's max health must be defined by deh.MaxHealth, + not deh.MaxSoulsphere. To achieve this deh.MaxHealth's handling had to + be altered because it has to default to 100. +- Fixed: ZDBSP created incorrect side references with compressed sidedefs + and both sidedefs of a linedef being the same. This only affects the + external tool because the internal node builder is run after uncompressing + the sidedefs. +- Added Jim's latest makefile.linux. +- Added a consistency check to the PNAMES loader because one crash log + indicated that it crashed due to a corrupt PNAMES lump. +- Brought back the sector based sound target handling as a compatibility + option. This radical change just broke far too many maps that depend + on the original behavior. Strife's special AI functions are excluded + though because they work better with the new method. +- Fixed: Hexen had no default sound sequence for doors and passed a NULL + pointer to SN_StartSequence in DoorSound. + +April 18, 2006 (Changes by Graf Zahl) +- Fixed A_CHolyAttack used linetarget to set the spirits' target actor. + But it assumed that this variable was still valid from shooting the + weapon. Not only is that not guaranteed. When used by the ClericBoss + it is an unwanted effect because the linetarget is most likely the + last thing the player fired at which normally is the ClericBoss itself. + A_CHolyAttack now sets tracer to the intended target instead of + relying on linetarget being preserved. +- Fixed: Strife's grenades only bounce twice off the floor. They also + bounce off all actors and immediately explode when hitting liquids. +- Fixed: Strife's flame thrower gives 100 ammo as a pickup item but only + 40 when given in a dialog. +- Moved the sky change script starts for the Programmer into MAPINFO as + special death actions. +- Changed the sky in MAP09 of Strife to the blue sky to make it more + consistent. Now the sky change occurs when the player wakes up after + fighting the programmer. + +April 18, 2006 +- Fixed: DBaseStatusBar::DrBNumber() should behave like Doom's + STlib_drawNum(), and FDoomStatusBarTexture::DrawToBar() should add + the textures left offset to the x coordinate before drawing. + These fix Twice Risen's status bar. +- Changed: VPrintf now uses string.VFormat(), instead of vsprintf(). + +April 17, 2006 (Changes by Graf Zahl) +- Fixed: The Oracle Pass is an item, not a key. Strictly speaking the + same applies to the Prison pass but having that as a key masks + some bad design in Strife so it is better to leave it a key. +- Fixed: The spectral lightning spot used a weird combination of flags + that made it act quite unexpectedly. After removing all flags except + MF_NOBLOCKMAP it seems to do what it is supposed to do. I also had + to add a new flag, MF5_NODROPOFF to prevent the spot from moving over + tall ledges. +- Fixed: When giving an autoactivatable item to the player a copy is + created to allow respawning. But when the item had been successully + used the original was destroyed, not the copy. +- Fixed: dssiglup was misspelled as dssglup in SNDINFO so the Sigil's + charging sound never played. +- Fixed: The sigil doesn't use the generic weapon pickup sound. It should + use weapons/sigilcharge. +- Fixed: P_Move never checked whether a monster has the MF2_PUSHWALL flag. + As a result everything using A_Chase was able to activate pushable + walls and not just the monsters which are allowed to activate them. +- Fixed: P_Move must split the move if the step size is larger than the + radius. +- Fixed: tmfloorpic was set in P_LineOpening. But this is not guaranteed + to set the correct picture because the end result depends on the line + ordering and not the sector heights. It must be set in PIT_CheckLine. +- Fixed: Due to the previously missing ceilingsector variable bouncing + missiles could use the incorrect sector when hitting an edge between + ceilings of different height. +- Fixed: Missiles exploding on the edge of a ceiling neighboring to a + sky vanished instead of exploding if the missile's center was in the + sky sector. To do this I added ceilingsector and ceilingpic variables + to AActor, similar to the already existing floorsector and floorpic. +- Fixed: ZDoom now looks for ZDoom.wad in the program directory first. + +April 16, 2006 +- Fixed: After respawning in a singleplayer demo, demo playback went out + of sync becase the RNG seed was being altered during recording but not + during playback. This was caused by an inappropriate fix for a similar + problem: -record calls G_InitNew() before it actually starts recording + the demo, but -playdemo calls G_InitNew() after it starts playback. So + the rngseed stored in the demo was already altered. The correct thing + to do is not to prevent the rngseed from changing during playback but + to move the call to G_InitNew() after the call to G_BeginRecording(). +- Fixed: After respawning in a demo, demo playback was prematurely + terminated. + +April 16, 2006 (Changes by Graf Zahl) +- Increased the limit for the sound DoorCloseLight in Hexen to 4 because + it got cut off in the polyobject crusher in MAP01. +- Fixed: A player that has no body (as in the head popped off in Heretic + and Hexen) must not be resurrected. +- Fixed: Repeatable switches that are being activated while the switch + animation was still running didn't react properly. +- Fixed: Not all paths in P_LoadSegs freed the vertchanged array. +- Fixed: With infinitely tall actors on P_CheckPosition must not + check for stepping on things. +- Fixed: R_FakeFlat used the control sector's floor light level for + ceilings of deep water areas. +- Fixed: Dormant floating monsters still adjusted their height to their + target. +- Fixed: Invisible special things should never create terrain splashes. +- Changed: The Demon no longer reduces the actual state durations for + fast mode. Now this is done by AActor::SetState and controlled by + actor flags. +- Fixed: Friendly monsters are now completely excluded fron being counted + as kills. + +April 15, 2006 (Changes by Graf Zahl) +- Changed -warp for ExMy to use atoi to parse the parameters. This is + more robust than reading the characters directly. +- Expanded thing and line args to 32 bit. +- Extended Makewad so it can write Zip files in addition to WAD files. + +April 14, 2006 (Changes by Graf Zahl) +- Moved SC_CheckFloat into sc_man.cpp. +- Fixed several issues with the DECORATE parser: + * Floating point parameters couldn't be parsed correctly + * Some code pointers used parameters incorrectly. + * Parameters with default value 1 didn't work as expected +- Added GZDoom's HI_START/HI_END lump namespace. Even though it doesn't do + anything (yet) suppporting it allows to make WADs that use hires texture + replacements but are able to run with ZDoom as well. +- Added GZDoom's Zip-support but changed it so that lumps are sorted + alphabetically. +- Added the missing file 'flac/private/float.h' to the repository. +- Added: For Zip-support the sound code has to be able to load music data + from memory, not just from files. +- Re-added I_SetMusicVolume to optionally reduce the music volume in Strife + conversations. +- Fixed: The total game time must not be restored when loading a snapshot + during a hub transition. + +April 13, 2006 +- Fix farchive.cpp swappers for GCC again. Now that they use entirely integer + math, they should work with all GCC versions. +- Update FLAC readers to #define FLAC__NO_DLL to match the new FLAC builds. + +April 13, 2006 (Changes by Graf Zahl) +- Made weapons/bowhit unlimited. With a limit of 2 it won't be played + consistently. +- Fixed: 'Give' worked for dead players. +- Added checks for sectors without lines to all Find* functions in p_sector.cpp +- Fixed: Dehacked patches weren't loaded when not playing Doom. +- Fixed: Thing_Remove must not remove living players from the map. +- Fixed: Using $MAP in SNDINFO overrode music definitions in MAPINFO. This + made it impossible to define music in MAPINFO for Hexen. +- Fixed: Resurrecting a morphed player must first restore the unmorphed + version. +- Fixed: Resurrect must set the player's weapon to a valid state. +- Fixed: The decal stretcher is supposed to stretch the decal to a specifiable + size but it used that size as a scaling factor instead. The old code allowed + a maximum scaling factor of 4 which masked this bug to a large extent but + with the increased precision the blood smears were stretched to abnormal + proportions. +- Fixed: A non-spectral attack set any spectral target to its missile state. + This is not supposed to happen. +- Fixed: The Prison Key was misspelled in the pickup message. +- Added missing lock messages for Strife. +- Fixed some ammo pickup values for Strife. +- Added the missing messages when killing a spectre in Strife. +- Fixed: DImpactDecal's default constructor called ChangeStatNum which caused + a crash. Now it calls DBaseDecal's constructor that allows changing the + statnum. +- Added additive translucency to the Ironlich's projectiles. +- Added a check for AInventory to PickConversationReply before giving an item + to the player. This could crash if non-inventory items were given. +- Added a few console commands useful for map testing: + * 'monster' lists all monsters and their position. + * 'items' does the same for items. + * 'changesky' changes the sky texture. Useful for trying out different skies. + * 'linetarget' prints some information about the monster the player is aiming + at. + +April 12, 2006 +- Fixed: Using printinv before starting a game crashed. +- Fixed: DMover::MovePlane() would not stop moving the plane when it exactly + reached its target height unless it was a floor moving down. +- Fixed: Actors that can't attack should not be valid haters for Thing_Hate. +- Fixed: AArtiBlastRadius::BlastActor() should not set MF2_SLIDE for missiles. +- Fixed: sdl/i_input.cpp should check !iscntrl() before generating EV_GUI_Char + messages. +- Added Jim's Makefile.linux. +- Changed: Decal scales now use full precision fixed point numbers. +- Changed: Keeping impact decals in their own statlist is enough to keep track + of them for when one needs to be destroyed. There's no need to maintain a + separate list for them. +- Fixed: Decal actors did not spread their decals across neighboring walls. +- Fixed: Decal groups did not initialize their IDs and could not be reliably + used with the decal actor. +- Fixed: Decals on moving polyobjects were not interpolated. R_RenderDecal() + now uses the decal's LeftDistance to calculate its visible location, so it + always stays in sync with the wall's vertices. This also lets me dump some + code from the polyobjects that maintained the decals' (x, y) coordinates. + Also, the decals' x and y information is redundant and can be removed. + Doing this revealed a bug with slider decals and horizontal sliding: + That is, it didn't work at all. I have opted to simply remove the horizontal + sliding support so that I don't have to worry about what happens when a + decal slides across the edge of a wall. +- Fixed: DBaseDecal::LeftDistance was calculated as a 30.2 fixed point number. + It should be 2.30 fixed point. + +April 12, 2006 (Changes by Graf Zahl) +- Fixed: SAVEVER was still 231 although MINSAVEVER was 232. +- Fixed: Decal spreading used an incorrect z-coordinate. It has to use + the one originally passed to DImpactDecal::StaticCreate. + +April 11, 2006 +- Fixed: GCC misoptimized the SWAP macros in farchive.cpp. +- Fixed: Compiling with mingw once again works. +- Fixed: ACS improperly calculated the address of local variables when + returning from one function to another function when the function that + was called was used as part of an expression. +- Fixed: Using Thing_Hate with arg0 (hater) set to 0 from an open script + could crash. +- Fixed: Some items along ledges in Hexen's MAP32 (Orchard of Lamentations) + appeared at the bottom of the ledge (and consequently inside it) instead + of on top of it because the items were placed directly on the lines. + AActor::LinkToWorldForMapThing() needs to use the original R_PointOnLineSide() + code to handle situations like this. Previously, it just used the original + code for straight horizontal/vertical lines and used the new code for + diagonal lines. +- Fixed: FWadCollection::MergeLumps() used in incorrect realloc. +- Fixed: FPlayList::NextLine() did not properly handle blank lines in the + playlist. +- Changed: Decals now use lightweight thinkers instead of actors. (76 bytes + versus 396, so you save 320k if you have 1024 decals present.) +- Fixed: Wads added with pullin were loaded immediately after the IWAD. + Exec files are now processed immediately before -file but after autoloading + wads in D_DoomMain(). +- Fixed: sdl/i_system.h unconditionally defined SHARE_DIR, preventing + redefinition from the command line. +- Fixed: The standard way to include SDL.h is , not . +- Fixed: Returned FActiveInterpolation::HashKey()'s return type to size_t, + avoiding a pointer truncation warning. + +April 11, 2006 (Changes by Graf Zahl) +- Fixed: Strife's dialogs don't give weapons to the player he already has. +- Fixed: The INDIANA cheat in Hexen gives 25 of each item, not just 1. +- Fixed: The stair builder's compatibility mode must do a linear search + for sectors. Searching the hash chain doesn't work here. +- Fixed: Any monster with a TakeSpecialDamage method should call the + super class's method instead of simply returning the damage amount. +- Fixed: Hexen's mash monsters cannot be frozen. No matter how you kill + them they just vanish. This means they need the NOICEDEATH flag. +- Fixed: Morphing a monster must also copy its translucency settings. +- Fixed: The first Macil must react to weapon fire, even though he + doesn't get hurt by it. +- Fixed: Anything with a raise state needs the MF_CORPSE flag when dying + because otherwise it can't be revived. +- Fixed: Player names in Heretic, Hexen nand Strife could only be 13 + characters because the input routine did an unnecessary font size check. +- Added: After saving the game the savegame should be checked + and in case of an error an appropriate message be output. +- Fixed: The pig player had an initial health of 100, not 30. +- Fixed: Morphing a player removes the armor after transferring the + inventory to the morphed version - but it tried to remove it from the + unmorphed player instead. +- Fixed: Heretic uses Backspace to activate the Tome of Power by default. +- Fixed: 'Use all' should not try to use puzzle items. +- Made FileReader's methods virtual. Right now this isn't important + but when ZIP support will be added it is needed. Also added a + MemoryReader class that derives from FileReader. +- Added a pointer check to DI_Acquire and DI_Unacquire. GZDoom definitely + had problems with that so it might be a good idea to always check these + pointers. +- Added an engine signature to the savegame. The inability to distinguish + between ZDoom and GZDoom savegames constantly forced me to use some ugly + tricks which broke the versioning system. This may also be useful for + other derivates that have to save additional data in a savegame. +- Due to the savegame version bump I removed all compatibility code. +- I had to bump the minimum savegame version because I got some strange + effects with old savegames. On the positive side, this allows me to + do a few more radical changes to the savegame code. ;) +- Fixed: CanvasTextures weren't saved in a savegame. +- Fixed: Multiple warp commands for the same texture were cumulative. +- Changed FPatchTexture::MakeTexture and FIMGZTexture::MakeTexture so they + don't re-initialize the texture's size information repeatedly. This can + cause problems if code was added that manipulates these values after loading + the textures. +- Changed FPatchTexture::GetDimensions to use ReopenLumpNum instead of + OpenLumpNum. Once ZIP handling is added the current code won't work anymore + without adding a highly expensive copy operator to FWadLump. +- Added Transfer_WallLight special. This is similar to Transfer_Floor/Ceilinglight + but affects walls instead. +- Fixed: P_TestActivateLine must check whether a valid actor is trying + to activate the line. +- Added a check for MF2_NOTELEPORT to the special activation check for + Booms generic triggers. This excludes most items from activating these + lines that are not supposed to do that. +- Added a sv_dropstyle CVAR so that the way items are dropped is no longer + dependent on the game being played. +- Added MF4_FRIGHTENED flag from .96x. +- Added a CVAR that disables the automap background graphic in Heretic + and Hexen. +- Added more color options to the automap, including the option to show + secrets. +- Added menu option for the monster movement interpolation CVAR. +- Fixed: Strife's grenades don't make bouncing sounds. +- Fixed: Strife's grenades lose 50% of their momentum when bouncing, + not 30% like in Hexen. +- Fixed: HexenHack must be reset for each MAPINFO lump being parsed. +- Turned monster falling damage into a level flag so that it can be + used in all games, not just Hexen. +- Added the map's lump name to the savegame information. This is useful + for those who remember maps by their lump name and not the description. +- Added a total game time counter and made the total time display on + the intermission screen operrable. Also added an optional total time + display for the automap. +- Added support for full hub intermission statistics. To make this work + properly level.time is now being reset after changing hubs. +- Added GZDoom's local SNDINFO/SNDSEQ code. This was supposed to be in + .96x but that was cancelled before I had the chance. +- Made DCanvas::FlatFill virtual so it can be overridden by other + types of canvases (e.g. OpenGL.) +- Fixed: CR_UNTRANSLATED was uninitialized for FON2 fonts +- Fixed: Hexen uses a view height of 48, not 41. +- Changed: Multiplayer weapons will be spawned in coop games now + unless the player explicitly disables this. There are many WADs + out there that need the additional weapons in coop games. +- Added code that remaps MF_NOSECTOR to RF_INVISIBLE for all items + touched by Dehacked and for ABossEye. MF_NOSECTOR makes any + item completely deaf so it is very dangerous to use with monsters + or other things that depend on their sound target. +- Fixed: The Dehacked code cleared one of the translation flags. +- Fixed: The dehacked parser must set EnglishStrings to NULL after + freeing the memory. +- Copied a fix for restoring the weapon slots from 2.1.0. +- Fixed: APathFollower::Interpolate needs some NULL pointer checks. +- Added MF2_NOTELEPORT to ABlood and AIceChunk. Teleporting blood can + seriously mess up one-time teleporters - plus it looks just weird. +- Fixed: It was possible to use things through closed walls when the wall + was further away than 64 map units. +- Added a check for MF3_BLOODLESSIMPACT to P_LineAttack so that bloodless + hitscan attacks can be created. +- Added a check to P_CheckSlopeWalk that prevents sliding when hanging over + a sloped dropoff. +- Fixed: The line id hash chains used signed shorts to link their elements. + This completely broke line manipulation for linedef indices >= 32768. +- Fixed: Changed PL_SKYFLAT from 0x8000 to 0x10000 because otherwise it + doesn't work with linedef indices >= 32768. Also expanded sector_t::sky + from WORD to int to make this work. +- Added the flag parser fix from GZDoom. It was still incorrect. +- Added an escape flag to sc_man. This was necessary to parse the frame names + correctly which can contain backslashes so they must be excluded from + converting \" to ". +- Fixed: The 'ELVIS' cheat code wasn't terminated with 255. +- Fixed: When an object without any death state dies it has to be destroyed. +- Added 'nofog' parameter to Thing_Move +- Added a check for Teleport_ZombieChanger to P_TranslateTeleportThings. +- Fixed: Dumpmap crashed when the loaded map has GL nodes because it tried + to access the linedef of a miniseg. Needless to say, the BSP that is + written in this case is completely broken but at least it doesn't crash + anymore. +- Fixed: z-momentum application in P_ZMovement was incompatible with + the original method. Unless MF2_FLOATBOB is set it must be done before + applying gravity to momz. +- Fixed: AActor::Massacre caused an infinite loop when it wasn't able to + hurt the actor. +- Fixed: Due to movement interpolation the viewsector could be incorrect + if the actual camera's position and the interpolated position were not + in the same sector. +- Fixed: Assigning an empty string to a 'string' object NULLed + the Chars pointer. This cannot be done because it makes the + string object invalid. +- Fixed: Default intermission handling for E1-E3 should only happen when + playing Doom 1 and Heretic. +- Fixed: 'Give all' cheat must not try to give an item of type 'All'. +- Fixed: In rare circumstances DBoundingBox::AddToBox could produce + incorrect results. +- Fixed: The node builder still used NO_INDEX for initializing non-existent + sidedefs. +- Added MaxStepHeight and MaxDropoffHeight actor properties to DECORATE. +- Added new code pointers from GZDoom: A_FireAssaultGun, A_FadeIn and + the target inventory functions. Also added changes to several other + code pointers. +- Fixed: The FlameThrowerParts were missing the IF_INVBAR flag. +- Added a third parameter to A_BFGSpray to customize the amount of damage. +- Added A_DualPainAttack code pointer submitted by Justin for GZDoom. +- Fixed: AFatShot must have a height of 8, not 32. +- Fixed: AFighterPLayer::DoHealingRadius initialized the armor item + incorrectly so it was ineffective. +- Fixed: Strife's Brass Key needs a DoomEdNum of 39. +- Removed all the obsolete code and variables from the keys. With the + LOCKDEFS lump the original key numbers were deleted anyway and the + NeedKey messages are taken from the lump now. + +April 10, 2006 (Changes by Graf Zahl) +- Fixed: The Teleporter Beacon was missing the pickup message. +- Made the IronLich's projectiles bright. Using them in non-bright state + in dark sectors looks truly odd. +- Fixed: Using bot_observer cleared the FRIENDLY flag off the player. +- Fixed: Changed some decals from DecalScorch to DecalScorchLower. +- Fixed: Added the missing intermission lumps and LOCKDEFS to zdoom.wad +- Changed the damage formula for Strife's dagger. This change has already + been added to the 2.1.0 source but not to the current version. +- Added a call to P_HitFriend to A_SentinelRefire to prevent it from shooting + at friends. +- Fixed: The Inquisitor's grenades should not teleport. +- Fixed: The Inquisitor isn't supposed to be thrust by damage so its mass + has to be increased. +- Fixed: Strife's Inquisitor can be hurt by radius damage as long as this + damage comes from a non-Inquisitor. +- Fixed: AArtiDarkServant::Use must always report successful use of the item. + This function cannot fail. It either spawns a Minotaur or a new artifact + but never nothing at all. +- Fixed: Hexen's temp flames have two spawn IDs each. Since ZDoom doesn't + support multiple spawn IDs per item I added copies of these objects + to assign the second set od IDs. +- Fixed: Hexen's wall torch was missing the MF4_FIXMAPTHINGPOS flag. +- Fixed: A_CStaffCheckBlink must call A_WeaponReady because otherwise the + weapon bobbing becomes slightly erratic. +- Fixed: AGoldWandPuff2 had incorrect values set for flags2. +- Clamped the vertical speed of Heretic's Mace's balls. When shot at a high + vertical angle their movement becomes erratic. +- Fixed: Doom's corpses must clear the MF3_ISMONSTER flag inherited from + their monster parents. + +April 9, 2006 +- Fixed: The strupr() implementation in w_wad.cpp relied on compiler-dependant + behavior. +- Fixed fix: ParseActorProperties() still wasn't sending + or - to + ActorFlagSetOrReset(). +- Fixed: [GZ] An item without use state won't be removed when being picked up. + The call to GoAwayAndDie is missing. +- Fixed: [GZ] A_GiveInventory sets the amount to give to a value passed to + this function. This is ok for everything except Health items. They should + give their original amount multiplied with the passed parameter. + +April 3, 2006 +- Fixed: Potential buffer overrun when launching timidity. + +March 13, 2006 +- Fixed: ActorFlagSetOrReset() wasn't receiving the + or - character from + ParseActorProperties(). +- Fixed: The decorate FindFlag() function returned flags from ActorFlags + instead of the passed flags set. +- Fixed: The CHT_CHAINSAW, CHT_POWER, CHT_HEALTH, and CHT_RESSURECT needed + NULL player->mo checks. +- Fixed: The "give all" command didn't give the backpack in Doom, and it + must give the backpack before giving ammo. +- Fixed: P_SetPsprite() must not call the action function if the player is + not attached to an actor. This can happen, for instance, if the level is + destroyed while the player is holding a powered-up Phoenix Rod. As part + of its EndPowerup() function, it sets the psprite to the regular version, + but the player actor has already been destroyed. +- Fixed: FinishThingdef() needs to check for valid names, because weapons + could have inherited valid pointers from their superclass. +- Fixed: fuglyname didn't work. +- Fixed: Redefining $ambient sounds leaked memory. +- Added Jim's crashcatcher.c fix for better shell support. +- VC7.1 seems to have no trouble distinguishing between passing a (const + TypeInfo *) reference to operator<< and the generic, templated (object *) + version, so a few places that can benefit from it now use it. I believe + VC6 had problems with this, which is why I didn't do it all along. The + function's implementation was also moved out of dobject.cpp and into + farchive.cpp. +- Fixed: UnpackPixels() unpacked all chunks in a byte, which is wrong for the + last byte in a row if the image width is not an even multiple of the number + pixels per byte. +- Fixed: P_TranslateLineDef() should only clear monster activation for secret + useable lines, not crossable lines. +- Fixed: Some leftover P_IsHostile() calls still needed to be rewritten. +- Fixed: AWeaponHolder::Serialize() wrote the class type in all circumstances. + +March 12, 2006 +- Fixed: A_SpawnItem() should use CopyFriendliness(). +- Fixed: AExplosiveBarrel should have MF2_MCROSS set. +- Fixed: Passing 0 numrays to A_BFGSpray should default to 40. +- Fixed: New A_JumpIfCloser() function. +- Future-proofing: thingdef.cpp/FindState() allows the 2.1 names for + SwitchingDecorations. +- Fixed: ASwitchingDecoration declared itself as deriving from AActor instead of + ASwitchableDecoration. + +March 9, 2006 +- Fixed: AWeaponHolder::Serialize() did not call its supermethod. + +March 1, 2006 +- Rewrote MusicVolumes handling so it's a list and not an array. +- Removed I_SetMusicVolume(). It isn't used. +- Moved P_IsFriend(), P_IsHostile(), and P_GetSpecies() into AActor. + +February 18, 2006 +- Various fixes for compilation with GCC/Linux. +- Various fixes from Graf Zahl: Wrong blood color with P_BloodSplatter2() and + P_RipperBlood(). Wrong MF3_BLOODLESSIMPACT check in PIT_CheckThing(). + P_BloodSplatter() used R_PointToAngle(). A_CPosRefire() did not check for + hitting a friend. A_CentaurDefend() did not clear the reflective flag. + DHUDMessage::ResetText() did not check for con_scaletext==2. Wrong Raven + scroller speeds for COMPATF_RAVENSCROLL off. P_Init() should call + P_InitKeyMessages(). Missing decorate decal code from decallib.cpp. New + FFontChar1 code only made it into 2.1.0 and not 2.0.x. Missing copy + constructor for FMusicVolume. +- Fixed: ACustomInventory::TryPickup() failed to call the superclass + implementation of the function. +- Fixed: Friendly pain elementals killed by a player shot friendly lost souls + that attacked the player. Now those lost souls aren't friendly. + +February 6, 2006 +- Fixed: Except for A_Explode512, all of Strife's A_Explode functions also call + P_RecursiveSound. +- SpectralLightningSpot's RenderStyle is now STYLE_Translucent. It isn't really + part of the lightning itself, so it should probably not be additive. +- Fixed: Macil2 and the Oracle are invulnerable to the first stage Sigil, and + the first Macil should be completely unkillable. +- Fixed: The FlameThrowerParts' spawn state was unset, and it used a generic + pickup message. +- Fixed: Strife step heights vary depending on the type of actor: If it bleeds + it can go up 16 unit steps, if it's a missile it can go up 4 unit steps, and + everything else can go up 24 unit steps. And everything can stand over a 32 + unit dropoff. MaxStepHeight and MaxDropOffHeight are now actor properties. +- Fixed: Strife floating monsters are not blocked by monster blocking lines, so + they all need to have MF3_NOBLOCKMONST set. +- Fixed: APowerCoupling::Die() should destroy the unbroken coupling. +- Fixed: AActor::TakeSpecialDamage() should allow damage if the actor has + no death state at all. (Taken from GZDoom) +- Fixed: Killing something that drops an alarm with the second-stage mauler + would not show the alarm text if it was directly hit by the main torpedo. + Added a third argument to P_SpawnSubMissile() that indicates what the + new missile's "target" should be, so if the missile dies right away, it + has the correct target information. +- Fixed: Added Graf Zahl's fix for manually closing animated doors with + something inside them. +- Fixed: The A key should be bound to +jump by default in Strife. +- Fixed: F_BunnyScroll() should fill the widescreen border with black, not + the FinaleFlat. +- Fixed: Strife linetype 52 can be used to advance to the next map by setting + its tag to 0. It should also be flagged repeatable. +- Fixed: A_Look2() is supposed to randomly choose self->SpawnState + 3 if + MF4_STANDSTILL is unset, not + 4. +- A_AcolyteDie() now resets the acolyte's RenderStyle to turn off any shadow + effects they may have. + +January 24, 2006 -- First changes of 2006! 1.5 months later! :( +- Added a new level.maptime variable that keeps track of the time you've been + on a single level and is unaffected by hubs. +- Fixed: ASoulsphere::Use() could reduce your health. +- Fixed: cht_Suicide() did not clear the MF2_INVULNERABLE flag. +- Increased the sidedef limit to 2^32-1. +- Fixed: Stacked sectors inside a skybox would be drawn from the player's + origin instead of the skybox's origin, which would easily lead to infinite + recursion because the engine would try to render the skybox again instead + of the other side of the stack. In order to avoid any other infinite + recursion problems, the maximum number of skybox visplanes per scene has now + been capped at 100. +- Changed the inventory flag IF_CHEATNOTWEAPON to the weapon flag + WIF_CHEATNOTWEAPON. + +December 11, 2005 +- Started integrating changes from 96x into 2.0.99. + +December 10, 2005 +- Fixed: GetFinaleText() did not null-terminate the string it retrieved. +- Fixed: When changing levels, sky1pos and sky2pos were not reset to 0. +- Removed the check for 26,26 at offset 33 in SPC files because somebody found + a file that had them as 0,0 instead, and some players played it fine. +- Fixed: Before resorting to "Person", the dialogue code should use the actor's + tag name as a default name. +- Increased the Entity's alpha value to 50% to make it more visible. +- Fixed: F_StartSlideshow() needs to reset any blending. +- When a Macil speech ends, the level's original music is now restored. +- Fixed: The music for Strife's slideshows is D_DARK and not D_SLIDE. Go figure. + +December 4, 2005 +- Removed the ancient and unused Fixed(Mul|Div)_(ASM|C) functions. +- Discovered the GCC outputs nice code for MulScale and friends, so I removed + the assembly for those routines in gccinlines.h. Alas, the same cannot be said + of DivScale's variants. +- Removed the assembly code for BigShort and BigLong and replaced it with + compiler intrinsics provided by VC++. + +December 1, 2005 +- Backported miscellaneous sc_man.cpp fixes from 2.1.0. +- Fixed: P_BobWeapon() checked flags instead of WeaponFlags for WIF_DONTBOB. +- R_ProjectSprite() now checks for NULL things passed to it. +- Fixed: The game crashed if a slope thing of type 9500 or 9501 was placed + directly on its target line. Now you get a warning in the console instead. +- Returned Berserk's behavior to giving you 100 health instead of 100% health. +- Changed: When no screenshot_dir is specified, the game now tries to save + screenshots to the program directory instead of the current directory. If + you really want screenshots to be saved to the current directory, you can + do so by setting screenshot_dir to "." +- Fixed: StringFormat::VWorker cleared the zero flag for numbers. (I know I + tested this, so I'm not sure when it went wrong.) +- Fixed: The game did not check if actors had pain states before putting them + in their pain states. +- Fixed: The shazam cheat could not deactivate the Tome of Power, nor did it + display any text informing you of its action. +- Added additional decals from Graf Zahl's DECALDEF. +- Updated the obituaries in english-us.txt for Heretic to reflect the published + names of various Heretic monsters. +- Fixed: There is no reason why the Heretic and Hexen status bars should clamp + the displayed health to a maximum of 100. +- Fixed: P_PlayerInSpecialSector() duplicated the damage done by + P_PlayerOnSpecialFlat(). +- Fixed: The actor serializer was off by one when checking the number of + conversation nodes in a script. +- Fixed: In Strife dialogues, yes texts are printed even when it jumps + immediately to another dialogue node. I think this is bad design, and the + yes text should be part of the normal dialogue, but the person in the + east room of MAP27 abuses this, so I need to support it too. This also means + the notify text is no longer hidden when the menu is up. (Maybe they + mistakenly made it jump, and you were really supposed to try talking to him + again when he tells you the master doesn't like visitors.) +- Fixed: Anybody in Strife who does not have their name provided in their + dialogue script should use the default name "Person". +- Fixed: P_RecursiveSound() did not consider closed split doors as closed. +- Fixed: MummyFX1 and Whirlwind should have the MF2_SEEKERMISSILE flag set. +- Fixed: A_VileChase() did not clear the MF3_CRASHED flag. +- Fixed: P_SpawnPlayer() should always attach the StatusBar if the + consoleplayer is spawning. +- Fixed: HateTarget did not take damage due to its lack of a death state. +- Fixed: CheckInventory(), TakeInventory(), and GiveInventory need NULL type + checks. +- Fixed: SC_GetString() did not understand escaped quote characters in strings. +- Fixed: There were synchronization issues while drawing the console. Calls to + DrawTexture() can trigger input events to be processed, which can cause the + contents of the console to change WHILE THE CONSOLE IS BEING DRAWN. So now + any changes that would alter the contents of the console text buffer are + deferred until after the buffer is drawn, and a copy of the command line is + drawn instead of the real command line. + +November 22, 2005 +- Fixed: Dssswtchx and dspistol are obviously wrong choices for Strife menu + sounds. I don't think it uses anything for those sounds, but I picked analogs + for them anyway. +- Fixed: Merchants ignored attacks from "silent" weapons. +- Fixed: Strife humans did not play their "yeargh!" sound for their zap deaths. +- Added a new Travelled() method for inventory items. This is called each time + an item travels to a new map and gives it a chance to perform any needed + reinitialization. Specficially, PowerTargeter needs it to set the player's + psprites again. +- Fixed: Dropping coins should do so in increments of 50 if you have enough, not + increments of 1. +- Added IF_UNDROPPABLE to HealthTraining and GunTraining. Because HealthTraining + also gives GunTraining when picked up, you could cheat by dropping the + HealthTraining item and picking it up to get as many GunTraining upgrades as + you wanted. GunTraining doesn't really need to be undroppable; the flag is just + there for it for the sake of symmetry. +- Fixed: It looks like just about everything in Strife should have MF2_FLOORCLIP + set. Strife probably applied floorclip to everything without MF_NOGRAVITY set. +- Fixed: The perfectly vertical missile movement fix was backwards with regards + to damage values. +- Fixed: AddCommandString() scanned past terminating '\0's in unclosed + strings while searching for semicolons that break commands. Thus, if the + previous command added had a semicolon in just the right place, it could + try to add it again. +- Fixed: The fly cheat did not check to make sure you had a body. + +November 18, 2005 +- Fixed: You could create a chain reaction where merchants would continually + enter their pain state because there was a delay between the time when they + alerted and the time they alerted others. +- Fixed: If the Inquisitor died while flying, it would continue to play the + flying sound. +- Fixed: The LEGO cheat didn't check if the Sigil was successfully added and + would set the player to the NULL weapon if it wasn't (which happens with + the shareware). +- Fixed: Macil was alerted by water splashing. +- Reworded some of the compatibility options menu items so they fit on + the screen when playing Strife. +- Fixed: The Oracle's Death checked the wrong quest item to determine if + you had already killed Macil. + +November 17, 2005 +- Fixed: Various Strife actors had MF_COUNTKILL that didn't need it: + Beggar, KneelingGuy, Macil1, RatBuddy, and AcolyteToBe. +- Fixed: PowerMask and PowerShadow both need the IF_HUBPOWER flag. +- Fixed: The Strife quest log should be initialized with the text "Find + help". + +November 14, 2005 +- Fixed: ClientObituary() crashed if the killing player didn't have a + weapon. +- Fixed: The Touch functions assumed the toucher was a valid player and + crashed if it wasn't. +- Fixed: APlayerPawn::Die() assumed the actor was always associated with + a player and crashed if it wasn't and you had weapon dropping turned on. +- Fixed: There were two pfile variables defined in R_InitTextures(). + +November 13, 2005 +- Fixed: The user-configurable BOOM startup strings were always printed, + even if they were empty. + +November 8, 2005 +- Fixed: APowerStrength::GetBlend()'s equation did not match Doom's. +- Fixed: If you have weapon sprites in a wad and try to use a frame from + that sprite that does not exist, the game accesses might crash. Fixing + this involves two things: Make the range checks in R_DrawPSprite() + unconditional, so they exist in both debug and release builds. Also add + a check for the Null texture to catch "holes" in the available frames. +- Fixed: Setmodeneeded is always true before starting a game, because it + only gets cleared when the StatusBar is around. The most obvious + manifestation of this problem is that you cannot move left and right + in the video modes menu before starting a game. +- Fixed: The "give all" cheat did not give a backpack, and the non-console + equivalents always gave you a backpack, even if you weren't playing Doom. +- Fixed: The "give armor" cheat gave you armor with a SavePercent of .5 in + Heretic. This would be correct for the others games, but not for Heretic, + where .5 is what the lesser armor provides. + +November 7, 2005 +- New: Games saved for different PWADs but the same IWAD now show up in + orange on the save/load menu. +- Fixed: R_RenderViewToCanvas() did nothing if viewactive was false. Thus, + savegame screenshots would be garbage if you saved while looking at the + automap. +- To avoid potential conflicts with the Windows headers, the LONG and SHORT + routines were renamed to LittleLong and LittleShort. BELONG and BESHORT + were also renamed to BigLong and BigShort to match. +- Fixed: S_ChangeMusic() had a cast from 'const char *' to 'char *' that was + missed by VC++ 7.1 and GCC, but not the latest VC++ 2005 beta. +- Fixed: Although bit 27 of the actor's flag is now used for something + different than in Doom, it's okay to specify it by number in a Dehacked + patch, because it's used to set the color translation. When the translation + is set, it will be 0'ed then. +- Fixed: FActorInfo::ApplyDefaults() should initialize datastr to NULL. +- Fixed: TArray::Delete's parameter should be unsigned. +- Fixed: The fix for rotating polyobjects broke polyobject doors. +- Fixed: Using the IDBEHOLDS cheat did not give you full health. +- Backported the fix for scrolling Heretic/Hexen/Strife specials from 2.1.0. +- Increased KneelingGuy's height to 17 so that you cannot step on top of the + projector without jumping. +- Added a confirmation screen for the menu choices that reset your options. +- Added a new automap menu underneath the display options menu. Moved all the + automap options into it and added a few new ones. + +November 2, 2005 +- Fixed: WIF_NOAUTOFIRE did not actually do anything. +- Added zloba's save/load console commands. +- Adjusted Static_Init:Init_Color so that you don't have to specify both + fog and color with it. +- Fixed: A_GenWizard() and A_SpawnBishop() did not decrement total_monsters if + the monster spawned inside something and needed to be destroyed. +- Fixed: Hexen monsters also move faster in nightmare mode. +- Added a map color customization menu. +- Renamed the "Standard map colors" option to "Use traditional Doom map colors". +- Fixed: Switching the MIDI device after a one-shot song had finished would + try to restart the song. +- Removed the BufferReturnEvent from music_midi_stream.cpp, since it was + unused. + +October 26, 2005 +- Merged in Chris's Linux patch. +- Fixed: Redefining a decal that had already been assigned to an actor would + not update the actor's reference to the decal. +- Fixed: CheckForPushSpecial() could pass a NULL actor to P_ActivateLine() if + a missile did not have an "owner." +- Fixed: snd_reset assumed GSnd was valid, but it wouldn't be if you passed + -nosound on the command line. +- Fixed: When a doll-spawned minotaur in Hexen died, it checked to see if any + other minotaur were still up for that player. It assumed there were no free- + standing minotaurs and crashed if there were. + +October 24, 2005 +- Added armor->BecomeItem() calls to ABasicArmorPickup::Use() and + ABasicArmorBonus::Use(). AActor::AddInventory() no longer calls BecomeItem() + itself. + +October 22, 2005 +- Fixed: FloorAndCeiling_LowerRaise would move one or the other but not both. +- Fixed: PIT_RadiusAttack() calculated negative distances for things exploding + directly above other things. +- Fixed: Ripper missiles ignored MF3_BLOODLESSIMPACT and always sprayed blood + onto the walls. +- Fixed: Firing a missile into a wall while standing right next to the wall + would not cause any specials to activate on that wall. + +October 18, 2005 +- Changed: DThinker::DestroyThinkersInList() performed a pointer cleanup after + destroying each and every thinker. The better thing to do is clean up in the + functions that call it: DestroyAllThinkers() and DestroyMostThinkers(). + +October 17, 2005 +- Fixed: BloodySkull and IceChunkHead are supposed to subclass PlayerChunk, not + PlayerPawn. +- Fixed: Behaviors for Generic_Floor change types 2 and 3 were swapped. +- Fixed: Non-320x200 INTERPICs once again display properly. +- Changed drawing operations in F_BunnyScroller() so that non-320x200 background + images should work. +- Fixed: The m_Dist member of DPolyAction was declared signed when it should have + been unsigned. +- Fixed: SetScriptState() in p_acs.cpp did not check to make sure the ACS thinker + actually existed. +- Fixed: Crashing when travelling between maps in a hub. For some reason the list + of pointers for AActor used 12-byte-wide pointers-to-members. Every other class + (including those that derive from AActor) use 4-byte-wide values. This left + DObject::PointerSubstitution() and DObject::DestroyScan() able to identify only + the first pointer declared in AActor. Rather than try to figure out why + pointers-to-members of AActor are weird, I decided to revert to my original + implementation: An array of offsets into the class. GCC complained about this, + which is why I switched to a pointers-to-members implementation. But I found a + way to make GCC compile it without warning, so yay! + + And since I was working with this code anyway, I decided to make a change that- + is hopefully a speed optimization. Rather than walking up the chain of TypeInfos + every time an object's pointers need to be checked, I now do this once and build + an array of every pointer in a class instance (as opposed to just those pointers + defined for that class and not any of its superclasses). This should mean fewer + scattered memory accesses and hence, better cache utilization. + + (Question: Why did this problem show up in 2.0.97 and not 2.0.96? The only + relevant change to the code was a macro to make the array const for VC++ but not + for GCC, because some GCC optimizations tried to write to it at runtime despite + its constness.) + +September 26, 2005 +- Released this old code as 2.0.97. +- Backported the text-based LANGUAGE and IMF code from 2.1.0. +- Updated to zlib 1.2.3. + +February 21, 2005 +- Provided alternate versions of the TArray-related friend template functions for + the string and name classes. I have no idea which compiler is right, but VC++ is + certainly nicer about it. + +February 19, 2005 +- Fixed: In C mode, SC_GetString() would not consider '-' to be a token. +- Added a global name table. + +February 18, 2005 +- Added lots of explicit casts and changed some types to turn off 64-bit compatibility + warnings. +- Added a string class I've been playing with for a while now and made some + adjustments to TArray so that it can work with non-basic types. + +February 11, 2005 +- Removed the MOD_FIRE hack in PIT_RadiusAttack and replaced it with a new thrustless + flag to P_RadiusAttack. +- Removed the multiplayer check from AInventory::ShouldRespawn(). Now the dmflag is + always respected, even without alwaysapplydmflags. +- Added a check for a NULL StatusBar to PlayerIsGone() in d_net.cpp. +- Fixed: ADehackedPickup::TryPickup() set the MF_DROPPED flag. This flag is now set + by default, so it should clear it instead. This kept hacked weapons from staying + and respawning, because the RealPickup it tests against was always flagged as + dropped. +- Fixed: The MagePlayer used A_Scream instead of A_PlayerScream when he died. +- Fixed: The Heresiarch spawned new balls above its head after it killed its target + and re-entered its SpawnState. +- Fixed: Using chasecam while spying on another player would not show that player. +- Rewrote the spy code to not need displayplayer. +- Switched to the combination of DirectDrawCreate/QueryInterface to obtain an + IDirectDraw2 interface. That should be slightly more compatible, since + DirectDrawCreate can create an IDirectDraw interface even if it isn't properly + registered. + +February 10, 2005 +- Fixed: The screen fading ACS commands did not work when viewing through a camera + because DBaseStatusBar::BlendView() did not think there was a player to get those + values from. Now, the blend comes from either the player viewing from or the + console player if the current view is not from a player. +- Fixed: Returning to a previously visited level in a hub with fewer players than you + had when you left the level would result in "zombie" bodies from the former players. + The fix is in G_UnSnapshotLevel(): After restoring the level, any actors that point + to a player who is no longer in the game are destroyed. +- Fixed: P_ExplodeMissile() should zero the projectile's speed before putting it into + its DeathState, not after. Strife's flamethrower needs it like this, and I'm not + sure when or why it was moved to happen after the state change. +- Fixed: R_DrawSkyBoxes() needs to save and restore viewx and viewy as well as viewz + for drawing masked items. +- Fixed: P_MorphPlayer() did not properly transfer ownership of inventory items, so + when it destroyed the player's armor, it also unlinked anything after the armor in + the player's inventory. +- Fixed: The Hexen players should call A_FireScream() on the first frame of their + fire death, not the first shared frame of their fire death. +- Attached obituaries to the projectiles used by Doom's projectile weapons, so they + can have obituaries again. This is just something I put off finishing when I changed + from a means-of-death system to a damage type system. +- Fixed: Pain Elementals did not transfer their friendly flag to the Lost Souls + they spawn. And since I've got the same code doing this sort of thing in several + places, I replaced them all with a call to the new method AActor::CopyFriendliness. +- Fixed: Bots are idiots after co-op level changes because the CajunMaster forgets + about them and so doesn't tell them to do anything different from what they were + when the level change happened. +- Fixed: G_FinishTravel() needs to retrieve the next player before changing the + current one's statnum. +- Made some fixes to SDLVideo's Lock() and and Update() synchronization. +- Fixed: DSimpleCanvas::Lock() and ::Unlock() did not properly use the lock count. +- Fixed: In Strife, the fastCrushAndRaise ceilings (line types 6 and 77) are twice + as fast as their Doom counterparts. +- Fixed: Strife auto-uses the best ammo first, not the worst. I got confused because + in Strife ARM1 is the best armor, but in Doom it's ARM2 that is best. +- Fixed: Strife does not double ammo at its highest skill level. +- New: Using Degnin Ore will drop it, similar to the Teleporter Beacon. +- Fixed: In nightmare skill, every actor is spawned with a reactiontime of 0. This + make's Strife's HE Grenades explode immediately, because they use their reactiontime + as a countdown timer. The solution: Only set the reactiontime to 0 for monsters. + (Strife may not do this at all. I'm not sure.) + +February 9, 2005 +- New feature: Missiles with negative damage now give you health. +- Changed P_GiveBody so that it works with any actor, not just players. +- Fixed: Picking up a BasicArmorPickup without any existing BasicArmor gave you + a new BasicArmor without calling BecomeItem to unlink it from the world. Since + there are probably other areas where this happens, and it's kind of easy to forget +- Added a division-by-0 check to the very end of P_HitSlideLine for the very rare + cases when inter3 ends up being 0. +- Clamped the upmove speed in P_PlayerThink() to avoid super fast speeds from + joystick users. +- Fixed: A_SorcererRaise() did not transfer friendliness info to the new D'Sparil. +- Added: Trying to use actors that have the UsePuzzleItem special now works just + like trying to use a wall with the same special: You use the item if you have it, + and you say "hmm" if you don't. +- Fixed: APuzzleItem::Use() should not remove the item from the inventory but let + the caller do it instead. +- Fixed: P_TranslateLineDef() should clear the ML_MONSTERSCANACTIVATE flag on lines + with ML_SECRET set. Otherwise, monsters can open otherwise secret doors in Doom + format maps. +- Renamed the Porkalator's missile sprite from EGGM to PRKM, so it doesn't have the + same name as the Morph Ovum's missile. +- Fixed: The warp cheat was always applied to the local player and not the player who + used it. +- TypeInfo::CreateDerivedClass() now initializes OwnedStates and NumOwnedStates for + actors. +- Fixed: PrepWall and PrepLWall clamped the final texture column so that it was not + visible unless it was fully visible. +- Fixed writing of RDosPlay raw songs. It was a very very very stupid mistake: I had + the order of the register and data bytes reversed. Now it works fine, and since it + took me a while to figure out the problem, ZDoom can now play raw OPL songs. + +February 7, 2005 +- Added the writeopl command to write a song in RDosPlay raw OPL format. It's usage is: + writeopl [songname] + If the currently playing song is a MUS song being played through the OPL emulation, + then you just need to specify the filename. Otherwise, you need to provide the + songname (such as D_E1M1) as well. Unfortunately, the result is unplayable with + AdPlug, so I must be doing something wrong. + +February 4, 2005 +- Merged in Graf Zahl's Caverns of Darkness patch. +- Fixed: Using the screenshot command to specify a filename without any extension + automatically adds the extension. + +February 3, 2005 +- Played around with polymost some more. The good: Wall projection is now totally + independant of the non-polymost code, so walls don't get clipped to what would have + been the screen boundaries without true look up/down. With the filled polygon mode, + it looks awesome. The bad: I'm getting precision problems when clipping the left + side of walls to SCISDIST. This problem is not present when clipping the right side, + and it's not present in jfDuke, so what am I doing wrong? Setting SCISDIST to a large + value like 128 makes the problem disappear, but that's much too large. Someday, when + it can handle doing a second pass to draw behind you, SCISDIST needs to be as small as + possible to avoid a visible gap between the front and back views. + +February 2, 2005 +- Added a damagetype parameter to AActor::TakeSpecialDamage(). The default implementation + of this function now uses it to reject damage if the actor doesn't have a matching + death state. (Meaning, you can leave an actor without a normal death state, and it will + only take damage from special attacks.) Since this negates the need for A_TreeDeath, + that function is gone. +- Fixed: The adjustment for negative y-offset, non-power-of-2-height textures is + now only done for textures aligned at the top and not the bottom. +- Fixed: APowerFlight::DrawPowerup() did not check if SPFLY0 actually existed before + using it. +- Fixed: P_SpeekerMissile() did not check for zero-speed actors, so you could get a + division by zero error if it needed to move vertically. + +January 30, 2005 +- Threw together a quicx mock-up of a polymost-based renderer. It is essentially + just the standard software renderer with some parts commented out and the clipping + done with polymost instead of a few one-dimensional arrays. The display itself is + just the standard view with the polymost view overlayed in wireframe. + +January 29, 2005 +- Fixed: BOOM-style carrying floors that use speeds values less than STOPSPEED + no longer change the actor's momx and momy but are passed as extra parameters + to P_XYMovement(). Faster speeds still change momx and momy, so conveyor belts + can fling objects off of them. +- Fixed: Items in inventory would "scroll" on scrolling floors. +- Fixed: Every place that copies the friendly flag from one actor to another also + needs to copy the FriendPlayer. +- Fixed: In A_Chase(), a friend's selection of target based on who last hurt the + player did not take into consideration that a friend may have accidentally hurt + the player. +- Fixed: P_NightmareRespawn() did not copy a monster's custom translation to + its new body. +- Fixed: FMODStreamCapsule::Play() did not record the channel the stream was + playing on, so you could not change its volume during playback. +- Added the sucktime mapinfo option. This is the time, in hours, that the + player must play before the intermission tells them their time sucks. If this + is 0, then they cannot suck. If they do suck, their time is still shown + (unlike Doom) in the normal spot, with the suck above it. I had to shift the + positions of the time displays in the Doom intermission a little so that there + was room for the hour field. This is also retrievable with the GetLevelInfo() + command by passing LEVELINFO_SUCK_TIME. +- Fixed: Using the suicide cheat on the "end of game hell hack" on E1M8 would + infinitely loop because that sector type actually prevents you from dying, + but the cheat code was waiting for you to die. + +January 27, 2005 +- Added mouse handling to the testpolymost screen so that I can actually drive + it. That let me find a few more bugs in my port of the code that needed to be + fixed. + +January 26, 2005 +- Changed the Puffy actor (used by Heretic's weredragon/beast's fireball trail) + to do 0 damage. Similarly, A_LastZap() now sets the projectile it spawns to + do 0 damage so it can be once again like Hexen. +- Fixed: Picking up an ammo item for the first time with more than the max + amount for that ammo type would let you get more than the max. +- Fixed: Specifying a defaultmap in MAPINFO disabled lax monster activation + checking instead of deducing it from the game's Hexen/not-Hexen status. +- Fixed: Mirrors were accumulated to the WallMirrors list while viewing the + automap, so after you turned the map off, a few thousand mirrors could be + processed, resulting in a noticable delay before the view became visible. +- Added support for using the Teleport_NewMap class of specials with title maps + so that you can use more than one map as a title map. Using the gametype() + ACS function will return GAME_TITLE_MAP if the map is being used for a title + display instead of regular play. +- Added a fourth parameter to ThrustThing to accept a TID of something to + thrust. +- Fixed: Deactivating an actor mover without activating it first reset its + target's flags to 0. +- Fixed: Picking up two or more berserk packs only gave the red tinting for + the first one. +- Fixed: Monsters following a path entered their see state whenever they + reached a patrol point. I don't know what I was thinking when I did that. +- Fixed: Since pre-2.0.90 demos no longer play back, they should be rejected + without even trying to play them. Similarly, new demos need to be + recorded indicating they won't play back with earlier game versions. + Unfortunately, I didn't bump the demo version between 2.0.63a and 2.0.90, so + anything pre-2.0.97 won't play with 2.0.97, even though there's probably + no changes that would cause desynching between 96 and 97. Oh well. +- Fixed DBaseStatusBar::DrBNumber(Outer) to work when some of the big number + graphics are missing. + +January 15, 2005 +- Fixed: ACS cos and sin were using signed shifts when calculating the fineangle. + +January 13, 2005 +- Fixed: Instead of assigning the empty sound a basepriority of -1000, + S_StartSound() should not even attempt to play it. +- Fixed: FCanvasTextureInfo::Add() did not change the FOV when reassigning an + existing camera->texture mapping. +- Fixed: SetCameraToTexture did not check if the texture name actually existed as + a texture. It just assumed it did. + +January 10, 2005 +- Fixed: P_MorphPlayer() needs to set the player's momx and momy to 0, because + morphing doesn't maintain the player's momentum. +- Fixed: The Cyberdemon, SpiderMastermind, AlienSpectre*, Crusader, and + Programmer need MF3_DONTMORPH set. Otherwise, morphing them and killing them + before they unmorph will skip any of their special death actions. Technically, + the Inquisitor doesn't need it set, but he's a boss monster, so it seems best + if he can't be morphed. (For that matter, should any of the mechanical monsters + in Strife be morphable, since they're not organic?) +- Redid: Invnext and invprev wrap around the inventory list. +- Unmorphing a player now removes the weapon(s) they received in their morphed + form. +- Redid the dehsupp fix from March 22, 2002. + +January 8, 2005 +- Fixed: Dead players could still be morphed, at least with the morphme cheat. + I'm not sure if morph projectiles did it or not, but now they definitely don't. +- Added a call to SN_StopAllSequences() inside S_StopAllChannels(). This + prevents moving sector sounds from playing during the finale (and any other + time when sound effects were supposed to have been stopped). +- Fixed: R_DetailDouble() must not do anything when viewactive is false. + +January 7, 2005 +- Ported the polymost visualization code from Ken's prototype so that I can + verify the correctness of my C++ port. Which was not quite correct. :-( + +January 5, 2005 +- Fixed: R_SetupBuffer() calculated ylookup for the height of the screen, and + not the height of the render target. This meant using camera textures taller + than the screen would probably crash. But wait! There's more! new_visplane + must also allocate top and bottom arrays wide enough for any view, not just + the screen. So I decided to just make it allocate enough for MAXWIDTH. +- Removed some possible unused variable warnings spewed by GCC. +- Fixed: The parser for DEM_SUMMON(FRIEND) tested if type was NULL when it + should have tested typeinfo instead. +- Changed the actor defaults for GCC to use a function to initialize the + default actors instead of an initializer list. With newer GCC versions, I + can no longer count on variables being emitted in the same order they are + defined, so using an initializer list is impossible. This looks like it adds + ~300k to the executable, which I suppose isn't too bad. + +January 4, 2005 +- Changed the object pointer offset lists to not be const when compiling with + GCC. Some versions and options cause GCC to try to initialize them at + run-time, even though they are read-only and therefor protected from + writing. +- Added Makefiles for building with MinGW. Since Chris did the hard part by + posting a Makefile for the main exe on the forum, I only needed to make + Makefiles for the auxilliary projects. And then I spent some time porting + ccdv to Win32, so the make output will look pretty. + +January 3, 2005 +- Fixed: The self-modifying code in tmap3.nas was still in the .data section + instead of .rtext, so it couldn't be used with data-execution prevention + enabled. + +January 1, 2005 +- Fixed: ParseDecorate() needlessly allocated new TypeInfo objects. +- Fixed: The status bar constructor did not initialize CPlayer. Thus, when + the Doom status bar's AttachToPlayer method was called it would not do + the proper face initialization if the status bar was freed and then + reallocated in the exact same spot. This bug didn't show up in the debug + build, because the debug CRT automatically fills newly freed and allocated + memory. +- Fixed: P_SpawnMapThing() does not need a special check for the Lost Soul. + +December 24, 2004 +- New: Instead of using a static image as a title, you can now use a map. + Just create it as normal, being sure to do something interesting with + scripting, and rename it TITLEMAP. It will load just like a normal map, + but it will behave like a title picture. +- Fixed: The intermission did not compensate for non-4:3 aspect ratios. +- Fixed status bar border for widescreen ratios other than 16:9. +- Corrected clean scaling calculations for widescreens. +- Changed: Giving a BasicArmorBonus now also multiplies the original amount + by the specified amount instead of just using the specified amount. +- Fixed: When P_SpawnPlayer() transfers a voodoo doll's inventory to the new + player, it also needs to transfer the InventoryID property so that items + picked up later won't receive the same ID as an item they already have. +- Fixed: ArtiPoisonBag::BeginPlay() did not call the superclass's version of + the function. +- Changed A_FireScreamReplace to A_FireScream. Now it plays the sound itself. + On a related note, moved A_ClericBurnScream to the start of the ClericBoss's + flaming death and changed the old instance back to A_Scream. +- Fixed: Forgot to delete some old code in AActor::Tick(). +- Fixed: The second sidedef-only constructor for DScroller did not set up an + interpolation. +- Fixed: R_DrawSkyBoxes() initialized the clipping drawseg's siz values to + 1<<31, which is actually INT_MIN, not INT_MAX! +- Fixed: Some properties were not properly transferred when unmorphing an + actor. +- Fixed: You got HOM around the status bar in widescreen mode if you didn't + scale the status bar. +- Fixed: You could use the down arrow key to select blank entries on the last + line in the video mode menu if that line was not full. +- Fixed: The backpack handled pickups for everything after you got one. + +December 23, 2004 +- Made the bottom of the viewborder visible when the status bar doesn't cover + the full width of the screen and no border would normally be visible. +- Added SetAmmoCapacity (str typename, int maxamount) and + GetAmmoCapacity (str typename) ACS commands. Also added the ACS log command. + It is exactly like printbold, except it prints directly to the console instead + of the middle of the screen. BTW, ACS has static local variables ala C now. + They are exactly the same as map variables, except they can only be used in + the script or function that defines them. +- Fixed some fullscreen pages to work properly with non-4:3 aspect displays. +- Fixed DCanvas::DrawTexture() so that all virtual sizes (not just 320x200wide) + work with non-4:3 aspect screens. (So long as the virtual size is 4:3.) + +December 22, 2004 +- Fixed: The backpack was not added to the player's inventory, although there + was code present to handle removing it from the inventory. +- Loading a BEHAVIOR without any scripts but with other content crashed. +- More revelations with the sprite splitting experiment: Drawsegs are not + always created when you might think they are. Probably the biggest problem + is when you look at a line straight-on, so you see the sectors on each side + of it but not the line itself. I conceded defeat and stuck an #if 0 around + the related code. If I or someone else want to revisit it later, it's still + there but inactive. I don't think it's worth the effort to make it work + properly. A z-buffer would be much easier, more reliable, and possibly even + quicker when there are a lot of two-sided lines in view. So the solution + seems obvious: Use hardware acceleration and let it worry about sprite + clipping. Or stick with the way things are and ignore it. :-) (Community + Chest 2, MAP15, building number 4 makes a great test-case for this, BTW.) + +December 21, 2004 +- Messed around with splitting sprites along drawsegs some more. This is far + from being as straight forward as I had thought. One unexpected problem I + realized: Most (if not all) of the sprites that stand on the ground are + actually sunk into the ground, but splitting sprites is not a win unless you + clip them to the floor and ceiling. So I tried bumping the sprites up so that + they are aligned with the bottoms of their actor so I could clip them to the + floor. Now it looks much better. When it works. Unfortunately, there are + lots of cases that still don't work properly. + +December 20, 2004 +- Added some code to split sprites along drawsegs. +- Changed the sprite-in-front of drawseg calculations. Now it compares inverse + Z values in screen space. +- Fixed: The MinotaurFriend targetted friendlies other than itself. +- Fixed: An actor's floorpic was not serialized by name. +- Fixed: Each piece of Hexen armor only gave you one AC. +- Fixed: Morphing a monster didn't copy the original monster's friendliness and + TID hating to the morphed version. + +December 18, 2004 +- Fixed: Slideshows in Strife are supposed to change the music to D_SLIDE. +- Fixed: Merchants played their greeting animation in place of their "yes" + animation. (Or rather, the greeting was played immediately after starting the + "yes" one, so you only saw the greeting.) +- Fixed: The Strife health bar texture assumed that the vial level would always + be non-negative. It can go negative if the player dies then cheats to give + themself health, but not enough for their real health to go positive. +- Fixed: Creating a fade-in-out hudmessage with a fadetime of 0 crashed, because + it assumed the fade-in time would always be positive. +- Fixed: Instead of calling G_StartTravel(), idclev should set the player's + health to 0, so the player will do a complete spawn on the new level. +- Fixed: DrBNumberOuter(Font) and DrINumberOuter drew the shadow from one digit + on top of the next digit. +- Fixed: The Doom HUD drew the selected inventory item on top of the secondary + ammo if both were present. +- Moved the DrawPowerups() call out of DBaseStatusBar::Draw() and into + DrawTopStuff(), so the Doom HUD key display won't cover them up +- Fixed: If you started flying and then pressed the land key, you wouldn't be + able to fly again until the Wings of Wrath wore off. This was done by changing + several checks for a player with MF2_FLY into checks for a player with + MF_NOGRAVITY. MF2_FLY just indicates that the player is using the Wings; + for the player to fly, MF_NOGRAVITY must also be set. If MF_NOGRAVITY is not + set, but MF2_FLY is, then the pressing +moveup/down reactivates fly mode. +- Changed the receipt of BasicArmorPickup so that the SaveAmount is multiplied + by the given amount (via the give cheat or ACS giveinventory) in order to make + it compatible again with earlier versions of ZDoom. +- Fixed: Picking up an armor bonus after using up your armor left you with + useless armor until you picked up a full-fledged armor item. +- Fixed: Even though voodoo dolls couldn't pick up items, they could still touch + them without pretending to be a real player and mess things up in the player's + inventory. +- Fixed: Strife's alien spectres did not execute specials attached to them upon + death, because they have MF_SPECIAL set. +- Changed the inventory left/light gems (that indicate if you have more items in + that direction) to blink with gametic instead of level.time, so now they can + blink while the game is paused. +- Fixed: You could use items while the game was paused. +- I just noticed the fighter's fist doesn't meet the edge of the screen when you + swing it. What's a good, clean way to handle this situation? +- Brought over the startup log viewer I had added for my Duke port. Unlike my + Duke port, however, this window is normally hidden and only shows itself when + a fatal error occurs. Now if something goes wrong during the startup + sequence, you can review the console log to try and figure out why. I tried + making it show up at startup as a sort of revival of the way the startup + process worked once upon a time in DOS land, but too much of the code now + requires the video to be one of the first things initialized and it just isn't + practical to rearrange things to make it init later. + +December 16, 2004 +- New: ZDoom.wad is now managed along with the source code. + +December 15, 2004 +- Added support for letterboxing, so people without widescreen displays can still + use widescreen modes without running in a window. Note that if the video card + enumerates any widescreen displays, then the game will assume they are displayed + as widescreen, even if they really aren't. Letterbox modes are automatically + generated from the existing 4:3 modes, but if an existing resolution already has + the same size, then that resolution won't be available in letterbox form. The + video modes menu displays LB next to any modes that are letterboxed, so you can + tell them apart without trying each one. +- Corrected widescreen displays for non-90 degree FOVs. + +December 14, 2004 +- Added support for 16:10 and (if vid_tft is true) 5:4 displays. Also rearranged + the video modes menu, removing the depth choice and replacing it with an aspect + ratio choice. + +December 13, 2004 +- Rewrote the interpolators to use a hash table instead of a linear array, for + improved insertion and deletion performance. +- Added interpolation for scrolling floors, ceilings, and walls. Floors especially + need it, because the lack of interpolation really sticks out when you're being + carried along by a floor that only moves at 35 FPS. +- Resolutions are now sorted, and you can pick widescreen resolutions if you play + in a window even if your don't have any fullscreen widescreen modes. (Yep, 16:9 + modes are now supported.) + +December 11, 2004 +- Decided it's time to bring the goodness of Polymost to ZDoom. Stage 1 complete: + Convert the clipper to a stand-alone C++ class. Stage 2 to be completed some + time in the indeterminate future. There's really other things that I should be + doing right now, ne? + +December 9, 2004 +- Fixed: APlayerPawn::BestWeapon() did not know about the Tome of Power, so + when you ran out of sufficient ammo for your tome'd weapon, it could select + the untome'd version of that weapon, which would turn into the tome'd version + when it was raised, so you would be stuck in a cycle until the tome ran out or + you picked a different weapon manually. +- Fixed AMinotaur::Die() should have used a thinker iterator instead of an + actor iterator to look for minotaurs that are still alive. +- Added Graf's deltaviewheight fix for climbing stairs made of actors. +- Fixed up the pickup ammo amount for the BFG. (Was 100, should be 40.) +- Merged in Jim's ACS character array printing support. + +December 6, 2004 +- Fixed: Fog boundaries flashed with gunfire. That's wrong because foggy + sectors don't flash. +- Fixed: Masked textures in a skybox would determine their height from the + viewz used for the last skybox drawn instead of the viewz for the skybox they + belong to. +- Fixed: "*fistgrunt" was undefined, so A_FPunchAttack() was unable to play it. +- Fixed: Hexen players did not play their burn death sounds. Neither did the + cleric boss. +- Fixed: Thingcount should not count items in somebody's inventory. +- Fixed: AInventory::BecomeItem() did not remove the item's TID, so it could + still be manipulated by scripts even after being picked up. +- Fixed: CheckBossDeath() should consider frozen corpses as not dead, because + A_BossDeath() is not called until the corpse shatters. +- Changed APlayerPawn::Die() to use P_DropItem() to spawn a new weapon when + weapondrop is turned on instead of dropping the player's actual weapon. +- Fixed: P_DropItem() needs to clear the MF_NOGRAVITY flag because some Hexen + items have it set. +- Fixed: ArtiTeleport::Use() called P_UndoPlayerMorph with its player instead of + its owner's player. + +December 4, 2004 +- Updated the libraries and moved them out of src and into the base directory. + Now zlib is at version 1.2.2, libFLAC is version 1.1.1, and src contains only + the ZDoom-specific files. +- Updated to zlib 1.2.2. + +December 3, 2004 +- Fixed: 256 entries per column is not enough for dc_tspans. Each column should + have MAXHEIGHT entries available, because a column that alternates drawn/not- + drawn pixels each row will need one entry per row. + +December 2, 2004 +- Fixed playback of SPCs when spc_8bit is true. SNESAPU renders them unsigned, + but we need them to be signed. Also fixed: Altering spc_stereo and spc_8bit + while a SPC was playing could crash. +- Added new stuff to the alternate sound renderer: MMX CopyAndClip routine, + interpolated mixers, FLAC sample loading, streams, and slightly tighter + inner. So now it's a bit more of a realistic alternative to FMOD. All it + really lacks is MP3, Vorbis, and MOD support. The snd_interpolate cvar can + even select between linear (1) and quadratic (2) interpolation, so it can + sound better than FMOD, which only does linear interpolation. + + I'd like to compare the performance of the new code with FMOD, but + unfortunately, I can't seem to figure out a good way to calculate % CPU used + by the mixer. My attempts lead to numbers that fluctuate quite a lot for + relative constant environments. At least it ought to be attractive to the + Linux folks if it gets modified to support SDL as well as DirectSound, even + if I have no idea how well it performs. + +December 1, 2004 +- Reorganized the sound interface code to make it easier to target multiple + sound renderers. + +November 29, 2004 +- Added the CTRL-X keypress for clearing the current console command line. +- Changed tab completion to be more Bash-like: When there is more than one + possible completion, and they all have a common prefix longer than what + has been typed so far, the full prefix will be filled in for you. (e.g. + Typing "sn[TAB]" will append "d_" for you because every command that + starts with "sn" also starts with "snd_".) Note that this only works if + you have the completion list turned on (con_notablist is false). +- Fixed: Only the first berserk pack you picked up would give you health. +- Fixed: Soul sphere played the wrong pickup sound. + +November 25, 2004 +- Added render-to-texture support to the engine. Using it requires you do two + things: + (1) Define a texture that can be drawn into. You do this with a line in + ANIMDEFS: + + cameratexture [fit ] + + e.g. + + cameratexture CAMTEX1 64 64 + Creates a texture called CAMTEX1. + + cameratexture CAMTEX2 100 50 fit 80 50 + Creates a texture called CAMTEX2. Its actual dimensions are 100x50, + but it will be scaled to fit into an area 80x50 units large. + + cameratexture STARTAN2 64 64 + Replaces the existing texture STARTAN2 with a new one that can be + rendered into. Since no fit size was provided, this new texture will + be sized to occupy the same space as the old STARTAN2 texture, which + is 128x128. + + cameratexture STARTAN2 64 64 fit 64 64 + Replaces the existing texture STARTAN2, but leaves the texture + unscaled by specifying a fit size that matches the real size. + + Square textures use less memory than non-square textures. However, if + you want to use a camera that can see the texture it renders into, you + should use a non-square texture. + + (2) Use ACS to identify which camera renders to the texture: + + SetCameraToTexture (, , ); + + e.g. + + SetCameraToTexture (100, "CAMTEX1", 90); + +November 24, 2004 +- Expanded the definition of local for such things as "localambientsound" so + that players will still hear the sound if they are looking through a camera. +- Added the summonfriend command. +- Made P_RandomChaseDir() truely random. The only real randomness it had before + was in deciding whether monsters preferred to go east or southeast. + +November 20, 2004 +- Fixed: AInventory::BecomeItem() must remove the actor from all the touching + sector lists. Otherwise, you can get crashes if a floor or ceiling in a + sector touching the item moves later. +- Fixed: Patrols only went to the first goal and then got stuck. +- Fixed: Recurssion when an unloading script tries to change to a different + map. The map change is already under way, so the script cannot start another + map change. +- Moved BasicArmor's PostBeginPlay icon fixing into Tick, so it can cope with + the "give armor" cheat removing the icon when the player already has armor. + +November 18, 2004 +- New ACS stuff: + bool playeringame (int playernumber); + Returns true if the player [0..7] is in the game and false if not. + + bool playerisbot (int playernumber); + Returns true if the player [0..7] is a bot and false if not. + + script unloading + { + ... + } + Executed by the level just before it unloads because the players are + about to move to another one. Everything up until the first latent + function will have a chance to execute. If the script needs to wait, + it will continue execution when the players return to the map. Since + this type of script is executed with the equivalent of ACS_Execute + and not ACS_ExecuteAlways, it can block itself from executing the + next time the level is unloaded if it hasn't finished with its + business yet. + + script (int playernumber) disconnect + { + ... + } + This type of script is executed when a player disconnects in a + multiplayer game (including bots). THIS SCRIPT IS EXECUTED BY THE + WORLD, NOT BY THE PLAYER WHO LEFT. By the time the script is run, + the player is already gone, so you can't do anything to that player. + The number of the player who left is passed as the only argument to + this script. +- Selecting a conversation choice that stays at the same dialogue node no + longer moves the current selection. +- Added a gold display when talking to merchants. +- Fixed: Poison bolts shouldn't kill merchants. +- Fixed: An ActorMover didn't prevent the renderer from interpolating the + actor when it was moved onto the path to start off. +- Fixed: AInterpolationPoint::ScanForLoop() got stuck if the path looped, but + the initial point wasn't part of the loop. +- Fixed: Giving an interpolation point the ambush flag in an editor would + cause it to not join a path. +- Added Graf Zahl's fix for shootable walls with invalid sector tags that + some wads use to make things you can break. Also added a parameter to the + GlassBreak special that you can set to 1 if you don't want it to throw out + any shards. +- Fixed: MF3_NOTARGET should only be respected my monsters of the same + friendliness. +- Fixed: D'Sparil and the Heresiarch always summoned hostile helpers even if + they were friendly. +- Fixed: DCajunMaster::ThinkForMove() needed more NULL checks for the + player's ready weapon. +- Fixed: When using the Tome of Power, only the first weapon in a slot could + be selected with the slot command, because FWeaponSlot::PickWeapon() didn't + consider the powered-up version as a match for the current weapon. +- Fixed: If a player is telefragged and drops a weapon (or anything else), it + can mess up the floor/ceiling determination in P_TeleportMove() thanks to + the heavy reliance on global variables in the physics code. Those make it + very much non-reentrant. +- Fixed: Monsters did not activate player-cross lines when strict checking + was turned off. +- Fixed divide by 0 in the Hexen status bar's DrawKeyBar() method when the + armor slot increments are 0. +- Changed the ACS random command so you can specify the max and min as either + parameter. This fixes a divide by 0 when the maximum is one less than the + minimum (because now the maximum cannot be less than the minimum). +- Fixed PROP_FLY with SetPlayerProperty. +- Removed MF_NOBLOCKMAP from IceChunk, IceChunkHead, the Heretic imp chunks, + Meat, and Junk. +- Removed LEVELINFO_START_TIME, since it's useless outside of timedemo. +- Fixed log HUD messages (and print statements) were logged to the console but + not to the log file. +- Fixed scrolling bounds when automap rotation is on and follow is off. Issues + remaining: The grid in rotation mode only works well if follow is on, and + rotation is relative to the player rather than the center of the screen. I'm + tempted to just rewrite the whole map package to be more rotation friendly + (and be more modular so there could be multiple instances on the HUD, as was + requested a couple of times in the past). + +November 17, 2004 +- Corrected movement of the automap background when map rotate and follow are + turned on. + +November 16, 2004 +- Separated the drawing of HUD messages from the main status bar pass. Now HUD + messages that are meant to be drawn on top of the status bar are drawn on top + of the status bar. + +November 13, 2004 +- Fixed: Dehacked's PatchThing() needs to translate the old damage type flags to + the new damage type value. +- Changed AActor::Die() so it doesn't reset the target if the source is NULL. +- Changed A_CustomBulletAttack() and A_BulletAttack() back to getting their damage + type from the puff, like they (indirectly) did before. +- Added division/modulus by zero checks to all the PCD_DIV/MOD* p-codes. +- New SNDINFO command to deal with several Strife sounds: $singular . + Use this, and only one copy of the sound will play *anywhere*. This is different + from $limit, which is distance based and can stop currently playing sounds. There + are actually a lot of singular sounds in Strife. I only chose to make a few of + them singular, in particular the alarm. TBD: Should new singular sounds cut off + an already playing copy or not play at all? +- Klaxon tweaks: Now klaxons clear off the LastHeard property using the same + recursion that sets it (with P_NoiseAlert). +- Fixed: G_DoReborn() could only fake as players 5-8 when playing Doom or Heretic. +- Fixed: P_SpawnMapThing() calculated the player number wrong for player starts > 4. +- Fixed: AWeapon::AttachToOwner() did not call the status bar's + ReceivedWeapon method. +- Fixed: Even though I fixed the A_CallSpecial parsing, I broke its handling. + +November 5, 2004 +- Corrected the pickup sounds for Strife items. +- Added the MF3_NORADIUSDMG flag to the Inquisitor so he won't kill + himself so readily. +- Fixed: Armorer hair color was wrong. (Cyan instead of gray.) +- Fixed: Starting the game from a fullscreen console with fullscreen false + prevented anything from being drawn, becaues the primary surface would be + lost by the time DDrawFB::PaintToWindow() was reached. + +November 4, 2004 +- Fixed: The C span drawers all drew 64x64 textures in row-major order + instead of column-major order. (They were correct for other sizes, though.) +- Changed the Oracle's spectre (#3) to have MF_SPAWNCEILING and not bob in + its spawn states. Now it behaves more like the Strife original despite + being defined even less like it. +- Increased the opacity of alien spectres to 66%. +- Fixed: A_ExplodeParms() checked against the size of AttackList instead + of ExplodeList, and it had the distance and damage type parameters to + P_RadiusAttack() swapped. +- Fixed player morphing crashing when using the morphme command in a game + that doesn't normally have morphed players. +- Made the Strife burning player more correct: You can run around for a bit + before collapsing, and then you stop flailing your arms around. +- Fixed: I forgot to change the prototype for the Soulsphere's Use function, + so it did nothing. +- Fixed: The AFourthWeaponPiece class destroyed the fourth weapon after giving + it to you if weapon stay was off. +- Fixed: Picking up a torch or light amp while invulnerable cancelled out + the special colormap for the invulnerability effect. +- Fixed: In Doom, you didn't raise your weapon at the start of a new game if + you had neverswitchonpickup on. +- Added the ChangeSky ACS command so that I can remedy another slight Strife + problem: The sky on all maps should become gloomy after killing the + Programmer. +- Fixed: The post-closing Strife slideshow music should be D_FAST, not D_INTRO. +- Fixed: The opening Strife slideshow is supposed to play D_INTRO, not D_DARKER. +- Changed Ceiling_LowerAndCrush so that it uses the same speed for down and + "up", so crushers that stay down can slow down when they hit something. Fixes + the Templar crushers on Strife MAP12. +- Fixed: In Strife, crushing ceilings that don't go back up are supposed to + go to the floor. +- Fixed: Strife linetype 180 didn't copy the sector properties. +- Fixed: Strife instant death sectors were not implemented for the player, and + the damage done by sector type 4 (strobe and hurt) was wrong. + +November 3, 2004 +- Fixed: Talking to friendly PCs made them hate you. +- Fixed: When P_SpawnPlayer() moved a voodoo doll's inventory to the new + player, it didn't fix the items' Owner links. +- Fixed: AAmmo::HandlePickup() didn't check for a NULL ReadyWeapon when + picking up ammo that you had previously run out of. +- Fixed: New check in PlayerLandedOnThing() prevents both *grunt and *land + from being played if they are defined as the same sound. +- Fixed: The minimum velocity P_ZMovement() checks against to decide if your + view should be squatted should not vary with gravity. Same for grunting in + PlayerLandedOnThing(). +- Fixed: The Archvile and Boss Brain did not transfer their friendliness. +- Fixed: Animated door Open/CloseSounds were left uninitialized if the + definition didn't specify them. +- Fixed: AMageStaffFX2::SpecialMissileHit() did the wrong damage type. +- Fixed: Forgot to change the prototype for the Megasphere's Use function. + +November 2, 2004 +- Added HUDMSG_FADEINOUT style HUD messages. +- Added the GetLevelInfo ACS command, which can be used to collect information + before jumping to an intermission-style map. +- Added support for loading 1, 2, and 4 bit PNG images. +- Merged in Graf Zahl's customizable animated doors submission. +- Added the sound effect for Strife's mask powerup. +- Reimplemented water-breathing with the iron feet. +- Fixed: Closing doors made frozen corpses disappear instead of shatter. +- Added fire and disintegration deaths for the Strife player. +- Removed MF2_ICEDAMAGE, MF2_FIREDAMAGE, and GetMod() from AActor in favor of + a DamageType property. +- Fixed: Masked textures visible through multiple skyboxes would be rendered + multiple times. +- Fixed: Skybox planes were drawn in front of any masked textures behind them. +- Fixed: Strife's armor is auto-activated when you pick it up only if you don't + already have some in your inventory. +- Fixed: The ACS ClearInventory command should leave undroppable items in place, + but there is a special exception to zero out the armor slots for a HexenArmor + item, which is almost the same as removing it. + +November 1, 2004 +- Fixed: ArtiBoostArmor didn't work in Hexen. +- Fixed: Hexen players need to start with HexenArmor in their inventory, or else + they won't get their class-specific armor bonuses until they pick up other armor. + Since each player must start with HexenArmor, that means I can make a fifth slot + to hold their class armor and get rid of GetAutoArmorSave(), GetArmorMax(), + and GetArmorIncrement() and make the armor handling somewhat more homogenous. +- Disabled left-right aiming when autoaim is 0. +- Added support for the newer version of the Strife Teaser that everybody but + me seems to have downloaded. +- Changed rail handling to be closer to Strife's: If you approach the rail from + the low side, you can jump "into" the railing. This is still better than + Strife's approach, which lets you jump into rails from either side. It's needed + to get out of an area on MAP04, and possible others as well. Unfortunately, it's + really ugly behavior and will probably be reported as a bug by somebody who + doesn't know why he got stuck in a rail. +- Fixed: P_ChangeSwitchTexture() did not set a value for *quest if no switch + textures were found on the sidedef, so you could get random stat increases in + Strife by breaking two-sided glass lines if only one side of the line had a + "switch" texture. +- Improved the wandering behavior of friendly monsters. Now they use the actual + chase states instead of the look states, so they animate naturally. +- Fixed: P_RandomChaseDir() thought angles were sorted in the wrong order, so it + never picked a random chase direction. +- Fixed: I forgot to flag the DoomPlayer as friendly. +- Added the friendly flag for use in DECORATE. +- Fixed: AWeapon::CreateTossable() let you drop sister weapons independantly from + each other. It should only create a tossable version of the primary weapon and + make the other one go "poof." +- Fixed: Shadow Armor used the same invisibility powerup as Doom. It should be + a separate one, because Strife doesn't have the fuzz effect. +- Fixed: Strife uses a LINEHEIGHT of 19 for its menus, not 16 like Doom. There are + also a few other positional differences between the menus. +- ZDoom now offers the exact same translation tables as Strife, which change the + colors for more than just the player's suit. +- Changed P_RadiusAttack() so that anything that does fire damage does not thrust + the thing it hurts vertically. This fixes the phosphorous grenades' fire. +- Fixed: The Strife grenades should have MF3_CANBOUNCEWATER set so they can bounce + off liquid flats. They're not like Heretic bouncers in this respect. +- Fixed: Strife liquid flats *do* clip sprites ala Heretic/Hexen. I did not + know that. That means the StickInWater also needs to have MF2_FLOORCLIP set. + That also explains why WaterfallSplash doesn't show up in Strife. +- Fixed: StrifePuff should use the same actor-hit animation as StrifeSpark. They + only differ by their non-actor-hit animations. +- Fixed: The surgery kit ought to give you full health, not 100 health. +- Fixed: Flying mini-missiles used the wrong states from StrifePuff. +- Fixed: G_PlayerReborn() only gives the default inventory to the first copy of a + player in a level, which means a voodoo doll can get the inventory, while the + real player gets nothing. P_SpawnPlayer() must check if the player already had + an actor spawned for it and if so, transfer the old actor's inventory to the new + actor. +- Fixed: R_InitFuzzTable() is the wrong place to initialize fuzzviewheight. +- Fixed: The "give armor" cheat gave you the wrong armor. +- Fixed: The Dehacked ammo parser didn't calculate new BackpackAmount and + BackpackMaxAmount values. +- Fixed: A_CheckReload() still had AltFire and PrimaryFire swapped. +- Fixed: The NULL weapon check in P_CheckWeaponFire() was in the wrong spot. +- Fixed: The give cheat gave you X number of item instances instead of just setting + the item's Amount field. The same goes for ACS's GiveInventory command. + +October 30, 2004 +- Fixed: G_StartTravel() should only affect living players. Otherwise, the body of a + dead player will replace the live body that was spawned on the new level and the + player will stay dead. +- Fixed: Strife line type 188 needs to be repeatable so you can cross over it without + QuestItem16 and then cross over it again later with the item for it to have effect. + This opens the door to the castle. + +October 29, 2004 +- Fixed: The idclev cheat needs to call G_StartTravel(). +- Added a BackpackAmount and BackpackMaxAmount to the Ammo definition, so the amount of + ammo received with a backpack can differ from the amount picked up from a base ammo + item, and so the max amount can be configured too. +- Fixed: If you already had enough of something a merchant tried to give you, you would + get both the "enough" response and the affirmative response. +- Fixed: The Sigil was draining armor and not just health. +- Fixed: The Oracle's spectre wouldn't immediately chase after you if you killed the + Oracle with a dagger, and it wouldn't aggressively attack until you attacked it. +- Fixed: Strife floater blocking lines were not properly translated. +- AActor::DropInventory() now clears the MF_NOGRAVITY flag, since several Hexen items + had the flag set. +- Fixed: Not coop/deathmatch thing flags in BOOM maps did not work. MBF's friendly flag + wasn't handled either. + +October 28, 2004 +- Fixed: The player's inventory was wiped out when switching levels in deathmatch. The + player needs to be reborn every time they are spawned in a deathmatch game so that + they can get the default inventory. +- Fixed: P_ThingProjectile() should set the spawned thing's speed only if it is truely + a missile. +- Fixed: FindMostRecentWeapon() failed if a tome-ed weapon was ready. +- Fixed: AInventory::GoAway() returned false for items that should stay. +- Fixed: The flags for maplinedef2_t were signed. They were correctly unsigned for + maplinedef_t. +- Fixed: Ripper didn't set its death state. +- Fixed: GoldWandPuff2 should inherit from GoldWandFX1, not GoldWandPuff1. +- Fixed: AWeapon::CheckAmmo() thought you had enough ammo to use a weapon's alternate + fire mode if it didn't have an alternate fire. Hence, you could e.g. select the poison + crossbow right after receiving Strife's crossbow, even if you didn't have any poison + bolts. +- Fixed: The StrifePuff had the hit actor and hit wall states swapped. +- Fixed: APigPlayer::ActivateMorphWeapon() didn't check if you already had a snout. +- Fixed: The +moveup and +movedown keys only worked under water. +- Fixed: G_FinishTravel() needs to check for NULL duplicate players, which can happen if + a start spot doesn't exist for the player on the new map. +- Fixed: Puzzle items did not define their own use sound. +- Fixed: Most of the Doom powerups were stackable. +- Fixed: The fuzzy column drawer did not correctly clip the bottom of the posts to the + screen bottom of y-doubling was turned on. +- Fixed: The chainsaw's UpSound was mis-spelled as "weapos/sawup". +- Fixed: FindMostRecentWeapon() called P_SetPsprite to drop the old PendingWeapon. + But since it was a PendingWeapon, this meant it wasn't actually visible, so doing so + would change the weapon sprite. Worse, this function is only processed locally, so + it could mess up multiplayer and demos. Now A_Raise() checks for a pending weapon and + starts the current one dropping if it finds one. +- Added a NULL name check to FFont::FindFont() and FWadCollection::CheckNumForName() to + fix Daedalus crashing immediately. To fix it for real, the FBehavior constructor needs + to call UnencryptStrings() before calling FindLanguage(). Otherwise, none of the + strings are available. +- Fixed: Weapons you dropped magically had ammo, so you could cheat by dropping your + weapon and then picking it back up to give yourself more ammo. +- Fixed: DCanvas::DrawTexture() called NetUpdate() when a menu was open. This is bad + because it can cause menu keypresses to be processed during the menu's drawer + function. Specifically, the case that brought the badness of this to my attention + was the Strife conversation menu. If a choice was made while the menu was being drawn, + it would alter the data used for drawing the menu, and it could crash. This is probably + also why the screenshot in the load menu would sometimes disappear after selecting a + game. + +October 27, 2004 +- Fixed: AM_drawThings() drew bounding boxes in the wrong locations if am_rotate + was false. +- Did some miscellaneous GCC 3.4 cleanup. +- Moved the project files out of the src directory and into the base directory. + +October 26, 2004 +- Fixed: AHealth should have a default MaxAmount of 0, not 100, so it maxes out at + whatever the player's current max health is. +- Fixed: Using Dehacked to make an ammo-less weapon use ammo left the AmmoUse1 + property at 0. +- Fixed: A_CallSpecial() parsing was broken. +- Fixed: The peasants are not all the same speed. +- Fixed: A_AcolyteDie() was incomplete. +- Fixed: Light green and blue acolytes are supposed to have 60 health, not 70. +- Fixed: Changing Dehacked MaxArmor did not update ArmorBonus. Changing Dehacked + MaxSoulsphere did not update HealthBonus. + +October 25, 2004 +- Fixed: A_KlaxonBlare() used threshold when it should have used reactiontime. +- Fixed: The KlaxonWarningLight from Strife should not have its initial tic randomized, + so all the klaxons in a level can stay synchronized. +- Fixed: A_ItBurnsItBurns() didn't set the death sound to the burning death sound. +- Fixed: The "peasant/death" sound no longer links to all three death sounds, just the + first one, because that's the only one Strife actually played. +- Fixed: AActor::DropInventory() needs to call P_TryMove() on the dropped item, or + sector information might not be filled out correctly. +- Fixed: After changing item dropping to start the item out as not-pickup-able, + A_Beacon() was no longer able to clear the MF_SPECIAL flag, because AInventory::Tick() + would set it again. A_Beacon() needs to set DropTime to 0 as well. +- Fixed: The final frame for ExplosiveBarrel2 was fullbright. +- Fixed: If a powerup was blinking and you used an item to restore it, APowerup:: + HandlePickup() would restore the powerup without actually using the item. +- Fixed: AInventory::Tick() and AInventory::CreateTossable() now handle solid items + (specifically, the Degnin ore). +- Fixed: ASigil::SpecialDropAction() now gives a Sigil piece to every player in the + game. Previously, it tried giving it only to whoever the Sigil dropper was + targetting. If the monster was killed quickly enough, it was possible for it to + be targetting nothing at all. And there was also the possibility for it to be + targetting a non-player. +- Added a NULL player check to AWeapon::AttachToOwner(). +- Added IF_ALWAYSPICKUP for auto-activated items that you can have a maximum of 0 of + (such as the armor bonus), so you can take them off the map even if you don't really + need them. AHealth::TryPickup() also uses it for the Doom health bonuses. +- Fixed: Doom HUD crashed when trying to draw an inventory item without a valid icon. +- Fixed: ArtiBoostArmor tried to give the player BasicArmor instead of a + BasicArmorBonus when not playing Hexen. +- Fixed: A_FireCGun() could crash if the weapon's state was before the first + attack state. +- Fixed: Monsters always activated player-cross lines. +- Changed ArtiInvisibility to give you the newly added PowerGhost instead of + PowerInvisibility. Now you can use both types of invisibility without being + restricted by whether or not you are playing Heretic. +- Fixed: I forgot to make PowerupGiver's EffectTics do anything. Also added + BlendColor to PowerupGiver at Graf's suggestion. +- Fixed: I forgot to add IF_PICKUPFLASH for the Speed Boots and Tome of Power. +- Changed P_DamageMobj() so that spectral entities are subject to non-spectral + damage if the damage amount is one million or more. This lets P_Massacre() + kill them. +- Fixed mobj_statenames[] array in thingdef.cpp +- Fixed: I forgot to add a case for ADEF_MinMissileChance in infodefaults.cpp. + +October 21, 2004 +- 2.0.91 time, just so people stop posting the same crash log. +- Added a pickup delay after dropping, but it still seems to be problematic. +- Fixed: Classic BEHAVIOR lumps weren't having their scripts sorted. +- Fixed: P_TestActivateLine() always returned false for SPAC_MCROSS lines if the + ML_MONSTERSCANACTIVATE line was not set. +- Fixed: A_Wander() now clears the MF4_INCOMBAT flag, so you can talk to peasants + after fighting in their vicinity. Strife does not clear this flag there, nor do + I know if it ever cleared it anywhere. +- Fixed: AInventory::GoAwayAndDie() left the MF_SPECIAL flag set, so it was possible + for a player to try to pick up the item in the next tic before it destroyed itself. +- Fixed: AHealthTraining::TryPickup() ignored its superclass's return value. +- Fixed: Intermission screen tried to show post-E3 maps in Heretic. +- Fixed: Now that FWadCollection::FindLump() ignores lumps outside the global + namespace, skins couldn't be loaded. +- Fixed: PROP_Weapon_YAdjust used an unsigned byte, so negative yadjusts didn't work. +- Changed the size boxes around actors in map cheat view into a real feature instead + of something I quickly threw in for debugging. It's now accessed with am_cheat 3 + and works properly with rotating maps. +- Fixed: FActorInfo::BuildDefaults() checked ADEF_SkipSuper as a byte instead of + a word. +- Fixed: The artifact flash was not cleared from the Raven status bars when the + last item was used. +- Fixed: A_CustomBulletAttack tried to use A_CustomMissile instead. +- Fixed: New flag4 names in thingdef.cpp. +- Fixed: Cyberdemon was MF4_LONGMELEERANGE instead of MF4_MISSILEMORE. +- Fixed: Fullscreen inventory bar positions were wrong in Doom. +- Fixed: Hexen armor was quite broken. +- Fixed: S_StartSound() no longer tries to play sound ids below 0. +- Fixed: Terrain splash sounds were initialized to -1 instead of 0. + +October 20, 2004 +- Time to release 2.0.90, I think? +- Added some Strife keys to the controls menu. +- Did more work on the Strife status bar. I think it's feature complete now. +- Finished reimplementing the Heretic status bar. +- Made cholycount, mstaffcount, and flamecount local to the weapons that use them + instead of the players who fire them. The rain1 and rain2 members are now stored + in the shooter's inventory instead, so it should be safe to use the rain with + monsters. + +October 19, 2004 +- Added extrapolation for the Strife popscreen scrolling. + +October 14, 2004 +- Fixed: Using -warp with an ExMy game and only providing the map number only worked + if -warp wasn't the last parameter on the command line. +- Updated some powerup-related code for the new inventory system. + +October 12, 2004 +- Fixed: Quitting a game and returning to the title screen would not zero the + palette blend. +- Fixed: Missiles disappearing on horizon lines were still exploded. + +October 8, 2004 +- Added a scrolling effect for switching between pages in the keys pop screen. + +October 6, 2004 +- Fixed: Missiles with MF2_BOUNCE2 set did no normal damage. +- Added particle blood for the Heretic/Hexen blood functions. +- Added a fix for negative row offsets to non-power of 2 height textures. +- Continued my R_FakeFlat() fix from yesterday: It didn't copy the control sector's + lighting either. +- LEVEL_SWAPSKIES is now ignored if LEVEL_DOUBLESKY is set. +- Fixed a possible crash in SC_GetString() if whitespace is the last character(s) + in a script. +- Fixed the sliding along diagonal walls behavior in P_HitSlideLine() so that it + uses correct math. (from code submitted on the forum) + +October 5, 2004 +- Removed MF_NOBLOCKMAP from ColonGibs, SmallBloodPool, BrainStem, and BloodPool. I + can't see any good reason for them to have this flag set. +- Fixed: player_s::Serialize() set PendingWeapon to WP_NOCHANGE. I have no idea why. +- Added a playing of "minotaur/attack3" to A_MinotaurAtk3(). +- Fixed: R_FakeFlat() did not set FakeSide to FAKED_BelowFloor when viewing a + fake plane with SECF_CLIPFAKEPLANES and SECF_FAKEFLOORONLY set and the fake floor + was above the real ceiling. +- Fixed: DArgs::GatherFiles() would hang on files with unexpected extensions. +- Autostarting games (i.e. co-op) of Hexen now use the map set as the first map, + so you can play co-op Deathkings without knowing Deathkings starts on MAP41. +- Added range checks to C_DoKey(), C_ChangeBinding(), and C_GetBinding(). +- Fixed integer overflow in P_SetSlope() for very extreme slopes. +- Stopped outputting the exception information to the crash log for an + EXCEPTION_ACCESS_VIOLATION when run under a pre-NT kernel, because those seem to + fill it with 0xFF instead of anything meaningful. + +October 4, 2004 +- Fixed: The mace death ball did full damage to teammates. +- Fixed: The font translation builders counted the transparent color as a visible + color and erroneously included it in the calculations, making every range lighter + than they should have been. +- Fixed: Giving the player a weapon when they were not already using one would not + bring the weapon up. (Note: Not bringing the new weapon up if the player is + already using a weapon is normal behavior.) +- Fixed: PickNextWeapon() and PickPrevWeapon() crashed when the player had no + ready weapon. +- Changed MakeKey to return a value of 0xFFFFFFFF for NULL strings. +- Changed the centerview command to send a DEM_CENTERVIEW event instead of using the + ticcmd_t structure to do it. Now it works while the game is paused. +- Changed particle visibility calculations so they use r_SpriteVisibility instead of + a separate variable pre-multiplied by 2. So now there is no r_ParticleVisibility + to overflow. +- Removed the 3-digit restriction on large fullscreen HUD numbers. +- Fixed: G_LoadGame() did not check for a NULL name. +- Added the -nojoy command line parameter to disable the enumeration of joysticks, + effectively disabling joysticks regardless of the use_joystick cvar. +- Reduced the maximum FOV from 175 to 170. +- New: With the (non-overlayed) automap on, a cut-down rendering process is performed + so that the automap can update while you move around. +- Fixed the switch and animation parsers so they can use overridden textures. +- Changed the warp command so that it gets sent across the loopback device. +- Changed the default item respawning behavior so that the dmflag is observed in all + multiplayer games, not just deathmatch. +- Fixed: Thing_Projectile did not set the projectile's speed. +- Fixed: The banishment device did not work on non-monsters. Normally, that's okay, + but it didn't work on players either. +- Fixed: Ambient sounds in Doom-format maps could prevent players from spawning. +- Fixed: The scripted version of Scroll_Texture_Both now checks to make sure the + specified line side is valid. +- After P_SetupLevel() calls P_LoadThings(), it now sets the healths of the players + to match their actors, in case their voodoo dolls were were fragged during the + spawn process. (Plutonia MAP06) +- FindShortestTextureAround() and FindShortestUpperAround() now return the height of + the null texture if none of the sector's side have a corresponding texture. +- Changed the minotaur drops so that (1) Minotaur always drops and (2) MinotaurFriend + never drops. +- Added a dummy actor with doomednum 32000, so Doom Builder's camera won't show up + in maps. +- Added a minimum screen size of 320x200 to the Win32Video mode enumerator. + +September 29, 2004 +- Removed the bStaticName texture flag. +- Added support for autoactivating items with a MaxAmount of 0. This lets me use the + same armor classes for Strife (which can stack armor) and Doom/Heretic (which cannot + stack). + +September 28, 2004 +- Merged in my the old Linux changes I made just after releasing 2.0.63. + +September 7, 2004 +- Stopped "*** SOUND DEBUG INFO ***"'s flashing. +- Changed the default resolution from 320x200 to 640x480. +- Added some sound precaching now. Sounds that are stored in an Actor's members + are now loaded at level load time, and those that aren't are unloaded. Is this + enough or should I also scan scripts for strings that could be sounds? +- Fixed a bug I added when I fixed the palette scrambling just after switching to + fullscreen mode. The WM_PALETTECHANGED message could be received during a drawing + operation, but it was still handled immediately anyway. So after doing that, the + screen would no longer be locked, and drawing operations would be referencing a + NULL pointer. Now the reosurce freeing and restoring waits until the next Lock call. + +August 31, 2004 +- Fixed: The vampiric mode of the serpent staff brought you down to 100 health if you + were over it. + +August 25, 2004 +- Fixed: PIT_CeilingRaise would move overlapping things that did not have MF2_PASSMOBJ + set. +- Fixed: Selecting an episode not present in the shareware Heretic told you you needed + to buy Doom. +- Fixed: PTR_UseTraverse didn't consider ML_BLOCKEVERYTHING lines to be blocking. +- Fixed: PTR_AimTraverse didn't consider ML_BLOCKEVERYTHING lines to be blocking. +- Fixed: After pressing +use to load a save game after you die, +use would still be + down after the load finished, and you could open doors immediately. Nasty if there + was some mean thing behind the door all set to kill you. +- Fixed: Sector special transferring moving floors also copied a sector's secret flag. +- Changed the player setup menu to use the arrow cursor instead of the skull cursor. +- Changed FWarpTexture::MakeTexture() to allocate a temporary buffer instead of using + a fixed sized 256-byte one. +- Changed sprite flipping so it flips the sprite's left offset too. +- Fixed: You could use items on the intermission screens between levels. +- Changed the ACS thingsound command to use CHAN_AUTO like the other ACS functions. +- Fixed: Flying things could get stuck inside rising floors. + +August 14, 2004 +- Fixed sign problms with door light tags. +- Fixed: PIT_CheckOnmobjZ()'s "under thing" check used < instead of <=. This + is why falling stacks of monsters would get stuck and be unable to move. + +August 10, 2004 +- Added support for drawing masked and translucent flats that are part of + a stack. The amount of translucency is controlled by the first argument + of the 9077 and 9078 things. At the moment, this is only for unsloped flats. + +July 29, 2004 +- Added checks in AAmbientSound::(De)Activate so that you can't activate it + when it's already activated or deactivate it when it's already deactivated. +- Fixed: addmenukey did not ensure that the ControlsMenu.items pointed to the + first entry of CustomControlsItems, so if you added too many controls and the + array needed to resize, the ControlsMenu would no longer point to valid data. +- Did some fullscreen palette work now that I somehow ended up with a program + that _always_ blows up my palette within a second of switching to fullscreen + mode. Now when the game receives WM_PALETTECHANGED messages from other windows + while it's fullscreen, it immediately queues up a palette update event to + undo what the other window did. Other programs shouldn't be messing with + the palette when they don't even have the focus, but this obviously doesn't + stop them from doing it anyway. :-( Hopefully, this makes vid_palettehack + obsolete. Also added vid_showpalette cvar to draw the palette to the screen + for debugging purposes. Thanks to that, I can see that the first and last 10 + colors are being kept at the standard system palette colors after some other + program alters the palette in fullscreen mode, and no amount of + IDirectDrawPalette::SetEntries() calls will change them. I need to release + and recreate my surfaces and palette, or I won't be able to touch them. +- Added separate rgamma, ggamma, and bgamma cvars to control the gamma of + individual color components in fullscreen mode. These are multiplied to + with the gamma cvar, so that cvar still controls the overall gamma. I need + this because my monitor is extra green, and the drivers don't gamma adjust + paletted displays for me. + +July 28, 2004 +- Stopped using FSOUND_Sample_Upload for everything. It seems to be even more + broken with the latest FMOD. + +July 26, 2004 +- Added a NULL pointer check to the main P_TraceBleed function that takes a + target, because D-ONAHD can cause this to happen some times when the imps + shoot their BFGs in A_BFGSpray. So linetarget also gets copied to a local + variable before being used in A_BFGSpray, since P_DamageMobj apparently can + change it. +- Updated the FakePickup and DehackedPickup classes so that they work with the + new inventory system. +- Added coop starts 5-8 for Strife because they're on the Bishop's Tower map + for some reason. +- Finally added the special deathmatch logic for the enemy-finding used by + rebels spawned from a teleporter beacon. + +July 22, 2004 +- Fixed the default Heretic MAPINFO: The episode 5 maps are supposed to play the + music from episode 2 (not 1), and the episode 6 maps didn't have any music at + all. +- Fixed: The Heretic ambient sounds were off by one. +- Changed the default for opl_freqeuncy to 49716, since that's the rate the + chip actually played at in SoundBlaster/AdLib cards, and the emulator performs + very poorly when it needs to downsample. Also added new OPL frequencies to + choose from in the menu. +- Fixed: OPLmusicBlock::ServiceStream could crash on non-looping songs, because + the return value FALSE was never passed along to tell FMOD to stop the stream. + +July 19, 2004 +- Changed DDrawFB::LockSurf so that a result of DDERR_UNSUPPORTEDMODE when + trying to recreate a surface is non-fatal. The game should now be able to + survive a screen saver and power suspend. +- Reimplemented the key display on Doom's status bar. + +July 16, 2004 +- Reimplemented the Hexen status bar's key bar. Also improved the status bar so + that it can show ammo from other games. +- Fixed the ammo and key displays for Heretic's status bar. Plus, now Heretic's + status bar will properly update when you lose a key, which it didn't before. +- Reimplemented the invulnerability powerup. + +July 15, 2004 +- Fixed: Morphing a monster and then using the kill monsters cheat would crash + because the original unmorphed version would be destroyed, then when the + morphed one died, it tried to destroy the original again, because the + pointer hadn't been set NULL yet. Since the actual crash is from unlinking the + actor twice, AActor::Destroy() now sets MF_NOSECTOR and MF_NOBLOCKMAP after + unlinking an actor. +- Fixed: Trying to use "-" as a sky with MBF's 271/272 linetypes crashed. Now + it ignores the control line and just draws a normal sky. +- Fixed: G_DoReborn() needs to do a complete new game, not just a reload of the + current map, if the player is dead and wants to respawn without a most recent + save. +- Changed FWadCollection::FindLump() so that it only returns lumps that are in + the global namespace. Now it won't return lumps that got moved into a skin + namespace. On a related note, FWadCollection::SkinHack() now prints a warning + when it thinks it finds a skin wad with maps in it. +- Fixed: The "you are here" marks on Heretic's inter-level maps were no longer + drawn. +- Updated to FMOD 3.73. + +July 14, 2004 +- Moved the full-screen HUD coordinate logic out of DBaseStatusBar and into + DCanvas::DrawTexture. This is so that powerups can draw their status icons + themselves without needing to hook into the status bar. +- Reimplemented the Tome of Power. +- Removed DCanvas::DrawPageBlock(). + +July 13, 2004 +- Fixed positioning of ML_DONTPEGBOTTOM for lower textures. Putting a sky + ceiling on both sides of the line always makes unpegged positioning + relative to the back sector's ceiling, not just when the back ceiling is + above the front ceiling. +- Fixed: Saving a game would momentarily stop floatbobbers from bobbing. + Since actors have a FloatBobPhase member, their height doesn't need to be + adjusted when serializing them. (However, since the adjustment just gets + undone, I'm not sure why it was a problem.) +- Fixed 16-rotation sprites so that the rotation boundaries are where you would + expect them to be. +- Re-Fixed: CT_Drawer could try drawing the scoreboard when deathmatch is + true, but you hadn't started a game yet. +- Added the inverse video flash when firing the Sigil. +- I don't know why the Oracle's spectre is able to teleport across its + monster blocking lines, so I've given it the MF3_NOBLOCKMONST flag. +- Translucency of things in Strife has been corrected. Strife uses 25%/75% + translucency. Walls are 75% and it's flipped to 25% for sprites. However, + the spectres are really hard to see, so I've given them 33% translucency. +- Added genuine Strife falling damage. It is extremely unforgiving, so you'd + better try not to fall too far while playing Strife. +- Added the yellow and red colors for the Strife health bar when your health + drops to 20 and 10 respectively. + +July 12, 2004 +- Finished a play through of Strife, from beginning to end. (Woohoo! It works!) + Now to finish the things that aren't quite right... +- Miscellanoues Strife bug fixing. + +July 10, 2004 +- The eight SPAC type has now been assigned: SPAC_PTOUCH, for when projectiles + either impact or cross a line. Strife line type 182 needs this. + +July 9, 2004 +- Miscellaneous Strife fixing. +- Better support for not having a ready weapon at all. +- Changed the Sigil to use the normal weapon sprite instead of the flash + sprite to show how many pieces you have. + +July 8, 2004 +- Fixed: Interpolations were not cleared when loading a brand-new level. +- Added support for snesapu.dll 2.0, which happened to be as simple as + changing the version check, since none of the changes from 1.01 affect + the functions I use. + +July 7, 2004 +- "Fixed:" Missiles that moved perfectly vertical would do no damage. Now + missiles without any x/y velocity are given a very small x/y velocity so + that they are not quite moving vertical. +- Added the GetSigilPieces() ACS command, which returns the number of Sigil + pieces the activator has obtained. +- Added a third parameter to Teleport_NewMap that, when set to TRUE, will + cause the player to keep their current facing when they move to the new map. +- Added the Hexen intermission text between hubs that I had forgotten about. +- Added map redirects, so if a player is carrying a particular item, they go + to a different map instead. (Used for Strife maps 3 and 7.) + +July 6, 2004 +- Added support for the teaser version of Strife. It seems to be based on an + older version of Strife than the one that was released to retail, so the + mobjinfo list is different, the dialogues are slightly different, and some + items have different names. The Teaser is fully playable. + +June 30, 2004 +- Added Strife's fire and disruptor deaths. +- Corrected the missile attack chances for the Strife monsters. + +June 26, 2004 +- Added Strife's breaking glass. + +June 25, 2004 +- Added a fix for Strife's LASERB01 texture. The Doom renderer ignored patch + y offsets on masked mid-textures, so it got drawn as if the beam was at the + top of the texture instead of the bottom. The "fix" is to adjust the rowoffset + of the sides that it appears on. + +June 24, 2004 +- Made some corrections to the Strife blood and bullet puffs. +- Removed the global variable PuffType. It's now a parameter to those + functions that use it. HitPuffType is also gone, because giving a puff a + CrashState can make the same distinction. +- Added Strife's scanner. +- Added Strife's targeter, although it's kind of a useless item when the + player can just go to the options menu and turn on a crosshair. + +June 23, 2004 +- Added th IF_INVBAR flag so that only selected items show up on the inventory + bar. + +June 21, 2004 +- Removed the soundtarget sector property and made it an actor property. Now + newly spawned actors won't wake up if you happened to make noise near their + spawn point earlier. + +June 20, 2004 +- Fixed: A_FreezeDeathChunks could divide by zero for very small actors. +- Fixed: The EndPic "map" in mapinfo didn't work. It always tried to show the + graphic "endseq" instead of what was specified in MAPINFO. + +June 19, 2004 +- Finished adding all of Strife's slideshows. + +June 18, 2004 +- Removed F_DrawPatchCol, since DrawTexture can do its own clipping. + +June 15, 2004 +- Added the Sigil, except for the inverse colors when shooting it. Does anyone + else think its fourth mode really weak compared to the third and fifth? + +June 10, 2004 +- Moved the chicken speed mods out of P_MovePlayer and into + AChickenPlayer::TweakSpeeds. +- Added a check for NULL cameras to the very end of CT_Drawer() where it checks + to see if the scoreboard should be shown. +- Fixed: Trying to activate some manual types of specials would activate every + tag 0 sector in the map if the back sector was already moving. +- Added support for paths with . in them to DArgs::GatherFiles when it checks + if a file was specified with an extension or not. +- Added support for \ as a path seperator in DefaultExtension on Win32. +- Added the vid_displaybits cvar to control how many bits per pixel the + fullscreen display gets created with. The game is still rendered in 8-bit, + but this is for the benefit of cards that don't support that or work better + with non-8-bit displays. +- The vid_attachedsurfaces cvar is now ignored unless you are running NT 4. + +June 9, 2004 +- Fixed: FDynamicColormap::BuildLights() did not check for a NULL Maps pointer. +- Fixed: Masked textures and sprites were not drawn correctly inside nested + skyboxes because they would be drawn in the front skybox before drawing the + second skybox, so the second skybox would cover up the ones in the first + skybox. + +June 2, 2004 +- Removed all the other network commands related to managing weapon slots. + Determination of which weapon to switch to is now done entirely on the + local machine and sent using DEM_INVUSE, so the slots don't need to be + replicated to the other players. + +May 28, 2004 +- Removed DEM_WEAPSEL as part of the inventory rewrite. DEM_INVUSE works + instead. This also means the weapon console command is no more. + +May 18, 2004 +- Added division/modulus by zero checks to the ACS VM. +- Implemented the ACS_ExecuteWithResult special so the Strife specials + implemented in ACS can function correctly. + +May 17, 2004 +- Removed the TeleportSide global variable and made it a line special parameter, + which it should have been from the very beginning. +- Increased the limit for local script variables from 20 to 65535. + +May 11, 2004 +- Added Strife's delayed damage sectors. +- M_ActivateMenuInput now resets the state of the game buttons, so +use will + work right away after talking to somebody. +- Added another validity check to FPatchTexture::MakeTexture to make sure the + column doesn't go past the end of the patch when fed bad data. +- Added Strife's merchant conversation animations. + +May 7, 2004 +- Added Strife's animated doors. + +May 6, 2004 +- Added support for clipping midtextures on all lines, because I think Strife + looks better that way. (Even though it looks like Strife does not do this.) +- Added Strife's railing and floater-blocking line flags. +- Add Strife's status bar popup screens. + +May 5, 2004 +- Moved artifacts to the new inventory system. + +May 1, 2004 +- Fixed: Build palette loading was unreliable after adding desaturation support + to Sector_SetColor. + +April 30, 2004 +- Did some work on Strife's status bar. + +April 25, 2004 +- Added Strife's title sequence. + +April 21, 2004 +- Added Degnin Ore. + +April 20, 2004 +- Added lots of Strife line specials, ~30 done entirely through ACS. +- New ACS p-codes: + PCD_CASEGOTOSORTED: Faster replacement for PCD_CASEGOTO. + PCD_LSPEC5RESULT: Same as PCD_LSPEC5, but the result of the special's + execution is left on the stack. +- New ACS internal functions: + int GetLineRowOffset (); + Returns the front side's rowoffset for the activating line. + + fixed GetActorFloorZ (int tid); + Returns the highest floor point underneath the actor. + + int GetActorAngle (int tid); + Returns the actor's angle. 65536 is 360 degrees. + + fixed GetSectorFloorZ (int tag, int x, int y); + Returns the sector height (fixed point) at coordinates (x, y). + (x, y) are not fixed-point, so you should specify (32, 16) + instead of (32.0, 16.0). + + fixed GetSectorCeilingZ (int tag, int x, int y); + Same as GetSectorFloorZ, except for ceilings. + + void SetResultValue (int value); + Set's a script's "result value." Needs to be used before any + functions that make the script wait. ACS_ExecuteResult and + ACS_LockedExecuteResult will return this value. + +April 12, 2004 +- Changed the respawnmonsters flag into an int that holds the respawn + interval, since Strife respawns at 16 second intervals, and Doom uses + 12 second intervals. + +April 11, 2004 +- Added Strife's Templar. + +April 10, 2004 +- Added Strife's Loremaster and Stalker. + +April 9, 2004 +- Added Strife's ceiling turret and fixed the alarm klaxon. +- Added the Strife quest items. + +April 8, 2004 +- Converted keys to the new inventory system and added Strife's. + +April 7, 2004 +- Added Strife door sounds. + +April 6, 2004 +- Added Macil. + +April 2, 2004 +- Converted the Heretic and Hexen artifacts to the new inventory system. + +March 31, 2004 +- Converted Doom's powerups to the new inventory system. + +March 30, 2004 +- Converted armor and health to the new inventory system. + +March 26, 2004 +- Fixed: The mauler's secondary fire had the wrong states. +- Started transitioning over to the Unreal-like inventory system, starting + with the easiest first: Puzzle items (since they basically just sit in your + inventory until used), then ammo and the backpack. +- Made the dialogues prettier with shadow boxes behind the text. + +March 23, 2004 +- More dialogue work: Now you can pick responses to the things NPCs tell you + and drive the conversations along further. You can also get items from the + responses. However, item checks aren't in yet, so no item-specific dialogue + branches work. +- P_NoiseAlert now sets a new object flag, OF_IsSoundTarget, so that + soundtarget clearing will work with non-players. +- Changed P_NoiseAlert( self, self->target ) in A_AlertMonsters() to + P_NoiseAlert( self->target, self ), so monsters will target the player + who shot the projectile instead of the projectile itself. + +March 22, 2004 +- Started work on the Strife conversation system. You can now +use things and + they will say something to you, but you can't do any sort of conversing yet. + Plus, Strife monsters now drop stuff when they die. +- Added autoloading of voices.wad when playing Strife. + +March 17, 2004 +- Changed COMPATF_NOTOSSDROPS behavior so that the items spawn at the monster's + feet instead of on the floor. +- Changed the maximum thrust in P_DamageMobj() to 10*FRACUNIT. (Previously, it + was only clamped to this if it was so large that it went negative.) +- Added AmmoPics for the Strife ammo types. +- Fixed: The phosphorus grenades used the HE grenades pickup message. +- Added some code from P_SpawnProjectile to P_Thing_Projectile so that it can + support floor/ceiling huggers. + +March 13, 2004 +- Fixed: ARealGib's PROP_SpawnState was accidentally deleted. +- Fixed: P_Thing_Projectile always returned false when spawning non-missiles, + and when spawning missiles, only returned the status of the last missile. +- Fixed: P_SpawnPlayerMissile used the original angle instead of the aimed + angle to rotate the projectile in the X-Y plane. +- Fixed: AHolySpirit::SpecialBlastHandling() compared "< BLAST_FULLSTRENGTH" + instead of "== BLAST_FULLSTRENGTH". +- Changed the parser for SS_CMD_VOLUME in s_sndseq.cpp to use a floating point + division instead of an integer division. (Whoops!) +- Fixed: Pressing backspace on a file in the save game menu and then answering + "no" when asked if you really want to delete the file would mess up the + savegame menu. +- Removed the WeaponNames array from p_acs.cpp, because wpnlev1info provides + the same information. + +March 8, 2004 +- Removed WIF_FIREDAMAGE, as it was unused. +- Changed AWeapon::OldStyleID() so that it is no longer virtual. Instead, it + searches the wpnlev1info array to find the info that points to that class. +- Replaced A_CallSpecial and A_Script keywords in the thingdef parser with + support for using specials by name. (e.g. Instead of using + A_CallSpecial (80,...) or A_Script (...) you use ACS_ExecuteAlways (...) + instead. +- Changed SC_ScriptError to be varargs, so passing parameters for the format + string is more straight-forward. + +March 3, 2004 +- Eliminated the CustomActor class by moving some of its data into class + metadata and the rest of it into function parameters. Now custom actors + can properly derive from built-in classes. +- Replaced A_Explode in thingdef.cpp with A_ExplodeParms, so the explosion + parameters can be a property of the state instead of a property of the + actor. +- Renamed __BIG_ENDIAN__ to WORDS_BIGENDIAN to match autoconf's name for the + #define. + +March 2, 2004 +- Added metadata support for TypeInfo, so classes can carry metadata around + with them. This is intended to allow actors in DECORATE to properly derive + from built-in actors. Whenever a scripting language for DECORATE gets + implemented so that everything can be defined there instead of in C++, the + metadata should no longer be needed. + +February 10, 2004 +- Upgraded to zlib 1.2.1. +- Merged in Graf Zahl's additions to thingdef.cpp. +- Fixed: Heretic wind specials would effect you while you were underwater. + Also turned off the Heretic wind for noclipping things. +- Added a check for empty subsectors to P_LoadSubsectors. + +February 6, 2004 +- Fixed: DObject::IsKindOf used StaticClass instead of GetClass. +- Added Graf Zahl's thingdef.cpp implementation and modified it to work with + a more C-like mode in sc_man. +- Fixed: P_CheckFakeFloorTriggers could crash if the action caused the player + to teleport to a new sector without any sector actions. +- Fixed the Hexen armor depletion so that it doesn't overflow on very large + damage amounts. +- Fixed: An extremely dead imp that crashes before executing A_ImpXDeath2 would + get stuck floating in the air. +- Changed menuactive into an enum and merged WaitingForKey into it. Now closing + the menu automatically disables the menu's key waiting mode. Also fixed, + C_ToggleConsole so that the console can never be dropped down while the menu + is open. Before, it was possible to do this by pressing Esc and ` during the + same tic. + +February 5, 2004 +- Altered the BOOM pusher/puller/current effects to apply to anything with + MF2_WINDTHRUST and removed the restriction that it doesn't apply to things + with MF_NOGRAVITY. To make it work, I also had to remove MF_NOBLOCKMAP from + all the wind-thrustable Heretic/Hexen projectiles. +- Fixed: Using the spray command with a non-existant decal crashed. + +February 3, 2004 +- Removed r_experimental. + +January 29, 2004 +- Added the -oldsprites command line argument to rename sprites in all + wads instead of just sprites in the IWAD. +- Changed Heretic's knight sounds to be prefaced by hknight/ instead of + knight/. +- Changed the Strife weapon names for the ACS inventory commands to match + their actor names. +- Added Hexen's water drip (spawnnum 95). Changed the Hexen WATR->UWAT + renaming to WATR->HWAT. +- Added a note to the map command that suggests you use changemap instead + while playing a network game. +- Fixed: Chat mode could not be used outside of an actual level. +- Fixed: The automap still tried to draw teleporters with custom colors even + when am_usecustomcolors was false. +- Fixed the Hexen armor saves so that it doesn't overflow on very large damage + amounts. +- Put back the AKey::TryPickup restriction on picking up more than one key of + the same type, but now it's restricted to multiplayer games only. Single + player will still be able to pick up more than one. + +January 26, 2004 +- Fixed: FLOATRANDZ overflowed when the space between ceiling and floor was + more than 297 units. + +January 22, 2004 +- Fixed: side_s::GetLightLevel() got the light of "sidedef" instead of "this". +- 2.0.61 +- Optimized R_PrecacheLevel() so that it does not unload graphics that are + definitely used on the level. +- Optimized the primary loop in P_GroupLines() so that it is much faster on + large maps. It was previously O(m*n); now it is O(m+n), and Vrack 3 loads + in well under a second. +- Changed the Heretic's imp's sounds to use the himp/ prefix instead of imp/. + +January 21, 2004 +- Fixed: The Heresiarch's spell balls above his head did not update their + sector information as they rotated. Neither did his shield balls. +- Fixed silent teleporter orientation in EV_Teleport(). +- Fixed calls to P_Teleport() in a_korax.cpp and a_teleportother.cpp that used + weird parameters. +- Changed FDecalLib::GetDecalByName() so that it does not call GetDecal() on + the decal it finds, so it can be used to get decal groups. +- Fixed: Saving a game on one version of a map, then adding a BEHAVIOR to it, + then reloading would not fully invalidate the player when starting a new + game after the resulting error message. (G_NewInit now initializes players + to PST_DEAD). +- Added a screenshot_dir cvar to allow automatically-named screenshots to be + saved somewhere other than the current directory. +- Fixed: M_ScreenShot left the display locked if it could not open the file to + write to. +- Added decals for the marine hitscan weapons. (I think it's funny that the + term "hitscan" has come to be used to describe Doom's instant-hit weapons + even though it comes from Build. :-) + +January 17, 2004 +- Fixed: PIT_CheckOnmobjZ would not let things stand on corpses. +- Fixed a bug in A_MinotaurLook where I forgot to convert a special1 reference + to a tracer reference. +- Fixed: Obituaries were shown when voodoo dolls died. +- Fixed: Light_Fade and Light_Glow divided by zero when using zero as the + tics argument. +- Fixed: Killing a PlayerPawn that isn't attached to a player crashed. +- Fixed: Summoning before starting a game crashed. +- Fixed: Block everything lines did not block railguns. + +January 13, 2004 +- Fixed: +moveup and +movedown did not work with the fly cheat. +- Fixed: The Sentinel was missing the MF_DROPOFF flag. Also reduced its + "bouncing" when it was in a float. I still wasn't satisfied with that, so + I took its MF_FLOAT bit away. +- Fixed: The Strife flamethrower's refire state wasn't using frame B. +- Fixed: Acolytes only used frames A and B in their chase states because I + forgot to change them when copying and pasting. +- Removed the nightmare warning when starting a bloodbath game in Strife. +- Fixed: Nightmare skill ignored the starting map defined with episodedef. +- Changed sv_fastweapon 2 handling so that it only applies to weapon + psprites and not flash psprites. +- Changed Thing_Activate/Deactivate so they can be used to prevent frozen + corpses from shattering automatically after a delay. (They can still be + shattered by shooting them or pushing them off a ledge, however.) + +January 12, 2004 +- Changed AKey::TryPickup so that it doesn't fail if the player already has a + key of the same type. +- Fixed: The TranslucentLine special could not used in a script if a line was + used to activate the script. +- Changed the damage amount for automatic death from 10 thousand to 1 million, + for people who like really strong monstres. + +January 8, 2004 +- Added some more player properties that let you add and remove player powers + through ACS. +- Renamed pw_shield and pw_health2 to pw_unused1 and pw_unused2 because Heretic + never used them. For the sake of savegame compatibility, they have not been + removed. +- Changed the dragon skin bracers so that when they're used outside of Hexen, + they add 50 points of armor. Also changed the armor bonus so that if you have + more than 200 armor points, picking one up won't drop you down to 200. +- Added the WIF_AMMO_OPTIONAL flag so that the fighter's hammer and axe can be + specified as using ammo so that they show up in Doom's fullscreen HUD. +- Changed masked texture drawing so that Y offsets behave like any other walls: + by texel unless the texture requests otherwise. +- Changed APuzzleItem::ActivateArti() so that it always plays *puzzfail if the + puzzle item could not be used. +- Fixed: Splashing on a fake floor with SECF_CLIPFAKEPLANES set would use the + main sector's floor terrain instead of the control sector's floor terrain. +- Moved even more functionality out of A_WeaponReady so that weapon ready + animations can use delays longer than one tic and still fire well. +- Fixed my September 25, 2003 "fix" of the massacre code so that it doesn't + make already dead bodies shootable. +- Changed P_SightCheckLine() so that it also uses the absence of ML_TWOSIDED as + an indicator to stop the search, as it did a long time ago. +- Fixed: A_M_Refire did not terminate the attack if the marine had no missile + attack and the target had moved out of range. +- Fixed: DTA_VirtualHeight scaled the texture's y location by the display's + width instead of its height. +- Added sprite renaming so that unique actors can use unique sprites. Only + sprites in the main IWAD are renamed, so if you want to supply a new sprite + in a PWAD, you need to use the sprite's new name instead of its old name. + Sprites are renamed as follows: + heretic.wad: HEAD -> LICH + + hexen.wad: ARM1 -> AR_1 + ARM2 -> AR_2 + ARM3 -> AR_3 + ARM4 -> AR_4 + BARL -> ZBAR + CAND -> BCAN + GIBS -> POL5 (this makes it the same as Doom's gib sprite) + ROCK -> ROKK + SUIT -> ZSUI + TRE1 -> ZTRE + TRE2 -> TRES + WATR -> UWAT (unused, but Strife also has a WATR) + + strife1.wad: ARM1 -> ARM3 + ARM2 -> ARM4 + BAR1 -> BARC + BARL -> BBAR + BLST -> MAUL + CNDL -> KNDL + LOGG -> LOGW + MISL -> SMIS + PMAP -> SMAP + POT1 -> MPOT + SHRD -> SHAR + SHT2 -> MPUF + SPID -> STLK + TLMP -> TECH + TRE1 -> TRET + TRCH -> TRHL + VASE -> VAZE +- Fixed: The Doom Allmap powerup played the normal item pickup sound instead of + the powerup pickup sound. +- Fixed: Fog boundaries were still drawn when using a fixed colormap. + +January 6, 2004 +- Fixed: R_InitTextures() did not ensure that the final TEXTURE1/TEXTURE2 lumps + had not already been read, so it could end up loading them with the wrong + PNAMES. The easiest example of this bug is to start the game with: + -iwad doom2 -file doom doom2 +- Fixed: You could take Heretic keys but you couldn't check them with ACS. Also + added support for doing both with Hexen keys, since it was missing. +- Added some checks to A_SpawnFly to appease anybody who tries to break things + by using dehacked patches where they don't belong. +- Fixed: If you used spynext/spyprev to look through another player's eyes and + that player quit, the game would crash because it will still try to draw + through that player's eyes. +- Added a DEM_SINFCHANGEDXOR message for flag cvars that alter server settings + (i.e. all of them). The reason for this is because if you exec a script that + alters multiple flags, only the last change would take effect, because they + don't get processed until after the script finishes execution. +- Fixed: G_AddViewPitch() adjusted LocalViewPitch even when the dmflag + DF_NO_FREELOOK was set. +- Fixed: PIT_StompThing was missing the MF2_TELESTOMP check for Heretic/Hexen. +- Fixed: Starting a game with the dmflag DF_NO_FOV set would set everybody's + view to an FOV of 0 because the dmflags callback gets called before the + arbitrator's DesiredFOV is initialized. + +January 2, 2004 +- Changed P_FinishLoadingLineDefs so that it rounds the wall length to the + nearest integer when determining TexelLength instead of always round down. +- Fixed: Using an empty string with HUDMSG_TYPEON caused a crash. +- Fixed: A buried wraith could enter its pain state while rising from the + ground and not properly finish raising, so its bottom portion would remain + clipped for the rest of its existance. +- Fixed: Using a switch to start a script on another map would not make the + switch switch. +- Fixed: Sliding along the backside of a blocking two-sided line was bad. +- Fixed: The second sky on a map defaulted to -NOFLAT- instead of the same + texture as the first sky. +- Moved the key blocks from Heretic's fullscreen HUD so that they don't overlap + the health vial. + +December 13, 2003 +- Added another case to ScanForFlatHack to fix darkhour.wad: F_START - flats - + FF_END - more flats - F_END. I'm surprised it worked before, but it did, so + I'm inclined to again make it work unmodified, even if the wad _is_ wrong. + +December 12, 2003 +- Added a hack check for Doom 1's BIGDOOR7 texture, which y offsets its patches + at -4. (Doom clamped all negative patch y offsets to 0, which is why it shows + up okay in Doom.) +- Added a fix to the blockmap tracers where all the blocks along the trace are + crossed on their corners. +- Fixed a potential crash in DBaseStatusBar::DrawMessages() when a HUD message + removes itself as part of its drawing process. +- Fixed: A few of the Strife weapons were erroneously defined with WIF_NOALERT. +- Fixed: Sky textures defaulted to 0 if a map had a MAPINFO that did not + specify the sky. Now they default to -NOFLAT- so you don't have to worry + about division by zero in R_DrawSkyStriped if the map tries to show a sky. +- Fixed: The floorLowerAndChange type for EV_DoFloor modified sec instead of + a temporary, which could cause crashes at worst and odd behavior at best + because sec is used again to determine whether a floor moved instantly. +- Changed a DivScale19 in R_RenderMaskedSegRange into a SafeDivScale19. +- Fixed: Trying to use the mdk command before starting a game caused a crash. +- Fixed: CreateFrameBuffer would not properly retry. +- Changed the maybedrawnow recursion inhibitter to use the current state + of the screen object instead of a local static variable. + +December 8, 2003 +- Fixed: If a wad had TEXTURE1 and TEXTURE2 lumps, then any duplicates in + TEXTURE2 took precedence over TEXTURE1. It is supposed to be the other way + around, with TEXTURE1 taking precedence over TEXTURE2. +- Prefixed the names of the Strife grenade launcher actors with "Strife". +- Fixed: DDoor did not serialize m_LightTag. +- Fixed the P_TranslateTeleportThings rewrite so that it sets the Teleport + special's TID to 1 instead of the tag. +- Added a check for MNTRZ0 to AT_GAME_SET(Minotaur). +- Fixed: The chaingun flash only showed frame one and not both frames one and + zero. + +December 6, 2003 +- Rewrote P_TranslateTeleportThings() so that it only assigns TIDs to things + in sectors with tag 0. +- Fixed: Teleporters by TID didn't work. +- Fixed: P_SpawnMissileXYZ spawned floor/ceiling huggers as if they could move + with a vertical component to their velocity. They can't, so it could result + in very slow moving projectiles when aiming at something nearby in the X/Y + plane but far away on the Z axis, because most of the projectile's speed would + try to go on the Z axis. +- Changed the Minotaur state fixup to be based on the presence of MNTRZ1 + instead of the game type. + +December 5, 2003 +- Fixed: When I went back to the blockmap-based sight code, I forgot to bring + over the enhancements for block-everything lines I had made for the BSP- + based sight code. +- Added a second argument to Teleport and a third argument to Teleport_NoFog + specials. This is a sector tag to filter the teleport dests with. Only + dests in a sector with a matching tag will be selected if the tag parameter + is non-zero. If tid is zero and tag is non-zero, then the old (and slow) + teleport dest based on sector tag is used so that Mordeth's trick can work. +- Added support for the BOOM local door light effect by adding an additional + parameter to all the Door_* specials to serve as the lighttag parameter. + The first argument still determines the door to open, so unlike BOOM, you + can use the effect with remote doors if you like. In the case of the + Generic_Door special, OR the type (the third argument) with 128, and the + first argument will be used as the lighttag parameter instead of the tag + parameter. +- Fixed two bugs with using the ACS setfont call to create fonts from images: + GlobalKerning was left uninitialized, and they weren't added to the global + font list, so they were recreated every time they were setfont'ed. + +December 4, 2003 +- Fixed: Voodoo dolls would also trigger the teleport zoom. +- Added 2048x2048 as the maximum size for a patch as a simple sanity check. +- Added a fix to the console's maybedrawnow() function to prevent recursive + calls to it. + +December 3, 2003 +- Fixed: The transfer lights specials are supposed to copy the source sector's + light level instead of propagating along changes from other transfer lights + specials. +- Added an armor display to Heretic's fullscreen HUD to match Doom's. +- Added a check for a NULL spot to Earthquake::Tick() so that if somebody + removes an earthquake's spot before the quake is over, it won't crash. +- Fixed: The Boom use-through flag was only being translated to SPAC_USETHROUGH + for lines with generalized line types and not for lines with normal line types. +- Fixed: P_ActivateLine() did not consider SPAC_USETHROUGH lines when deciding + if it should flip a switch texture. +- Fixed: In EV_DoCeiling(), ceilLowerToNearest made the ceiling go up instead + of down. +- Fixed: PIT_AddThingIntercepts() did not add anything the trace started in, + because none of the thing's sides faced the start of the trace. +- Added a check to A_FireCGun() to try to catch Dehacked patches that do + naughty things to the chaingun's flash states. +- Fixed: The bNoDecals property was not copied to every texture in an + animation range. +- Added the "range" keyword to ANIMDEFS so that it can be a true replacement + for ANIMATED. +- Fixed: Crushers in Hexen made monsters disappear instead of turning them into + piles of giblets. +- Changed P_SpawnPlayer() so that it doesn't telefrag *everything* inside the + player. Only monsters and other players will be telefragged now. +- Fixed: Hurting a voodoo doll and then dying from something else didn't + completely kill you. +- Fixed: mouse_sensitivity was no longer affecting mouselooking. + +November 26, 2003 +- Fixed: Ceiling type ceilRaiseToLowest (used exclusively by Ceiling_Generic) + set the direction to -1 instead of 1. +- Fixed: P_TranslateLineDef() ignored the BOOM passthrough flag due to + bad ordering. +- Fixed: A_WeaponReady did not center the sprites in case they had been + repositioned earlier. (Only really an issue with Hexen.) +- Fixed kerning support in V_BreakLines. + +November 24, 2003 +- Moved the +mlook and +strafe button handling for joysticks into + DI_JoyCheck(). +- Changed bots.cfg loading so that it is relative to progdir instead of the + current directory. +- Removed support for loading zdoom.ini from the user's profile directory + under Windows. +- Added Strife's acolytes. +- Added Strife's rebel(s). +- Added Strife's beggar(s). +- Added Strife's zombie spawner. +- Fixed: No map names were shown for custom maps in the intermissions. +- Added simple default kerning for fonts so that DBIGFONT can use it to + overlap the edges of two adjoining character cells. It does not support + per-character kerning pairs and probably never will. +- Added error checks to invnext, invprev, and useflechette so that they won't + crash if you try to use them before starting a game. +- Fixed: Picking up a DECORATE item would clear its special, so you wouldn't + be able to pick it up again if it respawned. +- Added translucency to lots of Heretic and Hexen actors. +- In PIT_CheckThing(), any checks against a bridge will treat the moving + actor as if it has MF2_PASSMOBJ set, even if it doesn't. This lets scrolling + floors carry scenery items underneath a bridge without causing the chaos + that removing MF2_PASSMOBJ globally would cause. +- Removed the dead player check from CheckIfExitIsGood() so that dead + players can exit a level, as they could in Doom. +- Added god mode and invulnerability as things that can replenish your air + supply, so you won't die almost immediately if you spend your time + underwater with them on and then they go away before you surface. +- Added checks to D_PostEvent so that it won't turn the players head when + the game is effectively paused. +- Added a new player flag, CF_WEAPONREADY, so that weapons which don't use + A_WeaponReady (like the fighter's axe) can still bob. +- Fixed: The savegame version number for 2.0.54/2.0.55 didn't get bumped + up. So the .55 update really only helps people who want to load pre-.52 + savegames. :-( + +November 23, 2003 +- Oops. Quick update from 2.0.54 to 2.0.55 to let old savegames load again. + Hopefully nobody downloaded 2.0.54 in the hour it was available. +- The sector an actor resides in now gets stored in savegames, because + different rules are applied for things spawned at level start than for + things spawned afterward. +- Added calls to SetWindowLongPtr to take away the window's border in + fullscreen mode and put it back in windowed mode. +- Fixed DBaseStatusBar::RepositionCoords() so that LilWhiteMouse's Chosen + ammo icons appear on the fullscreen HUD again. + +November 21, 2003 +- Added Strife's "Becoming Acolyte". +- Added Strife's zombie. +- Added Strife's grenade launchers. + +November 20, 2003 +- Added Strife's merchants. +- Added a check for a NULL texture to the player setup drawer, even though + that should never happen. +- Fixed: GiveInventory would not let you have more than one puzzle item of a + certain kind because I thought Hexen restricted you that way. +- Fixed: Starting a non-deathmatch game, changing the deathmatch cvar to true, + and then starting a new game would still show the ARMS graphic on the + status bar because the status bar graphic was not reloaded. +- Changed the fast floor dropping behavior so that Hexen format maps use the + Hexen behavior and Doom format maps use the Doom behavior. + +November 19, 2003 +- Added Strife's peasants. +- Added the Strife translation tables. +- Changed dehacked parsing so that the "Far attack frame" for players cannot + be changed. Fixes insaned1.deh and insaned2.deh that come with insane.wad. +- Fixed: The intermission screen did not lookup level names. +- Added a check for a NULL target to A_FiredAttack. +- Fixed: Enter, respawn, and death scripts were run with the equivalent of + ACS_Execute instead of ACS_ExecuteAlways, preventing them from executing + for more than one player at once. This especially defeats the purpose of + enter scripts, because those are always run at the same time for each + player when the level starts, so only the first player would actually + run any enter scripts. +- Fixed: The read-modify-write map array ops in p_acs.cpp took the array + index from the world var store instead of the map var store. + +November 18, 2003 +- Added Strife's Sentinel. +- Adjusted P_SpawnMissileXYZ so that if a missile would normally shoot over + the player's head, it will be aimed slightly lower. +- Added the first half of Strife's Bishop. +- Added Strife's Crusader (minus its special death action). + +November 17, 2003 +- Added a check for bad sidedefs to P_SaveLineSpecial. + +November 15, 2003 +- Added Strife's high-explosive and white phosphorous grenades (but not the + grenade launchers). +- Fixed: AActor defined both reactiontime and ReactionTime. +- Moved weapon bobbing out of A_WeaponReady so that weapons can bob every + tic even if A_WeaponReady isn't called every tic. (Such was the case with + the mauler, and it looked really bad seeing it move jerkily only every six + or seven tics.) +- Added Strife's mauler, minus the disintegration. +- Added a few of Strife's cheat codes. + +November 14, 2003 +- Added the Light_Stop line special to stop a currently running light effect. +- Changed the Door_Raise speed checks for monsters in P_TestActivateLine() + so that they are consistant for cross, use, and push lines. +- Changed text lookups for map names and intermission text so that they + happen each time they are needed and not just when the MAPINFO is parsed. +- Added a check for the null texture to R_RenderBoundWallSprite. +- Added a check for non-positive-sized patches, so if one tries to load, + it gets replaced by the new -BADPATCH graphic I just added to zdoom.wad. +- Added support for flechette inventory graphics named ARTIPSB1, ARTIPSB2, + and ARTIPSB3 that can be used in place of ARTIPSBG to differentiate + between the different forms of the flechette when a script gives the + player specific ones. +- Cluster infos now get created the first time they are referenced by a + map. Without this, all Hexen maps were implicitly on the same hub (the + "default" one), because Hexen didn't use clusterdef MAPINFO entries. +- Brought back the blockmap-based P_CheckSight and fixed the iterator in + it and its equivalent in p_maputl.cpp so that it properly handles the + case where a trace crosses the corner of a block. + +November 12, 2003 +- Added Strife's flame thrower. +- Added Strife's mini-missile launcher. +- Added Strife's assault gun. +- Added Strife's electric and poison crossbows. However, the poison bolt + does not have any of its special properties implemented, so it currently + acts like a super high damage projectile. +- Added all the Strife ammo pickups. +- Added Strife's scrolling sector type. +- Added the Strife weapon preferences to the WeaponPrefs array. +- Added placeholder weapon and ammo slots for the Strife weapons so that + when/if I add more, I won't need to update the player_t serializer again + to maintain compatibility with old save games. +- Added StepHeight to gameinfo_t to indicate the maximum height step a + player can walk up. This is 24 in every game except Strife, which has it + lower at 16. + +November 10, 2003 +- Fixed: ANIMDEFS animations animated every frame in the animation instead + of just the base texture. +- Fixed: Texture animations defined in ANIMATED did not animate each frame + in the sequence properly. + +November 2, 2003 +- Stopped using validcount to keep track of which Actors have already been + checked by P_BlockThingsIterator. P_CheckSight and P_TraceBleed can both + make validcount go up, so it is totally useless for P_RadiusAttack, which + wound up doing damage to a thing for each block it touched that was in the + blast area. +- Added DTA_ClipTop, DTA_ClipLeft, and DTA_ClipRight so that FlatFill can now + use DrawTexture and draw the textures right-side-up again. +- Renamed negonearray to zeroarray to better reflect its contents. +- Changed PTR_TraceIterator() so that it will look at a line's flags and if + it doesn't have ML_TWOSIDED set, then it will pretend it doesn't have a + back side, even if it does. +- Fixed: BFG Marines could crash with a stack overflow during their refire + pause because A_M_BFGSound() switches the marine back to its chase state, + which tries to switch it back to its attack state. The solution: Make sure + the marine's MF_JUSTATTACKED bit is set as long as its special1 is non-zero. + Then A_Chase won't try to attack. +- Reduced the player's missile range from 20480 to 8192, because Doom's trace + code is too inaccurate for long traces. + +November 1, 2003 +- Removed the missile attack from the chainsaw marine. +- Fixed: The cast finale ignored the player's gender setting because it didn't + actually play the player's death sound from the player. +- Fixed: The Heretic episode 2 ending restored the palette in PLAYPAL instead + of the one computed from PLAYPAL at the start of the game. +- Removed gamma stuff from FPalette, since Win32Video is responsible for + handling gamma. +- Changed P_DoCrunch() so that it copies the render style from the crushed + thing to the gib actor. +- Changed PIT_FloorDrop() so that only Hexen will let things fall with gravity + when a floor quickly drops. The other games will yank them down. +- Changed missile attacks so that monsters behind block everything lines will + try to shoot through the lines if they are set for impact activation and + run a script. The assumption is that the script will remove the blocking + flag so they can shoot past the line on their next attack. +- Changed back to the BSP-based sight checking for better accuracy. +- Changed the automap so that it uses 12 bits of fractional precision instead + of 16 in order to display maps that are relatively close to the limits of + the possible map extents. +- Changed the STCFN121 hack so that instead of discarding STCFN121 if it's + in the IWAD, it will discard it if STCFN120 and STCFN 122 are not present. + This should accomodate wads that provide their own fonts and copied it as + an I instead of a y, and also wads that provide a real set of lower-case + characters. +- Changed the sector soundorg calculation so that it can't overflow. + +October 31, 2003 +- Added Strife's Reaver. Aside from its unknown flag, it should be fully + functional. +- Added Strife's dagger-wielding fist. It has a chance of doing 0 damage, + which seems odd. +- Extended P_SpawnPuff() so that you can give a puff a crash state, and then + it will use that state if something was hit. +- Added a simple status bar for strife. + +October 30, 2003 +- Moved SKYFLATNAME into the gameinfo structure. +- Added a bunch more Strife things. +- Restricted the use of SPAC_OTHERCROSS to just the BOOM generalized line type + containers, since those are the only specials it's needed for. +- Fixed: Each level's intermission name was always drawn as text, even if + it had a graphic that was supposed to be displayed instead. +- Rewrote the flat hack used to make the flats in Gothic DM 2 load and + verified that it once again works. + +October 29, 2003 +- Added a few Strife things. +- Fixed another Doom bug/oversimplification: PIT_AddThingIntercepts() checked + the trace against a line running through the middle of the thing. Now it + checks against the thing's actual bounding box, so chainsawing big things + like the Spider Mastermind is much easier now. This also means + P_LineAttack() doesn't need to position puffs/bullet splats closer along the + trace since the hit location won't be inside the thing anymore. +- Changed blockmap thing linking so that things link to every block they touch + and not just the block at their center, fixing an old Doom bug. +- Changed the summon command so that it spawns things in front of you based on + their radius rather than a fixed 64 units away. +- Fixed: The joystick read rate was determined by the framerate instead of + being a constant 35 Hz. + +October 28, 2003 +- Changed: Decals are not allowed on warping textures by default. You can allow + them by appending "allowdecals" to the warp statement in ANIMDEFS. (e.g. + "warp texture foofoo allowdecals") +- Fixed: Bots whose teams were defined by name instead of numbers would always + be on the red team (team 0). +- Fixed: Puzzle items need to stick around in multiplayer games. +- Fixed: Saving in multiplayer games would try to save to the same full path + on all machines, even if the different machines had ZDoom installed in + different directories. The only one who was guaranteed to be able to save + because of this was the person who used the save command. +- Fixed: Poison damage in multiplayer games did not respect the teamdamage + setting. +- Added a minimum size limit of 1024 bytes for MOD/stream songs to work around + a bug in the current version of FMOD 3.70. +- Fixed: Sprites with weird rotation flipping (e.g. the Hell Knight) did not + display properly. +- Fixed: Even things that are not monsters could activate monster-allowed + lines in BOOM (and presumably DOOM). +- Fixed: Compat_useblocking also needs to block non-use lines with specials, + not just use lines. +- Fixed: Assigning a special to a line that would normally block the use of + lines behind it would enable those lines to be used. +- Fixed: If a texture had the bNoRemap0 flag set and it was part of an + animation sequence, the flag would not be propagated to the other + textures in the sequence. +- Added a check for a NULL SaveComment in the for loop that draws the comment + on the save/load menus. +- Fixed: Hexen does not always pass the three ACS script arguments as the + first three variables as a script. Instead, it looks at the number of + used arguments and only copies the arguments that are used, initializing + the rest to 0. +- Fixed the COLORMAP fixer so that it works correctly for palettes where + an exact match for color 0 does not exist. +- Added a check for empty VERTEXES lumps to the map loader. + +October 27, 2003 +- Fixed: You could not override the levelnums of the IWAD maps with levelnums + pointing to differently named maps because levelnums were search first to + last, and there was no check done to make sure that previous matching + levelnums were removed. +- Moved the R_Init() call before DecalLibray.ReadAllDecals() so that decals + can use any textures (including the plasma ball sprite). +- Fixed Heretic intermission problems: The maps were not shown because the + cluster numbers changed when I moved its MAPINFO into zdoom.wad, and the + "Now entering:" and "Finished" texts were incorrectly centered. + +October 25, 2003 +- Increased MAX_ACS_TRANSLATIONS to 255. +- Added APROP_Invulnerable. +- Changed savegames so that they store textures by name and usetype instead of + by index. Also removed support for loading save games created with ZDoom + versions earlier than 2.0.43 just for the purpose of removing obsolete code. +- Fixed: Unscaled skies taller than 128 were positioned incorrectly. +- Fixed: Redefining a clusterinfo with MAPINFO would not zero out the old + clusterinfo. +- Fixed: When a palette had no duplicate entries, it used the blue and green + parts of color 255 to pick a replacement for color 0. + +October 24, 2003 +- Added MF4_ACTLIKEBRIDGE flag. +- Fixed: Inventory items would fall through invisible bridges. +- Changed the P_TeleportMove() call in P_SpawnPlayer() so that it uses ONFLOORZ + instead of mobj->z, which fixes some stuckiness that can occur with start + spots that are too near a wall. + +October 23, 2003 +- Fixed: Overlapping bridge things would stand on each other. +- Changed TX_START/TX_END loading to load textures from first to last instead + of last to first, so ANIMDEFS animations that use them will behave as + expected. +- Fixed: m_filter did not average the mouse input. It just cut it in half. +- Fixed: Mouse pitch only changed in increments of 16. +- Fixed: ZDoom set the display mode twice at startup: Once at the very + beginning and again right after its initialization finished. +- Fixed: AImpactDecal::StaticCreate() checked the texture on a wall using + translation, so it would stick decals on animated textures unless the + first frame was showing. +- FMOD_File_SetCallbacks() does not seem to work with FMOD 3.70. Fortunately, + FMOD 3.70 also makes it obsolete for my purposes, so I can work around it. + (Okay, so it was fixed again in a later FMOD 3.70. But I already removed + the use of FMOD file callbacks, so I won't undo my changes now.) + +October 22, 2003 +- Rewrote my TAG_MORE handling to use va_list and make GCC happy. +- Fixed the default Heretic/Hexen automap wall colors so that they look + good on the parchment background. +- Fixed: FindShortestTextureAround() and FindShortestUpperAround() returned + their results as ints (without a fractional part) instead of fixed_ts. +- Changed the mapthing position fixing so that it only applies to those things + that request it (specifically, Heretic's WallTorch). +- Moved all the default MAPINFO out of the executable and into zdoom.wad. + As a side effect, Dehacked patches can no longer change the music played + on a map. (Do any patches actually do this?) +- Converted all the decals in zdoom.wad into PNGs. I was considering doing + the same for the crosshairs, but XHAIRB2 was the only one that got smaller + from the conversion from IMGZ to PNG. + +October 20, 2003 +- Added the CreateTexture() method to the texture manager. It checks the + contents of a lump to determine what type of image it contains, creates a + texture of the appropriate type, and adds it to the database. Everything + that was previously hard-coded to use patches now uses this instead. The + primary reason for this: PNG texture support. Just make sure your PNGs are + paletted. They do not need to have the exact same palette as the one + inside PLAYPAL, since they will be remapped to fit the game palette. ZDoom + also supports two proprietary PNG chunks: + grAb (8 bytes): + SIGNED DWORD x + SIGNED DWORD y + grAb stores the offset information and works just like the + equivalent information in a patch. The name is taken from the + ILBM GRAB chunk, which does the same thing for ILBMs. + alPh (0 bytes) + alPh is valid for grayscale images only (colortype 0). Its presence + signifies that the image data is really an alpha channel and contains + no color information. This is used by all of the decals in zdoom.wad. +- Added the m_filter cvar (false by default) to smooth out mouse movement for + those unfortunate enough to be stuck with a mouse sampling rate of just 40 Hz. + +October 18, 2003 +- Added super-preliminary support for playing Strife as an IWAD. +- Added fading "Read This!" screens. +- Morphed players are now allowed to predict their positions. +- Revisited the local player turning from October 10. My original + implementation had the players transmit the direction they wanted to face. + Unfortunately, this messes up the gauntlets and chainsaw, so I have reworked + it so that the players again send deltas. Any amount that accumulates between + packet sends is added to the player's local view angles. When they get sent, + they are zeroed. + +October 17, 2003 +- Fixed: GetLightLevel() used some globals instead of this to get the sidedef. + +October 16, 2003 +- Fixed: Using a cycling alias to rapidly change the player's color would + animate the player's status bar face at each color change. + +October 15, 2003 +- Updated to FMOD 3.70. +- Did more cleanup for GCC. Its "variable might be used uninitialized" + warnings are very annoying. Oh well. +- Did some cleanup so that Visual C++ 6 will compile without warnings. Alas, + it has some really weird errors where it complains about not being able + to #include .h files that are excluded inside an #ifdef block. They do not + effect the compilation any and seem to be generated before cl is even run; + it just looks untidy. Trivia, since I now have the opportunity to check: + When built with exactly the same settings, compared to the VC6 version, the + VC7 version is ~100k smaller, marginally faster, and takes slightly less + time to build from scratch. +- Added the MAPTEXF_WORLDPANNING flag to indicate that a maptexture wants to + be panned by world units instead of texels, so you can create high-res + drop-in replacements for existing textures. +- Fixed: The grid was not drawn properly on a rotated automap because the + x or y coordinates of the gridlines were not reset after being rotated. It + still looks bad if you turn off follow mode, but I'd rather not worry about + that. +- Fixed: Movement prediction did not preserve the ordering of blockmap links, + so the local player would always be the first entry in his blockmap cell. + The effects of this were first noticed as Pain Elementals reliably causing + the game go out of sync eventually. I imagine it probably caused desyncs in + other cases, too. + +October 14, 2003 +- Fixed: You could push actors with the MF2_PUSHABLE flag while doing movement + prediction, which would almost invariably make network games go out of sync. +- Uncommented the check that excluded the loading of STCFN121 only if it was + in the main IWAD. Note to anybody modding ZDoom who loads a resource wad + before the IWAD: This check in the FFont constructor assumes the IWAD is + at position 1. You will need to change this for your mod. +- Fixed: Pig players could still change back to their original weapons. +- Replaced the use A_BeakReady with A_WeaponReady. A_BeakReady was basically + just a stripped-down version of A_WeaponReady, so A_WeaponReady works just + as well. +- Added the ActivateMorphWeapon method to APlayerPawn as a replacement for + P_ActivateMorphWeapon(). + +October 13, 2003 +- Improved the error-checking in FPatchTexture::MakeTexture() so that it will + detect overlapping spans. +- Fixed: Scaled, lower unpegged masked textures were positioned incorrectly + vertically. +- Fixed vertical positioning of scaled sky textures. +- Made MF_COUNTITEM actors dynamically counted like MF_COUNTKILL actors. +- Fixed: Morphed players returned to their player skin unless playing Hexen. +- Fixed: The chicken and pig players did not have MF3_NOBLOCKMONST set. +- Moved P_MorphPlayerThink() into an overridable method of PlayerPawn. +- Fixed: Colored sectors changed the color of the crosshair. + +October 11, 2003 +- Dropped MISSILERANGE back to its original value (2048 units) and added a new + PLAYERMISSILERANGE for player weapons, which is still at 20480 units. + +October 10, 2003 +- Fixed: Using the last inventory item in a Doom game would not redraw the + Doom guy's face on the status bar until the next time it animated. +- Fixed: The view was interpolated when switching in and out of chasecam mode. +- Changed player turning to be local. Also changed the mouse reading so that + it happens every frame instead of every tic. Together, these two changes + keep the mouse feeling responsive even when the framerate drops below 35 FPS. + It also helps a lot when playing with vsync enabled. +- Modified the interpolation system so that it knows what it is interpolation + (beyond being just a generic fixed_t *). Now it can be stored in save games. +- Fixed: Ceiling_CrushAndRaise and similar specials that passed a 0 height + to EV_DoCeiling/EV_DoFloor did not interpolate. +- Fixed: Thing_Projectile2 did not pop its parameters off the stack. +- Modified tab completion slightly. Pressing tab once now displays a list + of possible completions. Pressing tab multiple times will continue to + function as it did before. +- Added the fading notify text I had written for my Duke port. + +October 8, 2003 +- Changed titlepic and conback drawing to always be unmasked, because + 2nd_enc.wad's TITLEPIC has holes in it. +- Stripped out a bunch of obsolete code from v_draw.cpp. +- Moved the state of the automap cheat into the am_cheat cvar. +- Changed P_TestActivateLine() so that monsters cannot activate Door_Raise + lines with speeds of 64 or above, in order to mimic Doom. +- Fixed: Vertical view doubling crashed. +- Made the secret wall color on the automap configurable through the + am_secretwallcolor cvar. +- Added a ga_togglemap gameaction, because the new parchment can cause + commands to dispatch while the background is drawing. If one of those + is togglemap and it gets handled right away, the mapback texture gets + unloaded, and AM_clearFB will crash. +- Added the parchment background used by the Heretic and Hexen automaps. +- Added some support for console fonts that don't use 8x8 character cells. +- Fixed: A_WraithMissile was missing a NULL target check. +- Fixed: The player did not make any noise during the cast finale. +- Added the player's attack sound to the finale. +- Added a check to the cast finale for monsters that have been dehacked to + have no attack states so that they won't crash the finale. + +October 7, 2003 +- Added DoomBounce, HereticBounce, and HexenBounce as valid properties for + DECORATE projectiles. +- Fixed: Monster telefrags still reported that the monster had killed the + player normally. (Note: The only time a monster will normally be able to + telefrag a player is on Doom2 MAP30, although this can be changed with + MAPINFO.) +- Made AM_changeWindowLoc scale the window movement so the automap will scroll + at the same rate no matter what resolution you play at. +- Fixed: Reopening a door while it was closing would not play the opening + sound. +- Fixed: You could still (de)activate dead monsters. Activating a dead monster + would make it disappear, because dead monsters usually have their next frame + set to NULL. +- Fixed an off-by-one error for the vertical positioning of the elements on + the Hexen status bar. + +October 3, 2003 +- Fixed: Missing TAG_DONE is WI_slamBackground(). +- Fixed: ZDoom no longer tries to read non-V3.0 Dehacked patch files. Earlier + ones are apparently all binary, which has never been supported and could + make it crash. + +October 1, 2003 +- Added support for specifying animated texture sequences in ANIMDEFS by name + instead of by number. i.e. Instead of: + texture x_water1 + pic 1 rand 5 12 + pic 2 rand 5 12 + pic 3 rand 5 12 + pic 4 rand 5 12 + + You can write: + texture x_water1 + pic x_water1 rand 5 12 + pic x_water2 rand 5 12 + pic x_water3 rand 5 12 + pic x_water4 rand 5 12 +- Added a check for the front sky layers of parallax skies so that the front + texture does not have color 0 remapped, because it really does use color 0 + as transparent. (Note that since color 0 is now the transparent color for + everything, you can use normal transparent regions for front sky textures.) + +September 27, 2003 +- Changed the transparent color index from 255 back to 0. 0 is more convenient + because: + 1) Images that are used as alpha masks (primarily decals) already + use color 0 as transparent, so they no longer need special processing. + 2) PNG images need 255 fewer bytes to mark color 0 as transparent than they + need to mark color 255 as transparent. But this won't really be important + until I add support for PNG images (which will probably happen, but who + knows when). + The only reason I switched to 255 was because that was what BUILD used, so by + using the same transparent index, I could memory map its tiles read-only and + use them directly. + +September 26, 2003 +- Fixed: If a switch defined in a SWITCHES lump used the same "on" and "off" + graphics, the game would crash. Now it gets skipped, because it's not really + a switch if it doesn't change its image. + +September 25, 2003 +- Fixed: Using the MDK cheat always flung the dead things at you. Related, the + maximum thrust to have something fall forward on death is now 10 units/tic. +- Fixed: ClearInventory always crashed because using GiveInventory to give a + weapon afterward would not bring the weapon up, so the player's ready weapon + would be left as something that doesn't exist. +- Fixed: The overlayed automap showed statistics when not viewing through a + player's eyes. +- Increased MISSILERANGE to 20480 (was 2048). +- Changed the massacre code so that it sets the shootable bit for any monsters + that have it cleared (such as Serpents, usually), so they die too. +- Fixed: Masked midtextures beneath a fake floor (or above a fake ceiling) + only inheritted their light level and not their light color from the control + sector. +- Added code so that when a map thing is spawned directly on a line, it will + be moved 1/4 unit in toward the middle of the subsector so that it will be + clipped reliably by the renderer. See the torch right in front of the player + at the start of Heretic E1M1 for an example of this bad practice. +- Changed: MF2_FLOATBOB actors no longer splash on liquids. +- Fixed: P_AimLineAttack() clamped the player's vrange to 1 degree maximum + instead of 1 degree minimum, so it would not aim past any two-sided lines + if you were using 0 autoaim because the toppitch and bottompitch would be + the same before even entering PTR_AimTraverse. This was the cause of + chainsaw not always pulling you in and melee weapons sometimes missing + monsters that were clearly in range. +- Fixed: P_SpawnPuff() used linetarget instead of its hitthing parameter + to determine if it should play the puff's SeeSound or AttackSound. +- Improved(?) the Bloodscourge so that its initial target search only looks + in front of the player. +- Fixed: MStaffSpawn used linetarget, but P_AimLineAttack was never called + to set it. +- Fixed: P_CheckMissileSpawn would destroy ripping missiles if they spawned + inside something. +- Fixed: Dark servants could not be morphed in Hexen. +- Fixed: MageWandSmoke was not translucent. +- Combined all the WeaponPrefs list for each game into a single list. +- Added text skipping for the Hexen chess ending. +- Fixed: The chessboard finale drawer looked at userinfo.PlayerClass instead + of CurrentPlayerClass to decide which chess piece to draw, so random players + would always appear as the fighter. +- Fixed: When V_BreakLines() inserted newlines for word wraps, the default + text color was restored for the new lines. Now it adds color escape + sequences after any soft line breaks, but it leaves hard line breaks alone. +- Added support for marking scripts that are "safe for multiplayer". To do + this, add net after the script header but before the script body. e.g.: + script 1 (void) net { ... } + script 1 open net { ... } + script 1 enter net { ... } + etc. +- Added the sethudsize ACS command. It takes three parameters: + sethudsize (width, height, statusbar). The width and height is the size + of the screen that hudmessage thinks it's drawing on. If this is different + from the real screen size, the hudmessage will be scaled to make it fit. + If statusbar is 1, then the height parameter covers the status bar and you + can draw on top of the status bar. If it is 0, then the hud message will + be stretched differently depending on whether the status bar is visible or + not, because the height available to draw in is shorter when the status bar + is visible. (However, a value of 0 will still let you draw on the status + bar if the hud message extends below the height you specified.) + + After using sethudsize, hudmessage coordinates also behave differently. + You now need to specify actual pixel coordinates and not numbers in the + [0.0, 1.0] range. However, they are still fixed point, so you need to keep + the decimal point. e.g. If you used SetHudSize (320, 200, 1); and want to + draw a hudmessage at the center of the screen, you should pass it the + coordinates (160.0, 100.0) and not (0.5, 0.5). + + The fractional part of the coordinates effect what part of the hud message + you are positioning: + For x: .0 = positions center of box + .1 = positions left edge of box + .2 = positions right edge of box + .4 = centers text inside box + .4 can also be added to either .1 or .2 to get .5 or .6 + + For y: .0 = positions center of box + .1 = positions top edge of box + .2 = positions bottom edge of box + + e.g. If you used SetHudSize (320, 200, 1);, then the coordinates (160.1, 100.1) + will position the upper-left corner of the hud message. The coordinates + (160.2, 100.2) will position its lower-right corner instead. + + To make hudmessage behave as normal, use SetHudSize (0, 0, 0);. + + In summary, use sethudsize for hud messages that are really graphics, and don't + use it for text (unless you want your text to appear the same size at all + resolutions, such as a title with a special font or something). + +- Added the getcvar ACS command. It returns the value of a cvar as an int, + so scripts can alter their behavior based on cvars. +- Added the strlen ACS command. It behaves just like its C counterpart. +- Added support for loading compressed GL nodes when regular nodes are + unavailable. +- Fixed: You could pick up items above your head because P_CheckPosition() + added an extra 24 units of height to detect when you might step up inside + another actor. It still does, but now PIT_CheckThing() takes this into + consideration before touching it. + +September 24, 2003 +- Fixed a crash bug in A_SorcOffense2: It did not check for a NULL target. +- Added support for compressed nodes. Not only do they take up less space + on disk than regular nodes, but the also remove the limits on number of + segs, subsectors, and nodes that normal nodes have. They also store the + extra vertices as 16.16 fixed point numbers like GL nodes, so split segs + can have fractional end points. + +September 23, 2003 +- Finished switching from memory-mapped I/O to normal file I/O. Partly, this + was done for portability, because some systems don't support MMIO, but + mostly it was done because the in-memory format of textures no longer + matches their on-disk format, so I can't use the wads themselves as a + texture cache anymore. Since I can't do that anymore, there's not much + reason to dedicate any address space to them. + +September 13, 2003 +- Added r_skyboxes cvar so that skyboxes can be turned off. +- Fixed: Using noinventorybar in MAPINFO still showed the selected artifact + in the Doom status bar. +- Note to self: I am no longer using Whole Program Optimization because: + 1. It makes the executable around 200k bigger right now. + 2. Its performance improvements are debatable. In fact, ZDBSP is about + half a second slower on a big map when using it. + 3. It makes the linking stage of a release build take a lot longer + (which would be worth it if it actually helped, but I haven't seen it). +- Changed the PNG reader so that it caches all basic chunk information in + memory the first time the file is scanned so that chunk searches can be + much quicker. This means that when you have a lot of .zds files, the save + and load menus should hopefully appear faster the first time you use them. + In the process of implementing this, I discovered a glaring bug: + G_DoLoadGame() never closed the file after loading all the data from it. +- Added a check to disallow predefined 2D images as textures on walls, floors, + and ceilings at map load time. I purposefully left this check out of ACS + because they *can* be useful, so it's nice to have some way to use them. +- Added TX_START/TX_END markers for new graphics. They can override existing + wall textures and flats. + +September 9, 2003 +- Fixed: STFBANY was not added to the texture manager, so multiplayer Doom + games crashed when the status bar tried to draw it. +- Fixed: Options menu titles were drawn using SmallFont instead of BigFont. + +September 6, 2003 +- Fixed: Trying to delay for 0 tics in a script would delay for 4294967296 + tics instead. + +September 2, 2003 +- Fixed relative lighting was never applied to masked midtextures because I + had the check contingent upon the absence of a sector colormap. But every + sector always has a colormap; I should have been checking for a black + fade instead. + +August 28, 2003 +- Fixed: Spawning an item with ACS that was Dehacked would not transfer the + special or TID from the original item to the dehacked item. +- Fixed: AnimType was left uninitialized when parsing ANIMDEFS. + +August 14, 2003 +- Fog boundaries alone are no longer sufficient to clip a sprite. + +August 13, 2003 +- Fixed mirror flipping in R_ProjectSprite(). I was treating tx as if it were + in screen coordinates, but it's not. This was generally unnoticable because + tx has 16 fractional bits, so subtracting it from viewwidth was vear near + subtracting it from 0. +- Changed sprite clipping by slopes to be more like sprite clipping by unsloped + floors and ceilings. +- Removed the check for MF_SOLID in P_TestMobjZ(). Nonsolid things should + still be blocked by invisible bridges. (So no more corpses will fall through + invisible bridges.) +- Added the ability for monsters to walk on invisible bridges. Note that the + bridge's top must be below or at the monster's height. Bridges that require + even a slight step up will still be impassible to monsters. (For now. Maybe + some time in the future I will change that. Maybe.) +- Fixed: R_ProjectParticle() could project 0-width particles. This could cause + a single column of a fog boundary behind the particle to be drawn more than + once. +- Fixed a bug in R_RenderMaskedSegRange() that caused one-pixel wide ranges + to not be drawn when using r_columnmethod 1. +- Added support for extended ID666 amplification tags in SPC files. Doing so, + I discovered one change from snesapu 0.95 to 0.98: SetDSPAmp's scale has + 12 more fractional bits in 0.98 than it did in the earlier versions. +- Updated SPC support for snesapu.dll version 1.01, meaning that I allowed for + a higher minimum version returned by SNESAPUInfo. Nothing else needed to + change, so I'm not sure why the minimum version got bumped. I did need to + change the mixer parameter of SetAPUOpt from 0 to -1, but 0 was also defined + as no mixer in snesapu 0.95, so I'm not sure why it worked with the older + DLL. +- Added a check for textures that try to reference a patch not in the PNAMES + lump. + +August 11, 2003 +- Removed the +1 from the damage calculations in PIT_RadiusAttack(). I'm not + sure what that was doing there. +- Changed the VirtualProtect() call that makes the self-modifying code + writable from PAGE_EXECUTE_WRITECOPY to PAGE_EXECUTE_READWRITE after + Timmie found out Win9x doesn't know what PAGE_EXECUTE_WRITECOPY is. + +August 5, 2003 +- Changed the ignoreInvisibility parameter of P_CheckSight() to a flags + parameter so that I can pass another flag (2) to indicate that the sight + check should see past "block everything" lines (the former default). By + default, sight checks no longer see past "block everything" lines, so + monsters will not be able to melee attack you through them, and explosions + will not be able to do splash damage through them. +- Fixed: Hitscan weapons always triggered the front side of an impact line, + even when they struck the back side. +- Added a fifth argument to Sector_SetColor to control how much the + palette should be desaturated. 0=leave it alone, and 255=shades of + gray. The palette is desaturated before it gets colored. The test color + console command can also take this parameter now. +- Added a new polyobject start spot (#9303) that causes the polyobject to + deal damage whenever it touches a player. +- Changed sprite loading so that you can have sprites with gaps in their + defined frame ranges again. (e.g. create frames A-D and H-N but not E-G) +- Fixed: Minisegs were messing up the polyobject seg detection code when + GL nodes were used. +- Fixed: Fullbright sprites would be drawn fullbright in levels with their + own fadtable (IOW, every foggy Hexen map) because g_level.cpp never made + a note for the renderer to look at discover that the level used a custom + fadetable. +- Added separate floor and ceiling skyboxes. Set the sky picker's second + argument according to what you want to set: 0=floor and ceiling, + 1=ceiling only, or 2=floor only. +- Fixed: Undefined sky textures are once again replaced by the default + texture instead of the empty texture. +- Fixed: Shooting a railgun while standing on a ledge could make you fall + through the ledge because the railgun invisible moves you to the hit + point in case it needs to make a water splash, then moves you back to + your start spot. However, when it moved you back, it did not restore + some important variables like floorz. +- Changed the weaponless marines so that their spawn state does not cycle + between frames A and B. This holds even if you give them a weapon later + in a script, but it does not hold for marines that spawn with a weapon, + even if you take the weapon from them later. +- Fixed: The Heresiarch's orbiting balls did not have their floorz updated + when the Heresiarch's changed, so if the Heresiarch's head went below its + original floor height, its balls would rapidly jump between its head height + and the old floor height. Since it seemed relevant, I also did the same + for ceilingz. I also did it for the SorcFX2 effect (invulnerability + indicator). +- Added support for nested skyboxes. Now you can have one skybox look into + another skybox. The changes required were surprisingly minor. + +August 2, 2003 +- Fixed: Returning from one function to another function failed to take into + account the presence of the calling function's return info when it restored + its local variable pointer. + +July 31, 2003 +- Fixed a crash when using path followers with incomplete paths. + +July 30, 2003 +- Added CheckModified() method to FTexture for the benefit of ZDoomGL. +- Added nonexistant texture check to the warping texture setup. + +July 28, 2003 +- Removed the ScaleCopy canvas from DBaseStatusBar, because everything is now + drawn to the screen directly even when the status bar is scaled. +- Changed the pitch calculations in the DSimpleCanvas constructor to provide + better wall drawing performance at all resolutions. +- Corrected ::ST_Y calculation so that a scaled status bar does not have its + topmost line overwritten by the view window at certain resolutions. + +July 25, 2003 +- Added DTA_WindowLeft and DTA_WindowRight tags for DCanvas::DrawTexture + to restrict the portion of the source texture that gets drawn to the + screen. Changed doom_sbar.cpp to use these, keeping in mind that they don't + clip the vertical range of the texture. +- Improved the behavior of R_DrawMaskedColumn(Horiz) so that when using + non-integral scaling and drawing adjacent columns that end at different y + locations, the shorter column lines up better with the longer one. +- Fixed: R_SetSpanSize_ASM had the x and y sizes swapped when called in a + release build but not a debug build. To fix, I just removed its __regargs + entry point. + +July 20, 2003 +- Disabled interpolation for sliding polyobjects that complete their movement + in fewer than three tics. (The moving crate effect in Massmouth 2 this fixes + needs two tics to reloop the crate.) +- Turned off interpolation of instant movement floors and ceilings so as not + to ruin the fake moving sector effect used in a few wads. +- Added a call to R_SetupBuffer() at the end of R_RenderViewToCanvas so that + the ylookup table will be correct if the game was saved while watching the + automap. +- Fixed: Every two-sided line was storing midtexture information even if it + didn't have a midtexture. +- Changed ylookup into an array of ints instead of BYTE*s so that I can still + use the common column drawers for everything even when the viewwindow does + not start at (0,0). If you were using "dc_ylookup[y]" before, now you need to + use "dc_ylookup[y] + dc_destorg" to get the same value. +- Fixed: Skybox ceilings could sometimes be left undrawn if they were in the + same sector as a skybox floor because I was missing a check for plane height + in R_FindPlane. This only applies to skyboxes; the check was present for + normal skies. + +July 19, 2003 +- Fixed spacing of the characters on the finale text. +- Fixed clipping of scaled sprites in deep water. + +July 18, 2003 +- Fixed: remove was uninitialized in ParseEpisodeInfo(). + +July 17, 2003 +- Moved the P_LoadBlockmap() call so that it occurs after the nodes are + processed, so if a node build is necessitated, the blockmap gets rebuilt too. +- Fixed detection of empty rejects. +- Stopped loading REJECTs that are too small. They're probably caused by an + outdated node build, so there contents are invalid and using them it is wrong. +- Added more checks for seg validity in P_LoadSegs(). + +July 2, 2003 +- Removed the FROMCEILINGZ128 #define in p_local.h. I'm not sure what that was. +- Added support for properly tiling wall textures whose widths are not a power + of 2. +- Fixed: Heretic and Hexen status bars' artifact flash effect was tied to the + framerate instead of the ticrate. +- Changed the IMGZ loader so that it maps color 0 to 255 and color 255 to 254. +- Changed the cast finale so that it draws "our hero" using the player's suit + color instead of the default green. +- Changed the BOSSBACK drawing so you can make it some size other than 320x200 + if you want. +- Moved StringWidth() out of DCanvas and into FFont, where it really belongs. + +July 1, 2003 +- Changed FPatchTexture::MakeTexture() so if it is loading a patch used by a + decal it remaps color 255 to 254 rather than to whatever is the closest + matching color in the palette. This is because decals are usually shade + maps rather than paletted graphics, so changing color 255 to something + in the middle of the palette looks bad. I also changed it so that it + contstructs spans from the existing column data instead of rescanning the + image for the transparent color, so it should be slightly faster, although + it probably doesn't matter, since each patch will only be loaded at most + once per level. +- Added a fix for sprites that have some, but not all, of their frames + defined. I found this one when I tried to play Doom Raider. Ironically, + it worked in 2.0.47 because I had a bug in the code that detected + undefined frames. To fix, any undefined frames are made into copies of + the first defined frame. + +June 30, 2003 +- Added a check to P_TestActivateLine() so that doors faster than 32 cannot + be opened by monsters. +- Fixed: If only the right-most texture column of a wall is visible, the + left-most texture column would be drawn instead. +- Added the ability for the SetFont ACS command to load normal pictures as + fonts. When used this way, it creates a new font with only the letter A + defined, and the letter A is drawn as whatever the picture is. This + effectively allows you to use HudMessage like a HudPic command. The + drawback to this method is that you cannot use any color translations, as + you can with real fonts. + +June 28, 2003 +- Removed i_remapkeypad cvar. The keypad is now always considered separate + from the main keyboard. This was really just something I had left over from + the very early days of ZDoom before it even had Quake-style keybinding. +- Added prioritization of HUD messages. Lower-numbered IDs are drawn in front + of higher-numbered IDs. An ID of -1 is identical to 0, except it gets drawn + behind everything else. +- Made the puke console command work across the network. +- Fixed a crash bug in the node builder when the back side of a line + shares endpoints with another seg, but the front side does not. +- Reimplemented texture warping for the new texture system. You should + even be able to warp sprites if you make their widths and heights + powers of 2, but I did not bother creating any such sprites to test + with. +- Added another BOOM fix I just now became aware of: Donuts in Doom would start + even if the pool sector was already moving. + +June 26, 2003 +- Removed all the masked block functions, since they are no longer used. +- Changed fonts into collections of textures. +- Extended my CPUID code to gather more information. +- Spent enough time with a P4 to find out which of the vlinetallasm4 + routines works best with it. Answer: They are about the same, and both + are about 20% slower than the Athlon version running on an Athlon. + +June 25, 2003 +- Moved all the self-modifying code out of the .data section and into the + .rtext section. Unfortunately, NASM does not support creating writeable + code sections (even though the object file format does support this), so + I create them as regular read-only code sections in NASM and then modify + them to be writeable using VirtualProtect() at run-time. +- Tried unrolling vlinetallasm4 to see if I could eek out some more + performance from it. Unfortunately, it was slower at first and about the + same at best, so I decided not to keep the unrolled version. + +June 23, 2003 +- Tried writing an optimized version of DFrameBuffer::CopyFromBuff() using + prefetchnta and movntq, but it performed just as well as memcpy. Probably + because video memory is much slower than system memory, so you don't really + notice any of the inefficiencies of the rep movsd instruction that memcpy + uses. +- Modified vlinetallasm4 slightly so that it executes in about 65%-81% of the + time it used to take on my Athlon XP (depending on resolution) by reordering + the instructions for parallelism. Note that this is the exact same + optimization I tried earlier that reduced performance on a Pentium III-M. + Also, the old version of the function still uses fewer cycles on a P3 than + the new version uses on an Athlon XP. (7 cycles/pixel compared to 4.8 + cycles/pixel at 800x600). I am curious which version a Pentium 4 likes more. + I will keep them both around and only select the new version for people with + AMD processors belonging to family 6 or higher. The K6 might also like the + Athlon version, but I don't have a K6 to test with, so I will leave it as + it is now. + +June 21, 2003 +- Modified R_DrawColumnP_ASM() so that it has an alternate version of the + inner loop without any writes to ch and hence, no partial register stalls. +- Removed the R_StretchColumn() function. +- Consolidated all the different patch drawing functions from DCanvas into a + single DrawTexture() function. Amiga-style tag lists are used to pass it + optional parameters to produce the same results as the old functions. + +June 20, 2003 +- Changed FImageCollection so that it is nothing more than an array of + texture indices. + +June 19, 2003 +- Finished moving everything to the new texture system. There is still a + little work yet to do, but at least the only place where patches are used + any more is in the texture loaders. + +June 13, 2003 +- BTW, with the new texture system, you don't need to have every single texture + defined in a single TEXTURE1 or TEXTURE2 lump. You do need to restrict + yourself to just one TEXTURE1 and/or TEXTURE2 lump per wad, but they don't + need to contain definitions for all the textures from the IWAD, since each + wad's texture definitions are loaded separately. +- Fixed decals for the new texture system. +- Added support for the rotation information Blood added to the art files. + +June 12, 2003 +- Changed screenshot capturing slightly so that it does not need to redraw the + screen, so now it can capture the framerate in the corner. +- Added support for animating Build tiles. +- Added a new thing to use for spawning sprites in Build maps. +- Got sprites working with the new texture system. + +June 11, 2003 +- Fixed X-Y scale of Build maps. I had it twice as big as it should have been. +- Fixed the assembly slope drawer to work with non-square textures. + +June 10, 2003 +- After putting it off for far too long, I finally started working on a unified + texture system that will let me treat sprites, flats, and wall textures all + the same. Sprites are not done yet, but now Build maps can be viewed with + the correct floors and ceilings. One consequence of this change is that flats + are now stored in column-major format instead of row-major format, so I had + to changed the span drawers to account for this. +- Added a new MAPINFO flag: NoInventoryBar - prevents the inventory bar from + ever appearing in a Doom map. Also changed the Doom inventory bar so that it + won't be drawn if you have no inventory items, even if you press the inventory + selection keys. +- Changed PTR_UseTraverse() to continue traversal when a backward-facing line + is encountered. + +June 9, 2003 +- Fixed: Batman Doom no longer crashes during the cast finale. +- Made the texture error checking slightly more lax. It seems there is some tool + that likes to write to unused areas of the texture directory meaninglessly. +- Fixed a prediction bug caused by moving between sectors with different friction + levels. P_GetFriction() is sensitive to the ordering of the touching_sectorlist, + so I need to preserve this ordering before and after prediction. + +June 7, 2003 +- Changed my transparent color from 0 to 255. An analysis of the original Doom, + Heretic, and Hexen graphics revealed that this color was never used. It was + probably going to be the transparent color before the Doom engine switched to + using spans. But the real reason for the switch is because 255 is the color + the Build engine uses for transparency, so I can draw its sprites without + doing anything special. + +June 6, 2003 +- Made a slight fix to the frame interpolation: The time when the game tic is + run is the base time I need to use for interpolation. Otherwise, the display + could glitch if a tic passes between the time the gametic is run and the time + it is displayed. +- Added a workaround for NT 4: Somebody goofed, and the default registry entry + for CLSID_DirectInput under NT 4 has the wrong GUID. Two of the hexits are + swapped so that it is stored in the registry as + {25E609E0-B259-11CF-BFC7-444535540000} instead of as + {25E609E0-B259-11CF-BFC7-444553540000}. You can fix this by running + "regsvr32 dinput.dll" from a command prompt, or you can bypass it by loading + dinput.dll and using DirectInputCreate to obtain an interface. Since I can't + expect everybody running NT 4 to run regsvr32, I have to do the latter. :-( +- Fixed: Killing a morphed monster left an inert copy of the original monster + around, so scripts that depended on being able to use thingcount() to determine + when all the monsters of a certain type are dead would fail. +- Changed the Pig's and Chicken's MF_COUNTKILL bit to MF3_ISMONSTER, so morphing + a monster does not add to the total number of monsters on the level. +- Fixed: FDoomStatusBar::DrawToSBar could create a partially transparent status + bar because it left color 0 alone. I use color 0 as a transparent color for + image blocks like this. (Though the status bar doesn't really need to be + drawn with transparent parts, it was convenient to do it that way.) +- Changed the tid and TIDtoHate members of AActor from unsigned to signed, so + that you can use negative tags with your teleporters. + +June 2, 2003 +- Fixed: Absolute lighting on walls was very dark. I don't think I have this + feature accessable through Doom/Hexen maps, so you only notice it if you + try to load a BUILD map. +- Added some command-line parameters to help make BUILD maps look better: + -art Specifies the directory with the TILESxxx.ART files. + -bpal Specifies the palette.dat file. + So if I want to look at the Blood maps, I can do this: + zdoom -art d:\games\blood -bpal d:\games\blood\palette.dat -file d:\games\blood\*.map + (assuming that I have already extracted all the maps from the RFF file). + Unfortunately, the tiles only show up on walls. I need to create a unified + texture system so that wall textures and flats can be used identically. +- Fixed: Bots would only move on the arbitrator's computer in a net game. +- Fixed: If foggy and non-foggy areas were visible simultaneously, gun + flashes would sometimes light the foggy area. +- Fixed: R_ResetViewInterpolation did not actually work. +- Fixed: Line-to-line teleporters did net reset the view interpolation. +- Fixed: The super-fast projectiles in Heretic and Hexen with custom Tickers + did not update their previous positions, so they could not be interpolated + correctly by the renderer. + +May 31, 2003 +- Added support for loading Blood maps. They are no more playable than + normal BUILD maps, but since I can already load Blood sounds and BUILD maps, + it seemed like the thing to do. +- Fixed: Loading BUILD maps was broken because they did not initialize + sectors' ZoneNumber. +- Changed the default for vid_vsync from true to false, because with the + unlimited framerate, no vsync actually produces better control. + +May 30, 2003 +- Added interpolation for moving polyobjects. +- Optimized SpawnPolyobj() and IterFindPolySegs() so that they are loads + faster. + +May 29, 2003 +- Fixed Dehacked support for patches that swap sprite names instead of + changing them to something completely new. +- Fixed the new net code to recover properly in situations where there is + high packet loss. Except for one instance: If a player quits with -netmode + 1, and the packet with that quit notification gets dropped, it never gets + sent again, so any players left will hang waiting for tic updates for a + player who is no longer there. +- Rewrote D_ArbitrateNetStart() so that all data passes through the host. + This should allow computers on separate networks to play together as long + as they can all talk to the host and you use -netmode 1. +- Bumped BACKUPTICS up from 12 to 36. +- Finally finished decoupling -dup from the game ticker. Getting it to work + without consistancy failures was a lot more work than I expected. + Fortunately, I think it was worth it. I can notice little difference now + between -dup 5 and no -dup (aka -dup 1). Before, doing that would take + your framerate down to 7 FPS, rendering the game practically unplayable. + +May 28, 2003 +- Started decoupling -dup from the framerate. +- Fixed an obscure crash bug caused by drawing past the bottom of composite + textures whose heights are not powers of 2. If the composite texture was + constructed at the end of a page of memory, the game could read into the + next page, which is bad if the next page is not mapped in. + +May 27, 2003 +- Framerates above 35 FPS should now be done. Whether or not it's good in a + net game, I'm not sure, since they require rather precise timing to play + smoothly. +- Added interpolation for every actor in the game, after I watched a rocket + flying and it was obvious that its position was updating less often than + the view. +- Added functions from BUILD for interpolating floor and ceiling movement. +- Added some view interpolation to allow frame rates above 35 FPS. It looks + very nice (and playing at 35 FPS now looks very bad), _except_ it sometimes + misses a tic so you get an annoying hiccup that is worse than just keeping + things locked at 35 FPS. This is despite my sprinkling NetUpdate calls to + some of the most frequently used rendering functions. [edit: It seems the + hiccups were because I had a background program running; even at idle + priority, it still stole a little time away from ZDoom every now and then.] + +May 23, 2003 +- Got a crash in R_SetWindow() when it was setting the value of the r_viewsize + cvar. After recompiling with the _CRTDBG_CHECK_ALWAYS_DF flag, I could not + reproduce it to find out why it happened. Poo. +- Added player movement prediction to make network games feel more responsive + when gametic is lagging behind maketic. You can turn it off by setting + cl_noprediction to true. +- Fixed: Using -extratic with the packet server crashed because it tried + to send tic -1, which doesn't exist. I don't know why it didn't cause + problems with the regular peer mode. +- Stopped using all named RNGs to check game consistancy. I have too many + named ones that aren't all used in the gameplay loop. Now I just pick a + few key RNGs and use those. +- Added another byte to the packets sent from the master to the slaves that + contains the master's maketic. This is so that the slaves speed up or + slow down to match the master instead of each other. + +May 22, 2003 +- Corrected my misunderstanding of how the frameskip array is used in + d_net.cpp. +- I found out how to make three player games perform fine on XP: Set the + processor scheduling back from "Background services" to "Programs". + Here's a link to an article that explains the values for the + HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\PriorityControl\ + Win32PrioritySeparation key that this setting changes: + . I think + it's probably more the short time slices than anything else that makes + it perform well. Why had I changed it from "Programs" in the first place? + Because I was having trouble with background console programs sucking + up all the CPU time, so I wanted to give everything equal time slices. + I now have the registry key set to 0x20, which is short, fixed time slices. + Not quite the same as the "Programs" setting. - Using the release build + instead of the debug build obviously helps performance, too. + +May 21, 2003 +- Tried playing a multiplayer game on two machines for the first time in + ages, and it went out of sync very quickly. It turns out that my laptop + had genblockmap false, and my desktop had genblockmap true. Since this + obviously makes it go out of sync, I'll have to make it a server var. + Gennodes will need the same treatment, since it also implies genblockmap + even if genblockmap is false. For ZDoomGL, however... I suppose I'll need + to disable the blockmap regeneration if the nodes are only being built + to get GL information. +- Wrote some code to let the net arbitrator function as a packet server. It + makes everybody jerky, but that might just be because I'm running two + clients on XP, and XP seems to do much worse at dividing processor time + up equally between processes than NT 4. A two player game on one machine + runs fine after a second or two, but three players is crap. + [Okay, tried it on three separate machines, and it wasn't jerky, so that's + a relief. Gametic was lagging behind maketic by 4 on the host, however, so + it wasn't quite as responsive as I would have liked. That's opposite what + I would have expected, since the host gets the ticcmds from the other + players first. Maybe I need to investigate the code where it "speeds up + time" some more. Or maybe I need to have the master send as many tics as + it has for the other machines instead of the lowest common number of tics; + e.g. If it has 1 tic from one machine and 2 tics from another, it should + send all of them to a third machine instead of just 1 tic each from the + first two machines. For comparison, a 2 player game (which is effectively + always peer-to-peer even with packet server turned on), had gametic lag + behind maketic by 2.] +- Removed the names from these RNGs: pr_chainwiggle, pr_afx, pr_decal, and + pr_decalchoice. I don't know why it happens, but they can sometimes + disagree with each other in a network game, particularly pr_decal. Since + they don't have any real impact on game sync, removing their names keeps + them from affecting the sync check, but it also means they won't be + remembered across save games. +- Added DEM_EMPTYUSERCMD so that if a player's input doesn't change from one + tic to the next, I can save one byte in the network packet. That makes the + minimum packet size for one tic 5 bytes: 2 for the header, 2 for + consistancy, and 1 for the tic itself. I'd call that a big improvement over + the previous minimum size of 14 bytes (8 header, 2 to hold the list of + players in that packet, 2 for consistancy, and 2 for the tic). +- Fixed: Damaging a monster would not reset its threshold value, so it would + be more willing to switch targets than it should have been. +- Changed AActor::StaticSpawn() to not initialize the LastLook member for + non-monsters. This caused the game to go out of sync when non-essential + actors were spawned on one machine and not another (e.g. decals and bot + aiming helpers). + +May 20, 2003 +- Beefed up the consistancy checking so that it now considers more than just + the players' X positions. + +May 19, 2003 +- Optimized the size of the network packets some. The minimum header size is + now 2 bytes instead of 10. Note that I removed the checksum from the header. + The network transport should already be doing error checking and not provide + us with any corrupt packets. In the highly unlikely event that somebody ports + this back to DOS, they'll need to add a checksum in there. Also made some + corrections to the packets that get sent around before the game begins. + +May 16, 2003 +- Made active powerup colors customizable via dehacked misc section. +- Changed the netbuffer checksum to use CRC32 (which gets used like a CRC28 + because the top 4 bits are chopped off to make room for some command bits). + I could probably get rid of the checksum entirely, since UDP packets + already include their own checksum field. +- Fixed: When one player in a network game unexpectedly quit, everybody else + would bomb out with ECONNRESET. Now the i_net.cpp code pretends that those + players sent out NCMD_EXIT packets. Why a connectionless protocol like UDP + would return a connection-oriented error code, I do not know. +- Starting a network game with the -join parameter before the host started + would fail with ECONNRESET. This is no longer an error, so you don't + need to start the host first anymore. +- Added MF2_NOTELEPORT to TeleportFog. + +May 5, 2003 +- Fixed: P_Move() used the actor's default speed instead of the actor's + speed. + +May 2, 2003 +- Added mousewheel support to the console. + +April 26, 2003 +- Uploaded 2.0.47. +- Added support for custom episode definitions (for all games, not just + those that are already divided into episodes). +- Fixed: Doom Shareware does not have an ENDPIC graphic, so don't try to + show it. +- Added a visible inventory bar for Doom. + +April 25, 2003 +- Added APROP_Ambush for Set/GetActorProperty. +- Added myasctime() function, which is equivalent to + asctime(localtime(&time(NULL))), except it doesn't crash when the current + time is before Jan 1, 1970 (which makes localtime return NULL). + +April 20, 2003 +- Added a NULL file check to M_NotifyNewSave(). I was sent a crash report + where this appears to have been the cause. +- Fixed: Using teleporters with actor hits ceiling/floor triggers was + problematic because the actor would still be clipped to its new ceiling + or floor even if the teleport made it unnecessary +- Finished Thing_ProjectileIntercept so that it works in three dimensions. + Big thanks to all those on the notgod phorum who helped me with the math. + +April 16, 2003 +- Extended my speedup trick for 1024x768 so that it also gets used for + 2048x1536 and 512x384. I can now play the beginning of MAP01 in 2048x1536 + at ~28 fps instead of 14 fps. 512x384 is so small that it doesn't really + matter, but I think it is a few tenths of a millisecond faster now. What + I think is going on: If the screen's pitch is a power of 2, then drawing + columns (which Doom does a lot of in its renderer unless you're looking at + the floor) will flush the cache lines a bunch and bring performance + plummetting, as it has to transfer much more data to and from main memory. + By making the pitch slightly larger so that it isn't a power of 2, the + cache gets utilized better, so performance goes up. +- Started adding Thing_ProjectileIntercept special (175). It is identical to + Thing_ProjectileAimed, except it leads the target. +- Fixed: Activating SoundEnvironment actors did not work, because I forgot + to include the AActor * parameter in the prototypes. + +April 14, 2003 +- Uploaded 2.0.46. +- Added support for adding new projectiles to DECORATE. +- Changed the summon cheat so that it can be used to shoot projectiles + and not just spawn them in place. +- Made the Lost Souls spawned by Pain Elementals inherit the Pain + Elementals' hate information. +- Fixed the poison dart's poison application. +- Added a NULL-actor check to P_DisconnectEffect(), because I received a + crash log where it was called with a NULL actor. + +April 12, 2003 +- Fixed: The calulation of secplane_t::ic was different in p_setup.cpp's + slope spawners than it was in secplane_t's serializer, so if a demo was + made on a level with slopes, and the game was saved during the course of + the demo, the demo would desync if the player went on a slope after the + save. +- Fixed: If a DirectInput 8 interface could not be obtained, the game would + hang while trying to read mouse input using the DirectInput 3 interface. + This is because DI8 has a DIDEVICEOBJECTDATA structure that is 4 bytes + larger than DI3's. Unfortunately, IDirectInputDevice::GetDeviceData() does + not do anything useful when passed a structure larger than it recognizes. + It leaves the buffer alone, does not touch *pdwInOut, and returns DI_OK, + which is quite misleading. I had to step into DirectInput before I + realized what was going on, although I could have also discovered it by + browsing dinput.h more thoroughly. + +April 11, 2003 +- Moved joystick reading out of I_GetEvent() and into I_StartFrame(). That's + where it was in the original DOS Doom, because reading a traditional + gameport can be an expensive operation (though I think USB is much faster). + +April 9, 2003 +- note to self: Remove BOOGA s +- Fixed: Thing_Projectile2 wasn't shifting the zspeed over. +- Fixed: The slopes created with P_SetSlope() had their orientations inverted. +- Time to upload 2.0.45. +- Made "cyborg" a synonym for the "other" gender, for compatibility reasons. +- Fixed: Forget "== 0" after stricmp (Line1, "No Ice Death"). + +April 8, 2003 +- Uploaded 2.0.44. +- Changed A_FreezeDeathChunks() to not use S_FREETARGMOBJ. It just destroys + the actor instead. I should probably get rid of S_FREETARGMOBJ globally, + since it isn't really needed with my stale pointer cleanup code. +- Fixed lockups caused by changing the TID of an actor stored in another + actor's LastLook member because of Thing_Hate. +- Made MF4_NOICEDEATH accessible through Dehacked as "No Ice Death". +- Added "No Autofreeze" as a misc Dehacked setting. +- Fixed the "Entering Unnamed" text that could be seen when finishing a game. +- Fixed: Frozen things could not be shattered with radius damage, because the + thrust they got after the damage would reset their tic counters to 3 seconds. +- New: The marines now start with the same sprite scaling as the player, and + AScriptedMarine::SetSprite() now copies the scaling of the actor it's taking + the new sprite from. +- Added some code to check for fake floor/ceiling sector actions when an actor + moves up or down because of moving floors and ceilings. +- Fixed: SetActorProperty for APROP_Health assumed you were working with + players after I added the player fix for it. +- Fixed: The plasma ball still had MF2_ICEDAMAGE from my testing. +- Fixed: Gender selection in the menu was broken because I had changed to + "cyborg" to "other" in m_menu.cpp but not in d_netinfo.cpp. Justification: + You can have male and female cyborgs, so cyborg isn't a proper gender. +- Some files were missing from the VC6 and Dev-C++ projects, so fixed that. + +April 7, 2003 +- Uploaded 2.0.43. +- Fixed incorrect end-of-LevelInfos detection. Interestingly, it only crashed + when compiled with GCC. +- Updated the crash logger to display the exception information for an + access violation. +- Added Thing_Projectile2 ACS command. It's mostly a clone of the + Thing_Projectile and Thing_ProjectileGravity specials, but it lets you give + the projectile a TID. +- Added a newtid parameter to the Thing_ProjectileAimed special. +- Fixed flat warping so that it does not crash with flats smaller than 64x64. +- Fixed: The secondary frost shards shed by the mage's primary frost missile + could damage the player who shot them. +- Made the randomization of the starting tic count for missiles an actor flag. + This is so that Heretic and Hexen missiles can be better used in a Doom game. + +April 6, 2003 +- Added a check for NULL players to DCajunMaster::WhatToGet() because I got + a bug report where that happened. +- Fixed: MF3_NOTARGET only worked if the attackers's TID was non-0 or you used + Thing_Hate on the target. +- Fixed: The Heretic staff was able to damage ghost enemies, which it + isn't supposed to be able to do. +- Fixed: In their charge attack, Minotaurs could only do damage to other + monsters and not to players. + +April 5, 2003 +- Created a minimal FLAC distribution with just the parts ZDoom needs to + compile, so the lazy people who want to build don't need to grab the + library themselves. +- Changed A_FreezeDeathChunks() so that it spawns more ice chunks for large + things than it does for small things. +- Added a generic ice death, so things can turn to ice and shatter without + having a specific ice death. Now you can use bex to create a Doom missile + that does ice damage and watch Hexen's cool ice death. +- Fixed: Radius damage did more thrust as your distance from the bomb + source increased. + +April 2, 2003 +- Changed ripper projectiles to do damage per-tic and not per-step. This is + more intuitive and also makes for better Heretic/Hexen compatibility, + since those games don't adjust the step count with projectile size (unless + the radius > 15, but none of their ripping projectiles are that big). +- Fixed some weirdness that can happen when the listener is positioned + directly on a sound source in 3D sound mode by moving the listener + back slightly from its true location. It was especially pronounced with + the nForce but can also be heard with the Audigy depending on the + environment settings. +- Fixed: Sector sounds always played at Z coordinate 0, so they weren't + always audible when using 3D sound. +- Added all the EAX presets from UT2003 and verified that the SNDEAX parser + actually works. Also tweaked the EAX editor a bit. + +April 1, 2003 +- Updated to FMOD 3.62. +- Fixed: Loading more than one dehacked patch (through some means other + than an include statement) that altered state information would not work + because only the first one would be able to find the correct locations + of the original numbered states. + +March 31, 2003 +- Fixed: PCD_PRINTNAME with input values 1 through 8 did not work properly. + +March 29, 2003 +- Added support for normal, buring, and frozen deaths to decorations. Still + need to test these. +- Changed P_SeekerMissile() to aim at the center of targets when seeking + vertically, rather than at the targets' feet. +- Fixed: MF_ICECORPSE was not being set when things froze to death. +- Changed DCanvas::TextSWrapper() so that it can draw characters that are + clipped, since that was fixed in the underlying block drawers a long + time ago. +- Fixed: V_BreakLines() crashed if it encountered a character wider than the + width of the box used to break the text in. + +March 27, 2003 +- Added support for playing SLIGE-generated maps without running them through + a node builder first. + +March 26, 2003 +- Added support for FLAC music and sounds. See + for more information about what FLAC is. Since it's a lossless codec, I + don't really want to see people using it for music, but the option is + there none-the-less. All the sounds in zdoom.wad (sans DSEMPTY) have now + been compressed using FLAC. +- Added a fix for fonts that contain color 255 in their glyphs. LWM had some + fonts like this, and it counts as a bug in imagetool (which I have now + fixed). + +March 22, 2003 +- Made more flags available to decorations. + +March 21, 2003 +- Added Alt-Enter as a hotkey for toggling between fullscreen and windowed + modes, as is customary for Windows programs. Also discovered that I can't + seem to run fullscreen through the debugger anymore without the game + window minimizing. [Must have been something screwy going on then; I can + run it fullscreen under the debugger now.] +- Revamped the joystick menu to support axis mapping and multiple controllers. + Under Windows versions that send DBT_DEVNODES_CHANGED broadcasts, it even + updates itself automatically when you attach/detach USB controllers. +- Changed MF2_REFLECTIVE behavior so that missiles also get reflected + vertically. +- Changed all the weapon state functions' prototyes from (player_t*, pspdef_t*) + to (AActor*, pspdef_t*). Now they have the same first parameter as the + standard state functions, so bex/dehacked patches should be able to use the + standard code pointers with players, so long as they don't need a target + or something similar that player's don't maintain. It also means that weapon + functions that do very generic things like just playing a sound should work + with non-weapons. +- Changed AActor::UpdateWaterLevel to accurately reflect when a player's eyes + are underwater. +- Made setslot usable from KEYCONF lumps. + +March 19, 2003 +- Updated the joystick code to use DirectInput instead of the old multimedia + system. +- Removed dxcrap.cpp. I am linking with dinput(8).lib again. +- Fixed: If Trace() did not hit a wall in a sector with a fake floor before + the trace ran out, it would not set CrossedWater even if the trace crossed + below the fake floor. +- Altered P_LineAttack() so that it doesn't spawn bullet puffs on lines + using the Line_Horizon special. + +March 17, 2003 +- Added a check for a NULL lastenemy in A_LightningClip() because Mike B. had + a crash where this was NULL. +- Gave the fist and chainsaw AmmoUse values of 1, so dehacked patches that make + them ammo-using will use ammo without needing to specify a new AmmoUse. +- Added new sound sequences for the Heretic doors, because they don't have the + same sound usage as Doom's. +- Fixed: The powered-up phoenix rod would use ammo when a Tome of Power ran out + and infinite ammo was enabled. +- Added SpawnPoint initialization to AActor::StaticSpawn(), so things that get + spawned during the game can respawn someplace other than (0,0). +- Changed projectile impact lines so that the projectile's owner activates the + script instead of the projectile itself. Projectile cross lines will still be + activated by the projectile. +- Fixed: The window drew over the video window when WM_PAINT was received while + playing a movie in windowed mode. +- Fixed: Closing the window while a movie was playing would close the window + without quitting the game. +- Fixed: Fake inventory items cleared their special after being picked up. +- Added support for setting the player's speed using SetActorProperty() + and APROP_Speed. This speed gets multiplied to the player's normal + speed. +- Changed A_BrainSpit() so that it does not rely on a pointer to the + DBrainState in the BrainEye that calls it. This allows it to be used + by actors other than the eye, which is necessary because of Dehacked. + +March 13, 2003 +- Fixed: Loading a FON2 font without a space or N character would read + (essentially) undefined memory when calculating the width to use for the + space character. + +March 11, 2003 +- Removed the old midiStream-based code. +- Wrote a SNDEAX lump parser. +- Fixed: Aliases defined in KEYCONF lumps were still saved to the ini. They + could also override aliases stored in the ini. Now, if an alias is defined + in a KEYCONF, it will not be saved to the ini, and if there is an alias with + the same name already defined in the ini, the original alias will be kept in + the ini when you quit. + +March 10, 2003 +- Fixed: Defining an animation for a non-existant texture could stomp on memory. +- Added support for different sound zones with individual EAX settings. To assign + sectors to different zones, you either make them physically unconnected or you + use a Line_SetIdentification with the second parameter set to 1. +- Fixed: Changed FindLevelByWarpTrans() search order to return later warptrans + matches in favor of earlier ones, so you can start Hexen DK with the menu + again. +- Fixed: AZShrub2::GetExplodeParms() and AZXmasTree::GetExplodeParms() were + mis-named and had the wrong prototypes, so they were never called. +- Added a hack when playing Hexen so that the BLANK texture is permanently mapped + to the empty texture. The standard Hexen maps use it as an empty texture, + even though it isn't really empty. + +March 8, 2003 +- Changed sprite initialization so that TNT1 is always the first sprite. This + is what I wanted a long time ago, and I think it used to be like this but + got changed when I rearranged the sprite table initialization. +- Changed the TID target search so that it looks for actors in the same block + before it searches the actor chains. Helm's Deep's AI seems a bit quicker once + things get going now, but there are still bits of architecture (lots of masked + mid textures) that are going to slow it down, and it's still slow at the + beginning and when the second wave starts moving. + +February 24, 2003 +- Decided to take up the challenge and figure out how to load Strife textures. + It looks like they just removed some unused fields from the texture + directory. Now you can actually load strife1.wad and look at the maps, but + there are still plenty of oportunities to make it crash if you try to use + it as an iwad. +- Added a check for negative texture patchcounts to R_InitTextures(), just + for the people who try to use -iwad strife1.wad. +- Fixed: The game would hang when trying to overwrite an read-only savegame + for the same reason it used to hang when playing back a save operation + recorded in a demo: The save itself was cancelled, but the request to save + was not cancelled, so it would endlessly try to save the game. +- Fixed: P_BounceWall() would bounce every bounce type off of walls, but it + shouldn't have done anything for MT2_HERETICBOUNCE. + +February 18, 2003 +- Changed: P_RadiusAttack no longer tries to apply damage when distance is 0. + +February 15, 2003 +- Changed P_SetSlope() to scale by ANGLE_90 instead of ANGLE_180. Silly me; + Scale() works with signed ints, but ANGLE_180 is to big for that, so it + could overflow. + +Feburary 13, 2003 +- Changed: When locating a map by its warptrans number fails, it can now try + to locate it by map number instead. Apparently, an old version of the Hexen + demo did not have warptrans. + +February 12, 2003 +- 2.0.42 time. +- Fixed: If weapon drop was on and a player respawned before their body went + nonblocking, they wouldn't actually drop a weapon. +- Dehacked compatibility fix: MF3_ISMONSTER now copies the state of + MF_COUNTKILL for any actors that get patched. +- BOOM compatibility fix: Lines with a type of 0 still need their ID set to + their tag. P:AR's rotating light on E1M1 requires this for the teleport line + its voodoo doll uses. +- Added code to set the MIDI output device's volume to full for devices that + support it. That makes the full range of volumes available without having + to set the volume with the Windows mixer. +- Fixed: The GiveInventory command would give one inventory item if the amount + was 0. +- Fixed: Inventory items that were not present in a savegame were not reset to + 0 when the savegame was loaded. + +February 10, 2003 +- Added wildcard support to the cmdlist and cvarlist commands, so you can look + at just a subset of the lists. +- Fixed: The total monster count reset when loading saved games so that it would + no longer include monsters that spawned after the start of the level. +- Uploaded 2.0.41. +- Fixed: When a MIDI or MUS song stopped because it reached the end of the song + (if it was nonlooping), the midiOut device would not be released. +- Removed the DirectMusic MIDI option because it wasn't working, and Timidity++ + is a better sounding solution if you can't do hardware wavetable MIDI. +- Fixed: ProduceMIDI() crashed because it had the wrong header check. +- Fixed looping problems with the new MUS player because I accidentally moved + some code in the wrong place. The new MUS and MIDI players also had semi- + random default channel volumes for the same reason. + +February 8, 2003 +- Uploaded 2.0.40. +- Added support for Apogee's EMIDI controllers. + +February 7, 2003 +- Wrote new MUS and MIDI player routines that do not use MIDI streams. Instead, + they use a time critical thread and midiOutShortMsg to send MIDI messages to + the playback device. I have not tried this with a lesser OS like Win98, so I + hope it works okay there. I want to remove the old player code so I that I + just have one method to use for playing MIDI data. This approach offers two + advantages over the stream method as it was employed: 1) Minimal setup time, + so music changes can happen faster. 2) Volume support for everything that + supports channel volume controllers, which is everything I tried. I think I + might also add support for the Apogee Sound System's EMIDI files just because + I have some docs for it. + +February 6, 2003 +- Added mouse and joystick option menus. Also added an option not to + prescale the mouse movements. I've done this all along because it + feels like the vertical sensitivity is much higher than the horizontal + sensitivity, so the prescaling compensates for that perceived difference. + But it could be the reason some people gripe that "ZDoom's mouse feels + different from Doom's! It sux0rz delux0rz!" So now they can turn it off + with a single switch instead of messing with the various mouse sensitivities + to decompensate. +- Fixed: The game did not give up the mouse if use_mouse was false. +- Changed the default ID for lines without a Line_SetIdentification or + similar special to -1 instead of 0. This is so that you can use + Line_SetIdentification to give a line ID 0 and still tell it apart + from all the other lines on the map without IDs. This emulates standard + Hexen behavior and also fixes a bug on caldera.wad, MAP10 where almost + every line on the map would get set to a switch texture right after + you entered it. +- Added support for Hexen's warptrans mapinfo command. I see now that it + gets used to determine which map you start on for a new game. +- Changed MAPINFO parsing so that maps named ExMy will automatically get + their levelnum set to xy unless you specify something different. MAPxx + maps were already getting this treatment. +- Added a syntax error message if you don't specify a valid keyword for a + block in ANIMDEFS. +- Added a non-player check to the A_DoomSkinCheck and A_HereticSkinCheck + functions. I guess if somebody uses Dehacked to assign the player death + states to something else, they could get called by something that isn't + a player. + +February 5, 2003 +- Changed A_KeenDie() to search among whatever called it and not exclusively + among Keens. + +February 4, 2003 +- I can now build a fully working version of ZDoom with MinGW. Perheps now it + is time for me to turn my attention back to Linux. + +February 3, 2003 +- Fixed a stupid bug I added to the tl_tab calculations in fmopl.cpp. +- Fixed: Monsters that hated both players and monsters would crash if there + was more than one player in the game. +- It's 2003 now, isn't it? + +February 2, 2003 +- Uploaded 39.cab. +- Fixed: Dormant actors still bled. +- Added a PatrolSpecial actor (doomednum 9047). It works like + InterpolationSpecial, but for PatrolPoints instead of InterpolationPoints: + When a monster reaches a PatrolPoint, it will execute the specials of any + PatrolSpecials with the same TID as that PatrolPoint. +- Added a new ACS command: SetMarineSprite (tid, "otherClass"); You give it + TID of the marine(s) to change and the name of an actor class to get the + sprite from. + +February 1, 2003 +- Fixed a Heretic/Hexen bug: Actors with a crash state would not crash if + they died on the ground. +- Changed I_InitInput to request a DirectInput 3 interface instead of + whatever the header specifies. It should work with NT 4 again, now. +- Added checks to the marines' attacks to prevent crashes if their targets + unexpectedly disappear. +- Fixed: Monsters could start targetting themselves if they blew up a + nearby barrel (or pod). +- Changed A_VileAttack() so that the Archvile can't hurt itself with its + own fire. +- Fixed: In Hexen you can queue scripts for maps on other hubs. They don't + get cleared along with the world variables, as I had mistakenly believed. + +January 31, 2003 +- Removed the need to press D to set the default resolution at the video + modes menu. This seemed to be a common point of confusion (despite having + the directions right there in the menu), but more importantly it makes the + menu fit on one screen when using 9 pixels per row of text instead of 8. + Heretic and Hexen both look better with 9 pixels of room rather than 8. +- Fixed: Scrolling up past the top of the menu was hard-coded to assume + the Doom font when finding the bottom of a menu, so it didn't work + correctly for Heretic or Hexen. +- Fixed: When pressing up arrow to scroll the top of a menu, its scrollpos + could get set to -1. +- Removed the limit on the number of frames that can assigned to an + animation sequence with ANIMDEFS. + +January 30, 2003 +- Fixed: The old Thing_Hate behavior no longer worked. +- Added the Thing_ChangeTID(oldtid, newtid) special to change the TID of + anything with oldtid to newtid. If oldtid is zero, then whatever activates + it gets its TID changed to newtid. +- Added the ActivatorTID() ACS command to retrieve the TID of the actor + that activated a script. +- Added the PlayerNumber() ACS command for finding out which player is + executing a script. Returns 0-7 for an actual player and -1 for + anything else. +- At GooberMan's request, added bool as a synonym for int to ACC. +- Added support for a KEYCONF lump. This is a limited console script that + can only execute the commands alias, defaultbind, addkeysection, + addmenukey, weaponsection, and addslotdefault. Now a wad with custom + key and weapon bindings doesn't need a separate .cfg file to operate. +- Added weaponsection console command for specifying that the weapon slot + assignments go to some ini section other than the default. +- Fixed: Processing an ACS object's MINI chunk initialized one map variable + too many. +- Fixed: Map variables that were not stored in a savegame were not + zero'd when the game was loaded. +- Changed: Include directives in Dehacked patches will now look for the + specified file in the same directory as the patch they are used from + before they look in the current directory. + +January 29, 2003 +- Changed: Just loading a game is no longer enough to assign a quicksave + slot. You need to either save a game or quickload first. +- New: The pullin command now looks for wads in the same directory as the + script that executed it before it looks for them in the current directory. +- Fixed: Switch definitions in ANIMDEFS with an on state that ends on the same + texture it began on would crash instead of properly detecting the error + and quitting with a useful error message. +- Changed: Voodoo dolls no longer affect a player's deltaviewheight. +- Changed: Voodoo dolls can now be pushed around by damage even when the + player is invulnerable. +- Fixed a bug in P_DamageMobj() I introduced after some reformatting that + prevented voodoo dolls from being pushed around. +- Changed the final output of the OPL2 synth to look like this: + final_output = (chip_output * 1.5) - 18000 + This is because most of the instruments the Doom games use create + waveforms that are primarily located in the upper half of the wave. + (Because, of the four basic waveforms of the OPL2, all but one of them + only use the upper half of a sine wave.) +- Fixed the assembly part of OPLmusicBlock::ServiceStream() to work with + odd-sized buffers. +- Fixed: When the player does not have the invisibility power active, the + weapon would always be drawn with STYLE_Normal instead of whatever style + the player had. +- Added the cleric and mage Icon of the Defender behavior. + +January 27, 2003 +- Fixed the finetuning of double-voice OPL2 instruments, so now the Heretic + musics don't sound like crap. +- Changed the OPL2 emulator to write data to the output buffer a voice at a + time instead of a sample at a time. The speedup isn't as great as I would + have liked, but it does let me avoid doing work for voices that aren't + playing anything, and it should make it easier to optimize in the future. +- Just a note: I think the OPL2 outputs samples at ~49716 Hz. +- Removed the x2 amplification from fmopl2.c's output, because some of the + Heretic songs made it overflow. Looking at sampled output however, it seems + most of the data is going only into the positive half of the wave, so perhaps + I could subtract some constant from the data and keep the amplification. +- Reduced the length of the OPL stream so that it gets filled fourteen times + each second, so that it interrupts the main thread more consistantly and + has less of an impact on the game's "smoothness". + +January 25, 2003 +- Changed the frequency calculations in the OPL2 player to match DMX's (or + so I think). +- Fixed an amplitude problem with the OPL2 synth I inadvertantly introduced + while trying to optimize it. + +January 24, 2003 +- Uploaded 38.cab. +- Added a fix to prevent you from becoming a zombie player when there are + voodoo dolls on a level, and each accumulates enough damage to kill you, + but none of the dolls receives enough damage individually to die. +- Changed monster patrols so that when a monster reaches the end of a path, + it looks in the same direction as the final patrol point. +- Fixed: PIT_RadiusAttack() ignored MF2_NODMGTHRUST, so Hexen's poison cloud + would push things away from it. I also used this to determine if that + function will spray blood splats, but perhaps a poison damage flag would + be better? +- Added the ACS commands SetPlayerProperty and GetPlayerProperty. +- Added different versions of the scripted marine that each use a different + weapon. There's also an ACS command to let you change their weapons at + any time. + +January 23, 2003 +- Added some more Thing_Hate types that can be used to make monsters that hunt + both monsters and players or to ignore players that attack them. +- Made Bishops spawned by Heresiarchs and Wizards spawned by D'Sparil inherit + their masters' hate preferences. +- Made Heresiarchs and Bishops ignore each other. I didn't check if this was + original Hexen behavior or not, but it seems stupid for a Heresiarch to kill + a Bishop it just summoned simply because the Bishop happened to hit it. +- Added a new invisible thing (#9076) that you can make monsters attack using + Thing_Hate. It's probably best to place this next to something solid, since + it blocks projectiles (including the player's) and affects the player's aim. + The angle you give it determines how much health it has, 1 degree is 10 hit + points, 2 degrees is 20 hit points, etc. Give it an angle of 0, and it never + dies. The angle field is used for this instead of one of the argument fields + so that it can still execute a death special. +- Fixed: P_NightmareRespawn() assigned the old body's spawn parameters to the + teleport flash instead of to the new body, so when the new body respawned, + it would respawn at (0,0) instead of its original location. Also set the + respawn chance back to ~1.6% instead of the 100% I had been using earlier + for testing. + +January 22, 2003 +- Uploaded 37.cab. +- Played with A_Chase() a bit more so that monsters that hate monster groups + will look for closer monsters on their way to a monster they can't see. + +January 21, 2003 +- Improved Thing_Hate with a third parameter. Now we have Thing_Hate (tid1, + tid2, type). If type is 0, it behaves just like before: Everything with tid1 + chases after the first thing with tid2 and then promptly forgets their hate + once that thing dies. Set it to 1, and it's much like normal except instead + of looking for players everything with tid1 looks for something with tid2. + And if type is 2, it's just like type 1, except the monsters with tid1 don't + actually need to see any monsters with tid2 before they start chasing after + them, so it's somewhat closer to type 0 than type 1 is. +- Changed Hexen player jumping velocities from 9 to 9.75 because they weren't + jumping as high as they should have been, even though 9 is the value Hexen + uses. The 9.75 was arrived at by playing Hexen.exe, standing next to a wall + to see how far up the texture the player gets when he jumps, and then + tweaking until ZDoom was approximately the same. It is enough, at least, to + make the clock gear in hexdd MAP57 accessible without the Wings of Wrath. + +January 20, 2003 +- Fixed: Dormant monsters should not enter their SeeState when Thing_Hate is + used on them. +- Fixed: In Hexen, the Wings of Wrath do not expire at all in single player + games. I had erroneously believed that landing on the ground would + temporarily halt their timer until you started flying again (which is + incorrect). +- Fixed: At the easiest difficulty, P_DamageMobj halves damage. If the damage + was one, it would become zero. Now if the damage is one, it stays one. + +January 18, 2003 +- Added a PointerSubstitution() method to DObject to replace all pointers + to one object with pointers to another object. This is so that when + something morhps or unmorphs, enemies targetting that actor will be + targetting the correct actor instead of the stale one. +- Added: In Heretic, killing a player as a chicken turns you into a + "super chicken." ZDoom was missing this. +- Removed the redundant P_HealRadius() function. +- Fixed: Palette remapping isn't enough to make Doom skins work with Heretic + because the two games also use different death animations. +- Fixed: The Icon of the Defender gave the name of the Ring of Invincibility + when it was picked up. +- Fixed: The warp console command crashed if you didn't specify enough + parameters. +- Added means-of-death as a third parameter to Thing_Damage. +- Fixed: Items that had been dehacked would not have their MF_DROPPED bit set. +- Added a ShouldStay() method to ADehackedPickup() so that it can get + rerouted to the real pickup. +- Fixed: Single player demos played back with different RNG seeds than they + were recorded with. + +January 16, 2003 +- Fixed assignment of partner segs in FNodeBuilder::FixSplitSharers(). + +January 14, 2003 +- Added NULL-actor checks to P_CheckSight(). + +January 13, 2003 +- Fixed: Advancing to a new level would subtract the number of live monsters + on the old level from the total number of monsters on the new level. +- Fixed: The game tried to play the hall music when doing non-Hexen endings. +- Added world and global arrays for ACS. They are somewhat different from + map arrays: They are one-dimensional and you don't specify a size when + you declare them. Instead, they grow as-needed during normal use. +- Removed sp from DLevelScript, because the stack pointer is always 0 when + RunScript() returns. +- Fixed: PCD_INCMAPARRAY and PCD_DECMAPARRAY used the wrong stack value for + the array index. + +January 11, 2003 +- Assigned spawnid 154 to the Baron's fireball (to be added as T_BARONBALL + to zdefs.acs). + +January 10, 2003 +- Changed sectorsound to use CHAN_AUTO instead of CHAN_BODY. Otherwise, not + all the Hexen "puzzle" switches sound right. +- Fixed: The STREAM_ENUM macro in a_artifacts.h used call-by-value instead of + call-by-reference, so artifact types could be written to an archive, but + they couldn't be read back from it. +- Removed inventorySlotNum, as it was unused. +- Fixed: Reading strings with FArchive would never return NULL, and it left + copies of all the strings read behind in memory. +- Fixed: When sprites were renumbered in a recompile, the sprite scanner in + FArchive would find matching-named skin sprites instead of the real sprites. +- Added a "vapor" SaveVersion 205. This is a version 204 save written by + versions 2.0.33-2.0.36 because arti_pork was added in 2.0.33 and I did not + bump the version. There will be no savegames that are actually written as + version 205, because I changed the way artifacts are saved so I won't have + to worry about this particular problem again in the future. +- Uploaded 36.cab. +- Added a new player property for ACS (PROP_TOTALLYFROZEN #4). When active, it + won't let the player do anything but press +use, which is what PROP_FROZEN + was really supposed to be. +- Added MF_NOLIFTDROP flag for no-gravity things that should not move down + with lifts if they are standing on the lift. This is only used with the + various bridge actors because various ZDoom maps break if they move with the + lift, and the Hexen bridge has visual glitches if it moves so I doubt + anybody used this Hexen behavior. +- Got rid of the orbit table for Hexen's bridge balls. Now they move every tic + instead of every fifth tic and use the finecosine/finesine tables directly. +- Fixed: When a monster was spawned through a script but there was no room + for it, it would still count toward the total monsters on the level. +- Fixed: P_Thing_Spawn() set MF2_PASSMOBJ for flags instead of flags2, so it + was really setting MF_NOCLIP, and the P_TestMobjLocation() check would + always succeed. + +January 9, 2003 +- Added a new player property for ACS (PROP_FLY #3). +- Added a level flag to set monster death special behavior to the Hexen mode: + The things that die activate the specials; not the things that kill them. + You can use MAPINFO to turn this off in Hexen and turn it on in Heretic/Doom. +- Fixed: The Heresiarch used its death inflictor instead of itself as the + activator of its death script. +- Fixed: DLevelScript did not have its activator member recorded in its list + of object pointers. +- Fixed: Saving a game in a demo would cause the program to hang when that + point was reached in the demo. +- Made the game recover from failures during dearchiving thinkers so that + you can actually do more stuff without it crashing. Just needed to add + a try/catch block so that it can undo what was done before it failed. +- Added the -savedir option to specify where savegames are stored. +- Fixed a bug in PIT_FindFloorCeiling(): It used tmthing even though + P_FindFloorCeiling() didn't set it. + +January 8, 2003 +- Fixed: The hexen main menu showed the spinning skulls from Heretic instead + of the fire bulls. + +January 7, 2003 +- Uploaded 35.cab. +- Fixed the node builder to successfully create GL nodes with >64k segs. +- And now the node builder is fixed point again. (Undo is nice.) Making it + exclusively floating point made vrack2big3's BSP take 10 seconds longer to + build. Since the goal was to avoid the cost of int-to-float conversions + every time PointOnSide was called, I'd say it backfired miserably. With just + the change to PointOnSide, it's only about 1 second slower than 2.0.34. +- Okay, the node builder now uses floating point for all its calculations. +- Changed FNodeBuilder::PointOnSide() to use floating point to avoid overflow. + Methinks I should just change the node builder to use floating point + exclusively. Then it won't have to do int-to-float calculations repeatedly. +- Changed A_Tracer() to set the puff type before it calls A_SpawnPuff(). +- Fixed: P_RecursiveSound crashed if it encountered a line that was marked + two-sided but lacked a second side. +- Fixed: The cursor in the Advanced Sound Options menu started one line too + high. +- Added Hexen support to giveinventory/takeinventory/checkinventory and made + them work with cross-game items. +- Fixed: Clock gear 3's inventory image was misspelled as ARLTIGER3. + +January 4, 2003 +- Fixed: findFreeChannel() in mlopl.cpp would try very high channels instead + of the correct ones and access undefined memory. +- Fixed: The Thing_Spawn special would fail to spawn things without + MF2_PASSMOBJ set if there was something already occuping their x,y space, + whatever that thing's z coordinate. This was problematic with the Hexen + bridges. +- Fixed: DDrawFB::PaintToWindow() can get called during the render process + when a WM_PAINT message is received. If the framebuffer was already locked, + this would overwrite the buffer pointer and pitch with those of the + physical screen. This is not normally a problem, but one way to get a + repeatable crash was to turn on any of the pixel doubling modes and switch + from fullscreen to windowed. Simple fix: PaintToWindow() does nothing if + the screen has a non-zero LockCount, and Update() zeros LockCount before + it calls PaintToWindow(). + +January 3, 2003 +- Uploaded 34.cab. +- Added a parameter to AActor::LinkToWorld() to tell it to use the original + incorrect point-on-line side calculations of the Doom engine. This is just + so that the map spots in the emerald key room of Hexen MAP01 will spawn in + their intended sector and not the sector that is technically correct. +- Added a new compatibility option: compat_usewallblocking. Now I see that + there are wads that used non-use lines to block the player from activating + a use line. +- Changed AActor::StaticSpawn() again. When spawning map things, the floor + and ceiling z's are taken from the actor's center point. When spawning + things during gameplay, the true z's are found instead. So P:AR's player + starts are still working, non-players placed in the map will be able to + get stuck in the floor of a neighboring sector, and anything spawned + during the game with ACS (or otherwise) will have the "correct" behavior + and know what their true floor and ceiling z range is. TBD: Should this + be players-only? Decided: Yes, otherwise bullet puffs will appear on + window sills instead of the actual spot where the bullet hit. +- Changed P_FindFloorCeiling() to use different global variables than + P_CheckPosition(), because it can be called within P_CheckPosition(). + Doom has too many global variables for its physics code. + +January 2, 2003 +- Uploaded 33.cab. +- Fixed A_RestoreSpecialPosition() for MF2_FLOATBOB actors. +- Fixed: Made the porkalator and morph ovum separate artifacts. +- Fixed: In Heretic and Hexen, MF2_FLOATBOB objects are always positioned + relative to the floor. In ZDoom, they bob around a central z height, so + they need to have gravity applied to them in order to best approximate + the orginal behavior. +- Created a new function (P_FindFloorCeiling) to find the floor and ceiling + for newly-spawned things. P_CheckPosition() has side effects, so I can't + use it. This is also used by P_TeleportMove() now. +- Uploaded 32.cab. +- Fixed: EV_DoCeiling() only set the crush value for the moving ceiling if it + had a crushing type, so BOOM generalized ceilings could not do crushing + damage. +- More GCC 3.2 cleanup. Everything compiles now--except for zdoom.rc. Windres + can't handle it so I had to settle with a precompiled version. +- Split off the system-specific code from w_wad.cpp into i_wad.cpp. +- Changed AActor::StaticSpawn() so that it uses P_CheckPosition() to get the + real floorz and ceilingz to use in case the actor overlaps a line. +- Gave the fatso's fireball spawnid 153. In zdefs.acs, T_CACODEMONSHOT was + incorrectly named T_MANCUBUSSHOT. +- Created one-parameter version of the W_MapLump functions that return pointers + to const data so that the compiler can be issue warnings if they get assigned + to non-const pointers. +- Added MF2_PUSHWALL to all the Heretic monsters. +- Put back MF2_PASSMOBJ because of the unexpected consequence removing it had: + Overlapping things would push each other to the ceiling. This was most + visible with the invisible bridges, which people have commonly overlapped. + I have taken a different approach to the situation that caused me to remove + it: Now you can't push anything without MF2_PASSMOBJ while riding a lift. + +January 1, 2003 +- Uploaded 30.cab. I hope I didn't break anything I haven't already caught by + getting rid of the zone heap and switching to memory-mapped files. +- Made more input cvars global config (such as m_pitch and m_yaw). +- Changed the sound rolloff factors for Heretic and Hexen. +- Fixed: Unlike Doom and Heretic, Hexen crushers do not continue to move if + there is something being crushed underneath them. Instead, they wait for the + thing underneath to either die or move out of the way. The crushing pillars + you find the first time you visit Hexen MAP03 do not actually kill you if + they don't wait for you to die before fully closing. +- Added support for "fake" lumps so that the music system can continue to play + on-disk music files without having to include them on the command line with + -file. These "fake" lumps are automatically unmapped when they are done being + used so that their memory can be decommitted, but their file handles remain + open because I don't want to deal with also removing lumps at runtime. + +December 31, 2002 +- Changed FRandom::StaticClearRandom() so that different seeds produce more + disparate results in the different RNGs. +- Fixed: FRandom::StaticClearRandom() was not being called after rngseed was + set at game startup. +- Changed the wad loader to use memory mapped files, so now I have better + caching than what the zone heap could hope for, since the VM system does all + the work for me. +- Added a fixup in R_InitTextures() for the Doom E1 sky, which has its patch's + y origin at -8 instead of 0. +- Added the F_EndFinale() function to clean up after the finale is over, since + I can't let the zone heap do it automatically anymore. + +December 30, 2002 +- Removed the zone heap. Everything is done using new/delete and malloc/free + now, so you don't have to worry about specifying a heap large enough. +- Fixed: The [.NetServerInfo] ini sections were still read in single player + games. +- Fixed: The player class filter in P_SpawnMapThing() used SinglePlayerClass[] + instead of player_t::CurrentPlayerClass. +- Put the FMUSIC loader back the way it was so that MODs in WADs work again. +- Changed EV_Teleport() so that if it can't find any teleport destinations, + it looks for a matching map spot instead. This fixes the southern teleporter + in Hexen MAP10. +- Added MF3_DONTMORPH to the Hexen boss monsters. +- Removed MF2_PASSMOBJ flag and made it standard behavior for all actors + because of a test map I received: If an actor with MF2_PASSMOBJ rides up + a lift underneath a non-MF2_PASSMOBJ actor, the top actor would fall inside + of the bottom one once the lift stops. + +December 28, 2002 +- Changed the nodebuilder timer to use I_MSTime() instead of clock/unclock, + because very large maps can make it exceed the 32-bit resolution of + the clock/unclock macros. +- Uploaded 29.cab. +- Moved the R_ClearParticles() call out of G_InitNew() and into P_SetupLevel(). +- Experimented with the 3D sound parameters to find a rolloff factor that + best approximates the software sound. +- Updated to FMOD 3.61. +- Fixed: S_UpdateSounds() still multiplied the SoundCurve volume by 2, so + things decayed twice as quickly as they should have. I would like to get + rid of the SoundCurve use, but I'm not sure how Raven modelled the curve + for Heretic and Hexen. + +December 27, 2002 +- Fixed: The FireDemon could not be perceived to move except when strafing + because it still used PROP_SpeedLong instead of PROP_SpeedFixed. Because + this was the only place where PROP_SpeedLong was used, I got rid of it. + +December 26, 2002 +- Changed the internal subsector_t struct to use 32 bits to keep track of + segs instead of 16, and fixed the node builder up so that it works with + >64k segs. +- Changed the internal node_t struct to allow for more than 32768 subsectors + and nodes. +- Fixed: The fighter played PlayerFighterGrunt instead of FighterGrunt on his + third punch because I didn't realize the two sounds had different names. +- Changed PIT_FloorDrop() to more accurately reflect Hexen's behavior. Things + under gravity move down with the floor if the floor moves fewer than 9 units + in one tic (not 24), and no-gravity things always move down with the floor + (no matter how fast it drops) if they were standing on it. +- Changed forwardmove and sidemove scaling calculations in P_MovePlayer() + so that they won't overflow. +- Changed server vars so that only compatflags and forcewater are archived. + +December 24, 2002 +- Fixed: Autosave still worked when the player was dead. +- Fixed: The Quietus pieces had the wrong spawnids, so they were overriding + the stained glass shards. I'm not sure why they had the wrong numbers. +- Fixed: AZWingedStatueNoSkull and AZGemPedestal had their see and melee + states swapped, so they wouldn't change their appearance when activated. +- Uploaded 28.cab. +- Fixed: When "Monsters Ignore Each Other" was set, monsters could not be + hurt by ACS-spawned projectiles. +- Fixed: Underwater reverb did not work on Audigies anymore because FMOD was + only reporting them as supporting EAX3 reverb and not also EAX2 reverb. +- Fixed: Empty console command lines are not added to the history list. +- Added a new ini section so that select ServerInfo cvars can be remembered + across games. There is a different one for single player games and for net + games, and the net game version is only saved on the machine that acts as + host. +- Added useflechette command, which acts like "use ArtiPoisonBag1,2,or3" + depending on the player that uses it. +- Moved the default +showscores key in Hexen to Scroll Lock, because \ is + already used by "use ArtiHealth". +- Added the Hexen default keys for quick-use of inventory items. +- Added addslotdefault command to only put a weapon in a slot if it isn't + already assigned to a slot. +- Changed P_FindNamedInventory() to use the same names as the actors that + represent the inventory items, for consistancy. +- Gave the pod and explosive barrel MF3_DONTGIB flags so that if +- Changed the setslot and addslot commands so that you cannot have more than + one copy of a weapon in a single slot. + +December 23, 2002 +- Did some cleanup for GCC 3.2. +- Added a fix for wads that have things like FF_END immediately followed by + F_END. + +December 22, 2002 +- Fixed: ThrustFloorUp and ThrustFloorDown did not have spawnids, nor did they + override Activate() and Deactivate(). +- Fixed: P_LoadBuildMap() read numsectors out of the Build map before checking + to make sure there was actually enough data for numsectors to be present. + +December 21, 2002 +- Changed pointer tracking in pointy classes to use pointers to members instead + of offsetof, as per GCC 3.2's suggestion. + +December 20, 2002 +- Turned the vertex and linedef indices in the map data structures into + unsigned words. Everything compiled without warning, so maybe big level + support really is that easy. +- Fixed: Maps with >32k unpacked sidedefs could not be loaded because + sidei_t::a.map in p_setup.cpp was still signed. +- Changed: REJECT lumps with 0 length won't even be loaded now. And REJECTs + that have some length but are nothing but 0s will be freed. +- Fixed: The sprintf in the first case of D_WriteUserInfoStrings() had an + extra comma, so it would crash, making demo recording impossible. +- Fixed: DArgs::CheckValue() did not check to ensure that value is valid. + (That is, that it does not begin with + or -). +- Fixed: Trying to add more bots than there are starts in a coop game would + leave the extra bots as "active", so you could not spawn them even after + removing the existing bots. +- Fixed: Players could not choose their weapons if they loaded a savegame + before starting a new game because weapon assignments were only transmitted + at the start of a new game. +- Added separate translation tables for the player corpses so that when a + player dies and comes back with a sprite that uses a different palette + translation range (i.e. a mage dies and is reincarnated as a fighter), + the corpse will retain the translation the player had at death. This also + means you can't change the color of your corpses anymore. + +December 19, 2002 +- Uploaded 27.cab. +- Fixed: The internal node builder was not setting bPolySeg, so segs would + be randomly marked as belonging to polyobjects if you used the internal + node builder. +- Uploaded 26.cab. +- Fixed: TELEFOGHEIGHT was not being used everywhere it needed to be. +- Changed: P_DropItem() uses the standard Doom drop for items that don't + have gravity (such as the Mage's lightning weapon). +- Changed: Dying puts you into chasecam mode. +- Fixed: The fighter's axe and hammer could not be picked up for mana by the + other classes. +- Moved the assignment to waitingforspawn inside SpawnBot() past the checks + to see if any bots are left to spawn. + +December 18, 2002 +- Fixed the "give armor" cheat for Hexen. +- Added artifacts and puzzlepieces as categories for the give cheat. +- Replaced Killough's blockmap builder with the one I had written for ZDBSP. + The MBF one was found to be incorrect near vertex 0 of Doom's E3M6. There + are probably other problem spots, but that's the one that was first + noticed. +- Fixed: Hexen_sbar.cpp had WPIECEM1 misspelled as WPEICEM1, so the top + part of the Bloodscourge would not appear in the status bar until you had + the complete weapon, which causes a different graphic to be drawn. +- Fixed the elusive hub crashing bug introduced by my November 26 but/hub + "fix". Parsing of NEW_PLR_OBJ and NEW_PLR_CLS_OBJ when m_HubTravel is + true would wait until the object had been parsed before mapping it to + an index. It needs to be mapped immediately after being created so that + any references to it in its stored data will actually refer to it and + not the next object in line. +- Fixed P_SetSectorFriction() so that using a friction amount of 100 + calculates the standard movefactor 2048 instead of 255. +- Changed Sector_SetFriction so that when it's used from a script, it will + clear and set the sector's friction flag as needed. +- Fixed: The fighter's axe and hammer would still use mana when infinite + ammo was turned on. +- Fixed: P_SpawnPlayerMissile spawned missiles with a facing direction + slightly to the right of their real direction when there were no monsters + for it to autoaim at. Among other things, this made the frost cone fire + right of center. +- Fixed: Picking up a flechette would only give you the fighter's variety + because I forgot to uncomment some code after adding the other two player + classes. + +December 13, 2002 +- Uploaded 25.cab. +- Added a hack for 256-tall textures with patches that mark their post + lengths as 0. This lets pleiades.wad and its skies work. +- Multiplied the output of the OPL chips by two so that they aren't so + quiet. +- Gave opl_onechip a callback so that changes to it can take effect + immediately. +- Fixed: findFreeChannel() in mlopl.cpp could crash when going from two + chips to one, because it did not reset the value of last. + +December 12, 2002 +- Fixed an original Hexen bug: EV_RotatePoly() set the first polyobject's + special data to a rotator, then it created a new rotator and assigned it + to the mirror polyobject's specialdata, and then it also assigned the + second rotator to the first polyobject. This left the first rotator + forgotten, and if a player got in the way of one of the polyobjects so + the other one destroyed the rotator, it could crash. +- Uploaded 24.cab. Why cab? Because LZX compression is better than ZIP, and + I'm stuck uploading files with a 56k modem. That's why. The source code + archive alone is almost 700k smaller as a cab than as a zip. That's at + least four or five fewer minutes that I need to wait uploading it. +- Fixed: Bloodscourge projectiles would not pass through non-boss monsters + because AMageStaffFX2::SpecialMissileHit() was incomplete. It is a much + more dangerous weapon now. +- Fixed: ACircleFlame needed a GetExplodeParms() member function so that it + would do the correct damage and not harm the player. +- Uploaded 23.cab. +- Fixed: Dehacked weapon patches did not set the new FWeaponInfo::givingammo + field. + +December 10, 2002 +- Uploaded 22.cab. +- Fixed: If you had a bot with you in a co-op game and you switched levels, + the bot would come with you as normal, and it would also spawn a new copy + of itself later, so you would now have two bots instead of one. +- Moved the player name display for spying up slightly so that it isn't + obscured by the Hexen status bar. +- Added support for terrain-defined friction, so the Hexen ice flat can + behave like ice. +- Fixed: Weapon pieces were not behaving like weapons with sv_weaponstay on. +- Fixed: The spinning invulnerability and maulator icons that appear at the + top of the screen when they are active were not right-aligned. +- Fixed: The maulator artifact had the wrong status bar image. +- Fixed: Using Dragon Skin Bracers to get more than 100% armor would mess + up the armor display in Hexen's automap status bar. +- Now I know why I didn't direct hudmessage and print commands to the + screen of spying players. Changed it back to the way it used to be, so + it doesn't pay attention to the player's camera when deciding whether it + should take effect or not. One solution for this would be to have + separate status bars for each player and just route the messages to the + appropriate status bars. Probably too much effort at this point. +- Fixed: The player faces showed up on the scoreboard even when not playing + Hexen. +- Fixed: The extralight from your gunshots would be used if you weren't + looking through the eyes of a player. +- Uploaded 21.cab. +- Fixed an accidental problem when travelling between levels because + I mis-blocked some code in WI_End(). +- Fixed: Using a flat as an intermission background instead of a full + graphic would not print any text. +- Fixed: FWeaponSlots::StreamInSlots() only cleared the even slots, + so weapnext/weapprev failed, and weapon selection in odd slots would + work wrong. + +December 9, 2002 +- Fixed: Dormant monsters would respawn when monster respawning is + enabled, losing their dormant state and any specials they were given. +- You can spy through your teammates' eyes in deathmatch now, and you + can also see them on the automap. +- Added face icons to the Hexen scoreboard. +- Gave the bots some minor knowledge of Hexen weapons. +- Fixed: The fighter would not get any mana when he picked up his axe + or hammer. +- Added the Hexen finale and intermission screens. + +December 6, 2002 +- Removed M_PBOX from zdoom.wad. M_DrawFrame() draws the box around the + player in the menu now, since it works with all games and not just Doom. +- Added some more choices to the sound options menu. +- Added support for setting player sounds by their real names in skins + (i.e. *xdeath instead of pspdiehi), and added a few more sound mappings + for the Legacy names. +- Added simple palette remapping for skins so that Doom skins can be used + while playing Heretic. + +December 2, 2002 +- Added software OPL2-synthesis for MUS music in order to mimic "the + good old days." I haven't had a soundcard with an OPL chip in six years, + so I don't know how accurate the sound is, but I think it's reasonable. + Pity it takes around 10% of the CPU time on my Athlon XP 1600 (at 44.1 KHz). + The MUS player part of it comes from Vladimir Arnost's MUS Lib, and the + OPL2 part of it is from MAME. + +November 28, 2002 +- Fixed the player setup menu to work with scaled sprites, and added an + option to skins so you can set the scale for more than just the base + sprite. +- Gave each player their own set of weapon slots, so custom slots can be + used in net games and demo playback. +- Added player translations for Hexen. +- Added player class filtering for the Hexen fourth weapon pieces. + +November 26, 2002 +- Added player class filtering for the Hexen weapons. +- Added the "Healing Radius" artifact. +- Fixed a hub travel bug when playing with bots. If there were more bots + in the level being travelled to than the one travelling from, the load + would fail. +- Fixed: ASorcBall::Serialize() did not call its super method. +- Fixed a hub travel bug introduced by the version tracking code: + SaveVersion would not be set before a game was actually saved or loaded, + so snapshots would not load back properly until that happened. Another + related problem is that somebody could load an old savegame with + multiple snapshots and then save it again without revisiting all the + snapshots. Thus, a savegame could have snapshots created with different + versions of the game, so each snapshot needs to carry version information + around with it. + +November 25, 2002 +- Changed the ACS print and hudmessage commands so that if a projectile + activates a script, they will print to the screen of whoever fired the + projectile instead of failing because the projectiles don't have a screen. + Also changed them so that they show up for anybody spying on the person + who activated the script. +- Added the pig. +- Disabled skins in Hexen, and changed the player setup menu to show class + instead of skin when playing Hexen. +- Added "random" as a choice in the Hexen class/new-game menu. +- Fixed: p_GiveArmor() gave the negative value of the desired armor, which is + effectively the same as always giving blue armor. +- Fixed the weapon slots so that they can accurately determine if a weapon + using both types of mana can be selected. + +November 23, 2002 +- Put Hexen's new game menus in place, although you still can't select a + player class. +- Disabled blood splats for players using the god mode cheat. +- Added palette flashes for Hexen's poison and ice damage and the Wraithverge + and Bloodscourge. +- Added the Bloodscourge and Wraithverge. +- Changed sound loading to use the heap instead of zone memory, so large sounds + can be used (although it's probably a bad idea nonetheless). Also added a + fallback mechanism so that sounds that are too big for hardware buffers will + be created in software instead. +- Fixed the Doom status bar so that removing a key from the player's inventory + will remove the key from the status bar without having to manually hide the + status bar first. +- Added FloorClip as a property for use with DECORATE. + +November 22, 2002 +- Added WAVE loading to the alternate mixer. + +November 21, 2002 +- Added an alternate sound mixer that bypasses FMOD and and does all the sound + mixing itself, feeding it to a DirectSound buffer directly. This is not + meant to be a complete replacement for FMOD, so it's pretty basic. It's not + even particularly optimized. I only wrote it in the hope that it alleviates + the BSODs a very few people got without -nosound. + +November 19, 2002 +- Changed ThrustThing to mimic the original P_XYMovement() MAXMOVE clamping. + Setting the third parameter 1 will let you use any thrust you want. +- Put back the maxmove restriction for underwater actors, but it should + probably be handled differently. +- Fixed: Respawning in single player would execute respawn scripts instead of + enter scripts, and travelling to a new map without being dead would not + execute respawn or enter scripts. +- Fixed: Only the first entry in each DECORATE lump would be processed. +- Fixed P_XYMovement() so that startx, starty, onestepx, and onestepy are + properly recalculated after sliding along a wall. This seems to have fixed + the ability to go through walls at corners when moving very quickly. I hope + there aren't any other bugs lurking in there. +- Fixed recording of compressed demos: The demobodyspot and democompspot + pointers were not being moved when demobuffer would get realloced, so + replacing the BODY chunk with compressed data would stomp on invalid memory. +- Fixed: P_SlideMove()'s stairstep case still used mo->momx instead of tryx. +- Fixed G_QueueBody() and the pointer cleanup in dobject.cpp so that it + doesn't try to destroy bodies that were already destroyed outside of + that function (such as by a crusher squishing the body). + +November 15, 2002 +- Added the Quietus. + +November 13, 2002 +- Hexen has a status bar now. + +November 9, 2002 +- Changed CheckIfExitIsGood() so that dead players cannot exit a level. +- Fixed: The ThrustThing special is supposed to add to the actor's velocity, + not set it. + +November 8, 2002 +- Imported the node builder fix that splits segs collinear with a splitter + with any events they cross. This is only necessary for bad maps that have + overlapping linedefs. +- Changed dehacked text replacement so that if a pickup sprite's name is + changed, the identification map used by DehackedPickup is also updated. + This lets you pick up Strain's shotgun, plasma rifle, and BFG replacements. +- Changed bot_observer mode so that it does not set the player's MF_SHADOW + bit. +- Changed P_LookForPlayer() so that it does not "find" players without the + MF_SHOOTABLE bit set. +- Added floorclip adjustments for sectors that have their floorpics changed + or move their floors. +- Fixed floorclipping so that it chops off the same amount of space for all + vertical sprite scales (as opposed to chopping off x rows from the bottom + of the source sprite). + +November 6, 2002 +- Removed the menu title graphics from zdoom.wad because they can just be + drawn using BigFont. +- Moved "Player Setup" into the options menu and removed the last vestiges + of the old fire effect for that menu. +- Extralights don't work with the release build. Oh well. +- #if-ed out the decal-out-of-range code again, because I think it should + finally be fixed thanks to the recent changes to PrepWall. +- Made some changes to allow for loading earlier format savegames. Right now, + that means ZDOOMSAVE200 games can still be loaded. Earlier versions won't be + supported. +- Added Dehacked Gravity and LowGravity code pointers. +- Made demo_compress a global config cvar. +- Changed the ini's location to be "$PROGDIR/zdoom-$USERNAME.ini" because + some people have multiple copies of ZDoom installed in different directories + for different IWADs, and they might want to use different configs with them. +- Fixed sector triangle finding for area-less sectors. + +November 4, 2002 +- Added more correctness checks to PrepWall() and PrepLWall() to check for + out-of-bounds texture columns. The very-near-a-decal-crashing problem should + be solved now. + +November 2, 2002 +- Restored the menu_gameplay command I had accidentally removed. + +October 31, 2002 +- Added a check to A_Lower() to ensure that the pendingweapon is not + wp_nochange. +- Fixed: The ACS SetWeapon command checked if there was enough weapon to use + the current weapon, not the one being switched to. +- Fixed: The FFont* serializer could only use already loaded fonts. It could + not load any new ones, so some FFont pointers could be initialized to NULL + after reloading a savegame from a previous session. + +October 30, 2002 +- Merged the separate floorcolormap and ceilingcolormap sector members back + into a single ColorMap member. +- "3D lights" can color floors and ceilings now. + +October 29, 2002 +- Decided to do something fun, so I added support for rendering "3D lights" + on walls. +- Changed HealThing special so that it does nothing if the actor's health + is already above the specified maximum. +- Fixed: The eyes crossing fake floor/ceiling special actions were only + checked when moving vertically. They also need to be implemented for + horizontal movement in case the fake floor/ceiling is sloped. + +October 23, 2002 +- Fixed: The MF3_GHOST flag was not cleared when the invisibility + artifact wore off. + +October 21, 2002 +- Added Ceiling_Waggle as special 38. +- Added a check for a 0 maxmove to P_XYMovement() because P_DoCrunch() sets + the gib's radius to 0. + +October 15, 2002 +- Restored the old x2 calculation in R_ProjectSprite and changed the + iscale calculation so that it is based on the x1, x2 values instead of + the inverse of xscale. + +October 14, 2002 +- Reenabled the error check in WallSpriteColumn() because it seems it can + still happen. Now it has a bunch more debug spew and exits with + I_FatalError(). +- Changed the x2 calculation in R_ProjectSprite() because the old method + could cause a sprite to be drawn one pixel too wide under rare + circumstances. +- Fixed: R_ProjectSprite() did not add one to thing->xscale. +- Added a check to the node builder for maps without any lines so that + it can exit gracefully instead of crashing. +- Made Sector_SetFriction work from inside scripts. +- Changed Floor_RaiseByValueTxTy so that if it isn't activated by a line, + the target's sector type is set to 0, and its floor is left alone. This + should be much better than crashing. + +October 12, 2002 +- Imported all the changes from the standalone node builder to increase + accuracy and add support for GL nodes. + +October 10, 2002 +- Fixed the ordering of the WTSRegisterSessionNotification call so that it + (again) occurs after the window is created, so the message loop can + actually receive the messages. +- Replaced the %p and %I64x format specifiers I was using in i_crash.cpp to + equivalent %x replacements, because the Windows 9x version of wsprintf + does not understand them. +- Made MinotaurSpecial, DSparilSpecial, IronlichSpecial, and + SpecialAction_KillMonsters accessable through MAPINFO. +- Changed message handling in P_CheckKeys() so that the correct Heretic key + messages will show up even if you don't flag the keys as "either will do"-- + a rather pointless thing for Heretic since it only has three unique keys. + +October 1, 2002 +- Fixed a bug in P_XYMovement() that could cause you to move exponentially + faster when running on a slope along a wall. + +September 30, 2002 +- Fixed the Doom status bar so that the ouch face will show up when it was + intended to. + +September 27, 2002 +- Removed Infight from DehInfo so that monster infighting can be completely + controlled by the cvar. + +September 26, 2002 +- Fixed FDoomEdMap so that it works with negative thing numbers without + crashing. +- Fixed dehacked text substitution trying to compare against a null music name + in the predefined mapinfos. +- Fixed "Monster Ignore Each Other" infighting mode so that player projectiles + can damage monsters. +- Changed P_SlideMove so that it can use the smaller steps from + P_XYMovement, so if something is moving very fast and slides along the wall, + it shouldn't be able to pass right through small obstacles next to the wall. +- Fixed: If a move was split into multiple steps and you went through a + teleporter, the remainder of the move would still be executed from your + original position, rendering the teleport useless. + +September 21, 2002 +- Played around with a 140 Hz TICRATE for a while. The high framerate was + nice, but there are too many places that implicitly depend on a 35 Hz TICRATE + (physics in particular) for me to try and truly fix the game for variable + TICRATEs before a final release. +- Removed the unused P_CalcSwing() function and its related global variables. + +September 18, 2002 +- Fixed the use of seg grouping in the node builder so it actually works as + intended. The mechanism GroupSegPlanes() uses to group segs was also + changed before I discovered the real problem with it: SelectSplitter() + was using r = pseg->planenum & 7; instead of r = 1 << (pseg->planenum & 7); + The new grouping scheme may not have been necessary, but it should be + faster at least. + +September 17, 2002 +- Removed playernumber from DCajunMaster. The only time it was used for + something non-local was in the ThinkForMove method, but its use there + was inconsistant with its other uses. Apparently, ThinkForMove expected it + to be the maximum player number plus one, but SpawnBot stored the most + recently spawned bot there instead. This could crash ThinkForMove if + the most recent bot spawned was player 0. Replacing its use in ThinkForMove + with MAXPLAYERS seems acceptable. + +September 14, 2002 +- Added optional logging of ACS hud messages. +- Upped the number of local script variables to 20 to match ACC 1.25. + +September 12, 2002 +- Changed ACS function importing so that imported functions cannot be + "chained" from one library to the next. +- Added code to properly tag string arrays. +- Fixed a hang that could occur when importing ACS arrays. +- Added a little more information to the crash report. +- Changed WndProc so that it only resets the language if the WM_SETTINGCHANGE + message was sent as the result of a locale change. +- Figured out how to make the crash collector work with secondary threads: + Using an UnhandledExceptionFilter, the information for that thread is + collected, the thread is put to sleep, and an APC is queued on the primary + thread. Once the APC executes, it raises a software exception that gets + caught by the outer-most __try block, and the primary thread shuts down + and shows the crash dialog. I think it would be better if I could raise + exceptions in any thread I wanted, but this will suffice. As long as + I_GetEvent() is called often enough to put the thread in an alertable state + using SleepEx, the APC should be able to execute without much delay. + +September 11, 2002 +- Finished the crash information collection code. + +September 9, 2002 +- Changed "give armor" cheat to give armor equivalent to blue armor, even when + Dehacked is used to modify the blue AC. + +September 7, 2002 +- Fixed: Imported libraries had their source libraries recorded wrong. + +September 5, 2002 +- Fixed hud messages so that they restore the screen's previous font instead + of always assuming the previous font was "SmallFont". +- Changed the node builder so that segs with the same front and back sector + can be a part of a subsector with segs from a different sector. Although the + result is not a proper subsector, it is okay because such segs can only add + masked mid textures to the scene, and those use the seg (not the subsector) to + find out which sector they belong to. This fixes the area by the fence in + tqtrust MAP04 when the internal node builder is used. +- Changed PTR_SlideTraverse so that blocking two-sided lines are treated like + one-sided lines. +- Fixed the nodebuilder so it works again without crashing. +- Fixed: ExtractFileBase did not understand files with a drive specifier but + no path. i.e. It would consider the base file name for d:myfile.foo as + d:myfile and not myfile. + +September 3, 2002 +- Changed the "This map has errors that must be fixed" message to be more + specific about what exactly needs to be fixed. +- Made MDK work only in non-deathmatch games, even if sv_cheats is true. +- Added the following contributions from Stevie-O: + + Fixed: AImpactDecal::CloneSelf() would cause ImpactCount accounting to mess + up if the clone had to be destroyed because it hit the sv_maxdecals limit. + + Fixed: Using MDK cheat would print blank lines to the console. + + Fixed: Respawning monsters could spawn inside other things because + P_NightmareRespawn() was not changed to account for thing-over-thing. + + Fixed: Telefragged players would still show the FX_RESPAWNINVUL effect if + it was active when they died. + + When bot_observer is true, players can no longer fire their weapons. + + Added sv_fastweapons cvar. + +September 2, 2002 +- Fixed: New-style behavior lumps without any scripts would crash the game. + +August 31, 2002 +- Made R_InitTextures more forgiving of errors. +- Changed DrawWrapper to clip columns to the patch's height. This "fixes" + malgnant.wad's corrupt titlepic that crashed the game. + +August 26, 2002 +- Added a workaround to the DObject::DestroyScan()s because the bglobal object + is not showing up in the Objects list. +- Added whereisini command to make finding the .ini easier for users. +- Removed MBF torque simulation. It made the corpses fall off the bridge + at the beginning of the Hexen MAP40, and it was also responsible for the + "boogying" chaingunners in the last room of Doom2 MAP22. I haven't checked + MBF to see if they do it in MAP22 there too, but I thought it best just + to remove it, since it was causing so many reports of anomalies--enough + reports that I probably copied something wrong. Okay, checking MAP22 with + PrBoom, the chaingunners do slide perpetually but nowhere near as bad as + they were doing with ZDoom before. +- Fixed: After drawing the underwater scene after Heretic E2M8, the normal + game palette was not being restored. +- Changed ASoundWaterfall's gametype from Raven to just Heretic. Although it + exists in Hexen, it cannot be spawned in a map because of conflicting + doomednums. +- Removed Linux -cdrom support because it's not needed. +- Used the new run-time subclassing abilities to add support for pickup items + that are identified by sprite instead of by class. For it to work, a + dehacked patch needs to modify an actor (in any way) with the pickup flag. + Any pickup items touched like this will cause a new class to be derived + from DehackedPickup. This class will clone the defaults of the original + actor, and the original actor will be modified so that it does nothing + but spawn the clone. DehackedPickup implements the functionality to spawn + a copy of the desired item just long enough to pick it up. +- Changed DDrawFB::LockSurf so that it retries the resource creation + multiple times if the error DDERR_UNSUPPORTEDMODE is returned (presumably + because the NT Security dialog was opened and then closed). +- Added a check for players without bodies to R_SetupFrame(). This should + never happen during normal play, but a dehacked patch could cause it to + happen. + +August 23, 2002 +- Added a console warning when multiple actors try to map to the same + doomednum. +- Removed Printf_Bold. Use Printf with a level of PRINT_BOLD instead. The + result is exactly the same. +- Fixed a demo sync bug. When the user alt-tabs away, the game is paused, + but the demo continues playing anyway. The fix is to change G_Ticker() so + that if the game is paused, and the demo didn't do it, don't fetch more + tic commands from the demo until the game becomes unpaused. Unfortunately, + hitting a breakpoint in debug mode will still mess up demo playback, so + I avoid pausing the game at all when the window is deactivated and a + demo is playing if _DEBUG is defined. +- Fixed: When a multi-step move is blocked in P_XYMovement, the move needs + to actually stop right away. This seems to be what caused wallrunning: In + the first step, the player hit the wall, so his movement got clipped to it. + In the next step, the player would continue in his original direction and + travel further along the wall. Since I know what causes wall running now, + I added the compat_wallrun cvar to enable it as desired. +- Reduced maxmove in P_XYMovement from (mo->radius*2 - FRACUNIT) to just + mo->radius. This brings back wallrunning (unexpected), but I'm hoping it + stops things shooting through walls when they're very fast. The original + maxmove I chose seems quite high. I don't know why I did that. +- Changed Megasphere back to being pickup-able even when you're already full + on health and armor. +- Fixed: Automap powerup did nothing. + +August 22, 2002 +- Fixed: Heretic's gauntlets are supposed to have their kickback set to 0 so + that they don't push monsters away. +- Updated the source for FMOD 3.60: Changed FSOUND_Sample_SetLoopMode to + FSOUND_Sample_SetMode and removed A3D support. +- Gave PTR_BounceTraverse() knowledge of ML_BLOCKEVERYTHING lines. +- Moved the check for MF2_BOUNCETYPE to the beginning of P_BounceWall(). +- Added support for custom inventory classes. These are actors that behave + like an inventory item and execute their special when touched, but they + don't actually go in the inventory. +- Added a new field to DObject to record the object's real type. Now derived + types created at runtime can be detected. I am now one step closer to having + the scripting language in place. :-) + +August 20, 2002 +- Added support for custom decorative classes through the use of a + DECORATE lump. Currently, all objects generated like this are + recognized as being type Decoration instead of their real type. + This isn't really a problem, but I would like to figure out a way + to easily support objects that are identified as being of a + run-time-created type. + +August 19, 2002 +- Fixed: DumpHash would count all the aliases and commands, not just + the ones it counted. + +August 16, 2002 +- Added some new initialization code that was missing for old Hexen + behaviors. +- Fixed: World and global variables were not stored in save games. +- Changed sidedef indices to be unsigned, so now you can have up to + 65535 of them in a level. + +August 14, 2002 +- Added support for 8 mouse buttons using DirectInput and at least 5 + mouse buttons using standard Windows messages. I extrapolated from + Microsoft's docs for WM_XBUTTONDOWN/UP, so it will probably work with + up to 8 buttons if Microsoft ever releases a mouse with more buttons. + +August 12, 2002 +- Finished adding support for ACS libraries. Now I just need to test it + some more. +- Fixed: ACS arrays were not serialized. + +August 3, 2002 +- Added compressed demo support. +- Fixed: PCD_ASSIGNMAPARRAY accessed ACS_WorldVars instead of level.vars, + so storing to arrays was unpredictable unless you never touched any world + vars. In that case, it would always store to the first array declared. + +July 31, 2002 +- Fixed some stuff with local doors already performing a ceiling action. + In particular, if the ceiling was moving but not as a door, its thinker + would be replaced with a door thinker instead of being left alone. +- Wallrunning seems to be gone. I don't know when it disappeared. I + certainly set out trying to fix it. +- Fixed: The stairstep case for stepping along the x-axis in P_SlideMove() + was the subject of some incomplete copy-and-paste, which is probably why + it was so easy to get stuck on diagonal walls. + +July 30, 2002 +- Added a third parameter to the TranslucentLine special to select the + translucency type. Currently it can be 0 for normal translucency or 1 for + additive translucency. Also updated the translators to handle Legacy's + 284, 285, and 287 types. +- Made textures with patchless columns work. + +July 29, 2002 +- Finally did the math for the conversion of the SSG's vertical spread from + slope to pitch and discovered that I had it slightly too small. +- Added COMPATF_SILENTPICKUP flag to play item pickup sounds locally only. +- Moved NO_PASSMOBJ flag from dmflags to compatflags. +- Moved sv_ihatesounds into compatflags as COMPATF_MAGICSILENCE. +- Removed SNDCURVE from zdoom.wad. Playing Doom will now generate a sound + curve compatible with the Doom's original distance attenuation. + +July 22, 2002 +- Started work on an output class that using IDirect3D8 instead of + IDirectDraw2, but then I found out IDirect3D8 can't do paletted output. + I was hoping to get descent blitter support out of it, but if I have to + translate the image every frame, it might not be worth it. I could try + getting tricky with the hardware gamma ramp so that I need only copy + pixels out to the back buffer without doing any format conversion, but I + don't know if it's worth it. + +July 17, 2002 +- Fixed session notification mysteriously crashing the game with a release + build. Because the default calling convention for the release build is + set to __fastcall, I need to explicitly specify that the functions I + retrieved using GetProcAddress are __stdcall. (But that doesn't explain + why they worked with the debug build.) + +July 11, 2002 +- Fixed some bugs when I_MovieDisableSound() is called when there are + repeating sounds playing. +- Added some support for XP's session locking and fast user switching. Now + you can use either, and the window will be able to properly restore itself, + and it shuts down the sound when the session is locked. For some reason, + I cannot get MIDIs to play in my other account. I would blame stupid + Audigy bugs, but it doesn't work with Microsoft's GS synth either. + +July 9, 2002 +- Changed the behavior of MF_SPECIAL actors so that non-inventory actors + will execute their specials when touched. + +July 2, 2002 +- Changed sector_t::FindShortestTextureAround and ::FindShortestUpperAround + to not consider texture 0 for height determinations, so now they can return + lengths greater than 64 if any lines around the sector have an untextured + side. The compat_shortTex cvar can be used to get the original Doom + behavior back. These functions now know about scaled textures and always + return the result in world units. + +June 25, 2002 +- Made the C versions of the plane drawers work with non-64x64 flats. +- Added automatic scaling of 128x128 and 256x256 flats so that they get + treated as if they were only 64x64 world units in size. Also added support + for 8x8, 16x16, and 32x32 flats, which are not automatically scaled larger + to fit a 64x64 cell. + +June 19, 2002 +- Added support for 128x128 and 256x256 flats on slopes. + +June 14, 2002 +- Added support for 128x128 and 256x256 flats on normal planes. + +June 13, 2002 +- Fixed: When a player spawned, the local player's view would be reset to + whoever they spied through last. +- Fixed positioning of scaled pegged upper textures. I was not compensating + for the texture's scale. +- Fixed: Demo sequence would loop to DEMO2 instead of DEMO1. +- Fixed handling of PNG tEXt chunks. I misread the specs, thinking that the + keyword always occupied 80 bytes, but that's just the maximum size for the + keyword. It can be smaller and does not get padded with zeros. + +June 12, 2002 +- Fixed: When missiles destroyed themselves right away in their death state, + the game would crash if it tried to move them again (because their movement + was divided into multiple steps). + +June 11, 2002 +- Fixed: BestColor_MMX set ebx before saving it, and it did it after ecx + had already been shifted. I don't know why it worked at all. +- Changed the project settings to statically link to the CRT under VC7 + because I don't want to redistribute MSVCR70.dll. +- Experimented with separating the various games into libraries but stopped + when I found out that I had no easy way to bring all the actor definitions + into the executable that I wanted. +- Removed lots of warnings when VC7 is set to look for 64-bit portability + complications. +- Added MF_COUNTKILL to ALostSoul and changed the monster counting to + happen in AActor::StaticSpawn instead of at map load time. +- Fixed stylization of console backgrounds that are derived from title pics + that are not 320x200. +- Added named thread support to the FHelperThread class. +- Moved zdoom.ini to the CSIDL_APPDATA directory so different users can have + different zdoom.ini files. +- Added -cdrom support under Linux courtesy of Hirogen2. +- Added the work-around to allow FBaseCVar::ToInt() to compile with GCC 2.95. +- Added XP visual styles support for the dialogs. +- Added more OS names to I_DetectOS(). +- Removed PROP_STATE_BASE because I could not get it to compile with VC7. + All state sharing must now be done using inheritance. +- Changed the ALavaSomke definition to set the default alpha using an + AT_GAME_SET function. Aside from causing VC7 to gobble up all available + memory and crash horribly, using the PROP_Alpha macro in this situation is + incorrect because it depends on information that is not available at compile + time. + +May 6, 2002 +- Fixed spawn(spot) so that they only set MF_DROPPED for items and not + everything. +- Changed R_DrawColumnInCache() so that it correctly draws patches with + a negative originy. +- Added Thing_Hate special. +- Added a name string ("Unnamed") to the default level info so that using + changemap to switch between maps without an associated level info does + not crash (although it does prevent saving on those levels). +- Fixed the stringlist utility to sort string names case-insensitively + because the game uses a case-insensitive search to find them. +- Initialized air_finished in P_SpawnPlayer so that if you spawn underwater + after drowning in a multiplayer game, you won't start drowning immediately. +- Fixed: AArtiEgg and AGibs did not have spawn states so they could not be + placed on a map. +- Fixed: Say(_team) did not check that they were called with any parameters. + +April 27, 2002 +- Added more error checks when loading the BSP tree. + +April 18, 2002 +- Removed the bot things list because it couldn't handle items that had been + removed from the level. +- Changed movie playback to only exit when escape is pressed. Also disabled + Alt-Tabbing away from fullscreen movies so that I don't have to worry + about the messed-up state that can put things in. +- Fixed: When a movie was not found, I_PlayMovie could try to restore video + resources it never released because runningFull was not initialized right + away. +- Added a new Thing_ProjectileAimed special (178). +- Added MF2_SEEKERMISSILE to the RevenantTracer. +- Added slopes and aligned flats to the BUILD loader. +- Changed P_GivePower() to not check if the player already has the power + when playing Doom. +- Added pattern matching for the -file parameter. + +April 17, 2002 +- Added a loader for BUILD maps. It's not very useful since the Doom engine is + so much more limited than BUILD, but it's fun to be able to load them anyway. +- Added a NoAlert flag for splashes that you don't want monsters to hear. +- Removed the option of specifying multiple footstep sounds for terrain + because the $random SNDINFO command can do the job better. (And no, footsteps + are still not implemented.) +- Made splash sounds work even without a corresponding splash actor. +- Removed the MF3_VERYFAST flag. Any missiles with a speed of 100 or more will + automatically be offset closer to the originator than a normal missile. + +April 16, 2002 +- Changed P_XYMovement() to take smaller steps when moving faster than is good + for the actor's size. + +April 15, 2002 +- Changed floor bounces so that they properly reflect off of slopes. +- Added the CVAR_NOSAVE flag so that I can use it with sv_gravity and + sv_aircontrol to avoid archiving them with a savegame. If I do save them, + then reading them back will override the real settings for those variables + that are stored in the level structure. +- Added the Thing_Damage special (119). It's similar to DamageThing, except it + hurts things by TID instead of whoever activated it. +- Removed the LEVEL_NOSOUNDCLIPPING flag. When sounds are at maximum distance, + they are very quiet and hard to hear so it didn't seem worthwhile to keep + the code around for this. + +April 9, 2002 +- Fixed: Particles were not drawn in the color of their containing sectors + when using light amp goggles. +- Added code to make the pain elemental move down if it's too close to the + ceiling to successfully launch a lost soul. + +April 6, 2002 +- Fixed: P_TestMobjLocation() should test the central z of an actor with + float bob, not its current z. +- Fixed: Only the colormap stored in the wad was created with new. The rest + were still on the zone heap. There's also no reason why they need to be + aligned to 256 byte boundaries. + +April 5, 2002 +- Added SPC music support using snesapu.dll. + +April 4, 2002 +- Changed text scaling at 800x600 and similar resolutions to keep everything + square. +- Added two rotozoomers on top of the plasma to make it look more interesting. +- Fixed: Colors set with setcolor now carry over to new maps. +- Removed the sv_friction cvar because it was never used. +- Added a few substitutions for chat messages. Set chat_substitution to true, + and $health, $weapon, $armor, $ammo, and $ammocount will be replaced by + appropriate strings. +- Added /me support for chat messages. +- Changed the setweapon ACS command to disallow switching to a weapon the + player does not have enough ammo for. +- Changed S_ChangeMusic() so that an empty string will also stop the currently + playing music. +- Changed the announcements for player team and name to be shown only if the + new values are different from the old ones. + +April 2, 2002 +- Added another bounce flag so that the bounce type can be selected by actor + instead of by game. +- Fixed the [*.Autoload] ini sections so that they work with wildcards for + files that are not in the current directory. +- Replaced the fire in the player setup menu with a plasma. +- Moved thinkers off of the zone heap. + +April 1, 2002 +- Changed R_FreeTags to move the rover back to the beginning of the zone. +- Moved sprite frames off of the zone heap because they constituted a lot + of small locked blocks. Did the same for texture column directories, + colormaps, switches, terrain types, skins, sound sequences, msecnodes, + and SNDCURVE. The only things left on the heap now that are unpurgable + are the level data. +- Added a calling history to the zone heap when compiled with _DEBUG so I + can see where all the zone memory is going. +- Changed Z_Malloc so that it only throws away purgable blocks if doing so + will result in a block large enough for the requested allocation. + +March 28, 2002 +- Added an extra max parameter to HealThing. 0 will uses the creature's + spawn health as max. 1 will use the max soulsphere health as max. Anything + above that will be used as an absolute maximum. + +March 25, 2002 +- Made sky textures that are scaled vertically draw properly. +- Made the sky textures scalable horizontally. +- Verified that the PNG loader really can handle the different filters. +- Made the weapon slots configurable. +- Commented out the code that prevents people from using dehacked with + Heretic and Hexen. +- Changed the decision of whether or not to spawn puffs when a line attack + strikes an actor into an actor property. +- Added code to set PuffType for all the bullet attacks in Doom. +- Changed P_CheckMissileSpawn to not decrement the missile's first tics if + the tics are less than one. Now the Centaur Leader can shoot his missile + when spawned in Doom. +- Added the projectiles Hexen only spawns from scripts. +- Fixed: $pitchshift could not be used before defining a sound, so none + of the Hexen sounds that don't want to be shifted stayed unshifted. +- Fixed: ZXmasTree, ZBell, and ZSuitOfArmor had undefined mass. +- Fixed: ZPoisonShroom had undefined health and mass, and it didn't spawn + a poison cloud on death. +- Fixed: The Heretic snake did not have an attack sound. + +March 23, 2002 +- Fixed: PCD_SETTHINGSPECIAL fell through to PCD_THINGSOUND. + +March 22, 2002 +- Fixed: When the minotaur stops charging, he now properly turns off his + invulnerability. +- Fixed: The dehsupp utility was case-sensitive when adding names but not + when using them, so bex patches could not specify the NOGRAVITY flag by name + because it has the same name as the NoGravity function, and both versions + of the name were stored in the dehsupp lump. +- Using a dehacked patch to set the initial bullets to 0 will now cause the + player to start with their fist raised instead of the pistol. +- Changed the error message for switches with invalid second texture names + to a warning. +- Fixed: The fighter boss's extreme death crashed the game because it used + A_SkullPop, which assumed that the actor's player member was non-NULL. +- Gave the bots some knowledge of Heretic weapons so they don't slow things + down so bad in that game. + +March 21, 2002 +- Added a teamplay scoreboard. +- Added: Bots now join a random team if they aren't specifically assigned a + team in bots.cfg. +- Added: When teamplay is true, players (finally) use their team colors. +- Added a sector action that gets triggered when an actor hits the sector's + fake floor. (doomednum 9989) +- Added another flash state to the pistol so that if people want to use a + patch to make it behave like a railgun or plasma rifle (and keep the flash + states), it will work without crashing. +- Fixed: A_FireCGun() assumed that flash states were present. This is not + normally a problem, but dehacked patches can make this precondition false. +- Fixed: Ambient sounds saved their NextCheck time in gametics, so you + wouldn't be able to hear them after a load until the game had been running + at least as long as it had been running when you saved. +- Added support for encrypting ACS strings, and added the ACS_ExecuteWait + shortcut to ACC. ACS_ExecuteWait(x, ...) is equivalent to ACS_Execute(x,...); + ScriptWait(x); It uses the existing p-codes instead of introducing more of + its own. Think of it as syntactic sugar. + +March 20, 2002 +- Added code to the node builder to group segs by their line equations so that + when there are several segs that would create the same partition line, only + one of them needs to be checked to see if it is a good splitter. + +March 19, 2002 +- Changed polyobj container detection in the node builder to work the same + way it does in the game: A polyobject's subsector is determined by its + center after it gets translated to its start spot--not by the start spot + itself. One case where this distinction is important is the polyobject north + of the dining room in Hexen MAP33; its start spot is in a sector different + from where it appears. + +March 18, 2002 +- Fixed: When I inlined the point-on-line-side functions, I messed up and + counted being right on the line as being behind it, when it should count + as being in front of the line. +- Changed polyobject container detection to just mark the segs that form + a loop around the polyobject spawn spot instead of all the segs in the + sector. This helps keep the BSP from getting too deep around containers + in nonconvex sectors and is also necessary for Hexen, MAP39 to build + correctly. +- Improved the polyobject container splitting avoidance so that splitters + colinear with the segs of the container are valid. + +March 16, 2002 +- Added code to the node builder to detect sectors polyobjects appear + within and try hard to avoid using splitters that touch their segs. +- Improved the node builder so that it can split up convex areas with + segs from different sectors so that each subsector only references + one sector. +- Added support for loading maps without nodes or a reject matrix. +- Tweaked the heuristic used by the node builder to give more weight to + splitters that split few lines. + +March 15, 2002 +- Fixed the console ticker so the node builder can use it. +- Changed subsector_t's firstline and numlines members to be unsigned, + doubling the maximum number of segs a map can have. The built-in node + builder doesn't try very hard to minimize splits. +- Added an internal node builder so that if any 0-length lines are removed, + the nodes will still be valid. This may or may not actually be necessary + depending on the node builder originally used; it's just to be safe. I + make no attempt to fix convex areas belonging to more than one sector, so + it's still a good idea to fix the map and use a better node builder. At + least this one seems pretty fast: I can rebuild Vrack2's nodes in just a + few seconds using a debug build. + +March 14, 2002 +- Lines of 0 length are now removed entirely from the map. Massmouth had + invalid front sector references only on its 0-length lines, so removing + them conveniantly lets it run again despite the beefed-up error checking. +- Removed the angle member from seg_t because it isn't really needed. +- Undid Killough's relayout of R_PointToAngle2 so that I can actually read it + and do some optimization. Its compiled size is now 256 bytes less than + before. + +March 11, 2002 +- Added the mage's first weapon. +- Changed A_SpawnFly to play "brain/spawn" instead of "misc/teleport". + Changed the spawn cube explosion sound to "brain/cubeboom". +- Changed $ambient point attenuation parsing to use IsFloat() to check if + the attenuation is present. +- Changed SNDINFO parsing so that non-male players can use random sounds. +- Did some space tuning to R_RenderBoundWallSprite() and R_DrawVisSprite(). +- Fixed R_ProjectSprite() to calculate the correct left and right edges for + horizontally scaled sprites. +- Changed the sound limit for Heretic's horn rod. +- Added LEVEL_SPECKILLMONSTERS to the definitions for Heretic's ExM8, where + x >= 2, so killing the boss monsters will kill the rest of the levels' + monsters, as it should. +- Fixed: The minotaur would stay invulnerable if his charge was interrupted + before his one-second charge time was up (i.e. he hit something or went into + his pain state). + +March 10, 2002 +- Fixed: If you visited Doom E2M9, saved, and then reloaded after quitting and + restarting, the game would crash at the intermission because it would try + to draw the Fortress of Mystery without loading its graphic first. This + would also happen if you started with -warp 2 9. + +March 9, 2002 +- Added the cleric's first three weapons and the mage's second and third + weapons. + +March 8, 2002 +- Added the fighter's axe and hammer. +- Added Hexen's cleric and mage bosses and Korax. +- Fixed: PTR_AimTraverse crashed when non-players aimed at ghosts. + +March 7, 2002 +- Added Hexen's puzzle items, boots of speed, krater of might, and fighter + boss. + +March 6, 2002 +- Added Hexen's armor, bat spawner, and teleport other and dark servant + artifacts. + +March 5, 2002 +- Added Hexen's wraiths, fog patches, flames, disc of repulsion, and dragon. +- Changed EttinMace, CentaurShield, and CentaurSword to use a crash state + instead of A_CheckFloor. Now I can get rid of A_CheckFloor. + +March 4, 2002 +- Fixed: SendWeaponSlot and SendWeaponChoice need to be initialized to 255 at + compile time. If they're left at 0, then weapon switch commands will be + generated for the very first tic run if the level has not been loaded yet. + This happens when playing demos from the command line, because they tic + before loading anything (including themselves). +- Changed the health bonus's spawn id to 152 so that it isn't the same as the + scripted marine's. +- Fixed: GetWordSpace in d_dehacked.cpp only allocated half as much memory + as was needed. (But since x86 processors are fine with unaligned accesses, + I don't really need to allocate memory. Ah well.) + +March 2, 2002 +- Fixed TossChunks() to toss the demons' chunks out in the correct directions. +- Finished migrating the code to the new RNG system. In the process, I + discovered that constructors for static objects local to a function will + not be called until the first time the function containing it is called. + So all FRandom objects need to have global scope or else loading a savegame + won't find any RNGs that haven't been used yet. + +February 28, 2002 +- Changed the random number generator system to use objects to represent + different generators instead of array indices. Why? Because it makes + adding new RNGs quicker--I just create a new FRandom object, and nothing + else that uses random numbers needs to be recompiled. + +February 27, 2002 +- Changed the PNG reader and writer to use zlib streams directly without + wrapper functions in order to use less memory. As part of this, I was + able to test the case where a PNG has multiple IDATs to ensure that it + gets read correctly, and ZDoom might now write a PNG with multiple IDATs. +- Fixed problems with the impact decal serializing: 1) The list of impact + decals was messed up when loading a game. 2) Too many impact decals would + cause a stack overflow because each impact decal would cause the next + decal to write itself out before it finished writing itself, because it + had to follow the list maintained in the tracer field. +- Extended the changemap command so that it can take an optional position + number for maps that have multiple player starts. + +February 26, 2002 +- Fixed saving games without savepics. (Technically, because PNG is now used + to store savegames, setting storesavepic to false will still leave an image + in the savegame, because we need to create a valid PNG--but the image is + only a 1x1 black grayscale pixel, so it adds just a few bytes to the file. +- Made savepics slightly taller to 162 pixels so that they look right when + viewed with square pixels and no stretching. +- Fixed CRC calculations for extra PNG chunks so IE can be used to look at + savegames, and there shouldn't be any problems loading them into image + editors. +- Changed sprite serialization to save the sprite names instead of indices + so that simply adding more sprites won't break savegames. + +February 22, 2002 +- Renamed snd_dolby cvar to snd_matrix. +- Made a few more general-purpose action functions accessible through BEX. +- Changed particles' right and bottom edges back to being inclusive instead + of exclusive. +- Fixed: Shadowed masked blocks that were clipped drew the shadow on top of + the regular image. The window when the clipping versions of the routine + were used was also slightly smaller than needed. +- Fixed: Network games didn't work because the game forgot it was running a + network game before it even loaded the map. +- Fixed the spawn and spawnspot ACS commands. + +February 20, 2002 +- Changed the savegame format to use PNG as a container. The use of chunks + for different types of data helps reduce the need for introducing a new + savegame version every time I change some little thing in what the + savegames store, but the primary purpose for the switch is so that you + can load the savegame into a paint program and see the savepic without + having to do any extra work (except possibly changing the file extension + to .png). It also gives launcher writers a public standard to use for + loading the savegame pictures if they want to do so. +- Added the png_gamma cvar to control the gamma saved to PNG + screenshots. Setting it to 0 will use the same gamma as the screen. + +February 19, 2002 +- Added support for writing PNG screenshots. PCX is still available as an + option because it takes longer to create a PNG even at minimum compression. + +February 18, 2002 +- Changed LeftOffset and TopOffset in FTileSizes to signed words so that + they can handle negative offsets (like they're supposed to). + +February 16, 2002 +- Changed actors' active sounds so that they only play if the actor is not + already playing something on its voice channel. +- Removed the MF3_SEEISALSOACTIVE flag. Random sounds do the job better. +- P_SpawnPlayer() now clears spreecount, multicount, and listkilltime. +- Fixed: Spying through a bots eyes and then removing the bot would crash. +- Added \movebob\.25 as a default for bots. +- Fixed: P_SpawnPlayer() could not use the Hexen player 5-8 starts. +- Fixed: The view could still bob when you were dead if stillbob was non-0. +- Fixed an NT 4.0 waveout heap corruption bug that appeared with FMOD 3.5. + I don't know if it's FMOD's fault, NT's fault, or the Audigy's drivers + fault, but I have to initialize FMOD with FSOUND_OUTPUT_DSOUND before + using FSOUND_OUTPUT_WINMM, or a heap used by the sound card's drivers + will be corrupted when FSOUND_Close() is called. +- Updated the reverb code for FMOD 3.5. + +February 14, 2002 +- Added the friendly minotaur for Hexen. +- Added Hexen's flechette. +- Changed the Heresiarch's bishops so that they will automatically target + whatever the Heresiarch is targetting. + +February 13, 2002 +- Added Hexen's keys. +- Changed P_BounceWall to take advantage of the BlockingLine global and use + that as the line to bounce off of, if non-NULL. +- Added support for loading hexdd.wad as an IWAD, which really just means that + hexen.wad is automatically loaded before it. + +February 12, 2002 +- Added Hexen's Heresiarch (Sorcerer). +- Fixed: Decals on an upper side used the lower texture to determine if decals + are allowed and vice versa. + +February 11, 2002 +- The player_s struct now serializes the camera. Before, it always set it to + mo when loading. I'm not sure why I did that, because it meant you lost your + camera view when loading a game saved from a different camera. +- Fixed: SetWeapon only worked if passed the name of a Doom weapon. Anything + else would make it crash. +- Changed HealThing so that it can max out at 200 for players. +- Added error checks for loading maps that don't have their BSP built. +- Added back "Health" as an item for checkinventory and "Armor" for + checkinventory, takeinventory, and giveinventory. +- Fixed: The status bar face background was not translated to the player's + current color. If you were playing a botmatch, the colored background would + also not appear until you changed your color or respawned. +- Fixed: Loading a game before starting one would reset the skill to 0. +- Removed mouse grabbing from the Win32 I_InitInput. That happens later + when the in_input cvar's callback is executed. This solves the problem of + the mouse still being grabbed when startup fails. +- Changed startup handling so that if the game gets into its loop in the + GS_STARTUP state, it will switch to GS_FULLCONSOLE so that the console will + be useable. This can happen, for instance, if you specify an invalid file + for -loadgame. +- Changed -loadgame to automatically append .zds to the specified file if it + isn't already present. +- Fixed: DamageThing(0) did nothing instead of killing the activator. +- Fixed a potential crash when an alias causes itself to be removed as part of + its execution. +- Fixed: Thanks to some left-over code when I changed the realiasing of + existing aliases, the alias would be realiased, deleted, and then recreated. + It should have just been realiased and not deleted. +- Fixed: Respawning after getting your head blown off (in Heretic or Hexen) + would crash multiplayer games and could occasionally crash single player + games as well. Those games set special2 to 666 when the player pressed + space to respawn, and the severed head used this as a signal to remove + itself. Because ZDoom cleans up stale pointers, this would leave the player + without a valid camera for at least one frame before the player actually + respawned, and the game would crash when it tried to draw the view. Now the + severed heads wait until their player field becomes NULL before they destroy + themselves. +- Fixed: BloodySkull and IceChunkHead would appear using the player's sprites + because they were attached to players and inherited the skin. The fix is to + add a dummy first state with a different sprite so that SetState will use + the correct sprite. +- Added snd_fpumixer cvar. + +February 8, 2002 +- Added a new line to the miscellaneous dehacked section: "Monsters Ignore + Each Other" will cause monsters never to target other monsters. + +February 7, 2002 +- Fixed: deh.MaxHealth was unused. +- Fixed: Operator<< for podoortype_t was call-by-value instead of call-by- + reference, so polyobject doors could not be loaded properly. +- Changed sound code again so that unpositioned sounds do not call + S_StopSoundID. +- Added A_SetFloorClip and A_UnSetFloorClip action functions for use by the + cacodemon when it dies/resurrects. +- Added MF2_FLOORCLIP to the HellKnight. +- Moved the P_RunEffects() call so that it can be frozen in freeze mode. +- Added some new SNDINFO commands. $limit controls how many copies of a sound + S_StopSoundID will allow. $pitchshiftrange controls how much a sound's + pitch can change when using pitched sounds. And $pitchshift allows control + of pitch shifting for a single sound. + +February 5, 2002 +- Did away with the longest-playing change to S_StopSoundID because it made + looping sounds of the same type near each other fight for precedence, and + the result sounded horrible. Now I use distance to limit the set of sounds + considered for stopping. Only sounds within 256 units of the new sound will + possibly be stopped by this function. Also removed sound tags because they + served the same purpose as the distance comparison. +- Added $playercompat SNDINFO command to create special aliases from the old + SNDINFO player sounds to the new ones. These are special in that after they + get created, any attempts to modify them will modify there target instead. +- Added the addrocketexplosion cvar. If true, then rockets use additive + translucency when the explode. Otherwise, they use normal translucency. This + can still be overridden with a Dehacked patch. + +February 4, 2002 +- Realized that because I now project particles as their subsectors are + entered, I have enough information to clip the particles when they are + projected. By changing my code to take advantage of this, I can avoid + running through all the drawsegs for each particle on-screen. When there are + many drawsegs and particles on-screen at once, the improvement is quite + impressive--far better than I expected. + +February 2, 2002 +- Added MF2_FLOORCLIP to many of the Doom monsters so that they can have their + feet cut off when standing in shallow water, provided that the appropriate + terrain definitions exist. +- Put back the limit of two identical sounds playing at once from Heretic and + Hexen in order to prevent the SSG from making super loud splashes that drown + out everything else. Tweaked S_StopSoundID so that it will use oldest time + for selecting a sound to stop if it can't find any with lower priority. +- Set all the puffs except BeakPuff back to their default masses. +- Changed splashes so that if a fake flat has a terrain with a splash, you can + shoot or drop below it and leave a splash. +- Fixed anomalies with the way the railgun made splashes. +- Added code to group particles into subsectors so that I can subject them to + the same fake floor clipping as normal sprites. I also found a problem with + lighting of particles in fake sectors and fixed it. + +January 31, 2002 +- Fixed: Fog boundaries could be erroneously drawn in underwater areas because + R_FakeFlat did not change the fake sector's colormap when calculating the + back side of a line. +- Fixed: Using -skill at the command line always set skill to 0. +- Added a check for freeze mode around P_ThinkParticles and the various + decal animator tickers. +- Fixed .cfg file parsing so that if comments appear on the same line as a + command, the command will still be executed. +- Fixed ParseCommandLine to work with unterminated quotes. +- Added "proper" support for tall textures by introducing a different patch + format that uses words instead of bytes to store column lengths and offsets. + All tall and multipatch textures get converted to this format at runtime, so + tall textures work equally well on one-sided and two-sided lines, and I + don't have to worry about sliding windows while generating the composite + textures. + +January 30, 2002 +- Fixed: Addkeysection did not load bindings from the ini. +- Fixed: Quicksave did not quicksave. +- Fixed: Savegames could be listed in the menu twice, once with the full path + and again with just the file name. +- Fixed: Suiciding and giving stuff to a player without an actor crashed. +- Fixed: Loading savegames was broken. + +January 28, 2002 +- Fixed: Using allowdecals in ANIMDEFS was broken. +- Added more ways to create slopes, all of which are thing-based: + + Things 9500 and 9501: The first argument to these things is a line id. + For each matching line, the sector on the same side of the line + has its floor or ceiling sloped so that it passes through this thing. + The thing does not necessarily need to be in the sector(s) being + sloped. 9500 slopes the floor, and 9501 slopes the ceiling. + Things 9502 and 9503: Set the plane equation for the sector they are in + directly. The first argument determines how far it tilts from + horizontal and is measured in degrees. 90 degrees is perfectly + horizontal. Values close to 90 have less slope than values further + from 90. The thing's angle is used to determine what direction the + slope faces. The floor or ceiling will be adjusted so that it passes + through this thing. 9502 slopes the floor, and 9503 slopes the + ceiling. + Things 9510 and 9511: The first argument to these is a sector tag. The + plane equation from the first sector with a matching tag will be + copied to the sector that this thing is in. 9510 copies the floor + plane, and 9511 copies the ceiling plane. + + Things 9500-9503 are processed after slopes created with linedef specials, + so they can be used to further adjust the resultant slope. Things 9510 + and 9511 are processed after all other slopes are set up, so they override + any slopes that might have been created in their sectors already. + +January 26, 2002 +- Assigned spawn numbers to most of the Heretic actors and added one for + Doom's health bonus. +- Added ChangeSkill special (#179). +- Changed A_FireRailgun to use the ammouse field to determine how much ammo + to eat up. +- Added a minammo member to FWeaponInfo and made it dehacked-settable. +- Fixed: Savegames went in the current directory instead of the program + directory. +- Fixed: Aliases could not realias themselves reliably. +- Fixed: Particle drawing was erratic in sectors with fake floors. +- Improved detection of windows into below-deep-floor areas to have fewer + false positives with complex geometry. It works for all the test cases I + have now, so hopefully all the false positives have been eliminated. + +January 25, 2002 +- Because I can't figure out what's going wrong with the blitter, when loading + an ini from a previous ZDoom version, vid_noblitter will now be reset to + true, because I'm not sure it's benefiting anyone. +- Removed DFrameBuffer::PartialUpdate. +- Added more debugging spew and tried different blit techniques, and blits + still take too long. They're supposed to be asynchronous, but my timings + indicate otherwise--the blit times are proportional to the size of the + blit, BltFast almost never returned DDBLT_WASSTILLDRAWING when I removed the + _WAIT flag, and a 1600x1200 blit takes ~15 ms to complete (memcpy only needs + ~4 ms to do the same thing). It seems like it's not using DMA at all but + some lame software emulation instead, so I tried obtaining an + IDirectDrawSurface2 interface and PageLocking the blitter surface, but it + made no difference. Why did it work before but it doesn't now? +- Removed the unlock/lock around D_NetUpdate when rendering. This is only + needed when a video memory surface is locked under Win9x. Since my + experiment with writing directly to video memory is gone, this never + happens. +- Fixed: Alt-tabbing away and back when using the blitter would fail to + restore the lost surfaces, because system memory surfaces don't normally + get lost from such a situation, so the LockSurf call would return ok, and + the BltFast in Update would fail later. + +January 24, 2002 +- Added heapsize cvar so you don't need to use -heapsize if you always want + to use a heap other than 8 megabytes. Moved Z_Init to happen after loading + the config file so that the cvar is available when it gets called. +- Lines with sky on the front and back are no longer considered fog + boundaries. As long as fog does not effect the sky, it looks bad to be + drawing the boundaries of different fogs in outdoor areas. +- Fixed: R_ProjectParticle() did not set vis->cx, so R_DrawSprite() was + unable to properly determine if a drawseg was in front of a particle or + not. +- Added a #wadauthor switch to ACC to cause it to create dummy scripts for + all the real scripts in the map so WadAuthor's error checking will know + about them. I had to change my ACSe detection to no longer look for scripts + that appear to have 0 scripts and strings. Since the standard ACC will + never generate object files with the ACSe tag, this should be safe. +- I think I must have messed up the blitter code somewhere, because now it + slows down the machine it used to speed up. I don't see anything wrong + though! Changed the default for vid_noblitter to true until I can figure + out what's going on. +- Added vid_vsync cvar to control whether or not vsync is used when flipping + the display. Since the framerate gets clamped well below the refresh rate, + turning off vsync is probably useless. + +January 23, 2002 +- Fixed: Deleting the most recently saved game and then dying would crash + because the game would try to load that game and fail because it no longer + exists. +- Added disableautosave cvar to control when autosaves happen. At 0, autosaves + always happen. At 1, they only happen when an autosave special is activated. + At 2, they never happen. Also disabled autosaving when starting a new game. + Autosaves now happen only when advancing to a new map. +- Fixed: Exiting a level in Heretic crashed. +- Fixed: FSOUND_OUTPUT_WINMM was always used if snd_output was not set to + dsound. Also added "directsound" as a synonym for "dsound" when used with + this cvar. + +January 22, 2002 +- Changed the in-game priority class to normal so ZDoom won't give itself + a high priority when running. +- Added "Ammo use" field for dehacked weapon modifications. +- Fixed palette translation through Dehacked again. While I was at it, I + decided to remove translation control from the actor's flags member + entirely and just rely on the Translation member. +- Fixed: Bouncing a missile off a floor/ceiling near a wall could crash if + no missiles had already bounced off a wall. +- Fixed: PIT_RadiusAttack() only pushed things in directions with positive + x and y. +- Gave names to the anonymous structs in p_setup.cpp/sidei_t so that it + compiles with GCC 2.95.3. +- Rearranged FBaseCVar::ToInt() to try and compile it with GCC 2.95.3. + +January 20, 2002 +- Fixed: Picking items up when item respawn is enabled would mess up collision + detection because the items would move themselves back to their original + positions, and the collision detection code is not reentrant. They now + relocate themselves as the result of a state change later on. +- Made some changes to the renderer to support drawing textures with different + scales on the same wall and to also support obtaining textures scaling from + some of the previously unused bytes in the maptexture_t structs stored in + the wad. + +January 19, 2002 +- Added support for DeePsea's tall patches. +- Fixed: Sky textures wider than 1024 could not scroll properly because the + sky position was always clamped past 255. + +January 17, 2002 +- Added a new player property: PROP_INSTANTWEAPONSWITCH (2). When set, the + player can switch weapons instantly without lowering and raising them. + +January 16, 2002 +- Fixed: Autoaim could mess up. Same reason as PTR_SightTraverse below. +- Changed giveinventory when giving a weapon so that the weapon will not be + brought up automatically if the player did not have it already. If this is + desired, it can be simulated with setweapon. +- Disabled drawing of the crosshair when the camera is not a player. +- Fixed a problem under NT4 when using waveout for sound effects and playing + MIDI music: A memory block would be modified after being freed. The fix is + a 50 ms delay between stopping the song and shutting down the sound. +- Added "waveout" as a synonym for "winmm" for the snd_output cvar. +- Added CheckWeapon and SetWeapon ACS commands. +- Added support for a -1 translation in Thing_SetTranslation to set the + target's translation to that of the activator's. + +January 14, 2002 +- Fixed a bug in PTR_SightTraverse() that could cause it to think something + was visible when it really wasn't. +- Fixed: Masked mid textures in foggy areas could be drawn with the wrong + light level, because they checked the foggy flag to determine if they were + in a foggy area. This flag is not set when drawing masked mid textures. +- Added a tx cvar to test different horizontal wall texture scales. +- Fixed some errors GCC found and added GetFlashedPalette() to SDLVideo + so that ZDoom compiles under Linux again. + +January 12, 2002 +- Added a ty cvar to test different vertical wall texture scales. + +January 10, 2002 +- Added a vid_noblitter cvar to force memcpy to be used for copying from + system to video memory, even when the blitter is available to do the job. + On my P3-866 with a GeForce2 Go, the blitter is about twice as fast as + memcpy. On my Athlon XP 1600+ with GeForce2 MX, memcpy is about three + times faster than the blitter. I need more data before I can decide what + a reasonable default for different systems is, but right now it defaults + to false. +- Fixed: The blitter surfaces would only flip when logging was enabled + because I had the Flip call enclosed inside a LOG1 macro. +- Fixed the case where the video driver reported it could blit from system + to video memory, but the blitter surfaces could not be allocated. When this + happened, the screen would not update. + +January 9, 2002 +- Changed P_CheckSlopeWalk() to return false if the actor's floorsector is + different from the actor's sector. It seems to fix the problem with the + "push pad". The whole Doom collision detection/movement code is a mess and + deserves to be rewritten from the ground up. +- Changed sky texture positioning to match older versions. It should be based + on the height of the screen, not the height of the texture. +- Commented out a check at the beginning of wallscan(), because sky boxes can + make the check invalid. + +January 8, 2002 +- By default, animated textures will no longer have decals drawn on top of + them. This can be changed by adding "allowdecals" to the animation sequence + in ANIMDEFS. +- Moved the SpawnableThings/DoomEdMap initialization out of + FActorInfo::StaticGameSet() into ::StaticSetActorNums() so that Dehacked + patches that change doomednums will work as expected. + +January 7, 2002 +- Added an error message for switches that have more than one sound for their + on or off states. +- Fixed: Creating a switch with a valid start texture but an invalid second + texture would crash when you tried to use the switch. Now you get an error + when the ANIMDEFS is parsed. + +January 5, 2002 +- Wrote some code for Convert24(). Since my video card does not support 24-bit + displays, I had to test it using a 32-bit display instead, but it seems to + be working. +- Removed the special case for writing to 8-bit windowed displays in + win32video.cpp. +- Added turnspeeds command to adjust the keyboard turning rate. +- Added sin, cos, and vectorangle ACS functions. They use 16-bit angles. 0 is + 0 degrees, and 65536 would be 360 degrees if it didn't wrap to 0. + +January 4, 2002 +- Fixed: CheckIWAD() would consider as valid any files that were present in + the search, even if they weren't IWADs. Hence, something like + "zdoom -iwad zdoom.exe" would be accepted and cause a crash. + +January 3, 2002 +- Got rid of the divide in P_AdjustLine when it calculated the slopetype for + diagonal lines. Because only the sign of the result is significant, a + simple xor is enough. Did the same for UpdateSegBBox. +- Turned R_PointOnSide into a simple inlining of DivScale32. Multiplies are + cheaper than mispredicted branches, so I took out the special cases for + perfectly horizontal and vertical lines. Also made similar changes to + P_PointOnLineSide and P_PointOnDivlineSide, which are exactly the same + thing, except they use different line representations. Also inlined + P_MakeDivline, because it's so simple. + +January 2, 2002 +- Moved cl_bobscale and cl_stillbob into userinfo (and renamed them to + movebob and stillbob). There are sector actions that depend on the player's + eye height, so these values need to be sent across the network. +- Optimized R_DrawFogBoundary() by drawing horizontal spans instead of + vertical strips. + +December 24, 2001 +- Added a check for sectors without any lines in p_setup.cpp. If any are + found, their tags are set to 0 so that they cannot be used by most specials. + +December 22, 2001 +- Fixed: If you saved over a savegame from a different ZDoom version, the menu + would still list it as being from a different version until you quit and + restarted the game. +- Added the CreateTranslation ACS command and Thing_SetTranslation special to + allow changing the translation used by any actor. +- Added a ScriptedMarine actor. It looks just like the player but wears indigo + and acts like a monster (except its attacks don't actually do anything). + Doomednum 9100, spawnable #151. + +December 21, 2001 +- Added function and array support to ZDoom's ACS VM. + +December 18, 2001 +- Fixed: Player corpses would revert to the default skin if the player + respawned before their death animation finished. +- Changed the Doom weapons so that they use the ammouse member of FWeaponInfo. + This way, when a deh patch sets a weapon to no ammo, I can set its ammouse to + 0, and nothing will change when the weapon is fired.. +- Changed video code so that if the blitter is not being used to copy the + frame from system memory, all the drawing will still happen in system memory + because the processor has faster access to it than video memory. +- Changed video code so that it works with drivers that do not support + FLIP_NOVSYNC. + +December 16, 2001 +- Changed the SSG flash to not last longer than the associated weapon frame. + +December 8, 2001 +- Fixed: CheckIfExitIsGood() always returned false if self was NULL. This + meant open scripts could not change the level. +- Fixed: Exit_Normal and Exit_Secret specials ignored their position + arguments and always used position 0. + +December 7, 2001 +- Changed PIT_RadiusAttack() to be closer to the original behavior. Doom does + radius damage in a square pattern, not a circle. Oops! + +November 23, 2001 +- Changed translationtables into an array of translation tables and fixed a + bug with the serialization of decals with custom translations in the + process. +- Added the CreateTranslation command to ACC. +- Redesigned the layout of ACSe/ACSE files so that they can be included with + editors other than ZETH. The new format looks like a normal ACS\0 file with + some junk in the string area but no actual scripts or strings. The old + ACSe/ACSE format is still supported for people who took the time to compile + the ACC 1.16 source I had posted. + +November 22, 2001 +- Changed the translation member of AActor to an index into the + translationtables array. +- Added the Thing_SpawnFacing special. It works like Thing_Spawn(NoFog) + except the angle of the new actor is taken from the spot where it spawns at. +- Corrected the xspeed and yspeed arrays in p_enemy.cpp so that they better + reflect diagonal movement at the correct speed of 1. + +November 20, 2001 +- More tool work: Added IMGZ, FON1, and FON2 loading support and ILBM, PCX, + and BMP writing support to imagetool. It loads FON1 and FON2 as images, not + fonts, so converting to/from FON1 and FON2 requires extra work on the user's + part. However, it does make it possible to obtain an editable image for + the font that can be used to create another font of the same type. It also + makes imagetool usable as a general-purpose image conversion program, which + is fitting considering that it was spawned from an ILBM to PCX converter I + had written earlier. + +November 19, 2001 +- Changed FFont to construct a font whose glyphs are all the same height so + that I don't need to keep track of the height and y-offset of individual + characters. +- Fixed the FONTA63 character in zdoom.wad to be a proper copy of the + underscore character for Heretic/Hexen. +- Fixed: The Beak's weapon infos did not have their type member filled in. + +November 15, 2001 +- Changed fog boundary handling so that black fog is treated like diminishing + light rather than fog, so it will not appear on a boundary. +- Fixed: The Fortress of Mystery appeared on the intermission map when + entering E2M8 instead of E2M9. It will also stay on the map after you + finish it now. +- Fixed: When using the changemap command to switch episodes in Doom 1, only + the episode just finished would be shown during the intermission. +- Renamed CONCHARS to CONFONT. +- Merged all of the FONTB?? graphics in zdoom.wad into a single DBIGFONT + lump, partly to save space but mostly because I wanted an example font to + include with imagetool when I distribute it. +- After inspiration struck, I added some code to make fog boundaries look + better: At a two-sided line where the front fog is different from the back + fog, draw a solid-colored window of varying translucency in the color of + the front fog color. This is effectively what creating a new colormap for + each fog color already does for sprites and one-sided lines. + +November 13, 2001 +- Added FON2 creation support to imagetool. Like FON1, this is a font format, + but this one supports characters of varying widths and a custom palette. + +November 12, 2001 +- Tool work: Added pcx, bmp, and patch loading support to imagetool. +- Fixed: Screen shots did not capture the palette blend. +- Added the ability for HUD messages to resize themselves when the screen + size changes. +- Removed precachefonts command from ACC, as I decided it was not needed. + +November 10, 2001 +- Implemented the setfont command. +- Fixed: HUD messages were not saved with save games. +- Added decal teleporting support to TeleportInSector so that decals can move + between the different shafts of a fake 3D elevator. Then I commented it out + because doing it right is too hard. + +November 9, 2001 +- Added the ACS functions setfloortrigger, setceilingtrigger, getactorx, + getactory, and getactorz. The first two are to make convincing fake 3D + lifts possible. The last three are there because they have been requested + a lot. + +November 8, 2001 +- Fixed: Elevators did not set floordata or ceilingdata, so you could not + tagwait on them. +- Improved sprite clipping by fake flats further. Now you can look into an + underwater area through a window, and the sprites in it will still show + when your view is above water. + +November 7, 2001 +- Fixed: Autosaves do not become the default quicksave if the player has not + saved a game manually yet. +- FMOD 3.33 also has some division by zero issues, so now I'm back to using + FMOD 3.40--but this one was updated with some more checks that seem to be + keeping the division errors away. Unfortunately, the updated FMOD 3.40 + isn't available for Linux yet. +- Fixed: G_InitNew() was calling StaticGameSet(), but that only needs to be + called during startup. Calling it again later can cause some Dehacked + changes to be undone. +- Fixed: Swimming into a one-sided line while in water would try to jump you + out of the water. Since there's nothing on the other side of the line, + that's rather pointless. +- Made R_DrawSkyBoxes() set the camera properly. +- Changed most instances of camera->Sector in the renderer with viewsector + so that deep water clipping can behave as expected when using a chase + camera that moves out of the same sector as the camera. +- Improved clipping of sprites by sloped fake floors. To be completely + correct, the clip line should be sloped with the floor, but it's still + horizontal because I am feeling lazy right now. At least things don't + appear and disappear as you move around underneath a sloped fake floor. +- Added a sound to A_HeadAttack() so that the Cacodemon can be given a melee + sound through SNDINFO. +- Changed A_CPosAttack() to use self->AttackSound instead of hard-coding it + to "chainguy/attack". Now the WolfSS can have a different attack sound. +- Fixed: secplane_t::FlipVert() was wrong. It needs to negate everything, not + just c and d. This prevented sloped fake floors and ceilings from + displaying properly. + +November 6, 2001 +- Added things 9983 and 9982 to perform actions when going below and above + fake ceilings. +- Added some more Transfer_Heights modifiers: 16 causes the control sector + to have no effect at all on the target sector. With this modifier, it is + used solely for triggering sector actions. 32 causes the control sector to + not effect the lighting in the target sector. +- Added two new sector actions: SecActEyesDive (9993) and SecActEyesSurface + (9992). When used in conjunction with TeleportGroup, these can produce the + Duke3D silent teleport to and from underwater sectors effect. +- Changed TeleportGroup so that if group_tid is 0, it treats the activator + as the group. + +November 3, 2001 +- Made some changes to P_ExplodeMissile() so that missiles exploding on a + corner are more likely to leave behind decals. +- Added the cvars cl_bobscale and cl_stillbob to control the amount of view + bob when moving and standing still, respectively. + +November 2, 2001 +- Improved the accuracy of EV_SilentLineTeleport(). The original function was + written as if the actor was always exactly on the line, so it calculated a + destination position directly on the line and fudged with it to get the + player on the correct side. It's better to find the closest point on the + source line and the corresponding point on the destination line and then + offset off of the destination line so that the actor is in the same + relative position as it is to the source line. This eliminates the need for + fudging, and I can't get stuck in the wall when teleporting in a sample + level anymore. +- Why does the Doom map format have to store sectors only implicitly? Because + of this, people can create maps with oodles of unclosed sectors. I've + already had to modify my P_Trace() function because of this. Now I found + out that they can cause problems if I don't always divide front space in + R_RenderBSPNode(): I made it conditional because I assumed it was + unconditional because of precision problems with using polar coordinates to + perform the transformations. When sectors are well formed (and most are), + having the check causes no visible problems. But when sectors are badly + formed, it is possible that sprites in the sectors will not be drawn because + the sectors do not actually get visited, even though the space they occupy + is drawn. +- Changed the Doom fullscreen HUD so that health and armor counts are drawn + at a location based on the actual font height. +- Fixed: DCanvas::DrawShadowedMaskedBlock and ::ScaleShadowedMaskedBlock did + not check to make sure the shadow was drawn inside the screen. Now they do, + and if the shadow lies partially off the surface, the image and shadow get + drawn in two passes instead of one. + +October 31, 2001 +- Fixed: The bloodbath announcer was not entirely silent in single player + games. +- Fixed AImpactDecal::SpreadLeft() and SpreadRight() so that they can spread + across adjacent loops without getting stuck in an infinite loop. +- Fixed: Corpses can fall to the bottom of deep water now. +- Fixed a bug in P_Trace() when the trace is on the floor or ceiling and it + hits a two sided line that blocks it. +- New: Instant hit weapons can make splashes in liquids, even deep ones. + The size of the splash is determined by the weapon's puff's mass, so I set + several of the puff actors to have masses of 5 so their trails only leave + small splashes instead of big ones. +- Renamed DThinker::RunThink() to Tick(). + +October 30, 2001 +- Finally added a playmovie command to ACS. +- Fixed: FDecalLibrary::GetDecalByNum() would only find the decal if it was + on the right-most branch of the tree. +- Changed the subsector pointer in AActor to a sector pointer. The only place + where it wasn't used to get the actor's containing sector was an early-out + in P_CheckSight(). Since the sight checking in ZDoom uses the blockmap + instead of the BSP, I doubt it provided much benefit, especially since it + was rarely taken. + +October 29, 2001 +- Put back some code that lets you see underwater areas through windows. It + is not perfect and cannot be used at the same time that you can see the + abovewater area of any deep sectors. +- Fixed: The back side of a mirror could clip sprites in front of it because + the determination of which side of a line a sprite is on was being done in + world space. The solution is to use camera space for the determination + instead. Since I was already calculating all the necessary values, the + solution mostly involved extending vissprite_t and drawseg_t to hold the + extra information. +- Fixed: Sectors set to drop their ceilings after 30 seconds would not go + back to their original height if they were blocked while closing. +- Added the con_ctrl_d cvar so that I can set it to "quit" and press Ctrl-D + at an empty console prompt to quit the game. +- Added the exit command as a synonym for quit. +- Added the defaultbind command. + +October 27, 2001 +- Made a slight optimization for sprite drawing by moving the floorclip + clipping out of R_DrawMaskedColumn and into R_DrawSprite. +- Fixed: Spawning objects in a swimmable water area would create a splash on + the water surface. +- Fixed: Passing +map at startup just prints a warning to the console instead + of quitting altogether if the map could not be found. +- Added new options to Transfer_Heights: By setting the second argument to 2, + only the deep water effect will be created. By setting it to 4, the fake + floor and/or ceiling will only show if it is "inside" the sector, but only + if the real sector's and the control sector's corresponding planes are not + sloped. This also effects the texturing in that the control sector's + textures are used for both the top and bottom of the surface they correspond + to, and the sector being faked keeps its textures for its normal range. + Set the first argument to 8, and it will be made into water even without a + WaterZone actor in the control sector. These can be added together to + combine effects. So Transfer_Heights (tag, 12) should produce an effect + similar to Doom Legacy's 280 linetype. +- Added the test and eval console commands. Test is like if/then/else, and + eval evaluates an expression, possibly storing the result in a variable. + This should take care of all the major functionality the console was + missing before. + +October 26, 2001 +- Made the atexit cvar a command that registers different commands to + execute when the game quits. +- Cfg files listed at the start of the command line now get executed as if + they had appeared after +exec. (i.e. "zdoom foo.cfg" works just like + "zdoom +exec foo.cfg") +- Added the pullin command so that .cfg scripts loaded at startup can cause + one or more wads to be loaded. (They "pull in" the wads they need.) +- Changed the exec command so that it can execute more than one file. +- Added the addkeysection and addmenukey commands for people writing console + scripts. + +October 25, 2001 +- Added ACS commands fadeto, faderange, and cancelfade to do some palette + blending stuff under scripted control. +- Added BloodSplash, BloodSplashBase, SlimeSplash, and SlimeChunk classes + for anyone who wants to use them in a TERRAIN lump. +- Added the atexit cvar. It gets executed like an alias when the game quits. +- Added archivecvar command to force user-defined cvars to save themselves + in the config file. +- Added snd_waterreverb cvar to disable the use of underwater reverb. +- Added support for specials with variable argument counts to ACC so that + specials which have had parameters added (such as Thing_Spawn) can still + be used without the extra parameter. +- Added TeleportOther (76) and TeleportGroup (77) specials. +- Added autosave capabilities. Up to four autosaves are kept at a time, + and they get created whenever a player enters a map. The level designer + can also place them at strategic locations in the level using special + 15 or linetypes 348/349. + +October 24, 2001 +- Fixed: The level name shown on the automap included the hours of the + current time if the map was in a hub. +- Added Line_Horizon to DOOMX/HERETICX as linetype 337. +- Added am_showitems cvar to show the item count on the automap. +- Added pattern matching support to D_AddConfigWads(). +- Fixed: Variable substitution only worked for the last argument of a + command line. +- Removed FCommandLine::AllButFirstArg(). It did not handle variable + substitution, and since you can escape quotes inside strings, it's not + really neccessary, either. +- Added a generator line for the Spider Mastermind to DECALDEF. +- Added some division-by-zero checks to the projection calculations in + R_AddLine(), R_CheckBBox(), and R_RenderBoundWallSprite(). + +October 23, 2001 +- Added Scale and Decal properties to Dehacked thing sections. Added Decal + property to Dehacked weapon sections. +- Changed the scalars in DECALDEF to be 1-based instead of 64-based. This + lets me silently expand its range in the future without breaking existing + decal definitions. +- Fixed: fixedlightlev was being applied to skies. It looks weird to see a + torch lighting up the entire sky, so skies should ignore the setting of + fixedlightlev. +- Fixed the scaled status bar. I was simply forgetting to add the image + offsets in DBaseStatusBar::DrawImage() before calling CopyToScreen(). +- Added code to let decals move with sliding and rotating polyobjects. +- Fixed: The wait console command waited one tic too few. +- Fixed a resizing problem with playing movies windowed. +- I think checkinventory, giveinventory, and takeinventory are fully working + now. +- Made checkinventory not crash in open scripts. +- Made AInventory::TryPickup() public so that I can use it with + giveinventory and avoid printing a message about the pickup. +- Passing an amount of 0 to takeinventory now removes all of that item + from the player's inventory. +- Made TakeInventory work in open scripts. +- Removed the Health option from GiveInventory. +- Changed DamageThing so that negative damages cause it to act like + HealThing. +- Added OldStyleID() methods to AFist, APistol, AStaff, and AGoldWand. + +October 22, 2001 +- Made clearinventory work in open scripts. +- Made ambientsound use CHAN_AUTO instead of CHAN_BODY, so you can have + multiple overlapping ambientsounds. +- Fixed: Setplayerproperty was using the set property as the who property. +- Fixed: Closing the console when the overlay automap is active and the view + window does not cover the width of the screen would not redraw the border. +- Fixed: The overlay automap did not center itself inside the view window. +- Fixed: When neverswitchonpickup was changed during a game, it would always + become false in the playerinfo struct. +- Made the rocket explosion style modifiable through dehacked in the misc + section. Use the keys "Rocket Explosion Style" and "Rocket Explosion Alpha" + to change it. +- Changed the sky drawer so that it properly tiles skies of any height and + not just those that are a power of 2. +- Changed R_InitSkyMap() so that tall skies will always be aligned at the + top of the screen when looking all the way up. Now 240-tall skies will + actually be useful, since so many people seem to think skies need to be + that tall to be considered "tall" even though anything taller than 128 + pixels is "tall". +- Fixed: Files specified at the start of the command line were treated as + if they were listed after a -bot parameter. +- Modified DArgs::GatherFiles() so that it can handle files listed after + multiple instances of the same parameter (e.g. "-file 1.wad -file 2.wad") +- Changed ConsiderPatches() so that it tries appending both .deh and .bex to + files listed after both -deh and -bex parameters, which means the two + parameters now behave identically and are just synonyms for each other. +- Made a fix to BaseFileSearch() when it retries with an extension. + +October 20, 2001 +- Added range checks to R_SetVisibility to prevent visual glitches caused by + too high visibility/fov combinations. +- Made r_visibility unchangeable in netgames. +- Made FOV changes get sent through the net interface, so they can be + recorded in demos, and also so that they can be restricted with the new + sv_nofov cvar. +- Fixed: Bool cvars (such as sv_nomonsters) would change their associated + serverinfo var without going through the network. +- Fixed: The Doom status bar would not update the arms/frags area when the + deathmatch cvar is changed during the game. +- Fixed: Player corpses could still make the grunt sound when they hit the + ground. +- Fixed: StreamSong would always play at full volume until snd_musicvolume + changed because it kept its own internal copy of the volume that was not + updated with the actual volume until the cvar was changed. +- Made crushing ceilings call PlayCeilingSound() again, but only if the + ceiling is not playing a looping sound. This fixes the almost silent crusher + in Doom2 MAP04 that had become totally silent. +- Fixed: The weapon sprite did not flash when invisibility was about to run + out. +- Made DECALDEF generators support using "None" to remove decals from actors. +- Added fullbright flag to the BFG lightning and plasma scorch decals. +- Fixed: Ambient things could not be spawned silent, because they start + themselves with PostBeginPlay, which gets called after Deactivate + when their dormant bit is set. So they would stop themselves and then + immediately start again. Using BeginPlay fixes this, since it gets + called before the dormant Deactivate. +- Fixed: S_RelinkSound() should not be able to move repeating sounds to + positioned sounds. This fixes removing continuous ambient sound things + from not stopping the sound immediately. +- Fixed: Deactivating a continuous ambient sound thing would not stop the + sound until it was either overridden by more important sounds or disappeared + out of range. +- Fixed: The bex include directive ignored the file name if it appeared in + files that mark line endings with CR/LF instead of just LF. (AFAIK, that's + all bex files that exist.) For files that just use LF, it would try to + include the file but crash. +- Win32Video::EnumDDModesCB() now rejects modes whose widths are not + multiples of 8, because there are various places in the source that assume + this to be true, and I have no alternative code (or desire to write such + code) to handle cases when this is not true. I don't know of any standard + modes that would be rejected by this, but it's better to be safe than sorry. +- Fixed: Viewwindows with widths that are not divisible by 16 could crash + when doubling pixels horizontally, because the MMX routines write to + quadwords at a time. Now the non-MMX code is always used in such cases, + since they are rare (only when the window is the full width of the screen + and the screen width is not a multiple of 16). +- Removed vid_bufferarea and related code to switch between buffered and + unbuffered display based on translucent areas visible in the last frame. +- Fixed: Savegames did not remember which levels had been marked visited for + the Doom 1 intermission screen. +- Fixed: Actors' alphacolor was not serialized. +- Fixed vid_setmode not always resizing the window to a reasonable size under + Win ME because the OS sends out WM_GETMINMAXINFO before performing the + resize with SetWindowPos(). + +October 19, 2001 +- Added the ability for DDrawFB to draw to a system memory surface and then + blit it to the primary surface. This can greatly improve performance, both + because the video card can write to its own memory faster than the CPU, but + also because the next frame can start rendering in a separate surface while + the blit is underway. The net result is that drawing to system memory is + only a little slower than drawing directly to video memory (if at all), and + there is really no reason for me to support writing directly to the primary + surface any more. I can even run 1400x1050 at 35 fps, though it is somewhat + jumpy, and it does get slower if the scene is too complicated. But just + being able to run it full speed at all at that high a resolution rocks! Even + a 300 MHz P2 can run the standard levels at a full 35 fps at 800x600, which + it couldn't before. + +October 18, 2001 +- Need to fix windowed 256 color updating for systems that cannot lock the + primary surface. (result is DDERR_CANTLOCKSURFACE when you try) +- Added a performance counter for blitting the frame buffer to the screen and + discovered that it is a real performance sink. When no pixel format + conversion is involved, it should be no slower than wall drawing, right? Well, + it's about twice as slow. +- Improved performance at 1024x768 by using a pitch larger than the width for + the underlying SimpleCanvas at that resolution (so that successive pixels + drawn in columns are not exactly 1k apart and can make better use of the + cache). The result is that wall pixels take about 5.4 cycles to draw, which + is in line with what the other resolutions manage. + +October 17, 2001 +- Did some performance tests at different resolutions and discovered something + very weird: up to and including 800x600, wall drawing ranges between 4.5 and + 5.2 cycles/pixel. But at 1024x768, it jumps up to a whopping 18 cycles per + pixel. Even stranger, 1280x1024 only uses 7 cycles/pixel, and 1400x1050 takes + just 5.5 cycles/pixel. (These numbers include all overhead such as traversing + the BSP and creating visplanes, not just the time actually spent stuffing + pixels to the framebufer.) +- Changed the mode iterator to allow resolutions taller than 1024 pixels, + since there is nowhere in the source that this restriction exists. (There + is a limit of 1200 pixels tall, but this is easily changed with a #define.) +- Massaged the assembly output of vlinec4 to produce vlinetallasm4. This + new function is about 7% faster than provlineasm4 and is not limited to + 256 pixel tall columns, so I stopped using provlineasm4. I don't know + how it compares to vlineasm4 on a Pentium, but my guess is that vlineasm4 + is faster on such a machine. It's probably worth also noting that contrary + to my initial belief, self-modifying code was essential to getting this + function to perform well. Also, I did not even bother trying to optimize + it for a Pentium, just Pentium Pro and above. Moving things around to help + pairing on a Pentium actually reduced performance on this P3-M. + +October 15, 2001 +- Wrote C versions of vlineasm1 and vlineasm4. On a P3, vlinec4 performs + about half way between vlineasm4 and provlineasm4. P2 performance is + probably similar. +- Got rid of all the 2-column drawers. Whatever performance improvements + they might have been able to offer was negated by the complexity of the + code neccessary to use them. This let me greatly clean up rt_draw4cols() + and actually make it readable. + +October 12, 2001 +- Fixed: I_InitMusic() was not called if -nosound or -nosfx was passed. +- Changed visplanes so that the bottom array stores the pixels just below + the plane--a simple semantic change that lends itself to a few more + optimization chances elsewhere in the engine, since it unifies the way + top and bottom arrays are handled everywhere. +- Enhanced wallscan so that it can get a texture column using any function. + This lets me use it for layered skies. + +October 10, 2001 +- Drawing of a single sky layer now uses wallscan. +- Removed the use of dc_mask from all of the non-wallscan column drawers, + since they are only used for masked columns, which never repeat and hence + never need masking. +- Tried out the new code on a P2-300. It is also slightly faster. Drawing a + wall covering the entire screen is about 10ms faster at 800x600 on it. This + made me decide to do away with BlastColumn, R_RenderSegLoop1, and + R_RenderSegLoop2. There is just one R_RenderSegLoop now, using vlineasm4. + +October 9, 2001 +- Added Build's vlineasm4 and associated code to speed up wall drawing. + Surprisingly, it only offers a marginal improvement on this P3-866 equipped + notebook: The higher resolutions are only a few FPS faster than + r_columnmethod 1. When I get a new monitor, I will have to try it out with + my main system, since it still has a P2-350. I think the biggest benefit + should be for people with Pentium-class or less processors. + Since it is faster, I'll keep it. I also improved it so that it works with + textures taller than 256 pixels (or should, I haven't tested). + +October 4, 2001 +- Fixed fullscreen video playback so that it does not minimize the game + window immediately after the video is stopped. +- Improved dragging the ZDoom window around by making the window procedure + pay attention to WM_PAINT messages and redraw the screen as needed. Making + WM_SIZE invalidate the client rect also lets it redraw as the window is + shrinking. + +October 3, 2001 +- Fixed DDrawFB::CreateSurfacesComplex() so that it can retry without + requesting video memory. This lets it work with Mode X, so presumably it + will also let it work with old video cards that lack proper DirectDraw + support. +- Commented out the GammaControl stuff in win32video.cpp. Too many people + complained about not being able to compile it (get a newer DX SDK!), and + it does not provide me much benefit when working with paletted displays + anyway. Nor was it ever actually implemented. + +October 2, 2001 +- Fixed: DROPPED bit was defined twice in DEHSUPP. +- Updated my source files with the new BSD-ish license. +- Renamed p_spark.cpp to g_shared/a_spark.cpp. +- Removed d_items.cpp and d_items.h. They have been obsolete ever since I + changed the give command to accept class names. +- Changed the randomized sound names in DEHSUPP from their individual names + to their new base name. (i.e. grunt/sight1, 2, and 3 all become grunt/sight) +- Fixed a typo in DEHSUPP: gatso/death should have been fatso/death. + +October 1, 2001 +- Added a playmovie command to play a file using DirectShow. Currently, it + works best with windowed mode. + +September 27, 2001 +- Added Line_Horizon special to extend a sector's floor and ceiling to + infinity--should be useful for skyboxes. It is not meant for use with + slopes, so don't do that. +- Fixed: ceilingclip/floorclip generation in R_DrawSkyBoxes was wrong for + unused portions of the sky box's visplane (when pl->top[x] == 0xffff). + This could cause problems when taking the snapshot for savegames. +- Fixed: Quicksaving would continue to ask for a save slot until a normal + save had been done. +- Fixed: Bad decal texture coordinates could crash the game. These were + generated when the camera gets extremely close to a decal, so I chose to + use the same tactic I used with masked mid textures and not render them + at all if they get too close. I think the only time something like this + becomes a real issue is when somebody is noclipping around the level. + +September 26, 2001 +- Fixed P_LoopSides() to not trash memory when loading a map with a + single-sided line that does not attach to anything at its right end. (E1M3 + is one such map.) +- Fixed decals not drawing their full height except when they were on upper + textures; BlastColumn was storing wallbottom wrong. +- Fixed inconsistant usage of ceilingclip. It is supposed to store the top + good y, but some places still treated it as the y just above the first good + y, as it was in the original renderer. +- Fixed the GCC version of qinterpolatedown16short(). It wrote 2 more + entries than it was supposed to and could start writing one entry before + it was supposed to. +- Previous log entries were accidentally lost when I was improving the + todos/fromdos scripts. Now only the files that have changed get copied + across, and I can avoid rebuilding every source file each time I transfer + the code between partitions. Under Linux, this is a big deal, because GCC + is so slow. + +September 17, 2001 +- Added cl_missiledecals cvar to turn off decals left behind by missile + explosions. +- Added cl_bloodsplats cvar to turn off blood splats while leaving other + decals alone. +- Added -timerdelay parameter to specify how fast the game timer tics (in + milliseconds). This is just here so that when I occasionally get demos + illustrating problems, I can easily fast forward through them. +- Made A3D the default for snd_3d again, because A3D has one more hardware + channel than DirectSound on my Vortex2 and because it seems to work + better than DirectSound. +- Changed I_StartSound3D() so that it starts sounds on a specific channel + instead of using FSOUND_FREE, because it loses sounds with DirectSound + if I let FMOD pick a channel. Oddly, FSOUND_FREE with A3D works fine. + [Nevermind, that doesn't work with DirectSound, either. It seemed to be + working the first time I tried it, but when I tried again later, it + was not working anymore.] [Another footnote: A3D seems to position the + sounds wrong that DirectSound does not play. What's going on?] +- Let I_SetChannels() change the number of channels available so that all + the available hardware channels can be used if using 3D audio. +- Made CPU speed detection more accurate. +- Added underwater reverb for hardware 3D sound. +- Updated sound code for FMOD 3.4. +- Fixed timer resolution checking in WinMain--my parentheses were misplaced. +- Put SectorSilencer back at doomednum 9082. I don't know why I had changed + it to 9002. + +September 15, 2001 +- Fixed: Monsters that reached the end of a patrol path did not have their + reactiontime reset, so they would wait a very long time before attacking. +- Fixed: STYLE_Shaded ignored special colormaps like invulnerability. +- Added support for autoloading wads through the config file. Create a + section called [Game.Autoload] and place "Path=" beneath it for each + file to be automatically loaded. They are loaded after the files in the + skins directory and before any files on the command line. Game can be + Global to load the files for any game. Global files are added before game- + specific files. +- Fixed StreamSong when using 3D sound: The stream was not created with + FSOUND_2D, so it was being positioned in the world. + +September 14, 2001 +- Made the ACS spawn and spawnspot commands automatically prepend A to their + type names. They remain untested, however. +- Added decals for all remaining Doom things. Heretic is next. +- Fixed pitch calculation in P_TraceBleed() when a missile's velocity is used + to determine pitch. + +September 12, 2001 +- Added decal stretchers, sliders, combiners, and colorchangers. Also added + a few more decals. + +September 11, 2001 +- Fixed FDecalLib::GetDecalByNum() and ::GetDecalByName() so that they do not + crash if the decal is not found. +- Tried putting back in the BSP-based sight checking code that was in the + Linux Doom 1.10 source, and the result was quite surprising. Using the BSP + to check sight was actually slower than using the blockmap, sometimes + significantly so--Vrack 2 spent between 4 and 6 times as much time checking + site using the BSP as it did without. In the best case, the BSP routines + were about as fast as the blockmap ones, so I took the BSP routines back + out, because they offer no benefit over the Hexen code I had been using for + some time now. +- Fixed: Maps with starts for players 5-8 would trample over memory + when saving the starts for those players. +- Added blood splats for instant hit weapons. + +September 10, 2001 +- Made alpha affect STYLE_Shade. +- Fixed: rt_shaded4cols sometimes drew texels too dark because it + calculated the value of fill wrong. +- Fixed: Decals that used picnums (i.e. all of them) could not be flipped + horizontally. +- Stopped using actors' memory locations as their phase shift for float + bob motion. This works fine for single player, but in multiplayer, + there's no way to ensure that the same actor will have the same phase + on different machines. Now I use the random number generator instead. + +September 8, 2001 +- Added decal faders so that decals that are likely to bog things down + (such as the plasma rifle's) can disappear sooner than if they wait for + cl_maxdecals to be hit and get cycled out. [Edit: I only use these for + special effect decals right now.] +- Added the ability for missiles to leave behind decals on walls. +- Fixed a sub-pixel alignment problem for vertically flipped sprites. +- Fixed: Adding bots and then changing the map could crash because the bot's + "player" was still carrying around the actor from the previous level. +- Bumped the barrel respawn time back up to 1050 tics--forgot I had dropped + it down to 50 for testing. +- Added support for loading sounds from RFF files so that I can have the + Bloodbath announcer. + +September 7, 2001 +- Fixed: Dehacked patches that set weapons to ammo type 5 (what was once + am_noammo) would use am_crossbow, because that is type 5 now. + +September 5, 2001 +- Fixed: Trying to alias a command through the .ini file would crash + because the game would actually try to do it instead of giving a warning. + +September 4, 2001 +- Added the falling splat sound to A_PlayerScream(). +- Changed skin semantics in AActor::SetState() again so that players can + actually burn because the burn states use the FDTH sprite instead of + the normal player sprite. Now, if the actor is not a player, or the + player does not have a skin, or the state's sprite is not the same as + the sprite the player was spawned with, the state's sprite will be + used. Otherwise, the skin's sprite will be used. +- Fixed burning and icy deaths to not crash. +- Fixed a stack overflow in Heretic/Hexen that could happen after death + because A_Chase and A_Look would repeatedly cause the other function + to execute, ad nauseum. +- Added Hexen's Ice Guy/Ice Golem. +- The SkyboxViewPoint's angle is now used to adjust the yaw when drawing + a skybox. This means you can rotate a skybox by rotating its viewpoint + (which is courrently only possible with an actor mover and several + overlapping interpolation points). +- Added simple Dolby Pro Logic surround support to s_sound.cpp using code + from a post on the message board. + +September 3, 2001 +- Fixed: The alias command will no longer try to set or remove aliases for + normal console commands. +- Fixed an error in C_RemoveTabCommand() that moved one extra name down + at the end of the array. +- Added Hexen's Serpent/Water Lurker, Centaur, Demons, and mana. + +September 1, 2001 +- Reintroduced MF_CRASHED, this time as MF3_CRASHED, so that I don't need a + special case to crash FireDemons that die on the floor. +- Added Hexen's FireDemon/Fire Gargoyle/Imp, just because it's been so long + since I added anything from Hexen. + +August 29, 2001 +- Changed ADecal::StickToWall() to add decals to the end of the list so that + new decals get drawn on top of old ones. +- Fixed: Actors with STYLE_None were still being projected to the screen, + needlessly wasting time. + +August 28, 2001 +- Fixed: Quicksaving into an existing slot would rename the quicksave to the + name of whatever was saved most recently instead of keeping the name + of the quicksave slot unchanged. +- Fixed: PWADs that replaced sprite frames that originally only had a rotation + 0 with multiple rotations would only show the first rotation. +- Fixed: When the light to dark part of R_CalcTiltedLighting() clamped the + end of the range, it set lightfiller to a value calculated with + (NUMCOLORMAPS-1)<player != source->player). This is just so that voodoo doll damage + cannot be reduced by turning on teamplay and changing teamdamage. + +August 2, 2001 +- Fixed: Items were respawning at the location where they were picked up when + they should have respawned where the level author placed them on the map. +- Changed the criteria for executing thing death specials from MF_COUNTKILL to + !MF_SPECIAL. Now you can give a barrel a special, and it will be executed when + the barrel is destroyed. +- Added the print command to print a string from the string table. +- Added the contributed Italian translation. +- Fixed: OB_UNDEAD said "revevant" instead of "revenant". +- Added names for all the new keys I found when looking at the dinput.h from + the DX8 SDK. +- Fixed: Bindings for kp= would not save in the ini file properly. +- Added rebind command to change the binding of the key that activated it. + This is intended to allow the creation of generic sequential aliases. (That + is, a series of aliases that do something, then bind a key to the next alias + in the sequence.) Like this: + alias dumb1 "echo one; rebind dumb2" + alias dumb2 "echo two; rebind dumb1" + +July 26, 2001 +- Fixed the TMulScale definitions for GCC. + +July 25, 2001 +- In I_InitSound(), A3D is no longer the default if snd_3d is true. +- Moved s_sfxvolume, s_midivolume, and s_musicvolume into their appropriate + i_* files and integrated them with the functions they called. Also made + their ranges uniform at [0.0,1.0]. + +July 23, 2001 +- Added some more checks to p_setup.cpp to catch bad maps. In this + case, the checks were added for ma_sincity.wad, which has two one- + sided linedefs that have -1 as their front sector and will crash if + you look at them. + +June 8, 2001 +- Fixed: Single files added with -file were recorded with their lump + names instead of the file names so if they got closed, they could + not be reopened. + +June 3, 2001 +- Finished TiMidity++ support for the Win32 version. It has two modes + of operations: 1) Just play as normal. This only works if the sound + card can play multiple wave streams at a time. 2) The default, have + TiMidity output wave data through a pipe and use that to fill an + FMOD stream. This will work with all sound cards and offers a little + more control over the output. The only problem I could not figure out + how to solve was how to make TiMidity quit (safely) when ZDoom wants + it to without modifying TiMidity. The solution I ended up using was to + have TiMidity start a thread that waits on a special named event and + calls exit when the event becomes signalled. + Ironically, the whole purpose of being able to use TiMidity for music + was that it could provide better music support under Linux, yet the + Linux side of things has not even been done yet. When I do write it, it + should work fine with an unmodified TiMidity. + +June 1, 2001 +- Put back the " operator *()" members of the different cvar + classes because VC++ always uses a bitwise copy when passing a class + to a varargs function EVEN IF THE COPY CONSTRUCTOR IS DEFINED. This + means that something like printf ("%d", dmflags); will actually copy + dmflags to the stack instead of just dmflag's value. To make it work + as expected, you need to use printf ("%d", (int)dmflags);. Since + printf ("%d", *dmflags); is more compact, I decided operator * is + useful after all. + I just hope the timidity cvars are the only ones I used with printf + style functions. I did not see any others when I scanned the source, + but that doesn't mean I didn't miss any. :-( +- Changed the name of the variable passed to cvar callbacks from "var" + to "self" to make its use more obvious. +- Changed the " operator *()" of the different cvar types to + "operator ()" so that fetching a cvar's value looks just like + fetching any other variable's value. + +May 30, 2001 +- Added snd_midiprecache cvar so that people without GUSes can turn off + the precaching. +- Fixed: snd_surround was ignored. +- Fixed: snd_reset turned off MIDI. +- Added assembly routines for the different r_detail settings. + +May 28, 2001 +- Fixed: LEVEL_SPECOPENDOOR opened the door at a speed of 8*TICRATE instead + of 8*FRACUNIT, about 1872 times slower than it should have been. + +May 26, 2001 +- Fixed the positioning of y-doubled view windows and changed the x-doubling + so that it works with the optimized column drawer and does not need the + columnofs table. +- Fixed: M_FindResponseFile had a poor parser that considered lots of things + to be white space that weren't and did not treat quotes specially. Now it + uses essentially the same parser as the console. +- Fixed Heretic/Hexen wind specials so that they can apply even when an + actor's current velocity is 0. +- Added MF3_NOBLOCKMONST flag to indicate which things can cross + ML_BLOCKMONSTERS lines (because this is a better way than writing a + special case for Heretic's APod). +- Removed MaxSpecialCross, since it isn't needed anymore. + +May 25, 2001 +- Fixed: ATreeDestructible's default list was missing the mass property. +- Added Hexen's falling damage code and made the two types of falling damage + (ZDoom or Hexen) selectable from the level and dmflags. The dmflags falling + damage selector can now be used to enable falling damage but not to disable + it to avoid cheating in levels meant to be played with falling damage. +- Added a new dmflag (sv_nopassover) to make thing z-checking work as it + did in Doom (that is, not at all, except for missiles). +- Fixed: Chat macros did not work because Windows sends WM_SYSCHAR instead of + WM_CHAR when ALT is held down. + +May 14, 2001 +- Added decal groups and generators to DECALDEF. +- Fixed potential crash when defining decals with SpawnIDs. + +May 3, 2001 +- Added lightning scripts, which get executed whenever lightning strikes in + a level. +- Added the OutdoorLightning sector special (197) so that skyboxes can + flash outdoor (as opposed to indoor) lightning without fancy scripts. + +May 2, 2001 +- Fixed: When teleporting in a non-hub environment, the level's snapshot + would stay around if the player had saved while in it. This was especially + obvious if the player was moving to the same map he just left. +- Enabled key repeating in the menus. +- Added Hexen's lightning and fixed a bug in Hexen's code: It is not safe + to assume that the number of sectors that lightning can apply to will + remain constant through the level (thanks to ACS). + +May 1, 20001 +- Fixed: The SkyBox member of sector_t was not serialized. + +April 26, 2001 +- Fixed: When loading savegames, bobbing actors would have semi-random + heights because they get loaded in a different memory address than they + were saved at. The actor's address is used to determine its phase shift + compared to other bobbing actors, so when the actor was restored there + was no way to restore the original cycle. The solution is to take out the + bob offset before saving and add it back in when restoring. +- Added some DrawChar functions to DCanvas. +- Fixed DCanvas::StringWidth() for high ASCII characters. +- Changed the arrangement of codes in ESpecialGUIKeys to document the + standard ASCII codes in the range [1,31]. +- Changed text color escape character from 0x81 to 0x1c, because 0x81 is a + printable character (though most Windows fonts seem to leave it undefined). +- Added support for WM_CHAR messages (they get fired off as EV_GUI_Char), so + now you can do all the standard Windows text manipulation stuff when typing + text at the console or elsewhere. +- Fixed: Decals were being saved to savegames but were not restored properly. + I think this was also causing crash problems after loading savegames. +- Changed mouse pointer hiding to change the cursor to an invisible cursor + instead of changing its visibility. This is to ensure that it works + correctly all the time instead of just most of the time. +- Removed testing for WM_ACTIVATE in the window procedure. Looking for + input focus is what we really want to do where the window's active status + was being checked. +- Got rid of I_Pause/ResumeMouse() and let the code in i_input.cpp decide + whether or not the pointer should be visible. + +April 25, 2001 +- Changed action command handling so that multiple keys bound to the same + action can coexist peacefully. That is, if you are pressing two keys bound + to the same action and release one of them, the action will still persist + until the second key is also released. This is like Quake. +- Added a check for key bindings to check if a binding contains the substring + "bind". Only if it does is the binding copied before being executed. + Previously, the command was always copied, even if it was unneccessary. +- Changed C_DoCommand()'s argument to a const char *. + +April 24, 2001 +- Changed command line handling for console commands so that argv and argc + are not calculated until the first time they are needed. + +April 23, 2001 +- Added shuffle parameter to playlist command. + +April 22, 2001 +- Added playlistprev and playlistnext commands. +- Pressing F1 at the save/load menu replaces the comment with the actual + file name of the savegame. +- Added GK_ entries for the function keys. +- Fixed: Quicksaving without saving/loading first crashed. +- Added reverse tab-completion to the console, when pressing Shift-Tab. + +April 21, 2001 +- Fixed: P_GiveAmmo() did not check userinfo.neverswitch before setting the + pendingweapon. +- Got rid of P_GiveWeapon() and moved its functionality into AWeapon:: + TryPickup() and added some more AWeapon member functions just so that + picking up a weapon with sv_weaponstay true will produce all the standard + pickup feedback. This breaks the "give weapons" cheat, but you can still + summon them, so how bad is that really? +- Changed P_GroupLines() to warn about lines that lack frontsectors instead of + crashing. + +April 20, 2001 +- Fixed: In Heretic and Hexen, things are supposed to gib at negative half + their original health. + +April 17, 2001 +- Fixed: It was possible to stand at the very edge of a steep slope and not + fall off of it. It is still possible to "balance" by running away from the + edge, but I think that will take more time to fix than it's worth (especially + if I really do go ahead and rewrite the level geometry collision detection.) +- Added in-air friction that depends on aircontrol: The greater aircontrol is, + the more friction affects things. Only affects players. +- Made level gravity and aircontrol accessible through MAPINFO as well as ACS. +- Disabled migration of zdoom.cfg. Perhaps it is better to make a clean break + from the old format than to try and import it if zdoom.ini is not found. +- Fixed: When the status bar face graphic changed and the status bar was + scaled, only the area enclosing the new graphic was updated to the screen. + It should update the entire face box. +- Fixed: When a dehacked/bex patch changed a level's name, the change was not + reflected in the level infos, so it did not actually become visible. + +April 14, 2001 +- Modified S_LookupPlayerSound() to detect player sounds which were defined + but did not have any valid lumps and automatically try again using male. +- Added storesavepic cvar. +- Added sorting to the savegame menus. +- Finally tested the savegame menus to make sure that they work with more + save games than are visible and discovered that they didn't, so I fixed + them so they do work. +- DCanvas::StringWidth() now knows about '\n' characters and returns the + length of the longest line. +- Changed the savegame menus to display games saved with an incompatible + ZDoom version so that the user has a more convenient means of deleting them + than by opening the savegames in a hex editor to find out which version each + one was saved with. +- Added "name" support to archives. Basically, names are just managed strings + that allow duplicates to be stored by index instead of duplicating the + string. + +April 13, 2001 +- Fixed: Particles were rendered as if they were being drawn to the main + frame buffer, even when they weren't. +- Fixed: After deleting the last save game, the menu would think you still + had a game selected and crashed if you tried to delete again. +- Discovered the problem with some of Tei Tenga's cameras: They have invalid + heights that put them above/below the sector. Copied the viewz clamping + from P_CalcHeight() into R_SetupFrame() to compensate. I don't know why + they worked in earlier versions. +- Moved zvox.wad loading to happen after loading the IWAD. There are certain + places where the IWAD is assumed to be the second wad loaded. + +April 12, 2001 +- Added a new game menu for Hexen that explains you cannot start Hexen from + a menu yet. +- Made the names stored in DEHSUPP case-insensitive. +- Fixed: R_RenderViewToCanvas() did not lower the Heretic weapons to the + bottom of the rendered area. +- Fixed positioning of the save/load menu titles and the save game cursor + at high resolutions. +- Fixed: Many ammo types were derived from AInventory and not AAmmo, so + they did not play the dedicated ammo-pickup sound. +- Fixed AAmbientSound::Activate() to check that the ambient sound assigned + to it actually exists. If not, it destroys itself. +- Changed doomtype.h to use the ANSI instead of defining its + own limits. + +April 10, 2001 +- Fixed: FindNextFileA() returns 0 on failure, which is the opposite of + _findnext(), and I did not realise that when I changed I_FindNext() + to use the Win32 API function. + +April 9, 2001 +- Made some code changes to allow for compilation with GCC again + (specifically, Cygwin's GCC). Fixed a few latent bugs in the process, + thanks to GCC's more stringent default warnings. +- Fixed: FHelperThread must have a virtual destructor, which might + explain why I was having so much trouble with it before. + +April 7, 2001 +- Added r_drawtrans cvar to allow disabling the drawing of translucent + things. +- Fixed: The stretched Doom status bar would not properly clear away the + big ammo count when switching to a weapon that does not use ammo. +- Fixed: At certain screen heights, scaled status bars would not touch the + bottom of the screen because of inaccuracy in the calculation of ::ST_Y + in DBaseStatusBar::SetScaled(). +- Added separate pickup sounds for health, armor, and ammo items. +- Improved sound link resolution in S_StartSound() so that regular sounds + can alias player sounds. +- Reimplemented idmypos in a more useful manner. + +April 3, 2001 +- Fixed: DLevelScript::RunScript() sets TeleportSide according to its + lineSide property instead of assuming that it is already set correctly. +- Fixed: ASectorAction::CheckTrigger() should set TeleportSide to 0 so that + teleports always work. + +March 29, 2001 +- Added language cvar. +- Fixed: Float bobbing objects would warp to the floor when on a rising + platform. +- Fixed: "Torque" should not be applied to float bob objects. (Hexen MAP11 + is a good example of why not.) +- Fixed: Spree messages should only be shown in deathmatch. +- Changed sound effect loading to try the sound as DMX format first instead + of last. (FMOD was recognizing CHICPK2 in heretic.wad as some compressed + format.) +- Made skins work with the new player sound system. + +March 28, 2001 +- Changed player sounds to exist separately from the main sound list (sort + of). The generic player sounds (e.g. "*death") now exist as actual sound + entries, but they only serve as a context for getting an index into a + separate list of class/gender specific sounds which index back into the + main sound list and provide the actual sound to play. This also reduces + the total number of sounds that need to be registered. Several new SNDINFO + commands were introduced to support this. +- Fixed: When the tomed phoenix rod ran out of flame, the weapon disappeared. +- Fixed: Intensity calculations in InitPalette() could overflow and cause + the invulnerability colormap to be wrong. + +March 27, 2001 +- Made the Ambients array in s_advsound.cpp a list of pointers to + AmbientSounds instead of a container of AmbientSounds, since the array is + usually nowhere near full and just wasting memory. + +March 26, 2001 +- Fixed: Using sound names in a dehacked Thing section works again. +- Enhanced the soundlist command to show links and random lists. +- Added an overloaded Printf() that does not take a print level, but just + prints at PRINT_HIGH. +- Added the $random SNDINFO command. +- Moved the template functions into templates.h and added the BinarySearch + template function. +- Fixed: The spectre had sounds defined in SNDINFO, but its defaults didn't + specify any sounds, so it used the demon's sounds instead. +- Implemented a suggestion from the message board to A_VileChase so that + negative speed archviles do not run away from corpses. + +March 24, 2001 +- Fixed: Monsters following a patrol path would not have their reactiontime + reset to 0 if they heard a player before seeing her. +- Fixed: Picking up a thing by walking over it would remove it from the + blocklist and make it possible to walk into another thing near it, because + the P_BlockThingsIterator would not find anymore actors in that block for + that call. +- Tried making DThinker::Delete() private so as to enforce the "use Destroy + with thinkers" rule, but it didn't work. If the object's constructor can + throw an exception, the caller of new needs to be able to call delete in + order to remove the partially constructed object. However, I did change + the definition of DECLARE_STATELESS_ACTOR so that all actors have nothrow + constructors (since they're not allowed to use a constructor), which should + help reduce the size of a lot of the CreateObject()s. +- Split the Thinkers list into two in order to guarantee that every thinker + will have a chance to think during the same tic when it is created. +- Fixed: A thinker that destroyed itself in PostBeginPlay() would block the + ticks for all actors after it for that game tic. + +March 23, 2001 +- Fixed: Float bobbing was not properly centered around the object's "ideal" + height. +- Added A_SPosAttackUseAtkSound(). This is the same as A_SPosAttack(), except + it plays the actor's attack sound instead of being hardcoded to play + "shotguy/attack". Now changing spider/attack in SNDINFO can have an effect. + +March 22, 2001 +- Wrote a fully-functional gccinlines.h compatible with GCC 2.95. + +March 20, 2001 +- Undid: When I made float bobbing work for variable heights, I started + clamping bobbing objects to the floor/ceiling. Heretic and Hexen do not do + this, so I stopped clamping them. +- Fixed: P_BloodSplatter() should only be called for Raven's games, not Doom. +- Changed sound ID 0 to mean "no sound" instead of -1. +- Changed actor default sounds from strings to IDs so that I don't have to + worry about tracking a bunch of pointers when loading/saving games, because + this information gets saved out now. +- Fixed: Midtextures on two-sided lines are not drawn if they pass too close + to the player. What is considered "too close" was determined empirically. +- Fixed typo: Wizard's spawnhealth should be 180, not 100. +- Turned off monsters killing other monsters when the player is dead and + the game is Doom. +- Added global ACS variables. These are like world variables, except they + do not get cleared when moving to a new hub. +- Reduced the ACS stack size from 200 to 64. + +March 19, 2001 +- Added a list of needed wads to savegames. +- Moved the SAVESTRINGSIZE definition into version.h so that I can be + sure all the files that use it use the same value. One file had it + at 32, and the rest used 24, which was causing crashes when switching + levels after saving a game. +- Fixed a Doom bug: If a boss eye tried to shoot a cube at a boss target + with the same y-coordinate as itself, the game would crash with a divide + by 0 because only the difference in y-coordinates was used to determine + how long it would take for the cube to reach the target. + +March 17, 2001 +- Rewrote the save and load menus to support the new savegame features and + to also support far more files than before. +- Fixed: The patch drawers in v_draw.cpp crashed with patches that had + useless 0-length posts. +- Fixed: Sound sequence SS_CMD_END was being generated wrong. +- Fixed: Sound sequences with no current sound were archived wrong. + +March 16, 2001 +- Added screenshots to save games, ala all the Build games I've played. + Also added comments that currently just indicate the time when the game + was saved. +- Added R_RenderViewToCanvas() and rearranged r_main.cpp a little to + accomodate it. + +March 15, 2001 +- Added page up/down support for long options menus (i.e. controls menu). +- Changed console paging keys: Ctrl-Home and Ctrl-End now move to top/bottom + of console buffer, and Shift-PageUp and Shift-PageDown move up/down by + pages. +- Fixed: Trace() picked PT_ADDTHINGS based on ActorMask instead of actorMask. + The most obvious consequence of this was that hitscan weapons worked + sporadicly with the chasecam on. +- Fixed: Backpack was only giving one of each ammo type instead of one clip + of each ammo type. + +March 14, 2001 +- Added MBF "torque" to fix "The items that the monsters drop when they die + sometimes float in the air (happens very often when the monsters die in + stairs)." Although it does fix this, I think it looks goofy to see ammo + clips go careening down the stairs at the beginning of MAP01. The better + solution to this particular situation would probably be to adjust the + pickupable items' radii to accurately reflect their physical sizes, but + I fear that might make them harder to grab. Maybe if they were noclip? +- Fixed dumpmapthings command. +- Space tuning: Shrank FState from 28 to 16 bytes. +- Fixed spree and multikill messages to correctly display the killer. +- Fixed DPusher::ChangeValues() to properly convert from byte angles to + fineangles. +- Added PROP_STATE_BASE to AMaceFX3's defaults, so that it gets the right + death state. + +March 11, 2001 +- Changed bex string section handling to simulate old death messages + (without %o and %k). +- Added support for international characters to the FFont class and also + added some corresponding characters to zdoom.wad. +- Changed Heretic/Hexen font loading to use name plates like Doom fonts + instead of FONTA/FONTB markers, because templates allow for gaps in the + character set. +- Tweaked string loading so that variant-neutral strings are loaded before + loading strings from any variant of the specified language. +- Toned down the alpha on BFG and plasma projectiles. +- Changed rocket explosions back to STYLE_Translucent. +- Fixed ADEF_SkipSuper handling, though I wonder if it wouldn't be better + to rework the situations that use it, so it isn't needed at all. +- Fixed: Music for Doom 1 was wrong. +- Fixed: The cast finale was messed up. +- Fixed: The new actor members were not being serialized. +- Fixed: None of the new actor fields were being serialized. +- Fixed: The FState * serializer did not use TAutoSegIterator. +- Fixed: Dehacked monsters could be really slow, because monsters speeds + are now fixed point but weren't before. +- Fixed: M_QuitDOOM() was not getting DOSY through GStrings. +- Fixed: Stringlist did not write out enough information in the name table, + so FStringTable could not figure out which index belonged to which name. +- Fixed: String names were not loaded before using a bex string section. + +March 9, 2001 +- Added PCD_SETTHINGSPECIAL and its analagous Skull Tag special, + Thing_SetSpecial. +- Added obituary messages for the Heretic monsters. +- Added %o and %k substitutions for obituaries, ala Unreal. +- Fixed: Player obituaries were not being displayed unless it was a player + who did the killing. +- Extended SexMessage() to handle %o and %k. +- Fixed: tmfloorsector was being calculated wrong, which could cause + problems moving around in slopy areas. +- Replaced all the DivScale30() calls in WallMost() to SafeDivScale30(). + +March 8, 2001 +- Wrote support for the string tables into the game, which shrank it 28k + (but only because the text data got moved into the wad). + +March 7, 2001 +- Wrote a tool to compile localized string tables. + +March 5, 2001 +- Fixed: PTR_TraceIterator expected to be able to cross closed sectors. That + is, when it stepped across a two-sided line, it assumed that the next line + in sequence would belong to the sector it had stepped into. +- Fixed: P_SightTraverseIntercepts() needs to set up openbottom and opentop + before calling PTR_SightTraverse so that the results of P_CheckSight() + are always defined. +- Fixed: Using include in bex patches caused the DehSupp data to be freed + prematurely. +- Got the code to fully compile again with default lists. The executable is + only 104k smaller than before (I had hoped for something more dramatic), + but at least now it only takes one minute to link the release build. + +February 28, 2001 +- Changed the console command implementation so that new commands do not + require subclasses (and all the function overhead that goes with them). +- Finished building default lists for every actor. + +February 27, 2001 +- Began the tedious process of converting to actor default lists. +- Simplified the IMPLEMENT_CLASS macros to not require the parent type + because that information can be derived thanks to the DECLARE_CLASS macros. +- Removed the distinction between serializable and non-serializable DObjects + so only objects that do some specific serialization actually need + Serialize() methods. +- Fixed: Teleport_EndGame works again. +- Added WALLF_NOAUTODECALS flag to sidedefs, so certain lines will not + get impact decals (bullet holes) on them, specifically: scrolling walls. +- Increased the precision of P_InterceptVectors so that it can handle longer + lines. + +February 26, 2001 +- Added limitpainelemental cvar to control whether or not Pain Elementals + will limit their attacks based on the number of Lost Souls in the level. + +Feburary 24, 2001 +- Fixed some class serializers that did not call their superfunction. + +February 23, 2001 +- Changed P_DropItem() so that negative special values will not be stored in + the item's health field. This is primarily to support exoteric DeHackEd + patches, as it doesn't matter under normal circumstances. + +February 22, 2001 +- Removed the ClassInit class, and made TypeInfo constructors register + themselves, saving around 20k. +- Fixed: Places that use P_SpawnMissile() and then manipulate the missile + somehow now check for NULL returns. +- Fixed: AMovingCamera::Serialize() did not call its superfunction. + This is an oversight I keep making, so I added some code to DObject and + FArchive to look for this error. + +February 20, 2001 +- Fixed: Normal skies did not reflect in mirrors, and sky boxes mostly failed + to be drawn at all in mirrors. + +February 19, 2001 +- Added PCD_PUSHBYTES and PCD_PUSHxBYTES p-codes to ACS, since PCD_PUSHBYTE + was a fairly common sequence. + +February 17, 2001 +- Made G_DoLoadLevel() remove any existing HUD messages. +- Made BLOCKMAP lumps optional (sort of--the lump still needs to be there, + but it can be length 0). +- Rearranged P_SetupLevel() so that a map's behavior is loaded before + anything else (in order to make enter scripts work when a map is just + loaded). +- Changed I_RegisterSong() to not bother loading a song if -nomusic. +- Added support for these Skull Tag script types: Death, Enter, and Respawn. +- Added cl_showsprees and cl_showmultikills cvars. +- Fixed: A_Look made stealth monsters visible. +- Fixed: BlurSphere needs to be STYLE_Translucent for the pulse to be + visible. +- Fixed: StealthDemon was STYLE_Add instead of STYLE_Translucent. +- Fixed: Col2RGB8_2 needs to have cover most entries from Col2RGB8, not just + half of them.. +- Fixed: Net_SkipCommand() was still calculating the length of + DEM_SINFCHANGED based on the old semantics. +- Changed startup command processing again. Now, all commands are processed + at once, but ones considered "not safe" to be executed before everything + is set up will have their execution delayed. + +February 15, 2001 +- Changed autoexec.cfg parsing to be similar to command line parsing. + All sets are run as soon as possible, then other commands are executed + later after all the subsystems are initialized. +- Changed BEGIN_CUSTOM_CVAR/END_CUSTOM_CVAR pair to CUSTOM_CVAR. +- Changed BEGIN_STAT/END_STAT pair to ADD_STAT. +- Changed BEGIN_COMMAND/END_COMMAND pair to CCMD. +- Added detection for Windows 2000, so the sound code will default to + DirectSound under that OS instead of WinMM. + +February 12, 2001 +- Changed Die for missiles set as shootable so that they explode instead + of doing a regular death. +- Changed MF2_FLOATBOB handling to not use health or special1. (So now + it works with monsters.) +- Sorted the list of skins for a more user-friendly experience in the + player setup menu and to make R_FindSkin() faster. +- Removed all traces of COM_Parse(). +- Added support for ACS scripts that store p-codes and certain other values + in bytes instead of dwords. This can offer considerable space savings. + Also tweaked the interpreter to help keep the program counter and stack + pointer in registers. + +February 11, 2001 +- Fixed: I_ShutdownMusic() should call S_StopMusic() so that the general + sound code knows the song no longer exists. Having it free the song itself + could crash if the game lost and regained focus while quitting. + +February 8, 2001 +- Added Anubis cheat. +- Really fixed rotated flats on sloped planes. The previous fix only affected + floors at certain angles and did nothing for ceilings. + +February 5, 2001 +- Fixed: FPS meter with vid_fps was always 0. +- Fixed: Tilted floors/ceilings did not rotate properly. +- Fixed: Mirrors did not reflect slopes properly. +- Changed P_ProcessSwitchDef() so that not specifying a game name is the + same as specifying "any". +- Fixed: Typo in zdoom.animdefs prevented SW1STRTN/SW2STRTN from switching. +- Fixed: -iwad did not work with wads that included a path. +- Tweaked P_TestActivateLine() so that only actual missiles will be promoted + to activate player cross teleports. +- Did away with I_SetGUICapture(). It was too prone to error. Now the input + code checks what kind of events it should generate each time I_StartTic() + is called. +- Fixed: "Screenshot" mis-spelled as "screeshot" in controls menu. +- Fixed: The cursor in the option menus was one pixel too low. +- Fixed: Standard automap colors were all black if the game was started with + am_overlay set to true. +- Fixed a typo in P_CheckKeys() that prevented the yellow skull and cards + from being equivalent for 3-key doors. While I was at it, I rewrote the + function, although it's still not what I would consider very readable. :-( +- Removed cheat-changing Dehacked support. +- I think I've got the problems with changing a thing's MF_SHADOW bit with + Dehacked worked out now. + +February 3, 2001 +- Added "Alpha" and "Render Style" lines to Thing sections of dehacked + patches. +- Fixed: Changing a thing's doomednum with dehacked would not update the + DoomEdMap hash table, so it would have no effect. +- Fixed: Changing a thing's doomednum also changed its scale. +- Fixed: Modifying a hanging ceiling thing with dehacked would usually not + reset the height to its Doom default. (Was using sizeof(OrgHeights) + instead of NumOrgHeights.) +- Changed actor's translucency variable to alpha to reflect that it + controls the alpha value for more than just translucency. +- Centralized column drawer selection to make adding more render styles + in the future more convenient. The function is R_SetPatchStyle(). The + selection of fg2rgb and bg2rgb has also been moved out of the various + column drawers and into R_SetBlendFunc() so that they can be more + generalized. What was a translucent column drawer is now blending without + clamping, and what was an additive column drawer is now blending with + clamping. Their names have been changed to reflect this. +- Changed WallMost()'s frac bits back to 30, but now it uses SafeDivScale. + Now it should never crash there. +- Fixed: -playdemo did not like to use files in other directories. + +February 1, 2001 +- Fixed: Particles would not draw properly if a mirror was visible. +- Fixed: Viewing decals in mirrors could crash because PrepWall() only knew + about non-mirrored surfaces when it clipped the lwall values. +- Changed the number of frac bits in WallMost() when clipping a line to 28 + instead of 30 to (better) avoid possible integer overflow. +- Fixed: Hub travel would hang when visiting a previously visited level. +- Got rid of linear.nas. It was only there to try and make things better for + 486s, and as I care even less about 486s now, there didn't seem to be much + point in having it around wasting space in the executable. +- Removed RF_FORCECENTER renderflag and added a new RenderStyle actor member + that's used to specify the render style instead of renderflags. Some + styles are just aliases to other styles based on cvars (r_drawfuzz and + transsouls), and others are styles that specify drawing. I also added a + new style: STYLE_Add (additive blending) and made many of the DOOM + projectiles that I had previously made translucent use it instead. + +January 30, 2001 +- Fixed xtoviewangle generation in R_InitTextureMapping(). (It was phase + shifted 90 degrees) +- Removed R_ScaleFromGlobalAngle(), rw_distance, rw_angle1, and + rw_normalangle. + +January 27, 2001 +- Fixed: Things made fuzzy with dehacked appeared no different when + r_drawfuzz is false, because they also need to have their translucency set. +- Set the default for vid_bufferarea to 0, because large translucent areas + suddenly coming into view (such as firing the BFG) can cause a very + noticeable slowdown. I may take out the support for unbuffered output + entirely. +- Fixed: Demons in nightmare mode would end up with 0 tic chase states. +- Fixed: A_BFGSpray() was using the player's autoaim setting for finding + things to spray. + +January 19, 2001 +- Fixed some text prompts (e.g. "Do you want to quit?") so that they properly + release the input code from GUI mode. +- Fixed ABossEye::Serialize() and DBrainState::Serialize(). +- Extended Dehacked thing sound replacements so that you can use any sound + defined in a SNDINFO lump. +- Fixed Dehacked thing sound replacements -- a 0 sound index means "no sound" + and should not be treated as an offset into the sound list. +- Fixed translation table selection in R_ProjectSprite when using flags to + specify a translation. +- Fixed HeadsOnAStick to be solid. + +January 18, 2001 +- Added some invisible bridge things. +- Fixed the sky around the tunnel in E1M1. +- Fixed P_DrawSplash2 not centering splashes around their point of origin. +- Fixed assignment of codepointers in [CODEPTR] sections of bex files. + +December 24, 2000 +- Added the firstvissprite and firstdrawseg variables so that I can restrict + the vissprites and drawsegs drawn in skyboxes without changing their base + pointers, which could move when they get realloced. + +December 19, 2000 +- Fixed Ceiling_LowerByValue acting like Ceiling_RaiseInstant. +- Fixed game grabbing the mouse during startup when the IWAD dialog + is shown. +- Fixed dmflags not changing in gameplay menu. +- Fixed standard Doom colors not showing up on automap if the game was + started with am_usecustomcolors 0. +- Fixed demons moving very slowly in nightmare mode. +- Fixed dehacked patches not setting bright frames properly. +- Fixed dehacked patches that change the player sprite's name. +- Fixed dehacked patches setting a thing's fuzzy property. +- Moved lots of supplementary dehacked data into zdoom.wad so that it's + only in memory when it's needed. + +December 18, 2000 +- Fixed my sidedefs decompressor so that it works with maps that have + unused sidedefs. As a consequence of this, the ordering of sidedefs in + memory may be completely different from their ordering on disk. +- Fixed P_LoadSectors() to clamp each sector's light to the range [0,255] + instead of ignoring the high byte stored in the wad. +- Fixed rendering of shaded decals when the light amp is on. +- Fixed the generation of the shading tables in R_InitTranslationTables() to + not create values > 64. +- Gave spawnids to some things that were missing them. +- Reduced the default for vid_bufferarea to 6000. +- Reread the description of the SAL/SAR/SHL/SHR instructions. The OF + flag is undefined for shifts other than 1--not unchanged. Rewrote + the stretchers in blocks.nas to correct for this. On my Pentium II, + the OF flag is left unchanged, so I got the desired result, but + other processors can change it. :-( +- Added back triple buffering, because double buffering can be + (but is not always) significantly slower. +- Fixed up the sound code for the new FMOD 3.3 API. + +December 15, 2000 +- Fixed fourth and fifth episodes not appearing in the menu for the + extended Heretic IWAD. +- Reorganized DCajunMaster::WhatToGet() so that Reachable() is called + less often. +- Fixed multikill messages appearing for everyone and not just whoever + got it. +- Divided thinkers into thinking and non-thinking classes. By default, + a FThinkerIterator will not iterate through non-thinking classes. + Those must be specified explicitly. Made the decals non-thinking so + the think code doesn't waste any time on them. +- Fixed bots not being able to spawn in deathmatch mode if there are + not enough coop starts. +- Added support for compressed SIDEDEFS lumps. +- Made the splash bases MF_NOGRAVITY so that they stay at the surface + of BOOM deep water instead of sinking into it. +- Made splashes work as expected in sectors with the BOOM deep water + effect (and set as a water zone). +- Fixed positioning of weapon sprite. (Was one pixel too high.) +- Fixed vertical aiming on railgun being swapped. +- Fixed SUBCLASS_NS macro in a_doomdecorations.cpp. It was using radius + as the height. + +December 14, 2000 +- Fixed lines not being considered for rendering when at least one side + is sloped but the heights on each side of the line are identical at + both ends. +- Fixed physics and rendering of non-horizontal slopes. They were both + messed up because I had been subtracting b*y in the ZatPoint + calculations when I should have added it. Clipping the right edge of + non-horizontal slopes to the screen was also wrong because I was + subtracting from x instead of y for the y component of the point + intersecting the screen. +- Fixed automap being all black when am_usecustomcolors is false. +- Updated Heretic status bar for unbuffered output. +- Stopped creating the primary surface as a complex flipping surface so + that I can set colors 0 and 255 under NT. +- Made the video code better able to cope with different surface lost + conditions. +- Fixed alt-tab killing the program by listening to WM_ACTIVATEAPP and + forcing buffering (that never gets flushed to the screen) when the app + goes inactive. +- Moved the palette change to occur immediately after the page blit. +- Fixed GUI capture being lost when the demo cycle returns to the title + screen and the menu is active. +- Fixed being able to get stuck in the edges of sloped ceilings. In + PIT_CheckLine(), I was using the actor's current position instead of its + desired position to calculate the nearest point on the line. +- Fixed skyboxes so that sprites seen through multiple visplanes are visible + in all the visplanes and not just the first one. +- Made a bunch of changes to slope walking to try to make walking along the + very edge of a slope work better. This included adding a floorsector field + to AActor that records the sector that the floorz field came from. +- Changed the nearest point on line calculation in PIT_CheckLine() to use + floats, because ints aren't large enough for the intermediate calculations. +- Changed S_StopSoundID() to not stop sounds with the same priority. +- Fixed normal mace balls so that they fall down after some distance. + Apparently, in Heretic MF2_LOGRAV has precedence over MF_NOGRAVITY. +- Fixed sky boxes so they are not lit by extralight. + +December 13, 2000 +- Fixed image collections not remapping any instances of color 0 in a patch + to a different color. This was most evident in the multiplayer status bar + where the background could be seen through the player's eyes and eyebrows. +- Made normal skies work with animations found in an ANIMDEFS lump. +- Made screen melts work by forcing them to use buffered output. +- Reimplemented screenshot command. +- Changed DCanvas::Dim() to read and write four pixels at a time so that + the first frame dimmed before buffering is forced only takes about 1/4th + the time to draw as it would if single pixels were read and written. +- Made shaded and fuzzy decals count toward transparent area. +- Fixed not being able to pick up a Megasphere if your armor is already full. +- Fixed Dehacked patches not being able to clear a frame's fullbright + property. + +December 12, 2000 +- Renamed zdoom.cfg to zdoom.ini so that old versions can coexist in the + same directory as this one with less hassle. +- Reimplemented decals. +- Changed the player setup menu to use number instead of named teams. +- Fixed stack overflow caused by floating point imprecision when setting + turbo out of range. +- Fixed DGlow not working properly because lightlevels are now unsigned. +- Fixed the second DScroller constructor not setting m_vdx and m_vdy. +- Changed R_SetDefaultColormap() to look in the colormaps namespace before + looking in the global namespace. +- Fixed fade MAPINFO command not working. +- Fixed picking up the green armor showing the generic pickup message. +- Fixed massacre cheat to not let pain elementals spew out lost souls upon + their death. This also fixes massacre from crashing if the dead lost soul + was patched to actually stick around in a map. +- Separated AGibs into ARealGibs and AGibs. ARealGibs is what gets spawned + automatically when something gets crushed. AGibs is what gets spawned when + gibs are explicitly placed on a map. +- Fixed C_BackupCVars() recording the specific value of a cvar instead of + making a copy of that value. + +December 11, 2000 +- Fixed generic ceilings with texture/type changes from using model floor + sectors instead of model ceiling sectors if they had type raise to highest + ceiling or type lower to highest ceiling. +- Fixed elevators. + +December 9, 2000 +- Made old Doom level translation programmable through the use of simple + precompiled scripts that the game loads from a wad. + +December 6, 2000 +- Restored Doom's original 50-element fuzzoffset table and rewrote the + fuzz drawers to accomodate it while still using as few branches as I + thought reasonable. + +December 5, 2000 +- Got the display mostly up and running again without PTC. The new design + allows for automatic switching between buffered and unbuffered modes + based on how many transparent pixels were visible in the previous frame, + similar to Build. Unlike Build, the cutoff is always a specific amount + of pixels (cvar-controlled) instead of one-eighth the total area of the + screen. + +November 28, 2000 +- Removed the use of PTC and returned to my rudimentary DirectDraw support. +- Got rid of all the funky multiple palette handling stuff in v_palette.cpp. + Paletted textures haven't been realized yet, and if they ever are, the way + I had things set up probably isn't the way to utilize them. + +November 25, 2000 +- Fixed BossTargets automatically destroying themselves. +- Got rid of the global brain state and moved it into a thinker that gets + spawned if any BrainEyes are present on the level. +- Made PIT_RadiusAttack() calculate damage based on distance from the + thing's bounding cylinder instead of its center point. +- Made thinkers use Exec-style lists because of their simple insertion and + deletion code. +- Made R_TextureNumForName() return 1 instead of 0 for missing textures so + levels that lack textures are easier to navigate. +- Changed ADecal's doomednum to 9200 to deconflict with Hexen coop start 5. +- Created an MMX version of the color picker routine. Building a fade table + with it is about 15% faster than with the straight C version. Not exactly + a stunning speed increase, but on slower machines, the speedup should at + least be slightly noticable. + +November 24, 2000 +- #ifdef'ed out most of the FColorMatcher class. Too many colors are + visibly off when building fog with it. :-( +- Simplified the calculations in DoBlending() and created an MMX version. + +November 20, 2000 +- Implemented Scroll_Floor and Scroll_Ceiling specials for ACS scripts. +- Fixed drawing of masked midtextures that are used as special effects (i.e. + invisible platforms). +- Updated R_AddLine() to only treat as solid two-sided lines if the upper or + lower tier (whichever is appropriate) actually has a texture. +- Made doors close to the current floor height instead of whatever the floor + was at when the door started lowering. +- Rearranged P_DoCrunch() somewhat so that non-shootable things do not block + moving floors/ceilings. (Same behavior as Doom.) +- Fixed model sector changes in EV_DoFloor() and EV_DoCeiling(). +- Added mdk command to kill whatever the player is aiming at. +- Added the BOOM fix to getNextSector() so that lines that have the same + sector on both sides and are also part of the sector will not return + that sector. +- Fixed PathFollower not initializing PrevNode and CurrNode when it is + spawned. + +November 18, 2000 +- Added per-sidedef lighting control. Also added two new mapinfo fields + (vertwallshade and horizwallshade) to control the relative light of + vertical/horizontal walls with the sectors. Evenlighting is now obsolete. + +November 17, 2000 +- Added a new thing (SectorSilencer) to prevent actors from making noise in + specific sectors, in case anybody wants to use noisy actors in their + sky boxes. +- Fixed skyboxes to draw all visplanes with a skybox and not just the first + one. +- Added tilted floor physics. Actors can walk around on floors with slopes + as large as 45 degrees. For anything steeper than that, they slide down. + Monsters will treat steep floors like drop offs and avoid getting on them. + +November 16, 2000 +- Added a bForceSlide parameter to P_XYMovement() to force actors to slide + against walls when blocked, even if they don't specify MF2_SLIDE. This + allows for better operation of conveyor belts with corners. +- Fixed volcano sounds in Heretic. +- Revised carrying sectors again. Removed sc_carry_players. Each thing + checks the sectors it is standing on to see if they have any carry + properties. If they do, it adds those values to its momx and momy. + Thinkers are still used to set the carry properties, which are reset + to 0 at the beginning of each tic. In order to make sure all carry + properties have been set before any actors think, I introduced the + concept of statnums for DThinkers ala Build. DScrollers have lower statnums + than actors, so they all get executed before actors. + All carriers for a single sector are cumulative. If an actor is straddling + multiple sectors with carry properties, then those properties are averaged. + (X and Y components are averaged separately.) This should give the best + compromise between BOOM carry behavior and realistic behavior at sector + boundaries. + +November 15, 2000 +- Made A_WaterfallSound() and A_WindSound() play looped sounds. +- Fixed spelling error in SNDINFO: Heretic's waterfall sound is + waterfl, not watrfl. +- Changed P_ActivateLine() to call P_TestActivateLine() and changed + P_TestActivateLine() to allow missiles to activate regular teleporters. + This is neccessary for the Mace's Death Ball. +- Took the momz and tics setting out of P_SpawnPuff(). It is the + responsibility of the spawned puff to set these things as desired. I had + meant to do it a long time ago but forgot all about it. +- Changed deferred scripts to remember the player who triggered them. + +November 14, 2000 +- Removed the code for F*CVar::GetRealType() from c_cvars.h and moved it + into c_cvars.cpp. Virtual inline functions are not inlined and cause the + function to be generated for every source file the class is used in. +- Fixed bug with Transfer_CeilingLight special. I was or'ing CeilingLight + with SECF_ABSLIGHTING instead of CeilingFlags. + +November 11, 2000 +- Slopes don't work in mirrors. :-( +- Removed the viewangletox table and rewrote R_InitTextureMapping() to + generate xtoviewangle without it. +- Added support for per-skybox control of visibility. + +November 10, 2000 +- Implemented sky boxes. Total time: ~40 minutes. :-) Should probably test + it some more, though. + +November 9, 2000 +- Fixed a sprite clipping bug at the right edge of mirrors. + +November 8, 2000 +- Reimplemented mirrors. +- Improved positioning of masked mid textures. + +November 7, 2000 +- Increased the fractional precision of swall calculations. +- Removed all references to Doom's light tables. + +November 6, 2000 +- Moved the lighting calculation out of the main loop in R_MapTiltedPlane() + (and its assembly equivalent) into a separate function, since it can now + be linearly interpolated. This does away with the use of CMOVs in the + assembly code, so now I won't need to write a non-CMOV version of it. It's + also somewhat faster, especially in the non-assembly version. + +November 3, 2000 +- Tweaked the brown color range for console fonts to actually look brown. +- Generalized FFont::BuildTranslations() some so it's not so big. Did the + same for the FConsoleFont version. + +November 1, 2000 +- Got the tilted plane lighting working without the LUT in 320x200. Also + removed the divide from the nontilted version. + +October 31, 2000 +- Got the plane light calculation without using zlight to match the light + when using zlight (aside from the finer gradiation). Woohoo! Now to get + rid of the divide... +- Fixed creation of large (>64k) blockmaps. Also replaced the Boom version + of P_CreateBlockMap() with the MBF version. + +October 17, 2000 +- Tried to remove the use of the zlight lookup for plane mapping, but I'm + having a hard time actually duplicating its results. (Nevermind that I + should be able to derive the properly formula without difficulty...) +- Noticed distant sprites were way too jumpy. At first, I thought it was + because I was only using 8 bits of precision, so I temporarily upped it + back to 16 bits, and the problem persisted. It was caused by calculating + 1/z in R_ProjectSprite() (as a fixed 16.16) and multiplying by that. + Dividing by z instead fixed the problem. + +October 16, 2000 +- I think I have all the sector movers set to properly handle tilty areas. +- Set P_SpawnDoorCloseIn30() and P_SpawnDoorRaiseIn5Mins() to set the + thinker's m_BotDist. +- Upped the fractional bits of precision for view space coordinates to 12. + This drops the upper FOV limit to ~172.8. + +October 10, 2000 +- Fixed pillar floors using the ceiling plane for calculations. +- Changed P_Thing_Spawn() and P_Thing_Projectile() to only set MF_DROPPED + for special things, so spawned monsters can be crushed to gibs. +- Added carrymomx, carrymomy, and carrycount members to AActor. DScroller + now effects these rather than momx and momy. Slow scrollers work now, + and there's no possibility of drift caused by friction. +- Changed earthquake behavior to match Hexen's. + +October 9, 2000 +- Added Unreal teleport zoom effect controlled by the telezoom cvar. +- Reduced the renderer's precision along the (x,y) plane in view space to + 8 bits of fractional precision in order to accomodate large FOVs. + +October 7, 2000 +- Fixed lighting to not vary with different FOVs. +- Changed the initialization of finetangent to not phase shift the table, + as I did previously for finesine. + +October 6, 2000 +- Added support for panning, scaling, and rotating of tilted flats. + +October 5, 2000 +- Added FloorLight and CeilingLight members to sector_t. Changed + Transfer_FloorLight and Transfer_CeilingLight to use a thinker to copy + light levels over to these fields. +- Fixed serialization of sectors: The ceiling's xoffs was stored twice + instead of storing both xoffs and yoffs. + +October 4, 2000 +- Added back the "too far off side?" check to R_ProjectSprite(), since + sprites are now projected into a view space with a constant 90 degree FOV. + Also added a test for sprites above/below the screen. This test is + different from Lee Killough's test in Boom, which I never managed to get + working right with freelook (not that I tried very hard, either...). + +October 2, 2000 +- Added an optimization to R_AddLine(): 2-sided lines that cannot be seen + past because their openings are off-screen will be marked as solid. +- Changed the pointers in drawseg_t to ptrdiff_t so the "fun" stuff in + R_StoreWallRange for expanding the openings array and adjusting + pointers is unnecessary. +- Did the changes I talked about on September 23, except the calculations + are still associated with R_StoreWallRange() so they don't need to be + performed if the wall is entirely clipped (but they only get done once + per wall, no matter how many ranges it gets clipped to). + +September 27, 2000 +- Moved wall texture calculation (i.e. prepwall) back to floats, just to be + safe as far as integer overflow goes. + +September 26, 2000 +- All right, I've caved in. I'm now using some Build code. Build already does + everything necessary for good quality rendering, and it seems a shame to + needlessly duplicate all of Ken's work. + +September 23, 2000 +- After trying to get slopes to look nicer, I have come to the following sad + conclusion. Clipping walls into pieces and then doing all the drawing + calculations in R_StoreWallRange() is not the way to go when you have + slopes, since all fractional precision is lost at the edges of the + drawsegs, making an accurate calculation of (x,y) for slope calculations + impossible. So my plan for now is: Move most of the functionality of + R_StoreWallRange() into R_AddLine(), and leave R_StoreWallRange() around as + a function that just creates drawsegs and calls the texture mapping + routines. +- Made solidsegs a fixed-size array that is big enough. (It was not actually + growing before, so it might as well have been fixed!) + +September 21, 2000 +- Fixed C_WriteCVars() so that it doesn't delete the strings it gets + using GetGenericRep(). +- Reduced the FOV range to [5,175] to combat integer overflow with extreme + values. +- Removed excess precision from texturecolumn calculations in BlastColumn, + since it was overflowing occasionally. + +September 20, 2000 +- Removed the offset field from r_segs, as it is no longer necessary. (Walls + are now mapped based on their linedefs, not their individual segs.) +- Bumped the wall mapper down to only 4 bits of fractional precision. The + results look just as good as floats, and don't overflow so easily--a wall + 15296 units long didn't overflow. (I didn't check any longer, since walls + that long are highly unlikely to occur in any Doom map, because the + original Doom engine would render them with horrible jitter.) + + In the process, I decided to go the Build route and give walls a texture + width (the number of texels that fit across the wall). When arbitrarily + moveable walls are implemented, I think it will be more useful to maintain + a constant spread of texels across a wall than to maintain a constant + texel width. Without moveable walls, this approach just makes diagonal + walls align nicer. + +September 19, 2000 +- Swapped the meanings of the m and n vectors for the wall texture mapper + and got the correct vectors to use. Unfortunately, under most + circumstances, they generate values too big for 16.16 fixed point. + +September 18, 2000 +- Changed R_RenderBSPNode() to check against the bbox for front nodes as + well as back. Must remember to be on the lookout for drawing errors this + might cause, since the old R_CheckBBox() was too inaccurate for this. +- Tried to change wall texture mapping to use the same "magic" vectors that + I use for tilted planes, but I don't trust the vectors I derived: The + u/z vector depended on (x,y), but v/z depended only on x, just the opposite + of what it should be. +- About the adjacent wall problem, that was caused by a subsector with a + single seg viewed almost head-on. Changing R_CheckBBox() to use the same + transforms as R_AddLine() fixed the problem. +- Fixed some bad cases for my clipping code in R_AddLine(). Although I had + already used it in my prototype engine with several Build maps, I found + problems in Doom2 MAP02 that needed fixing. + +September 16, 2000 +- Changed wall projection in r_bsp.cpp to use more standard 1/z perspective + projections instead of polar coordinates and got the desired result: no + more excessively jiggly walls. Now I need to do it with the wall texture + mapper, so that wall textures don't jiggle either. One minor problem: + Adjacent walls can sometimes be one pixel apart. (Why?) + +September 13, 2000 +- Added the 181 special to slope floors/ceilings at two-sided walls. +- Fixed sporadic rendering problems with masked mid textures caused by + not ensuring sprflipvert was false. +- Added "world" as a valid ambient sound type, for consistancy with the + other types. Ambient sounds without a type specified still default to + world. +- Change P_AimLineAttack() to return a pitch instead of slope. It also + returns the actor's pitch instead of 0, if nothing to aim at was found. + Also changed it to be responsible for limiting the player's autoaim, + since this is a more logical place than in the routines that call it. + This simplified P_SpawnPlayerMissile() and P_BulletSlope(). + +September 12, 2000 +- Created a generic Trace() function. + +September 11, 2000 +- Finished the assembly plane drawer. Or, rather, the Pentium Pro and higher + version, since it uses CMOV instructions. +- Things to do: + Create a Pentium version of the plane drawer. + Create a trace function that knows about planes and replace all the + redundant code in the different traversal iterators. + Fix the bots so they understand planes. + Fix movement code so that planes are treated as planes and not as a + bunch of discrete steps. + +September 9, 2000 +- Started work on the assembly plane drawer. It's your standard subdividing + affine mapper using the overlapped FDIV trick, but with Doom-style lighting. + It's about four times faster than the previous C version, and at high enough + resolutions, it's even faster than the wall drawer. But it's not complete: + It doesn't draw incomplete subspans at the end of a span. + +September 6, 2000 +- Made some optimizations to the plane renderer. It now runs nearly 13 times + faster than before (in the debug build). Adding some inline assembly to + R_MapTiltedPlane() to convert floats to ints (instead of using (int) to + cast it) sped it up to 20% of its original time. Most of the rest was + achieved through the standard technique of splitting it up into spans and + using affine mapping for those spans. Interestingly, in the debug build, + the span-based approach is only about half the speed of the "perfect" + implementation and no faster. ("Perfect" is in quotes because there is + some error built up by using deltas between pixels instead of calculating + 1/z, u/z, and v/z anew each pixel, so it's not really perfect, but it is + very close.) Hopefully converting this to assembly will give another good + speed up. + +September 5, 2000 +- Finished preliminary renderer for planes. They draw properly, but very + slowly. (With one divide, seven multiplies, and three compiler-generated + calls to ftol per pixel, that's to be expected.) + +September 4, 2000 +- Continued work on planes. + +September 2, 2000 +- Moved R_DoorClosed() into R_AddLine() so it can use the already-calculated + ceiling/floor heights without making them global variables. + +September 1, 2000 +- Continued work on planes. + -Removed tsilheight and bsilheight from drawseg_t, since they're not + particularly useful when the floor or ceiling isn't at a constant height. + +August 30, 2000 +- Continued work on planes. + +August 29, 2000 +- Started work on adding real floor/ceiling planes. (And I do mean planes, + not just slopes.) + +August 28, 2000 +- Removed the "too far off the side?" check from R_ProjectSprite(). The fix + for wide FOVs made sprites disappear when they weren't very far away. +- Started work on extended skins by writing the spec notes in skins.cpp. + +August 24, 2000 +- Fixed memory corruption when trying to add more coop bots than there are + enough single player starts for: DoAddBot needs to check for the start, + not PlayerThink. Otherwise, when DoAddBot calls G_DoReborn, it thinks + the player is -1, because it gets the player number from the player start + for the index passed instead of using the index itself. +- Tried to prevent drawing areas behind mirrors through a mirror. If no + segs cross the line defined by the mirror, no walls will be drawn + through the mirror. However, things can still show up through the mirror. + Another issue is that gaps can be seen through the junction of two + adjoining mirrors. I can live with this; A mirror with restrictions is still + better than no mirror at all, right? +- Added proper view positioning for mirrors at any angle. + +August 23, 2000 +- Made mirrors actually flip the view. I still need to handle mirroring + around arbitrary mirrors instead of just horizontal/vertical ones. + +August 21, 2000 +- Started working on mirrors by adding semi-portals. +- Simplified P_InitAnimDefs() by getting rid of the explicit state machine + and using a separate function to parse flat and texture animations. +- Fixed sprite clipping for high FOVs. +- Changed R_DrawPlanes() to calculate texture coordinates relative to the + middle of the screen instead of the left edge of the screen. Thanks to + this change, I was able to remove the distscale variable, as it is no + longer needed. Flats now line up with walls as perfectly as they're going + to get, given the jiggly nature of wall rendering. + +August 19, 2000 +- Added support for animating switches and extended the ANIMDEFS lump to + support defining them. Converted the ANIMATED lump in zdoom.wad to an + ANIMDEFS lump, and changed the code to support multiple ANIMDEFS lumps. + +August 15, 2000 +- Added more consistant sorting for sprites in the same (x,y) location: In + the event of a tie, the sprites' tops are used for sorting. If that is + insufficient, the sort order is undefined, as before. +- Removed all references to CALC_TABLES. The game will always generate the + tables on startup now. +- Changed finecosine to a class with a single inline operator[] member. + Now cosine lookups are just as fast as sine lookups, because it's not + necessary to dereference a pointer. +- Changed ylookup, columnofs, r_dsclipbot, r_dscliptop, floorclip, + walltop, wallbottom, negonearray, screenheightarray, xtoviewangle, + ceilingclip, yslope, and spanend back into fixed-size arrays. Their + maximum possible values aren't *that* big, and the compiler can generate + more efficient code when it always knows where the array will be. +- Another optimization: The renderer no longer draws underneath the console. +- Thanks to the span renderer's improved accuracy, I have been able to do + some optimizations to bring R_MapPlane() down to five multiplies per span. + This is better than the previous eight and also better than the original + Doom's worst case of six multiplies per span. Doom also used a cache that + could give it a best case of just three multiplies per span, but I'm not + sure doing so is really worthwhile. + + As an added bonus, visplanes with the same orientation will line up with + each other no matter where they are on screen. Now I just need to fix the + wall jittering... (That may be too much to ask from the Doom engine.) + + As part of the optimizations, I: + - Removed the distscale array and replaced it with a single value. + - Renamed spanstart to spanend to reflect the fact that it now holds the + right edges of spans instead of their left edges. Also changed it to an + array of shorts. + - Made R_DrawPlanes() responsible for maintaining the texture coordinates. + Now all R_MapPlane() has to do is scale and pan them. + - Removed most of my comments from R_DrawPlanes(), since the texture + coordinates are no longer calculated in a single location. + +August 14, 2000 +- Added code in w_wad.cpp to limit the number of open wads to some preset + amount instead of keeping all the wads open at a time, in case the user + has more wads s/he wants to use than there are file handles available. +- Figured out the crash from the other day: Decals were only being cached + if their sizes were unknown; they were not recached if they had been + flushed. + +August 12, 2000 +- Added bullet holes. It crashed once in testing when I was foolishly + running fullscreen, so now I am trying to replicate the problem. The + error occured in WallSpriteColumn() where it called drawfunc() and was + an access violation. +- Implemented RF_FULLBRIGHT for wall sprites. +- Moved most virtual function bodies that were in header files out of the + headers so that the compiler wouldn't generate code for them for every + derived class that didn't supply their own versions. +- Added FDecalLib and supporting classes. + +August 10, 2000 +- Removed the MF3_CARRIED flag and replaced it with the carrysec member. The + intent of MF3_CARRIED was to prevent neighboring sectors from having an + accelerative effect on actors (an undesirable effect in at least one of + Heretic's maps), but it also prevented multiple carriers in a single sector + from having a cumulative effect on the player. +- Optimized R_DrawSprite() to initialize the sprite clipping arrays to their + largest possible range instead of initializing them to a special "not + clipped" value. This saves the time needed to set "not clipped" columns + to valid values later. It also saves the trouble of making any passes for + clipping sprites in fake floor/ceiling sectors. Also redid the clipping + loops so that VC++ produces more optimal code for them. +- Fixed R_InitTables() to produce an accurate sine table instead of a sine + table that was slightly off. Also implemented the optimization suggestion + that was in the code. +- Moved the << 10 scaling out of R_MapPlane() and into the calculation of + xscale and yscale in R_DrawPlanes() with the intent to speed up plane + mapping slightly. As a bonus, adjacent visplanes with the same texture + now match up far better than before, so it was worth it even if it didn't + give a huge speedup. + +August 8, 2000 +- Changed FHelperThread() to use MsgWaitForMultipleObjects() instead of + MsgWaitForMultipleObjectsEx(), because the latter is not available under + Windows 95. I also had to change FCDThread to not use QueueUserAPC() to + handle play finished notifications, since MsgWaitForMultipleObjects() is + not an alertable function. Fortunately, the reason I used an APC in the + first place no longer applies, because the CD_WndProc will always be + called from the helper thread's context, since the window is now being + created in the thread's context. (See my July 14 log; I don't know why + it even worked under 98.) +- Fixed FHelperThread() to call Init() from within the context of the newly- + created thread, as it should. +- Eliminated BestColor() from the game and replaced its use with + ColorMatcher. Then I found a bug in R_BuildPlayerTranslation(): RGB values + were not clipped to the range [0,255]. + +August 7, 2000 +- Wrote the FColorMatcher class to do color matching much quicker than + BestColor() with nearly the same quality. + +August 5, 2000 +- Changed the command parser in c_dispatch.cpp to something simpler, but + which also allows for using \" inside quoted strings. + +August 2, 2000 +- Implemented RF_ALPHASHADED for wall sprites. + +August 1, 2000 +- Implemented RF_REL* flags. They use the texture pegging flags of the linedef + to keep them in line with the underlying textures if the sector height + changes. + +July 29, 2000 +- Implemented RF_CLIPUPPER and RF_CLIPLOWER. RF_CLIPFULL also works for + one-sided lines, since that was the first case I did when I added the + bound wall sprites. +- Added vertical flipping for wall sprites. + +July 28, 2000 +- Made fullbright a separate field in FState instead of merging it with + the frame index. + +July 27, 2000 +- Added these fields to AActor: renderflags, picnum, and alphacolor, although + they still need to actually be implemented. Also changed the sizes of the + sprite and frame fields. +- Started work on wall sprites bound to walls (i.e. decals). Right now, it + can clip the sprite to one-sided walls. +- Fixed hotkeys not selecting appropriate item(s) in the menus. + +July 22, 2000 +- Fixed console drawing extra lines above the top of the screen. +- Added IWADPaths section to the config file to indicate a default set of + directories to search for IWADs. +- Added screenshot_quiet cvar to prevent the screenshot command from + displaying any messages when a screenshot is captured. +- Added wait and unset console commands. +- Changed C_DoKey() to execute a copy of the command bound to a key instead + of the original, because the key might rebind itself and mess up the + parser if the original command is executed. + +July 21, 2000 +- Changed FindSprite() in d_dehacked.cpp to use DWORDs for comparisons. +- Added Thing_Move and ThrustThingZ specials from Skull Tag. Also added + Skull Tag's newtid parameter to Thing_Spawn(NoFog). +- Changed blocked pillars to stay in one place until not blocked, because + they had stopped doing that, probably because of something I did for + stacked things on moving sectors. + +July 20, 2000 +- Removed the use of memmoves in R_ClipWallSegment(). VC++ generates more + optimal code using for loops, because memmove generated a function call. +- Fixed R_DrawVisSprite() not always drawing the full width of a sprite when + using r_columnmethod 1. +- Added x and y thing scaling factors. Range is 0-255, and 63 is the default. + Actual scale is (scale+1)/64. +- Changed R_DrawSprite() to clip sprites against drawsegs based on depth + and not vertical scale. Also added an extra parameter to + R_ScaleFromGlobalAngle() that receives the depth of the passed angle. +- Fixed Heretic's bloody skull transitioning to one of the player's states. +- Removed MF3_SKINNED flag and added a skin field for every actor. +- Made -host 1 not start a multiplayer game without starting the network, + because I currently have no TCP/IP stack installed on my computer. +- Fixed players being able to gib infinitely under a crusher. +- Changed crushing ceilings to behave more like Doom again: Things that were + on the floor stay on the floor, and things above the floor get pushed into + it. +- Fixed "jiggly" sprites where each columns' textures were not aligned + properly. Also fixed a bug in rt_map4cols_asm1() and rt_map4cols_asm2() + that was less obvious with the jiggly sprites: The right 2 pixels of + odd-length runs were swapped. +- Fixed bug in R_DrawColumnHorizP_C(): Mapped one pixel too many. +- Condensed R_ClipSolidWallSegment() and R_ClipPassWallSegment() into + R_ClipWallSegment(), since they were nearly identical. + +July 19, 2000 +- Fixed WritePCXfile(). I was writing two extra header bytes. +- Added assembly versions of the scaling masked block drawers and made them + support clipping the block to the screen. + +July 17, 2000 +- Added assembly versions of the non-scaling masked block drawers and made + them support clipping the block to the screen. + +July 15, 2000 +- Slightly optimized parallax sky drawing. +- Changed the controls menu to only grab the mouse when it's waiting for a + key to bind to an action. +- Changed the DirectInput keyboard reader in i_input.cpp to read the entire + keyboard state and generate events based on the differences between that + state and the previous one. Reading key transitions with GetDeviceData() + was more efficient (I assume), but it was too easy for NT to miss + transitions if CPU time got tight. +- Added an absolute parameter to I_SetGUICapture to force the setting of + GUI capturing to a specific setting instead of adjusting a counter. This + is necessary for proper recovery when catching a recoverable error, and + GUI capturing was already enabled. +- Finished CD code (at least I hope I did). Under NT, it can even loop a + track without bringing the game to a halt. (Yay!) Unfortunately, that + seems unavoidable under 9x. Oh well. + +July 14, 2000 +- Under NT, APC calls do not seem to work when there is an outstanding MCI + notification. Now FHelperThread uses an event to signal the thread to quit. +- Here's a mean difference between NT and 98 (as far as I can tell): Under + 98, each thread has its own message queue. Under NT, each thread shares + a single queue for the entire process. Now I use an APC call to restart + playback, because I don't know what context the WndProc is runnning in. + (I could check the OS version and work accordingly, but then I'd have two + methods to do the same thing, and I have no guarantee Microsoft won't + change things in a future version of Windows.) +- Changed autoexec handling so now you can run any number console scripts + automatically. +- Added a new config file format that can store information for multiple + games (i.e. Doom, Heretic, and Hexen) and keep the appropriate settings + separate. This is your basic ini-style file, rather than a list of + console commands. + +July 11, 2000 +- Removed an I_PauseMouse() call from Win32Video::SetMode() that was + preventing the game from grabbing the mouse in windowed mode at startup. + (Why was that in there?) +- Implemented localized ACS strings in the game. It's even smart enough to + detect when the user changes the regional settings! + +July 8, 2000 +- Created enhanced ACS format (ACSE) and used it to add string localization + support to the language. +- Added InterpolationSpecial (#9075) whose special is activated whenever + a PathFollower reaches an InterpolationPoint with the same special. +- Fixed stack overflows when all the patrol points in a path are so close + together that a monster can touch them all at once, by setting + MF_JUSTATTACKED when the monster reaches one point to force it to move + when SetState() is called instead of cycling to the next point. +- Renamed AWayPoint to APatrolPaint. + +July 5, 2000 +- Moved the StatusBar->Tick() call inside P_Ticker() so that the status bar + doesn't tick when the game is paused. +- Reworked the string-building p-codes in p_acs.cpp so that the string gets + built as each p-code is encountered instead of waiting until the end p-code. + This is safe because a properly-generated script will never enter a wait + state between the begin and end p-codes (which I initially thought it + might). +- Changed the meaning of some HUD message X coordinates: + [ 0.0, 1.0]: Position between left and right edge valid box locations + [-1.0, 0.0): Position between left and right edge of screen + ( 1.0, 2.0]: Same as [0.0,1.0], but center each line inside box + [-2.0, 1.0): Same as [-1.0,0.0), but center each line inside box +- Added FHUDMessageTypeOnFadeOut class. +- Added an id for use with Attach/DetachMessage(). The status bar can now + keep track of HUD messages for you and automatically deletes an old version + of a message when a newer one is attached. An id of 0 means not to track + the message. +- Added the hudmessage ACS command. +- Tried improving the accuracy of span drawing by increasing precision (i.e. + a>>6 is better than (a>>16)<<10), but it didn't seem to do any good. Still, + as a remnant of that there is now a function FixedMulDiv(a,b,c) that + calculates the fixed point result of a*b/c. Even if it's not much more + precise than FixedDiv(FixedMul(a,b),c), it's at least marginally faster, + since it does no shifts. +- Changed APathFollower::Activate() to reposition itself to the first node so + that it doesn't briefly appear at its old location when activated. +- Changed AInterpolationPoint::PostBeginPlay() to FormChain(). Now it's called + whenever something that uses the path wants to get on the path. Thus, we can + be sure that the path is actually completed when the thing wants to get on + it (at level start), which it wouldn't be if the thing was placed on the map + before all the points of the path. +- Simplified AInterpolationPoint::ScanForLoop(). + +July 4, 2000 +- Added sector actions for players landing on floor, hitting ceiling, entering + a sector, leaving a sector, hitting use inside a sector, or hitting use on + a sector's wall. The way this is exposed to level designers is the same as + Skull Tag's 9999 thing (action taken whenever the player is on the floor), + but is more flexible because it supports multiple activation types and you + can have multiple actions in a single sector. + +July 3, 2000 +- Added an effect for respawn protection. +- Added dmflags2 cvar, and consolidated weapondrop and nobfgaim into it. Also + implemented Skull Tag's respawn protection and barrel respawning into it. +- Added the FFlagCVar class. This just maps onto a FIntCVar (i.e. dmflags) + and allows a more meaningful way for the user to manipulate it than by + changing bit values directly. + +June 27, 2000 +- Removed the restriction in ChangeCamera that it can only change the + player's view to SecurityCameras. Now the proper way to activate a + moving camera is to use both ChangeCamera and Thing_Activate. ChangeCamera + sets the player's view to the camera, and Thing_Activate gets it moving. +- Changed the automap so that changes to the am_*color cvars take effect + immediately instead of the next time the automap is toggled. + +June 26, 2000 +- Got rid of cvar_t and switched to a subclassable FBaseCVar class. Now the + game actively recognizes different cvar types. + +June 14, 2000 +- The -iwad parameter can now specify a directory, as in BOOM. +- Changed -warp parameter so that using -warp x with ExMx games will use + episode 1, map x instead of episode x, map unknown. +- Added a dialog box to select the IWAD to use if the game finds more than + one. +- Switched the compression library from mini-LZO to zlib. Zlib gives better + compression, but still seems pretty fast (hard to judge on a P2-350 :-). + More importantly, zlib is not GPL (it has a BSD-style license) and I can't + have something so relatively minor as a compression library trying to attach + its license terms to the included Heretic and Hexen source, which are not + GPL. + +June 10, 2000 +- Modified FindLevelByNum() to check that a map exists before returning a + level with that number, because I have Doom 1 and 2 using the same levelnums + for different maps. + +June 7, 2000 +- Added MF3_SKINNED flag to prevent sprite changing when calling SetState(). +- Added fallingdamage and nofallingdamage MAPINFO flags. +- Added support for RIFF CDDA files. +- Added support for CD tracks as music. The cdtrack and cdid MAPINFO keys can + be used to select it for a specific map. + +June 6, 2000 +- Added the CVAR_NOINITCALL flag to allow for cvars with callbacks that + aren't called automatically during initialization. + +June 5, 2000 +- Moved all the CD-related MCI calls into a separate thread in an attempt to + avoid pauses when looping a CD track. A ring buffer is used to send + commands from the main thread to the helper thread. Unfortunately, the game + still stalls on MCI_PLAY commands. Apparently, every thread in the process + calling mciSendCommand() is halted until the play has begun. :-( Even + though the separate thread turned out to be useless, I'm keeping this + architecture, because if there is someway to avoid the pause, it probably + won't be by using the game thread for CD control. + +June 3, 2000 +- Started work on CD support after (finally) finding information about using + different CD drives hidden in the Microsoft Knowledgebase. +- Added Win32 clipboard support (copy & paste) to the console and chat mode. + +May 29, 2000 +- Implemented some spiffy interpolated path stuff: APathFollower, + AMovingCamera, and AActorMover. +- SetPlayerProperty should work in open scripts now. Needed to make sure it + was non-NULL. + +May 24, 2000 +- Did a release build under Win98, and it took ~4.25 minutes to link--about + twice as long as NT. Ack! +- Fixed improperly freeing a MUSSong after playing a MIDI. I guess + redefined virtual member functions for subclasses don't work in a + superclass's destructor. (Which makes sense, since the subclass's stuff + is already gone by the time any classes it's derived from destruct.) So + I replaced MIDISong::IsMUS() with a variable MUSSong::m_IsMUS. + +May 2, 2000 +- Seem to have fixed 3D sound crashes; listener position and velocity were + being calculated using FLOAT2FIXED instead of FIXED2FLOAT, so they were + very big and apparently overflowed the drivers. Unfortunately, the sounds + are really noisy. + +April 28, 2000 +- Revised the event system by creating a generic EV_GUI_Event type in + anticipation of creating at least a minimal windowing system. The console + now uses this system for input, which will hopefully resolve certain + console key down misses under NT. (Running 98 right now, so can't check.) + +April 27, 2000 +- Tried to add 3D sound support. Gave up after several nasty crashes that + left me with no clue what I was doing wrong. + +April 13, 2000 +- Fixed P_DamageMobj not pushing things if the source was a player. + +April 11, 2000 +- Increased map and world variable counts to the amounts Ty Halderman raised + them to in acc. +- Implemented clearinventory, checkinventory, giveinventory, and takeinventory + ACS functions. Still need to test them. +- Added support for playing a specific order of a MOD and changing the song + from ACS. + +April 10, 2000 +- Skins with sounds that precede the S_SKIN identifier now work. A side-effect + of this is that skin wads can no longer replace non-skin resources. (This is + intentional.) +- Added the sc_carry_players type to DScroller, which only carries players + (hence the name), to match Heretic and Hexen. +- Added an MF3_CARRIED flag to keep track of which actors have been pushed + by a DScroller, so that adjacent small sectors with the same scrolliness + do not have cumulative effects on a thing. +- Changed I_StartSound to let FMOD pick a free channel at the suggestion + someone e-mailed to me. It still seems to work for me, and hopefully it + will work for everyone else now, too. + +April 4, 2000 +- Why did I decide to use the MFC names for the macros RUNTIME_TYPE and + RUNTIME_CLASS? It's confusing. _TYPE: Return the TypeInfo for an existing + instance of an object. _CLASS: Return the TypeInfo for a class. +- Fixed running with -nosfx crashing the game when trying to play a MOD/MP3. + +April 3, 2000 +- Change P_Move() again so that monsters stepping down steps move down + immediately instead of falling under gravity because it looks better. +- Changed FMOD initialization sequence to be more tolerant of failure. +- Added checks for self->target to the A_FatAttack? routines. + +March 29, 2000 +- Fixed dehacked patches changing "BFG Cells/Shot". +- Fixed PickPrevWeapon to properly wrap from low to slot 0 to 9. + +March 28, 2000 +- Added the ACS internal functions spawn and spawnspot. Also added support + internal functions with optional parameters to acc. +- Fixed console not maintaining correct text color when splitting lines. + +March 27, 2000 +- Fixed ACS sound commands only supporting volumes 0 and 127 (was not + converting to float when dividing). +- Changed the status bar number drawers to round down to the closest "good" + number if the space allocated for the number's display is too small. +- Changed friendly fire so that it is a scaler like UT, and not a simple + on-off dmflag. Of course, this means it's a cvar now. +- Changed teamplay so you can still hurt yourself even if you can't hurt your + teammates. You can also telefrag teammates now in those instances where you + happen to respawn where a teammate is standing. +- Added MF3_NOTARGET flag so that Heretic bosses can be ignored if they happen + to hurt something, but Doom bosses are not. +- Added a playerinfo command to peek at the userinfo for any player in + the game. +- Fixed D_ReadUserInfoStrings() ignoring the last value in a compacted + userinfo list, causing neverswitchonpickup to not be replicated during + netgame startup. + +March 25, 2000 +- Skins with no frames get removed from the list. +- Duplicate skins get renamed to avoid conflicts. + +March 24, 2000 +- Fixed crash when running with +set developer 1. +- Fixed savegame slots drawn too high in the Doom menus. (I unwittingly + raised them at some point.) +- Turend off auto-monster respawning on skill 4 when not playing Doom. +- Fixed locked, repeatable, local doors being translated with their tags + intact (should be 0). +- Disabled highlighting of teleport lines if their activation type is + monster cross. +- Added support for Doom maps that use teleport dests in sectors with 0 tags. +- Fixed Heretic stair speeds (was 1/4 too slow, because they were going at + Doom speed). +- Fixed cursor drawn in wrong column on video modes menu. (184 is not the + same as 104.) + +March 13, 2000 +- Linking the release build now takes 2:35. :-( +- Added some more debug output to i_sound.cpp. +- Added a hack to PIT_RadiusAttack() to make the Romero head easier to hit. +- Fixed rippers doing no damage because P_CreateSecNodList() altered tmthing. +- Fixed the holdatkstate used by the powered-up phoenix rod. +- Fixed "bouncing" problems when standing still on the waggly muck in + Hexen map08. +- Discovered only players were having their z velocity reset to 0 when they + hit the floor. Fixed. Now I don't need the MF_CRASHED flag I added earlier. +- Made demon scroller more efficient. +- Fixed bunny scroller showing end screen for first 230 tics. +- Changed quit message for non-Doom games. + +March 8, 2000 +- Fixed New Game menu not displaying properly with Ultimate Doom. +- Made FImageCollection::Uninit() more complete to avoid potential problems + when turning off the crosshair. + +March 6, 2000 +- Stepping out of a floorclipping sector now adjusts the player's viewheight. +- Added the Hexen decorations. + +March 5, 2000 +- Tweaked P_CheckPosition() some more. +- Changed DThinker::DestroyAllThinkers() to call EndFrame() after each + thinker gets destroyed. + +March 2, 2000 +- Fixed console not showing top line of its buffer. +- Made some DeHackEd compatibility fixes. +- Fixed stealth Hell Knight having same doomednum as stealth Baron. +- Changed sound code to not override sounds with the same priority. Fixes + continuous ambient sounds fighting for the same channel in low channel + environments. (e.g. only one sfx channel) +- Fixed the monster morphers to transfer tids and specials to the morphed + monsters. +- Fixed ambient sounds replaying too soon (i.e. one tic after they start). +- Changed DoLoad in i_sound.cpp to use FSOUND_Sample_Upload instead of + FSOUND_Sample_Lock. Hopefully will fix sound problems on some cards. +- Fixed PatchAmmo() not checking to make sure a weapon is present before + checking its ammo member. + +March 1, 2000 +- Added dummy entries for the splash sounds to the Doom section of zdoom.wad's + SNDINFO to avoid warnings when starting Doom. +- Set BaronOfHell to proper mass. +- Modified DObject::DestroyScan (both versions) to scan each sector's + soundtarget field if a destroyed object is a PlayerPawn and clear + matching fields. +- Made jumping velocity a PlayerPawn property +- Set MF3_DONTSPLASH for chicken feathers. +- Fixed Heretic secret level exits. +- Fixed imps/lost souls slamming into things and crashing because they + ended up calling P_CheckPosition recursively. +- Fixed crashing when trying to scroll past the top of options menus that + fit entirely on the screen. +- Added Hexen cheats. (Note that not all Heretic and Hexen cheats are + implemented, because I didn't feel it was worth reimplementing their + behavior--such as Heretic's gimme or Hexen's version of the same). + +February 29, 2000 +- Redid cheat parser and added Heretic cheats. +- Added heretic.wad, heretic1.wad, and hexen.wad to the list of iwads + searched for. +- Fixed to properly detect and use shareware heretic1.wad. +- Fixed morphed player making normal player pain sounds. +- Fixed P_MorphPlayer not setting camera and morphTics. +- Fixed activated monsters not triggering SPAC_MCROSS lines, because + AActor::Activate was clearing everything in flags2. (Used ! instead of ~). +- Fixed mapthings being spawned with wrong angles due to round-off error. +- FWeaponSlot::AddWeapon no longer adds a single weapon to a slot more than + once. Fixes nextweap not working with fast monsters. They were added once + at init time, and again when fast monsters were set. +- Added LeavingIntermission state for intermission to avoid trying to draw + after the graphics have been freed. +- Loaded BigFont for Doom game. + +February 27, 2000 +- Implemented infinite ammo option for Heretic weapons. +- Set particle fountain heights back to 0 (missed them during conversion). +- Added option to flip player view in player setup menu between front + and back. +- Fixed stepping onto a thing and getting stuck inside another thing + above you. +- Fixed crash when starting with -loadgame. +- Fixed moving into walls when on top of things (such as when killing + something next to a wall with gauntlets and being pulled forward on top + of the dead thing before it clears MF_SOLID). +- Fixed text aligned improperly at high resolutions on the intermission's + "now entering" screen. +- Fixed missiles climbing up steps before exploding (very noticeable with + mace balls.) +- Gave AMaceFX1 MF_DROPOFF. (It was missing it.) +- Fixed P_HitFloor to return true/false based on the floor's liquid status. +- Fixed Heretic weapons drawn too high at high resolutions with st_scale 0. +- Fixed mummies not attacking you. Forgot to uncomment some stuff I had + commented out for checking the collision detection. + +February 25, 2000 +- Did a release build and timed it as ~70 seconds spent linking. +- Disabled messagemode when confirmation messages are up. +- Switched to the console font to display key names in the controls menu, + because the Raven fonts don't have enough characters for all the keys. + +February 24, 2000 +- Gave the Heretic imp chunks masses of 5 so they make small splashes. +- Made the color for locked doors default to green. +- Added more items to the controls menu and made it scrollable. +- Doom, Heretic, and Hexen now use separate config files. + +February 23, 2000 +- Added support for a TERRAIN lump. + +February 22, 2000 +- Added translations for Heretic's skullrod rain, lifegem, and player cape. + +February 21, 2000 +- Tried making the chasecam use the player's viewheight to smoothly move + itself up when the player stepped up, but it looked odd to see the player + jump up while the camera moved smoothly, so I took it out. +- Wrote 4 different iterators for P_ChangeSector that should be able to + properly handle moving things standing on top of other things. Such + situations were completely ignored before. +- Removed limit on intercepts. + +February 20, 2000 +- Fixed setting skill from menu when fullscreen console is active. + +February 18, 2000 +- Fixed annoying screen "jiggling" when jumping up onto ledges. +- Fixed Plat_DownByValue handling. +- Fixed a lockup problem in situations where stairs are triggered and then + retriggered, but from the opposite end. + +February 15, 2000 +- Fixed the display of the player's name on spynext/prev. +- Added the FHUDMessage class and change C_MidPrint to use it. This class + can be used to display text at any location on-screen and is patterned + after Half-Life's text messages. Additional effects besides plain on and + off are accomplished by subclassing it. +- Reimplemented Doom's status bar. +- Fixed instances when bots were not respawning themselves. +- Fixed bodyque so that it is actually used again. +- Fixed an (obscure?) error when a thinker destroys the next thinker + scheduled for thinking while it thinks. The problem can be reproduced + with the following steps using a deathmatch map with only one start, one + player, and weapondrop on: 1. You spawn. 2. You spawn a bot without moving. + 3. The bot telefrags you. 4. You drop a clip, then the bot picks it up + when it moves and destroys it. 5. Because DThinker::RunThinkers() had cached + the next thinker, it doesn't know the clip was destroyed and tries to make + it think. The clip thinks, and relinks itself into the world, and causes a + whole bunch of problems. + +February 14, 2000 +- Tried separating the different game directories into static libraries to + see if that would reduce the link time. It didn't seem to have made + much of a difference, and some classes weren't being linked into the + executable, so I went back to linking everything together into a single + executable without any intermediate libraries. The different game + directories stayed, though, since I like the organization. + +February 13, 2000 +- Made the Heretic and Hexen scrollers accurately mimic their counterparts + from those games. +- Added more endgame types, including a customizable picture viewer. + +February 12, 2000 +- Also in the way of movement code, I fixed a problem that caused the + player's view to jump drastically when jumping onto another thing, + because I was using the player's z in two places where it should have + been the other thing's z. +- After much juggling, I believe I finally have the movement code fixed so + that floating monsters won't float themselves into other monsters. Testing + was done in Heretic E1M1 by summoning a bunch of mummies and wizards. + I also cleaned up P_FakeZMovement() so that it's much leaner. I was able + to find the following causes of the problem: 1. When monsters went up + steps, they didn't check to make sure there was nothing in the way above + them. 2. When P_CheckOnmobj() found a monster's move to be blocked, the + monster could still float down inside the head of its blocker, causing + the blocking monster to get stuck until it floated up again. + +February 9, 2000 +- Added fixeddiv, fixedmul, setgravity, and setaircontrol commands to acs. +- Added floorclipping from Hexen/Heretic. +- Moved the turn180 code over to P_PlayerThink. + +February 2, 2000 +- Got ZDoom to link against ELK and run. While trying to get a setup that + worked properly with the Scheme reset procedure, I accidentally got a + setup where Scheme code was calling the main loop every tic. The result + was that it had to garbage collect a lot. And then I realized that + Scheme is not the way to go for implementing a real-time game scripting + language. If the GC has to work a lot when we only call a single + procedure 35 times a second, think how horrible it would be if 100 + different procedures were called that often (for 100 different actors). + Ugh. I think I'll do something with ACS instead. + +February 1, 2000 +- Got ELK (Extension Language Kit) to compile into a usable library. The + idea was to use it as a simple way for the end user to create new action + functions for actors. + +January 1, 2000 +- Fixed P_FakeZMovement so it knows about underwater movement. +- Added a workaround for the imps continuosly performing their crashstate. + When P_ZMovement sets the crashstate, it also sets a MF_CRASHED flag, so + it knows not to do it again. I can't see why Heretic doesn't exhibit + the same problem. :-( + +December 30, 1999 +- Changed the changemap command to return harmlessly if called without an + instigator. +- Tried adding the Heretic Imp, and it worked, kind of; the imps continuosly + spew chunks of flesh when they hit the ground after death. + +December 29, 1999 +- Changed mobjinfo handling so they get set by a class' SetDefaults() method. + This means that every actor needs to have its own class, but they get more + control over their defaults depending on the game mode, and it also + condenses code some, because they only need to list the values different + from the actor defaults. + +December 17, 1999 +- Added the dumpmapthings command. +- Removed the testgibs cvar. +- Added angle and speed parameters to security cameras, so now they can turn + like Duke's. Also add pitch parameter. +- Made ambient sounds recognize activate and deactivate. +- In DCajunMaster::FakeFire(), the maximum distance a bot will trace is now + SAFE_SELF_MISDIST. Since they will fire if the trace would have hit + something past this, there's no sense in wasting time going further if the + trace hasn't hit anything by the time it gets that far away. + +December 16, 1999 +- Set the default for fullscreen under Win32 back to 1. Not sure why I had + it at 0. +- Made mobjinfos dynamic so they don't need to be in one monolithic info.cpp. + Now they can be in the file with their related code, and subclassing AActor + is useful. + +December 12, 1999 +- Changed DPolyAction::m_Dist to be signed. I'm not sure why I changed it + to unsigned, because there are lots of places where it gets checked if + it's less than zero. +- Added sorting of the cvars that get sent during netgame arbitration. In + the old system, they were sent out in whatever order they were registered, + which was compiler-dependant. This worked fine when playing against a copy + built with the same compiler, but broke when trying to play a version + built with a different compiler. Thus, Windows, Linux, and OSF/1 versions + could not play each other. + +December 11, 1999 +- Made some changes to get the code to compile and run without + unaligned accesses on Alpha processors. ZDoom will now compile and run + under OSF/1. It appears to play ordinary Doom levels properly. Levels + with Hexen features will crash it, and savegames seem to have problems, + too. (Some of which, I think, is attributable to using LZO for + compression. It apparently isn't 64-bit friendly.) + +November 30, 1999 +- Made the Scroll_Texture_Both and TranslucentLine specials dynamic. + That is, they can be used from inside the game after the level is + loaded. + +November 26, 1999 +- Added the hud_scale cvar to control scaling of the fullscreen hud. +- Removed targettic from AActor, because it's no longer meaningful (and + hasn't been for quite a while). Replaced it with dummies in the + AActor serializer so that savegame compatibility can be retained. +- Fixed a next thinker determination problem in DThinker::RunThinkers(). + A thinker can destroy itself during its RunThink(), so the next thinker + to run needs to be determined before we run the current thinker, not + after. +- Added calls to I_FinishUpdateNoBlit() and I_BeginUpdate() at + strategic locations in R_RenderPlayerView(). + +November 25, 1999 +- Removed the outer layer of compression from savegames. Since all + the snapshots in the savegame are already compressed, compressing + them again will do little good. +- Fixed archiving of defered ACS scripts. There were actually two + problems here. One, if there were any, it would get stuck in an + infinite loop. Two, they were being saved in a format different + from what they were being loaded as. +- Fixed the operation of FLZOMemFile's serializer so that it restores + to the state it was archived in (e.g. an imploded file stored in + m_ImplodedBuffer, as opposed to an uncompressed file stored in + m_BUffer). + +November 24, 1999 +- Fixed BOOM generalized locked doors so that the open/close type will + actually close. + +November 23, 1999 +- Machines that use -join will now select their port automatically. +- Here's another problem the bots helped me catch: DThinker:: + DestroyAllThinkers() was still deleting each thinker. The correct + approach now is to call Destroy() on each thinker, and then call + DObject::EndFrame() to perform the actual deletion. +- Those bots are great for stress testing. Thanks to them, I was able to + find and correct a problem with my Destroy() implementation: DThinker + also needs to implement Destroy() to get the object out of the thinker + list. Otherwise, you can do things like destroy an actor, then have + the thinking code move it before it gets removed from the thinker list, + which leaves the block and/or sector pointers messed up and causes all + sorts of odd and nasty behavior. + +October 27, 1999 +- Added my own fixes for -host and -join to handle aborts better. +- Tweaked underwater friction in P_GetFriction(). +- Added Jeffrey Cuenco's fixes for the -host and -join parameters. + +October 26, 1999 +- Added a check in A_Scream() to make sure the actor has a death sound. +- Fixed demo sync problems caused by playing demos back with a cl_pufftype + different from what they were recorded with. I have no idea why it should + make a difference, since the puffs are supposed to be inert, but spawning + them and keeping them hidden when cl_pufftype is 1 fixes the problem. +- Implemented stale pointer cleaning. If you want to remove an object now, + call its Destroy() method instead of deleting it. The object will be + placed in a queue. At the end of the frame, all objects will be scanned + for references to objects in the queue, and any references that are found + will be NULLed. Then the objects will be deleted. + + Any objects that have (DObject *) (or some subclass of DObject) members + need to be implemented with the IMPLEMENT_POINTY_SERIAL or + IMPLEMENT_POINTY_CLASS macros. See the implementation of AActor in + p_mobj.cpp for an example of their use. + +September 15, 1999 +- Fixed a nasty bug when saving big games. FArchive used pointers into the + m_ObjectMap array when mapping objects to indices. Now it uses indices + all the way through so that they will still remain valid if m_ObjectMap + has to grow. +- Reduced the rate at which arbitration packets are sent out to 4 times per + second. Combined with their reduced size, this will hopefully solve + problems I understand some people were having using 1.18 with DoomServ. + (Based on the assumption that their problems were caused by the lack of + bandwidth offered by modems.) +- Reduced the size of netgame arbitration packets by removing the names of + the cvars the values represent. When playing with the same copy of the + executable, these are implicit in the order in which the values appear in + the stream, so storing the name of the key is essentially redundant. +- Pulled out the original 1.18a source and fixed loading of savegames before + a new game is begun. The problem was in DCajunMaster::RemoveAllBots(), + where the consoleplayer's camera is restored to the console player if + viewing a bot. Before the game begins, the camera field is NULL. Also + changed caught recoverable errors so that bots are removed and level + snapshots are deleted. + +September 12, 1999 +- Made actor movement floating-point based. I had already done the fp time + system (to an extent) before I had to pull out the 1.18 source and fix + bugs. Gravity seems to be inversely proportional to the ticrate. Can't + figure out why. + +Okay, I was stupid. I accidentally erased the version of the log file that +contained my changes from 1.18 to 1.18a. + +September 5, 1999 +- The +moveup and +movedown commands finally do something. +- Added a fly cheat. +- Changed the handling of action commands so that they increment and + decrement numbers in an array instead of setting and clearing bits in an + int. +- Fixed R_AlignFlat(). Apparently, I broke it sometime (or it never worked + properly in the first place). Also made it simpler. + +September 3, 1999 +- Added localambientsound and activatorsound ACS commands. +- Fixed the DLevelScript constructor to place new scripts in the array of + RunningScripts (if not ACS_ExecuteAlways). + +September 2, 1999 +- Replaced the error abort in FArchive.cpp when an attempt is made to store + a DObject, with a NULL object save instead. There are conditions that will + come up during regular gameplay that will result in dangling pointers. + Example: A lost soul attacks a monster. The attacked monster then sets its + target field to the lost soul. Something kills the lost soul, and it + destroys itself. The other monster is now left with a pointer to nowhere. + The only reasonable solution to this problem I can think of is to collect + a list of all objects that want to destroy themselves. At the end of each + tic, they get destroyed, *and* all thinkers are searched for pointers to + those object. If any pointers are found, they get NULLed. + +September 1, 1999 +- Significantly cleaned up G_ParseMapInfo(). It's easier to follow what it's + doing, and now it's smart enough to give you an error message if you make + a mistake in your MAPINFO lump instead of hanging. +- Added a flat warping effect similar to Quake's liquid textures. + +August 31, 1999 +- Added swimmable water. The forcewater cvar can be used to make all BOOM + deep water swimmable. +- C_MidPrint() now adds messages to the console as well as the middle of + the screen. +- Fixed the "you need a key" messages to only appear for the player who + tries to activate the locked door. +- Restored the code for storing server cvars in savegames. + +August 30, 1999 +- Made items respawn the default for -deathmatch. +- After creating some huge log files, I believe I finally fixed the demo + and network sync with bots. The bots use P_CheckPosition() to determine + if a spot is free. This function can also causes items to be picked up. + Thus, on the arbitrator's machine, bots pick up items before they do + on the other machines, and they can also pick up items that they decide + not to touch (and so don't pick them up on other machines). To fix, I + made a wrapper for the bots that turns off their MF_PICKUP flag before + performing the check and then sets it back after the check is made. +- Fixed the loading of the "straight-ahead" status bar graphics for skins. + The corresponding patches weren't being moved into the skin's namespace. + +August 28, 1999 +- Fixed the bot's FakeFire() so that it doesn't do damage to anything + that it might hit, by adding another thing instead of using MT_HEADSHOT. +- Another cause of the sync problem is in P_CheckSight(). If a monster + is invisible, a random number is used to determine if the thing + should be reported as not visible. +- Found part of the problem with bot sync: P_SpawnPlayerMissile() used + a special routine when a bot wanted to fire. The routine aimed at + whatever the bot's enemy was set at. Only on the arbitrary (and not + during demo playback), can enemy ever be non-NULL. Changed this to + just disable autoaim for bots. Should be effectively the same. +- Changed P_SpawnPlayerMissile() so that if a player has autoaim set to + 0, it doesn't try adjusting the angle left and right. +- Fixed projectile velocities by using vector math. Doom calculated the + velocity on a 2D plane, then added in the vertical component. +- Fixed the bot's vertical aiming. +- Rewrote the parts of the Cajun that used degrees to use binary angles + instead. +- Changed the Cajun's TurnToAng() function to let it turn both left and + right, depending on which results in a shorter distance. + +August 27, 1999 +- Added the Cajun 0.97 code. Needs work yet: Bot looks up/down too far, + always turns right, demos don't stay in sync, and networking with bots + probably doesn't work either. + +August 14, 1999 +- Cleaned out a lot of the no longer relevant docs from the docs dir that + came from the Linux source. +- Changed IdentifyVersion() so that it can look for an IWAD in one of four + directories: current, program, $DOOMWADDIR, and $HOME. (The same search + order used by BOOM.) + +August 13, 1999 +- Fixed the DLevelScript constructor. (Using local vars with the same names + as member vars still isn't a good thing. :-) + +August 12, 1999 +- Made the vertical calculations in the renderer subpixel-accurate. This + negates some of the work I did on the 10th. A pity. Something also needs to + be done about the walls--they are horribly jittery. +- Moved the calculation of the initial texture coordinate out of the column + drawers and into their callers. Besides making the column drawers simpler, + it also allows for some optimizations of masked texture/sprite rendering, + where the initial coordinate is almost always 0. +- Added variable field of view. Use the fov command to change it. + +August 11, 1999 +- When using -nosound, MIDAS's dsmClearBufferFloat() sometimes tries to free + memory that isn't allocated (apparently already freed). To compensate, I + avoid initializing MIDAS when -nosound or -nosfx is specified instead of + setting MIDAS's nosound option. +- Found that when a stat display is active when the game is quit, a pure + virtual function call was being made. Unfortunately, when I tried to track + it down, the problem stopped. +- Optimized away two multiplies I had added to R_MapPlane() earlier. Oddly, + performance seems unaffected. + +August 10, 1999 +- Did some performance tuning for the yslope movement loop in + R_SetupFrame(). memmove() is not an intrinsic function, so I wrote some + loops that VC++ optimizes nicely. (Other optimizing compilers should be + able to do the job just as well.) I also split up the loop that calculates + the yslope values into three cases so that the body of the loop can be as + simple as possible. + It probably wasn't worth the effort... +- Changed P_SpawnPlayer to set player_t::attacker to NULL so that invalid + attackers aren't carried over across levels, which can cause the problems + if you try to save your game before being attacked on the new level. +- Finished reimplementing hub travel. The new code in FArchive worked + properly on the first try. (Yay!) + +August 7, 1999 +- Added some code to FArchive that distinguishes player-controlled actors + (but not voodoo dolls) so that the stored actors can be overridden by + explicitly spawned ones when travelling between levels in a hud. Untested, + but I think it should work. +- For curiosity's sake, a did a comparison of savegame sizes with 1.17c and + test9. The map tested was map29, just after spawning. The 1.17c snapshot + for the level was 99542 bytes uncompressed (20659 compressed). The test9 + snapshot was 111786 bytes uncompressed (14824 compressed). So the new + archive format is bigger but compresses better, which I'll consider to be + a good thing, because snapshots are normally stored in memory in their + compressed state. + +August 6, 1999 +- Changed the tag changing behavior of W_CacheLumpNum(). Before, it would + always change a block's tag. Now, it will only change the tag if the new + one is less than the previous. This way, a block can be promoted from + PU_CACHE to PU_STATIC, but not the other way around. This was the cause + of intermittant bugs that were visible in st_new.cpp. ST_New uses some + graphics that also serve as sprite graphics. When those sprites are drawn, + their tags were changed to PU_CACHE, and with enough spawning, their data + could be overwritten, and st_new would never know. + +August 5, 1999 +- Changed M_Drawer() to use V_BreakLines() to split lines for prompt + messages, because it wasn't working right. Also fixed a bug in + V_BreakLines() so that now it will recognize blank lines. +- Added nofilecompression cvar to prevent compression of LZO files. +- Fixed savegames. +- Made the thinkers the first thing that gets serialized in a level + snapshot (instead of sectors and walls), because a sector's specialdata + fields might cause a thinker to be serialized. But when + DThinker::SerializeAll is called, it destroys all existing thinkers, + including the ones that were created while reading the sectors. Storing + the thinkers before anything else avoids this. +- Moved the serialization of player data into G_SerializeLevel. The bots + use pointers to some actors in their player_s, so we need to keep the + player data in the same context as the actors they reference. (i.e. They + need to go in the level snapshot instead of outside of them as was done + previously.) +- Also fixed a bug with FLZOFile::Write. If a large write request was made, + it would only double the amount of memory to store the file in, which + might not have been enough. Now it doubles it until the buffer is large + enough to store the new data. +- Figured out what was wrong with storing FLZOMemFiles in an archive: I was + forgetting to add the 8 bytes of header to the size of the block to write + out. + +August 4, 1999 +- Hubs somewhat work. Level data is properly stored on exit and loaded when + reentering the level. I just need to fix the player spawning. Savegames + are another matter. I seem to be having trouble embedding an FLZOMemFile + inside an archive. It appears to be getting saved properly, but trying to + decompress it crashes. +- Got the FArchive class working. It is now able to write out objects and + reconstruct them, filling in pointers as appropriate. Cool. + +August 3, 1999 +- Instead of relying on Z_FreeTags to remove all thinkers when a new level + is started, I now call DThinker::RemoveAllThinkers, so that any subclasses + of DThinker that have custom destructors can have them called. Currently, + the only one with a destructor is DACSThinker, which destroys all the + active scripts. +- Created a thinker responsible for running the ACS scripts, because it + makes serializing them easier. +- Moved some of the mobj handling functions into the AActor class. Most + notably, P_SpawnMobj and P_RemoveMobj are gone. Use the new and delete + operators instead. AActor has a constructor that takes the same parameters + as P_SpawnMobj, so converting old code to use new is easy enough. + +August 1, 1999 +- Changed the code in i_music.cpp to use a simple class hierarchy for + defining music formats and how to play them. This removed some (messy) + switch statements and the nameless unions (that I guess mingw32 chokes on). +- Rearranged the atterm functions so that I_ShutdownMusic() is called before + I_ShutdownSound() to prevent crashes when a MOD is playing at shutdown time. + +July 31, 1999 +- Removed the lists of active ceilings and plats, mainly because it makes + the serialization code simpler, but also because the same result can be + achieved (albeit more slowly) by searching the list of thinkers for each + instance of DCeiling or DPlat. +- Made the active buttons (button_t) and earthquakes (quake_t) subclasses of + DThinker (DActiveButton and DEarthquake, respectively). +- Created a TThinkerIterator template class to manage iterating through the + list of active thinkers. + +July 28, 1999 +- Ever since I added the extra network commands (like say) around a year ago, + I have been executing them the instant they arrived from the network. I + have only now figured out that this is wrong. They should be stored and + only executed when the gametic they arrived with is executed. With commands + like say, the timing is unimportant. With other commands, like changemap, + it can be vital that all machines execute the command on the same gametic. +- Made some changes to the ticcmd building code in d_net.cpp to compensate + for ticdups greater than 1 by dividing pitch and yaw deltas by the ticdup + value so that the end result of moving the mouse a certain distance is the + same as if a ticdup of 1 were used. This is also necessary to make bots + work with ticdups other than 1. +- Fixed the crazy bot turning. The cause? I was calculating angle deltas for + the bots' ticcmds based on their yaw when their think routine was called. + This is incorrect, because that yaw can incorrectly reflect the state of + the current gametic, because maketic can be more than 1 tic in advance of + gametic. The correct way is to take the bot's current yaw, add all the + deltas that haven't been played yet to it, and using the resulting yaw as + the base for the current maketic's yaw delta. In some ways, this is exactly + what you would also do for player prediction. + +July 26, 1999 +- Removed G_InitPlayer(). It was never used and just called G_PlayerReborn(). + +July 23, 1999 +- Spent too many hours tracking down a circular #include dependancy I had + inadvertantly created yesterday. + +July 22, 1999 +- Did some work with the savegame serialization. + +July 21, 1999 +- Changed P_SpawnMapThing() to silently reject mapthings of type -1. +- Fixed kill command to restore player's MF_SHOOTABLE flag before doing the + damage. +- Changed bot observer mode to use noclip instead of noblockmap. Otherwise, + the player is unable to ride lifts while observing. +- The bot code spawns bglobal.body1 and bglobal.body2 actors to help with + aiming. The original code would carry pointers to these over between + levels, even though all actors disappear when travelling between levels. + Not a good thing. Fixed. + +July 20, 1999 +- Changed the network code so that now bots work in network games. Their + ticcmds are sent along with the arbitrator's to the other players in the + game. This way, only one computer is responsible for doing the bot + thinking. (BOOM's random number generator was extremely useful for this.) + Unfortunately, the bots seem to have trouble aiming with more than one + live player and often end up spinning wildly. +- Made weapondrop a server variable. +- Fixed bots so that they can be recorded in savegames. There were two things + preventing it before: 1) The bots ticcmd was being written directly to the + player structure instead of netcmds, so the demo writer never had a change + to see the bot's commands. 2) There are several places in the bot code that + fiddle with the bot's angle directly. The quick (and acceptable) fix was to + keep the fiddling in, but use the new angle to calculate the bot's ucmd.yaw + value and set its angle back to what it was before being fiddled. +- Delayed the call to I_InitMusic() in I_InitSound() until after MIDAS + is initialized. Also removed the call to I_ShutdownMusic() in I_InitSound(), + since I_ShutdownMusic() will be called automatically at exit. + +July 19, 1999 +- Made the network arbitrator changeable, so that if player 1 leaves the game, + someone will still be able to control things. +- Moved the call to I_FinishClockCalibration() before D_CheckNetGame(). + +July 17, 1999 +- Changed several references in am_map.cpp from plr to the console player's + camera. Also added colors for inter- and intra-level teleporters. +- Changed P_PlayerThink() so that the game doesn't die if you try to add more + bots than there are coop starts (in a coop game, of course). +- Fixed removebots command so that if you are looking through a bot's eyes + when you remove the bots, your vision is restored to your own head. + +July 16, 1999 +- Fixed the rotation of player arrows in the rotating automap in coop games. +- Changed wipe_initBurn to allocate FIREHEIGHT+5 rows. Apparently FIREHEIGHT+4 + wasn't enough. +- Fixed SN_StartSequence so that it doesn't attempt to play nonassigned + sequences. I had broken it when I separated part of the code into a + separate TwiddleSeqNum function. + +July 14, 1999 +- Moved the "VectorCopy (RailEnd, end);" line in P_RailAttack() in front of + the for loop. + +July 12, 1999 +- Enclosed the bot thinking code inside if (bglobal.botnum) {} blocks so that + no bot thinking occurs when there are no bots. Also defaulted bot_calcnodes + to 0. If a bot is spawned, and there are no nodes loaded, bot_calcnodes + will automatically be set to 1. Now the bots don't eat up any time if none + are present in the world. +- Added a generic FStat class. Different statistics can be measured and + reported by subclassing it. The console command "stat" provides the + interface to select which stats to view. +- You cannot directly call a constructor from inside another constructor to + help do initialization. Instead, you end up with a temporary object that + is destroyed immediately when the second constructor finishes. This was + causing crashes with wall scrollers, because their constructor was calling + the constructor for more general scrollers. + +July 11, 1999 +- Changed the bot code so that it doesn't go into multiplayer mode until + after a bot is spawned, so the game won't be in coop mode when players have + no intention of playing with bots. + +July 10, 1999 +- Changed ReplaceString() function to properly handle the case where the + string being replaced is the same as the new one. +- Cajun bot now runs under ZDoom, although some things aren't perfect (such + as skin color). + +July 9, 1999 +- Received the Cajun bot source. Started moving it to ZDoom. + +July 7, 1999 +- The sky can now scale horizontally as well as vertically (when using + r_stretchsky), so its aspect ratio is preserved when stretched. +- Redid the Wu line drawer to support 64 intensity levels and wrote a version + that used the translucency tables so that it could look good in overlayed + mode. Also cleaned up the code to make it more readable (to me anyway) and + removed the use of short ints. + +July 6, 1999 +- Restored Cmd_Exec to its 1.17c version. I'm not sure what I was trying to + accomplish with the changes I made, but they broke it under certain + situations. + +July 5, 1999 +- Added Heretic's anti-aliased Wu line drawer to the automap. +- Delayed the execution of cvar callbacks until the video subsystem has been + initialized. + +July 3, 1999 +- ST_Start() now sets the status bar dimensions. +- Fixed some of the DCanvas member functions that used width and height as + parameters. Having two function parameters with the same names as two + member variables is not a good thing... + +July 2, 1999 +- Converted screen_t to class DCanvas and moved a bunch of the screen drawing + functions into it. This let me catch a few instances where the screen + dimensions were being referenced before they were initialized. +- Found this code in i_input.cpp under WM_ACTIVATE: + if (Fullscreen) + { + extern int DisplayWidth, DisplayHeight, DisplayBits; + I_SetMode (DisplayWidth, DisplayHeight, DisplayBits); + } + Apparently, I added it when converting the video code to OpenPTC and + completely forgot about it. I still don't remember adding it. This was + probably the cause of problems starting up in fullscreen mode with some + chipsets. (Banshee and Voodoo3 are the two I know about.) +- Changed refreshDisplay() in i_video.cpp to not do anything during startup. +- Added a WM_GETMINMAXINFO handler to prevent the user from shrinking the + window smaller than the surface. + +July 1, 1999 +- Added default aliases for idclip and idspispopd that point to noclip. +- Further fleshed out the DConsoleCommand and DConsoleAlias classes. Commands + and aliases are now hashed in the same array, and aliases get saved to the + config file again. +- Changed PIT_ChangeSector() to not call P_DamageMobj() if the crushing damage + is 0. This is the way it used to be in Doom (so I hear; I don't feel like + checking), but not in Hexen. +- Added a check to P_SpawnMapThing() to not bother checking mapthings of + type 0. Apparently, some maps in Final Doom actually have these. +- DActor.movecount needs to be signed; there are places in p_enemy.cpp that + test if it is < 0. I had changed it to unsigned. Making it signed again + fixed the problem in test1 that made monsters act as if they had "bad + vision." +- Changed P_AimLineAttack to calculate the top and bottom slope based on a + spherical 64 degree vertical field of view instead of just adding some + values to the center slope. With things that look straight ahead, the + result is the same as the original Doom. With things that don't, the result + is more correct than before. Also fixes the BFG problem in test1. + +June 30, 1999 +- Did some cleanup. Released 118test1. + +June 29, 1999 +- Made the actor's pitch member variable represent an angle between -ANGLE_90 + and +ANGLE_90 exclusive instead of a screen sliding amount. Now the same + representation can be used for the current engine and any possible future + ones that offer true 6 DOF. This also makes the relationship between pitch + and all the slope values Doom uses for collision detection more apparent-- + just take the tangent of the pitch instead of multiplying it by a magic + number. + +June 23, 1999 +- Moved the multiplication by lightscalexmul out of the inner wall + rendering loop so that it can be stepped instead, saving all the time I + used to be spending multiplying. +- Finished converting all cvars to a cvar_t class. Use the macros defined in + c_cvars.h for declaring them. One (possibly significant for mods) change + is that callback functions are now always called when a cvar is created. + If callback depends on something else being initialized to work properly + (see snd_mididevice in i_music.cpp), either make sure the callback only + does its thing once the stuff it needs has been initialized, or don't + create any instances of the cvar until the initialization has finished. + +June 17, 1999 +- Added flat scaling, manual panning, and rotation. +- Fixed a problem with PCD_UNARYMINUS. It was popping the result off the + stack, so any calculations that used it were wrong and could potentially + crash. + +June 15, 1999 +- Got the program to compile and link as C++ code. Some structs have been + transformed into classes, and savegames are disabled until I can get + serialization to work. + +June 11, 1999 +- Found an interesting problem with EV_StartLightFlickering. It takes two + parameters describing the light levels, but they were completely ignored. + Fixed. + +June 7, 1999 +- Changed R_FakeFlat to optionally not care about whether or not the camera's + current sector is also in a sector referenced by a Transfer_Heights special. +- Changed all numspechit loops in the code to test against (numspechit > 0) + instead of (numspechit--). +- Changed Thing_Projectile(Gravity) so that it should work properly with any + non-missiles. +- Fixed a bug in P_NightmareRespawn caused by mindlessly cutting-and-pasting + from P_SpawnMapThing. +- Found a bug in the translation of BOOM generalized floors/ceilings. One + of my bit shifts was off by one. Also fixed the code in zwadconv. +- Changed the boss brain's height back to 16 for compatibility with + Strain MAP20. +- A few days ago, I tried sorting the edges of polyobjects at runtime to + support concave polys at any rotation. It didn't work. I'll probably + have to use a span buffer. +- Stuck in my new span drawer. I actually wrote it about two months ago. + Now it's finally going to be in a release version of ZDoom. It's about + 6 fps (~23%) faster at 1024x768. Also removed ds_colshift (because it is + no longer used) and the unrolled span drawer in linear.nas. +- The turbo cvar's callback wasn't being called when it was set. Fixed. +- This a huge gap between log entries. Sorry, but I've been too lazy to + write anything here. + +March 15, 1999 +- Added support for custom ambient sound attenuations. This is an optional + floating point value that follows the point keyword. +- For 1.17, I had changed the sound volumes in s_sound.c to floats + *except* for the ambient sounds which were still being treated as byte + values between 0-255, so they would always play at full volume. Fixed. + +March 14, 1999 +- Discovered a savegame bug: An mobj's translation table was being saved + improperly and could point to invalid memory on reload. Fixed. +- Added another dmflag, DF_RESPAWN_SUPER, to cause invulnerability and + invisibility to respawn. No room in menu, so you have to set it by hand. +- Added an alwaysapplydmflags cvar that can be used to cause dmflags that + normally only affect deathmatch to apply to single player and coop games + as well. +- Changed P_Thing_Spawn() so that it can spawns things anywhere and not + just at map spots. (Useful for making it look like a monster was carrying + an item.) +- Added support for MBF's sky texture transfer linedefs. Also added support + for Hexen's Sky2 sector special. +- In r_plane.c, spanstop was never used anywhere. Removed it. + +March 10, 1999 +- Made the network code "better." htons is used in the appropriate places, + and the port a packet is sent from is used to determine which node sent + a packet (so now I can test more than two-player games on my machine). +- Added an event-driven timer routine. Instead of busy waiting for a new tic, + I can wait on an event and give other processes some CPU time. This makes + two-player games on one machine run much more smoothly on Windows 95/98. + (It was already smooth for the foreground player on NT.) + +March 8, 1999 +- Fixed a problem with R_DrawPSprite. It was leaving vis->translucency unset, + which could produce odd results depending on the contents of the stack. + +March 7, 1999 +- Discovered a big problem with my linked list of ceiling_t's implementation. + Fixed. + +March 6, 1999 +- Added two new screen wipes: burn and crossfade. +- The mid-screen message gets cleared out on level load now. +- Stopped using the zone heap to store level snapshots. +- Enhanced the stealth monsters so that they will take advantage of all + translucency levels available. +- Fixed the damage for A_MonsterRail. I guess DOOM doesn't copy the damage + amount out of the mobjinfo when an mobj is spawned. +- Added a check to the fullscreen HUD to prevent it from going outside the + array of armor pictures if the AC was above 2. +- The DeHackEd code was setting the Blue AC for max soulsphere health. Fixed. +- Tried out Rick Clark's toxplant.wad and discovered a bug with the + particles: They were colored by whichever sector was drawn last and not + the sector they were in. Fixed. +- Pulled the old info.h from the 1.17a source so I could get things in a + working state to put up a fixed DeHackEd version for the Ground Zero TC. + +March 4, 1999 +- Word of advice: When you have 2847 states and 399 mobjinfos (from Hexen) + to reformat, don't try to do it all by hand. I was smart enough to use a + program to convert all the states into the multigen format, but I thought + I could handle the mobjs myself. Ha ha ha ha ha ha! After a few hours, + my arm was aching, and I had only done about one fourth of the mobjinfos. + Then I wrote a program to convert the ones from Hexen's info.c into + multigen format, and all I had to do was drag them to the correct place + with my mouse. Much easier, and much less strenuous. (Also much less + error-prone.) + + For comparison, Heretic has 161 mobjinfos and 1205 states. + Doom 2 has a mere 137 mobjinfos and 967 states. + +March 3, 1999 +- Had a change of plans about how I want to implement multiple games in a + single executable. All the data in info.c and info.h will be moved to an + external data file whose format is based on that used by multigen (the + tool id used to generate info.c). The list of spawnable things will also + be moved out of p_things.c and into this file. + + This means that everything I did in info.h on March 1 was wasted. Oh well. + +March 1, 1999 +- Pasted labels for the Heretic and Hexen things into info.c. Had to + shuffle a few of them around: + + --- Things renamed --- + MT_MISC* -> MT_DMISC* (if Doom) + MT_HMISC* (if Heretic) + MT_XMISC* (if Hexen) + MT_BARREL -> MT_HBARREL (for Heretic) + MT_DBARREL (for Doom) + MT_TFOG -> MT_DTFOG, MT_HTFOG, MT_XTFOG + created a new MT_TFOG elsewhere. the others should be + copied on top of it as appropriate. + MT_HEAD -> renamed Doom's to MT_CACODEMON + MT_KNIGHT -> renamed Doom's to MT_HELLKNIGHT + MT_FIREBOMB -> MT_HFIREBOMB, MT_XFIREBOMB + + --- Things moved into common Heretic/Hexen section --- + MT_ARTIFLY + MT_ARTIINVULNERABILITY -> ditto + MT_ARTIEGG -> ditto + MT_EGGFX -> ditto + MT_ARTISUPERHEAL -> ditto + MT_ARTITELEPORT -> ditto + MT_SPLASH + MT_SPLASHBASE + MT_LAVASPLASH + MT_LAVASMAKE + MT_SLUDGECHUNK + MT_SLUDGESPLASH + MT_BLOODSPLATTER + MT_BLOODYSKULL + MT_MNTRFX1 + MT_MNTRFX2 (deathsound is sfx_phohit in Heretic, no sound in Hexen) + MT_MNTRFX3 + MT_SOUNDWATERFALL + + --- Things moved to global section --- + MT_BLOOD (note that Hexen's blood has mass 5, not 100. was #38) + MT_TELEPORTMAN (was #41) + MT_PLAYER (was #0) Hexen's is name differently, so it didn't move. + + (Hexen things renamed) + MT_MINOTAUR -> MT_MAULATOR + MT_SOUNDWIND -> MT_XSOUNDWIND + +- Added a pulsating effect for the invisibility powerup that slowly + "pulses" it in and out of visibility, but never going below 25%, so it's + never totally invisible. +- Spent a few hours with the DOSDoom translucency code. I think the + greenness of it is probably more the fault of DOOM's limited palette, + particularly after comparing the 25% translucency table from before + with 25% translucency now. Very low levels of translucency with one + of the colors being dark are still too green, though. + +February 28, 1999 +- Added DOSDoom 0.65's translucency code. I'm not sure if it was really + worth it, though. I tried Allegro's RGB table code to speed up the + generation of the translucency table, but it didn't seem to produce + very satisfactory results, so I use BestColor to find palette colors + to use. The results are satisfactory, but they seem a bit too green. +- Delayed gathering of data on a sprite's patches (width, topoffset, and + offset) until it is needed (either when the level is precached, or when + the sprite is first seen). Game startup is a great deal quicker without + any noticable performance hit elsewhere. Cool. + +February 27, 1999 +- Note: Hexen's friction is roughly equivalent to a Sector_SetFriction of + 171 (ends up as 0xf909, Hexen uses 0xf900). Player movement thrust should + be halved at this level. Changed the calculation of sector->movefactor + accordingly. (With the BOOM code, player thrust was nearly one fourth + normal with that level of friction.) +- Discovered that MBF's code to affect monsters with friction doesn't + work without the change it made to how mobjs are linked into the blockmap. + +February 24, 1999 +- Stopped using stdio in w_wad.c. +- Had left some calls to W_Profile in W_InitMultipleFiles(). Removed. + +February 21, 1999 +- Added support for real looping sounds, because Herian 2 used so many of + them, and the old method sounded pretty bad with them. +- Found a problem with sliding polyobj doors: If, when they try to close, + they can't move anywhere from their open position, they would move + slightly further open and leave a gap when they managed to close. Fixed. +- Added support for auto-loading of skins if they're in a skins directory + in the same directory as the executable. +- Added support for C-style formatting codes to ACS print statements. +- Fixed a problem where, when a player turns into a pile of bloody gibs + (from e.g. a crushing ceiling), they would assume their standing position. + This is because the gibs are a different sprite, and I wasn't letting + player mobjs change their sprite. +- Fixed ceilings so that they stop making noise when they get put in stasis. +- PIT_ChangeSector() can spawn particle blood now. +- Fixed R_DrawSplash2() so that it doesn't draw all the particles to the + left of the impact point. +- Added an A_MonsterRail function so monsters can shoot a railgun too. +- Fixed the railgun sound when you're not the one shooting it. My algorithm + for finding the closest point on the line was wrong and still should + remnants from when I was calculating the distance from the line. +- Fixed some player bobbing problems. + +February 20, 1999 +- Changed sparks to play with static attenuation. +- Found out why pickup messages would sometimes seemingly print several + times for a single item. Some maps have several of the same item on top + of each other so that a player can get more than they would normally + without even realizing it. I get around this by disallowing two identical + pickup messages from being printed back-to-back in a single tic. +- Fixed transsouls. I wasn't calling its callback at initialization, so it + wouldn't take effect until the next time it was changed at the console. +- Recompiled PTC with DDFLIP_WAIT enabled. I had accidentally left it off + from my testing run on January 8. +- Dug up the DirectDraw code from 1.12 and used it to add DirectDraw support + back into the game. Now even people who can't get PTC to work should be + able to use it. + One interesting thing I noticed is that IDirectDrawSurface's Blt method + is horribly slow for blitting between system and video memory. I tried it, + thinking it would be optimized, but it wasn't even close. +- Added the A_Die, A_Detonate, and A_Mushroom routines from MBF. +- Removed the screens array and replaced it with a single variable named + (oddly enough) screen. +- Added a V_SetBlend() to F_StartFinale() to get rid of any palette flashes + that might have been on screen (such as after finishing E1M8). +- Discovered the real reason why the brain shooter wasn't working. DOOM + doesn't explode noclip missiles when they go above the ceiling or below + the floor; it just adjusts their positions. Hexen doesn't have that check + for noclip, so it will explode/remove it. I guess I didn't check MAP30 + after adding Hexen's z-checking. + +February 19, 1999 +- Finally got around to fixing V_DrawPatchFlipped(). Wow, that was easy. I + wonder why I was having so much trouble with it the last time I touched it + many months ago. +- Changed the item pickup sounds to play with a NULL entity for the local + player (like before), but still play on CHAN_ITEM for other players. +- Fixed the problem of monster names not being drawn in the cast finale: I + was still xoring each character with 0x80 to make it red under the old + text system. +- Changed the keyboard code so that the keypad isn't translated into number + keys in full console mode with the menu active. +- Fixed the Read This! sequence of menus in Ultimate Doom. When it's + finished, it's supposed to re-enable the skull and empty the stack. +- Fixed a problem with raise doors. In Doom, you can close them prematurely + by activating them again. I had the right idea: + if (GET_SPAC(line->flags) == SPAC_PUSH) + but it should have been + if (GET_SPAC(line->flags) != SPAC_PUSH) + +February 18, 1999 +- Release 1.17 again, hopefully this time for good. +- Fixed some problems that were already found with 1.17: + * The cubes spawned by the boss on DOOM2/MAP30 would be in the ceiling and + disappear right away. (All I can say is that it worked before; I don't + know why it stopped.) + * Because of my quick hack for voodoo doll obituaries, getting killed by + the world would crash. + * Open scripts above 255 wouldn't properly restart when the level + reloaded because the game thought they were still running. + +February 17, 1999 +- Made a final "final" compile of 1.17. +- Removed the hack that could transform normal exits into Teleport_NewMaps + during the level translation process. +- Realized I had forgotten to do the following, so I did them: + * Support the MF_TRANSLATION bits for DeHackEd patches that use them. + * Add a TRANSLUC75 .bex mnemonic for symmetry. + * Add a defaultmap entry for MAPINFO lumps. + * Make r_columnmethod 1 the default. + * Add a neverswitchonpickup cvar. + * Extralight and fullbright need to be ignored in foggy areas. + +February 16, 1999 +- Did a final compile for 1.17 under both DOS and Win32. This will be the + first release where I release versions for both operating systems + simultaneously. Eventually, I'll have to abandon DOS if I want to keep + progressing, but for now it's nice to be able to do this. +- Removed the limit on the number of sound sequences that can be loaded. + There's still a limit on the number of translation slots, and I think + it's good to leave it that way. +- Added a menu stack, so that pressing escape to back out of a menu only + backs up through the menus the user has visited. +- Tried adding some code to djgpp/i_video.cpp so that it could write + directly to VGA memory. Then I found out that regular VGA mode 13h + doesn't support page flipping, so I took it out. + +February 14, 1999 +- Added some #ifdef's to i_sound.c so that it works equally well with + both VC++ and DJGPP. +- Added support for Hexen's parallax skies. I'm not sure why I thought + the front one was a normal masked texture. (It uses color 0 to indicate + transparency instead.) I also removed R_DrawMaskedSky() and added the + restriction that both sky textures must be the same height. + +February 13, 1999 +- Tried boomedit.wad, and it turns out I was wrong about ML_PASSUSE. Non- + use lines could and did eat uses. Changed it so that only SPAC_USE + does now. +- Moved the functionality of the ML_PASSUSE flag into a new activation + type: SPAC_USETHROUGH. The flag was only applicable to use activation + lines, so it seemed sensely to have it wasting a bit for all other + types. Now I have a free linedef flag if I need it. +- Removed the hack to allow players to move if they were currently stuck. + With it in, polyobjects could push players through walls, which is even + more undesirable. Since I'm now using MBF's momentum code (which, like + Doom's but not Boom's, allows players to build up enough momentum to + escape from walls if they're trivially inside them), I don't really need + the "fix" anyway. +- Added a revert argument to the ChangeCamera special that causes the camera + to move back inside the player's head if he moves. +- Added a SetPlayerProperty special. +- Created things for the particle fountains and sparks. +- Created sound sequences for the appropriate Doom sector movements. I also + had to expand on the language as defined by Hexen a bit. +- Replaced my floor waggling code with Hexen's, so now it's right. +- Added three new level flags: + * evenlighting + * noautosequences + * forcenoskystretch +- Added a progress indicator for the translucency table building process. + +February 12, 1999 +- Removed the round-robin assignment of virtual channels in i_sound.c. Since + we're no longer letting MIDAS pick the sfx channels for us, this is + pointless (and potentially hazard-prone if many sounds are being played + very frequently). +- Added support for sound sequences, so now the polyobjects aren't silent + when they move. + +February 11, 1999 +- Added "support" for 0-length sounds. (Meaning they get replaced by dsempty + instead of crashing when malloc tries to alloc 4 gigs for them.) + +February 10, 1999 +- Adopted Hexen's script parsing code (sc_man.c). It lends itself toward + much cleaner script handling code. [no association with ACS] + +February 7, 1999 +- Incorporated MBF's friction code in place of BOOM's. (Incidentally, I also + discovered that I had left out some of BOOM's. No matter now.) +- Added a hack to P_XYMovement() so that players will still be able to move + if they get stuck inside a line or another thing. + +February 6, 1999 +- Played some deathmatch with gothicdm2 and noticed two problems: + * On rare occasions, I would spawn and be stuck. + * Weapon pickup messages would sometimes print more than once. (Was I + picking them up more than once when I ran over them? Not sure.) + * Once when the other player died, he didn't turn into a corpse. +- Added the ability to activate scripts by picking up items. +- Changed the polyobject functions called from p_lnspec.c so that they take + individual paremeters rather than a byte array of args. +- Demos can now be played from disk without first loading them with the + -file parameter. +- The automap will now follow the console player's camera rather than the + console player himself. +- Added a notice warning that a demo will go out of sync if it was recorded + with a different version of the game. +- Added playdemo and timedemo commands. +- Added colored text support and different message levels. This was + planned for several months, and now I've finally written the code for it. + +February 4, 1999 +- Modified C_AddNotifyString() so that it properly supports lines + ending with '\r' or '\n' instead of assuming that they all end with + '\n' and starting each on a new line. +- Fixed a problem with PTR_CameraTraverse() that could position the + chasecam inside a two-sided wall. +- Removed the handling for ANIM_RANDOM from wi_stuff.c since it wasn't + used anywhere. + +February 3, 1999 +- Removed the use of screens[1] in wi_stuff.c by allocating a new screen + just big enough to hold the background image and then blitting that to + the screen each frame. +- Changed the demo loop a bit so that it will automatically try to play + any number of demos beginning with DEMO1 and continuing up in sequence. + (Of course, since I removed the ability to play old-style demos, it's + only of use for wads that provide their own demos.) +- Did a bunch of miscellaneous cleanup from the Hexen source. +- Fixed player extreme deaths playing "*gibbed" instead of "*xdeath1". +- When a player leaves a network game, their body is now removed. +- Removed the check against monsters crossing secret lines. They *can* + cross secret lines and activate them, they just don't use/push secret + lines. + +January 31, 1999 +- Linedef type 134 was being improperly translated to require a blue key. + It should have been red. +- Fixed a round-off problem in P_ZMovement() that could cause the player's + landing sound to play when the player wasn't falling fast enough. For + some reason, converting the floating point minimum momz to an it was + subtracting one (even though it was already integral). So, for normal + gravity, it was comparing the player's z momentum against -524287 + instead of -524288. +- Fixed a crash bug in M_LoadDefaults() when migrating from a pre-1.14 + config file without any binding for F5. + +January 30, 1999 +- Added blood, gunshot, and grenade particle effects. + +January 29, 1999 +- Fixed up the handling of .bex thing mnemonics and added the names for + the second set of flags (albeit, not many are actually implemented). + +January 27, 1999 +- Created a new traversal function for the rail gun. +- Finally figured out why so many lost souls spawned by pain elementals + were getting stuck. I was spawning two lost souls in the same spot (where + there should have been only one). Oops. +- Found a case where the sight-checking code could trace a line that missed + its ending cell and continue off the edge of the map, thus crashing the + game. Made some changes to compensate: When the ending column or row is + reached, mapxstep or mapystep will be set to 0 to prevent it from + traversing any further in that direction. +- Using spynext and spyprev now briefly display the name of the player + you switched to. + +January 25, 1999 +- Added armor and keys to the fullscreen HUD. + +January 24, 1999 +- Imported Hexen's z-checking code in place of my own. Hopefully it will + work better. Also added a few other Hexenism while I was at it, like + bouncy objects. +- Sped up wipes on tall screens so they should be about the same speed as + one 200 pixels tall. +- Fixed plats so that they properly rebound off the ceiling. I was + checking if the plat's crush field was non-zero when I should have been + checking that it wasn't -1. +- Made some more improvements to D_ErrorLoop(). +- Fixed some problems with the lighting with different r_detail values. +- columnofs[] was being constructed wrong for horizontally stretched + detailed modes (too far to the right). Fixed. +- Added some unrolled drawers based off the Hexen source for 320x200 + and 320x240. I don't expect anything but a 386/486 to benefit from them. + +January 23, 1999 +- Fixed the light-amp so that it doesn't turn off colored lighting. +- Added positional sounds. Now that I have them, I also removed the + temporary switch mobj that was used to provide a place to play the + switch sounds. +- During demo playback, the chase command will now let you switch to + and from the chasecam, so chasedemo isn't really needed unless you want + to start the demo in chasecam mode. +- Added the player's score to the fullscreen HUD in deathmatch. +- Fixed the spynext/spyprev commands so that they properly update the + status bar when you switch to another player. Also fixed it so the + camera doesn't stay in a dead player's corpse if you're not watching + the person who recorded the demo. +- Fixed the alignment of the scores display at high resolutions and also + added a level countdown timer if timelimit is in effect (ala Lithium). +- Removed Hexen's solution for getting the player to produce more than + one sound and adopted Quake's: each mobj has 8 channels with some of + them set aside for predefined uses. + +January 21, 1999 +- Stopped using MIDAS's auto effect channels and started using the ones + calculated by the game's own sound code. This seems to have fixed all + the previous problems with sounds cutting out prematurely. + +January 20, 1999 +- Adjusted the WEAPONTOP #define in p_pspr.c so that the player sprites + will meet the bottom of the screen at higher resolutions instead of + leaving a gap. + +January 17, 1999 +- Added a chasedemo cvar. When it's true, the demo is played back in + chasecam mode. +- Fixed a memory leak when the game had to generate a translucency table. + (out was not being freed.) +- Stopped using Z_Malloc() for temporary compression buffers and switched + to the libc functions. (libc has a bigger memory pool.) +- Fixed problem with skins that used sounds in the IWAD. +- Fixed a bug that could crash the game if something went amiss during + the startup process but after setjmp() was called. Now D_ErrorLoop() + explicitly enters the GS_FULLCONSOLE state before doing anything else. + +January 16, 1999 +- Added particle fountain effects with the following colors: + red, green, blue, yellow, purple, black, and white +- Got rocket trails into a state I think looks nice. +- Improved the particle system further by making the particle sizes + adjustable, letting particles fade out over time, and moving all of + the particle thinking out of the renderer and into the play simulation. +- Imported some of Hexen's sound code to limit the total number of same + sounds playing and also to allow players to make more than one noise + at a time. +- Fixed the operation of FloorAndCeiling_(Raise/Lower)ByValue. Contrary + to what the Hexen specs state, they do not multiply their height + argument by 8. + +January 14, 1999 +- Switched to the p_sight.c of Hexen. This is benefitial for two reasons: + 1. It knows about polyobjects. + 2. It doesn't traverse the BSP tree. Yes, I know this means it's slower, + but it also means I can use it with a portal engine, which doesn't + even have a BSP tree. +- Moved the locating of the polyobj spots out of PO_Init() and into + P_SpawnMapThing(). + +January 12, 1999 +- Added the polyobject stuff from Hexen. +- Copied Hexen's earthquake viewshifting code into R_SetupFrame(). +- Changed P_Thing_Projectile() so that it can play a thing's sight sound + and sets some other values properly. +- Added a delay to open and deferred scripts of one second after seeing + that the Hexen code does it (and it's a good way of avoiding delays in + open scripts to get past the screen wipe). +- Fixed a bug in P_StartScript() that would cause it to crash if someone + tried to start a nonexistant script. + +January 11, 1999 +- Added an r_drawflat cvar to draw segs as flat colors instead of textures. +- In R_StoreWallRange(), changed the lighting calculation so that lines will + have the same amount of light no matter what their orientation if a + non-black fade is applied to them (otherwise the fog effect looks dumb). + +January 10, 1999 +- Added a rocket trail using the particle system. +- Added a particle system. +- Added support for PWADs like Gothic DM2 that used a hack to get sprites-in- + a-pwad with regular Doom by making some changes to W_MergeLumps(). + +January 9, 1999 +- Added a progress-meter to the console. +- Made a fix (submitted by John Cole) to the height-checking code so that if a + player stands on another player, the player on the bottom doesn't get + stuck. +- Changed P_GiveWeapon() to check if there are any graphics for a weapon. If + there aren't, then it won't give the player the weapon. Also changed "give + weapons" to call P_GiveWeapon() so that it won't give the player a weapon + that doesn't exist in the current iwad (like the ssg with doom.wad). +- Fixed psprites so that the muzzleflash has the same visibility (fuzz) flags + as the weapon sprite. +- Added the setting of YourColor when am_usecustomcolors is 0. It should have + been there a long time ago. + +January 8, 1999 +- Since the new column rendering code is essentially done (unless I decide + that it's actually worth the hassle to draw columns in bunches of 8--4 was + enough bother), I took some timings with the new and old routines. These + are for looking directly at a wall, the worst-case scenario for the old + routines. I tried disabling vbl wait, but DirectDraw always seems to do it + even when I don't tell it to, so the numbers for the low resolutions aren't + very informative since they cap at the screen's refresh rate. Rates from + two Build games under similar conditions are also given for comparison. + This is on my PII-350: + + mode old new Blood Duke3D + 320x200 70 70 212 324 + 320x240 60 60 174 274 + 400x300 60 60 120 212 + 480x360 60 60 91 147 + 512x384 40 60 80 128 + 640x400 32 64 60 96 + 640x480 27 57 51 83 + 800x600 27 42 34 51 + 960x720 12 27 24 37 + 1024x768 8 21 21 33 + 1152x864 9 19 17 23 + 1280x1024 6 15 12 17 + + It looks like the new routines are about twice as fast as the old ones. It + also looks like I can draw walls faster than Blood but not Duke. For + rendering a real scene that consists of more than just a single wall, ZDoom + beats them both, since a single wall is the best-case scenario for Build. + Frame rates in ZDoom seem to be pretty even now, which is nice since the + old routines were significantly slower at drawing walls than anything else. + +- Put in a check in R_RenderSegLoop1() and R_RenderSegLoop2() for NULL + walllights. Right after starting a level, it seems walllights isn't + getting set properly, but it appears to work fine afterward. Hmm... +- Got back to school and had a chance to try the new routines on my machine + and, wow! I can now do a steady 35 fps at 800x600. 960x720 hovers around + 27 fps. 1024x768 is around 20 fps. Not bad. + +January 6, 1999 +- Wrote a better assembly version of R_DrawColumnHoriz() with no partial + register stalls and presumably no AGI stalls on regular Pentiums. If it's + faster than the C code, it's not much faster. (At least it's not + significantly slower, anyway.) + +January 5, 1999 +- Tried an assembly version of R_DrawColumnHoriz(). It was actually + slower than the C code by about 8 fps. Probably because of all the + partial register stalls. I guess they really can kill performance. + Stupid Intel processors. :-) +- Continued work on the optimized column drawers so that they have + analogues of all the regular column drawers and can also be used to + draw sprites. On this P-II 300, 720x480 runs at a pretty consistent + 35 fps. 864x480 isn't much worse, either. (Yeah, weird modes, I know.) + 800x600 runs at about 25 fps. Not bad, considering that this is all + C code. +- Added R_StretchColumn() and R_DrawTlatedLucentColumn() functions. + +January 4, 1999 +- Recompiled everything with __fastcall as the default parameter-passing + convention. Is it better? Not sure, but the exe did shrink by 11k. I + think the framerate may have risen by 0.5 fps, too. + +January 3, 1999 +- Added support for using RIFF WAVEs as sound lumps. + +January 2, 1999 +- Fixed EV_StopPlat() so that it doesn't get stuck looping on the first + plat because I had forgot to advance scan inside the while loop. +- Fixed P_LineAttack() so that it can still spawn bullet puffs on the + floor or ceiling even if the bullet path never hits a line within range. + +January 1, 1999 +- Worked some more with the cache optimized column drawers. Now they work + for masked walls and skies as well as solid walls. + +December 28, 1998 +- Added some C code to do "interleaved column drawing" (the method that + proved to be the fastest in my test two days ago). Wall drawing is about + twice as fast at 1024x768. Lower resolutions show less, but still + measurable, improvement. Hopefully converting it to assembly will + result in a further speedup. +- Fixed problem with monsters continuing to attack their target even after + they had killed it. +- Adjusted the minimum distance between the chasecam and a wall/floor/ + ceiling. + +December 27, 1998 +- Added a chasecam. Use the chase command to turn it on and off. + +December 26, 1998 +- Ran a simple texturing test drawing a 128-pixel tall texture into a + 1024x768 block using several different methods. The methods and + average times for one pass of each method are: + > drawing it directly to the buffer: 94.18 ms + > drawing four columns into a temp array and then merging + them into the buffer: 24.456 ms + > interleaving four columns into a temp array and then copying them + into the buffer as a series of longword writes: 24.338 ms + > interleaving four columns into a temp array and then colormapping them + as they get copied to the buffer: 21.71 ms + + using variations of the fourth method for translated columns: + > translating during the copy to the buffer: 21.684 ms + > translation during the mapping to the temp array: 24.29 ms + + using variations of the third and fourth method for translucent columns: + > colormapping into the temp array: 31.75 ms + > colormapping during the copy to the buffer: 30.42 ms + + using variations of the third and fourth method for translated, + translucent columns: + > translating into the temp array: 32.58 ms + > translating during the copy to the buffer: 31.45 ms + + These tests give me an idea of what I need to do to improve the game's + renderer. + +- Added an extension to normal exit lines during translation so that if a + map has a MAPINFO entry, then it gets translated to Teleport_NewMap + instead of Exit_Normal. The levelnum is (tag % 1000) and position is + (tag / 1000). Thus, you can create hubs with regular Doom maps provided + that they have MAPINFO entries. +- The video drivers on this machine at home have a weird bug. Apparently at + random, when the palette is changed, random colors will have their blue + values set to the opposite of what they should be. I can't see any way to + work around it. Ah well. It's not my machine anyway... :-) +- Fixed togglemap so that it does nothing if the player isn't in a level. + (Could have crashed if used on the title screen.) + +December 25, 1998 +- Added Static_Init special (190) to handle BOOM-like control linedefs for + setting sector properties (at the moment: color, fog, damage, and gravity) + at level load time. + +December 24, 1998 +- Fixed a problem in G_CheckSpot() where a corpse would get moved vertically + to check for collisions in a spawn spot, but then it wouldn't be restored + to its original height after the check. +- Fixed a problem I had introduced in P_LookForPlayers(). I had been + operating under the assumption that whenever it was called, actor->target + was NULL. Thus, I thought that assigning actor->goal to actor->target was + safe even if actor->goal was NULL. This isn't the case. In coop, this + function can be called with a valid actor->target. Setting it to NULL can + then play havoc with P_NewChaseDir(), which can get called immediately + afterward in A_Chase(). Now it only sets actor->target to actor->goal if + actor->target is already NULL. + +December 22, 1998 +- Fixed the thing spawners so that they don't spawn monsters if the + nomonsters dmflag is set. +- Changed the imp fireball to be 75% opaque. +- Replaced the am_key?color cvars with am_lockedcolor. Finally rewrote the + code in the automap that uses it, too. (Up until now, it was still using + the old Doom specials to determine locked doors, even though they all get + converted into Door_LockedRaise before the automap ever sees the line. + +December 21, 1998 +- Added ML_BLOCKEVERYTHING linedef flag. + +December 20, 1998 +- Added support for a ChangeCamera special. + +December 19, 1998 +- Added a fire effect to the player setup menu (which I had wanted to do + ever since I saw Unreal). + +December 15, 1998 +- Went through commands.txt, and documented new commands and cvars (and also + some that I had missed from 1.14). I still count 4 undocumented commands, + but I can't figure out what they are even when I compare it with the output + of the cmdlist command. +- Fixed problem with V_BreakLines() not properly setting the pixels width + of lines that were broken. +- Fixed problem of Plat_UpByValue not going back down. + +December 13, 1998 +- Fixed problem of lighting in hires modes lightening too quickly. +- Added outsidefog key to MAPINFO lump parser to set the fog color for + any sectors with sky ceilings. +- Removed the translucency on health bonuses. +- Improved some of the error-handling code in the midi playback routines, + and the problem seems to have gone away. + +December 12, 1998 +- Started experiencing a strange midi problem: it works with the debug + build but not the release. +- Added soundlist command to display the assignment of sounds. +- Added dynamic sound linking so that sounds that refer to the same lump + use the same copy of the sound. Added the soundlinks command to view + the linking of sounds. +- Fixed problem of punching someone to death being treated as an + unknown means of death in the obituaries. +- Spawning players now telefrag things standing at their spawnpoint, so + it's no longer possible to get stuck inside another player when + spawning. Also relaxed the restriction on deathmatch starts so that + only one is needed to start a game. +- Added nobfgaim cvar to disable freeaiming of the bfg. (suggested by + Tony Fabris) +- Was trying to figure out why weapnext and weapprev only worked for + player 0 in network games, when they suddenly started working. + Hopefully it's permanent... [Now that I've thought about it a little + more, I probably just wasn't getting the mouse captured when I alt-tabbed + to the other player's window.] +- Rewrote weapnext and weapprev commands to use the inventory "system." +- Added a dir command. +- Added support for the second joystick device because my joystick somehow + got assigned to it (and made me aware that it exists :-). Also added + joy_xthreshold, joy_ythreshold, joy_xsensitivity, joy_ysensitivity, and + joy_speedmultiplier cvars. +- Added support for double bindings (for double clicking, but it works with + all keys, not just the mouse buttons) to C_DoKey() and some associated + console commands. +- Changed C_DoKey() so that it takes an event as input. +- Added some code to PTR_ShootTraverse so that bullet puffs can appear on + floors and ceilings. + +December 6, 1998 +- Fixed problem of monsters being slow to attack a player if they were + on a route: Their reactiontime was too high. +- Added a gender option to the player setup menu. +- If getsfx() tries to load a sexed sound, and it doesn't exist, it will + try to load a male version of the sound. +- Added an empty sound (dsempty). +- Changed sound handling slightly so that sounds are now loaded when + they are first used instead of during I_InitSound(). They still stick + around forever after that. +- Changed the names of every sound in SNDINFO. It's no longer Hexen- + compatible, but it should at least be compatible with what I want to + do eventually. I also redid the way skin sounds are handled to better + fit my new sound naming conventions: Any gender/skin-specific sounds + can be used by prefacing them with a '*' and passing a player mobj to + a sound function. (If a player mobj is not passed, it defaults to male). +- Fixed the problem of button sounds being played in the wrong place + when they're deactivated. For some reason, I had this line in + P_UpdateSpecials(): + S_StartSound ((mobj_t *)&button->soundorg, "Switch1", 78); + but button->soundorg is an mobj_t *. I'm surprised it didn't crash. +- Changed P_Thing_Spawn() and P_Thing_Projectile() so that they will only + spawn things at map spots and not just anything with a matching tid. +- Fixed P_Thing_Projectile() so that it will still spawn missiles even if + there is something at their spawn spot. + +December 4, 1998 +- Was playing a dark level and noticed that the fog isn't "thick" + enough at higher resolutions: It transitions from darkness to fullbright + far too quickly. +- Tweaked the falling damage some more using some code from Q2. +- Rearranged the startup sequence slightly so that I_Init() gets called + before I_InitGraphics() (like it was before). +- Added support for gendered death messages. +- Rewrote portions of d_dehack.c so that it takes less space when compiled + and also added .bex support. (Tried it with a few .bex files, but didn't + do any extensive testing. Assuming it works. :-) +- Added a check in Printf() to avoid drawing to the console too rapidly + during startup, because that can slow it down. +- Changed P_LoadSegs so that it clears a line's ML_TWOSIDED flag if an + associated sidedef doesn't point to a back sector (otherwise the game + could crash in p_sight.c when the line came into view). +- Removed foreign language "support." It's been broken for a while and was + too hard to add new strings. +- Moved string names out of d_dehack.c and into dstrings.c (which is where + they should have been in the first place.) + +November 30, 1998 +- Had a flash of insight for how I could speed up the rendering of walls. A + quick test shows that filling the screen with columns of shorts is about + twice as fast as filling it with columns of bytes. If I draw wall columns + into memory in consecutive bytes, and then copy them to the screen in + another pass, I should be able to combine the writing of two or more + columns together, obtaining a speed boost that should, at the very least, + let me maintain 35 fps at 800x600 on my machine. I'll have to try it and + see if it actually works in practice. The overhead of writing the walls + twice might kill any performance boost this could offer. On 486s and slow + Pentiums, this will almost certainly be more of a hinderance than a help, + and it's not needed at low resolutions anyway, so I plan on keeping it + optional if it turns out to be benefitial. + +November 29, 1998 +- Tested a theory, and I was right. :-( Drawing vertical columns is + inherantly slower than drawing horizontal spans, probably because drawing + them vertically results in a whole lot more cache misses. What I did to + test it was replace most of D_Display() with a loop that filled the screen + a solid color. At 800x600, filling the screen by columns was no faster than + if I textured the walls (23 fps). Filling by rows, I could get 35 fps. + Apparently, any further optimizations in the renderer will have to focus + on drawing walls by rows instead of colums. + +November 28, 1998 +- Did some slight performance tuning in R_RenderSegLoop() by making more + variables local to only certain blocks in the function. In 800x600, + looking straight at a wall now gives ~23 fps vs ~20 fps before. (I really + wasn't expecting such a marked improvement. It might be worthwhile to try + and tweak this in assembly.) +- Pulled some blending addition code from the Q2 DLL. I had been trying to + do the same thing myself, but couldn't quite manage it until I found + id's code. + +November 26, 1998 +- Added support for cancelling messagemode by pressing escape. +- On the automap, a player with invulnerability is drawn with a color + slightly off from the background rather than being hard-coded to palette + entry 246 (which is almost black with the normal Doom palette). +- Finally got around to working out the bugs in teamplay. (Missiles would + still hurt you even with friendly fire on.) +- Disabled intermission texts in deathmatch. +- Pretty sure I got a non-fatal version of I_Error working now. It uses + setjmp() and longjmp() to do its magic. +- Removed the check for -statcopy in d_main.c. +- Removed the system menu from the ZDoom window. Unfortunately, this also + means it doesn't get a minimize box. Oh well. +- Removed the restriction on using messagemode only during a netgame. +- Added mouse wheel support. Under Win95, it ought to work with DirectInput. + Under NT 4.0 and 98, it should always works. + +November 23, 1998 +- Changed the startup code so that the graphics mode is initialized as early + as possible, allowing us to use the in-game console for most startup text. +- Moved all the functionality of I_StartGraphics() into I_InitGraphics() + because the game starts up in a fullscreen console now. +- Added endgame to quit out of a game and drop to the fullscreen console. +- Removed the ormask parameter from V_PrintStr() and V_PrintStr2(). It was + almost never used, and in those cases where it was, it was easy enough to + just or the string beforehand. +- Adjusted the colors of the CONCHARS lumps and changed a few special + characters. With the fullscreen console, it was obvious that they were + all too dark. +- Added a fullscreen console. +- Changed handling of WM_DESTROY messages in i_input.c to call exit() + directly, because the WM_QUIT message didn't seem to be making its way + into the message stream. +- Removed some unused #defines from doomdef.h +- Removed the store demo check from D_ProcessEvents(). + +November 22, 1998 +- Fixed saving of monster goals (was referencing the tracer field instead). +- Made one-sided lines pushable. +- Made P_PushSpecialLine aware of the side of the line that was pushed. +- Moved the execution of deferred scripts out of P_StartOpenScripts so + that going to a level with a saved snapshot would not terminate the + script prematurely when the snapshot was loaded. + +November 21, 1998 +- Teleport_EndGame and Teleport_NewMap no longer execute if crossed + along a linedef's back side. +- Discovered I had missed implementing Teleport_EndGame, so I added it. +- Fixed problem with level snapshots where plats and ceilings that were + in stasis were saved incorrectly. + +November 15, 1998 +- Just tried listening to D_RUNNIN after a clean boot, and it didn't work + the first time. :-( At least it plays properly after I use iwinit now... + +November 14, 1998 +- Bumped the height of the three small torches up from 34 to 37 units so + that the player can't jump on top of them. +- Tweaked the thing auto step up in PIT_CheckThing some more so that it + will only do the auto step up if you're not in the air. It seemed funny + to be able to jump on top of most monsters. Never mind. I can't seem to + get it to work only when I'm not jumping. :-( +- Added code to mus2strm.c so that it generates a tempo event at the + beginning of the song. (The tempo used appears to be the default for + midiStreamOpen, but I felt like being safe anyway.) AddEventToStream() in + mid2strm.c also keeps track of all instruments used in a song now. This + way I can get around what appears to be a bug in the GUS PnP drivers + that would cause it not to play some instruments if they weren't already + loaded in the card's RAM. Just before I start playing the actual song, I + play each instrument very briefly and very quietly to get the instruments + into the card's RAM. + +November 2, 1998 +- Added snd_mididevice cvar to allow the user to select which MIDI device + to use and a snd_listmididevices cvar to enumerate the available devices. +- Added MIDI volume cvar snd_midivolume and a corresponding menu item. +- Finished mus2strm.c and made a few cleanups to the MIDI streaming code. + Now I just need to switch to MikMod, and I won't have to use temporary + files anywhere. (MIDAS can only load MODs from disk and not from memory.) + +November 1, 1998 +- Started cleaning up qmus2mid.c and transforming it into mus2strm.c. + +October 31, 1998 +- Took the mid2strm sample from the dx5sdk and used it to redo my MIDI + support so that I can use the MIDI stream API now, the primary benefit + being that it lets me set the MIDI volume for just that stream and not the + entire system. +- Changed I_DetectOS() so that it doesn't identify Windows 98 as Windows 95. + +October 24, 1998 +- Discovered the blockmap generation wasn't actually working. Can't figure + out why, since the same code works just fine in BOOM... +- Incorporated several of the changes from BOOM 2.02 such as "loose files", + fire trail elimination, and automatic blockmap generation for large maps. + +October 17, 1998 +- Implemented the Radius_Quake line special. +- Removed limit on the size of recordable demos. +- Changed P_SpawnPlayer() so that it always spawns players on the ground. +- Created an MT_TELEPORTMAN2 that can be used to teleport things to points + above the ground and fixed MT_TELEPORTMAN so that it teleports things onto + the ground. +- Updated the teleport code so that it finds destinations using P_FindGoal() + instead of searching through all the active thinkers. +- Fixed a memory allocation problem with the -iwad parameter. + +October 16, 1998 +- Rewrote IdentifyVersion() so that it identifies IWADs by their contents + instead of their names. (except for tnt.wad and plutonia.wad, since I + don't know of any other way to distinguish them from doom2.wad) +- Doors that needed yellow skull keys to be opened said they needed yellow + cards instead. Fixed. +- Finally added proper support for substituting translucency for the fuzz + effect. Instead of using a NULL colormap to represent fuzz, it takes + advantage of the vissprite's flags field and sets MF_SHADOW. Then the + colormap points to the colormap that would be used if the sprite wasn't + shadow, so that it can be properly shaded when r_drawfuzz is 0. +- Got the colormaps code working. I just wasn't allocating enough space for + the realcolormaps array. Oopsy. + +October 15, 1998 +- Decided to support changing of colormaps via Boom's 242 linedef after all + instead of just changing the blend, so I started adding some code to + support that. Unfortunately, now it doesn't work without any C_START/C_END + colormaps. :-( Will fix tomorrow. + +October 14, 1998 +- Added a callback for the splashfactor cvar that prevents it from being + set to illegal non-positive values and also computes the inverse of the + cvar for scaling of the thrust felt by things that chew on their own + missiles. That way, a player will always rocket jump the same height no + matter what their splashfactor is set to. +- Fixed a problem with continuous sounds that prevented them from being + played. When I had consolidated to using a single mobj thinker for all + sounds instead of splitting them up as I had previously, I was erroneously + setting the activation time for continuous sounds to 0 because I wanted + their thinkers to get called right away. But the mobj thinker decrements + the tic counter and *then* compares it with 0, so it would decrement the + 0, see -1, and then never doing anything with that mobj again. + +October 10, 1998 +- The button list gets saved in level snapshots now. +- Added full support for activation types of projectile cross, projectile + hit, and push. Also added support for a few linedef types to be + monster-activatable depending on their activation type even if + ML_MONSTERSCANACTIVATE is not set. (So that, e.g. a monster can still + open a local door of type Door_Raise without the level designer + having to do anything special.) +- Removed the MAXBUTTONS limit and also fixed a problem with the sound + origin used when activating switches/buttons. +- Changed the error messages in V_DrawWrapper() and V_DrawSWrapper() to + use DPrintf() instead of Printf(). +- Fixed problem with invulnerability I introduced yesterday. (Walls were + still being drawn with the normal colormap.) + +October 9, 1998 +- Spent about an hour changing the rendering code so that each sector can + have its own colormap. The light tables are now indices into a colormap + rather than pointers into one. Spent about half an hour afterward + figuring out why it seemed to be merging visplanes that were alike in + everyway except for colormap. All in all, it was easier than I had + expected. Unfortunately, it's also too slow to build a colormap in the + middle of gameplay, so I guess an open script will have to be used to + build any colormaps before the level starts if anyone wants to change a + sector's color on the fly. + +Ocober 8, 1998 +- I had earlier changed PIT_RadiusAttack() to do only half damage to targets + that originated the explosion, so that rocket jumping didn't hurt so much. + The scale factor has now been moved into the cvar splashfactor and + defaults to 1.0. The former behavior can be restored by setting it to 0.5. + +October 5, 1998 +- Spent about 15 minutes writing a routine to build a colormap for non- + white lights. Tested it using an orange light for the entire level. It + worked nicely, so now I just need to make it possible to set the light + color on a sector-by-sector basis. +- Issue: Teleport destinations need to be flush with the floor instead of + remembering the position they are spawned at. Discovered this while + playing MAP20. A teleport destination lowers a great distance the first + time you land on it. Going on it again will teleport you to its original + height, and you fall from there. Maybe another type for destinations that + remember their height, then? + +October 4, 1998 +- Added say_team and messagemode2 commands and team and teamplay cvars. +- Externalized the obituary messages and added a "Strings" section to the + dehacked code. Since I'm pretty sure I'll be switching to scripted code + ala Quake, this is only temporary (along with everything else dehacked). +- Added support for showing both skull and card keys in the status bar + ala Boom. +- Added Sector_SetDamage and Sector_SetGravity line specials. +- Added another mobj flag (MF2_NOADJUST) so that you can walk on floating + bridges without worrying about them getting bumped up above your head. +- Adjused PIT_CheckThing() so that it allows stepping up on top of things + if their tops are no more than 24 units above the thing moving. + +October 3, 1998 +- Added an MT_AMBIENT mobj (doomed #14065). Its first argument determines + which ambient sound it represents. (And is valid in the range 0-255.) It + also subsumes the earlier MT_AMBIENT0 - MT_AMBIENT63 mobjs (doomed + #14001 - 14064), and P_SpawnMapThing translates them into an + instance of MT_AMBIENT. Also merged the world ambient thinker into the + mobj thinker so that all ambient sounds are controlled with a single + thinker function and not two. +- Removed sounds.h. Everything necessary to use sounds is now found in + s_sound.h +- Disabled the recognition of any display modes other than INDEX8 in + i_video.cpp. I'm no longer sure high/true color is such a good thing. + Without a major loss of performance, I can't see any way to avoid a + huge memory loss with more than a few palettes in those modes. :-( +- Did some work with ARGB8888 modes: I_Blit can now blit from INDEX8 to + ARGB8888 surfaces. The console font now gets drawn on ARGB8888 surfaces + (pretty sure it was before, but it stopped working sometime). +- Fixed the cast drawer so that the names don't get squashed together in + resolutions at least 640 pixels wide. +- Fixed bug where pressing a key with a menu active would move the cursor + to a blank line if it wasn't assigned as a hotkey. +- Added support for actually seeing skins as well as setting them in the + player setup menu. +- Fixed bug with player colors for players 5-8. + +October 1, 1998 +- Continued work with "skins." Everything works now except actually + seeing them. +- Did away with the spriteoffset[], spritewidth[], and spritetopoffset[] + arrays and moved their contents into the sprite frame structure. + +September 30, 1998 +- Started work on supporting Doom Legacy "skins." (Personally, I think + skin is a misnomer, but I'm afraid the term's probably here to stay.) +- Removed the maskdraw_t structure from r_things.c since it wasn't used + anywhere. Here it is preserved for history: + typedef struct { + int x1, x2; + int column; + int topclip, bottomclip; + } maskdraw_t; + Wonder what it was for. + +September 27, 1998 +- Fixed long-standing bug in R_DrawSprite that could cause sprites to be + drawn through the floor of a cliff if you look down just the right amount + (when the top edge of the floor is exactly two pixels above the top of + the screen). +- Added hacked-in support for colormaps with the Transfer_LightsHeights + special. ZDoom actually sets the blending through this special instead + of changing the colormap. To accomodate BOOM levels that use colormaps, + it will average all the colors in the colormap together and derive a + blend from that. Alternatively, you set the blend directly by setting + the appropriate texture name to a hex string of the format AARRGGBB. +- Fixed barrels (again) so that barrel traps work as expected. Not sure if + this problem existed in 1.14a or not, but it's gone now. +- Added ignoreInvisibility parameter to P_CheckSight(), because it is + occasionally used to determine if there is an unblocked line between two + things (not if one can see the other). +- Switched to using a logarithmic scale for pain flashes. +- Added support for Boom's push/pullers, wind, current, and friction effects. + +September 26, 1998 +- Saw this at the Team TNT message board: + + the bug has been found and fixed. What was happening was that the fake + sector was being passed instead of the real one, and this messed up + the check for whether a sector had had its sprites added to the view + already. As a result each sprite generated was being added once per + subsector rather than just once. + + So I went looking around in the code some and found this in R_Subsector(): + "R_AddSprites (frontsector)". I replaced frontsector with sub->sector, and + that seems to have done the trick. A test level I made went from 15 fps to + 35 fps (the max) with this fix. + +September 23, 1998 +- Using -cdrom creates the directory if it doesn't exist (like it used to). +- When used with -cdrom, screenshots now get saved to C:\ZDOOMDAT instead of + the game directory. +- Put back support for taking screenshots by pressing F1 with -devparm + active, since some people probably won't read the docs and realize there's + a screenshot command bound to the "Print Screen" key by default. +- Added "ticker" cvar to control display of the -devparm ticker at the + bottom of the display (so that -devparm is now totally useless). +- Changed the directory for -cdrom from C:\DOOMDATA to C:\ZDOOMDAT and added + support for using that directory to store zdoom.cfg. +- Fixed bug that caused using -devparm or -cdrom to crash the game during + startup. (They referenced the Strings[] table before it was fully + initialized.) + +September 19, 1998 +- Turned off screenwiping when moving between levels in a hub (but only if + the level the player just left has LEVEL_NOINTERMISSION set). +- Fixed a savegame bug I had added with hubs that caused the game to + forget the player's state. +- Added noise cvar to control display of sound debugging info. +- Added turn180 command to quickly turn the player around. +- Added support for the ACS thingsound(), sectorsound(), and ambientsound() + commands. +- Changed every reference to S_StartSound so that they refer to sounds + by name rather than id and specify priority information (since it's + no longer a part of the sfxinfo). + +September 18, 1998 +- Finished S_ParseSndInfo so that it has no maximum number of sounds it + can define and works with more than just ambient sounds. +- Changed w_wad.c back to using the buffered I/O functions again. (I had + done this a long time ago, but thanks to some mistakes on my part, I + ended up putting taking it out. Now it's back for good. :-) It doesn't + seem to have any effect on disk performance, but it will let me use + MikMod functions to load samples and MODs directly from the wad. +- Played around with MikMod some. With the assembly mixer, its + performance seems to be about the same as MIDAS', so I will + probably switch to it at some point. + +September 17, 1998 +- Improved support for analog joysticks by using their full range of + motion instead of treating them like digital devices. + +September 15, 1998 +- Added support for world vars and controlling scripts on other maps. +- Added the hub clusterdef flag and supporting code. +- Figured out what the problem with hub savegames was: Instead + of writing out a copy of the snapshots for each level with one, + I wrote out a copy of the current level's snapshot for each + level with a snapshot. Whoops! Easy fix. + +September 14, 1998 +- Worked with supporting hubs. For maps that belong to a hub, + whenever you exit the level, the game makes a mini-savegame + of the level. When you return, the world state is based on + the mini-savegame. Theoretically, saving games to disk should + be as simple as storing each of these "snapshots" along with + some extra info, but I couldn't get it to work. The current + level worked, but trying to go to a previously visited level + after loading the savegame crashed the game. + +September 13, 1998 +- Redid my ACS code a bit so that scripts are now kept track of + through a private linked list rather than thinkers. The only + real advantage this offers is that I have complete control + over when scripts get executed, so a script that executes a + scriptwait command will be guaranteed to run in the same tic + that the script it's waiting on terminates. + +September 12, 1998 +- Replaced my visplanes code with Lee Killough's hashing method + and got a noticable performance boost in high visplane areas + (even those with <128!). + +September 4, 1998 +- Added weapnext and weapprev commands courtesy of + Papst Johannes Jörg IV. [which were later completely + rewritten by me] +- Add support for suspending and resuming scripts (easy when + you know you can only have one copy running at a time). +- Added checks to ensure that only one instance of a script is + running at a time (like Hexen). + +September 3, 1998 +- Took out the stuff for sliding doors. You want it, then + fake it with a script. +- Ran around in hexen.wad for a while and fixed a few bugs. +- Added support for ACS scripts (except for the sound p-codes + and polywait). + +September 2, 1998 +- Added support for monsters remembering their previous target + from BOOM. +- Made the mobj's targettic a counter that decrements to zero + instead of a time relative to gametic (so that it works properly + across savegames). +- Added more mobj flags bits and consolidated invisible into it. +- Implemented all the Thing_* line specials. +- Added support for stairs that reset and/or have delays and the + sync stair builders. + +September 1, 1998 +- Fixed problem with several plat types that didn't deactivate + themselves. +- Fixed bug that caused Plat_UpWaitDownStay to act like + Plat_PerpetualRaise. +- Made NOINTERMISSION levels work by moving the check for it later + in G_DoCompleted(). +- Added HealThing special to match DamageThing. +- Added full support for the Teleport_NewMap special. Levelnum is + actually used for something in the MAPINFO now, too. + +August 31, 1998 +- Implemented Hexen's thing specials that don't use tids. + +August 30, 1998 +- Added support for Hexen pillars. +- Finished ceilings. +- Finished floors. +- Added compression of .tch files and significantly rewrote the + associated part of v_video.c in the process. Not quite the savings + I would have liked: only about 57%. +- Tried using the LZ(77?) code from the Doom utilities to compress save + games, but it was too slow to be practical. I now use minilzo which + seems to compress about the same but is a *lot* faster. As an example + of the kind of savings this offers, the size of a savegame on one + level shrank to 20% of its original size. +- Used BOOM's code to remove the savegame size limit and fix some other + savegame bugs. +- Used Killough's global boss brain state. +- Tweaked I_FatalError() so that if something really bad happens, you + shouldn't end up in an infinite recursion sequence because Printf() + gets called somewhere during the exit sequence. +- Implemented Floor_Waggle. Unfortunately, it's not the same as Hexen's + since I couldn't find any decent documentation about it and also had + a hard time determining just how every different parameter affected it + by watching it in a test level. It's close, but not the same. + +August 29, 1998 +- Added support for normal (not sync) Hexen stairs. +- Added support for Hexen's phased lighting. + +August 26, 1998 +- Continued on floors. + +August 25, 1998 +- Started getting moving floors working again. + +August 21, 1998 +- Got plats working again. +- Switched to using a linked list to keep track of active ceilings and + plats. This is similar to the way BOOM does it, except I store the + list pointers in the active entities themselves rather than seperately. + +August 20, 1998 +- Fixed a savegame bug I had introduced. They got saved as "version 115" + instead of zdoomsv?.dsg. + +August 8, 1998 - August 15, 1998 +- Did some work converting to Hexen-like line specials. Sorry, I was too + lazy to record the specific changes. + +August 7, 1998 +- Incorporated BOOM's Pain Elemental Lost Soul shooting fix. +- Incorporated some of BOOM's changes to p_map.c. +- Incorporated Killough's changes to p_sight.c. + +August 6, 1998 +- Added snd_surround cvar to control use of surround sounds. If "0", then + anything that would otherwise have been played surround is played + identically from both speakers instead. +- Added cvar_defflags variable to hold any flags automatically applied to + new cvars, the intended purpose being to allow all cvars in a config + file to be flagged as CVAR_ARCHIVE. Useful if one port of ZDoom has cvars + that another doesn't, but you still want them to share the same config + file. + +August 5, 1998 +- Finished keyboard handler and tried to create a mouse handler for the + DOS port. +- Switched to using PTC Mode IDs to describe video modes instead of + bpp since the DOS version of PTC has multiple modes with the same bpp. + +August 4, 1998 +- Created partial keyboard handler for DOS port. + +July 28, 1998 +- Fixed use of config files in paths containing spaces. (I had forgotten to + enclose the pathname in quotes when constructing the exec command string.) +- Added calls to FixPathSeperator() in a bunch of places where it was needed. + +July 27, 1998 +- Uploaded a quick fix to 1.14a that lets it load save games again. +- Renamed the project and workspace to zdoom (rather than doom). +- Created a version info resource for ZDoom and moved the system-specific + files into a new win32 directory in the code tree. + +July 26, 1998 +- Uploaded 1.14a to notgod.com along with a source patch for 1.14->1.14a. +- If FONTA?? is available, it is now used in deference to STCFN??? (i.e. + -file heretic) +- Renamed all the WICHAR?? in zdoom.wad to FONTB?? to match the naming + convention used by Heretic and Hexen. + +July 23, 1998 +- I must be an idiot! I took a fix from BOOM for freeing the lnames array too + soon and stuck it into ZDoom without really thinking about it. In BOOM (and + DOOM) lnames[] is dynamically allocated. In ZDoom, it's static since it + only needs to contain two items (the patch of the level just left and the + patch of the level being entered). Fixed. +- Using the changemap command no longer says you are leaving the map you're + entering when no title patch is provided. (Unless they're one and the same.) + +July 22, 1998 +- Added a z parameter to P_TeleportMove() to properly handle checks in the + third dimension. Previously, I was checking for this, too, but against the + thing's original position. Now I check against the desired z location. This + prevents monsters from teleporting inside of each other. + +July 19, 1998 +- Improved handling of international keymaps (such as the French one) by + moving all responsibility for determining the shifted state of keys into + i_input.c. C_consol.c no longer maintains a ShiftLOT since .data3 of the + key event will contain a character that is sensitive of the current state + of modifier keys. (i.e. .data3 contains 'a' when the A key is pressed and + 'A' when SHIFT-A is pressed.) +- Made some changes to D_DoAdvanceDemo() and G_CheckDemoStatus() so that + using the player setup menu during demo playback is now safe. +- Added a check to C_BackupCVars() so that it doesn't back up CVAR_LATCH + cvars are not saved. This is unnecessary since they don't actually + change until a new game anyway. The primary advantage of this is that + starting a new game during demo playback now uses the selected skill + level (again). +- Anything spawned by a boss shooter will now always telefrag even if + LEVEL_MONSTERSTELEFRAG is not set. +- Modifed PIT_RadiusAttack() (again) so that when a barrel is doing the + exploding, the original damage code is used. +- Removed the bitwise and against 0xff for angle in R_DrawSky() and + R_DrawMaskedSky(). Some skies in various PWADs are wider than this, and + R_GetColumn() masks it to the proper width for us anyway. + +July 18, 1998 +- Changed the unknown thing to have no gravity so that it stays at the + height it was spawned at (useful with Hexen). +- Discovered the source of a memory leak: When I added the thing_list code + from BOOM, I left out some from P_UnsetThingPosition(), so + P_SetThingPosition() was always creating a new thing_list and letting the + old one waste space. Conveyors even work now! Yay! +- Removed support for repeating the left and right arrow keys in m_menu.c + since some people had trouble with it. +- Changed D_DoServerInfoChange() so that it doesn't print messages in + single player games. + +July 16, 1998 +- Added entries for Heretic to SWITCHES and ANIMATED lumps (because I can). +- Did equivalent things for BOOM SWITCHES lumps. +- Removed MAXANIMS limit by scanning through the AnimDefs array to find out + how many entries it contains and then allocating that many anim_t's. Also + added support for BOOM ANIMATED lumps. +- Reduced the Revenant's height from 80 back to 56 to fix a problem with a + trap on DOOM2 MAP27. The new height caused the revenants heads to get + stuck in the ceiling, so the platforms they were on wouldn't lower. Since + there are probably other situations like this elsewhere, I went and gave + all the monsters their original heights back. +- Fixed a problem with BOOM's openings limit removal. Pointers to openings + get stored in drawsegs, and the realloc() of the openings didn't bother + to adjust those pointers. A simple fix in r_segs.c once I figured out what + the problem was. +- Incorporated BOOM's Medusa fix. + +July 15, 1998 +- Added Lee Killough's generalized scrollers from BOOM. +- Added Rand Phares' thing list stuff from BOOM. +- Finished support for BOOM's multiple sector thinkers and threw in the + elevator code in the process (but nothing that calls it). + +July 14, 1998 +- Started adding support for BOOM's multiple actions per sector. +- Uploaded the 1.14 binaries and source to notgod.com. +- Fixed bug that caused the bunny scroller to crash: Using 0 instead of + &screens[0] in the calls to F_DrawPatchCol(). +- Added support for the ML_PASSUSE flag from BOOM. +- Decided using a default texture for unknowns was too complicated to bother + with at this point, so I took it back out. (Left in for flats, though.) + +July 13, 1998 +- Fixed IDKFA cheat to give the correct amount of armor. +- Slightly updated and reformated editing.txt and updated it to use + the new ambient thing numbers. +- Reformatted and updated zdoom.txt. +- Created red and blue checkerboards that get substituted for unknown textures + and flats. + +July 12, 1998 +- Created a new thing that gets substituted for unknown things in a map and + things that are known but have no sprite frames (such as Doom II monsters + using a DOOM I IWAD). +- Kill and kill monsters commands now get sent over the network. +- Reformatted commands.txt to make it fit on a 76-column display and hopefully + be more readable. + +July 11, 1998 +- Renumbered the ambient things to the range 14001-14064. + +July 10, 1998 +- Renamed -nosound to -nosfx to be more compatible with most other Dooms. +- Adjusted the autoaim values used by the player setup menu to not use + such a large range (0-5000 with big steppings in-between). +- During another deathmatch session, discovered a problem on MAP03 with + spawn farthest. No matter what, the dead player would always spawn at + the spawn spot near the beginning of the level. Realized that deathmatch + spawn spots weren't recorded as 16.16 fixed point, so I adjusted + PlayersRangeFromSpot accordingly. +- Was playing around in a deathmatch a little when I tried the changemap + command and the game bombed out in Z_Free() because the block being freed + didn't have a ZONEID. So I added a wrapper around Z_Free() to pass it + the source file and line number of the caller in case this happens again. +- Discovered that I had forgotten to add the server var sending/reading + to the netgame arbitration process, so I added it. +- Added changemap command which should be able to change the level during + netgames and demos. +- Added support for cheat network commands so that they can work in netgames + and demos (if desired). +- Added hack to DeHackEd support to use the original Doom thing height's + if the thing hangs from the ceiling but the patch doesn't set its height. + +July 9, 1998 +- Improved wi_stuff.c so that it can still draw the level name even if a + patch hasn't been designed for it. + +July 8, 1998 +- Fixed aiming. This consisted of two things: First, I needed to change + the way I generated yslopetab and looked into it so that fullscreen + windows and non-fullscreen had the same relative range. (Side effect: + When the status bar is visible, you get a larger freelook range than + before.) Second, I had to adjust my calculation of view pitch->slope + from 0.5 to 0.75 times. I arrived at this value by standing on a cliff + and firing a rocket launcher with different multipliers until I found one + that looked good. +- Fixed sky scaling with different r_detail settings. +- Fixed spacing of the ammo count numbers on the fullscreen HUD. +- Hacked around in i_video.cpp and PTC's idirectx.cpp a little to support + Mode X modes under Windows 95. +- Changed C_Drawer() so that it doesn't call C_EraseLines() if the automap + is active, since it just creates junk on top of the automap. +- Changed the notify text drawer to use Doom's standard red text instead + of white. + +July 7, 1998 +- Made several changes to the code to make it more portable and removed + a few unused variables. DJGPP can now compile the machine-independant + parts with only minimal warnings with -Wall. +- Thank's to gcc's -Wall, I figured out why togglemessages didn't + work: I had left out the parentheses in Cmd_ToggleMessages + when I wanted to call M_ChangeMessages(). Oops. +- Tried compiling r_draw.c with DJGPP and discovered that it doesn't + like long file names, so I renamed everything to fit the 8.3 format. + (Stupid MS-DOS! Grr!) +- Changed the midprinter to use the hu_font instead of the console font + since it looks better and also means that the "You need a * key..." + messages don't need special treatment in the DeHackEd code. +- Changed C_AddNotifyString() to use V_BreakLines(). + +July 6, 1993 +- Created V_BreakLines() and V_FreeBrokenLines() to handle splitting of + text into multiple lines. Unlike the code I had in C_AddNotifyString(), + these will properly break lines at whitespace if possible instead of + the middle of a word. +- Stopped using the pitch field of the S_sfx table to store the sounds' + playback frequencies so that I can handle pitched sounds properly ala + some magic I found in BOOM. + +July 3, 1998 +- Went ahead and took some code from BOOM for "kill monsters" command + since it also kills losts souls spawned by a pain elemntal's death. +- Used BOOM's P_SetMobjState() since it has nifty state cycle detection. +- Removed a lot of stuff from cmdlib.c that I didn't actually use. (Kept + the CRC code around since I *might* use it.) +- Discovered that taking screenshots directly inside the screenshot command + was a bad thing because it can be called during the middle of a screen + draw. Fixed to delay using ga_screenshot. +- Changed the gamma command into a cvar and removed the code for + "floaters" from the options menu, since that was all they were used for. +- Fixed bug in alias code: New aliases would not properly clear the + next field if they were the first one in a bucket. +- Aliases now get saved to the config file. +- Added "Always Mouselook" to the Options menu. I thought it was already + there, but... It wasn't. + +July 2, 1998 +- Added autoexec cvar to determine the autoexec file (partially because + Doom Legacy decided they wanted to use autoexec.cfg--just like they + used config.cfg). +- Renamed menu_video to menu_display and added menu_video, menu_player, + and menu_gameplay commmands. +- Moved I_WaitVBL() into i_system.c and changed it to make a simple Sleep() + call because that's what it's really used for. +- Changed C_DrawNotifyText() to not draw when the menu is up. +- Added proper support for usejoystick and usemouse cvars in i_input.c +- Cleaned up the Convert() table in i_input.c by reformatting it. + +July 1, 1998 +- Tweaked PIT_RadiusAttack() to be more realistic. +- Fixed PCX writing code so that it properly indicates that the image is in + color. + +June 30, 1998 +- Added Gameplay Options menu for setting dmflags. + +June 29, 1998 +- Documented the map command. (How did I miss this?) +- Changed the map command so that it doesn't die fatally if the specified lump + doesn't exist. +- Borrowed some of NTDOOM's mouse input code (using Win32 functions instead of + DirectInput), and the mouse seems smoother under NT. Use the in_mouse cvar + to select which method of input to use. +- Added I_DetectOS() function and in_mouse cvar. + +June 27, 1998 +- Added DF_NO_JUMP and DF_NO_FREELOOK dmflags. +- Made -turbo parameter a normal cvar. + +June 26, 1998 +- Spent most of the day trying to beat MineSweeper at expert difficulty. + Sorry. :-) + +June 25, 1998 +- Implemented fraglimit and timelimit cvars. +- deathmatch is also a cvar now. +- Added q2-like dmflags cvar. It adds some new deathmatch options and also + takes over the duties of the g_falldamage and g_unlimitedammo cvars as well + as the -fast, -respawn, and -nomonsters. +- Added one second delay until respawning after death is allowed (so that when + noexit is active, and you hit an exit switch, you don't instantly respawn). + +June 24, 1998 +- Changes to serverinfo cvars now get transmitted properly in netgames, and + only the key player can change them. +- Finally added cvarlist command and removed the multiple variations of "set". +- Added support for 8 players. Using more should now be as simple as increasing + the MAXPLAYERS #define. +- Created brighter faceback graphics that better represent the player's + chosen color. + +June 23, 1998 +- Added spynext and spyprev commands. Spynext is equivalent to pressing F12 + in the original Doom. +- Added +showscores action. It gets bound to \ by default. +- Save games now hold copies of every serverinfo cvar and the level locals. + With Doom 1, they also contain a list of visited levels. +- The game now keeps a cumulative frag count for each player which is the same + as what gets displayed on the status bar during a deathmatch. +- Removed "Next Weapon" from the controls menu. I need to get the inventory + system working before I can implement it, and I don't feel like doing that + right now. +- With a little help from BOOM, sounds in spy mode now center around the + displayplayer rather than the consoleplayer. + +June 22, 1998 +- Got dynamic player translation tables up-and-running. Status bar also uses + the translation table for the faceback instead of different patches. Automap + now uses the player's chosen color in netgames instead of a fixed array + of color values. +- Left and right arrow keys now repeat in the menus (for sliders). +- Continued work on player setup menu. +- Fixed C_AddNotifyString() so that it doesn't crash if passed a string with + a newline in the middle but not at the end of the string. +- m_menu.c's text input routine now uses the user's preferred keymap. + +June 20, 1998 +- Continued work on player setup menu. +- Fixed a bug in V_Clear(): 8-bit modes ignored left parameter. +- Upped number of savegame slots to 8. +- Removed all alloca() calls by replacing them with Z_Malloc()/Z_Free() pairs. + +June 19, 1998 +- Compiled with warning level 4 and caught a few problems and potential + problems as well as some code that was never executed. (Thanks, Grant.) +- Fixed uppercopy so that it doesn't always copy 8-chars even if the passed + string is shorter. +- Removed , , , and + #includes from d_main.c. + +June 18, 1998 +- Removed R_OK #define from one of the source files and changed the typedef + for bool in doomtype.h. Also created dxcrap.c which holds some information + from dinput.lib and dxguid.lib since Microsoft seems to have left most of + the Watcom DX libraries out of its DX 5 SDK. +- Started work on player setup menu. + +June 17, 1998 +- Got GNU diff and patch to compile under Win32. I intend to use them to + distribute my changes to the PTC source along with the rest of the ZDoom + source. + +June 13, 1998 +- Fixed a shutdown bug in the new sound code. + +June 12, 1998 +- Changed i_sound.c to something inspired by BOOM. It now uses MIDAS's + auto effect channels instead of a bunch of junk left over from the + Linux port to determine which channel to play a sound on. As a result, + it doesn't seem to lose the player's weapon fire anymore. (Yay!) + Also, the snd_channels cvar is now useful. +- Made spawning of unknown things in maps a warning instead of an error. +- Changed R_CheckTextureNumForName() around to use a hash table + instead of a linear search. + +June 11, 1998 +- Added support for BOOM's -fastdemo parameter. +- Made MIDAS initialization failure a non-fatal error. +- Did a small change to R_InitSpriteDefs() so that it scans the list of + sprites backwards. +- Rewrote R_PrecacheLevel() based on BOOM's. +- Found a better way to trap Alt-Space: I listen for WM_SYSCOMMAND messages + and filter out any for SC_KEYMENU events. + +June 10, 1998 +- Removed Martin Howe's sprite rotation fix in R_InstallSpriteLump() + and replaced it with something from BOOM. +- Discovered the Win32 function RegisterHotKey() and used it to trap + Alt-Space so that it doesn't open the window's system menu. Alas, + it doesn't seem to work with DirectDraw. :-( +- Added RGB->HSV and HSV->RGB functions to v_palette.c. + +June 9, 1998 +- Removed WS_POPUP style from the ZDoom window. +- Integrated the changes in PTC 0.73b with mine, and PTC stopped working + with DirectX (again). Thankfully, I managed to get it working again. + (Sometimes I wonder if using PTC is more trouble than it's worth...) + +June 8, 1998 +- Each machine now broadcasts its userinfo in D_ArbitrateNetStart() ala + Doom Legacy 1.11. +- Userinfo settings are now properly set at game startup. +- Modified D_ArbitrateNetStart() to use the stream reading and writing + functions for setting and retrieving some game info. +- Changed the global var startmap to be the actual name of the desired map + and got rid of startepisode global var. +- Chat messages now get sent using special "ticcmds" instead of char-by-char + in a normal ticcmd. +- Layed the foundation for special network commands besides user movement. +- Pressing escape in a menu now backs up one menu instead exiting the menu + system entirely. (And backspace is now used to clear key bindings in the + configure controls menu.) +- Menu now displays messages that don't expect any specific input without + quickly hiding them away. +- Changed some stuff so that ZDoom doesn't grab the mouse when a menu is + active and it's running in a window. +- Added some code so that during a demo, if a key is bound to toggleconsole, + menu_*, sizeup, or sizedown, it will execute that command instead of + activate the menu. +- Removed F1 screenshot hack from m_menu.c. (Use screenshot command.) +- Removed support for picking menu items with the joystick and mouse. +- Integrated the changes in PTC 0.73a with my own. + +June 6, 1998 +- Added -config option in GetConfigPath(). +- Added messagemode and say console commands. +- Fixed C_AddNotifyString() so that it breaks lines without losing characters. +- Changed chat code to use whatever the user's selected keymap is instead of + always Qwerty. Did the same for the console. +- Made it possible to actually send chat messages. +- Added check for chat_on to C_DoKey() so that we don't try to do something + while the player is typing a message. +- Removed French stuff from hu_stuff.c. +- Discovered big booboo on my part. Chat hasn't been working since version + 1.11 has it? I was comparing ev->data1 with 't' in hu_stuff.c, but data1 + is a scancode, not ASCII. +- Removed RCS ID lines from all the source files. I only have RCS on my Amiga, + and that's not the machine I'm using to develop this. + +June 5, 1998 +- Created some new pr_* classes for the gib throwing code. +- Removed RNG shuffling from P_Random() since it was screwing up sync in + demos and network games. + +June 4, 1998 +- Made network ticcmd's variable length using the demo packing. +- Removed reference to turbomesage in G_Ticker(). +- Simplified RefreshPalette() so that generating the invulnerability colormap + uses fewer multipilies and no divides. + +June 3, 1998 +- Fixed P_InitSwitchList() so that the retail version is treated like the + registered version instead of the shareware. +- Removed Martin Howe's code from w_wad.c and replaced it with a combination + of code written by me and code from Boom. (Using hash tables speeds up + level loading a *lot*--far more than I expected!) +- Added key repeating to the console. (So easy, I should have done it sooner.) + +June 2, 1998 +- Removed DEVONLY macro and added DPrintf() function. + +June 1, 1998 +- Fixed a bug in C_InitConsole when it reformats the console buffer. I had + been using Printf (string); to reformat the text, but if string contained + any sequences like "%s" I would be in big trouble. So now I use + Printf ("%s", string); +- Fixed a problem with the invulnerability color map being wrong. I had + been subtracting from 4278190080 when I calculated the inverse. + (Don't know where I got that number from!) Also discovered my other + stuff wouldn't work, so I just went and switched to fp like dcolors.c uses. +- Fixed a bug in the DeHackEd text replacement code I had introduced when + I added support for ambient sounds. It was checking the names of all + sound effects, but the ambient sounds start out with no names, so I + ended up dereferencing a null pointer once I reached sfx_ambient0. + +May 30, 1998 +- Replaced lots of constant 35's with TICRATE (when measuring time). +- Switched to the BOOM random number generator. +- Added onfloor parameter to P_SpawnMobj() for when I actually support + Hexen-style maps (which have a z parameter for Things). +- Changed to using mapthing2_t's internally instead of mapthing_t's. +- Created entries for Hexen-style maps in doomdata.c. +- Added a repeat byte to DEM_USERCMDCLONE to shrink demos even more. + +May 29, 1998 +- While recording a demo, discovered that I can't telefrag monsters. + Must investigate. +- Added DEM_USERCMDCLONE command to indicate that this user command in the + demo is the same as the previous one. Drastically reduced demo sizes. +- Scrapped support for my previous ZDEM format completely and adopted + an IFF FORM instead. +- Changed all SVC_* labels to DEM_* since they have nothing to do with + server-to-client communication and everything to do with demos. + +May 28, 1998 +- Got ZDEM recording and playback working again. +- Got idea from Boom: Rewrote all occurences of P_Random()-P_Random() that + I could find so that they don't make assumptions about the order of + execution. Old demo playback improved noticably (but it still gets out + of sync easily). Even better, ZDEMs now appear to play back properly in + both the release and debug builds. + +May 26, 1998 - May 27, 1998 +- Studied the code generated by the Hexen utility ACC and wrote a utility + capable of disassembling BEHAVIOR lumps. + +******* + +May 25, 1998 +- Released ZDoom 1.13 +- Made gibs toggleable with testgibs cvar. +- Created zdoom.wcf file. +- Wrote some more documentation. +- Finished demo.wad +- Finished ambient sound support: + Point random and periodic. + World (& surround) continuous, random, and periodic. + Limited SNDINFO lump support. +- Added the new level flags to the MAPINFO parser. + +May 23, 1998 +- Continued work on ambient sounds: + Positional sounds with specific volumes work. +- Fixed intermission maps for Doom I. (I had broken them when I stopped + identifying maps by episode and level numbers.) +- Added some more level flags to generalize behavior that had previously + been restricted certain levels. Also removed LEVEL_SECRET and didsecret + references, since I can now mimic them using LEVEL_VISITED. + +May 22, 1998 +- Started support for ambient sounds: + Positional, continuous sounds work. +- Fixed coop intermission stats. +- Fixed bug in I_FinishUpdate() that could cause it to crash if the + fps meter was up and it was called in very quick succession. +- Tried the following to fix the NT mouse bug: + Read the mouse after reading the keyboard. + Poll the mouse's position using GetDeviceState(). + Both methods failed to fix the problem. :-( +- Fixed handling of secret levels in G_WorldDone(). +- Fixed problem with finale writer showing the full text of a message + during wipes. +- Fixed display of cluster entry text in G_WorldDone(). +- Discovered that R_DrawMaskedSky() doesn't work for sky textures that + are actually masked (probably due to the way the composite texture + generator works, but I could easily be wrong). Will investigate + further later. +- Discovered that DITerm() was never being called, so I threw a call to + it into I_ShutdownGraphics(). +- Failure to specify a next map in the MAPINFO now repeats the current + map instead of crashing. +- Added support for maps without music specified in their MAPINFO. + +May 21, 1998 +- Finished MAPINFO parser, began work on demo (and test) wad. + +May 20, 1998 +- Started work on a parser for MAPINFO lumps. + +May 19, 1998 +- Changed ST_doPaletteStuff() to be dynamic and use a larger range of + blendings. +- Added W_FindLump() command. +- Changed W_CacheLumpNum() so that it allocates an extra zero byte after + the end of the lump. +- Modified dehacked code to parse the patch file from memory so that + they can be stored inside a wad file. +- Added limits command to list the state of all dynamic limits. +- Added default binding to the SysRq (Print Screen) key: "screenshot". +- Discovered the pause key wasn't getting bound by default. Fixed. +- Changed .cfg comments to anything starting with '//' rather than lines + starting with ';'. +- Changed the default config file to zdoom.cfg and added the -config + parameter to choose alternate ones. (Blargh! Doom Legacy decided to + use config.cfg as its default config file, when I've been using it + all along!) + +May 18, 1998 +- Tried adding support for saving TGA screenshots and discovered that PTC's + image class doesn't actually do anything for a save. +- Changed M_ScreenShot() to accept a filename (if desired) and added a + screenshot console command that can be used to specify one. +- Changed WritePCXFile to use ARGB values instead of RGB triples so that + I can pass it the colors array from a palette_t. +- Bumped the screenshot limit in M_ScreenShot up to 10000 different + images (properly this time); changed the I_Error to a simple error + message (no reason to kill the program if you can't take a screenshot); + and added support for dumping true color files. + +May 16, 1998 +- Removed the MAXSPECIALCROSS limit. +- Made palette blending dynamic and added the testblend command to + make sure that it actually works properly. +- Moved the gamma correction stuff from v_video.c into v_palette.c. +- Fixed the color of the red player in the automap. +- Changed I_SetPalette() to take a pointer to an array of uints instead + of RGB triples and avoid gamma correction since that should be done + before the call to I_SetPalette(). + +May 15, 1998 +- Added V_Clear() function to set a rectangle to a solid color. +- Added dmflags, fraglimit, and timelimit cvars. Alas, they are just + placeholders for the moment. + +May 14, 1998 +- Discovered a bug in Doom Legacy's assembly R_DrawColumn while I was + in the process of rewriting it: They were calculating (centery-dc_yl) + when it should have been (dc_yl-centery). +- Rearranged FixedDiv_ASM() to make it pair better on a Pentium and + aligned the main division code to a 16 byte boundary. + +May 13, 1998 +- Removed the next and prev links from the definition of a vissprite_t + since they were used only for the bubble sort. +- Changed R_SortVisSprites() to use the stdlib qsort() function instead + of a bubblesort, the end result being that scenes with a lot of sprites + are a *lot* faster than before. For means of comparison, I played DOOM2 + MAP30 until I got MaxVisSprites up to 1824, and the lowest my framerate + ever went was 13 fps. That's compared to my earlier run where a mere 992 + sprites slowed me down to about 3 fps. +- Fixed bug in the C-based R_DrawFuzzColumn?()s: I wasn't properly + masking fuzzpos when I added 3 to it at the end. +- Added preliminary C-based ARGB drawers to r_draw.c. They work, but + slower than I would like. +- Changed the main column drawers in r_draw.c into pointers that can + point to different routines depending on the screen depth (and/or + presence of assembly/MMX routines). This is essentially the route + DOSDoom takes, except I didn't split r_draw.c into two files. + +May 12, 1998 +- Fixed the below bug. I now set dc_mask to 0xff at the beginning of + R_DrawVisSprite() since it wasn't always large enough. A nice side + benefit of this is that it allows for taller sprites than before. + (Considering that I added dc_mask a few weeks ago, I'm surprised it + took me so long to notice this!) +- Discovered a weird bug. Things were occasionally being drawn with their + heads being repeated near their feet but still clipping to the original + shape of the thing. In DPaint, I could do this by drawing the thing once, + then turning the background into a stencil so I can't draw over it and + drawing the thing lower but in the same horizontal position. + +May 11, 1998 +- Started adding gibs (sprite grouping in w_wad.c is always enabled now). +- Started adding support for RGB modes in various spots. +- Separated all the V_DrawPatch* functions into various wrappers and + column drawers. This makes it easy to use the same function for both + indexed and direct color modes and to add more (which I have done) + without too much work. +- Created R_DrawSky() out of first part of R_DrawPlanes() for + double sky drawing. Created R_DrawMaskedSky() that draws masked + sky textures (i.e. the front one for a double sky); it can also + properly tile any height sky but at a performance hit. +- Moved definition of skyiscale from r_things.c int r_sky.c and split + it into sky1iscale and sky2iscale. Also created their inverses: + sky1scale and sky2scale. +- Added r_stretchsky cvar to stretch the sky if it isn't taller than + 128 pixels. +- Rewrote DimScreenPLoop() so that it should be slightly faster now. + Still has lots of AGI stalls, though. :-( + +May 8, 1998 +- Added detail mode setting to display options menu. +- Implemented horizontal pixel doubling. +- Added ds_colshift to go along with ds_colsize. +- Changed R_ExecuteSetViewSize() so that the view window it creates is + always a multiple of 16 bytes wide. +- Moved definition of rowbytes out of tmap.nas and into r_draw.c and + renamed it dc_pitch. Also created ds_colsize variable. Renamed + ASM_PatchRowBytes() to ASM_PatchPitch() and created ASM_PatchColSize(). +- Moved the call to I_BeginUpdate() in D_Display() after the call to + R_ExecuteSetViewSize(). This lets it update the display pitch + properly based on any changes to detailyshift. Previously, it would + use the old pitch for one frame before switching over, which is why + it was crashing yesterday. + +May 7, 1998 +- Started adding detail modes back in. Got vertical doubling working + although I ran into a few unexpected problems. Also crashes when I + switch from doubled to non-doubled. :-( +- Added fullscreen option to video modes menu. +- Created a "Video Modes" patch and changed the "Video Options" patch + to "Display Options." + +May 6, 1998 +- Fixed the drawing of the faceback on the status bar in network games. + (I can't believe I messed that up!) +- Added fragcount to player quit (netgame) messages. +- Added -noidle parameter to disable lowering of ZDoom's priority to + the idle class when the window loses the focus (so that running a + netgame on a single machine doesn't slow down too much because one of + the sessions only receives processor time during idle moments). +- Removed the need for the leading . in IP addresses for -net. +- Added support for different ports per machine in network code. +- Changed i_net.c so that Win32 platforms now print descriptive errors. +- Fixed -net parameter so that address list can end at +commands. +- Added player obituaries. + +May 5, 1998 +- Adjusted options menu code so that pressing ENTER, T, and D always do + their special functions when in the video modes menu and not just when + the current item is of type screenres. +- Hacked double buffering into PTC's idirectx.cpp. Why? Because it + improves compatibility with a lot of video cards under NT (like my + old one) that don't support locking the primary surface directly. +- Mucked around in PTC's idirectx.cpp for several hours and finally got + it to work properly in fullscreen. Yay! (I really hope a future release + has proper support for this built in.) + +May 4, 1998 +- Changed (PTC's) idirectx.cpp so that it allows Ctrl-Alt-Del in + exclusive mode. +- Looked through V_PrintStr2() and finally realized why it was crashing + on non-MMX machines: I failed to check the status of UseMMX before + calling EndMMX(). + +May 1, 1998 +- Downloaded PTC 0.72. It still gets slow on the blits, but at least now + I have the source code for it. +- Tried using PTC's BitBlt() inside I_Blit() and came across a weird + problem: The more blits I do, the slower they get. That sucks. +- Changed the focus-losing and gaining mechanism in i_input.c. Instead + of sending pause events, it just pauses the sound. Changing fullscreen + video modes caused the window to lose and regain its focus a bunch, and + it was messing up the pause sending code, sometimes leaving the game + paused after a mode change. +- Changed R_PlaneInitData() so that it allocates the fixed_t arrays + separately instead of all together. +- Played Blood for a little bit. That, and a prior suggestion concerning + rocket jumping made me decide to make a slight tweak to the freelook + code: You can now look down twice as far as before. + +April 30, 1998 +- Figured out why PTC clipping windowed modes larger than 512x384: + They were larger than the initial window size! I work around it + by resizing the window and then reinitializing PTC. +- Moved some variable declarations out of i_input.h and into + i_input.c, eliminating some in the process. +- Realized that C_AddNotifyString() really *was* perpetuating changes + to its input string. Now I make a copy of that and work with it to + save myself some headaches. Plus, the const identifier is now 100% + correct. + +April 29, 1998 +- Changed R_DrawColumn_ASM() and R_DrawTranslucentColumn_ASM() so + that they check the size of the column *before* looking into + ylookup and columnofs (thus avoiding the occasional page fault). +- Discovered that R_ExecuteSetViewSize() could be called outside of + D_Display(). In this case it was in G_DoLoadGame(), and that + messed things up when I used the -loadgame parameter on the command + line. Now R_InitBuffer() locks the screen before grabbing the + buffer pointer and pitch. + +April 28, 1998 +- Changed cvar() function so that if a cvar of the specified name + exists, it still changes the cvars flags. (i.e. it gets loaded from + the config file before this function is called.) +- Added win_stretchx and win_stretchy cvars to stretch the windowed + display. +- Fixed hang at shutdown: wasn't decrementing counter in I_WaitVBL(). +- Received and installed 128 MB of RAM and a 32x CD-ROM drive. :-) +- Got ZDoom working in a window through PTC. It doesn't do fullscreen + yet, but that's only because I haven't written any code to handle it + yet. It also gets into an infinite loop during shutdown. (Should be + easy to fix.) + +April 25, 1998 +- Started working on PTC-ized i_video.cpp. +- Weird palette problem now. When switching modes, ZDoom will only + very rarely set the palette properly. Me guessing it's a Win95 + problem, since I didn't see this under NT. Shouldn't really matter + since I'm switching to PTC anyway. +- Fixed fuzzoffset[] initialization. I was using screen[0]'s pitch + without first locking it to ensure that the value stored in the + screen was valid. + +April 24, 1998 +- Discovered I have a problem adjusting the fuzzoffset[] table + dynamically. Looks like it still keeps its old values. Will + investigate further tomorrow. +- Finished the video modes menu. My options menu code is nowhere near + as neat as I would have liked. Oh well... +- Implemented mode testing from the video modes menu. D_ProcessEvents() + was hacked to make it work. (There might be a better place, but this + was the first function I saw, and it works.) +- Figured it out: I wasn't reallocating negonearray when I resized the + screen. Doh! Moved its initialization from R_InitSprites() into + R_MultiresInit(). For consistancy, I now allocate screenheightarray + and xtoviewangle in R_MultiresInit() instead of V_SetResolution(), too. +- Noticed I seem to have a problem with the playersprites now. Some + columns aren't getting drawn completely. Which ones and how much is + missing seems to vary depending on the game state. This is worse the + wider the sprite is drawn. At 320 wide, I can't detect it, although + if it covered the entire width of the screen, it would probably pop + up. Don't know what's going on here, since it worked fine before. + When did this happen? + +April 23, 1998 +- Discovered that the boolean being used in i_video.c was only a byte, + so I looked through the standard header files, and it looks like + rpcndr.h is the culprit with this line: + typedef unsigned char boolean; + Went through all my files where I've defined __BYTEBOOL__ by hand and + changed all occurances of boolean to bool. Then I found out that that + caused problems with variables that had been declared as boolean in + header files, so I changed all the remaining instances of boolean to + bool. +- Started work on the video modes menu. + +April 22, 1998 +- Discovered I wasn't locking the back buffer in wi_stuff.c when + I wrote drew the background on it. Fixed. +- Added code to actual change the screen resolution and discovered I + wasn't reallocating the VisPlanes' top and bottom arrays, so you + couldn't switch to a screen larger than what you started with. Fixed. + +April 21, 1998 +- Started work on dynamic resolution changing. Most of it was already + done when I added the multires support. Just need to change the size + of the display surface now; everything else seems to works. +- Fixed evil bug in V_SetResolution(): I had been allocating + xtoviewangle[] with one too few angle_t's. Ouch. +- Fixed a bug in AddToHash() that caused it to "forget" the previous + contents of a bucket when a new entry was added to the beginning + of the bucket. +- Added a callback to the screenblocks cvar, so that ZDoom will sense + changes to it and adjust the screen as needed. +- ...I now allocate two screens for the status bar. If it's not scaled + I continue drawing to the screen as before and pretty much ignore the + second buffer. However, if the status bar is scaled, then I draw all + the changes into the second buffer and then blit the entire thing onto + the screen. It works, but it's also slower. +- Added support for scaling the status bar (use st_scale cvar). When I + did this, I noticed that V_DrawPatchStretched() looks horrid when it + draws multi-post columns, because it doesn't line them up properly. + Plus, the areas that got updated weren't being drawn in exactly the + same spot as what appeared on the screen, so... +- Changed status bar code so that widget coordinates are relative to + the status bar instead of the screen, which makes the next change + easier... + +April 20, 1998 +- Changed the status bar code so that the status bar surface is only as + wide as the status bar and not the underlying screen. +- Fixed the wipe: Inside wipe_doMelt(), I had neglected to account for + the fact that pitch desribed bytes, but d described shorts. +- Removed the use of DDraw's blitter inside I_Blit() since I was still + having problems with it. Now I do it myself, and it works. +- Fixed blitting: needed to make sure both surfaces were unlocked. +- Got the program running again. Blitting surfaces doesn't work yet. :-( + Neither do the wipes. (They skip every other line.) +- Removed the fractional part from the fps display. +- Got the code to a point where it builds again. + +April 18, 1998 +- Added new functions and changed some code in i_video.c to handle + screens as DDraw surfaces. +- Changed R_VideoErase() to take a rect as a parameter and call V_Blit(). + +April 17, 1998 +- Removed SCREENPITCH, SCREENWIDTH, and SCREENHEIGHT variables from + doomdef.c. Now I need to remove all references to them. +- Cleaned up v_video.c somewhat in preparation of integrating PTC with + the video code: created a screen_t structure; transferred SCREENWIDTH, + SCREENHEIGHT, and SCREENPITCH into the screen_t; added some SHORT() + macros where I had omitted them; and fixed some spots where I had + left SCREENWIDTH intact from the original Linux code when it was really + referring to screen pitch. Also added a small amount of code to handle + different bit depths. +- Moved registration of vid_* commands out of c_commands.c and into + i_video.c where they belong. +- Fixed Printf() routine in c_console.c so that it doesn't apply + printxormask to control characters. + +April 16, 1998 +- Added code to i_input.c so that it puts the game in the idle priority + class when the user switches to another window. It also pauses single + player games now, too. +- Added some code to scroll the sky lixe Hexen. Still need to make it + configurable, but at least I know it works. +- Tried making some taller (good-looking) skies. I sucked at it. +- Fixed R_DrawFuzzColumn_ASM so that it never draws columns slightly too + tall. (When drawing the odd pixels before the loop, I had been using + ebx and bl for two very different tasks. Now I use bh and bl instead.) + +April 15, 1998 +- Removed tutti-frutti effect for textures 1, 2, 4, 8, 16, 32, and 64 + units tall. Also allow textures taller than 128 units now. +- Tried holding the sky's vertical position constant when freelooking. + IMO, it's actually worse than letting it move: You can still see it + wrapping, and it looks weird, too. I guess I'll just have to draw + some taller skypics if I want something that really looks nice. +- Adjusted P_FindFloor() and P_FindCeiling() to check the health of + corpses intead of their tics to determine if they have been raised. +- Set the MT_SKULL height back to 56 units from the 30 I had previously + set it at, since they were occasionally getting stuck in the floor. + +April 14, 1998 +- Stayed on MAP30 for about 1.5 hours. MaxVisSprites got bumped all + the way up to 992, and it was slooowwww (except in the corners). Also + noticed that the plats would sometimes get stuck going up, and I + shot right through the resurrected corpses. Must fix tomorrow. + Me go bed now. +- Adjusted the heights of most things to make them better match + their image sizes. Some were okay as they were, while others were + way off. +- Did a very quick netgame to see how things looked. Some things are + too short (like the torches) and others are too tall (like the + barrels). +- For all intents and purposes, 3D collision detection is now done. + There is only one potential problem I can foresee: With enough + vertical velocity, an object could pass right through another + object in midair. I don't think situations like this will arise very + often (if at all), so I'm not going to bother rewriting all my new + code to fix it. At any rate, it's still a lot better than it used + to be. +- Added targettic to mobj_t to create a delay before missiles can + impact the thing that shot them. This fixes the problem of missiles + exploding in the shooter's face before they get anywhere. +- Adjusted P_FindFloor() to search neighboring blocks in the blockmap. + This solved the problem of occasionally falling into things. Did the + same thing to P_FindCeiling(). + +April 13, 1998 +- Worked on more thorough 3D collision detection code than my + previous attempt. (At least it doesn't crash now!) FIXME: + Missiles are often exploding right in front of the shooter's face. + It's still possible to land inside of monsters sometimes. +- PIT_RadiusAttack() can now throw things around in three dimensions. + The only real benefit of this is that it allows for rocket jumping. + (Which is still pretty cool and well worth the effort of coding it.) +- Made health bonuses and muzzle flashes translucent. +- Fixed bug with Arch-Vile resurrecting a 25% or 75% translucent + monster. Did equivalent thing for exploding missiles. +- Put idmus cheat and command back. +- Added CVAR_CALLBACK flag for non-latching cvars. +- Added map command to the console. +- Modified G_InitNew() and associated code to use skill cvar. +- Implemented proper cvar latching. +- Hooked localization code into g_level.c. This also cleaned up + the text patching code in d_dehack.c somewhat, since level names + and cluster messages are no longer special cases. + +April 12, 1998 +- Multi-language support is pretty much done. A nice benefit of this + is that it makes DeHackEd text replacement support easier. +- -iwad and -deh parameters now automatically append the appropriate + extension (.wad or .deh) if none is specified with them. +- IdentifyVersion() now sets gamemission according to which IWAD + it finds. +- Removed -shdev, -regdev, and -comdev parameters. +- Fixed inadvertant bug in st_new.c that prevented ZDoom from + working with the shareware IWAD. I had previously been loading + the ammo patches with W_CacheLumpName() which bombs out if it + can't find a named lump (like CELLA0 which isn't in the shareware + WAD). Now I check for the presence of the lump before I try to + load it. + +April 11, 1998 +- Created strutil utility to create string lumps for ZDoom. Also + created source files for strutil containing the English and French + translations. (Though English will still be stored in the + executable as a fallback and to assist with DeHackEd patch text + replacement.) + +April 10, 1998 +Not much done today: +- Added g_unlimitedammo cvar. +- Added optional fall damage code originally created by Andy Kempling. + +April 9, 1998 +- Fixed the pickup of health bonuses. Before, the bonuses maxed + out at deh_MaxHealth. Now they max out at deh_MaxSoulsphere. +- Added I_SetTitleString() so that we can once again display the + game banner at startup. +- Removed -wart parameter. +- Completely rewrote the tab completion code. :-) It still works + the same from the end-user's point of view, but now the code is + a whole lot cleaner and more flexible. + +April 8, 1998 +- Implemented tab completion for the console. The associated code + is really convoluted, but at least it works. +- Implemented monster infighting for DeHackEd patches. It + was really easy once I looked in the DeHackEd source and + figured out that it was modifying PIT_CheckThing(). Too bad + I didn't do this a day earlier... + +April 7, 1998 +- Updated the documentation and uploaded 1.12 to cdrom.com. +- Put the integer divide code back in FixedDiv_ASM(). + I'm pretty sure the real problem was with my overflow + detection code, which I fixed yesterday when I put in + the float code. It works properly now and always + rounds down. (Some code such as the sprite drawer assumed + that this was the case, but using floats rounded to the + nearest integer.) I just don't understand why the problem + didn't show up much sooner. + +April 6, 1998 +- Added am_showsecrets, am_showmonsters, and + am_showtime cvars. +- Added V_DrawPatchTranslatedCleanNoMove() and + V_DrawTextClean(). Changed console notify text + code and automap text code to clean scale their + text. +- Made a change to P_CrossSubsector() that ought + to speed things up marginally. +- Fixed a small bug in P_DivlineSide() that was + in the original id code. +- Rewrote FixedDiv_ASM() to use floating point + math, and it worked. Also removed division by + zero check, since it appears it's still being + called with b==0. It looks like DOOM doesn't + ensure that it never divides by zero and makes + an assumption about the way FixedDiv() will + handle these cases. +- #defined NOASM to disable the use of assembly + routines, and it seemed to run fine. Recompiled + with assembly routines except FixedDiv_ASM() and + it still worked. + +April 3, 1998 +- This crashing stuff is getting even weirder. At + first, if I disabled optimization in the release + build, it went away. Now it's showing up under + all configurations, and I haven't done anything + to the code. I'm at a loss as to what to do. :-( +- Fixed an obscure bug in FixedDiv_ASM(). When it + overflowed, it was popping esi instead of ebx. + Also added a check for division by zero. + +April 2, 1998 +- Did some bug hunting. The problem is happening in + P_CrossSubsector(), so it's likely something that + happens before then, since I never touched that + function. +- Moved the FPS drawer in I_FinishUpdate() before + the -devparm dot drawer. + +April 1, 1998 +- Added Andy Baker's stealth monsters code. Upon + tessting, a discovered the release build was still + crashing even without loading a .deh file. My guess + is that this is the same problem I had on the P60, + and adding the DeHackEd code just reorganized things + enough for the problem to show up on my machine too. +- Changed P_TouchSpecialThing() so that picking up a + power plays a surround sound. +- Continued DeHackEd support. Most text strings now + get replaced, and almost all miscellaneous info is + supported as well. Still crashes in the release build. + +March 31, 1998 +- Continued work on DeHackEd support. Everything except + miscellaneous info and text changing is supported. + Unfortunately, my release build is experiencing crash + problems not present in the debug build now. :-( +- Ripped the MHFX_LAXSPRITEROTATIONS fix out of + DOSDoom's r_things.c. + +March 30, 1998 +- Started work on DeHackEd support: things, frames, + and weapons done. Sounds mostly done. +- Added minimal code to handle changes to userinfo cvars. +- Changed player movement code to allow for very minimal + corrections to momentum while in mid-air. +- Did a quick test of z-checking for collisions. Needs + more work; disabled for now. +- Optimized FixedDiv_ASM() further using a neat absolute + value trick I discovered on a website somewhere. +- Did the same thing for P_BulletSlope(). One unexpected + twist: bullets always hit walls no matter what their slope. +- Added shoot up/down for projectile weapons with a + quick hack to P_SpawnPlayerMissile(). +- Moved ysheer out of player_t and into mobj_t as pitch. +- Changed P_ExplodeMissile() to set missile explosion + sprites translucent. +- Changed D_DoomMain() so that it always loads zdoom.wad + first instead of second. +- Added m_alloc.(c|h) so that I can finally check to + make sure I get all the memory I ask for with malloc(). +- Finished automap overlay. Use am_overlay cvar. +- Moved automap framebuffer boundary determination out of + AM_LevelInit() and into AM_Drawer(). Did other mucking + about in the automap code so it clips the automap to the + view window when the map is overlayed on top of it. + +March 29, 1998 +- Jotted down some code for truecolor routines. + +March 28, 1998 +- Worked on automap overlay. +- Changed C_DoKey() to return true if the key generated a + command, and false if it didn't. +- Automap can now rotate. Use am_rotate cvar to control it. +- Finished new HUD (for now). It gets the job done, and it's not + too cluttered. + +March 27, 1998 +- Continued work on new options menu: Removed old sound menu. + Created new menu title patches. Created controls menu. + Created video menu. + +March 26, 1998 +- Started work on the new options menu. +- Created binddefaults command. +- Created a bunch of menu_* commands to access the different + menus directly. Also added some of them to the default + bindings string. +- Fixed sky height bug. The key is that skytexturemid is NOT + resolution-dependant. It is a constant. +- Changed yesterday's sky height fix so that it is based on Doom + Legacy's aspect ratio correction rather than what DOSDoom did. + (BTW, this was not done in the 1.11 Doom Legacy source. :-) + +March 25, 1998 +- Fixed sky height with a little help from DOSDoom. +- Started work on the new HUD. Not yet sure what I like. +- Created the C version of Print2CharP_MMX. It sucks. I know there + must be a clever way to do it using bit shifts and masking, but + I don't feel like persuing it right now, since I have an MMX + machine, and MMX makes it very easy to do. + +March 24, 1998 +- Ran ZDoom on the Pentium 60 sitting next to me. It crashed whenever + I tried to enter a level. Some testing is obviously called for. :-( +- Added code to check for the presence of MMX support. +- Created misc.nas and moved the assembly versions of FixedMul() and + FixedDiv() into it. Also created an assembly inner loop for + V_DimScreen(). Also created an assembly routine to plot one conchar + to the screen (Print1CharP) and an MMX version that doubles the + conchar in size. +- Made command parameters in commands.txt consistant with other + parameter lists. (<> for required params, [] for ones that aren't.) + Also added brief descriptions of the different cvar types at the. +- Removed idmypos command. It was redundant with the + "toggle idmypos" command. + +March 23, 1998 +- Added dimamount and dimcolor (defaults to gold) cvars for + V_DimScreen() so that it can shade the screen to any color instead + of just darkening it (although it will revert to its old behavior if + translucency is disabled). +- Added assembly version of R_DrawFuzzColumn as well as a proper + assembly version of R_DrawTranslucentColumn(). +- Changed fuzztable in r_draw.c from 50 to 64 entries so that I can + use a simple mask in R_DrawFuzzColumn() instead of conditionals. + This should speed up that loop significantly (especially once it's + in assembly). Also removed references to frac and fracstep from + R_DrawFuzzColumn() since they weren't needed. +- Can't seem to get V_DrawPatchFlipped() to position patches properly + (they keep getting drawn too far to the left and up), so for now, + it just calls V_DrawPatchIndirect(). +- Added special case to V_DrawPatchStretched for full-screen patches. + Also added a scrn parameter to F_DrawPatchCol to accomodate this. +- Changed cyberdemon and spider mastermind sight and death sounds + in the cast finale to surround. +- Changed brain's pain sound to use ORIGIN_SURROUND2. That way, the + things it throws out won't override it. +- Added ORIGIN_AMBIENT3-4 and ORIGIN_SURROUND2-4 to s_sound.(c|h). + +March 19, 1998 +- Fixed UpdateCursorPosition() in i_input.c so that mouse + sensitivity is independent of the framerate. +- Increased speed of text wipe in f_finale.c. +- Added V_DrawRedTextClean(), V_DrawWhiteTextClean(), and + V_DrawTranslatedPatchStretched(), and V_DrawTranslatedPatchClean() + to v_video.c. +- Fixed bug in V_DrawPatchStretched(). Was using unsigned ints where + I should have used signed ints. +- Rewrote F_Ticker(). +- Specifying -nomusic no longer causes I_InitSound() to allocate + channels for MOD music. +- Changed several V_DrawPatch()es and V_DrawPatchDirect()s to + V_DrawPatchClean() and V_DrawPatchIndirect() in various source files. +- Added V_DrawPatchIndirect(), V_DrawPatchClean(), and + V_DrawPatchCleanNoMove() to v_video.c. +- Made lots of changes relating to level and cluster handling. +- Fixed problem in wi_stuff.c that prevented par times from appearing + on Doom II levels 12 and above. + +March 18, 1998 +- Changed idmus command to changemus. Now it expects its input + to be an actual song name. (Consquently, the idmus cheat is gone.) +- Moved stuff from S_music[] into LevelInfos[]; +- Changed all references to leveltime, totalsecret, totalkills, and + totalitems to level.time, level.total_secrets, level.total_monsters, + and level.total_items respectively. levelstarttic was never used; + got rid of it. +- Removed mapnames* arrays from hu_stuff.c and some ST_MAP* #defines + in st_stuff.c. +- Moved drawing of level name in automap out of hu_stuff.c into am_map.c. + +March 17, 1998 +- Started laying the framework for better customizability of maps. + (Any lump can be a map, use any map for the next and secret maps, + give custom maps a name, custom par times, etc.) +- Played at 640x480 for about 1.5 hours trying to get my machine + to crash. I have had a report of intermittant crashing possibly + related to high resolutions, but have been unable to duplicate + the problem on my machine. On a side note, 640x480 is way too slow. + Doom95 does ~32 fps at 640x400, and Duke 3D does ~25 fps at 640x480. + I get ~10 fps at 640x480 and ~12 fps at 640x400. Wish I knew how + they do it... + +March 16, 1998 +- Hacked in some code into S_ChangeMusic() to allow it to play songs + stored as individual files on disk. Added primarily because I + have a large collection of MODs, and I don't want to be forced + to pick which ones I want to listen to when I start the game + (by specifying them with the -file parameter). +- Discovered the Win32 Demo Programming FAQ. Now I can disable + code segment protection so self-modifying code can stay in + the same segment as all the other code instead of hiding in + the data segment. +- Put in the R_DrawColumn code from Doom Legacy. Took me awhile to + realize that ylookup and columnofs are now pointers instead of + arrays. + +March 14, 1998 +- mb_used changed to a float, so the heap doesn't need to be an + integral number of megs in size. +- Added -heapsize parameter to set size of zone heap at run time. +- Increased size of demoname[] from 32 to 256 chars. +- Rewrote snippets of -playdemo code so that demos can be played + from any directory and with any path. +- Removed all references to basedefault, since it's been replaced + by configfile. +- Fixed a really dumb bug in FixPathSeperator. Was initializing + c to progdir instead of path. Now you can add lumps in different + directories, and still refer to them by name. +- Reformatted w_wad.c for 4 character tabs. +- Looked through the PTC archive. It needs better documentation, but + I think I'll probably switch to it for the third release of ZDoom. + +March 13, 1998 +- Added back some of the stuff I had originally added to w_wad.c. +- Borrowed BT_JUMP and BT_DUCK from DOSDoom. Also added jumping code. +- IDFA and IDKFA now include the backpack. +- Downloaded Prometheus Truecolor. Trying to decide if I should use it + for high- and true-color support. +- Added support for caching the translucency tables to disk. + (TODO: Compress this file.) +- Added support for 25% and 75% translucency (because DOSDoom 0.60 + has it.) +- Copied w_wad.c and w_wad.h from DOSDoom 0.60. (decided not to + bother trying to get PACK support in) +- Moved ConChars data into zdoom.wad as an ordinary patch. zDoom now + generates the neccessary data on the fly. +- Removed MAXCEILINGS limit. (was 30) +- Removed MAX_DEATHMATCH_STARTS limit. (was 10) +- Removed MAXPLATS limit. (was 30) + +March 12, 1998 +- Rewrote P_FindNextHighestFloor() so that it doesn't use an internal + array (thus also removing the MAX_ADJOINING_SECTORS limit). +- Removed some files from the code directory I had added but never used. +- Removed MAXSEGS limit. (was 32.. What are solidsegs anyway?) +- Removed MAXDRAWSEGS limit. (was 256) +- Now allocate R_DrawSprite()'s clipbot and cliptop arrays inside + R_MultiresInit() instead of each time the function is called. Should + have done this in the first place, but I obviously wasn't thinking. + One particularly sprite-laden scene went from ~25 fps to almost 35 fps. +- Created R_MultiresInit() function. Now V_SetResolution() calls it, and + it calls the various R_*() functions related to supporting multiple + resolutions. +- Changed the default am_gridcolor to a decent color that actually fits + with the rest of the color scheme. +- Took a cue from WinDoom and split my keyboard handler between the + DirectInput code and the window's message handler. Ugly, but at least + now it handles Pause and Alt-Tab properly. (The original problem with + Alt-Tab, incidentally, was that I was failing to reacquire the keyboard + when I regained the input focus.) +- Inserting text at the command line in the console now works properly. +- Pressing ` to hide the console now clears the command line. This is + the same behavior as Quake, but previously only Escape would clear the + command line in ZDoom. I found that to be too annoying. +- Pressing up and down arrow keys in the console to scroll through the + history now ensures that the cursor is always visible. +- Changed BuildString() so that if it is called with argc==1, it just + returns a copy of the string unmodified instead of sticking it in + quotes if it contains a space. +- Renamed setcolorbyname to setcolor. The former was just too long. +- Added setcolorbyname command and corresponding V_GetColorStringByName() + function and X11R6RGB lump listing a bunch of named colors. + +March 11, 1998 +- Added crosshair cvar and corresponding code to draw the crosshair. + Put some cheezy crosshairs in zdoom.wad, too. (Now if only you could + actually aim up and down...) +- Added V_DrawLucentPatch() function to draw translucent patches. +- Added freelook, lookspring, lookstrafe, m_pitch, m_yaw, m_forward, + and m_side cvars. + +March 10, 1998 +- Added invertmouse cvar. +- Put the colon back into the "startskill..." message in d_net.c. +- ylookup[] and columnofs[] tables in r_draw.c are now allocated + dynamically based on screen size. Hacked this into R_InitFuzzTable(). +- Status bar finally properly draws borders to the left and right + of itself if the screen is wider than it is. +- Added documentation for am_* and developer cvars in commands.txt. +- Discovered that lines not yet seen but visible thanks to the + automap powerup were not color-configurable. Changed it. +- Changed all color #defines in am_map.c into ints that get + initialized from color values in cvars each time + AM_initVariables is called. Also added back support for the + original automap color scheme regardless of what the user's colors are + through the am_usecustomcolors cvar. +- In single player, automap can now draw the player's arrow using + any color and not just WHITE. +- Removed all references to lightlev in am_map.c, including the + AM_updateLightLev() function. The "strobe" effect was really cheap + anyway, never used, and will be fairly difficult to implement + cleanly when I make the automap colors customizable. +- Changed I_Error() call in ParseHex() to a Printf() call. +- Removed "extern byte *demo_p;" from d_protocol.c. It didn't need to + be there anyway. +- Added V_GetColorFromString() to v_video.c. +- Changed BASEYCENTER #define in r_things.c from + (100-((SCREENHEIGHT-200)/12)) to (100). PlayerSprites are now drawn + in approximately the same location at all resolutions. + +March 9, 1998 +- Seem to have finally fixed the problem with my visplane growing + code. Using calloc() in PrepVisPlanes() instead of malloc() seems + to have solved all my woes. Now on to something else! +- Boy do I feel dumb. Found a bug in C_DrawConsole () where the + revealed variable wasn't always being set before it was used. + Now I rewrote it so that it doesn't need to calculate + revealed at all. It ought to be marginally faster, too (although + it probably won't make a bit of difference during gameplay). + +March 7, 1998 +- Still working on MaxVisPlanes bug. This is proving to be more + elusive than I had expected, since VC++ is being most unhelpful. + The bug doesn't show up in the debug build (heap checking doesn't + even catch anything), and I can't use the debugger on the release + build where the bug does show up! Grrr! + +March 6, 1998 + +- Started changing MAXVISPLANES constant into the growing integer + MaxVisPlanes. Moved some code from R_PlaneInitData() to + R_InitPlanes() and added the GetMoreVisPlanes() function to + allocate more planes. Strange crashing bugs in release but not + debug builds. Probably stomping on memory somewhere. +- Fixed stupid bug in I_ShutdownSound: was calling MIDASfreeSample() + when I should have been calling MIDASfreeChannel(). Also moved + freeing of channels to another for loop (probably not necessary, but...). +- Fixed -file parameter to work with console commands on the + command line. +- Changed MAXVISSPRITES constant into the integer MaxVisSprites, + which is the size of the vissprites[] array. This value can now + grow as needed to accomodate more vissprites. +- Added developer cvar and DEVONLY macro. +- Functions in i_music.c now pay attention to the looping flag. +- C_AddNotifyString() now pays attention to show_messages cvar. +- Added support for specifying console commands on the command line. + diff --git a/src/b_bot.cpp b/src/b_bot.cpp index dc1a22501..7f1bc57d4 100644 --- a/src/b_bot.cpp +++ b/src/b_bot.cpp @@ -15,13 +15,6 @@ CVAR (Int, bot_next_color, 11, 0) CVAR (Bool, bot_observer, false, 0) -IMPLEMENT_POINTY_CLASS (DCajunMaster) - DECLARE_POINTER (getspawned) - DECLARE_POINTER (firstthing) - DECLARE_POINTER (body1) - DECLARE_POINTER (body2) -END_POINTERS - CCMD (addbot) { if (gamestate != GS_LEVEL && gamestate != GS_INTERMISSION) @@ -43,12 +36,12 @@ CCMD (addbot) } if (argv.argc() > 1) - bglobal->SpawnBot (argv[1]); + bglobal.SpawnBot (argv[1]); else - bglobal->SpawnBot (NULL); + bglobal.SpawnBot (NULL); } -void DCajunMaster::ClearPlayer (int i, bool keepTeam) +void FCajunMaster::ClearPlayer (int i, bool keepTeam) { if (players[i].mo) { @@ -92,7 +85,7 @@ CCMD (freeze) CCMD (listbots) { - botinfo_t *thebot = bglobal->botinfo; + botinfo_t *thebot = bglobal.botinfo; int count = 0; while (thebot) @@ -116,9 +109,6 @@ AT_GAME_SET(BotStuff) AWeapon * w; AActor * a; - bglobal = new DCajunMaster; - GC::WriteBarrier(bglobal); - w = (AWeapon*)GetDefaultByName ("Pistol"); if (w != NULL) { diff --git a/src/b_bot.h b/src/b_bot.h index 3ce8d4d3e..e40476c9f 100644 --- a/src/b_bot.h +++ b/src/b_bot.h @@ -73,13 +73,10 @@ struct botinfo_t }; //Used to keep all the globally needed variables in nice order. -class DCajunMaster : public DObject +class FCajunMaster { - DECLARE_CLASS (DCajunMaster, DObject) - HAS_OBJECT_POINTERS public: - DCajunMaster(); - ~DCajunMaster(); + ~FCajunMaster(); void ClearPlayer (int playernum, bool keepTeam); @@ -110,7 +107,7 @@ public: void Pitch (AActor *actor, AActor *target); bool IsDangerous (sector_t *sec); - DArgs *getspawned; //Array of bots (their names) which should be spawned when starting a game. + TArray getspawned; //Array of bots (their names) which should be spawned when starting a game. bool botingame[MAXPLAYERS]; BYTE freeze:1; //Game in freeze mode. BYTE changefreeze:1; //Game wants to change freeze mode. @@ -119,6 +116,8 @@ public: int spawn_tries; int wanted_botnum; TObjPtr firstthing; + TObjPtr body1; + TObjPtr body2; bool m_Thinking; @@ -142,14 +141,12 @@ protected: bool ctf; int loaded_bots; int t_join; - TObjPtr body1; - TObjPtr body2; bool observer; //Consoleplayer is observer. }; //Externs -extern DCajunMaster *bglobal; +extern FCajunMaster bglobal; EXTERN_CVAR (Float, bot_flag_return_time) EXTERN_CVAR (Int, bot_next_color) diff --git a/src/b_func.cpp b/src/b_func.cpp index f2057fc6a..85aa410c1 100644 --- a/src/b_func.cpp +++ b/src/b_func.cpp @@ -63,7 +63,7 @@ static bool PTR_Reachable (intercept_t *in) fixed_t ceilingheight = s->ceilingplane.ZatPoint (hitx, hity); fixed_t floorheight = s->floorplane.ZatPoint (hitx, hity); - if (!bglobal->IsDangerous (s) && //Any nukage/lava? + if (!bglobal.IsDangerous (s) && //Any nukage/lava? (floorheight <= (last_z+MAXMOVEHEIGHT) && ((ceilingheight == floorheight && line->special) || (ceilingheight - floorheight) >= looker->height))) //Does it fit? @@ -100,7 +100,7 @@ static bool PTR_Reachable (intercept_t *in) //Checks TRUE reachability from //one actor to another. First mobj (actor) is looker. -bool DCajunMaster::Reachable (AActor *actor, AActor *target) +bool FCajunMaster::Reachable (AActor *actor, AActor *target) { if (actor == target) return false; @@ -128,7 +128,7 @@ bool DCajunMaster::Reachable (AActor *actor, AActor *target) //if these conditions are true, the function returns true. //GOOD TO KNOW is that the player's view angle //in doom is 90 degrees infront. -bool DCajunMaster::Check_LOS (AActor *from, AActor *to, angle_t vangle) +bool FCajunMaster::Check_LOS (AActor *from, AActor *to, angle_t vangle) { if (!P_CheckSight (from, to, 2)) return false; // out of sight @@ -145,7 +145,7 @@ bool DCajunMaster::Check_LOS (AActor *from, AActor *to, angle_t vangle) //------------------------------------- //The bot will check if it's time to fire //and do so if that is the case. -void DCajunMaster::Dofire (AActor *actor, ticcmd_t *cmd) +void FCajunMaster::Dofire (AActor *actor, ticcmd_t *cmd) { bool no_fire; //used to prevent bot from pumping rockets into nearby walls. int aiming_penalty=0; //For shooting at shading target, if screen is red, MAKEME: When screen red. @@ -288,7 +288,7 @@ shootmissile: //This function is called every //tick (for each bot) to set //the mate (teammate coop mate). -AActor *DCajunMaster::Choose_Mate (AActor *bot) +AActor *FCajunMaster::Choose_Mate (AActor *bot) { int count; int count2; @@ -369,7 +369,7 @@ AActor *DCajunMaster::Choose_Mate (AActor *bot) //Make a introducing to mate. if(target && target!=bot->player->last_mate) { - if((P_Random()%(200*bglobal->botnum))<3) + if((P_Random()%(200*bglobal.botnum))<3) { bot->player->chat = c_teamup; if(target->bot) @@ -385,7 +385,7 @@ AActor *DCajunMaster::Choose_Mate (AActor *bot) } //MAKEME: Make this a smart decision -AActor *DCajunMaster::Find_enemy (AActor *bot) +AActor *FCajunMaster::Find_enemy (AActor *bot) { int count; fixed_t closest_dist, temp; //To target. @@ -448,7 +448,7 @@ AActor *DCajunMaster::Find_enemy (AActor *bot) //Creates a temporary mobj (invisible) at the given location. -void DCajunMaster::SetBodyAt (fixed_t x, fixed_t y, fixed_t z, int hostnum) +void FCajunMaster::SetBodyAt (fixed_t x, fixed_t y, fixed_t z, int hostnum) { if (hostnum == 1) { @@ -459,7 +459,6 @@ void DCajunMaster::SetBodyAt (fixed_t x, fixed_t y, fixed_t z, int hostnum) else { body1 = Spawn ("CajunBodyNode", x, y, z, NO_REPLACE); - GC::WriteBarrier(this, body1); } } else if (hostnum == 2) @@ -471,7 +470,6 @@ void DCajunMaster::SetBodyAt (fixed_t x, fixed_t y, fixed_t z, int hostnum) else { body2 = Spawn ("CajunBodyNode", x, y, z, NO_REPLACE); - GC::WriteBarrier(this, body2); } } } @@ -486,7 +484,7 @@ void DCajunMaster::SetBodyAt (fixed_t x, fixed_t y, fixed_t z, int hostnum) //Emulates missile travel. Returns distance travelled. -fixed_t DCajunMaster::FakeFire (AActor *source, AActor *dest, ticcmd_t *cmd) +fixed_t FCajunMaster::FakeFire (AActor *source, AActor *dest, ticcmd_t *cmd) { AActor *th = Spawn ("CajunTrace", source->x, source->y, source->z + 4*8*FRACUNIT, NO_REPLACE); @@ -516,7 +514,7 @@ fixed_t DCajunMaster::FakeFire (AActor *source, AActor *dest, ticcmd_t *cmd) return dist; } -angle_t DCajunMaster::FireRox (AActor *bot, AActor *enemy, ticcmd_t *cmd) +angle_t FCajunMaster::FireRox (AActor *bot, AActor *enemy, ticcmd_t *cmd) { fixed_t dist; angle_t ang; @@ -527,7 +525,7 @@ angle_t DCajunMaster::FireRox (AActor *bot, AActor *enemy, ticcmd_t *cmd) bot->y + FixedMul(bot->momy, 5*FRACUNIT), bot->z + (bot->height / 2), 2); - actor = bglobal->body2; + actor = bglobal.body2; dist = P_AproxDistance (actor->x-enemy->x, actor->y-enemy->y); if (dist < SAFE_SELF_MISDIST) @@ -537,15 +535,15 @@ angle_t DCajunMaster::FireRox (AActor *bot, AActor *enemy, ticcmd_t *cmd) SetBodyAt (enemy->x + FixedMul (enemy->momx, (m+2*FRACUNIT)), enemy->y + FixedMul(enemy->momy, (m+2*FRACUNIT)), ONFLOORZ, 1); - dist = P_AproxDistance(actor->x-bglobal->body1->x, actor->y-bglobal->body1->y); + dist = P_AproxDistance(actor->x-bglobal.body1->x, actor->y-bglobal.body1->y); //try the predicted location - if (P_CheckSight (actor, bglobal->body1, 1)) //See the predicted location, so give a test missile + if (P_CheckSight (actor, bglobal.body1, 1)) //See the predicted location, so give a test missile { if (SafeCheckPosition (bot, actor->x, actor->y)) { - if (FakeFire (actor, bglobal->body1, cmd) >= SAFE_SELF_MISDIST) + if (FakeFire (actor, bglobal.body1, cmd) >= SAFE_SELF_MISDIST) { - ang = R_PointToAngle2 (actor->x, actor->y, bglobal->body1->x, bglobal->body1->y); + ang = R_PointToAngle2 (actor->x, actor->y, bglobal.body1->x, bglobal.body1->y); return ang; } } @@ -565,7 +563,7 @@ angle_t DCajunMaster::FireRox (AActor *bot, AActor *enemy, ticcmd_t *cmd) // [RH] We absolutely do not want to pick things up here. The bot code is // executed apart from all the other simulation code, so we don't want it // creating side-effects during gameplay. -bool DCajunMaster::SafeCheckPosition (AActor *actor, fixed_t x, fixed_t y) +bool FCajunMaster::SafeCheckPosition (AActor *actor, fixed_t x, fixed_t y) { int savedFlags = actor->flags; actor->flags &= ~MF_PICKUP; diff --git a/src/b_game.cpp b/src/b_game.cpp index c4f0cb172..b3f8d0102 100644 --- a/src/b_game.cpp +++ b/src/b_game.cpp @@ -61,7 +61,7 @@ Everything that is changed is marked (maybe commented) with "Added by MC" static FRandom pr_botspawn ("BotSpawn"); //Externs -DCajunMaster *bglobal; +FCajunMaster bglobal; cycle_t BotThinkCycles, BotSupportCycles, BotWTG; @@ -88,41 +88,14 @@ enum static bool waitingforspawn[MAXPLAYERS]; -DCajunMaster::DCajunMaster() -{ - firstthing = NULL; - body1 = NULL; - body2 = NULL; - getspawned = NULL; - memset(botingame, 0, sizeof(botingame)); - freeze = false; - changefreeze = false; - botnum = 0; - botinfo = NULL; - spawn_tries = 0; - wanted_botnum = NULL; - m_Thinking = false; - ctf = false; - loaded_bots = 0; - t_join = 0; - observer = false; -} - -DCajunMaster::~DCajunMaster() +FCajunMaster::~FCajunMaster() { ForgetBots(); - if (getspawned != NULL) - { - getspawned->Destroy(); - getspawned = NULL; - } - // FIXME: Make this object proper - ObjectFlags |= OF_Cleanup | OF_YesReallyDelete; } //This function is called every tick (from g_game.c), //send bots into thinking (+more). -void DCajunMaster::Main (int buf) +void FCajunMaster::Main (int buf) { int i; @@ -153,7 +126,7 @@ void DCajunMaster::Main (int buf) { if (t_join == ((wanted_botnum - botnum) * SPAWN_DELAY)) { - if (!SpawnBot (getspawned->GetArg (spawn_tries))) + if (!SpawnBot (getspawned[spawn_tries])) wanted_botnum--; spawn_tries++; } @@ -184,7 +157,7 @@ void DCajunMaster::Main (int buf) m_Thinking = false; } -void DCajunMaster::Init () +void FCajunMaster::Init () { int i; @@ -230,25 +203,19 @@ void DCajunMaster::Init () } //Called on each level exit (from g_game.c). -void DCajunMaster::End () +void FCajunMaster::End () { int i; //Arrange wanted botnum and their names, so they can be spawned next level. - if (getspawned) - getspawned->FlushArgs (); - else - { - getspawned = new DArgs; - GC::WriteBarrier(this, getspawned); - } + getspawned.Clear(); for (i = 0; i < MAXPLAYERS; i++) { if (playeringame[i] && players[i].isbot) { if (deathmatch) { - getspawned->AppendArg (players[i].userinfo.netname); + getspawned.Push(players[i].userinfo.netname); } CleanBotstuff (&players[i]); } @@ -272,7 +239,7 @@ void DCajunMaster::End () //The color parameter overides bots //induvidual colors if not = NOCOLOR. -bool DCajunMaster::SpawnBot (const char *name, int color) +bool FCajunMaster::SpawnBot (const char *name, int color) { int playernumber; @@ -375,7 +342,7 @@ bool DCajunMaster::SpawnBot (const char *name, int color) return true; } -void DCajunMaster::DoAddBot (int bnum, char *info) +void FCajunMaster::DoAddBot (int bnum, char *info) { BYTE *infob = (BYTE *)info; D_ReadUserInfoStrings (bnum, &infob, false); @@ -412,7 +379,7 @@ void DCajunMaster::DoAddBot (int bnum, char *info) waitingforspawn[bnum] = false; } -void DCajunMaster::RemoveAllBots (bool fromlist) +void FCajunMaster::RemoveAllBots (bool fromlist) { int i, j; @@ -452,7 +419,7 @@ void DCajunMaster::RemoveAllBots (bool fromlist) //Clean the bot part of the player_t //Used when bots are respawned or at level starts. -void DCajunMaster::CleanBotstuff (player_t *p) +void FCajunMaster::CleanBotstuff (player_t *p) { p->angle = ANG45; p->dest = NULL; @@ -509,7 +476,7 @@ static void appendinfo (char *&front, const char *back) front = newstr; } -void DCajunMaster::ForgetBots () +void FCajunMaster::ForgetBots () { botinfo_t *thebot = botinfo; @@ -526,13 +493,13 @@ void DCajunMaster::ForgetBots () loaded_bots = 0; } -bool DCajunMaster::LoadBots () +bool FCajunMaster::LoadBots () { FScanner sc; FString tmp; bool gotteam = false; - bglobal->ForgetBots (); + bglobal.ForgetBots (); #ifndef unix tmp = progdir; tmp += "zcajun/" BOTFILENAME; @@ -662,12 +629,12 @@ bool DCajunMaster::LoadBots () appendinfo (newinfo->info, "team"); appendinfo (newinfo->info, "255"); } - newinfo->next = bglobal->botinfo; + newinfo->next = bglobal.botinfo; newinfo->lastteam = TEAM_None; - bglobal->botinfo = newinfo; - bglobal->loaded_bots++; + bglobal.botinfo = newinfo; + bglobal.loaded_bots++; } - Printf ("%d bots read from %s\n", bglobal->loaded_bots, BOTFILENAME); + Printf ("%d bots read from %s\n", bglobal.loaded_bots, BOTFILENAME); return true; } diff --git a/src/b_move.cpp b/src/b_move.cpp index eccca2dde..c3924a6ad 100644 --- a/src/b_move.cpp +++ b/src/b_move.cpp @@ -46,7 +46,7 @@ extern TArray spechit; //Called while the bot moves after its player->dest mobj //which can be a weapon/enemy/item whatever. -void DCajunMaster::Roam (AActor *actor, ticcmd_t *cmd) +void FCajunMaster::Roam (AActor *actor, ticcmd_t *cmd) { int delta; @@ -72,7 +72,7 @@ void DCajunMaster::Roam (AActor *actor, ticcmd_t *cmd) } } -bool DCajunMaster::Move (AActor *actor, ticcmd_t *cmd) +bool FCajunMaster::Move (AActor *actor, ticcmd_t *cmd) { fixed_t tryx, tryy; bool try_ok; @@ -130,7 +130,7 @@ bool DCajunMaster::Move (AActor *actor, ticcmd_t *cmd) return true; } -bool DCajunMaster::TryWalk (AActor *actor, ticcmd_t *cmd) +bool FCajunMaster::TryWalk (AActor *actor, ticcmd_t *cmd) { if (!Move (actor, cmd)) return false; @@ -139,7 +139,7 @@ bool DCajunMaster::TryWalk (AActor *actor, ticcmd_t *cmd) return true; } -void DCajunMaster::NewChaseDir (AActor *actor, ticcmd_t *cmd) +void FCajunMaster::NewChaseDir (AActor *actor, ticcmd_t *cmd) { fixed_t deltax; fixed_t deltay; @@ -275,7 +275,7 @@ void DCajunMaster::NewChaseDir (AActor *actor, ticcmd_t *cmd) // This is also a traverse function for // bots pre-rocket fire (preventing suicide) // -bool DCajunMaster::CleanAhead (AActor *thing, fixed_t x, fixed_t y, ticcmd_t *cmd) +bool FCajunMaster::CleanAhead (AActor *thing, fixed_t x, fixed_t y, ticcmd_t *cmd) { if (!SafeCheckPosition (thing, x, y)) return false; // solid wall or thing @@ -322,7 +322,7 @@ bool DCajunMaster::CleanAhead (AActor *thing, fixed_t x, fixed_t y, ticcmd_t *cm #define MAXTURN (15*ANGLE_1) //Max degrees turned in one tic. Lower is smother but may cause the bot not getting where it should = crash #define TURNSENS 3 //Higher is smoother but slower turn. -void DCajunMaster::TurnToAng (AActor *actor) +void FCajunMaster::TurnToAng (AActor *actor) { int maxturn = MAXTURN; @@ -356,7 +356,7 @@ void DCajunMaster::TurnToAng (AActor *actor) actor->angle += distance; } -void DCajunMaster::Pitch (AActor *actor, AActor *target) +void FCajunMaster::Pitch (AActor *actor, AActor *target) { double aim; double diff; @@ -367,7 +367,7 @@ void DCajunMaster::Pitch (AActor *actor, AActor *target) } //Checks if a sector is dangerous. -bool DCajunMaster::IsDangerous (sector_t *sec) +bool FCajunMaster::IsDangerous (sector_t *sec) { int special; diff --git a/src/b_think.cpp b/src/b_think.cpp index b463ecd49..3ee4b2177 100644 --- a/src/b_think.cpp +++ b/src/b_think.cpp @@ -23,7 +23,7 @@ static FRandom pr_botmove ("BotMove"); //This function is called each tic for each bot, //so this is what the bot does. -void DCajunMaster::Think (AActor *actor, ticcmd_t *cmd) +void FCajunMaster::Think (AActor *actor, ticcmd_t *cmd) { memset (cmd, 0, sizeof(*cmd)); @@ -71,7 +71,7 @@ void DCajunMaster::Think (AActor *actor, ticcmd_t *cmd) //how the bot moves. //MAIN movement function. -void DCajunMaster::ThinkForMove (AActor *actor, ticcmd_t *cmd) +void FCajunMaster::ThinkForMove (AActor *actor, ticcmd_t *cmd) { player_t *b; fixed_t dist; @@ -312,7 +312,7 @@ void DCajunMaster::ThinkForMove (AActor *actor, ticcmd_t *cmd) //BOT_WhatToGet // //Determines if the bot will roam after an item or not. -void DCajunMaster::WhatToGet (AActor *actor, AActor *item) +void FCajunMaster::WhatToGet (AActor *actor, AActor *item) { player_t *b = actor->player; @@ -329,7 +329,7 @@ void DCajunMaster::WhatToGet (AActor *actor, AActor *item) } int weapgiveammo = (alwaysapplydmflags || deathmatch) && !(dmflags & DF_WEAPONS_STAY); - //if(pos && !bglobal->thingvis[pos->id][item->id]) continue; + //if(pos && !bglobal.thingvis[pos->id][item->id]) continue; // if (item->IsKindOf (RUNTIME_CLASS(AArtifact))) // return; // don't know how to use artifacts if (item->IsKindOf (RUNTIME_CLASS(AWeapon))) @@ -376,7 +376,7 @@ void DCajunMaster::WhatToGet (AActor *actor, AActor *item) } } -void DCajunMaster::Set_enemy (AActor *actor) +void FCajunMaster::Set_enemy (AActor *actor) { AActor *oldenemy; AActor **enemy = &actor->player->enemy; diff --git a/src/c_cvars.cpp b/src/c_cvars.cpp index 7a6f316d6..91bbcbc2f 100644 --- a/src/c_cvars.cpp +++ b/src/c_cvars.cpp @@ -127,6 +127,7 @@ FBaseCVar::~FBaseCVar () else CVars = m_Next; } + C_RemoveTabCommand(Name); delete[] Name; } } diff --git a/src/d_main.cpp b/src/d_main.cpp index 05704041c..be3d6e433 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -718,7 +718,7 @@ void D_Display () void D_ErrorCleanup () { screen->Unlock (); - bglobal->RemoveAllBots (true); + bglobal.RemoveAllBots (true); D_QuitNetGame (); if (demorecording || demoplayback) G_CheckDemoStatus (); @@ -772,7 +772,7 @@ void D_DoomLoop () players[i].savedpitch = players[i].mo->pitch; } } - bglobal->Main (maketic%BACKUPTICS); + bglobal.Main (maketic%BACKUPTICS); for (i = 0; i < MAXPLAYERS; i++) { if (playeringame[i] && players[i].isbot && players[i].mo) @@ -1526,6 +1526,7 @@ static int CheckIWAD (const char *doomwaddir, WadStuff *wads) iwad.Format ("%s%s%s", doomwaddir, slash, IWADNames[i]); FixPathSeperator (iwad.LockBuffer()); + iwad.UnlockBuffer(); if (FileExists (iwad)) { wads[i].Type = ScanIWAD (iwad); @@ -1656,7 +1657,7 @@ static int CheckIWADinEnvDir (const char *str, WadStuff *wads) static EIWADType IdentifyVersion (const char *zdoom_wad) { - WadStuff wads[sizeof(IWADNames)/sizeof(char *)]; + WadStuff wads[countof(IWADNames)]; size_t foundwads[NUM_IWAD_TYPES] = { 0 }; const char *iwadparm = Args->CheckValue ("-iwad"); size_t numwads; @@ -1746,7 +1747,7 @@ static EIWADType IdentifyVersion (const char *zdoom_wad) { wads[numwads] = wads[i]; } - foundwads[wads[numwads].Type] = numwads+1; + foundwads[wads[numwads].Type] = numwads + 1; numwads++; } } @@ -1754,11 +1755,19 @@ static EIWADType IdentifyVersion (const char *zdoom_wad) if (foundwads[IWAD_HexenDK] && !foundwads[IWAD_Hexen]) { // Cannot play Hexen DK without Hexen size_t kill = foundwads[IWAD_HexenDK]; - if (kill != numwads) + for (i = kill; i < numwads; ++i) { - memmove (&wads[kill-1], &wads[kill], numwads - kill); + wads[i - 1] = wads[i]; } numwads--; + foundwads[IWAD_HexenDK] = 0; + for (i = 0; i < NUM_IWAD_TYPES; ++i) + { + if (foundwads[i] > kill) + { + foundwads[i]--; + } + } } if (numwads == 0) @@ -2433,18 +2442,13 @@ void D_DoomMain (void) } //Added by MC: - bglobal->getspawned = Args->GatherFiles ("-bots", "", false); - if (bglobal->getspawned->NumArgs() == 0) + DArgs *bots = Args->GatherFiles("-bots", "", false); + for (p = 0; p < bots->NumArgs(); ++p) { - bglobal->getspawned->Destroy(); - bglobal->getspawned = NULL; - } - else - { - GC::WriteBarrier(bglobal, bglobal->getspawned); - bglobal->spawn_tries = 0; - bglobal->wanted_botnum = bglobal->getspawned->NumArgs(); + bglobal.getspawned.Push(bots->GetArg(p)); } + bglobal.spawn_tries = 0; + bglobal.wanted_botnum = bglobal.getspawned.Size(); Printf ("M_Init: Init miscellaneous info.\n"); M_Init (); diff --git a/src/d_net.cpp b/src/d_net.cpp index 0d0441d12..83db8f21d 100644 --- a/src/d_net.cpp +++ b/src/d_net.cpp @@ -641,7 +641,7 @@ void PlayerIsGone (int netnode, int netconsole) FBehavior::StaticStartTypedScripts (SCRIPT_Disconnect, NULL, true, netconsole); if (netconsole == Net_Arbitrator) { - bglobal->RemoveAllBots (true); + bglobal.RemoveAllBots (true); Printf ("Removed all bots\n"); // Pick a new network arbitrator @@ -966,7 +966,7 @@ void NetUpdate (void) if (maketic % ticdup == 0) { //Added by MC: For some of that bot stuff. The main bot function. - bglobal->Main ((maketic / ticdup) % BACKUPTICS); + bglobal.Main ((maketic / ticdup) % BACKUPTICS); } maketic++; @@ -2048,12 +2048,12 @@ void Net_DoCommand (int type, BYTE **stream, int player) case DEM_ADDBOT: { BYTE num = ReadByte (stream); - bglobal->DoAddBot (num, s = ReadString (stream)); + bglobal.DoAddBot (num, s = ReadString (stream)); } break; case DEM_KILLBOTS: - bglobal->RemoveAllBots (true); + bglobal.RemoveAllBots (true); Printf ("Removed all bots\n"); break; diff --git a/src/decallib.cpp b/src/decallib.cpp index e0df0d60b..1a0e193e7 100644 --- a/src/decallib.cpp +++ b/src/decallib.cpp @@ -1135,7 +1135,7 @@ void DDecalFader::Tick () } else { - if (level.maptime < TimeToStartDecay || bglobal->freeze) + if (level.maptime < TimeToStartDecay || bglobal.freeze) { return; } @@ -1218,7 +1218,7 @@ void DDecalStretcher::Tick () Destroy (); return; } - if (level.maptime < TimeToStart || bglobal->freeze) + if (level.maptime < TimeToStart || bglobal.freeze) { return; } @@ -1287,7 +1287,7 @@ void DDecalSlider::Tick () Destroy (); return; } - if (level.maptime < TimeToStart || bglobal->freeze) + if (level.maptime < TimeToStart || bglobal.freeze) { return; } @@ -1353,7 +1353,7 @@ void DDecalColorer::Tick () } else { - if (level.maptime < TimeToStartDecay || bglobal->freeze) + if (level.maptime < TimeToStartDecay || bglobal.freeze) { return; } diff --git a/src/dobject.cpp b/src/dobject.cpp index 790147e94..23b411297 100644 --- a/src/dobject.cpp +++ b/src/dobject.cpp @@ -492,7 +492,7 @@ size_t DObject::StaticPointerSubstitution (DObject *old, DObject *notOld) for (i = 0; i < numsectors; ++i) { #define SECTOR_CHECK(f,t) \ - if (sectors[i].f == static_cast(old)) { sectors[i].f = static_cast(notOld); changed++; } + if (sectors[i].f.p == static_cast(old)) { sectors[i].f = static_cast(notOld); changed++; } SECTOR_CHECK( SoundTarget, AActor ); SECTOR_CHECK( CeilingSkyBox, ASkyViewpoint ); SECTOR_CHECK( FloorSkyBox, ASkyViewpoint ); @@ -503,6 +503,12 @@ size_t DObject::StaticPointerSubstitution (DObject *old, DObject *notOld) #undef SECTOR_CHECK } } + + // Go through bot stuff. + if (bglobal.firstthing.p == (AActor *)old) bglobal.firstthing = (AActor *)notOld, ++changed; + if (bglobal.body1.p == (AActor *)old) bglobal.body1 = (AActor *)notOld, ++changed; + if (bglobal.body2.p == (AActor *)old) bglobal.body2 = (AActor *)notOld, ++changed; + return changed; } diff --git a/src/dobject.h b/src/dobject.h index f7d5811a2..bbfa58b3d 100644 --- a/src/dobject.h +++ b/src/dobject.h @@ -400,6 +400,7 @@ public: } template friend inline FArchive &operator<<(FArchive &arc, TObjPtr &o); + friend class DObject; }; template inline FArchive &operator<<(FArchive &arc, TObjPtr &o) diff --git a/src/dobjgc.cpp b/src/dobjgc.cpp index 962fc337c..efa8d0cf4 100644 --- a/src/dobjgc.cpp +++ b/src/dobjgc.cpp @@ -289,15 +289,18 @@ static void MarkRoot() DThinker::MarkRoots(); FCanvasTextureInfo::Mark(); Mark(DACSThinker::ActiveThinker); + // Mark dead bodies. for (i = 0; i < BODYQUESIZE; ++i) { Mark(bodyque[i]); } + // Mark players. for (i = 0; i < MAXPLAYERS; i++) { if (playeringame[i]) players[i].PropagateMark(); } + // Mark sectors. if (SectorMarker == NULL && sectors != NULL) { SectorMarker = new DSectorMarker; @@ -311,10 +314,11 @@ static void MarkRoot() SectorMarker->SecNum = 0; } Mark(SectorMarker); - { // Silly bots - Mark(bglobal); - } - // Add soft roots + // Mark bot stuff. + Mark(bglobal.firstthing); + Mark(bglobal.body1); + Mark(bglobal.body2); + // Mark soft roots. if (SoftRoots != NULL) { DObject **probe = &SoftRoots->ObjNext; @@ -328,6 +332,7 @@ static void MarkRoot() } } } + // Time to propagate the marks. State = GCS_Propagate; StepCount = 0; } diff --git a/src/g_game.cpp b/src/g_game.cpp index 35abf7b37..085990ac9 100644 --- a/src/g_game.cpp +++ b/src/g_game.cpp @@ -1218,8 +1218,8 @@ void G_PlayerReborn (int player) } //Added by MC: Init bot structure. - if (bglobal->botingame[player]) - bglobal->CleanBotstuff (p); + if (bglobal.botingame[player]) + bglobal.CleanBotstuff (p); else p->isbot = false; @@ -1764,7 +1764,7 @@ void G_DoLoadGame () // Read intermission data for hubs G_ReadHubInfo(png); - bglobal->RemoveAllBots (true); + bglobal.RemoveAllBots (true); text = M_GetPNGText (png, "Important CVARs"); if (text != NULL) diff --git a/src/g_level.cpp b/src/g_level.cpp index 05ad8a657..0cfaa3e0d 100644 --- a/src/g_level.cpp +++ b/src/g_level.cpp @@ -1693,7 +1693,7 @@ void G_InitNew (const char *mapname, bool bTitleLevel) //Added by MC: Initialize bots. if (!deathmatch) { - bglobal->Init (); + bglobal.Init (); } if (mapname != level.mapname) @@ -1761,7 +1761,7 @@ void G_ChangeLevel(const char * levelname, int position, bool keepFacing, int ne gameaction = ga_completed; resetinventory = resetinv; - bglobal->End(); //Added by MC: + bglobal.End(); //Added by MC: // [RH] Give scripts a chance to do something unloading = true; @@ -2109,7 +2109,7 @@ void G_DoLoadLevel (int position, bool autosave) //Added by MC: Initialize bots. if (deathmatch) { - bglobal->Init (); + bglobal.Init (); } if (timingdemo) diff --git a/src/g_shared/sbarinfo_parser.cpp b/src/g_shared/sbarinfo_parser.cpp index 6d628c485..f6feaa1e8 100644 --- a/src/g_shared/sbarinfo_parser.cpp +++ b/src/g_shared/sbarinfo_parser.cpp @@ -1072,9 +1072,9 @@ int SBarInfo::getSignedInteger(FScanner &sc) } } -int SBarInfo::newImage(const char* patchname) +int SBarInfo::newImage(const char *patchname) { - if(stricmp(patchname, "nullimage") == 0) + if(patchname[0] == '\0' || stricmp(patchname, "nullimage") == 0) { return -1; } diff --git a/src/m_cheat.cpp b/src/m_cheat.cpp index e5d27ee92..d800cce27 100644 --- a/src/m_cheat.cpp +++ b/src/m_cheat.cpp @@ -403,8 +403,8 @@ void cht_DoCheat (player_t *player, int cheat) break; case CHT_FREEZE: - bglobal->changefreeze ^= 1; - if (bglobal->freeze ^ bglobal->changefreeze) + bglobal.changefreeze ^= 1; + if (bglobal.freeze ^ bglobal.changefreeze) { msg = "Freeze mode on"; } diff --git a/src/p_interaction.cpp b/src/p_interaction.cpp index 18580b7e5..9da7f3dc2 100644 --- a/src/p_interaction.cpp +++ b/src/p_interaction.cpp @@ -561,10 +561,10 @@ void AActor::Die (AActor *source, AActor *inflictor) player->respawn_time = level.time + TICRATE; //Added by MC: Respawn bots - if (bglobal->botnum && consoleplayer == Net_Arbitrator && !demoplayback) + if (bglobal.botnum && consoleplayer == Net_Arbitrator && !demoplayback) { if (player->isbot) - player->t_respawn = (pr_botrespawn()%15)+((bglobal->botnum-1)*2)+TICRATE+1; + player->t_respawn = (pr_botrespawn()%15)+((bglobal.botnum-1)*2)+TICRATE+1; //Added by MC: Discard enemies. for (int i = 0; i < MAXPLAYERS; i++) diff --git a/src/p_map.cpp b/src/p_map.cpp index c8a64c306..3b571c477 100644 --- a/src/p_map.cpp +++ b/src/p_map.cpp @@ -1739,7 +1739,7 @@ bool P_TryMove (AActor *thing, fixed_t x, fixed_t y, if (thing->player && thing->player->isbot && thing->flags & MF_SHOOTABLE) { if (tmsector != thing->Sector - && bglobal->IsDangerous (tmsector)) + && bglobal.IsDangerous (tmsector)) { thing->player->prev = thing->player->dest; thing->player->dest = NULL; diff --git a/src/p_mobj.cpp b/src/p_mobj.cpp index d05352689..9bf9f8533 100644 --- a/src/p_mobj.cpp +++ b/src/p_mobj.cpp @@ -2558,7 +2558,7 @@ void AActor::Tick () } //Added by MC: Freeze mode. - if (bglobal->freeze && !(player && !player->isbot)) + if (bglobal.freeze && !(player && !player->isbot)) { return; } @@ -2637,11 +2637,11 @@ void AActor::Tick () } } - if (bglobal->botnum && consoleplayer == Net_Arbitrator && !demoplayback && + if (bglobal.botnum && consoleplayer == Net_Arbitrator && !demoplayback && (flags & (MF_SPECIAL|MF_MISSILE)) || (flags3 & MF3_ISMONSTER)) { clock (BotSupportCycles); - bglobal->m_Thinking = true; + bglobal.m_Thinking = true; for (i = 0; i < MAXPLAYERS; i++) { if (!playeringame[i] || !players[i].isbot) @@ -2661,7 +2661,7 @@ void AActor::Tick () else if (flags & MF_SPECIAL) { //Item pickup time //clock (BotWTG); - bglobal->WhatToGet (players[i].mo, this); + bglobal.WhatToGet (players[i].mo, this); //unclock (BotWTG); BotWTG++; } @@ -2669,12 +2669,12 @@ void AActor::Tick () { if (!players[i].missile && (flags3 & MF3_WARNBOT)) { //warn for incoming missiles. - if (target != players[i].mo && bglobal->Check_LOS (players[i].mo, this, ANGLE_90)) + if (target != players[i].mo && bglobal.Check_LOS (players[i].mo, this, ANGLE_90)) players[i].missile = this; } } } - bglobal->m_Thinking = false; + bglobal.m_Thinking = false; unclock (BotSupportCycles); } @@ -3158,7 +3158,7 @@ AActor *AActor::StaticSpawn (const PClass *type, fixed_t ix, fixed_t iy, fixed_t actor->z = actor->PrevZ = iz; actor->picnum = 0xffff; - FRandom &rng = bglobal->m_Thinking ? pr_botspawnmobj : pr_spawnmobj; + FRandom &rng = bglobal.m_Thinking ? pr_botspawnmobj : pr_spawnmobj; if (actor->isFast() && actor->flags3 & MF3_ISMONSTER) actor->reactiontime = 0; diff --git a/src/p_saveg.cpp b/src/p_saveg.cpp index 00990b41b..a18bdee8e 100644 --- a/src/p_saveg.cpp +++ b/src/p_saveg.cpp @@ -230,7 +230,7 @@ static void CopyPlayer (player_t *dst, player_t *src, const char *name) if (dst->isbot) { - botinfo_t *thebot = bglobal->botinfo; + botinfo_t *thebot = bglobal.botinfo; while (thebot && stricmp (name, thebot->name)) { thebot = thebot->next; @@ -239,8 +239,8 @@ static void CopyPlayer (player_t *dst, player_t *src, const char *name) { thebot->inuse = true; } - bglobal->botnum++; - bglobal->botingame[dst - players] = true; + bglobal.botnum++; + bglobal.botingame[dst - players] = true; } else { diff --git a/src/p_sight.cpp b/src/p_sight.cpp index cc175a74d..1db00c9e6 100644 --- a/src/p_sight.cpp +++ b/src/p_sight.cpp @@ -496,7 +496,7 @@ sightcounts[0]++; // Cannot see an invisible object if ((flags & 1) == 0 && ((t2->renderflags & RF_INVISIBLE) || !t2->RenderStyle.IsVisible(t2->alpha))) { // small chance of an attack being made anyway - if ((bglobal->m_Thinking ? pr_botchecksight() : pr_checksight()) > 50) + if ((bglobal.m_Thinking ? pr_botchecksight() : pr_checksight()) > 50) { res = false; goto done; diff --git a/src/p_tick.cpp b/src/p_tick.cpp index ed2e3e007..3d6c3a20d 100644 --- a/src/p_tick.cpp +++ b/src/p_tick.cpp @@ -78,10 +78,10 @@ void P_Ticker (void) // [RH] Frozen mode is only changed every 4 tics, to make it work with A_Tracer(). if ((level.time & 3) == 0) { - if (bglobal->changefreeze) + if (bglobal.changefreeze) { - bglobal->freeze ^= 1; - bglobal->changefreeze = 0; + bglobal.freeze ^= 1; + bglobal.changefreeze = 0; } } @@ -102,7 +102,7 @@ void P_Ticker (void) // Since things will be moving, it's okay to interpolate them in the renderer. r_NoInterpolate = false; - if (!bglobal->freeze && !(level.flags & LEVEL_FROZEN)) + if (!bglobal.freeze && !(level.flags & LEVEL_FROZEN)) { P_ThinkParticles (); // [RH] make the particles think } @@ -110,14 +110,14 @@ void P_Ticker (void) for (i = 0; ifreeze && players[i].isbot)) + /*Added by MC: Freeze mode.*/!(bglobal.freeze && players[i].isbot)) P_PlayerThink (&players[i]); level.Tick (); // [RH] let the level tick DThinker::RunThinkers (); //if added by MC: Freeze mode. - if (!bglobal->freeze && !(level.flags & LEVEL_FROZEN)) + if (!bglobal.freeze && !(level.flags & LEVEL_FROZEN)) { P_UpdateSpecials (); P_RunEffects (); // [RH] Run particle effects diff --git a/src/sdl/i_main.cpp b/src/sdl/i_main.cpp index 73f38f830..336b303ce 100644 --- a/src/sdl/i_main.cpp +++ b/src/sdl/i_main.cpp @@ -132,7 +132,6 @@ void STACK_ARGS call_terms () static void FinalGC() { Args = NULL; - bglobal = NULL; GC::FullGC(); } diff --git a/src/sound/music_midi_timidity.cpp b/src/sound/music_midi_timidity.cpp index c8ab55e02..4ea8deb5e 100644 --- a/src/sound/music_midi_timidity.cpp +++ b/src/sound/music_midi_timidity.cpp @@ -244,7 +244,7 @@ TimiditySong::TimiditySong (FILE *file, char * musiccache, int len) void TimiditySong::PrepTimidity () { int pipeSize; - + #ifdef _WIN32 static SECURITY_ATTRIBUTES inheritable = { sizeof(inheritable), NULL, TRUE }; @@ -268,11 +268,11 @@ void TimiditySong::PrepTimidity () pipeSize = (timidity_pipe * timidity_frequency / 1000) << (timidity_stereo + !timidity_8bit); - - if (GSnd == NULL) - { // Can't pipe if using no sound. - pipeSize = 0; - } + + if (GSnd == NULL) + { // Can't pipe if using no sound. + pipeSize = 0; + } if (pipeSize != 0) { @@ -529,7 +529,7 @@ bool TimiditySong::LaunchTimidity () // freopen ("/dev/null", "w", stderr); close (WavePipe[1]); - execvp (words.we_wordv[0], words.we_wordv); + execvp (words.we_wordv[0], words.we_wordv); fprintf(stderr,"execvp failed\n"); exit (0); // if execvp succeeds, we never get here } @@ -542,11 +542,11 @@ bool TimiditySong::LaunchTimidity () // printf ("child is %d\n", forkres); ChildProcess = forkres; close (WavePipe[1]); - WavePipe[1] = -1; -/* usleep(1000000); - if (waitpid(ChildProcess, NULL, WNOHANG) == ChildProcess) - { - fprintf(stderr,"Launching timidity failed\n"); + WavePipe[1] = -1; +/* usleep(1000000); + if (waitpid(ChildProcess, NULL, WNOHANG) == ChildProcess) + { + fprintf(stderr,"Launching timidity failed\n"); }*/ } @@ -586,10 +586,10 @@ bool TimiditySong::FillStream (SoundStream *stream, void *buff, int len, void *u } } #else - ssize_t got; - fd_set rfds; - struct timeval tv; - + ssize_t got; + fd_set rfds; + struct timeval tv; + if (ChildQuit == song->ChildProcess) { ChildQuit = 0; @@ -597,18 +597,18 @@ bool TimiditySong::FillStream (SoundStream *stream, void *buff, int len, void *u song->ChildProcess = -1; return false; } - - FD_ZERO(&rfds); - FD_SET(song->WavePipe[0], &rfds); - tv.tv_sec = 0; - tv.tv_usec = 50; -// fprintf(stderr,"select\n"); - if (select(1, &rfds, NULL, NULL, &tv) <= 0 && 0) - { // Nothing available, so play silence. -// fprintf(stderr,"nothing\n"); - // memset(buff, 0, len); - return true; - } + + FD_ZERO(&rfds); + FD_SET(song->WavePipe[0], &rfds); + tv.tv_sec = 0; + tv.tv_usec = 50; +// fprintf(stderr,"select\n"); + if (select(1, &rfds, NULL, NULL, &tv) <= 0 && 0) + { // Nothing available, so play silence. +// fprintf(stderr,"nothing\n"); + // memset(buff, 0, len); + return true; + } // fprintf(stderr,"something\n"); got = read (song->WavePipe[0], (BYTE *)buff, len); diff --git a/src/sound/music_stream.cpp b/src/sound/music_stream.cpp index 19ff431f3..b76a5fede 100644 --- a/src/sound/music_stream.cpp +++ b/src/sound/music_stream.cpp @@ -50,14 +50,14 @@ StreamSong::~StreamSong () } StreamSong::StreamSong (const char *filename_or_data, int offset, int len) -{ - if (GSnd != NULL) +{ + if (GSnd != NULL) { - m_Stream = GSnd->OpenStream (filename_or_data, SoundStream::Loop, offset, len); - } - else - { - m_Stream = NULL; + m_Stream = GSnd->OpenStream (filename_or_data, SoundStream::Loop, offset, len); + } + else + { + m_Stream = NULL; } } diff --git a/src/version.h b/src/version.h index 4686afd0a..b55de6ae7 100644 --- a/src/version.h +++ b/src/version.h @@ -80,8 +80,23 @@ #if SVN_REVISION_NUMBER < MINSAVEVER // Never write a savegame with a version lower than what we need #define SAVEVER MINSAVEVER -#define MAKESAVESIG(x) "ZDOOMSAVE" #x -#define SAVESIG MAKESAVESIG(SAVEVER) +#define SAVESIG MakeSaveSig() +static inline const char *MakeSaveSig() +{ + static char foo[] = { 'Z','D','O','O','M','S','A','V','E', +#if SAVEVER > 9999 + '0' + (SAVEVER / 10000), +#endif +#if SAVEVER > 999 + '0' + ((SAVEVER / 1000) % 10), +#endif + '0' + ((SAVEVER / 100) % 10), + '0' + ((SAVEVER / 10) % 10), + '0' + (SAVEVER % 10), + '\0' + }; + return foo; +} #else #define SAVEVER SVN_REVISION_NUMBER #define SAVESIG "ZDOOMSAVE"SVN_REVISION_STRING diff --git a/src/wi_stuff.cpp b/src/wi_stuff.cpp index a69238670..ae247ccb4 100644 --- a/src/wi_stuff.cpp +++ b/src/wi_stuff.cpp @@ -1039,7 +1039,7 @@ void WI_End () //Added by mc if (deathmatch) { - bglobal->RemoveAllBots (consoleplayer != Net_Arbitrator); + bglobal.RemoveAllBots (consoleplayer != Net_Arbitrator); } } diff --git a/src/win32/fb_d3d9.cpp b/src/win32/fb_d3d9.cpp index b2c8a65c4..3a34231cc 100644 --- a/src/win32/fb_d3d9.cpp +++ b/src/win32/fb_d3d9.cpp @@ -397,6 +397,7 @@ void D3DFB::FillPresentParameters (D3DPRESENT_PARAMETERS *pp, bool fullscreen, b pp->BackBufferWidth = Width << PixelDoubling; pp->BackBufferHeight = TrueHeight << PixelDoubling; pp->BackBufferFormat = fullscreen ? D3DFMT_A8R8G8B8 : D3DFMT_UNKNOWN; + pp->BackBufferCount = 1; pp->hDeviceWindow = Window; pp->PresentationInterval = vsync ? D3DPRESENT_INTERVAL_ONE : D3DPRESENT_INTERVAL_IMMEDIATE; if (fullscreen) diff --git a/src/win32/i_main.cpp b/src/win32/i_main.cpp index dedeeacf1..4119debf5 100644 --- a/src/win32/i_main.cpp +++ b/src/win32/i_main.cpp @@ -249,7 +249,6 @@ static void UnWTS (void) static void FinalGC() { Args = NULL; - bglobal = NULL; GC::FullGC(); }