because it has the same sound volume issues as the external one.
- Replaced use of stdio in Timidity with FileReader and added the option to read
from the lump directory. If the main config file is inside the lump directory
it will assume that everything else is as well. If it is a real file it will be
assumed that the rest is real files as well.
- Fixed: None of the error returns in Timidity::read_config_file closed the file being read.
SVN r906 (trunk)
- Added support for defining composite textures in HIRESTEX. It is not fully tested
and right now can't do much more than the old TEXTUREx method.
- Added a few NULL pointer checks to the texture code.
- Made duplicate class names in DECORATE non-fatal. There is really no stability
concern here and the worst that can happen is that the wrong actor is spawned.
This was a constant hassle when testing with WADs that contain duplicate resources.
SVN r905 (trunk)
- Fixed: MinGW doesn't have _get_pgmptr(), so it couldn't compile i_main.cpp.
- Fixed: MOD_WAVETABLE and MOD_SWSYNTH are not defined by w32api, so MinGW
failed compiling the new MIDI code.
- Fixed: LocalSndInfo and LocalSndSeq in S_Start() need to be const char
pointers, since "" is a constant.
- Fixed: parsecontext.h was missing a newline at the end of the file.
SVN r904 (trunk)
particular, this meant that every channel was almost certainly in mono mode,
which can sound pretty bad if the song isn't meant to be played that way.
- Added bank numbers to the MIDI precaching for Timidity, since I guess I do
need to care about banks, if even the Duke MIDIs use various banks.
- Fixed: snd_midiprecache only exists in Win32 builds, so gameconfigfile.cpp
shouldn't unconditionally link against it.
- Fixed: pre_resample() was still disabled, and it left two samples at the end
of the new wave data uninitialized.
SVN r903 (trunk)
rid of timidity/tables.cpp, which conflicts in name with the main Doom
tables.cpp. (And interestingly, VC++ automatically renamed the object file,
so I wasn't aware of the problem with GCC.)
SVN r902 (trunk)
to enable Timidity to read its config from Zips.
I put this on hold though after finding out that the sound quality
isn't even near that of Timidity++.
- GCC-Fixes (FString::GetChars() for Printf calls)
- Added a dummy Weapon.NOLMS flag so that Skulltag weapons using this flag
can be loaded
SVN r901 (trunk)
channel when restarting the song, rather than emitting a single note off
event which only has a 1 in 127 chance of being for a note that's playing
on that channel. Then I decided it would probably be a good idea to reset
all the controllers as well.
- Increasing the size of the internal Timidity stream buffer from 1/14 sec
(copied from the OPL player) improved its sound dramatically, so apparently
Timidity has issues with short stream buffers. It's now at 1/2 sec in
length. However, there seems to be something weird going on with
corazonazul_ff6boss.mid near the beginning where it stops and immediately
restarts a guitar on the exact same note.
- Added a new sound debugging cvar: snd_drawoutput, which can show various
oscilloscopes and spectrums.
- Internal TiMidity now plays music.
- Changed the progdir global variable into an FString.
SVN r900 (trunk)
- Fixed: SBarInfo tried to calculate scaled offsets on unscaled status bars.
- Added: createpopup to SBarInfo. No we don't have custom popups yet. It only
defines the transition effect. Currently none or slideinbottom.
- Made the first argument of DrawMugShot optional (think of it as an overloaded
function). The use of the first argument is deprecated due to the event of
per player class faces.
- More changes from DrawImage to screen->DrawTexture(). I guess I didn't get
them all just yet.
SVN r897 (trunk)
and P_TryMove. Moved BlockingLine and BlockingMobj into AActor because
the global variables can be easily overwritten with certain DECORATE
constructs.
SVN r894 (trunk)
- Fixed some bugs in the HIRESTEX parser.
- Added floating point support and #include and #define tokens to
FParseContext Not used yet.
- replaced the value scanning code in FParseContext::GetToken with
calls to strtol.
SVN r893 (trunk)
freed and each iterator allocated a new one as a result.
- Split the Xlat parser context class into a generic part that can be
used for other Lemon-based parsers in the future and a smaller
Xlat-specific part.
SVN r892 (trunk)
P_FindFloorCeiling doesn't set it at all. The way it was set in
PIT_FindFloorCeiling didn't look correct.
- Changed P_FindFloorCeiling so that it doesn't need global variables
anymore. I also moved the code to set the calling actor's information
into this function because that's all it is used for. This also fixes
another bug:
- AInventory::BecomePickup called P_FindFloorCeiling to get
proper position values for the item but never set the item's information
to the return value of this call.
SVN r891 (trunk)
Chaos Device. This sound is not defined by the other games so it won't
play by default.
- Added MORPH_UNDOBYTOMEOFPOWER and MORPH_UNDOBYCHAOSDEVICE flags
for the morph style so that the special behavior of these two items
can be switched on and off.
SVN r890 (trunk)
P_FindFloorCeiling never did that.
- Merged Check_Sides and PIT_CrossLine into A_PainShootSkull.
- Replaced P_BlockLinesIterator with FBlockLinesIterator in all places it was
used. This also allowed to remove all the global variable saving in
P_CreateSecNodeList.
- Added a new FBlockLinesIterator class that doesn't need a callback
function because debugging the previous bug proved to be a bit annoying
because it involved a P_BlockLinesIterator loop.
- Fixed: The MBF code to move monsters away from dropoffs did not work as
intended due to some random decisions in P_DoNewChaseDir. When in the
avoiding dropoff mode these are ignored now. This should cure the problem
that monsters hanging over a dropoff tended to drop down.
SVN r887 (trunk)
flag are only drawn as part of a secret sector if that secret has already
been found, even if the option is set to always show secret sectors.
- Added a NULL pointer check to WI_LoadBackground.
SVN r885 (trunk)
MAPINFO where 'lookup' could be specified so that there is one consistent
way to do it.
- Added a missing NULL pointer check to S_Start.
SVN r884 (trunk)
to handle M4 and 5 in Doom and Heretic.
- Added P_CheckMapData functions and replaced all calls to P_OpenMapData that
only checked for a map's presence with it.
- Added Martin Howe's player statusbar face submission.
- Added an 'adddefaultmap' option for MAPINFO. This is the same as 'defaultmap'
but keeps all existing information in the default and just adds to it. This
is needed because Hexen and Strife set some information in their base
MAPINFO and using 'defaultmap' in a PWAD would override that.
- Fixed: Using MAPINFO's f1 option could cause memory leaks.
- Added option to load lumps by full name to several places:
* Finale texts loaded from a text lump
* Demos
* Local SNDINFOs
* Local SNDSEQs
* Image names in FONTDEFS
* intermission script names
- Changed the STCFN121 handling. The character is not an 'I' but a '|' so
instead of discarding it it should be inserted at position 124.
- Renamed indexfont.fon to indexfont so that I could remove a special case
from V_GetFont that was just added for this one font.
- Added a 'dumpspawnedthings' CVAR that enables a listing of all things in
the map and the actor type they spawned.
SVN r882 (trunk)
- Added: fillzeros flag for drawnumber. When set the string will always have
a length of the specified size and zeros will fill in for the missing places.
If the number is negative the negative sign will take the place of the last
digit.
- Added: globalarray type to drawnumber which will display the value in a
global array with the index set to the player's number. Untested.
- Added: isselected command to SBarInfo.
- Fixed: Bi and Tri colored numbers didn't work.
- Fixed: Crash when using nullimage as the last image in drawswitchableimage.
- Applied Graf suggestion to include the y coord when calulating heights to fix
most of the gaps caused by round off errors. At least for now anyways and it
is only applied for drawimage.
- SBarInfo inventory bars have been converted to use screen->DrawTexture()
SVN r881 (trunk)
line.
- Fixed: P_SpawnPuff assumed that all melee attacks have the same range
(MELEERANGE) and didn't set the puff to its melee state if the range
was different. Even worse, it checked a global variable for this so
the behavior was undefined when P_SpawnPuff was called from anywhere
else but P_LineAttack. To reduce the amount of parameters I combined
this information with the hitthing and temporary parameters into one
flags parameter. Also changed P_LineAttack so that it gets passed
an additional parameter that specifies whether the attack is a melee
attack or not and set this to true in all calls that are to be considered
melee attacks. I couldn't use the damage type because A_CustomPunch
and A_CustomMeleeAttack allow passing any damage type they want.
- Added a sprite option as an alternative of particles for FX_ROCKET
and FX_GRENADE.
SVN r879 (trunk)
DECORATE was wrong (2 instead of 1.)
- Changed: Hexen set every cluster to be a hub if it hadn't been defined before
a level using this cluster. Now it will only do that if HexenHack is true,
i.e. when original Hexen format MAPINFOs are parsed. For ZDoom format
MAPINFOs it will now be the same as for the other games which means that
'hub' has to be declared explicitly.
- Added an Idle state that is entered in place of the spawn state if a monster
has to return to its inactive state if it can't find any more targets.
- Added MF5_NOINTERACTION flag which completely disables all physics related
code for any actor with this flag. Mostly useful for particle effects where
the actors just move a certain distance and then disappear.
- Removed the last remains of the antialias precalculation code from
am_map.cpp because it was no longer used.
- Fixed: Two-sided lines bordering a secret sector were not drawn in the
proper color
- Fixed: The automap didn't check ACS_LockedExecuteDoor for its lock color.
SVN r876 (trunk)
rather than a generic one, so identifying errors among files that all have
the same lump name no longer involves any degree of guesswork in
determining exactly which file the error occurred in.
- Added a check to S_ParseSndSeq() for SNDSEQ lumps with unterminated final
sequences.
- Fixed: Parts of s_sndseq.cpp that scan the Sequences array need NULL
pointer checks, in case an improper sequence was encountered during
parsing but not early enough to avoid creating a slot for it in the array.
SVN r874 (trunk)
can be played as OPL can also be dumped.
- Removed the opl_enable cvar, since OPL playback is now selectable as just
another MIDI device.
- Added support for DRO playback and dual-chip RAW playback.
- Removed MUS support from OPLMUSSong, since using the OPLMIDIDevice with
MUSSong2 works just as well. There are still lots of leftover bits in
the class that should probably be removed at some point, too.
- Added dual-chip dumping support for the RAW format.
- Added DosBox Raw OPL (.DRO) dumping support. For whatever reason,
in_adlib calculates the song length for this format wrong, even though
the exact length is stored right in the header. (But in_adlib seems buggy
in general; too bad it's the only Windows version of Adplug that seems to
exist.)
- Rewrote the OPL dumper to work with MIDI as well as MUS.
SVN r872 (trunk)
set to NULL before performing the delete. Otherwise, in some abnormal
situations, it could happen that the destroyed screen object is still
being accessed.
- Fixed: V_Shutdown didn't set OF_YesReallyDelete before deleting screen.
SVN r870 (trunk)
command actually existed.
- Fixed: My $Limit fix from yesterday didn't work because NearLimit was
an unsigned byte and the comparisons with -1 didn't work. Made it a
signed word instead.
- Made sfxinfo_t::Link an unsigned int because it limited the amount of
usable sounds to 65535.
SVN r869 (trunk)
Missimp.mid sounds a lot better now, though still a little off.
- Fixed: MIDI files that had ticks with nothing but meta-events did not play
properly. (fixes sonic3_finalboss.mid)
SVN r868 (trunk)
- Added a SFX_TRANSFERAMBUSHFLAG for A_SpawnItemEx.
- Added "Shaded" as a valid parameter for DECORATE's RenderStyle.
- Added Karate Chris's patch for a MAPINFO option making Strife conversations
not halt the game.
- Extended the $limit fix that $alias and $random definitions can have their
own $limit now.
- Fixed: When resolving a linked sound the limit of the current sound was
ignored and the one of the referenced sound being used. This was particularly
noticable when using the chaingun in a group of Zombiemen.
- Added a namespc parameter to FWadCollection::CheckNumForFullName which is
used when a normal lump name has to be looked up and changed all
CheckNumForFullName/CheckNumForName combinations in the source to use
the extended version of CheckNumForFullName only to have consistent
behavior for lump name lookup.
SVN r865 (trunk)
advanced sound options menu. Removed opl_enable from the menu.
- Added OPL synth as MIDI device -3. Since this is based on the MUS player
code, it only supports those events and controllers supported by MUS.
Some of Duke's MIDIs sound awful, but I think that may be more because
it's using different instruments... There's a thread in the MIDI streamer
class that could be taken out for Linux, since it doesn't need to deal
with the Windows Multimedia API, but for now, this is still Windows-only.
SVN r864 (trunk)
floats, so I can write its output directly to the stream buffer. In
addition, this lets me bring the OPL volume level much closer to the
standard MIDI volume.
SVN r863 (trunk)
into a general MIDI player.
- Fixed: Passing false for a stream callback did not stop the stream.
- Removed opl_frequency, since the only time the emulation sounds good is
when it plays at the exact frequency of a real chip.
- Music no longer plays at all when snd_musicvolume is 0.
- Bumped up snd_sfxvolume and snd_musicvolume default values.
SVN r862 (trunk)
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.
SVN r861 (trunk)
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++.
- GCC fixes.
SVN r858 (trunk)
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.
SVN r857 (trunk)
- 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_midipatchfile cvar to specify where it should
load the instruments from.
- Changed the ProduceMIDI function to store its output into a TArray<BYTE>.
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.
SVN r854 (trunk)
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.
SVN r852 (trunk)
- Added a debuganimated CCMD that can be used to output some information
if a WAD shows broken animations.
- 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.
SVN r850 (trunk)
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.
SVN r849 (trunk)
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.
SVN r846 (trunk)
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.
SVN r843 (trunk)
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.
SVN r842 (trunk)
the DEHSUPP compiler is gone now. Unlike XLATCC I'm using FScanner though.
A fully featured parser seems like overkill for this simple text file.
SVN r840 (trunk)
- 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.
SVN r839 (trunk)
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.
SVN r837 (trunk)
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.)
SVN r835 (trunk)
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 <sound> <min distance> <max distance> -- linear gain (like Doom)
$rolloff <sound> linear <min distance> <max distance> -- linear volume
$rolloff <sound> log <min distance> <rolloff factor> -- logarithmic
$rolloff <sound> custom <min distance> <max distance> -- 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.
SVN r834 (trunk)
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.
SVN r832 (trunk)
- 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.
SVN r826 (trunk)
- 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.
SVN r825 (trunk)
- deleted src/xlat/xlat_parser.c from the repository. Its content depend on the directory
directory structure it is generated in and it gets recreated each time the project is
compiled (why?) so it'd be changed with each SVN commit. VC++ doesn't seem to mind if
it can't be found so I think it's better this way.
SVN r822 (trunk)
- 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.
SVN r819 (trunk)
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.
SVN r817 (trunk)
- 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.
SVN r812 (trunk)
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.
SVN r810 (trunk)
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.
- 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.
SVN r806 (trunk)
- 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.
SVN r804 (trunk)
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.
SVN r803 (trunk)
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.
SVN r799 (trunk)
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.
SVN r794 (trunk)
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.
SVN r793 (trunk)
for FMOD Ex while at the same time removing support for FMOD 3. Be sure to update
your SDKs. GCC users, be sure to do a "make cleandep && make clean" before
building, or you will likely get inexplicable errors.
- 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.
- 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. It's 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.
SVN r789 (trunk)
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.
SVN r787 (trunk)
class so they 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 the changing snd_midivolume caused the paused
notes to become audible.
SVN r784 (trunk)
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
WaitForSingleObject timeouts.
SVN r783 (trunk)
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.
SVN r782 (trunk)
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.
SVN r780 (trunk)
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.
SVN r778 (trunk)
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.
SVN r771 (trunk)
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.
SVN r763 (trunk)
- 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.
SVN r762 (trunk)
* 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.
SVN r752 (trunk)
- 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.
SVN r751 (trunk)
- The net arbitrator can add or remove players to an access list so they
can or cannot control game settings:
* net_addcontroller <player number> - Adds a player to the control list. Only net arbitrators have access to this command.
* net_removecontroller <player number> - 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.
SVN r750 (trunk)
- 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.
SVN r747 (trunk)
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.
SVN r744 (trunk)
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.
SVN r742 (trunk)
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.
SVN r739 (trunk)
* 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".
SVN r736 (trunk)
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.
SVN r735 (trunk)
- 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.
SVN r733 (trunk)
- 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.
SVN r731 (trunk)
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
SVN r730 (trunk)
- 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.
SVN r719 (trunk)
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.
SVN r718 (trunk)
- 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.
(Caution: Not fully tested yet!)
SVN r715 (trunk)
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.
SVN r713 (trunk)
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.
- 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.
- Updated lemon.c to v1.53.
SVN r711 (trunk)
- 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.
- 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.
- 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.)
- 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.
- 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.
- 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.
SVN r710 (trunk)
* Fixed: Drawbar had a few memory leaks.
- Added another temporary cvar called pc to play with the multipiler used by D3DFB::SetPaletteTexture().
SVN r704 (trunk)
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.
SVN r695 (trunk)
- Fixed: After loading a savegame, G_UnSnapshotLevel() destroyed the
unmorphed versions of players because it thought they were extras.
SVN r694 (trunk)
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.
SVN r693 (trunk)
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.
SVN r692 (trunk)
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.
SVN r691 (trunk)
reference out of the function code.
- Fixed: The BrainExplosions should not perform any collision detection. To
achieve this their Damage value must be set to 0 when being spawned.
- Added a safety check to savegame versioning so that an invalid revision
(reported as 0) will be handled without breaking savegame compatibility.
SVN r689 (trunk)
* 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.
SVN r688 (trunk)
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.)
SVN r687 (trunk)
- 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.
SVN r686 (trunk)
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.
SVN r685 (trunk)
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 ammo patch.
SVN r683 (trunk)
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.
SVN r678 (trunk)
- 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.
SVN r676 (trunk)
- 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.
SVN r672 (trunk)
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.
SVN r668 (trunk)
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.
SVN r666 (trunk)
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.
SVN r665 (trunk)
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.
SVN r664 (trunk)
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).
SVN r663 (trunk)
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 effect the whole
screen.
Changes I neglected to put in the previous commit log:
- 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 FBaseStatusBar::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.
SVN r662 (trunk)
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.)
SVN r661 (trunk)
a long-abandoned experiment to write directly to video memory instead of
to a temporary buffer in system meroy.
- 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.
SVN r659 (trunk)
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.)
SVN r654 (trunk)
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.
SVN r653 (trunk)
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.
SVN r649 (trunk)
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.
SVN r648 (trunk)
- 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.
SVN r644 (trunk)
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.
- 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.
- 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.
SVN r640 (trunk)
actor's sector in the game engine code with it. This way there's a clear
distinction between renderer-specific and game-specific calls.
SVN r638 (trunk)
- 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.
SVN r634 (trunk)
- 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 renderers
that work differently.
SVN r632 (trunk)
* 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.
SVN r629 (trunk)
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.
SVN r623 (trunk)
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.)
SVN r622 (trunk)
- 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.
SVN r617 (trunk)
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?)
SVN r608 (trunk)
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.
SVN r607 (trunk)
They are not actually drawn with it yet, nor is it complete, but it's
something to start with.
- 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?
SVN r605 (trunk)
- 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.
SVN r603 (trunk)
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.
SVN r599 (trunk)
- 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.
SVN r598 (trunk)
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.
SVN r595 (trunk)
- 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.
SVN r593 (trunk)
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.
SVN r590 (trunk)
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.
SVN r589 (trunk)
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.
SVN r588 (trunk)
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.
SVN r586 (trunk)
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.
SVN r583 (trunk)
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.
SVN r582 (trunk)
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.
SVN r581 (trunk)
if the first spawned one died and executed some code in its death state.
- 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.)
- 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.
SVN r576 (trunk)
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.
SVN r575 (trunk)
use the multi-purpose special2 as counter for strafing so I added a new variable
for this purpose.
- forgot to save p_lnspec.cpp before last commut.
SVN r574 (trunk)
though.
- Fixed: Picking up a backpack incorrectly set the maximum amount for any ammo
type that didn't have a BackpackMaxAmount to 0.
SVN r569 (trunk)
resulting in missile attacks not working.
- Fixed: Hitscan attacks used the puff's position to calculate the trajectory for
weapon kickback.
SVN r568 (trunk)
- 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.
- Fixed: The Mancubus had an attack sound defined even though it shouldn't.
SVN r565 (trunk)
in a hub but by a level flag instead.
- 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.
SVN r563 (trunk)
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
SVN r557 (trunk)
- 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.
- Added some NULL pointer checks to AActor::GiveAmmo.
- Fixed: The FSwordMissile was missing the special damage handling that
reduces damage when hitting a player.
SVN r555 (trunk)
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.
- Fixed: The Strife player was missing its pain state.
- 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.
SVN r554 (trunk)
- Fixed: The shotgun had spawn ID 21 instead of 27.
- Fixed: All 3 states in the DoomUnusedStates actor need to end with a 'stop'.
- Fixed: The DECORATE TakeInventory functions didn't check the IF_KEEPDEPLETED
flag.
- 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.
SVN r552 (trunk)
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
SVN r551 (trunk)
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.)
SVN r550 (trunk)
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.
- added telefrag option to A_SpawnItemEx.
SVN r545 (trunk)
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.
SVN r544 (trunk)
- 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.
- moved Doom exit sounds into SNDINFO as $random definitions.
- Fixed: Dying Lost Souls could be reset to their see state if they slammed into
something.
SVN r540 (trunk)
- 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.
SVN r539 (trunk)
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.
SVN r538 (trunk)
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.
SVN r537 (trunk)
as a counter by the Hexen fighter's fist weapon.
- Fixed: The Wraithwerge's spirits shouldn't attack friends.
- Fixed: The Heresiarch's balls must not adjust their z-position after the
Heresiarch dies.
- 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.
SVN r534 (trunk)
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.
SVN r530 (trunk)
- Fixed: Resurrecting a player must restore all flags words, not just the first one.
- Fixed: APowerWeaponLevel2::EndEffect must check PendingWeapon for WP_NOCHANGE.
- added Skulltag's high jump rune as a powerup
- 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.
- merged player_t::cheats and player_t::Powers into one variable.
SVN r529 (trunk)
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.
SVN r523 (trunk)
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.)
SVN r522 (trunk)
to specific damage types.
- Changed Dehacked parser to use the DECORATE symbol tables for code pointers
instead of creating its own ones.
- 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.
SVN r519 (trunk)
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.
SVN r517 (trunk)
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.
SVN r514 (trunk)
TAutoGrowArray. A map can handle a wide range of key values better than
an array.
- 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.
SVN r513 (trunk)
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.
- 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.
SVN r505 (trunk)
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.
SVN r498 (trunk)
player's inventory even when they have been used up. If the item also
has an inventory bar icon, it will be drawn darkened when it is
depleted.
SVN r497 (trunk)
- 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). (Sorry,
have not done it for Linux yet, so that won't compile as-is.)
SVN r496 (trunk)
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.
SVN r495 (trunk)
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.
SVN r493 (trunk)
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.
SVN r492 (trunk)
- 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.
SVN r491 (trunk)
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.
SVN r485 (trunk)
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.
SVN r484 (trunk)
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.
SVN r483 (trunk)
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.
SVN r482 (trunk)
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.
SVN r480 (trunk)
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.
- Fixed non-POD parameter passing for GCC introduced in the previous commit.
SVN r476 (trunk)
- 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.
SVN r474 (trunk)
.rtext files 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.
SVN r473 (trunk)
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.
SVN r472 (trunk)
is unable to synthesize one.
- Converted xlatcc to use lemon during its build process. Now you don't need
bison to rebuild everything anymore.
SVN r470 (trunk)
- 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'.
SVN r466 (trunk)
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.
SVN r465 (trunk)
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.
- 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.
SVN r464 (trunk)
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.
- 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.
SVN r463 (trunk)
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.)
SVN r462 (trunk)
- 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().
SVN r461 (trunk)
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.
SVN r458 (trunk)
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.
SVN r455 (trunk)
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.
SVN r448 (trunk)
- 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
SVN r447 (trunk)
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.
SVN r437 (trunk)
- Fixed: The screen wipe must be disabled for Heretic's underwater ending. If
not, the wipe will try to mix pictures with different palettes.
SVN r435 (trunk)
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.
- Fixed: The Win32 I_FatalError() did not set alreadyThrown, so it could get
stuck in an endless fatal error loop.
SVN r433 (trunk)
- 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.
SVN r432 (trunk)
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.
SVN r429 (trunk)
- 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.
SVN r427 (trunk)
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.
SVN r425 (trunk)
- 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.
SVN r422 (trunk)
- 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.
SVN r421 (trunk)
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)
SVN r420 (trunk)
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.
SVN r419 (trunk)
be surprised if it doesn't work.
- 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.
- 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.
- Fixed: The edit control used for logging output added text in reverse order
on Win9x.
- 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.
SVN r416 (trunk)
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.
SVN r414 (trunk)
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.
SVN r413 (trunk)
- 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.
SVN r412 (trunk)
- 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.
SVN r411 (trunk)
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.
SVN r409 (trunk)
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.
SVN r404 (trunk)
- 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.
SVN r401 (trunk)
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 1 as a possible match,
since it's normally the transparent color.
SVN r400 (trunk)
- 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.)
SVN r399 (trunk)
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.
SVN r397 (trunk)
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.
SVN r395 (trunk)
- 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.
SVN r394 (trunk)
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.
SVN r393 (trunk)
- 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.
SVN r392 (trunk)
better emulate some calculation of internal code pointers.
- Added named RNG support to DECORATE's expression evaluator. Just use
random[name](min, max).
SVN r391 (trunk)
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.
SVN r390 (trunk)
- 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.
SVN r388 (trunk)
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.
SVN r386 (trunk)
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.
SVN r385 (trunk)
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().
SVN r384 (trunk)
- 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.
SVN r379 (trunk)
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.
SVN r377 (trunk)
- 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.
SVN r375 (trunk)
- 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.
SVN r373 (trunk)
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.
SVN r368 (trunk)
- 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().
SVN r365 (trunk)
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.
SVN r364 (trunk)
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.
SVN r362 (trunk)
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.
SVN r360 (trunk)
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.
SVN r359 (trunk)
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.
SVN r358 (trunk)
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.
SVN r356 (trunk)
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.
SVN r355 (trunk)
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.
- 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.
SVN r354 (trunk)
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.
SVN r353 (trunk)
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.
SVN r351 (trunk)
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.
SVN r350 (trunk)
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.
SVN r348 (trunk)
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.
SVN r347 (trunk)
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.
SVN r344 (trunk)
state has changed since the target has been acquired.
- Fixed: Multiplayer telefrag obituaries must be handled before weapon
dependent obituary messages.
SVN r341 (trunk)
- PClass::StaticInit() now sorts the class metadata so that operations that
iterate over it (such as the "give all" cheat) are compiler-independant.
SVN r340 (trunk)
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.
SVN r339 (trunk)
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.
SVN r333 (trunk)
- 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.
SVN r331 (trunk)
- 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.
SVN r329 (trunk)
- 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.
SVN r326 (trunk)
- 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.
SVN r325 (trunk)
- Fixed: SetTexture() 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.
SVN r324 (trunk)
- Changed 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.
SVN r318 (trunk)
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.
SVN r313 (trunk)
- 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.
SVN r310 (trunk)
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.
SVN r306 (trunk)
are now fully initialized when being created.
- Added GZDoom's HI_START/HI_END namespace and HIRESTEX support.
- Added sprite scaling to the weapon drawing code
SVN r304 (trunk)
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.
SVN r300 (trunk)
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.'.
SVN r297 (trunk)
- 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?)
SVN r296 (trunk)
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.
SVN r293 (trunk)
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.
SVN r292 (trunk)
- Bumped savegame version, min. savegame version, netgame version and
demo version because the inventory and damage changes are incompatible
with the old code.
SVN r289 (trunk)
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.
SVN r288 (trunk)
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.
SVN r285 (trunk)
- 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.
- 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. (UNTESTED!)
- 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.
SVN r283 (trunk)
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.
SVN r281 (trunk)
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.
SVN r279 (trunk)
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.
SVN r278 (trunk)
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.
SVN r277 (trunk)
- Changed A_AlertMonsters so that it can be placed directly in a weapon state.
- 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.
SVN r275 (trunk)
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.
- 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.
SVN r274 (trunk)
- 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.)
SVN r272 (trunk)
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".
SVN r268 (trunk)
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.
For R258:
- 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.
SVN r259 (trunk)
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.
SVN r253 (trunk)
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.
SVN r251 (trunk)
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.
SVN r250 (trunk)
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?
SVN r249 (trunk)
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.
SVN r248 (trunk)
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.
SVN r247 (trunk)
- Fixed: CCMD(dir) passes FStrings directly to Printf.
For R241:
- 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.
SVN r242 (trunk)
ceiling and floor of the front sector, the renderer did not add it to the
solid clip list.
- Blends created with the ACS fade commands now degrade to transparent overlays
when the console is visible, just as they do for the menu.
SVN r240 (trunk)
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.
SVN r238 (trunk)
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 contain 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.
SVN r237 (trunk)
- 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.
SVN r236 (trunk)
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.
SVN r233 (trunk)
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.
SVN r225 (trunk)
longer used.
- Fixed: strifehelp.acs and the PUMPUPS cheat need to give 10 UpgradeStaminas
because that item is using Inventory::Amount now.
SVN r220 (trunk)
- 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.
SVN r217 (trunk)
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.
SVN r214 (trunk)
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.
SVN r211 (trunk)
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.
SVN r208 (trunk)
while and killing 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.
- 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.
SVN r200 (trunk)
- 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.
SVN r199 (trunk)
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.
SVN r198 (trunk)
respawning in coop. Now the new inventory code should finally be complete. :-)
- Fixed: PROP_Inventory_PickupMessage was improperly defined for non-VC++
compilation.
SVN r197 (trunk)
- 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.
SVN r196 (trunk)
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.
SVN r190 (trunk)
- 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.
- 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.
SVN r188 (trunk)
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.
SVN r187 (trunk)
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.
SVN r185 (trunk)
- 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.
SVN r183 (trunk)
full path of a file in a Zip.
- Fixed: intermusic in MAPINFO was limited to WAD lumps and couldn't handle
external data.
ACS:
- Fixed: Global and World array symbols didn't initialize their array information.
SVN r182 (trunk)
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.
SVN r173 (trunk)
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.
SVN r164 (trunk)
- 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.
SVN r160 (trunk)
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.
SVN r153 (trunk)
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.
SVN r151 (trunk)
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.
SVN r145 (trunk)
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.
SVN r144 (trunk)
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.
SVN r141 (trunk)
- 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.
SVN r138 (trunk)
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.
SVN r136 (trunk)
- 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.
SVN r135 (trunk)
- 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.
SVN r134 (trunk)
- Changed type PClass::FreeIndices to TArray<unsigned int> 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.
SVN r133 (trunk)
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.
SVN r132 (trunk)
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.
SVN r130 (trunk)
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.
SVN r129 (trunk)
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.
SVN r128 (trunk)
- 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.
SVN r127 (trunk)
* 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.
SVN r125 (trunk)
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.
SVN r123 (trunk)
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.
SVN r121 (trunk)
memcpy to copy the player structures.
- Fixed compilation with MinGW again and removed most of the new warnings.
And following is the log that I forgot to paste in for the previous commit:
- 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.
SVN r117 (trunk)
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.
(r114 below):
- 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.
SVN r115 (trunk)
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
SVN r113 (trunk)
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.
SVN r112 (trunk)
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.
SVN r111 (trunk)
- 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.
SVN r110 (trunk)
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.
SVN r107 (trunk)
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.
SVN r106 (trunk)
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.
SVN r105 (trunk)
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.
SVN r103 (trunk)
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.
SVN r98 (trunk)
- 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.
SVN r93 (trunk)
- 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.
SVN r92 (trunk)
- 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.
SVN r90 (trunk)
- 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.
SVN r89 (trunk)
- 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.
SVN r88 (trunk)
- 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.
SVN r85 (trunk)
- 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.
SVN r84 (trunk)
- 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.
SVN r83 (trunk)
- 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.
- 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.
SVN r82 (trunk)
without any explicit constructors being called.
- Fixed: ZTwinedTorchUnlit, ZWallTorchUnlit, ZFireBullUnlit, and ZCauldronUnlit
were missing game filters.
SVN r79 (trunk)
- Converted A_Hexendecorations.cpp
- 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.
SVN r77 (trunk)
- 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.
SVN r76 (trunk)
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
SVN r75 (trunk)
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.
SVN r74 (trunk)
- 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.
SVN r73 (trunk)
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.
SVN r72 (trunk)
- 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.
SVN r70 (trunk)
- 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
SVN r60 (trunk)
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().
SVN r58 (trunk)
- 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.
- Added a serializer for TArray.
- Added a countof macro to doomtype.h. See the1's blog to find out why
it's implemented the way it is.
<http://blogs.msdn.com/the1/articles/210011.aspx>
- 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.
- 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.
SVN r57 (trunk)
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.
SVN r56 (trunk)
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().
SVN r53 (trunk)
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.
SVN r50 (trunk)
- 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.
SVN r36 (trunk)
- 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.
SVN r35 (trunk)
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 <SDL.h>, not <SDL/SDL.h>.
- Fixed: Returned FActiveInterpolation::HashKey()'s return type to size_t,
avoiding a pointer truncation warning.
SVN r30 (trunk)
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.
- Fixed: Potential buffer overrun when launching timidity.
SVN r21 (trunk)
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.
SVN r20 (trunk)
- 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.
- Fixed: AWeaponHolder::Serialize() did not call its supermethod.
SVN r19 (trunk)