================================================================================ Changes since Eternity Engine v3.40.00 ================================================================================ -------------------------------------------------------------------------------- 05/01/11 Preparation for a new release is underway. Added a vapordemo utility to the tools directory which can launch EE using CreateProcess with a specific command line in order to give a professional interface to the "Blue Box" release. -------------------------------------------------------------------------------- 04/30/11 Added a "hal" folder to hold Eternity's system-agnostic low-level modules, or what is otherwise known as a Hardware Abstraction Layer. We already use this approach in i_sound.cpp, and it will soon be extended to i_video.cpp so that Eternity can have an OpenGL-based 2D-in-3D video backend. Added EX_ML_BLOCKALL ExtraData flag for linedefs at esselfortium's much-repeated request. This is similar but not identical to ZDoom's BLOCKEVERYTHING flag, as it is lacking several hacks the latter has which allow things to see through block-everything linedefs under a set of haphazardly determined circumstances. No thanks to that, I say. -------------------------------------------------------------------------------- 04/28/11 The videomodes list left over from before EE supported -geom has been removed. -------------------------------------------------------------------------------- 04/22/11 CSonicGo reported that the removal of status bar caching somehow even further broke low detail mode, so effective as of now, Eternity no longer has support for this. I have torn out all of the code and salted the earth where it once stood so that it can never return :P This thing was unfortunately a thorn in my side almost from day one, as it just kept accumulating more and more weird and almost unexplainable problems. CSonicGo also pointed out that GCC's strict standards compliance means you can't use unqualified names inherited from an unspecified template parent class. Use of this-> to access data and method members is required because of a gaping hole in the C++ standard that causes templates and inheritance to not work together properly otherwise. Bleh. -------------------------------------------------------------------------------- 04/17/11 M_ExtractFileBase will now truncate LFNs passed in, to allow the use of demo files with names > 8 characters in base filename length. This was done to match the logic earlier adapted in PrBoom+ and just recently in Chocolate Doom. The PODCollection and Collection classes have been refactored so that they derive from a common BaseCollection class which implements the portion of their logic which can be shared. I also repaired a bad double construction problem in Collection. -------------------------------------------------------------------------------- 04/16/11 Yet another massive round of recursive dependency removal has been undertaken, but this is starting to seem like a never-ending chore. I have finally gotten around to removing all caching of the DOOM status bar. Impact on FPS determined to be infitesimal. In fact the game might even be faster. -------------------------------------------------------------------------------- 04/15/11 m_hash had a problem with a static array's declaration in MD5Hash which Visual C++ ignored but upon which GCC predictably choked. -------------------------------------------------------------------------------- 04/14/11 Fixed some GCC warnings regarding the Thinker class, and fixed more instances of string constants being assigned to char * members of structures. Files are no longer mass-dependent on the d_dwfile.h header. This was a left- over from years ago, back when d_io and d_dwfile were one header. Also undertook another massive round of removing unnecessary inclusion of headers through other headers. Had to remove use of d_namlen in my adjustment to the base directory logic, as POSIX states this to be an optional field of the dirent structure, and it seems that GNU libc doesn't support it. -------------------------------------------------------------------------------- 04/13/11 The "wrotesound" hack has been removed from the I_SDLUpdateSoundCB post-mix callback as it is unnecessary and incorrect to stop running the EQ when no samples were written during the current mixing pass - this is due to the fact that the EQ maintains a 3-sample buffer which needs to be pushed out to the audio stream even if there's no new samples coming in. The chewing of CPU earlier observed was apparently due to Pentium IV denormalization problems, which are now addressed with a "very small addend" factor adapted from the original 3-band EQ code as found on musicdsp.org. The d_inline define has been eliminated, since C++ supports "inline" natively. Gez contributed a patch for mmus2mid.cpp which fixes a long-standing problem with a message in TNT - Evilution's D_STALKS. -------------------------------------------------------------------------------- 04/12/11 Eternity will now no longer adopt a path as its valid base directory unless that folder is observed to contain at least the files startup.wad, root.edf, and a folder named "doom". Entryway apparently had problems in the past with EE seeing an unrelated directory called "base" in its current working directory and then refusing to run because it wasn't the real base dir. Trailing slashes are now stripped from paths in several places before they get passed to the C stat function, as that function seems incapable of finding a path if the provided path string ends in a slash of either type. -------------------------------------------------------------------------------- 04/10/11 I moved all the XL parser class methods' code outside of their class definitions because it was giving me bad Java flashbacks :P Security improvements have been made to qstring so that if virtually any method of the class is called which requires the buffer to be allocated, but the buffer has not been allocated yet, it will go ahead and allocate its own buffer then at that point. This allows qstrings to now be used without an explicit intializer method being called on them, which is extremely important for supporting their use as members of classes which only have a default constructor. I have eliminated the "boolean" typedef in preference for using the native C++ bool type directly, as this allows a lot of #include statements to be eliminated and also ensures that the bool type gets proper syntax highlighting in IDEs. SMMU dynamic musicinfo addition has been refactored to match sounds, such that unknown musics being requested will be added to the hash table on demand if a corresponding lump can be found in a loaded wadfile. This is in preference to the old system of scanning for D_ lumps in WAD files when they were added. Added a findSubStr method to qstring. Added an audio_buffers setting to system.cfg, as setting this to a higher number seems to at least partially alleviate some of the sound skipping I am STILL experiencing. Support for the $edfoverride keyword has been restored to the new XLSndInfoParser class. -------------------------------------------------------------------------------- 04/09/11 I have completed the new state-based parser for Hexen SNDINFO lumps. Volume clamp checks in the low-level sound code should be RANGECHECK-only, since this is a condition which should never happen under ordinary circumstances. NULL-origin sounds will no longer cut each other off unless they are the same sound. So for instance you can only hear one Cyberdemon MOO at a time, but a Cyberdemon MOO will not cut off a Boss Brain's wake-up sound. I think this is a very good balance between compatibility and sanity. -------------------------------------------------------------------------------- 04/08/11 SHA-1 hashes are now computed on the combined header and wad directory of all wad files that are loaded by Eternity. Two new command-line parameters have been added to support this: * -nowadhacks : Disables the application of all wad directory hacks, in case there is an astronomically unlikely SHA-1 hash collision that breaks an unrelated wad file. This would be repaired in the next release after being found, of course, by finding an additional way to distinguish the colliding WAD files. * -showhashes : Outputs the wad file's SHA-1 hash to the system console every time a WAD file is added. This is for development purposes, since in order to add a hack, I do have to be able to see the SHA-1 hash code for the WAD file :P The one and only current wad hack is for Gothic DM 2, and it repairs the incorrect position of the FF_START lump in that wad by exchanging it with one of the patch graphics (the lumpinfo_t's are swapped in the directory). Code for wad hacks lives in the new w_hacks.cpp module. -------------------------------------------------------------------------------- 04/07/11 w_sound_update_type has been removed as it was no longer used, and I have merged the three different Add*File methods of the WadDirectory class into one single method, which reduces the code duplication that was going on there. The logic does get a bit messy however and could use some revisiting to clean up later. Added a Collection template class which is similar to PODCollection but can store non-PODs, as it does placement construction and explicit destructor calls. In preparation for adding the ability to have SHA-1-based hacks that can be applied to the directories of certain well-known broken WAD files such as Gothic DM 2, I rewrote the m_hash module into a series of HashAlgorithm and HashData classes. -------------------------------------------------------------------------------- 04/04/11 I have added a PODCollection template class derived from ZoneObject which can store POD objects and intrinsic C++ data types. This acts as a generalized reallocating array, and efficiency is maximized as it does no unnecessary constructor or destructor logic on these objects which explicitly do not need it. The MobjCollection structure has been refactored into a class and made to inherit from PODCollection. It should be possible to replace almost all use of reallocating array logic with the PODCollection class eventually. -------------------------------------------------------------------------------- 04/03/11 Added a toLong method to qstring which calls strtol. MetaObject::toString has been reimplemented, as mentioned earlier, to use the new getZoneSize and getBlockPtr methods that it inherits from ZoneObject. Used together, these allow the entire MetaObject to be output as a hex dump instead of only the parent class data, which isn't interesting at all - just a bunch of linked list pointers. The z_zone.cpp module has been permanently disabled with #if 0, and the ZONE_NATIVE define is no longer required to compile Eternity. I eliminated all instances of ENCStringHashKey being accidentally passed into varargs functions under the incorrect idea that this would invoke their implicit conversion to const char * - obviously it does not. -------------------------------------------------------------------------------- 04/02/11 All metatable-related classes are now based on ZoneObject instead of defining their own operator new and delete. -------------------------------------------------------------------------------- 04/01/11 It is now possible to reflect properties of the zone heap memory block into the object itself, and as a result there are methods to get the zone block pointer (an alternative to using dynamic_cast), and to return the true allocated size of the object, which sizeof is not capable of doing (it returns the size of the immediate type when given a dereferenced pointer - it is not polymorphic). This latter facility can be used later in the MetaObject class to print out the full object when doing the default hex dump behavior - currently only the base class memory gets printed. I have also fully revamped zone instrumentation so that it does not call doom_printf but instead is drawn directly to the screen by code in d_main.cpp using V_FontWriteText and the console font, which gives better formatting. Bug fixes: * P_CheckPosition3D shouldn't error out if it gets called during an old Heretic demo, which enable 3D object clipping even though the implementation is not the same and therefore they're not going to sync anyway ;) * XLParser must return if root->index is equal to -1. This caused an I_Error from W_CacheLumpNum if there were no SNDINFO lumps. -------------------------------------------------------------------------------- 03/31/11 Finally concocted a solution which allows non-POD Eternity classes to utilize zone allocation and tags and still have destructors called on them when Z_FreeTags is called. The ZoneObject class acts as a polymorphic base class to any class that wishes to be allocatable on the zone heap in this manner. -------------------------------------------------------------------------------- 03/30/11 Started work on a finite-state automaton tokenizer for the XLParser class to use after Randy Heit pointed out that treating the scripts as line-based wouldn't be fully compatible, which really, I knew already, but I was being lazy ;) -------------------------------------------------------------------------------- 03/28/11 Rudimentary support for SNDINFO lumps is now complete. The parser is ZDoom compatible via ignoring anything that isn't currently implemented, which means, for now, almost everything :P Currently the $MAP command is recognized but doesn't do anything, and sounds can be successfully defined and then played back using e_playsound or ACS. Major milestone: Korax is now audible in Hexen! WORSHIP ME... and I may yet be merciful. Then again, maybe not. Linedefs in Hexen shouldn't have started out with their alpha set to 0, though. This caused all 2S midtextures to mysteriously vanish. The fault for this bug is the duplication of code between P_LoadLineDefs and P_LoadHexenLineDefs in p_setup, something that needs to be rectified ASAP... (Later) I have extracted all the duplicated code out of the two linedef loader functions and put it into a new shared routine, P_InitLineDef, which both call after parsing their specific map-format-dependent information into the line_t structure. Yay! -------------------------------------------------------------------------------- 03/26/11 The deferred sound queue, a legacy bit of awfulness created as a workaround to keep SMMU's implicit wad sounds feature working with EDF, has been removed and replaced with a vastly simpler system - if S_SfxInfoForName requests a sound from EDF which does not exist, and the mnemonic passed in matches an existing DS lump, then it will create the wad sound using E_NewWadSound right there on the spot, in an on-demand system. -------------------------------------------------------------------------------- 03/21/11 SDL video centering should not be conditioned on the _WIN32 symbol in i_main, since this functionality is supported just about everywhere SDL can run, even including primitive non-windowing "window managers" on Linux which run every application as a rect pasted to the screen without further adornment. -------------------------------------------------------------------------------- 03/20/11 Started knocking out some of the newest GCC's deprecation warnings with respect to the assignment of string constants to variables or structure fields of type char * (vs const char *). Some of these are a real pain in the ass to properly fix however, as they cause const_cast to be necessitated in a couple of places where these fields can also point to heap-allocated runtime-defined values. I want to eliminate those eventually by introducing secondary fields which hold the runtime value in addition to the normal const char * fields, but this is very low priority. Russell Rice discovered the /MP setting of Visual Studio 2008, and it sped up Eternity compiles by over 50% via making proper use of my Intel Core 2 Quad's four logical CPUs to do builds in parallel. P_StartLineScript, which was previously only for Small scripts, can now defer to running an ACS level script if there is no Small levelscript defined, With the EE_NO_SMALL_SUPPORT symbol defined, the invocation of ACS through these line types becomes unconditional. In addition, the A_StartScript codepointer can now perform an ACS_ExecuteAlways action if it is passed the new keyword value "acs" for the target virtual machine. -------------------------------------------------------------------------------- 03/19/11 By request of essel, ACS can now be loaded for DOOM-format maps by specifying the script lump to use for the map in MapInfo, with the new acsscript setting. I have also implemented four new ACS specials: * Thing_Projectile * Thing_ProjectileGravity * Thing_Activate * Thing_Deactivate Winnowing Hall now spews Imp fireballs if you walk up to the place where the polyobject spinning walls should be ;) Finally, I fixed an ominous warning from GCC concerning some undefined use of va_arg in libConfuse which it claimed would cause the program to abort. This was due to the odd promotion behavior which occurs in variadic functions in C and C++, and was triggered by C++'s different treatment of enumerations. -------------------------------------------------------------------------------- 03/17/11 Catoptromancy once again comes to the rescue with a fix for EE's autoconf build system, so it can once again be used by those who prefer it to the newer CMake script. -------------------------------------------------------------------------------- 03/12/11 I changed the IWAD and resource wad tracking variables into static members of the WadDirectory class and changed them to track the source IDs corresponding to those wads instead of exposing their internal FILE handles for no good purpose. -------------------------------------------------------------------------------- 03/09/11 Continuing at last with EE's gradual conversion to a proper C++ architecture, I have converted the waddir_t structure into a full-blown WadDirectory class, and have refactored all the code in w_wad.cpp as a result into methods of this object (excepting the non-"InDir" functions from the original code, which, for now at least, persist as "convenience" functions for invoking methods of the wGlobalDir object). -------------------------------------------------------------------------------- 02/14/11 Catoptromancy found a bug (or more of a "logic hole" really) in the low-level app state maintenance code whereby EE could keep the mouse grabbed while in a minimized state. Turned out the fix was as simple as adding a call to UpdateGrab when an SDL_APPACTIVE event is received. -------------------------------------------------------------------------------- 02/09/11 Made an adjustment to the interim behavior of the PIT_StompThing3D function, by user request, which will stop the ability of non-player objects to telefrag the player if they occupy the same space during transition through a linked portal. Players now "win" and will telefrag monsters instead. If two players pass through at the same time, *both* players will be telefragged. Hey, you gotta be fair with this kind of thing! :P -------------------------------------------------------------------------------- 02/02/11 I added a parser for ZDoom-format translation strings to the EDF library module, although it isn't used anywhere yet. -------------------------------------------------------------------------------- 01/29/11 Failure to write the configuration file should not be a reason to call I_FatalError; instead a message is now output to the console and the function returns. This keeps Eternity from issuing an interesting error message about terminating in an "abnormal fashion" for something so mundane as not having write permissions to a directory. I also had to restore some translucency checks that I removed earlier when adding linedef alpha support which were causing a crash for essel. -------------------------------------------------------------------------------- 01/22/11 Undertook a couple rounds of attempted optimizations, aimed mostly at trying to improve cache performance, which is known to be the primary bottleneck inside the renderer, to the point that NO change made to R_DrawMasked can affect the framerate in any positive manner except by improving cache performance (or in other words, the engine is completely cache-bound): 1. All redundant and unused fields were eliminated from core rendering structs including vissprite_t, drawseg_t, and seg_t. This rendered an average 2 FPS improvement in Sunder MAP12. 2. Tweaked all Visual Studio 2008 project settings toward maximum optimization, including the following amongst others I am probably forgetting: * Inline wherever compiler judges best practice * Prefer speed over accuracy for floating-point math * Enable compiler intrinsic functions * Whole program optimization / LTCG * Omit frame pointers * And most importantly, use SSE2 instructions. Altogether these optimizations render an average 10 FPS improvement in Sunder MAP12 on top of the 2 already gained from the tweaks forslightly improved cache performance. Note that this means however that VC2008 builds of EE will no longer run on CPUs prior to the Pentium IV, however. I have since verified with IDA Pro that the SSE2 opcodes are used pervasively in the binary code, and apparently to great effect. -------------------------------------------------------------------------------- 01/20/11 I added a new P_LastEnemyRoar routine which gets called, outside old demo comp and if the option is set, whenever a monster changes targets due to BOOM's lastenemy feature (the one controlled by option monsters_remember). It has always bothered me that this change removed the roars you would get every time a monster finished off its current target and then became angry at something else. These were often useful for guaging the progress of infighting in distant areas of the map involving boss characters, such as the Cyberdemon - MOOOO! I also finally got around to adding a proper Visual Studio 2005 project for Eternity. Our main build is with 2008, but 2005 should be useful for maintaining Windows 9x support for as long as it remains practical. Started fixing the old automake script to work with the new C++ codebase as well but this is unfinished and untested. -------------------------------------------------------------------------------- 01/18/11 essel noticed that I had inadvertently nerfed the edf-intername MapInfo option back while working on MapInfo prototypes and changed the name of the command to edf_intername. -------------------------------------------------------------------------------- 01/17/11 Adjustments made to FindIWADFile for the previous release left a situation where a NULL pointer could be dereferenced. Really this function is a mess and should probably be rewritten to use a qstring or a PU_AUTO string buffer instead of malloc'ing and freeing strings over and over. But that's for later I guess. DOOMWADPATH should only use ';' as the path separator on Windows, because ';' is a valid filepath character on POSIX systems apparently. On those, ':' is the expected delimiter. Additionally, upon user request, I coded a function called M_CheckMultiParm that can check for an aliased command line parameter, and then used it to allow -play and -recorddemo aliases to the -playdemo and -record commands, since their syntax has historically been inconsistent. -------------------------------------------------------------------------------- 01/16/11 -vanilla was semi-broken due to the fact that G_SetOldDemoOptions needed to be invoked *before* the call to G_InitNewNum. Otherwise it would setup the level under current-version behavior, and the RNG would usually be totally off. I was probably just extremely lucky back when I tested -vanilla initially. I also noticed that the "basename" variable was starting out uninitialized in the G_DoPlayDemo function. -------------------------------------------------------------------------------- 01/15/11 SoM fixed a bug which caused 1S linedefs to not generate portal overlay planes. This was bugging essel in one of his vapormaps. -------------------------------------------------------------------------------- 01/13/11 Small scripting (deprecated though it may be) was entirely non-functional in the old startmap due to my having moved GS_LEVEL set below the call to SM_LoadLevelScript. Chasecam initialization should also not be done before GS_LEVEL set. -------------------------------------------------------------------------------- 01/12/11 Finished support for heredoc-format sound sequences in EDF. This will also make it dead simple later to pass in Hexen SNDSEQ entries and have them parsed by the same code. I have also, while working on sound sequences, added the ability to set a property on the sequence which will play ALL non-volume-specifying commands at a randomized volume, which properly matches the behavior of the vanilla Heretic executable with its built-in ambient sequences. Also followed up on a really old idea of mine to have a volume scaling ability for global ambient sound sequences, which is now controlled via the s_enviro_volume cvar. One reason this is needed badly is because the sequences seem too quiet if played at vanilla- compatible volume levels over the blaring Windows native MIDI synth instead of the demure serenity that was Heretic's music rendered in OPL. -------------------------------------------------------------------------------- 01/10/11 I started work on a long-planned ability to specify EDF sound sequences in an alternate heredoc-based format which matches the way they're defined in Hexen exactly, aside from the "end" command still not being required since it can be implicitly added at the known end of the sequence. -------------------------------------------------------------------------------- 01/09/11 SoM was able to figure out the problems that plagued portal overlays in the previous release version. I had to remove the I_FatalError calls from the default quad flush handler functions, as EE actually calls them for some reason now, without any apparent ill effects. ================================================================================ Changes since Eternity Engine v3.39.20 ================================================================================ -------------------------------------------------------------------------------- 01/08/11 Merged cpp-branch into trunk for 10th anniversary release. Eternity is now officially a C++ port, and the most compatible one in existence :) See cpp-branch-changes.txt for information on changes that took place during the branch development process. -------------------------------------------------------------------------------- 12/23/10 Removed a bizarre and incorrect toggle-on of the comp_zombie variable for demo versions 200 through 202 which was either adapted blindly - or incorrectly - from an early PrBoom version many years ago, and prevented all suicide and death exits from functioning during -complevel 9 demo playback. This allows 30sdx2556.lmp to sync up until MAP11, at which point the player takes a sudden dive into a nukage river and then dies near some blue key bars after hurting himself with a rocket. I am told an Arch-vile jump is supposed to take place at the point where he falls into the river, so we probably have some enemy behavior or clipping engine differences yet to be accounted for. -------------------------------------------------------------------------------- 11/20/10 Due to continuing and probably only worse-in-the-future issues with the C99 standard's refusal to provide ANY mechanism for structured type punning, something that Eternity had come to rely heavily upon to allow object-oriented techniques to be applied in C, we have made the decision to move to C++. This effort has begun with a new cpp-branch. Development on that branch will be logged to a separate changelog file on that branch, which will eventually be merged back into trunk once it is sufficiently stable. -------------------------------------------------------------------------------- 11/11/10 Again by request I've added an alpha field and ADDITIVE extflag value for ExtraData linedefs, which enable use of flex translucency and additive blending with lines. This has been technologically possible for years but I never got around to adding a good way to access it, partly for lack of ideas. -------------------------------------------------------------------------------- 11/08/10 We have merged portal-clip branch into EE prematurely in order to pull in support for portaly overlays. -------------------------------------------------------------------------------- 11/06/10 Invalid subsector references will now be cleansed from the BSP tree, in order to prevent access violations that will otherwise occur. This stops the long-noted segmentation violation/venetian blinds crash in DEEPCRE.WAD's E1M1, which has an invalid BSP tree in only one subsector, which consists of a single seg making up a door track (glitchy node builder I suppose, probably didn't properly handle degenerate subsectors). Fixed a control path not returning a value in stopchan, which I recently rewrote to help stop sound stuttering. -------------------------------------------------------------------------------- 11/05/10 Essel also found Cardboard glitches with respect to splitting visplanes and drawing of segs across which the only differences were the angles of flats. Somehow these checks got left out. EE has hit r1337! Added support for an MF4_BRIGHT flag by request. This flag can turn an object fullbright on all of its frames without requiring the entire set of frames to be manually altered to use the "bright" flag. -------------------------------------------------------------------------------- 10/31/10 Happy Halloween! Level-error-related console error messages have been improved to include the numbers/indices of offending structures in the map in most cases. I removed dependency on host ability to perform unaligned reads from the GetLevelWord/DWord routines for additional portability. I was getting severe stuttering in the sound engine and I suspected that it might be related to the recent d_fastrefresh tweak - possibly the main thread running in such a tight fast loop is pre-empting the sound update thread too often. I moved reclamation of stopped sound channels, which can block the sound update loop explicitly, out of the main loop and into I_StartSound, so that sound channels are reclaimed when they are actually needed, and not constantly polled for having been stopped. It seems to have stopped the stuttering. esselfortium's ExtraData test map also uncovered a bug with skies and colormaps which caused the last sector drawn's colormap to apply to all skies. -------------------------------------------------------------------------------- 10/25/10 An ugly bug surfaced today - when I rewrote cvars to support defaults properly, I forgot that ct_constant cvars have value pointers. This was causing an access violation if you tried to display the value of any constant, such as ver_name, ver_date, or creator. -------------------------------------------------------------------------------- 10/24/10 Adjusted some ExtraData keywords for readability. Added proper support for multiple-level PWADs to the Master Levels / managed wad directory system, so that TEETH.WAD is now fully playable. Along with this tweak I added an optional parameter to the w_startlevel command that allows starting a specific map from a managed wad directory. So for example one can use the console command $ "w_startlevel teeth.wad MAP31" and proceed directly to the secret level. The file named has to be in the directory currently enumerated by the Master Levels directory setting, of course. Perhaps in the future Eternity can maintain additional enumerated directories? -------------------------------------------------------------------------------- 10/19/10 Some problems with inputting blank values into the menu system that have existed since the SMMU rewrite of the mess in MBF were resolved by adding a cf_allowblank console variable flag. Variables with that flag receive special treatment in the menu system. You can now escape or backspace out of the Master Levels menu after finishing a level, and you will return to the title screen. File paths are now displayed in the menu using "smart" truncation. While viewing the item, the right-hand side of the string will be truncated to a fixed margin and a ... will be appended. While editing the string, the input caret will not pass beyond the same margin, and instead, the displayed portion of the string is ran forward, and the left side is truncated with an ellipsis. This keeps your typing in view no matter how long the string is. -------------------------------------------------------------------------------- 10/17/10 ExtraData sectors have now been completed with addition of support for overriding the TerrainTypes of a sector on a per-surface basis. I also repaired a long-standing bug in the routine used to retrieve a terrain given an mobj_t which considered only the thing's subsector, and not the floor it was standing on. Because of the need for a demo comp check for this, I have bumped up the version to 3.39.21. I also created some new macros, maek_full_version and full_demo_version, that resolve long-standing problems with being able to easily compare demo versions down to the subversion level (not to be confused with Subversion, as we do not track SVN revisions in the source currently). -------------------------------------------------------------------------------- 10/12/10 I decided to break up the various p_?enemy modules into smaller a_ modules that contain various types of codepointers, some by game, and others by specific ranges of functionality. The breakdown is as follows: * a_counters.c - contains Eternity 'counter assembly' pointers * a_common.c - contains basic pointers shared by all games like A_Chase * a_decorate.c - contains ZDoom-inspired, DECORATE-compatible pointers * a_doom.c - DOOM gamecode * a_general.c - Eternity generalized/parameterized pointers * a_heretic.c - Heretic gamecode * a_hexen.c - Hexen gamecode (very tenative; do not use!!!) Yagisan has completely revamped the CMake system so that it is operational with his automated compiler farm. This has extended support to some additional platforms and brought in some additional warning and error fixes. -------------------------------------------------------------------------------- 10/11/10 Finally got back around to work on ExtraData sectors, possibly one of the most put-off-after-being-started features in Eternity's history. I can't even remember when I started writing the code for these, but more and more things just kept getting in the way. esselfortium needs flat offsets and rotation for his uber-detailed slopes, though, and doesn't want to wait for UDMF to start using them, so I'm pushing it through. Started off by getting the parsing of sector flag fields functional, and loading up offsets and floor/ceiling angles into the mapsectorext_t structure, which is right where I left off before. I have also written a routine which will reverse the angles into a clockwise orientation, in order to match ZDoom, which for some reason I simply don't understand, considers flat rotation angles in the opposite direction of DOOM's natural 3D coordinate system... so don't blame me. I figured it would cause the least headaches in the future with UDMF interoperability if I chose to do it the same way in ExtraData. ================================================================================ EOF ================================================================================