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. 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!)
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. "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.) 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. 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 mov cl, al call write_item_name mov cl, 0x1b call write_common_string ... 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 call you_got_a mov cl, al call write_item_name mov cl, 0x1b call write_common_string ... you_got_a: mov di, 0xc000 push ax mov cl, 0x60 call write_common_string pop ax ret All to get nice messages like "You got a scroll." . It was totally worth it.
Thanks PasokonDeacon, for playtesting and providing errata.
SpeedyNoelle, for helping me get the game running at all.
The PC-9800 Series Central Discord, for encouraging me to finish this thing.
fluidvolt, for everything <33