Skip to content

Releases: DreamyCecil/Serious-Engine

[Snapshot] 2025-02-16 - Quality-of-life features & fixes (Pt. 5)

16 Feb 14:21
Compare
Choose a tag to compare

Outline

This snapshot mainly focuses on reworking internal systems related to the file streams and the vanilla user-made mods.

Code cleanup

  • e668f29 - Abstracted specific CDrawPort methods for drawing things under separate graphics interfaces.
  • aee0ba7 - Got rid of gfx* compatibility aliases for old graphics functions; moved IGfxInterface::SetVertexShader() method under the Direct3D interface.
  • 5c737ad - Replaced occurrences of CTString methods when applicable: FileDir() + FileName() -> NoExt() and FileName() + FileExt() -> NoDir().

Code changes

  • Mod system improvements:
    • 7998498 - Added support for loading mods from the game menu under non-Windows platforms.
    • 9231756 - Got rid of binary suffixes (a.k.a. "mod extensions") and the usage of ModEXT.txt.
    • 89117e6, 44867c4 - Simplified the way the mods manage which files to read/write from the base game vs. the mod directory in order to prevent leftover mod files (such as player profiles and PersistentSymbols.ini) from overriding the game files.
    • 559bcfa - Added macro that specifies the subdirectory for storing user-made mods.
    • cd5804c - Made the game display a warning about old mods with modified game logic on startup.
  • RCon improvements:
    • 2838066 - Made RCon connect to the local server (localhost:25600) by default when launched without command line arguments.
    • f20838d - Added ability to go up and down the entered command history by pressing the respective arrow keys in the command field (up to 32 commands).
    • b75a69b - Added special commands in RCon itself for starting new dedicated servers and connecting to existing ones. Available commands can be listed with /help.
  • Filesystem improvements:
    • b57090d - Got rid of obsolete CTStream::OpenMode types and removed obsolete CTStream::CreateMode enum altogether.
    • 9190a5e - Refactored code related to reading files from ZIP archives to be more C++ friendly.
    • 70be195 - Allowed passing already absolute paths into ExpandFilePath(); made ZIP archives return absolute paths to the files inside of them in order to distinguish paths between the archives when expanded by ExpandFilePath().
    • a7628f4 - Used AllocMemory()/FreeMemory() instead of new[]/delete[] when creating buffers for CTFileStream::fstrm_pubZipBuffer.
    • 53065cf - Replaced single ExpandFilePath() method with a new much more flexible system in a form of an ExpandPath struct with specific methods for expanding paths to various places.
    • 749a2ab - Replaced all usage of ExpandFilePath() methods with ExpandPath structs.
    • 01cbf06 - Added ExpandPath::OnDisk() method for ensuring that the returned path is always absolute; allowed passing absolute paths to CreateAllDirectories().
    • 1a3f57c - Replaced direct usage of _fnmApplicationPath for creating absolute paths with the ExpandPath::OnDisk() method in most cases in order to ensure that the path to the game directory isn't doubled by mistake.
    • 3e239d9 - Added a global variable with the full path to the launched executable to avoid _fnmApplicationPath + _fnmApplicationExe usage.
    • 4102a2f - Added helper methods for expanding specific relative paths to directories with "temporary" and "user data" files for flexibility.
    • 6d6a83c - Allowed specifying directory flags for ExpandPath::ForReading() & ExpandPath::ForWriting() inside CTFileStream::Open_t() & CTFileStream::Create_t() methods before performing any file reading/writing operations.
    • ae19631 - Allowed listing files from absolute directories in MakeDirList() instead of only relative ones.
    • 476495e - Made "temporary" and "user data" paths always be expanded to the root game directory instead of relative to the mod or wherever else; made each mod store its game saves separately from the main game inside its user data directory (e.g. in UserData/Mods/MyMod/SaveGame/Player0/ instead of Mods/MyMod/UserData/SaveGame/Player0/).
  • 45e2e42 - Reworked CTString::ReplaceSubstr() akin to CTString::ReplaceChar() to replace all occurrences of a certain string instead of just the first one; made both of these methods return amount of performed replacements.
  • 71bb071 - Allowed using CommandLineSetup for parsing any command line strings and outputting results in a custom string instead of the engine one.
  • 179983b - Added a global flag for indicating whether the engine has been initialized.

Fixes

  • 415181c - Fixed incorrect relative mouse position within the game window when it loses focus.
  • e54fe05 - Fixed SE_SetReportLogFileName() not setting an absolute path to the crash report file.
  • 49b9c32 - Fixed ListFromGRO() still listing files from GRO files inside any game directory even if the mod excludes those base game files.
  • bdc69aa - Fixed incorrect calculation of the buffer size for the sound decoder, which was in the wrong order.
  • dc99121 - Made IFeel library be loaded from the same directory as the executable and made all IFeel code be built under every platform, even if it's non-functional right now.

