Changes

Jump to navigation Jump to search

ROM hacking resources

4,798 bytes added, 15:38, 10 October 2016
Emulators for ROM hacking
* '''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.
** '''Conditional Breakpoints:''' Breakpoints that only trigger when another condition is also met. For example: Dragon Quest 1 keeps track of the monster ID (during battles) and the floor type (outside battles) in the same RAM variable. Which means every single step the hero makes will trigger the breakpoint, so if you're only interested in the monster ID code, you can weed out all other BPs by simply adding the condition "only trigger when the battle status RAM variable is on". Conditions can be about RAM or hardware register status.
** '''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.
===Emulators===
{| class="wikitable"
|+NES
|-
! scope="col"|Name
! scope="col"|OS
! scope="col"|Version
! scope="col"|[[Accuracy]]
! scope="col"|Save states
! scope="col"|Cheat support
! scope="col"|Frame options
! scope="col"|Breakpoint
! scope="col"|Conditional Breakpoint
! scope="col"|Disassembler
! scope="col"|Assembler
! scope="col"|Tracer
! scope="col"|Memory view
! scope="col"|Tile view
! scope="col"|BG/OAM view
! scope="col"|Useful?
|-
| style="text-align: center;"|FCEUX
| style="text-align: center;"|Windows, Linux
| style="text-align: center;"|2.2.3
| style="text-align: center;"|High
| 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;"|✓
| style="text-align: center;"|✓
| style="text-align: center;"|✓
| style="text-align: center;"|✓
| style="text-align: center;"|✓✓
|}
 
* '''FCEUX''' is the golden standard for emulator debuggers, it's a fully featured one and very newbie friendly. So please check it out even if you're not interested in NES games as it's an excellent starting point for game modding. It's one of the few emulators, alongside PCSX2 and PPSSPP, to include conditional breakpoints.
 
{| class="wikitable"
|+SNES
! scope="col"|Frame options
! scope="col"|Breakpoint
! scope="col"|Conditional BPBreakpoint
! scope="col"|Disassembler
! scope="col"|Assembler
| style="text-align: center;"|✗
| style="text-align: center;"|✗
| style="text-align: center;"|Yes✓✓
|-
| style="text-align: center;"|Bizhawk
| style="text-align: center;"|✓
| style="text-align: center;"|✗
| style="text-align: center;"|Unstable
|-
| style="text-align: center;"|NO$SNS
| style="text-align: center;"|✓
| style="text-align: center;"|✓
| style="text-align: center;"|Detailed
|}
 
* Older '''bsnes''' versions, and many of its forks - notably BizHawk and Marmelade, have an extensive VRAM viewer, some versions having ones topping NO$SNS, as well as a memory viewer. byuu says he wants to make a proper debugger himself called Loki (citing this as the reason for putting on hiatus the FEOE:Zero translation) but don't hold your breath for it.
 
* Geiger's custom build of an older version of Snes9X also is very useful. While the base emulator only has a background layer disabling hotkeys, cheat codes and frame advance features, this build adds a debugger, a tracer (to a log file), as well as a memory viewer/editor with the option to dump to external files to open with hex editors. There's also the very useful "What's Used" feature which colors areas in the memory viewer depending on what's onscreen (controllable with the BG layer hotkeys). However, it doesn't play nicely with nonstandard SNES cartridges. There's another custom Snes9X build by FuSoYa for Super FX2 games.
 
* As for '''NO$''' emulators, right off the bat when you start it, they have a fully editable debugger (upper-left), RAM memory viewer (lower-left), hardware register (upper-right) and stack (lower-right). You can set breakpoints on addresses or programming lines (opcodes). You can view I/O status (for stuff like sound and DMA) with the F10 hotkey.
 
And most importantly, you can view the contents of the VRAM in real-time. It's particularly useful in the case of the SNES (though there's no Mode-7 mode), as there's detailed info about tilemap tiles (the other alternative was to get a ZSNES save state and then load it in an external viewer tool to get that info). It also has sprite information. It's not ideal but far more rom modding oriented than other tools which don't even display 16 tiles per line thus often scrambling the view.
 
NO$PSX and NO$GBA's special debugger build (regular build doesn't have the debugger) also show 3D textures, and in the case of NO$GBA the 3D models too.
 
However, the main flaw these have is the lack of decent frame advancing, save state, and cheat options. You'll need CheatEngine, and importing SRAM files from other files most probably. Also, the base emulation isn't without its flaws (for example, NO$SNS crashes with Quintet games because sound isn't emulated).
 
 
 
* '''DeSmume''' has some older builds on gbatemp with interesting modder-friendly options:
** Custom build allowing searching for unused RAM areas. If you want to change the game's programming you'll need to find an empty place in memory to put your new code, so this is extremely useful.
** Custom build allowing to select a DEBUG option under Slot-1. The console window will show every single file loaded off the cartridge in real time, and it's also logged to a text file. If you're, say, looking for the title screen to change it, you can this way narrow down which files you need to look for.
==General resources==
Anonymous user

Navigation menu