When a game’s developer writes code, they usually* do it in a reasonably high-level language like C++. They have access to all sorts of nice things like variable names, function labels, comments, and so forth. When it comes time to run the code, it is compiled through something like Borland Turbo C++, and it is translated into assembly language (ASM) for the target platform, in this case the PC-98’s x86 processor. The compilation process strips away all of the useful names of things, determines exactly how all of the data needs to move between registers and memory, and does what it can to optimize the program. This much more difficult-to-understand code is what remains in the final .EXE that ships on the game disk. Since we don’t have the source code, we need to look to the ASM in order to understand and modify the game.
I had a lot of unsuccessful interactions with assembly language, across several projects, before I was finally able to successfully modify it, which I needed to for Rusty.
While we were finishing up the E.V.O. translation, we weren’t sure whether we wanted to work on more translations together. Our group didn’t even have a name yet. But we were starting to test the waters a little bit. Kuoushi was looking at Libros de Chilam Balam, and I was hearing about some other games in the PC-98 Discord server. I came across a tweet from another PC-98 romhacker, Nana, who had this to say about Rusty:
Rusty is the primary reason this little collage got out two days later than I had intended, haha. Game's code is a nightmare.
I had at least heard of the game before from its HG101 article, and for some reason I wanted a challenge.
Rusty was kind of a weird project in retrospect – it’s in a genre we usually ignore (hard action platformer), it looks an awful lot like it’d be a hentai game (which we just claimed we wouldn’t work on), and it doesn’t even have that much text. But it was where I started to develop some proper romhacking skills, like assembly modification and handling data compression
Last time, we looked at a problem that turned out to be far easier for hacking a PC game than a console one. Today, we’re looking at a problem that is really only an issue for PC games.
These older game consoles tend to have specialized graphical hardware that works in terms of sprites and tiles, so their graphics are stored in a similar way from game to game. The PC-98 is a business computer that’s really good at displaying high-resolution text, but graphics-wise, programmers had to roll their own solutions for everything. As a result, pretty much every developer created and used their own proprietary format for storing graphics. E.V.O.’s developer, Almanic, used a format called .GDT.
Hi! This is hollowaytape, the hacker/developer for 46 OkuMen. Today marks three years since we formed this group. We’re hard at work on some non-technical parts of our current and future projects, so I thought I would take this chance to write a little series about my prouder moments from our first handful of translation hacks.
First, I will describe the process of random flailing, blind luck, and help from others that led to the key breakthroughs of our first few projects. Then, I’ll step through a few of the more impressive technical things I could accomplish once I had a firmer grounding in x86 assembly. Finally, I’ll talk about some of the absurd technical hurdles I’ve found in games we haven’t picked up as projects, which I haven’t been able to solve.
They aren’t tutorials or rigorous technical documents. Instead, I’m hoping just to give you a taste of what PC-98 romhacking is like, give some advice if you’re tackling a similar problem, and share some amusing and dumb things I thought along the way.
Things have been quiet around here, but I assure you we’re still at it.
Appareden‘s translation draft is currently sitting at 79%, and all of that has been reinserted into the game. The worst of the bugs and crashes have been fixed, and the main assembly hacks have all been implemented, seemingly without breaking anything else.
We’ve begun work on translating and editing the images, too, after a painstaking process of ripping and unscrambling them all.
With that much of the game reinserted, we’ve been able to start an actual playthrough. Now the non-Japanese-speaking members of the team can see what the game is actually like! hollowaytape estimates he’s about 1/3 of the way through the game at this point. Here are a few things he’s seen along the way:
This actually happened yesterday, but between focus on real life and working on Appareden, we didn’t get this post out on the exact anniversary date. We’ll hit that date next year with something cool maybe. Or just another one of these posts, which should also totally count as something cool. Also, we didn’t post a one year anniversary post because we hadn’t exactly released any translation patches yet. Hell, we didn’t even have a group name until a month after that, and a website a month after that. That should give you an idea about how young the group really is.
In any case, let’s get to the meat of today’s post!
So it’s been over 2 weeks since we released our English translation patch for CRW Metal Jacket, and let me tell you, the response has been well beyond what we were expecting. As the project page states, we were expecting the game to be a “weekend project” (which turned into about a month of real work after Rusty was completed) and just something that we did to kind of improve our general abilities with games on the PC-98 platform. The game itself is relatively obscure, not too long, and has a lot of little bugs and other things that feel unfinished or cut out. That doesn’t detract too much from it being a fun game with some solid gameplay, but it forced us to kind of moderate our expectations with how it’d be received when we released the translation patch.
Before we get too much into the response to CRW Metal Jacket, we thought it’d be fun and slightly topical to mention that Pachy98 has just been used to release an updated patch for Die Bahnwelt, a game developed by Glodia and released on Sharp x68000 computers! It’s a really great looking top-down action game set in a pretty neat science fiction world. Also, you’ll notice that I said Glodia developed the game, which is why I called this a sort of topical announcement as we just recently announced we were going to begin work on translating Different Realm: The Eternal Sage, also developed by Glodia. This is the first patch to use Pachy98 that wasn’t released by us here at 46 OkuMen, so it’s a neat thing for us to see. Find out more about it over at RadicalR and Non-Directional Translations’ site!
For those of you who follow our group with any amount of frequency, this particular announcement will feel like it was a long time coming. When we started to explore our options for other games to work on when we were nearing the end of work on our first project, E.V.O.: The Theory of Evolution, we came across a developer whose projects all seemed consistently well-made and well-received in Japan, but only one of their games (Emerald Dragon) had ever been ported to consoles and seen any kind of release outside of Japanese PC systems. So despite their obvious enthusiasm and love for their work, none of their games received any kind of attention from Western audiences aside from the aforementioned Emerald Dragon for the SNES receiving a fan translation in 2014.
If you haven’t figured it out by now, that company’s name is Glodia. One of their games in particular caught our eye as a super interesting RPG with a huge amount of lore surrounding the world itself, and we’re here to officially announce that we’re working on bringing that game to Western audiences with a proper English translation.
So if you downloaded our recent release of CRW Metal Jacket, you’ll notice that the patching process is a little different from what you may be used to. It doesn’t even resemble the patching process we ended up making for E.V.O.: The Theory of Evolution or Rusty either. Well, that’s because we decided to strip it down and make it as lean as possible to pass the savings onto you. But mostly just to make it compatible with as many computers as we could. The other thing we did was make the executable itself generic and take a configuration file as an input so that we wouldn’t have to build a new patcher for every single release.
Since this tool is helping us with our releases, we figured it might help others interested in the PC-98 to release their patches as well, so we cleaned it up and slapped a name on it, written some documentation for it, and now it’s available for you guys as an early beta version.
Happy Canada 150 to all those Canadians out there. What better way to spend the 150th anniversary of a nice friendly mom and pop country than killing insurgents and terrorists in future Japan? Our translation patch for CRW Metal Jacket is now available!