Project changes

  • 733d64d - Replaced engine's Entity Class Compiler with an external multi-purpose version by adding it as a submodule.

[Snapshot] 2025-02-04 - SDL3 and OpenAL

04 Feb 07:01
Compare
Choose a tag to compare
Pre-release

Outline

This snapshot mainly ports the entire codebase from SDL2 to SDL3 and implements OpenAL as the new default sound API that restores old EAX reverb effects.

Code cleanup

  • f1968ec - Added automatic macro switches specifically for the x86 & x64 architectures instead of the generic 32-bit & 64-bit ones.
  • 04da505 - Made CTString::str_String field private to prevent its direct usage in favor of CTString::Data() and CTString::ConstData() methods.

Code changes

  • Engine timer changes:
    • 61d3a2b - Made CPU speed measurement more cross-platform with the manual measurements as an optional fallback when the platform-specific measurement isn't possible.
    • 2819104 - Removed CTimer::tm_llPerformanceCounterFrequency field as it was functionally identical to the CTimer::tm_llCPUSpeedHZ field.
    • 4d20063 - Made high precision timer work more consistently by storing all timer values in nanoseconds and relying on SDL_GetTicksNS() to report ticks since the start of the engine instead of the operating system.
  • Fix crashes from changing SDL Audio settings that led to mixer buffer resizing, such as the snd_tmMixAhead command.
  • Rework SDL3 audio callback to simply queue sound data from the stream buffer that was previously copied from the mixer buffer.
  • SDL2 -> SDL3:
    • 8a72955 - Allowed passing a window handle into CInput::DisableInput() and made CViewPort wrapper methods for input toggling inline.
    • 6663fbd - Reverted system gamma adjustment using SDL.
    • a474390 - Included and linked SDL3 library in the engine.
    • c9ab000 - Adapted code related to input and window events to SDL3.
    • a069441 - Adapted code related to graphics, game windows and timers to SDL3.
    • 3bea8f2 - Adapted code related to the sound engine to SDL3.
  • Sound engine changes:
    • 0c68b45, d96c3fc - Implemented macro switches for different sound APIs; disabled EAX support by default; allowed SDL Audio to be used under Windows regardless of SDL preference.
    • c6d1365 - Reworked how generic information about sound formats is reported on initialization.
    • a67e643 - Fixed SDL Audio's stream buffer size not matching the mixer buffer size, which caused it to access some memory outside array boundaries and crash.
    • ce9f6b9 - Limited audio device index to the maximum number depending on the current sound API and added a new command for listing audio devices for the currently active API.
    • 82ec09a - Allowed SDL Audio support to be toggled under any platform.
    • 8d64607 - Allowed selection of a specific audio device for SDL Audio using snd_iDevice.
    • 0f454ea - Replaced WAVEOUTBLOCKSIZE macro value with a static constant field.
    • cfe66dd - Implemented OpenAL as a new sound API and disabled obsolete Windows-only sound APIs by default.

Fixes

  • bece3d0 - Made tolower() & toupper() methods always accept ASCII/ANSI characters as unsigned char for proper casting of arguments to int.
  • 6d33861 - Fixed compilation errors from dummy mutex object methods when building a single-threaded engine under C++11.
  • 7521386 - Made splash screen hide itself before creating the game window instead of after.
  • b6d9438 - Fixed EAX environment size resetting for the "Big canyon" sector environment in DirectSound; prevented potential division by zero in the NormalizeMixerBuffer() method.
  • 11f88b8 - Made WorldEditor's rendering preferences and child configurations in binary formats be serialized consistently across x86 and x64 platforms.

Project cleanup

  • 5307f18 - Added options for toggling current build info generation to prevent rebuilding of every single project every time.
  • a730b0b - Got rid of MSVC warnings from third party libraries.

Project changes

  • SDL2 -> SDL3:
    • ab1d7ea - Replaced SDL2 Windows distributable with an SDL3 submodule.
    • 4eab107, a9a2da5, b167be2 - Added custom Visual Studio project files for manually building SDL libraries.
    • b72aaf8 - Configured CMake project files to manually build and link SDL3; disable usage of SDL3 and zlib libraries from the system by default.
  • 913a775, e857ea6 - Made PDB files be copied to the Bin folder alongside their respective binaries and prevented static libraries from being copied after being built.
  • 186566c - Removed static libraries from the installation in CMake project files.
  • 60682c1 - Added OpenAL Soft module on the Windows platform and added dependency on OpenAL on all platforms.
  • 94a5b24 - Turned off /SAFESEH option for Windows executables under static x86 build configurations.

