@maka/maka-cli 5.74.0 → 5.75.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 (85) hide show
  1. package/bundle/typescript/package.json +1 -1
  2. package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.js +4 -4
  3. package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.js.map +1 -1
  4. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +3 -3
  5. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -1
  6. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js +12 -1
  7. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js.map +1 -1
  8. package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js +4 -4
  9. package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js.map +1 -1
  10. package/bundle/typescript/src/commands/game/sideQuest/commands/move.d.ts +42 -0
  11. package/bundle/typescript/src/commands/game/sideQuest/commands/move.js +288 -46
  12. package/bundle/typescript/src/commands/game/sideQuest/commands/move.js.map +1 -1
  13. package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js +8 -0
  14. package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js.map +1 -1
  15. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +20 -15
  16. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js.map +1 -1
  17. package/bundle/typescript/src/commands/game/sideQuest/commands/take.js +10 -2
  18. package/bundle/typescript/src/commands/game/sideQuest/commands/take.js.map +1 -1
  19. package/bundle/typescript/src/commands/game/sideQuest/commands/tap.js +9 -8
  20. package/bundle/typescript/src/commands/game/sideQuest/commands/tap.js.map +1 -1
  21. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.d.ts +83 -0
  22. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.js +253 -0
  23. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.js.map +1 -0
  24. package/bundle/typescript/src/commands/game/sideQuest/factories/repro-scene.js +116 -3
  25. package/bundle/typescript/src/commands/game/sideQuest/factories/repro-scene.js.map +1 -1
  26. package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +39 -0
  27. package/bundle/typescript/src/commands/game/sideQuest/game.js +85 -14
  28. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  29. package/bundle/typescript/src/commands/game/sideQuest/headless.js +5 -3
  30. package/bundle/typescript/src/commands/game/sideQuest/headless.js.map +1 -1
  31. package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +35 -0
  32. package/bundle/typescript/src/commands/game/sideQuest/models/player.js +46 -0
  33. package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
  34. package/bundle/typescript/src/commands/game/sideQuest/types/repro.d.ts +158 -3
  35. package/bundle/typescript/src/commands/game/sideQuest/types/repro.js +24 -1
  36. package/bundle/typescript/src/commands/game/sideQuest/types/repro.js.map +1 -1
  37. package/bundle/typescript/src/commands/game/sideQuest/utilities/ar.js +33 -3
  38. package/bundle/typescript/src/commands/game/sideQuest/utilities/ar.js.map +1 -1
  39. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-dump.js +2 -2
  40. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-dump.js.map +1 -1
  41. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-vocab.d.ts +4 -2
  42. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-vocab.js +15 -3
  43. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-vocab.js.map +1 -1
  44. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.d.ts +6 -0
  45. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.js.map +1 -1
  46. package/bundle/typescript/src/commands/game/sideQuest/utilities/fuzzy-match.d.ts +24 -0
  47. package/bundle/typescript/src/commands/game/sideQuest/utilities/fuzzy-match.js +31 -0
  48. package/bundle/typescript/src/commands/game/sideQuest/utilities/fuzzy-match.js.map +1 -1
  49. package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-names.d.ts +20 -0
  50. package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-names.js +21 -0
  51. package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-names.js.map +1 -1
  52. package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.js +4 -3
  53. package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.js.map +1 -1
  54. package/bundle/typescript/src/commands/game/sideQuest/utilities/marks.js +2 -1
  55. package/bundle/typescript/src/commands/game/sideQuest/utilities/marks.js.map +1 -1
  56. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.d.ts +71 -18
  57. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.js +109 -21
  58. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.js.map +1 -1
  59. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-view.d.ts +38 -0
  60. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-view.js +46 -0
  61. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-view.js.map +1 -1
  62. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.d.ts +31 -0
  63. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js +41 -0
  64. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js.map +1 -1
  65. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.d.ts +29 -0
  66. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.js +33 -0
  67. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.js.map +1 -0
  68. package/bundle/typescript/src/commands/game/sideQuest-backlog.sub.cmd.js +1 -1
  69. package/bundle/typescript/src/commands/game/sideQuest-backlog.sub.cmd.js.map +1 -1
  70. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +34 -8
  71. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
  72. package/bundle/typescript/src/commands/set/global.sub.cmd.js +1 -20
  73. package/bundle/typescript/src/commands/set/global.sub.cmd.js.map +1 -1
  74. package/bundle/typescript/src/generator.js +1 -0
  75. package/bundle/typescript/src/generator.js.map +1 -1
  76. package/bundle/typescript/src/templates/meteor/collection/tests.js +1 -1
  77. package/bundle/typescript/src/templates/meteor/collection/tests.js.ts +1 -1
  78. package/bundle/typescript/src/templates/react/test/test.js.jsx +31 -29
  79. package/bundle/typescript/src/templates/react/test/test.js.tsx +31 -29
  80. package/bundle/typescript/src/tools/browser/open-browser.d.ts +7 -0
  81. package/bundle/typescript/src/tools/browser/open-browser.js +21 -0
  82. package/bundle/typescript/src/tools/browser/open-browser.js.map +1 -0
  83. package/bundle/typescript/src/tools/pkg/pkg.class.js +12 -1
  84. package/bundle/typescript/src/tools/pkg/pkg.class.js.map +1 -1
  85. package/package.json +1 -1
