Character encoding (Generation I)

The main area of the character set in English Pokémon Red, Blue, and Yellow

In the Generation I core series games, a proprietary character encoding is used to store text data. Different languages use different encodings, although Western language games have very similar encodings to each other.

The Generation I encoding is largely similar to the Generation II encoding.

Compatibility

The exact character encoding differs between languages, although all Western languages use almost-equivalent encodings. The set of user-enterable characters is the same in all Western languages except German; in German, it is also possible to enter some letters with umlauts (ÄÖÜäöü).

In the Generation I and II games, the only supported cross-language compatibility is among the Western games. Between Western language games, the only text that can be transferred is the player's name, and the nicknames and Original Trainers of their party Pokémon. When trading Pokémon between different Western languages, nicknames and Original Trainer names are usually displayed correctly, with the exception of characters with diacritics (such as letters with umlauts, and some characters obtainable in names in the Spanish versions of the Generation II games that cannot be entered by players). The static display control character 0x5D "TRAINER" is used as the Original Trainer of Pokémon obtained in in-game trades. Due to being a control character, this means that if the Pokémon is traded to a game in a different language, the Original Trainer is automatically updated to display "TRAINER" in that game's own language.

Attempting to trade or battle between a Western language or Korean game and a Japanese game causes corruption of both save files. The Korean versions of Pokémon Gold and Silver can successfully trade with Western language Generation I and II games. However, Hangul characters will appear garbled on Western language games, and may even include bytes that map to control characters in these games. However, unlike attempting to trade between Western language and Japanese games, save data is not corrupted. The Virtual Console releases only allow trades or battles between two Western language games, between two Japanese games, or between two Korean games.

The Generation II character encoding for each language is almost the same as the Generation I encoding, with all user-enterable characters remaining at the same code points in both generations. Additionally, the English Generation II games can display the letters with umlauts that can be entered in German games, unlike the English Generation I games. This means that trading Pokémon between Generation I and II games of the same language will not affect their nicknames or Original Trainer names.

Pokémon Stadium

Main article: Character encoding (Stadium)

When the player's name or the nickname or Original Trainer of a Pokémon from the handheld games is displayed in the Pokémon Stadium series, it needs to be transcoded between this character encoding and that of the Nintendo 64 game.

Poké Transporter

Main article: Poké Transporter → Character transcoding

When transferring a Pokémon from a Generation I or II game via Poké Transporter, its nickname and Original Trainer need to be transcoded from this character encoding to that of Pokémon Bank. Due to differences in the characters that can be entered or otherwise appear in names in these games and the Nintendo 3DS games, some characters are not transcoded to the same characters they represent in these games.

Rendering

The party screen in the Japanese version of Pokémon Red, showing dakuten and handakuten

