@maka/maka-cli 5.88.0 → 5.90.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/bundle/typescript/package.json +1 -4
  2. package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.js +12 -1
  3. package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.js.map +1 -1
  4. package/bundle/typescript/src/commands/game/sideQuest/commands/decompile.d.ts +8 -2
  5. package/bundle/typescript/src/commands/game/sideQuest/commands/decompile.js +10 -2
  6. package/bundle/typescript/src/commands/game/sideQuest/commands/decompile.js.map +1 -1
  7. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +20 -2
  8. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -1
  9. package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js +28 -2
  10. package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js.map +1 -1
  11. package/bundle/typescript/src/commands/game/sideQuest/commands/move.d.ts +29 -5
  12. package/bundle/typescript/src/commands/game/sideQuest/commands/move.js +82 -8
  13. package/bundle/typescript/src/commands/game/sideQuest/commands/move.js.map +1 -1
  14. package/bundle/typescript/src/commands/game/sideQuest/commands/thread.d.ts +45 -0
  15. package/bundle/typescript/src/commands/game/sideQuest/commands/thread.js +140 -43
  16. package/bundle/typescript/src/commands/game/sideQuest/commands/thread.js.map +1 -1
  17. package/bundle/typescript/src/commands/game/sideQuest/commands/unravel.js +66 -11
  18. package/bundle/typescript/src/commands/game/sideQuest/commands/unravel.js.map +1 -1
  19. package/bundle/typescript/src/commands/game/sideQuest/factories/repro-scene.js +11 -3
  20. package/bundle/typescript/src/commands/game/sideQuest/factories/repro-scene.js.map +1 -1
  21. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js +21 -0
  22. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js.map +1 -1
  23. package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +71 -1
  24. package/bundle/typescript/src/commands/game/sideQuest/game.js +88 -16
  25. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  26. package/bundle/typescript/src/commands/game/sideQuest/headless.js +34 -0
  27. package/bundle/typescript/src/commands/game/sideQuest/headless.js.map +1 -1
  28. package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +89 -0
  29. package/bundle/typescript/src/commands/game/sideQuest/models/player.js +161 -10
  30. package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
  31. package/bundle/typescript/src/commands/game/sideQuest/types/repro.d.ts +8 -0
  32. package/bundle/typescript/src/commands/game/sideQuest/types/repro.js.map +1 -1
  33. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-vocab.js +8 -0
  34. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-vocab.js.map +1 -1
  35. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.d.ts +24 -0
  36. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.js.map +1 -1
  37. package/bundle/typescript/src/commands/game/sideQuest/utilities/bystander.js +2 -12
  38. package/bundle/typescript/src/commands/game/sideQuest/utilities/bystander.js.map +1 -1
  39. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js +13 -0
  40. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js.map +1 -1
  41. package/bundle/typescript/src/commands/game/sideQuest/utilities/ephemeral.d.ts +73 -0
  42. package/bundle/typescript/src/commands/game/sideQuest/utilities/ephemeral.js +210 -1
  43. package/bundle/typescript/src/commands/game/sideQuest/utilities/ephemeral.js.map +1 -1
  44. package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.js +75 -3
  45. package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.js.map +1 -1
  46. package/bundle/typescript/src/commands/game/sideQuest/utilities/shared-run.js +20 -1
  47. package/bundle/typescript/src/commands/game/sideQuest/utilities/shared-run.js.map +1 -1
  48. package/bundle/typescript/src/commands/game/sideQuest/utilities/sin.d.ts +19 -2
  49. package/bundle/typescript/src/commands/game/sideQuest/utilities/sin.js +29 -6
  50. package/bundle/typescript/src/commands/game/sideQuest/utilities/sin.js.map +1 -1
  51. package/bundle/typescript/src/commands/game/sideQuest/utilities/street-gang.js +2 -14
  52. package/bundle/typescript/src/commands/game/sideQuest/utilities/street-gang.js.map +1 -1
  53. package/package.json +1 -4
