Tuesday, July 29, 2008

What is FZVS?

This is a project that most people will not get the point of. Honestly, I don't know anyone in my real life that would see this as anything but a waste of time. But maybe there are those out there on the internet that DO get what its about, and this is for them.

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).

5 comments:

Unknown said...

I've already commented in your youtube video. You do deserve a job at nintendo. What you made is amazing, genius!

Michael said...

you are too kind, thanks :)

Rock N' Roll Racing.. said...

Hi, very good, Rock N Roll Racing (www.rocknrollracing.org) is VS MODE only for 2 players.. please hack for 4 players! one revolution in SNES GAME.. tanks.

dshaw5000 said...

WoW Michael it's awesome! We played 4 player no prob's or desync using hamachi IP. We may host an F-Zero tournament, would love to have you on board. Check us out on www.snesot.com
(Online Snes Tournaments)
P.s Would really like to understand this better so that I might attempt it with Mario Kart (4 player GP would be rad)
Peaceout from da Lightfoot! :-)

Michael said...

@dshaw5000,

Thanks!! It's great to hear it worked 4 player. SnesOT is such an awesome idea!!! It's my favourite console and its a great way to keep it alive.

Actually quite a few people have emailed me requested a Super Mario Kart 4/8 player hack for a while now. I am so busy with real life but I actually hope to sit down and do it one day..