@maka/maka-cli 5.67.0 → 5.69.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 (137) hide show
  1. package/bundle/typescript/package.json +1 -1
  2. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js +6 -1
  3. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js.map +1 -1
  4. package/bundle/typescript/src/commands/game/sideQuest/commands/abandon.d.ts +30 -0
  5. package/bundle/typescript/src/commands/game/sideQuest/commands/abandon.js +54 -0
  6. package/bundle/typescript/src/commands/game/sideQuest/commands/abandon.js.map +1 -0
  7. package/bundle/typescript/src/commands/game/sideQuest/commands/ar.js +4 -1
  8. package/bundle/typescript/src/commands/game/sideQuest/commands/ar.js.map +1 -1
  9. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js +5 -1
  10. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js.map +1 -1
  11. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js +12 -4
  12. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js.map +1 -1
  13. package/bundle/typescript/src/commands/game/sideQuest/commands/call.d.ts +28 -0
  14. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js +105 -1
  15. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js.map +1 -1
  16. package/bundle/typescript/src/commands/game/sideQuest/commands/climb.d.ts +48 -0
  17. package/bundle/typescript/src/commands/game/sideQuest/commands/climb.js +107 -0
  18. package/bundle/typescript/src/commands/game/sideQuest/commands/climb.js.map +1 -0
  19. package/bundle/typescript/src/commands/game/sideQuest/commands/companions.d.ts +39 -3
  20. package/bundle/typescript/src/commands/game/sideQuest/commands/companions.js +89 -4
  21. package/bundle/typescript/src/commands/game/sideQuest/commands/companions.js.map +1 -1
  22. package/bundle/typescript/src/commands/game/sideQuest/commands/compile.d.ts +37 -17
  23. package/bundle/typescript/src/commands/game/sideQuest/commands/compile.js +53 -115
  24. package/bundle/typescript/src/commands/game/sideQuest/commands/compile.js.map +1 -1
  25. package/bundle/typescript/src/commands/game/sideQuest/commands/decompile.d.ts +55 -0
  26. package/bundle/typescript/src/commands/game/sideQuest/commands/decompile.js +203 -0
  27. package/bundle/typescript/src/commands/game/sideQuest/commands/decompile.js.map +1 -0
  28. package/bundle/typescript/src/commands/game/sideQuest/commands/go.d.ts +23 -0
  29. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +44 -9
  30. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js.map +1 -1
  31. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.d.ts +24 -0
  32. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +70 -12
  33. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -1
  34. package/bundle/typescript/src/commands/game/sideQuest/commands/lock.js +17 -4
  35. package/bundle/typescript/src/commands/game/sideQuest/commands/lock.js.map +1 -1
  36. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js +12 -2
  37. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js.map +1 -1
  38. package/bundle/typescript/src/commands/game/sideQuest/commands/map.js +12 -1
  39. package/bundle/typescript/src/commands/game/sideQuest/commands/map.js.map +1 -1
  40. package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js +8 -6
  41. package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js.map +1 -1
  42. package/bundle/typescript/src/commands/game/sideQuest/commands/move.d.ts +11 -0
  43. package/bundle/typescript/src/commands/game/sideQuest/commands/move.js +107 -14
  44. package/bundle/typescript/src/commands/game/sideQuest/commands/move.js.map +1 -1
  45. package/bundle/typescript/src/commands/game/sideQuest/commands/order.js +69 -1
  46. package/bundle/typescript/src/commands/game/sideQuest/commands/order.js.map +1 -1
  47. package/bundle/typescript/src/commands/game/sideQuest/commands/overwatch.js +5 -4
  48. package/bundle/typescript/src/commands/game/sideQuest/commands/overwatch.js.map +1 -1
  49. package/bundle/typescript/src/commands/game/sideQuest/commands/register.d.ts +15 -2
  50. package/bundle/typescript/src/commands/game/sideQuest/commands/register.js +32 -6
  51. package/bundle/typescript/src/commands/game/sideQuest/commands/register.js.map +1 -1
  52. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +33 -2
  53. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js.map +1 -1
  54. package/bundle/typescript/src/commands/game/sideQuest/commands/sprites.d.ts +35 -0
  55. package/bundle/typescript/src/commands/game/sideQuest/commands/sprites.js +108 -0
  56. package/bundle/typescript/src/commands/game/sideQuest/commands/sprites.js.map +1 -0
  57. package/bundle/typescript/src/commands/game/sideQuest/commands/standby.d.ts +40 -0
  58. package/bundle/typescript/src/commands/game/sideQuest/commands/standby.js +91 -0
  59. package/bundle/typescript/src/commands/game/sideQuest/commands/standby.js.map +1 -0
  60. package/bundle/typescript/src/commands/game/sideQuest/commands/tap.js +10 -11
  61. package/bundle/typescript/src/commands/game/sideQuest/commands/tap.js.map +1 -1
  62. package/bundle/typescript/src/commands/game/sideQuest/commands/thread.d.ts +27 -0
  63. package/bundle/typescript/src/commands/game/sideQuest/commands/thread.js +7 -2
  64. package/bundle/typescript/src/commands/game/sideQuest/commands/thread.js.map +1 -1
  65. package/bundle/typescript/src/commands/game/sideQuest/commands/unlock.js +4 -2
  66. package/bundle/typescript/src/commands/game/sideQuest/commands/unlock.js.map +1 -1
  67. package/bundle/typescript/src/commands/game/sideQuest/commands/unravel.d.ts +57 -0
  68. package/bundle/typescript/src/commands/game/sideQuest/commands/unravel.js +162 -0
  69. package/bundle/typescript/src/commands/game/sideQuest/commands/unravel.js.map +1 -0
  70. package/bundle/typescript/src/commands/game/sideQuest/commands/use.js +12 -5
  71. package/bundle/typescript/src/commands/game/sideQuest/commands/use.js.map +1 -1
  72. package/bundle/typescript/src/commands/game/sideQuest/engine-version.d.ts +1 -1
  73. package/bundle/typescript/src/commands/game/sideQuest/engine-version.js +17 -1
  74. package/bundle/typescript/src/commands/game/sideQuest/engine-version.js.map +1 -1
  75. package/bundle/typescript/src/commands/game/sideQuest/factories/repro-scene.js +41 -1
  76. package/bundle/typescript/src/commands/game/sideQuest/factories/repro-scene.js.map +1 -1
  77. package/bundle/typescript/src/commands/game/sideQuest/factories/room-factory.js +4 -0
  78. package/bundle/typescript/src/commands/game/sideQuest/factories/room-factory.js.map +1 -1
  79. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.d.ts +2 -0
  80. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +91 -6
  81. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -1
  82. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js +6 -0
  83. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js.map +1 -1
  84. package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +135 -11
  85. package/bundle/typescript/src/commands/game/sideQuest/game.js +361 -30
  86. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  87. package/bundle/typescript/src/commands/game/sideQuest/headless-harness.d.ts +24 -12
  88. package/bundle/typescript/src/commands/game/sideQuest/headless-harness.js +53 -13
  89. package/bundle/typescript/src/commands/game/sideQuest/headless-harness.js.map +1 -1
  90. package/bundle/typescript/src/commands/game/sideQuest/models/item.d.ts +25 -0
  91. package/bundle/typescript/src/commands/game/sideQuest/models/item.js +31 -0
  92. package/bundle/typescript/src/commands/game/sideQuest/models/item.js.map +1 -1
  93. package/bundle/typescript/src/commands/game/sideQuest/models/npc.d.ts +98 -1
  94. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +98 -4
  95. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
  96. package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +95 -4
  97. package/bundle/typescript/src/commands/game/sideQuest/models/player.js +179 -20
  98. package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
  99. package/bundle/typescript/src/commands/game/sideQuest/models/room.d.ts +90 -0
  100. package/bundle/typescript/src/commands/game/sideQuest/models/room.js +114 -5
  101. package/bundle/typescript/src/commands/game/sideQuest/models/room.js.map +1 -1
  102. package/bundle/typescript/src/commands/game/sideQuest/resonance-actions.d.ts +108 -0
  103. package/bundle/typescript/src/commands/game/sideQuest/resonance-actions.js +186 -0
  104. package/bundle/typescript/src/commands/game/sideQuest/resonance-actions.js.map +1 -0
  105. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene1.json +1 -0
  106. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +2 -0
  107. package/bundle/typescript/src/commands/game/sideQuest/sprite-powers.d.ts +88 -0
  108. package/bundle/typescript/src/commands/game/sideQuest/sprite-powers.js +137 -0
  109. package/bundle/typescript/src/commands/game/sideQuest/sprite-powers.js.map +1 -0
  110. package/bundle/typescript/src/commands/game/sideQuest/types/repro.d.ts +42 -0
  111. package/bundle/typescript/src/commands/game/sideQuest/types/save-file.d.ts +32 -1
  112. package/bundle/typescript/src/commands/game/sideQuest/types/seed/player-seed.d.ts +12 -0
  113. package/bundle/typescript/src/commands/game/sideQuest/types/seed/room-seed.d.ts +1 -0
  114. package/bundle/typescript/src/commands/game/sideQuest/ui.js +3 -0
  115. package/bundle/typescript/src/commands/game/sideQuest/ui.js.map +1 -1
  116. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js +5 -1
  117. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js.map +1 -1
  118. package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.d.ts +41 -1
  119. package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.js +52 -4
  120. package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.js.map +1 -1
  121. package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.d.ts +14 -2
  122. package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.js +78 -7
  123. package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.js.map +1 -1
  124. package/bundle/typescript/src/commands/game/sideQuest/utilities/outdoors.d.ts +7 -0
  125. package/bundle/typescript/src/commands/game/sideQuest/utilities/outdoors.js +24 -0
  126. package/bundle/typescript/src/commands/game/sideQuest/utilities/outdoors.js.map +1 -1
  127. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js +14 -0
  128. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js.map +1 -1
  129. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.d.ts +46 -0
  130. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.js +90 -5
  131. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.js.map +1 -1
  132. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.d.ts +70 -0
  133. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js +168 -22
  134. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js.map +1 -1
  135. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +83 -0
  136. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
  137. package/package.json +1 -1
