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.

PlayerKilledSpectatorState