F-Zero VS is the result of some work I did due to nostalgia. The original F-Zero SNES game was amazing for its time. The graphics used full screen Mode 7 (unlike Super Mario Kart which sacrifices full screen Mode 7 in singleplayer in order to use the same half screen code for multiplayer). And the music... some of the best ever - I CANNOT STRESS how much I love the music!! When I was a kid, the entire futuristic atmosphere amazed me.
I really wanted to do some work with this game, and my first idea was to build a track editor, but then I found some people that have already commenced work on that.
So instead I thought.. why not add two player functionality to F-Zero? After all, that was the one thing missing from the original game. I thought about split screening it but quickly realised it just wasn't feasible. And it wouldn't look good as the field of vision would need to be cropped. So my solution was to allow two player gameplay on two seperate screens. The best way to achieve this was by making it networkable. And then I thought, if it's going to be networkable, why limit it to two players?
And that is F-Zero VS. Four player, networked F-Zero. It's a mixture of ROM hack, Snes9x modification and server code. It works as follows:
1. The server is started on a networked computer.
2. Client computers each start the modified Snes9x emulator and specify the IP address and port of the server. The F-Zero ROM is then loaded by the emulator. It shouldn't matter whether it is headerless or an overdump or whatever as long as the ROM itself is the US version.
(eg. F-ZERO (U) [!] if you know what that means.)
3. The emulator then proceeds to run the game. During the emulation process, many patches to the ROM are made to turn various aspects of the the gameplay into multiplayer, while several memory hooks watch the RAM for certain signals that indicate different game states etc.
4. Each emulator sends the state of their controlled car (location, orientation etc) to the server. Then it requests the state of all the other cars.
5. The states of all the other cars obtained from the server are used to update the car states in the client game.
This project actually wasn't that challenging, fairly standard ROM disassembly. But it was a lot of fun. Most of the work was done on an Asus EEE 900 during long plane and ferry trips while I was on holiday (just got back last night).