Bulk Slash English Localization Dev Blog #2: One character at a time

Hello! I hope you’re still enjoying the Bulk Slash English localization patch and have had a chance to unlock and level up some of your favorite navigators. Let us know which navs are your faves! Meanwhile, it’s time for another inside look at how we made this thing.

In the last blog, I explained the team’s rationale for ruling out the possibility of implementing in-game subtitles. I prefaced that rationale with the disclaimer that none of the members of the project’s core team were software developers. What I didn’t know was that Shiro insiders and prolific Sega homebrew developers Knight0fDragon and Derek (aka “ateam”) had spent days independently investigating if a subtitle hack was feasible, and had ruled it out conclusively. 

It’s nice to have this additional peace of mind about our decision, but I do think it’s an important aspect of this patch’s story that it was mostly created by beginners with no substantive technical background. Danthrax and Mampfus had both contributed to a few previous fan translation projects (Dan: Cotton 2, Rainbow Cotton, Sakura Wars Columns 2; Mampfus: Assault Suit Leynos 2 (work in progress)), but I was brand new to the scene and effectively had zero relevant know-how, apart from my Japanese language ability and familiarity with Bulk Slash itself. Knight0fDragon did provide vital development work and advice throughout this project, but we tried to do as much as we could without leaning on him since he was already juggling several other projects. 

That said, it’s only thanks to Knight and other Shiro insiders that this project ever got off the ground. My earliest conversations in the Shiro Discord were with Knight0fDragon, Derek, TrekkiesUnite118, and Malenko teaching me the most basic of basics of computing. To paraphrase one early interaction:

K0D: Do you understand what a binary file is?

Me: No 

K0D: All files are binary files

Me: Okay slow down
Knight explained to me the concept of text encoding, and the need to use a hex editor to examine and manipulate the game’s Shift-JIS-encoded Japanese text in its binary form. For Bulk Slash, we used a hex editor called HxD. Knight also linked me to a table that showed the corresponding hex codes for every character in Shift-JIS.

▲”Rikai” is Japanese for “comprehension.” Even kanji tables were mocking me.

To even make sense of this table, I had to learn about hexadecimal, a base 16 number system used to represent binary data. Knight assured me I would have learned this in Algebra 1 in middle school. That may have been true, but I took Algebra 1 the same year Bulk Slash came out, and unlike Bulk Slash, it hadn’t come up since. 
The above information was enough to get me started. I found the Stage 1 briefing text in my Bulk Slash disc image’s hex data by searching for the hex code for the first few characters of Japanese text.

The Japanese mission briefing for Stage 1. The first word here is クーデター (coup d’etat), which is Japanese for French. What where am i
I searched for ク on the Shift-JIS table and determined the correct hex code.
The hex for ー. There are actually several different versions of this character in Shift-JIS, so finding the right one was a bit of a headache.
▲Searching for the first couple characters’ worth of hex in the Bulk Slash game data was enough to locate the Stage 1 briefing.

I then changed the first four digits, which represented the first character of the briefing text, to “8260,” the hex code for a capital “A” in Shift-JIS. Voila!

Magic. I can only imagine how silly this all sounds to anyone with even a moderate familiarity with how computers work, but for this liberal arts kid, the first experience altering the content of a video game was profound. After a full weekend of tinkering, I produced this:

and then this:

It quickly became apparent we’d need to do something about the character width. We’ll cover the ins and outs of Danthrax’s tilesetting travails in a separate blog post, but for now, suffice it to say “doing something about the character width” was hard.

Now about that VO…
It was mere hours after this initial text swap success that Danthrax and Mampfus first reached out about helping with the project. They both quickly surpassed my level of competency in manipulating hex, and we began experimenting with the game’s VO files. Knight0fDragon helped us determine which files in the game data held the VO audio, as well as how the audio was formatted.

▲Each “VCP#” file is a set of soundbites for each navigator. For example, VCP0 contains Leone Rhodes’ lines. “VCDM” contains additional soundbites for all navigators.

Initially, extracting each individual soundbite was a tedious process of sifting through large swathes of hex data, and copy-pasting blocks of it into separate binary files for each line of VO. Each navigator had about seventy-five lines of VO, which took three to four hours to extract. Knight0fDragon suggested we learn how to code ourselves a tool to automate the process, or find a generous friend who knew how. I didn’t think learning to code from scratch would be more efficient than our current pace, so Mampfus and I went back and forth on Discord for a long time, trying to hone the process as best we could. 

Finally, Knight put us out of our misery.

Within a week or so, Mampfus produced this proof of concept.

I also made one, just to prove to myself that I could. It took me considerably longer.

This video also proved we would need someone better than me to voice Leone Rhodes. It was time to start auditioning actors. Each of us put out feelers within our respective social networks. Mampfus spoke with a curious work colleague named Saskia, I reached out to my close friend and seasoned stage actress Diana, and Danthrax learned of an English actress called Dark Mysty, who was referred by one of the copy editors from the Sakura Wars Columns 2 translation project, Burntends. 

More on our auditioning and recording process to come in a future Shiro blog!

Be the first to comment

Leave a comment

Your email address will not be published.


*