[Snapshot] 2025-01-25 - Internal improvements

25 Jan 19:37
Compare
Choose a tag to compare

Outline

This snapshot focuses on improvements and fixes of a lot of internal parts of the engine and the game.

Code cleanup

  • f908fa8 - Renamed CTString::SetAbsolutePath() method to CTString::NormalizePath() for logical consistency.
  • 0f0b922 - Implemented specific thread mutex types as enumerations for CTCriticalSection instead of using raw indices and added a separate type for input that relies on SDL instead of reusing the index for the sound library.
  • e0085a6 - Settled on the "default" audio device when initializing SDL Audio.
  • 7e5cdf7 - Made SDL_Quit() be called on any proper program termination.
  • bf9cefc - Various insignificant code fixes.
  • 5619116 - Removed unnecessary function arguments from the game startup procedure in SeriousSam.
  • 275758a - Added a common header file with various helper macros that describe the current engine/game build; removed unnecessary includes of specific engine headers.

Code changes

  • 114083e, c0d6b17 - Defined CEntityPointer methods in its own header file and then reverted to prevent build errors for GCC.
  • 6980585 - Allowed reinitializing entities with any events instead of just EVoid.
  • 705afa0 - Made CTString::SetFullDirectory() method return whether the path becomes absolute after calling it.
  • Reworked engine initialization procedure:
    • 38d13ba - Allowed manually specifying the root game directory using SE_InitEngine().
    • 6b8dd9c, 973be97 - Allowed initializing the engine using a new special structure with setup properties.
    • c26c618 - Made SeriousEngineSetup structure be always required in SE_InitEngine() and added a field to it with the generic application name for use by SDL.
  • 57d896a, 54e89f7 - Updated libogg and libvorbis third party modules to versions 1.3.5 and 1.3.7, respectively.
  • 019610d - Relocated log files under the Temp/Logs/ directory.
  • 6f38da4 - Rewrote CTCriticalSection and CTSingleLock classes to rely on std::recursive_mutex and std::unique_lock for new compilers with full C++11 support.
  • d0ae305 - Rewrote server list enumeration to utilize cross-platform std::thread for multithreading.
  • Reworked stocks for caching various game resources:
    • 3d36a6c - Replaced C-style templates of stock and name table classes with proper C++ templates.
    • 6e2da7c - Added special safety methods for utilizing stocks in case they don't exist anymore.
    • d5cf461 - Allowed retrieving entity components without specifying their types as their identifiers must never clash anyway.
    • 6213767 - Unified all resource precaching methods into a single method for convenience.
    • a653989 - Defined pointers to all stocks under a single common source file.
    • 83be031 - Included SKA-related stocks in StockDump() and FreeUnusedStock() methods.
  • 075d231 - Allowed system gamma to be adjusted when building with full SDL support.
  • 7e88a40 - Added CModelInstance helper method for retrieving animation frames of specific animations at some point in time, which is similar to MDL's CAnimObject::FrameInTime() method.
  • Model configuration files as a new resource type:
    • 5fa4a67 - Allowed opening SKA models from binary model configs if they are available instead.
    • bc59f51 - Implemented a new resource stock for caching model configs; added "MISF" chunk from Serious Engine 1.50 to model instance serialization.
    • e7173f8 - Implemented a new entity component type for model configs; allowed setting SKA models to entities from the model config components.
  • bdc996e - Added CTString method for resizing the internal character array while preserving the previous string contents.
  • abf977e - Optimized string reading in the CNetworkMessage::operator>>() method to only reallocate string memory once in a while instead of each time a new character is inserted.
  • a48f24f - Added developer commands for checking contents of all class registries in static builds.
  • d70ef28 - Enabled VSync control (interval swapping) when building with full SDL support.
  • Reworked command line argument processing for all applications:
    • a8e1dae - Implemented common interface for processing program's command line arguments.
    • 1a1f579 - Reworked how each application processes command line arguments using the new engine interface.
    • 0fc6882 - Allowed specifying +game and +logfile launch options to any executable instead of just SeriousSam and WorldEditor.
  • da576aa - Added a global method for retrieving the current build version as a readable string that's used for displaying the build version in the main game menu.

