The first problem was getting a good disassembly, to the point where it could be re-assembled at any address. The obvious snag was addresses in data, but the not so obvious snag was how the programmers did array indexing. Instead of doing a combination of adds, most of the time they started with the address minus the element size, and incremented the loop counter before starting, so that zero wouldn't need any special case handling. This meant that lots of addresses were referenced as a different address, which wasn't a problem except for one at the beginning of RAM, where the referenced address was before the start of RAM. Then there was the usual stuff about different I/O port addresses, and different bits for the joystick ports. And that damn NMI.
I have finally figured out that Coleco made a big boo-boo by putting the VDP interrupt on NMI. The problem is that you need to read the VDP status register to acknowledge the interrupt, or you'll never get it again, but if you do it in the middle of loading a VDP address, it causes the address to be written wrong, and puts trash on the screen. The SG-1000, SMS, and MSX programmers could simply put a DI/EI around the code to write a VDP address. No such luck on Coleco, which uses the non-maskable interrupt. If only they had put the (rarely used) spinner interrupt on NMI and the VDP interrupt on RST 38, things would be so much easier. I needed two flag bits to make it work. Since the game pointed IY to the start of RAM and only ever used it for one byte of flags, I bumped the memory up by one byte and used the new byte at (IY-1) for the interrupt semaphore flags.
I think I've found most of the uses of Japanese for later translation. Some are text strings that are easily changeable because I did a sufficiently good job on disassembly, some are single bytes poked into the VDP (the Japanese equivalents of English prepositions are usually one character), and then there's also the need to swap some code around for word order.
This version seems to work, but I got attacked by wolves in town a couple of times, which never happened when I played the SG-1000 version for a few hours, and I got attacked by lions in the first level under the well (just NW of The Wall), which also never happened before. So there may be a subtle bug with the choice of monsters. At least it's a kind of cool bug.
onyx_001.bin ( 31.85k ) Number of downloads: 32
* you WILL need a 2-button stick, but fortunately the regular Coleco stick is not uncomfortable with this game. You get to use the right button a lot, as it seems to usually be the "select" function
* to start, hit any button, then you get the "MENU". The first option is "new game". Hit the right button. Then choose a guy and hit the left button to select, then the right button to accept. Enter your name, using the left button, then hit the right button to accept. Then you are asked if you want more guys. The first is "yes" (はい), the second is "no" (いいえ). Joystick down and use the right button to start the game.
* use the right button to bring up a menu. TIME seems to control the speed of combat, CURE will ask you who has medicine (you have to buy it at the PHYSICKER) then who you want to use it on.
* if you get attacked by "FIGHTER"s, especially in town, try TALK. If you have room in your party (max 5), you can ask them to join you. Otherwise they say "good luck finding the Black Onyx".
* when walking around near The Wall, and in the cemetery, there are "holes" in the ground. A menu will pop up. The first item is "don't go" (いかない), the second (if three) is go down (したに いく), and the last (if three) is go up (うえに いく). If you're already on the square and change your mind, just run into a wall.
* at the bottom of the well is the Kraken. His power bar is like a mile long. He will kill low level characters instantly. I'm pretty sure the Black Onyx is down there somewhere. Good luck grinding.
* in the southeast part of town is a teleport door (it says something like "the color of the walls seems to have changed") that ends up throwing you into the "DO NOT ENTER" area. There may be another exit in there that I haven't found yet.
* the save passwords are per character. Use "QUIT" from the main menu to generate the passwords (it will then also let you continue without quitting). When you restart the game, you give it your character name and then the password. The menu for password characters is 82 characters long, you have to enter 15 of them, and most of them will be Japanese hiragana.
Edited by Bruce Tomlin, Wed Apr 18, 2007 8:13 AM.