@maka/maka-cli 5.3.17 → 5.5.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 +62 -0
- package/bundle/typescript/src/commands/game/sideQuest/archetypes.js +196 -0
- package/bundle/typescript/src/commands/game/sideQuest/archetypes.js.map +1 -0
- 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 +16 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/assense.js +122 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/assense.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/attack.d.ts +42 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/attack.js +243 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/attack.js.map +1 -0
- 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.d.ts +28 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js +101 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/call.d.ts +19 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/call.js +219 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/call.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/cast.d.ts +58 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js +397 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/command-registry.d.ts +11 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/command-registry.js +8 -3
- package/bundle/typescript/src/commands/game/sideQuest/commands/command-registry.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/command.d.ts +6 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/command.js +4 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/command.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/drone.d.ts +15 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/drone.js +72 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/drone.js.map +1 -0
- 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/edge.d.ts +13 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/edge.js +31 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/edge.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/end-call.d.ts +6 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/end-call.js +27 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/end-call.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/equip.d.ts +4 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/equip.js +59 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/equip.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.d.ts +13 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.js +50 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/give.js +7 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/give.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.d.ts +13 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +147 -4
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/hack.d.ts +25 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +199 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -0
- 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.d.ts +12 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/inv.js +43 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/inv.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/jack.d.ts +17 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/jack.js +64 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/jack.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/kill.d.ts +10 -3
- package/bundle/typescript/src/commands/game/sideQuest/commands/kill.js +11 -33
- package/bundle/typescript/src/commands/game/sideQuest/commands/kill.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/look.js +47 -4
- package/bundle/typescript/src/commands/game/sideQuest/commands/look.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/map.d.ts +12 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/map.js +46 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/map.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/pan.d.ts +12 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/pan.js +55 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/pan.js.map +1 -0
- 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 +10 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/pick.js +33 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/pick.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/project.d.ts +19 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/project.js +54 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/project.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/read.js +6 -5
- package/bundle/typescript/src/commands/game/sideQuest/commands/read.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/reboot.d.ts +12 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/reboot.js +52 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/reboot.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/reload.d.ts +14 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/reload.js +40 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/reload.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/rest.d.ts +15 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js +59 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/say.js +31 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/say.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +71 -7
- package/bundle/typescript/src/commands/game/sideQuest/commands/search.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.d.ts +12 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js +58 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/silent.d.ts +13 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/silent.js +50 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/silent.js.map +1 -0
- 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/solve.js +32 -11
- package/bundle/typescript/src/commands/game/sideQuest/commands/solve.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/spells.d.ts +14 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/spells.js +86 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/spells.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/stance.d.ts +12 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/stance.js +41 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/stance.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/subdue.d.ts +21 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/subdue.js +43 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/subdue.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/surrender.d.ts +20 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/surrender.js +45 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/surrender.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/take.d.ts +8 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/take.js +138 -2
- 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/unlock.js +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/unlock.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/use.d.ts +24 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/use.js +102 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/use.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/item-factory.js +2 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/item-factory.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/npc-factory.js +7 -2
- package/bundle/typescript/src/commands/game/sideQuest/factories/npc-factory.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/puzzle-factory.js +2 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/puzzle-factory.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/room-factory.js +3 -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.d.ts +8 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js +139 -21
- 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 +174 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.js +647 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +138 -9
- package/bundle/typescript/src/commands/game/sideQuest/game.js +757 -197
- package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/minigames/hack-minigame.d.ts +16 -0
- package/bundle/typescript/src/commands/game/sideQuest/minigames/hack-minigame.js +101 -0
- package/bundle/typescript/src/commands/game/sideQuest/minigames/hack-minigame.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/minigames/lockpick-minigame.d.ts +15 -0
- package/bundle/typescript/src/commands/game/sideQuest/minigames/lockpick-minigame.js +95 -0
- package/bundle/typescript/src/commands/game/sideQuest/minigames/lockpick-minigame.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/door.d.ts +10 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/door.js +15 -2
- package/bundle/typescript/src/commands/game/sideQuest/models/door.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/inventory.d.ts +10 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/inventory.js +54 -4
- package/bundle/typescript/src/commands/game/sideQuest/models/inventory.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/item.d.ts +41 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/item.js +106 -3
- package/bundle/typescript/src/commands/game/sideQuest/models/item.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.d.ts +27 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +312 -50
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +278 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/player.js +661 -9
- package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.d.ts +75 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.js +199 -6
- package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/room.d.ts +24 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/room.js +53 -18
- package/bundle/typescript/src/commands/game/sideQuest/models/room.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/scene.d.ts +73 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/scene.js +208 -3
- package/bundle/typescript/src/commands/game/sideQuest/models/scene.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/scenes/scene1.json +319 -70
- package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +661 -227
- package/bundle/typescript/src/commands/game/sideQuest/types/player-equipment.d.ts +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/exit-seed.d.ts +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/item-seed.d.ts +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/npc-seed.d.ts +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/player-seed.d.ts +42 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/puzzle-seed.d.ts +15 -1
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/room-seed.d.ts +4 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/scene-seed.d.ts +8 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/win-condition-seed.d.ts +15 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/win-condition-seed.js +2 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/win-condition-seed.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/shared/abstracts.d.ts +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/shared/abstracts.js +5 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/shared/abstracts.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/types/shared/item-enum.d.ts +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/shared/item-enum.js +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/shared/item-enum.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/ui.d.ts +3 -0
- package/bundle/typescript/src/commands/game/sideQuest/ui.js +95 -6
- package/bundle/typescript/src/commands/game/sideQuest/ui.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/auto-fight.d.ts +60 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/auto-fight.js +138 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/auto-fight.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.d.ts +145 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js +354 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/comm-style.d.ts +2 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/comm-style.js +12 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/comm-style.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.d.ts +22 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.js +34 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/fuzzy-match.d.ts +36 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/fuzzy-match.js +92 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/fuzzy-match.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.d.ts +77 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js +265 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/pursuit.d.ts +16 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/pursuit.js +36 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/pursuit.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +78 -7
- package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
- package/bundle/typescript/src/commands/set/global.sub.cmd.js +59 -5
- package/bundle/typescript/src/commands/set/global.sub.cmd.js.map +1 -1
- package/bundle/typescript/src/tools/ai/ai.class.d.ts +42 -0
- package/bundle/typescript/src/tools/ai/ai.class.js +117 -0
- package/bundle/typescript/src/tools/ai/ai.class.js.map +1 -0
- package/bundle/typescript/src/tools/fsi/fsi.interfaces.d.ts +1 -0
- package/bundle/typescript/src/tools/fsi/fsi.interfaces.js.map +1 -1
- package/bundle/typescript/src/tools/https/https.class.d.ts +3 -2
- package/bundle/typescript/src/tools/https/https.class.js +51 -2
- package/bundle/typescript/src/tools/https/https.class.js.map +1 -1
- package/bundle/typescript/src/tools/https/https.interface.d.ts +10 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-chunks.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/factories/scene-chunks.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,5 +2,12 @@ import { Scene } from '../models/scene.js';
|
|
|
2
2
|
import { Player } from '../models/player.js';
|
|
3
3
|
import { ISceneSeedJson } from '../types/seed/scene-seed.js';
|
|
4
4
|
export declare class SceneSynthesizer {
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* `grantStartingItems` defaults to true (a fresh game). Pass false when
|
|
7
|
+
* synthesizing a "continue"d job onto a long-lived Player who already has
|
|
8
|
+
* gear from prior jobs -- otherwise a whole new starter kit (commlink,
|
|
9
|
+
* armor, etc.) gets dumped into their inventory on top of what they
|
|
10
|
+
* already earned, unexplained.
|
|
11
|
+
*/
|
|
12
|
+
static synthesizeFromJson(json: ISceneSeedJson, player: Player, useAi: boolean, grantStartingItems?: boolean): Promise<Scene>;
|
|
6
13
|
}
|
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
import { Scene } from '../models/scene.js';
|
|
2
|
+
import { Door } from '../models/door.js';
|
|
2
3
|
import { RoomFactory } from './room-factory.js';
|
|
3
4
|
import { NPCFactory } from './npc-factory.js';
|
|
4
5
|
import { ItemFactory } from './item-factory.js';
|
|
5
6
|
import { PuzzleFactory } from './puzzle-factory.js';
|
|
7
|
+
import { Category } from '../types/shared/item-enum.js';
|
|
6
8
|
import { Logger } from '../utilities/logger.js';
|
|
7
9
|
export class SceneSynthesizer {
|
|
8
|
-
|
|
10
|
+
/**
|
|
11
|
+
* `grantStartingItems` defaults to true (a fresh game). Pass false when
|
|
12
|
+
* synthesizing a "continue"d job onto a long-lived Player who already has
|
|
13
|
+
* gear from prior jobs -- otherwise a whole new starter kit (commlink,
|
|
14
|
+
* armor, etc.) gets dumped into their inventory on top of what they
|
|
15
|
+
* already earned, unexplained.
|
|
16
|
+
*/
|
|
17
|
+
static async synthesizeFromJson(json, player, useAi, grantStartingItems = true) {
|
|
9
18
|
const logger = Logger.getInstance();
|
|
10
19
|
// Step 1: Create the Scene using the JSON’s room configuration
|
|
11
20
|
logger.write(`Initilizing Scene`);
|
|
@@ -17,13 +26,27 @@ export class SceneSynthesizer {
|
|
|
17
26
|
},
|
|
18
27
|
residenceTiers: json.residenceTiers,
|
|
19
28
|
story: json.story,
|
|
29
|
+
hub: json.hub,
|
|
20
30
|
});
|
|
31
|
+
// Shared context handed to every ensureAI*() call below, so room
|
|
32
|
+
// descriptions, NPC appearances, and puzzle riddles all stay
|
|
33
|
+
// consistent with the same scene tone.
|
|
34
|
+
const sceneContext = `
|
|
35
|
+
Scene: ${json.name}
|
|
36
|
+
Story: ${json.story}
|
|
37
|
+
Currency: ${json.currency.type}
|
|
38
|
+
Residence Tiers: ${json.residenceTiers.join(', ')}
|
|
39
|
+
Key Locations: ${json.rooms.map(r => r.name).join(', ')}
|
|
40
|
+
`.trim();
|
|
21
41
|
// Step 2: Create and Register Rooms using RoomFactory
|
|
22
42
|
logger.write(`Creating Rooms`);
|
|
23
43
|
const roomFactory = new RoomFactory();
|
|
24
44
|
for (const roomJson of json.rooms) {
|
|
25
45
|
const room = await roomFactory.createRoomFromJson(roomJson);
|
|
26
46
|
scene.addRoom(room); // Assumes you have a method like this on Scene
|
|
47
|
+
if (useAi) {
|
|
48
|
+
await room.ensureAIDescription(sceneContext);
|
|
49
|
+
}
|
|
27
50
|
}
|
|
28
51
|
// Step 2.5: Wire exits between rooms
|
|
29
52
|
logger.write(`Adding Exits`);
|
|
@@ -50,6 +73,9 @@ export class SceneSynthesizer {
|
|
|
50
73
|
scene.addActor(npc);
|
|
51
74
|
scene.setCharacterLocation(npc, npcJson.player.startLocation);
|
|
52
75
|
npc.scene = scene;
|
|
76
|
+
if (useAi) {
|
|
77
|
+
await npc.ensureAIAppearance(sceneContext);
|
|
78
|
+
}
|
|
53
79
|
}
|
|
54
80
|
// Step 4: Add Items
|
|
55
81
|
const itemFactory = new ItemFactory();
|
|
@@ -71,32 +97,124 @@ export class SceneSynthesizer {
|
|
|
71
97
|
// throw new Error(`Item "${itemJson.name}" must have either 'room' or 'heldBy'.`);
|
|
72
98
|
}
|
|
73
99
|
}
|
|
74
|
-
// Step 4.
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
100
|
+
// Step 4.05: NPCs wear their gear. "heldBy" only puts items in an NPC's
|
|
101
|
+
// inventory, but combat pools (see Player.getWeaponProfile /
|
|
102
|
+
// getArmorValue) read from EQUIPPED slots -- without this, an enforcer
|
|
103
|
+
// "holding" an assault rifle and an armored jacket would fight
|
|
104
|
+
// bare-fisted in street clothes. Only weapon/armor categories are
|
|
105
|
+
// auto-equipped: plot items (datachips, books, keys) stay in inventory
|
|
106
|
+
// where "give"/death-drops expect them. Failures are non-fatal -- a
|
|
107
|
+
// second weapon just stays holstered in inventory.
|
|
108
|
+
const combatCategories = new Set([
|
|
109
|
+
Category.Weapon, Category.MeleeWeapon, Category.RangedWeapon,
|
|
110
|
+
Category.Armor, Category.BodyArmor, Category.ArmorClothing, Category.Shield,
|
|
111
|
+
Category.Helmet, Category.ArmArmor, Category.LegArmor, Category.Boots, Category.Gloves,
|
|
112
|
+
]);
|
|
113
|
+
for (const npcJson of json.npcs ?? []) {
|
|
114
|
+
const npc = scene.getActor(npcJson.player.name);
|
|
115
|
+
if (!npc)
|
|
116
|
+
continue;
|
|
117
|
+
for (const item of [...npc.inventory.getAllItems()]) {
|
|
118
|
+
if (combatCategories.has(item.category)) {
|
|
119
|
+
npc.equip(item);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Step 4.1: Add Starting Items for the Player (skipped when continuing
|
|
124
|
+
// a long-lived player who already has gear from a prior job)
|
|
125
|
+
if (grantStartingItems) {
|
|
126
|
+
logger.write(`Assigning starting items to player: ${json.player.name}`);
|
|
127
|
+
for (const startingItemJson of json.player.startingItems ?? []) {
|
|
128
|
+
const item = await itemFactory.createItemFromJson(startingItemJson);
|
|
129
|
+
player.addInventory(item);
|
|
130
|
+
itemMap.set(item.name, item); // So it can still be referenced later if needed
|
|
131
|
+
item.owner = player.name;
|
|
132
|
+
logger.write(`Gave player starting item: ${item.name}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
logger.write(`Skipping starting items for ${json.player.name} -- continuing with existing gear.`);
|
|
137
|
+
}
|
|
138
|
+
// Step 4.2: Resolve the win condition (if any), now that items/npcs exist
|
|
139
|
+
if (json.winCondition) {
|
|
140
|
+
const wc = json.winCondition;
|
|
141
|
+
if (!itemMap.has(wc.item)) {
|
|
142
|
+
throw new Error(`Win condition references item "${wc.item}", which is not in "items".`);
|
|
143
|
+
}
|
|
144
|
+
if (wc.type === 'give') {
|
|
145
|
+
if (!wc.toNpc) {
|
|
146
|
+
throw new Error(`Win condition type "give" requires "toNpc".`);
|
|
147
|
+
}
|
|
148
|
+
if (!scene.getActor(wc.toNpc)) {
|
|
149
|
+
throw new Error(`Win condition references NPC "${wc.toNpc}", which is not in "npcs".`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
let rewardItem;
|
|
153
|
+
if (wc.rewardItem) {
|
|
154
|
+
rewardItem = itemMap.get(wc.rewardItem);
|
|
155
|
+
if (!rewardItem) {
|
|
156
|
+
throw new Error(`Win condition reward item "${wc.rewardItem}" is not in "items".`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
scene.setWinCondition({
|
|
160
|
+
type: wc.type,
|
|
161
|
+
item: wc.item,
|
|
162
|
+
toNpc: wc.toNpc,
|
|
163
|
+
rewardItem,
|
|
164
|
+
completionMessage: wc.completionMessage,
|
|
165
|
+
payout: wc.payout
|
|
166
|
+
});
|
|
82
167
|
}
|
|
83
168
|
// Step 5: Add Puzzles
|
|
84
169
|
const puzzleFactory = new PuzzleFactory();
|
|
170
|
+
const puzzleMap = new Map();
|
|
85
171
|
for (const puzzleJson of json.puzzles ?? []) {
|
|
86
172
|
const puzzle = await puzzleFactory.createPuzzleFromJson(puzzleJson, itemMap);
|
|
87
|
-
|
|
173
|
+
puzzleMap.set(puzzle.name, puzzle);
|
|
174
|
+
// A door-guarding puzzle (see exits[].puzzle below) has no "room" of
|
|
175
|
+
// its own -- it belongs to the connection between two rooms, not
|
|
176
|
+
// either one.
|
|
177
|
+
if (puzzleJson.room) {
|
|
178
|
+
scene.addPuzzleToRoom(puzzle, puzzleJson.room);
|
|
179
|
+
}
|
|
180
|
+
if (useAi) {
|
|
181
|
+
await puzzle.ensureAIRiddle(sceneContext, puzzleJson.room);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// Step 5.1: Wire puzzle prerequisites, now that every puzzle in the
|
|
185
|
+
// scene exists -- a puzzle's requiresPuzzle may point at one created
|
|
186
|
+
// later in the array above, so this has to be a separate pass.
|
|
187
|
+
for (const puzzleJson of json.puzzles ?? []) {
|
|
188
|
+
if (!puzzleJson.requiresPuzzle)
|
|
189
|
+
continue;
|
|
190
|
+
const puzzle = puzzleMap.get(puzzleJson.name);
|
|
191
|
+
const prerequisite = puzzleMap.get(puzzleJson.requiresPuzzle);
|
|
192
|
+
if (!prerequisite) {
|
|
193
|
+
throw new Error(`Puzzle "${puzzleJson.name}" requires puzzle "${puzzleJson.requiresPuzzle}", which doesn't exist in this scene.`);
|
|
194
|
+
}
|
|
195
|
+
if (puzzle === prerequisite) {
|
|
196
|
+
throw new Error(`Puzzle "${puzzleJson.name}" cannot require itself.`);
|
|
197
|
+
}
|
|
198
|
+
puzzle.setRequiresPuzzle(prerequisite, puzzleJson.lockedMessage);
|
|
199
|
+
}
|
|
200
|
+
// Step 5.2: Wire door-guarding puzzles onto their exits, now that every
|
|
201
|
+
// puzzle exists -- a puzzle referenced by "exits[].puzzle" may be
|
|
202
|
+
// defined anywhere in "puzzles[]", built above in this same pass.
|
|
203
|
+
for (const roomJson of json.rooms) {
|
|
204
|
+
for (const exit of roomJson.exits ?? []) {
|
|
205
|
+
if (!exit.puzzle)
|
|
206
|
+
continue;
|
|
207
|
+
const puzzle = puzzleMap.get(exit.puzzle);
|
|
208
|
+
if (!puzzle) {
|
|
209
|
+
throw new Error(`Exit from "${roomJson.name}" to "${exit.targetRoom}" references puzzle "${exit.puzzle}", which doesn't exist in this scene.`);
|
|
210
|
+
}
|
|
211
|
+
const sourceRoom = scene.getRoom(roomJson.name);
|
|
212
|
+
const doorExit = sourceRoom?.getExit(exit.direction.toLowerCase());
|
|
213
|
+
if (doorExit instanceof Door) {
|
|
214
|
+
doorExit.attachPuzzle(puzzle);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
88
217
|
}
|
|
89
|
-
// // Step 6: Sync AI descriptions for all rooms
|
|
90
|
-
// const sceneContext = `
|
|
91
|
-
// Scene: ${scene.name}
|
|
92
|
-
// Currency: ${json.currency.type}
|
|
93
|
-
// Residence Tiers: ${json.residenceTiers.join(', ')}
|
|
94
|
-
// Key Locations: ${json.rooms.map(r => r.name).join(', ')}
|
|
95
|
-
// `;
|
|
96
|
-
//
|
|
97
|
-
// for (const room of Object.values(scene.getRooms())) {
|
|
98
|
-
// await room.ensureAIDescription(sceneContext);
|
|
99
|
-
// }
|
|
100
218
|
// Step 7: Assign ownership to rooms and items
|
|
101
219
|
logger.write(`Assigning Ownership`);
|
|
102
220
|
for (const roomJson of json.rooms) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-factory.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/factories/scene-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAI3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"scene-factory.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/factories/scene-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAI3C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAGhD,MAAM,OAAO,gBAAgB;IAC3B;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAoB,EAAE,MAAc,EAAE,KAAc,EAAE,kBAAkB,GAAG,IAAI;QAC7G,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QAEpC,+DAA+D;QAC/D,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;YACtB,MAAM;YACN,QAAQ,EAAE;gBACR,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;gBACxB,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB;aACnD;YACD,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAC;QAEH,iEAAiE;QACjE,6DAA6D;QAC7D,uCAAuC;QACvC,MAAM,YAAY,GAAG;SAChB,IAAI,CAAC,IAAI;SACT,IAAI,CAAC,KAAK;YACP,IAAI,CAAC,QAAQ,CAAC,IAAI;mBACX,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;iBAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CACtD,CAAC,IAAI,EAAE,CAAC;QAGL,sDAAsD;QACtD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC/B,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;QACtC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAC5D,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,+CAA+C;YACpE,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,qCAAqC;QACrC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC7B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAClC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;gBACxC,IAAI,CAAC;oBACH,KAAK,CAAC,YAAY,CAChB,QAAQ,CAAC,IAAI,EACb,IAAI,CAAC,SAAS,CAAC,WAAW,EAAe,EACzC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,WAAW,CAAC,gCAAgC;qBAClD,CAAC;gBACJ,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,IAAI,KAAK,CACb,gCAAgC,QAAQ,CAAC,IAAI,SAAS,IAAI,CAAC,UAAU,UAAU,IAAI,CAAC,SAAS,MAAM,GAAG,CAAC,OAAO,EAAE,CACjH,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5B,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;QACzC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACxD,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAClF,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YACpC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACpB,KAAK,CAAC,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAE9D,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;YAClB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,GAAG,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgB,CAAC;QAExC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAE7B,6BAA6B;YAC7B,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACpB,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,CAAC,MAAM,sBAAsB,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;gBAC5F,CAAC;gBACD,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;iBAAM,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACzB,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC3C,WAAW;gBACX,qFAAqF;YACrF,CAAC;QACH,CAAC;QAED,wEAAwE;QACxE,6DAA6D;QAC7D,uEAAuE;QACvE,+DAA+D;QAC/D,kEAAkE;QAClE,uEAAuE;QACvE,oEAAoE;QACpE,mDAAmD;QACnD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAS;YACvC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,YAAY;YAC5D,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM;YAC3E,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM;SACvF,CAAC,CAAC;QACH,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBACpD,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACxC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;QAED,uEAAuE;QACvE,6DAA6D;QAC7D,IAAI,kBAAkB,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,uCAAuC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACxE,KAAK,MAAM,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;gBAC/D,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;gBACpE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,gDAAgD;gBAC9E,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;gBACzB,MAAM,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,+BAA+B,IAAI,CAAC,MAAM,CAAC,IAAI,oCAAoC,CAAC,CAAC;QACpG,CAAC;QAED,0EAA0E;QAC1E,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;YAE7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,kCAAkC,EAAE,CAAC,IAAI,6BAA6B,CAAC,CAAC;YAC1F,CAAC;YACD,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACvB,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;oBACd,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;gBACjE,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9B,MAAM,IAAI,KAAK,CAAC,iCAAiC,EAAE,CAAC,KAAK,4BAA4B,CAAC,CAAC;gBACzF,CAAC;YACH,CAAC;YAED,IAAI,UAA4B,CAAC;YACjC,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;gBAClB,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;gBACxC,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,MAAM,IAAI,KAAK,CAAC,8BAA8B,EAAE,CAAC,UAAU,sBAAsB,CAAC,CAAC;gBACrF,CAAC;YACH,CAAC;YAED,KAAK,CAAC,eAAe,CAAC;gBACpB,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,KAAK,EAAE,EAAE,CAAC,KAAK;gBACf,UAAU;gBACV,iBAAiB,EAAE,EAAE,CAAC,iBAAiB;gBACvC,MAAM,EAAE,EAAE,CAAC,MAAM;aAClB,CAAC,CAAC;QACL,CAAC;QAED,sBAAsB;QACtB,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;QAE5C,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC7E,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACnC,qEAAqE;YACrE,iEAAiE;YACjE,cAAc;YACd,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;gBACpB,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;YACjD,CAAC;YACD,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,oEAAoE;QACpE,qEAAqE;QACrE,+DAA+D;QAC/D,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC,UAAU,CAAC,cAAc;gBAAE,SAAS;YAEzC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YAE9D,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,CAAC,IAAI,sBAAsB,UAAU,CAAC,cAAc,uCAAuC,CAAC,CAAC;YACpI,CAAC;YACD,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,CAAC,IAAI,0BAA0B,CAAC,CAAC;YACxE,CAAC;YAED,MAAO,CAAC,iBAAiB,CAAC,YAAY,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;QACpE,CAAC;QAED,wEAAwE;QACxE,kEAAkE;QAClE,kEAAkE;QAClE,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAClC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,MAAM;oBAAE,SAAS;gBAE3B,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,IAAI,KAAK,CAAC,cAAc,QAAQ,CAAC,IAAI,SAAS,IAAI,CAAC,UAAU,wBAAwB,IAAI,CAAC,MAAM,uCAAuC,CAAC,CAAC;gBACjJ,CAAC;gBAED,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAChD,MAAM,QAAQ,GAAG,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAe,CAAC,CAAC;gBAChF,IAAI,QAAQ,YAAY,IAAI,EAAE,CAAC;oBAC7B,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC;QAED,8CAA8C;QAC9C,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAEpC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,IAAI,6BAA6B,CAAC,CAAC;gBAC1F,CAAC;gBACD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;gBAC5B,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,mBAAmB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACxC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACxC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,IAAI,6BAA6B,CAAC,CAAC;gBAC1F,CAAC;gBACD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;gBAC5B,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,mBAAmB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAGD,+BAA+B;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { Player } from '../models/player.js';
|
|
2
|
+
import { ISceneSeedJson } from '../types/seed/scene-seed.js';
|
|
3
|
+
export { FIXER_NAME } from './scene-chunks.js';
|
|
4
|
+
export declare class SceneSeedGenerator {
|
|
5
|
+
/** Fresh-skeleton pipeline attempts (structural faults promote to a new one). */
|
|
6
|
+
private static readonly maxPipelineAttempts;
|
|
7
|
+
/** Per-pipeline chunk repairs before demanding a fresh skeleton. */
|
|
8
|
+
private static readonly maxRepairRounds;
|
|
9
|
+
/** Attempts per individual AI call (skeleton or one detail chunk). */
|
|
10
|
+
private static readonly maxCallAttempts;
|
|
11
|
+
private static readonly SKELETON_TOKENS;
|
|
12
|
+
private static readonly ROOMS_TOKENS;
|
|
13
|
+
private static readonly NPCS_TOKENS;
|
|
14
|
+
private static readonly PUZZLES_TOKENS;
|
|
15
|
+
private static readonly ITEMS_TOKENS;
|
|
16
|
+
/**
|
|
17
|
+
* CHUNKED generation (see scene-chunks.ts for the shapes and prompts):
|
|
18
|
+
* one compact SKELETON pass fixes the scene's whole structure -- every
|
|
19
|
+
* cross-reference the validators check -- then small detail passes flesh
|
|
20
|
+
* out rooms, NPCs, puzzles, and items (items last: clue items bake in
|
|
21
|
+
* the puzzle passphrases). The assembled scene runs through the same
|
|
22
|
+
* validators as ever; a failure regenerates only the chunk responsible
|
|
23
|
+
* (classifyRepair) instead of throwing the whole scene away.
|
|
24
|
+
*
|
|
25
|
+
* `tier` scales scope and stakes; `previousFixerName` keeps the same
|
|
26
|
+
* job-giver identity across "continue"; `player` becomes the dossier
|
|
27
|
+
* that tailors the job to the runner's archetype and toolkit.
|
|
28
|
+
*/
|
|
29
|
+
static generate(logFilePath: string, tier?: number, previousFixerName?: string, player?: Player): Promise<ISceneSeedJson | null>;
|
|
30
|
+
/** The skeleton pass: structure only, fast-validated before any detail pass builds on it. */
|
|
31
|
+
private static requestSkeleton;
|
|
32
|
+
/** One detail chunk: prompt -> JSON, with one retry feeding the parse error back. */
|
|
33
|
+
private static requestChunk;
|
|
34
|
+
/**
|
|
35
|
+
* Rooms, NPCs, and puzzles are independent given the skeleton -- they
|
|
36
|
+
* run in parallel. Items runs after puzzles: each clue item's "details"
|
|
37
|
+
* must contain its puzzle's exact passphrase.
|
|
38
|
+
*/
|
|
39
|
+
private static requestAllDetails;
|
|
40
|
+
/**
|
|
41
|
+
* Saves a validated scene alongside that session's game log (same
|
|
42
|
+
* directory as `logFilePath`) so a run can be inspected or replayed later
|
|
43
|
+
* -- AI-generated scenes previously only existed in memory for the
|
|
44
|
+
* process that generated them.
|
|
45
|
+
*/
|
|
46
|
+
private static saveSeedToDisk;
|
|
47
|
+
/**
|
|
48
|
+
* Runs the candidate through the exact same synthesis pipeline a real
|
|
49
|
+
* session would use, purely to surface referential-integrity errors
|
|
50
|
+
* (missing room/item/npc names) before committing to it. Discards the
|
|
51
|
+
* resulting Scene either way -- the real session re-synthesizes fresh
|
|
52
|
+
* (with AI flavor enabled) once this seed is handed off.
|
|
53
|
+
*/
|
|
54
|
+
private static dryRunValidate;
|
|
55
|
+
/**
|
|
56
|
+
* The one structural guarantee every other check assumes: every room,
|
|
57
|
+
* NPC, and item actually has a real, non-blank "name". Nothing about the
|
|
58
|
+
* JSON shape stops a model from emitting `"name": ""` or omitting the
|
|
59
|
+
* field outright, and synthesis doesn't validate it either -- it just
|
|
60
|
+
* uses whatever's there as a map key and crashes with an opaque error the
|
|
61
|
+
* moment something tries to look it up.
|
|
62
|
+
*/
|
|
63
|
+
private static validateBasicStructure;
|
|
64
|
+
/**
|
|
65
|
+
* A puzzle must belong to exactly one place: a room (via "puzzles[].room")
|
|
66
|
+
* or a door (via some "exits[].puzzle" naming it) -- see DOORS AS PUZZLES.
|
|
67
|
+
* Synthesis itself doesn't catch either failure mode: an orphaned puzzle
|
|
68
|
+
* (neither) silently never appears anywhere in the world, and a
|
|
69
|
+
* double-placed one (both) would exist as two disconnected instances of
|
|
70
|
+
* "the same" barrier -- solvable in the room without ever needing to open
|
|
71
|
+
* the door, or vice versa.
|
|
72
|
+
*/
|
|
73
|
+
private static validatePuzzlePlacement;
|
|
74
|
+
/**
|
|
75
|
+
* The schema says a reward item must have neither "room" nor "heldBy" --
|
|
76
|
+
* solving the puzzle (or completing the win condition) is what's supposed
|
|
77
|
+
* to bring it into existence for the player -- but nothing ever actually
|
|
78
|
+
* enforced that. Found via a real session where a puzzle's rewardItem was
|
|
79
|
+
* ALSO "heldBy" the very NPC guarding it: solving the puzzle granted a
|
|
80
|
+
* second, phantom copy of the item while the NPC's own real one stayed
|
|
81
|
+
* put (and later dropped normally when killed) -- so the player ended up
|
|
82
|
+
* with two disconnected copies of "the same" item, and the NPC's own
|
|
83
|
+
* dialogue reflected the same confused premise (accusing the player of
|
|
84
|
+
* theft for solving a puzzle it had just dared them to solve).
|
|
85
|
+
*/
|
|
86
|
+
private static validateRewardItemPlacement;
|
|
87
|
+
/**
|
|
88
|
+
* Maps every item that has a concrete location (room, or heldBy an NPC
|
|
89
|
+
* whose startLocation gives it one) to that room's name. Shared by the
|
|
90
|
+
* reachability BFS and the win-condition checks below.
|
|
91
|
+
*/
|
|
92
|
+
private static buildItemLocationMap;
|
|
93
|
+
/**
|
|
94
|
+
* Lock-and-key reachability BFS from the start room: a room becomes
|
|
95
|
+
* reachable once some already-reachable room has an unlocked exit to it,
|
|
96
|
+
* or a locked exit whose key has already been found in a reachable
|
|
97
|
+
* location. Rooms marked "reachable: false" are excluded from this
|
|
98
|
+
* traversal on purpose -- see validateDoorKeys.
|
|
99
|
+
*/
|
|
100
|
+
private static computeReachableRooms;
|
|
101
|
+
/**
|
|
102
|
+
* Synthesis itself doesn't catch a locked door whose "keyRequired" names
|
|
103
|
+
* an item that doesn't exist, or one that's placed somewhere only
|
|
104
|
+
* reachable by first passing through that same door -- both leave the
|
|
105
|
+
* player permanently stuck with no way to unlock it (the real bug this
|
|
106
|
+
* guards against, found via a real session where a player was stonewalled
|
|
107
|
+
* behind a locked door for an entire play session). Also enforces the
|
|
108
|
+
* "reachable: false" contract (used for a fixer's inaccessible hideout,
|
|
109
|
+
* say): such a room must never connect to a normally-reachable one, in
|
|
110
|
+
* either direction, and nothing the player needs to retrieve may live
|
|
111
|
+
* inside one.
|
|
112
|
+
*/
|
|
113
|
+
private static validateDoorKeys;
|
|
114
|
+
/**
|
|
115
|
+
* requiresPuzzle references are structurally valid JSON either way (a
|
|
116
|
+
* bad name or a cycle won't make synthesis itself throw), so this walks
|
|
117
|
+
* each puzzle's prerequisite chain looking for a reference to a puzzle
|
|
118
|
+
* that doesn't exist or a cycle. Chains of any length are fine -- only
|
|
119
|
+
* missing references and cycles are rejected.
|
|
120
|
+
*/
|
|
121
|
+
private static validatePuzzleChain;
|
|
122
|
+
/**
|
|
123
|
+
* Every AI-generated scene must have a completable win condition -- this
|
|
124
|
+
* is what the "continue into a new job" loop hooks into. Also guards
|
|
125
|
+
* against a win condition item that's already sitting in the target
|
|
126
|
+
* NPC's own inventory, which would make the "find and deliver it"
|
|
127
|
+
* premise nonsensical.
|
|
128
|
+
*/
|
|
129
|
+
private static validateWinCondition;
|
|
130
|
+
/**
|
|
131
|
+
* bypassType is a closed enum the engine indexes into (puzzle.ts
|
|
132
|
+
* BYPASS_FLAVOR) -- an unvalidated value used to reach a live session
|
|
133
|
+
* and crash every "search" in that puzzle's room (the model emitted
|
|
134
|
+
* "con" for a social barrier before that type existed). The lookups are
|
|
135
|
+
* defensive now, but a bad value would still mean a barrier whose
|
|
136
|
+
* bypass route silently doesn't exist -- reject it with the exact
|
|
137
|
+
* allowed list instead.
|
|
138
|
+
*/
|
|
139
|
+
private static validateBypassTypes;
|
|
140
|
+
/**
|
|
141
|
+
* Mechanical teeth behind the dossier's "never duplicate their gear"
|
|
142
|
+
* rule: the prompt guidance alone was violated on its very first outing
|
|
143
|
+
* (an Adept's startingItems included "Weapon Focus Katana" verbatim, and
|
|
144
|
+
* the player watched the duplicate bounce off their occupied weapon
|
|
145
|
+
* slot). Rejects any startingItem whose name matches something the
|
|
146
|
+
* dossier player already carries or wears.
|
|
147
|
+
*/
|
|
148
|
+
private static validateStartingItems;
|
|
149
|
+
/**
|
|
150
|
+
* A matrix-plane win-condition item must sit in a hasNode room with an
|
|
151
|
+
* ice NPC guarding it -- otherwise the whole run is a free walk: jack
|
|
152
|
+
* in, ride the grid (physical locks don't gate personas), take the
|
|
153
|
+
* file, done. Found via a real session that completed exactly that way
|
|
154
|
+
* with zero resistance. Hand-in-hand with the host-vault mechanic
|
|
155
|
+
* (matrix items stay sealed until the host is cracked -- see hack.ts /
|
|
156
|
+
* take.ts), this guarantees a datarun always has teeth.
|
|
157
|
+
*/
|
|
158
|
+
private static validateMatrixDefense;
|
|
159
|
+
/**
|
|
160
|
+
* Enforces the "always some way to find the solution" guarantee: every
|
|
161
|
+
* puzzle must have a discoverable clue, placed in a different room. None
|
|
162
|
+
* of this is caught by synthesis (a puzzle with no clue, or an empty one,
|
|
163
|
+
* is still structurally valid), so it's checked separately and treated
|
|
164
|
+
* the same as any other validation failure -- it triggers a retry.
|
|
165
|
+
*
|
|
166
|
+
* Two patterns both count. Found via a real generation that kept getting
|
|
167
|
+
* rejected despite being genuinely solvable: a riddle whose answer is a
|
|
168
|
+
* real item's own name (e.g. "obsidian keycard", matching an actual item
|
|
169
|
+
* called "Obsidian Keycard" sitting in another room) needs no separate
|
|
170
|
+
* documentation -- finding it and seeing its name on screen already
|
|
171
|
+
* reveals the answer. A Book clue is still required for anything else.
|
|
172
|
+
*/
|
|
173
|
+
private static validateClueItems;
|
|
174
|
+
}
|