Editing ROM hacking resources
Jump to navigation
Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 153: | Line 153: | ||
With another command-line tool called [http://www.romhacking.net/utilities/224/ Atlas], you may re-insert that text file (after modifying it) in the ROM, and the tool will take care of updating the pointers. You can, for example, tell it to start inserting text in an empty yet accessible location at the end of the ROM. The possibilities are endless. | With another command-line tool called [http://www.romhacking.net/utilities/224/ Atlas], you may re-insert that text file (after modifying it) in the ROM, and the tool will take care of updating the pointers. You can, for example, tell it to start inserting text in an empty yet accessible location at the end of the ROM. The possibilities are endless. | ||
− | Command-line tools may sound scary, with their black MS-DOS dialog boxes flashing quickly and disappearing. They're actually easy to use. Just put all the needed files in the same folder, make a new .txt file where you write the command detailed in the tool's readme, and save that file as one with the .bat extension. If you double-click on it, it will execute that tool the way you wanted it with little effort. | + | Command-line tools may sound scary, with their black MS-DOS dialog boxes flashing quickly and disappearing. They're actually easy to use. Just put all the needed files in the same folder, make a new .txt file where you write the command detailed in the tool's readme, and save that file as one with the .bat extension. If you double-click on it, it will execute that tool the way you wanted it with little effort. |
===Editing graphics with tile editors=== | ===Editing graphics with tile editors=== | ||
Line 164: | Line 164: | ||
The tile data uses indexed colors. Using Mario's shirt as an example, it isn't colored "red" but rather colored with "color 1". NES Mario games, like most NES games, happen to use the NES 2BPP mode (that is, two bits per pixel). A bit is either zero or one. With two bits, we can write <code>00</code>, <code>01</code>, <code>10</code> and <code>11</code>. This technically gives us four possible colors in total. However, there are actually three colors since "color 0" is transparency, used around Mario's sprite so that the backgrounds behind him are visible and unobstructed. | The tile data uses indexed colors. Using Mario's shirt as an example, it isn't colored "red" but rather colored with "color 1". NES Mario games, like most NES games, happen to use the NES 2BPP mode (that is, two bits per pixel). A bit is either zero or one. With two bits, we can write <code>00</code>, <code>01</code>, <code>10</code> and <code>11</code>. This technically gives us four possible colors in total. However, there are actually three colors since "color 0" is transparency, used around Mario's sprite so that the backgrounds behind him are visible and unobstructed. | ||
− | How can we tell what actual color Mario's shirt is instead of just "color 1"? We do this through [[wikipedia:Palette_(computing)|palettes]]. Palettes are hex data consisting of | + | How can we tell what actual color Mario's shirt is instead of just "color 1"? We do this through [[wikipedia:Palette_(computing)|palettes]]. Palettes are hex data consisting of three bytes, and each byte is the ID for a specific color: "red", "blue", "yellow", "purple", "light blue", and so on. (There are just under 60 valid choices in the NES, but later systems have a much larger selection of colors.) We know Mario's clothes change color after eating various items, but the tile data drawings are stored just once in the ROM. There are separate palettes telling the game to colorize the same drawing differently for different situations. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==Emulators for ROM hacking== | ==Emulators for ROM hacking== | ||
Line 215: | Line 170: | ||
* '''Cheats:''' You modified some text and graphics in the final stage but can't be bothered to replay the whole game legitimately. In case the emulator doesn't support this natively, you might want to consider using [http://www.cheatengine.org/ Cheat Engine]. | * '''Cheats:''' You modified some text and graphics in the final stage but can't be bothered to replay the whole game legitimately. In case the emulator doesn't support this natively, you might want to consider using [http://www.cheatengine.org/ Cheat Engine]. | ||
− | * '''Save | + | * '''Save States, rewinding, fast forward, frame advance, pause:''' You modified something appearing in a very narrow timeframe, or you just want to take clean screenshoots of the game. |
* '''Debuggers''' with the following features: | * '''Debuggers''' with the following features: | ||
** '''Breakpoints:''' A breakpoint throws a fit and pauses the game if a specific address is tampered with. Of course, to know which address it is, you need to find it first with a cheat/RAM search. | ** '''Breakpoints:''' A breakpoint throws a fit and pauses the game if a specific address is tampered with. Of course, to know which address it is, you need to find it first with a cheat/RAM search. | ||
− | |||
** '''Disassembler:''' Translates the last few lines of programming executed from hex code to known opcodes telling which instruction is which (LDA/LDR/LD (load to accumulator/register), STA/STR/ST (store to accumulator/register), NOP (do nothing), and so on). After a breakpoint, it gives you the programming line (in assembly) directly responsible for altering the address the breakpoint was guarding against reading/writing/executing attempts. This is incredibly invaluable to understand the game's programming. | ** '''Disassembler:''' Translates the last few lines of programming executed from hex code to known opcodes telling which instruction is which (LDA/LDR/LD (load to accumulator/register), STA/STR/ST (store to accumulator/register), NOP (do nothing), and so on). After a breakpoint, it gives you the programming line (in assembly) directly responsible for altering the address the breakpoint was guarding against reading/writing/executing attempts. This is incredibly invaluable to understand the game's programming. | ||
** '''Assembler:''' Allows the user to write their new lines of programming, which are then converted to the corresponding hex data. It's rare that emulators include this. Assemblers are often separate tools affecting the ROMs or to be inserted manually by users in ROMs. | ** '''Assembler:''' Allows the user to write their new lines of programming, which are then converted to the corresponding hex data. It's rare that emulators include this. Assemblers are often separate tools affecting the ROMs or to be inserted manually by users in ROMs. | ||
Line 228: | Line 182: | ||
===Emulators=== | ===Emulators=== | ||
− | {| class="wikitable | + | {| class="wikitable" |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|+SNES | |+SNES | ||
|- | |- | ||
! scope="col"|Name | ! scope="col"|Name | ||
− | ! scope="col"| | + | ! scope="col"|OS |
! scope="col"|Version | ! scope="col"|Version | ||
− | ! scope="col"|[[ | + | ! scope="col"|[[Accuracy]] |
! scope="col"|Save states | ! scope="col"|Save states | ||
! scope="col"|Cheat support | ! scope="col"|Cheat support | ||
! scope="col"|Frame options | ! scope="col"|Frame options | ||
! scope="col"|Breakpoint | ! scope="col"|Breakpoint | ||
− | ! scope="col"|Conditional | + | ! scope="col"|Conditional BP |
! scope="col"|Disassembler | ! scope="col"|Disassembler | ||
! scope="col"|Assembler | ! scope="col"|Assembler | ||
Line 288: | Line 202: | ||
! scope="col"|Useful? | ! scope="col"|Useful? | ||
|- | |- | ||
− | | | + | | style="text-align: center;"|Snes9X |
− | | | + | | style="text-align: center;"|Windows, Linux |
− | |Gieger's r1.51 | + | | style="text-align: center;"|Gieger's r1.51 |
− | |High | + | | style="text-align: center;"|High |
− | |✓ | + | | style="text-align: center;"|✓ |
− | |✓ | + | | style="text-align: center;"|✓ |
− | |✓ | + | | style="text-align: center;"|✓ |
− | |Address | + | | style="text-align: center;"|Address |
− | |✗ | + | | style="text-align: center;"|✗ |
− | |✓ | + | | style="text-align: center;"|✓ |
− | |✗ | + | | style="text-align: center;"|✗ |
− | |✓ | + | | style="text-align: center;"|✓ |
− | |✓ | + | | style="text-align: center;"|✓ |
− | |✗ | + | | style="text-align: center;"|✗ |
− | |✗ | + | | style="text-align: center;"|✗ |
− | | | + | | style="text-align: center;"|Yes |
|- | |- | ||
− | | | + | | style="text-align: center;"|Bizhawk |
− | |Windows | + | | style="text-align: center;"|Windows, Linux |
− | |Main | + | | style="text-align: center;"|Main |
− | |Cycle | + | | style="text-align: center;"|Cycle |
− | |✓ | + | | style="text-align: center;"|✓ |
− | |✓ | + | | style="text-align: center;"|✓ |
− | |✓ | + | | style="text-align: center;"|✓ |
− | |Range | + | | style="text-align: center;"|Range |
− | |✗ | + | | style="text-align: center;"|✗ |
− | |✓ | + | | style="text-align: center;"|✓ |
− | |✗ | + | | style="text-align: center;"|✗ |
− | |Read-only | + | | style="text-align: center;"|Read-only |
− | |✓ | + | | style="text-align: center;"|✓ |
− | |✓ | + | | style="text-align: center;"|✓ |
− | |✗ | + | | style="text-align: center;"|✗ |
− | | | + | | style="text-align: center;"|Unstable |
|- | |- | ||
− | | | + | | style="text-align: center;"|NO$SNS |
− | |Windows | + | | style="text-align: center;"|Windows |
− | |1.6 | + | | style="text-align: center;"|1.6 |
− | |Mid | + | | style="text-align: center;"|Mid |
− | |✗ | + | | style="text-align: center;"|✗ |
− | |✗ | + | | style="text-align: center;"|✗ |
− | |✗ | + | | style="text-align: center;"|✗ |
− | |Address | + | | style="text-align: center;"|Address |
− | |✗ | + | | style="text-align: center;"|✗ |
− | |✓ | + | | style="text-align: center;"|✓ |
− | |✗ | + | | style="text-align: center;"|✗ |
− | |✓ | + | | style="text-align: center;"|✓ |
− | |✓ | + | | style="text-align: center;"|✓ |
− | |✓ | + | | style="text-align: center;"|✓ |
− | |✓ | + | | style="text-align: center;"|✓ |
− | | | + | | style="text-align: center;"|Detailed |
|} | |} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==General resources== | ==General resources== | ||
Line 371: | Line 267: | ||
* [http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm XVI32] | * [http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm XVI32] | ||
* [http://www.romhacking.net/utilities/219/ Translhextion] | * [http://www.romhacking.net/utilities/219/ Translhextion] | ||
− | |||
− | |||
− | |||
− | |||
==Game-specific== | ==Game-specific== | ||
===EarthBound=== | ===EarthBound=== | ||
− | * | + | * [http://www.starmen.net Starmen.net] – Home of the hacking utility [http://starmen.net/pkhack/ PK Hack], an editor for modifying the EarthBound/Mother 2 ROM. Has an active hacking community in the PK Hack section of its forums, where links to completed hacks can also be found. |
− | |||
− | |||
===Final Fantasy VI=== | ===Final Fantasy VI=== | ||
− | * [ | + | * [http://www.ff6hacking.com/forums/portal.php FF6 Hacking] – Home to a large community of Final Fantasy VI hackers, complete with active forums, links to patches, and FAQs and guides for those looking to get into hacking the game. |
− | |||
− | ===Final Fantasy | + | ===Final Fantasy Tactics=== |
* [http://ffhacktics.com/ Final Fantasy Hacktics] – Community for FFT hacking with a variety of completed hacks, patches, and resources. | * [http://ffhacktics.com/ Final Fantasy Hacktics] – Community for FFT hacking with a variety of completed hacks, patches, and resources. | ||
Line 392: | Line 281: | ||
* [http://www.feshrine.net/hacks.html Fire Emblem Shrine] – An active and prominent Fire Emblem hacking community. Hosts a variety of completed hacks and FAQs to get you started. | * [http://www.feshrine.net/hacks.html Fire Emblem Shrine] – An active and prominent Fire Emblem hacking community. Hosts a variety of completed hacks and FAQs to get you started. | ||
* [http://serenesforest.net/forums/index.php?showforum=8 Serenes Forest] – Another active and prominent Fire Emblem hacking community, though perhaps a bit more active than Fire Emblem Shrine. | * [http://serenesforest.net/forums/index.php?showforum=8 Serenes Forest] – Another active and prominent Fire Emblem hacking community, though perhaps a bit more active than Fire Emblem Shrine. | ||
− | |||
===The Legend of Zelda: A Link to the Past=== | ===The Legend of Zelda: A Link to the Past=== | ||
− | * [http:// | + | * [http://forum.metroidconstruction.com/index.php/board,27.0.html?PHPSESSID=c83e531bb78ed7c6a3a4de5b45756595 Zelda Construction] – Despite its huge popularity, the hacking community for ALttP is relatively small. This is mainly due to the lack of a truly good editor, though one is in the works. This community is a spin-off of Metroid Construction devoted to hacking of ALttP and other games in the series. |
− | |||
− | |||
− | |||
===Pokémon=== | ===Pokémon=== | ||
* [http://www.pokecommunity.com/forumdisplay.php?f=37 The PokéCommunity] – Very active (and helpful) Pokémon hacking community. | * [http://www.pokecommunity.com/forumdisplay.php?f=37 The PokéCommunity] – Very active (and helpful) Pokémon hacking community. | ||
− | |||
− | |||
− | |||
− | |||
===Sonic the Hedgehog=== | ===Sonic the Hedgehog=== | ||
Line 425: | Line 306: | ||
* [http://metroidconstruction.com Metroid Construction] – The most prominent and active Super Metroid hacking community currently. Hosts a large variety of hacks, resources, FAQs, and an active community and forum. Originated in m2k2 before becoming its own dedicated site. | * [http://metroidconstruction.com Metroid Construction] – The most prominent and active Super Metroid hacking community currently. Hosts a large variety of hacks, resources, FAQs, and an active community and forum. Originated in m2k2 before becoming its own dedicated site. | ||
* [http://wiki.metroidconstruction.com/doku.php Metroid Construction Wiki] – As its name implies, a wiki created by the Metroid Construction community. | * [http://wiki.metroidconstruction.com/doku.php Metroid Construction Wiki] – As its name implies, a wiki created by the Metroid Construction community. | ||
− | * [http://www.metroid2002.com/ Metroid 2002] – The former most prominent and active Super Metroid hacking community. While it has since been foregone in favor of Metroid Construction, it can still be a valuable resource for knowledge about the more advanced mechanics and inner workings of Super Metroid (as well as other games in the series). | + | * [http://www.metroid2002.com/ Metroid 2002] – The former most prominent and active Super Metroid hacking community previously. While it has since been foregone in favor of Metroid Construction, it can still be a valuable resource for knowledge about the more advanced mechanics and inner workings of Super Metroid (as well as other games in the series). |
==Downloads== | ==Downloads== | ||
− | * [https://mega.nz/#F!R8RCnZZY!Zxyqoynu9GVWIwFHCISK2Q!og53jJJL ROM Hacks] | + | * [https://mega.co.nz/#F!R8RCnZZY!Zxyqoynu9GVWIwFHCISK2Q!og53jJJL ROM Hacks] |
− | + | ||
[[Category:FAQs]] | [[Category:FAQs]] |