diff options
Diffstat (limited to 'AGENTS.md')
| -rw-r--r-- | AGENTS.md | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -53,7 +53,7 @@ internal/ ## Key Conventions -**YAML-driven.** Rooms, items, objects, mobs, drops, modules, courses are YAML files under `data/`. Read from disk on every access — edit and it takes effect immediately, no restart. Crafting information lives in `craft:` blocks on item YAML files — no separate recipe directory. Items are organized into subdirectories by category (items: `equipment/`, `tools/`, etc.; rooms: `town/`, `wilderness/`, etc.). All IDs remain globally unique across subdirectories via path-indexed loading. +**YAML-driven.** Rooms, items, objects, mobs, drops, modules, courses are YAML files under `data/`. Read from disk on every access — edit and it takes effect immediately, no restart. Crafting information lives in `craft:` blocks on item YAML files — no separate recipe directory. Items are organized into subdirectories by category (items: `equipment/`, `tools/`, etc.; rooms: `town/`, `wilderness/`, etc.; objects: room-specific one-offs in `unique/`, generic shared objects flat). **The filename is the ID for every data type** (objects, items, mobs, rooms, drops, courses, techs, modules, hazards, help): lookup is by filename stem via the recursive path index, and every loader derives the struct's `ID` from that filename. **Do not put a top-level `id:` field in any data file — it is ignored.** (A nested `- id:` under a room's `objects:`/`mobs:` list is different: a *reference* to an object/mob by its filename, and is still required.) All IDs are globally unique across subdirectories via path-indexed loading; subdirectories are organizational only and do not namespace IDs. **Live state.** Player data (characters, accounts) is written to YAML on every state change. Ground items, mob instances, and object states live in memory only and are lost on restart. @@ -101,11 +101,12 @@ data/rooms/player_housing/ Player house rooms data/items/<id>.yaml Item definitions (stats, equip_slot, tool_type, craft, burn_ticks, search_table, etc.) data/mobs/<id>.yaml Mob definitions (combat stats, drops, behavior, steal config; kind: task for worksites) data/objects/<id>.yaml Object definitions (name, aliases, behavior, hidden, inroom_description, descriptions, removal_item) +data/objects/unique/ Room-specific one-off objects, prefixed with the room number (e.g. unique/1001_sign.yaml) data/drops/<id>.yaml Shared drop tables (weighted item lists, sub-table references) data/hazards/<id>.yaml Shared room hazard definitions (attack_type, attack, max_hit, speed, messages, required_item) data/help/<id>.yaml Help topics -data/modules/<id>.yaml Science module definitions (id, level, max_hit, base_xp, junk_cost, category) -data/techs/<id>.yaml Technology definitions (id, name, level, drain_rate, category, group, effects) +data/modules/<id>.yaml Science module definitions (level, max_hit, base_xp, junk_cost, category) +data/techs/<id>.yaml Technology definitions (name, level, drain_rate, category, group, effects) data/courses/<id>.yaml Agility course definitions (name, required_level, start_room, obstacles) data/players/accounts/ Account YAML (gitignored) data/players/characters/ Character YAML (gitignored) @@ -442,6 +443,7 @@ Account-wide options set via `option <name> <value>`. Stored in account YAML, sh | `queue_silently` | bool | true | Suppress queue messages | | `danger_warning` | bool | true | Confirm `[Y/n]` before entering a hazardous area from a safe one | | `room_desc_width` | int | 70 | Room desc line wrap width | +| `wrap_width` | int | 120 | Wrap ALL output to this many columns (clamped to min 80; applied in `net.Session.WriteLine/WriteLines/Writef`, not `Write`) | | `unicode` | bool | true | Unicode box-drawing characters | | `run_countdown` | bool | false | Flee countdown messages | | `visual_ticks` | bool | false | Tick marker display | |
