Skip to content

Releases: DreamyCecil/Serious-Engine

[Snapshot] 2026-01-17 - Internal game client rework

Choose a tag to compare

@DreamyCecil DreamyCecil released this 17 Jan 06:50

Outline

This snapshot focuses on internally reworking the menus of the game client to make them more stable and more flexible to work with.

Code cleanup

  • 0ad0c68 - Removed unnecessary GameMP includes from SeriousSam/GameClient sources.
  • 40aa3e5 - Removed the obsolete _SE_DEMO macro switch.
  • 95df3d9 - Replaced all tabs with double spaces in SeriousSam/GameClient.

Code changes

  • 3ece445 - Made world editors write entity time in seconds for compatibility with vanilla games.
  • ec5fb36, cb05a02, 2bced24 - Added a new node class that can be nested in itself by using doubly-linked lists.
  • Game client rework:
    • 82fa962 - Removed obsolete menus.
    • 208c605 - Replaced the CGameMenu::gm_strName field with a new CGameMenu::GetName() virtual method.
    • 3107d52 - Replaced the CGameMenu::gm_pmgSelectedByDefault field with a new CGameMenu::GetDefaultGadget() virtual method.
    • 8c149bb, eee0db3 - Replaced many string label & value fields of various menu gadget with virtual getter & setter methods.
    • dc26d56 - Added a static ChangeTo() method to each individual menu to replace the usage of ChangeToMenu().
    • 32c7abe - Replaced the CGameMenu::gm_pgmParentMenu field that was manually configured for each menu with a global dynamic stack of visited menus.
    • 967df07 - Sorted menu-specific functions by their respective menu source files instead of keeping them in three common source files.
    • 52e0f83 - Derived all menus and gadgets from the new node class.
    • 10463a0 - Made "Training" button in the single player menu simply toggle depending on the existence of the respective world file.
    • 52fd168, 0a94693, cf32c0e - Implemented special callback functions that pass appropriate menu & gadget pointers into them instead of having to retrieve them from the global menu manager.
    • 593f7be - Reworked how menu sounds are played and added support for extra "return" & "disabled" sounds.
    • 68cc35f - Removed the CLoadSaveMenu::gm_bNoEscape field due to being mostly useless, since the "Back" button still existed.
    • 11796d3 - Cleaned up some menu & gadget code and added destructors to various menu elements.
    • 80900bf - Improved upon the system of visited menus by having the current menu always be the last in the stack.
    • 22ae130, 08bf849 - Moved global variables & methods under the menu manager class.
    • 7be84a4 - Made the player profile menu easier to open through code.
    • 2428e43 - Reworked the StartMenus() function to take enum values instead of strings.
    • c661c67 - Fixed incorrect listing of single player levels.
    • 67a1aa3 - Added an abstract menu element class that all menus & gadgets derive from.
    • 50c0489 - Made individual menus manage which gadget is currently being focused.
    • 378cbf9 - Allowed nesting game menus inside other menus alongside menu gadgets.
    • b9cc023 - Properly figured out when to render the game menu.
    • c5f89e7 - Allowed multiplying text size when setting menu fonts.
    • 2632b9b - Allowed specifying text scale for button gadgets.
    • 12d0a9f - Allowed each game menu to render its own background.
    • 6187f04 - Reworked the confirm menu to be a submenu instead of a whole separate visited menu.
    • f06beb2 - Replaced "popup" menus with custom submenu render areas.
    • 688426a - Allowed menus to be properly and fully toggled on & off.
    • 5f37598 - Made the stack leave newly visited menus in it when going back to previous menus.
    • 39f67c8 - Reworked game menus to allow them to be dynamically created on demand instead of keeping single instances of each menu in the manager.

Fixes

  • ae0c496 - Fixed a bunch of compiler warnings.
  • e369981 - Fixed the check for a debug assertion in CSessionState::HandleTimers().
  • 23e5419 - Fixed a couple of issues with the engine streams.
  • 5f4fc2a - Fixed GCC errors related to the ArrowDir enum in SeriousSam/GameClient.

Project cleanup

  • af02680 - Renamed SeriousSam project to a generic GameClient one.
  • 1c537b8 - Moved GameClient resource files under the "Resources" subdirectory.

