@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 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.0 4.2.6
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.0";
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;AAI5C;;;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;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,MAAM,EACV,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAC9B,cAAc,CAUhB"}
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":"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"}
1
+ {"version":3,"file":"options-file.js","sourceRoot":"","sources":["../../src/player/options-file.ts"],"names":[],"mappings":"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"}
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;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,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;IAoBjC,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"}
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"}
@@ -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":"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"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/player/options.ts"],"names":[],"mappings":"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"}
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.0";
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.0";
24
+ export const ENGINE_VERSION = "0.27.2";
25
25
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpgm-tools/neo-angband-core",
3
- "version": "0.27.0",
3
+ "version": "0.27.2",
4
4
  "description": "Headless Neo Angband game engine: rules, world, entities, effects, generation",
5
5
  "license": "GPL-2.0-only",
6
6
  "author": "neostryder (RPGM Tools)",
@@ -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 { DEFAULT_DELAY_FACTOR, DEFAULT_HITPOINT_WARN } from "./options.js";
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,
@@ -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.0";
26
+ export const ENGINE_VERSION = "0.27.2";