@maka/maka-cli 5.4.0 → 5.6.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/archetypes.d.ts +20 -1
- package/bundle/typescript/src/commands/game/sideQuest/archetypes.js +76 -11
- package/bundle/typescript/src/commands/game/sideQuest/archetypes.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/advance.d.ts +16 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/advance.js +65 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/advance.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/assense.d.ts +2 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/assense.js +72 -29
- package/bundle/typescript/src/commands/game/sideQuest/commands/assense.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/attack.js +21 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/attack.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.d.ts +16 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js +39 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/brandish.d.ts +21 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/brandish.js +82 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/brandish.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/call.d.ts +13 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/call.js +93 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/call.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js +21 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/drone.js +13 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/drone.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/drop.js +3 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/drop.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/equip.js +19 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/equip.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.js +9 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.d.ts +2 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +33 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +43 -20
- package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.d.ts +15 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js +75 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/inv.js +5 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/inv.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/look.js +16 -4
- package/bundle/typescript/src/commands/game/sideQuest/commands/look.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/persuade.d.ts +18 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/persuade.js +100 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/persuade.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/pick.d.ts +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/pick.js +22 -7
- package/bundle/typescript/src/commands/game/sideQuest/commands/pick.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/say.js +8 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/say.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +55 -8
- package/bundle/typescript/src/commands/game/sideQuest/commands/search.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js +11 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/sneak.d.ts +15 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/sneak.js +35 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/sneak.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/spells.js +21 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/spells.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/subdue.js +4 -4
- package/bundle/typescript/src/commands/game/sideQuest/commands/subdue.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/take.js +70 -13
- package/bundle/typescript/src/commands/game/sideQuest/commands/take.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/talk.js +8 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/talk.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/unequip.js +6 -3
- package/bundle/typescript/src/commands/game/sideQuest/commands/unequip.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/use.js +5 -4
- package/bundle/typescript/src/commands/game/sideQuest/commands/use.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/room-factory.js +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/room-factory.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.d.ts +175 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +673 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.d.ts +64 -9
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.js +265 -434
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +69 -1
- package/bundle/typescript/src/commands/game/sideQuest/game.js +388 -67
- package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.d.ts +2 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +92 -3
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +66 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/player.js +151 -15
- package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.js +29 -4
- package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/room.d.ts +4 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/room.js +14 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/room.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/scene.d.ts +4 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/scene.js +35 -3
- package/bundle/typescript/src/commands/game/sideQuest/models/scene.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/scenes/scene1.json +275 -105
- package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +662 -233
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/player-seed.d.ts +8 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/puzzle-seed.d.ts +1 -1
- 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 +6 -3
- package/bundle/typescript/src/commands/game/sideQuest/ui.js +19 -20
- package/bundle/typescript/src/commands/game/sideQuest/ui.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.d.ts +6 -4
- package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js +31 -5
- package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.d.ts +34 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js +72 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +27 -3
- package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
- package/bundle/typescript/src/tools/ai/ai.class.d.ts +8 -1
- package/bundle/typescript/src/tools/ai/ai.class.js +8 -3
- package/bundle/typescript/src/tools/ai/ai.class.js.map +1 -1
- package/bundle/typescript/src/tools/https/https.class.d.ts +2 -2
- package/bundle/typescript/src/tools/https/https.class.js +10 -4
- package/bundle/typescript/src/tools/https/https.class.js.map +1 -1
- package/bundle/typescript/src/tools/https/https.interface.d.ts +2 -0
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maka/maka-cli",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.6.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.",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ICombatAttributes } from './models/player.js';
|
|
1
|
+
import { ICombatAttributes, Player } from './models/player.js';
|
|
2
2
|
import { Item } from './models/item.js';
|
|
3
3
|
import { Size, Category, Rating } from './types/shared/item-enum.js';
|
|
4
4
|
/**
|
|
@@ -41,3 +41,22 @@ export declare function getArchetype(name?: string): IArchetype;
|
|
|
41
41
|
* ones -- a samurai starts with the Predator IN HAND, not in a duffel.
|
|
42
42
|
*/
|
|
43
43
|
export declare function createArchetypeGear(archetype: IArchetype): Item[];
|
|
44
|
+
/**
|
|
45
|
+
* Stamps an archetype onto a Player: records the archetype's name (scene
|
|
46
|
+
* generation's dossier reads it -- see buildPlayerDossier), grants the
|
|
47
|
+
* requisite gear, and equips the wearables. Shared between the real
|
|
48
|
+
* character build (ui.ts) and the throwaway dossier player the launch flow
|
|
49
|
+
* builds so even the FIRST generated run is tailored to the build
|
|
50
|
+
* (sideQuest.sub.cmd.ts) -- found via a real session where a Decker's
|
|
51
|
+
* archetype-blind first job had no Matrix content at all.
|
|
52
|
+
*/
|
|
53
|
+
export declare function outfitArchetype(player: Player, archetype: IArchetype): void;
|
|
54
|
+
/**
|
|
55
|
+
* Slots every wearable in the pack into EMPTY equipment slots -- never
|
|
56
|
+
* swapping out anything already worn, so archetype signature gear
|
|
57
|
+
* survives the scene's generic starting kit arriving after it. Run once
|
|
58
|
+
* at session load (Game.init): a session shouldn't start with the
|
|
59
|
+
* "equip all" ritual (player request). Weapons land HOLSTERED, exactly
|
|
60
|
+
* as a manual equip would.
|
|
61
|
+
*/
|
|
62
|
+
export declare function equipIntoEmptySlots(player: Player): void;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Player } from './models/player.js';
|
|
1
2
|
import { Item } from './models/item.js';
|
|
2
3
|
import { Size, Category, Rating } from './types/shared/item-enum.js';
|
|
3
4
|
const gearDef = (partial) => ({
|
|
@@ -12,12 +13,14 @@ export const ARCHETYPES = [
|
|
|
12
13
|
{
|
|
13
14
|
name: 'Runner',
|
|
14
15
|
description: 'The balanced default: decent at everything, spectacular at nothing.',
|
|
15
|
-
combat: { body: 4, agility: 4, reaction: 4, combatSkill: 3, strength: 3, willpower: 3, logic: 3, intuition: 3, charisma: 3, edge: 2, magic: 0
|
|
16
|
+
combat: { body: 4, agility: 4, reaction: 4, combatSkill: 3, strength: 3, willpower: 3, logic: 3, intuition: 3, charisma: 3, edge: 2, magic: 0,
|
|
17
|
+
skills: { firearms: 3, blades: 2, unarmed: 3, sneaking: 2, perception: 3, athletics: 2, hacking: 1, locksmith: 1, negotiation: 2, con: 1, intimidation: 1, 'first-aid': 2 } },
|
|
16
18
|
},
|
|
17
19
|
{
|
|
18
20
|
name: 'Street Samurai',
|
|
19
21
|
description: 'Chrome and trigger discipline. Hits hard, soaks harder, thinks later.',
|
|
20
|
-
combat: { body: 5, agility: 5, reaction: 4, combatSkill: 5, strength: 4, willpower: 3, logic: 2, intuition: 3, charisma: 2, edge: 2, magic: 0
|
|
22
|
+
combat: { body: 5, agility: 5, reaction: 4, combatSkill: 5, strength: 4, willpower: 3, logic: 2, intuition: 3, charisma: 2, edge: 2, magic: 0,
|
|
23
|
+
skills: { firearms: 6, blades: 4, unarmed: 5, athletics: 4, perception: 3, intimidation: 4, sneaking: 2, 'first-aid': 1 } },
|
|
21
24
|
gear: [
|
|
22
25
|
gearDef({ name: 'Ares Predator V', description: 'The iconic heavy pistol of the shadows -- smartgun-linked, and it never jams when it matters.', category: Category.RangedWeapon, rating: Rating.Rare, shape: 'Pistol', weight: 2 }),
|
|
23
26
|
],
|
|
@@ -28,7 +31,8 @@ export const ARCHETYPES = [
|
|
|
28
31
|
// attack and defense pool instead (see Player.adept).
|
|
29
32
|
name: 'Adept',
|
|
30
33
|
description: 'Magic as muscle: faster than chrome, no spells, no projection -- the body IS the focus.',
|
|
31
|
-
combat: { body: 4, agility: 4, reaction: 4, combatSkill: 4, strength: 4, willpower: 4, logic: 2, intuition: 3, charisma: 2, edge: 2, magic: 5, adept: true
|
|
34
|
+
combat: { body: 4, agility: 4, reaction: 4, combatSkill: 4, strength: 4, willpower: 4, logic: 2, intuition: 3, charisma: 2, edge: 2, magic: 5, adept: true,
|
|
35
|
+
skills: { blades: 6, unarmed: 5, athletics: 5, sneaking: 4, perception: 3, assensing: 3, intimidation: 2, firearms: 2 } },
|
|
32
36
|
gear: [
|
|
33
37
|
gearDef({ name: 'Weapon Focus Katana', description: 'A blade that drinks its wielder\'s magic -- the edge sings at frequencies steel shouldn\'t reach.', category: Category.MeleeWeapon, rating: Rating.Rare, size: Size.Medium, shape: 'Sword', color: 'Silver', texture: 'Folded Steel', weight: 1.5 }),
|
|
34
38
|
],
|
|
@@ -36,7 +40,8 @@ export const ARCHETYPES = [
|
|
|
36
40
|
{
|
|
37
41
|
name: 'Covert Ops',
|
|
38
42
|
description: 'In through the vents, out before the alarm. Locks are suggestions.',
|
|
39
|
-
combat: { body: 3, agility: 5, reaction: 4, combatSkill: 3, strength: 3, willpower: 3, logic: 3, intuition: 5, charisma: 3, edge: 3, magic: 0
|
|
43
|
+
combat: { body: 3, agility: 5, reaction: 4, combatSkill: 3, strength: 3, willpower: 3, logic: 3, intuition: 5, charisma: 3, edge: 3, magic: 0,
|
|
44
|
+
skills: { sneaking: 6, locksmith: 5, perception: 4, athletics: 4, firearms: 3, unarmed: 3, con: 3, hacking: 2 } },
|
|
40
45
|
gear: [
|
|
41
46
|
gearDef({ name: 'Lockpick Set', description: 'Precision picks, tension bars, and a maglock passkey of arguable legality.', category: Category.Tool, rating: Rating.Standard, size: Size.Tiny, weight: 0.3 }),
|
|
42
47
|
gearDef({ name: 'Chameleon Suit', description: 'Ruthenium-coated infiltration wear that drinks the light around it.', category: Category.ArmorClothing, rating: Rating.Standard, size: Size.Medium, shape: 'Suit', color: 'Shifting Gray', texture: 'Ruthenium Weave', weight: 2 }),
|
|
@@ -45,7 +50,8 @@ export const ARCHETYPES = [
|
|
|
45
50
|
{
|
|
46
51
|
name: 'Face',
|
|
47
52
|
description: 'Talks the job open before anyone draws. Charm, luck, and just enough gun.',
|
|
48
|
-
combat: { body: 3, agility: 3, reaction: 3, combatSkill: 3, strength: 3, willpower: 4, logic: 3, intuition: 4, charisma: 6, edge: 3, magic: 0
|
|
53
|
+
combat: { body: 3, agility: 3, reaction: 3, combatSkill: 3, strength: 3, willpower: 4, logic: 3, intuition: 4, charisma: 6, edge: 3, magic: 0,
|
|
54
|
+
skills: { negotiation: 6, con: 5, intimidation: 3, perception: 4, firearms: 3, unarmed: 2, sneaking: 2 } },
|
|
49
55
|
gear: [
|
|
50
56
|
gearDef({ name: 'Transys Avalon', description: 'A top-shelf commlink -- the AR overlay alone is worth the felony it took to afford it.', category: Category.Commlink, rating: Rating.Rare, size: Size.Tiny, weight: 0.2 }),
|
|
51
57
|
gearDef({ name: 'Berwick Suit', description: 'Tailored armor-weave that reads boardroom, not battlefield.', category: Category.ArmorClothing, rating: Rating.Standard, size: Size.Medium, shape: 'Suit', color: 'Charcoal', texture: 'Armored Silk', weight: 2 }),
|
|
@@ -54,7 +60,8 @@ export const ARCHETYPES = [
|
|
|
54
60
|
{
|
|
55
61
|
name: 'Street Doc',
|
|
56
62
|
description: 'Keeps the team breathing: brains, steady hands, and a bag full of trauma kits.',
|
|
57
|
-
combat: { body: 3, agility: 3, reaction: 3, combatSkill: 2, strength: 3, willpower: 4, logic: 6, intuition: 4, charisma: 3, edge: 2, magic: 0
|
|
63
|
+
combat: { body: 3, agility: 3, reaction: 3, combatSkill: 2, strength: 3, willpower: 4, logic: 6, intuition: 4, charisma: 3, edge: 2, magic: 0,
|
|
64
|
+
skills: { 'first-aid': 6, perception: 4, negotiation: 3, firearms: 2, unarmed: 2, hacking: 2, con: 2 } },
|
|
58
65
|
gear: [
|
|
59
66
|
gearDef({ name: 'Trauma Kit', description: 'A doc-grade field kit: sprays, staples, and things that hiss.', category: Category.Medical, rating: Rating.Rare, weight: 1.5 }),
|
|
60
67
|
gearDef({ name: 'Kamikaze Stim Patch', description: 'A combat stim slap-patch. The crash is tomorrow\'s problem.', category: Category.StimPatch, rating: Rating.Standard, size: Size.Tiny, weight: 0.1 }),
|
|
@@ -63,7 +70,8 @@ export const ARCHETYPES = [
|
|
|
63
70
|
{
|
|
64
71
|
name: 'Combat Mage',
|
|
65
72
|
description: 'Awakened artillery: manabolts through milspec armor, if the drain doesn\'t eat you first.',
|
|
66
|
-
combat: { body: 3, agility: 3, reaction: 3, combatSkill: 2, strength: 2, willpower: 5, logic: 4, intuition: 4, charisma: 3, edge: 2, magic: 6
|
|
73
|
+
combat: { body: 3, agility: 3, reaction: 3, combatSkill: 2, strength: 2, willpower: 5, logic: 4, intuition: 4, charisma: 3, edge: 2, magic: 6,
|
|
74
|
+
skills: { spellcasting: 6, assensing: 4, perception: 3, unarmed: 2, firearms: 2, sneaking: 2 } },
|
|
67
75
|
gear: [
|
|
68
76
|
gearDef({ name: 'Spellcasting Focus', description: 'An orichalcum-threaded ring that gathers mana the way a lens gathers light.', category: Category.Focus, rating: Rating.Standard, size: Size.Tiny, shape: 'Ring', color: 'Gold', texture: 'Orichalcum', weight: 0.1 }),
|
|
69
77
|
],
|
|
@@ -71,7 +79,8 @@ export const ARCHETYPES = [
|
|
|
71
79
|
{
|
|
72
80
|
name: 'Street Shaman',
|
|
73
81
|
description: 'Awakened the hard way: iron will, sharp instincts, spirits on speed dial.',
|
|
74
|
-
combat: { body: 3, agility: 2, reaction: 3, combatSkill: 2, strength: 2, willpower: 6, logic: 3, intuition: 5, charisma: 4, edge: 2, magic: 5
|
|
82
|
+
combat: { body: 3, agility: 2, reaction: 3, combatSkill: 2, strength: 2, willpower: 6, logic: 3, intuition: 5, charisma: 4, edge: 2, magic: 5,
|
|
83
|
+
skills: { spellcasting: 5, assensing: 5, perception: 4, negotiation: 3, unarmed: 2, con: 2 } },
|
|
75
84
|
gear: [
|
|
76
85
|
gearDef({ name: 'Spirit Talisman', description: 'Feathers, bone, and braided wire -- a focus that hums when the other world leans close.', category: Category.Focus, rating: Rating.Standard, size: Size.Tiny, shape: 'Talisman', color: 'Bone White', texture: 'Feather and Wire', weight: 0.2 }),
|
|
77
86
|
],
|
|
@@ -83,7 +92,8 @@ export const ARCHETYPES = [
|
|
|
83
92
|
// firewall, and its hardware track is what the ice chews on.
|
|
84
93
|
name: 'Decker',
|
|
85
94
|
description: 'A ghost in the grid: hosts crack, ice burns, maglocks open. Just don\'t get caught in meatspace.',
|
|
86
|
-
combat: { body: 3, agility: 2, reaction: 3, combatSkill: 2, strength: 2, willpower: 4, logic: 7, intuition: 5, charisma: 2, edge: 3, magic: 0
|
|
95
|
+
combat: { body: 3, agility: 2, reaction: 3, combatSkill: 2, strength: 2, willpower: 4, logic: 7, intuition: 5, charisma: 2, edge: 3, magic: 0,
|
|
96
|
+
skills: { hacking: 6, perception: 4, locksmith: 3, sneaking: 3, firearms: 2, unarmed: 2, con: 2 } },
|
|
87
97
|
gear: [
|
|
88
98
|
gearDef({ name: 'Novatech Navigator', description: 'A workhorse cyberdeck -- scuffed case, immaculate boards. Your ticket into the Matrix.', category: Category.Cyberdeck, rating: Rating.Standard, weight: 2 }),
|
|
89
99
|
],
|
|
@@ -93,7 +103,8 @@ export const ARCHETYPES = [
|
|
|
93
103
|
// commlink -- and no hardware between their stun track and the ice.
|
|
94
104
|
name: 'Technomancer',
|
|
95
105
|
description: 'The Matrix answers when they think at it. No deck to brick -- only a mind to burn.',
|
|
96
|
-
combat: { body: 2, agility: 2, reaction: 3, combatSkill: 2, strength: 2, willpower: 5, logic: 5, intuition: 4, charisma: 3, edge: 3, magic: 0, resonance: 6
|
|
106
|
+
combat: { body: 2, agility: 2, reaction: 3, combatSkill: 2, strength: 2, willpower: 5, logic: 5, intuition: 4, charisma: 3, edge: 3, magic: 0, resonance: 6,
|
|
107
|
+
skills: { hacking: 6, perception: 4, sneaking: 3, con: 3, negotiation: 2, unarmed: 2 } },
|
|
97
108
|
},
|
|
98
109
|
{
|
|
99
110
|
// The drone is the mechanic: "drone" launches the Fly-Spy for live
|
|
@@ -101,7 +112,8 @@ export const ARCHETYPES = [
|
|
|
101
112
|
// drone rigging can build on this later.
|
|
102
113
|
name: 'Rigger',
|
|
103
114
|
description: 'Eyes everywhere: the Fly-Spy scouts the next room so your body never has to.',
|
|
104
|
-
combat: { body: 3, agility: 3, reaction: 5, combatSkill: 3, strength: 3, willpower: 3, logic: 5, intuition: 4, charisma: 2, edge: 2, magic: 0
|
|
115
|
+
combat: { body: 3, agility: 3, reaction: 5, combatSkill: 3, strength: 3, willpower: 3, logic: 5, intuition: 4, charisma: 2, edge: 2, magic: 0,
|
|
116
|
+
skills: { piloting: 6, hacking: 4, perception: 4, firearms: 3, locksmith: 3, unarmed: 2, 'first-aid': 2 } },
|
|
105
117
|
gear: [
|
|
106
118
|
gearDef({ name: 'Fly-Spy Drone', description: 'A palm-sized surveillance drone, quiet as a moth and twice as nosy.', category: Category.Drone, rating: Rating.Standard, size: Size.Tiny, shape: 'Insectoid', color: 'Gunmetal', texture: 'Micro-rotor', weight: 0.5 }),
|
|
107
119
|
],
|
|
@@ -128,4 +140,57 @@ export function createArchetypeGear(archetype) {
|
|
|
128
140
|
weight: def.weight,
|
|
129
141
|
}));
|
|
130
142
|
}
|
|
143
|
+
/** Wearable categories worn immediately at character creation. */
|
|
144
|
+
const EQUIP_ON_START = new Set([
|
|
145
|
+
Category.Weapon, Category.MeleeWeapon, Category.RangedWeapon,
|
|
146
|
+
Category.Armor, Category.BodyArmor, Category.ArmorClothing,
|
|
147
|
+
Category.Helmet, Category.Hat, Category.Gloves, Category.Boots, Category.Commlink,
|
|
148
|
+
]);
|
|
149
|
+
/**
|
|
150
|
+
* Stamps an archetype onto a Player: records the archetype's name (scene
|
|
151
|
+
* generation's dossier reads it -- see buildPlayerDossier), grants the
|
|
152
|
+
* requisite gear, and equips the wearables. Shared between the real
|
|
153
|
+
* character build (ui.ts) and the throwaway dossier player the launch flow
|
|
154
|
+
* builds so even the FIRST generated run is tailored to the build
|
|
155
|
+
* (sideQuest.sub.cmd.ts) -- found via a real session where a Decker's
|
|
156
|
+
* archetype-blind first job had no Matrix content at all.
|
|
157
|
+
*/
|
|
158
|
+
export function outfitArchetype(player, archetype) {
|
|
159
|
+
player.archetypeName = archetype.name;
|
|
160
|
+
for (const item of createArchetypeGear(archetype)) {
|
|
161
|
+
player.addInventory(item);
|
|
162
|
+
item.owner = player.name;
|
|
163
|
+
if (EQUIP_ON_START.has(item.category)) {
|
|
164
|
+
try {
|
|
165
|
+
player.equip(item);
|
|
166
|
+
}
|
|
167
|
+
catch { /* a second weapon just stays holstered */ }
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Slots every wearable in the pack into EMPTY equipment slots -- never
|
|
173
|
+
* swapping out anything already worn, so archetype signature gear
|
|
174
|
+
* survives the scene's generic starting kit arriving after it. Run once
|
|
175
|
+
* at session load (Game.init): a session shouldn't start with the
|
|
176
|
+
* "equip all" ritual (player request). Weapons land HOLSTERED, exactly
|
|
177
|
+
* as a manual equip would.
|
|
178
|
+
*/
|
|
179
|
+
export function equipIntoEmptySlots(player) {
|
|
180
|
+
for (const item of [...player.inventory.getAllItems()]) {
|
|
181
|
+
if (!EQUIP_ON_START.has(item.category))
|
|
182
|
+
continue;
|
|
183
|
+
const slotInfo = player.determineEquipmentSlot(item.category);
|
|
184
|
+
if (!slotInfo)
|
|
185
|
+
continue;
|
|
186
|
+
const groupRef = player.equipment[slotInfo.group];
|
|
187
|
+
if (!groupRef || groupRef[slotInfo.slot])
|
|
188
|
+
continue;
|
|
189
|
+
groupRef[slotInfo.slot] = item;
|
|
190
|
+
player.inventory.removeItem(item.name);
|
|
191
|
+
if (Player.isWeaponSlot(slotInfo.group, slotInfo.slot)) {
|
|
192
|
+
player.weaponDrawn = false;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
131
196
|
//# sourceMappingURL=archetypes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archetypes.js","sourceRoot":"","sources":["../../../../../../src/commands/game/sideQuest/archetypes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"archetypes.js","sourceRoot":"","sources":["../../../../../../src/commands/game/sideQuest/archetypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Command, ICommand } from './command.js';
|
|
2
|
+
/**
|
|
3
|
+
* Karma spending: "advance" lists every skill with its current rating and
|
|
4
|
+
* the cost to raise it; "advance <skill>" pays and raises. SR5e pricing --
|
|
5
|
+
* new rating x2 karma -- and a hard cap of 7. Training happens at HOME
|
|
6
|
+
* (any Residence room, i.e. the hideout): between jobs, not mid-run, and
|
|
7
|
+
* never mid-exchange. Karma itself is earned on job completion (see
|
|
8
|
+
* Scene.checkWinCondition).
|
|
9
|
+
*/
|
|
10
|
+
export declare class AdvanceCommand extends Command implements ICommand {
|
|
11
|
+
protected static verb: string;
|
|
12
|
+
protected static description: string;
|
|
13
|
+
private static readonly MAX_RATING;
|
|
14
|
+
execute(args?: string[]): Promise<string>;
|
|
15
|
+
private listSkills;
|
|
16
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Command } from './command.js';
|
|
2
|
+
import { SKILL_NAMES } from '../models/player.js';
|
|
3
|
+
import { fuzzyPickName } from '../utilities/fuzzy-match.js';
|
|
4
|
+
/**
|
|
5
|
+
* Karma spending: "advance" lists every skill with its current rating and
|
|
6
|
+
* the cost to raise it; "advance <skill>" pays and raises. SR5e pricing --
|
|
7
|
+
* new rating x2 karma -- and a hard cap of 7. Training happens at HOME
|
|
8
|
+
* (any Residence room, i.e. the hideout): between jobs, not mid-run, and
|
|
9
|
+
* never mid-exchange. Karma itself is earned on job completion (see
|
|
10
|
+
* Scene.checkWinCondition).
|
|
11
|
+
*/
|
|
12
|
+
export class AdvanceCommand extends Command {
|
|
13
|
+
static verb = 'advance';
|
|
14
|
+
static description = 'Spend karma to raise a skill (new rating x2). Train at your hideout: "advance" lists costs, "advance <skill>" pays.';
|
|
15
|
+
static MAX_RATING = 7;
|
|
16
|
+
async execute(args = []) {
|
|
17
|
+
const actor = this.actor;
|
|
18
|
+
if (actor.inExchange) {
|
|
19
|
+
return `Mid-exchange is no time for training montages.`;
|
|
20
|
+
}
|
|
21
|
+
if (actor.currentLocation?.roomType !== 'Residence') {
|
|
22
|
+
return `Training takes somewhere safe to drill -- head home to your hideout first.`;
|
|
23
|
+
}
|
|
24
|
+
if (actor.plane !== 'meat') {
|
|
25
|
+
return `Training is muscle and mind together -- come back to your body first.`;
|
|
26
|
+
}
|
|
27
|
+
if (!args || args.length === 0) {
|
|
28
|
+
return this.listSkills();
|
|
29
|
+
}
|
|
30
|
+
const picked = fuzzyPickName(args.join(' '), [...SKILL_NAMES]);
|
|
31
|
+
if (!picked) {
|
|
32
|
+
return `That's not a skill. Choose from: ${SKILL_NAMES.join(', ')}.`;
|
|
33
|
+
}
|
|
34
|
+
const skill = picked;
|
|
35
|
+
const current = actor.skillRating(skill);
|
|
36
|
+
if (current >= AdvanceCommand.MAX_RATING) {
|
|
37
|
+
return `Your ${skill} is already at ${current} -- there's nobody left on the street who could teach you more.`;
|
|
38
|
+
}
|
|
39
|
+
const next = current + 1;
|
|
40
|
+
const cost = next * 2;
|
|
41
|
+
if (actor.karma < cost) {
|
|
42
|
+
return `Raising ${skill} to ${next} costs ${cost} karma -- you have ${actor.karma}. Finish more jobs.`;
|
|
43
|
+
}
|
|
44
|
+
actor.karma -= cost;
|
|
45
|
+
actor.skills[skill] = next;
|
|
46
|
+
this.actor.performAction('trains', skill);
|
|
47
|
+
this.logger.write(`${actor.name} advanced ${skill} to ${next} (spent ${cost} karma, ${actor.karma} left).`);
|
|
48
|
+
this.scene.updateStatus();
|
|
49
|
+
return `You drill ${skill} until it sticks: ${current} -> ${next}. (${cost} karma spent, ${actor.karma} left.)`;
|
|
50
|
+
}
|
|
51
|
+
listSkills() {
|
|
52
|
+
const actor = this.actor;
|
|
53
|
+
const lines = [`=== TRAINING (karma: ${actor.karma}) ===`];
|
|
54
|
+
for (const skill of SKILL_NAMES) {
|
|
55
|
+
const current = actor.skillRating(skill);
|
|
56
|
+
const capped = current >= AdvanceCommand.MAX_RATING;
|
|
57
|
+
const cost = (current + 1) * 2;
|
|
58
|
+
lines.push(` ${skill.padEnd(12)} ${current}${capped ? ' (maxed)' : ` -> ${current + 1} costs ${cost} karma${actor.karma >= cost ? '' : ' (short)'}`}`);
|
|
59
|
+
}
|
|
60
|
+
lines.push('');
|
|
61
|
+
lines.push(`"advance <skill>" to train. Karma comes from finished jobs. (New rating x2, SR5e-style; unlisted combat ratings fall back to your base training.)`);
|
|
62
|
+
return lines.join('\n');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=advance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advance.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/advance.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,4 +11,6 @@ export declare class AssenseCommand extends Command implements ICommand {
|
|
|
11
11
|
protected static verb: string;
|
|
12
12
|
protected static description: string;
|
|
13
13
|
execute(args?: string[]): Promise<string>;
|
|
14
|
+
/** The room's astral weather -- shared by the toggle-on and projecting paths. */
|
|
15
|
+
private readRoom;
|
|
14
16
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Command } from './command.js';
|
|
2
2
|
import { fuzzyPickName } from '../utilities/fuzzy-match.js';
|
|
3
|
+
import { rollPool, formatRoll } from '../utilities/dice.js';
|
|
3
4
|
/**
|
|
4
5
|
* Astral perception: read the world's auras without (or while) leaving
|
|
5
6
|
* your body. Awakened only. "assense" reads the room -- wards, the magical
|
|
@@ -20,25 +21,33 @@ export class AssenseCommand extends Command {
|
|
|
20
21
|
return `There are no auras in here -- only geometry and other people's code.`;
|
|
21
22
|
}
|
|
22
23
|
const room = actor.currentLocation;
|
|
23
|
-
// Bare assense: the
|
|
24
|
+
// Bare assense: TOGGLE astral perception (the player's own status-bar
|
|
25
|
+
// request: senses held open as a sustained state, -2 dice to
|
|
26
|
+
// everything while they are -- see Player.sustainingPenalty). While
|
|
27
|
+
// projecting you're all the way in; no toggle needed or possible.
|
|
24
28
|
if (!args || args.length === 0) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
? ` • This place is WARDED -- an astral barrier seals it against projection.`
|
|
28
|
-
: ` • No wards here -- the astral is open ground.`);
|
|
29
|
-
if (room.hasNode) {
|
|
30
|
-
lines.push(` • The room's tech hums with dataflow -- a live Matrix node (nothing astral, but a decker would care).`);
|
|
29
|
+
if (actor.plane === 'astral') {
|
|
30
|
+
return this.readRoom(`Out here you ARE astral senses:`);
|
|
31
31
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
if (actor.astralPerceiving) {
|
|
33
|
+
actor.astralPerceiving = false;
|
|
34
|
+
this.scene.updateStatus();
|
|
35
|
+
return `You let the second sight close. The world flattens back to meat and neon.`;
|
|
35
36
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
return
|
|
37
|
+
actor.astralPerceiving = true;
|
|
38
|
+
actor.performAction('opens astral senses', 'eyes going distant, tracking things nobody else sees');
|
|
39
|
+
this.scene.updateStatus();
|
|
40
|
+
return this.readRoom(`You open your astral senses and HOLD them open (-2 dice to everything while sustained; "assense" again to close):`);
|
|
41
|
+
}
|
|
42
|
+
// Targeted assense: one aura, read as an ASSENSING test (Intuition +
|
|
43
|
+
// assensing; unskilled Intuition - 1). One hit reads the surface;
|
|
44
|
+
// three or more reads the depths (intent, sincerity, enchantment).
|
|
45
|
+
// Needs open senses -- reading a specific aura auto-opens them.
|
|
46
|
+
if (actor.plane !== 'astral' && !actor.astralPerceiving) {
|
|
47
|
+
actor.astralPerceiving = true;
|
|
48
|
+
actor.performAction('opens astral senses', 'eyes going distant');
|
|
49
|
+
this.scene.updateStatus();
|
|
40
50
|
}
|
|
41
|
-
// Targeted assense: one aura, read deep.
|
|
42
51
|
const candidates = this.scene.getActorsInRoom(room).filter(a => a !== actor && actor.canPerceive(a));
|
|
43
52
|
const picked = fuzzyPickName(args.join(' '), candidates.map(a => a.name));
|
|
44
53
|
const target = picked ? candidates.find(a => a.name === picked) : undefined;
|
|
@@ -46,33 +55,67 @@ export class AssenseCommand extends Command {
|
|
|
46
55
|
const present = candidates.map(a => a.name).join(', ') || 'no one';
|
|
47
56
|
return `No aura by that name here. Present: ${present}.`;
|
|
48
57
|
}
|
|
58
|
+
const skill = actor.skillRating('assensing');
|
|
59
|
+
const pool = Math.max(1, actor.intuition + (skill > 0 ? skill : -1) + actor.woundModifier - actor.sustainingPenalty);
|
|
60
|
+
const roll = rollPool(pool);
|
|
61
|
+
const lines = [`You read ${target.name}'s aura -- Assensing: ${formatRoll(roll)}`];
|
|
62
|
+
if (roll.hits === 0) {
|
|
63
|
+
lines.push(` The aura swims and blurs -- nothing you can hold onto. (Look again.)`);
|
|
64
|
+
return lines.join('\n');
|
|
65
|
+
}
|
|
66
|
+
// 1+ hits: the surface -- health and the spark.
|
|
49
67
|
const physHurt = target.damageTaken > 0;
|
|
50
68
|
const stunHurt = target.stunTaken > 0;
|
|
51
69
|
const health = !physHurt && !stunHurt
|
|
52
70
|
? `whole and unhurt`
|
|
53
71
|
: `marred${physHurt ? ` -- physical trauma (${target.damageTaken}/${target.maxConditionBoxes})` : ''}${stunHurt ? ` -- exhaustion and shock (${target.stunTaken}/${target.maxStunBoxes})` : ''}`;
|
|
54
|
-
const lines = [`You read ${target.name}'s aura:`];
|
|
55
72
|
lines.push(` • Health: ${health}.`);
|
|
56
73
|
lines.push(target.isAwakened()
|
|
57
74
|
? ` • They BURN -- Awakened, magic ${target.magic}. Treat accordingly.`
|
|
58
75
|
: ` • Mundane -- no spark in them.`);
|
|
59
|
-
|
|
60
|
-
|
|
76
|
+
// 3+ hits: the depths -- intent, sincerity, and what clings to them.
|
|
77
|
+
if (roll.hits >= 3) {
|
|
78
|
+
if (target.surrendered) {
|
|
79
|
+
lines.push(` • The fight has gone out of them entirely -- the surrender is genuine.`);
|
|
80
|
+
}
|
|
81
|
+
else if (target.combatOpponent) {
|
|
82
|
+
lines.push(` • Violence swirls close to the surface -- they're in a fight, or barely out of one.`);
|
|
83
|
+
}
|
|
84
|
+
const magicGear = target.inventory.getAllItems().filter(i => {
|
|
85
|
+
const c = String(i.category).toLowerCase();
|
|
86
|
+
return c.includes('focus') || c.includes('grimoire') || c.includes('spellformula') || c.includes('spell formula');
|
|
87
|
+
});
|
|
88
|
+
if (magicGear.length > 0) {
|
|
89
|
+
lines.push(` • Enchantment clings to their gear: ${magicGear.map(i => i.name).join(', ')}.`);
|
|
90
|
+
}
|
|
91
|
+
if (target.plane === 'meat' && actor.plane === 'astral') {
|
|
92
|
+
lines.push(` • They can't see you watching.`);
|
|
93
|
+
}
|
|
61
94
|
}
|
|
62
|
-
else
|
|
63
|
-
lines.push(`
|
|
95
|
+
else {
|
|
96
|
+
lines.push(` (The deeper layers slide past -- more hits would read intent and enchantment.)`);
|
|
97
|
+
}
|
|
98
|
+
this.logger.write(`${actor.name} assensed ${target.name} (${roll.hits} hits).`);
|
|
99
|
+
return lines.join('\n');
|
|
100
|
+
}
|
|
101
|
+
/** The room's astral weather -- shared by the toggle-on and projecting paths. */
|
|
102
|
+
readRoom(header) {
|
|
103
|
+
const actor = this.actor;
|
|
104
|
+
const room = actor.currentLocation;
|
|
105
|
+
const lines = [header];
|
|
106
|
+
lines.push(room.warded
|
|
107
|
+
? ` • This place is WARDED -- an astral barrier seals it against projection.`
|
|
108
|
+
: ` • No wards here -- the astral is open ground.`);
|
|
109
|
+
if (room.hasNode) {
|
|
110
|
+
lines.push(` • The room's tech hums with dataflow -- a live Matrix node (nothing astral, but a decker would care).`);
|
|
64
111
|
}
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
});
|
|
69
|
-
if (magicGear.length > 0) {
|
|
70
|
-
lines.push(` • Enchantment clings to their gear: ${magicGear.map(i => i.name).join(', ')}.`);
|
|
112
|
+
const others = this.scene.getActorsInRoom(room).filter(a => a !== actor && actor.canPerceive(a));
|
|
113
|
+
if (others.length === 0) {
|
|
114
|
+
lines.push(` • No living auras nearby.`);
|
|
71
115
|
}
|
|
72
|
-
|
|
73
|
-
lines.push(` •
|
|
116
|
+
else {
|
|
117
|
+
lines.push(` • Auras present: ${others.map(a => a.name).join(', ')} -- "assense <name>" to read one.`);
|
|
74
118
|
}
|
|
75
|
-
this.logger.write(`${actor.name} assensed ${target.name}.`);
|
|
76
119
|
return lines.join('\n');
|
|
77
120
|
}
|
|
78
121
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assense.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/assense.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,OAAO,cAAe,SAAQ,OAAO;IAC/B,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC;IACxB,MAAM,CAAC,WAAW,GAAG,0IAA0I,CAAC;IAE1K,KAAK,CAAC,OAAO,CAAC,OAAiB,EAAE;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC;YACxB,OAAO,qEAAqE,CAAC;QAC/E,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,sEAAsE,CAAC;QAChF,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,eAAe,CAAC;QAEnC,
|
|
1
|
+
{"version":3,"file":"assense.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/assense.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { Command } from './command.js';
|
|
|
2
2
|
import { CombatExchange } from '../utilities/combat-exchange.js';
|
|
3
3
|
import { fuzzyPickName } from '../utilities/fuzzy-match.js';
|
|
4
4
|
import { describeFledTarget } from '../utilities/pursuit.js';
|
|
5
|
-
import { shellsInRoom, resolveBodyAttack } from '../utilities/planes.js';
|
|
5
|
+
import { shellsInRoom, resolveBodyAttack, crossPlaneRefusal } from '../utilities/planes.js';
|
|
6
6
|
/**
|
|
7
7
|
* Shadowrun-style dice-pool combat, one full exchange per command:
|
|
8
8
|
*
|
|
@@ -36,6 +36,8 @@ export class AttackCommand extends Command {
|
|
|
36
36
|
if (this.actor.isIncapacitated()) {
|
|
37
37
|
return `You're down. The fight is over.`;
|
|
38
38
|
}
|
|
39
|
+
// Violence is loud -- sneak mode ends the moment you swing.
|
|
40
|
+
this.actor.sneaking = false;
|
|
39
41
|
const room = this.actor.currentLocation;
|
|
40
42
|
if (!room) {
|
|
41
43
|
return 'You are not in a valid location to fight anyone.';
|
|
@@ -57,7 +59,11 @@ export class AttackCommand extends Command {
|
|
|
57
59
|
const shellPick = fuzzyPickName(targetName, shells.map(s => s.name));
|
|
58
60
|
const shell = shellPick ? shells.find(s => s.name === shellPick) : undefined;
|
|
59
61
|
if (shell) {
|
|
62
|
+
// Even a defenseless body gets shot, not slapped -- draw first.
|
|
63
|
+
const drawn = this.actor.drawWeapon();
|
|
60
64
|
const lines = resolveBodyAttack(this.scene, this.actor, shell);
|
|
65
|
+
if (drawn)
|
|
66
|
+
lines.unshift(`${this.actor.name} draws ${drawn.name}.`);
|
|
61
67
|
const exchange = new CombatExchange(this.scene, this.logger, this.actor);
|
|
62
68
|
await exchange.announce(lines);
|
|
63
69
|
if (shell.isDown()) {
|
|
@@ -69,6 +75,12 @@ export class AttackCommand extends Command {
|
|
|
69
75
|
return this.actor === this.scene.getPlayer() ? '' : lines.join('\n');
|
|
70
76
|
}
|
|
71
77
|
}
|
|
78
|
+
// Visible on another plane beats "no one": a projecting mage's look
|
|
79
|
+
// lists the meat world's auras, so a miss here must name the actual
|
|
80
|
+
// rule, not deny the person exists (see planes.crossPlaneRefusal).
|
|
81
|
+
const cross = crossPlaneRefusal(this.scene, this.actor, room, targetName, 'strike');
|
|
82
|
+
if (cross)
|
|
83
|
+
return cross;
|
|
72
84
|
// If they exist but fled the room, say WHERE and how to chase --
|
|
73
85
|
// this result is what lands in a pursuing NPC's AI history, and
|
|
74
86
|
// without the explicit direction a hostile NPC just spams failed
|
|
@@ -134,10 +146,17 @@ export class AttackCommand extends Command {
|
|
|
134
146
|
// Movement locks for the duration of the exchange when the player is a
|
|
135
147
|
// combatant (see go.ts) -- the try/finally is exception safety so a
|
|
136
148
|
// crash mid-exchange can never leave the player permanently rooted.
|
|
137
|
-
|
|
149
|
+
// beginExchange auto-draws holstered weapons for whoever's weapon is
|
|
150
|
+
// about to speak -- the aggressor only when this attack actually uses
|
|
151
|
+
// it (subdue's hold doesn't; the defender's counter always does).
|
|
152
|
+
const drawLines = exchange.beginExchange(target, { aggressorDraws: this.usesEquippedWeapon() });
|
|
138
153
|
try {
|
|
139
154
|
this.actor.performAction(this.actionVerb(), target.name);
|
|
140
155
|
this.scene.addWorldEvent(`${this.actor.name} ${this.actionVerb()} ${target.name} in ${room.name}.`);
|
|
156
|
+
if (drawLines.length > 0) {
|
|
157
|
+
report.push(...drawLines);
|
|
158
|
+
await exchange.announce(drawLines);
|
|
159
|
+
}
|
|
141
160
|
// ---- Initiative decides who acts first (see rollInitiative) ----
|
|
142
161
|
const init = exchange.rollInitiative(this.actor, target);
|
|
143
162
|
report.push(...init.lines);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attack.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/attack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,cAAc,EAAkB,MAAM,iCAAiC,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"attack.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/attack.ts"],"names":[],"mappings":"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"}
|