@@ -0,0 +1,48 @@
1
+ import { Command, ICommand } from './command.js';
2
+ /**
3
+ * "climb" and "descend" -- the WORDS for vertical travel, over the
4
+ * machinery that already did it (items KE4oqRZBdf4prfani and
5
+ * vkDz3cquad25GACpm: "how do I go up in elevation? commands like
6
+ * 'mantle' and 'decend' aren't here").
7
+ *
8
+ * THESE ARE SHORTCUTS, NOT A SECOND IMPLEMENTATION, and that is the
9
+ * whole design constraint. `move to <spot>` already crosses levels: it
10
+ * paths through the grid, prefers a level's own stairs or ladder over a
11
+ * free climb, rolls Gymnastics + Strength on a climb (SR5 p.134) and
12
+ * applies falling damage on a failure (p.172). Every one of those
13
+ * behaviours is inherited here by DELEGATING to MoveCommand rather than
14
+ * repeated -- two paths up would drift, and the one that drifted would
15
+ * be the one that forgot the fall.
16
+ *
17
+ * So the only work these verbs do is CHOOSING A DESTINATION: the spot
18
+ * on a level above you (climb) or below you (descend). Everything after
19
+ * that is move's.
20
+ *
21
+ * WHY THEY EXIST AT ALL, given move already worked: a player looking at
22
+ * a drawn ladder reached for "mantle" and "descend" twice, unprompted,
23
+ * and got nothing. Vocabulary is not the mechanism, but a mechanism
24
+ * nobody can name is not reachable either.
25
+ *
26
+ * THE REFUSALS ARE THE CAREFUL PART. A room can legitimately have a
27
+ * storey with nothing to stand on -- generation is repaired for it
28
+ * (factories/scene-chunks.ts) but a hand-authored seed can still do it.
29
+ * Answering that with "you can't climb here" would say the game has no
30
+ * climbing, which is the false-impression bug this whole wave has been
31
+ * about. It says the true thing instead: there is a way up, and nothing
32
+ * up there to stand on.
33
+ */
34
+ type Way = 'up' | 'down';
35
+ declare abstract class VerticalCommand extends Command {
36
+ protected travel(way: Way, args: string[]): Promise<string>;
37
+ }
38
+ export declare class ClimbCommand extends VerticalCommand implements ICommand {
39
+ protected static verb: string;
40
+ protected static description: string;
41
+ execute(args?: string[]): Promise<string>;
42
+ }
43
+ export declare class DescendCommand extends VerticalCommand implements ICommand {
44
+ protected static verb: string;
45
+ protected static description: string;
46
+ execute(args?: string[]): Promise<string>;
47
+ }
48
+ export {};
@@ -0,0 +1,107 @@
1
+ import { Command } from './command.js';
2
+ import { MoveCommand } from './move.js';
3
+ import { hint } from '../utilities/hints.js';
4
+ import { fuzzyPickName } from '../utilities/fuzzy-match.js';
5
+ import { spotOf, spotsActive } from '../utilities/spots.js';
6
+ import { distanceMeters } from '../utilities/room-grid.js';
7
+ class VerticalCommand extends Command {
8
+ async travel(way, args) {
9
+ const actor = this.actor;
10
+ const room = actor.currentLocation;
11
+ const word = way === 'up' ? 'climb' : 'descend';
12
+ const other = way === 'up' ? 'descend' : 'climb';
13
+ const grid = room.ensureGrid();
14
+ const mine = spotOf(actor);
15
+ if (!grid || !spotsActive(room)) {
16
+ return `${room.name} is one level all the way through -- nothing here to ${word}.${hint(` ("exits" lists the ways out.)`)}`;
17
+ }
18
+ // Circulating: no cell, so no level. Claim one first -- the same
19
+ // rule move applies to every other crossing.
20
+ const from = mine ? grid.spotCells.get(mine) : undefined;
21
+ const myZ = from?.z ?? 0;
22
+ // Every spot on a level in the direction asked for.
23
+ const candidates = [...grid.spotCells.entries()]
24
+ .filter(([, c]) => (way === 'up' ? c.z > myZ : c.z < myZ))
25
+ .map(([name]) => name);
26
+ if (candidates.length === 0) {
27
+ // Distinguish the three ways this can be empty. They are
28
+ // different facts about the world and a player acts on them
29
+ // differently.
30
+ const levelsExist = (room.levels ?? []).length > 0;
31
+ const anywhereElse = [...grid.spotCells.entries()]
32
+ .filter(([, c]) => c.z !== myZ).map(([name]) => name);
33
+ if (!levelsExist) {
34
+ return `${room.name} is one level all the way through -- nothing here to ${word}.${hint(` ("exits" lists the ways out; "go up"/"go down" take stairs BETWEEN rooms.)`)}`;
35
+ }
36
+ if (anywhereElse.length === 0) {
37
+ // The empty-storey case. There IS a way up -- the grid built
38
+ // the links and the panel draws them -- and nowhere to arrive.
39
+ const named = (room.levels ?? []).map(l => l.name).join(' and ');
40
+ return `There's a way up to the ${named}, but nothing up there to stand on -- no ledge, no walkway, nowhere to put your feet.${hint(` (That's a gap in this place, not in you.)`)}`;
41
+ }
42
+ // Levels exist and hold spots, just not in this direction.
43
+ return way === 'up'
44
+ ? `You're already as high as this place goes.${hint(` ("${other}" goes back down.)`)}`
45
+ : `You're on the ground floor already.${hint(` ("${other}" goes up.)`)}`;
46
+ }
47
+ let target = candidates[0];
48
+ const query = (args ?? []).filter(w => !/^(to|the|a|an|up|down)$/i.test(w)).join(' ').trim();
49
+ if (query.length > 0) {
50
+ const picked = fuzzyPickName(query, candidates);
51
+ if (!picked) {
52
+ // Naming something real that is not in this direction is worth
53
+ // saying precisely -- "no such place" would be a lie.
54
+ const elsewhere = fuzzyPickName(query, [...grid.spotCells.keys()]);
55
+ if (elsewhere) {
56
+ return `${elsewhere} isn't ${way} from here.${hint(` ("move to ${elsewhere}" walks you there.)`)}`;
57
+ }
58
+ return `Nothing ${way} from here answers to "${query}". Up there: ${candidates.join(', ')}.`;
59
+ }
60
+ target = picked;
61
+ }
62
+ else if (candidates.length > 1) {
63
+ // ASK ONLY WHEN THE CHOICE IS A REAL ONE -- which is a question
64
+ // about ALTITUDE, not about how many spots there are.
65
+ //
66
+ // Bare "descend" off a catwalk used to answer "Which one?
67
+ // doorway, back wall, open floor", because the ground floor has
68
+ // three places on it. That is not a choice the player was making:
69
+ // they said "get me down", and every candidate satisfies it.
70
+ // Climbing with two storeys overhead IS a choice, and still asks.
71
+ const zs = new Set(candidates.map(n => grid.spotCells.get(n).z));
72
+ if (zs.size > 1) {
73
+ return `Which one? ${candidates.join(', ')}.${hint(` ("${word} <place>")`)}`;
74
+ }
75
+ // One destination level, several places on it: take the nearest,
76
+ // the way a person would.
77
+ const here = from ?? grid.spotCells.get(mine ?? '') ?? { x: 0, y: 0, z: myZ };
78
+ target = candidates.reduce((best, name) => {
79
+ const a = grid.spotCells.get(name);
80
+ const b = grid.spotCells.get(best);
81
+ return distanceMeters(here, a) < distanceMeters(here, b) ? name : best;
82
+ }, candidates[0]);
83
+ }
84
+ // EVERYTHING FROM HERE IS MOVE'S -- the pathing, the safe-link
85
+ // preference, the Gymnastics + Strength test, the fall, the
86
+ // narration. Delegated exactly as move.ts itself delegates to
87
+ // GoCommand when a step lands on a doorway.
88
+ return await new MoveCommand({
89
+ actor, scene: this.scene, rooms: this.rooms, screen: this.screen, game: this.game,
90
+ }).execute([target]);
91
+ }
92
+ }
93
+ export class ClimbCommand extends VerticalCommand {
94
+ static verb = 'climb';
95
+ static description = 'Climb to a place above you -- a catwalk, a mezzanine, a balcony ("climb catwalk", or bare "climb" when there is only one way up). A level\'s own stairs or ladder are used when it has them; a free climb is Gymnastics + Strength (SR5 p.134) and a failure means falling. Shorthand for "move to <place>", which does the same thing.';
96
+ async execute(args = []) {
97
+ return this.travel('up', args);
98
+ }
99
+ }
100
+ export class DescendCommand extends VerticalCommand {
101
+ static verb = 'descend';
102
+ static description = 'Climb back down to a place below you ("descend", or "descend floor" when there is a choice). Shorthand for "move to <place>".';
103
+ async execute(args = []) {
104
+ return this.travel('down', args);
105
+ }
106
+ }
107
+ //# sourceMappingURL=climb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"climb.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/climb.ts"],"names":[],"mappings":"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"}
@@ -24,10 +24,46 @@ export declare class AgentCommand extends Command implements ICommand {
24
24
  protected static description: string;
25
25
  execute(_args?: string[]): Promise<string>;
26
26
  }
27
- /** "recall": fold a deployed autonomous drone back to hand (or, with
28
- * nothing in the air, spin a remote agent down into its deck). */
27
+ /** "recall": fold a deployed autonomous drone back to hand, spin a
28
+ * remote agent down into its deck, or work CALL/DISMISS SPRITE -- see
29
+ * the sprite branch below. */
29
30
  export declare class RecallCommand extends Command implements ICommand {
30
31
  protected static verb: string;
31
32
  protected static description: string;
32
- execute(_args?: string[]): Promise<string>;
33
+ execute(args?: string[]): Promise<string>;
34
+ /**
35
+ * CALL/DISMISS SPRITE (SR5 p.250, Simple Action), on this verb rather
36
+ * than a new one.
37
+ *
38
+ * TWO BUGS IN ONE PLACE, and they are worth separating. The missing
39
+ * action is the smaller one. The larger is that `recall` ASSERTED A
40
+ * FALSEHOOD: it looked for kind 'drone', fell back to 'agent', and
41
+ * otherwise told the player "Nothing of yours is in the air" -- to a
42
+ * technomancer with a registered sprite standing right there. The
43
+ * reported item reads like a feature request ("there should also be a
44
+ * way to recall the sprite"), and it is half a bug report: the way
45
+ * they went looking already existed and denied them.
46
+ *
47
+ * WHY THIS VERB AND NOT `call`. `call` is CallCommand, the phone.
48
+ * Registering a second handler for it would silently clobber a
49
+ * technomancer's ability to ring their fixer, so implementing the
50
+ * sprite action would have broken an unrelated one. `recall` already
51
+ * means "bring my thing home to me" for drones and agents, and
52
+ * canon's action is bidirectional, so the word already fits both
53
+ * halves. The name and action type are IMPORTED from the p.250 table
54
+ * rather than restated here -- two copies that agree today drift on
55
+ * the first edit.
56
+ *
57
+ * THE DIRECTIONS ARE NOT SYMMETRICAL, on purpose. Calling is free and
58
+ * reversible. Dismissing "releas[es] it from any tasks it still owes
59
+ * you" (p.250), which is why p.256 sells STANDBY for 1 task as the
60
+ * cheaper way to park one. So a bare "recall" only ever CALLS, and
61
+ * sending a sprite away has to be asked for by name -- the same rule
62
+ * decompile follows, for the same reason.
63
+ *
64
+ * Returns undefined when the words are not about sprites at all, so
65
+ * the caller's own "nothing of yours is in the air" still stands for
66
+ * a player who really has nothing.
67
+ */
68
+ private recallSprite;
33
69
  }
@@ -2,6 +2,7 @@ import { Command } from './command.js';
2
2
  import { hint } from '../utilities/hints.js';
3
3
  import { fuzzyPickName } from '../utilities/fuzzy-match.js';
4
4
  import { agentRatingFromName } from '../utilities/programs.js';
5
+ import { resonanceAction } from '../resonance-actions.js';
5
6
  /**
6
7
  * The rigger's autonomous frames (SR5e p.269-271): "deploy <drone>" puts
7
8
  * a carried frame in the air under its own DOG-BRAIN -- no control rig
@@ -116,12 +117,13 @@ export class AgentCommand extends Command {
116
117
  ].join('\n');
117
118
  }
118
119
  }
119
- /** "recall": fold a deployed autonomous drone back to hand (or, with
120
- * nothing in the air, spin a remote agent down into its deck). */
120
+ /** "recall": fold a deployed autonomous drone back to hand, spin a
121
+ * remote agent down into its deck, or work CALL/DISMISS SPRITE -- see
122
+ * the sprite branch below. */
121
123
  export class RecallCommand extends Command {
122
124
  static verb = 'recall';
123
- static description = 'Recall your deployed drone to your hand (or fold a running agent back into its deck).';
124
- async execute(_args = []) {
125
+ static description = `Recall your deployed drone to your hand, fold a running agent back into its deck, or call a registered sprite out of the Resonance. "${resonanceAction('call-dismiss-sprite')?.name}" (${resonanceAction('call-dismiss-sprite')?.actionType}, SR5 p.250): "recall <name>" also sends a standing registered sprite back -- which releases every task it still owes you. To park one cheaply instead, "standby" spends a single task (p.256).`;
126
+ async execute(args = []) {
125
127
  const game = this.game;
126
128
  const entry = game?.companions.find(c => c.kind === 'drone');
127
129
  if (!entry) {
@@ -136,6 +138,9 @@ export class RecallCommand extends Command {
136
138
  ? `Your agent's icon collapses back into your persona -- folded into the deck.`
137
139
  : `The deck spins its agent down -- the DECK IN AR light dies as the icon folds home.`;
138
140
  }
141
+ const sprite = this.recallSprite(args);
142
+ if (sprite !== undefined)
143
+ return sprite;
139
144
  return `Nothing of yours is in the air.`;
140
145
  }
141
146
  const name = entry.boundDevice?.name ?? entry.npc.name;
@@ -144,5 +149,85 @@ export class RecallCommand extends Command {
144
149
  this.scene.updateStatus();
145
150
  return `The ${name} banks once and settles back onto your hand, rotors folding.${entry.boundDevice && entry.boundDevice.droneDamage > 0 ? ` The airframe carries its dents (${entry.boundDevice.droneSummary()})${hint(' -- rest repairs it')}.` : ''}`;
146
151
  }
152
+ /**
153
+ * CALL/DISMISS SPRITE (SR5 p.250, Simple Action), on this verb rather
154
+ * than a new one.
155
+ *
156
+ * TWO BUGS IN ONE PLACE, and they are worth separating. The missing
157
+ * action is the smaller one. The larger is that `recall` ASSERTED A
158
+ * FALSEHOOD: it looked for kind 'drone', fell back to 'agent', and
159
+ * otherwise told the player "Nothing of yours is in the air" -- to a
160
+ * technomancer with a registered sprite standing right there. The
161
+ * reported item reads like a feature request ("there should also be a
162
+ * way to recall the sprite"), and it is half a bug report: the way
163
+ * they went looking already existed and denied them.
164
+ *
165
+ * WHY THIS VERB AND NOT `call`. `call` is CallCommand, the phone.
166
+ * Registering a second handler for it would silently clobber a
167
+ * technomancer's ability to ring their fixer, so implementing the
168
+ * sprite action would have broken an unrelated one. `recall` already
169
+ * means "bring my thing home to me" for drones and agents, and
170
+ * canon's action is bidirectional, so the word already fits both
171
+ * halves. The name and action type are IMPORTED from the p.250 table
172
+ * rather than restated here -- two copies that agree today drift on
173
+ * the first edit.
174
+ *
175
+ * THE DIRECTIONS ARE NOT SYMMETRICAL, on purpose. Calling is free and
176
+ * reversible. Dismissing "releas[es] it from any tasks it still owes
177
+ * you" (p.250), which is why p.256 sells STANDBY for 1 task as the
178
+ * cheaper way to park one. So a bare "recall" only ever CALLS, and
179
+ * sending a sprite away has to be asked for by name -- the same rule
180
+ * decompile follows, for the same reason.
181
+ *
182
+ * Returns undefined when the words are not about sprites at all, so
183
+ * the caller's own "nothing of yours is in the air" still stands for
184
+ * a player who really has nothing.
185
+ */
186
+ recallSprite(args) {
187
+ const game = this.game;
188
+ if (!game)
189
+ return undefined;
190
+ const waiting = game.registeredSpritesWaiting();
191
+ const standing = game.companions.filter(c => c.kind === 'sprite' && c.registered);
192
+ if (waiting.length === 0 && standing.length === 0)
193
+ return undefined;
194
+ const query = (args ?? []).map(w => w.toLowerCase()).filter(w => !/^(a|an|the|sprite)$/.test(w)).join(' ').trim();
195
+ if (query.length > 0) {
196
+ const named = fuzzyPickName(query, waiting.map(s => s.name));
197
+ if (named) {
198
+ const line = game.callSpriteFromResonance(named);
199
+ this.scene.updateStatus();
200
+ return line ?? `${named} answers, but there is no room on the grid for its icon.`;
201
+ }
202
+ // Naming one that is already here is the DISMISS direction.
203
+ const here = fuzzyPickName(query, standing.map(c => c.npc.name));
204
+ if (here) {
205
+ const target = standing.find(c => c.npc.name === here);
206
+ const owed = target.services ?? 0;
207
+ if (!game.dismissSpriteToResonance(target))
208
+ return undefined;
209
+ this.scene.updateStatus();
210
+ // The warning now names its cure. It was written when there was
211
+ // no cheaper door; STANDBY (p.256) is that door, and a warning
212
+ // about a cost the player cannot avoid is worth less than one
213
+ // that tells them how.
214
+ return `${here} folds back into the Resonance and waits there, registered and yours.${owed > 0 ? ` It owed you ${owed} task${owed === 1 ? '' : 's'}; dismissing releases every one of them.${hint(` ("standby" spends ONE and keeps the rest.)`)}` : ''}${hint(` ("recall ${here}" calls it back.)`)}`;
215
+ }
216
+ return `Nothing of yours answers to "${query}".${waiting.length > 0 ? ` Waiting in the Resonance: ${waiting.map(s => `"${s.name}"`).join(', ')}.` : ''}${standing.length > 0 ? ` Already with you: ${standing.map(c => `"${c.npc.name}"`).join(', ')}.` : ''}`;
217
+ }
218
+ // Bare "recall": the safe direction only.
219
+ if (waiting.length > 0) {
220
+ const line = game.callSpriteFromResonance();
221
+ this.scene.updateStatus();
222
+ if (line) {
223
+ return waiting.length > 1
224
+ ? `${line}${hint(` (${waiting.length - 1} more waiting -- "recall <name>" for a particular one.)`)}`
225
+ : line;
226
+ }
227
+ }
228
+ // Standing, and nothing waiting: say so, and name the route rather
229
+ // than doing the destructive half unasked.
230
+ return `${standing.length === 1 ? `${standing[0].npc.name} is` : `Your sprites are`} already here with you, not in the Resonance.${hint(` ("standby" parks it for ONE task and keeps the rest; "recall ${standing[0].npc.name}" sends it back for free but releases every task it owes.)`)}`;
231
+ }
147
232
  }
148
233
  //# sourceMappingURL=companions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"companions.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/companions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"companions.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/companions.ts"],"names":[],"mappings":"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"}
@@ -6,11 +6,22 @@ import { Command, ICommand } from './command.js';
6
6
  * become TASKS (services); the sprite manifests as a Matrix companion
7
7
  * shell: it rides your persona, fights ice at your side when you jack
8
8
  * in (one task per fight, same leash as spirits), obeys "order", and
9
- * decompiles when the tasks are spent, when released ("compile" again),
10
- * or when you travel. FADING is the toll: 2 x the sprite's hits (min
11
- * 2), resisted with Resonance + Willpower -- PHYSICAL when the Level
12
- * exceeds your Resonance, the same overreach law as overcasting. Level
13
- * past twice your Resonance is refused outright.
9
+ * decompiles when the tasks are spent, when you unmake it
10
+ * ("decompile"), or when you travel. FADING is the toll: 2 x the
11
+ * sprite's hits (min 2), resisted with Resonance + Willpower --
12
+ * PHYSICAL when the Level exceeds your Resonance, the same overreach
13
+ * law as overcasting. Level past twice your Resonance is refused
14
+ * outright.
15
+ *
16
+ * COMPILE DOES NOT RELEASE (items xxc3SGZJmjAPaZPhb and
17
+ * Av93mThv54YRH26gj, 2026-08-28). This verb used to double as the
18
+ * release: any second "compile" decompiled whatever was standing. That
19
+ * is not a rule the books have. p.250 lists Compile Sprite (Complex),
20
+ * Decompile Sprite (Complex) and Call/Dismiss Sprite (Simple) as three
21
+ * separate actions, and p.256 says outright "You can decompile your own
22
+ * sprites if you need to, but usually just dismissing them is enough."
23
+ * Compiling is now a summons and nothing else; the slot check below
24
+ * REFUSES and names the two verbs that actually let go.
14
25
  *
15
26
  * The companion symmetry this completes: mage -> spirit, decker ->
16
27
  * agent, rigger -> drone, technomancer -> SPRITE. Unlike an agent, a
@@ -26,20 +37,29 @@ export interface ISpriteType {
26
37
  /** Exported for game.ts: re-shelling a REGISTERED sprite after travel
27
38
  * or a resumed save needs the same stat builder. */
28
39
  export declare const SPRITE_TYPES: Record<string, ISpriteType>;
40
+ /**
41
+ * A free shell name for a sprite of this type and Level.
42
+ *
43
+ * spawnCompanionShell REFUSES a name already in the scene and returns
44
+ * null, which the caller can only report as "it collides with a process
45
+ * name already taken" -- a compile that cost real Fading and produced
46
+ * nothing. That was unreachable while one sprite was the hard maximum.
47
+ * It stopped being unreachable the moment a REGISTERED sprite was
48
+ * allowed to stand alongside a newly compiled one (SR5 p.254-256):
49
+ * register a Courier at Level 4, compile another Courier at Level 4,
50
+ * and both want the same name.
51
+ *
52
+ * Typed against the shape it uses rather than Scene, so this stays
53
+ * importable from game.ts (which imports this module) without a cycle.
54
+ *
55
+ * The unsuffixed name is preserved when it is free, so the overwhelming
56
+ * common case reads exactly as it always has.
57
+ */
58
+ export declare function uniqueSpriteName(scene: {
59
+ getActor(name: string): unknown;
60
+ }, typeName: string, level: number): string;
29
61
  export declare class CompileCommand extends Command implements ICommand {
30
62
  protected static verb: string;
31
63
  protected static description: string;
32
64
  execute(args?: string[]): Promise<string>;
33
- /**
34
- * "decompile <name>": unmake a HOSTILE matrix construct -- ice, an
35
- * enemy agent -- by tearing its thread apart (the offensive mirror of
36
- * releasing your own sprite). Opposed Resonance + compiling vs the
37
- * construct's code integrity (Willpower + Logic/2); net hits plus
38
- * Resonance/2 land straight on its monitor, no soak -- the opposed
39
- * test WAS the resistance. Fading bills the same toll as compiling
40
- * (2x its hits, min 2). A failed pull leaves it standing, alert, and
41
- * pointed at you. Returns undefined when the words name no hostile
42
- * construct here (the summons flow's turn).
43
- */
44
- private tryDecompileEnemy;
45
65
  }