CV<AdrianYip>::SelectedWork::get<PokemonNiosV>()
::desc<"Pokémon RPG with Bare-Metal C">
::stack<C, NiosV, DE1_SoC, VGA>;


Battle

PokemonNiosV::overview();

Built with AnRi1202, where I handled the game engine, rendering pipeline, and animations, and they handled the map system, audio, and PS/2 input. A Pokémon RPG written in C on bare-metal DE1-SoC, with no OS, game engine, or drivers. I researched the actual formulas Nintendo and Game Freak use (EXP curves, catch rates, type effectiveness, damage calculations) [1] and implemented them to make gameplay match the real games.

With no OS to manage timings, everything runs from a single main loop: a 36-state machine handles the overworld, battle system with status effects and party management, catching, PC storage, and a Pokédex across 16 Pokémon and 43 moves, with hardware driven by direct register writes. All game data lives in compile-time static lookup tables, with no heap allocation.

Graphics write RGB565 pixels directly onto a double-buffered VGA framebuffer, at a deterministic 20 fps so all animations, text, and effects resolve within one frame across all 36 game states. Sprites are sourced from community resources [2–5] and rendered with colour keying for transparency; Pokéball throw arcs use Quadratic Bézier and projectile motion formulas.


Pokédex page 1 Pokédex page 2

Party PC Storage

Full gameplay walkthrough demo