Fixes

  • a750c26 - Made CTString::GetSubstr() and CTString::RFind() methods perform case-insensitive checks for consistency with the other methods that compare strings.
  • a56cc2c - Fixed CTString::NormalizePath() method going up one level even when the last remembered directory was .., essentially cancelling it (e.g. ..\..\abc\ resulted in abc\).
  • 2393b40 - Fixed certain issues with the Depend utility:
    • Fixed broken logic for passing the application path from the command line.
    • Skipped empty strings while parsing a list of files to scan.
    • Restored case-sensitive string comparison when adding new strings to the translation table.
  • 75f7ae7 - Fixed incorrect comparisons between C strings in the CWorldEditorApp::OnConvertWorlds() method.
  • 40ff5cc - Made default fonts be destroyed before the resource stocks instead of after on engine cleanup.
  • ece2646 - Fixed Modeler application shutting down the engine in the wrong place: #2
  • 80d97c2 - Adapted ReportGlobalMemoryStatus() function to the x64 platform under Windows.
  • 972369e - Fixed shaders of SKA models not being freed from their stock after the mesh that used them is destroyed.
  • 3c973d5 - Reworked CTFileStream::AtEOF() method to always check for EOF if the current stream position is beyond the last byte instead of relying on the next failed read.
  • c1b5a03, 44512fb - Improved static linking of EntitiesMP and Shaders libraries that dynamically register specific classes from global scope upon module initialization.
  • fadea86 - Passed native window handle to DirectSound from SDL window structures.
  • 9bb94db - Fixed runtime warning in MFC tools about an uninitialized variable.
  • 89f68ed - Added copy constructors to container templates that lacked them and adjusted copy constructors & assignment operators to always take const references to containers to copy from.
  • 52195ad - Made the crash report generator work again under Windows platforms and made them be stored under the "Temp/CrashReports/" directory instead of next to the executable files.

Project cleanup

  • 7baf35a - Moved main Engine API functions to a separate header file.

Project changes

  • c68addc - Added new stock source files to CMake project.
  • 2be15a0 - Added automatic definitions of macros with the current branch name, the latest commit hash and the current time upon starting any source code build.
  • 917a447 - Made Visual Studio projects specify an alternative filename for PDB files that only includes the filename without a path on disk leading to it (e.g. Engine.pdb instead of C:\SeriousSam\Sources\Bin\Dynamic-Debug.x64\Engine.pdb).

[Snapshot] 2024-12-01 - Input rework

01 Dec 11:02
Compare
Choose a tag to compare
Pre-release

Outline

This snapshot reworks input code to make it more versatile and implements proper support of game controllers in NETRICSA and the game menu, as well as some bug fixes.

Code cleanup

  • 8339580 - Created an enum type for input axis types.
  • 86351eb - Made translated names of input axes be stored alongside the internal names.

Code changes

  • 1521c96 - Added game controller events for detecting pressed controller buttons and moved sticks & triggers.
  • 5f93f61, 5466b8b - Allowed using controllers for navigating and using the game menu.
  • d3e0c59 - Allowed using controllers for navigating NETRICSA (computer).
  • bc60d9c - Allowed binding controller axes to button actions by unifying logic of both systems.
  • d278824 - Used more universal names for controller buttons & axes. Also added names for extra unusual buttons.
  • b86f302 - Made the game window reset itself to full monitor resolution with borderless window mode by default on the first game launch or when any of the resolution dimensions is invalid.
  • 2b5b670 - Allowed using mouse axes as buttons, just like the other input axes, but with its own threshold that measures mouse movement in pixels instead of an arbitrary percentage.

Fixes

  • 9956455, 565bad1 - Fixed the rest of the implicit CTString conversions (thanks to @pac85).
  • b7b511e - Fixed adapter counters of graphics APIs not initializing properly.
  • e4381bb - Fixed in-game menu opening on Escape during intro/demo playback when it was supposed to skip them instead.
  • 5937b43 - Fixed LMB applying changes done to option configs instead of changing values of specific options in the game menu.
  • 1cd1164 - Fixed incorrect flag being used for the initialization of SDL game controllers.
  • e2b27d2 - Fixed weird input and game freezing from using more than one connected controllers.
  • 1fae65d - Fixed incorrect slots being reported on some controller connections.
  • 1ccbb44 - Removed WrapAngle() call from the RadAngle() function to preserve the sign of the angle value.
  • 3128d0d - Fixed italic slant from ^i tags on rendered text increasing with larger text scale.
  • d435146 - Temporary fix for the slowdown bug by increasing the time epsilon for processing entity logic to 1/5 of a tick (at the current rate of 20 tps).

Project cleanup

  • eb4dd7a - Added +x flag to Linux build scripts.

