Releases: DreamyCecil/Serious-Engine
Release list
[Snapshot] 2026-01-17 - Internal game client rework
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
GameMPincludes fromSeriousSam/GameClientsources. - 40aa3e5 - Removed the obsolete
_SE_DEMOmacro 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_strNamefield with a newCGameMenu::GetName()virtual method. - 3107d52 - Replaced the
CGameMenu::gm_pmgSelectedByDefaultfield with a newCGameMenu::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 ofChangeToMenu(). - 32c7abe - Replaced the
CGameMenu::gm_pgmParentMenufield 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_bNoEscapefield 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
ArrowDirenum inSeriousSam/GameClient.
Project cleanup
- af02680 - Renamed
SeriousSamproject to a genericGameClientone. - 1c537b8 - Moved
GameClientresource files under the "Resources" subdirectory.
Project changes
[Snapshot] 2025-04-24 - Integer-based tick timers & SKA fixes
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()andSquad()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
CTimerfields from directly accessing them. - a0bca06, 7682a61 - Made lerp factor values use double-precision values.
- 1531220 - Added new
CTimermethods that work with ticks instead of seconds. - 20ae265 - Reworked most logic from
CTimer::GetRealTimeTick()method to the newCTimer::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
CTimerthat 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
SECONDtype that always represents time in seconds asDOUBLE(different fromTIME, which can either beFLOATorDOUBLE). - 38c3c11 - Added own
CTimermethods 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
UQUADandDOUBLEentity property types. - 22fa78e - Added new
TICKentity 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:
- SKA model fixes:
- 6a66157 - Fixed occasional rendering issues with the
BaseTransparentshader. - 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
CModelInstancenot copying its bounding box for all frames from another model (thanks to @UnizoneDev).
- 6a66157 - Fixed occasional rendering issues with the
- 7c38caf - Fixed incorrect usage of
_tscanf()methods in place of_stscanf()in MFC-based projects.
Project changes
[Snapshot] 2025-04-19 - Multi-mice support & input improvements
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_PROFILINGmacro switch with ownSE1_EXF_TIMER_PROFILINGflag.
Code changes
- fc7f21b - Allowed the progress hook to be turned off without removing it.
- cfc112c - Replaced the
CNetworkLibrary::ga_Worldinstance field with aCNetworkLibrary::ga_pWorldpointer field. - 97ce197, 2cc9121 - Replaced
CChangeable&CChangeableRTandCUpdateable&CUpdateableRTclass pairs withTChangeableandTUpdateabletemplate 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
EInputKeyIDenum. - 511c7c0 - Removed obsolete second mouse support.
- bd93c95 - Reworked
_abKeysPressedto support up to 8 different devices per pressed key. - fbc5ca5 - Split
CInput::ClearInput()method into newCInput::ClearKeyInput()andCInput::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_JOYSTICKSmacro constant with a proper_ctMaxInputDevicesconstant 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
CControlsmethod that checks whether the controls use any mouse, akin toCControls::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
CInputfor 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).
- 7982d3c - Organized key identifier values into an
- 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
ModelerandWorldEditorapplications. - 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)
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
CDrawPortmethods for drawing things under separate graphics interfaces. - aee0ba7 - Got rid of
gfx*compatibility aliases for old graphics functions; movedIGfxInterface::SetVertexShader()method under the Direct3D interface. - 5c737ad - Replaced occurrences of
CTStringmethods when applicable:FileDir() + FileName()->NoExt()andFileName() + 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.
- 2838066 - Made RCon connect to the local server (
- Filesystem improvements:
- b57090d - Got rid of obsolete
CTStream::OpenModetypes and removed obsoleteCTStream::CreateModeenum 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 byExpandFilePath(). - a7628f4 - Used
AllocMemory()/FreeMemory()instead ofnew[]/delete[]when creating buffers forCTFileStream::fstrm_pubZipBuffer. - 53065cf - Replaced single
ExpandFilePath()method with a new much more flexible system in a form of anExpandPathstruct with specific methods for expanding paths to various places. - 749a2ab - Replaced all usage of
ExpandFilePath()methods withExpandPathstructs. - 01cbf06 - Added
ExpandPath::OnDisk()method for ensuring that the returned path is always absolute; allowed passing absolute paths toCreateAllDirectories(). - 1a3f57c - Replaced direct usage of
_fnmApplicationPathfor creating absolute paths with theExpandPath::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 + _fnmApplicationExeusage. - 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()insideCTFileStream::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 ofMods/MyMod/UserData/SaveGame/Player0/).
- b57090d - Got rid of obsolete
- 45e2e42 - Reworked
CTString::ReplaceSubstr()akin toCTString::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
CommandLineSetupfor 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
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_Stringfield private to prevent its direct usage in favor ofCTString::Data()andCTString::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_llPerformanceCounterFrequencyfield as it was functionally identical to theCTimer::tm_llCPUSpeedHZfield. - 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 madeCViewPortwrapper 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.
- 8a72955 - Allowed passing a window handle into
- 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
WAVEOUTBLOCKSIZEmacro 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 asunsigned charfor proper casting of arguments toint. - 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
/SAFESEHoption for Windows executables under static x86 build configurations.
[Snapshot] 2025-01-25 - Internal improvements
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 toCTString::NormalizePath()for logical consistency. - 0f0b922 - Implemented specific thread mutex types as enumerations for
CTCriticalSectioninstead 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
CEntityPointermethods 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
SeriousEngineSetupstructure be always required inSE_InitEngine()and added a field to it with the generic application name for use by SDL.
- 38d13ba - Allowed manually specifying the root game directory using
- 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
CTCriticalSectionandCTSingleLockclasses to rely onstd::recursive_mutexandstd::unique_lockfor new compilers with full C++11 support. - d0ae305 - Rewrote server list enumeration to utilize cross-platform
std::threadfor 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()andFreeUnusedStock()methods.
- 075d231 - Allowed system gamma to be adjusted when building with full SDL support.
- 7e88a40 - Added
CModelInstancehelper method for retrieving animation frames of specific animations at some point in time, which is similar to MDL'sCAnimObject::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
CTStringmethod 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
+gameand+logfilelaunch 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()andCTString::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 inabc\). - 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
constreferences 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.pdbinstead ofC:\SeriousSam\Sources\Bin\Dynamic-Debug.x64\Engine.pdb).
[Snapshot] 2024-12-01 - Input rework
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
CTStringconversions (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 theRadAngle()function to preserve the sign of the angle value. - 3128d0d - Fixed italic slant from
^itags 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
+xflag 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,GameGUIandWorldEditorprojects when statically linking them together. - Handled timer logic manually for single-threaded
Modeler,SeriousSkaStudioandWorldEditorbuilds.
- Resolved conflicts between resource files of
Known issues
[Snapshot] 2024-09-09 - Linux support
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.hfrom various source files since it is already included inEngine/Base/FileSystem.hfor Windows. - 7fae8c4 - Moved
EAX_ENVIRONMENT_*enum values under a separate header file. - cde4405 - Removed
externkeyword 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
CTStringto make them recognize and process forward slashes in paths as well. - 336f9fa - Replaced various
fopen()calls withFileSystem::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.
- 1f4221e - Reworked filename methods of
- 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_bEnumerationbeing 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.
- 5e98924 - Fixed
- 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 likeSDL_GetMouseState()and removedOS::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::Windowfor retrieving the native window handle under Windows platforms.
Fixes
- Various cross-platform fixes:
- e6bdc8f - Made
CSelectiontemplate code more cross-platform. - f481f57 - Got rid of
I64suffix from 64-bit integer values. - 77b68d9 - Replaced the last
Sleep()methods withCTimer::Suspend()in SeriousSam. - 3ba2c46 - Added
constspecifier to reference arguments in some game functions. - 0e6b6c2 - Fixed zlib compression for network packets under Unix.
- e6bdc8f - Made
- f5322e2 - Used full path to
MenuPrinting.hrelative to SeriousSam project inMenuGadget.h. - Implicit string conversion fixes:
- a6db89c - Fixed various warnings and errors for GCC.
- 4d04da7, 8ae5d8a - Got rid of various comparisons of
thiswithNULLthat 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.htoStatistics_internal.hfor 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
[Snapshot] 2024-08-11 - Quality-of-life features & fixes (Pt. 4)
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_D3Dmacro with a newSE1_DIRECT3Dmacro switch in the config that can be easily toggled instead of having to define it for all projects. - 730f8b3 - Reworked
SE1_3DFXmacro 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:
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)
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.
- fe26720 - Added
SE1_DOUBLE_TIMERmacro 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.