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


A custom Java 2D JRPG engine where rendering, input, collisions, combat, and timing systems were built directly without relying on an external game framework.
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.
Controlled how the scene was updated, drawn, and refreshed without a framework managing the lifecycle.
Handled map-based movement, positioning, and transitions across exploration areas.
Defined how characters, map boundaries, and interactive elements should respond to movement.
Built a timed battle flow where action order, turns, and player choices had to stay synchronized.
Managed character values, menus, battle actions, and interface state across gameplay moments.
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.
Stored play time, location, party levels, currency, and progression data across multiple save slots.
Managed character-specific equipment, inventory quantities, stat modifiers, and item restrictions.
Tracked levels, money, character growth, rewards, and RPG state across exploration and combat.
Handled different enemies and encounter logic depending on the world map, forest, cave, and time-of-day context.
Used music and environmental feedback to support different gameplay moments and locations.

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.
Tile-based forest exploration area