Seed Game Data
Create game data resources for: $ARGUMENTS
Step 1 — Identify Data Type and Source
Determine what data to create and where the design specs live:
| Data Type | Resource Class | Design Source | Output Directory |
|---|---|---|---|
items | ItemData | docs/game-design/01-core-mechanics.md | game/dataitems/ |
skills / abilities | SkillData | docs/mechanicscharacter-abilities.md | game/dataskills/ |
enemies | EnemyData | docs/game-design/02-enemy-design.md | game/dataenemies/ |
echoes | EchoData | docs/lore/04-echo-catalog.md | game/dataechoes/ |
quests | QuestData | docs/game-design/04-side-quests.md | game/dataquests/ |
characters | CharacterStats | docs/lore/03-characters.md | game/datacharacters/ |
equipment | EquipmentData | docs/game-design/01-core-mechanics.md | game/dataequipment/ |
status-effects | StatusEffectData | docs/game-design/01-core-mechanics.md | game/datastatus_effects/ |
loot-tables | LootTableData | docs/game-design/02-enemy-design.md | game/dataloot_tables/ |
dialogue | DialogueData | docs/lore/02-main-story.md | game/datadialogue/ |
Step 2 — Read Design Documents
- •Read the relevant design document(s) to extract specific data
- •Read the relevant Resource class script at
game/systems/*resources/orgame/data/ - •If the Resource class doesn't exist yet, create it first (see
new-resource)
Step 3 — Verify Resource Class Exists
Check that the Resource class for this data type exists:
code
Glob: game/**/<resource_name>.gd
If it doesn't exist, create it based on the design document fields. Every Resource class must have:
- •
class_namedeclaration - •
@exportproperties for all data fields - •
## doc commentson the class and key properties - •An
id: StringNamefield for lookups
Step 4 — Create .tres Files
For each data entry, create a .tres file:
ini
[gd_resource type="Resource" script_class="ItemData" load_steps=2 format=3]
[ext_resource type="Script" path="res://game/dataresourcesitem_data.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"potion"
display_name = "Potion"
description = "Restores 50 HP to one ally."
item_type = 0
value = 50
max_stack = 99
Naming Convention
- •File name:
snake_case.tresmatching theidfield - •Example:
fire_sword.treswithid = &"fire_sword"
Step 5 — Create Data Index (optional but recommended)
If creating 10+ entries, create an index resource or script:
gdscript
class_name ItemDatabase
extends Node
## Preloaded database of all items. Register as autoload or access statically.
var _items: Dictionary = {} # StringName -> ItemData
func _ready() -> void:
_load_all("res://game/dataitems/")
func get_item(id: StringName) -> ItemData:
return _items.get(id)
func _load_all(directory_path: String) -> void:
var dir := DirAccess.open(directory_path)
if not dir:
return
dir.list_dir_begin()
var file_name := dir.get_next()
while file_name != "":
if file_name.ends_with(".tres"):
var item: ItemData = load(directory_path + file_name)
if item:
_items[item.id] = item
file_name = dir.get_next()
Step 6 — Report
- •Number of
.tresfiles created - •Full file paths
- •Resource class used (and whether it was created or already existed)
- •Any data gaps where design doc was ambiguous (flag for user review)
- •Whether a databaseindex was created
- •Suggested next steps (connect to inventory system, battle system, etc.)
Data Consistency Rules
- •Every
idmust be unique within its type - •Every
display_namemust be non-empty - •Numeric values must match design doc ranges (HP 1-9999, MP 0-999, etc.)
- •Enum values must match the Resource class's enum definitions
- •Reference other resources by
id, not file path, when possible