ZDoom 2.1.0
News about ZDoom, its child ports, or any closely related projects.
[ZDoom Home] [Documentation (Wiki)] [Official News] [Downloads] [Discord]
[
Google This Site]
[ZDoom Home] [Documentation (Wiki)] [Official News] [Downloads] [Discord]
[
-
silentzora
- Posts: 464
- Joined: Sun Jan 04, 2004 6:24 pm
-
Siggi
- Posts: 3288
- Joined: Sun Oct 03, 2004 8:57 am
- Preferred Pronouns: They/Them
- Location: South Africa
Post by Siggi »
Lets see if this fits
Spoiler: Changes after ZDoom 2.0.98Code: Select all
June 20, 2006 - Added grubber's thingdef_exp.cpp. I might not use it later, but I can still use it now. - Unlimited the monster pain sounds in Hexen after I played as the Cleric a while and killed several centaurs with the flechette. - Fixed: Moving to an old level in a hub caused the old player's inventory to spawn owned by the current player (but still hanging off the old player), so the game would hang when trying to delete it. - Modified re2c so that it doesn't add a date to the file it generates. Thus, if it regenerates a file during a full rebuild, SVN won't see it as a change. Also updated it to 0.10.5. - Fixed: SC_GetString() did not properly terminate sc_String when the last token in the file had no white space after it. Since I could not actually find the problem (it works fine in debug mode and I saw no logic errors), I decided to take this opportunity to reimplement it using an re2c-generated scanner. Now it's 1.6x faster than before and correctness is easier to verify. June 19, 2006 - Fixed: FMODSoundRenderer::Shutdown() also needs to reset NumChannels. - Added back the Manifest to zdoom.rc for non-VC8 Windows compilers. - Fixed MinGW compilation again. Now it uses the same method as Makefile.linux to find all the source files so that it doesn't need to be manually updated each time source files are added or removed. - Added the SVN revision number to the version string. A new tool is used to obtain this information from the svnversion command and write it into a header file. If you don't have the svn command line tools installed or didn't check it out from the repository, you can still build. I added some rules for this to Makefile.linux, and I assume they work because they do for Makefile.mingw. - Fixed: MIDISong2 did not delete MusHeader in its destructor. June 19, 2006 (Changes by Graf Zahl) - Removed the unused sfx_ variables for the chainsaw sounds. - Fixed map name checks in idclev, hxvisit, for +map and the titlemap. - Changed handling of Zips so that the patches/, graphics/, sounds/ and music/ subdirectories no longer are placed in the global namespace. Instead new namespaces are defined. These namespaces aren't merged, however and searching in them either returns a lump inside it or one from the global namespace when it doesn't come from a Zip file. Proper order of files is still observed though. As a result proper use of the directories inside Zips is strictly enforced now so that for example anything used as a patch must be in the patches/ directory and won't be found anywhere else. June 18, 2006 (Changes by Graf Zahl) - Added another set of ACS inventory functions which take a tid for the actor and aren't limited to the script's activator. - Added GetSectorLightLevel(tag), GetActorCeilingZ(tid) and SetActorPosition(tid, x, y, z, fog) ACS functions. - Fixed: First initialization of camera textures should not mark the rendered lines as mapped. June 17, 2006 - Finally implemented code to keep some or all of your inventory intact when respawning in coop. Now the new inventory code should finally be complete. :-) - Fixed: PROP_Inventory_PickupMessage was improperly defined for non-VC++ compilation. June 17, 2006 (Changes by Graf Zahl) - Converted a_doomhealth.cpp to DECORATE. - Added a PickupMessage property to the internal actor parser, replaced most of the virtual PickupMessages with it and placed the code that reads the metadata into AInventory::PickupMessage. Now the PickupMessage method is truly virtual and I can do: Added a Health.LowMessage property to define double message items like Doom's medikit in DECORATE. - Since defining Mana3 as an ammo type and then overriding the TryPickup method means that this item defeats all ammo checks in the game it might as well be defined as a CustomInventory item. At least this fixes the amount given in easy and very hard skills. - Converted all ammo items to DECORATE. - Changed internal property setting of ammo types and sister weapons to use fuglyname as for DECORATE definitions. This allows to export the ammo definitions into DECORATE definitions without doing it for the weapons themselves. - Replaced obituary methods with actor properties. - Fixed: The secret map check didn't work for maps inside Zips. June 14, 2006 - Fixed loading of Build/Blood maps. - FWadLump::Read() now handles Blood decryption directly. - Fixed: A fatal error thrown during map loading after the sectors have been counted but before they are allocated crashed in PointerSubstitution(). - Removed my "backwards compatibility fix" for APROP_Speed. It turns out that in all the public versions where monster speed is not fixed point, you couldn't modify the monster's speed due to a bug in P_Move() anyway. So there's nothing to be backward compatible with. June 14, 2006 (Changes by Graf Zahl) - Fixed: Saving on maps that don't contain a MAPINFO definition didn't work. - Fixed: The Zip loader loaded all WADs inside a Zip into the lump directory. This is only supposed to be done for WADs in the root directory. June 12-14, 2006 (Changes by Graf Zahl) - Complete restructuring of the map loading code. Previously the only way to put maps into Zips was to load them as embedded WADs which caused some problems, most importantly that the map's file name was irrelevant and the internal map label was used instead. With the new code there is now a properly defined way to add maps to Zips: * Maps are placed in a subdirectory called 'maps'. * Maps are stored as WADs that contain all map related lumps. * The first lump in the map's WAD directory must be the map label. * All lumps not belonging to the first map are ignored. * The map's file name determines the name the map is identified with. For maps stored this way the internal map label is ignored so with this method renaming maps is as easy as renaming a file and it is no longer necessary to manipulate the map label. With the new code it is also possible to load external maps without adding them to the WAD list. Type 'open mapfile.wad' in the console to start such a map. The new code also performs stricter lump name checks to prevent accidental loading of non-map data. June 13, 2006 - Moved level scroller information out of G_InitLevelLocals() and into P_FreeLevelData() so that it also gets performed at shutdown. - Fixed: In the past, ZDoom worked like Doom and used integral values for monster speeds. Now it uses fixed point so that an actor's speed property can always be considered is always fixed point. So DoSetActorProperty() should scale very slow speeds, just like dehacked's PatchThing() has done for some time now. June 11, 2006 (Changes by Graf Zahl) - Changed UpgradeStamina to use AInventory's Amount and MaxAmount to control the amount of upgrade and the maximum that can be reached. June 10, 2006 (Changes by Graf Zahl) - Fixed: The skin loader assumed that all skin textures are in Doom patch format. Now it calls FTexture::CreateTexture to do proper checks. - Removed the PickupSound method from FakeInventory and changed it so that it uses AInventory::PickupSound to store its custom pickup sound. - Removed the PickupMessage method from FakeInventory. This can be handled by the standard pickup message code now that it uses the meta data for the message. - Fixed: The maximum indices for StrifeTypes were inconsistent. Now the allowed range is 0-1000 in all situations. - Fixed: Setting a local SNDINFO for a map deleted all skin based sounds. - Added a crouchsprite property to the skin info. - Fixed: Crouching sprites must be checked each frame, not just each tic. - Added an srand call to D_DoomMain in order to randomize the values returned by rand which is being used to shuffle the playlist. June 10, 2006 - Fixed: Information added with addkeysection and addmenukey was never freed. - Fixed: A classic decorate FakeInventory's PickupText was never freed. - Fixed: Colored lights were never freed. - Fixed: When a dehacked patch was applied, the dehacked StateMap was never freed. - Removed termdone checks around atterm(S_ClearSoundData) and atterm(S_Shutdown) because atterm() already checks for duplicates. - Fixed: S_ClearSoundData() should unload all sounds before it clears S_sfx. - Fixed: AltSoundRenderer::LoadSound() didn't check if the sound had already been loaded and lost the old sound data if it had been. - Fixed: FinishDehPatch() needlessly duplicated the new DehackedPickup's name. - Fixed: PatchStrings() allocated a private string and never freed it. June 8, 2006 (Changes by Graf Zahl) - Changed music name handling in MAPINFO so that music can be specified by full path of a file in a Zip. - Fixed: intermusic in MAPINFO was limited to WAD lumps and couldn't handle external data. June 8, 2006 - Fixed: Trying to play a 0-length song from a wad inside a zip caused a crash. June 7, 2006 (Changes by Graf Zahl) - Fixed: A_CustomPunch didn't use the range parameter correctly. June 6, 2006 - Integrated recent ZDBSP improvements into the internal nodebuilder: - ClassifyLine now chooses either SSE2 or regular x87 math depending on whether or not SSE2 is available at runtime. Since most of the time is spent in ClassifyLine, using SSE2 in just this one function helps the most. - Nodebuilding is a little faster if we inline PointOnSide. - Changed FEventTree into a regular binary tree, since there just aren't enough nodes inserted into it to make a red-black tree worthwhile. - Added more checks at the start of ClassifyLine so that it has a better chance of avoiding the more complicated checking, and it seems to have paid off with a reasonably modest performance boost. - Added a "vertex map" for ZDBSP's vertex selection. (Think BLOCKMAP for vertices instead of lines.) On large maps, this can result in a very significant speed up. (In one particular map, ZDBSP had previously spent 40% of its time just scanning through all the vertices in the map. Now the time it spends finding vertices is immeasurable.) On small maps, this won't make much of a difference, because the number of vertices to search was so small to begin with. June 3, 2006 (Changes by Graf Zahl) - Added a StartConversation special that allows automatic activation of Strife dialogs. - Added Thing_Raise special that allows Arch-Vile like resurrections from scripts or DECORATE states. - Added a RadiusDamageFactor property for actors. This replaces the hard coded factor of 0.25 for Hexen's players. - Added new SpawnProjectile function to ACS. It's the same as Thing_Projectile2 but the projectile is specified by name, not spawn ID. - Added MAPINFO option to set the compatibility flags. If this is done these explicit settings will take precedence over the compatflags CVAR. May 31, 2006 - Merged in recent ZDBSP fixes: - Added code to explicitly handle outputting overlapping segs when building GL nodes with ZDBSP, removing the check that discarded them early on. - AddIntersection() should convert to doubles before subtracting the vertex from the node, not after, to avoid integer overflow. (See cah.wad, MAP12 and MAP13.) A simpler dot product will also suffice for distance calculation. - Splitters that come too close to a vertex should be avoided. (See cata.wad.) - Red-Black Tree implementation was broken and colored every node red. - Moved most of the code for outputting degenerate GL subsectors into another function. May 31, 2006 (Changes by Graf Zahl) - Fixed: Ammo items dropped by monsters that have a default amount of 1 didn't contain any ammo at all. - Fixed: PClass::FreeIndices was declared as TArray<size_t> in the header but as TArray<unsigned int> in the cpp file. May 28, 2006 (Changes by Graf Zahl) - Fixed: PowerFrighteners must check Owner for NULL in InitEffect and EndEffect. May 28, 2006 - Fixed: When building GL nodes for Deathkings MAP42, one polyobject had one of its segs thrown away, so the map could not start. This was because the nodebuilder assumed all subsectors would be 2D and could not handle the case where a degenerate 1D subsector is created. In this case, that happens because that map has three polyobjects in the middle of the void, so the only way to assign them to a subsector is to use a 1D subsector. May 28, 2006 (Changes by Graf Zahl) - Fixed: Monsters couldn't hurt other monsters of the same species if they were supposed to hate them. - Since I was editing the file anyway I added checks for Heretic's and Strife's damaging floor types to DCajunMaster::IsDangerous. - Added a NULL pointer check to DCajunMaster::TurnToAng because a crash log indicated that this can happen. - Fixed: Strife's energy pod contains 20 units when dropped by monsters. To achieve this I added an Ammo.DropAmount property because there are no other means to control this from inside a conversation script. May 27, 2006 (Changes by Graf Zahl) - Fixed: FString::FormatHelper must not alter the null string. - Fixed: FString::FormatHelper should use ReallocBuffer instead of directly calling Realloc. This caused crashes with the ACS print function. - Fixed: The dummy player spawned in G_FinishTravel must not start any ENTER scripts. May 26, 2006 - Changed makewad's zip routines so that it simply stores files that cannot be compressed smaller instead of using deflate anyway. Saves 133 bytes currently. May 26, 2006 (Changes by Graf Zahl) - Fixed: CallStateChain relied on CallingState being preserved across the call of the state's action function. This is not the case when a missile is being spawned and exploded right away. May 25, 2006 - Fixed: The C code in AltSoundRenderer::CopyAndClip() did not shift the sample data enough (2 bits instead of 8), so it was super loud and aliased. - Fixes for GCC 4.1: Several type-punned pointer warnings, but more importantly, declaring a friend function inside a class body is no longer enough to declare that function globally; you must declare it again outside the class. - Upgraded FArchive::SerializePointer so that it can store 32-bit indices. - ACS printing pcodes now build their string in an FSttring instead of a fixed sized buffer on the stack. May 24, 2006 - Modified ccdv-win32 to show "Generating X" messages when running lemon and re2c instead of "Linking X". - Updated lemon and re2c to the latest versions and ported dehsupp to use them for code generation. (Xlatcc is next.) - Added function level linking for Makefile.mingw. - Disabled RTTI generation and enabled function-level linking in the VC 2005 zdoom project. - Fixed: TAG_MORE now uses __va_copy to copy the taglist when building with GCC, so that should let it build under x86-64 and any other GCC targets. May 24, 2006 (Changes by Graf Zahl) - Fixed: A_SpawnItem performed an integer multiplication with fixed point values to calculate the spawn position. - Fixed: A_SpawnItem tried to set the spawned actor's angle before checking the validity of the returned pointer. May 23, 2006 - Added missing linker dependencies for Visual C++ 2005 Express Edition and fixed building of the assembly files when the source is located in a path with spaces. May 22, 2006 - Fixed: The new sound pausing on menu open interrupted Strife conversations. - Did some very preliminary support for x64 compiling. - Now I see why makewad is using the __fastcall calling convention by default: Because the release zlib is built with it as well. - Fixed: Conversion from 'const char *' to 'char *' in DEM_SAVEGAME case in Net_DoCommand(). - Updated the project files for Visual C++ 2005. - Fixed: The new Thing_ChangeTID check would infinite loop if an actor scheduled for destruction was encountered. May 22, 2006 (Changes by Graf Zahl) - Fixed: Thing_ChangeTid must check whether the actor whose tid is about to be changed is scheduled for destruction. - Fixed: G_FinishTravel added the player to the hash chain twice. - Fixed: The animations for Doom's E3 intermission used incorrect patch names. - Added a check for MF_NOLIFTDROP to PIT_CeilingRaise because the overlapping bridges in 007LTSD got moved by this function. May 21, 2006 - Fixed GCC 4 warnings in FNodeBuilder::CreateSubsectorsForReal(). - Changed f_finale.cpp/atkstates[] into a static variable, since its anonymous type prevents it from being accessed from other files anyway. - Fixed: The behavior of the eventtail advancement in d_net.cpp/CheckAbort() was compiler-dependant. - Fixed warnings GCC 4 threw up while compiling re2c and lemon. - Removed __cdecl from makewad.c again. This is already defined as a builtin for MinGW, and redefining it produces a warning. (Why is main explicitly declared __cdecl anyway?) - Fixed building ccdv-win32 with GCC 4. GCC 4 creates a memcpy call, which won't work because it doesn't get linked with the standard C library. May 20, 2006 - Fixed default.cbd and Makefile.mingw for current code state. - New: Pausing the game (through any means, not just the pause key) now pauses sound effects as well as music. "PauseMusicInMenus" has been added as a MAPINFO flag to also pause the music when a menu or the console are open. May 20, 2006 (Changes by Graf Zahl) - Fixed: The automap code had the check for rotation reversed. - Changed type PClass::FreeIndices to TArray<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. May 19, 2006 - Fixed: FloorAndCeiling_Raise/Lower did not work with slopes because they used ZatPointDist instead of PointToDist to calculate the destination distance for the plane equation. - Fixed: Sky scroll positions could "jump" once they wrapped past position 32767. An fmod now keeps them within range of the sky textures' real widths. May 19, 2006 (Changes by Graf Zahl) - Increased the StrifeTypes array to 999 entries so that custom WADs have more flexibility when defining dialogs. May 18, 2006 - Added a check against rw_havelow in the "sky hack" part of R_NewWall(). This prevents the front ceiling from being moved up if there has been no texture defined to draw on the wall. This makes various parts of The Darkest Hour render properly again while still allowing the crosses in heroes2.wad and lamasery.wad to render correctly. - Added a NULL sector check to P_CheckFakeFloorTrigger() because there was a crash report indicating that an actor being pushed up by a moving floor had a NULL sector. Since this field should be valid for every actor, the debug build gets an assert here, and the release build just returns without doing anything. - Fixed: Camera textures were not rendered properly when the underlying canvas's pitch and width were different (which, really, only happens if you use ridiculously large camera textures). - Fixed: FCanvasTextureInfo's were never freed. - Fixed: MAPINFO special action structures were not freed. - Fixed: FSingleLumpFont::LoadFON2() never freed its widths2 array. May 17, 2006 (Changes by Graf Zahl) - Fixed: In case the path to strife1.wad didn't contain any '/' an incorrect path was created for voices.wad. - Fixed: The code building the path for Strife's voices.wad called the wrong FString constructor. - Fixed: LS_Thing_SetGoal set MF5_CHASEGOAL in flags, not flags5. May 17, 2006 - Fixed: M_NotifyNewSave() needlessly created a copy of the filename. - Fixed: Any touching_sectorlists for actors unlinked in G_StartTravel() were lost forever. - Fixed: DLightningThinker::Serialize() did not delete the old LightningLightLevels array when loading from an archive. - Fixed: Although I moved the correct polyobject freeing code into P_FreeLevelData(), I left the old wrong code there too, which just deleted the array without deleting anything hanging off of it. - Texture animation improvements: * Animations are now millisecond-accurate, so delays in ANIMDEFS can have fractional parts. * Cleaned up the animation code and moved it into r_anim.cpp. * Blood's oscillating texture animations are now available for use by actual supported games by adding the word "oscillate" after a "range" definition in ANIMDEFS. * Not exactly texture animation, but it's handled in the same function as texture animations: Scrolling skies also have millisecond precision. May 16, 2006 - Implemented Quasar's suggestion to use line flag 2048 as a "reserved" flag that, if set, clears all the non-original-Doom flags on a line. This is only for Doom format maps when playing Doom. - Added support for automatically loading ACS objects (even for Doom-format maps). To use it, compile the ACS files as ordinary libraries placed between A_START/A_END markers. Then outside the markers, create a lump called LOADACS. This is just a plain text lump that lists all the libraries you want to autoload with every map. You can do this with as many libraries as you want, and LOADACS lumps are also cummulative. - Fixed: ApplyActorDefault() must ensure that dataint is non-negative before calculating a non-NULL state. When compiling with Visual C++, states are stored in the defaults list as byte values, but when compiling with GCC, they are passed as 32-bit arguments to the function directly. So in VC++, using ~0 to specify a NULL state appears as 255, but in GCC, it appears as -1. May 16, 2006 (Changes by Graf Zahl) - Added a missing NULL pointer check to APlayerPawn::Tick. - Fixed: The falling scream should not be played when the player is under water. May 15, 2006 - Fixed: CopyPlayer() in p_saveg.cpp should use normal assignment, not memcpy to copy the player structures. - Fixed compilation with MinGW again and removed most of the new warnings. - Changed the memory management for FString. Instead of using a garbage collected heap, it now uses normal heap calls and reference counting to implement lazy copying. You may now use bitwise operators to move (but not copy!) FStrings around in memory. This means that the CopyForTArray template function is gone, since TArrays can now freely move their contents around without bothering with their specifics. There is one important caveat, however. It is not acceptable to blindly 0 an FString's contents. This necessitated the creation of a proper constructor for player_s so that it can be reset without using memset. I did a quick scan of all memsets in the source and didn't see anything else with a similar problem, but it's possible I missed something. - Fixed: Build tiles were never deallocated. - Fixed: Using Build's palette.dat only got half the palette right. May 14, 2006 (Changes by Graf Zahl) - Added a show_obituaries option to disable obituaries without disabling other more important message types which have lower priority for some reason. - Added a menu option for show_messages after accidentally switching it off far too often and wondering why no messages appear. - Added crouching DoomPlayer sprites submitted by Enjay. - Fixed DF_NO_CROUCH was not checked. - Fixed: The intermission script parser had some of its cases in the keyword parser incorrectly sorted. - Fixed: atterm was still defined to take a STACK_ARGS function argument. - Added an AltFlash state for weapons. - Turned FloatSpeed into an actor property and changed the value to 5 for all floating Strife actors, as a comment in the source indicated. - Added GZDoom's code for Vavoom slope things because I wanted to test something with a map from Silent Steel. - Added nocrouch and allowcrouch MAPINFO commands and a DF_NO_CROUCH dmflag. - Added GZDoom's crouching code after cleaning it up so that adding crouching sprites will be easier. May 13, 2006 (Changes by Graf Zahl) - Fixed: P_StartScript was missing a NULL pointer check for the error message. When trying to puke a script outside a map it crashed. - Fixed: The random number generator for large numbers must mask out the sign bit before performing a modulo. - Now that the conversation states are pointers there is no need to make AActor::ConversationAnimation virtual. No class overrides this method anymore. - Replaced AMacil1::TakeSpecialDamage with MF5_NODAMAGE. - Fixed: AMacil2::TakeSpecialDamage and AOracle::TakeSpecialDamage didn't check whether inflictor was NULL and crashed when used with 'kill monsters'. - Fixed: Some Strife decorations didn't loop their animation - Changed: The decision whether blood splatter sprites are spawned is no longer determined by game. Instead there's a new flag, MF5_BLOODSPLATTER which is deciding what to do. To keep backwards compatibility this flag is unset for projectiles in Doom and Strife and set for them in Heretic and Hexen. The same applies to DECORATE but of course the flag can be manipulated here. - BLODxx sprites are now globally renamed to BLUDxx when not playing Doom. This allows using the same states in every game, including the Raven-specific blood actors. - Gave the bullet puff and the axe blood masses of 5 so that the make small splashes. - Added A_Light(value) code pointer for DECORATE to generalize the weapon light effect. - Added 'noskillmenu' option to MAPINFO episode definitions. This is for WADs that want to implement a skill selection level. - Added APROP_ChaseGoal and APROP_Frightened actor properties for ACS. - Added MF5_CHASEGOAL flag that makes monsters to go after their goal even if they have a valid target. - Fixed some issues with the changes to P_NewChaseDir I made to include MBF's dropoff logic. - Added a PowerFrightener powerup class. It seemed like such a waste to have this cool feature but no means to use it in a decent fashion. - Fixed: S_Init and S_ParseSndInfo should call atterm only once but not each time they are called. May 11, 2006 - Merged a lot of these static destructor-only structs into regular functions added to the exit chain with atterm so that they can be called in a deterministic order and not whatever order the linker decides to put them in. - Fixed: DCajunMaster did not free its getspawned. - Fixed: P_FreeLevelData() did not free ACS scripts. - Fixed: Level snapshots were not freed at exit. - Fixed: The save/load menu list was not freed at exit. - Fixed: FCompressedMemFile needs a destructor to free the m_ImplodedBuffer. - Fixed: G_DoLoadGame() did not free the engine string. - Fixed: M_ReadSaveStrings() did not free the engine string. - Fixed: Processing DEM_SAVEGAME did not free the pathname string. - Added a check for truncated flats to FFlatTexture::MakeTexture() because Heretic's F_SKY1 is only four bytes long. - Added a dump of the offending state to the "Cannot find state..." diagnostic. - Fixed: FCompressedFile did not initialize m_Mode in its default constructor. - Fixed: Heretic and Hexen status bars did not initialize ArtiRefresh. - Fixed: PNGHandle destructor should use delete[] to free TextChunks. May 11, 2006 (Changes by Graf Zahl) - Converted the stealth monsters to DECORATE. - Added string replacement option to obituary strings. - Changed lock and pickup message handling so that it is either a real string or a LANGUAGE identifier. The only reason I did the mixed format in the first place were Hexen's lock messages but they have been replaced by unique strings in the mean time so the feature isn't needed any more. - Added a flags parameter to TranslucentLine. - Extended the second arg of Line_SetIdentification to set not only ML_ZONEBOUNDARY but all 8 bits of the third byte in the flag word. This allows a relatively simple means of setting all the new flags directly. - Moved ML_ZONEBOUNDARY to doomdata.h so that it is in the same place as the other line flags. - Fixed: Strife's teleport swirl didn't loop its animation. - Fixed: Strife's rat is not supposed to be shootable. - Fixed: Strife's MiniMissile pickup amount was still incorrect. - Moved Strife's random dialogs into the string table. Now it should also be possible to define dialogs for other actors as well. May 10, 2006 - Fixed: When revisiting a map in a hub, the player could spawn at the wrong height if the floor had moved while they were there before. This was because the player was spawned on the original copy of the map before the changes to it were dearchived, so they didn't know about the new floor height. - Fixed: Calling BaseFileSearch() and letting it fill in the file's extension didn't work because the space for the path was deallocated before it returned. - Guess we're not leak-free yet. Try travelling around in a hub and see that it leaks. I don't have time to track it down right now. - Yay! We now seem to be free of memory leaks! The next step will be to merge a lot of these static destructor-only structs into regular functions added to the exit chain with atterm so that they can be called in a deterministic order and not whatever order the linker decides to put them in. (Interestingly, the amount of memory used when repeatedly executing the same map command at the console varies up and down, but it now stays relatively stable rather than increasing unbounded.) - Fixed: The list of resolutions in the video modes menu was not freed at exit. - Fixed: mus_playing.name was not freed at exit. - Fixed: SN_StopAllSequences() should be called at the start of P_FreeLevelData(), not just before the call to P_SetupLevel() in G_DoLoadLevel(), so it can run even at exit. And C_FullConsole() can call P_FreeLevelData() to free more memory too. - Fixed: StatusBar was not freed at exit. - Fixed: spritesorter was not freed at exit. - Fixed: Bad things happened if FString's data pool was destroyed before all C_RemoveTabCommand() calls were made. - Added an overload for FArchive << FString. - Fixed: The players' log text was not freed at exit. - Fixed: Bot information was not freed at exit. - Fixed: doomcom was not freed at exit. But since it's always created, there's no reason why it needs to be allocated from the heap. My guess is that in the DOS days, the external packet driver was responsible for allocating doomcom and passed its location with the -net parameter. - Fixed: FBlockNodes were not freed at exit. - Fixed: Openings were not freed at exit. - Fixed: Drawsegs were not freed at exit. - Fixed: Vissprites were not freed at exit. - Fixed: Console command history was not freed at exit. - Fixed: Visplanes were not freed at exit. - Fixed: Call P_FreeLevelData() at exit. - Fixed: Channel, SoundCurve, and PlayList in s_sound.cpp were not freed at exit. - Fixed: Sound sequences were not freed at exit. - Fixed: DSeqNode::Serialize() did not resize the m_SequenceChoices array when loading. - Fixed mvlineasm1 and mvlineasm4 so that they can be used with textures taller than 256 pixels. There was a very slight performance hit for this, but I was able to tweak mvlineasm4 to make it approximately as fast as before. Interestingly, maskwallscan manages to be nearly as fast as wallscan despite having to check every pixel for transparency. I'm tempted to dump all the old masked rendering code and use (trans)maskwallscan for everything for the sake of simplicity: Only two functions to maintain for each render style, and much less complicated supporting code. Currently, I need five different functions for each rendering style: One traditional column-at-a-time style like Doom did it originally, two for rt_draw4cols, and two for transmaskwallscan. (Right now, I have cheated, and just done the ones that can be used by walls for transmaskwallscan, so the actual number of different functions isn't quite so high.) For small textures, such as font characters and far-away sprites, I'm sure maskwallscan is faster than the current code. For large textures, it's probably still competitive even if it isn't faster. But considering how similar wallscan and maskwallscan perform, the difference is probably pretty minimal, and maskwallscan still might come out ahead due to its simpler overhead. May 10, 2006 (Changes by Graf Zahl) - Fixed: PClass::CreateNew didn't check whether the class had valid defaults and tried to copy data from a NULL pointer. - Fixed: FireThing and BrassTorch were misspelled in hexendecorations.txt - Changed A_ChangeFlag so that it doesn't need to alter the flag string. With strings being passed as names this is unsafe. - Removed unused parameter types from the function parameter parser for DECORATE. - Changed: All actor name parameters in DECORATE are now passed as FNames, not as strings. - Fixed: The MAPINFO parser stored the RedirectType as a type pointer. But at this point DECORATE hasn't been read yet so this was limited to the internal classes. - Fixed: TXT_NEED_IDCARD wasn't terminated with a ';'. - Fixed: Strife's DeadRebel was missing its DoomEdNum. - With names as type identifiers it is no longer necessary to remap the monster types to internal constants in A_BossDeath. - Fixed: A_BossDeath got the string from a name - just to get a name from the string. Using the name directly is sufficient. May 9, 2006 - Redid ClearLcoks() fix that I accidentally removed. - Added a new setting for am_rotate: 2 will enable rotation only for the overlay map while leaving the regular map unrotated. - Added a new setting for am_overlay: 2 will disable the normal automap and show only the overlayed version. - Fixed?: WallSpriteColumn apparently needs to set dc_texturefrac. At least Valgrind seems to say so. - Fixed: The FWadCollection destructor needs to use free to free the LumpInfo and Wads arrays. - Fixed: The ColorMapKiller needs to use the delete[] form of delete. - Fixed: FConfigFile::ClearCurrentSection() should be calling the delete[] form of delete to free the entry. - Fixed: FPatchTexture::MakeTexture() does not need to blindly recreate the Spans if they already exist. - Fixed: The FMultiPatchTexture destructor did not call its Unload() method. - Restored the original padding calculation to FMultiPatchTexture::MakeTexture(). I believe the Valgrind errors were caused by accessing off the end of the screen buffer, not from accessing off the end of a texture. - Backported the classnames-are-names changes from the FP code. - Backported the improved hierarchical dumpclasses command from the FP code. - Updated Jim's Makefile.linux. - Added support for wrapping midtextures vertically. - Since zdoom.wad is now zdoom.pk3, the default mapinfos can use full pathnames. So now they do. - Fixed: The DSimpleCanvas constructor used a pitch too narrow on screens wider than 640 pixels when using a non-AMD processor and the processor's L1 cache line size could not be determined. I think this should fix the issue of weirdly rendered 8 pixel wide borders on the left and right of the screen that some people experienced. - Fixed: The secnodes were never freed. May 9, 2006 (Changes by Graf Zahl) - Fixed a few Strife ammo amount values. - Fixed the ClearLocks function so it doesn't crash when called before the ActorInfos have been created. - Fixed: The FSpecialFont constructor created the name string twice. - Fixed: The animated door parser was still leaking memory when it encountered an invalid animation due to missing textures. - Fixed: The music volume list wasn't freed. - Fixed: The image for WADs that were loaded from inside Zips was never freed. - Changed FDoorAnimation deletion so that the array takes care of it. The original destructor approach would have necessitated a lot more supporting code to work as intended. - Fixed: Skin definitions were never freed. - Fixed: Names in terrain definitions were never freed. Replacing them with FNames would have been a good idea anyway. - Fixed: The lock definitions were never freed. - Fixed: FDoorAnimation was missing a destructor. - Fixed: animation and switch definitions were never freed. - Replaced all other places where FindType was used with FNames with IFindType. - Fixed: If you want to use a name as the missile parameter for the basic attack functions the type search in DoAttack must be case insensitive. - Fixed: APowerup::DoEffect must do more thorough checks before resetting the fixed colormap. May 8, 2006 - Fixed: The names in the Depths array in m_options.cpp were never freed. - Fixed: FDoomEdMap needed a destructor. - Fixed: Decal animators were never freed. - Fixed: Colormaps were never freed. - Fixed: Memory allocated in R_InitTranslationTables() was never freed. - Fixed: R_InitParticles() allocated way more memory than it needed to. (And the particle memory was never freed, either.) - Fixed: FMetaTable::FreeMeta() should use delete[] to free string metadata. - Fixed: FConfigFile::ClearCurrentSection() must cast the entry to a char * before deleting it, because that's the way it was allocated. - Fixed definitions of DeadZombieMan and DeadShotgunGuy in doom/deadthings.txt. Skip_super resets the dropitem list, so having it after "DropItem None" is pointless. - Fixed: Decorate DropItem information was never freed. - Fixed: FinishStates() allocated even 0-entry state arrays. - Fixed: Default actor instances were never freed. - Fixed: FRandomSoundList never freed its sound list. - Fixed: Level and cluster strings read from MAPINFO were never freed. - Fixed: Episode names were never freed. - Fixed: InverseColormap and GoldColormap were never freed. Since they're always allocated, they can just be arrays rather than pointers. - Fixed: FFont destructor never freed any of the character data or the font's name. - Fixed: Fonts were not freed at exit. - Fixed: FStringTable::LoadLanguage() did not call SC_Close(). - Fixed: When using the -iwad parameter, IdentifyVersion() did not release the buffer it created to hold the parameter's path. - Blends created with the ACS fade commands now degrade to transparent overlays when the menu is visible, so they can no longer obscure the menu. May 7, 2006 (Changes by Graf Zahl) - Added a misc/secret sound definition for Heretic. - Fixed: Powered up weapons were not properly deselected when the level ended and their ready state was different from the main weapon's. - Made some improvements to A_CountdownArg. - Removed the 'Yes', 'No' and 'Greetings' state assignment commands. They haven't been documented and thus haven't been used at all so far. Therefore they don't need to be handled considering that they will go away anyway. - Changed the DECORATE state parser so that Stop can also be specified right after a label, in addition to goto. May 6, 2006 - The game is now free of leaks up to the point just after the wads are loaded. - Fixed: Although TypeInfos are now deleted at exit, their FlatPointers or ActorInfo data was not freed. I chose not to use a destructor to handle this, because then it would no longer be a POD type that can be statically initialized. - Fixed: Aliases were not deleted at exit. - Fixed: FWadCollection did not free its hash tables, lump info, full names, or the list of open files when destroyed. - Updated Italian strings that someone kindly e-mailed to me. - The CRT no longer detects any memory leaks when I run to the IWAD picker and quit. - Fixed: The memory used to hold the path to zdoom.wad/.pk3 was not freed if the IWAD picker was cancelled. - Fixed: Some implementations of cvar->GetGenericRep (CVAR_String) returned a statically allocated string and others returned a dynamically allocated string. To be consistant, they should all be static. - Fixed: DObject also has three static TArrays that should not be explicitly initialized: Objects, FreeIndices, and ToDestroy. - Added a new do-nothing constructor for TArray that can be used for BSS objects that are manipulated before startup. Specifically, this was added because C_AddTabCommand() is called before main, but the TabCommands constructor is called after the array already has over 100 entries in it, orphaning everything that was already inserted. And since the code is much nicer-looking now, I didn't want to revert to the old non-TArray version. This could also have been used to fix FName, but I consider the current implementation to be better than the old one, so I'm leaving it as-is. May 6, 2006 (Changes by Graf Zahl) - Converted a_zombie.cpp and most of a_strifestuff.cpp to DECORATE. - Converted a_strifekeys.cpp to DECORATE and moved the pickup messages to the string table. - Removed the WIF_HITS_GHOSTS weapon flag and replaced it with MF2_THRUGHOST. There is no need to keep two flags around with virtually the same meaning. - Changed the ShadowArmor to use the VISIBILITYPULSE flag to change its translucency. It looks much better now than the cheap code pointer based blinking it used before. - Converted most of a_strifeitems.cpp to DECORATE and moved the pickup messages to the string table. - Converted a_strifearmor.cpp to DECORATE and moved the pickup messages to the string table. - Moved the messages for killing spectres to the string table. - Converted the quest items to DECORATE. Also changed A_GiveQuestItem to get the messages it prints from the string table instead of the quest item's tag string. May 5, 2006 (Changes by Graf Zahl) - Removed the hopelessly outdated thingdef_doc.txt file from the repository. - Converted a_peasant.cpp and a_ratbuddy.cpp to DECORATE. - Fixed: C_DoKey didn't treat an empty string as 'no binding' when checking for valid double bindings. - Converted a_merchants.cpp to DECORATE. - Added MF5_NODAMAGE flag to generalize the behavior of Strife's merchants which can be shot but take no damage from getting hurt. - Converted a_beggars.cpp to DECORATE. - Added an Inventory.GiveQuest property. This makes it possible to define all of Strife's original items that also give a quest item in DECORATE but it is also useful to define items like the ones in Day of the Acolyte without ugly workarounds. - Added a Tag property and Strife teaser conversation IDs to DECORATE so now it is possible to define many of Strife's items. - Added a FastSpeed property to DECORATE so that projectiles can finally be assigned a higher speed for fast mode. - Added a ACS_LockedExecuteDoor special. It is basically the same as the existing ACS_LockedExecute but it uses the 'door' message instead of 'remote'. This cannot be integrated into ACS_LockedExecute because all its arguments are already in use. - Added a fully customizable A_CustomMeleeAttack function for DECORATE. May 5, 2006 - Fixed: Scanned IWAD paths were not freed if you exited without selecting one. - Fixed: Dynamically allocated cvars were not freed on exit. - Fixed: FConfigFile's destructor did not free space used for Values. - Added "DropItem None" as a way for inherited actors to avoid dropping items if their superclass normally does. This is only needed if somebody dehacks DeadZombieMan or DeadShotgunGuy. - Moved Doom's dead body actors into DECORATE so that I can finish and verify the implementation of "States { StateLabel: goto SomeOtherLabel }" constructs. The alternate method of overriding inherited states is now deprecated, since it's incompatible with the coming custom state labels. - Changed TAG_MORE to pass a va_list pointer instead of a va_list because it's a non-POD type when targeting several non-ix86 targets with GCC. Hopefully this works. (Guess it didn't. Boohoo.) May 4, 2006 - Rewrote FName to use only POD types for its static data so that it can be used without any explicit constructors being called. - Fixed: ZTwinedTorchUnlit, ZWallTorchUnlit, ZFireBullUnlit, and ZCauldronUnlit were missing game filters. May 4, 2006 (Changes by Graf Zahl) - Added Poisondamage property for DECORATE. I first did this for one of the first DECORATE updates but the code seems to have gotten lost. - Converted A_Puzzleitems.cpp and parts of A_HexenSpecialdecs.cpp to DECORATE. - Converted A_Hexendecorations.cpp to DECORATE. - Changed the lower decal spawning code to transfer the main decal's color if the lower decal's default color is the same as the main decal's. - Changed the decal stretcher back to use the specified size parameters as a scaling factor and not a destination size because this is more consistent with the rest of the decal code. Also adjusted the blood smear definition in DECALDEF and the description in the Wiki for this. - Added Jim's most recent fixes. May 3, 2006 - Fixed: Conversion of c_bind.cpp to FString was incomplete. - Fixed some functions that were declared as taking size_t's but defined as taking unsigned ints. - Added a dummy object to delete sound environments on exit. - Fixed: FWarpTexture did not delete its Spans when destroyed. - Changed wadclusterinfos and wadlevelinfos arrays into TArrays. - Added the TypeInfo::AutoTypeInfoPtr for TypeInfo::m_RuntimeActors so they can be automatically deleted. - Changed TypeInfo::m_Types into a TArray so it will be automatically deleted on exit. - Fixed: TArray::Resize() did not deconstruct entries when shrinking the array. - Changed TArray::Push() so that it calls Grow() instead of duplicating the growth calculations itself. - Calling TArray::Grow() for a small amount when the array is short should grow it a bit more than it was doing. - Removed generational garbage collection from the string pool because it didn't actually work. - Turned the list of TabCommands into a TArray because I saw lots of console commands in the memory leak report at exit. Then I realized those were actually key bindings, so I changed the Bindings and DoubleBindings arrays into FString arrays. - Fixed: FStringCVar was missing a destructor. - Added TArray::Insert(). - Fixed: TArray::Delete() used memmove(). - Renamed Malloc(), Realloc(), and Calloc() to M_Malloc(), M_Realloc(), and M_Calloc() so that the debug versions can be defined as macros. - Enabled the CRT's memory leak detection in WinMain(). - Moved contents of PO_DeInit() into P_FreeLevelData(). - Removed "PolyBlockMap = NULL;" from P_SetupLevel(), because the P_FreeLevelData() call it makes next does the exact same thing, but also freeing it if needed. - Fixed: Unneeded memcpy in UnpackUserCmd() when ucmd and basis are the same - Removed -bpal parameter. Blood's blood.pal is loaded from blood.rff, and its tiles are loaded from the same directory. - RFF files now load their entire directories into the lumplist. - Added char * and const char * type coversions for FString, so FStrings can be freely passed to functions expecting C strings. (Except varargs functions, which still require manually fetching the C string out of it.) - Renamed the name class to FName. - Renamed the string class to FString to emphasize that it is not std::string. May 3, 2006 (Changes by Graf Zahl) - Converted A_Speedboots.cpp, A_HexenArmor.cpp and A_Hexenkeys.cpp to DECORATE - Fixed a few memory allocation issues pointed out by Jim's Valgrind dump. - Removed doom.x, heretic.x and strife.x from the SVN repository. These are generated files. - Fixed: A_PainDie has to check whether a valid target exists before calling IsFriend. - Fixed: FDecalLib::FindAnimator needs a signed counter to work properly. May 1, 2006 (Changes by Graf Zahl) - Added support for game specific pickup messages, if only to be able to define Raven's invulnerability item in DECORATE. - Removed A_TreeDeath because it is no longer used. - Fixed: When picking up a PowerupGiver for an active powerup the blend color and the duration were transferred to a temorary item and never took effect. They have to be trnasferred to the newly created powerup item before trying to give it to the player, not afterward. - Made the colormap of the InvulnerabilitySphere item specific. The base power class still needs to have its color adjusted per game though and since Raven's invulnerability item is used in both Hexen and Heretic it can't define its own colormap/blend. - Separated the invulnerability colormaps from the game being played and made them item specific. They can also be specified as regular blend colors in DECORATE now. - Converted a_hereticarmor.cpp and most of a_doomartifacts.cpp, a_hereticartifacts.cpp and a_heretickeys.cpp to DECORATE. - Changed the Soulsphere to be a real health item with the Dehacked modifications made in d_dehacked.cpp as for most other items which need to be adjusted. - Added IF_BIGPOWERUP flag to AInventory to expose the RESPAWN_SUPER dmflag to DECORATE. Also removed the now obsolete ShouldRespawn methods from AInvulnerabilitySphere and ABlurSphere. - Converted a_splashes.cpp to DECORATE. - Converted most of a_debris.cpp to DECORATE. May 1, 2006 - Made loading of Build's palette.dat automatic if it's found inside a loaded group file, but the -bpal parameter remains for now. - Made loading of Build art tiles automatic if they are found inside a group file. Removed the corresponding command-line parameter. - Added support for Ken Silverman's group files. April 30, 2006 (Changes by Graf Zahl) - Removed the DCorpseQueue class. It was no longer used and since the savegames it might have been used in have become incompatible a long time ago there is no reason to keep it around anymore. - Fixed: level.maptime must be set to 0 every time a level is loaded. - Converted a_doomarmor.cpp and a_doomkeys.cpp to DECORATE. - Replaced all need key messages that weren't already in LANGUAGE with a LANGUAGE identifier. Also made the messages for Hexen's keys unique strings instead of constructing them at run time. - Added: Pickup messages can now handle embedded localized strings - like the need key messages - Converted a_hereticdecorations.cpp as well. - Time to put the capabilities of Zip files to good use: Converted a_doomdecorations.cpp into a DECORATE lump to test my changes. (The EXE got 24 kb shorter by that - much more than I expected...) - Added a 'game' property to DECORATE so that game specific IDs can be defined. - Added an #include directive to the DECORATE parser. - Also removed ABreakableDecoration. Using AActor and the metadata for the death and burn height gives the same results with less code. - Removed the ADecoration class. It just inherited from AActor without adding any functionality of its own. - Added functions to sc_man to save and restore the full script state. This allows recursive use of the script parser. - Changed SC_Open to check for full names in a ZIP first. - Fixed: Ammo2 no longer gets displayed when it is identical to Ammo1. - Re-enabled the death camera due to public demand but made it switchable by a CVAR. April 29, 2006 (Changes by Graf Zahl) - ZDoom now loads zdoom.pk3 instead of zdoom.wad. - Fixed: StreamSong::SetVolume should check the m_stream pointer. This can happen when a TimiditySong doesn't use FMOD and outputs the sound itself. - Fixed: 'use' sector actions were using the incorrect sector on several occasions. - Added a wi_noautostartmap CVAR and a noautostartmap intermission option that force the user to manually end the 'entering level' page. April 23, 2006 (Changes by Graf Zahl) - Added a clipmidtextures level flag which exposes the ML_CLIP_MIDTEX feature globally per level. Also moved the setting of this flag for Strife into MAPINFO. - Added MBF's logic to move monsters away from a dropoff but changed it so that it doesn't require a general change in the movement code. - Added: The Trace function needs a compatibility option to exclude two-sided lines with both sides in the same sector from being checked. Originally this wasn't done and some WADs (e.g. Alien Vendetta MAP15) need the original behavior to work. April 22, 2006 (Changes by Graf Zahl) - Removed ABossEye::Serialize because it didn't do anything. - Fixed the issues with .96x's railgun code and added it to the current version. - Fixed: Setting of the friendly Minotaur's angle was inconsistent and could cause it to move backwards in a féw situation. - Fixed: The minotaur did checks for type by checking for the MF_FRIENDLY flag, not by checking for the actor class. That made it impossible to spawn friendly 'normal' minotaurs. - Moved a few virtual methods which are only applicable to the friendly minotaur to AMinotaurFriend. - Fixed: The friendly minotaur checked the master's health instead of the target's when deciding whether to switch targets. Replaced with MF4_NOTARGETSWITCH. - Fixed: maybedrawnow must not draw the console unless the background texture has been set up. - Fixed: V_InitCustomFonts initialized lastlump to -1 instead of 0. - Fixed: CreateTexture never checked whether it could read from the texture lump. Since the minimum valid length is 13 bytes for a 1x1 pixel patch everything below that will now return with an error. - Fixed a few occurences of mismatched free's for new'd memory. April 21, 2006 (Changes by Graf Zahl) - Fixed: To prevent the pointer cleanup code from crashing numsectors has to be set to 0 when the sectors array is deleted. - Added Zloba's fix for Linux's I_FindFirst. April 20, 2006 (Changes by Graf Zahl) - Fixed: Doom's status bar assumed that STBAR was always in Doom patch format. - Added MF3_DONTSPLASH to the newly created sound sequence things. - Fixed: makewad.c used C++ syntax. - Fixed: Strife's ending check included destroying the computer - an event that happens before the branch in the story. - Fixed: The overloaded FRandom::Random2 function with mask parameter didn't use its parameter. - Added Jim's latest makefile.linux April 20, 2006 - Fixed: Crash when opening the player setup menu when you're so dead that your head has popped off your body. - Fixed: When item respawning is on and you play on skill 1 or 5, picking up ammo would permanently double the amount of ammo received from that item the next time it gets picked up. - Added a check to PlayerIsGone() for players who have already had their actors destroyed before calling it. - Fixed: G_CheckDemoStatus() only restored your name, autoaim, and color settings after playing back a demo. - Added DEM_SPRAY net command so that sprayed decals work in multiplayer and demos. - Changed DEM_GIVECHEAT to use a word for specifying the item quantity. This is useful mainly for giving yourself more than 255 health at a time. - Fixed: DEM_SUMMONFRIEND was not handled by Net_SkipCommand(). - Fixed compilation with mingw again. - Added multiple-choice sound sequences. These overcome one of the major deficiences of the Hexen-inherited SNDSEQ system while still being Hexen compatible: Custom door sounds can now use different opening and closing sequences, for both normal and blazing speeds. - Moved the TArray serializer into farchive.h so that tarray.h doesn't need farchive.h at all because GCC was much pickier than VC. Because of this, I don't need the FArchive change I made yesterday that hid FArchive's TArray uses behind pointers. - Added a countof macro to doomtype.h. See the1's blog to find out why it's implemented the way it is. <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. April 19, 2006 - Added a serializer for TArray. This required I make a couple changes to FArchive in order to avoid circular references between farchive.h and tarray.h. - Ported back newer name code from 2.1. - Fixed: Using -warp with only one parameter in Doom and Heretic to select a map on episode 1 no longer worked. - New: Loading a multiplayer save now restores the players based on their names rather than on their connection order. Using connection order was sensible when -net was the only way to start a network game, but with -host/-join, it's not so nice. Also, if there aren't enough players in the save, then the extra players will be spawned normally, so you can continue a saved game with more players than you started it with. - Added some new SNDSEQ commands to make it possible to define Heretic's ambient sounds in SNDSEQ: volumerel, volumerand, slot, randomsequence, delayonce, and restart. With these, it is basically possible to obsolete all of the $ambient SNDINFO commands. - Fixed: Sound sequences would only execute one command each time they were ticked. - Fixed: No bounds checking was done on the volume sound sequences played at. - Fixed: The tic parameter to playloop was useless and caused it to act like a redundant playrepeat. I have removed all the logic that caused playloop to play repeating sounds, and now it acts like an infinite sequence of play/delay commands until the sequence is stopped. - Fixed: Sound sequences were ticked every frame, not every tic, so all the delay commands were timed incorrectly and varied depending on your framerate. Since this is useful for restarting looping sounds that got cut off, I have not changed this. Instead, the delay commands now record the tic when execution should resume, not the number of tics left to delay. April 19, 2006 (Changes by Graf Zahl) - Fixed: Hexen's ammo display in the status bar cannot be refreshed partially because the background patch has to be drawn always to overwrite the old display. - Fixed: Giving a health item to a non-player caused a crash. - Added a compatibility option to limit deh.MaxHealth to the health bonus. Originally this value wasn't used for health packs. Doing this was a bug in Boom but since there's quite a few maps out there which require Boom's altered behavior it has to be compatibility optioned. - Fixed: The health bonus's max health must be defined by deh.MaxHealth, not deh.MaxSoulsphere. To achieve this deh.MaxHealth's handling had to be altered because it has to default to 100. - Fixed: ZDBSP created incorrect side references with compressed sidedefs and both sidedefs of a linedef being the same. This only affects the external tool because the internal node builder is run after uncompressing the sidedefs. - Added Jim's latest makefile.linux. - Added a consistency check to the PNAMES loader because one crash log indicated that it crashed due to a corrupt PNAMES lump. - Brought back the sector based sound target handling as a compatibility option. This radical change just broke far too many maps that depend on the original behavior. Strife's special AI functions are excluded though because they work better with the new method. - Fixed: Hexen had no default sound sequence for doors and passed a NULL pointer to SN_StartSequence in DoorSound. April 18, 2006 (Changes by Graf Zahl) - Fixed A_CHolyAttack used linetarget to set the spirits' target actor. But it assumed that this variable was still valid from shooting the weapon. Not only is that not guaranteed. When used by the ClericBoss it is an unwanted effect because the linetarget is most likely the last thing the player fired at which normally is the ClericBoss itself. A_CHolyAttack now sets tracer to the intended target instead of relying on linetarget being preserved. - Fixed: Strife's grenades only bounce twice off the floor. They also bounce off all actors and immediately explode when hitting liquids. - Fixed: Strife's flame thrower gives 100 ammo as a pickup item but only 40 when given in a dialog. - Moved the sky change script starts for the Programmer into MAPINFO as special death actions. - Changed the sky in MAP09 of Strife to the blue sky to make it more consistent. Now the sky change occurs when the player wakes up after fighting the programmer. April 18, 2006 - Fixed: FBaseStatusBar::DrBNumber() should behave like Doom's STlib_drawNum(), and FDoomStatusBarTexture::DrawToBar() should add the textures left offset to the x coordinate before drawing. These fix Twice Risen's status bar. - Changed: VPrintf now uses string.VFormat(), instead of vsprintf().
-
Siggi
- Posts: 3288
- Joined: Sun Oct 03, 2004 8:57 am
- Preferred Pronouns: They/Them
- Location: South Africa
Post by Siggi »
No, it doesn't... Part 2
Spoiler:Code: Select all
April 17, 2006 (Changes by Graf Zahl) - Fixed: The Oracle Pass is an item, not a key. Strictly speaking the same applies to the Prison pass but having that as a key masks some bad design in Strife so it is better to leave it a key. - Fixed: The spectral lightning spot used a weird combination of flags that made it act quite unexpectedly. After removing all flags except MF_NOBLOCKMAP it seems to do what it is supposed to do. I also had to add a new flag, MF5_NODROPOFF to prevent the spot from moving over tall ledges. - Fixed: When giving an autoactivatable item to the player a copy is created to allow respawning. But when the item had been successully used the original was destroyed, not the copy. - Fixed: dssiglup was misspelled as dssglup in SNDINFO so the Sigil's charging sound never played. - Fixed: The sigil doesn't use the generic weapon pickup sound. It should use weapons/sigilcharge. - Fixed: P_Move never checked whether a monster has the MF2_PUSHWALL flag. As a result everything using A_Chase was able to activate pushable walls and not just the monsters which are allowed to activate them. - Fixed: P_Move must split the move if the step size is larger than the radius. - Fixed: tmfloorpic was set in P_LineOpening. But this is not guaranteed to set the correct picture because the end result depends on the line ordering and not the sector heights. It must be set in PIT_CheckLine. - Fixed: Due to the previously missing ceilingsector variable bouncing missiles could use the incorrect sector when hitting an edge between ceilings of different height. - Fixed: Missiles exploding on the edge of a ceiling neighboring to a sky vanished instead of exploding if the missile's center was in the sky sector. To do this I added ceilingsector and ceilingpic variables to AActor, similar to the already existing floorsector and floorpic. - Fixed: ZDoom now looks for ZDoom.wad in the program directory first. April 16, 2006 - Fixed: After respawning in a singleplayer demo, demo playback went out of sync becase the RNG seed was being altered during recording but not during playback. This was caused by an inappropriate fix for a similar problem: -record calls G_InitNew() before it actually starts recording the demo, but -playdemo calls G_InitNew() after it starts playback. So the rngseed stored in the demo was already altered. The correct thing to do is not to prevent the rngseed from changing during playback but to move the call to G_InitNew() after the call to G_BeginRecording(). - Fixed: After respawning in a demo, demo playback was prematurely terminated. April 16, 2006 (Changes by Graf Zahl) - Increased the limit for the sound DoorCloseLight in Hexen to 4 because it got cut off in the polyobject crusher in MAP01. - Fixed: A player that has no body (as in the head popped off in Heretic and Hexen) must not be resurrected. - Fixed: Repeatable switches that are being activated while the switch animation was still running didn't react properly. - Fixed: Not all paths in P_LoadSegs freed the vertchanged array. - Fixed: With infinitely tall actors on P_CheckPosition must not check for stepping on things. - Fixed: R_FakeFlat used the control sector's floor light level for ceilings of deep water areas. - Fixed: Dormant floating monsters still adjusted their height to their target. - Fixed: Invisible special things should never create terrain splashes. - Changed: The Demon no longer reduces the actual state durations for fast mode. Now this is done by AActor::SetState and controlled by actor flags. - Fixed: Friendly monsters are now completely excluded fron being counted as kills. April 15, 2006 (Changes by Graf Zahl) - Changed -warp for ExMy to use atoi to parse the parameters. This is more robust than reading the characters directly. - Expanded thing and line args to 32 bit. - Extended Makewad so it can write Zip files in addition to WAD files. April 14, 2006 (Changes by Graf Zahl) - Moved SC_CheckFloat into sc_man.cpp. - Fixed several issues with the DECORATE parser: * Floating point parameters couldn't be parsed correctly * Some code pointers used parameters incorrectly. * Parameters with default value 1 didn't work as expected - Added GZDoom's HI_START/HI_END lump namespace. Even though it doesn't do anything (yet) suppporting it allows to make WADs that use hires texture replacements but are able to run with ZDoom as well. - Added GZDoom's Zip-support but changed it so that lumps are sorted alphabetically. - Added the missing file 'flac/private/float.h' to the repository. - Added: For Zip-support the sound code has to be able to load music data from memory, not just from files. - Re-added I_SetMusicVolume to optionally reduce the music volume in Strife conversations. - Fixed: The total game time must not be restored when loading a snapshot during a hub transition. April 13, 2006 - Fix farchive.cpp swappers for GCC again. Now that they use entirely integer math, they should work with all GCC versions. - Update FLAC readers to #define FLAC__NO_DLL to match the new FLAC builds. April 13, 2006 (Changes by Graf Zahl) - Made weapons/bowhit unlimited. With a limit of 2 it won't be played consistently. - Fixed: 'Give' worked for dead players. - Added checks for sectors without lines to all Find* functions in p_sector.cpp - Fixed: Dehacked patches weren't loaded when not playing Doom. - Fixed: Thing_Remove must not remove living players from the map. - Fixed: Using $MAP in SNDINFO overrode music definitions in MAPINFO. This made it impossible to define music in MAPINFO for Hexen. - Fixed: Resurrecting a morphed player must first restore the unmorphed version. - Fixed: Resurrect must set the player's weapon to a valid state. - Fixed: The decal stretcher is supposed to stretch the decal to a specifiable size but it used that size as a scaling factor instead. The old code allowed a maximum scaling factor of 4 which masked this bug to a large extent but with the increased precision the blood smears were stretched to abnormal proportions. - Fixed: A non-spectral attack set any spectral target to its missile state. This is not supposed to happen. - Fixed: The Prison Key was misspelled in the pickup message. - Added missing lock messages for Strife. - Fixed some ammo pickup values for Strife. - Added the missing messages when killing a spectre in Strife. - Fixed: DImpactDecal's default constructor called ChangeStatNum which caused a crash. Now it calls DBaseDecal's constructor that allows changing the statnum. - Added additive translucency to the Ironlich's projectiles. - Added a check for AInventory to PickConversationReply before giving an item to the player. This could crash if non-inventory items were given. - Added a few console commands useful for map testing: * 'monster' lists all monsters and their position. * 'items' does the same for items. * 'changesky' changes the sky texture. Useful for trying out different skies. * 'linetarget' prints some information about the monster the player is aiming at. April 12, 2006 - Fixed: Using printinv before starting a game crashed. - Fixed: DMover::MovePlane() would not stop moving the plane when it exactly reached its target height unless it was a floor moving down. - Fixed: Actors that can't attack should not be valid haters for Thing_Hate. - Fixed: AArtiBlastRadius::BlastActor() should not set MF2_SLIDE for missiles. - Fixed: sdl/i_input.cpp should check !iscntrl() before generating EV_GUI_Char messages. - Added Jim's Makefile.linux. - Changed: Decal scales now use full precision fixed point numbers. - Changed: Keeping impact decals in their own statlist is enough to keep track of them for when one needs to be destroyed. There's no need to maintain a separate list for them. - Fixed: Decal actors did not spread their decals across neighboring walls. - Fixed: Decal groups did not initialize their IDs and could not be reliably used with the decal actor. - Fixed: Decals on moving polyobjects were not interpolated. R_RenderDecal() now uses the decal's LeftDistance to calculate its visible location, so it always stays in sync with the wall's vertices. This also lets me dump some code from the polyobjects that maintained the decals' (x, y) coordinates. Also, the decals' x and y information is redundant and can be removed. Doing this revealed a bug with slider decals and horizontal sliding: That is, it didn't work at all. I have opted to simply remove the horizontal sliding support so that I don't have to worry about what happens when a decal slides across the edge of a wall. - Fixed: DBaseDecal::LeftDistance was calculated as a 30.2 fixed point number. It should be 2.30 fixed point. April 12, 2006 (Changes by Graf Zahl) - Fixed: SAVEVER was still 231 although MINSAVEVER was 232. - Fixed: Decal spreading used an incorrect z-coordinate. It has to use the one originally passed to DImpactDecal::StaticCreate. April 11, 2006 - Fixed: GCC misoptimized the SWAP macros in farchive.cpp. - Fixed: Compiling with mingw once again works. - Fixed: ACS improperly calculated the address of local variables when returning from one function to another function when the function that was called was used as part of an expression. - Fixed: Using Thing_Hate with arg0 (hater) set to 0 from an open script could crash. - Fixed: Some items along ledges in Hexen's MAP32 (Orchard of Lamentations) appeared at the bottom of the ledge (and consequently inside it) instead of on top of it because the items were placed directly on the lines. AActor::LinkToWorldForMapThing() needs to use the original R_PointOnLineSide() code to handle situations like this. Previously, it just used the original code for straight horizontal/vertical lines and used the new code for diagonal lines. - Fixed: FWadCollection::MergeLumps() used in incorrect realloc. - Fixed: FPlayList::NextLine() did not properly handle blank lines in the playlist. - Changed: Decals now use lightweight thinkers instead of actors. (76 bytes versus 396, so you save 320k if you have 1024 decals present.) - Fixed: Wads added with pullin were loaded immediately after the IWAD. Exec files are now processed immediately before -file but after autoloading wads in D_DoomMain(). - Fixed: sdl/i_system.h unconditionally defined SHARE_DIR, preventing redefinition from the command line. - Fixed: The standard way to include SDL.h is <SDL.h>, not <SDL/SDL.h>. - Fixed: Returned FActiveInterpolation::HashKey()'s return type to size_t, avoiding a pointer truncation warning. April 11, 2006 (Changes by Graf Zahl) - Fixed: Strife's dialogs don't give weapons to the player he already has. - Fixed: The INDIANA cheat in Hexen gives 25 of each item, not just 1. - Fixed: The stair builder's compatibility mode must do a linear search for sectors. Searching the hash chain doesn't work here. - Fixed: Any monster with a TakeSpecialDamage method should call the super class's method instead of simply returning the damage amount. - Fixed: Hexen's mash monsters cannot be frozen. No matter how you kill them they just vanish. This means they need the NOICEDEATH flag. - Fixed: Morphing a monster must also copy its translucency settings. - Fixed: The first Macil must react to weapon fire, even though he doesn't get hurt by it. - Fixed: Anything with a raise state needs the MF_CORPSE flag when dying because otherwise it can't be revived. - Fixed: Player names in Heretic, Hexen nand Strife could only be 13 characters because the input routine did an unnecessary font size check. - Added: After saving the game the savegame should be checked and in case of an error an appropriate message be output. - Fixed: The pig player had an initial health of 100, not 30. - Fixed: Morphing a player removes the armor after transferring the inventory to the morphed version - but it tried to remove it from the unmorphed player instead. - Fixed: Heretic uses Backspace to activate the Tome of Power by default. - Fixed: 'Use all' should not try to use puzzle items. - Made FileReader's methods virtual. Right now this isn't important but when ZIP support will be added it is needed. Also added a MemoryReader class that derives from FileReader. - Added a pointer check to DI_Acquire and DI_Unacquire. GZDoom definitely had problems with that so it might be a good idea to always check these pointers. - Added an engine signature to the savegame. The inability to distinguish between ZDoom and GZDoom savegames constantly forced me to use some ugly tricks which broke the versioning system. This may also be useful for other derivates that have to save additional data in a savegame. - Due to the savegame version bump I removed all compatibility code. - I had to bump the minimum savegame version because I got some strange effects with old savegames. On the positive side, this allows me to do a few more radical changes to the savegame code. ;) - Fixed: CanvasTextures weren't saved in a savegame. - Fixed: Multiple warp commands for the same texture were cumulative. - Changed FPatchTexture::MakeTexture and FIMGZTexture::MakeTexture so they don't re-initialize the texture's size information repeatedly. This can cause problems if code was added that manipulates these values after loading the textures. - Changed FPatchTexture::GetDimensions to use ReopenLumpNum instead of OpenLumpNum. Once ZIP handling is added the current code won't work anymore without adding a highly expensive copy operator to FWadLump. - Added Transfer_WallLight special. This is similar to Transfer_Floor/Ceilinglight but affects walls instead. - Fixed: P_TestActivateLine must check whether a valid actor is trying to activate the line. - Added a check for MF2_NOTELEPORT to the special activation check for Booms generic triggers. This excludes most items from activating these lines that are not supposed to do that. - Added a sv_dropstyle CVAR so that the way items are dropped is no longer dependent on the game being played. - Added MF4_FRIGHTENED flag from .96x. - Added a CVAR that disables the automap background graphic in Heretic and Hexen. - Added more color options to the automap, including the option to show secrets. - Added menu option for the monster movement interpolation CVAR. - Fixed: Strife's grenades don't make bouncing sounds. - Fixed: Strife's grenades lose 50% of their momentum when bouncing, not 30% like in Hexen. - Fixed: HexenHack must be reset for each MAPINFO lump being parsed. - Turned monster falling damage into a level flag so that it can be used in all games, not just Hexen. - Added the map's lump name to the savegame information. This is useful for those who remember maps by their lump name and not the description. - Added a total game time counter and made the total time display on the intermission screen operrable. Also added an optional total time display for the automap. - Added support for full hub intermission statistics. To make this work properly level.time is now being reset after changing hubs. - Added GZDoom's local SNDINFO/SNDSEQ code. This was supposed to be in .96x but that was cancelled before I had the chance. - Made DCanvas::FlatFill virtual so it can be overridden by other types of canvases (e.g. OpenGL.) - Fixed: CR_UNTRANSLATED was uninitialized for FON2 fonts - Fixed: Hexen uses a view height of 48, not 41. - Changed: Multiplayer weapons will be spawned in coop games now unless the player explicitly disables this. There are many WADs out there that need the additional weapons in coop games. - Added code that remaps MF_NOSECTOR to RF_INVISIBLE for all items touched by Dehacked and for ABossEye. MF_NOSECTOR makes any item completely deaf so it is very dangerous to use with monsters or other things that depend on their sound target. - Fixed: The Dehacked code cleared one of the translation flags. - Fixed: The dehacked parser must set EnglishStrings to NULL after freeing the memory. - Copied a fix for restoring the weapon slots from 2.1.0. - Fixed: APathFollower::Interpolate needs some NULL pointer checks. - Added MF2_NOTELEPORT to ABlood and AIceChunk. Teleporting blood can seriously mess up one-time teleporters - plus it looks just weird. - Fixed: It was possible to use things through closed walls when the wall was further away than 64 map units. - Added a check for MF3_BLOODLESSIMPACT to P_LineAttack so that bloodless hitscan attacks can be created. - Added a check to P_CheckSlopeWalk that prevents sliding when hanging over a sloped dropoff. - Fixed: The line id hash chains used signed shorts to link their elements. This completely broke line manipulation for linedef indices >= 32768. - Fixed: Changed PL_SKYFLAT from 0x8000 to 0x10000 because otherwise it doesn't work with linedef indices >= 32768. Also expanded sector_t::sky from WORD to int to make this work. - Added the flag parser fix from GZDoom. It was still incorrect. - Added an escape flag to sc_man. This was necessary to parse the frame names correctly which can contain backslashes so they must be excluded from converting \" to ". - Fixed: The 'ELVIS' cheat code wasn't terminated with 255. - Fixed: When an object without any death state dies it has to be destroyed. - Added 'nofog' parameter to Thing_Move - Added a check for Teleport_ZombieChanger to P_TranslateTeleportThings. - Fixed: Dumpmap crashed when the loaded map has GL nodes because it tried to access the linedef of a miniseg. Needless to say, the BSP that is written in this case is completely broken but at least it doesn't crash anymore. - Fixed: z-momentum application in P_ZMovement was incompatible with the original method. Unless MF2_FLOATBOB is set it must be done before applying gravity to momz. - Fixed: AActor::Massacre caused an infinite loop when it wasn't able to hurt the actor. - Fixed: Due to movement interpolation the viewsector could be incorrect if the actual camera's position and the interpolated position were not in the same sector. - Fixed: Assigning an empty string to a 'string' object NULLed the Chars pointer. This cannot be done because it makes the string object invalid. - Fixed: Default intermission handling for E1-E3 should only happen when playing Doom 1 and Heretic. - Fixed: 'Give all' cheat must not try to give an item of type 'All'. - Fixed: In rare circumstances DBoundingBox::AddToBox could produce incorrect results. - Fixed: The node builder still used NO_INDEX for initializing non-existent sidedefs. - Added MaxStepHeight and MaxDropoffHeight actor properties to DECORATE. - Added new code pointers from GZDoom: A_FireAssaultGun, A_FadeIn and the target inventory functions. Also added changes to several other code pointers. - Fixed: The FlameThrowerParts were missing the IF_INVBAR flag. - Added a third parameter to A_BFGSpray to customize the amount of damage. - Added A_DualPainAttack code pointer submitted by Justin for GZDoom. - Fixed: AFatShot must have a height of 8, not 32. - Fixed: AFighterPLayer::DoHealingRadius initialized the armor item incorrectly so it was ineffective. - Fixed: Strife's Brass Key needs a DoomEdNum of 39. - Removed all the obsolete code and variables from the keys. With the LOCKDEFS lump the original key numbers were deleted anyway and the NeedKey messages are taken from the lump now. April 10, 2006 (Changes by Graf Zahl) - Fixed: The Teleporter Beacon was missing the pickup message. - Made the IronLich's projectiles bright. Using them in non-bright state in dark sectors looks truly odd. - Fixed: Using bot_observer cleared the FRIENDLY flag off the player. - Fixed: Changed some decals from DecalScorch to DecalScorchLower. - Fixed: Added the missing intermission lumps and LOCKDEFS to zdoom.wad - Changed the damage formula for Strife's dagger. This change has already been added to the 2.1.0 source but not to the current version. - Added a call to P_HitFriend to A_SentinelRefire to prevent it from shooting at friends. - Fixed: The Inquisitor's grenades should not teleport. - Fixed: The Inquisitor isn't supposed to be thrust by damage so its mass has to be increased. - Fixed: Strife's Inquisitor can be hurt by radius damage as long as this damage comes from a non-Inquisitor. - Fixed: AArtiDarkServant::Use must always report successful use of the item. This function cannot fail. It either spawns a Minotaur or a new artifact but never nothing at all. - Fixed: Hexen's temp flames have two spawn IDs each. Since ZDoom doesn't support multiple spawn IDs per item I added copies of these objects to assign the second set od IDs. - Fixed: Hexen's wall torch was missing the MF4_FIXMAPTHINGPOS flag. - Fixed: A_CStaffCheckBlink must call A_WeaponReady because otherwise the weapon bobbing becomes slightly erratic. - Fixed: AGoldWandPuff2 had incorrect values set for flags2. - Clamped the vertical speed of Heretic's Mace's balls. When shot at a high vertical angle their movement becomes erratic. - Fixed: Doom's corpses must clear the MF3_ISMONSTER flag inherited from their monster parents. April 9, 2006 - Fixed: The strupr() implementation in w_wad.cpp relied on compiler-dependant behavior. - Fixed fix: ParseActorProperties() still wasn't sending + or - to ActorFlagSetOrReset(). - Fixed: [GZ] An item without use state won't be removed when being picked up. The call to GoAwayAndDie is missing. - Fixed: [GZ] A_GiveInventory sets the amount to give to a value passed to this function. This is ok for everything except Health items. They should give their original amount multiplied with the passed parameter. April 3, 2006 - Fixed: Potential buffer overrun when launching timidity. March 13, 2006 - Fixed: ActorFlagSetOrReset() wasn't receiving the + or - character from ParseActorProperties(). - Fixed: The decorate FindFlag() function returned flags from ActorFlags instead of the passed flags set. - Fixed: The CHT_CHAINSAW, CHT_POWER, CHT_HEALTH, and CHT_RESSURECT needed NULL player->mo checks. - Fixed: The "give all" command didn't give the backpack in Doom, and it must give the backpack before giving ammo. - Fixed: P_SetPsprite() must not call the action function if the player is not attached to an actor. This can happen, for instance, if the level is destroyed while the player is holding a powered-up Phoenix Rod. As part of its EndPowerup() function, it sets the psprite to the regular version, but the player actor has already been destroyed. - Fixed: FinishThingdef() needs to check for valid names, because weapons could have inherited valid pointers from their superclass. - Fixed: fuglyname didn't work. - Fixed: Redefining $ambient sounds leaked memory. - Added Jim's crashcatcher.c fix for better shell support. - VC7.1 seems to have no trouble distinguishing between passing a (const TypeInfo *) reference to operator<< and the generic, templated (object *) version, so a few places that can benefit from it now use it. I believe VC6 had problems with this, which is why I didn't do it all along. The function's implementation was also moved out of dobject.cpp and into farchive.cpp. - Fixed: UnpackPixels() unpacked all chunks in a byte, which is wrong for the last byte in a row if the image width is not an even multiple of the number pixels per byte. - Fixed: P_TranslateLineDef() should only clear monster activation for secret useable lines, not crossable lines. - Fixed: Some leftover P_IsHostile() calls still needed to be rewritten. - Fixed: AWeaponHolder::Serialize() wrote the class type in all circumstances. March 12, 2006 - Fixed: A_SpawnItem() should use CopyFriendliness(). - Fixed: AExplosiveBarrel should have MF2_MCROSS set. - Fixed: Passing 0 numrays to A_BFGSpray should default to 40. - Fixed: New A_JumpIfCloser() function. - Future-proofing: thingdef.cpp/FindState() allows the 2.1 names for SwitchingDecorations. - Fixed: ASwitchingDecoration declared itself as deriving from AActor instead of ASwitchableDecoration. March 9, 2006 - Fixed: AWeaponHolder::Serialize() did not call its supermethod. March 1, 2006 - Rewrote MusicVolumes handling so it's a list and not an array. - Removed I_SetMusicVolume(). It isn't used. - Moved P_IsFriend(), P_IsHostile(), and P_GetSpecies() into AActor. February 18, 2006 - Various fixes for compilation with GCC/Linux. - Various fixes from Graf Zahl: Wrong blood color with P_BloodSplatter2() and P_RipperBlood(). Wrong MF3_BLOODLESSIMPACT check in PIT_CheckThing(). P_BloodSplatter() used R_PointToAngle(). A_CPosRefire() did not check for hitting a friend. A_CentaurDefend() did not clear the reflective flag. DHUDMessage::ResetText() did not check for con_scaletext==2. Wrong Raven scroller speeds for COMPATF_RAVENSCROLL off. P_Init() should call P_InitKeyMessages(). Missing decorate decal code from decallib.cpp. New FFontChar1 code only made it into 2.1.0 and not 2.0.x. Missing copy constructor for FMusicVolume. - Fixed: ACustomInventory::TryPickup() failed to call the superclass implementation of the function. - Fixed: Friendly pain elementals killed by a player shot friendly lost souls that attacked the player. Now those lost souls aren't friendly. February 6, 2006 - Fixed: Except for A_Explode512, all of Strife's A_Explode functions also call P_RecursiveSound. - SpectralLightningSpot's RenderStyle is now STYLE_Translucent. It isn't really part of the lightning itself, so it should probably not be additive. - Fixed: Macil2 and the Oracle are invulnerable to the first stage Sigil, and the first Macil should be completely unkillable. - Fixed: The FlameThrowerParts' spawn state was unset, and it used a generic pickup message. - Fixed: Strife step heights vary depending on the type of actor: If it bleeds it can go up 16 unit steps, if it's a missile it can go up 4 unit steps, and everything else can go up 24 unit steps. And everything can stand over a 32 unit dropoff. MaxStepHeight and MaxDropOffHeight are now actor properties. - Fixed: Strife floating monsters are not blocked by monster blocking lines, so they all need to have MF3_NOBLOCKMONST set. - Fixed: APowerCoupling::Die() should destroy the unbroken coupling. - Fixed: AActor::TakeSpecialDamage() should allow damage if the actor has no death state at all. (Taken from GZDoom) - Fixed: Killing something that drops an alarm with the second-stage mauler would not show the alarm text if it was directly hit by the main torpedo. Added a third argument to P_SpawnSubMissile() that indicates what the new missile's "target" should be, so if the missile dies right away, it has the correct target information. - Fixed: Added Graf Zahl's fix for manually closing animated doors with something inside them. - Fixed: The A key should be bound to +jump by default in Strife. - Fixed: F_BunnyScroll() should fill the widescreen border with black, not the FinaleFlat. - Fixed: Strife linetype 52 can be used to advance to the next map by setting its tag to 0. It should also be flagged repeatable. - Fixed: A_Look2() is supposed to randomly choose self->SpawnState + 3 if MF4_STANDSTILL is unset, not + 4. - A_AcolyteDie() now resets the acolyte's RenderStyle to turn off any shadow effects they may have. January 24, 2006 -- First changes of 2006! 1.5 months later! :( - Added a new level.maptime variable that keeps track of the time you've been on a single level and is unaffected by hubs. - Fixed: ASoulsphere::Use() could reduce your health. - Fixed: cht_Suicide() did not clear the MF2_INVULNERABLE flag. - Increased the sidedef limit to 2^32-1. - Fixed: Stacked sectors inside a skybox would be drawn from the player's origin instead of the skybox's origin, which would easily lead to infinite recursion because the engine would try to render the skybox again instead of the other side of the stack. In order to avoid any other infinite recursion problems, the maximum number of skybox visplanes per scene has now been capped at 100. - Changed the inventory flag IF_CHEATNOTWEAPON to the weapon flag WIF_CHEATNOTWEAPON. December 11, 2005 - Started integrating changes from 96x into 2.0.99. December 10, 2005 - Fixed: GetFinaleText() did not null-terminate the string it retrieved. - Fixed: When changing levels, sky1pos and sky2pos were not reset to 0. - Removed the check for 26,26 at offset 33 in SPC files because somebody found a file that had them as 0,0 instead, and some players played it fine. - Fixed: Before resorting to "Person", the dialogue code should use the actor's tag name as a default name. - Increased the Entity's alpha value to 50% to make it more visible. - Fixed: F_StartSlideshow() needs to reset any blending. - When a Macil speech ends, the level's original music is now restored. - Fixed: The music for Strife's slideshows is D_DARK and not D_SLIDE. Go figure. December 4, 2005 - Removed the ancient and unused Fixed(Mul|Div)_(ASM|C) functions. - Discovered the GCC outputs nice code for MulScale and friends, so I removed the assembly for those routines in gccinlines.h. Alas, the same cannot be said of DivScale's variants. - Removed the assembly code for BigShort and BigLong and replaced it with compiler intrinsics provided by VC++. December 1, 2005 - Backported miscellaneous sc_man.cpp fixes from 2.1.0. - Fixed: P_BobWeapon() checked flags instead of WeaponFlags for WIF_DONTBOB. - R_ProjectSprite() now checks for NULL things passed to it. - Fixed: The game crashed if a slope thing of type 9500 or 9501 was placed directly on its target line. Now you get a warning in the console instead. - Returned Berserk's behavior to giving you 100 health instead of 100% health. - Changed: When no screenshot_dir is specified, the game now tries to save screenshots to the program directory instead of the current directory. If you really want screenshots to be saved to the current directory, you can do so by setting screenshot_dir to "." - Fixed: StringFormat::VWorker cleared the zero flag for numbers. (I know I tested this, so I'm not sure when it went wrong.) - Fixed: The game did not check if actors had pain states before putting them in their pain states. - Fixed: The shazam cheat could not deactivate the Tome of Power, nor did it display any text informing you of its action. - Added additional decals from Graf Zahl's DECALDEF. - Updated the obituaries in english-us.txt for Heretic to reflect the published names of various Heretic monsters. - Fixed: There is no reason why the Heretic and Hexen status bars should clamp the displayed health to a maximum of 100. - Fixed: P_PlayerInSpecialSector() duplicated the damage done by P_PlayerOnSpecialFlat(). - Fixed: The actor serializer was off by one when checking the number of conversation nodes in a script. - Fixed: In Strife dialogues, yes texts are printed even when it jumps immediately to another dialogue node. I think this is bad design, and the yes text should be part of the normal dialogue, but the person in the east room of MAP27 abuses this, so I need to support it too. This also means the notify text is no longer hidden when the menu is up. (Maybe they mistakenly made it jump, and you were really supposed to try talking to him again when he tells you the master doesn't like visitors.) - Fixed: Anybody in Strife who does not have their name provided in their dialogue script should use the default name "Person". - Fixed: P_RecursiveSound() did not consider closed split doors as closed. - Fixed: MummyFX1 and Whirlwind should have the MF2_SEEKERMISSILE flag set. - Fixed: A_VileChase() did not clear the MF3_CRASHED flag. - Fixed: P_SpawnPlayer() should always attach the StatusBar if the consoleplayer is spawning. - Fixed: HateTarget did not take damage due to its lack of a death state. - Fixed: CheckInventory(), TakeInventory(), and GiveInventory need NULL type checks. - Fixed: SC_GetString() did not understand escaped quote characters in strings. - Fixed: There were synchronization issues while drawing the console. Calls to DrawTexture() can trigger input events to be processed, which can cause the contents of the console to change WHILE THE CONSOLE IS BEING DRAWN. So now any changes that would alter the contents of the console text buffer are deferred until after the buffer is drawn, and a copy of the command line is drawn instead of the real command line. November 22, 2005 - Fixed: Dssswtchx and dspistol are obviously wrong choices for Strife menu sounds. I don't think it uses anything for those sounds, but I picked analogs for them anyway. - Fixed: Merchants ignored attacks from "silent" weapons. - Fixed: Strife humans did not play their "yeargh!" sound for their zap deaths. - Added a new Travelled() method for inventory items. This is called each time an item travels to a new map and gives it a chance to perform any needed reinitialization. Specficially, PowerTargeter needs it to set the player's psprites again. - Fixed: Dropping coins should do so in increments of 50 if you have enough, not increments of 1. - Added IF_UNDROPPABLE to HealthTraining and GunTraining. Because HealthTraining also gives GunTraining when picked up, you could cheat by dropping the HealthTraining item and picking it up to get as many GunTraining upgrades as you wanted. GunTraining doesn't really need to be undroppable; the flag is just there for it for the sake of symmetry. - Fixed: It looks like just about everything in Strife should have MF2_FLOORCLIP set. Strife probably applied floorclip to everything without MF_NOGRAVITY set. - Fixed: The perfectly vertical missile movement fix was backwards with regards to damage values. - Fixed: AddCommandString() scanned past terminating '\0's in unclosed strings while searching for semicolons that break commands. Thus, if the previous command added had a semicolon in just the right place, it could try to add it again. - Fixed: The fly cheat did not check to make sure you had a body. November 18, 2005 - Fixed: You could create a chain reaction where merchants would continually enter their pain state because there was a delay between the time when they alerted and the time they alerted others. - Fixed: If the Inquisitor died while flying, it would continue to play the flying sound. - Fixed: The LEGO cheat didn't check if the Sigil was successfully added and would set the player to the NULL weapon if it wasn't (which happens with the shareware). - Fixed: Macil was alerted by water splashing. - Reworded some of the compatibility options menu items so they fit on the screen when playing Strife. - Fixed: The Oracle's Death checked the wrong quest item to determine if you had already killed Macil. November 17, 2005 - Fixed: Various Strife actors had MF_COUNTKILL that didn't need it: Beggar, KneelingGuy, Macil1, RatBuddy, and AcolyteToBe. - Fixed: PowerMask and PowerShadow both need the IF_HUBPOWER flag. - Fixed: The Strife quest log should be initialized with the text "Find help". November 14, 2005 - Fixed: ClientObituary() crashed if the killing player didn't have a weapon. - Fixed: The Touch functions assumed the toucher was a valid player and crashed if it wasn't. - Fixed: APlayerPawn::Die() assumed the actor was always associated with a player and crashed if it wasn't and you had weapon dropping turned on. - Fixed: There were two pfile variables defined in R_InitTextures(). November 13, 2005 - Fixed: The user-configurable BOOM startup strings were always printed, even if they were empty. November 8, 2005 - Fixed: APowerStrength::GetBlend()'s equation did not match Doom's. - Fixed: If you have weapon sprites in a wad and try to use a frame from that sprite that does not exist, the game accesses might crash. Fixing this involves two things: Make the range checks in R_DrawPSprite() unconditional, so they exist in both debug and release builds. Also add a check for the Null texture to catch "holes" in the available frames. - Fixed: Setmodeneeded is always true before starting a game, because it only gets cleared when the StatusBar is around. The most obvious manifestation of this problem is that you cannot move left and right in the video modes menu before starting a game. - Fixed: The "give all" cheat did not give a backpack, and the non-console equivalents always gave you a backpack, even if you weren't playing Doom. - Fixed: The "give armor" cheat gave you armor with a SavePercent of .5 in Heretic. This would be correct for the others games, but not for Heretic, where .5 is what the lesser armor provides. November 7, 2005 - New: Games saved for different PWADs but the same IWAD now show up in orange on the save/load menu. - Fixed: R_RenderViewToCanvas() did nothing if viewactive was false. Thus, savegame screenshots would be garbage if you saved while looking at the automap. - To avoid potential conflicts with the Windows headers, the LONG and SHORT routines were renamed to LittleLong and LittleShort. BELONG and BESHORT were also renamed to BigLong and BigShort to match. - Fixed: S_ChangeMusic() had a cast from 'const char *' to 'char *' that was missed by VC++ 7.1 and GCC, but not the latest VC++ 2005 beta. - Fixed: Although bit 27 of the actor's flag is now used for something different than in Doom, it's okay to specify it by number in a Dehacked patch, because it's used to set the color translation. When the translation is set, it will be 0'ed then. - Fixed: FActorInfo::ApplyDefaults() should initialize datastr to NULL. - Fixed: TArray::Delete's parameter should be unsigned. - Fixed: The fix for rotating polyobjects broke polyobject doors. - Fixed: Using the IDBEHOLDS cheat did not give you full health. - Backported the fix for scrolling Heretic/Hexen/Strife specials from 2.1.0. - Increased KneelingGuy's height to 17 so that you cannot step on top of the projector without jumping. - Added a confirmation screen for the menu choices that reset your options. - Added a new automap menu underneath the display options menu. Moved all the automap options into it and added a few new ones.
-
Graf Zahl
- Lead GZDoom+Raze Developer