Project changes

  • eae252c - Added working static build configurations for MFC-based projects that were previously missing them.
    • Resolved conflicts between resource files of EngineGUI, GameGUI and WorldEditor projects when statically linking them together.
    • Handled timer logic manually for single-threaded Modeler, SeriousSkaStudio and WorldEditor builds.

Known issues

[Snapshot] 2024-09-09 - Linux support

09 Sep 12:55
Compare
Choose a tag to compare
Pre-release

Outline

This snapshot implements initial support for Linux operating systems with working DedicatedServer & SeriousSam projects, as well as a lot of fixes and improved support of game controllers.

Code cleanup

  • 84b2d74 - Removed additional inclusion of io.h from various source files since it is already included in Engine/Base/FileSystem.h for Windows.
  • 7fae8c4 - Moved EAX_ENVIRONMENT_* enum values under a separate header file.
  • cde4405 - Removed extern keyword from variable definitions.
  • e510e60 - Removed old unused code for disabling some Windows actions.
  • 8c07199 - Removed GCC inline assembly code from math functions.
  • ee633cb - Removed some Win32-isms.

Code changes

  • 1dba771 - Added function for displaying error messages without terminating the game.
  • Filesystem improvements:
    • 1f4221e - Reworked filename methods of CTString to make them recognize and process forward slashes in paths as well.
    • 336f9fa - Replaced various fopen() calls with FileSystem::Exists() in stream methods.
    • af67faa - Added a cross-platform alternative to the standard fopen() method.
    • 7c45372 - Adapted path-related code to Unix filesystems.
    • c52ac15 - Made application paths be determined on non-Windows systems.
  • 92a979b - Created strong typedefs for Win32 handle types for non-Windows platforms.
  • e68d0bf - Slightly improved _strupr() implementation for Unix systems.
  • 23374a9 - Added support for running the entire engine on the same thread.
  • Master server query rework:
    • 5e98924 - Fixed ser_bEnumeration being ignored when working with master server.
    • 9f062b4 - Replaced GameAgent code with query manager from Classics Patch.
      • Added support for "DarkPlaces" master server protocol.
      • Adapted query manager code to Unix.
  • Linux support:
    • 402ec96 - Adapted ECC code to Unix.
    • 3e2a626 - Adapted thread synchronization code to Unix.
    • 50fc784 - Adapted smaller chunks of code for Unix.
    • bc51639 - Adapted SeriousSam initialization code to Unix.
    • 58daa17 - Adapted communication interface code to Unix.
    • d2c095c, 22b8c42 - Adapted graphics code to Unix.
    • ffc597f - Adapted DedicatedServer code to Unix.
    • 50996f7 - Made engine gather info about hardware upon initialization on Unix.
  • e47ed4f - Added name hashes to shell symbols for retrieving symbols faster.
  • d362f78, 35b096d - Linked Ogg Vorbis library statically under static configurations.
  • Input & window events rework:
    • 6869a57 - Refactored and abstracted code related to input & game window events.
    • a4df5eb, 06a54b4 - Separated second mouse and joystick functionality from the main input code.
    • ca4a0c9 - Made OS::GetCursorPos() method work more like SDL_GetMouseState() and removed OS::ScreenToClient() method.
    • a5dad01 - Reworked window & input messages into their own custom cross-platform events.
    • 0887a76 - Replaced Windows Multimedia Joysticks functionality with SDL_GameController.
    • 9e55e76, d69b6f9 - Implemented full input support using SDL, if it's preferred, and added proper support for Mouse Button 4 and Mouse Button 5.
  • 162c6a2 - Added method to OS::Window for retrieving the native window handle under Windows platforms.

Fixes

  • Various cross-platform fixes:
    • e6bdc8f - Made CSelection template code more cross-platform.
    • f481f57 - Got rid of I64 suffix from 64-bit integer values.
    • 77b68d9 - Replaced the last Sleep() methods with CTimer::Suspend() in SeriousSam.
    • 3ba2c46 - Added const specifier to reference arguments in some game functions.
    • 0e6b6c2 - Fixed zlib compression for network packets under Unix.
  • f5322e2 - Used full path to MenuPrinting.h relative to SeriousSam project in MenuGadget.h.
  • Implicit string conversion fixes:
    • f37a1dd, 968c202 - Added experimental feature for checking arguments of string printing methods.
    • 014ae5a - Got rid of as many implicit CTString -> const char * conversions as possible.
  • a6db89c - Fixed various warnings and errors for GCC.
  • 4d04da7, 8ae5d8a - Got rid of various comparisons of this with NULL that might have been optimized away by GCC.
  • 9c3fe44 - Fixed minor issues from warnings.
  • 64d77ec - Fixed assertions upon trying to render computer images in Deathmatch.
  • bca14aa - Fixed compilation errors under newer C++ standards using MSVC.

