@maka/maka-cli 5.78.0 → 5.79.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/jack.d.ts +19 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/jack.js +68 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/jack.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/game.js +30 -3
- package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/headless.js +2 -3
- package/bundle/typescript/src/commands/game/sideQuest/headless.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +33 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/player.js +42 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/ic.d.ts +22 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/ic.js +150 -20
- package/bundle/typescript/src/commands/game/sideQuest/utilities/ic.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.d.ts +34 -4
- package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js +78 -47
- package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/repro-launch.js +30 -3
- package/bundle/typescript/src/commands/game/sideQuest/utilities/repro-launch.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/room-view.d.ts +41 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/room-view.js +73 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/room-view.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maka/maka-cli",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.79.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"summary": "A command line tool for scaffolding Meteor 2.x applications using either React.",
|
|
6
6
|
"description": "A command line tool for scaffolding Meteor 2.x applications using React.",
|
|
@@ -13,5 +13,24 @@ import { Command, ICommand } from './command.js';
|
|
|
13
13
|
export declare class JackCommand extends Command implements ICommand {
|
|
14
14
|
protected static verb: string;
|
|
15
15
|
protected static description: string;
|
|
16
|
+
/**
|
|
17
|
+
* THE JACK OUT ACTION (p.240): Hardware + Willpower [Firewall] v.
|
|
18
|
+
* Logic + Attack, rolled against the icon that locked your link.
|
|
19
|
+
*
|
|
20
|
+
* ONE ROLL, COMPARED TO EACH LOCKER SEPARATELY -- canon is explicit:
|
|
21
|
+
* "if more than one persona has you link-locked, you need to beat each
|
|
22
|
+
* of them individually: use a single roll and compare your hits to
|
|
23
|
+
* rolls from each opponent who had established a link-lock." So Black
|
|
24
|
+
* and Blaster both on you is not two attempts, it is one attempt
|
|
25
|
+
* against two defences, and failing either keeps you in.
|
|
26
|
+
*
|
|
27
|
+
* THE DEFENDER'S POOL IS THE ENGINE'S, and this is the same honesty
|
|
28
|
+
* the IC design has used throughout: canon writes "Logic + Attack",
|
|
29
|
+
* which is a PERSONA's pool, and IC has no Logic. The pool used here
|
|
30
|
+
* is the general IC rule (Host Rating x 2, p.247) limited by the
|
|
31
|
+
* host's Attack -- both halves cited, the combination ours, because
|
|
32
|
+
* the book never writes a link-lock defence for a program.
|
|
33
|
+
*/
|
|
34
|
+
private breakLinkLock;
|
|
16
35
|
execute(args?: string[]): Promise<string>;
|
|
17
36
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Command } from './command.js';
|
|
2
2
|
import { enterMatrix, leaveMatrix } from '../utilities/planes.js';
|
|
3
|
+
import { rollPool, formatRoll } from '../utilities/dice.js';
|
|
3
4
|
/**
|
|
4
5
|
* The Matrix door, both directions: "jack in [hot|cold]" and "jack out".
|
|
5
6
|
* Needs a working CYBERDECK carried (a commlink is calls and AR only) --
|
|
@@ -14,6 +15,53 @@ import { enterMatrix, leaveMatrix } from '../utilities/planes.js';
|
|
|
14
15
|
export class JackCommand extends Command {
|
|
15
16
|
static verb = 'jack';
|
|
16
17
|
static description = 'Enter or leave the Matrix: "jack in" (cold-sim), "jack in hot" (faster, harder, biofeedback is real), "jack out". Takes a working cyberdeck -- or being a technomancer. Your body slumps where you leave it.';
|
|
18
|
+
/**
|
|
19
|
+
* THE JACK OUT ACTION (p.240): Hardware + Willpower [Firewall] v.
|
|
20
|
+
* Logic + Attack, rolled against the icon that locked your link.
|
|
21
|
+
*
|
|
22
|
+
* ONE ROLL, COMPARED TO EACH LOCKER SEPARATELY -- canon is explicit:
|
|
23
|
+
* "if more than one persona has you link-locked, you need to beat each
|
|
24
|
+
* of them individually: use a single roll and compare your hits to
|
|
25
|
+
* rolls from each opponent who had established a link-lock." So Black
|
|
26
|
+
* and Blaster both on you is not two attempts, it is one attempt
|
|
27
|
+
* against two defences, and failing either keeps you in.
|
|
28
|
+
*
|
|
29
|
+
* THE DEFENDER'S POOL IS THE ENGINE'S, and this is the same honesty
|
|
30
|
+
* the IC design has used throughout: canon writes "Logic + Attack",
|
|
31
|
+
* which is a PERSONA's pool, and IC has no Logic. The pool used here
|
|
32
|
+
* is the general IC rule (Host Rating x 2, p.247) limited by the
|
|
33
|
+
* host's Attack -- both halves cited, the combination ours, because
|
|
34
|
+
* the book never writes a link-lock defence for a program.
|
|
35
|
+
*/
|
|
36
|
+
breakLinkLock() {
|
|
37
|
+
const actor = this.actor;
|
|
38
|
+
const room = actor.currentLocation;
|
|
39
|
+
const lockers = [...actor.linkLockedBy];
|
|
40
|
+
const attempt = rollPool(actor.skillRating('hardware') + actor.willpower, actor.matrixAttribute('firewall'));
|
|
41
|
+
const lines = [
|
|
42
|
+
`You throw everything at the disconnect --`,
|
|
43
|
+
];
|
|
44
|
+
if (this.scene.isHumanControlled(actor)) {
|
|
45
|
+
this.logger.meta(`Jack Out -- Hardware + Willpower [Firewall]: ${formatRoll(attempt)}`);
|
|
46
|
+
}
|
|
47
|
+
const held = [];
|
|
48
|
+
for (const name of lockers) {
|
|
49
|
+
const hold = rollPool(room.hostRating * 2, room.hostAttributes().attack);
|
|
50
|
+
if (this.scene.isHumanControlled(actor)) {
|
|
51
|
+
this.logger.meta(` v. ${name} keep-alive (Host Rating x2 [Attack]): ${formatRoll(hold)}`);
|
|
52
|
+
}
|
|
53
|
+
// Ties go to the locker: you need to BEAT each of them.
|
|
54
|
+
if (attempt.hits <= hold.hits)
|
|
55
|
+
held.push(name);
|
|
56
|
+
}
|
|
57
|
+
if (held.length > 0) {
|
|
58
|
+
lines.push(` ${held.join(' and ')} hold${held.length === 1 ? 's' : ''} the line -- the keep-alive won't break and you're still in. You can try again.`);
|
|
59
|
+
return { freed: false, lines };
|
|
60
|
+
}
|
|
61
|
+
actor.linkLockedBy.clear();
|
|
62
|
+
lines.push(` The hooks tear loose. You're free of the lock -- and going out the hard way.`);
|
|
63
|
+
return { freed: true, lines };
|
|
64
|
+
}
|
|
17
65
|
async execute(args = []) {
|
|
18
66
|
const actor = this.actor;
|
|
19
67
|
const sub = args[0]?.toLowerCase();
|
|
@@ -24,6 +72,26 @@ export class JackCommand extends Command {
|
|
|
24
72
|
if (actor.inExchange) {
|
|
25
73
|
return `The ice has your persona locked in the exchange -- survive it first, then jack out in the lull.`;
|
|
26
74
|
}
|
|
75
|
+
// LINK-LOCKED: leaving stops being a decision and becomes a test
|
|
76
|
+
// (p.229/p.240). Everything below is the Jack Out action.
|
|
77
|
+
if (actor.linkLockedBy.size > 0) {
|
|
78
|
+
const fight = this.breakLinkLock();
|
|
79
|
+
if (!fight.freed)
|
|
80
|
+
return fight.lines.join('\n');
|
|
81
|
+
// FORCED, not graceful. p.229: "successfully jacking out usually
|
|
82
|
+
// means suffering dumpshock, but at least you're free" -- the
|
|
83
|
+
// Jack Out action reboots the device you are riding (p.240),
|
|
84
|
+
// which is the ungraceful exit. The ordinary "jack out" below
|
|
85
|
+
// stays clean because that one IS the graceful drop; tearing off
|
|
86
|
+
// a keep-alive is not.
|
|
87
|
+
return [
|
|
88
|
+
...fight.lines,
|
|
89
|
+
...leaveMatrix(this.scene, actor, {
|
|
90
|
+
forced: true,
|
|
91
|
+
reason: `You rip the connection out by the roots --`,
|
|
92
|
+
}),
|
|
93
|
+
].join('\n');
|
|
94
|
+
}
|
|
27
95
|
const lines = leaveMatrix(this.scene, actor);
|
|
28
96
|
return lines.join('\n');
|
|
29
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jack.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/jack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"jack.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/jack.ts"],"names":[],"mappings":"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"}
|
|
@@ -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';
|
|
@@ -3049,6 +3049,12 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
|
|
|
3049
3049
|
this.player.plane = 'meat';
|
|
3050
3050
|
this.player.bodyRoom = undefined;
|
|
3051
3051
|
this.player.simMode = undefined;
|
|
3052
|
+
// This path leaves the Matrix WITHOUT going through leaveMatrix, so
|
|
3053
|
+
// it has to drop the keep-alives itself. Found by enumerating every
|
|
3054
|
+
// exit rather than trusting the choke point: a link-lock left set
|
|
3055
|
+
// here would ride the cab home and the next jack-in would start
|
|
3056
|
+
// already trapped, with nothing on the grid holding it.
|
|
3057
|
+
this.player.linkLockedBy.clear();
|
|
3052
3058
|
this.player.astralTicks = 0;
|
|
3053
3059
|
this.player.activeDeck = undefined;
|
|
3054
3060
|
this.player.riggedDrone = undefined;
|
|
@@ -3094,6 +3100,9 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
|
|
|
3094
3100
|
this.player.plane = 'meat';
|
|
3095
3101
|
this.player.bodyRoom = undefined;
|
|
3096
3102
|
this.player.simMode = undefined;
|
|
3103
|
+
// Same reason as settleTravelState: an exit that bypasses
|
|
3104
|
+
// leaveMatrix must drop the link-lock itself.
|
|
3105
|
+
this.player.linkLockedBy.clear();
|
|
3097
3106
|
this.player.astralTicks = 0;
|
|
3098
3107
|
this.player.activeDeck = undefined;
|
|
3099
3108
|
this.player.riggedDrone = undefined;
|
|
@@ -4530,8 +4539,7 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
|
|
|
4530
4539
|
isOtherPlayer: a => this.scene.isHumanControlled(a),
|
|
4531
4540
|
});
|
|
4532
4541
|
if (roomLines.length > 0) {
|
|
4533
|
-
|
|
4534
|
-
roomLines.push(caption(spot ? `@ ${spot}` : '(moving through)', boxWidth));
|
|
4542
|
+
roomLines.push(caption(roomCaption(here, this.player), boxWidth));
|
|
4535
4543
|
}
|
|
4536
4544
|
this.setRoomOverlay(roomLines);
|
|
4537
4545
|
}
|
|
@@ -4763,6 +4771,25 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
|
|
|
4763
4771
|
reason: `The host's ice burns your deck out from under you.`,
|
|
4764
4772
|
}));
|
|
4765
4773
|
}
|
|
4774
|
+
else if (turn.scrambled) {
|
|
4775
|
+
// SCRAMBLE IC (p.248): "you reboot immediately, taking dumpshock if
|
|
4776
|
+
// you were in VR." A forced exit through the same door, which is
|
|
4777
|
+
// what makes it a reboot rather than a graceful drop -- and the
|
|
4778
|
+
// reboot is also what hands the reducers' damage back.
|
|
4779
|
+
//
|
|
4780
|
+
// `else if` on purpose: a deck already bricked this turn has been
|
|
4781
|
+
// dumped, and dumping a persona twice would bill dumpshock twice.
|
|
4782
|
+
turn.lines.push(...leaveMatrix(this.scene, actor, {
|
|
4783
|
+
forced: true,
|
|
4784
|
+
reason: `Scramble IC rips the connection out at the root --`,
|
|
4785
|
+
}));
|
|
4786
|
+
}
|
|
4787
|
+
if (turn.traced) {
|
|
4788
|
+
// TRACK IC (p.249): the location goes to the authorities. Routed
|
|
4789
|
+
// into the heat the game already keeps for being made in the meat
|
|
4790
|
+
// world, rather than a second parallel notion of "they know".
|
|
4791
|
+
this.addHeat(4, `Track IC reported ${actor.name}'s location`);
|
|
4792
|
+
}
|
|
4766
4793
|
const body = turn.lines.join('\n');
|
|
4767
4794
|
return result.length > 0 ? `${result}\n${body}` : body;
|
|
4768
4795
|
}
|