Releases: SamClassicPatch/SuperProject
1.9.1 patch
A small patch with a couple of bug fixes to wrap up this year. Merry Christmas and Happy Holidays!
Check out the FAQ and the setup instructions before playing, as well as the rest of the wiki for the new commands and such!
Changes since 1.9
Game changes
- Fixed master server switch in the server list not updating the master server string in the engine (if vanilla query was used).
Editor changes
- Fixed resource replacement functionality not working: SamClassicPatch/WorldEditor#3
Known issues
- SamClassicPatch/EnginePatches#2
- SamClassicPatch/GameExecutable#3
- SamClassicPatch/Plugins#1
- SamClassicPatch/WorldEditor#1
Installation
- Download desired version of the patch (
TFE1.05_<date>.zip
orTSE1.07_<date>.zip
for Steam). - Navigate to the game folder and extract contents of the ZIP archive into it.
- Agree to replace existing files (original unmodified copies of the files are included with an
_OG
suffix at the end of the name). - (Optional) Download
SE1_RevResources.gro
and put it in the game folder if you intend on playing Revolution levels without mounting Revolution itself. - (Optional) Download
SE1_ClassicsPatch_<language>.gro
and put it in the game folder to install desired localization of the patch.
1.9 update - "Taking Back Control"
This update focuses primarily on implementing improved support of game controllers and reworked game menu functionality.
Check out the FAQ and the setup instructions before playing, as well as the rest of the wiki for the new commands and such!
Changes since 1.8
Common changes
- Replaced
sam_bNotifyAboutUpdates
command with aNotifyAboutUpdates
config property to allow update notifications to be toggled globally instead of per mod (since the command state was stored inPersistentSymbols.ini
). - Added observer camera command for multiplying speed for changing the FOV (
ocam_fFOVChangeMul
command). - Added shell command for clearing the entire console log (
ClearConsole()
command). - Extended input functionality by patching input interface methods:
- Finally made Mouse Button 4 and Mouse Button 5 work properly.
- Improved game controller support by replacing Windows Multimedia Joystick functionality with SDL_GameController.
- Renamed all controller buttons & axes from generic joystick names to actions of an Xbox-like controller.
- Allowed controller axes to be bound as regular buttons (primarily for triggers).
- Added
inp_fAxisPressThreshold
command for controlling the movement threshold after which an axis is considered "pressed".
- Added
- Added display of currently connected controllers using
inp_JoystickInfo()
command.
- Added Italian localization via a separate GRO file with translation files (thanks to @Kappa971).
Mod changes
- Fixed modded GameGUI windows not opening in any editor: SamClassicPatch/Mod#5
- Synchronized message counters between player predictions and real player entities to get rid of the notification sound every time an enemy is killed with prediction on.
- Made Game library replace old camera commands (starting with
cam_
) with new observer camera ones (starting withocam_
) to avoid errors from using them. - Added new gameplay extension for toggling fast movement while holding a knife in Cooperative mode (like in Deathmatch).
- Added command for toggling gradual coloring of crosshairs depending on the target's health (
hud_bCrosshairGradualColoring
command).
Game changes
- Reworked certain parts of the menu to hopefully make going from menu to menu more reliable.
- Replaced hardcoded "Video Options" & "Audio Options" menus with custom option configs.
- Allowed custom screen resolutions to be added using
Data/ClassicsPatch/Resolutions.lst
file (in aWIDTHxHEIGHT
form, e.g.1440x720
).
- Allowed custom screen resolutions to be added using
- Allowed using controllers for navigating the game menu and NETRICSA.
- Completely remade "Advanced Joystick Setup" menu to be more convenient to use.
- Made sliders continuously change values only on the initially clicked slider (instead of any one underneath the mouse while LMB is held down).
- Fixed sliders being unable to continuously change values on held LMB in fullscreen mode.
- Changes to option configs:
- Made option config display a fatal error instead of crashing, if its file cannot be loaded.
- Allowed translating strings using
PATCHLOCALIZE
chunk instead ofTTRS
to prevent it from being detected by the Depend utility. - Added
BigFill
type to theSlider:
property that creates big fill bars, akin to the volume sliders. - Added
Button
type for creating clickable buttons that recursively open another option config specified with the nextInclude:
property. - Added
AutoValue:
property that automatically adds specific values to an option and does extra configuration for it based on the specified variable. If no variable is specified, it simply adds the value as is and uses it as an automatically translated display name. - Implemented convenient drop-down lists for
Toggle
config options with more than 2 values (sam_bConfigValueLists
command).
Server changes
- Rewrote internal logic of built-in extension packets, which breaks compatibility with previous versions of the patch. Any demos that have been recorded with extension packets being used are going to be broken starting from this version.
- Added built-in extension packets for playing global sounds for all clients (
pck_PlayQuickSound()
andpck_PlayGlobalSound()
commands).
Plugin changes
Server Utilities
- Fixed the issue with only the last weapon from the list being given out/taken away on all
PlayerMarker
entities. For example, only Sniper was given out when Chainsaw, Tommygun and Sniper were enabled.
Other changes
- Completely redesigned and rewrote the API for the Core library. The new external frontend is now implemented via C API.
- Added API version using
CLASSICSPATCH_INTERFACE_VERSION
macro to patch info that's displayed usingPatchInfo()
command. - Added new
ClassicsPatchAPI
shell symbol for identifying patch versions with the new API to replaceCoreAPI
.
- Added API version using
- Took out a lot of code from the entire project to form a standalone header library and utilized its code instead.
- Added experimental build configuration for the open-source forks of The Second Encounter v1.10, much like the Revolution configuration.
- Added tools to the main repository for assisting in creation of localizations to other languages.
- Updated patch credits page in the game menu to include third party resources.
- Added default control presets for game controllers in slots 1-4.
Changes since 1.9-pre1
Show changelog
- Fixed the case where after selecting a level from the list for Network/Splitscreen game, going back to the previous menu would return back to the level selection screen instead of the actual previous menu.
- Replaced
Range
option config property with another variable inAutoValue
. - Completely reworked how plugin events are defined and registered through the API for proper backward compatibility.
- Made some fatal error messages more informative to understand where they happened and why.
- Fixed "Back" button in the network connection settings menu sometimes either not working at all, or going forward to the player selection menu instead of returning back.
- Added gameplay extension for toggling fast knife in Cooperative mode.
- Implemented gradual color changing on crosshairs.
Known issues
- SamClassicPatch/EnginePatches#2
- SamClassicPatch/GameExecutable#3
- SamClassicPatch/Plugins#1
- SamClassicPatch/WorldEditor#1
- SamClassicPatch/WorldEditor#3
Installation
- Download desired version of the patch (
TFE1.05_<date>.zip
orTSE1.07_<date>.zip
for Steam). - Navigate to the game folder and extract contents of the ZIP archive into it.
- Agree to replace existing files (original unmodified copies of the files are included with an
_OG
suffix at the end of the name). - (Optional) Download
SE1_RevResources.gro
and put it in the game folder if you intend on playing Revolution levels without mounting Revolution itself. - (Optional) Download
SE1_ClassicsPatch_<language>.gro
and put it in the game folder to install desired localization of the patch.
1.9 update (Pre-release 1)
THIS IS A PRE-RELEASE VERSION! This means that it's not yet ready for proper usage!
If you'd like to help testing it, install it just like a regular Classics Patch update. All found bugs should be reported as soon as possible!
Primary features to test
- New controller support and Mouse Button 4 & Mouse Button 5.
- Overall game menu due to major modifications.
- Overall stability due to the rewritten API.
- Italian localization.
NOTE: The wiki will be updated to reflect changes in this version once the full release happens.
Changes since 1.8
Common changes
- Replaced
sam_bNotifyAboutUpdates
command with aNotifyAboutUpdates
config property to allow update notifications to be toggled globally instead of per mod (since the command state was stored inPersistentSymbols.ini
). - Added observer camera command for multiplying speed for changing the FOV (
ocam_fFOVChangeMul
command). - Added shell command for clearing the entire console log (
ClearConsole()
command). - Extended input functionality by patching input interface methods:
- Finally made Mouse Button 4 and Mouse Button 5 work properly.
- Improved game controller support by replacing Windows Multimedia Joystick functionality with SDL_GameController.
- Renamed all controller buttons & axes from generic joystick names to actions of an Xbox-like controller.
- Allowed controller axes to be bound as regular buttons (primarily for triggers).
- Added
inp_fAxisPressThreshold
command for controlling the movement threshold after which an axis is considered "pressed".
- Added
- Added display of currently connected controllers using
inp_JoystickInfo()
command.
- Added Italian localization via a separate GRO file with translation files (thanks to @Kappa971).
Mod changes
- Fixed modded GameGUI windows not opening in any editor: SamClassicPatch/Mod#5
- Synchronized message counters between player predictions and real player entities to get rid of the notification sound every time an enemy is killed with prediction on.
- Made Game library replace old camera commands (starting with
cam_
) with new observer camera ones (starting withocam_
) to avoid errors from using them.
Game changes
- Reworked certain parts of the menu to hopefully make going from menu to menu more reliable.
- Replaced hardcoded "Video Options" & "Audio Options" menus with custom option configs.
- Allowed custom screen resolutions to be added using
Data/ClassicsPatch/Resolutions.lst
file (in aWIDTHxHEIGHT
form, e.g.1440x720
).
- Allowed custom screen resolutions to be added using
- Allowed using controllers for navigating the game menu and NETRICSA.
- Completely remade "Advanced Joystick Setup" menu to be more convenient to use.
- Made sliders continuously change values only on the initially clicked slider (instead of any one underneath the mouse while LMB is held down).
- Fixed sliders being unable to continuously change values on held LMB in fullscreen mode.
- Changes to option configs:
- Made option config display a fatal error instead of crashing, if its file cannot be loaded.
- Allowed translating strings using
PATCHLOCALIZE
chunk instead ofTTRS
to prevent it from being detected by the Depend utility. - Added
BigFill
type to theSlider:
property that creates big fill bars, akin to the volume sliders. - Added
Range:
property that automatically generates a list of values from 0% to 100% by specifying the min value, the max value and the step size (e.g.Range: 1 2 0.65
will add1 (0%)
,1.65 (65%)
and2 (100%)
values). - Added
Button
type for creating clickable buttons that recursively open another option config specified with the nextInclude:
property. - Added
AutoValue:
property that automatically adds specific values to an option and does extra configuration for it based on the specified variable. If no variable is specified, it simply adds the value as is and uses it as an automatically translated display name. - Implemented convenient drop-down lists for
Toggle
config options with more than 2 values (sam_bConfigValueLists
command).
Server changes
- Rewrote internal logic of built-in extension packets, which breaks compatibility with previous versions of the patch. Any demos that have been recorded with extension packets being used are going to be broken starting from this version.
- Added built-in extension packets for playing global sounds for all clients (
pck_PlayQuickSound()
andpck_PlayGlobalSound()
commands).
Plugin changes
Server Utilities
- Fixed the issue with only the last weapon from the list being given out/taken away on all
PlayerMarker
entities. For example, only Sniper was given out when Chainsaw, Tommygun and Sniper were enabled.
Other changes
- Completely redesigned and rewrote the API for the Core library. The new external frontend is now implemented via C API.
- Added API version using
CLASSICSPATCH_INTERFACE_VERSION
macro to patch info that's displayed usingPatchInfo()
command. - Added new
ClassicsPatchAPI
shell symbol for identifying patch versions with the new API to replaceCoreAPI
.
- Added API version using
- Took out a lot of code from the entire project to form a standalone header library and utilized its code instead.
- Added experimental build configuration for the open-source forks of The Second Encounter v1.10, much like the Revolution configuration.
- Added tools to the main repository for assisting in creation of localizations to other languages.
- Updated patch credits page in the game menu to include third party resources.
- Added default control presets for game controllers in slots 1-4.
Known issues
- SamClassicPatch/EnginePatches#2
- SamClassicPatch/GameExecutable#3
- SamClassicPatch/Plugins#1
- SamClassicPatch/WorldEditor#1
- SamClassicPatch/WorldEditor#3
Installation
- Download desired version of the patch (
TFE1.05_<date>.zip
orTSE1.07_<date>.zip
for Steam). - Navigate to the game folder and extract contents of the ZIP archive into it.
- Agree to replace existing files (original unmodified copies of the files are included with an
_OG
suffix at the end of the name). - (Optional) Download
SE1_RevResources.gro
and put it in the game folder if you intend on playing Revolution levels without mounting Revolution itself. - (Optional) Download
SE1_ClassicsPatch_<language>.gro
and put it in the game folder to install desired localization of the patch.
1.8 update - "Steamy Observation"
This update adds a whole bunch of new (and untested) thingamajigs, doodads, gizmos even. As well as extended compatibility with Revolution levels and quality-of-life features for Steam players!
Check out the FAQ and the setup instructions before playing, as well as the rest of the wiki for the new commands and such!
Changes since 1.7.2
Introducing: Observer camera
- Implemented new observer camera system (a.k.a. "OCAM") that allows advanced spectating via controllable free-fly camera (
ocam_bActive
command). - Supported by the vast majority of mods (even with custom mod libraries).
- Works in recorded demos and while observing an active game.
- Can be used as a sort of "photo mode" with its high quality screenshot functionality.
- Supports recording of camera movements in demos for creating simple scripted movies.
Common changes
- Allowed using as many local players as there are real players (more than 4 split-screen players), assuming there's custom logic written to support them.
- Added config properties for enabling access to Steam via dedicated servers and tool applications.
- Extended interactions with the client log.
- Added shell functions for displaying the log, deleting entries from it and resaving/reloading it.
- Simplified full information about each client and added display of specific client characters for more detailed information.
- Added separate switches to patch config for toggling mounting of each game directory (instead of having to input invalid paths to games).
- Changed default value of vertical FOV setting to "Yes (only player view)" (
sam_bUseVerticalFOV = 2
) for compatibility with vanilla maps. - Fixed texture script processing patch always displaying errors instead of working properly upon trying to create animated textures.
- Added experimental command for automatically replacing missing resources with placeholders (
sam_bUsePlaceholderResources
command).
Warning
This feature should only be used when playing alone! It is not multiplayer synchronized!
- Fixed skipped determination of the world format upon loading saved games. This used to produce bugs during gameplay on converted non-TSE levels in TSE with network features turned off (e.g. in singleplayer).
- Fixed replacement of Bio-mechanoid types from Revolution, which now correctly replaces
Artillery
->Sergeant
andSpawner
->Small
. - Started using Steamworks API to its full potential:
- Automatic game pause upon opening Steam overlay mid-game.
- Ability to take high quality screenshots using observer camera.
- Every screenshot will now include a level name attached to it as "Location" when uploaded to Steam Community.
- Ability to join the same server via a friend by using "Join game" button.
- Even players without a patch can join this way while the game is closed!
Mod changes
- Built custom Entities library for The First Encounter and The Second Encounter on 1.05 engine version with all of the patch changes from The Second Encounter v1.07.
- Created a new entity pack that comes with custom mod that implements missing entities for compatibility purposes. So far it includes:
- Cut enemies from Serious Sam Alpha.
Destroyer
,Elemental
,Headman
,Ughzy
andWalker
enemies from Serious Sam Revolution.Damager
andSoundHolder
entities from Serious Sam Revolution.- Other new entities from Serious Sam Revolution for world compatibility.
- Terrain entity.
- Allowed using "Monster" Arachnoid type on levels from Serious Sam Revolution.
- Added projectile types from Serious Sam Revolution to The Second Encounter for compatibility with its levels.
- Restored internal "CAM" functionality using new "OCAM" system from Core. Also works in Singleplayer & Cooperative game modes.
- Fixed various issues with flame particles in The Second Encounter, e.g. no reflection of flames in a mirror.
- Added option to toggle local player prediction to eliminate player jittering during predictions while playing on servers with latency below 50ms (
gam_bDisableLocalPrediction
command). - Added commands for extra scaling of big fonts in console and NETRICSA (
con_fBigFontScale
andcmp_fBigFontScale
commands). - Allowed vanilla FOV command (
plr_fFOV
) to be used in Deathmatch and limited it to 60-110 range, just like patch's FOV commands. - Fixed Sniper Rifle overriding FOV value from
plr_fFOV
with constant 90 degrees in The Second Encounter. - Added command for switching Cannon viewmodel position between The First Encounter and The Second Encounter modes (
wpn_bTSECannon
command).
Game changes
- Added button for visiting this repository's wiki under the "Extras" menu.
- Added confirmation dialog before restarting the game using the button under the "Extras" menu.
- Added ability to edit buttons of common game controls (from
Controls/System/Common.ctl
) in the same menu as personal player controls. - Changed amount of key bindings on screen from 14 to 16 (much like config options).
- Removed
+tfe
command line argument for specifying path to The First Encounter. It's advised to use theTFEDir
config property instead. - Added "Extreme" option to rendering preferences in video options for setting best possible graphics. This is an equivalent to executing "GFX: Extreme quality" addon with
mdl_iLODDisappear = 1
afterwards. - Added button to the server list menu for changing current master server for the Legacy protocol.
- Allowed typing characters from different ANSI code pages (e.g. cyrillics from Windows-1251) instead of only Latin characters in any textbox and console.
- Fixed translation files not being loaded if the patch is launched through the "Mods" menu.
- Added warning about gameplay extensions incompatibility to the "Customize game" button on the difficulty selection screen.
Server changes
- Implemented voting system via chat commands. Allows players and observers to initiate voting processes and vote in them.
- Voting to change the current map to another one from a predefined map pool.
- Voting to kick and ban a specific player for some short period of time.
- Voting to mute a specific player for some short period of time.
- Voting to skip current round on a dedicated server.
- Implemented system for kicking clients that became too annoying overtime (managed by plugins).
- Added new built-in extension packets:
- For changing the current world using different methods.
- For modifying session properties in batches of bytes.
- For modifying gameplay extensions by variable names.
Editor changes
- Grouped menu buttons for importing and exporting 3D objects together under the "File" dropdown menu.
- Added new export options for previously undocumented functions and put all three of them under an "Export" submenu:
- Entity exporting from 1.10 to Serious Engine 2+ (shortcut:
F11
). - Entity placement exporting from 1.10 to Serious Engine 2+ (shortcut:
Shift+F11
).
- Entity exporting from 1.10 to Serious Engine 2+ (shortcut:
Plugin changes
Accessibility
- Fixed player info sound patch not working in The First Encounter due to a different sound component ID.
Advanced HUD
- Fixed snooping colors for borders of lives and message counters.
- Added option to disable decorative tags in player names (
ahud_bDecoratedNames
command). - Made certain function hooks optional to maximize compatibility with mods.
- Added tags above players in Cooperative mode (or any gamemode while observing and in demos) that display their names and relative distance to them.
- Added ability to separately customize color of player names in the list and tags (
ahud_iColorNames
command).
Local Cheats
- Prevented bad synchronizations by displaying a warning upon trying to use cheats on a remote server.
Server Utilities
- Added ability to toggle specific button actions by using a button mask (
sutl_iActionButtons
command). - Added ability to disable third person view by blocking the button action received by the server and by forcing all characters to disable "Prefer 3rd person view" option on change.
Other changes
- Implemented packet and timer events for plugins.
- Fixed a crash upon using dummy chat command in the example plugin.
- Fixed a typo in the model config for the Demon computer model that prevented it from being loaded properly.
- Fixed some incorrectly written methods of
se1::map
template class. - Reworked
sam_bReinitWorld
command intosam_iWorldConverter
and improved its functionality. - Added compiler version using
_MSV_FULL_VER
macro to patch info that's displayed usingPatchInfo()
command. - Added Steamworks SDK to the repository and updated it to v1.59, including the
steam_api.dll
redistributable.
Known issues
Installation
- Download desired version of the patch (
TFE1.05_<date>.zip
orTSE1.07_<date>.zip
for Steam). - Navigate to the game folder and extract contents of the ZIP archive into it.
- Agree to replace existing files (original unmodified copies of the files are included with an
_OG
suffix at the end of the name). - (Optional) Download
SE1_RevResources.gro
and put it in the game folder if you intend on playing Revolution levels without mounting Revolution itself. - (Optional) Download
SE1_ClassicsPatch_RUS.gro
and put it in the game folder to install Russian localization.
1.7.2 patch
This patch implements some quality-of-life features and fixes a few reported bugs.
Check out the FAQ and the setup instructions before playing, as well as the rest of the wiki for the new commands and such!
Changes since 1.7.1
Common changes
- Fixed "too many open files" error upon starting the game when
SSRDir
andSSRWorkshop
properties are explicitly set to empty strings. - Adjusted logic timer patch to hopefully fix some sub-tick inconsistencies, e.g. with Trigger delays being set to 1.5 ticks on Serpent Yards that rounded down to 1 tick instead of 2.
- Made Steam API be initialized only for the game client for now instead of every tool and dedicated servers.
Mod changes
- If the mod is launched from the unpatched game for some reason, it will now try restarting itself via
Bin/SeriousSam_Custom.exe
. If it's not found, an error is displayed instead of crashing. - Added commands for customizing weapon viewmodel position (
ResetWeaponPosition()
command for resetting to defaults).- Position multiplication by XYZ (
wpn_afViewPos[3]
command). - Rotation multiplication by HPB (
wpn_afViewRot[3]
command). - FOV multiplication (
wpn_fViewFOV
command). - Viewmodel mirroring, a.k.a. left-handed mode (
wpn_bViewMirrored
command). - Display of active power-up particles (
wpn_bPowerUpParticles
command).
- Position multiplication by XYZ (
- Added ability to split split-screen views vertically for 2 players on a single screen or 3-4 players on any "dualhead" resolution (
gam_bVerticalSplitScreen
command).
Game changes
- Added ability to change scroll speed of game credits using mouse wheel.
- Added button to the "Extras" menu for displaying game or mod credits without having to quit the game.
- Now selected tab and current position in option configs is preserved after applying changes.
- Added command for restarting the game client like the new "Restart" button (
Restart()
command). - Added GoneSpy back into the "Legacy master server" list and made 333networks and 42amsterdam master servers use direct domains (
333networks.com
and42amsterdam.net
respectively) for compatibility with vanilla query manager (see below).
Server changes
- Added ability to return vanilla query manager from the engine and simply replace GameSpy master server address with the Legacy one without having to replace query manager in its entirety (
ms_bVanillaQuery
command). - Added internal support for more than 4 local players per client (up to maximum player limit).
Other changes
- Allowed using "Advanced HUD" plugin in mods with modified entities without creating a config for each mod with
SameHook=1
(experimental feature). - Added a few preset scripts under "Execute addon" for automatic configuration of the patch.
- Added patch to "Accessibility" plugin for skipping NETRICSA notification sound after killing every enemy while playing on a server with prediction turned on (
axs_bFixPlayerInfoSound
command).
Known issues
Installation
- Download desired version of the patch (
TFE1.05_<date>.zip
orTSE1.07_<date>.zip
for Steam). - Navigate to the game folder and extract contents of the ZIP archive into it.
- Agree to replace existing files (original unmodified copies of the files are included with an
_OG
suffix at the end of the name). - (Optional) Download
SE1_ClassicsPatch_RUS.gro
and drop it into the game folder to install Russian localization.
1.7.1 patch
This Steamy Holiday patch brings a few features for better compatibility with other mods.
Check out the FAQ and the setup instructions before playing, as well as the rest of the wiki for the new commands and such!
Changes since 1.7
Common changes
- Made sure that mods that want to use custom patch libraries (with
_Custom
mod extension, likeClassicsPatchMod
) behaved identically to vanilla game with "Custom mod libraries" enabled. - The patch can now detect specific seasonal events that can be used for cosmetic purposes.
- Added new gameplay extension for multiplying gravity acceleration and even inverting it using negative values on any level of any mod (
gex_fGravityAcc
command). - Added ability to optionally connect with the Steam client and notify it that the game is running as if it was launched directly through Steam (using new
Steam
config switch). If Steam isn't running or the game is unavailable (not owned), this feature is disabled.
Mod changes
- Blood & gibs can now be customized locally instead of being tied to the server settings and be automatically replaced during specific seasonal events (
gam_iCustomBloodColor
andgam_iCustomBloodTheme
commands). - Now all models in NETRICSA are loaded from predefined configs from
Models/CompConfigs
instead of being constructed in place via code.
Game changes
- Allowed all slider gadgets to be dragged instead of simply clicking on it each time to change the value.
- Allowed scheduling individual commands inline instead of entire scripts for config options using
Command:
keyword. - Allowed hiding options from configs that don't belong to specific mods (or belong to any but specific mods by prefixing them with
!
) usingMods:
keyword. - Made option configs remove the last tab if it only contains separators.
- Aspect ratio is now adjusted before drawing any menus, optimizing them for widescreen resolutions in all mods.
Known issues
Installation
- Download desired version of the patch (
TFE1.05_<date>.zip
orTSE1.07_<date>.zip
for Steam). - Navigate to the game folder and extract contents of the ZIP archive into it.
- Agree to replace existing files (original unmodified copies of the files are included with an
_OG
suffix at the end of the name). - (Optional) Download
SE1_ClassicsPatch_RUS.gro
and drop it into the game folder to install Russian localization.
1.7 update - "Compatibility Mode"
This update introduces support for most content from Serious Sam Revolution, opens up new opportunities via intricate features and fixes a lot of annoying bugs from both the engine and the previous versions of the patch.
Check out the FAQ and the setup instructions before playing, as well as the rest of the wiki for the new commands and such!
Changes since 1.6.2
Introducing: Serious Sam Revolution support
- Implemented mounting of Serious Sam Revolution and its workshop via
SSRDir
andSSRWorkshop
config properties, just like The First Encounter.
Note
The First Encounter v1.05 patch only supports workshop mounting and doesn't support level conversion. It's mostly useful for content replacements and player models.
- Patched world info reading to support worlds from Revolution.
- Patched dictionary and file reading to support weird/incorrect file paths from Revolution.
- Revolution worlds can now be opened and edited in any Serious Editor of your choice.
Common changes
- Replaced CD path usage for The First Encounter installation directory with an entirely new game directory system.
- Reworked resource loading priority from different directories. Now instead of loading resources from GRO packages in an alphabetical order, they are loaded from GRO packages in this order:
- Mod directory.
- Mod directory on a CD.
- Extra content directories specified in
Data/ContentDir.lst
. - Root game directory.
- Directories of other game installations.
- CD path.
- Fixed streams not reading text lines correctly that didn't have a line break before EOF: SamClassicPatch/EnginePatches#1
- Patched entity creation method to allow non-existent classes (or class files) to be substituted with other ones, just like other resources.
- Fixed entity property type 29 (
EPT_DOUBLE
) from Serious Sam Revolution being read incorrectly. - Patches for world methods are now also applied in Serious Editor.
- Enabled full integration of patch functionality into tool applications, i.e. file system extensions and 64-bit system support via the new
FullAppIntegration
switch in the patch config. Works with both vanilla tools and Steam-patched ones. - Fixed file replacement upon reading entity properties not actually replacing anything.
- Made file replacement work during the game by reading the list with replacement entries from
Data/BaseForReplacingFiles.txt
.
- Made file replacement work during the game by reading the list with replacement entries from
- Implemented system with gameplay extensions from the patch for customizing gameplay experience:
- If the gameplay extensions are enabled for a new session, game saves and demos will write extra information into them that makes them incompatible with vanilla games (
gex_bEnable
command). On the contrary, vanilla saves and demos can be properly loaded and played. - Added patches for entity logic timers to fix the infamous slowdown bug (
gex_bFixTimers
command). - Added various settings for customizing player movement (only for custom mod entities).
- If the gameplay extensions are enabled for a new session, game saves and demos will write extra information into them that makes them incompatible with vanilla games (
- Added special interface for easier interaction with the patch via mods by including a single standalone header or by creating new config files.
- Added ability to create custom lists of game difficulties similar to level categories.
- Added array of constants that contains values of current input axes (
inp_afAxisValues[AXIS_CT]
commands). - Added shell function for retrieving index of a plugin by its display name (
GetPluginIndex()
command). - Fixed INI configs crashing upon trying to read empty values without surrounding quotes (e.g.
Key =
). - Patched sound objects to allow local (
SOF_LOCAL
) sounds to play properly instead of silencing/skipping them while playing with prediction turned on. - Prevented FOV from being unpatched on non-player views (
sam_bUseVerticalFOV = 2
) if the game isn't running (to align it with the projection).
Mod changes
- Rewrote map type determination to display the world map more reliably (which incorrectly displayed a TSE map for TFE levels sometimes): SamClassicPatch/Mod#3
- Ability to toggle big font in console or just last lines for better chat readability that also scales with resolution (
con_iBigFont
command). - Added local indicators for spawn invulnerability via an active power-up and a power-up sound (
plr_iSpawnInvulIndicator
command). - Fixed
Woman
class not actually detaching an attached kamikaze in the editor, if needed. - Fixed
Walker
not being removed from fuss forMusicHolder
after dying that kept the fight music active for another 10 seconds. - Added arrays for each controls axis (translation, rotation & view rotation) for mimicking joysticks using keyboard keys by adding values to them per local player (
ctl_afAddTranslation[3]
,ctl_afAddRotation[3]
andctl_afAddViewRotation[3]
commands). - Fixed Minor Bio-mechanoids (
WalkerSmall
) having rocket launcher attachments instead of lasers in NETRICSA. - Extended compatibility with The First Encounter levels:
- Added key types from The First Encounter.
- Rebalanced Highlander Reptiloid (
Beast
class) by lowering its health and attack run speed, and weakening its projectiles. - Prevent particles from
ParticlesHolder
from being hidden upon deactivation.
- Compatibility with Revolution levels:
- Aforementioned TFE key types.
- Added support for new blend modes to
BlendController
,WorldBase
andWorldSettingsController
. - Added support for new surface types (gravel, no impact versions etc.).
- Added cut down version of the "Serious Jump" powerup (acting more like an additional mode for "Serious Speed").
- Marked
gam_iQuickSaveSlots
as "persistent" to save its value inPersistentSymbols.ini
between sessions. - Applied vertical screen edge offset from "Advanced HUD" plugin (
ahud_iScreenEdgeY
command) to centered & pickup messages and "Analyzing..." label. - If
hud_bShowClock
is set to anything higher than1
, it will now display seconds as an extra.
Game changes
- Made update checks a bit more reliable and made it send only one request to GitHub every 6 hours. Otherwise it shows a prompt to download the version that was received within the last 6 hours.
- Added ability to create up to 16 custom difficulties for mods.
- Added new options for filtering levels in the list: by world format and by display title.
- Level filtering options can now also be toggled (
sam_bLevelFiltering
command).
Server changes
- Master server will not start upon starting the server anymore if server enumeration is disabled.
- Fixed an issue with player characters being copied and reset after loading an old quicksave: SamClassicPatch/CoreLib#9
Warning
This is fixed by simply forcing GUID masking to be disabled in all cases other than running a multiplayer server (not local split screen).
- If gameplay extensions are enabled, the server will now append its settings while replying to the client with the server's session state (something like custom session properties).
- Fixed entity property extension packets setting received values into float properties incorrectly.
- Declared entity flags (
ENF_*
) and entity physics flags (EPF_*
) exactly how they are in Serious Engine code as extra shell constants for use with entity extension packets. - Added support for server administrators and server operators that can log in using
!login
chat command during the game with passwords configured by the server (ser_strAdminPassword
andser_strOperatorPassword
commands). - Added
!rcon
chat command for server operators for executing console commands on the server side. - Added
!save
chat command for server operators for saving a game on the dedicated server's computer (like pressing "SAVE" in the menu).
Other changes
- Added shell commands for replacing individual ammo types (
sutl_iAmmoType<0 - 30>
commands) or all of them at once (sutl_iReplaceAmmo
command) to "Server Utilities" plugin. - Changes to the "Advanced HUD" plugin:
- Added display of remaining lives (credits) above the messages in Cooperative mode in the style of early builds of Serious Sam Xbox (
ahud_bShowLives
command). - Removed the gap between the messages and the screen edge.
- If
hud_bShowClock
is set to anything higher than1
, it will now display seconds as an extra.
- Added display of remaining lives (credits) above the messages in Cooperative mode in the style of early builds of Serious Sam Xbox (
- Adapted a bunch of code for 1.10 engine version and specifically Serious Sam Revolution.
- Added an experimental build configuration for building the project under the Serious Sam Revolution engine.
- SamClassicPatch/WorldEditor#2 issue seems to have resolved itself a few releases ago and doesn't seem to happen anymore, so it is temporarily marked as fixed. If you encounter further issues with it, please leave a comment on that issue.
- Added button to context menu of any terrain editing mode for exporting the height map of a terrain that's usable on terrain primitives/brushes (next to 8-bit/16-bit export buttons).
Known issues
Installation
- Download desired version of the patch (
TFE1.05_<date>.zip
orTSE1.07_<date>.zip
for Steam). - Navigate to the game folder and extract contents of the ZIP archive into it.
- Agree to replace existing files (original unmodified copies of the files are included with an
_OG
suffix at the end of the name). - (Optional) Download
SE1_ClassicsPatch_RUS.gro
and drop it into the game folder to install Russian localization.
1.6.2 patch
This small patch contains a few adjustments and fixes.
Complete description of the patch for the latest version.
Changes since 1.6.1
Common changes
- Fixed
IncludeScript()
shell function taking an integer argument by mistake instead of a string. - Added support for reading properties types of Serious Sam Revolution entities.
Game changes
- Made sure that oversized fonts that are used in the menu fit within their appropriate height.
- Fixed another crash related to listing levels from Serious Sam Revolution.
Other changes
- Made "Maximum Ammo" setting from "Server Utilities" override properties of PlayerMarker entities that take all ammo of specific weapons.
- Fixed HUD color presets not applying because of the
IncludeScript()
issue in "Advanced HUD". - Potentially fixed all issues related to random "Cannot set function patch" errors.
- Fixed Serious Editor not working under the Debug build configuration.
- Fixed incorrect utilization of the patch config by tool applications by loading it too late.
- Made a few function patches more efficient.
Known issues
- SamClassicPatch/CoreLib#9
- SamClassicPatch/EnginePatches#1
- SamClassicPatch/Mod#3
- SamClassicPatch/Mod#5
- SamClassicPatch/WorldEditor#1
- SamClassicPatch/WorldEditor#2
Installation
- Download desired version of the patch (
TFE1.05_<date>.zip
orTSE1.07_<date>.zip
for Steam). - Navigate to the game folder and extract contents of the ZIP archive into it.
- Agree to replace existing files (original unmodified copies of the files are included with an
_OG
suffix at the end of the name). - (Optional) Download
SE1_ClassicsPatch_RUS.gro
and drop it into the game folder to install Russian localization.
1.6.1 patch
This sizeable patch improves upon the features introduced in the last update and adds new features for convenience and server setup.
Complete description of the patch for the latest version.
Changes since 1.6
Common changes
- Reworked application path logic to allow the patch binaries to be standalone under their own
Bin
directory. - Fixed third-party entity packs not loading with the custom mod turned on.
- Started treating
GameGUI
library as a plugin, just like theGame
library. - Completely reworked INI configs that fixed some bugs and implemented new features:
- Proper support for boolean, integer and double value types.
- Ability to add spaces around keys and values that are automatically trimmed.
- Ability to surround the value in quotes (
"
) for preserving spaces around the string.
- Every time the console is resized (reinitialized), it will now skip empty lines in the beginning before restoring the console log.
- Restored rain on The First Encounter levels in The Second Encounter in the most compatible way possible.
- Added console command for toggling automatic shadow update upon loading into games or playing demos (
gam_bAutoUpdateShadows
command).
Mod changes
- Built limited version of the mod for v1.05 versions of games, including The First Encounter.
- This version only contains custom
Game
andGameGUI
libraries without entity logic, which is only compatible with The Second Encounter v1.07.
- This version only contains custom
- Fixed crash upon joining servers with prediction on: SamClassicPatch/Mod#1
- Restored vanilla logic of resetting the overlaid observer views if it's set to more than 3 views (when Num 4 is pressed, for example).
- Made
EnvironmentParticlesHolder
render its particles outside of the defined boundaries on TFE levels to restore the original rain rendering.
Game changes
- Added a new field for a client password in the menu with player configuration before connecting to some server (
cli_strConnectPassword
command). - Added new options config for setting
Data/ClassicsPatch/Config.ini
properties for the next time the game starts. - Added new button to the server configuration menu for accessing extra server options from the patch (from
Scripts/ClassicsPatch/02_ServerSettings.cfg
). - Fixed "Give Laser" and "Give Cannon" options from the "Server Utilities" plugin affecting wrong weapon slots in The First Encounter.
- Added new connection setting ("Classics Patch preset") that can be customized by the user in the patch settings before selecting it (
cli_bCustomPrediction
,cli_iCustomBufferActions
,cli_iCustomMinBPS
andcli_iCustomMaxBPS
commands).
Server changes
- Fully reimplemented processing of the
MSG_REQ_CONNECTREMOTESESSIONSTATE
packet.- Made server check for any additional information at the end of the packet and see if the client runs the same patch version as the server.
- Made client send additional information at the end of this packet, i.e. the patch identification tag and a version of the installed patch.
- Added new setting that only allows clients with the same patch to connect to the server by checking that additional information (
ser_bForbidVanilla
command).
Other changes
- Patch built under the "Debug" configuration will now load plugins from the same subdirectory as the game libraries (i.e.
Bin/Debug/Plugins
instead ofBin/Plugins
). - Replaced
PatcherOutput
file next to executables with a convenientDebugPatcher
property in the patch config.- Removed unnecessary notifications with debug actions, since they're printed into the log file as well.
Known issues
Installation
- Download desired version of the patch (
TFE1.05_<date>.zip
orTSE1.07_<date>.zip
for Steam). - Navigate to the game folder and extract contents of the ZIP archive into it.
- Agree to replace existing files (original unmodified copies of the files are included with an
_OG
suffix at the end of the name). - (Optional) Download
SE1_ClassicsPatch_RUS.gro
and drop it into the game folder to install Russian localization.
1.6 update - "Anniversary Update"
This is a commemorative update that celebrates one full year since the first release of Classics Patch. It implements a big amount of new quality-of-life features and enhances multiplayer experience for the clients.
Click here to check out the release trailer!
Complete description of the patch for the latest version.
Changes since 1.5.1
Brand new mod
- Laid a foundation for a special mod exclusively for the patch that will fix more intricate issues and expand gameplay possibilities in the future. Only for The Second Encounter v1.07!
- This mod will be automatically activated in the main game and in mods that don't utilize custom DLL files for enhancing the overall game experience (which can also be disabled, if needed).
- By popular demand, made text font in NETRICSA larger if the resolution is higher than 720 pixels (
gam_bBigComputerFont
command). - Made background menu elements scale properly for different aspect ratios.
- Added game theme customization for menu elements, console and NETRICSA to fit with custom HUD themes introduced by Advanced HUD plugin (
gam_strClassicsPatchTheme
command contains a path to an INI config with the theme to set). - Synchronized text colors in Player and PlayerWeapons entities with HUD themes from Advanced HUD.
- Added command for changing fade time of the console (
con_tmConsoleFade
command). - Allowed game's mouse pointer to be rendered in borderless window mode (
gam_bShowPointerInBorderless
command). - Added ability to display advanced observer view windows to the side of the main view instead of over it and added a slider to adjust their width (instead of taking up 25% of the screen).
Common changes
- Implemented methods for compressing data for network packets and reworked custom packet logic.
- Implemented interface for sending HTTP requests.
- Implemented a parser for simple INI configuration files and utilize INI configs for simpler customization of various elements of the patch.
- Fixed broken shadows on brush polygons from dynamic lights after loading a saved game.
- Fixed fullbright brush polygon layers on The First Encounter maps due to engine differences in The Second Encounter.
- Fixed shade color during storm on The First Encounter maps in The Second Encounter.
- Added a configuration file for the whole patch with global properties that's loaded before the engine (located at
Data/ClassicsPatch/Config.ini
).- Path to The First Encounter is now specified in
TFEDir
property within the config instead of a separate file atData/ClassicsPatch/TFE_Dir.var
.
- Path to The First Encounter is now specified in
- Added Russian font for Revolution HUD theme to the localization.
- Added a useful shell function for executing script files because
include
command doesn't support string variables (IncludeScript()
command). - Made API hooks work more reliably and fixed some edge cases that didn't call them.
- Fixed a serious issue from vanilla that caused a crash for all clients and the server if any of the clients tried changing their player character while not being fully connected (i.e. during the
<player name> connected
message on screen).
Game changes
- Removed GoneSpy from the "Legacy master server" list due to being shut down.
- Made confirmation popup dialogs more customizable and made their width fixed on every aspect ratio.
- Implemented automatic checks for new patch updates and a prompt display to download them upon starting the game (
sam_bNotifyAboutUpdates
command toggles these notifications). - Added command for listing levels that match a wildcard string (
ListLevels()
command). - Added commands for quickly starting levels from the console (
cmd_iGoToMarker
,cmd_bServer
, andStartMap()
commands). - Added extra menu before any level list with categories for separating one huge level list into smaller lists, such as official games and user-made content (
sam_bLevelCategories
command toggles this feature). - Added a new
Games:
parameter for option configs to hide settings that don't belong in a specific game or engine version. For example, to hide sniper scope customization options for Advanced HUD in The First Encounter. - Added a new
List:
parameter for option configs for generating a list of value options from files under a specific directory instead of statically specifying paths to them by hand. This list can also be statically populated with extra string values, if needed.
Server changes
- Fully reimplemented processing of the
MSG_REQ_CHARACTERCHANGE
packet. - Added custom processing of the
MSG_ACTION
andMSG_SYNCCHECK
packets. - Backported
MSG_REP_DISCONNECTED
packet from Serious Engine 1.07 to 1.05 and made clients send it when appropriate. - Made sync check calculation separate for each client.
- Implemented GUID masking of player characters to prevent other server clients from stealing them (
ser_bMaskGUIDs
command).
Warning
Due to engine limitations, if server saves a map with GUID masking on, reconnecting players will not be attached to their dummy player entities and will instead spawn as if they connected for the first time.
- Fixed incorrect patches of packet handling methods which couldn't process more than one packet at a time.
- Made client log automatically load upon program initialization and resave every time the current game ends.
- Implemented some built-in extension packet types for synchronized entity manipulation with corresponding console commands (prefixed with
pck_
). - Added command for notifying clients about bad syncs whenever their game state doesn't sync with the server (
ser_bReportSyncBadToClients
command). - Fixed client muting not working if chat messages aren't limited or the anti-flood system is disabled.
- Simplified output of a client log and added ability to display full information about a specific client identity.
Plugin changes
- Made plugins read configuration files with the same name as the library (but with a
.ini
extension) with custom properties that the plugin may need. - Changes to the "Advanced HUD" plugin:
- Made icon shake upon value change toggleable (
ahud_bIconShake
command). - Made high score display in Singleplayer/Cooperative modes toggleable (
ahud_bShowHighScore
command). - Made depleted ammo icons toggleable (
ahud_bShowDepletedAmmo
command). - Made sniper scope display health level of a target like a normal crosshair (
ahud_bScopeColoring
command). - Adjusted text colors of the player list and current score for Revolution theme.
- Adjusted position of the match info (
TIME LEFT
etc.) to follow set screen edges and scale the position properly. - Made the plugin somewhat compatible with mods that modify standard entities. It won't show linking errors on launch anymore and it can be loaded into compatible mods via the config (
SameHook=1
property). - Replaced static list of HUD color presets with a list of custom configs that reside in the
Scripts/ClassicsPatch/HUDColorPresets
directory.
- Made icon shake upon value change toggleable (
- Added new cheat to "Local Cheats" for triggering entities at the crosshair position like vanilla
cht_bOpen
(cht_Trigger()
command). - Fixed "Server Utilities" allowing replacement of items with invalid or nonexistent item types, which it will now reset to type
1
(such as Knife weapon type in vanilla). - Implemented
IListenerEvents
interface for plugins for catching event-related logic within entities. - Implemented
IDemoEvents
interface for plugins for custom logic upon recording and playing demos. - Added hooks to
INetworkEvents
upon adding and removing player entities (joining and leaving the server).
Other changes
- Implemented macro switches for excluding specific features from building.
- Updated example plugin project with more code examples.
- Updated documentation (wiki) structure to be easier to navigate.
Known issues
- SamClassicPatch/CoreLib#9
- SamClassicPatch/Mod#1
- SamClassicPatch/WorldEditor#1
- SamClassicPatch/WorldEditor#2
Installation
- Download desired version of the patch (
TFE1.05_<date>.zip
orTSE1.07_<date>.zip
for Steam). - Navigate to the game folder and extract contents of the ZIP archive into it.
- Agree to replace existing files (original unmodified copies of the files are included with an
_OG
suffix at the end of the name). - (Optional) Download
SE1_ClassicsPatch_RUS.gro
and drop it into the game folder to install Russian localization.