@@ -129,10 +129,39 @@ export function buildReproScene(fixture) {
129
129
  if (items.length > MAX_ITEMS) {
130
130
  throw new ReproFixtureError(`A repro carries at most ${MAX_ITEMS} items; this one has ${items.length}.`);
131
131
  }
132
+ // A CIRCULATING NPC HOLDS NOTHING. Refused rather than resolved:
133
+ // "guarding" and "atDoorway" both mean "stands in the doorway", and
134
+ // "circulating" means "stands nowhere". A fixture asking for both
135
+ // would build, walk, and hold the door open while claiming to guard
136
+ // it -- the same silent-nothing this file exists to prevent.
137
+ const contradictory = npcs.find(n => n.circulating && (n.guarding || n.atDoorway));
138
+ if (contradictory) {
139
+ throw new ReproFixtureError(`"${contradictory.name}" is asked to circulate AND hold the doorway. `
140
+ + `A circulating NPC stands nowhere, so it can guard nothing -- pick one.`);
141
+ }
132
142
  const duplicateNpc = npcs.find((n, i) => npcs.findIndex(o => o.name === n.name) !== i);
133
143
  if (duplicateNpc) {
134
144
  throw new ReproFixtureError(`Two NPCs are both called "${duplicateNpc.name}" -- a name has to pick one body out.`);
135
145
  }
146
+ // ICE NEEDS SOMETHING TO GUARD. Refused rather than promoted to a
147
+ // host: a builder that quietly invented the host would be inventing
148
+ // the very fixture the bench exists to demonstrate.
149
+ const homelessIce = npcs.find(n => n.ice) && !fixture.host;
150
+ if (homelessIce) {
151
+ throw new ReproFixtureError(`This fixture has ice but no host. Intrusion countermeasures guard a node -- `
152
+ + `add "host": {} (or give it a rating and access) so there is something for it to be inside.`);
153
+ }
154
+ // ICE DOES NOT STAND ANYWHERE, AND CARRIES NOTHING (raised by
155
+ // backlog-session-1). Spots are MEAT positions -- spotOf returns
156
+ // undefined off the meat plane -- so a doorway or a patrol route on
157
+ // ice is silently inert rather than wrong, and silently inert is
158
+ // exactly what these invariants exist to catch. `armed` is a pistol
159
+ // and a commlink, which on a countermeasure is meaningless at best.
160
+ const misplacedIce = npcs.find(n => n.ice && (n.atDoorway || n.guarding || n.circulating || n.armed));
161
+ if (misplacedIce) {
162
+ throw new ReproFixtureError(`"${misplacedIce.name}" is ice, so it cannot also stand in a doorway, guard, circulate or carry a gun. `
163
+ + `Ice lives in the host, not on the floor -- drop the meat-side flags, or drop "ice".`);
164
+ }
136
165
  const barrier = fixture.barrier;
137
166
  const direction = barrier?.sealsExit ?? Direction.NORTH;
138
167
  const startSide = fixture.start ?? 'barrier';
@@ -208,7 +237,36 @@ export function buildReproScene(fixture) {
208
237
  if (level) {
209
238
  spots.push({ name: level.name, level: 1 });
210
239
  }
240
+ // `climbOnly` is applied AFTER the grid exists, in buildReproScene
241
+ // below -- the seed cannot express "no ladder", because the safe link
242
+ // is synthesised by the grid rather than declared by the room.
243
+ // THE HOST, on whichever side was asked for.
244
+ //
245
+ // INVARIANT 4: a host goes on ONE room, and by default the one the
246
+ // runner is standing in. A bench whose node sits behind the door it
247
+ // is also testing makes the reviewer walk before they can type the
248
+ // verb under review, and the first thing they will report is that
249
+ // `hack` says there is no host here.
250
+ const host = fixture.host;
251
+ const hostSide = host?.side ?? startSide;
252
+ if (host?.rating !== undefined && (host.rating < 1 || host.rating > 12)) {
253
+ throw new ReproFixtureError(`A host rating is 1-12 (SR5 p.247); this one is ${host.rating}.`);
254
+ }
255
+ /** hasNode/nodeAccess/hostRating/watched already mean exactly this on
256
+ * the room seed -- see types/seed/room-seed.ts. Nothing is invented
257
+ * here, so a bench cannot describe a host the engine cannot build. */
258
+ const hostFields = (side) => (host && hostSide === side
259
+ ? { hasNode: true, nodeAccess: host.access ?? 'wireless', hostRating: host.rating }
260
+ : {});
261
+ // Cameras WITHOUT a host. Never emitted alongside one: a host is
262
+ // always watched already, and saying it twice invites the next reader
263
+ // to think the two flags are independent.
264
+ const watchedFields = (side) => (fixture.watched && !(host && hostSide === side)
265
+ ? { watched: true }
266
+ : {});
211
267
  const barrierRoom = {
268
+ ...hostFields('barrier'),
269
+ ...watchedFields('barrier'),
212
270
  name: REPRO_BARRIER_ROOM,
213
271
  description: barrier
214
272
  ? `A short concrete run ending at one door, ${direction} of you. `
@@ -218,12 +276,14 @@ export function buildReproScene(fixture) {
218
276
  roomType: 'Street',
219
277
  size: level ? 'large' : 'medium',
220
278
  spots,
221
- levels: level ? [{ name: level.name, side: level.side ?? 'north', kind: level.kind ?? 'catwalk' }] : undefined,
279
+ levels: level ? [{ name: level.name, side: level.side ?? 'north', kind: level.kind ?? 'catwalk', climbOnly: level.climbOnly === true }] : undefined,
222
280
  isStartRoom: startSide === 'barrier',
223
281
  exits: [{ direction, targetRoom: REPRO_FAR_ROOM, atSpot: REPRO_DOORWAY_SPOT }],
224
282
  devices: device ? [device] : undefined,
225
283
  };
226
284
  const farRoom = {
285
+ ...hostFields('far'),
286
+ ...watchedFields('far'),
227
287
  name: REPRO_FAR_ROOM,
228
288
  description: `The other side of the door, which lies ${OPPOSITE[direction]} of you`
229
289
  + `${barrier ? ` and is held from the far side by ${device.name}` : ''}. Bare, and no further out.`,
@@ -240,6 +300,32 @@ export function buildReproScene(fixture) {
240
300
  const npcSeeds = npcs.map(npc => {
241
301
  const side = npc.side ?? 'barrier';
242
302
  const inDoorway = standsInDoorway(npc);
303
+ // ICE LIVES IN THE HOST'S ROOM, and takes its side from the host
304
+ // rather than from `side` -- one placement rule, not two. plane
305
+ // 'matrix' is what MAKES it ice (npc-seed.ts), and scene-factory
306
+ // then treats it as opposition by construction, so the fixture
307
+ // never has to declare hostility to get hostile ice.
308
+ //
309
+ // No startSpot, deliberately: a spot is a meat position and would
310
+ // be silently inert on a persona. The refusal above stops a fixture
311
+ // ASKING for one; this is the same rule on the emitting side.
312
+ if (npc.ice) {
313
+ return {
314
+ plane: 'matrix',
315
+ description: npc.concept,
316
+ dialogue: [],
317
+ player: {
318
+ name: npc.name,
319
+ startLocation: roomFor(fixture.host?.side ?? startSide),
320
+ lifestyleChoices: [],
321
+ combat: {
322
+ body: 4, agility: 4, reaction: 4, combatSkill: 3, strength: 4,
323
+ willpower: 3, logic: 3, intuition: 3, charisma: 3, edge: 2,
324
+ skills: { unarmed: 3, perception: 3, negotiation: 3 },
325
+ },
326
+ },
327
+ };
328
+ }
243
329
  return {
244
330
  description: npc.concept,
245
331
  dialogue: [],
@@ -250,7 +336,10 @@ export function buildReproScene(fixture) {
250
336
  // direction the barrier seals, never supplied -- a guarding NPC
251
337
  // standing anywhere else holds nothing, silently, and the
252
338
  // walkthrough would still pass.
253
- startSpot: inDoorway ? REPRO_DOORWAY_SPOT : REPRO_FLOOR_SPOT,
339
+ // Omitted entirely when circulating -- an undefined startSpot is
340
+ // what "no cell" means to the scene factory. Not the empty
341
+ // string, which would read as a spot whose name is nothing.
342
+ ...(npc.circulating ? {} : { startSpot: inDoorway ? REPRO_DOORWAY_SPOT : REPRO_FLOOR_SPOT }),
254
343
  guarding: npc.guarding === true,
255
344
  lifestyleChoices: [],
256
345
  combat: {
@@ -273,7 +362,7 @@ export function buildReproScene(fixture) {
273
362
  rating: 'Common',
274
363
  weight: 0.1,
275
364
  room: roomFor(it.side ?? 'barrier'),
276
- atSpot: REPRO_FLOOR_SPOT,
365
+ atSpot: it.atDoorway ? REPRO_DOORWAY_SPOT : REPRO_FLOOR_SPOT,
277
366
  }));
278
367
  // INVARIANT 4: the key is on the side the runner starts on. A key
279
368
  // behind the door it opens is a bench nobody can work, and it reads
@@ -321,6 +410,30 @@ export function buildReproScene(fixture) {
321
410
  player: {
322
411
  name: 'Testbed',
323
412
  startLocation: startRoom,
413
+ // THE RUNNER STARTS NOWHERE, and this line does not yet fix it.
414
+ //
415
+ // Stated rather than quietly omitted, because it BLOCKS the climb
416
+ // bench this fixture work exists for. Every bench NPC gets a
417
+ // spot; the runner gets none, so spotOf() returns undefined for
418
+ // the one actor a reviewer controls -- and move.ts derives
419
+ // climbSteps from that spot, so with none there is no path, no
420
+ // climb link, and no climbing test. A level fixture walks you
421
+ // onto the catwalk with no roll at all.
422
+ //
423
+ // `startSpot` IS declared on player-seed.ts and scene-factory
424
+ // never reads it for the player (NPCs get theirs applied a
425
+ // hundred lines earlier). Setting it here alone is therefore
426
+ // inert today -- kept because it is the correct INTENT and the
427
+ // seed is where the intent belongs, and reported rather than
428
+ // half-wired: the remaining piece is that something re-places the
429
+ // runner after synthesis, and the currentLocation setter clears
430
+ // atSpot on every room change.
431
+ //
432
+ // Measured, not assumed: with climbOnly the grid really does emit
433
+ // climb,climb instead of ladder,climb, and pathClimbSteps finds
434
+ // the link -- the bench still says "You cross to the catwalk"
435
+ // because the runner has no spot to path FROM.
436
+ startSpot: REPRO_FLOOR_SPOT,
324
437
  // NO RESIDENCE. Copied from paritySeed originally, where it is
325
438
  // right -- that fixture models a real run. A bench models nothing
326
439
  // and nobody lives in it; declaring a home here only invites the
@@ -1 +1 @@
1
- {"version":3,"file":"repro-scene.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/factories/repro-scene.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repro-scene.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/factories/repro-scene.ts"],"names":[],"mappings":"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"}
@@ -812,6 +812,45 @@ export default class Game {
812
812
  constructor(player: Player, sceneSeed: ISceneSeedJson);
813
813
  private registerCommands;
814
814
  private determineStartRoom;
815
+ /**
816
+ * WHERE THE RUNNER IS STANDING, when the seed says.
817
+ *
818
+ * `startSpot` has been declared on player-seed.ts all along and
819
+ * nothing read it FOR THE PLAYER -- NPCs get theirs applied inside
820
+ * scene-factory, the runner got nothing. So spotOf() returned
821
+ * undefined for the one actor a person controls, and every
822
+ * SPOT-RELATIVE mechanic quietly did not apply to them: move.ts
823
+ * derives climbSteps from the actor's spot, so with none there is no
824
+ * path, no climb link and no climbing test at all. A repro bench with
825
+ * a catwalk walked you up it with no roll.
826
+ *
827
+ * APPLIED AFTER THE PLACEMENT, and the precise reason is worth
828
+ * stating because I first wrote it down wrong. The currentLocation
829
+ * setter clears atSpot only when the room actually CHANGES
830
+ * (`if (this._currentLocation !== room)`). On a fresh boot the player
831
+ * is already in the start room, so either order would work there --
832
+ * a reordering mutation stays green, and I am saying so rather than
833
+ * letting the comment claim a guarantee its test does not give.
834
+ *
835
+ * It matters on the TRAVEL path below, where the runner really does
836
+ * move from the hub into a new scene and the setter really does fire.
837
+ * Applying after placement is correct in both cases, which is why it
838
+ * is the order used in both -- resumeOpenRun documents the same
839
+ * ordering for the same reason.
840
+ *
841
+ * What IS covered by a red-on-removal test is the call existing at
842
+ * all: nothing read this field before.
843
+ *
844
+ * REFUSES A SPOT THE ROOM DOES NOT HAVE rather than setting a name
845
+ * nothing answers to: an atSpot with no cell behind it is the
846
+ * silently-inert state this codebase keeps finding, and the runner
847
+ * standing nowhere is strictly better than the runner standing
848
+ * somewhere imaginary.
849
+ *
850
+ * No shipped scene sets it -- scene1 and scene2 both leave it
851
+ * undefined -- so this changes nothing that exists today.
852
+ */
853
+ private applySeedStartSpot;
815
854
  /**
816
855
  * Wires a fresh, always-unlocked path between the persistent home base
817
856
  * and wherever the player is starting the current job from. Clears the
@@ -15,7 +15,7 @@ import { isFence, LIFESTYLE_TIERS } from './utilities/commerce.js';
15
15
  import { bestFakeSin, wandRead, processArrest } from './utilities/sin.js';
16
16
  import { renderMapViewport, mapCaption } from './utilities/map-view.js';
17
17
  import { tallestRoomRows } from './utilities/room-grid.js';
18
- import { renderRoomLayoutCompact, crewOfTable } from './utilities/room-view.js';
18
+ import { renderRoomLayoutCompact, crewOfTable, roomCaption } from './utilities/room-view.js';
19
19
  import { getPref } from './utilities/prefs.js';
20
20
  import { rollPool, formatRoll } from './utilities/dice.js';
21
21
  import { Direction } from './types/shared/direction-enum.js';
@@ -71,7 +71,7 @@ import { EdgeCommand } from './commands/edge.js';
71
71
  import { SheetCommand } from './commands/sheet.js';
72
72
  import { CallCommand } from './commands/call.js';
73
73
  import { EndCallCommand } from './commands/end-call.js';
74
- import { fuzzyPickName, levenshteinDistance } from './utilities/fuzzy-match.js';
74
+ import { fuzzyPickName, guessVerb } from './utilities/fuzzy-match.js';
75
75
  import { PickCommand } from './commands/pick.js';
76
76
  import { HackCommand } from './commands/hack.js';
77
77
  import { CastCommand } from './commands/cast.js';
@@ -457,8 +457,29 @@ export default class Game {
457
457
  heatBand() {
458
458
  if (this._runHeat <= 0)
459
459
  return undefined;
460
+ // NOBODY IS COMING, AND THAT IS CANON (oPqWB3CqzQmhpq3o2, player:
461
+ // "HTR assembling somewhere close, warning, but it never resulted in
462
+ // anything"). They were right, and the old line was the lie.
463
+ //
464
+ // SR5 p.352 gives HTR response times by the site's security level,
465
+ // and Run Faster p.220 extends it as neighbourhood zones: AA is
466
+ // 1D6+4 MINUTES, B is 1D6x5, and Zone 0 -- the lawless barrens --
467
+ // is 2D6 HOURS. Every shipped scene is a barrens district, so no
468
+ // response team reaches the player mid-run. Nothing arriving is the
469
+ // CORRECT outcome; promising an arrival was the defect.
470
+ //
471
+ // So the band now names what heat this high actually buys, which is
472
+ // not nothing: the ride home runs a Knight Errant checkpoint
473
+ // (checkpointOnRideHome), and at exactly this threshold the verifier
474
+ // there rolls 8 dice against a fake SIN instead of 6. Same number,
475
+ // deliberately -- a test pins the two together so the promise and
476
+ // the mechanic cannot drift apart.
477
+ //
478
+ // Security ratings per site are deferred by player ruling; when they
479
+ // land, a corporate site can honestly warn about a team that really
480
+ // is coming.
460
481
  if (this._runHeat >= 12)
461
- return `{red-fg}🔥 Heat: HTR assembling somewhere close{/red-fg}`;
482
+ return `{red-fg}🔥 Heat: nobody's coming out here -- they'll be waiting at the checkpoint{/red-fg}`;
462
483
  if (this._runHeat >= Game.CHECKPOINT_HEAT)
463
484
  return `{red-fg}🔥 Heat: sirens circling closer{/red-fg}`;
464
485
  if (this._runHeat >= 3)
@@ -2202,6 +2223,12 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
2202
2223
  // Vertical travel by name (commands/climb.ts) -- shortcuts over
2203
2224
  // move, which already crosses levels.
2204
2225
  CommandFactory.registerCommand('climb', ClimbCommand);
2226
+ // The word a player actually typed (vkDz3cquad25GACpm). mantle is
2227
+ // six edits from climb, so no amount of typo tolerance was ever
2228
+ // going to find it -- a synonym has to be said out loud.
2229
+ CommandFactory.registerCommand('mantle', ClimbCommand);
2230
+ CommandFactory.registerCommand('scale', ClimbCommand);
2231
+ CommandFactory.registerCommand('clamber', ClimbCommand);
2205
2232
  CommandFactory.registerCommand('descend', DescendCommand);
2206
2233
  CommandFactory.registerCommand('run', RunCommand);
2207
2234
  CommandFactory.registerCommand('sprint', SprintCommand);
@@ -2265,6 +2292,53 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
2265
2292
  determineStartRoom() {
2266
2293
  return this.scene.determineStartRoom();
2267
2294
  }
2295
+ /**
2296
+ * WHERE THE RUNNER IS STANDING, when the seed says.
2297
+ *
2298
+ * `startSpot` has been declared on player-seed.ts all along and
2299
+ * nothing read it FOR THE PLAYER -- NPCs get theirs applied inside
2300
+ * scene-factory, the runner got nothing. So spotOf() returned
2301
+ * undefined for the one actor a person controls, and every
2302
+ * SPOT-RELATIVE mechanic quietly did not apply to them: move.ts
2303
+ * derives climbSteps from the actor's spot, so with none there is no
2304
+ * path, no climb link and no climbing test at all. A repro bench with
2305
+ * a catwalk walked you up it with no roll.
2306
+ *
2307
+ * APPLIED AFTER THE PLACEMENT, and the precise reason is worth
2308
+ * stating because I first wrote it down wrong. The currentLocation
2309
+ * setter clears atSpot only when the room actually CHANGES
2310
+ * (`if (this._currentLocation !== room)`). On a fresh boot the player
2311
+ * is already in the start room, so either order would work there --
2312
+ * a reordering mutation stays green, and I am saying so rather than
2313
+ * letting the comment claim a guarantee its test does not give.
2314
+ *
2315
+ * It matters on the TRAVEL path below, where the runner really does
2316
+ * move from the hub into a new scene and the setter really does fire.
2317
+ * Applying after placement is correct in both cases, which is why it
2318
+ * is the order used in both -- resumeOpenRun documents the same
2319
+ * ordering for the same reason.
2320
+ *
2321
+ * What IS covered by a red-on-removal test is the call existing at
2322
+ * all: nothing read this field before.
2323
+ *
2324
+ * REFUSES A SPOT THE ROOM DOES NOT HAVE rather than setting a name
2325
+ * nothing answers to: an atSpot with no cell behind it is the
2326
+ * silently-inert state this codebase keeps finding, and the runner
2327
+ * standing nowhere is strictly better than the runner standing
2328
+ * somewhere imaginary.
2329
+ *
2330
+ * No shipped scene sets it -- scene1 and scene2 both leave it
2331
+ * undefined -- so this changes nothing that exists today.
2332
+ */
2333
+ applySeedStartSpot(seed) {
2334
+ const wanted = seed?.player?.startSpot;
2335
+ if (!wanted)
2336
+ return;
2337
+ const room = this.player.currentLocation;
2338
+ if (!room?.spots?.some(s => s.name === wanted))
2339
+ return;
2340
+ this.player.atSpot = wanted;
2341
+ }
2268
2342
  /**
2269
2343
  * Wires a fresh, always-unlocked path between the persistent home base
2270
2344
  * and wherever the player is starting the current job from. Clears the
@@ -2401,6 +2475,7 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
2401
2475
  }
2402
2476
  this.scene.initialize(this);
2403
2477
  this.player.currentLocation = this.determineStartRoom();
2478
+ this.applySeedStartSpot(this.sceneSeed);
2404
2479
  this.registerCommands();
2405
2480
  // The description follows the rent from day one (see
2406
2481
  // syncHomeToLifestyle) -- a fresh session at the default Squatter tier
@@ -3453,6 +3528,7 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
3453
3528
  this.scene = await SceneSynthesizer.synthesizeFromJson(seed, this.player, false, false);
3454
3529
  this.scene.initialize(this);
3455
3530
  this.player.currentLocation = this.determineStartRoom();
3531
+ this.applySeedStartSpot(seed);
3456
3532
  // New job -- and the needs come due at the door (see
3457
3533
  // applyDepartureNeeds): edge only refills fed-and-slept, and ignored
3458
3534
  // needs land as locked fatigue. Lines ride the JOB banner below.
@@ -4452,8 +4528,9 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
4452
4528
  isOtherPlayer: a => this.scene.isHumanControlled(a),
4453
4529
  });
4454
4530
  if (roomLines.length > 0) {
4455
- const spot = spotOf(this.player);
4456
- roomLines.push(caption(spot ? `@ ${spot}` : '(moving through)', boxWidth));
4531
+ // roomCaption owns BOTH halves now -- where you stand, and that
4532
+ // somebody here has no cell to be drawn in (S6b4TLQWq46RN5kGu).
4533
+ roomLines.push(caption(roomCaption(here, this.player), boxWidth));
4457
4534
  }
4458
4535
  this.setRoomOverlay(roomLines);
4459
4536
  }
@@ -4613,15 +4690,9 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
4613
4690
  // a note -- EXCEPT anything that ends the session, which only ever
4614
4691
  // gets a suggestion: a typo must never quit the game.
4615
4692
  const knownVerbs = [...Object.keys(CommandFactory.getAllRegisteredCommands()), 'help', 'clear', 'quit', 'exit'];
4616
- let guess = fuzzyPickName(verb, knownVerbs);
4617
- // The shared matcher refuses typo tolerance on words <= 3 chars (too
4618
- // risky for item/NPC names) -- but the verb list is small and
4619
- // distinct, so a unique edit-distance-1 hit is safe ("maop" -> "map").
4620
- if (!guess && verb.length >= 3) {
4621
- const close = knownVerbs.filter(v => levenshteinDistance(verb, v) <= 1);
4622
- if (close.length === 1)
4623
- guess = close[0];
4624
- }
4693
+ // A near-miss SPELLING beats a substring for verbs -- see
4694
+ // guessVerb, which owns the ordering and the reason.
4695
+ const guess = guessVerb(verb, knownVerbs);
4625
4696
  if (guess && guess !== verb) {
4626
4697
  if (guess === 'quit' || guess === 'exit') {
4627
4698
  return out(`I don't understand "${verb}" -- did you mean "${guess}"?`);