neon-sprawl/content
VinPropane 3169106f28 NEO-98: Resolve NPC telegraph hits via attack ability maxRange.
Telegraph damage now looks up behavior attackAbilityId for baseDamage and
maxRange instead of using aggroRadius. Adds three NPC attack abilities, maxRange
on AbilityDef, attackAbilityId on NpcBehaviorDef, and cross-ref validation.
2026-05-30 17:49:21 -04:00
..
abilities NEO-98: Resolve NPC telegraph hits via attack ability maxRange. 2026-05-30 17:49:21 -04:00
items NEO-50: Add item-def schema, prototype catalog, and CI gates. 2026-05-17 21:25:06 -04:00
mastery NEO-45: address code review doc alignment and CI nits. 2026-05-16 20:05:51 -04:00
npc-behaviors NEO-98: Resolve NPC telegraph hits via attack ability maxRange. 2026-05-30 17:49:21 -04:00
recipes NEO-65: Add prototype recipe catalog, schemas, and CI gates. 2026-05-24 16:21:44 -04:00
resource-nodes NEO-57: add prototype resource node catalogs, schemas, and CI gates 2026-05-24 13:49:47 -04:00
schemas NEO-98: Resolve NPC telegraph hits via attack ability maxRange. 2026-05-30 17:49:21 -04:00
skills NEO-39: add data-driven level curve with startup schema validation 2026-05-06 23:10:06 -04:00
README.md NEO-87: ship prototype NpcBehaviorDef catalog, schema, and CI gates. 2026-05-25 16:53:55 -04:00

README.md

Content data

Data-driven definitions (skills, items, recipes, quests) validated in CI with JSON Schema.

Path Purpose
schemas/ JSON Schema files (*.schema.json)
skills/ Skill catalogs; each row matches schemas/skill-def.schema.jsonstable id, allowedXpSourceKinds for E2.M1 / E2.M2
mastery/ Mastery catalogs; each file matches schemas/mastery-catalog.schema.jsonstable branchId / perkId, tier gates via skill level (E2.M3)
items/ Item catalogs; each row matches schemas/item-def.schema.jsonstable id, stackMax, inventorySlotKind for E3.M3
recipes/ Recipe catalogs; each row matches schemas/recipe-def.schema.jsonstable id, recipeKind, requiredSkillId, inputs/outputs for E3.M2
abilities/ Combat ability catalogs; each row matches schemas/ability-def.schema.jsonstable id, baseDamage, cooldownSeconds for E5.M1
npc-behaviors/ NPC behavior archetype catalogs; each row matches schemas/npc-behavior-def.schema.jsonstable id, archetypeKind, aggro/leash radii, telegraph + attack timings for E5.M2
resource-nodes/ Resource node + yield catalogs; node rows match schemas/resource-node-def.schema.json, yield rows match schemas/resource-yield-row.schema.jsonstable nodeDefId, gatherLens, maxGathers for E3.M1

Prototype Slice 1 (NEO-33): CI expects exactly three skill rows with ids salvage, refine, intrusion (gather + process + tech). Each row must declare allowedXpSourceKinds (non-empty); see E2.M1 — Designer note: allowedXpSourceKinds for what each kind means for grant wiring.

Prototype Slice 2 — resource nodes (NEO-57): CI expects exactly four nodeDefId values aligned to E3.M1 gather lens freeze — one row per gatherLens; exactly one yield row per node referencing scrap_metal_bulk only. Do not rename nodeDefId after ship. See E3M1-prototype-backlog.md and NEO-57 plan.

Prototype Slice 1 — items (NEO-50): CI expects exactly six item rows with ids scrap_metal_bulk, refined_plate_stock, field_stim_mk0, survey_drone_kit, contract_handoff_token, prototype_armor_shell — one row per prototypeRole (material through equip_stub). Do not rename ids after ship—change displayName only. See E3.M3 — Designer note and freeze table.

Prototype Slice 3 — recipes (E3M2-01): CI expects exactly eight recipe ids aligned to E3.M2 recipe freeze — at least one process and one make row; all requiredSkillId values refine; every input/output itemId from the frozen item catalog. Do not rename recipe id after ship. See E3M2-prototype-backlog.md.

Prototype E5 Slice 1 — abilities (NEO-76): CI expects exactly four ability ids aligned to E5.M1 ability freezeprototype_pulse, prototype_guard, prototype_dash, prototype_burst. Do not rename ability id after ship—change displayName only. See E5M1-prototype-backlog.md and NEO-76 plan.

Prototype E5 Slice 2 — NPC behaviors (NEO-87): CI expects exactly three npc behavior ids aligned to E5.M2 behavior freezeprototype_melee_pressure, prototype_ranged_control, prototype_elite_mini_boss. Each row requires leashRadius > aggroRadius. Do not rename behavior id after ship—change displayName only. See E5M2-prototype-backlog.md and NEO-87 plan.

Prototype Slice 4 (NEO-45): CI expects exactly one MasteryTrack for salvage only (refine / intrusion have no mastery rows yet). Tier 1 @ skill level 2 is a mutually exclusive branch pick (scrap_efficiency vs bulk_haul) with no perks; tier 2 @ level 4 unlocks one perk per branch path. Do not rename branchId / perkId after ship—change displayName only. See E2.M3 — Designer note and freeze table.

Server load path and hot-reload policy are TBD; keep files versioned here as the source of truth.

Validate locally (same as PR gate):

pip install -r scripts/requirements-content.txt
python scripts/validate_content.py
python scripts/check_decomposition_language.py