Capture current mission, AI, map and administration development

Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
This commit is contained in:
2026-10-13 22:52:53 +02:00
parent a951a96edc
commit 6a667d8deb
8104 changed files with 2124945 additions and 2061 deletions
@@ -0,0 +1,11 @@
{
"defect": "Fixture compared authored vanilla-map placeholder to physically substituted shared field map; recursive inventory enumeration could count installed magazines as loose bag allowance.",
"scope": "WORKBENCH fixture only, one source file; no inventory/stock/service mutation.",
"evidence": {
"map_override": "addons/core/Scripts/Game/ERR/30_Map/ERR_ScenarioMap.c",
"site_substitution": "addons/core/Scripts/Game/ERR/00_Core/ERR_SiteService.c:428",
"enumeration": "ERR_Inventory.Items deduplicates identities but does not distinguish direct slots from nested weapon storage."
},
"proof_limit": "Exact current direct-bag prefab counts, not persisted startup identity provenance. Inherited pistol contents are excluded. Native fixture remains pending.",
"validation": "Read-only source and API pattern inspection plus apply-check; no compiler/native during parent suite."
}
@@ -0,0 +1,39 @@
--- a/addons/core/Scripts/Game/ERR/40_Chat/ERR_NativeCrashStartProbe.c
+++ b/addons/core/Scripts/Game/ERR/40_Chat/ERR_NativeCrashStartProbe.c
@@ -7,6 +7,19 @@
{
if (condition) { Print("ERR SMOKE PASS: crash start " + message); return true; }
Print("ERR SMOKE FAIL: crash start " + message, LogLevel.ERROR); return false;
+ }
+ // GetItems can include magazines installed in a contained pistol. Only exact
+ // reciprocal slots owned by this bag count toward its loose authored allowance.
+ protected static bool DirectBagItem(IEntity item, IEntity bag)
+ {
+ if (!item || !bag) return false;
+ InventoryItemComponent component = InventoryItemComponent.Cast(item.FindComponent(InventoryItemComponent));
+ if (!component) return false;
+ InventoryStorageSlot slot = component.GetParentSlot();
+ if (!slot) return false;
+ BaseInventoryStorageComponent storage = slot.GetStorage();
+ return storage && storage.GetOwner() == bag && storage.GetSlot(slot.GetID()) == slot
+ && slot.GetParentContainer() == storage && slot.GetAttachedEntity() == item;
}
static bool Run(ERR_GameMode mode, IEntity player)
{
@@ -39,10 +52,14 @@
if (!Check(inventory && items.Count() > 0 && items.Count() <= 128, "finite starting stock is present")) return false;
foreach (ERR_SiteStock stock : site.Definition.Stock)
{
+ // Mirror the current shared-map Scenario FieldMap override; all other
+ // finite stock resources remain exactly as authored in the definition.
+ ResourceName expected = stock.Prefab;
+ if (expected == ERR_Supplies.Map()) expected = "{A46500E4A30B653B}Prefabs/Items/Equipment/ERRM_SharedFieldMap.et";
int count;
foreach (IEntity item : items)
- if (item && item.GetPrefabData() && item.GetPrefabData().GetPrefabName() == stock.Prefab) count++;
- if (!Check(count == stock.Count, "original starting stock count " + stock.Prefab)) return false;
+ if (DirectBagItem(item, site.Container) && item.GetPrefabData() && item.GetPrefabData().GetPrefabName() == expected) count++;
+ if (!Check(count == stock.Count, "current direct salvage stock count " + expected)) return false;
}
if (!Check(ERR_ObjectiveText.Description(mode).Contains("salvage"), "initial objective explains the salvage bag")) return false;
PrintFormat("ERR CRASH START: anchor=%1 wreck=%2 halfSize=%3 clearance=%4; on-foot static aftermath, no crash flight or multiplayer proof", site.Definition.Position, wreck.GetOrigin(), halfSize, height);
@@ -0,0 +1,10 @@
{
"files": {
"addons/core/Scripts/Game/ERR/40_Chat/ERR_NativeCrashStartProbe.c": {
"baseline_sha256": "0e2f21e93065b64dfb034df3d5aec3e8286127ff03d5094fd243b5b36508f365",
"proposal_sha256": "d039027a462cc57d35d5e4f722e5b6b03e8f95a38fe66b19982092df983b1db0",
"index_sha256": null
}
},
"patch_sha256": "83583d38d0aad96c91f602d3f6a419f0781cf90e72631c85180ec8e91d759245"
}