SuperSakura 0.96.1 Released
Just in time to play some old Japanese adventure games over the holidays, a new release of SuperSakura is ready. That's two and a half years of development since the previous release, which means this is the biggest changelog any SuperSakura release has yet had! Here's a rousing tour of the new stuff!
There are 8 new completable games, and 2 more that are at least somewhat playable, in addition to dozens of fixes and enhancements. Counting PC-98, DOS, and Windows versions separately, that's now a total of 23 completable distinct games, 11 games at least playable, and a whopping 257 games with at least some resource conversion possible.
There were 635 git commits between 0.94.4 and 0.96.1, and about 935 days between the releases. That's a pretty nice average of 0.679 commits per day, come rain or shine!
The most important new feature is the sound system. Games are no longer completely silent, as long as their music files are in a supported format! For now, music is provided through FluidSynth or the Windows midi mapper. Selecting the music device and possible sound font is currently done by editing supersakura.ini, but there will be a friendly graphical dialog for it later.
Another very notable change is the new commandline tool sakutool, which replaces the decomp and recomp tools. It is a new CLI frontend, while the converter backend remains the same, so all the same game resource conversion functionality is still there.
The reason for this change was that decomp and recomp are not very unique names. On Linuxes, installed programs traditionally put all their binaries in a system-wide shared directory, which means every binary must have a system-wide unique name; hence, sakutool. I hope there's no sakutool in another program distributed more widely...
As a bonus, sakutool takes less space, since static library overhead is no longer duplicated between two separate commandline tools.
Two more games from JAST/Tiare are playable: Tasogare no Kyoukai and Tenshitachi no Hohoemi. Tasogare has you investigate what looks like a rural village with a dark past. Hohoemi is the "10th commemorative episode" of the absolute classic Angels' Eve series, this time in the form of a tutoring/dating sim.
SuperSakura now has an easy command for quickly skipping all text until the next player choice: Ctrl-F (fast-forward). This very much comes in handy when trying to reach multiple endings of a game, and makes game logic testing much faster.
Font handling is now more robust. Previously, every textbox would instantiate its own font, even if the same font at the same size was used by multiple boxes. There is now a dedicated "fontmatic" manager that allows textboxes to safely share the same font handle.
A readable font is crucial for accessibility, and readability is highly subjective, so it is important that at least the main font used across the engine is freely user-selectable. To improve this, SuperSakura now internally enumerates all available fonts by fetching them from the Windows registry, or by calling fc-match on Linux. The user's preferred font name is then matched from the list, with wildcard matching. Of course, if matching by name is giving any trouble, a font file with full path can still be named directly.
Another JAST game is completable: Eden no Kaori. You are private detective Joe, called to an upper-class mansion of a family who politely pretend to get along just fine, only to end up with a murder mystery on your hands.
The clickable maps in Tasogare and Eden were made possible by an overhaul of SuperSakura's mouseoverable event system, making use of dynamic graphic objects. Previously, mouseoverable areas were defined by fractional screen coordinates in a rather rigid way. This is replaced by tying mouseoverability to graphic objects, which can be invisible, and benefit from all existing graphic object manipulation commands, so clickable things can be children of other objects, and can be moved or highlighted easily.
A third game featuring a clickable map is Nocturnal Illusion by Apricot, part of the Excellents family. In this one, you get stuck in a mysterious remote mansion with a bunch of traumatised young people. Fortunately, there turns out to be a surefire way to deal with trauma, hopefully leading to a happy ending for everyone.
Desire's May Club doesn't have a clickable map, but it does run on the same engine, Excellents' System98, and is also completable. It's a dating sim set in a realistic VR environment, which reflects on the weird stuff people could get up to in an imperfectly-controlled artificial environment.
Both of these games and others on the same engine make use of in-line emojis printed among other game text. I ended up drawing original emoticons to support this, similar to the original ones but higher-resolution. I hope to make more games with this engine playable later on, such as Lilith and the eminently pettable GaoGao series.
In addition to controlling VSync, the engine's target frame rate is now user-controllable by editing supersakura.ini. Again, a graphical interface for that will come later. Relatedly, screen transition effects could previously skip the first few hundred milliseconds of the transition when displaying an uncached graphic. This was because the transition timer started counting before the graphic was loaded from disk. Now the timer starts on the next frame after the graphic has been loaded, making all transitions smooth from start to finish regardless of disk speed.
Ma Doll by Fairy Dust is now completable. It's story might deserve a "psychological" tag, and I'm not sure how to best describe the human-doll duality it presents until I'm able to read the story in English.
Adding support to this game was tricky because of its graphic compression — the game uses diffusive dithering for speckled but richer color gradients, which is chaotic enough that it doesn't compress well with normal RLE or LZ techniques. So they decided to compress scanlines two at a time, with LZ repeats, contextual move-to-front transform for color selection, static Huffman encoding for repeat lengths, a different static Huffman for repeat sources, and a wonky palette to add insult to injury. I called this a cursed image format, and I wasn't kidding.
Aaru was a spin-off company from famed Himeya and C's Ware. This was toward the end of the PC-98 era, so they only made 3 PC-98 games, all of which are now completable in SuperSakura: Rose Blood, a bloody thriller; M Hard, a brief exploration of domination and submission; and Zest to Fantasy, a serious multi-path fantasy adventure with rather nice pixel art, whose structure to me feels almost like a Choose Your Own Adventure type thing rather than a traditional Japanese adventure or visual novel.
On the lighter end of the story scale, Silence's Jewel BEM Hunter Lime (episode 1) is now completable, although with some graphic bugs. It's an action comedy where a pair of shape-shifting aliens, Lime and Bass, try to find power gems that got scattered in Japan and are turning into monsters-of-the-week as we speak. SuperSakura supports both the original Japanese text, and the English translation that was released at the end of 2023. The whole Lime series has 12 episodes, and it shouldn't be too hard to support more of them in the near future.
Finally, beside adding support for converting something like 15 different graphic formats, I also drew up an official program and project icon for SuperSakura: a stylised sakura tree in the shape of the playing card suite clubs. I even got two physical pin badges printed with the icon which I can wear with pride!
This release was made possible not by my effort alone – several fellow enthusiasts generously shared testing and research support, without which this release would have been a lot less impressive. Therefore, a huge thanks indeed to MindrustUK, Alatalo, Reyaziel, and Alpharobo!
All right, that's a wrap for 0.96.1. But what comes next?
SuperSakura still lacks two items that are critical for feature-completeness: an FM software synthesizer, and automatic translation. I love FM music, and the PC-98's OPN chips represent the richest classic configuration of 4-op FM plus shaped square waves, so it's something I really want SuperSakura to do justice to. Unfortunately, that's a tall order, which is why I've been hesitant to get started. I have created a fully-functional sound tracker and a basic but working softsynth before, many years ago, so I know I can do it, but it'll still be a big bite to take.
And since I can't read Japanese very well, like most people, getting automatic translation working is key to making these games properly accessible. Yes, a proper translation by a skilled human is always preferable, but it's going to be literally decades before all of these games have translation patches, since translating a game takes a ton of effort, and fans with the correct language skills only have so much time and energy.
But even before those, I'm going to spend some time investigating the possibility of making an improved PNG image format. SuperSakura is very niche, and doesn't have that many users. On the other hand, PNGX could be useful for the wider computing public, so, I'll look into that first to maybe produce the most good for the greatest number of people.
And, even if not, I'm all about optimisation and efficiency, so I'll like it even if no one else will!