Custom Player Graphics
The FVX branch has support for custom player graphics in the Gen 1-3 games. Basically, this means that you can take a pack of images, and replace the ones in the game with them. The UPR comes pre-packed with some custom player graphics to try out, but you can also make your own quite easily.
This feature was inspired in part by a similar feature in The ALttP Randomizer, and in part by people on Reddit and Discords wanting to easily change the player character, and only it. The UPR already had some customizer features like setting specific starters, and disabling trade evolutions, so it seemed a natural fit.
Below is a general guide for how CPGs work, followed by sections for specific games/Generations.
- In all games
- In Generation 1
- In Generation 2
- In Generation 3 (general)
- In Ruby/Sapphire/Emerald
- In FireRed/LeafGreen
In all games
File structure
To add a custom player graphics, create a new folder within data/players/
. This folder should contain your image files (and palette files, if you need those), as well as a text file called info.ini
.
The UPR accepts images in many formats, but “.png” and “.bmp” are strongly recommended. Don’t use “.jpg” files. If you know what “indexing” images is, you generally do not need to worry about that. Unindexed images work just fine, as long as they don’t have too many colors. This means you can use pretty much any image editing tool to create the images, like MS Paint or Paint.net (the exception where indexing is needed, is Gen 3 overworld sprites).
Palettes should be “.pal” files in JASC-PAL format. Palette files are only used in special cases, such as for the reflection palette in Gen 3 games. Normally the palettes are taken from the image files.
info.ini
contains some info about the custom player graphics, such as who made it, and also tells the UPR how to use the images. The “info.ini” file can contain one or more custom player graphics entries. Each of these entries has a name in square brackets, followed by a number of tags. Each tag has a key, followed by “=”, and a value. For example, if you have “RomType=Gen1”, that means the custom player graphics are meant for inserting into a Gen 1 game.
Below is a table of common tags, what values they accept, and what they are used for. Depending on the RomType/what game the custom player graphics are meant for, there are also additional tags, like “UnderwaterSprite” or “FishSpriteMode”. The generation-specific pages explain what these tags are.
Key | Accepted values | Usage |
---|---|---|
RomType | Gen1, Gen2, RSE, FRLG | What game the custom player graphics are meant for. Gen1 is for any Generation I game, Gen2 for any Generation II game, RSE for Ruby/Sapphire/Emerald, and FRLG for FireRed/LeafGreen. The kinds of images needed depends on the RomType. Read more on the generation-specific pages. |
Description | Any string | An arbitrary description of the character the custom player graphics are based on. |
From | Any string | Where is the character from? If you are basing your custom player graphics on existing images (like a video game), where are those from, specifically? |
Creator | Any string | Who made the the original images? If you are basing your custom player graphics on existing images, who made those? If you made the images from scratch, this is you. Can be multiple people. |
Adapter | Any string | Who adapted the images, into a format usable by the UPR/target game. Who made those extra images which were missing? This is (presumably) you, but can also be multiple people in case you didn't make all the extra images. If you're also the creator, or the creator is Game Freak because it's the vanilla graphics for the same game (Red for Gen1, May for RSE),you don't need to include this. |
FrontImage | Image file name | The file name of the front image. |
BackImage | Image file name | The file name of the back image. |
WalkSprite | Image file name | The file name of the walk sprite image. |
BikeSprite | Image file name | The file name of the bike sprite image. |
FishSprite | Image file name | The file name of the fishing sprite image. |
Example:
Below is an example of the contents of a info.ini file. Double slashes “//” can be used for comments.
[Snorlax]
RomType=Gen1
Description=The Pokémon known for blocking roads.
From=Pokémon - Generation I
Creator=Gamefreak
Adapter=Voliol
Category=POKEMON
FrontImage=gb_front.png
BackImage=gb_back.png
WalkSprite=gb_walk.png
BikeSprite=gb_bike.png
FishSpriteMode=combined
FishSprite=gb_fish.png
[Snorlax]
RomType=Gen2 // Note this is different from "RomType=Gen1" above.
Description=The Pokémon known for blocking roads.
From=Pokémon - Generation I
Creator=Gamefreak
Adapter=Voliol
Category=POKEMON
FrontImage=gbc_front.png
BackImage=gbc_back.png
WalkSprite=gb_walk.png
BikeSprite=gb_bike.png
FishSpriteMode=combined
FishSprite=gb_fish.png
In Generation 1
General info
Due to the Gen 1 games being for the original GameBoy, all graphics are monochrome, with 4 shades. The UPR can detect the shades used in your images, so as long as your image contains no more than four colors, it will be fine. You do not have to index the palette.
For overworld sprites, the lightest color in the source image is used for “transparent”, instead of “white”.
The example below shows that both source images (colored and monochrome) give the same result when inserted into the game.
or →
Graphic specifications
The player has a front image, a back image, and sprites for walking, cycling, and fishing in the overworld.
The front image is 56x56 pixels, and the back image is 32x32 pixels. The bottom 4 rows of pixels of the back image should be white. Examples of valid front and back images below:
The walk sprite and bike sprite have identical specifications. They are both 16x96 pixels, split into 6 frames of 16x16 pixels each. Examples of valid walk and bike sprites below:
Like the walk and bike sprites, the fishing sprite has frames for the directions up/down/side. However, they only have 1 frame for each direction, and this frame only covers the bottom half of what is seen on screen. The top half is taken from the walk sprite frame facing the appropriate direction.
+ →
The UPR can read fishing sprites in two “modes”. With the “separate” mode, each frame will be read from a separate 8x16 pixel image. With the “combined” mode, all frames will be read from a single 16x24 pixel image. This is controlled Examples of valid fishing sprites below:
, , , ,
List of tags
Key | Accepted values | Usage |
---|---|---|
FishSpriteMode | Separate or Combined | Controls whether the fishing sprite will be read from 3 separate images (one for each frame), or a single image. |
FishFrontSprite | Image file name | The file name of the south-facing fishing sprite frame image. Used only if FishSpriteMode is "Separate". |
FishBackSprite | Image file name | The file name of the north-facing fishing sprite frame image. Used only if FishSpriteMode is "Separate". |
FishSideSprite | Image file name | The file name of the east/west-facing fishing sprite frame image. Used only if FishSpriteMode is "Separate". |
Other/unsupported graphics
On the title screen, there is an image of Red holding a Poké Ball. The UPR has no support for changing it. There is no support for changing the fishing rod.
In Generation 2
General info
Perhaps because the Gen 2 games were originally set up to be playable on the original GameBoy, as well as the GameBoy color, all graphics have 4 colors: “white”, “black”, and two others. The UPR can detect the shades used in your images, so as long as your image contains no more than four colors, it will be fine. You do not have to index the palette.
For overworld sprites, the lightest color in the source image is used for “transparent”, instead of “white”.
The example below shows that both source images (colored and monochrome) give the same result when inserted into the game.
or →
What colors are actually used for an image/sprite depends on the palette loaded for it. The front and back images will use the palette of the given front image. The overworld sprites will use one of 8 predefined palettes, chosen in ini.txt
.
Graphic specifications
The player has a front image, a back image, a trainer card image, and sprites for walking, cycling, and fishing in the overworld.
The front image is 56x56 pixels, and the back image is 48x48 pixels. The trainer card image is 40x56 pixels, and normally just a cropped down version of the front image, with a triangle in the corner in Gold/Silver. The UPR knows how to crop down a front image to create a trainer card image, so you don’t have to include the latter if you don’t want to.
Examples of valid front, back, and trainer card images below. The last trainer card image includes the aforementioned “triangle in the corner”:
The walk sprite and bike sprite have identical specifications. They are both 16x96 pixels, split into 6 frames of 16x16 pixels each. Examples of valid walk and bike sprites below:
Like the walk and bike sprites, the fishing sprite has frames for the directions up/down/side. However, they only have 1 frame for each direction, and this frame only covers the bottom half of what is seen on screen. The top half is taken from the walk sprite frame facing the appropriate direction.
+ →
The UPR can read fishing sprites in two “modes”. With the “separate” mode, each frame will be read from a separate 8x16 pixel image. With the “combined” mode, all frames will be read from a single 16x24 pixel image. Examples of valid fishing sprites below:
, ,
List of tags
Key | Accepted values | Usage |
---|---|---|
SpritePalette | RED, BLUE, GREEN, BROWN, PINK, EMOTE, TREE, ROCK | Decides what palette will be used for the overworld sprites.
RED, BLUE, GREEN, and BROWN are used for NPCs in the Vanilla games, while PINK is an unused palette very similar to RED. EMOTE, TREE, and ROCK are used by emotes, cuttable trees, and breakable rocks respectively. |
FishSpriteMode | Separate or Combined | Controls whether the fishing sprite will be read from 3 separate images (one for each frame), or a single image. |
FishFrontSprite | Image file name | The file name of the south-facing fishing sprite frame image. Used only if FishSpriteMode is "Separate". |
FishBackSprite | Image file name | The file name of the north-facing fishing sprite frame image. Used only if FishSpriteMode is "Separate". |
FishSideSprite | Image file name | The file name of the east/west-facing fishing sprite frame image. Used only if FishSpriteMode is "Separate". |
Other/unsupported graphics
There is no support for changing the fishing rod.
In Generation 3 (general)
General info
All the customizable player graphics use indexed palettes of size 16. Since 1 color is always used for transparency, this in effect means each image can have up to 15 colors.
The transparent color is picked differently depending on whether your source image is indexed or not. If it is, the color at index 0 will be picked. If it isn’t, then the color of pixel in the top right corner will be picked. Generally, this means you don’t have to worry about indexing the source image correctly, since the UPR takes care of transparency. However, the overworld sprites mostly use the same palette, so you want to keep track of the palette indexing when working on them.
Graphic specifications
The player has a front image, a back image, a map icon image, and various sprites (walking, cycling, fishing etc.) used in the overworld.
The front image is 64x64 pixels, and the back image is 64x256 pixels in RSE and 64x320 pixels in FRLG, divided into 4 respectively 5 64x64 pixel frames. Examples of valid front and back images below. The first back image is valid for RSE, and the second for FRLG:
The map icon image is 16x16 pixels. Examples of valid map icon images below.
The walk sprite is 144x32 pixels, split into 9 frames of 16x32 pixels each. Examples of valid walk sprites below:
The run sprite too is 144x32 pixels, split into 9 frames of 16x32 pixels each. However, depending on which “mode” it is read in, these frames will be assumed to be in different orders. The “RSE” mode assumes the same order as the frames in the walk sprite, while the “FRLG” mode assumes each “direction” is grouped together. Examples of valid run sprites below. The first run sprite is valid for “RSE” mode, and the second for “FRLG” mode:
The bike sprite is 288x32 pixels, split into 9 frames of 32x32 pixels each. In RSE, this sprite is used for the Mach Bike. Examples of valid bike sprites below:
The fishing sprite is 384x32 pixels, split into 12 frames of 32x32 pixels each. Examples of valid fishing sprites below:
The size of the sit sprite (used primarily when surfing) varies between games. In RSE it is 96x32 pixels, split into 3 frames of 32x32 pixels each. In FRLG it is 48x32 pixels, split into 3 frames of 16x32 pixels eachs. Examples of valid sit sprites below. The first sit sprite is valid for RSE, and the second for FRLG:
The size of the surf blob sprite varies between games. In RSE it is 96x32 pixels, split into 3 frames of 32x32 pixels each. In FRLG it is 192x32pixels, split into 6 frames of 32x32 pixels each. Note that the surf blob sprite shares its palette with most other overworld sprites. The first surf blob sprite is valid for RSE, and the second for FRLG:
The size of the bird sprite (which appears when Fly is used) varies between games. In RSE it is 32x32 pixels, with a single frame. In FRLG it is 64x192 pixels, split into 3 frames of 64x64 pixels each. Note that the bird sprite shares its palette with most other overworld sprites. The first bird sprite is valid for RSE, and the second for FRLG:
All overworld sprites mentioned above share the same normal palette, and the same reflection palette. These are 16-colors palettes, of which the first color is “transparent”. By default, the normal palette is derived from the walking image, and the reflection palette is a copy of the normal palette. However, they can also be assigned custom palettes through “.pal” files. Below is an example of a valid .pal file:
JASC-PAL
0100
16
148 230 230
255 238 213
255 213 213
238 180 180
172 156 164
164 164 180
106 123 148
106 123 148
123 131 131
238 238 255
164 246 156
123 205 123
255 156 156
230 123 139
255 255 255
106 115 106
List of tags
Key | Accepted values | Usage |
---|---|---|
MapIcon | Image file name | The file name of the map icon image. |
RunSpriteMode | RSE or FRLG | The mode for reading the run sprite image. |
RunSprite | Image file name | The file name of the run sprite image. |
SpriteNormalPalette | Palette file name | The file name of the normal palette. |
SpriteReflectionPalette | Palette file name | The file name of the reflection palette. |
In Ruby/Sapphire/Emerald
[TODO: showcase gif]
Graphic specifications
The sit/jump sprite (used when jumping into water/onto the fly bird) is 92x32 pixels, split into 3 frames of 32x32 pixels each. Examples of valid sit/jump sprites below:
The acro bike sprite is 864x32 pixels, split into 27 frames of 32x32 pixels each. Examples of valid sit/jump sprites below:
The underwater sprite is 96x32 pixels, split into 3 frames of 32x32 pixels each. Note that the underwater sprite uses a different palette from all other overworld sprites. Examples of valid underwater sprites below:
The watering can sprite is 192x32 pixels, split into 6 frames of 32x32 pixels each. Examples of valid underwater sprites below:
The decorate sprite is 16x32 pixels, with a single frame. Examples of valid decorate sprites below:
And finally, the field move sprite is 160x32 pixels, split into 5 frames of 32x32 pixels each. Examples of valid decorate sprites below:
List of tags
Key | Accepted values | Usage |
---|---|---|
SitJumpSprite | Image file name | The file name of the sit/jump sprite image. |
AcroBikeSprite | Image file name | The file name of the acro bike sprite image. |
Underwater | Image file name | The file name of the underwater sprite image. |
WateringCanSprite | Image file name | The file name of the watering can sprite image. |
DecorateSprite | Image file name | The file name of the decorate sprite image. |
FieldMoveSprite | Image file name | The file name of the field move sprite image. |
Other/unsupported graphics
During the intro movie, the player is shown riding a bike. In Emerald, this is also shown during the credits. This bike is split into two images, for the player and for the bike. The UPR does not support changing either.
In FireRed/LeafGreen
[TODO: showcase gif]
Graphic specifications
Ihe item sprite (used when using a field move or the VS Seeker) is 144x32 pixels, split into 9 frames of 16x32 pixels each. Examples of valid decorate sprites below:
Ihe item/bike sprite (used when using the VS Seeker on a bike) is 192x32 pixels, split into 6 frames of 32x32 pixels each. Examples of valid decorate sprites below:
List of tags
Key | Accepted values | Usage |
---|---|---|
ItemSprite | Image file name | The file name of the item sprite image. |
ItemBikeSprite | Item file name | The file name of the item/bike sprite image. |
Other/unsupported graphics
The large images shown during the player select are not supported. These use a palette of 32 colors, unlike all supported images.