Hacker News new | ask | show | jobs
by kemenaran 1265 days ago
Author here! Most of the engine documentation was figured out by many romhackers over the years; I merely started the efforts to write a comprehensive overview.

If you're interested in projects taking advantage of this knowledge, the Daid's LADX Randomizer [0] is awesome. It includes a ton of assembly tweaks that makes the engine more flexible, and add many options to the game.

And Link’s Awakening Redux [1] is a good example of life-improvement game tweaks made using the disassembly.

[0] LADXR: https://daid.github.io/LADXR/ [1] Link’s Awakening Redux: https://github.com/ShadowOne333/Links-Awakening-Redux

3 comments

Nice. I wonder if they'd be willing to fix the bug where pressing left and right on the d-pad at the same time renders Link's sprite invisible. Not an issue on original hardware but quite dangerous when emulating.
This reminds me vaguely of the Sega Dreamcast controllers.

If I remember correctly, there is a hardware and software difference between pushing up on the joystick. Edit: Or rather some games depended on some analog noise(?) that is now filtered out by modern interfaces.

It doesn’t represent `{ x: 0, y: 1 }’, but I can’t remember if that was the case because of the physical joystick, which was then remapped in software, or some other case, though I assume that’s why.[1][2]

[1]: https://github.com/p1pkin/demul/issues/392

[2]: https://github.com/flyinghead/flycast/issues/287

Given that original hardware prevented that, I’m surprised it wouldn’t be a default-on option in emulator frontends.
It depends on the emulator, across pretty much every platform that uses a joystick or d-pad, but in my experience the default most commonly is no left+right input at the same time. (It's semantics as to whether the implementation is "allow left+right input" defaulted to off, or "prevent left+right input" defaulted to on.)
I'd also be interested to know what ends up happening if there are simultaneous presses— I assume last-one-wins would be the least surprising strategy for resolving it, but certainly several options are possible, and what is preferred might even be game-dependent.
Oh that’s neat. I’m struggling to think of bug prevention that’s similar on a PC. Orientation lock maybe?
The original hardware prevented it in the sense it's impossible to push both the left and right button at the same time on the Gameboy dpad, not through any software means.
Yes, I understood that it was "hardware" as in a fundamental constraint of the physical controller, but appreciate the clarification.

Certainly if it had been enforced by the console firmware, then it would be a no-brainer that emulators should do it.

Funny story about this actually is that a while ago I was retrofitting an old dance mat to be an XInput device via a Teensy, and I ran into a constraint where XInput's d-pad support only allowed one direction to be set at once, which obviously doesn't work for that use case. I ended up giving up and having the Teensy emulate a USB keyboard instead. (This was for use with Stepmania and Necrodancer on PC.)

Games of that era tended to hit the hardware directly for I/O, meaning that there is no firmware that can enforce any such thing. AFAIK the Game Boy boot ROM just verifies the Nintendo logo data, plays the chime, then boots the game, and after the game boots, the boot ROM completely disappears from the memory map.
Nintendo held onto this no os approach into the Wii era. Hence if you ran a japanese version game on a north American Wii you got the japanese Wii pause menu.

Meanwhile the PS3 and Xbox 360 had hypervisors.

I've never played this game on an emulator. That's pretty interesting. I need to find a ROM now.
What was censored and what was the untranslated present?
Instead of losing her bikini top (which Link must then find), the mermaid loses her necklace. Instead of pulling a towel to cover herself when Link enters the room, the hippo lady being painted is edited to have no nude characteristics.
I've been working on a project on top of LADXR, many thanks to all involved.