Loading
Personal Project
Eurekiel: The 2-Journey

A 2.5D turn-based RPG built in C++ on a custom engine, using an Octopath Traveler-inspired isometric presentation. The project implements turn-based combat, attribute calculations, sprite animation, and an XML-driven content pipeline.

Gameplay trailer

0:00
/0:00
Eurekiel: The 2-Journey Official Gameplay Trailer

Core systems

The project is built around several gameplay and engine systems:

  • Turn-based combat: A state machine orchestrates turn flow through Round, SkillSelection, SkillExecution, and BattleSettlement states.
  • Attributes: Character stats (Health, Mana, Attack, Defense, Speed) drive initiative ordering, damage formulas, and skill scaling.
  • Skills: Abilities define custom animations, mana costs, and status effects integrated with combat state transitions.
  • Content pipeline: XML files configure characters, skills, dungeons, and encounters without recompiling C++ source.
  • 2.5D lighting: Dynamic lighting adjusts sun direction, intensity, and ambient light alongside depth-sorted sprite rendering.
  • Physics and collision: Actor movement uses depth-aware collision in 2.5D space.
  • Animation: A state-driven animation controller synchronizes playback with combat turn phases.
  • Interface: HUD widgets cover combat actions, skill selection, targeting, turn queues, and dungeon progression.

System architecture

graph TD
    Game["Game - State Machine"]
    Clock["Clock - Time Management"]
    PlayerCtrl["PlayerController - Input Handling"]
    TurnBase["TurnBaseSubsystem - Turn Management"]
    BattleState["Battle States - State Stack"]
    Initiative["Initiative Queue - Action Ordering"]
    Character["Character - Battle Entity"]
    Skills["Skill System - Ability Execution"]
    Buffs["Buff System - Status Effects"]
    PakData["PakData - XML Parsing"]
    Definitions["Definitions - Character/Skill/Dungeon"]
    Map["Map System - Scene Generation"]
    Scene["Scene - 2.5D Rendering"]
    Animation["Animation System - State-Driven Playback"]
    Lighting["Lighting System - Dynamic Illumination"]
    WidgetSubsystem["WidgetSubsystem - Widget Management"]
    BattleUI["Battle UI - HUD Widgets"]
    SkillUI["Skill UI - Selection & Targeting"]

    Game --> TurnBase
    Game --> PlayerCtrl
    Game --> Clock
    Game --> Scene
    TurnBase --> BattleState
    BattleState --> Initiative
    Initiative --> Character
    Character --> Skills
    Character --> Buffs
    Character --> Animation
    Skills --> Definitions
    Character --> Definitions
    PakData --> Definitions
    Map --> PakData
    Scene --> Map
    Scene --> Lighting
    Scene --> Animation
    WidgetSubsystem --> BattleUI
    WidgetSubsystem --> SkillUI
    BattleUI --> Character
    SkillUI --> Skills

Turn-based combat system

The TurnBaseSubsystem drives combat through a hierarchical state machine. Combat cycles through predictable phases: round initialization determines turn order, skill selection accepts player input, skill execution resolves damage and effects, and battle settlement evaluates victory or defeat.

Initiative and action ordering

Characters roll initiative at the start of battle based on their Speed attribute. The system maintains an ordered queue for action dispatch, updating positions when actions or modifiers alter turn timing.

Battle target selection and deselection mechanics

Skill execution pipeline

Skills trigger character-specific animations tied to combat states. The pipeline checks prerequisites like mana and cooldowns, applies damage or buffs, and broadcasts events to update the interface.

0:00
/0:00
Character-specific skill animations with synchronized combat state
Healing skill execution and effect application

2.5D scene and lighting system

The dynamic lighting system adjusts sun direction, sunlight intensity, and ambient color in real time to shift scenes from bright day to dusk.

0:00
/0:00
2.5D scene rendering with isometric perspective
0:00
/0:00
Dynamic lighting system with adjustable sun direction, intensity, and ambient light
0:00
/0:00
Battle scene camera effects and transitions

Scene transitions and level progression

The game shifts between exploration and battle scenes by repositioning the camera, updating lighting parameters, and switching the active UI context.

0:00
/0:00
Scene transition from exploration to battle

User interface system

The UI layer manages player interactions across the main menu, skill and target selection, turn order tracking, and dungeon progression.

0:00
/0:00
Main menu UI and navigation
Battle Action Sequence UI
Battle UI displaying action sequence and character status

Level progression and unlocking

Dungeon progression tracks completed encounters and unlocks subsequent stages, providing visual indicators for locked and unlocked states.

0:00
/0:00
Locked level with UI notification
0:00
/0:00
Level unlock notification and progression

Data-driven architecture

XML configuration files drive content definitions. Character files specify baseline attributes, skill lists, and animation mappings. Skill files declare costs, cooldowns, and effects, while dungeon files configure enemy encounters.

XML configuration system

<!-- Character Definition Example -->
<Character name="Warrior" health="100" mana="30" attack="15" defense="10" speed="8">
  <Skill name="BasicAttack" manaCost="0" cooldown="0" />
  <Skill name="PowerStrike" manaCost="20" cooldown="2" />
</Character>

<!-- Dungeon Definition Example -->
<Dungeon name="Forest Ruins" scene="ForestScene" preRequest="None">
  <Enemy name="Goblin" healthMultiplier="1.0" damageMultiplier="1.0" />
  <Enemy name="Orc" healthMultiplier="1.5" damageMultiplier="1.2" />
</Dungeon>

Map generation from image data

Maps can also be generated from image files where pixel colors map to tile IDs, allowing level layouts to be drawn in image editors.

Design decisions

Modular state stack

The combat loop uses a state stack where each combat phase (initiative, input, execution, settlement) runs independently. This keeps turn sequencing logic separate from skill resolution.

Attribute-driven mechanics

Combat calculations read directly from entity attributes rather than maintaining separate combat formulas per character class.

Configuration decoupling

XML definitions allow tweaking character balance, encounters, and skill parameters without rebuilding the executable.

Event-driven updates

Combat systems communicate state changes through events, decoupling gameplay rules from UI animations and sound triggers.

Debug tooling

Major systems include debug views and console triggers to inspect turn queues, trace attribute modifiers, and verify skill outcomes directly.