Posts in category 'hacking'

  • Bitter Defeat

    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.

  • NethackDS Screenshots

    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?