- Faithful to Ultima IV style
- Modular map system: Overworld, Village, Dungeon, Combat
- Tile-based movement and maps
- Turn-based combat system
- Dialogue trees from NPCs
- Menu screen with options and save/load
- Data-driven design (JSON or CSV for items, maps, NPCs)
Main (root)
├── MenuScreen (Scene)
├── GameManager (Singleton)
├── World (Node)
│ ├── Overworld (TileMap)
│ ├── Village (TileMap)
│ ├── Dungeon (TileMap)
│ └── Combat (Turn-based scene)
├── Player (KinematicBody2D)
├── UI (CanvasLayer)
│ ├── DialogBox
│ ├── Inventory
│ └── StatusBar
| Mode | Scene/State | Notes |
|---|---|---|
| Menu | MenuScreen | Title, start/load game |
| Overworld | TileMapScene | Shows large world |
| Village | TileMapScene | Houses NPCs, shops |
| Dungeon | TileMapScene | Combat encounters, puzzles |
| Combat | TurnBasedCombatScene | Party vs enemies |
| Menu/Inventory | UI Popup | See items, stats, virtues |
- Controlled via a GameManager singleton.
- States:
"MENU","OVERWORLD","VILLAGE","DUNGEON","COMBAT","DIALOG". - Switching scenes does not delete player/inventory data; it's preserved in the GameManager.
- Pixel art, 16x16 or 32x32 tiles.
- Retro CRT-style optional shader.
- Tilemaps for world/dungeon/village.
| Key | Action |
|---|---|
| Arrows / WASD | Move |
| Enter / Space | Interact |
| I | Open Inventory |
| Esc | Pause/Menu |
| Typing | Dialog responses |
- TileMaps loaded via
.tscnor.json. - Easy to add new maps by dropping them into a folder and registering in a config file:
{
"maps": [
{ "id": "overworld", "scene": "res://maps/overworld.tscn" },
{ "id": "village_1", "scene": "res://maps/village_1.tscn" }
]
}Stored in a JSON file (items.json):
{
"healing_potion": {
"name": "Healing Potion",
"effect": "heal",
"value": 20,
"icon": "res://icons/potion.png"
}
}Stored in an NPC file (npc.json):
"valewind": [
{
"NAME": "I am a guard.",
"JOB": "I am a guard.",
"HEALTH": "Strong.",
"GOLD": "Bribery is illegal.",
"DESCRIPTION": "You see a strong guard.",
"GENDER": "Male",
"AGE": 33,
"location": {
"x": 17,
"y": 16
},
"CLEAN_NAME": "Guard",
"SPRITE": "guard"
},...- Turn-based, player party vs enemy group.
- Initiative queue (AGI or random roll).
- Tactical, movement on a tile map as well as selection of combat action
- Implement as a self-contained scene to load when combat is triggered.
- Data for enemies loaded from
enemies.json.
- Player earns virtue points based on actions (e.g., Honesty, Compassion).
- Quests and endings influenced by virtues.
res://
├── scenes/
│ ├── overworld/
│ ├── settlement/
│ ├── dungeon/
│ └── combat/
├── data/
│ ├── items.json
│ ├── dialogs/
│ └── maps.json
├── res /
│ ├── sprites/
│ ├── u4graphics-master/ <-- Tiles for the world
│ └── sounds (other name)/
├── scripts/
│ ├── game_manager.gd
│ ├── ...
│ └── combat.gd
- Basic TileMap + Player movement
- GameManager singleton
- Menu screen
- Map loading system
- Dialog system from JSON
- NPC interaction
- Dialog triggers external events
- Persist NPCs from every scene change
- Item system with JSON
- Simple inventory UI
- Basic item effects (e.g., healing)
- Set up Party system
- Turn-based combat framework
- Basic AI
- Load enemies from JSON
- Add new maps (village, dungeon)
- Add quests and virtue system
- Polish with sound, UI and effects
- IP Cleanup
- Add a unique storyline
- Add unique artwork
- Make a plot spanning multiple area
- End the game