ROM hacking is the process of modifying a ROM image or ROM file to change or alter the contents contained within, usually of a video game to alter the game's graphics, dialogue, levels, gameplay, or other elements.

ROM hacking is used to improve an old game of importance, as a creative outlet, or to essentially make new (unofficial) games using the old game's engine. ROM hacks are generally accomplished through the use of a hex editor (a program for editing non-textual data) and various specialized tools such as tile editors, and game-specific tools which are generally used for editing levels, items, and the like, although more advanced tools such as assemblers, compilers and debuggers are occasionally used. Once ready, they are usually distributed on the Internet for others to play on an emulator or a games console.

Fan translation (known as "translation hacking" within the ROM hacking community) is a type of ROM hacking; anti-censorship hacks exist that restores a game to its original state (which is often seen with older games that were imported, as publishers' content policies for video games (most notably, Nintendo's) were much stricter in the United States than in Japan or Europe); randomizer hacks were created to shuffle entity placements within a game; some hacks also reimplement features that exist in the game's code but are not used in-game.

Communities Most hacking groups offer web space for hosting hacks and screenshots (sometimes only hosting hacks by the group's members and hosting almost any hack), a message board, and often have an IRC channel. Several hacking groups and individuals have also created guides for those who wanted to learn more about ROM hacking, such as the Rom Hacking Bible for the NES written in the mid-to-late 1990s, as well as guides designed for beginners and skilled hackers who wanted to learn how to add or change things from start to finish.

There are many sites on the internet dedicated to world of ROM hacking, with each of them focusing on several hacks and translations of games across multiple series, franchises and platforms. One of the most notable sites online dedicated to ROM hacking was ROMhacking.net, which first went online in late 2005. From its inception up until 2024, it served as a hub related to all things ROM hacking, hosting a repository of hacks, translations, utilities, documents, and patches for many well-known and obscure video games from the third generation up to the seventh generation. ROMhacking.com was the immediate predecessor of ROMhacking.net, which launched five years earlier in 2000 as "The Whirlpool" and briefly as ROMhacking.org between 2001 and 2002 before returning to its former name afterwards, and then went offline in late 2004.

, ROMhacking.net has been relegated into being a read-only news site for ROM hacking projects after transitioning into the new format that same day after nearly 20 years of hosting on the site due to various reasons beyond the site's control; its former database and files have been archived on the Internet Archive on the same day of the announcement. New submissions were also permanently closed on the same day as well, and all downloads on the site would remain available for the foreseeable future. The spiritual successor to ROMhacking.net, Romhack.ing (RHDI), was launched as an alpha release on 15 August 2024, two weeks after ROMhacking.net transitioned into the read-only format, and then opened for public registration on 1 March 2025.

Methods Having been created by many different programmers or programming teams, ROM data can be very diverse. The following are some of the key methods that are used in ROM hacking.

Hex editing

One of the most basic skills of ROM hacking is hex editing, which refers to directly modifying the hexadecimal data of a video game using a hex editor. A hex editor is one of the most fundamental tools in any ROM hacker's repertoire, and is typically used for editing text, editing other data for which the structure is known (for example, item properties), and assembly hacking.

Editing text is one of the most basic forms of hacking. Many games do not store their text in ASCII form, and because of this, some specialized hex editors have been developed to tell what byte values correspond to the letters of the alphabet to facilitate text editing; a file that defines these byte=letter relationships is called a "table" file. Other games use simple text compression techniques (such as byte pair encoding, also called dual tile encoding or DTE, in which certain combinations of two or more letters are encoded as one byte) which a suitably equipped hex editor can facilitate editing.

A hex editor is the tool of choice for editing things such as character/item properties if the structure and location of this data are known and there is no game-specific editor for the game that can edit this information. Some intrepid hackers also perform level editing with a hex editor, but this is extremely difficult (except on games whose level storage format closely resembles how it is presented in a hex editor).

Graphics editing

Another basic hacking skill is graphics hacking, which is changing the appearance of the game's environments, characters, fonts, or other such things. The format of graphics data varies from console to console, but most of the early ones (NES, Super NES, Game Boy, etc.) store graphics in tiles, which are 8x8-pixel units of data, which are arranged on-screen to produce the desired result. Editing these tiles is also possible with a hex editor, but is generally accomplished with a tile editor (such as Tile Layer or Tile Molester), which can graphically display the ROM data, as well as finding and editing tiles.

Graphics hacks can range from simple edits (such as giving Mario an afro or Luigi a golf club) to "porting" characters from one game to another (such as creating pixelated (or "retro-styled") sprites of later generation Pokémon for use with Generation I-V Pokémon games), to full-blown thematic changes (usually with accompanying palette changes; see below).

More sophisticated graphics hacking involves changing more than just tiles and colors, but also on how the tiles are arranged, or tile groups generated, giving more flexibility and control over the final appearance. This is accomplished through hex editing or a specialized tool (either for a specific game or a specific system). One example of this approach was the unfinished Pokémon Torzach, a Pokémon FireRed hack that attempts to add a whole new generation of Pokémon and tiles to the game. Though the hack has long been discontinued, it was able to achieve some desirable results with the tools that were currently available at the time. Super Mario Land 2 DX: 6 Golden Coins is another example, which is an enhanced version of the original game that notably added full-color support to a game that was originally released in grayscale as well as some quality-of-life improvements such as fixes with screen flickering issues from the original.

Palette editing Another common form of hacking is palette hacking, where color values are modified to change the colors a player sees in the game (this often goes hand-in-hand with graphics hacking); Palette values are commonly stored in Hex. This is fairly easy for NES games, the graphics of which use a pre-defined set of colors among which a game selects (using a YIQ-based color palette); palette hacking in this case entails changing which of those colors are selected. The matter is slightly more complicated with Super NES games as well as games for other systems (including Sega Mega Drive (Genesis) games), which store absolute RGB color values. Palette editors are usually simple and often are with level editors or game-specific graphics editors.

Level editing One of the most popular forms of ROM hacking, level editing entails modifying or redesigning a game's levels or maps. This is almost exclusively done with an editor specially tailored for a particular game (called a level editor). Level edits can be done to make the game more challenging, to alter the flow of the game's plot, or just to give something new to an old game. Combined with extensive graphics hacking, the game can take on a very different look and feel.

Data editing A core component of many hacks (especially of role-playing video games) is editing data such as character, item, and enemy properties. This is usually done either "by hand" (with a hex editor) if the location and structure of the data is known, or with a game-specific editor that has this functionality. Through this, a hacker can alter how weapons work, how strong enemies are or how they act, etc. This can be done to make the game easier or harder or to create new scenarios for the player to face.

Assembly hacking A more powerful, and arguably the most difficult, hacking technique is editing the game's actual code, also called assembly hacking or ASM hacking ("ASM" is short for "assembly", referring to the low-level programming language that gets executed by the CPU). There is no set pattern for assembly hacking, as the code varies widely from game to game, but most skilled assembly hackers either use an emulator equipped with a built-in debugger or tracer, or run the ROM through a disassembler, then analyze the code and modify it using a hex editor or assembler according to their needs. While quite challenging compared to the relatively simple methods listed above, "anything" is possible with assembly hacking, usually within the limitations of the hardware and software of the gaming platform. This can range from altering enemy AI to changing how graphics are generated.

Decompilation If the developers used a typed language, a hacker may be able to compile their code for the game in the same language if they have access to a proper compiler. One such example would be using C to hack Nintendo 64 games, since MIPS-GCC can compile code for the Nintendo 64. This approach is specifically used for a method known as decompilation, where the game's binary executable is decompiled to recreate the game's source code in a high-level, human-readable programming language (such as C) as opposed to disassembling a game to produce low-level assembly language code that is tailored to a specific CPU architecture. Rebuilding the game from a decompilation (i.e. compiling the decompiled code) is otherwise known as recompilation or static recompilation. Like with assembly hacking, there are no rules into performing a decompilation, though the code must be thoroughly analyzed and identified for it to be considered "complete", as was the case for "matching decompilations" (i.e. writing source code that compiles identically to the original).

Though maintaining a similar level of difficulty with that of assembly hacking compared to the other simple methods above, a decompilation is somewhat easier to do than disassembling and modifying the game's actual code in assembly language (especially since it produces human-readable code that can be easily understood by programmers and hobbyists alike), however this is only feasible if the game has been decompiled in the first place. Decompilation is also not tied to the limitations of a games console (with some exceptions), and allows for things not possible with assembly hacking, such as adding custom game mechanics or completely rewriting the game's engine.

Decompilations are more suited for games targeting game consoles from the fifth generation onward (e.g. Nintendo 64, PlayStation, etc.), which generally have more powerful hardware than previous generations. It can also allow for unofficial mods, patches (including widescreen support), and native ports to other platforms such as PC, as well as assisting with video game preservation.

Music hacking