blob: 95e1972dee6d2acba1975efe1b9044ab57209603 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
## Rooms
Minimal room:
```yaml
id: 1
name: "Town Square"
description: "Cobblestone paths lead in all directions. A fountain gurgles peacefully."
exits:
north: 2
west: 7
east: 3
```
### Exits — simple vs conditional
Simple exit — always passable:
```yaml
exits:
north: 2
```
Conditional exit — blocked until a world flag is set:
```yaml
exits:
north:
room: 11
condition:
flag: gate_open
value: true
blocked_message: "A heavy iron gate blocks the way north."
```
Conditional exit — blocked unless the PLAYER has a flag (key, permission, quest state):
```yaml
exits:
east:
room: 12
condition:
player_flag: has_vault_key
value: true
blocked_message: "The vault door is locked. You need a key."
```
Conditional exit with compound condition — requires both a world flag AND a player flag:
```yaml
exits:
north:
room: 20
condition:
all_of:
- flag: bridge_repaired
value: true
- player_flag: paid_toll
value: true
blocked_message: "The bridge is out, and the toll collector blocks the path."
```
### Spawns — ground items that respawn
```yaml
spawns:
- item_id: bronze_pickaxe
quantity: 1
respawn_ticks: 30 # reappears 30 ticks (18 seconds) after being picked up
- item_id: copper_ore
quantity: 3
respawn_ticks: 50
```
### Mobs — NPCs placed in the room
Simple string (no wandering):
```yaml
mobs:
- "newbie_trainer"
- "man"
```
With wander config per-instance:
```yaml
mobs:
- id: man
wander_interval: 10 # attempts to wander every 10 ticks
- id: man
wander_interval: 15
wander_rooms: [1, 4, 5] # optional — only exit to these rooms
```
Mob wander config lives in the room YAML, not in the mob definition. This keeps mobs generic
so the same `man` can wander differently depending on where it's placed. Mobs wander through
legal (unconditioned) room exits. If no legal exits exist, the mob stays still. Mobs with
no `wander_interval` never wander.
### Objects — interactive fixtures
```yaml
objects:
- id: copper_rock # simple placement
- id: copper_rock # second instance
- id: fishing_spot
wander_rooms: [7, 8, 9] # teleports between these rooms
wander_interval: 12 # every 12 ticks
- id: iron_gate # hidden object (see below)
```
### On-enter scripts — messages when a player arrives
```yaml
on_enter:
- message: "The guard barks: \"State your business!\""
condition:
player_flag: talked_to_guard
not: true # only first visit
- message: "The guard nods. \"Back again?\""
condition:
player_flag: talked_to_guard
value: true # subsequent visits
```
---
|