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**