diff options
Diffstat (limited to 'worldbuilding_guide')
| -rw-r--r-- | worldbuilding_guide/objects.md | 68 |
1 files changed, 62 insertions, 6 deletions
diff --git a/worldbuilding_guide/objects.md b/worldbuilding_guide/objects.md index 65ab430..0350a37 100644 --- a/worldbuilding_guide/objects.md +++ b/worldbuilding_guide/objects.md @@ -258,10 +258,9 @@ safespot: degrade_message: "The rock outcrop crumbles to nothing!" ``` -Safespot objects should be `hidden: true` so they only appear in `look` when the player's -effective safespot tier meets or exceeds the object's required tier. This creates a natural -discovery mechanic: as players complete quests and achievements, they begin to notice cover -they couldn't use before. +Safespot objects should be `hidden: true`. They never appear in room descriptions — players +discover them through quest guidance, `inroom_description` text in the room's YAML, or by +examining objects directly with `look <name>`. ### SafespotConfig Fields @@ -273,8 +272,8 @@ they couldn't use before. | `unsafe_chance` | float64 | 0 | Per-tick chance (0.0-1.0) to be forced out of cover | | `decay_ticks` | float64 | 0 | Guaranteed ticks before object degrades one level | | `decay_chance` | float64 | 0 | Per-tick random chance (0.0-1.0) to degrade one level | -| `respawn_on_hide` | bool | false | If true, re-hiding resets the safespot to max level | -| `respawn_ticks` | float64 | 0 | Ticks until a destroyed safespot respawns (0 = never) | +| `respawn_on_hide` | bool | false | If true, hiding behind an empty safespot resets it to max level. Only triggers when no occupants are present. | +| `respawn_ticks` | float64 | 0 | Ticks until a destroyed safespot respawns (0 = never respawns — object is deleted from the room) | | `levels` | []SafespotLevel | required | At least one level entry | ### SafespotLevel Fields @@ -288,6 +287,63 @@ Levels are ordered from highest to lowest. The first entry is the safespot's bes the last entry is its weakest state before destruction. When the last level degrades, the safespot is destroyed. +### Three Safespot Patterns + +The combination of `respawn_on_hide` and `respawn_ticks` creates three distinct use cases: + +**1. Standard Safespot (always available)** + +```yaml +safespot: + respawn_on_hide: true + respawn_ticks: 0 + levels: + - message: "You crouch behind the rock formation, using it as cover." +``` + +The safespot starts at full health each time a player hides behind it (first occupant only — +subsequent players don't reset the level). Ideal for skilling areas and general exploration. +Since `respawn_ticks: 0`, a destroyed safespot would be deleted, but with a single level and +no decay, it never degrades. Simple and permanent. + +**2. Regenerating Safespot (timer-based respawn)** + +```yaml +safespot: + respawn_on_hide: false + respawn_ticks: 300 + levels: + - message: "The rock formation stands solid." + degrade_message: "The rock structure begins crumbling!" + - message: "The rock outcrop is cracked and worn." + degrade_message: "A few jagged bits are all that's left!" + - message: "Only a few jagged rocks remain." + degrade_message: "The rock outcrop crumbles to nothing!" +``` + +Degradation persists between hides — a player who leaves and re-hides finds the +safespot at its previous level. After total destruction, a timer (`respawn_ticks`) +counts down, then the safespot reforms at full health. Suits areas with heavy use +where a temporary respite is valuable. + +**3. Disposable Safespot (boss fight cover)** + +```yaml +safespot: + respawn_on_hide: false + respawn_ticks: 0 + levels: + - message: "The barricade offers solid cover." + degrade_message: "The barricade splinters under the assault!" + - message: "The barricade is splintering badly." + degrade_message: "The barricade shatters completely!" +``` + +Degradation persists between hides. When the last level degrades, the safespot is +**deleted from the room entirely** — it does not respawn. Perfect for boss encounters +where a room script places temporary cover that the party consumes during the fight. +Once destroyed, it's gone for good (until the boss room re-instantiates it). + ### Mob Size Mobs must have a `size` field for safespot blocking to work: |