Project cleanup

  • 8160332, 09ccafa - Renamed Statistics_Internal.h to Statistics_internal.h for case consistency.
  • 6583db4, 0e7657e - Fixed filename case of some included headers.
  • c5d6d96, e005e80 - Fixed casing in names of some headers.
  • 7e58616 - Removed deprecated compiler option from project files.

Project changes

  • d8ad157 - Renamed GameMP/WEDInterface.cpp to GameMP/Interface.cpp.
  • a5759af - Made Engine delete old Bison & Flex generated files before building it.
  • d2f1dcf - Added CMake project files for building the entire project under Linux.

[Snapshot] 2024-08-11 - Quality-of-life features & fixes (Pt. 4)

11 Aug 06:39
Compare
Choose a tag to compare

Outline

This snapshot introduces a new "extra content directories" system, adds support for more aspect ratios and resolutions by the game window and fixes a few issues.

Code cleanup

  • de2bf44 - Replaced SE1_D3D macro with a new SE1_DIRECT3D macro switch in the config that can be easily toggled instead of having to define it for all projects.
  • 730f8b3 - Reworked SE1_3DFX macro into macro switch in the config that can be easily toggled instead of having to define it for all projects.

Code changes

  • 954ec4d - Added new server-to-client packet for making clients dump synchronization data on bad syncs for debugging purposes.
  • ae3051d, de61379 - Added more options for the game window:
    • Added support for multiple aspect ratios with more resolutions for each of them.
    • Made native screen resolution be automatically added under the closest aspect ratio list.
    • Added "Borderless" window mode.
    • Made the game window DPI-aware to prevent it from being scaled by Windows.
  • a79174f - Moved binary data generated by game & tool applications under the "UserData" directory as well.
  • ee4c7cd - Moved ZIP entry class definition into the header file and added a method for retrieving a specific entry by its index.
  • Added support for extra content directories for loading resources from other games and folders:
    • 7c82d8f - Added more features to the MakeDirList() method via new flags.
    • ef94fb0 - Slightly reworked and fixed the internal ExpandFilePath_read() method.
    • 6f2c997 - Replaced CD path functionality with a list of extra "game" and "content" directories.

Fixes

  • f70d891 - Fixed other player controls not loading when selecting their presets.
  • a5a9cff - Fixed some compilation errors under Visual Studio 2010 and Visual Studio 2013.
  • e0d81c6 - Fixed compilation error when Direct3D support is enabled without Truform support.
  • 02dbc5a - Wrote a Direct3D implementation for the gfxSetTextureMatrix2() method that's used solely by the terrain system.

[Snapshot] 2024-07-13 - Quality-of-life features & fixes (Pt. 3)

13 Jul 17:20
Compare
Choose a tag to compare

Outline

This snapshot focuses on fixing various issues, some of which were left by the last release.

Code cleanup

  • 555036f - Removed unnecessary DllMain() function from Engine.

Code changes

  • 4adbdfa - Made the game store all user files under the UserData/ directory.
  • 13acf41, 79c719a - Made the engine store log files under the Logs/ directory.
  • Fixed unreliable logic related to player jumping.
    • 73296d2 - Added a new virtual event method to CMovableEntity that's called every time an entity physically jumps.
    • d707caa - Made player entity handle jumping directly via a new CMovableEntity event method instead of checking CMovableEntity::en_tmJumped values.
  • fe26720 - Added SE1_DOUBLE_TIMER macro switch for toggling double-precision timer values.

Fixes

  • 1e3c80d - Made the engine detect the game directory from any subdirectory under Bin/.
  • e04bd9a - Adapted perspective projections and drawports to wider aspect ratios.
  • 2bf95e5 - Fixed rare crashes related to non-existing sound interface.
  • 38df2e9 - Replaced console warning in CStaticArray::New() with the old commented assertion.
  • bd97444 - Made sure that the internal mask shader is set only once to avoid assertion spam.
  • 5fc305d - Commented out an unnecessary assertion in CTFileStream::Close().
  • 9c0acdb - Adapted HUD code from EntitiesMP to double-precision timer values.
  • 9eb6ff8 - Fixed some more GCC-specific warnings and errors.
  • bd09bbe - Converted backslashes into forward slashes in the filename that's passed into ECC.
  • 6398a4c - Made engine skip IFeel initialization on non-Windows systems.

[Snapshot] 2024-07-11 - Static building support

