Files
EscapistsReintroduced/docs/evidence/convoy-mine-stock-2026-10-01/INTEGRATION.txt
T
jakub 6a667d8deb Capture current mission, AI, map and administration development
Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
2026-10-13 22:52:53 +02:00

51 lines
3.4 KiB
Plaintext

PROPOSAL ONLY; successor/reference untouched; no native launch.
Scope: at most TWO one-time PMN4 spawn attempts in each existing original admitted
ammo truck. Quantity is a conservative successor allowance, not a copied convoy
quantity. Owned EAI_Mines.STOCK is2 per soldier; original supply convoy only fills
weapons/magazines, while original EAI_AmmoSupply.Fill dynamically fills requested
mines (maximum96 spawned cargo items). Two spares support one original engineer's
standard carried allowance without implementing recurring refill.
Files in fix.patch:
- new ERR_ConvoyMineStock.c (task-owned optional initial batch and callback)
- ERR_SupplyConvoyService.c (pin at IssueCargo, tick with existing original-owner guard)
- ERR_SupplyConvoyTactics.c (task-owned ref, terminal Stop hook)
- new tests/test_convoy_mine_stock.py
Registration is a separate registration.patch because tools/check.py has prior edits.
Copied ERR_HQ.c and ERR_MountedMagazineSeed.c are test inputs only, NOT patch files.
Primary weapon/magazine/mounted callbacks remain unchanged in task.Cargo. Optional
mine requests wait until every primary callback is finished; no mine callback is
inserted into that primary array. Normal InfantryResupply.Stock therefore never
waits for optional mine operations. Mine requests use remaining actual128 inventory
headroom and remaining128 combined primary+optional callback allowance. Magazine96
limits and their priority remain unchanged. Refused submissions still consume an
attempt; resource/capacity/ownership refusal never retries. One fixed90-second
window begins on first tick; timeout/stop/capture/mode loss is terminal.
Native GetItem is valid for Spawn (SDK generated callback lines15-18). Vanilla
SCR_AITakeItemFromArsenal_InventoryCallback lines12-15 resolves its RplId through
Replication.FindItem/RplComponent.GetEntity. Only those exact successful native
spawn identities can enter the final two-entry snapshot, after exact prefab,
initial-item exclusion, reciprocal slot, original truck storage ownership, alive,
collision handler and inactive pressure-trigger checks. No inventory-difference
fallback. Duplicate callback items deduplicate. Missing/late/unsupported identities
are omitted permanently. Physical uncertain items are preserved; callbacks remain
retained by the task batch and cannot schedule new work or reopen its snapshot.
Count()/At() expose frozen INITIAL identities, not a validated current available
stock count and not authority to transfer them. There is NO mine courier, no new
spent ledger and no reservation claim in this slice. Future finite mine delivery
must use these exact originals with the existing service's shared m_Spent and
appropriate total-cap/mutual-exclusion checks. It cannot pass the magazine-only
m_Stock to ERR_FiniteMagazineReservation and expect a mine to be accepted. Do not
claim mine replenishment, physical delivery, native insertion or multiplayer proof.
Tests: four focused programs pass; logs and results.json alongside proposal.
New actual-method harness covers the complete batch/callback methods, synchronous
success with false return, missing/unknown primary callbacks, primary independence,
128 item/callback limits, owner/mode/manager loss, fixed expiry then late callback,
preexisting/foreign/armed/dead/non-PMN items, duplicate callback identity and freeze.
Source hooks are checked directly; native Source/PAK validation remains future work.