Skip to main content

Fixing the Crash Bandicoot 2 Analog Misconfiguration

ยท 12 min read

The original Crash Bandicoot trilogy were some of my favourite PlayStation games, so when they released as digital PS1 Classics for the PlayStation 3 I - like many - jumped at the opportunity to own these games again.

The quality of PS1 emulation on PS3 is generally held in high regard, but there were some odd quirks. One of the most notable quirks was with the digital release of Crash Bandicoot 2, because it lacked analog controller support.

In this article we'll take a look into the issue, the impact that the misconfiguration has had on the perception of analog controller support in the game, and finally put right the issue which has plagued this release for almost 17 years.

Full Disclosure

While everything I demonstrate here is being done using Official Firmware with the original PS Store release of Crash Bandicoot 2, it is only possible to make these changes because I have obtained write access to my PS3s hard disk drive. As much as I would like to provide a solution that works for everyone, without this level of access it isn't possible to modify the file required to fix this issue. If you're interested in how disk access is possible then please read the rest of this blog.

But Crash Bandicoot 2 doesn't support analog controls!โ€‹

Believe it or not, the misconfiguration of analog controls in the PS Store release of Crash 2 has actually perpetuated considerable misinformation around the games support for analog controls.

Since the 2007 release of the game on the PS Store (in European regions), the question of did Crash 2 support analog controls has been debated in online forums with the PS Store release often cited as evidence that it did not.

Crash 2 was one of the earliest games to support the analog controller, and given this controller was an optional addon at that time there is a good chance that a majority of people originally played the game having only access to a digital controller. So the misconfiguration, along with peoples memories, led to a "perfect storm" of misinformation where people had effectively manifested the idea that early releases of the game lacked analog support and that the PS Store release must be using such a version.

A few references:

Interestingly, a misconfiguration of analog controls in the much more recently released Metal Gear Solid Master Collection resulted in a similar level of misinformation and recollection of "bad memories"; as people became vehemently insistent that the game never supported "true" analog input. In this case Konami did eventually fix the misconfiguration, and the original analog input was restored to the game.

So how do we know the PSN version does support analog controls?โ€‹

It's actually been possible to definitely confirm that this was a misconfiguration since the release of the PlayStation Vita. The Vita, technically speaking, had complete support for the digital PS1 classics which were available on the PS Store for PS3... although in practical terms it's support was artificially limited by suspected licensing complications.

In European regions at least, Crash 2 was one of the supported games that could be installed to the Vita. For those who aren't aware, you could install the PS1 classics from a PS3 directly onto the Vita. The game appeared as an "installation bubble" on a PS3, and you had options to either install the package to the PS3 or to a connected Vita. This meant that the Vita was in effect playing the exact same digital version of the game that the PS3 was.

What happened when you played the game on the Vita? Full analog support was available. Why was this? Because the Vita was using it's own PS1 emulator, which was not constrained by any configuration within the installation package intended for the PS3 emulator.

note

It may have even been possible to confirm this using versions of the PlayStation Portable that had Bluetooth support (and therefore DualShock 3 support). Like the Vita, the PSP shared the same installation packages as the PS3 versions of the game, and was not constrained by PS3 emulator configuration. But I haven't tested this to confirm, unlike with the Vita.

Restoring analog support to the PS Store versionโ€‹

As a refresher for how PS1 emulation worked on the PS3, when running a game you could press the PlayStation button to access some emulation settings - including controller settings.

These controller settings allowed you to toggle the emulated controller between digital and analog.

However in the Crash 2 release, whenever you set the controller to analog the emulator would silently swap this back to digital when you exited the menu... meaning it was impossible to set the controller into analog mode.

Analog controller mode is silently swapped back to digital mode

Compare this to how original PS1 disc emulation worked. If you played any PS1 disc and changed this setting, you could set it to any value you wanted... even if the game didn't support analog it would allow you to configure the controller as such (the result of that being, somewhat obviously, that input in the game wouldn't work until you reset the controller back to digital).

