ClientPatches - festivaldev/Paradise GitHub Wiki
Client Patches
Paradise includes various patches to the official UberStrike client. While some of them are just there to make things work, most of them are Quality of Life improvements that enhance the ingame experience while still trying to keep it as close to the original as possible. This page lists everything changed within UberStrike by the Paradise Runtime.
Static Patches
Static patches change existing files once and never touch them again. The only static patch included in Paradise is the Bootstrap injector, that makes loading Paradise possible in the first place.
For this to work, Paradise adds a new call
instruction to GlobalSceneLoader.Awake
at index 0. This instruction calls Paradise.Client.Bootstrap.Bootstrapper.Initialize()
, which then starts to load the actual Paradise runtime.
Runtime Patches
Runtime patches are handled by Harmony. These are done, as the name implies, at runtime and do not modify any files permanently.
Each patch included in Paradise is assigned a specific class in UberStrike's Assembly-CSharp.dll
or Assembly-CSharp-firstpass.dll
. Upon initialization, Harmony then searches the Paradise assembly for any patch and applies them to the assigned class on demand, either when a class is referenced by the game or a method within that class is called.
The actual code for these patches can be found here.
ApplicationDataManager
This patch adds an invisible GameObject to the game that includes a few Script components. These components provide additional functionalty to the game, such as Instant Quit, Automatic Updates and Custom Maps.
It also sets the WebServiceBaseUrl
and ImagePath
fields to values provided by Paradise, so the game can actually authenticate.
If you have specified additional servers using ServerOverrides
in Paradise.Settings.Client.xml
, this patch adds these servers to the game.
AuthenticationManager
This patch reimplements the Steam authentication flow to save a user's Steam ID to the game's files. This was intended to be used for running multiple instances while developing Paradise and will be removed in a future update.
BundleManager
This patch allows players to buy ingame bundles for free and bypass the Steam microtransaction handler.
ClanDataManager
If you are an Admin, this patch will allow you to bypass clan creation requirements.
CommConnectionManager
This patch removes the 5 second delay before connecting to a Comm server after the game has been launched.
CreateGamePanelGUI
The CreateGamePanelGUI
patch has multiple purposes. First, it allows players set game modifiers, such as Quick Switch or Low Gravity (No Armor and Melee Only coming soon). It also increases the maximum selectable level cap to 100 (before it was 80). Lastly, the maximum password length for a room has been increased to 16.
GameStateHook
The GameStateHook
patch fixes an issue that players cannot see Quick Items emitted by other players when that item is not in their inventory.
GlobalSceneLoader
This patch reimplements the full game authentication flow in order to remove artificial waiting time and potential error messages. It also asks players to update their game if the Steam version is out of date.
A button to open the (currently invisible) UberStrike Steam page has also been added.
GlobalUIRibbon
This patch adds 3 new buttons to the top ribbon. The first two are links to the Paradise Discord Server and to the Issues page of this GitHub repo.
The third button, only visible when you have joined a server, let's you copy a game's link to your clipboard to share with your friends.
HUDDesktopEventStream
The HUDDesktopEventStream
patch adds weapon names to a game's kill feed. In a future update, you will be able to toggle this through Paradise.Settings.Client.xml
.
HUDStatusPanel
This patch changes a few HUD texts when playing Team Elimination, like n Rounds remaining
instead of n Kills remaining
. It also allows the n Kills/Rounds remaining
label to be updated with the same value as before, thus preventing STARTS IN
to be always displayed.
MapManager
The MapManager
patch allows the game to load custom maps (using CustomMapManager.LoadBundle
), because maps like Spaceport Alpha, Space City and UberZone can not be included in the game's files directly and need to be loaded as an external bundle.
MenuPageManager
This patch is responsible for implementing the uberstrike:///
protocol, like connecting to a game when the game is launched with certain parameters or opening a certain page. The automatic update procedure is also invoked here, as well as getting a list of supported custom maps from the server.
OptionsPanelGUI
The OptionsPanelGUI
patch reimplements the game's video settings in order to allow the player to select every resolution supported by their screen. To toggle fullscreen, a checkbox is used instead of extra resolutions.