@@ -428,6 +428,40 @@ export async function createHeadlessSession(opts) {
428
428
  // subscriber still receives them.
429
429
  session.pushStatus();
430
430
  pushMap();
431
+ // THE SCENE CAN MOVE WITHOUT ANYONE TYPING.
432
+ //
433
+ // Everything above pushes from three places and three only:
434
+ // `command`, `addPlayer`, and this boot. Game's own way of saying
435
+ // "the world changed, repaint" is repaintForScene -- and out here
436
+ // that is INERT, because `_mapBox` is undefined on a server. Not
437
+ // assumed: a real headless boot emits map/room/status 1,1,1, calling
438
+ // updateExits + updateStatus by hand leaves it at 1,1,1, and one
439
+ // `command` takes it to 2,2,2.
440
+ //
441
+ // So a scene swap that happens OUTSIDE a command moves the table's
442
+ // truth and sends nothing after it. draftNextSceneInBackground is
443
+ // that shape by design -- `void continueToNextScene()`, 20-40
444
+ // seconds, resolving long after the command that started it already
445
+ // pushed the OLD scene.
446
+ //
447
+ // Installed AFTER `session` exists, deliberately: repaintForScene
448
+ // runs during the boot synthesis above, and a hook wired earlier
449
+ // would reach for a `session` that is not there yet.
450
+ //
451
+ // Double-pushing on a swap inside a command is accepted and cheap:
452
+ // the client coalesces its repaints (Game.scheduleRender) and
453
+ // route()'s seq dedupe is indifferent. Missing the swap entirely is
454
+ // the failure worth spending frames on.
455
+ //
456
+ // HARDENING. The inert joint is measured; a swap arriving outside a
457
+ // command is read in the source and NOT executed here
458
+ // (continueToNextScene is gated on job completion, so the harness
459
+ // cannot drive one end to end). This is not offered as the cause of
460
+ // any live report.
461
+ game.onSceneChanged = () => {
462
+ session.pushStatus();
463
+ pushMap();
464
+ };
431
465
  return session;
432
466
  });
433
467
  }
