@maka/maka-cli 5.389.0 → 5.391.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maka/maka-cli",
3
- "version": "5.389.0",
3
+ "version": "5.391.0",
4
4
  "type": "module",
5
5
  "summary": "A command line tool for scaffolding Meteor 3.x applications using either React.",
6
6
  "description": "A command line tool for scaffolding Meteor 3.x applications using React.",
@@ -3396,5 +3396,12 @@
3396
3396
  // residence that is not the runner's home has its street door locked
3397
3397
  // (Game.lockForeignResidences; opens from inside), and `rest` counts
3398
3398
  // only the runner's own home as a bed.
3399
- export const ENGINE_VERSION = '1.201.0';
3399
+ // 1.202.0 (2026-10-06): NO "other" ON THE HELP SCREEN. The nine sprite
3400
+ // powers (camouflage, cookie, ... watermark) shelve under resonance;
3401
+ // registered in a loop, they had slipped past the taxonomy test.
3402
+ // 1.203.0 (2026-10-06): A DOOR OR A WINDOW IS NOT FURNITURE. A spot whose
3403
+ // head noun is a door (door, gate, entrance, ...) or a window keeps its
3404
+ // anchor but fills no cell (room-grid wallFixtureKindOf): an exit's door
3405
+ // is already the exit's mark, any other door and every window is prose.
3406
+ export const ENGINE_VERSION = '1.203.0';
3400
3407
  //# sourceMappingURL=engine-version.js.map
@@ -6,6 +6,14 @@ export function doorwayKindOf(spotName) {
6
6
  return 'lateral';
7
7
  return undefined;
8
8
  }
9
+ export function wallFixtureKindOf(spotName) {
10
+ const head = spotName.trim().toLowerCase().split(/\s+/).pop() ?? '';
11
+ if (/^(door|doors|doorway|gate|gates|entrance|entry|archway|airlock)$/.test(head))
12
+ return 'door';
13
+ if (/^(window|windows)$/.test(head))
14
+ return 'window';
15
+ return undefined;
16
+ }
9
17
  export const METERS_PER_CELL = 2;