Project changes

  • e5587de - Prevented VS2010 from using the default platform toolset macro in project files that doesn't actually exist for it.
  • 2aecef8 - Updated ECC submodule to 1.1.2 and allowed specifying model configs as proper components in entity sources using modelcfg keyword.

[Snapshot] 2025-04-24 - Integer-based tick timers & SKA fixes

Choose a tag to compare

@DreamyCecil DreamyCecil released this 24 Apr 06:55

Outline

This snapshot focuses on reworking internal timer logic from second-based values (floating-point arithmetic) to tick-based values (64-bit integers) and fixing a few issues related to SKA models.

Code cleanup

  • 34b3b07 - Removed obsolete CMovableEntity::PreMovingOld() method.

Code changes

  • 4aa2182 - Added methods for serializing 64-bit integers to streams and network packets.
  • 1b22bc7 - Made Slerp() and Squad() functions accept a factor argument of a type different from the underlying quaternion type.
  • Timer changes:
    • bac5d5d - Reworked internal timers to rely on integer ticks instead of seconds.
    • c5cc610 - Privated all CTimer fields from directly accessing them.
    • a0bca06, 7682a61 - Made lerp factor values use double-precision values.
    • 1531220 - Added new CTimer methods that work with ticks instead of seconds.
    • 20ae265 - Reworked most logic from CTimer::GetRealTimeTick() method to the new CTimer::GetRealTime() method.
    • 23de277 - Reworked netcode and world simulation logic from second-based timers to tick-based timers.
    • 68d0368 - Reworked entity logic from second-based timers to tick-based timers.
    • 40d5990 - Reworked internal entity physics from second-based timers to tick-based timers.
    • 5852301 - Added a constant to CTimer that defines game's tickrate as an integer (amount of ticks in one game second).
    • 78c6f2d - Adapted the rest of the simulation logic to tick-based timers.
    • cef4487 - Added SECOND type that always represents time in seconds as DOUBLE (different from TIME, which can either be FLOAT or DOUBLE).
    • 38c3c11 - Added own CTimer methods for retrieving the current game time in seconds.
    • dbb4fa7 - Reworked all kinds of animations to rely on double-precision timers to keep them smooth in the long run.
    • 8523d88 - Made lens flares store their last frame time in ticks instead of seconds.
  • 629239d - Added new UQUAD and DOUBLE entity property types.
  • 22fa78e - Added new TICK entity property type for storing time in game ticks.
  • 8539325 - Allowed writing constant matrices and vectors into streams.
  • 09b6029 - Allowed selecting a specific device slot for split screen players instead of basing it on the index of a local player.

Fixes

  • Input fixes:
    • bd9b6af - Fixed common controls not working when there are no local players, e.g. during demo playback.
    • 397ba0f - Fixed input from the same mouse for multiple local players only applying to the first player in split screen.
  • SKA model fixes:
    • 6a66157 - Fixed occasional rendering issues with the BaseTransparent shader.
    • ebcfedc - Fixed incorrect colors on meshes from their shaders.
    • 55d1029 - Fixed light direction of a mesh always being relative to it.
    • 2da47aa - Fixed SMC configs only being able to be loaded from physical files on disk.
    • e9d9aa2 - Fixed incorrect path to the default SKA model inside SE1_10.gro (Axis.smc).
    • 242d305 - Fixed CModelInstance not copying its bounding box for all frames from another model (thanks to @UnizoneDev).
  • 7c38caf - Fixed incorrect usage of _tscanf() methods in place of _stscanf() in MFC-based projects.

Project changes

  • 1642beb - Updated ECC and SDL modules to versions 1.1.1 and 3.2.10 respectively.
  • c1c3f32 - Added an external batch script that's used in place of direct ECC calls for compiling entity source files in Visual Studio.
  • 1e8318c - Created a custom config file for ECC.

[Snapshot] 2025-04-19 - Multi-mice support & input improvements

Choose a tag to compare

@DreamyCecil DreamyCecil released this 19 Apr 21:04

Outline

This snapshot focuses on implementing mutli-mice support using SDL and improving gamepad support in split screen, as well as fixing previously unnoticed bugs.