@@ -1 +1 @@
1
- {"version":3,"file":"headless.js","sourceRoot":"","sources":["../../../../../../src/commands/game/sideQuest/headless.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"headless.js","sourceRoot":"","sources":["../../../../../../src/commands/game/sideQuest/headless.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,39 @@ export declare const STANCE_CYCLE: FightStance[];
18
18
  export type Plane = 'meat' | 'matrix' | 'astral' | 'drone';
19
19
  /** Meat and a jumped-in drone share the physical world. */
20
20
  export declare function isPhysicalPlane(plane: Plane): boolean;
21
+ /**
22
+ * ARE THESE TWO STANDING ON THE SAME SIDE OF A HOST'S WALL?
23
+ *
24
+ * The companion to fileReach, and it exists for the same reason: the
25
+ * boundary was being asked about in more than one place and the copies
26
+ * disagreed. fileReach settled it for FILES; nothing settled it for
27
+ * ICONS, so `look` honoured insideHost while every verb that picks a
28
+ * target read the room's raw actor list and saw straight through the
29
+ * wall. A technomancer standing inside a host was told "Empty
30
+ * architecture -- turning geometry and nothing in it worth the trip" by
31
+ * one surface and offered those same two IC as spike targets by the
32
+ * next.
33
+ *
34
+ * CANON MAKES THE PANEL BINDING, not the target list. Inside a host you
35
+ * see and interact with the icons inside it and not the ones outside,
36
+ * and from the grid the inside is unreachable (p.246) -- and threading
37
+ * adds its own half of the same rule: "You can only use complex forms
38
+ * on icons you've spotted" (p.251). An icon the room refuses to name is
39
+ * an icon nobody has spotted, so targeting it was never legal.
40
+ *
41
+ * BOTH IN THE SAME ROOM IS THE PRECONDITION, and every caller has it --
42
+ * these are room-scoped target lists. Given that, comparing insideHost
43
+ * directly is the whole rule: both undefined means both are out on the
44
+ * open grid, both equal to the room means both are inside its
45
+ * architecture. There is deliberately no third state.
46
+ *
47
+ * MEAT AND ASTRAL ACTORS PASS TRIVIALLY, which is correct and not an
48
+ * oversight: insideHost is persona state, so a body in the room has
49
+ * none. The plane filters the callers already apply are what keep those
50
+ * actors out of a Matrix target list; this function answers one question
51
+ * and is not a second plane check.
52
+ */
53
+ export declare function sameHostSide(actor: Player, other: Player): boolean;
21
54
  export type SimMode = 'cold' | 'hot';
22
55
  /**
23
56
  * The SR5e-condensed active skill list. Every pool that used to lean on
@@ -513,6 +546,16 @@ export declare class Player extends AbstractPlayer {
513
546
  * rangedBase, so a generated pair of smartlink goggles works without
514
547
  * anyone having added it to a table first. The augmentation tier is
515
548
  * asked of the augmentation system, which already owns that fact.
549
+ *
550
+ * The gear tier must be WORN -- see the note in the body. The
551
+ * augmentation tier is not, and that asymmetry is canon rather than an
552
+ * oversight: an implanted smartlink is part of you (p.453), so there
553
+ * is nothing to put on and nothing to leave in a bag.
554
+ *
555
+ * ONE RESOLVER, TWO CONSUMERS: the +2 Accuracy (smartlinkAccuracyBonus)
556
+ * and the wireless +1 DICE for gear (getAttackPool) both ask this
557
+ * question and must never answer it differently. That is why the worn
558
+ * check lives here and not at either call site.
516
559
  */
517
560
  smartlinkTier(): 'augmentation' | 'gear' | undefined;
518
561
  /**
@@ -868,6 +911,52 @@ export declare class Player extends AbstractPlayer {
868
911
  * `getInitiativePool` is gone rather than kept as an alias, so the
869
912
  * compiler names every caller that still thinks initiative is a pool.
870
913
  */
914
+ /** Meters already crossed this Combat Turn. Reset by beginExchange. */
915
+ movedMetersThisTurn: number;
916
+ /** Extra meters bought by a Sprint this turn (see sprintMeters). */
917
+ sprintMetersThisTurn: number;
918
+ /** p.161: Agility x 2. Past this you are RUNNING for the rest of the turn. */
919
+ get walkRateMeters(): number;
920
+ /** p.161: Agility x 4, before any Sprint. */
921
+ get runRateMeters(): number;
922
+ /** Everything you may still cross this Combat Turn. */
923
+ get movementLeftMeters(): number;
924
+ /**
925
+ * RUNNING IS A STATE, NOT A CHOICE (p.161-162): "as soon as a
926
+ * character exceeds their Walk Rate they are considered Running until
927
+ * the end of the Combat Turn", and running costs -2 dice on everything
928
+ * except the Sprint test itself.
929
+ *
930
+ * This is what gives the walk/run split teeth. Without it the two
931
+ * rates would be a distinction with no consequence -- a number the
932
+ * engine tracked and nothing ever read.
933
+ */
934
+ get isRunningThisTurn(): boolean;
935
+ /** -2 while running, else 0 (p.162 Running Modifiers). */
936
+ get runningPenalty(): number;
937
+ /** A fresh Combat Turn: the whole rate comes back, sprint included. */
938
+ resetMovementTurn(): void;
939
+ /**
940
+ * METERS PER SPRINT HIT.
941
+ *
942
+ * Canon splits this by metatype: +2m per hit for humans, elves and
943
+ * orks, +1m for dwarfs and trolls (p.162).
944
+ *
945
+ * THIS ENGINE HAS NO METATYPES -- checked, not assumed: there is no
946
+ * metatype field on Player, none in the player seed, none in chargen,
947
+ * and no dwarf/troll/elf/ork anywhere outside item prose. Every
948
+ * character it can currently represent is a human-baseline one, so the
949
+ * human value is not a shortcut here, it is the only row of that table
950
+ * this engine has a character for.
951
+ *
952
+ * Inventing a metatype to carry one modifier would be the tail wagging
953
+ * the dog: metatype in SR5 sets attribute maxima, racial bonuses and
954
+ * chargen priorities, and adding a half-real one so Sprint could
955
+ * consult it would put a lie in the character model to decorate a
956
+ * movement rule. When metatypes land, this constant is the one line
957
+ * that has to become a lookup.
958
+ */
959
+ static readonly SPRINT_METERS_PER_HIT = 2;
871
960
  getInitiativeAttribute(): number;
872
961
  /**
873
962
  * HOW MANY D6 THE INITIATIVE TEST ROLLS (p.159 chart, p.474).
@@ -15,6 +15,41 @@ export const STANCE_CYCLE = ['manual', 'guarded', 'aggressive'];
15
15
  export function isPhysicalPlane(plane) {
16
16
  return plane === 'meat' || plane === 'drone';
17
17
  }
18
+ /**
19
+ * ARE THESE TWO STANDING ON THE SAME SIDE OF A HOST'S WALL?
20
+ *
21
+ * The companion to fileReach, and it exists for the same reason: the
22
+ * boundary was being asked about in more than one place and the copies
23
+ * disagreed. fileReach settled it for FILES; nothing settled it for
24
+ * ICONS, so `look` honoured insideHost while every verb that picks a
25
+ * target read the room's raw actor list and saw straight through the
26
+ * wall. A technomancer standing inside a host was told "Empty
27
+ * architecture -- turning geometry and nothing in it worth the trip" by
28
+ * one surface and offered those same two IC as spike targets by the
29
+ * next.
30
+ *
31
+ * CANON MAKES THE PANEL BINDING, not the target list. Inside a host you
32
+ * see and interact with the icons inside it and not the ones outside,
33
+ * and from the grid the inside is unreachable (p.246) -- and threading
34
+ * adds its own half of the same rule: "You can only use complex forms
35
+ * on icons you've spotted" (p.251). An icon the room refuses to name is
36
+ * an icon nobody has spotted, so targeting it was never legal.
37
+ *
38
+ * BOTH IN THE SAME ROOM IS THE PRECONDITION, and every caller has it --
39
+ * these are room-scoped target lists. Given that, comparing insideHost
40
+ * directly is the whole rule: both undefined means both are out on the
41
+ * open grid, both equal to the room means both are inside its
42
+ * architecture. There is deliberately no third state.
43
+ *
44
+ * MEAT AND ASTRAL ACTORS PASS TRIVIALLY, which is correct and not an
45
+ * oversight: insideHost is persona state, so a body in the room has
46
+ * none. The plane filters the callers already apply are what keep those
47
+ * actors out of a Matrix target list; this function answers one question
48
+ * and is not a second plane check.
49
+ */
50
+ export function sameHostSide(actor, other) {
51
+ return actor.insideHost === other.insideHost;
52
+ }
18
53
  export const SKILL_NAMES = [
19
54
  'firearms', 'blades', 'clubs', 'unarmed',
20
55
  'gunnery', 'astral-combat', 'cybercombat',
@@ -663,26 +698,54 @@ export class Player extends AbstractPlayer {
663
698
  * rangedBase, so a generated pair of smartlink goggles works without
664
699
  * anyone having added it to a table first. The augmentation tier is
665
700
  * asked of the augmentation system, which already owns that fact.
701
+ *
702
+ * The gear tier must be WORN -- see the note in the body. The
703
+ * augmentation tier is not, and that asymmetry is canon rather than an
704
+ * oversight: an implanted smartlink is part of you (p.453), so there
705
+ * is nothing to put on and nothing to leave in a bag.
706
+ *
707
+ * ONE RESOLVER, TWO CONSUMERS: the +2 Accuracy (smartlinkAccuracyBonus)
708
+ * and the wireless +1 DICE for gear (getAttackPool) both ask this
709
+ * question and must never answer it differently. That is why the worn
710
+ * check lives here and not at either call site.
666
711
  */
667
712
  smartlinkTier() {
668
713
  if (this.augBonus('firearms') > 0)
669
714
  return 'augmentation';
670
- const worn = Object.values(this._equipment)
671
- .flatMap(slot => (slot ? Object.values(slot) : []))
672
- .filter((i) => Boolean(i));
673
- const carried = this.inventory.getAllItems();
715
+ // ON YOUR FACE, NOT IN YOUR BAG (fxPHSuE4nrH3gAGiy, rejected:
716
+ // "taking Smartlink Goggles isn't the same as equipping them").
717
+ //
718
+ // This used to read worn OR CARRIED, excused by a comment saying the
719
+ // engine "does not model wearing eyewear separately from having it."
720
+ // That was simply false, and the shortcut was taken to route around
721
+ // a problem that did not exist: `head.eyes` is a real slot,
722
+ // documented "e.g. cybereyes, goggles", and determineEquipmentSlot
723
+ // routes BOTH the 'glasses' and 'eyewear' categories into it. So a
724
+ // player can equip the goggles, and the rule has somewhere to live.
725
+ //
726
+ // p.443-444 describes these as worn on the face -- contacts "worn
727
+ // directly on the eyes", glasses "on the bridge of the nose",
728
+ // goggles "strapped to the head" -- and p.433 spends the +2 only
729
+ // when you are USING a smartlink. A pair in the pack is not being
730
+ // used to view the gun's targeting data.
731
+ //
732
+ // head.eyes SPECIFICALLY, not "anywhere in equipment". The old check
733
+ // flattened EVERY slot, and equipment includes torso.backpack, the
734
+ // bandolier and the hip pouches -- so swapping carried for worn
735
+ // wholesale would still pay out for goggles inside an equipped pack.
736
+ // That is the same bug in a smaller bag.
737
+ const onFace = this._equipment.head?.eyes;
738
+ if (!onFace)
739
+ return undefined;
674
740
  const hay = (i) => `${i.name} ${i.description ?? ''}`.toLowerCase();
675
- // Worn OR carried: canon cares that the link is on your face, and
676
- // this engine does not model wearing eyewear separately from having
677
- // it. Named plainly rather than silently treating a bagged pair as
678
- // equipped -- see the note in the PR.
679
741
  // Eyewear by CATEGORY first -- the engine already sorts glasses and
680
742
  // eyewear into their own bins, and a categorised item is a stronger
681
743
  // signal than a word in a name. The name pattern is the fallback for
682
744
  // generated gear that carries the fiction but not the tag.
683
745
  const eyeCategory = (i) => i.category === Category.Glasses || i.category === Category.EyeCyberwere;
684
746
  const eyeWords = /goggles|glasses|contacts|cybereyes|monocle|visor/;
685
- const found = [...worn, ...carried].some(i => /smartlink/.test(hay(i)) && (eyeCategory(i) || eyeWords.test(hay(i))));
747
+ const found = /smartlink/.test(hay(onFace))
748
+ && (eyeCategory(onFace) || eyeWords.test(hay(onFace)));
686
749
  return found ? 'gear' : undefined;
687
750
  }
688
751
  /**
@@ -755,6 +818,14 @@ export class Player extends AbstractPlayer {
755
818
  }
756
819
  /** Whether these two can trade physical blows (see attack.ts targeting). */
757
820
  sharesCombatPlane(other) {
821
+ // A HOST WALL IS A COMBAT BOUNDARY TOO (p.246). Same rule as the
822
+ // spike and decompile target lists, read here so cybercombat gets
823
+ // it without a fourth copy: you cannot shoot into a host from the
824
+ // grid, and you cannot reach out of one to hit the street.
825
+ // Harmless off the Matrix -- insideHost is persona state, so two
826
+ // bodies in a room both carry undefined and the clause is true.
827
+ if (!sameHostSide(this, other))
828
+ return false;
758
829
  return this.plane === other.plane
759
830
  || (isPhysicalPlane(this.plane) && isPhysicalPlane(other.plane));
760
831
  }
@@ -1841,7 +1912,15 @@ export class Player extends AbstractPlayer {
1841
1912
  const smartlink = this.activeCombatSkill() === 'firearms' && this.weaponDrawn
1842
1913
  ? (this.smartlinkTier() === 'gear' ? 1 : this.augBonus('firearms'))
1843
1914
  : 0;
1844
- return Math.max(0, this.agility + this.skillRating(this.activeCombatSkill()) + adeptBonus + this.getWeaponProfile().poolBonus + this.augBonus('attack') + smartlink + this.woundModifier - this.sustainingPenalty);
1915
+ // RUNNING COSTS YOU (p.162 Running Modifiers): -2 dice on everything
1916
+ // you do once you have crossed your Walk Rate this Combat Turn.
1917
+ //
1918
+ // This is what makes walk-vs-run a decision instead of a label. The
1919
+ // engine tracked both rates and read neither, so a runner who
1920
+ // sprinted across a room to reach someone arrived shooting exactly
1921
+ // as straight as one who strolled -- and the movement budget's whole
1922
+ // point is that ground has a price.
1923
+ return Math.max(0, this.agility + this.skillRating(this.activeCombatSkill()) + adeptBonus + this.getWeaponProfile().poolBonus + this.augBonus('attack') + smartlink + this.woundModifier - this.sustainingPenalty - this.runningPenalty);
1845
1924
  }
1846
1925
  /**
1847
1926
  * The subdual pool: bare-hands work regardless of what's in the other
@@ -1937,6 +2016,78 @@ export class Player extends AbstractPlayer {
1937
2016
  * `getInitiativePool` is gone rather than kept as an alias, so the
1938
2017
  * compiler names every caller that still thinks initiative is a pool.
1939
2018
  */
2019
+ // ==================== MOVEMENT BUDGET (SR5 p.161-162) ====================
2020
+ //
2021
+ // THE SECOND HALF OF THE COORDINATES RULING (2QpCcKFKCynk9jYoX: the
2022
+ // gap closes "either immediately out of combat, or WITH ACTIONS IN
2023
+ // COMBAT"). Out of combat you simply walk to someone; in a fight,
2024
+ // ground costs.
2025
+ //
2026
+ // Canon, RAG-checked: Walk Rate is Agility x 2 METERS PER COMBAT TURN
2027
+ // and Run Rate is Agility x 4 (p.161). The rate is a WHOLE-TURN TOTAL,
2028
+ // never a per-pass allowance -- the book's own worked example has a
2029
+ // character spend 8m of a 10m walk rate in one pass and carry the
2030
+ // remaining 2m (then 12m of run) into the next. Modelling it per pass
2031
+ // is the mistake this comment exists to prevent.
2032
+ /** Meters already crossed this Combat Turn. Reset by beginExchange. */
2033
+ movedMetersThisTurn = 0;
2034
+ /** Extra meters bought by a Sprint this turn (see sprintMeters). */
2035
+ sprintMetersThisTurn = 0;
2036
+ /** p.161: Agility x 2. Past this you are RUNNING for the rest of the turn. */
2037
+ get walkRateMeters() {
2038
+ return this.agility * 2;
2039
+ }
2040
+ /** p.161: Agility x 4, before any Sprint. */
2041
+ get runRateMeters() {
2042
+ return this.agility * 4;
2043
+ }
2044
+ /** Everything you may still cross this Combat Turn. */
2045
+ get movementLeftMeters() {
2046
+ return Math.max(0, this.runRateMeters + this.sprintMetersThisTurn - this.movedMetersThisTurn);
2047
+ }
2048
+ /**
2049
+ * RUNNING IS A STATE, NOT A CHOICE (p.161-162): "as soon as a
2050
+ * character exceeds their Walk Rate they are considered Running until
2051
+ * the end of the Combat Turn", and running costs -2 dice on everything
2052
+ * except the Sprint test itself.
2053
+ *
2054
+ * This is what gives the walk/run split teeth. Without it the two
2055
+ * rates would be a distinction with no consequence -- a number the
2056
+ * engine tracked and nothing ever read.
2057
+ */
2058
+ get isRunningThisTurn() {
2059
+ return this.movedMetersThisTurn > this.walkRateMeters;
2060
+ }
2061
+ /** -2 while running, else 0 (p.162 Running Modifiers). */
2062
+ get runningPenalty() {
2063
+ return this.isRunningThisTurn ? 2 : 0;
2064
+ }
2065
+ /** A fresh Combat Turn: the whole rate comes back, sprint included. */
2066
+ resetMovementTurn() {
2067
+ this.movedMetersThisTurn = 0;
2068
+ this.sprintMetersThisTurn = 0;
2069
+ }
2070
+ /**
2071
+ * METERS PER SPRINT HIT.
2072
+ *
2073
+ * Canon splits this by metatype: +2m per hit for humans, elves and
2074
+ * orks, +1m for dwarfs and trolls (p.162).
2075
+ *
2076
+ * THIS ENGINE HAS NO METATYPES -- checked, not assumed: there is no
2077
+ * metatype field on Player, none in the player seed, none in chargen,
2078
+ * and no dwarf/troll/elf/ork anywhere outside item prose. Every
2079
+ * character it can currently represent is a human-baseline one, so the
2080
+ * human value is not a shortcut here, it is the only row of that table
2081
+ * this engine has a character for.
2082
+ *
2083
+ * Inventing a metatype to carry one modifier would be the tail wagging
2084
+ * the dog: metatype in SR5 sets attribute maxima, racial bonuses and
2085
+ * chargen priorities, and adding a half-real one so Sprint could
2086
+ * consult it would put a lie in the character model to decorate a
2087
+ * movement rule. When metatypes land, this constant is the one line
2088
+ * that has to become a lookup.
2089
+ */
2090
+ static SPRINT_METERS_PER_HIT = 2;
1940
2091
  getInitiativeAttribute() {
1941
2092
  // NO sustaining penalty here (RAW spell pass): initiative is a score,
1942
2093
  // not a TEST -- holding a spell slows what you DO, never when you get