Due to how text is rendered in the Generation I core series games, all standard text characters take up the exact same amount of space (i.e. the games effectively use a monospaced font). In Western languages, some ligature characters exist to display two characters within the width of one (e.g. the character 's is the same width as s).

Each standard text character code directly corresponds to a tile (an 8×8 pixel square) in the tilemap loaded into VRAM. Not all tiles in the tilemap are accessible via character code, but many are. For example, code points 0x01 to 0x48 are used for rendering map elements in the overworld, code points 0x79-0x7E are box-drawing characters used to draw the boundaries of text boxes, etc.

Some code points are used for different characters in different contexts. For example, 0xF0 usually represents the Pokémon Dollar symbol, but on the text entry interface it displays as ED instead.

In most contexts in these games, text is printed with a line of space above it. In Japanese, dakuten and handakuten are printed in this space (above the kana they are applied to), effectively making these diacritic characters two tiles tall. However, status condition icons are displayed without this space above them, so in Japanese a special single-line is loaded into the HP bar tileset to display the poisoned (どく in Japanese) or burned (やけど in Japanese) status conditions on a single line.

Character map

The following represents the baseline values of these characters. In some contexts, many of these characters have their values overwritten.

English
-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F
0-
1- Map tiles
2-
3-
4-
5- Control characters
6-
7- ╔ ═ ╗ ║ ╚ ╝
8- A B C D E F G H I J K L M N O P
9- Q R S T U V W X Y Z ( ) : ; [ ]
A- a b c d e f g h i j k l m n o p
B- q r s t u v w x y z é 'd 'l 's 't 'v
C-                                
D-                                
E- ' PK MN - 'r 'm ? ! .
F- Pokémon Dollar × . / , 0 1 2 3 4 5 6 7 8 9
French and German
-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F
0-
1- Map tiles
2-
3-
4-
5- Control characters
6-
7- ╔ ═ ╗ ║ ╚ ╝
8- A B C D E F G H I J K L M N O P
9- Q R S T U V W X Y Z ( ) : ; [ ]
A- a b c d e f g h i j k l m n o p
B- q r s t u v w x y z à è é ù ß ç
C- Ä Ö Ü ä ö ü ë ï â ô û ê î      
D-         c' d' j' l' m' n' p' s' 's t' u' y'
E- ' PK MN - + ? ! .
F- Pokémon Dollar × . / , 0 1 2 3 4 5 6 7 8 9
Italian and Spanish
-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F
0-
1- Map tiles
2-
3-
4-
5- Control characters
6-
7- ╔ ═ ╗ ║ ╚ ╝
8- A B C D E F G H I J K L M N O P
9- Q R S T U V W X Y Z ( ) : ; [ ]
A- a b c d e f g h i j k l m n o p
B- q r s t u v w x y z à è é ù À Á
C- Ä Ö Ü ä ö ü È É Ì Í Ñ Ò Ó Ù Ú á
D- ì í ñ ò ó ú º & 'd 'l 'm 'r 's 't 'v  
E- ' PK MN - ¿ ¡ ? ! .
F- Pokémon Dollar × . / , 0 1 2 3 4 5 6 7 8 9
Japanese
-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F
0- イ゙ エ゙ オ゙
1- ナ゙ ニ゙ ヌ゙ ネ゙ ノ゙ マ゙ ミ゙ ム゙
2- ィ゙ あ゙ い゙ え゙ お゙
3- な゙ に゙ ぬ゙ ね゙ の゙ ま゙
4- ま゚ も゚
5- Control characters
6-
7- ╔ ═ ╗ ║ ╚ ╝
8-
9-
A-
B-
C-
D-
E-
F- ×
Legend
Standard text characters
Control characters
Diacritic characters/Map tiles
Differs between versions

Notes

0x00-0x5F

These are control characters, special code points that either print a particular multi-character string or serve some functional purpose (such as marking the end of a line of text).

Code points in this range not assigned to a specific function behave differently between versions:

  • In the Japanese versions, they print a specific kana from the main font with dakuten or handakuten in the space above it.
    • 0x01-0x1F print a katakana character from 0x81-0x9F with a dakuten diacritic (゛).
    • 0x20-0x3F print a hiragana character from 0xB0-0xCF with a dakuten diacritic (゛).
    • 0x40-0x43 print a katakana character from 0x99-0x9C with a handakuten diacritic (゜).
    • 0x44-0x5F print a hiragana character from 0xCA-0xE5 with a handakuten diacritic (゜).
  • In the Western language versions, they print a tile from VRAM addresses 0x9000 to 0x95FF. These correspond to a portion of the current tileset of the current map. For example, while the player is outside, tile #3 is the animated flower so character code 0x03 will place the animated flower in text, but in other locations (such as in battle or in a cave), a completely different tile will be displayed.

0x60-0x7F

These are additional text characters stored in VRAM addresses 0x9600 to 0x97FF. These tiles are frequently overwritten in certain contexts to render different characters, meaning the same code point can print different tiles.

  • 0x60-0x6C are bold letters originally from the Japanese font. Only and are used in the English versions, appearing on the VS screen at the start of a link battle.
  • 0x6D is a colon, which has smaller dots than the colon at 0x9C in the Western language fonts. In the Western language versions, it is only used to display total playtime and in the Pokédex rating text in the Hall of Fame.
  • 0x6E-0x6F, 0x76-0x78, and 0xE9-0xEB are Japanese hiragana and katakana. They are not used in the English version.
  • 0x70-0x73 are quotation marks.
  • 0x74 is an interpunct. It is not used in the English version.
  • 0x79-0x7E are box-drawing characters used to draw the boundaries of text boxes. In the Japanese version of Pokémon Red and Green, they lack the Poké Balls in the corners.
  • 0x7F is a space.

0x80-0xFF

These are standard text characters from the main font, stored in VRAM addresses 0x8800 to 0x8FFF. However, certain areas that need extra space for extra tiles, such as the player's Trainer Card, will still overwrite tiles in this range.

  • 0xBB-0xBF and 0xE4-0xE5 in English, 0xD4-0xDF in French and German, or 0xD8-0xDE in Italian and Spanish represent a letter with an apostrophe. These characters are used to render English, French, and German contractions and English possessives in dialogue, so that the apostrophe does not take up a separate tile.
  • 0xC0-0xC5 are letters with umlauts in Western languages other than English, which are user-enterable in the German version (ÄÖÜäöü).
  • 0xE4 and 0xE5 print the corresponding diacritic above the following character in the Japanese version.
  • 0xE8 and 0xF2 are both periods that render identically, though 0xF2 is horizontally offset by one pixel to the right as compared to 0xE8. In the Japanese games, the two code points represent visually distinct characters: 0xF2 is a decimal point and 0xE8 is punctuation. In the Western language games, 0xF2 is used for user input in Generation I, while 0xE8 is used in the name of Mr. Mime and would subsequently be used for user input in Generation II.

Overwriting characters

This section is incomplete.
Please feel free to edit this section to add missing information and complete it.
Reason: Other languages besides English

The alternate tilesets listed below are some of the alternate characters that use these codepoints. They are not necessarily a complete list of all cases in which these codepoints are overwritten.

HP bar tileset

This tileset is loaded when the game needs to draw HP bars, such as in battle and on status screens. (Note that screens that load this tileset may load additional tilesets that override some of these characters as well.)

Code point Original
character
New
character
Notes
0x62 HP: (right half) Right half of HP: (looks like ↄ:), with left tip of an HP bar
0x63 HP bar segment (empty) HP bar segment (empty)
0x64 HP bar segment (1/8) HP bar segment (1/8)
0x65 HP bar segment (1/4) HP bar segment (1/4)
0x66 HP bar segment (3/8) HP bar segment (3/8)
0x67 HP bar segment (1/2) HP bar segment (1/2)
0x68 HP bar segment (5/8) HP bar segment (5/8)
0x69 HP bar segment (3/4) HP bar segment (3/4)
0x6A HP bar segment (7/8) HP bar segment (7/8)
0x6B HP bar segment (full) HP bar segment (full)
0x6C HP bar right tip Right tip of an HP bar.
0x6D ║ Vertical text box boundary, with the right tip of an HP bar
0x6E :L Abbreviation for "Level"
0x6F Upper half arrow pointing left. Used to draw a half box pointing left, such as around the player's Pokémon's HP bar.
0x70 to Used on the Pokémon summary screen in the experience to next level display.
0x71 HP: (left half) Left half of HP: (looks like HI)
0x72 Japanese thick left quotation mark. Leftover from the Japanese version; unused in the English version.
0x73 ID Used on the Pokémon summary screen in the Trainer ID number header.
0x74 Used for Pokédex numbers and in the Trainer ID number header.
0x75 Unchanged
0x76 Box-drawing character
0x77
0x78 Upper half arrow pointing right. Used to draw a half box pointing right, such as around the opposing Pokémon's HP bar.
0x79 ╔ Unchanged
0x7A ═
0x7B ╗
0x7C ║
0x7D ╚
0x7E ╝

Other tilesets

These are some of the other characters that can replace the default characters in certain tilesets. The following is not a single tileset, but a list of instances of various tilesets that overwrite characters

Code point Original
character
New
character
Tileset Notes
0x60 Pokédex screen Feet unit symbol
0x61 Inches unit symbol
0xED Fly map
0x72 Status screen Bold P used as part of PP
0xF0 Pokémon Dollar ED Text entry screen Used as the submit button

Control characters

Control characters execute a piece of code instead of printing the tile they would correspond to from VRAM. There are three main categories of control characters:

  • Static display: Prints a fixed string (which may contain multiple characters)
  • Variable display: Prints the value of a text variable (which may contain multiple characters)
  • Print control: Directs where to print text

The following control codes are present in the Generation I games.

Code
point
Control type Description Usage
0x00 Print control Prints an error message and ends the dialogue. Not used in strings.
0x49 Print control Begins a new page of a Pokédex entry. Introduced in English Red and Blue. Used in Pokédex entries in Western languages.
0x4A Static display Prints "が " (particle ga). Introduced in Japanese Blue. Used in Pokédex entries in Japanese.
Prints "PKMN". Used in various menus in Western languages.
0x4B Print control Scrolls the standard text window up one line after player confirmation, then starts writing at the second line. Used in the implementation of 0x55. Used directly only in the corruption message in the Japanese version of Red and Green.
0x4C Print control Autoscroll: Scrolls the standard text window up one line without player confirmation, then starts writing at the second line. Used in messages for stat modification by 2 stages in all languages, and in the corruption message in the Japanese version of Red and Green.
0x4E Print control Double-spaced line break: Moves the print position two tiles below the start of the current line. Used in multiline text not printed in the standard text box, such as item descriptions and Pokédex entries.
0x4F Print control Second line: Moves the print position to the start of the second line of the standard text window. Used in multiline text printed in the standard text box, such as character dialogue.
0x50 Print control String terminator Used as a string terminator. For strings in fixed length fields, it is often used to pad shorter strings to the required length.
0x51 Print control Paragraph: Clears the standard text window after player confirmation, then starts printing in a new window. Used in text split across multiple text boxes, such as character dialogue.
0x52 Variable display Prints the player's name. Used in dialogue that refers to the player's name.
0x53 Variable display Prints the rival's name. Used in dialogue that refers to the rival's name.
0x54 Static display Prints "ポケモン" (Pokémon) in Japanese or "POKé" in Western languages. Frequently used in text that includes "POKé", such as "POKéMON" and "POKéDEX".
0x55 Print control Scroll: Scrolls the standard text window up one line after player confirmation, then starts writing at the second line. Used in scrolling multiline text printed in the standard text box, such as character dialogue.
0x56 Static display Prints "……". Used in dialogue that prints sequential ellipses in Japanese.
0x57 Print control Done: After player confirmation, closes the text window. Used at the end of dialogue printed in the standard text window.
0x58 Print control Prompt: After player confirmation twice, closes the text window. Used at the end of dialogue which is followed by some kind of choice for the player.
0x59 Variable display Prints the target of a move. If referring to the opponent's Pokémon, "Enemy " is prepended to the Pokémon's name. Used in various messages in battle.
0x5A Variable display Prints the user of a move. If referring to the opponent's Pokémon, "Enemy " is prepended to the Pokémon's name. Used in various messages in battle.
0x5B Static display Prints "PC". Used in dialogue and menus in Japanese.
0x5C Static display Prints "TM". Used in dialogue in Japanese.
0x5D Static display Prints "TRAINER". Used as the Original Trainer of in-game trade Pokémon in all languages, and in dialogue in Japanese.
0x5E Static display Prints "ROCKET". Used in dialogue in Japanese.
0x5F Print control Prints "" in Japanese or "." in Western languages and ends the Pokédex entry. Introduced in Japanese Blue. Used at the end of Pokédex entries in Japanese and English.

The following table lists the strings that each static display code prints in each language. Entries with a black background are not static display codes in that language.

Code
point
Japanese English French German Italian Spanish
 R  G   B  Y   R  B  Y   R  B  Y   R  B   Y   R  B  Y   R  B  Y 
0x4A が  PKMN
0x54 ポケモン POKé
0x56 ……
0x5B パソコン PC
0x5C わざマシン TM CT TM MT MT
0x5D トレーナー TRAINER DRES. TRAINER ALLEN. ENTREN.
0x5E ロケットだん ROCKET ROCKET ROCKET TEAM ROCKET ROCKET ROCKET

Related articles

Data structure in the Pokémon games
General Character encoding
Generation I Pokémon speciesPokémonPoké MartCharacter encoding (Stadium) • Save
Generation II Pokémon speciesPokémonTrainerCharacter encoding (StadiumKorean) • Save
Generation III Pokémon species (EvolutionPokédexType chart)
Pokémon (substructures) • MoveContestContest moveItem
Trainer TowerBattle FrontierCharacter encoding (GameCube) • Save
Generation IV Pokémon species (EvolutionLearnsets)
PokémonSaveCharacter encoding (Wii)
Generation V–present Character encoding
Generation VIII Save
TCG GB and GB2 Character encoding
This data structure article is part of Project Games, a Bulbapedia project that aims to write comprehensive articles on the Pokémon games.