Music replacement on Crazy Taxi XBLA

2011-01-08 01:01

The Crazy Taxi re-release on Playstation Network and Xbox Live Arcade is pretty faithful to the arcade and Dreamcast versions, but it’s missing the original soundtrack! That may seem a petty complaint, but I’m not the only one who misses the atmosphere of Bad Religion and Offspring:

But one very important ingredient is missing that kills the nostalgia – which is really the only reason to spend any money on this outdated download. SEGA didn’t have any problems overcharging for this remake, but it didn’t want to spend any money to re-up the licensing agreement for the soundtrack. (IGN)

It was hard to play the Xbox Live Arcade version without hearing the Offspring’s familiar “Yeah yeah yeah yeah!” blasting out of the speakers. The Offspring, along with Bad Religion, provided the game’s soundtrack in the original release. These songs, along with the sound of that announcer, went a long way toward creating the game’s mood. In the new version, they have been replaced by completely forgettable pop-punk tracks, and it’s a downgrade. (Ars)

Luckily for us, we can swap the music back to something more interesting with only a few tools:

Use existing music files

I wanted some songs from Crazy Taxi 1 and 2. Dreamcast owners may have trouble getting files off GD-ROM unless you have a Dreamcast serial cable or make an SD dump:

My holding Crazy Taxi and Crazy Taxi 2 for Dresmcast.

…or you could just download a copy!

No matter how you obtain it, SONG01.AFS on the Crazy Taxi disc contains the tracks we’re after. Split it into individual music tracks with afs_extract:

./afs_extract SONG01.AFS
  1. SONG01.AFS - 9
  2. SONG01_00.adx 00080000 0004f000
  3. SONG01_01.adx 000cf000 001ceeee
  4. SONG01_02.adx 0029e000 000fea42
  5. SONG01_03.adx 0039d000 00313db2
  6. SONG01_04.adx 006b1000 004a8e1e
  7. SONG01_05.adx 00b5a000 006577e6
  8. SONG01_06.adx 011b1800 00647742
  9. SONG01_07.adx 017f9000 004f57f2
  10. SONG01_08.adx 01cee800 000ff800

The resulting files are:

Filename Identity
SONG01_00.adx Menu loop
SONG01_01.adx Menu Loop long
SONG01_02.adx Hear It intro (Driver select)
SONG01_03.adx Bad Religion - Inner Logic (Credits)
SONG01_04.adx Bad Religion - Ten in 2010
SONG01_05.adx Bad Religion - Them and Us
SONG01_06.adx The Offspring - Way Down the Line
SONG01_07.adx The Offspring - All I Want
SONG01_08.adx Driver select again

Crazy Taxi 2 also has a SONG01.AFS, but it only contains the menu loop and driver select loop. The rest of the songs are individual ADX files on-disc:

Filename Identity
SONG01_00.adx Menu loop
SONG01_01.adx Methods of Mayhem - Who The Hell Cares (Driver select)
SONG3.adx The Offspring - No Brakes
SONG4.adx The Offspring - Walla Walla
SONG05_01.adx The Offspring - Come Out Swinging Intro
SONG05_02.adx The Offspring - Come Out Swinging
SONG6.adx The Offspring - One Fine Day
SONG7.adx Methods of Mayhem - Crash
SONG7US.adx Methods of Mayhem - Crash (A cappella)

Creating new music files

Wav2adx and adxencd can create ADX files out of standard PCM wav audio. Wav2adx choked on the wav files created by flac -d, but adxencd works fine in WINE:

for i in *.flac; do flac -d “$i”;done for i in *.wav; do wine /home/nicole/Desktop/adxencd.exe “$i”;done

