Luna JRPG world map gameplay screenshot

Featured case study

Luna The Melody of the Crimson Moon logo

Custom 2D JRPG Engine

A custom Java 2D JRPG engine where rendering, input, collisions, combat, and timing systems were built directly without relying on an external game framework.

  • Java
  • OOP
  • Game Loop
  • Rendering
  • Collision System
  • Combat Logic
  • State Management
  • Tile Maps

ENGINE ANATOMY

Built from first principles

Instead of relying on a game engine, I built the core gameplay systems directly in Java. Every behavior had to be explicit: update order, rendering, collisions, combat timing, character state, and UI flow.

  1. Input
  2. Update loop
  3. Collision
  4. Combat state
  5. Rendering

Rendering loop

Controlled how the scene was updated, drawn, and refreshed without a framework managing the lifecycle.

Tile movement

Handled map-based movement, positioning, and transitions across exploration areas.

Collision handling

Defined how characters, map boundaries, and interactive elements should respond to movement.

Combat timing

Built a timed battle flow where action order, turns, and player choices had to stay synchronized.

State & UI flow

Managed character values, menus, battle actions, and interface state across gameplay moments.

GAME SYSTEMS

RPG systems beyond the engine

Beyond rendering, collisions, and combat timing, Luna also included the systems that make an RPG feel persistent: save slots, party progression, equipment rules, currency, area-specific encounters, and state-driven screens.

Save system

Stored play time, location, party levels, currency, and progression data across multiple save slots.

Equipment logic

Managed character-specific equipment, inventory quantities, stat modifiers, and item restrictions.

Progression & economy

Tracked levels, money, character growth, rewards, and RPG state across exploration and combat.

World encounters

Handled different enemies and encounter logic depending on the world map, forest, cave, and time-of-day context.

Audio & atmosphere

Used music and environmental feedback to support different gameplay moments and locations.

Luna state-driven architecture diagram

State-driven architecture sketch

Menus, world areas, and gameplay screens were organized around explicit game states, making transitions, input handling, rendering, and update cycles easier to reason about.

What it demonstrates

This project is valuable because it exposes the systems normally hidden by a game engine. It shows how I reason about sequencing, state, rendering, collision rules, persistence, progression, and interaction when every behavior has to be designed directly.

Gallery

Forest exploration screenshot from Luna
World map daytime exploration screenshot from Luna
Luna equipment menu screenshot

Tile-based forest exploration area