October 7, 20236 minutes
It’s been two whole years since the previous release, and we’re finally doing another one.
We’ve had a very slow release cadence thus far. Partly because we only rarely have time to work on this project (which isn’t changing any time soon), and partly because we’ve preferred to let a number of changes build up and then release them all at once. We’ve decided that this strategy has been suboptimal, as it results in fully complete features not being rolled out for many months and even years now. One particular source of delay is that we’ve been hoping to finish major subprojects like the refactor and fix all known bugs before doing a release, and when those get delayed, the entire release gets delayed.
So we’ve now decided to try doing smaller, but more frequent releases, even if there’s still changes we want to make that won’t be included. So the idea is that the releases after this one will ideally be made when there’s 4 or 5 small changes ready, and not… 87-ish. Further, the gap between releases during periods of active development should reduce to a few weeks or days, rather than months or years. No promises though, as always.
For those unfamiliar, the server changes (that’s all non-client changes) listed below are mostly relevant to people hosting their own OpenFusion servers. Most of these changes have already been live on our public servers for quite a while. In fact, the public servers are currently more up to date as we’re testing the changes from the refactor branch on them, which aren’t included in this release.
Most of the client/launcher changes in this release have been publicly available in the beta client releases we’ve done on our Discord server (1.4.1, 1.4.2, 1.4.3). If you’re currently running the 1.4 launcher however, it’s recommended that you update it to 1.5, as this fixes the majority of common client issues. Now with this full release, all those fixes have been incorporated into the version that new players will be downloading.
One of the notable changes in this release is the addition of the process sandboxes we’ve developed. These do not normally affect the behavior of the server, but they fortify it against attempts at hacking the server and taking over the machine it’s running on. This is mostly relevant to people hosting public servers for others to play on, specifically on Linux distros and the OpenBSD operating system, which are the only systems that the server is currently sandboxed on. For more information, read the relevant wiki page.
Players now respawn at half health as they should, instead of at full health.
Fixed several mission-related bugs that could in rare cases corrupt the player’s data, which would need to be manually fixed at the DB console.
Fixed quest item drop probabilities being shared between missions when you’re farming the same type of mob for multiple different missions.
Fixed a number of server crash bugs related to combat, chunking, etc.
Fixed a (mostly benign) bug where the server would sometimes ungracefully terminate on shutdown.
Fixed a few item duplication bugs.
Fixed vehicle expiry dates not being displayed when previewing vehicles at Vehicle Vendors.
Fixed /npcr
command making the NPC being rotated invisible to the player doing the rotation.
Implemented proper exit handling on Windows, so that the server saves all progress if it is terminated with Ctrl-C or by hitting the Close button on the command window before all players have left the game. This now functions identically on Windows as it did on Linux and other POSIX-compliant systems.
The server now keeps track of the libsqlite version it was compiled with. It gets printed to the server console on startup, as does the version it’s running with (if they differ). The oldest supported version is 3.33.0.
Added the localhostworkaround
config option in the shard
section. This lets you disable the workaround that changes the IP address returned by the login server to local clients. Leaving it on lets you connect directly to your local server even when it’s configured with a different external IP that your own machine cannot reach. We believe that this helps when using Hamachi. Turning it off helps with some network tunneling configurations like (like the -R
option in OpenSSH), where all connections to the OpenFusion process appear to be coming from the local IP, but need to be served the IP address of the remote server at the other end of the tunnel.
In-game player emails are now forwarded to the monitor port if enabled, which lets server administrators moderate in-game chat.
Implemented process sandboxing on Linux and OpenBSD, as explained above.
TableData and gruntwork loading is now more tolerant of missing optional fields and empty optional files.
Added autocreateaccounts
config option, which can be disabled to prevent automatic account creation. This is useful for servers with external account creation systems or invite-only servers which nevertheless listen on a public IP.
Added anticheat
config option to the enable/disable rapid fire anti-cheat.
Vastly improved the shard connection establishment logic resulting in better security, reliability and efficiency.
Improved robustness of the low-level FF protocol packet handling in general.
Added automatic DNS resolution for server addresses: this means you can now specify domain names (e.g. example.com:23000) instead of only being able to use plain IP addresses.
If a port is not specified when adding a server, the default will be used (23000).
Made the client EXE large address aware - this means that the game can now utilize up to 4GB of RAM, increased from only 2GB previously. This should reduce the number of crashes on the academy build of the game.
Marked the client EXE as DPI aware. This fixes issues with blurry game graphics, as well as rapid camera spinning and other mouse related issues.
Set the client EXE’s ACP to UTF-8 on Windows 10 1903 and above. This fixes some (but not all) issues with running the game on different locales.
Made numerous changes to how Unity Web Player works within the client. Now instead of having to install Unity Web Player, the plugin DLL is loaded directly. This is much more stable and also allows for installation of newer builds of the Web Player (e.g. 3.x - 5.x) without having to overwrite it every time you launch the client.
The above change allows for running the client through Wine/Proton with no tweaks needed.
Removed the “initial setup” window as we no longer need to install the Web Player.
Disabled the client’s attempts to automatically update itself and to send telemetry. They weren’t functional in the game’s build of Unity to begin with.
Ensured the client does not make any extraneous network requests: this includes loading fonts locally and disabling automatic proxy resolution. This improves client startup time, especially when playing offline.
Several bug fixes involving the cache swapping logic. It should now work much more reliably and if an issue is encountered while swapping it should no longer hang the client.
Fixed an issue where opening external links would not work correctly.
Miscellaneous behind-the-scenes refactoring for easier development: automatic code formatting, a more comprehensive README file, fetching the version from package.json, using path.join() where possible, etc.