We get in game
Written by SNBeast on February 6th, 2025.
I have to confess to two small errors of premise right out of the gate:
- In the title I am guilty of using the royal plural: I am currently working alone.
- I have reached in-game status about six months ago.
Regarding the latter, the delay to this point has been primarily due to schoolwork and other more pressing matters, but also due to the jankiness of the former setup.
Said former setup involved:
- A compiled standalone C# program which serves a basic crossdomain socket policy.
- An nginx server servicing the original webpage and static files out of an extracted Flashpoint curation.
- The same nginx instance using path and port remapping shenanigans to also serve Flashpoint's archived responses to the dynamic HTTP endpoints.
- Editing the hosts file on all connecting machines so the website doesn't break.
- A SmartFoxServer 2X instance running the extension jars, which in turn...
- Were compiled, packed, and placed using a batch script...
- With the source files being written on a different machine and copied via a USB stick.
This is not a sane way to go about it: getting all the server software running in a needed manner involved hacky configurations, the HTTP server would not scale past needing to feed static responses to dynamic endpoints (like login and progress information!), and the socket policy software might not run on a Linux server in a lightweight manner. So I had to take a break and look at what others were doing.
Project Exonaut is far from the only multiplayer MMO-like game made by Cartoon Network. I had already been vaguely been familiar with OpenFusion for FusionFall from its rather unique inclusion in Flashpoint: the game cannot be played without the server software, but the server can be run in effectively a singleplayer mode due to being a proper asynchronous MMO. The OpenFusion software is not helpful for my purposes, since it handles custom protocols instead of SmartFoxServer 2X and HTTP, but I took a look at what some of its contributors were up to and came upon CakeLancelot's work. CakeLancelot has also worked on software for FusionFall Heroes (HeroesExtension) and Adventure Time Battle Party (OpenATBP). Both contained SmartFoxServer 2X extension code, so they seemed like good leads.
The latter was especially promising, looking like it was recently rather active. I therefore joined the OpenATBP Discord, read through the news channel, and found that only a month prior, they had entered open beta with a dedicated server instance.
As such, I started poring over the server source project, and saw that it would be a good base. Instead of the above mess, the repository consisted of:
- A SmartFoxServer 2X extension's source and Gradle build script.
- A single runnable NodeJS project which spawns:
-
- An Express server which both serves the static files and dynamic responses to the dynamic HTTP queries.
- A custom server which serves a customizable socket policy file.
- Example configuration files for the game's server configuration queries and debug features.
So I created a new repository, whose first commit was a checkout of the present state of OpenATBP. Lest you think that this task would be some trivial derivation, it bears pointing out a few differences between Adventure Time Battle Party (ATBP) and Project Exonaut (PE):
- The SmartFoxServer 2X extension for ATBP is a monolithic zone extension which handles running each room, whereas the extensions for PE are split between a room extension and a zone extension (and necessarily a library extension to make passing objects between the two work due to class loading shenanigans).
- ATBP matchmaking is handled using a custom HTTP server, whereas PE matchmaking is handled by the SmartFoxServer 2X zone extension.
- ATBP takes place on the non-gravitational axes, whereas PE includes the gravitational axis and as such has to contend with gravity and terminal velocity.
- ATBP gameplay is generally processed server-side, whereas PE uses parallel server-side and client-side processing. As such, PE relies more on what the clients claim about the game state and in tandem with the genre difference requires more careful physics mimicry.
As the project currently stands, the HTTP server fulfills basic functionality and it is the SmartFoxServer 2X extensions which is in desperate need of work. I am currently exploring routes to make collision work.