For fifteen years, the greatest Pokémon remake in history has been trapped behind a dual-screen design wall. Released in 2009 for the Nintendo DS, Pokémon HeartGold and SoulSilver represent the undisputed zenith of 2D Pokémon game design: two sprawling regions (Johto and Kanto), sixteen gym badges, legendary Pokémon roaming the wilderness, and your favorite monster walking right beside you in the overworld. But for anyone trying to experience SoulSilver on modern hardware—whether an OLED Steam Deck, a high-refresh PC monitor, a Mac, or an Android handheld—emulation has always meant painful compromises: ugly side-by-side splits, vertical stacks flanked by massive black bars, or frantic hotkey tapping to toggle between screens.
Enter ssrecomp. Developed by ClickingMaster, this ambitious project statically recompiles Pokémon SoulSilver into native C++, liberating the classic RPG from interpretive emulation while solving the single-screen problem once and for all through a context-aware "Merged" UI, true 16:9 widescreen overworld rendering, and 60 FPS motion interpolation.
The Dual-Screen Curse, Finally Cured
Every handheld gamer who has tried playing Nintendo DS titles on a standard 16:9 device knows the frustration. The DS hardware architecture was built around two 256x192 resistive touch displays. On a single modern screen, you are forced to choose your poison:
- Side-by-Side: Leaves massive wasted letterboxing on the top and bottom, shrinking the actual game view down to postage-stamp dimensions.
- Stacked Vertical: Crushes a dual-screen tower onto a widescreen display, resulting in gigantic pillarbox bars on the left and right.
- Screen Swapping: Dedicating a controller button to toggle the bottom screen in and out of view—a clunky band-aid that completely breaks the flow of combat and navigation.
ssrecomp solves this with an ingenious, context-aware Merged Single-Screen System. Rather than blindly displaying both screens, the engine inspects which game functions are executing in real time (using application hooks mapped from the pret/pokeheartgold decompilation) and reads per-pixel layer flags directly from the 2D renderer.
The result is a unified, single-screen masterpiece:

How the Merged View Adapts Dynamically:
- Battles: The 3D battle scene fills the entire display with edge-blended horizontal backdrop expansion. When choosing an action, the touch-screen buttons (FIGHT, BAG, POKéMON, RUN) and your Pokémon's four moves are lifted off the bottom screen and presented cleanly along the lower edge of the screen as an unobtrusive action strip. You navigate seamlessly with standard D-pad/stick controls and face buttons (A selects, B cancels), with the frontend translating your inputs into virtual touch coordinates behind the scenes.
- Overworld Navigation: The top screen commands the full display. When an NPC asks a question or a shopkeeper prompts you for a transaction, the Yes/No and dialogue confirmation buttons float elegantly on the right side directly above the message box.
- The X-Menu: Tapping the X button slides the lower-screen utility menu out as a sleek side-dock panel next to the overworld rather than hijacking the entire display.
- Pokédex, Bags, PC Storage & Pokémon Summary: Multi-screen menus are fused into coherent two-column pages. The Pokédex presents 3D sprite models, typing, and regional habitat data side-by-side with the scrollable index; the Bag pairs inventory categories with live description cards underneath.

Widescreen 3D Overworld: Beyond 256x192
The visual leap in ssrecomp isn't just about interface repositioning; the overworld itself has been fundamentally rebuilt for modern displays.
In standard DS emulation, stretching the 3D overworld to 16:9 produces grotesque horizontal distortion. ssrecomp includes a custom widescreen 3D rendering pipeline (melonDS/src/GPU3D_Wide.cpp). Rather than stretching pixels, the engine intercepts the game's 3D polygon submission queue prior to clipping. It recalculates the horizontal viewport boundary, expanding the field of view so that geometry lying to the left and right of the original 4:3 DS window is fully rendered.

Crucially, the engine also patches the game's internal BoxTest culling logic, ensuring that trees, buildings, and landmarks on the peripheral wings don't pop into existence at the old 4:3 boundaries. Powered by a dedicated multithreaded software rasterizer, players can dial internal world detail up to 1440p lines.

True 60 FPS Motion Interpolation
Original DS Pokémon titles were hardcoded to update their 3D scenes at 30 frames per second. Because of the isometric camera's perspective tilt, character movement on the original handheld scrolled in uneven 2-1-2-1 pixel jumps.
ssrecomp implements a sophisticated frame-interpolation engine. By caching the transformed polygon vertices of consecutive frames and matching identical geometry via scene-movement voting vectors, the 3D pipeline renders synthetic in-between frames. The camera glides across Johto at a silky, butter-smooth 60 frames per second, with walking movement advancing at exactly 1 pixel per frame.
Because the interpolation operates strictly on the display presentation layer, game simulation logic, encounter tables, battle timers, and RNG remain 100% cycle-accurate to retail hardware.
Static Recompilation Architecture: 1.69 Million Instructions
Under the hood, ssrecomp represents a monumental technical achievement. Leveraging the linker symbol maps generated by the pret/pokeheartgold disassembly project, the recompiler parses the retail ARM9 binary into 121 code sections across the main module, ITCM blocks, and swappable overlays. Exactly 1,685,104 instructions are translated into labeled C++ chunk functions.
- Inlined Execution: Over 97% of common ARM and Thumb instructions (arithmetic operations, branch logic, loads, and stores) are translated into direct, inlined C++ statements, bypassing the traditional interpreter dispatch loop.
- melonDS 1.1 Core: Hardware subsystems—including the 2D graphics engine, ARM7 coprocessor, audio mixing, cartridge bus, and flash save storage—are managed by an embedded, patched melonDS core.
- Zero Game Code Distributed: The repository strictly enforces clean-room distribution. No Nintendo assets, ROMs, or proprietary code are contained in the repository. Users provide their own verified retail SoulSilver US ROM (
sha1: f8dc38ea20c17541a43b58c5e6d18c1732c7e582), which the automated setup utility uses to compile their personal native executable.
Play It Anywhere: Steam Deck, PC, Mac & Android
The project ships with turnkey setup utilities supporting virtually every major gaming platform:
- Steam Deck & Linux: Standalone x86_64 and aarch64 AppImages (fully functional on Raspberry Pi 4/5). Drop the executable into Steam as a Non-Steam Game, enable Game Mode, and enjoy native controller navigation with zero setup.
- Windows: Native 64-bit compilation via MinGW/UCRT64 with hardware-accelerated SDL2 and OpenGL ES rendering.
- macOS: Native Apple Silicon (M-series) and Intel binaries targeting Apple Metal with full Retina display scaling.
- Android: The setup utility can cross-compile a standalone signed Android APK with built-in touchscreen overlay controls that automatically hide when a Bluetooth or USB controller is connected.
The era of awkward dual-screen compromises is officially over. Pokémon SoulSilver has never looked, felt, or played better.
Check out the source code, build guides, and setup tools at GitHub: ClickingMaster/ssrecomp.