22. Two Doors Into the Arena
There are two ways to get a character standing in the map. I’ve been putting off choosing between them until I knew what the client actually needs. Now I do, so here’s the call and why.
There are two ways to get a character standing in the map. I’ve been putting off choosing between them until I knew what the client actually needs. Now I do, so here’s the call and why.
The client stopped narrating what it was doing, so the trick that got me through the last four posts was dead. I had to stop watching the game and start reading the machine code underneath it. First disassembler of the project.
The server says WELCOME. The client, which has spent this whole project stuck on a transition screen, reads it, packs up, and tries to load the actual arena map. Then it asks to join the match.
Last post my server could hear the client say HELLO. This post it says something back, and the client, which has been shouting into a dead socket for eighteen years, answers with three messages I didn’t have to ask for.
I started actually writing the server. It’s about a hundred lines so far and it does exactly one thing: it hears the client say HELLO and understands it. But that’s the first time anything I’ve written has been on the other end of that conversation.
I traced the shortest path through Fury’s own code from ‘a player connected’ to ‘a character exists and can move’. The character turns out to exist first.
I pointed a 16-year-old game client at a server that doesn’t exist and listened. It said hello in plain English.
I went looking for an existing Unreal Engine 3 server I could build on top of. Every one I found cheats in a way I can’t.
Phase 2 is done. I’ve read the whole game. Now comes the part where I have to build the thing that’s actually missing.
The client ships every ability, item, vendor and map in a custom binary format with no docs. I cracked it from a hex dump in an afternoon, and then noticed that a huge chunk of the tables aren’t in the box at all.