Goal
I am building a real-time Pokemon Emerald tracker for OBS.
The long-term goal is to read live game data directly from emulator memory and eventually display:
Current party Pokemon
HP values
Levels
Fainted status
Inventory information
Potentially badges and run statistics
The tracker should work in real time while the game is running.
Current Setup
RetroArch 1.21.0
mGBA core
Python 3.13
UDP Network Commands enabled
Command Port: 55355
I can successfully communicate with RetroArch using UDP commands.
Working commands include:
VERSION
GET_STATUS
READ_CORE_MEMORY
Example:
READ_CORE_MEMORY 02000000 32
returns valid memory data.
Current Progress
I have confirmed that live memory reading works.
I am currently exploring the Emerald memory layout and trying to identify useful gameplay data.
So far I have:
Created memory dump tools in Python.
Compared memory snapshots before and after gameplay actions.
Identified reproducible memory changes when purchasing items (Poké Balls).
Built a live memory watcher that continuously monitors selected addresses.
Current Problem
I am trying to locate stable gameplay values such as:
Money
Inventory counts
Party data
I found a candidate around:
0202065C
but live monitoring showed that the value changes constantly during menu interactions and shop dialogs, suggesting it is probably a menu/script state variable rather than actual money or inventory data.
What I Need Help With
I am looking for information about:
Pokemon Emerald RAM structure
SaveBlock1 / SaveBlock2 locations
Party data locations
Inventory data locations
Money offsets
Emerald-specific memory maps
Anyone who has experience reading Emerald RAM through RetroArch’s READ_CORE_MEMORY command
Any documentation, existing projects, or research would be extremely helpful.