This project is inspired by MarI/O – which in essence boils down to five scripts and a pool of states. For the AI to work, it requires structure – which is why the code of MarI/O was split into five seperate scripts. First, I want to write the spritelist script, which represents the eyes of the AI. Instead of logic, the script contains lists of sprites, sorted by their effect and nature. However, to do so, a dive into a new whole world is necessary – the world of ROM hacking.
In this blog, I will go over the essentials of rom hacking, describe its methods and go over some tools.
What is ROM hacking?
ROM hacking, in essence, means to change/adjust/re-program the content of ‚.rom‘ files. These files are usually digital versions of analog CD-ROMs, and typically contain console games that may be played by using dedicated software (emulators).
Using witchcraft and sorcery, it is generally possible to completely modify SNES ROMs and add new levels, graphics, sounds, and other things not found in the original games.
( https://appuals.com/top-10-best-snes-rom-hacks/ )
Methods
When it comes to the SNES, ROM hackers can perform edits in four areas:
- Text ( = changes to displayed text, excluding texts in graphics )
- Graphics ( = changes to sprites and backgrounds )
- Game code ( = changes to the core game )
- Game features ( = changes to non-core elements of the game, like character animations )
Why is it necessary for this project?
I need to use ROM hacking methods and tools to determine sprites for the spritelist script. These are represented as hex-codes, and since noone has approached this game for this kind of task so far, I need to figure out this process.
For the next step, I will try different graphics editing tools; linked in the sources below.
What are sprites in the scope of this project?
According to Google Dictionary, a sprite is either an elf / a fairy or a computer graphic that may move on the screen. In this case, the latter definition hits home. The sprite list contains five different types of sprites:
- Neutral sprites – they may be interacted with but do not increase the players score.
- In Super Mario World, this could be a growing vine.
- Good sprites – they increase the score when touched by the player.
- In Super Mario World, this could be a coin.
- Bad sprites – they decrease the score when touched by the player.
- In Super Mario World, this could be a Koopa.
- Extended neutral sprites – they are typically effects generated by the game that do not influence the score.
- In Super Mario World, this could be a fireball shot by the player.
- Extended bad sprites – generated effects that decrease the score upon touch.
- In Super Mario World, this could be a thrown hammer or baseball.
Sources (Theory)
https://www.zophar.net/fileuploads/2/10690nxpfq/AoRH.htm
https://appuals.com/top-10-best-snes-rom-hacks/
http://www.romhacking.net/start/
Sources (Tools)
https://gbatemp.net/threads/snes-hacking-tools.294110/
https://github.com/qalle2/ines-split
https://github.com/qalle2/ines-info