for i in *.flac; do flac -d "$i";done && for i in *.wav; do wine /home/nicole/Desktop/adxencd.exe "$i";done
  1. |||||||||||| ADX Audio decompression tool Ver.4.70 ||||||||||
  2. Software Audio Encoder for "CRI ADX for Dreamcast" 1999-11-30
  3. Copyright(c) 1996-1999 CRI
  4. Input sound data file: '02 - Nitro (Youth Energy).wav'
  5. ADX Compressed data file : '02 - Nitro (Youth Energy).adx'
  6. Sampling frequency : 44100 Hz = Input sound data
  7. No. of channels : 2
  8. Input audio sample : 6480936 smpl = 146.0 sec <44100 Hz>
  9. ADX output sample : 6480936 smpl(Blk:6480960 smpl) = 146.0 sec <44100 Hz>
  10. ....................
  11. |||||||||||| ADX Audio decompression tool Ver.4.70 ||||||||||
  12. Software Audio Encoder for "CRI ADX for Dreamcast" 1999-11-30
  13. Copyright(c) 1996-1999 CRI
  14. Input sound data file: '05 - Give You Nothing.wav'
  15. ADX Compressed data file : '05 - Give You Nothing.adx'
  16. Sampling frequency : 44100 Hz = Input sound data
  17. No. of channels : 2
  18. Input audio sample : 5390784 smpl = 122.0 sec <44100 Hz>
  19. ADX output sample : 5390784 smpl(Blk:5390784 smpl) = 122.0 sec <44100 Hz>
  20. ....................
  21. |||||||||||| ADX Audio decompression tool Ver.4.70 ||||||||||
  22. Software Audio Encoder for "CRI ADX for Dreamcast" 1999-11-30
  23. Copyright(c) 1996-1999 CRI
  24. Input sound data file: '06 - Something to Believe In.wav'
  25. ADX Compressed data file : '06 - Something to Believe In.adx'
  26. Sampling frequency : 44100 Hz = Input sound data
  27. No. of channels : 2
  28. Input audio sample : 8714160 smpl = 197.0 sec <44100 Hz>
  29. ADX output sample : 8714160 smpl(Blk:8714176 smpl) = 197.0 sec <44100 Hz>
  30. ....................
  31. |||||||||||| ADX Audio decompression tool Ver.4.70 ||||||||||
  32. Software Audio Encoder for "CRI ADX for Dreamcast" 1999-11-30
  33. Copyright(c) 1996-1999 CRI
  34. Input sound data file: '09 - Suffer.wav'
  35. ADX Compressed data file : '09 - Suffer.adx'
  36. Sampling frequency : 44100 Hz = Input sound data
  37. No. of channels : 2
  38. Input audio sample : 4743984 smpl = 107.0 sec <44100 Hz>
  39. ADX output sample : 4743984 smpl(Blk:4744000 smpl) = 107.0 sec <44100 Hz>
  40. ....................
  41. |||||||||||| ADX Audio decompression tool Ver.4.70 ||||||||||
  42. Software Audio Encoder for "CRI ADX for Dreamcast" 1999-11-30
  43. Copyright(c) 1996-1999 CRI
  44. Input sound data file: '12 - So Alone.wav'
  45. ADX Compressed data file : '12 - So Alone.adx'
  46. Sampling frequency : 44100 Hz = Input sound data
  47. No. of channels : 2
  48. Input audio sample : 3407460 smpl = 77.0 sec <44100 Hz>
  49. ADX output sample : 3407460 smpl(Blk:3407488 smpl) = 77.0 sec <44100 Hz>
  50. ....................
  51. |||
  52. ||||||||| ADX Audio decompression tool Ver.4.70 ||||||||||
  53. Software Audio Encoder for "CRI ADX for Dreamcast" 1999-11-30
  54. Copyright(c) 1996-1999 CRI
  55. Input sound data file: '13 - Do What You Want.wav'
  56. ADX Compressed data file : '13 - Do What You Want.adx'
  57. Sampling frequency : 44100 Hz = Input sound data
  58. No. of channels : 2
  59. Input audio sample : 2960580 smpl = 67.0 sec <44100 Hz>
  60. ADX output sample : 2960580 smpl(Blk:2960608 smpl) = 67.0 sec <44100 Hz>
  61. ....................

Replacing the files

Use wxPirs (runs in Mono!) to extract the Crazy Taxi package, demo or paid. The package is Content/0000000000000000/58410A34/000D0000/8CCAFCF0BCA37A5854932556831B08F3542CC94358 on the Xbox hard drive.

wxPirs browsing the contents of the Crazy Taxi XBLA package in Mono on FreeBSD.

After that, it’s just a matter of copying the replacement files to SoundData/music_adx with the filename of an existing track.

  1. cd SoundData/music_adx
  2. cp '/home/nicole/Desktop/CT1/SONG01_00.adx' name_loop.adx
  3. cp '/home/nicole/Desktop/CT1/SONG01_04.adx' Escape_Artist.adx
  4. cp '/home/nicole/Desktop/CT1/SONG01_05.adx' Flinch.adx
  5. cp '/home/nicole/Desktop/CT1/SONG01_06.adx' Get_Out.adx
  6. cp '/home/nicole/Desktop/CT1/SONG01_07.adx' Jump_Bink.adx
  7. cp '/home/nicole/Desktop/CT2/SONG3.ADX' Orange_Wednesday.adx
  8. cp '/home/nicole/Desktop/CT2/SONG4.ADX' Radiator.adx
  9. cp '/home/nicole/Desktop/Convert/02 - Nitro (Youth Energy).adx' Radical_Sabbatical.adx
  10. cp '/home/nicole/Desktop/Convert/05 - Give You Nothing.adx' Ragdoll.adx
  11. cp '/home/nicole/Desktop/Convert/06 - Something to Believe In.adx' Spy_Chaser.adx
  12. cp '/home/nicole/Desktop/Convert/09 - Suffer.adx' Taking_It_Back.adx
  13. cp '/home/nicole/Desktop/Convert/12 - So Alone.adx' The_Chase.adx
  14. cp '/home/nicole/Desktop/Convert/13 - Do What You Want.adx' Your_Mouth_Is_A_Guillotine.adx

name_loop.adx is played during the main menu and mode select, and The_Chase.adx in played during driver select in addition to in-game.

Finish up

You can use Le Fluffie, the free alternative to XLAST from the XDK, to make a replacement LIVE package of your modified game. Or, you can just execute default.xex:

YEAH YEAH YEAH YEAH YEAH!