From e8f4acb98d7076b48ad8ad23852037b692ef28c6 Mon Sep 17 00:00:00 2001 From: nathan Date: Mon, 18 May 2026 13:32:30 -0700 Subject: [PATCH] Document corpse backpack MVP decision --- AGRARIAN_DEVELOPMENT_ROADMAP.md | 6 ++++- Docs/MultiplayerNetworkingDesign.md | 6 ++++- Docs/PersistenceDesignDocument.md | 8 ++++++ Scripts/verify_corpse_backpack_decision.py | 31 ++++++++++++++++++++++ 4 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 Scripts/verify_corpse_backpack_decision.py diff --git a/AGRARIAN_DEVELOPMENT_ROADMAP.md b/AGRARIAN_DEVELOPMENT_ROADMAP.md index cb00b5f..81dd5a0 100644 --- a/AGRARIAN_DEVELOPMENT_ROADMAP.md +++ b/AGRARIAN_DEVELOPMENT_ROADMAP.md @@ -665,7 +665,11 @@ Target deliverable: A small group can join a server, spawn into one biome, gathe the Ground Zero MVP spawn/home location, revives with partial health, stabilizes hunger/thirst/body temperature, clears acute injury conditions, and leaves family/inheritance respawn for later generational milestones. -- [ ] Add corpse/backpack placeholder if needed. +- [x] Add corpse/backpack placeholder if needed. Decision: no physical + corpse/backpack actor is needed for the 0.1.J MVP respawn loop because death + inventory loss is not active yet. Future corpse/backpack recovery is reserved + as a persistent, server-owned, interaction-gated death-recovery record once + inventory loss and decay rules exist. - [ ] Add replicated death feedback. ## 0.1.K Wildlife Prototype diff --git a/Docs/MultiplayerNetworkingDesign.md b/Docs/MultiplayerNetworkingDesign.md index 425d147..9d6e245 100644 --- a/Docs/MultiplayerNetworkingDesign.md +++ b/Docs/MultiplayerNetworkingDesign.md @@ -150,7 +150,11 @@ Initial MVP spawn: Respawn MVP behavior: - may use a simple fixed spawn point or small spawn zone; -- should clear or penalize some carried inventory if death is implemented; +- does not spawn a corpse/backpack container in 0.1.J; +- should clear or penalize some carried inventory when death inventory loss is + implemented; +- should make any future corpse/backpack actor server-owned, interaction-gated, + persistent, and decay-aware; - should not require full generational inheritance yet; - should record enough information for debugging death/respawn bugs. diff --git a/Docs/PersistenceDesignDocument.md b/Docs/PersistenceDesignDocument.md index 418a09e..0c4dcfb 100644 --- a/Docs/PersistenceDesignDocument.md +++ b/Docs/PersistenceDesignDocument.md @@ -111,11 +111,19 @@ Persist the survival state needed to resume a player: - sickness severity; - exhaustion; - alive/dead state if death persistence is active. +- future corpse/backpack recovery records once death inventory loss is enabled. Survival rates and tuning values should not be duplicated into the save unless there is a specific compatibility reason. They belong in code/config/data assets. +0.1.J decision: the MVP death/respawn loop does not spawn a physical corpse or +backpack actor yet. Respawn currently stabilizes the character at the Ground +Zero MVP spawn/home location without inventory-drop recovery. When inventory +loss is introduced, corpse/backpack records should be persistent, server-owned, +time-limited or decay-aware, tied to the death event id/location, and recoverable +through normal interaction rules. + MVP implementation note: `UAgrarianPersistenceSubsystem::SaveCurrentWorld` captures live Agrarian player characters into `FAgrarianSavedPlayer`, including transform, survival snapshot, care history snapshot, and inventory stacks. diff --git a/Scripts/verify_corpse_backpack_decision.py b/Scripts/verify_corpse_backpack_decision.py new file mode 100644 index 0000000..8546a96 --- /dev/null +++ b/Scripts/verify_corpse_backpack_decision.py @@ -0,0 +1,31 @@ +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] + + +def require(path: Path, snippet: str) -> None: + text = path.read_text(encoding="utf-8") + if snippet not in text: + raise SystemExit(f"{path.relative_to(ROOT)} missing {snippet!r}") + + +def main() -> None: + roadmap = ROOT / "AGRARIAN_DEVELOPMENT_ROADMAP.md" + persistence = ROOT / "Docs" / "PersistenceDesignDocument.md" + networking = ROOT / "Docs" / "MultiplayerNetworkingDesign.md" + + require(roadmap, "[x] Add corpse/backpack placeholder if needed.") + require(roadmap, "no physical") + require(roadmap, "corpse/backpack actor is needed for the 0.1.J MVP respawn loop") + require(roadmap, "persistent, server-owned, interaction-gated death-recovery record") + require(persistence, "the MVP death/respawn loop does not spawn a physical corpse or") + require(persistence, "death event id/location") + require(networking, "does not spawn a corpse/backpack container in 0.1.J") + require(networking, "server-owned, interaction-gated") + + print("PASS: corpse/backpack MVP decision is documented.") + + +if __name__ == "__main__": + main()