One of the early concerns we had with this project was modifying graphics shown on the VMU, which include logo animations and messages for save file operations. The image data for these graphics were not stored in any clear format, so we focused on the script instead. This week, I investigated how the game handles VMU screen update operations.
With assistance from
ateam, I determined that Sakura Wars 3 is one of the rare games that uses low-level LCD functions to update the VMU screen. This allows for the screen to be updated very quickly, up to 30 Hz to show fast logo animations and a live minimap in combat situations, but it also means that screen data is sent to the VMU 1 bit at a time, and that makes searching for stored VMU screen data very difficult. In order to locate such images as a single frame of the Sakura Wars 3 logo shown during the boot sequence, I searched through RAM dumps using CrystalTile 2 in 1bpp mode looking for a pattern that resembled a legible 48 x 32 image.
- 0010965.png (2.04 KiB) Viewed 56734 times
After confirming that the image is being written into a discrete location in RAM, I then saved a hex dump of that 1bpp image, which is 192 bytes in length rather than the expected 1,536 bytes that would be used by standard LCD screen functions. Searching the game's files for a match of that 192 bytes yielded no results, which made me believe that either the LCD image data was either encoded or stored in an archive. These logos are displayed as the game is booting, so I reasoned that it they must be located in the disc root. Finally I extracted SYSLIST.AFS and examined each file, and found a number of BIN files that turned out to be sequences of raw bitmaps, similar to SKFONT.CG. CrystalTile 2 reveals that the file tyt00.bin in SYSLIST.AFS contains the logo animation in question with all frames in sequence:
From here, I modified my Python script for
font tile conversion to
generate 1bpp LCD screen data sequences, and modified the last two frames of the logo to test the replacement. The last two frames are alternated rapidly to create a shimmering effect on the LCD screen.
This video shows a hardware test of this animation. With this, another concern of the translation project has been resolved earlier than expected.
While I was searching for the LCD animations, I also found what appears to be VMU executables, with plainly visible 1bpp graphic data that should be editable.