The Vinesauce ROM Corruptor allows you to arbitrarily replace colors, provided that the way that the colors are stored in the file to corrupt meets certain requirements. The color replacement is currently geared towards the way colors are stored for the Nintendo Entertainment System. This means that it only handles color values that are exactly one byte.
The color replacement tab of the user interface is shown below.
It has two major inputs.
Colors to Replace:
Enter the hexadecimal value of the color to replace into this text box. Multiple colors can be replaced at the same time by putting pipe characters (|) between them. Replacing certain colors will result in more collateral corruption than others, as they may share their value with operation codes or other important data.
Replace With:
Enter the hexadecimal value to replace the matching color with into this text box. If multiple colors were added into the box above, the same number of colors must also be entered into this box. Again, the pipe character (|) is used to separate colors.
Demonstration
In order to demonstrate color replacement, I will corrupt Metroid which was developed and published by Nintendo in 1986 for the Nintendo Entertainment System. The suit that Samus wears and its colors are very distinctive features of the series.
Our goal is to make this inaugural game of the series playable as Dark Samus, which we will accomplish by replacing the colors of her suit. Inspecting the color palette, it is clear that the red color of her suit is generated by the hexadecimal value “16”. Lets replace that with a dark blue by using hexadecimal value “11” in its place. The user interface below is set up to do this. A settings file you can load with these settings is available here.
The result of running the above is shown below.
That definitely looks darker, but the remaining stock colors really clash with her new outfit. Inspecting the color palette again, it is clear that the yellow is generated by hexadecimal value “27” and the green is generated by hexadecimal value “19”. Lets replace the yellow with a lighter blue by using hexadecimal value “21” in its place, while also replacing the green with a very light blue by using hexadecimal value “31” in its place. The user interface below is set up to do this. A settings file you can load with these settings is available here.
The result of running the above is shown below.
Perfect! Now you can play through the first game of the series as Dark Samus.
Unfortunately, the color replacements that were made make the game very unstable. In order to fix this, the area of the file that the color replacements are applied to can be restricted to the byte range that is specified in the corruption tab of the user interface. In order to reduce collateral corruption to a minimum, you would have to target just the area where the color palette resides. However, this is not practical and I suggest simply doing iterations of the bisection method until the range is narrow enough that the game performs as desired.
Applying the bisection method to searching for the location of the color palette in the file is straightforward:
(1) Set the range to the entire file.
(2) If the color replacements remain, set the range to the first half of the current range. If the color replacements disappear, set the range to the other half of the previous range.
(3) Repeat step (2) until the game performs as desired.
After doing a few iterations of the bisection method myself I arrived at the settings shown in the user interface screenshots below and available for download here. These settings maintain the color replacements while reducing the collateral corruption that made the game unplayable.