I thought I recognized the GitHub username, you contributed to my GNOME Shell extension years ago!
Show HN: Ghidra Plays Mario
21–30 of 34 posts
Re: Show HN: Ghidra Plays Mario
#22Is this the correct game mechanic behavior? My recollection as a 90's kid is this worked differently: If you run into a Goomba horizontally, Mario is toast (or loses his mushroom bigness).
Am I confused? :D
Edit: Thanks to @h0l0cube and @cylon13 for explaining this in another comment- it turns out nothing is wrong. If you look closely after reading their explanation, you can see it. Certainly a subtle detail.
> I think that goomba bumped into the squished goomba Mario had just squished. Mario was just a bit to the left so the flat goombas hit box stuck out to the right a bit and the other goomba hit it.
Re: Show HN: Ghidra Plays Mario
#23At 17 seconds into the demo video, Mario appears to run into a Goomba horizontally without being harmed, and it just changes course to head in the other direction as if it bounced off him. Is this the correct game mechanic behavior? My recollection as a 90's kid is this worked differently: If you run into a Goomba horizontally, Mario is toast (or loses his mushroom bigness). Am I confused? :D Edit: Thanks to @h0l0cub…
Re: Show HN: Ghidra Plays Mario
#24At 17 seconds into the demo video, Mario appears to run into a Goomba horizontally without being harmed, and it just changes course to head in the other direction as if it bounced off him. Is this the correct game mechanic behavior? My recollection as a 90's kid is this worked differently: If you run into a Goomba horizontally, Mario is toast (or loses his mushroom bigness). Am I confused? :D Edit: Thanks to @h0l0cub…
I noticed that as well.
Re: Show HN: Ghidra Plays Mario
#25I thought I recognized the GitHub username, you contributed to my GNOME Shell extension years ago!
Just wondering, what was the extension?
Re: Show HN: Ghidra Plays Mario
#26Re: Show HN: Ghidra Plays Mario
#27Klaus Dormann's 6502 tests don't rely on a particular emulator environment. They could be used with Ghidra. https://github.com/Klaus2m5/6502_65C02_functional_tests
Re: Show HN: Ghidra Plays Mario
#28This is great. I’m not clear on if the bugs you are finding are in Ghidra’s processor model or in the emulator? (Though I think it’s the latter?) Also, why would Ghidra have the best (most accurate?) processor model vs some of the highest quality emulators? One other question: when the cpu is being emulated at a 50th of its actual speed (or less!) how does replaying recorded input work? Do all games strictly use inte…
From what I've seen, it's usually read at the vblank interrupt. The input recording has entries in format " ". If I press a button and it's read from the hardware register after let's say 0x1000 instructions have been stepped, it is stored as "0x1000 0x80", and in the Ghidra emulator script, I only need to count up to 0x1000 instructions before I send that memory write to the other emulator. While the real timings ar…
Re: Show HN: Ghidra Plays Mario
#29Very old ML project from a master's student's thesis which is what originally got me into CS. He taught it to play NES games other than mario and had a good breakdown of his results. http://tom7.org/mario/
https://github.com/openai/retro:
> Gym Retro lets you turn classic video games into Gym environments for reinforcement learning and comes with integrations for ~1000 games. It uses various emulators that support the Libretro API, making it fairly easy to add new emulators.
.nes is listed in the supported ROM types: https://retro.readthedocs.io/en/latest/integration.html#supp...
> Integrating a Game: To integrate a game you need to define a done condition and a reward function. The done condition lets Gym Retro know when to end a game session, while the reward function provides a simple numeric goal for machine learning agents to maximize.
> To define these, you find variables from the game’s memory, such as the player’s current score and lives remaining, and use those to create the done condition and reward function. An example done condition is when the `lives` variable is equal to 0, an example reward function is the change in the `score` variable.
PPO Proximal Policy Optimization and OpenAI/baselines: https://retro.readthedocs.io/en/latest/getting_started.html#...
MuZero: https://en.wikipedia.org/wiki/MuZero
MuZero-unplugged with PyTorch: https://github.com/DHDev0/Muzero-unplugged
Farama-Foundation/Gymnasium is a fork of OpenAI/gym and it has support for additional Environments like MuJoCo: https://github.com/Farama-Foundation/Gymnasium#environments
Farama-Foundatiom/MO-Gymnasiun: "Multi-objective Gymnasium environments for reinforcement learning": https://github.com/Farama-Foundation/MO-Gymnasium
Re: Show HN: Ghidra Plays Mario
#30Is it a 6502 processor model in specific? Because the NES used the 2A03 in NTSC regions: https://www.nesdev.org/wiki/2A03