@polycode-projects/the-mechanical-code-talker 2.7.25 → 2.8.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/data/sprites/adventurer-icon.toml +13 -0
- package/data/sprites/animal-icon.toml +15 -0
- package/data/sprites/butler-icon.toml +16 -0
- package/data/sprites/cabinet-icon.toml +13 -0
- package/data/sprites/container-icon.toml +12 -0
- package/data/sprites/{cook.toml → cook-icon.toml} +8 -1
- package/data/sprites/desk-icon.toml +14 -0
- package/data/sprites/dog-icon.toml +17 -0
- package/data/sprites/dog-with-colour-icon.toml +31 -0
- package/data/sprites/egg-icon.toml +9 -0
- package/data/sprites/fly-icon.toml +19 -0
- package/data/sprites/furniture-icon.toml +12 -0
- package/data/sprites/gardener-icon.toml +11 -0
- package/data/sprites/housekeeper-icon.toml +14 -0
- package/data/sprites/key-icon.toml +12 -0
- package/data/sprites/lamp-icon.toml +11 -0
- package/data/sprites/letter-icon.toml +11 -0
- package/data/sprites/person-icon.toml +10 -0
- package/data/sprites/poodle-icon.toml +22 -0
- package/data/sprites/portable-icon.toml +12 -0
- package/data/sprites/portrait-icon.toml +12 -0
- package/data/sprites/room-icon.toml +11 -0
- package/data/sprites/spider-icon.toml +21 -0
- package/package.json +4 -2
- package/src/adapters/corpus/sprite-large-template-files.mjs +62 -0
- package/src/domain/sprite-materials.mjs +73 -0
- package/src/domain/sprite-size.mjs +34 -0
- package/src/domain/sprite-templates.mjs +106 -15
- package/src/domain/svg-instance-ids.mjs +40 -0
- package/src/services/adventure-viz.mjs +266 -36
- package/src/surfaces/web/adventure-browser-entry.mjs +38 -12
- package/data/sprites/adventurer.toml +0 -5
- package/data/sprites/animal.toml +0 -6
- package/data/sprites/butler.toml +0 -8
- package/data/sprites/cabinet.toml +0 -5
- package/data/sprites/container.toml +0 -5
- package/data/sprites/desk.toml +0 -4
- package/data/sprites/dog-with-colour.toml +0 -20
- package/data/sprites/dog.toml +0 -5
- package/data/sprites/egg.toml +0 -4
- package/data/sprites/fly.toml +0 -5
- package/data/sprites/furniture.toml +0 -5
- package/data/sprites/gardener.toml +0 -4
- package/data/sprites/housekeeper.toml +0 -6
- package/data/sprites/key.toml +0 -5
- package/data/sprites/lamp.toml +0 -4
- package/data/sprites/letter.toml +0 -5
- package/data/sprites/person.toml +0 -4
- package/data/sprites/poodle.toml +0 -5
- package/data/sprites/portable.toml +0 -6
- package/data/sprites/portrait.toml +0 -5
- package/data/sprites/room.toml +0 -5
- package/data/sprites/spider.toml +0 -5
|
@@ -36,7 +36,7 @@ import {
|
|
|
36
36
|
import { parseEntities } from "../../domain/codegraph.mjs";
|
|
37
37
|
import { loadLexicon } from "../../domain/grammar/lexicon.mjs";
|
|
38
38
|
import { foldWorldState, worldDigestRows, roomAffordances } from "../../services/adventure.mjs";
|
|
39
|
-
import { runAdventureAutoplayTick } from "../../services/adventure-autoplay.mjs";
|
|
39
|
+
import { runAdventureAutoplayTick, exposedFacts } from "../../services/adventure-autoplay.mjs";
|
|
40
40
|
import { resolveSpriteForClass, SPRITE_REGISTRY } from "../../domain/sprite-map.mjs";
|
|
41
41
|
import { resolveSpriteAsset } from "../../domain/sprite-templates.mjs";
|
|
42
42
|
|
|
@@ -59,10 +59,26 @@ export async function createAdventureSession(worldPayload) {
|
|
|
59
59
|
|
|
60
60
|
const planHolder = { state: { adventure: { world: worldPayload.name } } };
|
|
61
61
|
const sessionId = globalThis.crypto?.randomUUID?.() ?? String(Date.now());
|
|
62
|
-
|
|
62
|
+
// visitedRoomIds is the ONE exposure set both `turn()` and `autoplayTick()`
|
|
63
|
+
// grow — a deliberate merge, not two separate histories. Both entry points
|
|
64
|
+
// move the SAME player through the SAME shared memoryDir: `here` is always
|
|
65
|
+
// read fresh off the live fact store (state.placements.get("player")), not
|
|
66
|
+
// off whichever path last ran, so by the time either call finishes, the
|
|
67
|
+
// room the player is standing in is genuinely known to a visitor looking
|
|
68
|
+
// at the page regardless of which control moved them there. Keeping two
|
|
69
|
+
// separate sets would make the map/goal panels UNDER-report a room a
|
|
70
|
+
// visitor plainly just walked autoplay through (or vice versa) — a false
|
|
71
|
+
// conservatism, not real honesty, since nothing about the OTHER path's
|
|
72
|
+
// moves is hidden from this same session. runAdventureAutoplayTick's own
|
|
73
|
+
// returned `exposedRoomIds` already folds forward whatever it was handed,
|
|
74
|
+
// so feeding it this merged set on every tick, and folding its result back
|
|
75
|
+
// into the same variable, is enough: manual moves feed autoplay's own
|
|
76
|
+
// reasoning, autoplay's moves feed the panels, with no separate
|
|
77
|
+
// bookkeeping either way.
|
|
78
|
+
let visitedRoomIds = new Set();
|
|
63
79
|
const openingRows = readFactRows(await loadMemory(memoryDir));
|
|
64
80
|
const openingHere = foldWorldState(openingRows).placements.get("player")?.object ?? null;
|
|
65
|
-
if (openingHere)
|
|
81
|
+
if (openingHere) visitedRoomIds = new Set([openingHere]);
|
|
66
82
|
|
|
67
83
|
const graph = parseEntities({ individuals: [], objectProperties: [] });
|
|
68
84
|
const lexicon = loadLexicon();
|
|
@@ -78,16 +94,18 @@ export async function createAdventureSession(worldPayload) {
|
|
|
78
94
|
* `{ turn, goal, plan, done, stalled }` unmodified. */
|
|
79
95
|
async autoplayTick() {
|
|
80
96
|
const result = await runAdventureAutoplayTick(memoryDir, {
|
|
81
|
-
exposedRoomIds, planHolder, sessionId, env: {},
|
|
97
|
+
exposedRoomIds: visitedRoomIds, planHolder, sessionId, env: {},
|
|
82
98
|
});
|
|
83
|
-
|
|
99
|
+
visitedRoomIds = result.exposedRoomIds;
|
|
84
100
|
return result;
|
|
85
101
|
},
|
|
86
102
|
|
|
87
103
|
/** One dispatched chat turn — the SAME runTurn the CLI and every other
|
|
88
104
|
* viz page's own chat dock run, over this session's own memoryDir. A
|
|
89
105
|
* throwing runTurn must never kill the session — the page has no other
|
|
90
|
-
* chance to show this turn's answer.
|
|
106
|
+
* chance to show this turn's answer. Grows `visitedRoomIds` with the
|
|
107
|
+
* player's post-turn room (a no-op add when the command didn't move
|
|
108
|
+
* anyone) — the manual-play half of the merged exposure set. */
|
|
91
109
|
async turn(line) {
|
|
92
110
|
let result;
|
|
93
111
|
try {
|
|
@@ -102,25 +120,33 @@ export async function createAdventureSession(worldPayload) {
|
|
|
102
120
|
focus = result.focus;
|
|
103
121
|
last = result.last;
|
|
104
122
|
if ("planState" in result) planHolder.state = result.planState;
|
|
123
|
+
const here = foldWorldState(readFactRows(await loadMemory(memoryDir))).placements.get("player")?.object ?? null;
|
|
124
|
+
if (here) visitedRoomIds.add(here);
|
|
105
125
|
return { answer: result.answer, end: Boolean(result.end), record: result.record ?? null, plan: result.plan ?? null };
|
|
106
126
|
},
|
|
107
127
|
|
|
108
128
|
/** A read-only fold of the current room — no engine advance — for the
|
|
109
129
|
* page's own redraw after boot, after every tick, and after every
|
|
110
|
-
* manual chat turn.
|
|
130
|
+
* manual chat turn. `visitedRoomIds` travels as a plain array (the same
|
|
131
|
+
* merged exposure set `turn()`/`autoplayTick()` both grow) so the
|
|
132
|
+
* carrying/map/goal panels can read it without holding a live
|
|
133
|
+
* reference into this closure's own Set. */
|
|
111
134
|
async snapshot() {
|
|
112
135
|
const rows = readFactRows(await loadMemory(memoryDir));
|
|
113
136
|
const state = foldWorldState(rows);
|
|
114
137
|
const here = state.placements.get("player")?.object ?? null;
|
|
115
|
-
return { rows, state, here, turn: state.turnCount };
|
|
138
|
+
return { rows, state, here, turn: state.turnCount, visitedRoomIds: [...visitedRoomIds] };
|
|
116
139
|
},
|
|
117
140
|
};
|
|
118
141
|
}
|
|
119
142
|
|
|
120
143
|
// Re-exported so the page's own rendering script (adventure-viz.mjs) never
|
|
121
|
-
// has to duplicate sprite resolution, the digest reader,
|
|
122
|
-
// affordances the chat dock's own pills read from
|
|
123
|
-
//
|
|
144
|
+
// has to duplicate sprite resolution, the digest reader, the room
|
|
145
|
+
// affordances the chat dock's own pills read from, or (foldWorldState,
|
|
146
|
+
// exposedFacts) the exposure-filtered fold the goal-status panel mirrors —
|
|
147
|
+
// the same posture spider-fly-browser-entry.mjs's own
|
|
148
|
+
// globalThis.tmctSpiderFly re-export takes.
|
|
124
149
|
globalThis.tmctAdventure = {
|
|
125
|
-
createAdventureSession, resolveSpriteForClass, SPRITE_REGISTRY, resolveSpriteAsset,
|
|
150
|
+
createAdventureSession, resolveSpriteForClass, SPRITE_REGISTRY, resolveSpriteAsset,
|
|
151
|
+
worldDigestRows, roomAffordances, foldWorldState, exposedFacts,
|
|
126
152
|
};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
# adventurer — the player's own sprite: the person silhouette plus a
|
|
2
|
-
# strap-and-satchel, so the one individual the player controls always
|
|
3
|
-
# reads as visually distinct from the room's own cast of NPCs.
|
|
4
|
-
classes = ["adventurer"]
|
|
5
|
-
svg = """<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="6.6" r="3.3" fill="currentColor"/><path d="M6 21 C6 15.3 8.7 12.8 12 12.8 C15.3 12.8 18 15.3 18 21 Z" fill="currentColor"/><path d="M8.4 13.4 L17 17.6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" opacity="0.85"/><rect x="14.6" y="15.8" width="5" height="4.6" rx="1" fill="currentColor" opacity="0.6"/><rect x="16.3" y="16.6" width="1.6" height="1.2" rx="0.3" fill="currentColor" opacity="0.9"/></svg>"""
|
package/data/sprites/animal.toml
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
# animal — the deliberately plainest shape in the set: an unadorned
|
|
2
|
-
# four-legged blob, so an unregistered species reads as "some animal"
|
|
3
|
-
# rather than suggesting one the taxonomy never named. The declared root
|
|
4
|
-
# fallback for the spider-and-fly world.
|
|
5
|
-
classes = ["animal"]
|
|
6
|
-
svg = """<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="12" cy="13" rx="7" ry="4.4" fill="currentColor"/><circle cx="12" cy="7" r="3.4" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="7" y1="17" x2="7" y2="21"/><line x1="17" y1="17" x2="17" y2="21"/></g></svg>"""
|
package/data/sprites/butler.toml
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
# butler — Ashcombe Hall's own butler: the person silhouette plus a stiff
|
|
2
|
-
# wing-collar flaring OUT past the shoulder line (changing the outer
|
|
3
|
-
# silhouette, not an internal opacity knockout — an internal light-on-dark
|
|
4
|
-
# accent was tried first and proved invisible once shrunk to 44px; a
|
|
5
|
-
# silhouette change survives shrinking the way gardener.toml's wide brim
|
|
6
|
-
# does) and a bow-tie.
|
|
7
|
-
classes = ["butler"]
|
|
8
|
-
svg = """<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="6.6" r="3.3" fill="currentColor"/><path d="M6 21 C6 15.3 8.7 12.8 12 12.8 C15.3 12.8 18 15.3 18 21 Z" fill="currentColor"/><path d="M7.6 11.6 L11.3 13.2 L8.6 15.4 Z" fill="currentColor"/><path d="M16.4 11.6 L12.7 13.2 L15.4 15.4 Z" fill="currentColor"/><path d="M10.6 14.2 L12 16.1 L13.4 14.2 L12 18.6 Z" fill="currentColor" opacity="0.95"/></svg>"""
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
# cabinet — Ashcombe Hall's own locked cabinet (a container): a two-door
|
|
2
|
-
# wardrobe silhouette, the gap between the doors reading as the seam, with
|
|
3
|
-
# two knobs and a cornice band.
|
|
4
|
-
classes = ["cabinet"]
|
|
5
|
-
svg = """<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="4.5" y="2.5" width="7.2" height="19" rx="1" fill="currentColor"/><rect x="12.3" y="2.5" width="7.2" height="19" rx="1" fill="currentColor"/><rect x="4.5" y="2.5" width="15" height="1.4" fill="currentColor" opacity="0.4"/><circle cx="10.6" cy="12" r="0.9" fill="currentColor" opacity="0.35"/><circle cx="13.4" cy="12" r="0.9" fill="currentColor" opacity="0.35"/></svg>"""
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
# container — the generic fallback for any container with no sprite of
|
|
2
|
-
# its own (see cabinet/portrait for Ashcombe Hall's own two): a solid
|
|
3
|
-
# chest silhouette with a carved lid-seam and a latch highlight.
|
|
4
|
-
classes = ["container"]
|
|
5
|
-
svg = """<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M3 10 L5 5 H19 L21 10 Z" fill="currentColor"/><rect x="3" y="10" width="18" height="10" rx="1.2" fill="currentColor"/><rect x="3" y="10" width="18" height="1.6" fill="currentColor" opacity="0.35"/><rect x="10.6" y="9.2" width="2.8" height="2.6" rx="0.5" fill="currentColor" opacity="0.85"/></svg>"""
|
package/data/sprites/desk.toml
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
# desk — Ashcombe Hall's own study desk: a tabletop bar over two drawer
|
|
2
|
-
# blocks with pull-knobs, on tapered legs.
|
|
3
|
-
classes = ["desk"]
|
|
4
|
-
svg = """<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="7" width="18" height="2.6" rx="0.6" fill="currentColor"/><rect x="4.4" y="9.6" width="6.6" height="5.6" rx="0.6" fill="currentColor" opacity="0.85"/><rect x="13" y="9.6" width="6.6" height="5.6" rx="0.6" fill="currentColor" opacity="0.85"/><circle cx="9.6" cy="12.4" r="0.55" fill="currentColor" opacity="0.4"/><circle cx="16.4" cy="12.4" r="0.55" fill="currentColor" opacity="0.4"/><path d="M4.6 15.2 L3.8 20.5 L5.6 20.5 L6.2 15.2 Z" fill="currentColor"/><path d="M17.8 15.2 L17.2 20.5 L19 20.5 L18.2 15.2 Z" fill="currentColor"/></svg>"""
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# dog-with-colour — the parameterized-property worked example
|
|
2
|
-
# (PLAN target: "a dog that is black"). Same silhouette as dog.toml, but
|
|
3
|
-
# every filled shape takes its color from the instance's OWN observed
|
|
4
|
-
# mgx:hasProperty value rather than the page's currentColor accent, with a
|
|
5
|
-
# thin currentColor stroke kept on each shape so a light value (white)
|
|
6
|
-
# still reads against a light card background. A property value with no
|
|
7
|
-
# entry in [parameters.colour.values] is not a match for this template at
|
|
8
|
-
# all (see sprite-templates.mjs's own header for the naming/specificity
|
|
9
|
-
# convention) — it falls through to the plain dog.toml sprite, never a
|
|
10
|
-
# guessed color.
|
|
11
|
-
classes = ["dog"]
|
|
12
|
-
svg = """<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="13" cy="15" rx="6.4" ry="4.3" fill="{{FILL}}" stroke="currentColor" stroke-width="0.9"/><circle cx="7" cy="9" r="3.6" fill="{{FILL}}" stroke="currentColor" stroke-width="0.9"/><path d="M4.5 6.5 L2 3 L6 5 Z" fill="{{FILL}}" stroke="currentColor" stroke-width="0.9"/><path d="M19 13 C22 12 22.5 15 20 16 Z" fill="{{FILL}}" stroke="currentColor" stroke-width="0.9"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="9" y1="19" x2="9" y2="22"/><line x1="17" y1="19" x2="17" y2="22"/></g></svg>"""
|
|
13
|
-
|
|
14
|
-
[parameters.colour]
|
|
15
|
-
property = "mgx:hasProperty"
|
|
16
|
-
placeholder = "{{FILL}}"
|
|
17
|
-
|
|
18
|
-
[parameters.colour.values]
|
|
19
|
-
black = "#22201d"
|
|
20
|
-
white = "#f5f2ea"
|
package/data/sprites/dog.toml
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
# dog — the plain-class sprite a taxonomy hop away from poodle/sheepdog.
|
|
2
|
-
# Same body language as poodle's, without the pompom cut, so the family
|
|
3
|
-
# reads as one dog rather than two unrelated animals.
|
|
4
|
-
classes = ["dog"]
|
|
5
|
-
svg = """<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="13" cy="15" rx="6.4" ry="4.3" fill="currentColor"/><circle cx="7" cy="9" r="3.6" fill="currentColor"/><ellipse cx="6.1" cy="8" rx="1" ry="1.3" fill="currentColor" opacity="0.3"/><path d="M4.5 6.5 L2 3 L6 5 Z" fill="currentColor"/><path d="M19 13 C22 12 22.5 15 20 16 Z" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="9" y1="19" x2="9" y2="22"/><line x1="17" y1="19" x2="17" y2="22"/></g></svg>"""
|
package/data/sprites/egg.toml
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
# egg — the spider-and-fly board's laid egg. The plain shell silhouette
|
|
2
|
-
# plus one small carved highlight.
|
|
3
|
-
classes = ["egg"]
|
|
4
|
-
svg = """<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 2 C7 2 4 10 4 15.5 C4 20 7.6 22 12 22 C16.4 22 20 20 20 15.5 C20 10 17 2 12 2 Z" fill="currentColor"/><ellipse cx="9.6" cy="9.5" rx="1.7" ry="2.4" fill="currentColor" opacity="0.28"/></svg>"""
|
package/data/sprites/fly.toml
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
# fly — the spider-and-fly board's other agent. A round head, a tapered
|
|
2
|
-
# body with a carved highlight, translucent wings, and two thin trailing
|
|
3
|
-
# legs for a touch of character at rest.
|
|
4
|
-
classes = ["fly"]
|
|
5
|
-
svg = """<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="12" cy="13.6" rx="3.4" ry="5.2" fill="currentColor"/><circle cx="12" cy="7" r="2.7" fill="currentColor"/><ellipse cx="11.1" cy="12" rx="1.1" ry="1.7" fill="currentColor" opacity="0.3"/><g fill="currentColor" opacity="0.55"><path d="M9 10 C3 6 2 4 3 2 C6 2 9 6 10.5 10 Z"/><path d="M15 10 C21 6 22 4 21 2 C18 2 15 6 13.5 10 Z"/></g><g stroke="currentColor" stroke-width="1" stroke-linecap="round"><path d="M9.6 17 L7.4 19.4"/><path d="M14.4 17 L16.6 19.4"/></g></svg>"""
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
# furniture — the generic fallback for any furniture piece with no sprite
|
|
2
|
-
# of its own: a solid console-table silhouette (tapered legs, a carved
|
|
3
|
-
# highlight along the top edge), replacing the old hollow-shelf outline.
|
|
4
|
-
classes = ["furniture"]
|
|
5
|
-
svg = """<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="3.5" y="6.5" width="17" height="3.2" rx="0.8" fill="currentColor"/><rect x="3.5" y="6.5" width="17" height="1" fill="currentColor" opacity="0.35"/><path d="M5.6 9.7 L4.6 20 L6.7 20 L7.2 9.7 Z" fill="currentColor"/><path d="M18.4 9.7 L16.8 20 L18.9 20 L19.4 9.7 Z" fill="currentColor"/></svg>"""
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
# gardener — Ashcombe Hall's own gardener: the person silhouette under a
|
|
2
|
-
# wide sunhat brim.
|
|
3
|
-
classes = ["gardener"]
|
|
4
|
-
svg = """<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="12" cy="5.6" rx="7.4" ry="2" fill="currentColor"/><path d="M8.8 5.2 C8.8 3.1 10.2 1.6 12 1.6 C13.8 1.6 15.2 3.1 15.2 5.2 C15.2 5.6 15.1 6 15 6.3 L9 6.3 C8.9 6 8.8 5.6 8.8 5.2 Z" fill="currentColor" opacity="0.85"/><circle cx="12" cy="8.6" r="3.1" fill="currentColor"/><path d="M6 21 C6 15.5 8.7 13.1 12 13.1 C15.3 13.1 18 15.5 18 21 Z" fill="currentColor"/></svg>"""
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
# housekeeper — Ashcombe Hall's own housekeeper: the person silhouette
|
|
2
|
-
# under a wide mob-cap brim (deliberately WIDER than the head, the same
|
|
3
|
-
# "wide silhouette reads at 44px" move gardener.toml's sunhat uses) and a
|
|
4
|
-
# tied apron line.
|
|
5
|
-
classes = ["housekeeper"]
|
|
6
|
-
svg = """<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="12" cy="4.6" rx="5.6" ry="2.1" fill="currentColor"/><path d="M8.6 5 C8.6 3 10 1.7 12 1.7 C14 1.7 15.4 3 15.4 5 L15.4 5.6 L8.6 5.6 Z" fill="currentColor" opacity="0.9"/><circle cx="12" cy="7.6" r="3.1" fill="currentColor"/><path d="M6 21 C6 15.5 8.7 13.1 12 13.1 C15.3 13.1 18 15.5 18 21 Z" fill="currentColor"/><path d="M9 16 C10 15.4 14 15.4 15 16" fill="none" stroke="currentColor" stroke-width="1" opacity="0.45" stroke-linecap="round"/></svg>"""
|
package/data/sprites/key.toml
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
# key — Ashcombe Hall's own key (hidden in the portrait, unlocks the
|
|
2
|
-
# cabinet): a classic round-bow skeleton key, bold strokes so it stays
|
|
3
|
-
# legible at a 44px render.
|
|
4
|
-
classes = ["key"]
|
|
5
|
-
svg = """<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="7" cy="9" r="4.4" fill="none" stroke="currentColor" stroke-width="2.4"/><path d="M10.4 12 L19.5 21.1" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"/><path d="M16.4 17.1 L18.6 14.9" stroke="currentColor" stroke-width="2" stroke-linecap="round"/><path d="M18.6 19.3 L20.6 17.3" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>"""
|
package/data/sprites/lamp.toml
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
# lamp — Ashcombe Hall's own study lamp: a Victorian hurricane-lamp
|
|
2
|
-
# silhouette — base, glass globe, a neck, and a small carved flame.
|
|
3
|
-
classes = ["lamp"]
|
|
4
|
-
svg = """<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M9 21 H15 L14 18 H10 Z" fill="currentColor"/><path d="M8.4 18 C7 15.6 7 12.6 8.6 10.4 H15.4 C17 12.6 17 15.6 15.6 18 Z" fill="currentColor"/><rect x="10.6" y="6.4" width="2.8" height="4.4" fill="currentColor" opacity="0.85"/><path d="M12 3.2 C13.4 4.6 13.8 6 12 7.4 C10.2 6 10.6 4.6 12 3.2 Z" fill="currentColor" opacity="0.55"/></svg>"""
|
package/data/sprites/letter.toml
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
# letter — Ashcombe Hall's own objective (hidden in the cabinet): an
|
|
2
|
-
# envelope with a folded flap (a lighter overlay, the same carved-highlight
|
|
3
|
-
# trick as the lid on container.toml) and a small wax seal.
|
|
4
|
-
classes = ["letter"]
|
|
5
|
-
svg = """<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="6" width="18" height="13" rx="1.2" fill="currentColor"/><path d="M3 6 L21 6 L21 6.8 L12 13.8 L3 6.8 Z" fill="currentColor" opacity="0.32"/><circle cx="12" cy="12.4" r="1.15" fill="currentColor" opacity="0.8"/></svg>"""
|
package/data/sprites/person.toml
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
# person — the generic fallback for anyone with no NPC sprite of their own
|
|
2
|
-
# (see butler/housekeeper/cook/gardener for the named Ashcombe Hall staff).
|
|
3
|
-
classes = ["person"]
|
|
4
|
-
svg = """<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="6.6" r="3.3" fill="currentColor"/><path d="M6 21 C6 15.3 8.7 12.8 12 12.8 C15.3 12.8 18 15.3 18 21 Z" fill="currentColor"/><path d="M12 12.8 C13.1 12.8 14.1 13 15 13.4" fill="none" stroke="currentColor" stroke-width="0.9" opacity="0.4" stroke-linecap="round"/></svg>"""
|
package/data/sprites/poodle.toml
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
# poodle — the seed taxonomy's worked example (poodle IsA dog): its own
|
|
2
|
-
# pompom-cut head and tail, distinct from the plain dog sprite it would
|
|
3
|
-
# otherwise fall back to.
|
|
4
|
-
classes = ["poodle"]
|
|
5
|
-
svg = """<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="13" cy="15" rx="6.4" ry="4.6" fill="currentColor"/><ellipse cx="10.8" cy="13.2" rx="1.8" ry="1.3" fill="currentColor" opacity="0.28"/><circle cx="7" cy="8.5" r="4" fill="currentColor"/><g fill="currentColor"><circle cx="4" cy="6" r="1.6"/><circle cx="7" cy="4.2" r="1.7"/><circle cx="10" cy="6" r="1.6"/></g><rect x="18.5" y="14" width="2.2" height="6" rx="1.1" fill="currentColor"/><circle cx="19.6" cy="13" r="1.5" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="9" y1="19.5" x2="9" y2="22"/><line x1="17" y1="19.5" x2="17" y2="22"/></g></svg>"""
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
# portable — the generic fallback for any carryable object with no sprite
|
|
2
|
-
# of its own: a drawstring parcel silhouette, replacing the old
|
|
3
|
-
# generic-gift-box outline so it reads as "an unspecified small thing"
|
|
4
|
-
# rather than a gift.
|
|
5
|
-
classes = ["portable"]
|
|
6
|
-
svg = """<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 6 C7.5 6 5 9.4 5 13.4 C5 17.7 8.1 20 12 20 C15.9 20 19 17.7 19 13.4 C19 9.4 16.5 6 12 6 Z" fill="currentColor"/><path d="M9.4 6.4 C9.9 4.6 10.8 3.4 12 3.4 C13.2 3.4 14.1 4.6 14.6 6.4" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/><ellipse cx="9.8" cy="11.6" rx="1.6" ry="2.1" fill="currentColor" opacity="0.28"/></svg>"""
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
# portrait — Ashcombe Hall's own drawing-room portrait (a container, hiding
|
|
2
|
-
# the key): a gilt arched frame around a lighter canvas, with a bust
|
|
3
|
-
# silhouette so it reads as a picture of someone, not an empty frame.
|
|
4
|
-
classes = ["portrait"]
|
|
5
|
-
svg = """<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 21 V7 C4 4 6.8 2 12 2 C17.2 2 20 4 20 7 V21 Z" fill="currentColor"/><path d="M6.3 19.4 V8.3 C6.3 6.2 8.4 4.8 12 4.8 C15.6 4.8 17.7 6.2 17.7 8.3 V19.4 Z" fill="currentColor" opacity="0.28"/><circle cx="12" cy="10.4" r="2.3" fill="currentColor" opacity="0.7"/><path d="M8 18.4 C8 15.2 9.6 13.4 12 13.4 C14.4 13.4 16 15.2 16 18.4 Z" fill="currentColor" opacity="0.7"/></svg>"""
|
package/data/sprites/room.toml
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
# room — a schematic floor plan: a washed interior (a solid tint, not a
|
|
2
|
-
# hollow box) plus a doorway arch, kept abstract since a room is a space
|
|
3
|
-
# to draw, not an object to render literally.
|
|
4
|
-
classes = ["room"]
|
|
5
|
-
svg = """<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="1" fill="currentColor" opacity="0.14"/><rect x="3" y="3" width="18" height="18" rx="1" fill="none" stroke="currentColor" stroke-width="1.6"/><path d="M9 21 L9 13 A3 3 0 0 1 15 13 L15 21" fill="none" stroke="currentColor" stroke-width="1.6"/></svg>"""
|
package/data/sprites/spider.toml
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
# spider — the spider-and-fly board's own agent. A confident two-lobe body
|
|
2
|
-
# (a lighter carved patch on the abdomen for shading) and eight thin
|
|
3
|
-
# outward legs.
|
|
4
|
-
classes = ["spider"]
|
|
5
|
-
svg = """<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="12" cy="16" rx="5.2" ry="4.8" fill="currentColor"/><ellipse cx="10.3" cy="14.3" rx="1.8" ry="1.4" fill="currentColor" opacity="0.3"/><circle cx="12" cy="9.6" r="3.2" fill="currentColor"/><g stroke="currentColor" stroke-width="1.1" fill="none" stroke-linecap="round"><path d="M9.4 8 L2.2 4.4"/><path d="M9 10.2 L1.4 9.4"/><path d="M9.2 12.6 L2 14.2"/><path d="M10 15.4 L3.4 19"/><path d="M14.6 8 L21.8 4.4"/><path d="M15 10.2 L22.6 9.4"/><path d="M14.8 12.6 L22 14.2"/><path d="M14 15.4 L20.6 19"/></g></svg>"""
|