Back to Portfolio

Java RPG Game

Different screenshots from the game, showing the battle screen, overworld, different custom UIs (with custom art!)

Java RPG Game main image

Dialogue with the character's Dad

Java RPG Game screenshot 1

Machine for selecting your partner; flags ensure that you can only do this once talking to your Dad

Java RPG Game screenshot 2

Holding [Shift] will bring up a tooltip screen where the player can see what each control does, their coordinates, and key strokes

Java RPG Game screenshot 3

Creating a new save file, saving the game, and it writing the save as a .dat file which can be loaded from with ease

Java RPG Game screenshot 4

Picking up items in the overworld

Java RPG Game screenshot 5

Accessing your bag shows you all of your items sorted in different pockets

Java RPG Game screenshot 6

Items can be moved around inside pockets too to the player's liking

Java RPG Game screenshot 7

Certain items can be used on your partners, each having a different effect/UI

Java RPG Game screenshot 8

The player also has an encyclopedia that gets filled out for every new Pokémon you see and catch, seeing information about each species

Java RPG Game screenshot 9

The player's party, showing their info and can move the members around

Java RPG Game screenshot 10

There's shops in every town where the player can purchase resources

Java RPG Game screenshot 11

There are also healing stations in every town that the player can use for free

Java RPG Game screenshot 12

Each healing station also has a P.C. that stores extra Pokémon that you can swap with/organize with ease!

Java RPG Game screenshot 13

Sometimes when leveling up Pokémon will learn a new move, and if you have 4 moves already you need to replace one

Java RPG Game screenshot 14

Certain items can teach moves (infinitely) to customize moveset options. Certain ones also do things in the overworld!

Java RPG Game screenshot 15

A key item provided from the start that shows which Pokémon can be found in every area, with Pokémon you haven't caught in grey

Java RPG Game screenshot 16

Once you've captured everyone, you get a gold star for that area!

Java RPG Game screenshot 17

In-game calculator that contains every trainer, showing how much damage each Pokémon does to each other - doing the math for you!

Java RPG Game screenshot 18

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.

Mar 2023 - Present

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!