from pathlib import Path ROOT = Path(__file__).resolve().parents[1] FILES = { "AgrarianResourceNode.h": ROOT / "Source" / "AgrarianGame" / "AgrarianResourceNode.h", "AgrarianResourceNode.cpp": ROOT / "Source" / "AgrarianGame" / "AgrarianResourceNode.cpp", "setup_playable_blueprints.py": ROOT / "Scripts" / "setup_playable_blueprints.py", "verify_playable_blueprints.py": ROOT / "Scripts" / "verify_playable_blueprints.py", "TechnicalDesignDocument.md": ROOT / "Docs" / "TechnicalDesignDocument.md", "GroundZeroResourcePass.md": ROOT / "Docs" / "Terrain" / "GroundZeroResourcePass.md", "Roadmap": ROOT / "AGRARIAN_DEVELOPMENT_ROADMAP.md", } REQUIRED_SNIPPETS = { "AgrarianResourceNode.h": [ "FName RequiredToolItemId;", "bool bAllowBareHandGathering = true;", "int32 ToolQuantityBonus = 0;", "bool HasRequiredTool", "int32 GetHarvestQuantityFor", ], "AgrarianResourceNode.cpp": [ "Gather by hand", "RequiredToolItemId == NAME_None || bAllowBareHandGathering || HasRequiredTool(Interactor)", "Inventory->HasItem(RequiredToolItemId, 1)", "QuantityPerHarvest + ToolBonus", "MakeYieldStack(Interactor)", ], "setup_playable_blueprints.py": [ '"required_tool_item_id": "basic_tool"', '"allow_bare_hand_gathering": True', '"tool_quantity_bonus": 1', '"tool_quantity_bonus": 0', ], "verify_playable_blueprints.py": [ '"required_tool_item_id": "basic_tool"', '"allow_bare_hand_gathering": True', '"tool_quantity_bonus": 1', '"required_tool_item_id": "None"', ], "TechnicalDesignDocument.md": [ "Tool requirement rules remain inventory-based", "`basic_tool` in inventory", ], "GroundZeroResourcePass.md": [ "Wood, fiber, and stone nodes declare `basic_tool`", "Edible plant nodes remain pure bare-hand gathering", ], "Roadmap": [ "[x] Add tool requirement rules.", "basic tool in\n inventory improves yields", ], } def main(): missing = [] for label, path in FILES.items(): text = path.read_text(encoding="utf-8") for snippet in REQUIRED_SNIPPETS[label]: if snippet not in text: missing.append(f"{label}: missing {snippet!r}") if missing: raise SystemExit("Resource tool requirement verification failed:\n" + "\n".join(missing)) print( "PASS: MVP resource tool requirement rules are inventory-based, " "preserve bare-hand gathering, and add basic-tool yield bonuses." ) if __name__ == "__main__": main()