Code cleanup

  • 5e48a8c - Replaced TIMER_PROFILING macro switch with own SE1_EXF_TIMER_PROFILING flag.

Code changes

  • fc7f21b - Allowed the progress hook to be turned off without removing it.
  • cfc112c - Replaced the CNetworkLibrary::ga_World instance field with a CNetworkLibrary::ga_pWorld pointer field.
  • 97ce197, 2cc9121 - Replaced CChangeable & CChangeableRT and CUpdateable & CUpdateableRT class pairs with TChangeable and TUpdateable template classes.
  • efc038b - Added synchronization mutex for engine streams for extra thread safety.
  • 1232816, 701430f - Made MFC-based projects compatible with non-Unicode MFC libraries.
  • Input changes:
    • 7982d3c - Organized key identifier values into an EInputKeyID enum.
    • 511c7c0 - Removed obsolete second mouse support.
    • bd93c95 - Reworked _abKeysPressed to support up to 8 different devices per pressed key.
    • fbc5ca5 - Split CInput::ClearInput() method into new CInput::ClearKeyInput() and CInput::ClearAxisInput() methods for clearing states of buttons and axes, respectively.
    • e7168a7 - Reworked how the mouse wheel scrolling sets its up & down "key" states.
    • d057305 - Refactored input code related to mouse axes and gamepads.
    • 35d4fce - Moved mouse-related input code to a separate source file.
    • f6a9488 - Restored mouse position when disabling game input under SDL.
    • ea8061f - Added error checks when retrieving the name of a disconnecting gamepad.
    • db3f6ea - Replaced MAX_JOYSTICKS macro constant with a proper _ctMaxInputDevices constant variable.
    • bbd9599 - Added a new field to cross-platform SE1 mouse events for remembering a device ID of a specific mouse.
    • d17d5a0 - Stored static mouse input data in a separate structure outside CInput::GetMouseInput().
    • 5cdf29d - Added CControls method that checks whether the controls use any mouse, akin to CControls::UsesJoystick().
    • a87ecfe - Allowed reading input for specific local players in split screen from specific devices.
    • 2def5f3, 030b5ee, bd2612f - Implemented support for multiple mice when SDL is preferred that allows each local player to be controlled using a separate mouse.
    • 5e7d90a, f491d6a - Reworked gamepads akin to multiple mice that eliminates the need to have separate gamepad buttons and axes per gamepad from 1 to 8.
    • b6c78ef, 26e2ecc, a08175c - Restricted direct access to specific structs and values of CInput for safety.
    • 8e9546d - Fixed player input being overridden by the last polled device from the device mask in CInput::GetInputFromDevices() (e.g. only the second mouse when both of them are allowed to be used).
  • 12538f1 - Allowed having variable amounts of local players and player profiles that have been hardcoded to constants 4 and 8, respectively.
  • bf91eb1 - Set custom mouse cursors using SDL within game windows when SDL is preferred.

Fixes

  • 9f22147, f280e50 - Fixed some tiny issues.
  • 439cb00 - Prevented assertion spam when calling CWorld::ReinitializeEntities() during the game.
  • 56af0b5 - Restored help in Modeler and WorldEditor applications.
  • 054f0bf - Fixed incorrect string comparison in WorldEditor.
  • df21693 - Fixed a memory leak from reallocating memory for new default states in multiplayer.
  • 9f41c3f - Fixed an incorrect condition in the CGfxLibrary::SetupPixelFormat_OGL() method.

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

Choose a tag to compare

@DreamyCecil DreamyCecil released this 16 Feb 14:21

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

Pre-release

Choose a tag to compare

@DreamyCecil DreamyCecil released this 04 Feb 07:01

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

Choose a tag to compare

@DreamyCecil DreamyCecil released this 25 Jan 19:37

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

Pre-release

Choose a tag to compare

@DreamyCecil DreamyCecil released this 01 Dec 11:02

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

Pre-release

Choose a tag to compare

@DreamyCecil DreamyCecil released this 09 Sep 12:55

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)

Choose a tag to compare

@DreamyCecil DreamyCecil released this 11 Aug 06:39

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)

Choose a tag to compare

@DreamyCecil DreamyCecil released this 13 Jul 17:20

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.