Character encoding (Generation I)

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

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.
- Legend
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
VandSare 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 | C | Right half of HP: (looks like ↄ:), with left tip of an HP bar
| |
| 0x63 | D | HP bar segment (empty) | |
| 0x64 | E | HP bar segment (1/8) | |
| 0x65 | F | HP bar segment (1/4) | |
| 0x66 | G | HP bar segment (3/8) | |
| 0x67 | H | HP bar segment (1/2) | |
| 0x68 | I | HP bar segment (5/8) | |
| 0x69 | V | HP bar segment (3/4) | |
| 0x6A | S | HP bar segment (7/8) | |
| 0x6B | L | HP bar segment (full) | |
| 0x6C | M | 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 | ’ | 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 | A | ′ | Pokédex screen | Feet unit symbol |
| 0x61 | B | ″ | Inches unit symbol | |
| 0xED | ▶ | ▲ | Fly map | |
| 0x72 | “ | P | Status screen | Bold P used as part of PP |
| 0xF0 | 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
| |||||||||||||||||||||||||||||||||
| This data structure article is part of Project Games, a Bulbapedia project that aims to write comprehensive articles on the Pokémon games. |