I’ve been very busy with life stuff but have been working on Cheat Device occasionally for a few months and am ready to share a new update!
A feature many people have asked for is now available: console-side cheat database editing! This took me a while due to how I was allocating memory in older versions but the code has been refactored to allow for editing without imposing large loading times. This was accomplished by using a fixed-size object pool and replacing linked lists with pointer arrays for the menu items. Now you can add, edit, and delete games, cheats, code lines, and boot paths within Cheat Device. I’ve also polished the graphics routines after discovering I wasn’t handling alpha values correctly. Lots of other changes have been made, such as replacing button references in the bundled cheat database with button graphics. Ex: “Press circle” is rendered as “Press O”, where O is a circle button graphic. The game list is alphabetically sorted too.
Note that the cheat database file isn’t being updated by Cheat Device yet, so any games/cheats/codes you add/edit won’t persist after powering off the console. This will be implemented in the next release.
I will release updated documentation in the next few weeks, which isn’t a lot of work but I need to find some time to work on it. Once things seem to be stable based on feedback and testing, the new release will bump Cheat Device to version 2.0!
I’ve updated cdb-util (formerly makecdb) to support extracting text cheats from CDB files. CDB (CheatDataBase) is the format used by Cheat Device for storing its cheat database (as the name implies 🙂 ). A few users requested a way to extract cheats from existing CDB files so I figured it would be a useful addition.
Some good progress has been made on the Initial D project. pactool seems more or less solid and has been able to extract and create PAC archives without issues. gim2png (really gimtool now) can convert GIM textures to PNG as well as inject a PNG back into a GIM. It’s much easier to inject a PNG rather than create the whole GIM structure from scratch since I don’t fully understand the format. When injecting a PNG, it will be palettized to fit either a 16 or 256 color RBGA palette depending on what type the target GIM uses.
Here’s what a modified texture will look like in game:
As for actually translating parts of the game, I’ve made some progress but it is very tedious. I don’t know any Japanese, but Google Translator has been surprisingly good at identifying characters I scribble in and spits out translations that (for the most part) seem accurate. I’d definitely like to sit down and learn parts of the language, but that’s a job for another day.
Initial D Special Stage is a port of the popular arcade game released by Sega. There are English releases of the arcade versions, but none of the home versions have ever been released outside of Asia. This is too bad, since Special Stage was a great port considering the hardware limitations of the PlayStation 2 (the arcade version’s hardware uses TWO video processors and has 8 times more video memory than a PS2!). Nevertheless, I’ve decided to start work on a translation patch for this game. Yes it’s a racing game and the text is probably not that important to read, but it can be challenging to navigate the menus that are entirely Japanese.
Last year I began work on a cheat device GUI for ps2rd (an excellent remote debugger for the PlayStation 2). The goal of the project is to create a menu-driven cheat device similar to CodeBreaker or Action Replay using ps2rd’s ASM cheat engine. I wanted this to be just a cheat device, so I removed most of the debugging functionality from ps2rd for my project.
I had some freetime over the past few days and made some updates to it. It’s now more stable than previous releases and has had more unneeded parts of ps2rd removed (such as videomod). BOOT2 selecting now works as it should, so you can boot to a ELF instead of directly to disk. I’ve also added preliminary support for compressed code lists using miniz. Basically, you use the included “compress-decompress.exe” program to compress/decompress your cheat files using zlib compression. When using a compressed cheat list, it must have a file extension of “.bin” or else it will try to load it as text. Update ps2rd.conf to reflect whichever cheat list you’re using. This should help cut down on loading times.
If you find any bugs, please let me know!
Fix delete option (currently does nothing)
Implement less-awkard cheat list compression (maybe use zip/7z files instead)
Over the past few weeks, I’ve taken a look at the way text is stored in the game Kingdom Hearts. Like other games made by Square, Kingdom Hearts uses a special character map for strings throughout the game. The US and PAL versions of the game use a character map consisting of Latin characters and common symbols. The Japanese releases use a different table containing Japanese characters as well as uppercase Latin letters (there are a few lower case ones though, but not a full alphabet). Most text is compressed using a LZSS-like algorithm, but I was able to poke around at some of the non-compressed areas. For example, the menu items on the pause screen are not compressed and can be modified if you know the correct characters to enter. So far I am able to change these items as long as my modification’s don’t overlap any neighboring strings.
I started with the original Japanese release of Kingdom Hearts and was able to do this by modifying the game’s ISO:
I created a tool that can convert plaintext to the character set used in the game. If you’re interested you can download it here. It requires .NET Framework 4.0 SP1 and currently cannot convert Japanese characters. A table created by Falo can be used to manually convert them by hand. I’ve tested it on these versions of the game:
Kingdom Hearts (SLUS-20370) USA
Kingdom Hearts (SLPM-66122) Japanese (Uses Shift-JIS encoding)
Kingdom Hearts Final Mix (SLPM-66123) Japanese (Uses Shift-JIS encoding)
I’m hoping someone will see this post and be motivated to continue work on a full translation patch some day for Final Mix. I don’t have the time to do it myself and it might be pointless to pursue it once Kingdom Hearts HD 1.5 is released in the US, since that contains the additions that were present in Final Mix. KH-Vids.net user Hidden Smithery has already offered help and was able to translate the following for the Japanese versions of the game:
Item: エーテル ETHER
Code: E3 55 F2 19 08 32 41 35 32 3F
Item:メガエーテル MEGA-ETHER (name is too long)
19 01 19 0E E3 55 F2 19 08 3A 32 34 2E 2C 32 41 35 32 3F
Code:19 27 55 EB 19 2F 19 0D 3D 3C 41 36 3C 3B 01 01
Code:19 01 19 0E 19 27 55 EB 19 2F 19 0D 3A 32 34 2E 2C 3D 3C 41 36 3C 3B 01
EC 19 0A 19 30 F3 40 39 3C 41 01 01
ソラ SORA (too long)
EE 19 06 40 3C 3F 2E
たたかう ATK (the word "ATTACK" is too long)
9F 9F 95 92 2E 41 38 01
まほう MGC (the word "MAGIC" is too long)
AE AD 92 3A 34 30