10
18
  /**
11
19
  * How tall one storey is. A CHOICE, not a citation -- SR5 never says how
@@ -893,6 +901,15 @@ export function synthesizeGrid(input) {
893
901
  ...(input.keepClear ?? []).map(c => key({ x: c.x, y: c.y, z: 0 })),
894
902
  ]);
895
903
  for (const [name, anchor] of grid.spotCells.entries()) {
904
+ // A DOOR OR WINDOW HAS NO FURNITURE (wallFixtureKindOf): an empty
905
+ // footprint, as a camera's perch has. The anchor stays claimed, so
906
+ // nothing grows onto it; it is simply floor. No rng is skipped --
907
+ // growFurniture draws none for a one-cell name -- so nothing else in
908
+ // the room moves.
909
+ if (wallFixtureKindOf(name)) {
910
+ grid.spotFootprints.set(name, []);
911
+ continue;
912
+ }
896
913
  if (name === OPEN_FLOOR_NAME || exitKeys.has(key(anchor))) {
897
914
  grid.spotFootprints.set(name, [anchor]);
898
915
  continue;
@@ -7,7 +7,7 @@ import { DRONE_COLOUR } from './drone-prose.js';
7
7
  import { PLAYER_GLYPH, OTHER_PLAYER_GLYPH, OTHER_PLAYER_COLOR, NEUTRAL_GLYPH, HOSTILE_GLYPH, CREW_GLYPH, DEAD_GLYPH, DOWNED_GLYPH, SPOT_GLYPH, RIGGED_GLYPH, UP_GLYPH, CAMERA_GLYPH, CAMERA_COLOR, CAMERA_DEAD_COLOR, BARRIER_GLYPH, BARRIER_COLOR, MANA_BARRIER_COLOR, exitGlyph, GLYPH_RANK, } from './map-glyphs.js';
8
8
  import { barriersWire } from './ways-out.js';
9
9
  import { xRulerLine, yRulerLabel, yGutterWidth } from './map-rulers.js';
10
- import { key, levelFootprint, dimsForSize, roomRasterRows, METERS_PER_LEVEL, METERS_PER_CELL, } from './room-grid.js';
10
+ import { key, levelFootprint, dimsForSize, roomRasterRows, METERS_PER_LEVEL, METERS_PER_CELL, wallFixtureKindOf, } from './room-grid.js';
11
11
  /**
12
12
  * WHO THIS PANEL DRAWS: everyone you can see, plus every ARO your AR is
13
13
  * showing you (BJDoj9xwy5GmnHAmj: "I should always be able to spot an
@@ -209,6 +209,11 @@ function buildRenderMaps(grid, room, viewer) {
209
209
  cellToSpot.set(key(c), name);
210
210
  }
211
211
  for (const [name, c] of grid.spotCells.entries()) {
212
+ // A door or window is not furniture (room-grid wallFixtureKindOf):
213
+ // its cell is plain floor, and a door that is an exit wears the
214
+ // exit's own arrow.
215
+ if (wallFixtureKindOf(name))
216
+ continue;
212
217
  if (!cellToSpot.has(key(c)))
213
218
  cellToSpot.set(key(c), name);
214
219
  }
@@ -541,6 +546,8 @@ function diamondSpots(room, grid) {
541
546
  return (room.spots ?? [])
542
547
  // A perch draws as its lens (CAMERA_GLYPH), with a legend row of its own.
543
548
  .filter(s => !isPerchSpot(s))
549
+ // ...and a door or window draws nothing, so it has no row to explain.
550
+ .filter(s => !wallFixtureKindOf(s.name))
544
551
  .filter(s => {
545
552
  const cell = grid.spotCells.get(s.name);
546
553
  return cell !== undefined && !onExit.has(key(cell));
@@ -6,7 +6,7 @@ import { wayOut } from './ways-out.js';
6
6
  import { significantWords, wordsAreCloseEnough } from './fuzzy-match.js';
7
7
  import { hint } from './hints.js';
8
8
  import { placeName } from './log-style.js';
9
- import { findPath, distanceMeters, coverBetween, blockingRegionFor, pathClearing, pathClimbSteps, levelFootprint, key, isCellBlocked, pathSqueezes, METERS_PER_CELL, doorwayKindOf, cellOnGrid, } from './room-grid.js';
9
+ import { findPath, distanceMeters, coverBetween, blockingRegionFor, pathClearing, pathClimbSteps, levelFootprint, key, isCellBlocked, pathSqueezes, METERS_PER_CELL, doorwayKindOf, wallFixtureKindOf, cellOnGrid, } from './room-grid.js';
10
10
  // The doorway vocabulary moved to room-grid.ts (the grid seats exit
11
11
  // spots by it); every caller of spots.ts keeps its import.
12
12
  export { doorwayKindOf };
@@ -960,9 +960,13 @@ export function spotForCell(room, cell) {
960
960
  return OPEN_FLOOR;
961
961
  let best;
962
962
  let bestDist = Infinity;
963
- for (const [name, cells] of grid.spotFootprints.entries()) {
963
+ for (const [name, footprint] of grid.spotFootprints.entries()) {
964
964
  if (name === OPEN_FLOOR)
965
965
  continue;
966
+ // A door or window fills no cell (room-grid wallFixtureKindOf), so its
967
+ // anchor stands in for it: step up to the window and you are AT it.
968
+ const anchor = footprint.length === 0 && wallFixtureKindOf(name) ? grid.spotCells.get(name) : undefined;
969
+ const cells = anchor ? [anchor] : footprint;
966
970
  for (const c of cells) {
967
971
  if (c.z !== cell.z)
968
972
  continue;
@@ -1,4 +1,5 @@
1
1
  import { isPlaytester } from './playtester.js';
2
+ import { SPRITE_POWERS } from '../sprite-powers.js';
2
3
  /**
3
4
  * THE VERBS A PLAYER MAY TYPE, in one place.
4
5
  *
@@ -35,7 +36,12 @@ export const HELP_CATEGORIES = [
35
36
  // `sustain` shelves here and not under magic: the command is
36
37
  // technomancer-gated (a sprite task, SR5 p.256) and refuses anyone
37
38
  // else, so the Emerged shelf is where its audience looks.
38
- { title: 'resonance', entries: [['compile'], ['decompile'], ['thread'], ['unravel'], ['register'], ['standby'], ['sustain'], ['sprites']] },
39
+ // The SPRITE POWERS (p.256-257) shelve here too, read off the same
40
+ // table game.ts registers them from. They were the last tenants of
41
+ // "other": registered in a loop, so the taxonomy test's
42
+ // registerCommand('x') sweep never saw them. A player runs them as
43
+ // "order <sprite> <power>"; typed bare they say so.
44
+ { title: 'resonance', entries: [['compile'], ['decompile'], ['thread'], ['unravel'], ['register'], ['standby'], ['sustain'], ['sprites'], ...SPRITE_POWERS.map(p => [p.key])] },
39
45
  { title: 'social', entries: [['say'], ['shout'], ['emote', 'me'], ['tell', 'to', 'talk-to'], ['call'], ['message'], ['messages'], ['end-call', 'end', 'hangup'], ['accept'], ['decline', 'deny', 'refuse'], ['haggle', 'negotiate'], ['persuade', 'convince'], ['bring', 'escort', 'extract'], ['ask'], ['contacts']] },
40
46
  { title: 'street', entries: [['abandon'], ['browse'], ['buy'], ['sell'], ['catalog'], ['source', 'procure'], ['work', 'gig'], ['jobs'], ['journal'], ['perform'], ['palm'], ['docwagon'], ['treat'], ['eat'], ['drink'], ['lifestyle'], ['garage'], ['travel'], ['pay']] },
41
47
  { title: 'barriers', entries: [['pick'], ['breach'], ['dispel', 'dispell'], ['bluff'], ['unlock'], ['lock']] },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maka/maka-cli",
3
- "version": "5.389.0",
3
+ "version": "5.391.0",
4
4
  "type": "module",
5
5
  "summary": "A command line tool for scaffolding Meteor 3.x applications using either React.",
6
6
  "description": "A command line tool for scaffolding Meteor 3.x applications using React.",