ROM hacking


ROM hacking is the process of modifying a ROM image or ROM file of a video game to alter the game's graphics, dialogue, levels, gameplay, and/or other elements. This is usually done by technically inclined video game fans to breathe new life into a cherished old game, as a creative outlet, or to make essentially new unofficial games using the old game's engine.
ROM hacking is generally accomplished through use of a hex editor 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 and debuggers are occasionally used. Once ready, they are usually [|distributed] on the Internet for others to play on an emulator or games console.
Fan translation is a type of ROM hacking; there are also anti-censorship hacks that exist to restore a game to its original state, which is often seen with older games that were imported, as publishers' content policies for video games were much stricter in the United States than Japan or Europe, there are also randomisers which shuffle entity placements. Although much of the method applies to both types of hacking, this article focuses on "creative hacking" such as editing game levels.

Communities

Most hacking groups offer web space for hosting hacks and screenshots, a message board, and often have an IRC channel.

Methods

Having been created by many different programmers or programming teams, ROM data can be very diverse.

Hex editing

A hex editor is one of the most fundamental tools in any ROM hacker's repertoire. Hex editors are usually used for editing text, and for editing other data for which the structure is known, 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, which can be told what byte values correspond to what letter 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 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 is 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.

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 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, which can display the ROM data in a graphical way, as well as finding and editing tiles.
Graphics hacks can range from simple edits to "porting" characters from one game to another, to full-blown thematic changes.
More sophisticated graphics hacking involves changing more than just tiles and colors, but also the way in which 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. A good example of a graphics hack is the uncompleted Pokémon Torzach, a hack which attempted to add a whole new generation of Pokémon and tiles to the game. The hack has since been discontinued, but it still serves as a good example on what can be achieved with the tools available.

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 ; 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; palette hacking in this case entails changing which of those colors are selected. The matter is slightly more complicated with Super NES games and games for other systems, 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. 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 is editing data such as character, item, and enemy properties. This is usually done either "by hand" 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

The most powerful, and arguably the most difficult, hacking technique is editing the game's actual code, a process called ASM hacking. There is no set pattern for ASM hacking, as the code varies widely from game to game, but most skilled ASM 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 ASM hacking, ranging from altering enemy AI to changing how graphics are generated.
If the developers used a typed language, the hacker may be able to compile their own 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.

Music hacking

Music hacks are relatively rare, due to the wide variety of ways games store music data and the difficulties in composing new music. As music cracking is very uncommon, many hacks do not have any ported/composed music added in. The program SapTapper can be used to hack Game Boy Advance music data, however, as many Game Boy Advance games use the M4A Engine for music. Various other utilities were created to work with the engine such as .
Another instance of the same engine being used between games is on the Nintendo 64, in which most games use the same format; although they use different sound banks. A utility known as the was created to edit the sequences that the majority of Nintendo 64 games use, though it does not cover the first-party N64 titles that use a slightly different engine, such as Super Mario 64.
Several Mega Drive games use a sound engine unofficially known as "SMPS", which has been researched for decades by many hackers. As of today, various tools exist to alter the music of games which use the SMPS engine, and many of them made their way to the Steam Workshop.

ROM expansion

Generally speaking, a ROM hacker cannot normally add content to a game, but merely change existing content. This limit can be overcome through ROM expansion, whereby the total size of the ROM image is increased, making room for more content and, in turn, a larger game. The difficulty in doing this varies depending on the system for which the game was made. For example, expanding an NES ROM may be difficult or even impossible due to the mapper used by the game. For example, if a mapper allows 16 ROM banks and all of them are used, expanding the ROM further is impossible without somehow converting the game to another mapper, which could be easy or extremely difficult. On the other hand, expanding a SNES game is straightforward. To utilize the added space, parts of the game code have to be modified or re-written so the game knows where to look. Another type of ROM expansion that is fairly easy is Game Boy Advance ROMs. The ROMs themselves are generally small, but the memory space available sometimes exceeds it by multiples of up to 17.

Distribution

Once a hack is completed it is released onto the Internet for others to play. The generally accepted way to do this is by making an unofficial patch that can be applied to the unmodified ROM. This, and usually some form of documentation, is put in an archive file and uploaded somewhere. IPS is a format for recording the differences between two binary files and is suitable for ROM hacks. IPS is still used today for small patches—however, as ROMs became larger in size, this format became useless, leading to quite a few file formats being created—such as NINJA and PPF. PPF is still used today, particularly to patch large files such as ISO CD images and Nintendo 64 games. A new patch format, UPS, has also been developed by the ROM hacking community, designed to be the successor to IPS and PPF.
A more recent patching format, the APS patching system, has also been developed by a devoted Game Boy Advance ROM hacker. The APS system is more space efficient, is reversible, and is faster than its predecessor.
The purpose of distributing a hack in patch form is to avoid the legal aspects of distributing entire ROM images; the patch records only what has changed in the ROM, hence distributing it does not usually distribute parts of the original game. A patch is also normally drastically smaller than the full ROM image.
In a novel example of legal distribution, Sega released a Steam-based virtual hub for its previous collection of Mega Drive/Genesis games, entitled Sega Mega Drive Classics Hub. The Hub, besides allowing players to play emulated versions of these older games, takes advantage of Steam's support for user-created content through Steam Workshop, officially allowing ROM hacks of any of the offered classics.

Usage

Patched ROMs are often played on emulators, however it is also possible to play patched ROMs on the original hardware. The destination cartridge could be the original cartridge from which the initial unpatched ROM was pulled, or another compatible cartridge of the same type. This is particularly popular for fan translations, homebrew games, prototypes, or other games for which original cartridges were never produced, or for games which require exact timing or other elements of the original hardware which are not available in emulators.

Systems and games

The majority of ROM hacking is done on NES and Super NES games, since such games are small and simple compared to games of more advanced consoles such as the Nintendo 64 or Nintendo DS. Games for the Game Boy, Game Boy Color and Game Boy Advance are also popular for hacking, as well as games for the Sega Mega Drive and PlayStation to a lesser extent. Sega Genesis games are also widely hacked. But by no means are games for more recent consoles exempt from hacking, and indeed as computers have become faster and more programs and utilities have been written, more PlayStation, Nintendo 64 and Nintendo DS hacks have emerged.
Of these, popular games to play are popular games to hack; many hacks have been released of games of the Sonic the Hedgehog series, Super Mario series, Mario Kart series, Pokémon series, Chip's Challenge, Final Fantasy, The Legend of Zelda, games from the Mega Man series, Fire Emblem series, EarthBound, Super Metroid, and many others.
A notable hacked arcade game was Street Fighter II Blackbelt Edition, which featured increased game speed and new special moves. The success of this game prompted Capcom to release as an official response.
Your Sinclair magazine published a monthly column called "Program Pitstop". This focused mainly on cheat hacks for games, but also featured both a level map printer for the original Gauntlet, as well as a full level editor for the same game.