Software developer · Reverse engineer · 3D generalist

Jake Harris

When Ubisoft switched off Spartacus Legends in 2015, the game went dark for good. This August I reverse-engineered its network protocol and rebuilt the backend it lost, so it boots, fights and saves again.

  • Corowa, NSW
  • B. Computer Science · UNE
  • Open to work
10yrsoffline before the revival
20releases in four weeks
70members in the community Discord
219automated tests
7,354lines of server Python

ICase study · Game preservation

Reopening the arena

Spartacus Legends Preservation · Aug 2026 – present · Solo developer · Open source

On 8 August 2026 a friend asked whether Spartacus Legends could be played again. The free-to-play PS3 brawler was online-only. Every login, purchase and gladiator lived on Ubisoft's servers. When those shut down on 22 December 2015, the game stopped at a “service unavailable” screen and never got past it.

There was no documentation and no server code, only the game binary and the traffic it tried to send. The first public build shipped the next day. Four weeks and twenty releases later, the whole single-player loop works: recruitment, fights, levelling, the Primus campaign, Nemesis, the shop and daily rewards. It runs on both retail versions of the game, and saves survive a cold boot.

▶ Gameplay · 1440p · RPCS3
Spartacus Legends running against the preservation server in 2026. Watch on YouTube. Playing it loads YouTube.

How it fits together

The game still believes it's talking to Ubisoft. Everything it reaches for now runs locally.

RPCS3 · PS3 emulator
Spartacus LegendsPS3 client · PPU
PPU patchesPowerPC · via installer
IP swap list*.ubi.com → 127.0.0.1
RPCNPSN side · upstream, not mine
SpartacusLegendsServer
TCP 80 OnlineConfigservice directory over HTTP
UDP 21000 Quazal authRendezVous tickets
UDP 21001 Quazal securePRUDP · RMC · RC4
Persistence profile · campaign · roster
+ purchase ledger
  1. Redirect. RPCS3's IP swap list points Ubisoft's hostnames at localhost, so the game dials my server instead of a dead one.
  2. Configure. OnlineConfig answers the boot-time HTTP request with the service directory the game expects.
  3. Authenticate. Quazal RendezVous issues a ticket over PRUDP, then opens an RC4-encrypted secure session that carries every RMC call.
  4. Persist. The server answers every call, stores the game's native save objects, and replays the purchase ledger at login.
  5. Patch. A handful of PowerPC instruction patches steer the client past services that Ubisoft retired and RPCS3 doesn't emulate.

The hard parts

Three problems that took real digging, and one that took assembly.

01

Speaking a protocol nobody documented

Reverse engineering · Networking

The game speaks Quazal RendezVous, a middleware protocol from the PS3 era. It sends reliable packets over UDP (PRUDP), checksums them, compresses and RC4-encrypts each payload, and puts remote method calls (RMC) inside. I rebuilt the server side by working out which calls the client makes, what it expects back, and what breaks when it doesn't get it.

One design decision paid off early: the server answers everything. Before that change, an unimplemented shop request got silence and the game waited on a spinner forever. Now unknown calls get a well-formed failure, and the decoded parameters go to a log. Play continues, and the log shows what to build next.

Anatomy of one secure packet

PRUDP headerports · type · flags · session seqper-conn frag1…n, 0 = last payloadcompressed → RC4 Σchecksum
size protocol call id method parameterstyped, little-endian

Decrypted payload = one RMC call

02

Rebuilding the saves the server used to keep

Inference · Data modelling · Persistence

The PS3 doesn't keep your progress. At login the client asks the server for it and rebuilds everything from the reply. Nothing documented that reply, so I inferred it. Three native save objects restore the profile, the campaign and the gladiator roster. Then Shop method 8 replays the full purchase transaction list to restore slots, unlocks and remaining boost uses. If anything is missing from that replay, it's gone after the next cold boot.

