Looking back over the development cycle for Crazy Taxi Fare Wars PSP there were several key areas that posed technical challenges not only to the performance of the game but even threatened our ability to finish the game over all. There were difficult hurdles with two cabs in multiplayer, framerate issues in all modes, having both CT and CT2 on the same UMD, streaming data off the UMD and using the default Sony game state for Ad Hoc.
Multiplayer – The first topic to mention is the multiplayer modes of the game and specifically the Head to Head mode. We took the original Dreamcast source code from Sega of Japan and used it as our basis for porting. From a design standpoint, multiplayer was the next logical step in the evolution of the franchise, but re-engineering the original code to support two independently controlled cabs in the same space, on the same map, at the same time, proved to be a difficult challenge.
The original source code layout for the collisions and physics of the cars was spread out into several areas, making the task even more technically challenging. Our engineers were perplexed by this layout and knew that it would take too long to try and completely track down all of the effects that a single change might make to either part of the code.
So overall it was decided that we would not attempt to change any part of this code, both to keep the original feel of the game as true as we could and also so we didn’t accidentally create bugs that we would then never be able to track down. This isn’t a complaint against SOJ’s Dreamcast code; it’s just a fact that the original code was never intended to support two players at the same time.
The first step to getting the second car working correctly was making both the cars aware of each other on the map. Next was making the AI cars correctly spawn and track to each user-controlled cab. We ran into many issues with memory and framerate problems here too, especially in CT2, where the player cars are all loaded individually, as compared to CT, where the four player cabs/characters are all loaded from the same file at the same time. One of the few limitations of porting Crazy Taxi to the PSP was having to compromise on the amount of AI traffic in multiplayer. In the single player game you’ll notice that there is much more AI car traffic around your cab compared to the head-to-head mode.
The PSP didn’t have enough memory to handle many more than five AI cars per player-controlled cab without severe framerate slowdowns. So if both players are within sight of each other on the map, then there should be approximately ten AI cars total in the world. These AI cars had to be made aware of their physical location in relationship not only to the cab that they were created to be around, but also the other cab and its AI cars as well.
UMD – Another area that proved to be challenging was the fact that we had two complete games on one UMD. In the original design for CTFW we technically had four complete games with the addition of the multiplayer code for both CT and CT2. We were going to have the multiplayer modes available from the main menu, but this quickly became a problem with load times because the entire multiplayer code is based off the single player code.
If we wanted to play a CT2 head-to-head game, we had to first load the CT2 single player game code. The reality of having a multiplayer button on the main menu was that the user had to wait for the single player game to load anyway, so it seemed like it was taking forever to launch a head-to-head game. We decided to have the single player game executables on the main menu and then add the multiplayer game options to the existing GUI for each version of CT.
Although we ended up not having a direct route to the multiplayer modes from the main menu, we actually slightly improved the load time of getting into a multiplayer game by keeping these modes in the game menus and off of the main menu.
Streaming data off the UMD also proved to be a difficult issue for us to nail down. We were on a compressed schedule to try and finish CTFW as quickly as possible. The lead times to request and obtain testable UMDs burned from SCEA were prohibitively long, so we didn’t get any UMDs made until very late in the development cycle.
The theoretical assumptions we made early on in the design of streaming the data weren’t tested until just before we were preparing to submit to SCEA for approval. What we found were long load times and decreased frame rate that we had to adjust for. You’ll notice that if you use the custom music player instead of the in-game music, the performance of the game improves a bit. This is due to the fact that the custom music player streams the data from the Memory Stick and not the UMD, thus the seek times for the rest of the game data improved.