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.

View file

@ -0,0 +1,33 @@
# Lumber Camp — Lumberjack job slot
# The primary manual work target in the PoC.
# Wood is the designed scarcity bottleneck: it gates construction upgrades
# and several early character ascension recipes. Players can passively
# accumulate wood here, or use the manual_work action for burst gains.
# manual_work_eligible: true makes this the focus of the micro-management demo.
$schema: "xyvera/content-schema/job/v1"
id: lumber_camp
name: "Lumber Camp"
description: >
Workers harvest timber from the forest edge of Heartwood Vale. Wood is the
backbone of early construction and a bottleneck players will want to push past.
Assign a lumberjack here for full output, or use the manual work action to
chop extra wood yourself.
profession: lumberjack
output_resource: wood
base_output_per_hour: 12.0
secondary_output:
resource: gold
rate_fraction: 0.15 # small gold bonus representing sold scrap timber
max_slots: 3
unlock_condition:
building_level: 0 # available from the start
manual_work_eligible: true # this is the PoC manual micro-management target
passive_cap_hours: 8.0

View file

@ -0,0 +1,32 @@
# Research Post — Researcher job slot
# Produces knowledge, which is consumed by skill upgrades and building research.
# Knowledge is the second scarcity axis (after wood) — the design intent is that
# players must choose between levelling characters fast (knowledge) versus
# building the village faster (wood/stone).
# manual_work_eligible is false here; manual focus stays on wood for PoC clarity.
$schema: "xyvera/content-schema/job/v1"
id: research_post
name: "Research Post"
description: >
Scholars and curious minds study the strange phenomena of this world.
Knowledge produced here is consumed by skill upgrades, building improvements,
and eventually advanced expedition planning.
profession: researcher
output_resource: knowledge
base_output_per_hour: 6.0
secondary_output:
resource: experience
rate_fraction: 0.25 # minor experience trickle — characters learn while working
max_slots: 2
unlock_condition:
building_level: 1 # requires the village hub to be upgraded once
manual_work_eligible: false
passive_cap_hours: 8.0

View file

@ -0,0 +1,149 @@
# core_resources.yaml — definitions for all seven core economy resources
# These are the definite resource set from the concept specification.
---
$schema: "xyvera/content-schema/resource/v1"
id: gold
name: "Gold"
description: "General-purpose soft currency earned from trade, jobs, and combat rewards."
category: soft_currency
is_spendable: true
is_capped: false
icon: "icons/resources/gold.png"
color_hex: "#F4C542"
sources:
- "Village jobs with gold output"
- "Combat stage clear rewards"
- "Event milestone rewards"
- "Selling excess items"
sinks:
- "Character level-up costs"
- "Skill upgrade costs"
- "Building upgrades"
- "Shop purchases"
---
$schema: "xyvera/content-schema/resource/v1"
id: wood
name: "Wood"
description: >
Primary construction material. The early bottleneck resource.
Assign lumberjacks to the Lumber Camp for passive gain, or use the
manual work action for burst output.
category: soft_currency
is_spendable: true
is_capped: true
carry_cap: 9999
icon: "icons/resources/wood.png"
color_hex: "#8B5E3C"
sources:
- "Lumber Camp passive output"
- "Manual wood-chopping action (burst yield, daily cap applies)"
- "Event rewards"
sinks:
- "Building construction and upgrades"
- "Character ascension material crafting"
- "Equipment crafting (deferred)"
---
$schema: "xyvera/content-schema/resource/v1"
id: stone
name: "Stone"
description: "Durable building material mined from rocky outcroppings."
category: soft_currency
is_spendable: true
is_capped: true
carry_cap: 9999
icon: "icons/resources/stone.png"
color_hex: "#9E9E9E"
sources:
- "Mining Site passive output"
- "Event rewards"
sinks:
- "Advanced building upgrades"
- "Ascension material crafting"
---
$schema: "xyvera/content-schema/resource/v1"
id: knowledge
name: "Knowledge"
description: >
Accumulated learning that fuels skill upgrades and research improvements.
The second scarcity axis after wood — players must balance knowledge
spending between skill upgrades and building research.
category: knowledge
is_spendable: true
is_capped: true
carry_cap: 5000
icon: "icons/resources/knowledge.png"
color_hex: "#7B68EE"
sources:
- "Research Post passive output"
- "Combat passive skill (Sable's Field Notes)"
- "Event milestone rewards"
sinks:
- "Character skill upgrades"
- "Building research"
- "Expedition unlocks (deferred)"
---
$schema: "xyvera/content-schema/resource/v1"
id: experience
name: "Experience"
description: "Character growth material gained from combat, jobs, and events."
category: soft_currency
is_spendable: true
is_capped: false
icon: "icons/resources/experience.png"
color_hex: "#4CAF50"
sources:
- "Combat stage completion"
- "Research Post secondary output"
- "Assignment mastery milestone rewards"
sinks:
- "Character level-up (primary cost alongside gold)"
---
$schema: "xyvera/content-schema/resource/v1"
id: mana
name: "Mana"
description: >
Ambient magical energy. Consumed by the manual work action and some
skill activations. Regenerates slowly over time.
category: stamina
is_spendable: true
is_capped: true
carry_cap: 200
icon: "icons/resources/mana.png"
color_hex: "#29B6F6"
sources:
- "Passive regen (5 mana per hour)"
- "Event rewards"
- "Diamond purchase (deferred — monetisation not active in PoC)"
sinks:
- "Manual work action (5 mana per use)"
- "Future expedition actions (deferred)"
---
$schema: "xyvera/content-schema/resource/v1"
id: diamond
name: "Diamond"
description: >
Premium hard currency. Obtainable free-to-play through events, milestones,
and logins. Can also be purchased. Used primarily for gacha pulls.
Spending should never be required for core progression per the F2P spec.
category: premium
is_spendable: true
is_capped: false
icon: "icons/resources/diamond.png"
color_hex: "#00E5FF"
sources:
- "New account seed grant (100)"
- "Event milestone rewards"
- "Achievement unlocks"
- "Login streak bonuses"
- "Purchase (deferred — monetisation not active in PoC)"
sinks:
- "Standard banner pulls (cost TBD per banner definition)"
- "Featured banner pulls"
- "Shop convenience purchases (deferred)"