@maka/maka-cli 5.116.0 → 5.118.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.
- package/bundle/typescript/package.json +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/attack.js +6 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/attack.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/compile.js +3 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/compile.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/decompile.js +3 -6
- package/bundle/typescript/src/commands/game/sideQuest/commands/decompile.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/download.js +24 -6
- package/bundle/typescript/src/commands/game/sideQuest/commands/download.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/enter-host.d.ts +7 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/enter-host.js +34 -23
- package/bundle/typescript/src/commands/game/sideQuest/commands/enter-host.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.d.ts +7 -7
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +30 -50
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +42 -19
- package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/hop.d.ts +16 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/hop.js +95 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/hop.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/jack.js +3 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/jack.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/jackpoint.js +5 -7
- package/bundle/typescript/src/commands/game/sideQuest/commands/jackpoint.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/look.js +40 -8
- package/bundle/typescript/src/commands/game/sideQuest/commands/look.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/map.d.ts +6 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/map.js +21 -74
- package/bundle/typescript/src/commands/game/sideQuest/commands/map.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js +44 -17
- package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/move.js +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/move.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js +2 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/say.js +8 -5
- package/bundle/typescript/src/commands/game/sideQuest/commands/say.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js +2 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/take.js +20 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/take.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/thread.js +2 -5
- package/bundle/typescript/src/commands/game/sideQuest/commands/thread.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/engine-version.d.ts +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/engine-version.js +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js +2 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +4 -0
- package/bundle/typescript/src/commands/game/sideQuest/game.js +86 -31
- package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/host.d.ts +80 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/host.js +91 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/host.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +83 -9
- package/bundle/typescript/src/commands/game/sideQuest/models/player.js +153 -42
- package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/room.d.ts +40 -9
- package/bundle/typescript/src/commands/game/sideQuest/models/room.js +73 -12
- package/bundle/typescript/src/commands/game/sideQuest/models/room.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/scene.d.ts +3 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/scene.js +3 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/scene.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/types/save-file.d.ts +2 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/room-seed.d.ts +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/scene-seed.d.ts +2 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.js +40 -29
- package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js +30 -10
- package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/condition-report.d.ts +10 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/condition-report.js +142 -56
- package/bundle/typescript/src/commands/game/sideQuest/utilities/condition-report.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-reach.d.ts +58 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-reach.js +107 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-reach.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.d.ts +21 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.js +104 -20
- package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/grids.d.ts +72 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/grids.js +100 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/grids.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/ic-actors.d.ts +9 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/ic-actors.js +98 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/ic-actors.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/ic.d.ts +3 -2
- package/bundle/typescript/src/commands/game/sideQuest/utilities/ic.js +26 -6
- package/bundle/typescript/src/commands/game/sideQuest/utilities/ic.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/line-editor.d.ts +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/line-editor.js +5 -5
- package/bundle/typescript/src/commands/game/sideQuest/utilities/line-editor.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/logo-mark.d.ts +13 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/logo-mark.js +47 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/logo-mark.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/matrix-roster.d.ts +62 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/matrix-roster.js +97 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/matrix-roster.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js +11 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.d.ts +10 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js +24 -19
- package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { sameHostSide } from '../models/player.js';
|
|
2
|
+
import { personasInside } from './matrix-roster.js';
|
|
3
|
+
import { hostsInReach, hostLine, roomsInReach, gridVicinity } from './grid-reach.js';
|
|
2
4
|
import { NPC } from '../models/npc.js';
|
|
3
5
|
import { hostLabel } from './grid-names.js';
|
|
4
6
|
import { isLinked } from './comm-style.js';
|
|
@@ -274,7 +276,9 @@ function hostInteriorIcons(scene, actor, room) {
|
|
|
274
276
|
// is instanceof NPC and nothing cleverer. It deliberately does NOT
|
|
275
277
|
// read `hostile`: a rival decker can be hostile without being ice,
|
|
276
278
|
// and that would put the wrong noun on a person.
|
|
277
|
-
|
|
279
|
+
// Inside a host, the roster is who is INSIDE it (matrix-roster.ts) -- a
|
|
280
|
+
// persona's body is never in this room.
|
|
281
|
+
for (const a of (room.host ? personasInside(scene, room.host) : [])) {
|
|
278
282
|
if (a === actor)
|
|
279
283
|
continue;
|
|
280
284
|
if (a.plane === 'matrix' && sameHostSide(actor, a) && actor.canPerceive(a)) {
|
|
@@ -322,7 +326,8 @@ function hostInteriorIcons(scene, actor, room) {
|
|
|
322
326
|
// reach" while they attack. Naming them here does not pretend
|
|
323
327
|
// otherwise; advertising a verb that refuses would be the worse lie.
|
|
324
328
|
for (const name of room.runningIC) {
|
|
325
|
-
|
|
329
|
+
const ice = room.host?.iceActors.get(name);
|
|
330
|
+
icons.push(`▲ ${ice?.name ?? name} -- hunting, and it has your icon.${ice ? ` (${ice.conditionSummary()}) ("thread resonance-spike ${ice.name}" / "attack ${ice.name}" crash it)` : ''}`);
|
|
326
331
|
}
|
|
327
332
|
// THE WAN IS IN HERE WITH YOU (SR5 p.233, asked directly rather than
|
|
328
333
|
// reasoned from the geometry): "If you are in a host that has a WAN,
|
|
@@ -393,7 +398,7 @@ function hostInteriorIcons(scene, actor, room) {
|
|
|
393
398
|
*/
|
|
394
399
|
export function gridSculpt(actor, room) {
|
|
395
400
|
// INSIDE, THE HEADER NAMES THE HOST, not the street address. A persona
|
|
396
|
-
// in a host's architecture is not
|
|
401
|
+
// in a host's architecture is not out on the grid at all
|
|
397
402
|
// any more, and a header that kept saying so was half of why the
|
|
398
403
|
// boundary read as absent.
|
|
399
404
|
if (actor.insideHost === room) {
|
|
@@ -402,19 +407,16 @@ export function gridSculpt(actor, room) {
|
|
|
402
407
|
`{cyan-fg}Architecture all the way around -- the outside grid is a wall away and might as well be weather.{/cyan-fg}`,
|
|
403
408
|
].join('\n');
|
|
404
409
|
}
|
|
405
|
-
|
|
406
|
-
//
|
|
407
|
-
//
|
|
408
|
-
|
|
410
|
+
// ON THE GRID (SR5 pp.217-218): no street under the persona -- a black
|
|
411
|
+
// flatland, the body's room named only because that is where the
|
|
412
|
+
// signal comes from. A host directly overhead gets a line of its own.
|
|
413
|
+
const body = actor.bodyRoom ?? room;
|
|
414
|
+
const header = `{cyan-fg}THE GRID :: jacked in from ${body.name.toUpperCase()}{/cyan-fg}`;
|
|
415
|
+
const grid = actor.currentGrid;
|
|
416
|
+
const flat = `{cyan-fg}Black flatland under a black sky -- the icons are the only things out here.${grid ? ` Riding ${grid.name}${grid.userPenalty ? ' (-2 on everything you do, p.233)' : ''}.` : ''}{/cyan-fg}`;
|
|
409
417
|
if (!room.hasNode)
|
|
410
|
-
return header
|
|
411
|
-
|
|
412
|
-
// here is gone with the model it described (hhSWzLSXECFtfoAGa): a host
|
|
413
|
-
// is part of the Matrix by definition, so there is no such thing as
|
|
414
|
-
// one you cannot reach from the grid. What is genuinely offline is a
|
|
415
|
-
// SERVER DEVICE sitting in the room, and that is a device, not
|
|
416
|
-
// architecture.
|
|
417
|
-
return `${header}\n{cyan-fg}Dense ground -- a host's architecture stands over this patch, sealed. What it holds is inside it.{/cyan-fg}`;
|
|
418
|
+
return `${header}\n${flat}`;
|
|
419
|
+
return `${header}\n${flat}\n{cyan-fg}${hostLabel(room, { capital: true })} hangs directly overhead, sealed. What it holds is inside it.{/cyan-fg}`;
|
|
418
420
|
}
|
|
419
421
|
/**
|
|
420
422
|
* The icons rendered as the standard cyan block, or the thin-grid line.
|
|
@@ -429,11 +431,93 @@ export function gridSculpt(actor, room) {
|
|
|
429
431
|
* refused `aros` in VR all along ("You're IN it -- 'look' is your
|
|
430
432
|
* overlay out here"); this is that same ruling reaching the prose.
|
|
431
433
|
*/
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
434
|
+
/**
|
|
435
|
+
* The icons a persona sees. Inside a host: the host's interior, as
|
|
436
|
+
* before. On the grid: the hosts overhead (all of them, reachable from
|
|
437
|
+
* anywhere), the icons near the body's room, and -- dimmer, with the
|
|
438
|
+
* noise they cost -- the icons in the rest of the district (SR5
|
|
439
|
+
* pp.217-218: "the farther away devices are from you in the real world,
|
|
440
|
+
* the dimmer their icons"). `rooms` absent means the caller has only
|
|
441
|
+
* the one room, and the block reads as it always did.
|
|
442
|
+
*/
|
|
443
|
+
export function gridIconBlock(scene, actor, room, rooms) {
|
|
444
|
+
const isHostLine = (i) => i.startsWith('●') || i.startsWith('■');
|
|
445
|
+
if (actor.insideHost || !rooms) {
|
|
446
|
+
const icons = gridIcons(scene, actor, room);
|
|
447
|
+
if (icons.length === 0) {
|
|
448
|
+
return `{cyan-fg}Thin grid out here -- background noise, nothing worth cracking.{/cyan-fg}`;
|
|
449
|
+
}
|
|
450
|
+
return `{cyan-fg}ICONS IN REACH:{/cyan-fg}\n${icons.map(i => ` {cyan-fg}${i}{/cyan-fg}`).join('\n')}`;
|
|
451
|
+
}
|
|
452
|
+
const out = [];
|
|
453
|
+
const hosts = hostsInReach(rooms, actor);
|
|
454
|
+
out.push(hosts.length > 0
|
|
455
|
+
? `{cyan-fg}HOSTS OVERHEAD:{/cyan-fg}\n${hosts.map(h => ` {cyan-fg}${hostLine(h, actor)}{/cyan-fg}`).join('\n')}`
|
|
456
|
+
: `{cyan-fg}Nothing overhead -- no host stands over this district.{/cyan-fg}`);
|
|
457
|
+
const near = gridIcons(scene, actor, gridVicinity(actor)).filter(i => !isHostLine(i));
|
|
458
|
+
out.push(near.length > 0
|
|
459
|
+
? `{cyan-fg}ICONS IN REACH:{/cyan-fg}\n${near.map(i => ` {cyan-fg}${i}{/cyan-fg}`).join('\n')}`
|
|
460
|
+
: `{cyan-fg}Nothing near -- background noise around your signal.{/cyan-fg}`);
|
|
461
|
+
// FARTHER OUT, WITHOUT AN ADDRESS (SR5 p.235, p.243): Matrix Perception
|
|
462
|
+
// never tells you where a device physically sits -- that is Trace Icon,
|
|
463
|
+
// two marks and an opposed test. So far icons are listed by the noise
|
|
464
|
+
// band they cost, never by the room they are in. Only your own body's
|
|
465
|
+
// room is named above, because you know where you are sitting.
|
|
466
|
+
const byBand = new Map();
|
|
467
|
+
for (const { room: r, noise } of roomsInReach(rooms, actor).slice(1)) {
|
|
468
|
+
let icons = [];
|
|
469
|
+
try {
|
|
470
|
+
icons = gridIcons(scene, actor, r).filter(i => !isHostLine(i));
|
|
471
|
+
}
|
|
472
|
+
catch {
|
|
473
|
+
icons = [];
|
|
474
|
+
}
|
|
475
|
+
if (icons.length === 0)
|
|
476
|
+
continue;
|
|
477
|
+
const names = icons.map(i => i.replace(/^[^\s]+\s+/, '').split(' -- ')[0]);
|
|
478
|
+
const list = byBand.get(noise) ?? [];
|
|
479
|
+
for (const n of names)
|
|
480
|
+
if (!list.includes(n))
|
|
481
|
+
list.push(n);
|
|
482
|
+
byBand.set(noise, list);
|
|
483
|
+
}
|
|
484
|
+
const far = [...byBand.entries()].sort((a, b) => a[0] - b[0])
|
|
485
|
+
.map(([noise, names]) => ` {cyan-fg}· dim, noise -${noise}: ${names.join(', ')}{/cyan-fg}`);
|
|
486
|
+
if (far.length > 0)
|
|
487
|
+
out.push(`{cyan-fg}FARTHER OUT -- dimmer with distance:{/cyan-fg}\n${far.join('\n')}`);
|
|
488
|
+
// A blank line between the distance bands (user, 2026-09-02): three
|
|
489
|
+
// sections read as three when they do not touch.
|
|
490
|
+
return out.join('\n\n');
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* THE ROOM DOCK INSIDE A HOST (user, 2026-09-02: "the room drawn when
|
|
494
|
+
* entering a host looks just like the room my meat body is in"). It was:
|
|
495
|
+
* the dock drew the body's room. A host has no floor plan to draw --
|
|
496
|
+
* its interior is a sculpted space with its own rules (SR5 p.219,
|
|
497
|
+
* p.246) -- so the dock shows what a persona inside one can see: the
|
|
498
|
+
* host, its rating, your marks and its alarm, the ice with its damage,
|
|
499
|
+
* the other personas, and the files. Cut to the dock's rows and columns.
|
|
500
|
+
*/
|
|
501
|
+
export function hostInteriorPanel(scene, actor, host, rows, cols) {
|
|
502
|
+
const cut = (raw) => `{cyan-fg}${[...raw].slice(0, Math.max(4, cols)).join('')}{/cyan-fg}`;
|
|
503
|
+
const lines = [];
|
|
504
|
+
lines.push(cut(`INSIDE ${host.name}`));
|
|
505
|
+
const marks = host.marksBy.get(actor.name) ?? 0;
|
|
506
|
+
lines.push(cut(host.sanctioned
|
|
507
|
+
? 'haven -- welcome here'
|
|
508
|
+
: `HR ${host.rating} · marks ${marks}/3${host.alert ? ' · WALLS UP' : ''}${host.cracked ? ' · cracked' : ''}`));
|
|
509
|
+
for (const kind of host.runningIC) {
|
|
510
|
+
const ice = host.iceActors.get(kind);
|
|
511
|
+
lines.push(cut(`▲ ${kind}${ice ? ` ${ice.damageTaken}/${ice.maxConditionBoxes}` : ''}`));
|
|
512
|
+
}
|
|
513
|
+
for (const a of personasInside(scene, host)) {
|
|
514
|
+
if (a === actor || a.icHost === host)
|
|
515
|
+
continue;
|
|
516
|
+
lines.push(cut(`◆ ${a.name}`));
|
|
436
517
|
}
|
|
437
|
-
|
|
518
|
+
const files = host.files().length;
|
|
519
|
+
if (files > 0)
|
|
520
|
+
lines.push(cut(`◇ ${files} file${files === 1 ? '' : 's'} ${host.cracked ? 'open' : 'sealed'}`));
|
|
521
|
+
return lines.slice(0, Math.max(1, rows));
|
|
438
522
|
}
|
|
439
523
|
//# sourceMappingURL=grid-view.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid-view.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/utilities/grid-view.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"grid-view.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/utilities/grid-view.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GRIDS (SR5 p.220-222, p.233, p.240) -- increment 3 of the Matrix
|
|
3
|
+
* position model (2026-09-02).
|
|
4
|
+
*
|
|
5
|
+
* - The public grid is free to anyone and "the Barrens of the Matrix": it
|
|
6
|
+
* costs the user -2 on every Matrix action taken from it (p.233).
|
|
7
|
+
* - A local grid is a metroplex's own; a global grid belongs to one of the
|
|
8
|
+
* Big Ten (p.21-23; "ten publicly known global grids, one for each of
|
|
9
|
+
* the Big Ten", p.234). Neither penalises its own users.
|
|
10
|
+
* - Your grid is your lifestyle's (p.222 "Your Grid"): Low or lower gets
|
|
11
|
+
* the public grid; Middle a local grid; High one Big Ten global grid of
|
|
12
|
+
* your choosing; Luxury any grid you like.
|
|
13
|
+
* - Acting against a target on ANOTHER grid costs -2 (p.233); inside a host
|
|
14
|
+
* no grid penalty applies at all -- "the grid you're on doesn't really
|
|
15
|
+
* matter" (p.246).
|
|
16
|
+
* - Grid Hop (p.240): Complex Action, no test, needs access to the
|
|
17
|
+
* destination; without it, Hack on the Fly against 4 dice (local) or 6
|
|
18
|
+
* (global) hops you illegally, and a failed attempt does not alert.
|
|
19
|
+
*/
|
|
20
|
+
export type GridKind = 'public' | 'local' | 'global';
|
|
21
|
+
export type GridKey = 'public' | `local:${string}` | `global:${string}`;
|
|
22
|
+
export interface Grid {
|
|
23
|
+
key: GridKey;
|
|
24
|
+
kind: GridKind;
|
|
25
|
+
/** As the game prints it: "the public grid", "the Neon Strip local grid", "the Renraku grid". */
|
|
26
|
+
name: string;
|
|
27
|
+
/** p.233: the public grid's own toll on its users' actions. */
|
|
28
|
+
userPenalty: 0 | -2;
|
|
29
|
+
}
|
|
30
|
+
export declare const PUBLIC_GRID: Grid;
|
|
31
|
+
export declare function localGrid(district: string): Grid;
|
|
32
|
+
export declare function globalGrid(corp: string): Grid;
|
|
33
|
+
/** The Big Ten of 2075 (SR5 p.21-23), each with a global grid (p.234). */
|
|
34
|
+
export declare const BIG_TEN: readonly string[];
|
|
35
|
+
/**
|
|
36
|
+
* The High-lifestyle provider until chargen offers the pick (p.222: "pick
|
|
37
|
+
* one of the Big Ten"). A PLACEHOLDER, chosen for being first in the
|
|
38
|
+
* book's own list, not for any fiction; the save carries the real choice
|
|
39
|
+
* in `gridProvider` once the web generator asks for it.
|
|
40
|
+
*/
|
|
41
|
+
export declare const DEFAULT_GRID_PROVIDER: string;
|
|
42
|
+
/** Unknown on either side is NOT "another grid" -- no penalty on a guess. */
|
|
43
|
+
export declare function sameGrid(a: Grid | undefined, b: Grid | undefined): boolean;
|
|
44
|
+
/** p.222 "Your Grid": the grid a lifestyle buys. */
|
|
45
|
+
export declare function homeGrid(lifestyleTier: string, district: Grid, provider?: string): Grid;
|
|
46
|
+
/**
|
|
47
|
+
* Every grid a lifestyle has legitimate access to, for a legal hop (p.240).
|
|
48
|
+
* Public is free to all; Middle adds the local grid; High adds its chosen
|
|
49
|
+
* global grid; Luxury can be "on any grid you want".
|
|
50
|
+
*/
|
|
51
|
+
export declare function gridsWithAccess(lifestyleTier: string, district: Grid, provider?: string): Grid[];
|
|
52
|
+
export declare function hasAccess(lifestyleTier: string, district: Grid, target: Grid, provider?: string): boolean;
|
|
53
|
+
/** p.240: the grid's defence against an illegal Hack on the Fly hop. Public is free -- no test. */
|
|
54
|
+
export declare function hopDefenceDice(target: Grid): 0 | 4 | 6;
|
|
55
|
+
/**
|
|
56
|
+
* A grid by what a player types: "public", "local", the district's name,
|
|
57
|
+
* a Big Ten name, or "global <corp>". Undefined when nothing answers.
|
|
58
|
+
*/
|
|
59
|
+
export declare function resolveGridName(query: string, district: Grid): Grid | undefined;
|
|
60
|
+
export interface GridModifier {
|
|
61
|
+
total: number;
|
|
62
|
+
/** Mechanics-column words, one per penalty applied. */
|
|
63
|
+
parts: string[];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The dice a grid costs an action (p.233): the user's own grid toll (public
|
|
67
|
+
* -2) plus -2 when the target sits on another grid. Inside a host, none of
|
|
68
|
+
* it applies. Unknown grids cost nothing.
|
|
69
|
+
*/
|
|
70
|
+
export declare function gridActionModifier(actorGrid: Grid | undefined, inside: boolean, targetGrid: Grid | undefined): GridModifier;
|
|
71
|
+
/** The Mechanics-column suffix for a modifier, or nothing when it costs nothing. */
|
|
72
|
+
export declare function gridNote(mod: GridModifier): string;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
const slug = (s) => s.trim().toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
|
|
2
|
+
export const PUBLIC_GRID = { key: 'public', kind: 'public', name: 'the public grid', userPenalty: -2 };
|
|
3
|
+
export function localGrid(district) {
|
|
4
|
+
return { key: `local:${slug(district)}`, kind: 'local', name: `the ${district.trim()} local grid`, userPenalty: 0 };
|
|
5
|
+
}
|
|
6
|
+
export function globalGrid(corp) {
|
|
7
|
+
return { key: `global:${slug(corp)}`, kind: 'global', name: `the ${corp.trim()} grid`, userPenalty: 0 };
|
|
8
|
+
}
|
|
9
|
+
/** The Big Ten of 2075 (SR5 p.21-23), each with a global grid (p.234). */
|
|
10
|
+
export const BIG_TEN = [
|
|
11
|
+
'Ares', 'Aztechnology', 'Evo', 'Horizon', 'Mitsuhama', 'NeoNET', 'Renraku', 'Saeder-Krupp', 'Shiawase', 'Wuxing',
|
|
12
|
+
];
|
|
13
|
+
/**
|
|
14
|
+
* The High-lifestyle provider until chargen offers the pick (p.222: "pick
|
|
15
|
+
* one of the Big Ten"). A PLACEHOLDER, chosen for being first in the
|
|
16
|
+
* book's own list, not for any fiction; the save carries the real choice
|
|
17
|
+
* in `gridProvider` once the web generator asks for it.
|
|
18
|
+
*/
|
|
19
|
+
export const DEFAULT_GRID_PROVIDER = BIG_TEN[0];
|
|
20
|
+
/** Unknown on either side is NOT "another grid" -- no penalty on a guess. */
|
|
21
|
+
export function sameGrid(a, b) {
|
|
22
|
+
if (!a || !b)
|
|
23
|
+
return true;
|
|
24
|
+
return a.key === b.key;
|
|
25
|
+
}
|
|
26
|
+
const tierRank = (tier) => ['street', 'squatter', 'low', 'middle', 'high', 'luxury'].indexOf(tier.trim().toLowerCase());
|
|
27
|
+
/** p.222 "Your Grid": the grid a lifestyle buys. */
|
|
28
|
+
export function homeGrid(lifestyleTier, district, provider = DEFAULT_GRID_PROVIDER) {
|
|
29
|
+
const rank = tierRank(lifestyleTier);
|
|
30
|
+
if (rank <= 2)
|
|
31
|
+
return PUBLIC_GRID; // Street, Squatter, Low (and unknown)
|
|
32
|
+
if (rank === 3)
|
|
33
|
+
return district; // Middle: the local grid
|
|
34
|
+
return globalGrid(provider); // High and Luxury: the chosen global grid
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Every grid a lifestyle has legitimate access to, for a legal hop (p.240).
|
|
38
|
+
* Public is free to all; Middle adds the local grid; High adds its chosen
|
|
39
|
+
* global grid; Luxury can be "on any grid you want".
|
|
40
|
+
*/
|
|
41
|
+
export function gridsWithAccess(lifestyleTier, district, provider = DEFAULT_GRID_PROVIDER) {
|
|
42
|
+
const rank = tierRank(lifestyleTier);
|
|
43
|
+
const grids = [PUBLIC_GRID];
|
|
44
|
+
if (rank >= 3)
|
|
45
|
+
grids.push(district);
|
|
46
|
+
if (rank === 4)
|
|
47
|
+
grids.push(globalGrid(provider));
|
|
48
|
+
if (rank >= 5)
|
|
49
|
+
for (const corp of BIG_TEN)
|
|
50
|
+
grids.push(globalGrid(corp));
|
|
51
|
+
return grids;
|
|
52
|
+
}
|
|
53
|
+
export function hasAccess(lifestyleTier, district, target, provider = DEFAULT_GRID_PROVIDER) {
|
|
54
|
+
return gridsWithAccess(lifestyleTier, district, provider).some(g => g.key === target.key);
|
|
55
|
+
}
|
|
56
|
+
/** p.240: the grid's defence against an illegal Hack on the Fly hop. Public is free -- no test. */
|
|
57
|
+
export function hopDefenceDice(target) {
|
|
58
|
+
return target.kind === 'public' ? 0 : target.kind === 'local' ? 4 : 6;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* A grid by what a player types: "public", "local", the district's name,
|
|
62
|
+
* a Big Ten name, or "global <corp>". Undefined when nothing answers.
|
|
63
|
+
*/
|
|
64
|
+
export function resolveGridName(query, district) {
|
|
65
|
+
const q = query.trim().toLowerCase().replace(/^the\s+/, '').replace(/\s+grid$/, '');
|
|
66
|
+
if (q === '')
|
|
67
|
+
return undefined;
|
|
68
|
+
if (q === 'public' || q === 'pubgrid')
|
|
69
|
+
return PUBLIC_GRID;
|
|
70
|
+
if (q === 'local' || slug(q) === district.key.slice('local:'.length))
|
|
71
|
+
return district;
|
|
72
|
+
const corpWord = q.replace(/^global\s+/, '');
|
|
73
|
+
const corp = BIG_TEN.find(c => c.toLowerCase() === corpWord || slug(c) === slug(corpWord));
|
|
74
|
+
return corp ? globalGrid(corp) : undefined;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* The dice a grid costs an action (p.233): the user's own grid toll (public
|
|
78
|
+
* -2) plus -2 when the target sits on another grid. Inside a host, none of
|
|
79
|
+
* it applies. Unknown grids cost nothing.
|
|
80
|
+
*/
|
|
81
|
+
export function gridActionModifier(actorGrid, inside, targetGrid) {
|
|
82
|
+
if (inside)
|
|
83
|
+
return { total: 0, parts: [] };
|
|
84
|
+
const parts = [];
|
|
85
|
+
let total = 0;
|
|
86
|
+
if (actorGrid?.userPenalty) {
|
|
87
|
+
total += actorGrid.userPenalty;
|
|
88
|
+
parts.push(`public grid ${actorGrid.userPenalty} (p.233)`);
|
|
89
|
+
}
|
|
90
|
+
if (actorGrid && targetGrid && !sameGrid(actorGrid, targetGrid)) {
|
|
91
|
+
total -= 2;
|
|
92
|
+
parts.push(`other grid -2 (p.233)`);
|
|
93
|
+
}
|
|
94
|
+
return { total, parts };
|
|
95
|
+
}
|
|
96
|
+
/** The Mechanics-column suffix for a modifier, or nothing when it costs nothing. */
|
|
97
|
+
export function gridNote(mod) {
|
|
98
|
+
return mod.parts.length > 0 ? ` [${mod.parts.join(', ')}]` : '';
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=grids.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grids.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/utilities/grids.ts"],"names":[],"mappings":"AA+BA,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAE7G,MAAM,CAAC,MAAM,WAAW,GAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC;AAE7G,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,OAAO,EAAE,GAAG,EAAE,SAAS,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;AACtH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,EAAE,GAAG,EAAE,UAAU,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;AAC1G,CAAC;AAED,0EAA0E;AAC1E,MAAM,CAAC,MAAM,OAAO,GAAsB;IACxC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ;CACjH,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEhD,6EAA6E;AAC7E,MAAM,UAAU,QAAQ,CAAC,CAAmB,EAAE,CAAmB;IAC/D,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC;AACzB,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAU,EAAE,CACxC,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AAE/F,oDAAoD;AACpD,MAAM,UAAU,QAAQ,CAAC,aAAqB,EAAE,QAAc,EAAE,WAAmB,qBAAqB;IACtG,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrC,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,WAAW,CAAC,CAAY,sCAAsC;IACpF,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC,CAAc,yBAAyB;IACvE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAkB,0CAA0C;AAC1F,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,aAAqB,EAAE,QAAc,EAAE,WAAmB,qBAAqB;IAC7G,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrC,MAAM,KAAK,GAAW,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,IAAI,IAAI,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,IAAI,KAAK,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjD,IAAI,IAAI,IAAI,CAAC;QAAE,KAAK,MAAM,IAAI,IAAI,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,aAAqB,EAAE,QAAc,EAAE,MAAY,EAAE,WAAmB,qBAAqB;IACrH,OAAO,eAAe,CAAC,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5F,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,cAAc,CAAC,MAAY;IACzC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,QAAc;IAC3D,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACpF,IAAI,CAAC,KAAK,EAAE;QAAG,OAAO,SAAS,CAAC;IAChC,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC;IAC1D,IAAI,CAAC,KAAK,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,QAAQ,CAAC;IACtF,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3F,OAAO,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7C,CAAC;AAQD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAA2B,EAAE,MAAe,EAAE,UAA4B;IAC3G,IAAI,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,SAAS,EAAE,WAAW,EAAE,CAAC;QAAC,KAAK,IAAI,SAAS,CAAC,WAAW,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,eAAe,SAAS,CAAC,WAAW,UAAU,CAAC,CAAC;IAAC,CAAC;IAC3H,IAAI,SAAS,IAAI,UAAU,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC;QAAC,KAAK,IAAI,CAAC,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAAC,CAAC;IACrH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,QAAQ,CAAC,GAAiB;IACxC,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { NPC } from '../models/npc.js';
|
|
2
|
+
import type { Scene } from '../models/scene.js';
|
|
3
|
+
import type { Host } from '../models/host.js';
|
|
4
|
+
/** Launch one IC of this kind inside the host, as an actor. Returns undefined when the scene cannot host actors. */
|
|
5
|
+
export declare function spawnIC(scene: Scene, host: Host, kind: string): NPC | undefined;
|
|
6
|
+
/** Take a crashed IC out of the host: its name off the running list, its actor out of the scene, its kind queued to relaunch. */
|
|
7
|
+
export declare function crashIC(scene: Scene | undefined, host: Host, kind: string): void;
|
|
8
|
+
/** Every running IC whose actor has been crashed (its monitor filled, or its code sheared apart). */
|
|
9
|
+
export declare function crashedIC(host: Host): string[];
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { NPC } from '../models/npc.js';
|
|
2
|
+
import { CommandRegistry } from '../commands/command-registry.js';
|
|
3
|
+
import { Logger } from './logger.js';
|
|
4
|
+
/**
|
|
5
|
+
* IC AS ICONS (increment 5 of the Matrix position model, 2026-09-02).
|
|
6
|
+
* SR5 p.247: "Each IC program has a persona with its own Condition
|
|
7
|
+
* Monitor and Initiative Score ... IC uses the Matrix attributes of its
|
|
8
|
+
* host" and "rolls Host Rating x 2 for any attacks". p.355-356: a host
|
|
9
|
+
* runs up to its Rating in IC at once; crashed IC "can simply be
|
|
10
|
+
* reactivated the very next turn by the Host". p.229: IC and sprites
|
|
11
|
+
* have Matrix Condition Monitors and lose all damage when they stop
|
|
12
|
+
* running. The engine used to keep IC as names nothing could target;
|
|
13
|
+
* now each running IC is an actor inside the host -- a spike or a data
|
|
14
|
+
* spike lands on it, and the host relaunches what you crash.
|
|
15
|
+
*
|
|
16
|
+
* WHAT THE ENGINE READS INTO THE GAPS, said out loud:
|
|
17
|
+
* - Condition Monitor size: the device rule, 8 + ceil(Host Rating / 2)
|
|
18
|
+
* (p.228), applied through the actor's Body -- the same track sprites
|
|
19
|
+
* already use for their Matrix boxes.
|
|
20
|
+
* - Mental attributes: IC has none in the book; where a test asks for
|
|
21
|
+
* one (a persona's spike is resisted with Willpower + Firewall), the
|
|
22
|
+
* Host Rating stands in. That is the engine's reading of "uses the
|
|
23
|
+
* host's attributes", not a quoted line.
|
|
24
|
+
* - Initiative: the engine resolves host turns after each player action
|
|
25
|
+
* rather than by Initiative Score; the 4D6 hot-sim dice (p.247) are
|
|
26
|
+
* not rolled. Unchanged from before; recorded, not hidden.
|
|
27
|
+
*/
|
|
28
|
+
/** The actor's name for a kind, unique in the scene. */
|
|
29
|
+
function iconName(scene, kind) {
|
|
30
|
+
if (!scene.getActor(kind))
|
|
31
|
+
return kind;
|
|
32
|
+
for (let n = 2; n < 50; n++) {
|
|
33
|
+
const name = `${kind} #${n}`;
|
|
34
|
+
if (!scene.getActor(name))
|
|
35
|
+
return name;
|
|
36
|
+
}
|
|
37
|
+
return `${kind} #${Date.now()}`;
|
|
38
|
+
}
|
|
39
|
+
/** Launch one IC of this kind inside the host, as an actor. Returns undefined when the scene cannot host actors. */
|
|
40
|
+
export function spawnIC(scene, host, kind) {
|
|
41
|
+
if (typeof scene.addActor !== 'function' || typeof scene.setCharacterLocation !== 'function')
|
|
42
|
+
return undefined;
|
|
43
|
+
const rating = host.rating;
|
|
44
|
+
const name = iconName(scene, kind);
|
|
45
|
+
const npc = new NPC({
|
|
46
|
+
dialog: [],
|
|
47
|
+
description: `${kind}: a program the ${host.name} host runs against intruders -- sculpted ice, sharp at every edge, and it has your icon.`,
|
|
48
|
+
playerConstructorConfig: {
|
|
49
|
+
playerName: name,
|
|
50
|
+
startLocation: host.over,
|
|
51
|
+
combat: {
|
|
52
|
+
body: rating, agility: rating, reaction: rating, strength: rating,
|
|
53
|
+
willpower: rating, logic: rating, intuition: rating, charisma: rating, edge: 0, combatSkill: 0,
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
}, new CommandRegistry(scene));
|
|
57
|
+
npc.plane = 'matrix';
|
|
58
|
+
npc.hostile = true;
|
|
59
|
+
npc.icHost = host;
|
|
60
|
+
npc.icKind = kind;
|
|
61
|
+
npc.matrixPosition = { kind: 'host', host };
|
|
62
|
+
scene.addActor(npc);
|
|
63
|
+
scene.setCharacterLocation(npc, host.over.name);
|
|
64
|
+
npc.scene = scene;
|
|
65
|
+
host.iceActors.set(kind, npc);
|
|
66
|
+
try {
|
|
67
|
+
Logger.getInstance().write(`IC launched: ${name} in ${host.name} (rating ${rating}).`);
|
|
68
|
+
}
|
|
69
|
+
catch { /* no session */ }
|
|
70
|
+
return npc;
|
|
71
|
+
}
|
|
72
|
+
/** Take a crashed IC out of the host: its name off the running list, its actor out of the scene, its kind queued to relaunch. */
|
|
73
|
+
export function crashIC(scene, host, kind) {
|
|
74
|
+
const actor = host.iceActors.get(kind);
|
|
75
|
+
host.iceActors.delete(kind);
|
|
76
|
+
const at = host.runningIC.indexOf(kind);
|
|
77
|
+
if (at >= 0)
|
|
78
|
+
host.runningIC.splice(at, 1);
|
|
79
|
+
if (actor && scene && typeof scene.removeActor === 'function') {
|
|
80
|
+
try {
|
|
81
|
+
host.over.removeActor(actor);
|
|
82
|
+
}
|
|
83
|
+
catch { /* not in the room */ }
|
|
84
|
+
scene.removeActor(actor.name);
|
|
85
|
+
}
|
|
86
|
+
if (!host.relaunchQueue.includes(kind))
|
|
87
|
+
host.relaunchQueue.push(kind);
|
|
88
|
+
}
|
|
89
|
+
/** Every running IC whose actor has been crashed (its monitor filled, or its code sheared apart). */
|
|
90
|
+
export function crashedIC(host) {
|
|
91
|
+
const out = [];
|
|
92
|
+
for (const [kind, actor] of host.iceActors) {
|
|
93
|
+
if (actor.isDown() || actor.deathClaimed)
|
|
94
|
+
out.push(kind);
|
|
95
|
+
}
|
|
96
|
+
return out;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=ic-actors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ic-actors.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/utilities/ic-actors.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Scene } from '../models/scene.js';
|
|
1
2
|
import type { Player } from '../models/player.js';
|
|
2
3
|
import type { Room } from '../models/room.js';
|
|
3
4
|
/**
|
|
@@ -170,7 +171,7 @@ export declare function ambientPatrol(room: Room, actor: Player): IICTurn;
|
|
|
170
171
|
* has. One entry point, so the caller never has to know which half of
|
|
171
172
|
* the host is awake.
|
|
172
173
|
*/
|
|
173
|
-
export declare function runHostTurn(room: Room, actor: Player): IICTurn;
|
|
174
|
+
export declare function runHostTurn(room: Room, actor: Player, scene?: Scene): IICTurn;
|
|
174
175
|
/**
|
|
175
176
|
* ONE COMBAT TURN of the host's ice.
|
|
176
177
|
*
|
|
@@ -182,4 +183,4 @@ export declare function runHostTurn(room: Room, actor: Player): IICTurn;
|
|
|
182
183
|
* analogue available; it is not something the book says, and it is not
|
|
183
184
|
* dressed up as a citation.
|
|
184
185
|
*/
|
|
185
|
-
export declare function runICTurn(room: Room, actor: Player): IICTurn;
|
|
186
|
+
export declare function runICTurn(room: Room, actor: Player, scene?: Scene): IICTurn;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { rollPool, formatRoll } from './dice.js';
|
|
2
|
+
import { spawnIC, crashIC, crashedIC } from './ic-actors.js';
|
|
2
3
|
import { hostLabel } from './grid-names.js';
|
|
3
4
|
import { MAX_MARKS } from './marks.js';
|
|
4
5
|
/**
|
|
@@ -289,9 +290,9 @@ export function ambientPatrol(room, actor) {
|
|
|
289
290
|
* has. One entry point, so the caller never has to know which half of
|
|
290
291
|
* the host is awake.
|
|
291
292
|
*/
|
|
292
|
-
export function runHostTurn(room, actor) {
|
|
293
|
+
export function runHostTurn(room, actor, scene) {
|
|
293
294
|
if (hostIsHunting(room, actor))
|
|
294
|
-
return runICTurn(room, actor);
|
|
295
|
+
return runICTurn(room, actor, scene);
|
|
295
296
|
return ambientPatrol(room, actor);
|
|
296
297
|
}
|
|
297
298
|
/**
|
|
@@ -305,16 +306,35 @@ export function runHostTurn(room, actor) {
|
|
|
305
306
|
* analogue available; it is not something the book says, and it is not
|
|
306
307
|
* dressed up as a citation.
|
|
307
308
|
*/
|
|
308
|
-
export function runICTurn(room, actor) {
|
|
309
|
+
export function runICTurn(room, actor, scene) {
|
|
309
310
|
if (!hostIsHunting(room, actor))
|
|
310
311
|
return empty();
|
|
311
312
|
const out = empty();
|
|
312
|
-
|
|
313
|
-
//
|
|
313
|
+
const host = room.host;
|
|
314
|
+
// CRASHED IC LEAVES, AND COMES BACK (p.355-356): a program whose monitor
|
|
315
|
+
// filled since the last turn is off the list now, and the host
|
|
316
|
+
// relaunches it the very next turn -- "delayed, never destroyed".
|
|
317
|
+
if (host) {
|
|
318
|
+
// Last turn's crashes come back FIRST (p.355-356: "reactivated the very
|
|
319
|
+
// next turn"); what crashes this turn waits for the next call.
|
|
320
|
+
if (host.relaunchQueue.length > 0 && room.runningIC.length < room.hostRating) {
|
|
321
|
+
const kind = host.relaunchQueue.shift();
|
|
322
|
+
room.runningIC.push(kind);
|
|
323
|
+
if (scene)
|
|
324
|
+
spawnIC(scene, host, kind);
|
|
325
|
+
out.lines.push(` {red-fg}The host relaunches ${kind}.{/red-fg}`);
|
|
326
|
+
}
|
|
327
|
+
for (const kind of crashedIC(host)) {
|
|
328
|
+
crashIC(scene, host, kind);
|
|
329
|
+
out.lines.push(` {red-fg}${kind} shears apart -- crashed. The host is already recompiling it.{/red-fg}`);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
314
332
|
if (room.runningIC.length < room.hostRating) {
|
|
315
|
-
const next = IC_TYPES.find(t => !room.runningIC.includes(t.name));
|
|
333
|
+
const next = IC_TYPES.find(t => !room.runningIC.includes(t.name) && !(host?.relaunchQueue.includes(t.name)));
|
|
316
334
|
if (next) {
|
|
317
335
|
room.runningIC.push(next.name);
|
|
336
|
+
if (host && scene)
|
|
337
|
+
spawnIC(scene, host, next.name);
|
|
318
338
|
out.lines.push(next.kind === 'patrol'
|
|
319
339
|
? ` {red-fg}${next.name} is already walking the host -- it never had to be launched.{/red-fg}`
|
|
320
340
|
: ` {red-fg}The host launches ${next.name}.{/red-fg}`);
|