@rpgm-tools/neo-angband-core 0.27.0 → 0.27.2
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/README.md +1 -1
- package/dist/mod/save-blocks.d.ts +1 -1
- package/dist/player/options-file.d.ts +20 -0
- package/dist/player/options-file.d.ts.map +1 -1
- package/dist/player/options-file.js +35 -1
- package/dist/player/options-file.js.map +1 -1
- package/dist/player/options.d.ts +14 -1
- package/dist/player/options.d.ts.map +1 -1
- package/dist/player/options.js +22 -1
- package/dist/player/options.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/src/player/options-file.ts +39 -1
- package/src/player/options.ts +22 -1
- package/src/version.ts +1 -1
package/README.md
CHANGED
|
@@ -32,7 +32,7 @@ import { Rng, ENGINE_VERSION, PARITY_BASELINE } from "@rpgm-tools/neo-angband-co
|
|
|
32
32
|
const rng = new Rng(1234);
|
|
33
33
|
console.log(rng.damroll(3, 6), rng.damroll(3, 6), rng.damroll(3, 6)); // 9 13 8
|
|
34
34
|
|
|
35
|
-
console.log(ENGINE_VERSION, PARITY_BASELINE); // 0.27.
|
|
35
|
+
console.log(ENGINE_VERSION, PARITY_BASELINE); // 0.27.2 4.2.6
|
|
36
36
|
```
|
|
37
37
|
|
|
38
38
|
Two entry points:
|
|
@@ -133,7 +133,7 @@ export type OrphanStore = Record<string, OrphanEntry[]>;
|
|
|
133
133
|
* core pack outright, and versionMap's versions are only ever used to key
|
|
134
134
|
* quarantined MOD entities. An existing save keeps whatever it recorded.
|
|
135
135
|
*/
|
|
136
|
-
export declare const CORE_PACK_VERSION = "0.27.
|
|
136
|
+
export declare const CORE_PACK_VERSION = "0.27.2";
|
|
137
137
|
/** A core-only manifest: the base game with no mods, deterministic. */
|
|
138
138
|
export declare function coreOnlyManifest(): SaveManifest;
|
|
139
139
|
/**
|
|
@@ -150,6 +150,26 @@ export interface InitialOptions {
|
|
|
150
150
|
* because the files only carry booleans. And the two restore calls have their
|
|
151
151
|
* return values discarded: an unreadable customised file leaves the page on the
|
|
152
152
|
* table defaults and does not stop a character being made.
|
|
153
|
+
*
|
|
154
|
+
* One deliberate, documented divergence applies on top of the table defaults
|
|
155
|
+
* (DEFAULT_OVERRIDES; see docs/PARITY.md "Accepted: birth_no_selling defaults
|
|
156
|
+
* to off in core"), applied twice for one reason each:
|
|
157
|
+
*
|
|
158
|
+
* - BEFORE the restore calls, so a page with no customised file (parsed
|
|
159
|
+
* normally, or unreadable) keeps the override - `optionsRestoreCustom`
|
|
160
|
+
* leaves an unreadable file's page untouched, and a readable file's
|
|
161
|
+
* `parseCustomOptionsText` only overwrites names it actually finds a line
|
|
162
|
+
* for, so an override applied here survives both.
|
|
163
|
+
* - AFTER the restore calls, but only for a page whose file does not exist
|
|
164
|
+
* at all: that is the one case `optionsRestoreCustom` reaches
|
|
165
|
+
* `optionsRestoreMaintainer`, which - faithfully, as its own name says -
|
|
166
|
+
* resets every option on the page to the raw table `normal`, erasing the
|
|
167
|
+
* first application.
|
|
168
|
+
*
|
|
169
|
+
* A page whose file exists and sets the option explicitly always wins either
|
|
170
|
+
* way, because `optionsSaveCustomText` always lists every option on its page,
|
|
171
|
+
* so an explicit line and this override cannot both apply silently - the
|
|
172
|
+
* explicit line runs last.
|
|
153
173
|
*/
|
|
154
174
|
export declare function optionsInitDefaults(io: HostIo, msg?: (message: string) => void): InitialOptions;
|
|
155
175
|
//# sourceMappingURL=options-file.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options-file.d.ts","sourceRoot":"","sources":["../../src/player/options-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"options-file.d.ts","sourceRoot":"","sources":["../../src/player/options-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAQ5C;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEjD,wEAAwE;AACxE,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAenD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1D;AAgBD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAUtF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC1B,IAAI,EAAE,MAAM,GACX,OAAO,CAUT;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,GACX,MAAM,EAAE,CAiFV;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAI7E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAC9B,OAAO,CAYT;AAMD,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,MAAM,EACV,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAC9B,cAAc,CAwBhB"}
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
import { OPTION_ENTRIES } from "../generated/options.js";
|
|
55
55
|
import { FileMode, FileType, HostDir } from "../host/io.js";
|
|
56
56
|
import { containsOnlySpaces } from "../parser.js";
|
|
57
|
-
import { DEFAULT_DELAY_FACTOR, DEFAULT_HITPOINT_WARN } from "./options.js";
|
|
57
|
+
import { DEFAULT_DELAY_FACTOR, DEFAULT_HITPOINT_WARN, DEFAULT_OVERRIDES, } from "./options.js";
|
|
58
58
|
/**
|
|
59
59
|
* option_type_name (option.c:42-73): the lower-case short name that goes in
|
|
60
60
|
* the file name and in the file's own first line. The `unknown` arm is
|
|
@@ -279,13 +279,47 @@ export function optionsRestoreCustom(io, opts, page, msg) {
|
|
|
279
279
|
* because the files only carry booleans. And the two restore calls have their
|
|
280
280
|
* return values discarded: an unreadable customised file leaves the page on the
|
|
281
281
|
* table defaults and does not stop a character being made.
|
|
282
|
+
*
|
|
283
|
+
* One deliberate, documented divergence applies on top of the table defaults
|
|
284
|
+
* (DEFAULT_OVERRIDES; see docs/PARITY.md "Accepted: birth_no_selling defaults
|
|
285
|
+
* to off in core"), applied twice for one reason each:
|
|
286
|
+
*
|
|
287
|
+
* - BEFORE the restore calls, so a page with no customised file (parsed
|
|
288
|
+
* normally, or unreadable) keeps the override - `optionsRestoreCustom`
|
|
289
|
+
* leaves an unreadable file's page untouched, and a readable file's
|
|
290
|
+
* `parseCustomOptionsText` only overwrites names it actually finds a line
|
|
291
|
+
* for, so an override applied here survives both.
|
|
292
|
+
* - AFTER the restore calls, but only for a page whose file does not exist
|
|
293
|
+
* at all: that is the one case `optionsRestoreCustom` reaches
|
|
294
|
+
* `optionsRestoreMaintainer`, which - faithfully, as its own name says -
|
|
295
|
+
* resets every option on the page to the raw table `normal`, erasing the
|
|
296
|
+
* first application.
|
|
297
|
+
*
|
|
298
|
+
* A page whose file exists and sets the option explicitly always wins either
|
|
299
|
+
* way, because `optionsSaveCustomText` always lists every option on its page,
|
|
300
|
+
* so an explicit line and this override cannot both apply silently - the
|
|
301
|
+
* explicit line runs last.
|
|
282
302
|
*/
|
|
283
303
|
export function optionsInitDefaults(io, msg) {
|
|
284
304
|
const opts = {};
|
|
285
305
|
for (const entry of OPTION_ENTRIES)
|
|
286
306
|
opts[entry.name] = entry.normal;
|
|
307
|
+
const applyOverrides = (onlyIfPageFileMissing) => {
|
|
308
|
+
for (const [name, value] of Object.entries(DEFAULT_OVERRIDES)) {
|
|
309
|
+
if (value === undefined)
|
|
310
|
+
continue;
|
|
311
|
+
const entry = OPTION_ENTRIES.find((e) => e.name === name);
|
|
312
|
+
if (!entry)
|
|
313
|
+
continue;
|
|
314
|
+
const pageFileMissing = !io.exists(HostDir.USER, customOptionsFileName(entry.type));
|
|
315
|
+
if (!onlyIfPageFileMissing || pageFileMissing)
|
|
316
|
+
opts[name] = value;
|
|
317
|
+
}
|
|
318
|
+
};
|
|
319
|
+
applyOverrides(false);
|
|
287
320
|
optionsRestoreCustom(io, opts, "BIRTH", msg);
|
|
288
321
|
optionsRestoreCustom(io, opts, "INTERFACE", msg);
|
|
322
|
+
applyOverrides(true);
|
|
289
323
|
return {
|
|
290
324
|
opts,
|
|
291
325
|
delayFactor: DEFAULT_DELAY_FACTOR,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options-file.js","sourceRoot":"","sources":["../../src/player/options-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,
|
|
1
|
+
{"version":3,"file":"options-file.js","sourceRoot":"","sources":["../../src/player/options-file.ts"],"names":[],"mappings":"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"}
|
package/dist/player/options.d.ts
CHANGED
|
@@ -13,7 +13,9 @@
|
|
|
13
13
|
*
|
|
14
14
|
* Faithful notes:
|
|
15
15
|
* - Defaults are read straight from OPTION_ENTRIES (do not hand-copy the
|
|
16
|
-
* table): each option is seeded from its `normal` field
|
|
16
|
+
* table): each option is seeded from its `normal` field, with exactly one
|
|
17
|
+
* deliberate, documented divergence applied on top (DEFAULT_OVERRIDES; see
|
|
18
|
+
* docs/PARITY.md "Accepted: birth_no_selling defaults to off in core").
|
|
17
19
|
* - hitpoint_warn is the 0..9 integer op_ptr->hitpoint_warn (DEFAULT 3), kept
|
|
18
20
|
* alongside the booleans. delay_factor (default 40) and lazymove_delay
|
|
19
21
|
* (player->opts.lazymove_delay, default 0, uint8) are carried too.
|
|
@@ -42,6 +44,17 @@ export declare const DEFAULT_DELAY_FACTOR = 40;
|
|
|
42
44
|
export declare const DEFAULT_LAZYMOVE_DELAY = 0;
|
|
43
45
|
/** A plain map of option name -> boolean value (the serialized form). */
|
|
44
46
|
export type OptionValues = Record<string, boolean>;
|
|
47
|
+
/**
|
|
48
|
+
* Deliberate, documented divergence from OPTION_ENTRIES' own `normal` field
|
|
49
|
+
* (see docs/PARITY.md "Accepted: birth_no_selling defaults to off in core").
|
|
50
|
+
* list-options.h ships `birth_no_selling` ON; core ships it OFF, so a new
|
|
51
|
+
* character starts able to sell to stores without visiting the birth options
|
|
52
|
+
* page first. Applied wherever a default option set is built - here and in
|
|
53
|
+
* options-file.ts's optionsInitDefaults - so both paths agree. A player's own
|
|
54
|
+
* customized_birth_options.txt (or an explicit birth choice) still overrides
|
|
55
|
+
* it, exactly as it would any other option.
|
|
56
|
+
*/
|
|
57
|
+
export declare const DEFAULT_OVERRIDES: Partial<Record<OptionName, boolean>>;
|
|
45
58
|
/** The serialized OptionState (save format). */
|
|
46
59
|
export interface OptionStateData {
|
|
47
60
|
/** Every option's live boolean value. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/player/options.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/player/options.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,2EAA2E;AAC3E,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE,4EAA4E;AAC5E,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,yEAAyE;AACzE,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,yEAAyE;AACzE,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnD;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAElE,CAAC;AAEF,gDAAgD;AAChD,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,MAAM,EAAE,YAAY,CAAC;IACrB,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,KAAK,EAAE,YAAY,CAAC;CACrB;AAED,uEAAuE;AACvE,MAAM,WAAW,UAAU;IACzB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAwBD;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,6EAA6E;IAC7E,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;gBAEzB,IAAI,GAAE,UAAe;IAyBjC,2EAA2E;IAC3E,OAAO,CAAC,QAAQ;IAUhB,gEAAgE;IAChE,GAAG,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO;IAIvC;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO;IAOvD,qDAAqD;IACrD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9B,qDAAqD;IACrD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9B,qDAAqD;IACrD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9B;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO;IAI9C;;;;OAIG;IACH,WAAW,IAAI,OAAO;IAOtB,+CAA+C;IAC/C,KAAK,IAAI,SAAS,MAAM,EAAE;IAI1B,iDAAiD;IACjD,QAAQ,IAAI,eAAe;IAU3B;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW;CAwBnD"}
|
package/dist/player/options.js
CHANGED
|
@@ -13,7 +13,9 @@
|
|
|
13
13
|
*
|
|
14
14
|
* Faithful notes:
|
|
15
15
|
* - Defaults are read straight from OPTION_ENTRIES (do not hand-copy the
|
|
16
|
-
* table): each option is seeded from its `normal` field
|
|
16
|
+
* table): each option is seeded from its `normal` field, with exactly one
|
|
17
|
+
* deliberate, documented divergence applied on top (DEFAULT_OVERRIDES; see
|
|
18
|
+
* docs/PARITY.md "Accepted: birth_no_selling defaults to off in core").
|
|
17
19
|
* - hitpoint_warn is the 0..9 integer op_ptr->hitpoint_warn (DEFAULT 3), kept
|
|
18
20
|
* alongside the booleans. delay_factor (default 40) and lazymove_delay
|
|
19
21
|
* (player->opts.lazymove_delay, default 0, uint8) are carried too.
|
|
@@ -38,6 +40,19 @@ export const DEFAULT_DELAY_FACTOR = 40;
|
|
|
38
40
|
* ui-options.c do_cmd_lazymove_delay clamps it to a uint8 (MIN(delay, 255)).
|
|
39
41
|
*/
|
|
40
42
|
export const DEFAULT_LAZYMOVE_DELAY = 0;
|
|
43
|
+
/**
|
|
44
|
+
* Deliberate, documented divergence from OPTION_ENTRIES' own `normal` field
|
|
45
|
+
* (see docs/PARITY.md "Accepted: birth_no_selling defaults to off in core").
|
|
46
|
+
* list-options.h ships `birth_no_selling` ON; core ships it OFF, so a new
|
|
47
|
+
* character starts able to sell to stores without visiting the birth options
|
|
48
|
+
* page first. Applied wherever a default option set is built - here and in
|
|
49
|
+
* options-file.ts's optionsInitDefaults - so both paths agree. A player's own
|
|
50
|
+
* customized_birth_options.txt (or an explicit birth choice) still overrides
|
|
51
|
+
* it, exactly as it would any other option.
|
|
52
|
+
*/
|
|
53
|
+
export const DEFAULT_OVERRIDES = {
|
|
54
|
+
birth_no_selling: false,
|
|
55
|
+
};
|
|
41
56
|
/** The set of option names, and the birth subset, derived once from the table. */
|
|
42
57
|
const ALL_NAMES = OPTION_ENTRIES.map((e) => e.name);
|
|
43
58
|
const BIRTH_NAMES = new Set(OPTION_ENTRIES.filter((e) => e.type === "BIRTH").map((e) => e.name));
|
|
@@ -75,6 +90,12 @@ export class OptionState {
|
|
|
75
90
|
for (const entry of OPTION_ENTRIES) {
|
|
76
91
|
this.values[entry.name] = entry.normal;
|
|
77
92
|
}
|
|
93
|
+
/* Apply the one deliberate default divergence (see DEFAULT_OVERRIDES),
|
|
94
|
+
* before any preset chosen at creation so a birth choice still wins. */
|
|
95
|
+
for (const [name, value] of Object.entries(DEFAULT_OVERRIDES)) {
|
|
96
|
+
if (value !== undefined)
|
|
97
|
+
this.values[name] = value;
|
|
98
|
+
}
|
|
78
99
|
/* Apply the birth/interface presets chosen at creation. Cheat presets
|
|
79
100
|
* still couple to their score twins (as option_set would). */
|
|
80
101
|
for (const [name, value] of Object.entries(init.overrides ?? {})) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/player/options.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/player/options.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAKzD,4EAA4E;AAC5E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEvC,yEAAyE;AACzE,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEvC;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAKxC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAyC;IACrE,gBAAgB,EAAE,KAAK;CACxB,CAAC;AA4BF,kFAAkF;AAClF,MAAM,SAAS,GAAsB,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACvE,MAAM,WAAW,GAAwB,IAAI,GAAG,CAC9C,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CACpE,CAAC;AACF,MAAM,WAAW,GAAwB,IAAI,GAAG,CAC9C,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CACpE,CAAC;AACF,MAAM,WAAW,GAAwB,IAAI,GAAG,CAC9C,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CACpE,CAAC;AACF,oDAAoD;AACpD,SAAS,SAAS,CAAC,CAAS;IAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,qBAAqB,CAAC;IACtD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AACD,gFAAgF;AAChF,SAAS,SAAS,CAAC,CAAS;IAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,WAAW;IACL,MAAM,GAAiB,EAAE,CAAC;IAC3C,oCAAoC;IACpC,YAAY,CAAS;IACrB,4BAA4B;IAC5B,WAAW,CAAS;IACpB,4CAA4C;IAC5C,aAAa,CAAS;IACtB,6EAA6E;IAC5D,KAAK,CAAe;IAErC,YAAY,OAAmB,EAAE;QAC/B,uEAAuE;QACvE,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QACzC,CAAC;QACD;gFACwE;QACxE,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC9D,IAAI,KAAK,KAAK,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACrD,CAAC;QACD;sEAC8D;QAC9D,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;YACjE,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAS;YAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,IAAI,qBAAqB,CAAC,CAAC;QAC1E,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,oBAAoB,CAAC;QAC5D,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,IAAI,sBAAsB,CAAC,CAAC;QAC7E,0EAA0E;QAC1E,MAAM,KAAK,GAAiB,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,WAAW;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;QACzE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,2EAA2E;IACnE,QAAQ,CAAC,IAAY,EAAE,KAAc;QAC3C,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO;QACnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAC1B,yEAAyE;QACzE,IAAI,KAAK,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB;YACxE,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACpD,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,GAAG,CAAC,IAAyB;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;IACpC,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,IAAyB,EAAE,KAAc;QAC3C,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QACzC,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC,CAAC,qBAAqB;QAC9D,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qDAAqD;IACrD,OAAO,CAAC,IAAY;QAClB,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,qDAAqD;IACrD,OAAO,CAAC,IAAY;QAClB,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,qDAAqD;IACrD,OAAO,CAAC,IAAY;QAClB,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,IAAyB;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,WAAW;QACT,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;QACrC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,+CAA+C;IAC/C,KAAK;QACH,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,iDAAiD;IACjD,QAAQ;QACN,OAAO;YACL,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;YAC1B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE;SACzB,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,IAAqB;QAClC,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;QAChC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM;gBAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAE,CAAC;QACnE,CAAC;QACD,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,IAAI,qBAAqB,CAAC,CAAC;QAC3E,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,oBAAoB,CAAC;QAC7D,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,IAAI,sBAAsB,CAAC,CAAC;QAC9E,yEAAyE;QACzE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;QACjE,CAAC;QACD,sEAAsE;QACtE,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE;YACpC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC9B,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,KAAK;SAClB,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
package/dist/version.d.ts
CHANGED
|
@@ -21,5 +21,5 @@ export declare const PARITY_BASELINE = "4.2.6";
|
|
|
21
21
|
* released tag is iterated takes a MINOR bump, because a published tag is pinned
|
|
22
22
|
* by digest in a catalogue and must never be moved.
|
|
23
23
|
*/
|
|
24
|
-
export declare const ENGINE_VERSION = "0.27.
|
|
24
|
+
export declare const ENGINE_VERSION = "0.27.2";
|
|
25
25
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -21,5 +21,5 @@ export const PARITY_BASELINE = "4.2.6";
|
|
|
21
21
|
* released tag is iterated takes a MINOR bump, because a published tag is pinned
|
|
22
22
|
* by digest in a catalogue and must never be moved.
|
|
23
23
|
*/
|
|
24
|
-
export const ENGINE_VERSION = "0.27.
|
|
24
|
+
export const ENGINE_VERSION = "0.27.2";
|
|
25
25
|
//# sourceMappingURL=version.js.map
|
package/package.json
CHANGED
|
@@ -56,7 +56,11 @@ import { OPTION_ENTRIES } from "../generated/options.js";
|
|
|
56
56
|
import { FileMode, FileType, HostDir } from "../host/io.js";
|
|
57
57
|
import type { HostIo } from "../host/io.js";
|
|
58
58
|
import { containsOnlySpaces } from "../parser.js";
|
|
59
|
-
import {
|
|
59
|
+
import {
|
|
60
|
+
DEFAULT_DELAY_FACTOR,
|
|
61
|
+
DEFAULT_HITPOINT_WARN,
|
|
62
|
+
DEFAULT_OVERRIDES,
|
|
63
|
+
} from "./options.js";
|
|
60
64
|
|
|
61
65
|
/**
|
|
62
66
|
* `struct player_options.opt[]` (player.h): every option's boolean value, keyed
|
|
@@ -334,6 +338,26 @@ export interface InitialOptions {
|
|
|
334
338
|
* because the files only carry booleans. And the two restore calls have their
|
|
335
339
|
* return values discarded: an unreadable customised file leaves the page on the
|
|
336
340
|
* table defaults and does not stop a character being made.
|
|
341
|
+
*
|
|
342
|
+
* One deliberate, documented divergence applies on top of the table defaults
|
|
343
|
+
* (DEFAULT_OVERRIDES; see docs/PARITY.md "Accepted: birth_no_selling defaults
|
|
344
|
+
* to off in core"), applied twice for one reason each:
|
|
345
|
+
*
|
|
346
|
+
* - BEFORE the restore calls, so a page with no customised file (parsed
|
|
347
|
+
* normally, or unreadable) keeps the override - `optionsRestoreCustom`
|
|
348
|
+
* leaves an unreadable file's page untouched, and a readable file's
|
|
349
|
+
* `parseCustomOptionsText` only overwrites names it actually finds a line
|
|
350
|
+
* for, so an override applied here survives both.
|
|
351
|
+
* - AFTER the restore calls, but only for a page whose file does not exist
|
|
352
|
+
* at all: that is the one case `optionsRestoreCustom` reaches
|
|
353
|
+
* `optionsRestoreMaintainer`, which - faithfully, as its own name says -
|
|
354
|
+
* resets every option on the page to the raw table `normal`, erasing the
|
|
355
|
+
* first application.
|
|
356
|
+
*
|
|
357
|
+
* A page whose file exists and sets the option explicitly always wins either
|
|
358
|
+
* way, because `optionsSaveCustomText` always lists every option on its page,
|
|
359
|
+
* so an explicit line and this override cannot both apply silently - the
|
|
360
|
+
* explicit line runs last.
|
|
337
361
|
*/
|
|
338
362
|
export function optionsInitDefaults(
|
|
339
363
|
io: HostIo,
|
|
@@ -341,8 +365,22 @@ export function optionsInitDefaults(
|
|
|
341
365
|
): InitialOptions {
|
|
342
366
|
const opts: OptionOpts = {};
|
|
343
367
|
for (const entry of OPTION_ENTRIES) opts[entry.name] = entry.normal;
|
|
368
|
+
const applyOverrides = (onlyIfPageFileMissing: boolean): void => {
|
|
369
|
+
for (const [name, value] of Object.entries(DEFAULT_OVERRIDES)) {
|
|
370
|
+
if (value === undefined) continue;
|
|
371
|
+
const entry = OPTION_ENTRIES.find((e) => e.name === name);
|
|
372
|
+
if (!entry) continue;
|
|
373
|
+
const pageFileMissing = !io.exists(
|
|
374
|
+
HostDir.USER,
|
|
375
|
+
customOptionsFileName(entry.type),
|
|
376
|
+
);
|
|
377
|
+
if (!onlyIfPageFileMissing || pageFileMissing) opts[name] = value;
|
|
378
|
+
}
|
|
379
|
+
};
|
|
380
|
+
applyOverrides(false);
|
|
344
381
|
optionsRestoreCustom(io, opts, "BIRTH", msg);
|
|
345
382
|
optionsRestoreCustom(io, opts, "INTERFACE", msg);
|
|
383
|
+
applyOverrides(true);
|
|
346
384
|
return {
|
|
347
385
|
opts,
|
|
348
386
|
delayFactor: DEFAULT_DELAY_FACTOR,
|
package/src/player/options.ts
CHANGED
|
@@ -13,7 +13,9 @@
|
|
|
13
13
|
*
|
|
14
14
|
* Faithful notes:
|
|
15
15
|
* - Defaults are read straight from OPTION_ENTRIES (do not hand-copy the
|
|
16
|
-
* table): each option is seeded from its `normal` field
|
|
16
|
+
* table): each option is seeded from its `normal` field, with exactly one
|
|
17
|
+
* deliberate, documented divergence applied on top (DEFAULT_OVERRIDES; see
|
|
18
|
+
* docs/PARITY.md "Accepted: birth_no_selling defaults to off in core").
|
|
17
19
|
* - hitpoint_warn is the 0..9 integer op_ptr->hitpoint_warn (DEFAULT 3), kept
|
|
18
20
|
* alongside the booleans. delay_factor (default 40) and lazymove_delay
|
|
19
21
|
* (player->opts.lazymove_delay, default 0, uint8) are carried too.
|
|
@@ -49,6 +51,20 @@ export const DEFAULT_LAZYMOVE_DELAY = 0;
|
|
|
49
51
|
/** A plain map of option name -> boolean value (the serialized form). */
|
|
50
52
|
export type OptionValues = Record<string, boolean>;
|
|
51
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Deliberate, documented divergence from OPTION_ENTRIES' own `normal` field
|
|
56
|
+
* (see docs/PARITY.md "Accepted: birth_no_selling defaults to off in core").
|
|
57
|
+
* list-options.h ships `birth_no_selling` ON; core ships it OFF, so a new
|
|
58
|
+
* character starts able to sell to stores without visiting the birth options
|
|
59
|
+
* page first. Applied wherever a default option set is built - here and in
|
|
60
|
+
* options-file.ts's optionsInitDefaults - so both paths agree. A player's own
|
|
61
|
+
* customized_birth_options.txt (or an explicit birth choice) still overrides
|
|
62
|
+
* it, exactly as it would any other option.
|
|
63
|
+
*/
|
|
64
|
+
export const DEFAULT_OVERRIDES: Partial<Record<OptionName, boolean>> = {
|
|
65
|
+
birth_no_selling: false,
|
|
66
|
+
};
|
|
67
|
+
|
|
52
68
|
/** The serialized OptionState (save format). */
|
|
53
69
|
export interface OptionStateData {
|
|
54
70
|
/** Every option's live boolean value. */
|
|
@@ -118,6 +134,11 @@ export class OptionState {
|
|
|
118
134
|
for (const entry of OPTION_ENTRIES) {
|
|
119
135
|
this.values[entry.name] = entry.normal;
|
|
120
136
|
}
|
|
137
|
+
/* Apply the one deliberate default divergence (see DEFAULT_OVERRIDES),
|
|
138
|
+
* before any preset chosen at creation so a birth choice still wins. */
|
|
139
|
+
for (const [name, value] of Object.entries(DEFAULT_OVERRIDES)) {
|
|
140
|
+
if (value !== undefined) this.values[name] = value;
|
|
141
|
+
}
|
|
121
142
|
/* Apply the birth/interface presets chosen at creation. Cheat presets
|
|
122
143
|
* still couple to their score twins (as option_set would). */
|
|
123
144
|
for (const [name, value] of Object.entries(init.overrides ?? {})) {
|
package/src/version.ts
CHANGED
|
@@ -23,4 +23,4 @@ export const PARITY_BASELINE = "4.2.6";
|
|
|
23
23
|
* released tag is iterated takes a MINOR bump, because a published tag is pinned
|
|
24
24
|
* by digest in a catalogue and must never be moved.
|
|
25
25
|
*/
|
|
26
|
-
export const ENGINE_VERSION = "0.27.
|
|
26
|
+
export const ENGINE_VERSION = "0.27.2";
|