Skip to content

Zargabad Tooling Parity Audit

rayswaynl edited this page Jul 3, 2026 · 1 revision

Zargabad Tooling Parity Audit

This page is the current-state handoff for Zargabad support in the offline reporting tools on claude/build84-cmdcon36@5fca3239069a5eff6335f06fecb26bb72e8c9ceb. It separates the real MatchReport parity gap from the older prompt assumption that the Soak analyzer needs map-specific Zargabad handling.

Bottom line

MatchReport is the blocker. Tools/MatchReport/matchdata.py knows chernarus, takistan and default world sizes, and TOWN_COORDS has exact Chernarus/Takistan tables only. A Zargabad ROUNDEND will parse, but the renderer falls back to the default 15360 m world and auto-places only towns that appear in capture events. That means quiet towns and the airfield can be absent, and captured towns render on a synthetic ring instead of their real map positions.

The Soak analyzer is different: Tools/Soak/analyze_soak.py stores the map label from ROUNDEND and WASPSCALE|v2|...|map=..., but it does not depend on per-map coordinate tables. The useful Soak follow-up is sample/README coverage for Zargabad logs, not a TOWN_COORDS-style data patch.

Source anchors

Surface Current source truth
Maintained mission root Missions_Vanilla/[61-2hc]warfarev2_073v48co.zargabad exists in the current base.
Zargabad campaign data docs/zargabad-campaign.json:3-4 declares map=zargabad and size=8192; towns[] contains the 11 town positions.
Mission-emitted town names Missions_Vanilla/[61-2hc]warfarev2_073v48co.zargabad/mission.sqm:56,130,161,203,245,308,350,392,445,487,529 gives the exact text= names used by town logics.
MatchReport world size Tools/MatchReport/matchdata.py:115 has WORLD_SIZE = {"chernarus": 15360, "takistan": 12800, "default": 15360}; no zargabad.
MatchReport static coordinates matchdata.py:117-149 has TOWN_COORDS for Chernarus and Takistan only.
Fallback behavior matchdata.py:153-164 auto-places missing towns on a ring using the selected world size.
Full-map render behavior matchdata.py:454-464 uses the static town table when present, otherwise only captured town names.
Soak map handling Tools/Soak/analyze_soak.py:441,462,880,1227,1302,1371 carries map labels into text/JSON/compare headers without coordinate lookup.
Boot harvest logger Server/Init/Init_Towns.sqf:167-177 emits `TOWNPOS
Harvest helper Tools/MatchReport/harvest-town-coords.ps1:2-29 pulls `TOWNPOS
Logger switch Common/Init/Init_CommonConstants.sqf:1616 currently sets WFBE_C_LOG_TOWN_COORDS = 1 even though the comment describes a one-shot flip-on/flip-off workflow.

Exact Zargabad coordinate payload

These values come from docs/zargabad-campaign.json. The table below uses the mission text= keys that MatchReport must join against.

MatchReport key Campaign name Position Notes
Zargabad Zargabad (4071,4183) Main city, HugeTown.
ZargabadAF Zargabad AF (3386,4083) Airfield town logic; campaign name contains a space, mission key does not.
Yarum Yarum (4154,3593) Small town.
TheVilla The Villa (4813,4645) Mission key removes the space.
Nango Nango (2824,5022) Large town.
Azizayt Azizayt (1930,4653) Small town.
HazarBagh Hazar Bagh (3944,5958) Mission key removes the space.
MilitaryBase Military Base (4983,6208) Medium town; mission key removes the space.
Shahbaz Shahbaz (3528,1933) Small town.
FiruzBaharv Firuz Baharv (5059,1878) Campaign and mission both use Baharv.
ShurDam Shur Dam (2890,3144) Mission key removes the space.

A future code lane can paste this into TOWN_COORDS["zargabad"] and add WORLD_SIZE["zargabad"] = 8192. The more conservative route is to harvest live TOWNPOS|v1|zargabad|... output once, then paste the harvested integers so the table matches the generated mission exactly.

Gap classification

Area Status Impact Patch shape
MatchReport WORLD_SIZE Missing zargabad. Zargabad reports render on the default 15360 m canvas instead of the 8192 m world. Add "zargabad": 8192.
MatchReport TOWN_COORDS Missing zargabad. Unknown towns auto-place on a ring, and quiet towns/airfield are absent until they appear in captured events. Add an 11-entry TOWN_COORDS["zargabad"] table keyed by mission text= names.
MatchReport README Stale wording says Takistan is empty, but current code has exact Takistan positions. Future operators may chase the wrong missing map. Update the gap note to say Zargabad is the missing static table.
Coordinate harvest workflow Present. Gives a runtime-verified alternative to campaign JSON positions. Boot once with WFBE_C_LOG_TOWN_COORDS=1, run harvest-town-coords.ps1, paste output, then decide whether the constant should return to off.
Soak analyzer No coordinate gap found. Zargabad labels flow through reports as map=zargabad; no static table is needed. Add a small sample/README mention only if future reports need map-specific examples.

Recommended implementation lane

  1. Add "zargabad": 8192 to WORLD_SIZE.
  2. Add TOWN_COORDS["zargabad"] using either the table above or a live TOWNPOS harvest.
  3. Add a small unit test or synthetic parse that proves a Zargabad ROUNDEND keeps all 11 towns in MatchData.towns, even when only one town was captured.
  4. Refresh Tools/MatchReport/README.md and PRODUCTION.md so the known coordinate gap names Zargabad, not Takistan.
  5. Decide whether WFBE_C_LOG_TOWN_COORDS = 1 should stay enabled or be returned to a true one-shot/off posture after all maintained maps are harvested.

Continue reading

Sidebar

Clone this wiki locally