11 Jul 21:16
Compare
Choose a tag to compare

Outline

This snapshot focuses on adding configurations for static building of all dynamic libraries and linking them by including their code into individual executable files.

Code cleanup

  • 5bf6327 - Moved entity component management methods from CEntityClass to CDLLEntityClass.
  • b859216 - Reworked exporting and importing APIs for different modules.
  • 208ad40 - Reformatted more conversions of filenames and strings.
  • a5b1886 - Moved all code related to wed_bUseGenericTextureReplacement into Engine.
  • 2eb1ffc, 2f1a3cb - Removed wrappers of GameMP's LCD functions from SeriousSam.
  • 5479a52 - Marked CTString::Split() as const.

Code changes

  • Reworked entity classes and shaders to register themselves in special engine registries upon dynamic module initialization.
    • 5076d9a - Added class registries for dynamic modules that will be automatically filled.
    • 4c9318b - Utilized registries for entity classes and shaders in dynamic modules.
  • de22950 - Added OS structure for dynamic modules that utilize the engine.
  • 2b035bd - Made entity classes and shaders utilize new engine module structure.
  • Reworked various dependencies on EngineGUI, GameGUIMP and GameMP projects.
    • 0c066e3 - Added interface class for EngineGUI module in the engine.
    • 3217027 - Reworked EngineGUI to utilize its new engine interface.
    • d506c8f - Directly linked and utilized GameMP and GameGUIMP libraries.
    • 7fb0d61 - Used some functions directly from GameMP instead of accessing them through the shell.
  • Support for static linking of all projects.
    • 81250d8 - Defined some variables and functions only used within their source files as static.
    • 4875d45 - Renamed _hwndMain to _hwndCurrent in Engine.
    • 42218e7, 5e379bb - Used custom prefix for Bison/Flex scripts in SeriousSkaStudio.
    • fe3cfdf, aaee7b9 - Defined some inline methods properly in Engine.
    • 8002d64 - Adapted engine code to the new static build configurations.
  • b1e1e26 - Add CTString method for converting any path in the string into a full absolute path.
  • 139d0e2 - Implemented a new improved method for determining application paths on demand and a method for creating all subdirectories in a path relative to the game directory.
    • Prevented _fnmApplicationPath and _fnmApplicationExe variables from being accidentally modifiable.
    • Obsoleted and removed IgnoreApplicationPath() and UseApplicationPath() functions because of constant path variables.
  • 86b6187 - Made SeriousSam launch mods using the exact same executable filename and removed old functions for launching mods and teasers after the game.

Project changes

  • cedffb3 - Added new build configurations for static building of some projects.
    • Renamed "Debug" and "Release" build configurations to "Dynamic-Debug" and "Dynamic-Release".
    • Renamed property sheets for dynamic build configurations from "Debug.props" and "Release.props" to "DynamicDebug.props" and "DynamicRelease.props".
    • Added property sheets for static build configurations.
    • Added missing "DisplaceShader.cpp" source file to Shaders project.
  • 401b5bc - Added special source files for statically linking specific projects.
  • 2ab9628 - Sorted built binaries into their own Bin folders.
  • 6a34742 - Appended "-Dynamic" and "-Static" suffixes to built executables depending on the build configuration.

[Snapshot] 2024-05-29 - Quality-of-life features & fixes (Pt. 2)

29 May 15:15
Compare
Choose a tag to compare

Outline

This snapshot focuses on extended support of SDL functionality, reworks identification of applications for the engine, reworks fundamental support of different sound APIs and fixes a few bugs.

Code cleanup

  • 30b7448 - Removed obsolete and unused CMessageDispatcher::md_strGameID field.
  • 230eed6 - Reworked configuration header and moved it outside the Base directory.
  • 8240cf7 - Initialized IFeel via a new external method to reduce clutter in the main engine source file.
  • bdb431f - Added own implementation of bit rotation for CTString::GetHash().
  • f748db4 - Marked some character arrays as const in ChoosePixelFormatTB() method.

