Pokemon Red Memory Map

Documentation of all RAM addresses currently read by the agent.

Currently Used Memory Addresses

Player State

Address Size Description Used In
0xD35E 1 Current map ID get_location()
0xD361 1 Player Y position (tile) get_location()
0xD362 1 Player X position (tile) get_location()
0xD369 1 Map width (blocks) get_location()
0xC109 1 Player facing direction get_facing()
0xD356 1 Badge flags (8 bits) get_badges_text()
0xD347 3 Money (BCD encoded) get_money()
0xD31D 1 Inventory count get_inventory()
0xD31E Var Inventory items (ID,Qty) get_inventory()

Map Navigation State

Address Size Description Used In
0xD365 1 Last Map ID (warp src) get_map_state()
0xD887 1 Wild Encounter Rate get_map_state()

Event Flags

Address Size Description Used In
0xD803 1 SS Anne Here (Bit 0) get_event_flags()
0xD5F3 1 Have Town Map? get_event_flags()
0xD60D 1 Have Oak's Parcel? get_event_flags()
0xD72E 1 Got Lapras in Silph Co? get_event_flags()

Party Data

Address Size Description Used In
0xD163 8 Party count + species IDs get_party_text()
0xD16B+ 44×6 Pokemon data (HP, level, moves, etc.) get_party_text()
0xD2B5+ 10×6 Pokemon nicknames get_party_text()

Sprite/NPC Data

Address Size Description Used In
0xC100-C1FF 256 Sprite table (16 sprites × 16 bytes) get_sprites()
0xC1x0 1 Picture ID (0 = disabled) get_sprites()
0xC1x4 1 Y screen position get_sprites()
0xC1x6 1 X screen position get_sprites()

Text/Dialog State

Address Size Description Used In
0xD355 1 Text speed setting get_text_state()
0xD358 1 Text printing flags get_text_state()
0xC3A0-C507 360 Tile screen buffer (dialog text) get_dialog_text()

Battle State

Address Size Description Used In
0xD057 1 In battle flag get_battle_state()
0xD05A 1 Battle type get_battle_state()
0xCCD5 1 Turn count get_battle_state()
0xCCDB 1 Move menu type get_battle_state()

Detailed Battle Data

Address Size Description Used In
0xCFE5 1 Enemy Species ID get_enemy_pokemon()
0xCFE6 2 Enemy Current HP (Big Endian) get_enemy_pokemon()
0xCFE8 1 Enemy Level get_enemy_pokemon()
0xCFED 4 Enemy Moves (4 bytes) get_enemy_pokemon()
0xD014 1 Player Active Party Index get_active_battle_pokemon()
0xD015 2 Player Active HP (Big Endian) get_active_battle_pokemon()
0xD022 1 Player Active Level get_active_battle_pokemon()
0xD01C 4 Player Active Moves get_active_battle_pokemon()
0xD062 3 Player Status Flags get_battle_status_flags()
0xD067 3 Enemy Status Flags get_battle_status_flags()
0xCD1A 6 Player Stat Modifiers get_stat_modifiers()
0xCD2E 6 Enemy Stat Modifiers get_stat_modifiers()
Address Size Description Used In
0xCC24 1 Cursor Y position (screen) get_menu_state()
0xCC25 1 Cursor X position (screen) get_menu_state()
0xCC26 1 Selected menu item get_menu_state()
0xCC28 1 Last menu item ID get_menu_state()
0xCC2A 1 Previously selected item get_menu_state()
0xCC2B 1 Party/Bill's PC cursor get_menu_state()
0xCC2C 1 Item screen cursor get_menu_state()
0xCC2D 1 START/battle menu cursor get_menu_state()
0xCC35 1 Item highlighted with Select get_menu_state()
0xCC36 1 First displayed menu item ID get_menu_state()

Player Movement State

Address Size Description Used In
0xD700 1 Bike speed (0 = off) get_player_movement_state()
0xC100 1 Player picture ID get_player_movement_state()
0xC101 1 Movement status (0-3) get_player_movement_state()
0xC102 1 Sprite image index get_player_movement_state()

Movement Status Values:

  • 0 = Uninitialized
  • 1 = Ready (idle)
  • 2 = Delayed
  • 3 = Moving

Name Entry State

Address Size Description Used In
0xC3A0-C507 360 Tile screen buffer get_name_entry_state()
0xCC24 1 Cursor Y on screen get_name_entry_state()
0xCC25 1 Cursor X on screen get_name_entry_state()
0xCC26 1 Selected character index get_name_entry_state()
0xCC28 1 Grid size (last item ID) get_name_entry_state()

Text Encoding

Pokemon Red uses custom tile indices for text:

Range Characters
0x50 String terminator
0x7F Space
0x80-0x99 A-Z (uppercase)
0xA0-0xB9 a-z (lowercase)
0xF6-0xFF 0-9 (numbers)
0xE6 ?
0xE7 !
0xE8 .

See decode_pokemon_text() in pyAIAgent/game/data.py for full mapping.


Battle Type Values

Value Meaning
0xF0 Wild battle
0xED Trainer battle
0xEA Gym leader battle
0xF3 Final battle
0xF6 Defeated trainer
0xF9 Defeated wild Pokemon
0xFC Defeated champion/gym

Sources