Initial scaffold: Nakama backend, Godot client, content schema

Sets up the Step 1 (Project Foundation) and Step 2 (Content Schemas) scaffold
from the implementation sequence. Includes Docker Compose stack, Nakama
TypeScript module stubs, PostgreSQL migration, Godot 4 project shell with
scene stubs and NakamaClient singleton, YAML content schemas for all entity
types, and example data for 3 characters, 2 jobs, and all 7 core resources.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
caoimhinr 2026-06-02 23:33:06 +02:00
commit fb00954954
37 changed files with 2730 additions and 0 deletions

View file

@ -0,0 +1,80 @@
# Ember Ashvale / Ezra Ashvale
# SR | Glass Cannon | Lumberjack
# The player's first realistic gacha pull in the standard banner.
# SR rarity — reliable specialist who makes the early economy viable.
# Designed to demonstrate that non-SSR characters stay meaningfully useful:
# her lumberjack bonus feeds the wood bottleneck that the manual work system
# is built around.
$schema: "xyvera/content-schema/character/v1"
id: ember_ashvale
name:
female: "Ember Ashvale"
male: "Ezra Ashvale"
rarity: SR
combat_role: glass_cannon
profession: lumberjack
region_origin: heartwood_vale
element: fire
personality: energetic_optimist
base_stats:
hp: 680
attack: 195
defense: 60
speed: 115
crit_rate: 0.10
crit_damage: 1.8
skills:
- id: blaze_cut
name: "Blaze Cut"
type: active
description: >
Deals 220% ATK as fire damage to one enemy. If the target is on fire (burning
status), also deals 80% ATK bonus damage.
max_level: 5
upgrade_cost_per_level:
knowledge: 25
gold: 180
- id: sawdust_flurry
name: "Sawdust Flurry"
type: passive
description: >
Passive: each time Ember defeats an enemy, she gains +8% attack speed for
2 turns (stacks up to 3 times).
max_level: 3
upgrade_cost_per_level:
knowledge: 15
gold: 120
- id: quick_harvest
name: "Quick Harvest"
type: passive
description: >
Village passive: when assigned to a Lumber Camp slot, adds a 20% chance per
hour to produce a bonus burst of wood equal to 30 minutes of base output.
This bonus chance does not require manual input.
max_level: 5
upgrade_cost_per_level:
knowledge: 10
gold: 80
suitability_bonuses:
primary_profession_multiplier: 1.5
secondary_professions:
- farmer # comfortable outdoors
bond_hooks:
- cheerful
- mentor_target
- competitive
lore_summary: >
An apprentice woodcutter who followed a glowing deer into a forest and came out
somewhere entirely different. She's still looking for the deer, but in the meantime
the logs aren't going to cut themselves.

View file

@ -0,0 +1,77 @@
# Lyra Stoneheart / Leon Stoneheart
# SSR | Tank | Miner
# Starter-region character. Designed to anchor the early assignment economy:
# she is the primary miner for the PoC and functions as the front-row tank
# in combat. Her kit is intentionally simple — the first character the player
# will level up and use to validate both the assignment and combat systems.
$schema: "xyvera/content-schema/character/v1"
id: lyra_stoneheart
name:
female: "Lyra Stoneheart"
male: "Leon Stoneheart"
rarity: SSR
combat_role: tank
profession: miner
region_origin: heartwood_vale
element: earth
personality: stoic_protector
base_stats:
hp: 1200
attack: 80
defense: 160
speed: 70
crit_rate: 0.04
crit_damage: 1.4
skills:
- id: stone_resolve
name: "Stone Resolve"
type: passive
description: >
Passive: when HP drops below 40%, gain a shield equal to 15% of max HP.
Triggers once per combat.
max_level: 5
upgrade_cost_per_level:
knowledge: 20
gold: 150
- id: seismic_slam
name: "Seismic Slam"
type: ultimate
description: >
Deals 180% ATK as earth damage to all front-row enemies and reduces their
defense by 20% for 2 turns.
max_level: 5
upgrade_cost_per_level:
knowledge: 40
gold: 300
- id: miners_grit
name: "Miner's Grit"
type: passive
description: >
Village passive: when assigned to a Mining slot, stone output gains an
additional +10% per skill level on top of the suitability multiplier.
max_level: 5
upgrade_cost_per_level:
knowledge: 15
gold: 100
suitability_bonuses:
primary_profession_multiplier: 1.6 # slightly above default 1.5 due to Miner's Grit
secondary_professions:
- construction # knows how to work with stone
bond_hooks:
- loyalty
- protector
- stoic
lore_summary: >
A former quarry foreman who arrived in this world mid-shift, still gripping her pickaxe.
She doesn't talk much about home, but she builds like she's trying to recreate it.

View file

@ -0,0 +1,79 @@
# Sable Quillworth / Sebastian Quillworth
# SR | Support | Researcher
# The knowledge-economy anchor. Researchers unlock skill upgrades and building
# improvements, so this character is critical to demonstrating that the
# profession assignment system has strategic depth beyond raw resource output.
# Support role in combat — placed in the backrow, buffs the team.
$schema: "xyvera/content-schema/character/v1"
id: sable_quillworth
name:
female: "Sable Quillworth"
male: "Sebastian Quillworth"
rarity: SR
combat_role: support
profession: researcher
region_origin: heartwood_vale
element: "null"
personality: methodical_curious
base_stats:
hp: 760
attack: 95
defense: 110
speed: 90
crit_rate: 0.05
crit_damage: 1.5
skills:
- id: analytical_boost
name: "Analytical Boost"
type: active
description: >
Increases all allies' ATK by 18% and DEF by 12% for 3 turns. At skill
level 3+, also removes one debuff from a random ally.
max_level: 5
upgrade_cost_per_level:
knowledge: 30
gold: 200
- id: field_notes
name: "Field Notes"
type: passive
description: >
Passive: at the start of each combat round, Sable gains 1 knowledge
(village resource) per enemy still alive (capped at 5 per round, 20 per combat).
Knowledge gained this way is credited to the player's balance at combat end.
max_level: 3
upgrade_cost_per_level:
knowledge: 20
gold: 150
- id: deep_study
name: "Deep Study"
type: passive
description: >
Village passive: when assigned to a Research Post, knowledge output is
increased by 30% and skill upgrade costs for all characters are reduced by 5%.
The cost reduction stacks additively if multiple researchers are assigned.
max_level: 5
upgrade_cost_per_level:
knowledge: 35
gold: 250
suitability_bonuses:
primary_profession_multiplier: 1.5
secondary_professions: [] # purely academic; no secondary bonus
bond_hooks:
- intellectual
- reserved
- hidden_warmth
lore_summary: >
A librarian's assistant who was cataloguing a collection of supposedly mundane travel
journals when the pages started describing places she'd never heard of — and then
she was in one of them. She brought three notebooks and has already filled two.