Daytona USA is Playable Online on the Dreamcast for the First Time in 21 Years

Daytona USA artwork by Sega

To say that online multiplayer was a central pillar of the Dreamcast brand would be an understatement. From day one it was touted as a standout feature, placed front and centre of most of the big marketing campaigns, and generally bigged-up by Sega executives at any opportunity that arose, from press interviews to industry events.

After a bit of a delay and some teething issues following the console's launch, an impressive online architecture was erected and over 80 games were released with an online multiplayer mode between 1999 and 2002. While hundreds of thousands had the fortune to experience the joys of playing their little white box online during this period, online multiplayer facilities did not send the Dreamcast into the stratospheric heights hoped for by Sega, and the official online lifespan of some games was as gut-wrenchingly brief as that of the commercial days of the console itself.

Artwork of Fred Durst accompanies a headline which reads: "Dreamcast with Bizkits and Gravy... SegaNet Says: This Bizkit Ain't Limp! SegaNet takes its show on the road with the band
No doubt Sega had to spend a pretty penny to gain celebrity endorsements like this one...

Daytona USA 2001, the go-to title for unabashed all-out arcade-racing on the Dreamcast, is a prime example. Released to largely positive reviews (90% in Paragon's Dreamcast Magazine) between December 2000 and May 2001 across different regions, the official server reportedly ceased to function before the end of 2002. I haven't been able to source a firm verification of precisely when the server closed, but by most accounts it was only operational for 18 months at most. Mercifully though, for those of us who are hooked on the delights that online multiplayer on the Dreamcast can bring, I am delighted to report that we are now achingly close to being able to play this particular title online once more.

That's right readers. Believe your eyes and ears. In the near future, Daytona USA 2001 is due to be playable online on the Dreamcast for the first time in 21 years, thanks to the bright mind and unswerving commitment of ioncannon, who has been working on the revival of its online mode for the last six months.

The game is set to join the ranks of 25 other Dreamcast games which have had their online modes already revived and are playable online via unofficial servers. The key details regarding Daytona and some insights from ioncannon, who kindly took the time to answer our questions, can be found below.

Update (14/07/2023): Daytona USA is back online! Check out PC Wizard's post on the Dreamcast Live blog to find out more.

DAY-TON-AHHHHHHH! What you need to know about playing it online

The PAL version shown here won't be of much use to those eager to play online...

  • There is no precise date set for the completion of this online multiplayer revival project (it is a voluntary initiative after all), but progress has been good and appears to be reaching the final stages. Successful games have been played between emulators and tinkerings are currently under way to get it fully working on real hardware.
  • We'll be sure to post an update as soon as the new server is publicly available and ready to play on. For now, those interested can follow ioncannon's thread on Dreamcast-Talk.
  • Daytona's online mode was axed from the PAL release at the last minute (in similarly enraging fashion to the PAL releases of Outtrigger and Unreal Tournament), therefore you will need an NTSC-U (North American) or NTSC-J (Japanese) edition of the game to play online.
  • The game will not need to be patched to be played online. You will be able to play with your regular retail releases, whether those be legitimate GD-ROMs or "backups" that are played from an optical disc emulator such as the GDEMU.
  • The revived online mode will feature nearly everything that the original online mode did: up to 4 players per race, with plenty of tracks and cars to choose from. The only feature that has yet to be figured out is the ranking system.
  • The game is not compatible with the Dreamcast's Broadband Adapter, so to play online you will need to connect via your regular Dreamcast modem and a 'DreamPi' (a Raspberry Pi configured to enable your Dreamcast to play online) with an updated DreamPi image installed (something which is being worked on at present).
  • Getting your Dreamcast online may seem daunting at first, but is actually a relatively easy task, even for those whose technical chops are lacking (like me!). Step-by-step guidance is available on the Dreamcast Live website, and the friendly folks over at the Dreamcast-Talk forums and the DCJY Discord Server are typically happy to help those who need a helping hand.
  • Scheduling and joining online sessions of Dreamcast games is easier than ever before. The Sega Online discord group host Dreamcast games several times a week suited to different timezones, Dreamcast Live maintain a regular schedule and welcome engagement via their TeamSpeak channel, and you can also find opponents the old-school way via the Dreamcast-Talk forums.

The Revival of Daytona's Online Multiplayer Mode: Insights from ioncannon

Testing the server connection using the Dreamcast emulator Flycast. Image courtesy of ioncannon.
Here in the Dreamcast scene we are blessed to have a talented pool of people, including ioncannon, who have committed their skills and knowledge to reviving the Dreamcast's online functions. We asked ioncannon to spill the beans on the journey he has taken with Daytona thus far and he kindly obliged...

DCJY: What inspired you to work on reviving the online mode of Daytona?

ioncannon: I started reverse engineering old multiplayer games back with Final Fantasy XIV 1.23b (see Project Meteor for details). After seven years or so I was looking for something new and dude22072 asked if I could take a look at the Sakura Taisen Online games. That seemed feasible, but I was more interested in Capcom's Dreamcast games that used the KDDI service for online play, given that I am an avid Street Fighter 3: Third Strike fan (and even own a CPS3 machine). After getting a proof of concept working, I hit a snag due to the fact that these particular games use direct modem2modem connections. On a whim I checked what else was still unfinished and decided to tackle one of the last two US Dreamcast games that had yet to be figured out. Daytona looked easier than Propeller Arena due to it having a lot of leftover debug data available. Like most of my projects, things quickly snowball as more and more of the code is figured out and I get addicted to the "chase" if you will. I consider it "digital archeology" and find joy in figuring out how a game works.  

Please could you describe the steps involved in your Daytona project thus far?

I always start by finding the TCP send/recv calls and working my way up. On Windows games it's easy: just look for the Winsock2.dll calls. It's a lot harder on the Dreamcast, but luckily during the KDDI Capcom server research I stumbled upon an old copy of the Japanese network stack library. It was made by Access and called AVE-TCP (US companies used PlanetWeb's library instead). While it was an older version than what both Daytona and the Capcom games used, I was still at least able to use the included documentation to find the raw TCP and UDP calls for open, send, recv, close, etc., using their enum codes (unique numbers to define something) as a starting point. From there I worked my way up the "receive" part of the library, and then through the game code itself to find the "opcode switch". This is usually in every networked program. As packets get sent back and forth, there is usually an opcode; a number that defines what this packet will do. Every time a packet arrives the game will run it down a giant "switch" (programming term for a bunch of different code paths; given an input value. See an example here). From there we can find all or almost all possible opcodes that the game will use. Sometimes it's a bit more complex than that - but that's an outline of the general idea. The same can be done for packets sent; follow up the send path of the library, and find the main "send this packet" function the game uses. I use Ghidra (thanks NSA, you did something positive for the world), which lets you search all known callers, and if I see a unique number popping up as an input parameter; that is probably the Client -> Server opcode.

From there, I examine what the game is doing for a given packet, what data is changing internally, how packet data is parsed, and even just throw garbage at the client to see what happens! A debugger is a must when doing this kind of analysis and luckily I found one; a hacked together branch of Flycast (that is held together with duct tape). This lets me step through the machine code and see what is happening in real time, and more importantly what the memory and function arguments look like. This is the same technique I used for Final Fantasy XIV 1.0, Capcom's games, Daytona, and the Guru Guru Onsen games. As I figure out what each function does, I rename it to something descriptive; piecing together the variables that are used.

Daytona is actually one of a bunch of games that use the Lobby Engine and Net Engine libraries made by DWANGO (which I think was called the IWANGO Lobby System) for their networking. It basically implements the lobby and session creation for the developer, which means all they really have to worry about is sending the data between clients. It also allows a game to run in either peer-to-peer or Client/Server mode (Daytona uses the former). Oh and the Lobby/Net engines also had a Windows CE version that was used for Rune Jade. They were stored in Windows DLLs and because DLLs must preserve the function name to allow for the main program to call them, I was able to get all the "public" function names (what Rune Jade could call) as well!

ioncannon has already begun some initial research into reverse engineering the online multiplayer modes for the Guru Guru Onsen series on the Dreamcast, and appears to have made some insights into Rune Jade too. If you ever meet him in person, be sure to buy him a beer.

Did anyone else help you out with Daytona or has it been a one-man endeavour?

The server itself was researched and written by me starting in September 2022. It got to a working state by February 2023; although I did have a three month hiatus due to real-life stuff. dude22072 is one of the people that previously helped me with Project Meteor (Final Fantasy XIV)  and is in a group of friends that do this digital archeology together. I'm also in a group chat with him, Eaudunord/SEGA_RPG_FAN, and Xiden. The group was originally for the KDDI server project (Eaudunord tried porting his XBAND serial tunneler for it), but later they also helped test the multiplayer component of Daytona. Shuouma recently joined to help with getting his UDP packet editor for DreamPi working with this game.

Which parts of the project have you enjoyed the most, and which have been the most challenging?

I always enjoy learning how a game works and watching the unknown source code take shape as, bit by bit, things get documented until it's pretty much 100% figured out. The biggest challenge has mainly been the red herrings that popped up due to Flycast, or the assumptions the game developers made with IPs which I had not thought of at the time.

Does the online mode for Daytona differ operationally from other Dreamcast games that have been brought back online?

Daytona is one of a bunch of games that used the Lobby Engine and Net Engine libraries. There are other Dreamcast games that should operate their lobbies in the same way as Daytona, but which make use of features I haven't had a chance to figure out yet. Here is the full list last time I counted:

When the new server is made publicly available, will people need to use a patched version of Daytona to play it online on their Dreamcast?

No, patching of the game will not be necessary. Because Dricas (the online service created by Sega for Dreamcast users in Japan) was not a thing in the US, Sega made a work around where your SegaNet username was saved in a key file. They also saved the IP address in this file, unlike the other Dricas games which have it hard coded in the game's binary. Finally there is no Dricas authentication to patch out because it's not used. In essence then, all that is needed to get the game pointed to an emulated server is a change to the key file. Fortunately I figured out the encryption for the key file and I have been able to do just that. I'll see if I can work with DreamPipe to automatically generate one based on your DreamPipe account from the Daytona webpage. Hopefully the process feels as similar to the original experience as possible. We'll probably add some kind of unique hash beside the username to prevent users from using other people's accounts (only the username was stored officially).

For those using a DreamPi to play their Dreamcast online, will they need to update the DreamPi version that they have installed?

Yes, you'll need to update your DreamPi. Due to assumptions made by the Sega/DWANGO team, Daytona doesn't work out of the box with the currently available version of DreamPi. This is because the game stores the IP address that is given to it by a PPP server (the DreamPi in this case) and assumes this is your WAN address. Well, these days, players are behind a router on a LAN network, and it's the cable/DSL modem that gets assigned the WAN address. This means incoming packets can't be cross referenced with internal saved data as the IPs differ. This is where Shuouma's UDP packet editor will come in and swap the PPP IP with your WAN IP on the fly. We actually tested the program and were able to pull off a single  Dreamcast to Dreamcast race before it broke down. It still needs work but should be implemented in a new DreamPi version in due course.

***

So there we have it, dear readers. Our respect and thanks go out to ioncannon and his associates for contributing so much to this project. Keep your eyes peeled for further updates, get practicing those rolling starts and ready yourself for some big fat stonking drifts. We'll see you on the track.

Ladies and gentlemen, start your engines.
If you're excited to play Daytona USA 2001 online on your Dreamcast again, let us know on our socials, or by leaving a comment below!

4 comments:

Pizza Hotline said...

It's cool to hear about the process behind getting these games back online. Looking forward to playing this bad boy. Huge props to ioncannon for the hard work and to Loz for the great article.

S.Madman said...

My Dreampie has been waiting for this moment since I bought. My Dreamcast has been waiting for decades.

Igor said...

Hell yes !

Wry Guy said...

This game is often unfairly derided by people who have relatively little knowledge of racing games. If you have trouble controlling your vehicle, choose soft tires. It's really that simple. The controls are not exactly like the arcade version, but they are very similar.