Java RPG Game
A fully custom turn-based RPG built entirely in Java from the ground up, inspired by a childhood dream to bring a hand-drawn Pokémon-style game to life. This project has evolved into a massive, self-contained engine supporting exploration, dynamic NPCs, stat-based combat, evolving creatures, and a branching storyline—entirely programmed by a solo developer over two years of continuous development.
Unlike ROM hacks that modify existing Pokémon games, this project features a completely original engine with its own rendering system, UI framework, battle logic, and save/load system. All core mechanics—from wild encounters and trainer AI to item bags, Pokédex systems, and map warping—are built from scratch. Maps, routes, towns, and story elements are adapted from over two notebooks of world-building created as a kid.
Key gameplay systems include:
-
Wild encounters, trainer battles, stat growth, evolutions, type matchups
-
Save/load using
.dat
files, persistent game state, and progression flags -
Inventory UI with multi-tab bag sorting, item movement, and item use logic
-
PC system for party management and a Pokédex that tracks seen/caught creatures
-
Tools like a DexNav for area-based capture progress, and an in-game damage calculator for competitive strategy
-
Cutscenes, branching dialogue trees, and scripted story events
Over 50 players have joined the growing community, and regular updates are shared through a dedicated Discord server. Sprites and story content are contributed by commissioned artists and writers, while the game's full logic remains entirely Java-coded. The game runs natively and requires only Java to play, with 7 out of 8 gyms complete as of now and more content being added daily.
Technologies Used:
Core Language:
Java 8
(pure Java with no external frameworks)
Game Engine Design:
Custom engine supporting tile-based movement, collision detection, UI rendering, and turn-based combat
Data Management:
Uses .dat
files with ObjectInputStream
and ObjectOutputStream
for full object serialization of game state, including party, items, flags, maps, and trainer data
UI/UX:
Built with JPanel
and custom-drawn Graphics2D
interfaces for battles, inventory, Pokédex, shops, and more
AI & Battle Logic:
Trainer AI for move selection, decision making and switching in/out, type effectiveness, stat handling, and evolution conditions
Scripting & World Events:
Flag-driven progression for cutscenes, dialogue trees, warp logic, and story progression control
Community & Distribution:
Playable .jar
files distributed via a Discord server, with active playtesting and feedback loop
Running in grass sometimes will lead to a wild encounter
Walking on warp tiles will transition you to other maps
Catching a wild encounter!
NPC trainers will spot you for a battle - with custom AI making their move decisions!
Introducing other characters - a neighbor boy who will be your rival trainer
Going to the next town seeing the gym leader (who is a postal carrier) and asking for your help
After delivering the packages, him telling you there's one more to deliver (showing dynamic conversations based on the game state)
Beating the thug who was guarding the warehouse and him giving you a key
Evolving into a stronger and more powerful form mid-fight!
Custom cutscene meeting your other rival
Showing a different town and having to fix their power outage
Battles against static Pokémon - which occur frequently throughout the game!