321 lines
10 KiB
Markdown
321 lines
10 KiB
Markdown
# Ashen Realms – Playable Slice 0.10
|
||
|
||
## Abandoned Watchpost
|
||
|
||
**Status:** Implementation Specification
|
||
**Depends on:** Slice 0.9
|
||
**Purpose:** Expand the first region beyond the tutorial road and introduce a stronger hunt location, story investigation and the first meaningful gear/reputation check.
|
||
|
||
---
|
||
|
||
## 1. Goal
|
||
|
||
The player now has enough knowledge and basic equipment to leave the Burned Road loop and push deeper into the Ashen Fields.
|
||
|
||
The Abandoned Watchpost should feel like the first place where the world opens slightly:
|
||
|
||
- new location artwork
|
||
- stronger encounter pool
|
||
- a surviving/remaining NPC or investigation point
|
||
- new trade goods
|
||
- stronger equipment opportunities
|
||
- route toward the Ash Pit
|
||
|
||
The player should feel that the Burned Road prepared them for this place.
|
||
|
||
---
|
||
|
||
## 2. World Connection
|
||
|
||
Add or activate:
|
||
|
||
```text
|
||
Burned Road ↔ Abandoned Watchpost
|
||
```
|
||
|
||
Initial travel target:
|
||
|
||
```text
|
||
Duration: ~15 seconds
|
||
Ambush chance: ~10%
|
||
```
|
||
|
||
Values remain balancing data.
|
||
|
||
The player is not blocked by character level.
|
||
|
||
If progression gating is needed, prefer world discovery / quest state / actual combat danger rather than a numeric level requirement.
|
||
|
||
---
|
||
|
||
## 3. Local View
|
||
|
||
The Abandoned Watchpost should use the generic local-location screen pattern.
|
||
|
||
Minimum interactions:
|
||
|
||
- Hunt
|
||
- Inspect the Watchpost
|
||
- Speak with the remaining guard/NPC if present
|
||
- Travel back to Burned Road
|
||
- discover or unlock route toward Ash Pit
|
||
|
||
The location must not be a world-map node with no local identity.
|
||
|
||
---
|
||
|
||
## 4. Encounter Pool
|
||
|
||
Recommended initial enemies:
|
||
|
||
- Road Bandit
|
||
- Raider Scout
|
||
- Raider Veteran
|
||
- Ash Hound / Burned Hound depending on final content naming
|
||
- optional rare Raider Captain as first elite target
|
||
|
||
Reuse existing enemy mechanics where possible.
|
||
|
||
This slice should deepen combinations, not add several new subsystems.
|
||
|
||
---
|
||
|
||
## 5. New Enemy Roles
|
||
|
||
### Raider Scout
|
||
|
||
- moderate damage
|
||
- simple fast attack pattern
|
||
- primarily a loot/reputation farming target
|
||
|
||
### Raider Veteran
|
||
|
||
- higher armor/HP
|
||
- telegraphed Heavy Strike
|
||
- can enter a defensive stance
|
||
- encourages the player to react rather than spam Attack
|
||
|
||
### Burned Hound
|
||
|
||
- Bleeding
|
||
- becomes more aggressive at low HP
|
||
- reinforces previously learned status behavior
|
||
|
||
### Raider Captain – Optional Elite
|
||
|
||
If included in this slice:
|
||
|
||
- combines telegraphed attack + defensive behavior
|
||
- should be dangerous on first arrival
|
||
- becomes reliably beatable after several Tier-1 upgrades
|
||
- has a focused desirable equipment drop
|
||
|
||
Do not confuse this elite with the final **Captain of the Ashen Band** area boss in Slice 0.11.
|
||
|
||
---
|
||
|
||
## 6. Loot and Bags
|
||
|
||
The location should make both current loot categories relevant.
|
||
|
||
Examples:
|
||
|
||
- beast enemies → HIDE goods
|
||
- raiders → RAIDER_TROPHY goods
|
||
|
||
This gives a reason to own both:
|
||
|
||
- Basic Hide Bag
|
||
- Basic Trophy Pouch
|
||
|
||
If the player does not own a Trophy Pouch yet, the default capacity of 1 still applies and should naturally point them back toward the merchant.
|
||
|
||
No direct Silver or reputation from normal kills.
|
||
|
||
---
|
||
|
||
## 7. Equipment Progression
|
||
|
||
The Watchpost should increase the chance of meaningful Tier-1 upgrades.
|
||
|
||
Relevant items may include:
|
||
|
||
- Bandit Blade
|
||
- Bandit Hood
|
||
- Plunderer Gloves
|
||
- Reinforced Leather Jacket
|
||
- Watchman's Leggings
|
||
|
||
The player does not need Best-in-Slot gear to proceed.
|
||
|
||
The intended feeling is:
|
||
|
||
> "The enemies here are tougher, but the drops here are also the things that make me ready for the Ash Pit."
|
||
|
||
---
|
||
|
||
## 8. Story / Investigation
|
||
|
||
A simple investigation should reveal that the road attacks are organized and point toward the Ash Pit.
|
||
|
||
This may be implemented through:
|
||
|
||
- NPC dialogue
|
||
- inspectable environment interaction
|
||
- quest step
|
||
- persistent discovery flag
|
||
|
||
Keep text concise.
|
||
|
||
Example clue:
|
||
|
||
> "The raiders weren't using the watchpost as shelter. They were using it to watch the road. Fresh tracks lead east, toward the old ash excavation."
|
||
|
||
---
|
||
|
||
## 9. Unlocking the Ash Pit Route
|
||
|
||
The route toward the Ash Pit should become visible through world progress.
|
||
|
||
Recommended rule:
|
||
|
||
```text
|
||
Inspect Watchpost OR complete related objective
|
||
→ discover ash-pit connection
|
||
```
|
||
|
||
Avoid `requiredLevel`.
|
||
|
||
The player may be allowed to travel there even if still undergeared once the route is discovered.
|
||
|
||
Actual danger is the soft gate.
|
||
|
||
---
|
||
|
||
## 10. Merchant/Reputation Integration
|
||
|
||
New trade goods from the Watchpost must be accepted by the existing merchant exchange system.
|
||
|
||
The player should now have a reason to make repeated cycles:
|
||
|
||
```text
|
||
Graufurt
|
||
→ Burned Road
|
||
→ Watchpost
|
||
→ bags fill
|
||
→ Graufurt merchant
|
||
→ Silver + reputation + Renown
|
||
→ better supplies/bags/gear
|
||
→ return
|
||
```
|
||
|
||
---
|
||
|
||
## 11. Tests
|
||
|
||
- travel connection works both directions as configured
|
||
- Watchpost hunt uses only its own encounter pool
|
||
- Raider Veteran defensive/telegraph mechanics resolve correctly
|
||
- trade goods map to correct loot categories
|
||
- no normal enemy grants direct money/reputation
|
||
- Watchpost investigation persists
|
||
- Ash Pit route is hidden before discovery if that rule is used
|
||
- Ash Pit route becomes available after discovery
|
||
|
||
---
|
||
|
||
## 12. Acceptance Criteria
|
||
|
||
- [x] Abandoned Watchpost exists as a full playable location.
|
||
- [x] Travel from Burned Road works with server-authoritative timing.
|
||
- [x] Location has a stronger, distinct encounter pool.
|
||
- [x] At least one stronger enemy combines previously learned mechanics.
|
||
- [x] Both HIDE and RAIDER_TROPHY carrying systems matter.
|
||
- [x] Tier-1 equipment progression is meaningfully improved here.
|
||
- [x] Story/investigation points toward the Ash Pit.
|
||
- [x] Ash Pit route can be discovered without a level gate.
|
||
- [x] Existing merchant/reputation loop continues to work.
|
||
- [x] All player-facing content is English.
|
||
|
||
### Verification status
|
||
|
||
Every criterion above is supported by evidence from the automated test suite,
|
||
the build, or the seeded content itself — no criterion here needed the
|
||
running app to confirm structurally:
|
||
|
||
1. **Full playable location** — seeded as an `OUTPOST` with four points of
|
||
interest (hunt, investigate, search, map-out) and its own encounter pool
|
||
(`vertical-slice.seed.spec.ts`: "seeds the watchpost as a huntable
|
||
outpost"); local content in `local-location.content.ts`.
|
||
2. **Server-authoritative travel** — the Burned Road ↔ Watchpost connection
|
||
is seeded both ways at 15 s / 10 % ambush (`"connects the burned road and
|
||
the watchpost both ways without a gate"`); `TravelService` computes
|
||
`arrivesAt` server-side and is covered generically by
|
||
`travel.service.spec.ts`.
|
||
3. **Stronger, distinct pool** — `"gives the watchpost its own encounter
|
||
pool"` seeds exactly Road Bandit, Raider Scout, Raider Veteran, Burned
|
||
Hound and the rare Raider Captain; `"marks only the captain as a rare
|
||
encounter"` confirms the rarity split.
|
||
4. **An enemy combining learned mechanics** — the Raider Veteran carries both
|
||
`telegraph` (existing, from the Burned Road) and the new `guard`
|
||
(`"arms the veteran with a telegraph and a guard on different
|
||
cadences"`); the priority between them is covered in
|
||
`combat-engine.service.spec.ts`.
|
||
5. **Both bag categories matter** — Scorched Hide is seeded `HIDE`, Raider
|
||
Warband Mark is seeded `RAIDER_TROPHY`
|
||
(`vertical-slice.seed.spec.ts`), and both categories were already
|
||
load-bearing bag mechanics before this slice (Slice 0.7.5/0.9).
|
||
6. **Tier-1 equipment improved** — the Raider Veteran's own loot table adds
|
||
Plunderer Gloves, Reinforced Leather Jacket and Watchman's Leggings on top
|
||
of the Raider Warband Mark, and the Raider Scout carries Bandit Hood at a
|
||
raised chance (`item-content.ts`); the Road Bandit's own table (already
|
||
present) is left untouched at the same values
|
||
(`"leaves the road bandit loot table untouched"` pins Bandit Blade at
|
||
`0.1800`), so the Watchpost's gear opportunities are additive, not a
|
||
rebalance of the Burned Road.
|
||
7. **Investigation points to the Ash Pit** — the `inspect-watchpost` hotspot
|
||
carries the §8 clue text verbatim and `discoversLocationKey: 'ash-pit'`
|
||
(`"points the watchpost investigation at the ash pit"`).
|
||
8. **Ash Pit discoverable without a level gate** — the gate is
|
||
`requiresDiscovery`, not `minRecommendedLevel`; `WorldDiscoveryService`
|
||
contains no level check at all. Covered end to end: the hotspot writes the
|
||
discovery (`local-location-interaction.spec.ts`: `"discovers the route the
|
||
hotspot points at"`), the map hides/reveals it
|
||
(`world.service.spec.ts`: `"hides a gated connection until the character
|
||
has discovered it"` / `"shows a gated connection once it has been
|
||
discovered"`), and travel itself refuses/allows it
|
||
(`world-discovery.service.spec.ts` and `travel.service.spec.ts`, both:
|
||
`"refuses a gated route the character has not discovered"` /
|
||
`"allows a gated route once it has been discovered"`).
|
||
9. **Merchant/reputation loop continues** — both new trade goods have
|
||
exchange rules paying Silver and regional reputation, and pay more than
|
||
their Burned Road equivalents (`"lets Borin buy both watchpost trade
|
||
goods"`, `"pays more for watchpost goods than for road goods"`). No new
|
||
code path grants Silver, reputation or Renown directly from a kill; the
|
||
pack-wide rule (README.md) that only the exchange grants those was already
|
||
enforced before this slice and nothing in Slice 0.10 bypasses it.
|
||
10. **English content** — every string seeded for the Watchpost and Ash Pit
|
||
(descriptions, hotspot titles and result text, monster flavour text) was
|
||
read during this review and is English.
|
||
|
||
What this status does **not** cover, because it cannot be produced by static
|
||
evidence: actually applying migration `1798000000000` to a real PostgreSQL
|
||
database, confirming the second `db:seed` run is idempotent against real
|
||
constraints, and a hand-played pass through the loop in a browser. Those are
|
||
listed precisely in the implementation notes
|
||
(`0.10-Abandoned-Watchpost-implementation-notes.md`, §7) as outstanding work
|
||
for the project owner.
|
||
|
||
---
|
||
|
||
## 13. Out of Scope
|
||
|
||
Do not add:
|
||
|
||
- second region
|
||
- crafting
|
||
- procedural watchpost events
|
||
- complex stealth mechanics
|
||
- large dialogue trees
|
||
- final area boss
|