Welcome to the Shutokou Battle Online/首都高バトルONLINE Private server project.


Fans of the Toyko Xtreme Racer Series may not be aware that back in 2003-2005 Genki released a online PC version of the game. However this was only available to Japan. I had contacted Genki regarding the possibility of them licensing the game so that it can be hosted in the west. Unfortunately I received no response.

After getting no where with Genki I thought about hosting a private server for the game. Although unfortunately there were no packet logs for the game. This would make creating a private server extremely time consuming. This was enough to put me off of the project.

In 2016 I got back into playing my favourite games on the Sega Dreamcast. And this meant playing TXR1 and TXR2 (known as Tokyo Highway Challenge here in the UK). Which reminded me about the SBOL game for PC. Although now having 6 years experience reverse engineering 32bit PE EXE’s and writing code for private servers, I felt that the project wasn’t out of my grasp.

So I got to work reversing the packets that the client sent and expected back using IDA. Slowly working my way through the packets and global values and making some educated guesses on what the packets and values could be used for. After around 2 weeks I had a server that would accept a connection and take the player to the handle creation screen and then onto the initial car selection where I could send the list of initial cars.

This is when I realised that the game doesn’t have all of the cars I’d come to expect in a TXR game. One thing I noticed is that Honda was no where to be seen. Although it was around the time when Honda didn’t want to be associated with street racing so it does make sense. When sending the ID for the Honda DC2 the client would produce an error that it couldn’t load a model. The model had DC2 in its name. So I copied and renamed one of the other car model files and named it as the game expected for the DC2 model. Low and behold the car loaded with a name of ????? and make of ?????. However the models for the Hondas have just been changed to ????? so a simple fix and I could have them named correctly. Along with this the car spec actually matched that of the DC2 even its OEM enkei wheel model loaded. It would seem that all Genki did to remove Hondas from the game was to not provide the models and change all of the strings to ?????. I hoped to be able to utilize models from other TXR games to introduce Honda’s back into the game but this would had been much further down the road.

I packaged up a binary of a server that would accept any username/password and list all of the cars available in the game and shared it with the community. It would load the player into C1 and allow them to test the cars. However many features weren’t working. As I didn’t know what happened when a player logged in. Whether they were sent to the Garage, a menu or straight into the course. Being able to login with an existing account (this was a different packet structure to when setting up new accounts) and how the client populated the garage was also unknown. So I slowly lost interest/motivation and shelfed the project.

Now in 2018 I picked up the project yet again. I was thinking of making a series on youtube showing how to edit an EXE to with your own code, add widescreen support and translation. SBOL was the perfect candidate for this. It was hardcoded with a fixed resolution of 640×480 and was all in Japanese. When making these changes to the EXE I stumbled across the garage menu function. This lead me to the expected structure of the garage and active car (which is what was needed for existing accounts). So this sparked my interest again. I made the changes to my server code and success. I could access the garage and also login with an existing account. As it stood it was only static data the server was sending but meant I could now actually make a start on creating a server that users could register for and login and save their progress.

So a rewrite was needed. I didn’t want to have the game server have directly access to the database. I wanted a management server that game servers would connect to. These have now been written. The management server supports MySQL and SQLite (ideal for development environments) with the plan to add a HTTP management interface where the admin can see on goings in the games on all servers and perform GM tasks. The servers are written with scaling in mind. I’d want to be able to spin up another game server if the demand was needed.

I plan to host a private server for the game in the coming months and will try to keep the development blog updated.