Well, the past week or so has been an absolute whirlwind of software development. My NetHackDS project has developed considerably, expanding from a fairly basic port to supporting multiple rendering modes, control schemes, and so forth. And many of the features I’ve implemented haven’t even been my ideas… having actual users is surprisingly useful when trying to dream up new feature ideas. :)
But, with such an accelerated pace of development (I’ve been making new releases more or less every other day), it’s inevitable that bugs creep in, particularly since I’ve been spending far more time developing NetHackDS, and far less time playing it. As such, my plan over the next week is to dial back on new feature additions and focus primarily on a) playtesting, and b) bug fixing.
Of course, that’s not to say I won’t be doing any new feature development. Right now, I have it in my head to enhance the minimap, so it displays more useful information, and so I’ll probably plug away at that over the next little while. But aside from that, there are no major features I see desperately needing work in the short term… unless someone requests one. :)
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.