@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
package/src/obj/knowledge.ts
CHANGED
|
@@ -30,6 +30,8 @@ import { FLAG_START, FlagSet, NO_FLAG } from "../bitflag.js";
|
|
|
30
30
|
import type { RandomValue } from "../rng.js";
|
|
31
31
|
import type { GameObject } from "./object.js";
|
|
32
32
|
import { sameMonstersSlain, tvalIsBodyArmor, tvalIsJewelry } from "./object.js";
|
|
33
|
+
import { runeRegistry, seedRune } from "./rune-registry.js";
|
|
34
|
+
import type { ModMessageHandler, RuneVariety } from "./rune-registry.js";
|
|
33
35
|
import type {
|
|
34
36
|
Brand,
|
|
35
37
|
Curse,
|
|
@@ -81,6 +83,23 @@ export interface RuneEnv {
|
|
|
81
83
|
flavor?: FlavorKnowledge;
|
|
82
84
|
/** msg() sink for rune / flag / modifier messages. */
|
|
83
85
|
msg?(text: string): void;
|
|
86
|
+
/**
|
|
87
|
+
* object_desc(o_name, ..., obj, ODESC_BASE, p) - the name the six rune /
|
|
88
|
+
* flag / curse messages in this file print (obj-knowledge.c L1644, L1732,
|
|
89
|
+
* L1827, L2108, L2147, L2192; exactly six ODESC_BASE calls upstream, exactly
|
|
90
|
+
* six `baseName` sites here).
|
|
91
|
+
*
|
|
92
|
+
* A seam rather than a direct call because the real `objectDesc` needs a
|
|
93
|
+
* `KnownDesc`, which is assembled from GameState fields (isAware, options,
|
|
94
|
+
* hasFlavor, flavorText, everseen) that this module cannot see. NOT a layering
|
|
95
|
+
* problem, contrary to the note this replaces: `objectDesc` lives in
|
|
96
|
+
* `obj/desc.ts`, next door - `game/describe.ts` is only a GameState wrapper
|
|
97
|
+
* around it. The obstacle was the knowledge bundle, not the directory.
|
|
98
|
+
*
|
|
99
|
+
* Absent (worldless callers) falls back to `objBaseName`, the plain kind name.
|
|
100
|
+
* PORT_TODO 3.23.
|
|
101
|
+
*/
|
|
102
|
+
describeBase?(obj: GameObject): string;
|
|
84
103
|
}
|
|
85
104
|
|
|
86
105
|
/** Optional registry tables for makeRuneEnv (inert defaults when absent). */
|
|
@@ -92,6 +111,7 @@ export interface RuneEnvTables {
|
|
|
92
111
|
elementNames?: readonly string[];
|
|
93
112
|
flavor?: FlavorKnowledge;
|
|
94
113
|
msg?(text: string): void;
|
|
114
|
+
describeBase?(obj: GameObject): string;
|
|
95
115
|
}
|
|
96
116
|
|
|
97
117
|
/**
|
|
@@ -110,6 +130,7 @@ export function makeRuneEnv(
|
|
|
110
130
|
curses: tables.curses ?? [null],
|
|
111
131
|
properties: tables.properties ?? [null],
|
|
112
132
|
elementNames: tables.elementNames ?? [],
|
|
133
|
+
...(tables.describeBase ? { describeBase: tables.describeBase } : {}),
|
|
113
134
|
slotObject,
|
|
114
135
|
randcalcVaries,
|
|
115
136
|
...(tables.flavor ? { flavor: tables.flavor } : {}),
|
|
@@ -216,11 +237,22 @@ function objectFlagName(flag: number): string {
|
|
|
216
237
|
return OBJECT_FLAG_ENTRIES[flag - 1]?.name ?? "NONE";
|
|
217
238
|
}
|
|
218
239
|
|
|
219
|
-
/**
|
|
240
|
+
/**
|
|
241
|
+
* The plain kind name, `~` and `&` stripped. This is the FALLBACK for a caller
|
|
242
|
+
* with no knowledge bundle (a worldless test), not the upstream behaviour:
|
|
243
|
+
* `object_desc` with ODESC_BASE still routes an unaware flavoured kind through
|
|
244
|
+
* its flavour ("a Murky Potion", not "Potion of Cure Light Wounds"), money
|
|
245
|
+
* through the "N gold pieces worth of" form, and an unknown item through
|
|
246
|
+
* "unknown item". PORT_TODO 3.23.
|
|
247
|
+
*/
|
|
220
248
|
export function objBaseName(obj: GameObject): string {
|
|
221
249
|
return obj.kind.name.replace(/[~&]/g, "").trim();
|
|
222
250
|
}
|
|
223
|
-
|
|
251
|
+
|
|
252
|
+
/** ODESC_BASE via the wired seam, or the plain-name fallback. */
|
|
253
|
+
function baseName(env: RuneEnv, obj: GameObject): string {
|
|
254
|
+
return env.describeBase?.(obj) ?? objBaseName(obj);
|
|
255
|
+
}
|
|
224
256
|
|
|
225
257
|
/* ------------------------------------------------------------------ *
|
|
226
258
|
* player_knows_* accessors.
|
|
@@ -467,7 +499,7 @@ export function objectCursesFindFlags(
|
|
|
467
499
|
): boolean {
|
|
468
500
|
if (!obj.curses) return false;
|
|
469
501
|
let found = false;
|
|
470
|
-
const oName = baseName(obj);
|
|
502
|
+
const oName = baseName(env, obj);
|
|
471
503
|
for (let i = 1; i < env.curses.length; i++) {
|
|
472
504
|
const c = env.curses[i];
|
|
473
505
|
if (!obj.curses[i]?.power || !c) continue;
|
|
@@ -517,7 +549,7 @@ export function objectCursesFindElement(
|
|
|
517
549
|
): boolean {
|
|
518
550
|
if (!obj.curses) return false;
|
|
519
551
|
let found = false;
|
|
520
|
-
const oName = baseName(obj);
|
|
552
|
+
const oName = baseName(env, obj);
|
|
521
553
|
for (let i = 1; i < env.curses.length; i++) {
|
|
522
554
|
const c = env.curses[i];
|
|
523
555
|
if (!obj.curses[i]?.power || !c) continue;
|
|
@@ -540,24 +572,9 @@ export function objectCursesFindElement(
|
|
|
540
572
|
/** mod_message (obj-knowledge.c L1492): "You feel..." on noticing a modifier. */
|
|
541
573
|
function modMessage(env: RuneEnv, obj: GameObject, mod: number): void {
|
|
542
574
|
if (!env.msg) return;
|
|
543
|
-
const
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
let text: string | null = null;
|
|
547
|
-
switch (mod) {
|
|
548
|
-
case OBJ_MOD.STR: text = both("You feel stronger!", "You feel weaker!"); break;
|
|
549
|
-
case OBJ_MOD.INT: text = both("You feel smarter!", "You feel more stupid!"); break;
|
|
550
|
-
case OBJ_MOD.WIS: text = both("You feel wiser!", "You feel more naive!"); break;
|
|
551
|
-
case OBJ_MOD.DEX: text = both("You feel more dextrous!", "You feel clumsier!"); break;
|
|
552
|
-
case OBJ_MOD.CON: text = both("You feel healthier!", "You feel sicklier!"); break;
|
|
553
|
-
case OBJ_MOD.STEALTH: text = both("You feel stealthier.", "You feel noisier."); break;
|
|
554
|
-
case OBJ_MOD.SPEED: text = both("You feel strangely quick.", "You feel strangely sluggish."); break;
|
|
555
|
-
case OBJ_MOD.BLOWS: text = both("Your weapon tingles in your hands.", "Your weapon aches in your hands."); break;
|
|
556
|
-
case OBJ_MOD.SHOTS: text = both("Your missile weapon tingles in your hands.", "Your missile weapon aches in your hands."); break;
|
|
557
|
-
case OBJ_MOD.INFRA: text = "Your eyes tingle."; break;
|
|
558
|
-
case OBJ_MOD.LIGHT: text = "It glows!"; break;
|
|
559
|
-
default: break;
|
|
560
|
-
}
|
|
575
|
+
const text = runeRegistry().modMessage.handlerFor(mod)?.(
|
|
576
|
+
obj.modifiers[mod] ?? 0,
|
|
577
|
+
);
|
|
561
578
|
if (text) env.msg(text);
|
|
562
579
|
}
|
|
563
580
|
|
|
@@ -599,7 +616,7 @@ export function objectLearnOnWield(
|
|
|
599
616
|
}
|
|
600
617
|
|
|
601
618
|
/* Learn about obvious, previously unknown flags. */
|
|
602
|
-
const oName = baseName(obj);
|
|
619
|
+
const oName = baseName(env, obj);
|
|
603
620
|
for (let flag = 1; flag < OF.MAX; flag++) {
|
|
604
621
|
if (!obj.flags.has(flag) || !obviousMask.has(flag)) continue;
|
|
605
622
|
if (!player.objKnown.flags.has(flag)) {
|
|
@@ -660,7 +677,12 @@ export function equipLearnOnDefend(p: Player, env: RuneEnv): void {
|
|
|
660
677
|
objectCursesFindToA(p, env, obj);
|
|
661
678
|
if (p.objKnown.toA) return;
|
|
662
679
|
}
|
|
663
|
-
/*
|
|
680
|
+
/* The shape's OWN to_a (obj-knowledge.c:1992-1998). Reached only when the
|
|
681
|
+
* gear taught nothing, because the loop returns the moment it does - so this
|
|
682
|
+
* is a tail, not a branch, and it is here in the same place upstream has it.
|
|
683
|
+
* `p.shape` is the bound record, so upstream's lookup_player_shape by name
|
|
684
|
+
* is a step this port does not need. */
|
|
685
|
+
if (p.shape && p.shape.toA !== 0) playerLearnCombat(p, env, "toA");
|
|
664
686
|
}
|
|
665
687
|
|
|
666
688
|
function slotIndexByType(p: Player, type: string): number {
|
|
@@ -670,6 +692,22 @@ function slotIndexByType(p: Player, type: string): number {
|
|
|
670
692
|
return -1;
|
|
671
693
|
}
|
|
672
694
|
|
|
695
|
+
/**
|
|
696
|
+
* equipped_item_by_slot_name(p, "shooting"): the wielded launcher, or null.
|
|
697
|
+
*
|
|
698
|
+
* Upstream looks the slot up by NAME; the port's body slots carry a `type`, and
|
|
699
|
+
* `player/calcs.c`'s own launcher analysis already equates "shooting" with type
|
|
700
|
+
* `BOW` (calcs.ts's equipment loop, `isBowSlot`). This is the shared accessor so
|
|
701
|
+
* that equation lives in exactly one place: two consumers had DEFERRED notes
|
|
702
|
+
* saying they could not reach the launcher (`game/ui-entry.ts`'s PF_FAST_SHOT
|
|
703
|
+
* push and `game/char-sheet.ts`'s launcher seam) while the reach was three lines
|
|
704
|
+
* of body-slot walk. PORT_TODO 3.9.
|
|
705
|
+
*/
|
|
706
|
+
export function equippedLauncher(p: Player, env: RuneEnv): GameObject | null {
|
|
707
|
+
const slot = slotIndexByType(p, "BOW");
|
|
708
|
+
return slot < 0 ? null : env.slotObject(slot);
|
|
709
|
+
}
|
|
710
|
+
|
|
673
711
|
/**
|
|
674
712
|
* equip_learn_on_ranged_attack: firing teaches the to-hit rune from any
|
|
675
713
|
* off-standard equipment except the weapon and launcher.
|
|
@@ -686,6 +724,8 @@ export function equipLearnOnRangedAttack(p: Player, env: RuneEnv): void {
|
|
|
686
724
|
objectCursesFindToH(p, env, obj);
|
|
687
725
|
if (p.objKnown.toH) return;
|
|
688
726
|
}
|
|
727
|
+
/* The shape's own to_h (obj-knowledge.c:2026-2032). */
|
|
728
|
+
if (p.shape && p.shape.toH !== 0) playerLearnCombat(p, env, "toH");
|
|
689
729
|
}
|
|
690
730
|
|
|
691
731
|
/**
|
|
@@ -705,6 +745,12 @@ export function equipLearnOnMeleeAttack(p: Player, env: RuneEnv): void {
|
|
|
705
745
|
objectCursesFindToD(p, env, obj);
|
|
706
746
|
if (p.objKnown.toH && p.objKnown.toD) return;
|
|
707
747
|
}
|
|
748
|
+
/* The shape's own to_h and to_d (obj-knowledge.c:2066-2078). Both, and
|
|
749
|
+
* independently - a shape with only a damage bonus still teaches to_d. */
|
|
750
|
+
if (p.shape) {
|
|
751
|
+
if (p.shape.toH !== 0) playerLearnCombat(p, env, "toH");
|
|
752
|
+
if (p.shape.toD !== 0) playerLearnCombat(p, env, "toD");
|
|
753
|
+
}
|
|
708
754
|
}
|
|
709
755
|
|
|
710
756
|
/**
|
|
@@ -720,7 +766,7 @@ export function equipLearnFlag(p: Player, env: RuneEnv, flag: number): void {
|
|
|
720
766
|
if (!obj) continue;
|
|
721
767
|
if (obj.flags.has(flag)) {
|
|
722
768
|
if (!p.objKnown.flags.has(flag)) {
|
|
723
|
-
flagMessage(env, flag, baseName(obj));
|
|
769
|
+
flagMessage(env, flag, baseName(env, obj));
|
|
724
770
|
playerLearnFlagRune(p, env, flag);
|
|
725
771
|
}
|
|
726
772
|
}
|
|
@@ -740,7 +786,7 @@ export function equipLearnElement(p: Player, env: RuneEnv, element: number): voi
|
|
|
740
786
|
const obj = env.slotObject(i);
|
|
741
787
|
if (!obj) continue;
|
|
742
788
|
if ((obj.elInfo[element]?.resLevel ?? 0) !== 0) {
|
|
743
|
-
if (p.upkeep.playing) env.msg?.(`Your ${baseName(obj)} glows.`);
|
|
789
|
+
if (p.upkeep.playing) env.msg?.(`Your ${baseName(env, obj)} glows.`);
|
|
744
790
|
playerLearnResist(p, env, element);
|
|
745
791
|
}
|
|
746
792
|
/* obj->known element marking: DEFERRED (display). */
|
|
@@ -796,7 +842,7 @@ export function equipLearnAfterTime(p: Player, env: RuneEnv): void {
|
|
|
796
842
|
for (let i = 0; i < p.body.count; i++) {
|
|
797
843
|
const obj = env.slotObject(i);
|
|
798
844
|
if (!obj) continue;
|
|
799
|
-
const oName = baseName(obj);
|
|
845
|
+
const oName = baseName(env, obj);
|
|
800
846
|
for (let flag = 1; flag < OF.MAX; flag++) {
|
|
801
847
|
if (!obj.flags.has(flag) || !timedMask.has(flag)) continue;
|
|
802
848
|
if (!p.objKnown.flags.has(flag)) flagMessage(env, flag, oName);
|
|
@@ -844,15 +890,13 @@ export function playerLearnAllRunes(p: Player, env: RuneEnv): void {
|
|
|
844
890
|
* knowledge screens.
|
|
845
891
|
* ------------------------------------------------------------------ */
|
|
846
892
|
|
|
847
|
-
/**
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
| "curse"
|
|
855
|
-
| "flag";
|
|
893
|
+
/**
|
|
894
|
+
* enum rune_variety - no longer a closed union. Core's seven plus whatever a
|
|
895
|
+
* mod coins; defined in `rune-registry.ts`, which is also where the reason it
|
|
896
|
+
* had to open lives. Re-exported here because `Rune` is this module's type and
|
|
897
|
+
* every consumer already imports it from here.
|
|
898
|
+
*/
|
|
899
|
+
export type { CoreRuneVariety, RuneVariety } from "./rune-registry.js";
|
|
856
900
|
|
|
857
901
|
/** struct rune, resolved: a variety, its per-variety index, and a name. */
|
|
858
902
|
export interface Rune {
|
|
@@ -929,6 +973,11 @@ export function buildRuneList(env: RuneEnv): Rune[] {
|
|
|
929
973
|
}
|
|
930
974
|
runes.push({ variety: "flag", index: i, name: prop.name });
|
|
931
975
|
}
|
|
976
|
+
/* Every mod-contributed rune, after core's, in registration order. This is
|
|
977
|
+
* what makes the six handler tables reachable: nothing in core ever asks
|
|
978
|
+
* about a rune that is not in this list, so a registry without a producer
|
|
979
|
+
* would be a seam its own callers walk past. */
|
|
980
|
+
runes.push(...runeRegistry().contributed(env));
|
|
932
981
|
return runes;
|
|
933
982
|
}
|
|
934
983
|
|
|
@@ -942,50 +991,12 @@ export function buildRuneList(env: RuneEnv): Rune[] {
|
|
|
942
991
|
* curse (the C default falls through to NULL).
|
|
943
992
|
*/
|
|
944
993
|
export function runeDesc(env: RuneEnv, rune: Rune): string {
|
|
945
|
-
|
|
946
|
-
case "combat":
|
|
947
|
-
if (rune.index === 0)
|
|
948
|
-
return "Object magically increases the player's armor class";
|
|
949
|
-
if (rune.index === 1)
|
|
950
|
-
return "Object magically increases the player's chance to hit";
|
|
951
|
-
if (rune.index === 2)
|
|
952
|
-
return "Object magically increases the player's damage";
|
|
953
|
-
return "";
|
|
954
|
-
case "mod":
|
|
955
|
-
return `Object gives the player a magical bonus to ${rune.name}.`;
|
|
956
|
-
case "resist":
|
|
957
|
-
return `Object affects the player's resistance to ${rune.name}.`;
|
|
958
|
-
case "brand":
|
|
959
|
-
return `Object brands the player's attacks with ${rune.name}.`;
|
|
960
|
-
case "slay":
|
|
961
|
-
return `Object makes the player's attacks against ${rune.name} more powerful.`;
|
|
962
|
-
case "curse": {
|
|
963
|
-
const desc = env.curses[rune.index]?.desc;
|
|
964
|
-
return desc ? `Object ${desc}.` : "";
|
|
965
|
-
}
|
|
966
|
-
case "flag":
|
|
967
|
-
return `Object gives the player the property of ${rune.name}.`;
|
|
968
|
-
}
|
|
994
|
+
return runeRegistry().desc.handlerFor(rune.variety)?.(env, rune) ?? "";
|
|
969
995
|
}
|
|
970
996
|
|
|
971
997
|
/** player_knows_rune over the typed knowledge stores. */
|
|
972
998
|
export function playerKnowsRune(p: Player, rune: Rune): boolean {
|
|
973
|
-
|
|
974
|
-
case "combat":
|
|
975
|
-
return !!p.objKnown[COMBAT_RUNE[rune.index] as "toA" | "toH" | "toD"];
|
|
976
|
-
case "mod":
|
|
977
|
-
return !!p.objKnown.modifiers[rune.index];
|
|
978
|
-
case "resist":
|
|
979
|
-
return !!p.objKnown.elInfo[rune.index]?.resLevel;
|
|
980
|
-
case "brand":
|
|
981
|
-
return playerKnowsBrand(p, rune.index);
|
|
982
|
-
case "slay":
|
|
983
|
-
return playerKnowsSlay(p, rune.index);
|
|
984
|
-
case "curse":
|
|
985
|
-
return playerKnowsCurse(p, rune.index);
|
|
986
|
-
case "flag":
|
|
987
|
-
return p.objKnown.flags.has(rune.index);
|
|
988
|
-
}
|
|
999
|
+
return runeRegistry().knows.handlerFor(rune.variety)?.(p, rune) ?? false;
|
|
989
1000
|
}
|
|
990
1001
|
|
|
991
1002
|
/** object_has_rune. */
|
|
@@ -994,36 +1005,9 @@ export function objectHasRune(
|
|
|
994
1005
|
obj: GameObject,
|
|
995
1006
|
rune: Rune,
|
|
996
1007
|
): boolean {
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
if (rune.index === 1) return !objectHasStandardToH(env, obj);
|
|
1001
|
-
return obj.toD !== 0;
|
|
1002
|
-
case "mod":
|
|
1003
|
-
return (obj.modifiers[rune.index] ?? 0) !== 0;
|
|
1004
|
-
case "resist":
|
|
1005
|
-
return (obj.elInfo[rune.index]?.resLevel ?? 0) !== 0;
|
|
1006
|
-
case "brand": {
|
|
1007
|
-
if (!obj.brands) return false;
|
|
1008
|
-
for (let i = 0; i < obj.brands.length; i++) {
|
|
1009
|
-
if (obj.brands[i] && env.brands[i]?.name === rune.name) return true;
|
|
1010
|
-
}
|
|
1011
|
-
return false;
|
|
1012
|
-
}
|
|
1013
|
-
case "slay": {
|
|
1014
|
-
if (!obj.slays) return false;
|
|
1015
|
-
for (let i = 0; i < obj.slays.length; i++) {
|
|
1016
|
-
if (obj.slays[i] && sameMonstersSlain(env.slays, rune.index, i)) {
|
|
1017
|
-
return true;
|
|
1018
|
-
}
|
|
1019
|
-
}
|
|
1020
|
-
return false;
|
|
1021
|
-
}
|
|
1022
|
-
case "curse":
|
|
1023
|
-
return (obj.curses?.[rune.index]?.power ?? 0) !== 0;
|
|
1024
|
-
case "flag":
|
|
1025
|
-
return obj.flags.has(rune.index);
|
|
1026
|
-
}
|
|
1008
|
+
return (
|
|
1009
|
+
runeRegistry().objectHas.handlerFor(rune.variety)?.(env, obj, rune) ?? false
|
|
1010
|
+
);
|
|
1027
1011
|
}
|
|
1028
1012
|
|
|
1029
1013
|
/**
|
|
@@ -1052,27 +1036,10 @@ export function playerLearnRune(
|
|
|
1052
1036
|
rune: Rune,
|
|
1053
1037
|
message: boolean,
|
|
1054
1038
|
): boolean {
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
env,
|
|
1060
|
-
COMBAT_RUNE[rune.index] as "toA" | "toH" | "toD",
|
|
1061
|
-
message,
|
|
1062
|
-
);
|
|
1063
|
-
case "mod":
|
|
1064
|
-
return playerLearnMod(p, env, rune.index, message);
|
|
1065
|
-
case "resist":
|
|
1066
|
-
return playerLearnResist(p, env, rune.index, message);
|
|
1067
|
-
case "brand":
|
|
1068
|
-
return playerLearnBrand(p, env, rune.index, message);
|
|
1069
|
-
case "slay":
|
|
1070
|
-
return playerLearnSlay(p, env, rune.index, message);
|
|
1071
|
-
case "curse":
|
|
1072
|
-
return playerLearnCurse(p, env, rune.index, message);
|
|
1073
|
-
case "flag":
|
|
1074
|
-
return playerLearnFlagRune(p, env, rune.index, message);
|
|
1075
|
-
}
|
|
1039
|
+
return (
|
|
1040
|
+
runeRegistry().learn.handlerFor(rune.variety)?.(p, env, rune, message) ??
|
|
1041
|
+
false
|
|
1042
|
+
);
|
|
1076
1043
|
}
|
|
1077
1044
|
|
|
1078
1045
|
/**
|
|
@@ -1492,18 +1459,9 @@ export function runeKey(rune: Rune): string {
|
|
|
1492
1459
|
* "resist <x>", and the bare name for combat / modifier / flag runes.
|
|
1493
1460
|
*/
|
|
1494
1461
|
export function runeName(rune: Rune): string {
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
case "slay":
|
|
1499
|
-
return `slay ${rune.name}`;
|
|
1500
|
-
case "curse":
|
|
1501
|
-
return `${rune.name} curse`;
|
|
1502
|
-
case "resist":
|
|
1503
|
-
return `resist ${rune.name}`;
|
|
1504
|
-
default:
|
|
1505
|
-
return rune.name;
|
|
1506
|
-
}
|
|
1462
|
+
/* Upstream's `default` arm is the bare name, so an unregistered variety has a
|
|
1463
|
+
* real fallback here rather than a hole - three of core's own seven take it. */
|
|
1464
|
+
return runeRegistry().name.handlerFor(rune.variety)?.(rune) ?? rune.name;
|
|
1507
1465
|
}
|
|
1508
1466
|
|
|
1509
1467
|
/**
|
|
@@ -1575,3 +1533,197 @@ export function playerKnowObjectAwareness(
|
|
|
1575
1533
|
flavor.objectFlavorAware(obj.kind, flavorDeps); // L1174
|
|
1576
1534
|
}
|
|
1577
1535
|
}
|
|
1536
|
+
|
|
1537
|
+
/* ------------------------------------------------------------------ *
|
|
1538
|
+
* Core's rune arms.
|
|
1539
|
+
*
|
|
1540
|
+
* Every body below is lifted VERBATIM from the switch it replaces - the
|
|
1541
|
+
* bodies did not change, only where they are installed. `rune-vectors.json`
|
|
1542
|
+
* (99 runes, both signs of all 16 modifiers) was recorded before this block
|
|
1543
|
+
* existed and is what holds that claim.
|
|
1544
|
+
*
|
|
1545
|
+
* Registered at import time by the module that also READS these tables, so
|
|
1546
|
+
* "knowledge.ts is loaded" and "core's arms are installed" cannot come apart.
|
|
1547
|
+
* ------------------------------------------------------------------ */
|
|
1548
|
+
|
|
1549
|
+
seedRune((reg) => {
|
|
1550
|
+
/* rune_desc (obj-knowledge.c L344-403). */
|
|
1551
|
+
reg.desc.set("combat", (_env, rune) => {
|
|
1552
|
+
if (rune.index === 0)
|
|
1553
|
+
return "Object magically increases the player's armor class";
|
|
1554
|
+
if (rune.index === 1)
|
|
1555
|
+
return "Object magically increases the player's chance to hit";
|
|
1556
|
+
if (rune.index === 2)
|
|
1557
|
+
return "Object magically increases the player's damage";
|
|
1558
|
+
return "";
|
|
1559
|
+
});
|
|
1560
|
+
reg.desc.set(
|
|
1561
|
+
"mod",
|
|
1562
|
+
(_env, rune) => `Object gives the player a magical bonus to ${rune.name}.`,
|
|
1563
|
+
);
|
|
1564
|
+
reg.desc.set(
|
|
1565
|
+
"resist",
|
|
1566
|
+
(_env, rune) => `Object affects the player's resistance to ${rune.name}.`,
|
|
1567
|
+
);
|
|
1568
|
+
reg.desc.set(
|
|
1569
|
+
"brand",
|
|
1570
|
+
(_env, rune) => `Object brands the player's attacks with ${rune.name}.`,
|
|
1571
|
+
);
|
|
1572
|
+
reg.desc.set(
|
|
1573
|
+
"slay",
|
|
1574
|
+
(_env, rune) =>
|
|
1575
|
+
`Object makes the player's attacks against ${rune.name} more powerful.`,
|
|
1576
|
+
);
|
|
1577
|
+
reg.desc.set("curse", (env, rune) => {
|
|
1578
|
+
const desc = env.curses[rune.index]?.desc;
|
|
1579
|
+
return desc ? `Object ${desc}.` : "";
|
|
1580
|
+
});
|
|
1581
|
+
reg.desc.set(
|
|
1582
|
+
"flag",
|
|
1583
|
+
(_env, rune) => `Object gives the player the property of ${rune.name}.`,
|
|
1584
|
+
);
|
|
1585
|
+
|
|
1586
|
+
/* player_knows_rune, over the port's typed knowledge stores. */
|
|
1587
|
+
reg.knows.set(
|
|
1588
|
+
"combat",
|
|
1589
|
+
(p, rune) =>
|
|
1590
|
+
!!p.objKnown[COMBAT_RUNE[rune.index] as "toA" | "toH" | "toD"],
|
|
1591
|
+
);
|
|
1592
|
+
reg.knows.set("mod", (p, rune) => !!p.objKnown.modifiers[rune.index]);
|
|
1593
|
+
reg.knows.set(
|
|
1594
|
+
"resist",
|
|
1595
|
+
(p, rune) => !!p.objKnown.elInfo[rune.index]?.resLevel,
|
|
1596
|
+
);
|
|
1597
|
+
reg.knows.set("brand", (p, rune) => playerKnowsBrand(p, rune.index));
|
|
1598
|
+
reg.knows.set("slay", (p, rune) => playerKnowsSlay(p, rune.index));
|
|
1599
|
+
reg.knows.set("curse", (p, rune) => playerKnowsCurse(p, rune.index));
|
|
1600
|
+
reg.knows.set("flag", (p, rune) => p.objKnown.flags.has(rune.index));
|
|
1601
|
+
|
|
1602
|
+
/* object_has_rune. */
|
|
1603
|
+
reg.objectHas.set("combat", (env, obj, rune) => {
|
|
1604
|
+
if (rune.index === 0) return obj.toA !== 0;
|
|
1605
|
+
if (rune.index === 1) return !objectHasStandardToH(env, obj);
|
|
1606
|
+
return obj.toD !== 0;
|
|
1607
|
+
});
|
|
1608
|
+
reg.objectHas.set(
|
|
1609
|
+
"mod",
|
|
1610
|
+
(_env, obj, rune) => (obj.modifiers[rune.index] ?? 0) !== 0,
|
|
1611
|
+
);
|
|
1612
|
+
reg.objectHas.set(
|
|
1613
|
+
"resist",
|
|
1614
|
+
(_env, obj, rune) => (obj.elInfo[rune.index]?.resLevel ?? 0) !== 0,
|
|
1615
|
+
);
|
|
1616
|
+
reg.objectHas.set("brand", (env, obj, rune) => {
|
|
1617
|
+
if (!obj.brands) return false;
|
|
1618
|
+
for (let i = 0; i < obj.brands.length; i++) {
|
|
1619
|
+
if (obj.brands[i] && env.brands[i]?.name === rune.name) return true;
|
|
1620
|
+
}
|
|
1621
|
+
return false;
|
|
1622
|
+
});
|
|
1623
|
+
reg.objectHas.set("slay", (env, obj, rune) => {
|
|
1624
|
+
if (!obj.slays) return false;
|
|
1625
|
+
for (let i = 0; i < obj.slays.length; i++) {
|
|
1626
|
+
if (obj.slays[i] && sameMonstersSlain(env.slays, rune.index, i)) {
|
|
1627
|
+
return true;
|
|
1628
|
+
}
|
|
1629
|
+
}
|
|
1630
|
+
return false;
|
|
1631
|
+
});
|
|
1632
|
+
reg.objectHas.set(
|
|
1633
|
+
"curse",
|
|
1634
|
+
(_env, obj, rune) => (obj.curses?.[rune.index]?.power ?? 0) !== 0,
|
|
1635
|
+
);
|
|
1636
|
+
reg.objectHas.set("flag", (_env, obj, rune) => obj.flags.has(rune.index));
|
|
1637
|
+
|
|
1638
|
+
/* player_learn_rune. */
|
|
1639
|
+
reg.learn.set("combat", (p, env, rune, message) =>
|
|
1640
|
+
playerLearnCombat(
|
|
1641
|
+
p,
|
|
1642
|
+
env,
|
|
1643
|
+
COMBAT_RUNE[rune.index] as "toA" | "toH" | "toD",
|
|
1644
|
+
message,
|
|
1645
|
+
),
|
|
1646
|
+
);
|
|
1647
|
+
reg.learn.set("mod", (p, env, rune, message) =>
|
|
1648
|
+
playerLearnMod(p, env, rune.index, message),
|
|
1649
|
+
);
|
|
1650
|
+
reg.learn.set("resist", (p, env, rune, message) =>
|
|
1651
|
+
playerLearnResist(p, env, rune.index, message),
|
|
1652
|
+
);
|
|
1653
|
+
reg.learn.set("brand", (p, env, rune, message) =>
|
|
1654
|
+
playerLearnBrand(p, env, rune.index, message),
|
|
1655
|
+
);
|
|
1656
|
+
reg.learn.set("slay", (p, env, rune, message) =>
|
|
1657
|
+
playerLearnSlay(p, env, rune.index, message),
|
|
1658
|
+
);
|
|
1659
|
+
reg.learn.set("curse", (p, env, rune, message) =>
|
|
1660
|
+
playerLearnCurse(p, env, rune.index, message),
|
|
1661
|
+
);
|
|
1662
|
+
reg.learn.set("flag", (p, env, rune, message) =>
|
|
1663
|
+
playerLearnFlagRune(p, env, rune.index, message),
|
|
1664
|
+
);
|
|
1665
|
+
|
|
1666
|
+
/* rune_name's decoration. Only four varieties decorate; combat, mod and flag
|
|
1667
|
+
* take upstream's default arm, which is the bare name. */
|
|
1668
|
+
reg.name.set("brand", (rune) => `${rune.name} brand`);
|
|
1669
|
+
reg.name.set("slay", (rune) => `slay ${rune.name}`);
|
|
1670
|
+
reg.name.set("curse", (rune) => `${rune.name} curse`);
|
|
1671
|
+
reg.name.set("resist", (rune) => `resist ${rune.name}`);
|
|
1672
|
+
|
|
1673
|
+
/* mod_message (obj-knowledge.c L1492). Eleven of the sixteen modifiers say
|
|
1674
|
+
* anything at all, and two of those eleven ignore sign. */
|
|
1675
|
+
const both =
|
|
1676
|
+
(pos: string, neg: string): ModMessageHandler =>
|
|
1677
|
+
(v) =>
|
|
1678
|
+
v > 0 ? pos : v < 0 ? neg : null;
|
|
1679
|
+
const always =
|
|
1680
|
+
(text: string): ModMessageHandler =>
|
|
1681
|
+
() =>
|
|
1682
|
+
text;
|
|
1683
|
+
reg.modMessage.set(
|
|
1684
|
+
OBJ_MOD.STR,
|
|
1685
|
+
both("You feel stronger!", "You feel weaker!"),
|
|
1686
|
+
);
|
|
1687
|
+
reg.modMessage.set(
|
|
1688
|
+
OBJ_MOD.INT,
|
|
1689
|
+
both("You feel smarter!", "You feel more stupid!"),
|
|
1690
|
+
);
|
|
1691
|
+
reg.modMessage.set(
|
|
1692
|
+
OBJ_MOD.WIS,
|
|
1693
|
+
both("You feel wiser!", "You feel more naive!"),
|
|
1694
|
+
);
|
|
1695
|
+
reg.modMessage.set(
|
|
1696
|
+
OBJ_MOD.DEX,
|
|
1697
|
+
both("You feel more dextrous!", "You feel clumsier!"),
|
|
1698
|
+
);
|
|
1699
|
+
reg.modMessage.set(
|
|
1700
|
+
OBJ_MOD.CON,
|
|
1701
|
+
both("You feel healthier!", "You feel sicklier!"),
|
|
1702
|
+
);
|
|
1703
|
+
reg.modMessage.set(
|
|
1704
|
+
OBJ_MOD.STEALTH,
|
|
1705
|
+
both("You feel stealthier.", "You feel noisier."),
|
|
1706
|
+
);
|
|
1707
|
+
reg.modMessage.set(
|
|
1708
|
+
OBJ_MOD.SPEED,
|
|
1709
|
+
both("You feel strangely quick.", "You feel strangely sluggish."),
|
|
1710
|
+
);
|
|
1711
|
+
reg.modMessage.set(
|
|
1712
|
+
OBJ_MOD.BLOWS,
|
|
1713
|
+
both(
|
|
1714
|
+
"Your weapon tingles in your hands.",
|
|
1715
|
+
"Your weapon aches in your hands.",
|
|
1716
|
+
),
|
|
1717
|
+
);
|
|
1718
|
+
reg.modMessage.set(
|
|
1719
|
+
OBJ_MOD.SHOTS,
|
|
1720
|
+
both(
|
|
1721
|
+
"Your missile weapon tingles in your hands.",
|
|
1722
|
+
"Your missile weapon aches in your hands.",
|
|
1723
|
+
),
|
|
1724
|
+
);
|
|
1725
|
+
/* INFRA and LIGHT print the same line for either sign - upstream assigns the
|
|
1726
|
+
* text unconditionally rather than through its two-armed helper. */
|
|
1727
|
+
reg.modMessage.set(OBJ_MOD.INFRA, always("Your eyes tingle."));
|
|
1728
|
+
reg.modMessage.set(OBJ_MOD.LIGHT, always("It glows!"));
|
|
1729
|
+
});
|