The current version of NHDS does a kind of funny thing when you die: instead of returning you to the fancy schmancy splash screen, it powers the DS off. As it happens, it does the same thing when the user saves their game (which is a good thing, IMHO), and this is no coincidence. It just so happens they share the same shutdown codepath.
Well, a couple people mentioned this, and I thought, yeah, I should try to fix that. It is, after all, rather irritating to have to power the DS back on after YASD. But, alas, I stand defeated. The problem is this: the NetHack core contains a lot of internal state. And the initialization of this state happens in a variety of places, and it’s not very neatly factored out. As an example, the core function, moveloop(), which is what gets the game going, performs a bunch of state initialization for the player.
Now, on, say, the Unix port, when the game ends, the program terminates. There’s no concept of the game restarting. And so all of this state isn’t a problem. But the case of NHDS is different. If I attempt to start the game again (and trust me, I’ve tried), the core gets mightily confused, puzzled why various bits of state are initialized, and further puzzled when it’s attempts to initialize others bits of state fail. It’s all quite the mess, really.
The consequence? I can see no way of fixing this problem. It’s an inherent issue with the way the game is structured. Oh well… on the bright side, at least I can just blame the DevTeam.
Well, progress continues unabated on the NetHack port. A little part of me is actually somewhat concerned over the fate of my marriage, given the sheer amount of time I’ve been spending on this thing. But, on the (not so) bright side, Lenore’s been so sick the last couple days, she’s barely noticed that when I’m not attending to her needs, I’m hacking by the warm glowing warming glow of the laptop backlight.
Meanwhile, reception seems to be pretty positive, with most people of the opinion that yeah, my port seems to work pretty well. Of course, that’s not to say there isn’t plenty more to do, and tons of bugs to fix (just this morning Jeremy pointed out an odd colour problem on corpses… ie, they’re the wrong colour. Not to mention the fact that, as of this writing, you can’t write on the floor using just your finger), but it’s certainly a comfortably playable port, especially with the snazzy ANSI graphics mode!
As for imminent work, I just cleaned up the textmode cursor stuff this morning after a brainwave hit me in the shower, which means things like projectiles move the cursor correctly. Next, I think I’ll fix the engraving bug Jeremy spotted, and take a look at the tile-mode invisibility bug that’s been lingering since I first released the code. And somewhere in there, I need to figure out why the corpses are the wrong colour… and… and… and…
Yup, I finally got it to a state where I think it’s done, and it now has it’s own home page. Sleep mode works. Key config is implemented. And text continues to be clipped. Of course, there’s plenty of bugs (I just spotted some weird behaviour in the message window), but I consider it “good enough” for public consumption.
Well, I promised some shots of my Nethack port in action, and I aim to please! Now, I couldn’t figure out how to get my code working with Desmume, so I just gave up and used a camera. You’ll have to forgive the consequent bluriness…
Here we see a newly minted game. On the bottom screen you can see the visible play area. On the top screen you can see the minimap, with a red box representing the displayed region on the lower screen, as well as the player’s status and the welcome message.
This shows the popup command menu. The user holds the L button (eventually this will be swappable, for you lefties) to make the menu popup, at which point the user can tap a command to have it execute. Much nicer than an on-screen keyboard, I think…
And this last shot shows the inventory list after selecting the Inventory command. As you can see, there’s a bit of clipping, but it otherwise works as advertised. If this were a Drop command or something similar, the user would be able to tap items to select them (multiple taps begin counting from 1).
So there you go! See, it’s not vapour after all! Well, not technically, anyway…
And now key remapping is implemented! This includes handedness swapping (swaps the shoulder buttons), and mapping commands to the joypad and the primary buttons. And the changes are persisted across sessions. Neat, eh?