Server · stored state
    PS3 client · after cold boot
    Waiting for server…
    Gold0
    Silver0
    Fame0
    Campaign—
    Ludus slots
    Roster
    empty
    Owned
    nothing

    Values are illustrative. Object type IDs and the replay order match the real server. Tick “Drop the ledger” to see what goes missing.

    03

    When the save got too big

    Transport debugging · Three releases, one bug

    Players with long purchase histories started seeing an endless loading screen. Each purchase adds 16 bytes to the Shop method 8 reply (item ID, packed timestamp, quantity). Past about 59 purchases, the reply no longer fit in one packet the game would accept. The first fix split the reply up, but that wasn't enough. The client acknowledged every piece and still quietly dropped purchased slots after a reboot. The real fix meant finding the title's legacy reliable substream and matching it exactly.

    963 B

    1,578 bytes of RMC reply

    The sizes come from the server's encoder: 16 bytes per transaction plus about 26 bytes of RMC framing, split into 963-byte fragments.

    04

    Four instructions in a PS3 binary

    PowerPC · RPCS3 patch format

    Some states the server can't reach on its own. RPCS3 doesn't fully emulate the Commerce2 service, so the client never reaches the state that starts native save enumeration. The fix is four big-endian instruction words, written to exact addresses. The patch only applies to the matching PPU build hash, and the installer checks that hash before it touches anything.

    SpartacusLegends_ServerPatch.yml01.00 · patch v4.2
    1. 0x004F2B6448 00 04 58b 0x004F2FBCtake the state-26 success path
    2. 0x0010571038 00 00 01li r0, 1tell the save enumerator Commerce is ready
    3. 0x0006850448 00 00 BCb 0x000685C0apply the locally saved profile
    4. 0x00174A9C98 09 00 22stb r0, 0x22(r9)mark the recruit-pool refresh complete

    Twenty releases in four weeks

    Shipped in small steps, each one tested live, with bug reports coming back through Discord.

    1. The ask

      A friend asks if the game can be played again. Work starts that day.

    2. v0.01First public build

      The game gets past its dead login for the first time in a decade.

    3. v0.2Economy rebuilt

      Gold, silver, fame, levels and purchases persist across cold boots.

    4. v0.3Rosters survive

      Full gladiator rosters restored through RPCS3's IPC. A patch installer automates setup.

    5. v0.3.6Nothing hangs

      Every shop request gets an answer. Primus campaign progress persists.

    6. v0.3.8Online, experimentally

      Opt-in matchmaking over RPCN: Ready Room, Quickmatch and leaderboards.

    7. v0.3.10Recovery tooling

      Legend recovery with full backups and rollback on failure.

    8. v0.4 – 0.5Native saves

      Progress moves onto the game's own server-save path, with automatic migration from older installs.

    9. v0.6Final title update

      Support for version 01.06, plus a validated, backup-first 01.00 → 01.06 save migration.

    10. v0.6.2 – 0.6.4Fidelity & fragmentation

      Daily Login rewards, shop fidelity, and the reliable-substream fix.

    11. v0.6.5Boosts, exactly

      Consumable boosts refill and persist correctly. Tests cover all 23 retail boosts.

    219 automated tests

    Protocol responses, migrations, the installer, economy rules and title-version handling.

    Backup-first migrations

    Timestamped backups before any conversion, rollback on failure, and legacy files are never deleted.

    Version-aware

    Detects 01.00 or 01.06 and keeps their incompatible save layouts in separate namespaces.

    Zero runtime dependencies

    Standard-library Python, packaged into Windows executables by a PowerShell build script.

    Guard rails for users

    The installer checks the game build, won't run while RPCS3 is open, and backs up config first.

    Community-tested

    Live validation and bug reports from a 70-member Discord, with fixes shipped within days.

    Independent fan preservation project. Not affiliated with or endorsed by Ubisoft or Starz. Spartacus Legends and related marks belong to their respective owners.

    II3D generalist · Blender

    Also at home in Blender

    Modelling to final render, and real-time avatars for VRChat

    Render · Blender The Whale For a high school stage production of Pinocchio

    Most of my Blender work these days is VRChat avatars: creating them and editing existing ones. That work runs the whole pipeline. Clean topology, UVs and textures, then rigging and weight painting, then shape keys for visemes and expressions, then optimisation so it all runs in real time in Unity.

    The whale is older. It's a rendered underwater sequence made for a school production of Pinocchio, and it's where I learned lighting, atmosphere and animation for a set piece.

    1. 01Modelmesh editing · topology
    2. 02UV & textureunwrapping · materials · shader nodes
    3. 03Rigarmatures · weight painting
    4. 04Shape keysvisemes · expressions
    5. 05Animate & renderCycles · EEVEE · lighting
    6. 06Optimise & shipreal-time budgets · Unity · VRChat SDK

    Earlier builds

    Emulation came before Spartacus. So did shipping software for a real client.

    Personal project · C#

    Game Boy emulator

    A Game Boy emulator written from scratch in C#: CPU, memory map, graphics and input, good enough to boot and play Tetris. It was my first taste of making old hardware run on modern machines.

    University capstone · Java · 94 (HD)

    Automated Data Flow

    In a three-person team, I built software for the University of New England's HR department using Java, JavaFX and Apache POI. It automated a spreadsheet-driven data exchange, and we gathered the requirements directly from the client.

    IIISkills

    The toolkit

    Reverse engineering

    • Network protocol analysis (Quazal PRUDP / RMC)
    • PowerPC (PPU) assembly & binary patching
    • RPCS3 debugging & IPC (PINE)
    • Ghidra
    • Binary formats & serialisation

    Languages

    • Python
    • C#
    • Java
    • PowerShell
    • JavaScript
    • HTML & CSS

    Platforms & tools

    • Git & GitHub
    • .NET & Blazor
    • JavaFX
    • Unity
    • RPCS3
    • Windows

    3D · Blender

    • Modelling & mesh editing
    • UV unwrapping, texturing & shader nodes
    • Rigging & weight painting
    • Shape keys: visemes & expressions
    • Animation, lighting & rendering (Cycles / EEVEE)
    • Real-time optimisation · Unity · VRChat SDK

    Working with people

    • Customer service & communication
    • Technical troubleshooting
    • Sales & meeting KPIs
    • Community support & bug triage
    • Requirements gathering & teamwork

    IVExperience & education

    The record

    1. Aug 2026 – present

      Creator & maintainer

      Spartacus Legends Preservation · open source

      • Reverse-engineered the game's Quazal RendezVous protocol and rebuilt the retired Ubisoft backend in Python.
      • Inferred and reimplemented server-side persistence, including native save objects and transaction-ledger replay.
      • Shipped 20 releases in four weeks, with 219 automated tests, safe save migrations and a one-click RPCS3 installer.
      • Support and live testing for a community of 70 players on Discord.
    2. Jul 2021

      Certificate III in Business

      BSB30115 · alffie

    3. Aug 2018 – Jul 2019

      Casual Storeman / Sales Consultant

      Bing Lee · Armidale, NSW

      • Answered customer enquiries, resolved issues and recommended products.
      • Diagnosed and fixed technical problems with computers and electronics.
      • Managed inventory, and delivered and installed white goods and home electronics.
      • Consistently met sales targets.
    4. Mar 2015 – Dec 2018

      Bachelor of Computer Science

      University of New England · Software Development major · conferred May 2019

      94 IT Project (capstone) 90 Internet Publishing 86 Computer Networks & Information Security

      High Distinctions. Academic Merit Award, School of Science & Technology, 2015 and 2016.

    VContact

    Got something that needs reviving?

    I'm looking for software work, whether that's backend, tooling, reverse engineering or games, and I'm happy to talk 3D too.

    Corowa, NSW 2646 · References available on request