@rpgm-tools/neo-angband-mod-sdk 1.21.0 → 1.22.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/dist/capabilities.d.ts +6 -0
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +17 -0
- package/dist/capabilities.js.map +1 -1
- package/dist/loader.d.ts +3 -1
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +7 -5
- package/dist/loader.js.map +1 -1
- package/dist/project.d.ts.map +1 -1
- package/dist/project.js +6 -5
- package/dist/project.js.map +1 -1
- package/dist/record-key.d.ts +22 -7
- package/dist/record-key.d.ts.map +1 -1
- package/dist/record-key.js +19 -7
- package/dist/record-key.js.map +1 -1
- package/docs/AUTHORING.md +2 -1
- package/docs/MOD_COMPATIBILITY.md +1 -1
- package/docs/MOD_REACH.md +6 -6
- package/docs/MOD_SEAMS.md +74 -11
- package/docs/PLUGINS.md +9 -1
- package/docs/README.md +1 -1
- package/package.json +1 -1
- package/src/capabilities.ts +19 -1
- package/src/loader.ts +7 -5
- package/src/project.ts +6 -5
- package/src/record-key.ts +27 -7
package/dist/capabilities.d.ts
CHANGED
|
@@ -328,6 +328,12 @@ export type ParsedCapability = {
|
|
|
328
328
|
} | {
|
|
329
329
|
kind: "profiles";
|
|
330
330
|
action: "manage";
|
|
331
|
+
} | {
|
|
332
|
+
kind: "session";
|
|
333
|
+
action: "control";
|
|
334
|
+
} | {
|
|
335
|
+
kind: "shared";
|
|
336
|
+
action: "read" | "publish";
|
|
331
337
|
};
|
|
332
338
|
/**
|
|
333
339
|
* Parse and validate a capability string against the vocabulary above,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8PG;AAEH,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAE5D,qBAAa,eAAgB,SAAQ,KAAK;CAAG;AAE7C,2DAA2D;AAC3D,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,KAAK,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,KAAK,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"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"}
|
package/dist/capabilities.js
CHANGED
|
@@ -352,6 +352,19 @@ export function parseCapability(cap) {
|
|
|
352
352
|
return { kind: "title", action: "add" };
|
|
353
353
|
if (cap === "profiles:manage")
|
|
354
354
|
return { kind: "profiles", action: "manage" };
|
|
355
|
+
/* "session:control": save the game, leave it for the title screen, or quit, the
|
|
356
|
+
* same three acts the game menu offers. Its own kind so `saves:manage` (the
|
|
357
|
+
* roster) does not carry it: managing characters and ending this one are two
|
|
358
|
+
* different things to agree to. */
|
|
359
|
+
if (cap === "session:control")
|
|
360
|
+
return { kind: "session", action: "control" };
|
|
361
|
+
/* "shared:read" and "shared:publish": read the named JSON values other mods
|
|
362
|
+
* publish through `ctx.shared`, or publish this mod's own. Two actions so the
|
|
363
|
+
* Mods screen can show both sides of the exchange, and compared exactly, so
|
|
364
|
+
* neither grant carries the other. */
|
|
365
|
+
if (cap === "shared:read" || cap === "shared:publish") {
|
|
366
|
+
return { kind: "shared", action: cap === "shared:read" ? "read" : "publish" };
|
|
367
|
+
}
|
|
355
368
|
/* NOT a registry domain, deliberately. A registry:* grant means "override
|
|
356
369
|
* one named game system among many"; this one means "everything the player
|
|
357
370
|
* sees of the dungeon is drawn by this mod." It is the display OWNER, so it
|
|
@@ -500,6 +513,10 @@ function grantCovers(grant, request) {
|
|
|
500
513
|
return grant.kind === "title";
|
|
501
514
|
case "profiles":
|
|
502
515
|
return grant.kind === "profiles";
|
|
516
|
+
case "session":
|
|
517
|
+
return grant.kind === "session";
|
|
518
|
+
case "shared":
|
|
519
|
+
return grant.kind === "shared" && grant.action === request.action;
|
|
503
520
|
case "event":
|
|
504
521
|
return grant.kind === "event" && grant.name === request.name;
|
|
505
522
|
case "state":
|
package/dist/capabilities.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"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"}
|
package/dist/loader.d.ts
CHANGED
|
@@ -36,7 +36,9 @@
|
|
|
36
36
|
* The identity those files really use was already declared in record-key.ts and
|
|
37
37
|
* already proved unique over the shipped pack; recordsComposable now asks it.
|
|
38
38
|
* What is left in phase 2 is `constants` and `visuals` (config singletons, where
|
|
39
|
-
* whole-file IS the meaning) and `history` (
|
|
39
|
+
* whole-file IS the meaning) and `history` (keyed by chart and roll since
|
|
40
|
+
* 2026-10-03, but its record order is what a chart's rolls mean, so a pack's
|
|
41
|
+
* records still replace the file and only the per-record ops use the key).
|
|
40
42
|
*
|
|
41
43
|
* NOTHING IS DROPPED IN SILENCE. This is the invariant the whole file exists to
|
|
42
44
|
* hold. Until 2026-07-29 phase 2 did not exist: a `patches` / `replaces` /
|
package/dist/loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqFG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAWlD,OAAO,KAAK,EAAmB,gBAAgB,EAA2B,MAAM,cAAc,CAAC;AAG/F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AASjD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CACzC;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,GAAG,EAAE,MAAM,CAAC;CACb;AAED,0EAA0E;AAC1E,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACnC,uEAAuE;IACvE,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,iFAAiF;IACjF,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;;OAIG;IACH,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB;;;;;;OAMG;IACH,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC;;;;;;;;;;;;;;OAcG;IACH,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAqED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;CACxE;AAuSD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,OAAO,GAAE,cAAmB,GAC3B,eAAe,CAgLjB;AAED,4DAA4D;AAC5D,MAAM,WAAW,WAAW;IAC1B,qBAAqB;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,OAAO,GAAE,cAAmB,GAC3B;IACD,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;CAC1C,CAwCA"}
|
package/dist/loader.js
CHANGED
|
@@ -36,7 +36,9 @@
|
|
|
36
36
|
* The identity those files really use was already declared in record-key.ts and
|
|
37
37
|
* already proved unique over the shipped pack; recordsComposable now asks it.
|
|
38
38
|
* What is left in phase 2 is `constants` and `visuals` (config singletons, where
|
|
39
|
-
* whole-file IS the meaning) and `history` (
|
|
39
|
+
* whole-file IS the meaning) and `history` (keyed by chart and roll since
|
|
40
|
+
* 2026-10-03, but its record order is what a chart's rolls mean, so a pack's
|
|
41
|
+
* records still replace the file and only the per-record ops use the key).
|
|
40
42
|
*
|
|
41
43
|
* NOTHING IS DROPPED IN SILENCE. This is the invariant the whole file exists to
|
|
42
44
|
* hold. Until 2026-07-29 phase 2 did not exist: a `patches` / `replaces` /
|
|
@@ -134,7 +136,7 @@ function isNamedRecord(r) {
|
|
|
134
136
|
*/
|
|
135
137
|
function recordsComposable(file, records) {
|
|
136
138
|
const spec = keySpecFor(file);
|
|
137
|
-
if (spec.kind === "singleton")
|
|
139
|
+
if (spec.kind === "singleton" || spec.wholeFile === true)
|
|
138
140
|
return false;
|
|
139
141
|
const claimants = new Map();
|
|
140
142
|
const keysOf = [];
|
|
@@ -218,8 +220,8 @@ function applyPassthroughOps(file, records, ordered, providerId, baseId, refused
|
|
|
218
220
|
const hasOps = ordered.some((p) => p.files[file] !== undefined && perRecordOps(p.files[file]).length > 0);
|
|
219
221
|
if (!hasOps)
|
|
220
222
|
return unmodified();
|
|
221
|
-
/* No declared identity (
|
|
222
|
-
*
|
|
223
|
+
/* No declared identity (a mod-only file with no `name` and no entry in
|
|
224
|
+
* record-key.ts). Every op is reported and none is applied - the one honest
|
|
223
225
|
* answer, because inventing a key here would mis-merge instead of dropping. */
|
|
224
226
|
if (RECORD_KEY_SPECS[file] === undefined && !recordsKeyedByName(records)) {
|
|
225
227
|
for (const pack of ordered) {
|
|
@@ -444,7 +446,7 @@ export function composeContentPacks(packs, options = {}) {
|
|
|
444
446
|
if (providerId !== "") {
|
|
445
447
|
/* Whole-file replacement is destructive and used to be invisible: the
|
|
446
448
|
* previous provider's records simply vanished. Say so. */
|
|
447
|
-
refused.refuse(p.manifest.id, `${f} replaces the whole file, discarding ${out[f].length} record(s) from ${providerId} - ${f} records
|
|
449
|
+
refused.refuse(p.manifest.id, `${f} replaces the whole file, discarding ${out[f].length} record(s) from ${providerId} - ${f} records cannot be added one at a time, so a whole file is the only thing that can be added to it`);
|
|
448
450
|
}
|
|
449
451
|
out[f] = [...contrib.records];
|
|
450
452
|
providerId = p.manifest.id;
|
package/dist/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
|
package/dist/project.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,8CAA8C;AAC9C,MAAM,WAAW,WAAW;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,iFAAiF;AACjF,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,sCAAsC;IACtC,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IACvC,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC/C,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC;;;;;;;;;OASG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC,CAAC,CAAC;IACjE;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,UAAU;;IAQrB,2DAA2D;gBAC/C,QAAQ,EAAE,OAAO;IAK7B,uEAAuE;IACvE,IAAI,EAAE,IAAI,MAAM,CAEf;IAED;;;;;;OAMG;IACH,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAKpC,0EAA0E;IAC1E,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI7B,mCAAmC;IACnC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAOjD,4DAA4D;IAC5D,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI;IAOrE,oDAAoD;IACpD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAO5D,yCAAyC;IACzC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAKvC,qEAAqE;IACrE,QAAQ,IAAI,YAAY;IAMxB,uEAAuE;IACvE,MAAM,IAAI,UAAU;IAcpB;;;OAGG;IACH,IAAI,IAAI,WAAW,EAAE;IAgBrB;;;;;;;;OAQG;IACH,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,YAAY;
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,8CAA8C;AAC9C,MAAM,WAAW,WAAW;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,iFAAiF;AACjF,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,sCAAsC;IACtC,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IACvC,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC/C,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC;;;;;;;;;OASG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC,CAAC,CAAC;IACjE;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,UAAU;;IAQrB,2DAA2D;gBAC/C,QAAQ,EAAE,OAAO;IAK7B,uEAAuE;IACvE,IAAI,EAAE,IAAI,MAAM,CAEf;IAED;;;;;;OAMG;IACH,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAKpC,0EAA0E;IAC1E,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI7B,mCAAmC;IACnC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAOjD,4DAA4D;IAC5D,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI;IAOrE,oDAAoD;IACpD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAO5D,yCAAyC;IACzC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAKvC,qEAAqE;IACrE,QAAQ,IAAI,YAAY;IAMxB,uEAAuE;IACvE,MAAM,IAAI,UAAU;IAcpB;;;OAGG;IACH,IAAI,IAAI,WAAW,EAAE;IAgBrB;;;;;;;;OAQG;IACH,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,YAAY;CAuGvC;AAED,wEAAwE;AACxE,wBAAgB,UAAU,CAAC,QAAQ,EAAE,OAAO,GAAG,UAAU,CAExD"}
|
package/dist/project.js
CHANGED
|
@@ -192,7 +192,7 @@ export class ModProject {
|
|
|
192
192
|
* reason. */
|
|
193
193
|
const findings = checkPacks([mine], all);
|
|
194
194
|
/* THE ONE THAT COSTS THE WHOLE GAME, PROMOTED TO AN ERROR. A file whose
|
|
195
|
-
* records
|
|
195
|
+
* records cannot be added one at a time can only be contributed WHOLE, so a mod
|
|
196
196
|
* that ships one discards whatever the previous provider put there. The
|
|
197
197
|
* loader already says so in `problems`, but a line in a list is not
|
|
198
198
|
* proportionate to replacing the base game's copy of a file, and a builder
|
|
@@ -205,7 +205,8 @@ export class ModProject {
|
|
|
205
205
|
* Since 2026-08-08 composition keys by recordRefKeys and all three merge per
|
|
206
206
|
* record, so what is left here is `constants` and `visuals` - config
|
|
207
207
|
* singletons, where "use mine" is what shipping the file MEANS - and
|
|
208
|
-
* `history`,
|
|
208
|
+
* `history`, whose records have a key for patching but whose order is
|
|
209
|
+
* what a chart's rolls mean, so a record cannot be added on its own. */
|
|
209
210
|
const mineId = this.#manifest.id;
|
|
210
211
|
for (const problem of composed.problems) {
|
|
211
212
|
if (!problem.startsWith(`${mineId}: `) || !problem.includes("replaces the whole file")) {
|
|
@@ -216,9 +217,9 @@ export class ModProject {
|
|
|
216
217
|
file: problem.slice(mineId.length + 2).split(" ")[0] ?? "(unknown)",
|
|
217
218
|
record: mineId,
|
|
218
219
|
rule: "file/whole-file-replacement",
|
|
219
|
-
message: `${problem}. Records in this file
|
|
220
|
-
"
|
|
221
|
-
"already there, rather than shipping a mod that deletes the base game's copy.",
|
|
220
|
+
message: `${problem}. Records in this file cannot be added one at a time, so ` +
|
|
221
|
+
"shipping them replaces the file: use `patchFields` or `replace` to change " +
|
|
222
|
+
"what is already there, rather than shipping a mod that deletes the base game's copy.",
|
|
222
223
|
});
|
|
223
224
|
}
|
|
224
225
|
if (core === undefined) {
|
package/dist/project.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
|
package/dist/record-key.d.ts
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* string `name`.
|
|
4
4
|
*
|
|
5
5
|
* CURRENT STATE, FIRST, BECAUSE THIS COMMENT USED TO MISLEAD. Every record file
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* is addressable per record today: 24 by a unique `name` and 20 by the explicit
|
|
7
|
+
* specs in this file. `history` was the one exception until 2026-10-03, when it
|
|
8
|
+
* gained its (chart, roll) key below. Two independent reviewers read
|
|
9
9
|
* the older wording, took the "the other 20 files do not fit it" paragraph below
|
|
10
10
|
* for the present tense, and filed the same non-existent P1 ("20 files silently
|
|
11
11
|
* discard patch/replace/remove, including object, ego_item, vault, trap, store,
|
|
@@ -98,10 +98,17 @@
|
|
|
98
98
|
* verified unique over the shipped core pack (see record-key.test.ts, which
|
|
99
99
|
* reads the real pack and fails if a declared key stops being unique).
|
|
100
100
|
*
|
|
101
|
-
* `history`
|
|
102
|
-
* `{chart:{chart,next,roll}, phrase}` and
|
|
103
|
-
*
|
|
104
|
-
*
|
|
101
|
+
* `history` was absent until 2026-10-03, on the reasoning that a record is
|
|
102
|
+
* `{chart:{chart,next,roll}, phrase}` and a mod could change any part of it.
|
|
103
|
+
* That left history.txt's phrases the one piece of gamedata no content patch
|
|
104
|
+
* could correct. The identity upstream itself uses is (chart, roll): get_history
|
|
105
|
+
* walks one chart's entries and takes the first whose cumulative `roll` reaches
|
|
106
|
+
* the die, so a roll threshold appears once per chart (a repeat could never be
|
|
107
|
+
* chosen), and `chart` is the node every `next` link names. Neither is the
|
|
108
|
+
* phrase or the link, which are what a correction or a rewiring changes. The key
|
|
109
|
+
* is declared `wholeFile`, because a chart's meaning is its records' ORDER: an
|
|
110
|
+
* added record appended after core's would sit past the roll-100 entry where
|
|
111
|
+
* get_history can never reach it.
|
|
105
112
|
*
|
|
106
113
|
* AMBIGUITY IS NAMED, NEVER GUESSED. A key that two records in the same file
|
|
107
114
|
* claim (object's 5 pairs, ego_item's 25) makes that one ref unaddressable; the
|
|
@@ -135,6 +142,14 @@ export type RecordKeySpec = {
|
|
|
135
142
|
* stringified: a JSON blob in a ref is not something an author can type.
|
|
136
143
|
*/
|
|
137
144
|
readonly discriminator?: readonly string[];
|
|
145
|
+
/**
|
|
146
|
+
* The records keep whole-file semantics even though each has a key: a
|
|
147
|
+
* pack's `records` still replace the file, and only the per-record ops
|
|
148
|
+
* (patch, replace, fieldPatch, remove) use the key. For a file whose
|
|
149
|
+
* record ORDER carries meaning, where composition appending a new record
|
|
150
|
+
* at the end would change what the file says.
|
|
151
|
+
*/
|
|
152
|
+
readonly wholeFile?: true;
|
|
138
153
|
} | {
|
|
139
154
|
readonly kind: "singleton";
|
|
140
155
|
};
|
package/dist/record-key.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-key.d.ts","sourceRoot":"","sources":["../src/record-key.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"record-key.d.ts","sourceRoot":"","sources":["../src/record-key.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoHG;AAKH;;;;;;;;;;GAUG;AACH,MAAM,MAAM,aAAa,GACrB;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;CAC3B,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC;AAEnC;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAqDpE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EACV,CAAC;AAEvC,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAEtD;AA6DD;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,EACf,IAAI,GAAE,aAAgC,GACrC,MAAM,GAAG,IAAI,CAEf;AA2CD;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,EACf,IAAI,GAAE,aAAgC,GACrC,SAAS,MAAM,EAAE,CAKnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,EACf,IAAI,GAAE,aAAgC,GACrC,MAAM,GAAG,IAAI,CAIf;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASnD"}
|
package/dist/record-key.js
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* string `name`.
|
|
4
4
|
*
|
|
5
5
|
* CURRENT STATE, FIRST, BECAUSE THIS COMMENT USED TO MISLEAD. Every record file
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* is addressable per record today: 24 by a unique `name` and 20 by the explicit
|
|
7
|
+
* specs in this file. `history` was the one exception until 2026-10-03, when it
|
|
8
|
+
* gained its (chart, roll) key below. Two independent reviewers read
|
|
9
9
|
* the older wording, took the "the other 20 files do not fit it" paragraph below
|
|
10
10
|
* for the present tense, and filed the same non-existent P1 ("20 files silently
|
|
11
11
|
* discard patch/replace/remove, including object, ego_item, vault, trap, store,
|
|
@@ -98,10 +98,17 @@
|
|
|
98
98
|
* verified unique over the shipped core pack (see record-key.test.ts, which
|
|
99
99
|
* reads the real pack and fails if a declared key stops being unique).
|
|
100
100
|
*
|
|
101
|
-
* `history`
|
|
102
|
-
* `{chart:{chart,next,roll}, phrase}` and
|
|
103
|
-
*
|
|
104
|
-
*
|
|
101
|
+
* `history` was absent until 2026-10-03, on the reasoning that a record is
|
|
102
|
+
* `{chart:{chart,next,roll}, phrase}` and a mod could change any part of it.
|
|
103
|
+
* That left history.txt's phrases the one piece of gamedata no content patch
|
|
104
|
+
* could correct. The identity upstream itself uses is (chart, roll): get_history
|
|
105
|
+
* walks one chart's entries and takes the first whose cumulative `roll` reaches
|
|
106
|
+
* the die, so a roll threshold appears once per chart (a repeat could never be
|
|
107
|
+
* chosen), and `chart` is the node every `next` link names. Neither is the
|
|
108
|
+
* phrase or the link, which are what a correction or a rewiring changes. The key
|
|
109
|
+
* is declared `wholeFile`, because a chart's meaning is its records' ORDER: an
|
|
110
|
+
* added record appended after core's would sit past the roll-100 entry where
|
|
111
|
+
* get_history can never reach it.
|
|
105
112
|
*
|
|
106
113
|
* AMBIGUITY IS NAMED, NEVER GUESSED. A key that two records in the same file
|
|
107
114
|
* claim (object's 5 pairs, ego_item's 25) makes that one ref unaddressable; the
|
|
@@ -164,6 +171,11 @@ export const RECORD_KEY_SPECS = {
|
|
|
164
171
|
paths: ["name"],
|
|
165
172
|
discriminator: ["type", "item.tval"],
|
|
166
173
|
},
|
|
174
|
+
/* history: the chart a record belongs to and its cumulative roll threshold,
|
|
175
|
+
* which is how get_history (player-birth.c) picks it. `core:50--100` is
|
|
176
|
+
* "You have blue-gray eyes, ". Whole-file, because order within a chart is
|
|
177
|
+
* what the rolls mean (see the header). */
|
|
178
|
+
history: { kind: "fields", paths: ["chart.chart", "chart.roll"], wholeFile: true },
|
|
167
179
|
};
|
|
168
180
|
/**
|
|
169
181
|
* Files with a declared key spec, sorted. Exported so a test can assert the set
|
package/dist/record-key.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-key.js","sourceRoot":"","sources":["../src/record-key.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"record-key.js","sourceRoot":"","sources":["../src/record-key.ts"],"names":[],"mappings":"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"}
|
package/docs/AUTHORING.md
CHANGED
|
@@ -245,7 +245,7 @@ Until 2026-08-08 the test was "a unique `name`", and three files failed it on co
|
|
|
245
245
|
| `vault` | 162 | adds one, 163 |
|
|
246
246
|
| `store`, `flavor`, `brand`, `slay`, `object_base`, `trap`, `names`, ... | - | adds one, keyed by whatever upstream keys it by |
|
|
247
247
|
|
|
248
|
-
`constants`, `visuals` and `history` still take a whole file. `constants` and `visuals` are config singletons: the file is their identity, the host binds exactly one, and shipping `constants.json` means "use mine". `history`
|
|
248
|
+
`constants`, `visuals` and `history` still take a whole file. `constants` and `visuals` are config singletons: the file is their identity, the host binds exactly one, and shipping `constants.json` means "use mine". `history` records have refs, so a mod can patch, replace or remove a single phrase, but it cannot add a record on its own. The game walks a chart's records in file order and takes the first whose `roll` reaches the die, so a record added after core's last one would never be picked. For those three, `ModProject.build` still raises `file/whole-file-replacement` as an `error`, so an author cannot replace the base game's copy of a file without noticing.
|
|
249
249
|
|
|
250
250
|
### What a record is called
|
|
251
251
|
|
|
@@ -253,6 +253,7 @@ Refs did not change. `patchFields`, `replace` and `remove` already used the per-
|
|
|
253
253
|
|
|
254
254
|
- `object` is `type + name`, so the Dagger is `core:sword--dagger`;
|
|
255
255
|
- `ego_item` is `name`, plus a `#` discriminator where core ships a name twice, as in `core:of-acid#shot-arrow`;
|
|
256
|
+
- `history` is `chart + roll`, the numbers on the record's `chart:` line in history.txt, so `chart:50:51:100` ("You have blue-gray eyes, ") is `core:50--100`;
|
|
256
257
|
- `store` is its `STORE_*` code, `brand` and `slay` their `code`, `flavor` its base tval, and so on.
|
|
257
258
|
|
|
258
259
|
A record answers to several refs: its base key, its discriminated form, and, as an alias, the lossy slug used before 2026-08-08, so refs written against an older engine keep working. An alias is dropped where it would shadow a *different* record's real name. `*Healing*`'s old ref, for example, is plain `Healing`'s current one, and an old alias must not take a name away from another record.
|
|
@@ -200,7 +200,7 @@ Outside the guaranteed subset, `ctx.core` can change in any release; the ratchet
|
|
|
200
200
|
|
|
201
201
|
## Who finds out first
|
|
202
202
|
|
|
203
|
-
The **mod canary** (`.github/workflows/mod-canary.yml`)
|
|
203
|
+
The **mod canary** (`.github/workflows/mod-canary.yml`) checks the Recommended mods list against this build daily and whenever the list changes. Every repository in `mods/registry.json`, community mods included, is discovered the way the game discovers it, and its manifest goes through the same checks this build applies at install and load time. An engine release that would strand a listed mod shows up in the canary rather than in a player's install. It does the job of SMAPI's compatibility list automatically, and it lets a release be held back before it ships.
|
|
204
204
|
|
|
205
205
|
That covers curated mods only. A mod nobody has listed finds out the same way every mod always has, which is why the gates above degrade instead of refusing.
|
|
206
206
|
|
package/docs/MOD_REACH.md
CHANGED
|
@@ -20,13 +20,13 @@ The target is a game built for modding throughout: a mod can override code, reso
|
|
|
20
20
|
| `registry:*` capabilities with real, wired, tested code | **18** (`blow`, `command`, `effect`, `effect-info`, `glyph`, `menu`, `message`, `monster`, `profile`, `projection`, `randart`, `room`, `rune`, `store`, `tiles`, `tval`, `ui-entry`, `vocab`), and the list is `REGISTRY_CAPABILITIES` in `mod/registry-host.ts`, which is the one source the vocabulary has |
|
|
21
21
|
| Non-test callers of that registry host in a RELEASE build | **2**, both in `packages/web/src/main.ts`: `createModRegistryHost` is called for every loaded mod plugin, which is the disk path |
|
|
22
22
|
| Gamedata record files a mod can contribute to | **44** of upstream's 45 |
|
|
23
|
-
| ...of those, addressable PER RECORD (patch / replace / remove) | **
|
|
24
|
-
| ...whole-file-replacement only | **
|
|
23
|
+
| ...of those, addressable PER RECORD (patch / replace / remove) | **44** of 44: 24 by a unique `name`, 20 by a declared key (`record-key.ts`); since 2026-08-08 the same key also decides what a record ADDED to those files is called |
|
|
24
|
+
| ...whole-file-replacement only | **0** since 2026-10-03, was 1: `history` is keyed by chart and roll (`core:50--100`) |
|
|
25
25
|
| Individual records of the shipped pack that NO ref can name | **0**, was 73 before 2026-08-08, 61 of them in `ego_item` |
|
|
26
26
|
| A mod can ADD a field core has never heard of, and read it at runtime | **YES** (2026-08-08): on **15** bound record types, not 2; was silently dropped by every binder before |
|
|
27
27
|
| ...bound record types that carry a mod's own fields | **15** of the 44 files; the other 29 have no bound counterpart a plugin can hold, or bind into a structure keyed by something other than the record; `mod/extension.test.ts` lists them by name |
|
|
28
28
|
| A mod's added field is NAMESPACED and DECLARED, so two mods cannot collide | **YES** (2026-08-08): `"gore:bleed"`, declared in the manifest under `fields`; undeclared is stripped and reported |
|
|
29
|
-
| Gamedata record files a mod can ADD a record to without replacing the file | **41** of 44 (2026-08-08), was 24. `object` (375 records), `ego_item` (107) and `vault` (162) joined the other 38 when composition stopped keying on `slugify(name)` and started keying on `recordRefKeys`. The 3 left are `constants` and `visuals` (config singletons, where whole-file IS the meaning) and `history` (
|
|
29
|
+
| Gamedata record files a mod can ADD a record to without replacing the file | **41** of 44 (2026-08-08), was 24. `object` (375 records), `ego_item` (107) and `vault` (162) joined the other 38 when composition stopped keying on `slugify(name)` and started keying on `recordRefKeys`. The 3 left are `constants` and `visuals` (config singletons, where whole-file IS the meaning) and `history` (keyed by chart and roll, but a chart's record order decides which phrase a roll picks). `ModProject.build` raises a whole-file replacement as an `error` rather than a line in a list |
|
|
30
30
|
| An author is TOLD what a new record needs, and what core's comparable records do | **YES** (2026-08-08): `draftRecord` / `checkRecords` / `ModProject`, measured from core's 3,279 records; **37** declared reference edges, each run over the shipped pack (`docs/modding/AUTHORING.md`) |
|
|
31
31
|
| Resource categories a non-bundled mod can supply or override | **7** of 7 (2026-08-09) - tiles (gap 8), then sounds, fonts, pref files, help pages and art (gap 7), then UI strings, which needed an i18n layer to be supplied INTO before the field could honestly exist (gap 14) |
|
|
32
32
|
|
|
@@ -64,7 +64,7 @@ Game behaviour living in `switch` statements with nothing to register into is no
|
|
|
64
64
|
| `messageText` | `packages/web/src/main.ts` (host, not core) | Restate message text | What a message MEANS - restating only, by contract |
|
|
65
65
|
| `screenText` | `packages/web/src/overlay.ts` (host, not core): screens shown through `showTextScreen`, and the row-0 prompt functions | Restate help-page lines, table cells, legends, titles, footers and prompts, matched by screen id, part and row | What the text means; art blocks; menus, which have their own `ui:menu.replace` seam; text drawn by other means than those two paths |
|
|
66
66
|
| `characterBackground` | `packages/web/src/screens.ts` (host, not core): the character sheet, birth screen and character dump | Restate the whole background paragraph before it is wrapped | The stored `player.history` or the save |
|
|
67
|
-
| `objectInfoText` | `obj/object-info.ts`, `objectInfo` | Restate each fragment of an item description | What the item does or what the player knows about it |
|
|
67
|
+
| `objectInfoText` | `obj/object-info.ts`, `objectInfo` | Restate each fragment of an item description, given the section that wrote it, the item's tval, and its kind as the player knows it (the flavour until the kind is learned) | What the item does or what the player knows about it |
|
|
68
68
|
| `effectIntro` | `obj/object-info.ts`, `describeEffect` | Restate the introduction to an effect description, given whether the effect is known, the item class and whether it is aimed or activated | The effect description that follows the introduction |
|
|
69
69
|
| `optionsChanged` | the options pages, through `GameState.modHooks` | Observe the option state after a change. Folded `all-observe`: every mod's handler runs, none can veto | The option values themselves; it is notification, not interception |
|
|
70
70
|
|
|
@@ -440,7 +440,7 @@ Composition happens in two phases. A file composes per record only when every co
|
|
|
440
440
|
|
|
441
441
|
Over the shipped core pack the split is 41 composable and 3 passthrough. The "the shipped pack" test in `loader.test.ts` reads `packages/content/pack` and asserts the split by name.
|
|
442
442
|
|
|
443
|
-
Every record file composes except three, which are whole-file only for two different reasons. `constants` and `visuals` are config singletons: the file is the identity and the host binds one, so shipping the file means "use mine". `history`
|
|
443
|
+
Every record file composes except three, which are whole-file only for two different reasons. `constants` and `visuals` are config singletons: the file is the identity and the host binds one, so shipping the file means "use mine". `history` records each have a ref, their chart and roll, but the order of a chart's records decides which phrase a roll picks, so a pack's `history` records still replace the file and only the per-record ops use the ref.
|
|
444
444
|
|
|
445
445
|
Before 2026-08-08 the split was 24 and 20, because the composability test asked for a unique `name`. That one condition made `object` (375 records), `ego_item` (107) and `vault` (162) unmergeable. All three carry a `name`, and core's own data repeats names: Angband marks a greater form by reusing the name with a mark (`Acquirement` / `*Acquirement*`), and `ego_item` ships 23 names twice. A mod adding one object therefore replaced all 375, so the three files most worth adding to were the three a mod could only take over wholesale. Composition now keys by `recordRefKeys`, the identity `record-key.ts` already declared and had already shown to be unique over the shipped pack, and all three merge per record.
|
|
446
446
|
|
|
@@ -455,7 +455,7 @@ An earlier version of this paragraph said "a `patches` entry aimed at a passthro
|
|
|
455
455
|
- Whole-file `records` semantics still apply to a config singleton: a mod that ships `constants.json` means "use mine", and the host binds one. `ModProject.build` raises that as an `error`, so an author learns about replacing the base game's copy of the file up front rather than from a line in a list.
|
|
456
456
|
- Per-record ops apply on top, in load order, keyed by the per-file identity declared in `record-key.ts` (`store` by its `STORE_*` code, `object_base` by tval, `trap` by the `{name,desc}` pair, `constants` by the file). `composePacks` applies them for the 41 composable files and `applyPassthroughOps` (`loader.ts`) for the 3 passthrough ones.
|
|
457
457
|
- Duplicate slugs, which the old note correctly said nothing handled, are handled in two pieces. `keySlug` keeps the `*` and `+` that `slugify` dropped, which was all of `object`'s and `vault`'s problem and 16 of `ego_item`'s. A declared discriminator separates the names core really does repeat (`core:of-acid#shot-arrow-bolt`). Over the shipped pack, no record is left that a ref cannot name, down from 73.
|
|
458
|
-
- `history` is
|
|
458
|
+
- `history` is keyed by chart and roll (`core:50--100`) since 2026-10-03, so a mod can correct one phrase with a patch. It stays whole-file for added records, for the reason given above.
|
|
459
459
|
|
|
460
460
|
A mod can now patch a single object, ego item, vault, trap, store, brand, slay, object base, projection or constant. Where a ref is ambiguous, the refusal lists the refs that are not.
|
|
461
461
|
|
package/docs/MOD_SEAMS.md
CHANGED
|
@@ -100,7 +100,7 @@ The `Fold` column uses the code's own vocabulary. `MOD_HOOK_FOLDS` (`packages/co
|
|
|
100
100
|
| `messageText(raw)` | `chained` | `packages/web/src/main.ts` (the HOST's single message sink, not core) | `?? raw` - show what core was given, warts and all |
|
|
101
101
|
| `screenText(raw, site)` | `chained` | `packages/web/src/overlay.ts` (the HOST's `showTextScreen`, through `restateView` in `screen-view.ts`, and its row-0 prompt functions) | `?? raw` - show the screen text or prompt as built |
|
|
102
102
|
| `characterBackground(text)` | `chained` | `packages/web/src/screens.ts` (the HOST's `historyTextBlock`, which feeds the character sheet, the birth screen and the character dump) | `?? text` - show the background get_history stored |
|
|
103
|
-
| `objectInfoText(text)` | `chained` | `obj/object-info.ts` (`objectInfo`, once per fragment of the finished textblock) | `?? text` - write the fragment unchanged |
|
|
103
|
+
| `objectInfoText(text, site)` | `chained` | `obj/object-info.ts` (`objectInfo`, once per fragment of the finished textblock) | `?? text` - write the fragment unchanged |
|
|
104
104
|
| `effectIntro(intro)` | `chained` | `obj/object-info.ts` (`describeEffect`, for the unknown-effect sentence and the known-effect lead-in) | `?? intro.text` - write 4.2.6's introduction |
|
|
105
105
|
| `optionsChanged(snapshot)` | `all-observe` | `packages/web/src/options.ts` (`notifyOptionsChanged`, at the end of `runOptionsMenu`) | nothing happens; core reads no answer |
|
|
106
106
|
| `monsterBecameVisible(mon)` | `all-observe` | `game/known.ts` (`updateMon`'s "it was previously unseen" branch, reached from `updateMonsters`, `monsterSwap`, and every other `updateMon` call site) | nothing: the visibility flag was already set with no mod loaded |
|
|
@@ -128,9 +128,9 @@ Five hooks let a mod reword text that 4.2.6 writes: `messageText`, `screenText`,
|
|
|
128
128
|
|
|
129
129
|
`screenText` gets the text of any screen opened with `showTextScreen`, a help page for example, and the prompt drawn by `getString`, `getCheck` and the other row-0 prompt functions in `overlay.ts`. Each piece arrives once, when the screen opens or the prompt appears. The second argument is a `ScreenTextSite` with the screen id and the part; for a table cell it adds the column key and the rest of the row. A mod needs the row in `core:equip-cmp-select-help`, where two rows read "move selection one page up" and only the `"n, PgDn"` row is a typo. Prompts use the site `{ screen: "core:prompt", part: "prompt" }` and arrive before "[y/n] " is appended; the typing field then starts right after the reworded prompt.
|
|
130
130
|
|
|
131
|
-
`characterBackground` gets the background paragraph built from `history.txt` in one piece, before the 72-column wrap, so a phrase split across two screen lines still arrives whole.
|
|
131
|
+
`characterBackground` gets the background paragraph built from `history.txt` in one piece, before the 72-column wrap, so a phrase split across two screen lines still arrives whole. A content patch can correct a phrase too, through the history record's `core:<chart>--<roll>` ref. The two reach different characters: the patch changes the text a new character is born with, while `characterBackground` also rewords the background of a character that already exists.
|
|
132
132
|
|
|
133
|
-
`objectInfoText` gets an item description one fragment at a time, in the pieces `obj-info.c` appends, so `"Affects your stealth\n"` comes as one string. Item inspection, object recall, the character dump
|
|
133
|
+
`objectInfoText` gets an item description one fragment at a time, in the pieces `obj-info.c` appends, so `"Affects your stealth\n"` comes as one string. Its second argument, an `ObjectInfoTextSite`, says which section wrote the fragment, which item it describes and whether the player knows that item's kind. The section is `stats` for the "Affects your" lines, `effect` for everything describe_effect writes, `break` for the blank line between two sections, and so on through `ObjectInfoSection`. The item is given as its `tval`, spelled as in object.txt, and its `kind`, which holds only what the player knows. Once the player knows the kind, `kind` is its object.txt name, such as `"Cure Light Wounds"`, and `aware` is true. Until then `kind` is the flavour the player sees, such as `"Light Blue"` or a scroll's title, as the knowledge menu lists it. A section only ever arrives with a line the player can read, so a slay or curse whose rune is still unknown sends no `slays` or `curses` fragment. Item inspection, store examine, object recall, the character dump, spoiler files and a plugin's `inspectItem` all pass through it.
|
|
134
134
|
|
|
135
135
|
`effectIntro` gets the words that open an effect description, such as 4.2.6's "It can be aimed.\n" or "When activated, it ". The `EffectIntro` it receives also says whether the effect is known, the item class, whether it is aimed, and whether it comes from an activation. From those a mod can write the later upstream wording, "It requires a target." or "When used, it ". The item class is what tells a mod when to say "It may require a target.", because 4.2.6 marks every unknown wand and rod as aimed.
|
|
136
136
|
|
|
@@ -244,16 +244,22 @@ if (sim) {
|
|
|
244
244
|
sim.delta.ac; // armour class difference
|
|
245
245
|
sim.delta.maxSp; // what it costs a caster
|
|
246
246
|
sim.delta.resists; // per element, ELEM order
|
|
247
|
+
sim.delta.unknownRunes; // an item put on or taken off may have unlearned runes
|
|
247
248
|
sim.after.player.blows; // the frozen PlayerView for that loadout
|
|
248
249
|
sim.after.stats; // every field of upstream's player_state
|
|
249
250
|
}
|
|
250
251
|
```
|
|
251
252
|
|
|
252
|
-
- **It runs the
|
|
253
|
+
- **It runs the engine's own derive.** `state.derivedFor`, installed by `wireGame`, is `calc_bonuses` with `update: false` over the same options bag the live refresh uses, so the bound timed table and the curse registry come with it. That is the only source. A derive assembled by a caller would have to guess at both, and a hypothetical loadout measured with a thinner bag than the live one gives a wrong answer that looks like a right one. Where no session installed the accessor (the worldless harness), it is absent and the function returns `null`.
|
|
254
|
+
- **It counts only what the player knows.** The derive is the `known_only` pass behind the character sheet, so a resist, flag or armour bonus from a rune the player has not learned changes none of the numbers, just as it shows nowhere in the `ItemView`s. `before` and `after` both use it, and no call returns the real numbers. `delta.unknownRunes` is true when an item put on or taken off may have runes the player has not learned: it carries the `{??}` marker, or it has only been seen from a distance and has not been assessed, in which case it can turn out to have none. One flag covers the whole change without saying which item set it; `compareLoadoutSlots` gives one per slot. A mod can use it to tell the player an item may do more than its numbers rather than report a zero. The live view's `player()` reads the same known state, so it matches `before.player` in everything but `light`: in a daytime town the live derive gives no light radius and a simulated one counts the torch. Compare an `after` with its own `before`, not with `player()`.
|
|
253
255
|
- **It writes nothing**: not the state, the player, the gear or any object. `update: false` keeps `calc_bonuses`' own two faithful side effects (zeroing `TMD_FASTCAST` on a stun grade, and the town-light redraw flag) out of it. A test asserts that the live `PlayerState` object is the same object afterwards, not just an equal one.
|
|
254
|
-
- **Changes are expressed as slots and gear references, not equipment arrays.** `wield` routes each item through the engine's own `wield_slot`, so the second of a pair of rings lands in the second ring slot as it would in play. `carry` takes something into the pack, `remove` empties a slot into the pack, and `release` gives a stack up entirely, emptying its slot when the handle names worn gear. A reference is a gear handle, a shop plus a stock index for a ware (which is not in the gear and so has no handle), or a `GameObject` for a caller inside the engine. A reference that names nothing is skipped and listed in `unresolved`, so a decision ladder evaluating a hundred candidates does not fail on one stale handle.
|
|
256
|
+
- **Changes are expressed as slots and gear references, not equipment arrays.** `wield` routes each item through the engine's own `wield_slot`, so the second of a pair of rings lands in the second ring slot as it would in play. `carry` takes something into the pack, `remove` empties a slot into the pack, and `release` gives a stack up entirely, emptying its slot when the handle names worn gear. A reference is a gear handle, a shop plus a stock index for a ware (which is not in the gear and so has no handle), a grid plus a pile index for an item on the floor, or a `GameObject` for a caller inside the engine. A reference that names nothing is skipped and listed in `unresolved`, so a decision ladder evaluating a hundred candidates does not fail on one stale handle.
|
|
255
257
|
- **The answer is every derived field, not a score.** An autoplayer reduces it to one number, while a player comparing two items wants to see which resist was traded for which. A scalar serves the first and not the second, and the two should never disagree about the underlying derive, so `before`, `after` and `delta` carry every field of `player_state` plus max hitpoints, max mana, the armour encumbrance and the carried weight. `neo-angband-mod-borg` uses a fraction of it today.
|
|
256
258
|
|
|
259
|
+
An item on the floor is named as `{ from: "floor", x, y, index }`: the grid it lies on and its index in the pile there, the same numbers `inspectItem`'s floor form takes and `floorItems()` reports as `floorIndex`. The reference is a position. It names whatever lies at that index when the call runs, and only if the player remembers it on that grid, so once the pile changes a reference kept from an earlier turn can name a different object, as `inspectItem`'s floor form can. Read `floorItems()` again before reusing one. An object on a square the player has never seen, or one only sensed, lands in `unresolved` like a stale handle, and so does a grid off the map or an index that is not a whole number from zero up to the end of the pile. Wearing a floor item adds its weight to the carried total, since the character has to pick it up first. `compareLoadoutSlots` takes the same reference (section 4k).
|
|
260
|
+
|
|
261
|
+
The answer lists the pack and everything worn, so a call needs `state:inventory.read` on top of `state:player.read`, even with an empty change. A shop ware in `wield`, `wieldAt` or `carry` also needs `state:stores.read`, and a floor item needs `state:floor.read`. Without one of these the call throws `AgentCapabilityError`. `state:*.read` grants them all. A `GameObject` reference throws `AgentCapabilityError` from any view built with capabilities, `state:*.read` included, because only trusted code inside the engine holds one; a mod names the item by gear handle, shop ware or floor position instead.
|
|
262
|
+
|
|
257
263
|
The accessor lives on `AgentView`, so the `ItemView`s in the answer are built with the same `AgentViewDeps` as the live view's. That matters for correctness: an object that carried `value` in one read and not the other would change what an agent decides about the same object depending on which read produced it. The exported `simulateLoadout(state, change, opts)` is the same function, for callers inside the engine.
|
|
258
264
|
|
|
259
265
|
## 4b. `ctx.ui.openPanel` - a piece of web page above the game
|
|
@@ -394,7 +400,7 @@ if (snap && snap.phase === "play") {
|
|
|
394
400
|
|
|
395
401
|
The map cells and the agent's message buffer are not in the core capture. The map has its own bulk read, and `messages()` drains a per-decision buffer. The host snapshot adds `messages` under `state:messages.read` from the message history without draining that buffer. Its frozen entries and token can be kept across input waits. The open question is in `prompt` when `state:interaction.read` is granted.
|
|
396
402
|
|
|
397
|
-
The core capture adds `quiver`, `equipmentSlots`, and `floorHere`. The first two need `state:inventory.read`; the local floor pile needs `state:floor.read`. Each `ItemView` carries `kindKey` and `nameColor`, the colour the inventory draws its name in, given as a colour name such as `"light umber"`. `label` is the kind's raw name, such as `& Dagger
|
|
403
|
+
The core capture adds `quiver`, `equipmentSlots`, and `floorHere`. The first two need `state:inventory.read`; the local floor pile needs `state:floor.read`. Each `ItemView` carries `kindKey` and `nameColor`, the colour the inventory draws its name in, given as a colour name such as `"light umber"`. `label` is the kind's raw name, such as `& Dagger~`, or the flavour for an item the player has not identified. `name` is the name the inventory shows, such as `a Potion of Cure Light Wounds`, and `ignored` is true while the game ignores the object. A carried object's `itemKey` is `gear:<handle>`. A floor object has handle 0, a `floorIndex` for its place in the pile, and an `itemKey` of `floor:<x>,<y>:<index>`, which changes whenever the pile does. `equipmentSlots` follows body.txt slot order and names both slots of a pair. The player part reports `learnableSpells` from the current upkeep count. The spellbook rows report `studyEligible` and `infoLine` from the game's spell checks and menu info function.
|
|
398
404
|
|
|
399
405
|
## 4h. `ctx.knownLevel()` - the player's whole remembered level
|
|
400
406
|
|
|
@@ -493,11 +499,13 @@ const rules = ctx.inspect?.itemRules();
|
|
|
493
499
|
|
|
494
500
|
`inspectItem` accepts a carried or worn handle, `{ floor: { x, y, index } }`, or `{ store, index }` for a stock entry. Store stock also requires `state:stores.read`. It returns the existing title and text plus frozen `sections`: a title entry, the first object_info paragraph as a description entry, and later paragraphs as separate info entries. A store entry uses object_info's store mode, so a book on a shelf can be inspected. A floor object answers only when the player remembers that object; a grid the player has merely sensed returns null. Inspecting a floor object needs `state:inventory.read`, as a carried one does, while `floorHere` in the snapshot needs `state:floor.read`. `monsterRecall` returns existing lore under `state:monsters.read`, or null for a race the player has not seen. Neither read learns a kind or ego or creates lore.
|
|
495
501
|
|
|
502
|
+
An item result also carries `combat`, the numbers behind its Combat info lines, or null for an item that has none. `blows` is melee blows per round to the tenth the description shows. `damage` is the average damage per round for a melee weapon, or for ammunition the current launcher fires, and `thrownDamage` is the average per throw for a throwing weapon or a sling stone. Each holds `normal`, the damage against a creature no brand or slay affects; `vs`, one `{ kind, name, damage }` line per known brand or slay, highest first, in the order the description lists them; and `offWeapon`, true when other equipment or a timed effect adds a brand or slay. `multiplier` is the shooting power a launcher shows in its name, or the current launcher's for ammunition it fires. `range` is how far that ammunition reaches in feet, and `breakageChance` is the percent chance that fired ammunition breaks. `tooHeavy` is true when the character is too weak to wield the weapon well. Every value comes from the same calculation as the text and counts only what the character knows of the item. A monster recall has no `combat`. (neostryder/neo-angband#360)
|
|
503
|
+
|
|
496
504
|
`spellInfo` returns the spell's description, required level, mana cost, live failure chance, and `canCastNow` under `state:spells.read`. Low mana raises the failure chance but still permits the game's over-exertion cast path. `itemTester` lists carried, worn, quivered, and local floor references accepted by the named item command under `state:inventory.read`. Its command codes are `inspect`, `wield`, `takeoff`, `drop`, `inscribe`, `uninscribe`, `activate`, `use-staff`, `aim-wand`, `zap-rod`, `eat`, `quaff`, `read`, `refill`, `cast`, `study`, `browse`, `fire`, `throw`, `use`, and `ignore`.
|
|
497
505
|
|
|
498
506
|
`projectionPath` and `blastArea` return ordered grids under `state:map.read`. They use the game's projection geometry with remembered terrain and visible monsters. Unknown terrain is treated as open for the preview. `blastArea(to, radius, arc)` previews a ball, or the cone of a breath when `arc` gives its width in degrees. Without `arc`, it takes the arc of the effect being aimed. A blast also reports its requested `radius`, its `arc` (null for a ball), the active effect's `element` when one is being aimed, and `wallsStop`. It gives no damage estimate. While a ball or breath direction or targeting prompt is open, `ctx.snapshot().activeBlast` reports the pending effect's radius, element, and arc for a breath, under both `state:map.read` and `state:interaction.read`. Repeating these reads does not change the saved game, knowledge, turn, command queue, or RNG state.
|
|
499
507
|
|
|
500
|
-
`bookForItem(handle)` maps a carried spellbook to its class book index and spell indices under both `state:spells.read` and `state:inventory.read`. `compareLoadoutSlots
|
|
508
|
+
`bookForItem(handle)` maps a carried spellbook to its class book index and spell indices under both `state:spells.read` and `state:inventory.read`. `compareLoadoutSlots` takes a gear, store or floor reference (section 4a) and returns one `simulateLoadout` comparison for each compatible body slot, including the second ring slot when that slot can hold the item. It checks the same capabilities as `simulateLoadout` (section 4a) for the one item it is given. Each comparison counts only the runes the player knows, and its `delta.unknownRunes` marks a slot whose item may have runes the player has not learned (section 4a). A floor reference the player does not remember returns no slots. The result is token-stamped and frozen.
|
|
501
509
|
|
|
502
510
|
`travelPath` uses the travel command's `findPath` over remembered terrain and returns steps in walking order, excluding the player's grid. It returns null for an unknown or unreachable destination and while the player is confused. `tileActions` returns accepted command codes in `codes` for a remembered grid under `state:map.read`. Adjacent terrain may offer `tunnel`, `open`, `close`, `disarm`, or `walk`; the player's grid may offer `ascend`, `descend`, or `pickup`. The host accepts `ascend` and `descend` for stairs. Melee uses `walk` toward an adjacent monster because there is no separate `attack` command code. An action still needs the appropriate direction or other arguments when passed to `ctx.intent.submit()`.
|
|
503
511
|
|
|
@@ -515,6 +523,8 @@ These events contain copied coordinates and scalar values. They do not carry a l
|
|
|
515
523
|
|
|
516
524
|
`player-command` reports each command the player issues, whether it came from a key, a keymap, the mouse or a mod's `ctx.intent.submit()`. Declare `event:player-command` to receive it. The payload has the command's `code`, its `dir` and a copy of its `args`, `phase` (`play`, or `store` for an item command given inside a shop), and `token`, the input token of the wait the command answered. A `repeat` also carries `repeats`, the command it repeats. The event fires as the game loop takes the command and before it runs, so `ctx.snapshot()` in the handler still describes that wait, and a mod can compare its own choice with the player's. Commands from an installed controller, and the follow-up steps of a run or a repeat count, do not fire it. Buying and selling in a shop are store screen actions rather than commands, so they do not fire it either. A handler that throws is logged, and the command still runs. (neostryder/neo-angband#300)
|
|
517
525
|
|
|
526
|
+
`dungeonlevel` reports each arrival on a level, the town included. Declare `event:dungeonlevel` to receive it. It fires once for each level the character arrives on, by stairs, a trapdoor, Word of Recall, deep descent, teleport level or a debug jump, and on entering or leaving the single-combat arena, which Angband also handles as a level change. It also fires once for the level a session starts on, for a new character and for a loaded save alike, because Angband runs the same arrival steps for both. That first event waits until every mod's `register()` has run and the map is on screen, so a mod that subscribes in `register()` hears it. Walking, resting and redrawing the same level never fire it. The payload has `depth`, where 0 is the town; `levelId`, the value `ctx.knownLevel()` reports for that level, counting up from 0 in each session; `cause`, which is `new-game` or `load` for the session's first level and `change` after that; and `arena`, true in the arena. The event comes after the stair or recall message and before the level feeling. A handler that throws is logged, and the arrival still completes: the level feeling, the autosave and the redraw all go ahead. (neostryder/neo-angband#363)
|
|
527
|
+
|
|
518
528
|
## 4m. `ctx.saves` - the host character roster
|
|
519
529
|
|
|
520
530
|
A plugin with `saves:manage` receives `ctx.saves` at the title and during play. `list()` reads the character picker's roster in the same order. Its frozen entries contain the slot id, name, race, class, level, depth, death status and last-save time in epoch milliseconds. Every call returns `ok` or a refusal with a `reason`.
|
|
@@ -525,6 +535,8 @@ The facade uses the roster's configured storage in the browser and Electron. Its
|
|
|
525
535
|
|
|
526
536
|
`ctx.character.key()` is present with `state:player.read` while a character is attached. It returns the roster lineage, which survives saves and renames. Under `saves:manage`, `ctx.saves.onChange(listener)` receives frozen `rename` and `delete` events after the host writes the roster; each event carries the slot id and lineage key, and a rename also carries the new name. The subscription returns an unsubscribe function.
|
|
527
537
|
|
|
538
|
+
A plugin with `session:control` receives `ctx.session`, the game menu's Save, Save and exit, and Quit for a mod's own save dialog. `save()` writes the save and shows the game's "Saving game... done." message. `exitToTitle()` saves and then reloads to the title screen. `quit()` saves and then runs Ctrl-X: the game's "Press Return (or Escape)." pause, then the desktop app closes, while a browser tab goes to the title screen. Each one saves first and returns a refusal with a `reason` instead of leaving when no living character is in play or the save fails. None of them confirm, so ask the player in your own dialog first. `saves:manage` does not grant this seam. (#361)
|
|
539
|
+
|
|
528
540
|
## Player profiles and title actions
|
|
529
541
|
|
|
530
542
|
`ctx.profiles.list()` returns `ProfileResult<readonly ModProfile[]>`, where each profile has `id: string | null`, `name: string` and `active: boolean`. The default profile has a null id. `ProfileResult<T>` is `{ ok: true, value: T } | { ok: false, reason: string }`; calls without the capability throw a capability error.
|
|
@@ -593,12 +605,18 @@ Typing in a focused editable field inside the panel goes to that field through t
|
|
|
593
605
|
|
|
594
606
|
Each mod's display setters keep its own last request. The most recent live request controls the grid, camera, full map view, tile scaling, map overview, sidebar extent, map margin, or visual filter. Clearing a nullable request removes that mod's value; `setTileScaling(null)` restores the default automatic sampler and `setFullMapOverview(null)` restores the default overview when no earlier request remains. `getGrid()`, `getCamera()`, `getMapView()`, `getTileScaling()`, `getFullMapOverview()`, `getSidebarExtent()`, `getMapMargin()`, and `getVisualFilter()` report the value in force. Mod teardown removes every request from that mod and restores the next most recent request for each setter.
|
|
595
607
|
|
|
596
|
-
`controller()` may return `{ controller, nondeterministic, onDeath }` instead of a bare controller. `nondeterministic: true` marks the save nondeterministic when the controller installs, for a mod whose manifest is deterministic but whose controller this time draws on a model, a clock or the network. The manifest's own `nondeterministic` flag still marks the save when the mod is enabled. `ctx.controller.markNondeterministic()` does the same while the mod owns the keyboard, for a controller that switches to such a source after install. The mark is permanent and is saved at once. `onDeath` chooses what the character's death does while the controller holds the keyboard. The default, `reincarnate`, starts the next character in place, as the Borg does. `end` runs the ordinary death with its tombstone, score entry and `ctx.character.onRunEnd`, and leaves the controller installed until the page reloads. (neostryder/neo-angband#300)
|
|
608
|
+
`controller()` may return `{ controller, nondeterministic, onDeath, onKey }` instead of a bare controller. `nondeterministic: true` marks the save nondeterministic when the controller installs, for a mod whose manifest is deterministic but whose controller this time draws on a model, a clock or the network. The manifest's own `nondeterministic` flag still marks the save when the mod is enabled. `ctx.controller.markNondeterministic()` does the same while the mod owns the keyboard, for a controller that switches to such a source after install. The mark is permanent and is saved at once. `onDeath` chooses what the character's death does while the controller holds the keyboard. The default, `reincarnate`, starts the next character in place, as the Borg does. `end` runs the ordinary death with its tombstone, score entry and `ctx.character.onRunEnd`, and leaves the controller installed until the page reloads. (neostryder/neo-angband#300)
|
|
609
|
+
|
|
610
|
+
The install can also carry `onKey(press)`, which the host calls for each key the player presses while the controller has the keyboard and the game window has focus. `press` carries the key's DOM name and its Ctrl, Alt, Shift, Meta and repeat flags. Return `{ kind: "keep", message }` to go on driving, with `message` shown on the message line if you give one, or `{ kind: "release", reason }` to give the keyboard back with `reason` shown in place of the usual line. The key never reaches the game either way. Escape and Ctrl-Z always give the keyboard back and are not passed to `onKey`. Alt-Tab, any key held with the Windows key, an input method's keys, and a modifier or lock key pressed alone are ignored and not passed either. Answer at once and do the key's work, such as starting a different errand, before returning: a promise, a throw or any other answer gives the keyboard back and is reported as a fault in the mod. Without `onKey`, any other key gives the keyboard back. Each hand-back writes an info line to the log naming its source. (neostryder/neo-angband#334)
|
|
597
611
|
|
|
598
612
|
## 4r. Floating panel positions and recovery
|
|
599
613
|
|
|
600
614
|
The host's Subwindow setup can move a registered panel into a floating window inside the game viewport. The panel keeps the same slot, shadow root, controls, minimum size and input behavior. Its title bar can move it onto the same dock, swap and tab drop zones as a docked panel. Closing and showing it again restores its floating rectangle; Dock returns it to its last docked place or `preferredPlacement` if that place is unavailable. A saved float whose mod is not loaded shows the same named placeholder as a docked panel. The Floating windows switch temporarily renders floats at their remembered docked places without erasing their saved rectangles. No new capability or `ctx.ui` field is required.
|
|
601
615
|
|
|
616
|
+
## 4ra. Saving and restoring the whole layout
|
|
617
|
+
|
|
618
|
+
`ctx.subwindows.layout()` returns the whole arrangement as text: which panels are open, the tiling, the floating panels and their remembered places, the map panel's graphics and every registered pref block. It is the same JSON document that Export subwindow layout writes. `ctx.subwindows.setLayout(text)` puts an arrangement back and saves it as the player's layout, as an import does. It returns false and changes nothing when the text is not a layout document. `ctx.subwindows.onLayoutChange(listener)` calls the listener with the new layout text after each change: a panel opened, closed, moved, resized, docked, floated or tabbed, or a `setLayout` call from any mod. A drag reports once, when it ends, and the saves from one action arrive as one call after it finishes. That covers undo and redo and named layouts. Keep the last text you saw, push it onto your undo stack when different text arrives, and skip a change whose text equals the one you just restored, since a layout reads back byte for byte. A panel whose mod is not loaded keeps its place and shows the usual placeholder. Like the rest of `ctx.subwindows`, these need no capability. (neostryder/neo-angband#287)
|
|
619
|
+
|
|
602
620
|
## 4s. Command catalogue and store panel status
|
|
603
621
|
|
|
604
622
|
`ctx.intent.catalogue()` is present with `input:intent`. It returns a frozen, token-stamped list of the action registry's command codes, plus the non-command intent kinds. Each command has its play or store phase, its argument shape, and `verb`, the game's own name for it. That is `"aim"` for `aim-wand`, for example. A mod's command has the verb it set with `commands.setVerb`, and a code with no verb has null. Registered mod command codes appear in the same list. The catalogue is a read; it takes no turn, consumes no RNG, and adds nothing to the command queue.
|
|
@@ -611,11 +629,15 @@ Under `state:messages.read`, `ctx.snapshot().messages` carries the current input
|
|
|
611
629
|
|
|
612
630
|
`MonsterView` in `ctx.snapshot().core.monsters` carries `unique` (RF_UNIQUE), `questGuardian` and `finalGuardian`. A quest guardian is the race of one of the character's quests. The final guardian guards the last quest, the one whose kill wins the game, which is Morgoth in the shipped quest.txt. Both flags follow the quest table, so a mod that changes the quests moves them too. `id` is the level-local monster index an animation can key on. The list holds only the monsters the player perceives as monsters, the ones the game's own monster list shows. That includes monsters found by detection or telepathy, and leaves out any the player cannot see and any mimic still posing as an object.
|
|
613
631
|
|
|
614
|
-
|
|
632
|
+
`MonsterView.spellFlags` lists every spell flag of the race. `knownSpellFlags` lists only the ones the character has learned, the same set the monster recall names: flags it has seen the race use, or all of them once the race is fully known through probing or a cheat. Reading it creates no lore record. (neostryder/neo-angband#359)
|
|
633
|
+
|
|
634
|
+
The same rule covers cells and items in every view, a controller's included. `CellView.monster` names a square's occupant only when the player perceives it, and is 0 for an unseen creature or a mimic still posing as an object. `CellView.objectCount` counts the objects the player remembers there, and `floorItems(x, y)` lists only the ones the player has seen, each with its index in the live pile. `ItemView` describes an object as the player knows it, from its known twin: an unidentified ego has `ego: false` and a null `egoName`, an unassessed artifact has `artifact: false`, and bonuses, modifiers, flags, brands, slays, resists, curses and `value` count only what the player has learned. An item whose flavour the player has not identified is named by that flavour wherever an `ItemView` appears. `aware` is false, `label` is the flavour text (`Light Blue`, or a scroll's title), `kindKey` is `flavor:<index>`, `sval` is the flavour index made negative, `kindId` is absent, and `value` is the guess the game makes from the item's tval. Two unidentified flavours still have different keys, and none of them matches a kind's. When the player learns the flavour, all of these fields switch to the kind's. A shop's wares are named by their kind, as the shop screen names them, while the home's are named like the pack's. A controller's `monsters()` list holds only perceived monsters too.
|
|
615
635
|
|
|
616
636
|
`PlayerView` carries `hpWarning`, the low hit point threshold in hit points: `trunc(maxHp * hitpoint_warn / 10)`, or 0 when the warning is off. The warning applies while `hp` is below it. `recall` and `descent` are the turns left on Word of Recall and Deep Descent, and 0 when neither is active. `dead` turns true the moment the character dies, before the fatal message is acknowledged, so a death effect can start there instead of reading hit points, which bloodlust can take below zero.
|
|
617
637
|
|
|
618
|
-
`
|
|
638
|
+
`ac`, `toHit`, `toDam` and `objectFlags` come from the known state that the character sheet prints, so a rune on worn gear that the player has not learned leaves them as they were until the player learns it. Speed, blows, shots, light and infravision come from modifiers, which the game counts only once learned, and wielding an item teaches its modifiers.
|
|
639
|
+
|
|
640
|
+
`status.afraid` is the Fear timer alone. `status.fearful` is true whenever the character cannot fight in melee: timed fear, Terror, or fear from a curse, an item or a shape. Fear from an item or a curse counts once the player knows its rune, which the first refused blow teaches. `status.terror`, `status.amnesia` and `status.image` are the Terror, Amnesia and Hallucination timers. Amnesia stops the character reading scrolls.
|
|
619
641
|
|
|
620
642
|
A remembered object in `ctx.knownLevel()` may carry `aura`: `cursed` for a known curse, `artifact` for an object known to be an artifact, or `rune` for an assessed object with a rune the player has not learned. These match the `{cursed}` and `{??}` markers and the artifact name that the item list already shows. An object has at most one aura, taken in that order.
|
|
621
643
|
|
|
@@ -637,10 +659,14 @@ Pass an entry's `ref` to `view.inspectKnownFloorItem(ref)`, also under `state:fl
|
|
|
637
659
|
|
|
638
660
|
`ctx.keybindings`, under `keymap:edit`, is the player's keymap editor for the current keyset. `list()` returns every binding with the mod that created it, if any; `set()` binds or replaces a trigger and `remove()` drops one, and both save at once. A binding set here belongs to the player even when it replaces one a mod made with `ctx.keymaps`, so that mod no longer removes it. `capture()` resolves with the next key the player presses that a keymap can use, or null for Escape, and the game never acts on that key. `keymap:write` does not cover `keymap:edit`.
|
|
639
661
|
|
|
662
|
+
Each call works on the keyset in use unless it names the other one: `list("roguelike")`, `set(trigger, action, "original")` and `remove(trigger, keyset)` edit either set, as upstream's keymap editor can. `commands()` lists the game's commands as its command menu shows them, after any mod's menu changes, each with its name, its menu group, its plain key in each keyset (null where it has none there) and the letter of any Ctrl chord that runs it. That is what a key does when no keymap is bound to it, so an editor can warn before a binding hides a command. `cancelCapture()` stops a waiting capture as Escape would: it resolves with null, the next key reaches the game, and it returns false when nothing was waiting. Call it when your form closes. (neostryder/neo-angband#362)
|
|
663
|
+
|
|
640
664
|
## 4v. Knowledge browser
|
|
641
665
|
|
|
642
666
|
`ctx.knowledge`, under `state:knowledge.read`, is the knowledge menu as data. `categories()` names the eight browsers (objects, runes, artifacts, egos, monsters, features, traps and shapes) with each one's title and how many entries it lists. `list(category)` returns the known members in the game's own groups and order, each with an `id`, its name, its colour and the extra fields the game prints beside it, such as a rune's note or a monster's symbol, kills and "Full" column. `recall(category, id)` returns that entry's recall page, the same `ScreenView` the game shows, or null for an entry the player does not know yet.
|
|
643
667
|
|
|
668
|
+
Every entry also has `known`. It is false only for an object flavour the player has seen but not identified, which the objects list shows under its flavour name, and true for everything else, since the lists hold nothing the player has not met. A known-only filter hides the entries where it is false. Such a flavour's `id` is `flavor:<index>`, and it changes to the kind's id once the player learns the flavour. (neostryder/neo-angband#362)
|
|
669
|
+
|
|
644
670
|
Each call reads the live game, so a monster page gains lines as the character learns more about it. Read it again after the snapshot changes rather than keeping an old copy. An ego id includes its group, because an ego appears once for each kind of item it can be found on.
|
|
645
671
|
|
|
646
672
|
Reading a page changes nothing. The artifact recall builds its sample object from the game's random stream, as upstream's does, so opening that page in the game's own browser moves the stream. A mod's read puts the stream back exactly as it was, so drawing a knowledge tab cannot change the next level.
|
|
@@ -649,7 +675,7 @@ Reading a page changes nothing. The artifact recall builds its sample object fro
|
|
|
649
675
|
|
|
650
676
|
`ctx.character.history()`, under `state:player.read`, is the character's history as data, oldest first: the same entries the character history screen and the character dump show. Each entry has a `kind` (`birth`, `level`, `unique`, `artifact`, `artifact-unknown`, `note`, `import` or `other`), its text, the turn, the dungeon level and character level it was recorded at, and `lost` for an artifact the character no longer has. Regaining a drained level adds another `level` entry, as it does in Angband, so a timeline that shows each level once keeps the first.
|
|
651
677
|
|
|
652
|
-
Angband's history has no entry for reaching a new dungeon level, and the port adds none, because that would change the character dump. A mod that wants depth milestones records them itself from the `dungeonlevel` event, stored under `ctx.character.key()`.
|
|
678
|
+
Angband's history has no entry for reaching a new dungeon level, and the port adds none, because that would change the character dump. A mod that wants depth milestones records them itself from the `dungeonlevel` event in section 4l, stored under `ctx.character.key()`. The event also fires with `cause: "load"` each time the game loads, so compare the depth with the milestones already stored before adding one.
|
|
653
679
|
|
|
654
680
|
`ctx.character.onRunEnd(listener)` calls the listener once when a character dies or retires, after every item has been identified and the score table written, and before the tombstone. The report says whether the run ended in death, victory or retirement, and names the cause. It carries the character's name, race, class and levels, the deepest and final dungeon level, gold, the final turn, the score and whether the score table accepted it. It also has the full history, the last 40 messages, the character sheet, and every item worn, carried or left in the home, with its location, quantity and inspect text. `ctx.character.runReport()` returns the same report to a mod that loads later. It lasts until the page reloads, and starting a new character reloads it, so a mod that keeps a graveyard of past runs stores each report when `onRunEnd` fires.
|
|
655
681
|
|
|
@@ -659,6 +685,8 @@ Angband's history has no entry for reaching a new dungeon level, and the port ad
|
|
|
659
685
|
|
|
660
686
|
The draft changes only through the game's rules. `chooseRace` and `chooseClass` reset the stats to that pair's suggested spread, as the birth menus do. `buy`, `sell`, `suggest` and `reset` are point-buy. `roll` and `previousRoll` are the standard roller. The draft also covers the name, a random name, the background, the birth options and `usePrevious`. Rolls, backgrounds and random names come from the same random stream the birth screens use. `accept()` starts the game with the same choice those screens return, and `cancel()` goes back to the title.
|
|
661
687
|
|
|
688
|
+
`draft().statCosts` gives point-buy per stat, STR to CON: `buyCost`, what the next point costs (null at 18); `sellRefund`, what lowering it gives back (null at 10); and `canBuy` and `canSell`, whether those calls would succeed now. With the roller every figure is null and both flags are false. `restoreHistory()` puts back the background the game generated and clears `historyEdited`, which resending the old text through `setHistory` does not. (neostryder/neo-angband#362)
|
|
689
|
+
|
|
662
690
|
`ctx.saves.create()` starts character creation from a mod, as the title screen's new character does, and the page reloads into it. `create({ like })` sets the previous character first, so `usePrevious` and the name default start from it. A run report's `birth` field has the shape `like` takes, which is how a graveyard offers a new character like a dead one. The dead character itself stays dead.
|
|
663
691
|
|
|
664
692
|
Pass `resumeAutoplayer: true` to `create()` to give the new character to your own autoplayer. This is for a roll-on setting the player turns on in your mod ahead of time: after a death, the mod calls `create({ like: report.birth, resumeAutoplayer: true })` and play carries on. The call is refused unless your controller holds the keyboard at that moment. The character born from the birth screens that follow gets your controller on its first boot, with no prompt, and is marked as autoplayed. If the player leaves the birth screens and loads a different character instead, that character is asked about as usual. Pair it with `onDeath: "end"` from section 4q, since a controller that reincarnates in place never reaches a death. (neostryder/neo-angband#300)
|
|
@@ -671,6 +699,8 @@ On the Mods screen a setting is a row under its mod's switches, such as `CRT str
|
|
|
671
699
|
|
|
672
700
|
`ctx.settings` is present for a mod whose manifest declares at least one setting. `get(id)` and `all()` return the values clamped to the declared range and rounded to the nearest step, whatever the stored value says, so a mod that narrows a range in a later version still reads a value inside it. `onChange(listener)` calls `listener(id, value)` when the player changes a setting, and returns a function that stops it. A setting marked `requiresReload` changes nothing until the game reloads, so it fires no change and the manager offers its reload prompt. `resolveSettingValue(setting, value)` in the SDK does the same clamping for a mod's own tests.
|
|
673
701
|
|
|
702
|
+
`set(id, value)` moves one of the mod's own settings, as the player would on the Mods screen: the value is clamped and snapped the same way, saved, and returned. Listeners hear it unless the setting is marked `requiresReload`, in which case it takes effect after the next reload. An id the manifest does not declare, or a value that is not a number, returns undefined and saves nothing. A mod can change only its own settings. (neostryder/neo-angband#362)
|
|
703
|
+
|
|
674
704
|
## 4v. `ctx.display.setChromeTheme` - the window chrome's look
|
|
675
705
|
|
|
676
706
|
`ctx.display.setChromeTheme(theme)` repaints the chrome around the panels: title bars, tabs, buttons, dividers and drop guides. It needs `display:filter`. Every key is optional: `font` (a family already loaded in the page, for example with the FontFace API), `fontSize` (8 to 24), the colours `page`, `titleBackground`, `text`, `textStrong`, `muted`, `border`, `divider`, `dividerHover`, `accent` and `floatBorder` (as #rgb, #rrggbb, #rrggbbaa or rgb()), `radius` (0 to 16) and `shadow` (true or false). An unknown key or a bad value throws. `null` puts back the game's own look: Angband's palette and its 8x13 dialog font. As with the other display setters, each mod's last request is kept, the most recent one is in force, and a mod's request goes away when the mod is torn down. `getChromeTheme()` reports the theme in force. It covers the chrome only; what a panel shows inside is up to whoever draws that panel.
|
|
@@ -703,6 +733,39 @@ if (net) {
|
|
|
703
733
|
|
|
704
734
|
Code running in the page can still reach the relay without `ctx.net`, because in-process mods share the page. The host checks on each request are consent checks against what the manifest declared. The secret rules hold even so: a value is sent only to the hosts it was stored for, it never comes back to the page, and an environment variable is read only after the player agrees. Mods in the Worker tier do not get `ctx.net`. (neostryder/neo-angband#300)
|
|
705
735
|
|
|
736
|
+
## 4za. `ctx.shared` - values one mod shares with others
|
|
737
|
+
|
|
738
|
+
A mod can publish named JSON values for other mods to read. A plugin that declares `shared:publish` calls `ctx.shared.publish(name, version, value)`, and one that declares `shared:read` calls `ctx.shared.read(modId, name)`. `ctx.shared` is present when the manifest declares either capability, and a method whose capability is missing throws a capability error. Both capabilities are listed on the Mods screen, so the player can see which mods share data and which mods read it.
|
|
739
|
+
|
|
740
|
+
A name is 1 to 64 characters of lower-case letters, digits, `.`, `-` and `_`. The version is a whole number the publisher picks for that name; raise it when the value's shape changes so a reader can tell the shapes apart. The value has to be plain JSON: objects, arrays, strings, finite numbers, booleans and null. A function, `undefined`, `NaN`, a `Date`, a `Map`, a class instance, an empty array slot or a value that contains itself throws a `TypeError` naming the path to the bad part. A value whose JSON text is over 256 KiB in UTF-8 throws a `RangeError`. Either way the previous value stays. The host copies the value at publish time, so editing your object afterwards changes nothing until you publish again, and each publish replaces the whole record. `withdraw(name)` removes it.
|
|
741
|
+
|
|
742
|
+
`read(modId, name)` returns `{ mod, name, version, value }`, frozen all the way down, or null when the publisher is not installed, is disabled, failed to load, or has not published that name. Values last until the page reloads. A mod whose `register()` throws loses its values at once, and so does every mod at teardown, after all the `uninstall()` calls have run. Load order does not matter, since a read returns what is published at the moment you call it, so read when you need the value instead of keeping a copy from load time. `onChange(modId, name, listener)` calls the listener after each publish or withdrawal of that name, with the new record or null, and returns a function that stops it. A listener that throws is reported against the mod that registered it.
|
|
743
|
+
|
|
744
|
+
Treat a shared value as untrusted input. Another mod wrote it, and the player may have any version of that mod installed, so check the version and the type of every field you use before drawing it or acting on it.
|
|
745
|
+
|
|
746
|
+
Two mods that both act on the same event run in an order you do not control. In the example below the recap listens with `onChange` rather than reading inside its own `onRunEnd`, which could run before the reporter has published. Worker-tier mods do not get `ctx.shared`. (#365)
|
|
747
|
+
|
|
748
|
+
```js
|
|
749
|
+
// The run reporter's plugin.js (manifest: "shared:publish")
|
|
750
|
+
ctx.character.onRunEnd((report) => {
|
|
751
|
+
ctx.shared.publish("run-summary", 1, {
|
|
752
|
+
name: report.name,
|
|
753
|
+
cause: report.cause,
|
|
754
|
+
maxDepth: report.maxDepth,
|
|
755
|
+
notes: pickNotes(report), // an array of strings
|
|
756
|
+
});
|
|
757
|
+
});
|
|
758
|
+
|
|
759
|
+
// The death recap's plugin.js (manifest: "shared:read")
|
|
760
|
+
function summaryLines() {
|
|
761
|
+
const shared = ctx.shared.read("run-reporter", "run-summary");
|
|
762
|
+
const notes = shared?.version === 1 ? shared.value?.notes : undefined;
|
|
763
|
+
if (!Array.isArray(notes)) return ["The run reporter has no summary for this run."];
|
|
764
|
+
return notes.filter((line) => typeof line === "string").slice(0, 20);
|
|
765
|
+
}
|
|
766
|
+
ctx.shared.onChange("run-reporter", "run-summary", () => recap.redraw(summaryLines()));
|
|
767
|
+
```
|
|
768
|
+
|
|
706
769
|
## 5. Doors that are exported but deliberately closed
|
|
707
770
|
|
|
708
771
|
An exported mutable table is an extension point whether or not anyone meant it to be one. Two were found this way and are now frozen at runtime, not just typed `readonly`, because a mod folder ships plain `plugin.js` and the type binds nothing there:
|
package/docs/PLUGINS.md
CHANGED
|
@@ -360,7 +360,7 @@ The core snapshot also carries quiver items, equipment slot labels, local floor
|
|
|
360
360
|
|
|
361
361
|
### Working beside controllers and other mods
|
|
362
362
|
|
|
363
|
-
`ctx.snapshot().driver` and `ctx.driver()` name the current keyboard owner. A controller mod can publish a task label and reason through `ctx.controller.setStatus()`, release the keyboard through `ctx.controller.release(reason?)`, and mods with `event:driver-changed` can listen for changes. `ctx.mods()` lists enabled, loaded mods and only the rule or section flags each manifest declares in `publicFlags`. Display setters keep a value per mod, restore an earlier value when the current owner clears or unloads, and expose getters for the value in force. See [MOD_SEAMS.md section 4q](MOD_SEAMS.md#4q-controller-ownership-public-mods-and-display-requests). A controller can say more about one install by returning `{ controller, nondeterministic, onDeath }`, and a mod with `event:player-command` can watch the player's own commands while it waits; see [MOD_SEAMS.md sections 4q and 4l](MOD_SEAMS.md#4q-controller-ownership-public-mods-and-display-requests).
|
|
363
|
+
`ctx.snapshot().driver` and `ctx.driver()` name the current keyboard owner. A controller mod can publish a task label and reason through `ctx.controller.setStatus()`, release the keyboard through `ctx.controller.release(reason?)`, and mods with `event:driver-changed` can listen for changes. `ctx.mods()` lists enabled, loaded mods and only the rule or section flags each manifest declares in `publicFlags`. Display setters keep a value per mod, restore an earlier value when the current owner clears or unloads, and expose getters for the value in force. See [MOD_SEAMS.md section 4q](MOD_SEAMS.md#4q-controller-ownership-public-mods-and-display-requests). A controller can say more about one install by returning `{ controller, nondeterministic, onDeath, onKey }`, and a mod with `event:player-command` can watch the player's own commands while it waits; see [MOD_SEAMS.md sections 4q and 4l](MOD_SEAMS.md#4q-controller-ownership-public-mods-and-display-requests).
|
|
364
364
|
|
|
365
365
|
### Watching resolved outcomes: `ctx.events`
|
|
366
366
|
|
|
@@ -372,12 +372,18 @@ Declare `saves:manage` for a replacement title screen that lists, loads, renames
|
|
|
372
372
|
|
|
373
373
|
`ctx.saves.onChange()` reports frozen rename and delete events after the host changes the roster, including changes made outside a mod menu. Each event carries the stable lineage key returned by `ctx.character.key()` for the attached character. See [MOD_SEAMS.md section 4m](MOD_SEAMS.md#4m-ctxsaves---the-host-character-roster).
|
|
374
374
|
|
|
375
|
+
Declare `session:control` for a save dialog of your own. `ctx.session` saves the game, leaves for the title screen or quits, as the game menu does, but without the menu's confirmations. Each call saves first and stays in the game when the save fails. See [MOD_SEAMS.md section 4m](MOD_SEAMS.md#4m-ctxsaves---the-host-character-roster).
|
|
376
|
+
|
|
375
377
|
### Title actions and player profiles
|
|
376
378
|
|
|
377
379
|
Declare `ui:title` to receive `ctx.title`. `registerRow({ label, key?, run })` adds an action after the core title options. Rows keep their registration order, and the host removes a mod's rows when it uninstalls that mod. The optional key is a letter or digit; a core key or an earlier mod key keeps its existing action. `choose(title, choices)` opens a choice menu before play begins and returns the chosen index, or `null` on Escape. The first choice is selected by default.
|
|
378
380
|
|
|
379
381
|
Declare `profiles:manage` to receive `ctx.profiles`. A mod can list profiles, create a fresh profile or copy configuration from another profile, replace the enabled mods in a profile it created, and switch profiles before play begins. Profile copies exclude characters and the save roster. See [MOD_SEAMS.md](MOD_SEAMS.md#player-profiles-and-title-actions) for method types and reload actions.
|
|
380
382
|
|
|
383
|
+
### Sharing data with other mods: `ctx.shared`
|
|
384
|
+
|
|
385
|
+
Declare `shared:publish` to publish named JSON values with `ctx.shared.publish(name, version, value)`, and `shared:read` to read another mod's with `ctx.shared.read(modId, name)`. A read returns a frozen copy, or null when that mod is not installed, is disabled, failed to load, or has not published the name. Values must be plain JSON of at most 256 KiB, and the version is a number you raise when the value's shape changes. Treat what you read as untrusted input and check its version and fields before you use it. See [MOD_SEAMS.md section 4za](MOD_SEAMS.md#4za-ctxshared---values-one-mod-shares-with-others).
|
|
386
|
+
|
|
381
387
|
### Tiled panels beside `openPanel`
|
|
382
388
|
|
|
383
389
|
Declare `ui:panel.mount` to offer a panel in Subwindow setup with `ctx.ui.registerPanelKind(spec)`. Its `mount` function draws into the slot's shadow root. Use the returned function during mod cleanup to unregister the kind. See [MOD_SEAMS.md section 4p](MOD_SEAMS.md#4p-ctxuiregisterpanelkind---a-mod-panel-in-the-tiled-layout) for the host handle and saved layout behavior.
|
|
@@ -962,6 +968,8 @@ A session-only load is limited in lifetime, not in privilege. A session-loaded p
|
|
|
962
968
|
|
|
963
969
|
That lifetime is a strong convention, not an enforced boundary. The archive lives in `sessionStorage`, which survives a reload (that is what makes the tier work, since a reload is what applies a mod). A browser also restores it when it restores a closed or crashed window, and a window the page itself opens inherits a copy of it. So "gone when you close the game" is what normally happens, not a guarantee. The mitigation is visibility: a session mod is always on the list, always marked, and always droppable, so it can never sit there unnoticed.
|
|
964
970
|
|
|
971
|
+
`shared:` has two actions, and neither grant includes the other. A mod that reads what others share is not able to publish, and the reverse. Publishing needs its own grant so the player can see from the Mods screen which mods hand data to other mods, not only which mods take it.
|
|
972
|
+
|
|
965
973
|
`ui:panel.mount` is not a fence around the DOM. Your `plugin.js` runs in the page's own realm, so `document` is available to it with or without any capability, and a mod that never declares this can still append an element to the body. What the grant carries is a line the player reads first, a container the host owns and can take away, and one thing a mod cannot do without it: stand the game's input door down, so a real `<input>` inside your panel can be typed into instead of the keystrokes being read as game commands.
|
|
966
974
|
|
|
967
975
|
`WorldFrame` in `packages/web/src/world-view.ts` is live. `render()` calls the extracted `world-render-data.ts` with the real map-knowledge reads and passes the resulting frame to a `WorldFrameSink`. The default glyph terminal is that sink, and it consumes the frame's fallback visual projection, including the terrain-under-foreground tile inputs for a path over otherwise bare seen terrain. The frame carries semantic feature, trap, object and monster ids, visibility, ordered layers, the cursor and player placement, so a selected front end can build an isometric or 3D view without decoding terminal glyphs. As a control, the host runs the same producer `render()` uses, checks its unmodded pre-frame glyph tuples, and tees that exact frame to an independent host sink in the same call. The selected frontend receives a frozen copy of that frame; when no frontend is selected, or none exists, the glyph sink stays active unchanged.
|
package/docs/README.md
CHANGED
|
@@ -274,7 +274,7 @@ Core never reads `ext`. The game does not know what "bleed" means, so data alone
|
|
|
274
274
|
|
|
275
275
|
Which keys count as core's is derived from core's own gamedata rather than declared by hand (`packages/core/src/mod/record-keys.ts`, generated and re-derived by its test in both directions), so the boundary cannot drift as the pack grows.
|
|
276
276
|
|
|
277
|
-
> Every record of every shipped file can now be addressed by a ref
|
|
277
|
+
> Every record of every shipped file can now be addressed by a ref. `history` was the last to get one, on 2026-10-03: a history record's ref is its chart and roll, as in `core:50--100`. Until 2026-07-29 a per-record op aimed at any of the 20 non-name-keyed files was silently dropped, and until 2026-08-08 a further 73 individual records, 61 of `ego_item`'s 107 among them, could not be addressed by any ref at all. `MOD_REACH.md` carries the measurement.
|
|
278
278
|
|
|
279
279
|
Total conversions are the same mechanism at full throttle: depend on `core`, replace or remove what you do not want, and add your own world.
|
|
280
280
|
### Adding things that do not exist in the base game
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rpgm-tools/neo-angband-mod-sdk",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.22.0",
|
|
4
4
|
"description": "Pack schemas, validation, and tooling for Neo Angband mods (content packs, tile packs, scripted plugins)",
|
|
5
5
|
"license": "GPL-2.0-only",
|
|
6
6
|
"author": "neostryder (RPGM Tools)",
|
package/src/capabilities.ts
CHANGED
|
@@ -282,7 +282,9 @@ export type ParsedCapability =
|
|
|
282
282
|
| { kind: "ui-region"; action: "write" }
|
|
283
283
|
| { kind: "saves"; action: "manage" }
|
|
284
284
|
| { kind: "title"; action: "add" }
|
|
285
|
-
| { kind: "profiles"; action: "manage" }
|
|
285
|
+
| { kind: "profiles"; action: "manage" }
|
|
286
|
+
| { kind: "session"; action: "control" }
|
|
287
|
+
| { kind: "shared"; action: "read" | "publish" };
|
|
286
288
|
|
|
287
289
|
const EVENT_RE = /^event:([a-z][a-z0-9-]*)$/;
|
|
288
290
|
/**
|
|
@@ -378,6 +380,18 @@ export function parseCapability(cap: string): ParsedCapability {
|
|
|
378
380
|
if (cap === "saves:manage") return { kind: "saves", action: "manage" };
|
|
379
381
|
if (cap === "ui:title") return { kind: "title", action: "add" };
|
|
380
382
|
if (cap === "profiles:manage") return { kind: "profiles", action: "manage" };
|
|
383
|
+
/* "session:control": save the game, leave it for the title screen, or quit, the
|
|
384
|
+
* same three acts the game menu offers. Its own kind so `saves:manage` (the
|
|
385
|
+
* roster) does not carry it: managing characters and ending this one are two
|
|
386
|
+
* different things to agree to. */
|
|
387
|
+
if (cap === "session:control") return { kind: "session", action: "control" };
|
|
388
|
+
/* "shared:read" and "shared:publish": read the named JSON values other mods
|
|
389
|
+
* publish through `ctx.shared`, or publish this mod's own. Two actions so the
|
|
390
|
+
* Mods screen can show both sides of the exchange, and compared exactly, so
|
|
391
|
+
* neither grant carries the other. */
|
|
392
|
+
if (cap === "shared:read" || cap === "shared:publish") {
|
|
393
|
+
return { kind: "shared", action: cap === "shared:read" ? "read" : "publish" };
|
|
394
|
+
}
|
|
381
395
|
/* NOT a registry domain, deliberately. A registry:* grant means "override
|
|
382
396
|
* one named game system among many"; this one means "everything the player
|
|
383
397
|
* sees of the dungeon is drawn by this mod." It is the display OWNER, so it
|
|
@@ -521,6 +535,10 @@ function grantCovers(grant: ParsedCapability, request: ParsedCapability): boolea
|
|
|
521
535
|
return grant.kind === "title";
|
|
522
536
|
case "profiles":
|
|
523
537
|
return grant.kind === "profiles";
|
|
538
|
+
case "session":
|
|
539
|
+
return grant.kind === "session";
|
|
540
|
+
case "shared":
|
|
541
|
+
return grant.kind === "shared" && grant.action === request.action;
|
|
524
542
|
case "event":
|
|
525
543
|
return grant.kind === "event" && grant.name === request.name;
|
|
526
544
|
case "state":
|
package/src/loader.ts
CHANGED
|
@@ -36,7 +36,9 @@
|
|
|
36
36
|
* The identity those files really use was already declared in record-key.ts and
|
|
37
37
|
* already proved unique over the shipped pack; recordsComposable now asks it.
|
|
38
38
|
* What is left in phase 2 is `constants` and `visuals` (config singletons, where
|
|
39
|
-
* whole-file IS the meaning) and `history` (
|
|
39
|
+
* whole-file IS the meaning) and `history` (keyed by chart and roll since
|
|
40
|
+
* 2026-10-03, but its record order is what a chart's rolls mean, so a pack's
|
|
41
|
+
* records still replace the file and only the per-record ops use the key).
|
|
40
42
|
*
|
|
41
43
|
* NOTHING IS DROPPED IN SILENCE. This is the invariant the whole file exists to
|
|
42
44
|
* hold. Until 2026-07-29 phase 2 did not exist: a `patches` / `replaces` /
|
|
@@ -231,7 +233,7 @@ function isNamedRecord(r: unknown): r is JsonRecord {
|
|
|
231
233
|
*/
|
|
232
234
|
function recordsComposable(file: string, records: readonly unknown[]): boolean {
|
|
233
235
|
const spec = keySpecFor(file);
|
|
234
|
-
if (spec.kind === "singleton") return false;
|
|
236
|
+
if (spec.kind === "singleton" || spec.wholeFile === true) return false;
|
|
235
237
|
const claimants = new Map<string, number>();
|
|
236
238
|
const keysOf: (readonly string[])[] = [];
|
|
237
239
|
for (const r of records) {
|
|
@@ -364,8 +366,8 @@ function applyPassthroughOps(
|
|
|
364
366
|
);
|
|
365
367
|
if (!hasOps) return unmodified();
|
|
366
368
|
|
|
367
|
-
/* No declared identity (
|
|
368
|
-
*
|
|
369
|
+
/* No declared identity (a mod-only file with no `name` and no entry in
|
|
370
|
+
* record-key.ts). Every op is reported and none is applied - the one honest
|
|
369
371
|
* answer, because inventing a key here would mis-merge instead of dropping. */
|
|
370
372
|
if (RECORD_KEY_SPECS[file] === undefined && !recordsKeyedByName(records)) {
|
|
371
373
|
for (const pack of ordered) {
|
|
@@ -644,7 +646,7 @@ export function composeContentPacks(
|
|
|
644
646
|
* previous provider's records simply vanished. Say so. */
|
|
645
647
|
refused.refuse(
|
|
646
648
|
p.manifest.id,
|
|
647
|
-
`${f} replaces the whole file, discarding ${(out[f] as unknown[]).length} record(s) from ${providerId} - ${f} records
|
|
649
|
+
`${f} replaces the whole file, discarding ${(out[f] as unknown[]).length} record(s) from ${providerId} - ${f} records cannot be added one at a time, so a whole file is the only thing that can be added to it`,
|
|
648
650
|
);
|
|
649
651
|
}
|
|
650
652
|
out[f] = [...contrib.records];
|
package/src/project.ts
CHANGED
|
@@ -251,7 +251,7 @@ export class ModProject {
|
|
|
251
251
|
const findings: AuthoringFinding[] = checkPacks([mine], all);
|
|
252
252
|
|
|
253
253
|
/* THE ONE THAT COSTS THE WHOLE GAME, PROMOTED TO AN ERROR. A file whose
|
|
254
|
-
* records
|
|
254
|
+
* records cannot be added one at a time can only be contributed WHOLE, so a mod
|
|
255
255
|
* that ships one discards whatever the previous provider put there. The
|
|
256
256
|
* loader already says so in `problems`, but a line in a list is not
|
|
257
257
|
* proportionate to replacing the base game's copy of a file, and a builder
|
|
@@ -264,7 +264,8 @@ export class ModProject {
|
|
|
264
264
|
* Since 2026-08-08 composition keys by recordRefKeys and all three merge per
|
|
265
265
|
* record, so what is left here is `constants` and `visuals` - config
|
|
266
266
|
* singletons, where "use mine" is what shipping the file MEANS - and
|
|
267
|
-
* `history`,
|
|
267
|
+
* `history`, whose records have a key for patching but whose order is
|
|
268
|
+
* what a chart's rolls mean, so a record cannot be added on its own. */
|
|
268
269
|
const mineId = this.#manifest.id;
|
|
269
270
|
for (const problem of composed.problems) {
|
|
270
271
|
if (!problem.startsWith(`${mineId}: `) || !problem.includes("replaces the whole file")) {
|
|
@@ -276,9 +277,9 @@ export class ModProject {
|
|
|
276
277
|
record: mineId,
|
|
277
278
|
rule: "file/whole-file-replacement",
|
|
278
279
|
message:
|
|
279
|
-
`${problem}. Records in this file
|
|
280
|
-
"
|
|
281
|
-
"already there, rather than shipping a mod that deletes the base game's copy.",
|
|
280
|
+
`${problem}. Records in this file cannot be added one at a time, so ` +
|
|
281
|
+
"shipping them replaces the file: use `patchFields` or `replace` to change " +
|
|
282
|
+
"what is already there, rather than shipping a mod that deletes the base game's copy.",
|
|
282
283
|
});
|
|
283
284
|
}
|
|
284
285
|
|
package/src/record-key.ts
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* string `name`.
|
|
4
4
|
*
|
|
5
5
|
* CURRENT STATE, FIRST, BECAUSE THIS COMMENT USED TO MISLEAD. Every record file
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* is addressable per record today: 24 by a unique `name` and 20 by the explicit
|
|
7
|
+
* specs in this file. `history` was the one exception until 2026-10-03, when it
|
|
8
|
+
* gained its (chart, roll) key below. Two independent reviewers read
|
|
9
9
|
* the older wording, took the "the other 20 files do not fit it" paragraph below
|
|
10
10
|
* for the present tense, and filed the same non-existent P1 ("20 files silently
|
|
11
11
|
* discard patch/replace/remove, including object, ego_item, vault, trap, store,
|
|
@@ -98,10 +98,17 @@
|
|
|
98
98
|
* verified unique over the shipped core pack (see record-key.test.ts, which
|
|
99
99
|
* reads the real pack and fails if a declared key stops being unique).
|
|
100
100
|
*
|
|
101
|
-
* `history`
|
|
102
|
-
* `{chart:{chart,next,roll}, phrase}` and
|
|
103
|
-
*
|
|
104
|
-
*
|
|
101
|
+
* `history` was absent until 2026-10-03, on the reasoning that a record is
|
|
102
|
+
* `{chart:{chart,next,roll}, phrase}` and a mod could change any part of it.
|
|
103
|
+
* That left history.txt's phrases the one piece of gamedata no content patch
|
|
104
|
+
* could correct. The identity upstream itself uses is (chart, roll): get_history
|
|
105
|
+
* walks one chart's entries and takes the first whose cumulative `roll` reaches
|
|
106
|
+
* the die, so a roll threshold appears once per chart (a repeat could never be
|
|
107
|
+
* chosen), and `chart` is the node every `next` link names. Neither is the
|
|
108
|
+
* phrase or the link, which are what a correction or a rewiring changes. The key
|
|
109
|
+
* is declared `wholeFile`, because a chart's meaning is its records' ORDER: an
|
|
110
|
+
* added record appended after core's would sit past the roll-100 entry where
|
|
111
|
+
* get_history can never reach it.
|
|
105
112
|
*
|
|
106
113
|
* AMBIGUITY IS NAMED, NEVER GUESSED. A key that two records in the same file
|
|
107
114
|
* claim (object's 5 pairs, ego_item's 25) makes that one ref unaddressable; the
|
|
@@ -140,6 +147,14 @@ export type RecordKeySpec =
|
|
|
140
147
|
* stringified: a JSON blob in a ref is not something an author can type.
|
|
141
148
|
*/
|
|
142
149
|
readonly discriminator?: readonly string[];
|
|
150
|
+
/**
|
|
151
|
+
* The records keep whole-file semantics even though each has a key: a
|
|
152
|
+
* pack's `records` still replace the file, and only the per-record ops
|
|
153
|
+
* (patch, replace, fieldPatch, remove) use the key. For a file whose
|
|
154
|
+
* record ORDER carries meaning, where composition appending a new record
|
|
155
|
+
* at the end would change what the file says.
|
|
156
|
+
*/
|
|
157
|
+
readonly wholeFile?: true;
|
|
143
158
|
}
|
|
144
159
|
| { readonly kind: "singleton" };
|
|
145
160
|
|
|
@@ -198,6 +213,11 @@ export const RECORD_KEY_SPECS: Readonly<Record<string, RecordKeySpec>> = {
|
|
|
198
213
|
paths: ["name"],
|
|
199
214
|
discriminator: ["type", "item.tval"],
|
|
200
215
|
},
|
|
216
|
+
/* history: the chart a record belongs to and its cumulative roll threshold,
|
|
217
|
+
* which is how get_history (player-birth.c) picks it. `core:50--100` is
|
|
218
|
+
* "You have blue-gray eyes, ". Whole-file, because order within a chart is
|
|
219
|
+
* what the rolls mean (see the header). */
|
|
220
|
+
history: { kind: "fields", paths: ["chart.chart", "chart.roll"], wholeFile: true },
|
|
201
221
|
};
|
|
202
222
|
|
|
203
223
|
/**
|