- Posts: 49252
- Joined: Sat Jul 19, 2003 10:19 am
- Location: Germany
-
Shadelight
- Posts: 5113
- Joined: Fri May 20, 2005 11:16 am
- Location: Labrynna
-
Nash
-

- Posts: 17512
- Joined: Mon Oct 27, 2003 12:07 am
- Location: Kuala Lumpur, Malaysia
-
Nash
-

- Posts: 17512
- Joined: Mon Oct 27, 2003 12:07 am
- Location: Kuala Lumpur, Malaysia
-
Graf Zahl
- Lead GZDoom+Raze Developer

- Posts: 49252
- Joined: Sat Jul 19, 2003 10:19 am
- Location: Germany
Post by Graf Zahl »
What makes you think that WARP2 is not included?
Code: Select all
// [GRB] Added warping type 2
else if (SC_Compare ("warp") || SC_Compare ("warp2"))
{
bool isflat = false;
BOOL type2 = SC_Compare ("warp2"); // [GRB]
SC_MustGetString ();
if (SC_Compare ("flat"))
{
isflat = true;
SC_MustGetString ();
}
else if (SC_Compare ("texture"))
{
isflat = false;
SC_MustGetString ();
}
else
{
SC_ScriptError (NULL);
}
int picnum = TexMan.CheckForTexture (sc_String, isflat ? FTexture::TEX_Flat : FTexture::TEX_Wall, texflags);
if (picnum != -1)
{
FTexture * warper = TexMan[picnum];
// don't warp a texture more than once
if (!warper->bWarped)
{
if (type2) // [GRB]
warper = new FWarp2Texture (warper);
else
warper = new FWarpTexture (warper);
TexMan.ReplaceTexture (picnum, warper, false);
}
}
}
-
Enjay
-