Code changes

  • 76b2a9b - Replaced game ID string and global application flags upon engine initialization with a new engine application type.
  • a8d3d5c - Reworked sound library to rely on dynamic sound API classes that switches between them when needed. WaveOut and DirectSound (with EAX) interfaces are now separate from each other and reside under their own source files.
  • 9f49f26 - Disabled DirectSound on non-Windows platforms and disabled any interaction with the sound library when running a dedicated server application.
  • Better SDL support.
    • a25a435 - Slightly adjusted code for timers.
    • d7834a5 - Made CTempDC class compatible with SDL window management.
    • f8bb408 - Made SDL automatically initialize and shut down in the engine if it's available.
    • 00765dd - Added temporary solutions for HWND usage if SDL usage is preferred.
    • e0173c7, b43d80f - Made SDL manage windows of the game client if its usage is preferred.
  • Implemented OpenGL rendering using SDL.
    • 185f496 - Refactored initialization code for graphics APIs.
    • 197efd7 - Made SDL setup OpenGL display adapter if its usage is preferred.
    • 4e737a9, 1d32618, 6e0e7cd - Implemented OpenGL rendering using SDL if its usage is preferred.
    • 69cf253 - Added SDL Audio as an alternative sound interface for non-Windows platforms.
    • 6141825 - Made SDL permanently available in the engine regardless of the platform.
  • 56bcf61 - Dynamically filled arrays of graphics & sound APIs for in-game options using available interfaces from the engine.
  • 131d219 - Determined CPU speed on non-Windows platforms.

Fixes

  • 6045225 - Renamed thread_local macro to SE1_THREADLOCAL to avoid conflicts.
  • a4c6d06 - Specific fixes for potential support of the MSVC 6.0 compiler.
  • 533babb - Fixed incorrect calling conventions when using GLEW under the x86 platform.
  • f97a053 - Adjusted assertions inside CTString::GetSubstr() and CTString::GetChar() methods to prevent them from being triggered on empty strings when searching from the very beginning.
  • 693a3d1 - Compatibility fixes for OS::Window and dynamic library loading.
  • fc593ab - Exported FileRequester() function from EngineGUI via C API. It also fixed the bug where it couldn't be loaded because it expected a CTFileName as one of the arguments, which doesn't exist in the engine anymore.

Project cleanup

  • c6377e5, 021f490 - Removed unnecessary libraries from linker properties of project files.

[Snapshot] 2024-02-04 - Quality-of-life features & fixes (Pt. 1)

04 Feb 12:26
Compare
Choose a tag to compare

Outline

This snapshot implements new third party modules for future functionality, reworks fundamental support of different graphics APIs and fixes a few important crashes.

Code cleanup

  • af56069 - Added proper comments to CEntity methods related to predictions to help clear up any confusion on what each method does.

Code changes

  • 2985078 - Completely cleaned up code of various templates and improved their functionality.
  • Reworked back end for graphics APIs.
    • 5d22a72, 0d0ae39, 4b31f60 - Reworked type checking of graphics APIs.
    • 4638bcc, 084c643 - Allowed some methods to work with any graphics API type.
    • f186638 - Moved GfxAPIType enum from GfxLibrary.h to Gfx_wrapper.h to make it more accessible.
    • e254447, 09acb74, ee500fd, 84895d6, 01788cc - Organized existing graphics APIs into proper interfaces instead of relying on generic function pointers in global scope.
  • 8fd0081 - Made sure that GetWindowsError() can format the message at all.
  • 9b027c8 - Added OS method for loading libraries or throwing exceptions on any error during loading.
  • 7009d1c, a0f4154, fd68c34 - Added support for Simple DirectMedia Layer that's disabled on Windows by default.
    • b750362 - Added SDL alternatives to error reporting logic.
    • 491674c - Implemented timers using SDL.
    • 5ac93af - Added SDL alternative to splash screen display upon starting the game.
  • 2e57cf9, a1ef45f - Added optional support for The OpenGL Extension Wrangler Library.
  • b98a6ff - Surrounded all Truform-related code with a SE1_TRUFORM macro switch.
  • 05f7831 - Surrounded all 3Dfx-related code with a SE1_3DFX macro.
  • 2072bf9 - Added base for a cross-platform window handler class and utilized it in all projects, excluding those that utilize MFC.
  • 29b238f, 38d38af - Reworked CTString methods and added new useful ones to be functionally close to std::string.

Fixes

  • 30150ce - Restored this == NULL checks for CNetworkLibrary methods.
  • 8f8789a - Fixed issues with mismatching sizes of INDEX and time_t types.
  • 80cf095 - Fixed crash upon creating an animated texture from the root game directory.
  • 75a5592 - Made error message upon opening the log for writing more informative in order to understand what caused it.

Project cleanup

  • 27b8bff - Removed profile-specific control files that are generated upon starting the game anyway.

Project changes

  • f4c9835 - Set platform toolset in all project files to the default value determined by the current Visual Studio.
  • f0fc3f5 - Added editor config to the solution.
  • Added new third party modules.
    • f4f252d, 1fc662a - Added SDL2 and made Engine depend on it.
    • 45a5fef - Added GLEW and made Engine depend on it.