PalMod: PALette MODification for fighting games.
Created in 2008 by: knarxed (aka suupabuu), Magnetro, Preppy, Eidrian
Resurrected in 2020 by Preppy with key help from TVIndustries, IceManual, mountainmanjed, and lots of additional great help from many other excellent people.
PalMod uses LodePNG for indexed PNG export, MAME's logic for CP3 support, and Mark Adler's CRC32 support. Thank you to those and other pioneers.
Welcome to PalMod!
PalMod is a fan project allowing you to edit colors (also known as palettes) for various fighting games. That usually requires pretty deep technical knowledge, a lot of time, and some luck to do correctly. By providing a straight-forward front-end and consolidating a bunch of community knowledge, PalMod hopefully makes this previously daunting process easy.
What PalMod does is update very certain areas of the game ROMs where the games store color values. Game play is not affected, just colors. If you're new to PalMod, please read the Get Started section or check out one of the YouTube tutorial videos. PalMod is pretty easy once you get started, but it can be confusing at first.
PalMod is under active development in 2020 with new releases weekly. Check Version History for information on the latest changes. You can find new releases at http://zachd.com/palmod: I strongly recommend using the latest non-beta version. The beta versions also will usually have great changes, but may need a little more testing.
If you're a developer or romhhacker, the source code can be found at http://github.com/Preppy/PalMod. The newgamedummy is a base template you can use to add support for new games.
Please note that FightCade 2 does not always use one ZIP for one game: it may use one core ZIP and also another smaller ZIP containing additional files that override files in that core ZIP. If you don't see your changes show up in FightCade, you probably need to modify the files in the other ZIP.
PalMod has a bunch of features and options: read up on those here.
If you're interested in better colors for your palmods, The Book of Palmodding color tutorial can be found here.
- Download and extract out all the PalMod files. PalMod.exe and img2020.dat are the critical files and are updated regularly.
- Download and extract out the ROM for the game you care about. Save a copy of the game ZIP "just in case".
- Open PalMod and use PalMod's File :: Load ROM to open that ROM. NOTE:: You will need to change the file filter in the bottom right from "Breakers Revenge" to whatever game you want to edit. That will update the view and show you the ROM files PalMod can use for that game. For some games, you will want to use File :: Load Directory instead: for that, just use that and point PalMod to the folder containing your game's files.
- Make changes!
- Copy that modified ROM file back into the ZIP.
- You can now load that ROM into your favorite emulator: have fun!
Marvel vs Capcom 2 in particular uses a lot of intertwined palettes, such as Storm's lightning effects that are applied to her base sprite. If you keep the "Process Supplement Palettes" option checked, PalMod will try to handle all these for you automatically for MvC2.
If you want to change them yourself, a great guide to those MvC2 supplemental palettes can be found here. If you don't modify those - or let PalMod modify those for you - the character will flash as they use mismatched palettes.
This section covers all the options available in the PalMod interface and is probably worth a read at least once.
**** File menu ****
- Load ROM:
- Use the filter in the bottom right of this dialog to select loading a game by ROM. PalMod does not include any ROMs: you can get those from elsewhere.
- Load ROM by game:
- Use the platform-based filters to have the Load ROM dialog pop up with the game filter you want to use.
- Load Directory:
- Use the options here to load palettes for a game from the directory you extracted your game's ROM files to. This is useful for Dreamcast, Playstation, and the "newer" ROM dumps for various games. Fightcade 2 tends to prefer the "Directory"-based ROM sets.
- Patch Changes:
- This saves any changes made to the ROM or palette files. There's no undo from this. This commits all changes to memory and then to disk.
- Copy colors to (DC or PS2)
- MvC2 only: Copies the colors from the current DC (or PS2) mix to PS2 (or DC). Allows you to "copy" color edits across platforms.
- Close File / Directory:
- Unloads the current game and stops work on it.
- Load Last File / Directory:
- Loads the last game you were working upon.
**** Edit menu ****
- You probably already understand these, but there's a bonus keyboard-based Color Picker:
- If you press CTRL+SHIFT+C in PalMod, PalMod will copy the current color of whatever your mouse cursor is pointing at. Or if you press CTRL+SHIFT+V, PalMod will both copy that color and paste it into the current palette selection.
**** Tools menu ****
- Inverts the current palette selection.
- Swaps 2 or more selected palette colors, reversing the selected sequence.
- Restore the saved palette from memory. Once you use Update or Patch, that updates the saved palette.
- Shows which part of the image the current palette selection modifies. Only useful if there's a preview image available.
- Load Palette:
- You can use this to either load an Adobe Color Table (ACT) file, indexed PNG, or Microsoft ".PAL" RIFF palette file. ACT files are an easy way to give a friend your set of colors. Or if you have a PNG with indexed color, PalMod can read the palette from that file and use that. Note that Fighter's Factory writes their color tables upside down: PalMod will read those upside down so that things look right.
- Save Palette:
- Save your palette to a file out so you can use it in other applications or share it with a friend. You can save as either .ACT (Adobe Color Table) or .GPL (GIMP PaLette file).
- Generate IPS Patch File
- Generates an IPS (International Patching System) patch file. This can be used to share or load your changes without patching the ROM itself. It commits the current palette to memory and then saves either all palettes that were modified in the current session since your last Save-to-ROM to a small-ish IPS file or every palette in the game to a larger IPS file. How to use IPS files.
**** Settings menu ****
- Show 32-bit values:
- If checked, view of color values are based on 32-bit RGB values (0xAARRGGBB, 0-255) instead of the actual game values. This is for readability ONLY. No game we support actually supports 32-bit color, so the 32bit color values will be rounded to what the game can support when we save.
- Colors Per Line:
- You can choose between 8 or 16 colors per line. It's arguably easier to edit characters in 8 colors per line mode, and stages in 16 colors per line mode. I use 16 colors per line mode for exploring ROMs.
- Color Format:
- Shows the color format being used for the current game. This can be changed when you are using the "Unknown Game" game loading option. Also lets you set the alpha mode: some games may or may not want the alpha bits set.
- Include bonus data in CTRL+C copy
- For ROM hackers. PalMod can do a neat little trick: writes its basic copy string - something like "(/"415B)" - as an ASCII string to the clipboard, but also write an extended version of that data as Unicode to the clipboard. Palmod itself only looks at the ASCII version, but you and text editors look at the Unicode/extended data. Turn this on if you want the extra information, which includes ROM location for the current palette and expected bytes at that location given the current colors.
**** Settings menu: MvC2 Settings ****
- Allow transparency (MvC2 only):
- For Marvel VS Capcom 2: Allows you to make changes to the alpha/transparency value of colors. You can get cool ghost effects, but it's also really bad for competitive play. You will get a warning if you try to turn this on. :)
- Process Supplement Palettes (MvC2 only):
- Automatically process any extra palettes that are based on the currently selected palette. This is the easy mode: you potentially can do better yourself if you use the Eidrian Palette Guide.
**** Palette View ****
Each square represents one color from a given color palette. A maximum of 128 colors will be shown at one time (or 256 in 16 color per line mode): for larger palettes, you'll need to traverse multiple pages.
Click to select a specific color, and then use the Edit Color options or Get Color to modify that color. Or select multiple colors to change a number of colors at once. You can also right-click upon those colors. You can copy and paste from color square(s) to other color square(s), or even send a friend a sequence of colors to copy to their PalMod via saving out the ACT or sending the palette string we copy to the buffer.
Note that in most games the first color is usually transparent, which is why you cannot change the first color for most games.
To select multiple colors at once, click on the first color of interest and then drag to the last color of interest. Or hold CONTROL (CTRL) and click on each color of interest.
**** Edit Color options ****
- Once you have selected a color square (or a number of them), you can change the RGB (Red Green Blue) or HSL (Hue Saturation Lightness) values until you find a color you like and works well. In some cases you can adjust alpha: be careful about this. It's a cool feature that should never be used for tournament mixes.
**** Dialog buttons ****
- Pick Color:
- Pops up a color picker so you can select a color to use for the selected palette indexes.
- Saves the current palette to memory. Note that you still need to Patch the change before your game is modified.
- Shows the Preview window that hosts the game sprites if we have any in our image file.
- Check My Edits:
- MvC2-Dreamcast only: Verifies that if you changed a character palette that you changed the secondary palettes associated with that palette. For example, if you modify Cyclops you also need to modify his Extra - 02 (c.HK) to match. This option also allows you to auto-correct your mix using our normal Process Supplement Palettes logic.
**** Preview window ****
- Export Image:
- Pops up an Export Image window so you can save a copy of your image to disk. The Indexed PNG option is brought to you using code from LodePNG. Indexed PNG export is highly recommended: you can simply import that PNG into PalMod as an easy way of exchanging colors.
- Load Texture:
- Load your own sprite to use for the preview. This sprite needs to be a .RAW file. The filename must include the H and W of the RAW, as in "ryu-w-67-h-100.raw", since RAW files do not include the H/W (height and width) values.
- Set Background Color: Choose a specific color to be shown as the background for the sprite.
- Set Background Image: Choose a specific image to be shown as the background.
- Set Blink Color: This is the color that will be shown when a given color index is "blinked". Normally white.
- Tile Image Background: Like it sounds. Useful for small background images.
- Use Background Color: Switch back to using Background Color instead of Background Image.
- Zoom: Zooms the selected sprite.
- Clicks show color in palette: If you click on any part of the preview window, PalMod will highlight and select all matching colors in the current palette. That lets you understand what palette color affects any given part of your sprite. Or deselect this to turn this feature off.
**** Export Image dialog ****
- File menu:
- Choose where to save this to.
- "One" means show the current palette only: or whatever specific button is selected under Palette. Higher numbers mean show all those button's color options as well. We only allow for exporting multiple sprites at once if PalMod already knows what your sprite's peer palettes are.
**** The Extras File ****
This is a powerful and dangerous extension that lets you use PalMod to read and modify regions of the ROM that PalMod doesn't already know about. To do this you place an Extras file in the same directory that you launch PalMod from. Bad Extras files may crash PalMod: to fix that just fix or remove that bogus Extras file.
Each Extra definition is comprised of three lines. You specify one line with the title for a given palette, the next line being the starting position in the ROM for that palette, and the third line being the ending position in the ROM for that palette. For example:
; This is a comment. The first character on a comment line must be ;
; The offset values will be treated as hexadecimal
Ryu's Pet Hamster
This would create a PalMod entry for the "Ryu's Pet Hamster" palette that reads the 0x20 (0n32) colors between 0x2400e to 0x2402e. You can specify a lot of Extras entries if you need to: at one point Jojo's support was entirely being done via SFIII3's Extras file support.
All Extras loaded this way will be available at the bottom of the top listbox as "Extra Palettes". When that is selected your specific Extras will show up in the bottom listbox. Any palette larger than 128 colors will be shown across multiple pages. If you specify a gigantic palette we may show you a warning to be careful. We don't show any preview sprites for Extra Palettes.
Please note that any ROM locations/palettes present in both PalMod and in the Extras file is pure shenanigans: we will end up creating two copies of that palette and you would need to modify *both* to have anything good happen. Please don't duplicate palettes. PalMod will make a good faith effort to check for duplicates when it loads Extra files, and will try to warn you if it sees any dupes.
The file names you can use are:
If you want to try to experiment with a new ROM via Extras file hacking, use the Unknown Game option. You can use the Settings : Color Format menu to change how we interpret the ROM. Try starting with a color format used for other games in the series (you can load them to check). If that exact palette is used for another sprite in another game, you can use PalMod's extended copy information to get the data we expect to see in the ROM for that palette, and then hunt for that in your new unknown ROM using a binary editor.
||Sample ROM name
|Art of Fighting 3 (ROM p1) ||Aof3P1E.txt ||096-p1.p1
|Art of Fighting 3 (ROM p2) ||Aof3P2E.txt ||096-p2.sp2
|Bleach: Dark Souls (NDS) ||BleachDSE.txt ||3494 - Bleach - Dark Souls (Europe) (En,Fr,De,Es,It).nds
|Breakers Revenge ||BreakersRevE.txt ||245-p1.p1
|Clay Fighter: TE ||cftee.txt ||Clay Fighter - Tournament Edition (USA).sfc
|COTA ||cotae.txt ||xmn.05a
|CVS2 ||cvs2e.txt ||SNKGD_SL.bin
|DanKuGa ||DanKuGae.txt ||dkg_mpr3.20 and 3 other files
|Fatal Fury Special (SNES) ||FatalFurySE.txt ||Fatal Fury Special (USA).sfc
|Garou ||GarouE.txt ||kf.neo-sma
|Garou for Steam ||GarouSE.txt ||p1.bin
|Gundam Wing: Endless Duel (SNES) ||GundamE.txt ||Shin Kidou Senki Gundam W - Endless Duel (Japan).sfc
|Jojos (ROM 50) ||jojos50e.txt ||50 (Regulation must be off)
|Jojos (ROM 51) ||jojos51e.txt ||51 (Regulation must be off)
|Karnov's Revenge ||KarnovsE.txt ||066-p1.p1
|KOF94 ||kof94e.txt ||055-p1.p1
|KOF98 ||kof98e.txt ||242-p2.sp2
|KOF99AE ||kof99AEe.txt ||A,B colors: kof99ae_p2.bin; C,D,AC,BD colors: kof99ae_p3.bin
|KOF01 ||kof01e.txt ||262-p2-08-e0.sp2
|KOF02 ||kof02e.txt ||265-p2.sp2
|KOF02:UM ||kof02ume.txt ||pal_a.bin
|KOF03 (2004 EX Ultra Plus) ||kof03e.txt ||2k3-p1up.bin
|KOF:XI ||kofxie.txt ||gdrom_KOFXI_v5_AllFighters.bin
|Last Blade 2 ||LastBlade2E.txt ||243-pg1.bin
|Matrimelee ||matrimeleee.txt ||266-p2.sp2
|MMPR:TFE ||MMPRe.txt ||Mighty Morphin Power Rangers - The Fighting Edition (USA).sfc
|MSHVSF (ROM 6) ||mshvsf-6ae.txt ||mvs.06a
|MSHVSF (ROM 7) ||mshvsf-7be.txt ||mvs.07b
|MSH (ROM 5) ||MSHe.txt ||msh.05
|MSH (ROM 6) ||MSH06e.txt ||msh.06b
|MVC1 ||mvce.txt ||mvc.06
|MVC2 (Arcade) ||mvc2e.txt ||MarvelVsCapcom2_unlocked.bin
|Neo Bomberman ||NeoBombermanE.txt ||093-p1.bin
|NGBC ||NGBCe.txt ||NeoGeoBattleColliseum.bin
|Real Bout Fatal Fury Special (Arcade) ||RBFFSE.txt ||223-p1.p1
|Red Earth (Arcade) ||RedEarthE.txt ||31
|Ring of Destruction: Slam Masters 2 (Arcade) ||SlamMasters2E.txt ||smbe.05b
|Samurai Shodown III ||SamSho3E.txt ||087-p5.p5
|Samurai Shodown IV ||SamSho4E.txt ||222-p1.bin for FC1, 222-p1.p1 for FC2
|Samurai Shodown VSP ||SamSho5SpE.txt ||272-p1.p1
|SF2:CE (ROM 21) ||sf2ce-21e.txt ||s92_21a.6f
|SF2:CE (ROM 22) ||sf2ce-22e.txt ||s92_22b.7f
|SF2:HF (ROM 21) ||sf2hf-21e.txt ||s2te_21.6f
|SF2:HF (ROM 22) ||sf2hf-22e.txt ||s2te_22.7f
|SFA1 ||SFA1e.txt ||sfz.06
|SFA2 (ROM 7) ||sfa2e.txt ||sz2j.07b
|SFA2 (ROM 8) ||sfa2-8e.txt ||sz2j.08b
|SFA3 ||sfa3e.txt ||sz3.09c
|SFIII1 ||sfiii1e.txt ||50
|SFIII2 ||sfiii2e.txt ||50
|SFIII3 (ROM 10) ||sfiii3-10e.txt ||10
|SFIII3 (ROM 51) ||sfiii3e.txt ||51
|SSF2T (ROM 3) ||ssf2t-3ce.txt ||sfxe.03c
|SSF2T (ROM 4) ||ssf2t-4ae.txt ||sfxe.04a
|SSF2T (ROM 8) ||ssf2t-8e.txt ||sfxe.08
|SSF2T (GBA) ||ssf2t-GBAe.txt ||Super Street Fighter II X - Revival (Japan).gba
|Super Gem Fighter ||GemFighterE.txt ||pcf.07
|SVC ||svce.txt ||svc-p2pl.bin
|Unknown Game ||UnknownE.txt ||Anything!
|Vampire Hunter 2 ||VHunt2e.txt ||vh2j.09
|Vampire Savior ||VSAVe.txt ||vm3j.10b
|Vampire Savior 2 ||VSAV2e.txt ||vs2j.10
|Waku Waku 7 ||WakuWaku7E.txt ||225-p1.p1
|Windjammers ||WindjammersE.txt ||065-p1.p1
|XMVSF ||XMVSFe.txt ||xvs.05a