- 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)
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)