The Sword of Kumdor

“What's going on!? A spaceship came crashing down! Oh my stars, look at that hole!”

“The Sword of Kumdor” (クムドールの剣) is a touch-typing RPG for the NEC PC‑98, created by Michiaki Tsubaki in 1991. You play as the Milky Way's #1 typist, summoned to planet Kumdor to fight mysterious monsters by typing spells — but you lose all your keyboard keys and your QWERTY skills in a crash landing. Can you recover your talents and save the world??

The game has a surreal atmosphere, quirky dialogue, and a distinctive visual style. Japanese fansites call it “my favorite childhood RPG” and “an underrated masterpiece.” I think it deserves more recognition, so I translated the game to English.

Arriving on planet
          Kumdor. The player is in a crater created by their own crashed
          spaceship. A villager says: 'Look, there's someone in there. Are they
          alive? ...'

Kumdor has the strangest control scheme ever. Outside of combat and spell-casting, only the F, J, and Space keys are used, so as to keep even a novice typist's hands in the home row position at all times. F walks forward and Space turns you 90° clockwise. You get used to it, sorta.

The patch

Download the translation patch here.

The translation is released as an xDelta patch. To apply it, I suggest you use xdelta UI, but if you prefer using the command line, try:

xdelta -d -s "The Sword of Kumdor.hdm" kumdor-english.xdelta kumdor-english.hdm

To run the patched game in an emulator, load it into FDD Slot #1 and reboot. You will need BIOS files (specifically SOUND.ROM) placed in the emulator folder, or else the game crashes when you walk out of the tutorial.

On typing funny symbols

Your keyboard likely has fewer keys than the JIS keyboard used by the PC-98. As such, when playing in an emulator, you may have trouble typing ^ and _. In Neko Project II, you can use the on-screen keyboard, or create a text file next to np21w.exe called key.txt with the following contents:

TAB = ^
CTRL = SHIFT _

Now you can type these symbols by pressing Tab and Ctrl. In general, the layout of punctuation is different, so you may have to relearn some of the locations. (This might be a bit frustrating, but by the end, you will have actually mastered the PC-98 keyboard layout, which is the point of the game!)

Fighting a monster in Sword of Kumdor. Text on the screen reads, 'A monster appears! Eff is casting a spell. 9 points of damage to your opponent!' The player types back spells like 'dasafaa dasafaa' using the keyboard to defeat monsters.

Links

If you've never emulated PC-98 games before, PC-98 Emulation For Beginners is a great resource.

My playtesting was greatly assisted by rocky75's fan site, which contains a thorough tutorial in Japanese. If you're stuck, I suggest referring to it with the help of your favorite machine translation service.

I found this overworld map (spoiler!) floating around on the Internet.

You can browse the Mac version's manual: also in Japanese, but contains plenty of cute illustrations. (Kumdor was released as a book with the game floppies on the inside.)

Finally, there's my code repository, where all the translating and patch-writing and sprite-dumping happens.

Translation points

To make a delicious keyboard/fruit pun, I translated クムの木Kum tree as "keytree", so that クムの実Kum fruit could be "keylime". That makes クム酒Kum-shu "keywine".

The "whithervane" is called 風見ダヌキkazami-danuki (weather-seeing tanuki) in Japanese, which is a play on the actual word for a weather-vane, 風見鶏kazami-dori (weather-seeing chicken, like "weathercock").

I think the ダイビングdiving equipment shop that pivots into a タイピングtyping equipment shop is a visual kana pun.

Fivetown is called ヨゴンナYogonna in Japanese, which is goroawase for 4567, the keys found there.

Translating the spells was interesting: there's no way to do it without affecting the game balance. For example, to cast CURE, you need a different set of keyboard keys than for the original NAOSU. (Thankfully spells are just not very useful anyway! Shop items are easier to get and just as good.)

Kumdor came out two years after the highly successful release of Mother for the Famicom. There are some similar themes: an alien invader causes chaos on a modern low-fantasy planet, RPG tropes are subverted and riffed on, and all is resolved in a slightly psychedelic final encounter. I can't say for certain what inspired Tsubaki, but some of the "mundanely funny" dialogue in this game reminds me of Shigesato Itoi's style. I often kept the quirky, matter-of-factly voice of EarthBound's localization in the back of my mind when writing this translation.

How I made this

This translation is my first ever romhacking project. I had a lot of fun! I used np2debug, Ghidra, a hex editor, and Python. For translation, I relied on my own Japanese-reading and English-writing skills.

Patching text

Kumdor has a weird custom file system, so I had to treat the ROM as a unit rather than dumping files from it. Thankfully, the text is almost all consolidated in uncompressed sections of null-separated Shift-JIS data, so finding and dumping and reimporting it was super easy. Writing translations took about a month and a half. The game text is about 7,200 words in English.

Translating text strings.

"Touch typing" means...

This intro was difficult to translate. The handwritten text is stored as thousands of little line segment coordinates in a strange data layout. I reverse-engineered the format by corrupting the data in weird ways and seeing what happens. Then I programmed a tool for editing this format, and handwrote a translation with a tablet pen. (You can see the process here.)

Left: the untranslated tutorial. Right: my handwritten translation.

Removing copy protection

The popular dump of this game that floats around online triggers a copy protection check that freezes the game right before the final dungeon! I never really bothered to figure out what exactly it's checking. I used a debugger and Ghidra to find the instruction responsible for locking up the game, and disabled it.

Looking at disassembled source code in Ghidra.

An overly elaborate grammar fix

When picking up an item, the game joins two strings together with code somewhat like this:

pick_up_item:
  ...
  mov di, 0xc000            // Reset the message buffer
  mov cl, al                // Load the item ID
  call write_item_name      // Append its name to the buffer
  mov cl, 0x1b              // Index of "を拾った。"
  call write_common_string  // Append to the buffer
  ...

This builds a string like "呪文書を拾った。", which I can only translate part-by-part as "scroll was obtained.". The grammar is awkward, and as a full sentence, it's missing capitalization.

Dissatisfied, I got my hands dirty and wrote some assembly patches to print my own bits of text. I had to figure out a way to inject code of my own without moving any of the surrounding code, as that would dislocate a bunch of pointers.

pick_up_item:
  ...
  mov di, 0xc000            // Overwrite a 3-byte instruction here
  call you_got_a            // Call my cool new subroutine instead
  mov cl, al
  call write_item_name
  mov cl, 0x1b              // I've translated "を拾った。" as "."
  call write_common_string
  ...

// Far, far away, in a blank region of ROM:

you_got_a:
  mov di, 0xc000            // The instruction we overwrote
  push ax
  mov cl, 0x60              // Index of "You got a "  (my new string)
  call write_common_string  // Append to the buffer
  pop ax
  ret

All to get nice messages like "You got a scroll.". It was totally worth it.

Thanks

Bonus: Music

The game's soundtrack is a bit outré so I turned it off after an hour or so. I listened to suitably psychedelic electronic music instead and I can highly recommend this. For example:

Sorry, let me collapse somewhere out of your way.

Lynn