inventory
This commit is contained in:
300
docs/playable-slices/0.6.6-English-Game-Content-Foundation.md
Normal file
300
docs/playable-slices/0.6.6-English-Game-Content-Foundation.md
Normal file
@@ -0,0 +1,300 @@
|
||||
# Ashen Realms – Playable Slice 0.6.6
|
||||
|
||||
## English Game Content Foundation
|
||||
|
||||
**Status:** Implementation Specification
|
||||
**Depends on:** Slice 0.6.5 – Reputation / Renown Foundation
|
||||
**Purpose:** Convert all currently implemented player-facing game content to English before the next major content expansion.
|
||||
|
||||
---
|
||||
|
||||
## 1. Goal
|
||||
|
||||
From this slice onward, **all player-facing game content is written in English**.
|
||||
|
||||
Development documentation may remain German. Internal technical names may remain unchanged when they are already stable, but new data keys should be language-neutral English slugs.
|
||||
|
||||
This slice is deliberately a cleanup and convention slice. It must not introduce a large localization framework.
|
||||
|
||||
> Project rule after this slice: **All player-facing game content is English. Development documentation may remain German.**
|
||||
|
||||
---
|
||||
|
||||
## 2. Why this slice exists now
|
||||
|
||||
The project is about to add significantly more content:
|
||||
|
||||
- more monsters
|
||||
- trade goods
|
||||
- loot bags
|
||||
- merchants
|
||||
- reputation-gated offers
|
||||
- NPC dialogue
|
||||
- quests
|
||||
- the Abandoned Watchpost
|
||||
- the Ash Pit
|
||||
- the first area boss
|
||||
|
||||
Translating later would touch much more persisted content, UI copy, seed data and tests. Therefore the language switch happens before Slice 0.7 V2.
|
||||
|
||||
---
|
||||
|
||||
## 3. Scope
|
||||
|
||||
Convert every **currently visible** German string in the playable loop:
|
||||
|
||||
- navigation
|
||||
- locations
|
||||
- monsters
|
||||
- items
|
||||
- combat actions
|
||||
- combat log
|
||||
- hunt screen
|
||||
- travel screen
|
||||
- loot screen
|
||||
- inventory
|
||||
- character screen
|
||||
- system messages
|
||||
- danger labels
|
||||
- error messages visible to the player
|
||||
|
||||
Do **not** translate German development documentation in `/docs` unless it is itself rendered in the game.
|
||||
|
||||
---
|
||||
|
||||
## 4. Naming convention
|
||||
|
||||
Technical identity must not depend on display language.
|
||||
|
||||
Preferred pattern:
|
||||
|
||||
```ts
|
||||
{
|
||||
key: 'ash-rat',
|
||||
name: 'Ash Rat'
|
||||
}
|
||||
```
|
||||
|
||||
Avoid new language-specific identifiers such as:
|
||||
|
||||
```ts
|
||||
key: 'aschenratte'
|
||||
```
|
||||
|
||||
Existing UUIDs must never change because of the language conversion.
|
||||
|
||||
---
|
||||
|
||||
## 5. Initial terminology
|
||||
|
||||
Use the following English terminology consistently for the currently relevant content.
|
||||
|
||||
### Locations
|
||||
|
||||
| German / Previous Label | English Player-Facing Label | Suggested Key |
|
||||
|---|---|---|
|
||||
| Graufurt | Graufurt | `graufurt` |
|
||||
| Südtor von Graufurt | Graufurt South Gate | `graufurt-south-gate` |
|
||||
| Verbrannte Straße | Burned Road | `burned-road` |
|
||||
| Verlassener Wachtposten | Abandoned Watchpost | `abandoned-watchpost` |
|
||||
| Aschengrube | Ash Pit | `ash-pit` |
|
||||
| Aschenfelder | Ashen Fields | `ashen-fields` |
|
||||
|
||||
`Graufurt` is treated as a proper place name and remains unchanged for now.
|
||||
|
||||
### Monsters
|
||||
|
||||
| German / Previous Label | English Label | Suggested Key |
|
||||
|---|---|---|
|
||||
| Aschenratte | Ash Rat | `ash-rat` |
|
||||
| Verwilderter Straßenhund | Feral Road Hound | `feral-road-hound` |
|
||||
| Straßenräuber | Road Bandit | `road-bandit` |
|
||||
| Verkohlter Plünderer | Charred Raider | `charred-raider` |
|
||||
| Plünderer-Späher | Raider Scout | `raider-scout` |
|
||||
| Plünderer-Veteran | Raider Veteran | `raider-veteran` |
|
||||
| Aschenwühler | Ash Burrower | `ash-burrower` |
|
||||
| Verbrannter Jagdhund | Burned Hound | `burned-hound` |
|
||||
| Hauptmann der Aschenbande | Captain of the Ashen Band | `ashen-band-captain` |
|
||||
|
||||
### Core combat actions
|
||||
|
||||
- Attack
|
||||
- Heavy Strike
|
||||
- Shield Bash
|
||||
- Defend
|
||||
- Potion
|
||||
- Flee
|
||||
|
||||
### Navigation
|
||||
|
||||
- Map
|
||||
- Hunt
|
||||
- Quests
|
||||
- Inventory
|
||||
- Character
|
||||
- Shop
|
||||
|
||||
### Common UI
|
||||
|
||||
- Current Location
|
||||
- Travel
|
||||
- Begin Travel
|
||||
- Begin Hunt
|
||||
- Search Again
|
||||
- Attack
|
||||
- Back
|
||||
- Loot
|
||||
- Equip
|
||||
- Unequip
|
||||
- Reputation
|
||||
- World Renown
|
||||
- Silver
|
||||
- Required Reputation
|
||||
- Bag Capacity
|
||||
|
||||
### Danger labels
|
||||
|
||||
- Weak
|
||||
- Suitable
|
||||
- Strong
|
||||
- Very Dangerous
|
||||
- Deadly
|
||||
|
||||
---
|
||||
|
||||
## 6. Existing item names
|
||||
|
||||
At minimum, currently seeded or visible Tier-1 items should use English display names.
|
||||
|
||||
Recommended names:
|
||||
|
||||
- Worn Shortsword
|
||||
- Bandit Blade
|
||||
- Ashen Blade
|
||||
- Bandit Hood
|
||||
- Reinforced Leather Jacket
|
||||
- Plunderer Gloves
|
||||
- Watchman's Leggings
|
||||
- Ashen Boots
|
||||
- Mark of the Border Watch
|
||||
- Charred Captain's Pendant
|
||||
|
||||
Do not rename stable item keys merely to make them prettier. Only display values should be changed unless the old key is clearly temporary and no persisted references depend on it.
|
||||
|
||||
---
|
||||
|
||||
## 7. Combat log language
|
||||
|
||||
All newly generated combat events must resolve to English text.
|
||||
|
||||
Examples:
|
||||
|
||||
```text
|
||||
Round 2
|
||||
You use Shield Bash.
|
||||
Road Bandit takes 12 damage.
|
||||
Road Bandit's Heavy Strike is interrupted.
|
||||
```
|
||||
|
||||
```text
|
||||
Feral Road Hound bites you for 9 damage.
|
||||
You are Bleeding for 2 rounds.
|
||||
```
|
||||
|
||||
Combat event persistence should continue to prefer structured event data over storing fully rendered localized strings wherever possible.
|
||||
|
||||
---
|
||||
|
||||
## 8. UI text architecture
|
||||
|
||||
Do not build a full translation database in this slice.
|
||||
|
||||
For static Angular UI text, it is acceptable to use centralized constants or a lightweight text map where useful.
|
||||
|
||||
For persisted game content, keep:
|
||||
|
||||
```text
|
||||
key
|
||||
name
|
||||
shortDescription / description
|
||||
```
|
||||
|
||||
with English values.
|
||||
|
||||
A future localization layer may introduce translations without changing the content key.
|
||||
|
||||
---
|
||||
|
||||
## 9. Error messages
|
||||
|
||||
Domain error `code` values remain technical and stable.
|
||||
|
||||
Example:
|
||||
|
||||
```json
|
||||
{
|
||||
"code": "BAG_CAPACITY_EXCEEDED",
|
||||
"message": "You cannot carry any more hides."
|
||||
}
|
||||
```
|
||||
|
||||
The player-facing `message` is English.
|
||||
|
||||
---
|
||||
|
||||
## 10. Migration / seed behavior
|
||||
|
||||
If names and descriptions are stored in PostgreSQL:
|
||||
|
||||
- update existing rows by stable `key`
|
||||
- do not delete and recreate content rows unnecessarily
|
||||
- preserve UUIDs
|
||||
- preserve character inventory references
|
||||
- keep migrations idempotent where appropriate
|
||||
|
||||
If seed files own the content, update both the seed definitions and the existing database through a controlled migration/update step.
|
||||
|
||||
---
|
||||
|
||||
## 11. Tests
|
||||
|
||||
Add or update tests so that:
|
||||
|
||||
- current location API returns English names
|
||||
- hunt encounters return English monster names
|
||||
- combat UI renders English action labels
|
||||
- combat log contains English player-facing text
|
||||
- inventory uses English item names
|
||||
- no existing test expects German display text
|
||||
|
||||
A simple development-only grep may be used to identify obvious German UI remnants, but it is not a substitute for actual runtime verification.
|
||||
|
||||
---
|
||||
|
||||
## 12. Acceptance Criteria
|
||||
|
||||
This slice is complete when:
|
||||
|
||||
- [ ] The complete currently playable flow contains no intentional German player-facing text.
|
||||
- [ ] Existing content IDs and player state remain valid.
|
||||
- [ ] Locations, monsters and items use English display names.
|
||||
- [ ] Combat actions and combat log are English.
|
||||
- [ ] Navigation and common system messages are English.
|
||||
- [ ] New stable content keys follow English/language-neutral slug conventions.
|
||||
- [ ] No large localization framework was introduced.
|
||||
- [ ] All existing tests pass.
|
||||
|
||||
---
|
||||
|
||||
## 13. Explicitly Out of Scope
|
||||
|
||||
Do not implement yet:
|
||||
|
||||
- German/English language switch
|
||||
- browser language detection
|
||||
- translation management UI
|
||||
- translation tables for every content entity
|
||||
- Crowdin / Phrase / Lokalise integration
|
||||
- automatic machine translation
|
||||
|
||||
The only required runtime language after this slice is **English**.
|
||||
Reference in New Issue
Block a user