@rpgm-tools/neo-angband-core 0.18.0 → 0.19.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/README.md +1 -1
- package/dist/agent/perceive.d.ts.map +1 -1
- package/dist/agent/perceive.js +2 -2
- package/dist/agent/perceive.js.map +1 -1
- package/dist/combat/blow-vectors.d.ts +78 -0
- package/dist/combat/blow-vectors.d.ts.map +1 -0
- package/dist/combat/blow-vectors.fixtures.d.ts +19 -0
- package/dist/combat/blow-vectors.fixtures.d.ts.map +1 -0
- package/dist/combat/blow-vectors.fixtures.js +81 -0
- package/dist/combat/blow-vectors.fixtures.js.map +1 -0
- package/dist/combat/blow-vectors.js +195 -0
- package/dist/combat/blow-vectors.js.map +1 -0
- package/dist/combat/brand-slay.d.ts +22 -9
- package/dist/combat/brand-slay.d.ts.map +1 -1
- package/dist/combat/brand-slay.js +37 -10
- package/dist/combat/brand-slay.js.map +1 -1
- package/dist/combat/index.d.ts +1 -1
- package/dist/combat/index.js +1 -1
- package/dist/combat/melee.d.ts +25 -13
- package/dist/combat/melee.d.ts.map +1 -1
- package/dist/combat/melee.js +23 -19
- package/dist/combat/melee.js.map +1 -1
- package/dist/combat/mon-melee.d.ts +166 -7
- package/dist/combat/mon-melee.d.ts.map +1 -1
- package/dist/combat/mon-melee.js +469 -338
- package/dist/combat/mon-melee.js.map +1 -1
- package/dist/combat/ranged.d.ts +15 -13
- package/dist/combat/ranged.d.ts.map +1 -1
- package/dist/combat/ranged.js +31 -29
- package/dist/combat/ranged.js.map +1 -1
- package/dist/constants.d.ts +14 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +14 -0
- package/dist/constants.js.map +1 -1
- package/dist/datafile.d.ts +48 -0
- package/dist/datafile.d.ts.map +1 -0
- package/dist/datafile.js +102 -0
- package/dist/datafile.js.map +1 -0
- package/dist/effects/effect-info-registry.d.ts +237 -0
- package/dist/effects/effect-info-registry.d.ts.map +1 -0
- package/dist/effects/effect-info-registry.js +138 -0
- package/dist/effects/effect-info-registry.js.map +1 -0
- package/dist/effects/effect-info-vectors.d.ts +92 -0
- package/dist/effects/effect-info-vectors.d.ts.map +1 -0
- package/dist/effects/effect-info-vectors.fixtures.d.ts +18 -0
- package/dist/effects/effect-info-vectors.fixtures.d.ts.map +1 -0
- package/dist/effects/effect-info-vectors.fixtures.js +51 -0
- package/dist/effects/effect-info-vectors.fixtures.js.map +1 -0
- package/dist/effects/effect-info-vectors.js +315 -0
- package/dist/effects/effect-info-vectors.js.map +1 -0
- package/dist/effects/effect-info.d.ts +5 -1
- package/dist/effects/effect-info.d.ts.map +1 -1
- package/dist/effects/effect-info.js +245 -143
- package/dist/effects/effect-info.js.map +1 -1
- package/dist/effects/effect.d.ts +4 -3
- package/dist/effects/effect.d.ts.map +1 -1
- package/dist/effects/effect.js +88 -70
- package/dist/effects/effect.js.map +1 -1
- package/dist/effects/handlers.d.ts +1 -1
- package/dist/effects/handlers.d.ts.map +1 -1
- package/dist/effects/handlers.js +5 -2
- package/dist/effects/handlers.js.map +1 -1
- package/dist/effects/interpreter.d.ts +11 -0
- package/dist/effects/interpreter.d.ts.map +1 -1
- package/dist/effects/interpreter.js +13 -0
- package/dist/effects/interpreter.js.map +1 -1
- package/dist/game/cave-cmd.d.ts +9 -5
- package/dist/game/cave-cmd.d.ts.map +1 -1
- package/dist/game/cave-cmd.js +56 -11
- package/dist/game/cave-cmd.js.map +1 -1
- package/dist/game/cave-square.d.ts +42 -0
- package/dist/game/cave-square.d.ts.map +1 -0
- package/dist/game/cave-square.js +73 -0
- package/dist/game/cave-square.js.map +1 -0
- package/dist/game/char-sheet.d.ts +12 -8
- package/dist/game/char-sheet.d.ts.map +1 -1
- package/dist/game/char-sheet.js +41 -8
- package/dist/game/char-sheet.js.map +1 -1
- package/dist/game/chest.d.ts +2 -3
- package/dist/game/chest.d.ts.map +1 -1
- package/dist/game/chest.js +17 -6
- package/dist/game/chest.js.map +1 -1
- package/dist/game/context.d.ts +213 -22
- package/dist/game/context.d.ts.map +1 -1
- package/dist/game/context.js +109 -17
- package/dist/game/context.js.map +1 -1
- package/dist/game/describe.d.ts +13 -0
- package/dist/game/describe.d.ts.map +1 -1
- package/dist/game/describe.js +32 -4
- package/dist/game/describe.js.map +1 -1
- package/dist/game/display.d.ts +97 -8
- package/dist/game/display.d.ts.map +1 -1
- package/dist/game/display.js +157 -13
- package/dist/game/display.js.map +1 -1
- package/dist/game/dump-level.d.ts.map +1 -1
- package/dist/game/dump-level.js +3 -2
- package/dist/game/dump-level.js.map +1 -1
- package/dist/game/effect-attack.d.ts.map +1 -1
- package/dist/game/effect-attack.js +36 -27
- package/dist/game/effect-attack.js.map +1 -1
- package/dist/game/effect-detect.d.ts +4 -4
- package/dist/game/effect-detect.d.ts.map +1 -1
- package/dist/game/effect-detect.js +42 -9
- package/dist/game/effect-detect.js.map +1 -1
- package/dist/game/effect-env.d.ts +7 -1
- package/dist/game/effect-env.d.ts.map +1 -1
- package/dist/game/effect-env.js +1 -0
- package/dist/game/effect-env.js.map +1 -1
- package/dist/game/effect-general.d.ts +5 -3
- package/dist/game/effect-general.d.ts.map +1 -1
- package/dist/game/effect-general.js +94 -43
- package/dist/game/effect-general.js.map +1 -1
- package/dist/game/effect-item.d.ts +2 -1
- package/dist/game/effect-item.d.ts.map +1 -1
- package/dist/game/effect-item.js +136 -82
- package/dist/game/effect-item.js.map +1 -1
- package/dist/game/effect-melee.d.ts +10 -4
- package/dist/game/effect-melee.d.ts.map +1 -1
- package/dist/game/effect-melee.js +44 -19
- package/dist/game/effect-melee.js.map +1 -1
- package/dist/game/effect-monster.d.ts +26 -4
- package/dist/game/effect-monster.d.ts.map +1 -1
- package/dist/game/effect-monster.js +52 -9
- package/dist/game/effect-monster.js.map +1 -1
- package/dist/game/effect-teleport.d.ts +58 -19
- package/dist/game/effect-teleport.d.ts.map +1 -1
- package/dist/game/effect-teleport.js +143 -27
- package/dist/game/effect-teleport.js.map +1 -1
- package/dist/game/effect-terrain.d.ts +1 -3
- package/dist/game/effect-terrain.d.ts.map +1 -1
- package/dist/game/effect-terrain.js +38 -22
- package/dist/game/effect-terrain.js.map +1 -1
- package/dist/game/equip-cmp.d.ts.map +1 -1
- package/dist/game/equip-cmp.js +10 -7
- package/dist/game/equip-cmp.js.map +1 -1
- package/dist/game/floor.d.ts +16 -4
- package/dist/game/floor.d.ts.map +1 -1
- package/dist/game/floor.js +22 -4
- package/dist/game/floor.js.map +1 -1
- package/dist/game/gear.d.ts +101 -13
- package/dist/game/gear.d.ts.map +1 -1
- package/dist/game/gear.js +183 -24
- package/dist/game/gear.js.map +1 -1
- package/dist/game/harness.d.ts +2 -1
- package/dist/game/harness.d.ts.map +1 -1
- package/dist/game/harness.js +12 -1
- package/dist/game/harness.js.map +1 -1
- package/dist/game/ignore-cmd.d.ts +47 -8
- package/dist/game/ignore-cmd.d.ts.map +1 -1
- package/dist/game/ignore-cmd.js +76 -8
- package/dist/game/ignore-cmd.js.map +1 -1
- package/dist/game/known.d.ts +223 -34
- package/dist/game/known.d.ts.map +1 -1
- package/dist/game/known.js +301 -67
- package/dist/game/known.js.map +1 -1
- package/dist/game/loop.d.ts +4 -3
- package/dist/game/loop.d.ts.map +1 -1
- package/dist/game/loop.js +49 -29
- package/dist/game/loop.js.map +1 -1
- package/dist/game/lore-color.d.ts.map +1 -1
- package/dist/game/lore-color.js +13 -1
- package/dist/game/lore-color.js.map +1 -1
- package/dist/game/mon-cast.d.ts +3 -4
- package/dist/game/mon-cast.d.ts.map +1 -1
- package/dist/game/mon-cast.js +30 -2
- package/dist/game/mon-cast.js.map +1 -1
- package/dist/game/mon-cmd.d.ts +4 -5
- package/dist/game/mon-cmd.d.ts.map +1 -1
- package/dist/game/mon-cmd.js +80 -27
- package/dist/game/mon-cmd.js.map +1 -1
- package/dist/game/mon-death.d.ts +8 -4
- package/dist/game/mon-death.d.ts.map +1 -1
- package/dist/game/mon-death.js +6 -9
- package/dist/game/mon-death.js.map +1 -1
- package/dist/game/mon-group.d.ts +9 -5
- package/dist/game/mon-group.d.ts.map +1 -1
- package/dist/game/mon-group.js +9 -5
- package/dist/game/mon-group.js.map +1 -1
- package/dist/game/mon-message.d.ts +90 -40
- package/dist/game/mon-message.d.ts.map +1 -1
- package/dist/game/mon-message.js +267 -59
- package/dist/game/mon-message.js.map +1 -1
- package/dist/game/mon-place.d.ts +11 -1
- package/dist/game/mon-place.d.ts.map +1 -1
- package/dist/game/mon-place.js +15 -3
- package/dist/game/mon-place.js.map +1 -1
- package/dist/game/mon-ranged.d.ts +2 -1
- package/dist/game/mon-ranged.d.ts.map +1 -1
- package/dist/game/mon-ranged.js +11 -5
- package/dist/game/mon-ranged.js.map +1 -1
- package/dist/game/mon-side.d.ts +3 -2
- package/dist/game/mon-side.d.ts.map +1 -1
- package/dist/game/mon-side.js +15 -14
- package/dist/game/mon-side.js.map +1 -1
- package/dist/game/monster-turn.d.ts +20 -10
- package/dist/game/monster-turn.d.ts.map +1 -1
- package/dist/game/monster-turn.js +110 -83
- package/dist/game/monster-turn.js.map +1 -1
- package/dist/game/notice.d.ts +36 -0
- package/dist/game/notice.d.ts.map +1 -0
- package/dist/game/notice.js +79 -0
- package/dist/game/notice.js.map +1 -0
- package/dist/game/obj-cmd.d.ts +14 -3
- package/dist/game/obj-cmd.d.ts.map +1 -1
- package/dist/game/obj-cmd.js +109 -35
- package/dist/game/obj-cmd.js.map +1 -1
- package/dist/game/obj-list.d.ts +13 -2
- package/dist/game/obj-list.d.ts.map +1 -1
- package/dist/game/obj-list.js +42 -27
- package/dist/game/obj-list.js.map +1 -1
- package/dist/game/object-inspect.d.ts +9 -0
- package/dist/game/object-inspect.d.ts.map +1 -1
- package/dist/game/object-inspect.js +4 -0
- package/dist/game/object-inspect.js.map +1 -1
- package/dist/game/pickup.d.ts +0 -2
- package/dist/game/pickup.d.ts.map +1 -1
- package/dist/game/pickup.js +18 -3
- package/dist/game/pickup.js.map +1 -1
- package/dist/game/player-side-vectors.d.ts +174 -0
- package/dist/game/player-side-vectors.d.ts.map +1 -0
- package/dist/game/player-side-vectors.fixtures.d.ts +33 -0
- package/dist/game/player-side-vectors.fixtures.d.ts.map +1 -0
- package/dist/game/player-side-vectors.fixtures.js +191 -0
- package/dist/game/player-side-vectors.fixtures.js.map +1 -0
- package/dist/game/player-side-vectors.js +292 -0
- package/dist/game/player-side-vectors.js.map +1 -0
- package/dist/game/player-side.d.ts +129 -1
- package/dist/game/player-side.d.ts.map +1 -1
- package/dist/game/player-side.js +520 -338
- package/dist/game/player-side.js.map +1 -1
- package/dist/game/player-turn.d.ts +26 -7
- package/dist/game/player-turn.d.ts.map +1 -1
- package/dist/game/player-turn.js +180 -33
- package/dist/game/player-turn.js.map +1 -1
- package/dist/game/poly.d.ts +38 -0
- package/dist/game/poly.d.ts.map +1 -0
- package/dist/game/poly.js +82 -0
- package/dist/game/poly.js.map +1 -0
- package/dist/game/project-cast.d.ts +20 -3
- package/dist/game/project-cast.d.ts.map +1 -1
- package/dist/game/project-cast.js +49 -6
- package/dist/game/project-cast.js.map +1 -1
- package/dist/game/project-feat-vectors.d.ts +124 -0
- package/dist/game/project-feat-vectors.d.ts.map +1 -0
- package/dist/game/project-feat-vectors.fixtures.d.ts +13 -0
- package/dist/game/project-feat-vectors.fixtures.d.ts.map +1 -0
- package/dist/game/project-feat-vectors.fixtures.js +94 -0
- package/dist/game/project-feat-vectors.fixtures.js.map +1 -0
- package/dist/game/project-feat-vectors.js +229 -0
- package/dist/game/project-feat-vectors.js.map +1 -0
- package/dist/game/project-feat.d.ts +53 -1
- package/dist/game/project-feat.d.ts.map +1 -1
- package/dist/game/project-feat.js +374 -247
- package/dist/game/project-feat.js.map +1 -1
- package/dist/game/project-monster.d.ts +21 -8
- package/dist/game/project-monster.d.ts.map +1 -1
- package/dist/game/project-monster.js +45 -21
- package/dist/game/project-monster.js.map +1 -1
- package/dist/game/project-obj.d.ts +62 -0
- package/dist/game/project-obj.d.ts.map +1 -1
- package/dist/game/project-obj.js +72 -41
- package/dist/game/project-obj.js.map +1 -1
- package/dist/game/project-player.d.ts +8 -0
- package/dist/game/project-player.d.ts.map +1 -1
- package/dist/game/project-player.js.map +1 -1
- package/dist/game/projection-handlers.d.ts +81 -0
- package/dist/game/projection-handlers.d.ts.map +1 -0
- package/dist/game/projection-handlers.js +93 -0
- package/dist/game/projection-handlers.js.map +1 -0
- package/dist/game/quest.d.ts +23 -0
- package/dist/game/quest.d.ts.map +1 -1
- package/dist/game/quest.js +42 -0
- package/dist/game/quest.js.map +1 -1
- package/dist/game/ranged-cmd.d.ts +13 -2
- package/dist/game/ranged-cmd.d.ts.map +1 -1
- package/dist/game/ranged-cmd.js +32 -15
- package/dist/game/ranged-cmd.js.map +1 -1
- package/dist/game/repeat.d.ts +78 -0
- package/dist/game/repeat.d.ts.map +1 -0
- package/dist/game/repeat.js +88 -0
- package/dist/game/repeat.js.map +1 -0
- package/dist/game/shape-inspect.d.ts +74 -0
- package/dist/game/shape-inspect.d.ts.map +1 -0
- package/dist/game/shape-inspect.js +114 -0
- package/dist/game/shape-inspect.js.map +1 -0
- package/dist/game/spell-cmd.d.ts +15 -4
- package/dist/game/spell-cmd.d.ts.map +1 -1
- package/dist/game/spell-cmd.js +35 -6
- package/dist/game/spell-cmd.js.map +1 -1
- package/dist/game/spoil.d.ts.map +1 -1
- package/dist/game/spoil.js +89 -40
- package/dist/game/spoil.js.map +1 -1
- package/dist/game/steal.d.ts +3 -3
- package/dist/game/steal.d.ts.map +1 -1
- package/dist/game/steal.js +9 -4
- package/dist/game/steal.js.map +1 -1
- package/dist/game/target-loop.d.ts +10 -4
- package/dist/game/target-loop.d.ts.map +1 -1
- package/dist/game/target-loop.js +14 -8
- package/dist/game/target-loop.js.map +1 -1
- package/dist/game/target.d.ts +4 -4
- package/dist/game/target.d.ts.map +1 -1
- package/dist/game/target.js +19 -8
- package/dist/game/target.js.map +1 -1
- package/dist/game/ui-entry.d.ts +63 -4
- package/dist/game/ui-entry.d.ts.map +1 -1
- package/dist/game/ui-entry.js +151 -23
- package/dist/game/ui-entry.js.map +1 -1
- package/dist/game/wizard.d.ts +23 -5
- package/dist/game/wizard.d.ts.map +1 -1
- package/dist/game/wizard.js +93 -11
- package/dist/game/wizard.js.map +1 -1
- package/dist/game/world.d.ts.map +1 -1
- package/dist/game/world.js +6 -0
- package/dist/game/world.js.map +1 -1
- package/dist/gen/cave.d.ts +49 -8
- package/dist/gen/cave.d.ts.map +1 -1
- package/dist/gen/cave.js +200 -28
- package/dist/gen/cave.js.map +1 -1
- package/dist/gen/generate.d.ts +54 -9
- package/dist/gen/generate.d.ts.map +1 -1
- package/dist/gen/generate.js +55 -8
- package/dist/gen/generate.js.map +1 -1
- package/dist/gen/glyph-vectors.d.ts +109 -0
- package/dist/gen/glyph-vectors.d.ts.map +1 -0
- package/dist/gen/glyph-vectors.fixtures.d.ts +18 -0
- package/dist/gen/glyph-vectors.fixtures.d.ts.map +1 -0
- package/dist/gen/glyph-vectors.fixtures.js +94 -0
- package/dist/gen/glyph-vectors.fixtures.js.map +1 -0
- package/dist/gen/glyph-vectors.js +218 -0
- package/dist/gen/glyph-vectors.js.map +1 -0
- package/dist/gen/glyph.d.ts +104 -0
- package/dist/gen/glyph.d.ts.map +1 -0
- package/dist/gen/glyph.js +72 -0
- package/dist/gen/glyph.js.map +1 -0
- package/dist/gen/room.d.ts +26 -2
- package/dist/gen/room.d.ts.map +1 -1
- package/dist/gen/room.js +414 -264
- package/dist/gen/room.js.map +1 -1
- package/dist/gen/util.d.ts +11 -2
- package/dist/gen/util.d.ts.map +1 -1
- package/dist/gen/util.js +31 -9
- package/dist/gen/util.js.map +1 -1
- package/dist/i18n/i18n.d.ts +207 -0
- package/dist/i18n/i18n.d.ts.map +1 -0
- package/dist/i18n/i18n.js +405 -0
- package/dist/i18n/i18n.js.map +1 -0
- package/dist/i18n/text.d.ts +62 -0
- package/dist/i18n/text.d.ts.map +1 -0
- package/dist/i18n/text.js +120 -0
- package/dist/i18n/text.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -1
- package/dist/mod/extension.d.ts +115 -0
- package/dist/mod/extension.d.ts.map +1 -0
- package/dist/mod/extension.js +85 -0
- package/dist/mod/extension.js.map +1 -0
- package/dist/mod/ids.d.ts +10 -0
- package/dist/mod/ids.d.ts.map +1 -1
- package/dist/mod/ids.js +90 -21
- package/dist/mod/ids.js.map +1 -1
- package/dist/mod/record-keys.d.ts +43 -0
- package/dist/mod/record-keys.d.ts.map +1 -0
- package/dist/mod/record-keys.js +100 -0
- package/dist/mod/record-keys.js.map +1 -0
- package/dist/mod/registry-host.d.ts +472 -0
- package/dist/mod/registry-host.d.ts.map +1 -1
- package/dist/mod/registry-host.js +313 -0
- package/dist/mod/registry-host.js.map +1 -1
- package/dist/mod/save-blocks.d.ts +1 -1
- package/dist/mon/bind.d.ts.map +1 -1
- package/dist/mon/bind.js +6 -3
- package/dist/mon/bind.js.map +1 -1
- package/dist/mon/knowledge-groups.d.ts +0 -6
- package/dist/mon/knowledge-groups.d.ts.map +1 -1
- package/dist/mon/knowledge-groups.js +12 -8
- package/dist/mon/knowledge-groups.js.map +1 -1
- package/dist/mon/lore-describe.d.ts +46 -10
- package/dist/mon/lore-describe.d.ts.map +1 -1
- package/dist/mon/lore-describe.js +74 -22
- package/dist/mon/lore-describe.js.map +1 -1
- package/dist/mon/lore-file.d.ts +126 -0
- package/dist/mon/lore-file.d.ts.map +1 -0
- package/dist/mon/lore-file.js +291 -0
- package/dist/mon/lore-file.js.map +1 -0
- package/dist/mon/lore.d.ts +9 -3
- package/dist/mon/lore.d.ts.map +1 -1
- package/dist/mon/lore.js +9 -3
- package/dist/mon/lore.js.map +1 -1
- package/dist/mon/make.d.ts +4 -2
- package/dist/mon/make.d.ts.map +1 -1
- package/dist/mon/make.js +4 -2
- package/dist/mon/make.js.map +1 -1
- package/dist/mon/monster.d.ts +1 -1
- package/dist/mon/monster.js +1 -1
- package/dist/mon/predicate.d.ts +14 -9
- package/dist/mon/predicate.d.ts.map +1 -1
- package/dist/mon/predicate.js +14 -9
- package/dist/mon/predicate.js.map +1 -1
- package/dist/mon/project-mon.d.ts +16 -3
- package/dist/mon/project-mon.d.ts.map +1 -1
- package/dist/mon/project-mon.js +14 -5
- package/dist/mon/project-mon.js.map +1 -1
- package/dist/mon/steal.d.ts +31 -4
- package/dist/mon/steal.d.ts.map +1 -1
- package/dist/mon/steal.js +20 -7
- package/dist/mon/steal.js.map +1 -1
- package/dist/mon/take-hit.d.ts +8 -3
- package/dist/mon/take-hit.d.ts.map +1 -1
- package/dist/mon/take-hit.js +8 -3
- package/dist/mon/take-hit.js.map +1 -1
- package/dist/mon/timed.d.ts +15 -9
- package/dist/mon/timed.d.ts.map +1 -1
- package/dist/mon/timed.js +13 -8
- package/dist/mon/timed.js.map +1 -1
- package/dist/mon/types.d.ts +11 -4
- package/dist/mon/types.d.ts.map +1 -1
- package/dist/mon/types.js.map +1 -1
- package/dist/msg.d.ts +40 -1
- package/dist/msg.d.ts.map +1 -1
- package/dist/msg.js +42 -1
- package/dist/msg.js.map +1 -1
- package/dist/obj/artifact-fake.d.ts +46 -14
- package/dist/obj/artifact-fake.d.ts.map +1 -1
- package/dist/obj/artifact-fake.js +46 -17
- package/dist/obj/artifact-fake.js.map +1 -1
- package/dist/obj/bind.d.ts +23 -0
- package/dist/obj/bind.d.ts.map +1 -1
- package/dist/obj/bind.js +49 -9
- package/dist/obj/bind.js.map +1 -1
- package/dist/obj/desc-vectors.d.ts +68 -0
- package/dist/obj/desc-vectors.d.ts.map +1 -0
- package/dist/obj/desc-vectors.fixtures.d.ts +12 -0
- package/dist/obj/desc-vectors.fixtures.d.ts.map +1 -0
- package/dist/obj/desc-vectors.fixtures.js +95 -0
- package/dist/obj/desc-vectors.fixtures.js.map +1 -0
- package/dist/obj/desc-vectors.js +86 -0
- package/dist/obj/desc-vectors.js.map +1 -0
- package/dist/obj/desc.d.ts +17 -2
- package/dist/obj/desc.d.ts.map +1 -1
- package/dist/obj/desc.js +129 -54
- package/dist/obj/desc.js.map +1 -1
- package/dist/obj/effects-info.d.ts.map +1 -1
- package/dist/obj/effects-info.js +87 -58
- package/dist/obj/effects-info.js.map +1 -1
- package/dist/obj/fake-object.d.ts +70 -0
- package/dist/obj/fake-object.d.ts.map +1 -0
- package/dist/obj/fake-object.js +104 -0
- package/dist/obj/fake-object.js.map +1 -0
- package/dist/obj/ignore.d.ts +55 -12
- package/dist/obj/ignore.d.ts.map +1 -1
- package/dist/obj/ignore.js +68 -31
- package/dist/obj/ignore.js.map +1 -1
- package/dist/obj/knowledge.d.ts +46 -3
- package/dist/obj/knowledge.d.ts.map +1 -1
- package/dist/obj/knowledge.js +169 -151
- package/dist/obj/knowledge.js.map +1 -1
- package/dist/obj/known-object.d.ts +68 -8
- package/dist/obj/known-object.d.ts.map +1 -1
- package/dist/obj/known-object.js +90 -10
- package/dist/obj/known-object.js.map +1 -1
- package/dist/obj/make.d.ts +15 -4
- package/dist/obj/make.d.ts.map +1 -1
- package/dist/obj/make.js +49 -27
- package/dist/obj/make.js.map +1 -1
- package/dist/obj/object-info.d.ts +10 -0
- package/dist/obj/object-info.d.ts.map +1 -1
- package/dist/obj/object-info.js +93 -7
- package/dist/obj/object-info.js.map +1 -1
- package/dist/obj/object.d.ts +42 -4
- package/dist/obj/object.d.ts.map +1 -1
- package/dist/obj/object.js +362 -147
- package/dist/obj/object.js.map +1 -1
- package/dist/obj/power.d.ts +23 -4
- package/dist/obj/power.d.ts.map +1 -1
- package/dist/obj/power.js +231 -65
- package/dist/obj/power.js.map +1 -1
- package/dist/obj/randart-build.d.ts +27 -22
- package/dist/obj/randart-build.d.ts.map +1 -1
- package/dist/obj/randart-build.js +435 -357
- package/dist/obj/randart-build.js.map +1 -1
- package/dist/obj/randart-data.d.ts +62 -24
- package/dist/obj/randart-data.d.ts.map +1 -1
- package/dist/obj/randart-data.js +333 -189
- package/dist/obj/randart-data.js.map +1 -1
- package/dist/obj/randart-file.d.ts +21 -0
- package/dist/obj/randart-file.d.ts.map +1 -0
- package/dist/obj/randart-file.js +119 -0
- package/dist/obj/randart-file.js.map +1 -0
- package/dist/obj/randart-log.d.ts +63 -0
- package/dist/obj/randart-log.d.ts.map +1 -0
- package/dist/obj/randart-log.js +72 -0
- package/dist/obj/randart-log.js.map +1 -0
- package/dist/obj/randart-registry.d.ts +178 -0
- package/dist/obj/randart-registry.d.ts.map +1 -0
- package/dist/obj/randart-registry.js +140 -0
- package/dist/obj/randart-registry.js.map +1 -0
- package/dist/obj/randart-vectors.d.ts +97 -0
- package/dist/obj/randart-vectors.d.ts.map +1 -0
- package/dist/obj/randart-vectors.fixtures.d.ts +18 -0
- package/dist/obj/randart-vectors.fixtures.d.ts.map +1 -0
- package/dist/obj/randart-vectors.fixtures.js +50 -0
- package/dist/obj/randart-vectors.fixtures.js.map +1 -0
- package/dist/obj/randart-vectors.js +311 -0
- package/dist/obj/randart-vectors.js.map +1 -0
- package/dist/obj/randart.d.ts +53 -15
- package/dist/obj/randart.d.ts.map +1 -1
- package/dist/obj/randart.js +166 -44
- package/dist/obj/randart.js.map +1 -1
- package/dist/obj/rune-registry.d.ts +180 -0
- package/dist/obj/rune-registry.d.ts.map +1 -0
- package/dist/obj/rune-registry.js +161 -0
- package/dist/obj/rune-registry.js.map +1 -0
- package/dist/obj/rune-vectors.d.ts +99 -0
- package/dist/obj/rune-vectors.d.ts.map +1 -0
- package/dist/obj/rune-vectors.fixtures.d.ts +44 -0
- package/dist/obj/rune-vectors.fixtures.d.ts.map +1 -0
- package/dist/obj/rune-vectors.fixtures.js +125 -0
- package/dist/obj/rune-vectors.fixtures.js.map +1 -0
- package/dist/obj/rune-vectors.js +159 -0
- package/dist/obj/rune-vectors.js.map +1 -0
- package/dist/obj/tval-registry.d.ts +174 -0
- package/dist/obj/tval-registry.d.ts.map +1 -0
- package/dist/obj/tval-registry.js +151 -0
- package/dist/obj/tval-registry.js.map +1 -0
- package/dist/obj/tval-vectors.d.ts +85 -0
- package/dist/obj/tval-vectors.d.ts.map +1 -0
- package/dist/obj/tval-vectors.fixtures.d.ts +24 -0
- package/dist/obj/tval-vectors.fixtures.d.ts.map +1 -0
- package/dist/obj/tval-vectors.fixtures.js +41 -0
- package/dist/obj/tval-vectors.fixtures.js.map +1 -0
- package/dist/obj/tval-vectors.js +76 -0
- package/dist/obj/tval-vectors.js.map +1 -0
- package/dist/obj/types.d.ts +18 -7
- package/dist/obj/types.d.ts.map +1 -1
- package/dist/obj/types.js.map +1 -1
- package/dist/obj/value.d.ts.map +1 -1
- package/dist/obj/value.js +23 -20
- package/dist/obj/value.js.map +1 -1
- package/dist/parser.d.ts +116 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +205 -0
- package/dist/parser.js.map +1 -0
- package/dist/player/bind.d.ts.map +1 -1
- package/dist/player/bind.js +3 -2
- package/dist/player/bind.js.map +1 -1
- package/dist/player/birth.d.ts +2 -1
- package/dist/player/birth.d.ts.map +1 -1
- package/dist/player/birth.js +2 -1
- package/dist/player/birth.js.map +1 -1
- package/dist/player/calcs.d.ts +58 -23
- package/dist/player/calcs.d.ts.map +1 -1
- package/dist/player/calcs.js +93 -36
- package/dist/player/calcs.js.map +1 -1
- package/dist/player/death.d.ts +50 -0
- package/dist/player/death.d.ts.map +1 -0
- package/dist/player/death.js +46 -0
- package/dist/player/death.js.map +1 -0
- package/dist/player/options-file.d.ts +129 -0
- package/dist/player/options-file.d.ts.map +1 -0
- package/dist/player/options-file.js +309 -0
- package/dist/player/options-file.js.map +1 -0
- package/dist/player/options.d.ts +2 -1
- package/dist/player/options.d.ts.map +1 -1
- package/dist/player/options.js +2 -1
- package/dist/player/options.js.map +1 -1
- package/dist/player/player.d.ts +50 -3
- package/dist/player/player.d.ts.map +1 -1
- package/dist/player/player.js +10 -1
- package/dist/player/player.js.map +1 -1
- package/dist/player/shape-lore.d.ts +11 -7
- package/dist/player/shape-lore.d.ts.map +1 -1
- package/dist/player/shape-lore.js +24 -11
- package/dist/player/shape-lore.js.map +1 -1
- package/dist/player/timed.d.ts +5 -3
- package/dist/player/timed.d.ts.map +1 -1
- package/dist/player/timed.js +11 -2
- package/dist/player/timed.js.map +1 -1
- package/dist/player/types.d.ts +29 -4
- package/dist/player/types.d.ts.map +1 -1
- package/dist/player/types.js +24 -1
- package/dist/player/types.js.map +1 -1
- package/dist/session/boot.d.ts +26 -2
- package/dist/session/boot.d.ts.map +1 -1
- package/dist/session/boot.js +21 -2
- package/dist/session/boot.js.map +1 -1
- package/dist/session/game.d.ts +15 -0
- package/dist/session/game.d.ts.map +1 -1
- package/dist/session/game.js +616 -140
- package/dist/session/game.js.map +1 -1
- package/dist/session/save-migrate.d.ts.map +1 -1
- package/dist/session/save-migrate.js +76 -1
- package/dist/session/save-migrate.js.map +1 -1
- package/dist/session/save.d.ts +75 -12
- package/dist/session/save.d.ts.map +1 -1
- package/dist/session/save.js +177 -18
- package/dist/session/save.js.map +1 -1
- package/dist/store/bind.d.ts +1 -1
- package/dist/store/bind.d.ts.map +1 -1
- package/dist/store/bind.js +4 -3
- package/dist/store/bind.js.map +1 -1
- package/dist/store/mass-produce-vectors.d.ts +40 -0
- package/dist/store/mass-produce-vectors.d.ts.map +1 -0
- package/dist/store/mass-produce-vectors.fixtures.d.ts +13 -0
- package/dist/store/mass-produce-vectors.fixtures.d.ts.map +1 -0
- package/dist/store/mass-produce-vectors.fixtures.js +52 -0
- package/dist/store/mass-produce-vectors.fixtures.js.map +1 -0
- package/dist/store/mass-produce-vectors.js +44 -0
- package/dist/store/mass-produce-vectors.js.map +1 -0
- package/dist/store/store.d.ts +104 -7
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +199 -77
- package/dist/store/store.js.map +1 -1
- package/dist/store/transact.d.ts +14 -5
- package/dist/store/transact.d.ts.map +1 -1
- package/dist/store/transact.js +17 -16
- package/dist/store/transact.js.map +1 -1
- package/dist/store/types.d.ts +3 -2
- package/dist/store/types.d.ts.map +1 -1
- package/dist/store/types.js +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/visuals/index.d.ts +1 -0
- package/dist/visuals/index.d.ts.map +1 -1
- package/dist/visuals/index.js +1 -0
- package/dist/visuals/index.js.map +1 -1
- package/dist/visuals/map-text.d.ts +8 -0
- package/dist/visuals/map-text.d.ts.map +1 -1
- package/dist/visuals/map-text.js +1 -1
- package/dist/visuals/map-text.js.map +1 -1
- package/dist/visuals/object-glyph.d.ts +56 -0
- package/dist/visuals/object-glyph.d.ts.map +1 -0
- package/dist/visuals/object-glyph.js +52 -0
- package/dist/visuals/object-glyph.js.map +1 -0
- package/dist/visuals/prefs.d.ts +14 -22
- package/dist/visuals/prefs.d.ts.map +1 -1
- package/dist/visuals/prefs.js +4 -23
- package/dist/visuals/prefs.js.map +1 -1
- package/dist/visuals/tile-prefs.d.ts +26 -0
- package/dist/visuals/tile-prefs.d.ts.map +1 -1
- package/dist/visuals/tile-prefs.js +28 -0
- package/dist/visuals/tile-prefs.js.map +1 -1
- package/dist/world/feature.d.ts +2 -1
- package/dist/world/feature.d.ts.map +1 -1
- package/dist/world/feature.js +2 -0
- package/dist/world/feature.js.map +1 -1
- package/dist/world/project.d.ts +10 -2
- package/dist/world/project.d.ts.map +1 -1
- package/dist/world/project.js +18 -6
- package/dist/world/project.js.map +1 -1
- package/dist/world/projection.d.ts +37 -3
- package/dist/world/projection.d.ts.map +1 -1
- package/dist/world/projection.js +69 -7
- package/dist/world/projection.js.map +1 -1
- package/dist/world/trap.d.ts +2 -1
- package/dist/world/trap.d.ts.map +1 -1
- package/dist/world/trap.js +2 -1
- package/dist/world/trap.js.map +1 -1
- package/dist/world/view.d.ts +1 -1
- package/dist/world/view.d.ts.map +1 -1
- package/dist/world/view.js +11 -3
- package/dist/world/view.js.map +1 -1
- package/package.json +1 -1
- package/src/agent/perceive.ts +2 -3
- package/src/combat/blow-vectors.fixtures.ts +99 -0
- package/src/combat/blow-vectors.json +482 -0
- package/src/combat/blow-vectors.ts +280 -0
- package/src/combat/brand-slay.ts +42 -11
- package/src/combat/index.ts +1 -1
- package/src/combat/melee.ts +37 -19
- package/src/combat/mon-melee.ts +611 -364
- package/src/combat/ranged.ts +43 -26
- package/src/constants.ts +15 -0
- package/src/datafile.ts +148 -0
- package/src/effects/effect-info-registry.ts +313 -0
- package/src/effects/effect-info-vectors.fixtures.ts +61 -0
- package/src/effects/effect-info-vectors.json +11532 -0
- package/src/effects/effect-info-vectors.ts +376 -0
- package/src/effects/effect-info.ts +1005 -859
- package/src/effects/effect.ts +96 -62
- package/src/effects/handlers.ts +5 -2
- package/src/effects/interpreter.ts +14 -0
- package/src/game/cave-cmd.ts +54 -11
- package/src/game/cave-square.ts +80 -0
- package/src/game/char-sheet.ts +59 -16
- package/src/game/chest.ts +25 -8
- package/src/game/context.ts +293 -27
- package/src/game/describe.ts +34 -4
- package/src/game/display.ts +215 -19
- package/src/game/dump-level.ts +3 -2
- package/src/game/effect-attack.ts +41 -28
- package/src/game/effect-detect.ts +45 -8
- package/src/game/effect-env.ts +8 -0
- package/src/game/effect-general.ts +110 -47
- package/src/game/effect-item.ts +1075 -999
- package/src/game/effect-melee.ts +51 -18
- package/src/game/effect-monster.ts +55 -9
- package/src/game/effect-teleport.ts +173 -38
- package/src/game/effect-terrain.ts +38 -22
- package/src/game/equip-cmp.ts +483 -480
- package/src/game/floor.ts +22 -4
- package/src/game/gear.ts +210 -21
- package/src/game/harness.ts +12 -1
- package/src/game/ignore-cmd.ts +96 -8
- package/src/game/known.ts +392 -73
- package/src/game/loop.ts +52 -27
- package/src/game/lore-color.ts +13 -1
- package/src/game/mon-cast.ts +31 -6
- package/src/game/mon-cmd.ts +95 -30
- package/src/game/mon-death.ts +14 -12
- package/src/game/mon-group.ts +9 -5
- package/src/game/mon-message.ts +363 -65
- package/src/game/mon-place.ts +15 -3
- package/src/game/mon-ranged.ts +14 -5
- package/src/game/mon-side.ts +16 -12
- package/src/game/monster-turn.ts +120 -87
- package/src/game/notice.ts +85 -0
- package/src/game/obj-cmd.ts +126 -37
- package/src/game/obj-list.ts +44 -26
- package/src/game/object-inspect.ts +13 -0
- package/src/game/pickup.ts +29 -5
- package/src/game/player-side-vectors.fixtures.ts +215 -0
- package/src/game/player-side-vectors.json +6914 -0
- package/src/game/player-side-vectors.ts +420 -0
- package/src/game/player-side.ts +622 -340
- package/src/game/player-turn.ts +228 -31
- package/src/game/poly.ts +107 -0
- package/src/game/project-cast.ts +63 -6
- package/src/game/project-feat-vectors.fixtures.ts +106 -0
- package/src/game/project-feat-vectors.json +6554 -0
- package/src/game/project-feat-vectors.ts +323 -0
- package/src/game/project-feat.ts +417 -248
- package/src/game/project-monster.ts +69 -30
- package/src/game/project-obj-vectors.json +1 -0
- package/src/game/project-obj.ts +115 -47
- package/src/game/project-player.ts +8 -0
- package/src/game/projection-handlers.ts +110 -0
- package/src/game/quest.ts +48 -0
- package/src/game/ranged-cmd.ts +45 -11
- package/src/game/repeat.ts +92 -0
- package/src/game/shape-inspect.ts +166 -0
- package/src/game/spell-cmd.ts +39 -6
- package/src/game/spoil.ts +92 -39
- package/src/game/steal.ts +9 -4
- package/src/game/target-loop.ts +14 -7
- package/src/game/target.ts +18 -7
- package/src/game/ui-entry.ts +172 -22
- package/src/game/wizard.ts +97 -10
- package/src/game/world.ts +6 -0
- package/src/gen/cave.ts +225 -26
- package/src/gen/generate.ts +62 -9
- package/src/gen/glyph-vectors.fixtures.ts +122 -0
- package/src/gen/glyph-vectors.json +5996 -0
- package/src/gen/glyph-vectors.ts +280 -0
- package/src/gen/glyph.ts +132 -0
- package/src/gen/room.ts +446 -265
- package/src/gen/util.ts +32 -9
- package/src/i18n/i18n.ts +492 -0
- package/src/i18n/text.ts +117 -0
- package/src/index.ts +307 -254
- package/src/mod/extension.ts +136 -0
- package/src/mod/ids.ts +92 -21
- package/src/mod/record-keys.ts +102 -0
- package/src/mod/registry-host.ts +1063 -234
- package/src/mon/bind.ts +14 -8
- package/src/mon/knowledge-groups.ts +12 -12
- package/src/mon/lore-describe.ts +93 -26
- package/src/mon/lore-file.ts +365 -0
- package/src/mon/lore.ts +9 -3
- package/src/mon/make.ts +4 -2
- package/src/mon/monster.ts +1 -1
- package/src/mon/predicate.ts +14 -9
- package/src/mon/project-mon.ts +23 -5
- package/src/mon/steal.ts +39 -7
- package/src/mon/take-hit.ts +8 -3
- package/src/mon/timed.ts +15 -9
- package/src/mon/types.ts +11 -4
- package/src/msg.ts +55 -1
- package/src/obj/artifact-fake.ts +47 -17
- package/src/obj/bind.ts +52 -9
- package/src/obj/desc-vectors.fixtures.ts +119 -0
- package/src/obj/desc-vectors.json +2360 -0
- package/src/obj/desc-vectors.ts +128 -0
- package/src/obj/desc.ts +159 -55
- package/src/obj/effects-info.ts +90 -59
- package/src/obj/fake-object.ts +135 -0
- package/src/obj/ignore.ts +95 -28
- package/src/obj/knowledge.ts +291 -139
- package/src/obj/known-object.ts +126 -11
- package/src/obj/make.ts +53 -29
- package/src/obj/object-info.ts +103 -6
- package/src/obj/object.ts +392 -151
- package/src/obj/power.ts +297 -59
- package/src/obj/randart-build.ts +1875 -1705
- package/src/obj/randart-data.ts +1547 -1344
- package/src/obj/randart-file.ts +130 -0
- package/src/obj/randart-log.ts +78 -0
- package/src/obj/randart-registry.ts +247 -0
- package/src/obj/randart-vectors.fixtures.ts +61 -0
- package/src/obj/randart-vectors.json +836 -0
- package/src/obj/randart-vectors.ts +369 -0
- package/src/obj/randart.ts +722 -552
- package/src/obj/rune-registry.ts +270 -0
- package/src/obj/rune-vectors.fixtures.ts +164 -0
- package/src/obj/rune-vectors.json +121 -0
- package/src/obj/rune-vectors.ts +229 -0
- package/src/obj/tval-kind-vectors.json +391 -0
- package/src/obj/tval-registry.ts +243 -0
- package/src/obj/tval-vectors.fixtures.ts +50 -0
- package/src/obj/tval-vectors.json +38 -0
- package/src/obj/tval-vectors.ts +126 -0
- package/src/obj/types.ts +18 -7
- package/src/obj/value.ts +26 -20
- package/src/parser.ts +214 -0
- package/src/player/bind.ts +5 -2
- package/src/player/birth.ts +2 -1
- package/src/player/calcs.ts +123 -42
- package/src/player/death.ts +78 -0
- package/src/player/options-file.ts +387 -0
- package/src/player/options.ts +2 -1
- package/src/player/player.ts +60 -4
- package/src/player/shape-lore.ts +33 -14
- package/src/player/timed.ts +14 -4
- package/src/player/types.ts +30 -4
- package/src/session/boot.ts +51 -1
- package/src/session/game.ts +720 -163
- package/src/session/save-migrate.ts +81 -1
- package/src/session/save.ts +264 -22
- package/src/store/bind.ts +4 -3
- package/src/store/mass-produce-vectors.fixtures.ts +64 -0
- package/src/store/mass-produce-vectors.json +1169 -0
- package/src/store/mass-produce-vectors.ts +67 -0
- package/src/store/store.ts +266 -63
- package/src/store/transact.ts +39 -16
- package/src/store/types.ts +3 -2
- package/src/version.ts +1 -1
- package/src/visuals/index.ts +1 -0
- package/src/visuals/map-text.ts +1 -1
- package/src/visuals/object-glyph.ts +76 -0
- package/src/visuals/prefs.ts +22 -32
- package/src/visuals/tile-prefs.ts +32 -0
- package/src/world/feature.ts +4 -1
- package/src/world/project.ts +19 -4
- package/src/world/projection.ts +79 -8
- package/src/world/trap.ts +25 -21
- package/src/world/view.ts +11 -1
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The RUNE registry: every question core asks about a rune, plus the "You feel
|
|
3
|
+
* stronger!" line a modifier prints on wield.
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS IS A REGISTRY, and why it is a harder closure than the four before
|
|
6
|
+
* it. A rune is the unit of object knowledge - what the player learns, what an
|
|
7
|
+
* item is found to carry, what the recall screen names and describes. Six
|
|
8
|
+
* places in `knowledge.ts` decided all of it, and five of them dispatched on
|
|
9
|
+
* `rune.variety`, which was a CLOSED TYPESCRIPT UNION of seven string literals.
|
|
10
|
+
*
|
|
11
|
+
* A union is closed in a way a switch is not. A switch has a `default` arm that
|
|
12
|
+
* a mod's key reaches and fails at, which is at least a place to stand; a union
|
|
13
|
+
* refuses the key at the type level, so a mod could not coin a variety at all
|
|
14
|
+
* and no arm was ever reached to fail. `tools/switch-census.json` saw none of
|
|
15
|
+
* this - it counts `switch` statements, all five of these are under its 8-case
|
|
16
|
+
* threshold, and it counts neither a union type's existence nor its size. The
|
|
17
|
+
* census recorded ONE row for this file, `modMessage`. That is the same lesson
|
|
18
|
+
* gap 28 charged for in a new shape: the census measures SYNTAX, a gap is about
|
|
19
|
+
* REACH.
|
|
20
|
+
*
|
|
21
|
+
* The six closed decisions, and what each cost a mod-coined rune:
|
|
22
|
+
*
|
|
23
|
+
* - `runeDesc` - the recall line. No arm meant no description at all.
|
|
24
|
+
* - `runeName` - the display decoration ("<x> brand", "slay <x>"). Upstream's
|
|
25
|
+
* own `default` returns the bare name, so this one had a real fallback and
|
|
26
|
+
* still does; it is the only one of the six that did.
|
|
27
|
+
* - `playerKnowsRune` / `playerLearnRune` - the knowledge pair. A mod's rune
|
|
28
|
+
* was unknowable AND unlearnable, which is worse than either alone: it
|
|
29
|
+
* could never appear as learned, and `objectRunesKnown` therefore treated
|
|
30
|
+
* any object carrying one as permanently un-assessed.
|
|
31
|
+
* - `objectHasRune` - whether an item carries it. Always no.
|
|
32
|
+
* - `modMessage` - the flavour line on noticing a modifier. The only OBJ_MOD
|
|
33
|
+
* switch in the tree, out of 114 `OBJ_MOD.*` references. A mod-coined
|
|
34
|
+
* modifier was learned in silence.
|
|
35
|
+
*
|
|
36
|
+
* WHERE A MOD'S RUNE KNOWLEDGE LIVES, which is the question that made this
|
|
37
|
+
* conversion different from the four before it. `playerKnowsRune` reads typed
|
|
38
|
+
* stores on `p.objKnown` - `modifiers[]`, `elInfo[]`, `flags` - all sized from
|
|
39
|
+
* core's fixed-arity enums, so there is no slot for a mod's rune and growing
|
|
40
|
+
* that arity is exactly what `mod/vocabulary.ts` was built to avoid (see its
|
|
41
|
+
* header for the W2.3 architecture decision). The answer is that this registry
|
|
42
|
+
* needs NO new store: `knows` and `learn` are handed the player, and a mod
|
|
43
|
+
* keeps its own per-entity values in its own `VocabularyRegistry`, which
|
|
44
|
+
* already persists into that mod's opaque save bag. So the seam stays a pure
|
|
45
|
+
* dispatch table and there is one mechanism for mod-owned per-entity state, not
|
|
46
|
+
* two.
|
|
47
|
+
*
|
|
48
|
+
* THE PRODUCER IS PART OF THE SEAM, not an extra. `buildRuneList` is what every
|
|
49
|
+
* consumer enumerates - the knowledge screens, `objectRunesKnown`, and
|
|
50
|
+
* EF_IDENTIFY's random unknown rune - so six handler tables with no way to get
|
|
51
|
+
* a rune INTO that list would be a seam its own callers walk past, which is the
|
|
52
|
+
* failure three of the five previous conversions each turned up in a different
|
|
53
|
+
* place. `contribute` is the door: core builds its list, then every contributor
|
|
54
|
+
* appends.
|
|
55
|
+
*
|
|
56
|
+
* RNG: `objectFindUnknownRune` draws `randint0(poss.length)` over the list, so
|
|
57
|
+
* a contributor that adds runes DOES move that draw - by design, since the mod
|
|
58
|
+
* is adding content and its rune is now genuinely a candidate. With no mod
|
|
59
|
+
* loaded the list is byte-identical to before, which is what the parity claim
|
|
60
|
+
* needs; `rune-vectors.json` holds all 99 rows.
|
|
61
|
+
*
|
|
62
|
+
* WHY MODULE-LEVEL. The same 2026-08-09 ruling behind `EffectInfoRegistry`,
|
|
63
|
+
* `RandartRegistry` and `TvalRegistry`: disabling a mod always takes effect on
|
|
64
|
+
* the next RELOAD, so a module-level table cannot violate the mod default
|
|
65
|
+
* policy. `resetRuneRegistry()` restores core's arms without a fresh realm and
|
|
66
|
+
* has no production caller by design.
|
|
67
|
+
*/
|
|
68
|
+
/* ------------------------------------------------------------------ *
|
|
69
|
+
* The tables.
|
|
70
|
+
* ------------------------------------------------------------------ */
|
|
71
|
+
/**
|
|
72
|
+
* One keyed table. The same shape as `TvalTable` and for the same reason: six
|
|
73
|
+
* hand-copied blocks would be six places for a capability check to go missing.
|
|
74
|
+
*/
|
|
75
|
+
export class RuneTable {
|
|
76
|
+
table = new Map();
|
|
77
|
+
/** Install (or replace) the handler for one key. */
|
|
78
|
+
set(key, handler) {
|
|
79
|
+
this.table.set(key, handler);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The handler installed right now, or null. This is what a mod calls to WRAP
|
|
83
|
+
* core rather than shadow it - keep what is returned, install its own, call
|
|
84
|
+
* through.
|
|
85
|
+
*/
|
|
86
|
+
handlerFor(key) {
|
|
87
|
+
return this.table.get(key) ?? null;
|
|
88
|
+
}
|
|
89
|
+
/** Whether anything handles this key. */
|
|
90
|
+
has(key) {
|
|
91
|
+
return this.table.has(key);
|
|
92
|
+
}
|
|
93
|
+
/** Every key handled, in registration order (core's first). */
|
|
94
|
+
keys() {
|
|
95
|
+
return [...this.table.keys()];
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/** Everything core asks about a rune, in six tables plus one producer. */
|
|
99
|
+
export class RuneRegistry {
|
|
100
|
+
/** `rune_desc`, keyed on variety. */
|
|
101
|
+
desc = new RuneTable();
|
|
102
|
+
/** `player_knows_rune`, keyed on variety. */
|
|
103
|
+
knows = new RuneTable();
|
|
104
|
+
/** `object_has_rune`, keyed on variety. */
|
|
105
|
+
objectHas = new RuneTable();
|
|
106
|
+
/** `player_learn_rune`, keyed on variety. */
|
|
107
|
+
learn = new RuneTable();
|
|
108
|
+
/** `rune_name`'s decoration, keyed on variety. Absent means the bare name. */
|
|
109
|
+
name = new RuneTable();
|
|
110
|
+
/** `mod_message`, keyed on the OBJ_MOD index. */
|
|
111
|
+
modMessage = new RuneTable();
|
|
112
|
+
/** Extra runes for `buildRuneList`, in registration order. */
|
|
113
|
+
contributors = [];
|
|
114
|
+
/** Add a source of runes to the list every consumer enumerates. */
|
|
115
|
+
contribute(source) {
|
|
116
|
+
this.contributors.push(source);
|
|
117
|
+
}
|
|
118
|
+
/** Every contributed rune, in registration order. Core's list comes first. */
|
|
119
|
+
contributed(env) {
|
|
120
|
+
const out = [];
|
|
121
|
+
for (const source of this.contributors)
|
|
122
|
+
out.push(...source(env));
|
|
123
|
+
return out;
|
|
124
|
+
}
|
|
125
|
+
/** How many contributors are installed (for tests and the conflict report). */
|
|
126
|
+
contributorCount() {
|
|
127
|
+
return this.contributors.length;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/* ------------------------------------------------------------------ *
|
|
131
|
+
* The live registry.
|
|
132
|
+
* ------------------------------------------------------------------ */
|
|
133
|
+
/**
|
|
134
|
+
* Core's own seeders. `knowledge.ts` both OWNS these tables and is the only
|
|
135
|
+
* module that reads them, so "the module is loaded" and "core's arms are
|
|
136
|
+
* installed" cannot come apart - a seeder somebody has to remember to call is
|
|
137
|
+
* one that gets forgotten on a path, and the failure here would be silent and
|
|
138
|
+
* total: no rune knowable, nothing learnable, every object permanently
|
|
139
|
+
* un-assessed.
|
|
140
|
+
*/
|
|
141
|
+
const seeders = [];
|
|
142
|
+
let live = new RuneRegistry();
|
|
143
|
+
/** Install a set of core arms, now and on every reset. A MOD never calls this. */
|
|
144
|
+
export function seedRune(seed) {
|
|
145
|
+
seeders.push(seed);
|
|
146
|
+
seed(live);
|
|
147
|
+
}
|
|
148
|
+
/** The live registry. Module-level; see this file's header for why that is safe. */
|
|
149
|
+
export function runeRegistry() {
|
|
150
|
+
return live;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Back to core's arms alone, dropping every mod registration - the same state a
|
|
154
|
+
* reload produces, without a fresh realm. No production caller by design.
|
|
155
|
+
*/
|
|
156
|
+
export function resetRuneRegistry() {
|
|
157
|
+
live = new RuneRegistry();
|
|
158
|
+
for (const seed of seeders)
|
|
159
|
+
seed(live);
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=rune-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rune-registry.js","sourceRoot":"","sources":["../../src/obj/rune-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkEG;AAiGH;;wEAEwE;AAExE;;;GAGG;AACH,MAAM,OAAO,SAAS;IACH,KAAK,GAAG,IAAI,GAAG,EAAQ,CAAC;IAEzC,oDAAoD;IACpD,GAAG,CAAC,GAAM,EAAE,OAAU;QACpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,GAAM;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACrC,CAAC;IAED,yCAAyC;IACzC,GAAG,CAAC,GAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,+DAA+D;IAC/D,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAChC,CAAC;CACF;AAED,0EAA0E;AAC1E,MAAM,OAAO,YAAY;IACvB,qCAAqC;IAC5B,IAAI,GAAG,IAAI,SAAS,EAAgC,CAAC;IAC9D,6CAA6C;IACpC,KAAK,GAAG,IAAI,SAAS,EAAiC,CAAC;IAChE,2CAA2C;IAClC,SAAS,GAAG,IAAI,SAAS,EAAqC,CAAC;IACxE,6CAA6C;IACpC,KAAK,GAAG,IAAI,SAAS,EAAiC,CAAC;IAChE,8EAA8E;IACrE,IAAI,GAAG,IAAI,SAAS,EAAgC,CAAC;IAC9D,iDAAiD;IACxC,UAAU,GAAG,IAAI,SAAS,EAA6B,CAAC;IAEjE,8DAA8D;IAC7C,YAAY,GAAsB,EAAE,CAAC;IAEtD,mEAAmE;IACnE,UAAU,CAAC,MAAuB;QAChC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,8EAA8E;IAC9E,WAAW,CAAC,GAAY;QACtB,MAAM,GAAG,GAAW,EAAE,CAAC;QACvB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,YAAY;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACjE,OAAO,GAAG,CAAC;IACb,CAAC;IAED,+EAA+E;IAC/E,gBAAgB;QACd,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IAClC,CAAC;CACF;AAED;;wEAEwE;AAExE;;;;;;;GAOG;AACH,MAAM,OAAO,GAAuC,EAAE,CAAC;AAEvD,IAAI,IAAI,GAAG,IAAI,YAAY,EAAE,CAAC;AAE9B,kFAAkF;AAClF,MAAM,UAAU,QAAQ,CAAC,IAAiC;IACxD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,IAAI,CAAC,IAAI,CAAC,CAAC;AACb,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,GAAG,IAAI,YAAY,EAAE,CAAC;IAC1B,KAAK,MAAM,IAAI,IAAI,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Golden vectors for the rune layer: what every rune in the shipped pack is
|
|
3
|
+
* CALLED, what it READS as, whether an object carries it, whether the player
|
|
4
|
+
* knows it, what learning it PRINTS, and the "You feel stronger!" line every
|
|
5
|
+
* modifier prints on wield.
|
|
6
|
+
*
|
|
7
|
+
* RECORDED BEFORE `RuneRegistry` EXISTED, which is the only reason they are
|
|
8
|
+
* evidence. A determinism test that runs the same function twice in one process
|
|
9
|
+
* cannot fail across a refactor - agreement is symmetric. These rows were
|
|
10
|
+
* produced by the six closed switches (`runeDesc`, `playerKnowsRune`,
|
|
11
|
+
* `objectHasRune`, `playerLearnRune`, `runeName`, `modMessage`) and replayed
|
|
12
|
+
* against whatever answers those questions afterwards.
|
|
13
|
+
*
|
|
14
|
+
* NO RNG ANYWHERE, measured rather than assumed: every value below is a string
|
|
15
|
+
* or a boolean derived from a pack record and a knowledge store. So the
|
|
16
|
+
* 2026-08-09 relaxation to gameplay parity buys this conversion nothing - there
|
|
17
|
+
* is no stream to move - and the grid can be exhaustive instead of sampled.
|
|
18
|
+
*
|
|
19
|
+
* WHAT THE GRID DELIBERATELY COVERS, because a rune grid has an easy way to
|
|
20
|
+
* look complete and measure nothing:
|
|
21
|
+
*
|
|
22
|
+
* - EVERY rune `buildRuneList` produces, not a sample. The list de-duplicates
|
|
23
|
+
* brands by name and slays by same-monsters group and skips five flag
|
|
24
|
+
* subtypes, so its length is a fact about the pack that a hand-written list
|
|
25
|
+
* would freeze wrongly.
|
|
26
|
+
* - Learning each rune TWICE. The second call must return false; a dispatch
|
|
27
|
+
* table that learned unconditionally would pass a once-only grid.
|
|
28
|
+
* - `objectHasRune` against an object carrying EVERY rune and against a bare
|
|
29
|
+
* one. One object answering `true` everywhere is not a test - the bare
|
|
30
|
+
* object is what makes each `true` mean something.
|
|
31
|
+
* - Both SIGNS of every modifier. `modMessage`'s arms differ by sign
|
|
32
|
+
* ("stronger" / "weaker") and two of the eleven ignore sign entirely
|
|
33
|
+
* (INFRA, LIGHT), which a positive-only grid could not tell apart.
|
|
34
|
+
*/
|
|
35
|
+
import type { GameObject } from "./object.js";
|
|
36
|
+
import type { Player } from "../player/player.js";
|
|
37
|
+
import type { RuneEnv } from "./knowledge.js";
|
|
38
|
+
/** One rune's recorded answers. */
|
|
39
|
+
export interface RuneVectorRow {
|
|
40
|
+
/** `runeKey` - the save-stable identity, `variety:name`. */
|
|
41
|
+
key: string;
|
|
42
|
+
variety: string;
|
|
43
|
+
index: number;
|
|
44
|
+
name: string;
|
|
45
|
+
/** `runeName` - the decorated display name. */
|
|
46
|
+
display: string;
|
|
47
|
+
/** `runeDesc` - the recall line. */
|
|
48
|
+
desc: string;
|
|
49
|
+
/** `playerKnowsRune` on a fresh character. */
|
|
50
|
+
knowsBefore: boolean;
|
|
51
|
+
/** `playerLearnRune(..., message: true)` - did it learn anything. */
|
|
52
|
+
learned: boolean;
|
|
53
|
+
/** What that learn printed. */
|
|
54
|
+
messages: string[];
|
|
55
|
+
/** `playerKnowsRune` after. */
|
|
56
|
+
knowsAfter: boolean;
|
|
57
|
+
/** Learning it a second time. False for every rune upstream. */
|
|
58
|
+
learnedAgain: boolean;
|
|
59
|
+
/** `objectHasRune` against an object carrying every rune in the list. */
|
|
60
|
+
hasOnLoaded: boolean;
|
|
61
|
+
/** `objectHasRune` against an untouched object of the same kind. */
|
|
62
|
+
hasOnBare: boolean;
|
|
63
|
+
}
|
|
64
|
+
/** One modifier's wield messages, by sign. */
|
|
65
|
+
export interface ModMessageRow {
|
|
66
|
+
/** The OBJ_MOD index. */
|
|
67
|
+
mod: number;
|
|
68
|
+
/** The modifier's rune name in the pack, or "" when it has none. */
|
|
69
|
+
name: string;
|
|
70
|
+
/** What `objectLearnOnWield` printed for a +2 of this modifier. */
|
|
71
|
+
positive: string[];
|
|
72
|
+
/** ... and for a -2. */
|
|
73
|
+
negative: string[];
|
|
74
|
+
}
|
|
75
|
+
/** The whole recorded grid. */
|
|
76
|
+
export interface RuneVectors {
|
|
77
|
+
runes: RuneVectorRow[];
|
|
78
|
+
modMessages: ModMessageRow[];
|
|
79
|
+
}
|
|
80
|
+
/** The fixture surface the producer needs (see `rune-vectors.fixtures.ts`). */
|
|
81
|
+
export interface RuneVectorWorldLike {
|
|
82
|
+
env: RuneEnv;
|
|
83
|
+
player(): Player;
|
|
84
|
+
drain(): string[];
|
|
85
|
+
object(tval: number): GameObject;
|
|
86
|
+
blankObject(tval: number): GameObject;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Produce the grid. ONE implementation, called by both the generator and the
|
|
90
|
+
* test, so the recorded file and the replay cannot drift into measuring
|
|
91
|
+
* different things.
|
|
92
|
+
*
|
|
93
|
+
* `tval` picks the object every `objectHasRune` question is asked against. A
|
|
94
|
+
* RING is used because it is jewellery (so `objectHasStandardToH` has nothing
|
|
95
|
+
* to say about it) and carries no base plusses of its own, which keeps the bare
|
|
96
|
+
* row honestly negative.
|
|
97
|
+
*/
|
|
98
|
+
export declare function recordRuneVectors(world: RuneVectorWorldLike, tval: number): RuneVectors;
|
|
99
|
+
//# sourceMappingURL=rune-vectors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rune-vectors.d.ts","sourceRoot":"","sources":["../../src/obj/rune-vectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAcH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,mCAAmC;AACnC,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,WAAW,EAAE,OAAO,CAAC;IACrB,qEAAqE;IACrE,OAAO,EAAE,OAAO,CAAC;IACjB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,+BAA+B;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,gEAAgE;IAChE,YAAY,EAAE,OAAO,CAAC;IACtB,yEAAyE;IACzE,WAAW,EAAE,OAAO,CAAC;IACrB,oEAAoE;IACpE,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,8CAA8C;AAC9C,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,wBAAwB;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,+BAA+B;AAC/B,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,WAAW,EAAE,aAAa,EAAE,CAAC;CAC9B;AAED,+EAA+E;AAC/E,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,IAAI,MAAM,CAAC;IACjB,KAAK,IAAI,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IACjC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;CACvC;AAoDD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,mBAAmB,EAC1B,IAAI,EAAE,MAAM,GACX,WAAW,CA4Db"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The world the rune vectors are recorded against, built from the real shipped
|
|
3
|
+
* content pack.
|
|
4
|
+
*
|
|
5
|
+
* SEPARATE FILE, and it reads the disk: keeping `node:fs` out of
|
|
6
|
+
* `rune-vectors.ts` means the row producer stays importable from anywhere. ONE
|
|
7
|
+
* copy, shared by `rune-vectors.test.ts` and by `scripts/gen-rune-vectors.mjs`,
|
|
8
|
+
* so the test and the generator cannot disagree about what they are measuring.
|
|
9
|
+
*
|
|
10
|
+
* THE REAL PACK rather than synthetic tables, on purpose. `buildRuneList`
|
|
11
|
+
* de-duplicates brands by name and slays by same-monsters group, and skips five
|
|
12
|
+
* flag subtypes - a hand-built table would be an assertion about what the pack
|
|
13
|
+
* producer emits, and an unchecked one. `elementNames` is derived the way
|
|
14
|
+
* `session/game.ts:741` derives it (projections, sliced to ELEM_MAX), not
|
|
15
|
+
* hand-listed: two nearby test fixtures hard-code four element names, which is
|
|
16
|
+
* enough for a targeted test and would silently shorten this grid by ten.
|
|
17
|
+
*/
|
|
18
|
+
import { ObjRegistry } from "./bind.js";
|
|
19
|
+
import type { Player } from "../player/player.js";
|
|
20
|
+
import type { GameObject } from "./object.js";
|
|
21
|
+
import type { RuneEnv } from "./knowledge.js";
|
|
22
|
+
/** Everything one rune vector run needs. */
|
|
23
|
+
export interface RuneVectorWorld {
|
|
24
|
+
/** A fresh player with empty rune knowledge, marked as playing. */
|
|
25
|
+
player(): Player;
|
|
26
|
+
/** The env every rune call is made against; `msg` pushes into `messages`. */
|
|
27
|
+
env: RuneEnv;
|
|
28
|
+
/** Messages emitted since the last `drain()`. */
|
|
29
|
+
drain(): string[];
|
|
30
|
+
/** A freshly prepared object of the first ordinary kind of a given tval. */
|
|
31
|
+
object(tval: number): GameObject;
|
|
32
|
+
/** object_new: the same kind, zeroed, carrying nothing of its own. */
|
|
33
|
+
blankObject(tval: number): GameObject;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Build the fixture world. The registry binds every object table plus the
|
|
37
|
+
* projections `elementNames` is derived from; nothing here needs an RNG stream,
|
|
38
|
+
* so the one `Rng` exists only because `makeRuneEnv` wants a `randcalcVaries`
|
|
39
|
+
* and is seeded fixed.
|
|
40
|
+
*/
|
|
41
|
+
export declare function runeVectorWorld(): RuneVectorWorld & {
|
|
42
|
+
reg: ObjRegistry;
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=rune-vectors.fixtures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rune-vectors.fixtures.d.ts","sourceRoot":"","sources":["../../src/obj/rune-vectors.fixtures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AASxC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAe9C,4CAA4C;AAC5C,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,MAAM,IAAI,MAAM,CAAC;IACjB,6EAA6E;IAC7E,GAAG,EAAE,OAAO,CAAC;IACb,iDAAiD;IACjD,KAAK,IAAI,MAAM,EAAE,CAAC;IAClB,4EAA4E;IAC5E,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IACjC,sEAAsE;IACtE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;CACvC;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,eAAe,GAAG;IAAE,GAAG,EAAE,WAAW,CAAA;CAAE,CAgGxE"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The world the rune vectors are recorded against, built from the real shipped
|
|
3
|
+
* content pack.
|
|
4
|
+
*
|
|
5
|
+
* SEPARATE FILE, and it reads the disk: keeping `node:fs` out of
|
|
6
|
+
* `rune-vectors.ts` means the row producer stays importable from anywhere. ONE
|
|
7
|
+
* copy, shared by `rune-vectors.test.ts` and by `scripts/gen-rune-vectors.mjs`,
|
|
8
|
+
* so the test and the generator cannot disagree about what they are measuring.
|
|
9
|
+
*
|
|
10
|
+
* THE REAL PACK rather than synthetic tables, on purpose. `buildRuneList`
|
|
11
|
+
* de-duplicates brands by name and slays by same-monsters group, and skips five
|
|
12
|
+
* flag subtypes - a hand-built table would be an assertion about what the pack
|
|
13
|
+
* producer emits, and an unchecked one. `elementNames` is derived the way
|
|
14
|
+
* `session/game.ts:741` derives it (projections, sliced to ELEM_MAX), not
|
|
15
|
+
* hand-listed: two nearby test fixtures hard-code four element names, which is
|
|
16
|
+
* enough for a targeted test and would silently shorten this grid by ten.
|
|
17
|
+
*/
|
|
18
|
+
import { readFileSync } from "node:fs";
|
|
19
|
+
import { ELEM_MAX } from "./types.js";
|
|
20
|
+
import { ObjRegistry } from "./bind.js";
|
|
21
|
+
import { bindPlayer } from "../player/bind.js";
|
|
22
|
+
import { blankPlayer } from "../player/player.js";
|
|
23
|
+
import { makeRuneEnv } from "./knowledge.js";
|
|
24
|
+
import { bindConstants } from "../constants.js";
|
|
25
|
+
import { objectNew } from "./object.js";
|
|
26
|
+
import { objectPrep } from "./make.js";
|
|
27
|
+
import { Rng } from "../rng.js";
|
|
28
|
+
function loadJson(name) {
|
|
29
|
+
return JSON.parse(readFileSync(new URL(`../../../content/pack/${name}.json`, import.meta.url), "utf8"));
|
|
30
|
+
}
|
|
31
|
+
function loadRecords(name) {
|
|
32
|
+
return loadJson(name).records;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Build the fixture world. The registry binds every object table plus the
|
|
36
|
+
* projections `elementNames` is derived from; nothing here needs an RNG stream,
|
|
37
|
+
* so the one `Rng` exists only because `makeRuneEnv` wants a `randcalcVaries`
|
|
38
|
+
* and is seeded fixed.
|
|
39
|
+
*/
|
|
40
|
+
export function runeVectorWorld() {
|
|
41
|
+
const reg = new ObjRegistry({
|
|
42
|
+
objectBase: loadJson("object_base"),
|
|
43
|
+
object: loadJson("object"),
|
|
44
|
+
egoItem: loadJson("ego_item"),
|
|
45
|
+
artifact: loadJson("artifact"),
|
|
46
|
+
curse: loadJson("curse"),
|
|
47
|
+
brand: loadJson("brand"),
|
|
48
|
+
slay: loadJson("slay"),
|
|
49
|
+
activation: loadJson("activation"),
|
|
50
|
+
objectProperty: loadJson("object_property"),
|
|
51
|
+
flavor: loadJson("flavor"),
|
|
52
|
+
});
|
|
53
|
+
const players = bindPlayer({
|
|
54
|
+
races: loadRecords("p_race"),
|
|
55
|
+
classes: loadRecords("class"),
|
|
56
|
+
properties: loadRecords("player_property"),
|
|
57
|
+
timed: loadRecords("player_timed"),
|
|
58
|
+
shapes: loadRecords("shape"),
|
|
59
|
+
bodies: loadRecords("body"),
|
|
60
|
+
history: loadRecords("history"),
|
|
61
|
+
realms: loadRecords("realm"),
|
|
62
|
+
});
|
|
63
|
+
/* session/game.ts:741 - projections sliced to ELEM_MAX, by name. */
|
|
64
|
+
const elementNames = loadRecords("projection")
|
|
65
|
+
.slice(0, ELEM_MAX)
|
|
66
|
+
.map((p) => p.name);
|
|
67
|
+
const constants = bindConstants(loadJson("constants"));
|
|
68
|
+
const messages = [];
|
|
69
|
+
const rng = new Rng(7);
|
|
70
|
+
const equipment = [];
|
|
71
|
+
const env = makeRuneEnv((slot) => equipment[slot] ?? null, (v) => rng.randcalcVaries(v), {
|
|
72
|
+
brands: reg.brands,
|
|
73
|
+
slays: reg.slays,
|
|
74
|
+
curses: reg.curses,
|
|
75
|
+
properties: reg.properties,
|
|
76
|
+
elementNames,
|
|
77
|
+
msg: (t) => messages.push(t),
|
|
78
|
+
});
|
|
79
|
+
const race = players.raceByName("Human");
|
|
80
|
+
const cls = players.classByName("Warrior");
|
|
81
|
+
const body = players.bodies[race.body];
|
|
82
|
+
return {
|
|
83
|
+
reg,
|
|
84
|
+
env,
|
|
85
|
+
player() {
|
|
86
|
+
const p = blankPlayer(race, cls, body);
|
|
87
|
+
/* modMessage is guarded by upkeep.playing (knowledge.ts:646): a wield
|
|
88
|
+
* during birth or level-feeling prints nothing. Recording with it off
|
|
89
|
+
* would produce a grid of empty message lists that could not disagree
|
|
90
|
+
* with a broken dispatch table. */
|
|
91
|
+
p.upkeep.playing = true;
|
|
92
|
+
return p;
|
|
93
|
+
},
|
|
94
|
+
drain() {
|
|
95
|
+
const out = [...messages];
|
|
96
|
+
messages.length = 0;
|
|
97
|
+
return out;
|
|
98
|
+
},
|
|
99
|
+
object(tval) {
|
|
100
|
+
/* object_prep, not object_new: object_new is a zeroed allocation whose
|
|
101
|
+
* tval is still 0, and the point of asking `objectHasRune` about a REAL
|
|
102
|
+
* item is that the item's own fields are filled in. The "maximise" aspect
|
|
103
|
+
* draws no entropy (randcalc takes the bound rather than a roll), so the
|
|
104
|
+
* grid stays RNG-free. */
|
|
105
|
+
return objectPrep(rng, reg, constants, kindOf(tval), 0, "maximise");
|
|
106
|
+
},
|
|
107
|
+
blankObject(tval) {
|
|
108
|
+
/* object_new, and the modifier-message rows need exactly this. A prepared
|
|
109
|
+
* ring of the first ordinary sval is a Ring of STRENGTH: it carries +STR
|
|
110
|
+
* and SUST_STR of its own, so wielding it learns those too and every one
|
|
111
|
+
* of the sixteen rows would carry the same four-line prefix. Four lines of
|
|
112
|
+
* constant noise in a six-line row is a grid that mostly measures the
|
|
113
|
+
* fixture. A zeroed object has exactly one modifier set - the one under
|
|
114
|
+
* test. */
|
|
115
|
+
return objectNew(kindOf(tval));
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
function kindOf(tval) {
|
|
119
|
+
const kind = reg.kinds.find((k) => k.tval === tval && k.kidx < reg.ordinaryKindCount);
|
|
120
|
+
if (!kind)
|
|
121
|
+
throw new Error(`no ordinary kind for tval ${tval}`);
|
|
122
|
+
return kind;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=rune-vectors.fixtures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rune-vectors.fixtures.js","sourceRoot":"","sources":["../../src/obj/rune-vectors.fixtures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Golden vectors for the rune layer: what every rune in the shipped pack is
|
|
3
|
+
* CALLED, what it READS as, whether an object carries it, whether the player
|
|
4
|
+
* knows it, what learning it PRINTS, and the "You feel stronger!" line every
|
|
5
|
+
* modifier prints on wield.
|
|
6
|
+
*
|
|
7
|
+
* RECORDED BEFORE `RuneRegistry` EXISTED, which is the only reason they are
|
|
8
|
+
* evidence. A determinism test that runs the same function twice in one process
|
|
9
|
+
* cannot fail across a refactor - agreement is symmetric. These rows were
|
|
10
|
+
* produced by the six closed switches (`runeDesc`, `playerKnowsRune`,
|
|
11
|
+
* `objectHasRune`, `playerLearnRune`, `runeName`, `modMessage`) and replayed
|
|
12
|
+
* against whatever answers those questions afterwards.
|
|
13
|
+
*
|
|
14
|
+
* NO RNG ANYWHERE, measured rather than assumed: every value below is a string
|
|
15
|
+
* or a boolean derived from a pack record and a knowledge store. So the
|
|
16
|
+
* 2026-08-09 relaxation to gameplay parity buys this conversion nothing - there
|
|
17
|
+
* is no stream to move - and the grid can be exhaustive instead of sampled.
|
|
18
|
+
*
|
|
19
|
+
* WHAT THE GRID DELIBERATELY COVERS, because a rune grid has an easy way to
|
|
20
|
+
* look complete and measure nothing:
|
|
21
|
+
*
|
|
22
|
+
* - EVERY rune `buildRuneList` produces, not a sample. The list de-duplicates
|
|
23
|
+
* brands by name and slays by same-monsters group and skips five flag
|
|
24
|
+
* subtypes, so its length is a fact about the pack that a hand-written list
|
|
25
|
+
* would freeze wrongly.
|
|
26
|
+
* - Learning each rune TWICE. The second call must return false; a dispatch
|
|
27
|
+
* table that learned unconditionally would pass a once-only grid.
|
|
28
|
+
* - `objectHasRune` against an object carrying EVERY rune and against a bare
|
|
29
|
+
* one. One object answering `true` everywhere is not a test - the bare
|
|
30
|
+
* object is what makes each `true` mean something.
|
|
31
|
+
* - Both SIGNS of every modifier. `modMessage`'s arms differ by sign
|
|
32
|
+
* ("stronger" / "weaker") and two of the eleven ignore sign entirely
|
|
33
|
+
* (INFRA, LIGHT), which a positive-only grid could not tell apart.
|
|
34
|
+
*/
|
|
35
|
+
import { OBJ_MOD_MAX } from "./types.js";
|
|
36
|
+
import { buildRuneList, objectHasRune, objectLearnOnWield, playerKnowsRune, playerLearnRune, runeDesc, runeKey, runeName, } from "./knowledge.js";
|
|
37
|
+
/**
|
|
38
|
+
* Write one rune onto an object, so `objectHasRune` has something to find.
|
|
39
|
+
*
|
|
40
|
+
* This is the one place the grid encodes per-variety knowledge, and it is
|
|
41
|
+
* deliberately the WRITE side rather than the read side: `objectHasRune` is
|
|
42
|
+
* what is being measured, so the fixture must reach the object's fields
|
|
43
|
+
* directly instead of asking the function under test to describe itself.
|
|
44
|
+
*/
|
|
45
|
+
function applyRune(env, obj, rune) {
|
|
46
|
+
switch (rune.variety) {
|
|
47
|
+
case "combat":
|
|
48
|
+
if (rune.index === 0)
|
|
49
|
+
obj.toA = 1;
|
|
50
|
+
else if (rune.index === 1)
|
|
51
|
+
obj.toH = 1;
|
|
52
|
+
else
|
|
53
|
+
obj.toD = 1;
|
|
54
|
+
return;
|
|
55
|
+
case "mod":
|
|
56
|
+
obj.modifiers[rune.index] = 1;
|
|
57
|
+
return;
|
|
58
|
+
case "resist": {
|
|
59
|
+
const info = obj.elInfo[rune.index];
|
|
60
|
+
if (info)
|
|
61
|
+
info.resLevel = 1;
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
case "brand": {
|
|
65
|
+
obj.brands ??= new Array(env.brands.length).fill(false);
|
|
66
|
+
obj.brands[rune.index] = true;
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
case "slay": {
|
|
70
|
+
obj.slays ??= new Array(env.slays.length).fill(false);
|
|
71
|
+
obj.slays[rune.index] = true;
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
case "curse": {
|
|
75
|
+
obj.curses ??= Array.from({ length: env.curses.length }, () => ({
|
|
76
|
+
power: 0,
|
|
77
|
+
timeout: 0,
|
|
78
|
+
}));
|
|
79
|
+
const c = obj.curses[rune.index];
|
|
80
|
+
if (c)
|
|
81
|
+
c.power = 1;
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
case "flag":
|
|
85
|
+
obj.flags.on(rune.index);
|
|
86
|
+
return;
|
|
87
|
+
default:
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Produce the grid. ONE implementation, called by both the generator and the
|
|
93
|
+
* test, so the recorded file and the replay cannot drift into measuring
|
|
94
|
+
* different things.
|
|
95
|
+
*
|
|
96
|
+
* `tval` picks the object every `objectHasRune` question is asked against. A
|
|
97
|
+
* RING is used because it is jewellery (so `objectHasStandardToH` has nothing
|
|
98
|
+
* to say about it) and carries no base plusses of its own, which keeps the bare
|
|
99
|
+
* row honestly negative.
|
|
100
|
+
*/
|
|
101
|
+
export function recordRuneVectors(world, tval) {
|
|
102
|
+
const { env } = world;
|
|
103
|
+
const runes = buildRuneList(env);
|
|
104
|
+
const loaded = world.object(tval);
|
|
105
|
+
for (const rune of runes)
|
|
106
|
+
applyRune(env, loaded, rune);
|
|
107
|
+
const bare = world.object(tval);
|
|
108
|
+
const rows = runes.map((rune) => {
|
|
109
|
+
const p = world.player();
|
|
110
|
+
world.drain();
|
|
111
|
+
const knowsBefore = playerKnowsRune(p, rune);
|
|
112
|
+
const learned = playerLearnRune(p, env, rune, true);
|
|
113
|
+
const messages = world.drain();
|
|
114
|
+
const knowsAfter = playerKnowsRune(p, rune);
|
|
115
|
+
const learnedAgain = playerLearnRune(p, env, rune, true);
|
|
116
|
+
world.drain();
|
|
117
|
+
return {
|
|
118
|
+
key: runeKey(rune),
|
|
119
|
+
variety: rune.variety,
|
|
120
|
+
index: rune.index,
|
|
121
|
+
name: rune.name,
|
|
122
|
+
display: runeName(rune),
|
|
123
|
+
desc: runeDesc(env, rune),
|
|
124
|
+
knowsBefore,
|
|
125
|
+
learned,
|
|
126
|
+
messages,
|
|
127
|
+
knowsAfter,
|
|
128
|
+
learnedAgain,
|
|
129
|
+
hasOnLoaded: objectHasRune(env, loaded, rune),
|
|
130
|
+
hasOnBare: objectHasRune(env, bare, rune),
|
|
131
|
+
};
|
|
132
|
+
});
|
|
133
|
+
/* The modifier names, taken from the rune list rather than looked up a
|
|
134
|
+
* second way: two producers of the same string is two chances to disagree. */
|
|
135
|
+
const modNames = new Map();
|
|
136
|
+
for (const rune of runes) {
|
|
137
|
+
if (rune.variety === "mod")
|
|
138
|
+
modNames.set(rune.index, rune.name);
|
|
139
|
+
}
|
|
140
|
+
const modMessages = [];
|
|
141
|
+
for (let mod = 0; mod < OBJ_MOD_MAX; mod++) {
|
|
142
|
+
const sign = (value) => {
|
|
143
|
+
const p = world.player();
|
|
144
|
+
const obj = world.blankObject(tval);
|
|
145
|
+
obj.modifiers[mod] = value;
|
|
146
|
+
world.drain();
|
|
147
|
+
objectLearnOnWield(p, obj, env);
|
|
148
|
+
return world.drain();
|
|
149
|
+
};
|
|
150
|
+
modMessages.push({
|
|
151
|
+
mod,
|
|
152
|
+
name: modNames.get(mod) ?? "",
|
|
153
|
+
positive: sign(2),
|
|
154
|
+
negative: sign(-2),
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
return { runes: rows, modMessages };
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=rune-vectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rune-vectors.js","sourceRoot":"","sources":["../../src/obj/rune-vectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EACL,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,QAAQ,EACR,OAAO,EACP,QAAQ,GACT,MAAM,gBAAgB,CAAC;AA4DxB;;;;;;;GAOG;AACH,SAAS,SAAS,CAAC,GAAY,EAAE,GAAe,EAAE,IAAU;IAC1D,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;gBAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;iBAC7B,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;gBAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;;gBAClC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;YACjB,OAAO;QACT,KAAK,KAAK;YACR,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9B,OAAO;QACT,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,IAAI;gBAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,GAAG,CAAC,MAAM,KAAK,IAAI,KAAK,CAAU,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,GAAG,CAAC,KAAK,KAAK,IAAI,KAAK,CAAU,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/D,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;YAC7B,OAAO;QACT,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC9D,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,CAAC;aACX,CAAC,CAAC,CAAC;YACJ,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC;gBAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QACD,KAAK,MAAM;YACT,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,OAAO;QACT;YACE,OAAO;IACX,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAA0B,EAC1B,IAAY;IAEZ,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;IACtB,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAEjC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEhC,MAAM,IAAI,GAAoB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC/C,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACzB,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACzD,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO;YACL,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC;YAClB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC;YACvB,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;YACzB,WAAW;YACX,OAAO;YACP,QAAQ;YACR,UAAU;YACV,YAAY;YACZ,WAAW,EAAE,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC;YAC7C,SAAS,EAAE,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;SAC1C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH;kFAC8E;IAC9E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK;YAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,WAAW,GAAoB,EAAE,CAAC;IACxC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,WAAW,EAAE,GAAG,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,CAAC,KAAa,EAAY,EAAE;YACvC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACpC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC3B,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,kBAAkB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAChC,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC,CAAC;QACF,WAAW,CAAC,IAAI,CAAC;YACf,GAAG;YACH,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;YAC7B,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;YACjB,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;SACnB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AACtC,CAAC"}
|