- Posts: 27512
- Joined: Tue Jul 15, 2003 4:58 pm
- Location: Scotland
Post by Enjay »
I can't check again right now, but on reading (above) that WARP2 wasn't included last night, I opened one of my levels that uses both WARP and WARP2 quite near each other. Both floors were warping, but I couldn't see any obvious difference between the appearance of the two liquids. They both seemed to be using WARP. It was just a quick check, but that's how it seemed. I didn't check in GZDoom to see if there was any difference. As you know, I can't use the shaders in GZDoom so I assume the warping of Zdoom and GZDoom is the same code for me.
-
Graf Zahl
- Lead GZDoom+Raze Developer

- Posts: 49252
- Joined: Sat Jul 19, 2003 10:19 am
- Location: Germany
-
silentzora
- Posts: 464
- Joined: Sun Jan 04, 2004 6:24 pm
-
Graf Zahl
- Lead GZDoom+Raze Developer

- Posts: 49252
- Joined: Sat Jul 19, 2003 10:19 am
- Location: Germany
-
Enjay
-

- Posts: 27512
- Joined: Tue Jul 15, 2003 4:58 pm
- Location: Scotland
Post by Enjay »
Purely out of interest, am I correct in saying that, as far as Zdoom developement and versions go, the intention is to fix any glaring bugs in this version and then call it "complete", stop development on this codebase and then move on to the FP codebase and have that as the in-development stuff from that point on? That's certainly how it seems, I'm just making sure I've got it right.
Return to “ZDoom (and related) News”
Jump to
- Official
- ↳ ZDoom (and related) News
- ↳ The Spotlight
- ↳ Rules and Forum Announcements
- Projects
- ↳ Levels
- ↳ Gameplay Mods
- ↳ TCs, Full Games, and Other Projects
- ↳ Resources
- ↳ Requests
- ↳ Script Library
- ↳ Graphic/Audio Patches
- ↳ Shaders
- Doom Editing Help
- ↳ Scripting
- ↳ Mapping
- ↳ Assets (and other stuff)
- ↳ Tutorials
- ↳ Programming and Compiling
- Discussion
- ↳ General
- ↳ Networking
- ↳ Legacy Discussion
- ↳ Off-Topic
- Technical Issues
- ↳ Technical Issues
- ↳ Helpful Stickies
- ZDoom Development
- ↳ Bugs [UZDoom]
- ↳ Feature Suggestions [UZDoom]
- ↳ Bugs [LZDoom]
- ↳ Bugs [GZDoom]
- ↳ Important Threads
- ↳ Please check the latest version (or dev builds) before reporting!
- ↳ Classic ("Carmack") Software Renderer Bugs
- ↳ OpenGL Renderer Bugs
- ↳ OpenGLES Renderer Bugs
- ↳ Vulkan Renderer Bugs
- ↳ Audio/Music Bugs
- ↳ LZDoom Bugs
- ↳ ZDoom.org Bugs
- ↳ On Hold Bugs
- ↳ On-Hold Softpoly Bugs
- ↳ Closed Bugs [GZDoom]
- ↳ Vintage Build Bugs
- ↳ SoftPoly2 Bugs
- ↳ Feature Suggestions [GZDoom]
- ↳ ZDoom.org Suggestions
- ↳ Code Submissions
- ↳ On Hold Suggestions
- ↳ Closed Feature Suggestions [GZDoom]
- Raze-Specific Stuff
- ↳ Raze
- ↳ News
- ↳ Raze (and ZDoom-related) News
- ↳ Technical Issues
- ↳ Technical Issues
- ↳ Raze Development
- ↳ Bugs [Raze]
- ↳ On Hold Bugs
- ↳ Closed Bugs [Raze]
- ↳ Feature Suggestions [Raze]
- ↳ Code Submissions
- ↳ On Hold Suggestions
- ↳ Closed Feature Suggestions [Raze]
- ↳ Discussion
- ↳ General
- ↳ Editing Help
- ↳ Scripting (Build)
- ↳ Mapping (Build)
- ↳ Tutorials (Build)
- ↳ Projects
- ↳ Projects
- ↳ Abandoned Projects
- Software and Ports
- ↳ Launchers
- ↳ Game Engines
- ↳ Creation, Conversion, and Editing
- ↳ Miscellaneous
- Important Threads
- ↳ Official ZDoom Community Rules
- ↳ Official Discord Server
- ↳ New Password Requirements and Password Reset
- ↳ HELP! "Account is inactive!"
- ↳ Mod Download Broken? Request Reuploads Here
- ↳ Don't see your first post(s) here? DON'T PANIC
- Archives
- ↳ The Halls of the Dead
- ↳ Abandoned/Dead Projects
- ↳ Editing (Archive)
- ↳ Developer Blog
- ↳ Errors? Can't run that new mod? Your GZDoom or ZDoom may be too old!
- ↳ A quick notice about privacy (Re: Our efforts to combat spam)