From 71d0d10fc70616ff4c93b097ad4eac98d594ee10 Mon Sep 17 00:00:00 2001 From: "@permadeath.com" Date: Thu, 20 Aug 2026 14:18:08 -0400 Subject: [PATCH] docs(candidates): name the board beside each count The epic's table is measured on the suite sheets and the pinned test runs on uniform synthetic boards, so the two sets of counts are not comparable. Names the sheets in the table, notes that the table's ~3.7 facings a hex contradicts the 2.6-3.5 band recorded lower down, and leaves both figures alone: the differential corpus is what settles them. Also rewords the wire checkbox, which asked for terrain and elevation the board already carried. --- crates/sds-core/src/pathfind.rs | 18 ++++++++++-------- plan/candidates.md | 23 ++++++++++++++++------- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/crates/sds-core/src/pathfind.rs b/crates/sds-core/src/pathfind.rs index 076ba5f..d350d82 100644 --- a/crates/sds-core/src/pathfind.rs +++ b/crates/sds-core/src/pathfind.rs @@ -647,15 +647,17 @@ mod tests { assert_eq!(three.target_movement_modifier(), 1); } - /// Pinned counts on a board with nothing on it, and on one that is all - /// heavy woods. A change in either is a change in the search, and has to be - /// explained rather than absorbed. + /// Pinned counts on two **uniform synthetic boards**: one 48x48 with + /// nothing on it, one 48x48 that is all level-2 woods. A change in either + /// is a change in the search, and has to be explained rather than absorbed. /// - /// The `candidates` epic quotes 41 hexes and 151 states for 6 MP on open - /// ground. This search says 66 and 210 from the same budget; the epic's - /// figures were measured before this code existed, and - /// `bridge/sds/SdsPathfind.java` - MegaMek's own answer - is what settles - /// the difference. + /// **Not comparable to the figures in the `candidates` epic.** Those were + /// measured on the real suite sheets, `Map Set 5/16x17 Open Terrain 1` and + /// `Map Set 4/16x17 Heavy Forest 1`, which carry mixed terrain, elevation + /// and edges a 6 MP mech walks into. An idealised plain reaches further + /// than a real open-terrain sheet, so a larger number here contradicts + /// nothing. These boards are uniform on purpose: they make the count a + /// function of the search and of nothing else. #[test] fn counts_are_pinned() { let open_board = open(48, 48); diff --git a/plan/candidates.md b/plan/candidates.md index e3d916a..07f0f78 100644 --- a/plan/candidates.md +++ b/plan/candidates.md @@ -30,8 +30,17 @@ hexside of turning: | board | reachable hexes | reachable `(hex, facing)` states | |---|---|---| -| open terrain | 41 | 151 | -| heavy forest | 10 | 37 | +| `Map Set 5/16x17 Open Terrain 1` | 41 | 151 | +| `Map Set 4/16x17 Heavy Forest 1` | 10 | 37 | + +Both are suite boards, with mixed terrain, elevation and edges a 6 MP mech +reaches. A uniform synthetic board is a different measurement and its counts do +not belong in this table: 6 MP on an all-clear plain reaches more than a real +open-terrain sheet does, because the sheet has terrain and edges in it. + +These figures give 3.68 and 3.70 facings per hex, which contradicts the +2.6-3.5 band recorded further down. Both are pre-corpus figures and both stand +as written until the differential corpus settles which is right. So the scoring work - line of sight, hit locations, damage distributions, per-location value - is being used to rank five options out of scores. **No @@ -94,11 +103,11 @@ good offence and bad defence, and a single operator over `N` cannot say so. offline fixture, committed once**, the way the LOS corpus and the hit tables are - nothing dumps during a match. Bound it to a handful of `(board, start, MP)` combinations -- [x] Whatever movement inputs the board message lacks - terrain kind, - elevation - added to the wire. Cover is *not* among them: the LOS map - already carries it. The board already carried both; what it could not - carry is the *unit*, so `movementMode` and `maxElevationChange` went on - the observation instead +- [x] Whatever movement inputs the wire lacks, added to it. The board message + already carried terrain kind and elevation, and the LOS map already + carries cover; what nothing carried is the *unit*, so `movementMode` - + which column of `Terrain.movementCost` applies - and + `maxElevationChange` went on the observation **Ground movement** -- 2.51.2