So this behaviour suggests that something in the PS Store release of the game is telling the emulator that it shouldn't allow the user to switch to an analog controller. Having these kind of limitations make sense in principal, as it may stop the user accidentally changing to an unsupported controller type and be left wondering why nothing is working. They make sense when you configure them correctly, anyway. ๐Ÿ˜œ

Finding the (mis)configurationโ€‹

There are very few files contained within a PS1 classic installation, so it didn't take long to track down where this configuration was likely coming from.

PARAM.SFOโ€‹

The PARAM.SFO file seems to be something that all PS3 software includes. It sets parameters and configuration for how the system should use the particular title.

There is a considerable amount of documentation on the files format available on the PS3 Developer Wiki.

The file included with Crash 2 contains an attribute ANALOG_MODE, which would seem to be a suspiciously likely candidate for where the configuration is being set.

With my PS3 hard disk drive mounted on a FreeBSD system, I could inspect and alter the file.

hexdump -C /cell_mw_cfs/game/NPEE00008/PARAM.SFO
00000000  00 50 53 46 01 01 00 00  c4 00 00 00 3c 01 00 00  |.PSF........<...|
00000010 0b 00 00 00 00 00 04 04 04 00 00 00 04 00 00 00 |................|
00000020 00 00 00 00 0c 00 04 04 04 00 00 00 04 00 00 00 |................|
00000030 04 00 00 00 16 00 04 04 04 00 00 00 04 00 00 00 |................|
00000040 08 00 00 00 1f 00 04 02 03 00 00 00 04 00 00 00 |................|
00000050 0c 00 00 00 28 00 04 04 04 00 00 00 04 00 00 00 |....(...........|
00000060 10 00 00 00 37 00 04 02 08 00 00 00 08 00 00 00 |....7...........|
00000070 14 00 00 00 46 00 04 04 04 00 00 00 04 00 00 00 |....F...........|
00000080 1c 00 00 00 51 00 04 04 04 00 00 00 04 00 00 00 |....Q...........|
00000090 20 00 00 00 5e 00 04 02 15 00 00 00 80 00 00 00 | ...^...........|
000000a0 24 00 00 00 64 00 04 02 0a 00 00 00 10 00 00 00 |$...d...........|
000000b0 a4 00 00 00 6d 00 04 02 06 00 00 00 08 00 00 00 |....m...........|
000000c0 b4 00 00 00 41 4e 41 4c 4f 47 5f 4d 4f 44 45 00 |....ANALOG_MODE.|
000000d0 41 54 54 52 49 42 55 54 45 00 42 4f 4f 54 41 42 |ATTRIBUTE.BOOTAB|
000000e0 4c 45 00 43 41 54 45 47 4f 52 59 00 50 41 52 45 |LE.CATEGORY.PARE|
000000f0 4e 54 41 4c 5f 4c 45 56 45 4c 00 50 53 33 5f 53 |NTAL_LEVEL.PS3_S|
00000100 59 53 54 45 4d 5f 56 45 52 00 52 45 53 4f 4c 55 |YSTEM_VER.RESOLU|
00000110 54 49 4f 4e 00 53 4f 55 4e 44 5f 46 4f 52 4d 41 |TION.SOUND_FORMA|
00000120 54 00 54 49 54 4c 45 00 54 49 54 4c 45 5f 49 44 |T.TITLE.TITLE_ID|
00000130 00 56 45 52 53 49 4f 4e 00 00 00 00 00 00 00 00 |.VERSION........|
00000140 02 00 00 00 01 00 00 00 31 50 00 00 02 00 00 00 |........1P......|
00000150 30 31 2e 38 32 30 30 00 02 00 00 00 01 00 00 00 |01.8200.........|
00000160 43 72 61 73 68 20 42 61 6e 64 69 63 6f 6f 74 e2 |Crash Bandicoot.|
00000170 84 a2 20 32 00 00 00 00 00 00 00 00 00 00 00 00 |.. 2............|
00000180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000001e0 53 43 45 53 30 30 39 36 37 00 00 00 00 00 00 00 |SCES00967.......|
000001f0 30 31 2e 30 30 00 00 00 |01.00...|
000001f8

I compared the file between a few different PS1 classics that I owned, and the structure appeared to be consistent between them.

So using the above wiki reference, and my PS1 classics which I knew supported analog controls, I was able to determine that the ANALOG_MODE parameter value was stored at this location in the file:

dd if=/cell_mw_cfs/game/NPEE00008/PARAM.SFO bs=1 skip=316 count=4 | hexdump -C
00000000  00 00 00 00                                       |....|
00000004

A value of 00 00 00 00 confirms that ANALOG_MODE is disabled in the games configuration, so in theory we need to change this to 01 00 00 00 to enable it.

Set ANALOG_MODE to 01 00 00 00โ€‹

printf '\01' | dd of=/cell_mw_cfs/game/NPEE00008/PARAM.SFO bs=1 seek=316 count=1 conv=notrunc
1+0 records in
1+0 records out
1 bytes transferred in 0.000957 secs (1045 bytes/sec)

Verify ANALOG_MODE has been set to 01 00 00 00โ€‹

dd if=/cell_mw_cfs/game/NPEE00008/PARAM.SFO bs=1 skip=316 count=4 | hexdump -C
00000000  01 00 00 00                                       |....|
00000004

This is looking good. Could it be this simple? Well almost...

Loading the updated PARAM.SFOโ€‹

Here's an interesting quirk. When the PS3 installs software it apparently caches information from the PARAM.SFO file into a database file related to the main XMB; so modifying the file at rest - as I have done here - doesn't actually immediately change anything.

According to the PS3 Developer Wiki launching the game should cause the PS3 to update its cached version of the file, however in this instance it didn't seem to be working.

The guaranteed method to force the system to refresh its cached version of the file is to use the Rebuild Database option, but I really didn't want to do this as the process comes with some data loss (for example PSN messages are erased).

However another quirk of the PS3 OS is that it lets you install software that is already installed, so I thought I would try this on the off chance it might cause the system to refresh its cache of the file.

So I have Crash 2 installed on my system (which contains the modified PARAM.SFO file), and I also have Crash 2 available as an "installation bubble".

Crash Bandicoot 2 in installation bubble form

I installed the game again, using the "bubble", without uninstalling the existing version that contained my modified PARAM.SFO file. My expectation was that this process would simply overwrite the currently installed files with the original files from the installation package, but that doesn't seem to have happened. Instead the game has retained my modified PARAM.SFO file, and the process of doing the install has forced the system to update the cached version of the file.

Now the system is using my modified PARAM.SFO configuration!

After 17 years... Analog controls restored!โ€‹

With the configuration reloaded, the only thing left to do was to start up the game and test if it worked.

It has! The emulator no longer silently sets the controller back to digital mode and full analog input is available.

Analog controller mode is no longer silently swapped back to digital

After almost 17 years, I can finally play my digital version of Crash Bandicoot 2 on the PS3 with its analog controller support.

Analog input is restored!

The lack of analog support in the PS Store version of Crash Bandicoot 2 has always been an emulator misconfiguration in the release, and it was never a special "analogless" version of the game. It's just a shame that Sony were never able to correct it.

Hopefully you've found this investigation interesting, and now we can finally put to bed the notion that there were versions of Crash Bandicoot 2 that lacked analog support.

Video Demonstrationโ€‹

Additional Notesโ€‹

  • This was done using a PS3 Slim model CECH-2503A, running firmware 4.91 (the latest official firmware at the time of writing). My PS3 hard disk drive was connected to a Linux Mint system, decrypted using PS3 HDD Decryption Helper, and then the decrypted partition passed through to a powerpc64 FreeBSD VM where the filesystem can be written to.
  • It uses the English European PAL version of the game available from the PS Store (Title Id NPEE00008).
  • As noted above, this method to fix the game is only possible because I have write access to my PS3s hard disk drive. You can read more about how that level of access was obtained, using Linux and FreeBSD, here in this blog. TL;DR I installed Custom Firmware to extract the eid_root_key that my console uses to encrypt the disk drive, and then reinstalled Official Firmware.