Android / WearOS
SmartPokeWalker
An expanded Pokéwalker reimagined for WearOS - high-accuracy step tracking, custom Pokémon data extracted from ROM, and peer-to-peer monster trading over BLE/GATT with no internet required.
Overview
In 2009 and 2010, Pokemon HeartGold/SoulSilver came with an additional peripheral in the box. The Pokewalker was a beloved peripheral, a wearable pedometer that let you take your Pokémon for a walk, earn watts, and catch wild Pokémon. SmartPokeWalker reimagines this concept for modern WearOS smartwatches, with expanded mechanics and wireless trading between devices.
Step Tracking
WearOS provides access to the Android Sensor API, including the TYPE_STEP_COUNTER and TYPE_STEP_DETECTOR sensors.
SmartPokeWalker uses a hybrid approach:
TYPE_STEP_COUNTERfor cumulative accuracy (this sensor is hardware-accelerated and drift-resistant on most devices)TYPE_STEP_DETECTORfor real-time event feedback (satisfying immediate UI response when a step registers)
Steps are accumulated into watts using the original Pokéwalker formula, which are then spent on in-game actions.
ROM Data Extraction
Rather than reimplementing Pokémon data by hand, I wrote a Python pipeline using ndspy to extract and decode the Sprite data (decoded from the DS 4bpp tile format to usable bitmaps) directly from the HeartGold/SoulSilver ROM:
The extracted data is bundled into the WearOS app as a set of local resources, so no network connection is needed for any gameplay.
Monster Model Adaptability
The monster data layer is deliberately decoupled from the ROM extraction pipeline. Rather than hardcoding HeartGold/SoulSilver data into the application, the SQLite schema treats monster definitions as generic records.
This separation means the application is not fundamentally tied to any one game's data. Any conforming data source can populate the same schema and be rendered and played with identically.
Custom monster import (coming soon). An import feature is in the design phase that will allow users to define their own monsters via a structured format, supplying custom monster definitions and images. Custom sprites will be resized and converted to the app's internal bitmap format at import time, so hand-drawn or pixel art images can be used directly without manual preprocessing. This opens the door to entirely fan-made rosters alongside or in place of the extracted ROM data.
Peer-to-Peer Trading
The original Pokéwalker used infrared for trading. SmartPokeWalker replaces this with BLE GATT, which is well-supported on WearOS. The trading protocol:
- Both devices advertise a custom GATT service UUID
- Either player initiates a scan and connects to a peer
- Pokémon data is exchanged using custom GATT characteristics
- Both sides confirm the trade before committing the write to local storage
With this you can trade your monsters with your friends nearby