Document equipment slot decision

This commit is contained in:
2026-05-17 13:06:53 -07:00
parent 712a8548c0
commit edd40501d6
4 changed files with 85 additions and 1 deletions
+5 -1
View File
@@ -505,7 +505,11 @@ Target deliverable: A small group can join a server, spawn into one biome, gathe
`AgrarianUseItem ItemId Quantity` support for MVP consumables, with food
hunger recovery, raw meat hunger recovery plus sickness risk, bandage injury
treatment, and restore-on-unsupported-item behavior.
- [ ] Add equipment slots if needed.
- [x] Add equipment slots if needed. Decision complete for MVP: dedicated
equipment slots are deferred because current tools do not yet drive equipped
state; tools remain inventory items until active hand, worn, backpack, armor,
weapon, durability, animation, or mesh-attachment rules require replicated and
persisted slot state.
- [ ] Add weight or carry capacity placeholder.
- [ ] Add inventory UI.
- [x] Add replication for inventory changes.
+16
View File
@@ -120,6 +120,22 @@ The 0.1.E inventory work should implement these operations on top of the model:
systems layered on top.
- UI: read the replicated stack list and send requests back through server RPCs.
## Equipment Slot Decision
Dedicated equipment slots are deferred for the 0.1.E MVP. Current MVP tools,
including `basic_tool`, do not yet drive a separate equipped-state rule; they
can stay in inventory and be checked by item ID when a gather, craft, or build
action needs a tool requirement. Adding slots before a system reads them would
create replicated state, UI work, and save/load obligations without changing
gameplay.
Equipment slots should be added when at least one implemented system needs
state such as active hand item, worn clothing, armor, backpack, held weapon,
tool durability while equipped, animation stance, or first-person/third-person
mesh attachment. When that happens, equipment should be server authoritative,
replicated, persisted, and implemented as a small slot map that references
inventory stack IDs or moves stack instances between inventory and equipment.
## Design Rules
- `ItemId` is the stable key. Display names can change.
+7
View File
@@ -123,6 +123,13 @@ with a small health bump. This gives UI item-use work a concrete authority path
while leaving tools, structures, and future complex consumables blocked until
they have explicit gameplay rules.
Dedicated equipment slots are intentionally deferred for the 0.1.E MVP. The
current `basic_tool` item can remain an inventory item until an implemented
system needs active hand, worn, backpack, armor, weapon, durability, animation,
or mesh-attachment state. When that need appears, equipment should be added as
server-authoritative, replicated, persisted slot state rather than as local UI
selection only.
## Time And Environment
The MVP gameplay calendar target is:
+57
View File
@@ -0,0 +1,57 @@
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
FILES = {
"InventoryDataModel.md": ROOT / "Docs" / "InventoryDataModel.md",
"TechnicalDesignDocument.md": ROOT / "Docs" / "TechnicalDesignDocument.md",
"AGRARIAN_DEVELOPMENT_ROADMAP.md": ROOT / "AGRARIAN_DEVELOPMENT_ROADMAP.md",
}
EXPECTED = {
"InventoryDataModel.md": [
"## Equipment Slot Decision",
"Dedicated equipment slots are deferred for the 0.1.E MVP.",
"`basic_tool`",
"can stay in inventory and be checked by item ID",
"Adding slots before a system reads them would",
"active hand item",
"worn clothing",
"armor",
"backpack",
"held weapon",
"tool durability while equipped",
"mesh attachment",
"server authoritative",
"replicated",
"persisted",
],
"TechnicalDesignDocument.md": [
"Dedicated equipment slots are intentionally deferred for the 0.1.E MVP.",
"`basic_tool` item can remain an inventory item",
"server-authoritative, replicated, persisted slot state",
],
"AGRARIAN_DEVELOPMENT_ROADMAP.md": [
"[x] Add equipment slots if needed.",
"equipment slots are deferred",
"do not yet drive equipped",
],
}
def main():
missing = []
for label, path in FILES.items():
text = path.read_text(encoding="utf-8")
for snippet in EXPECTED[label]:
if snippet not in text:
missing.append(f"{label}: {snippet}")
if missing:
raise RuntimeError("Equipment slot decision verification failed: " + "; ".join(missing))
print("Agrarian equipment slot decision verification complete.")
if __name__ == "__main__":
main()