@rpgm-tools/neo-angband-core 0.10.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/LICENSE.md +43 -0
- package/README.md +80 -0
- package/dist/agent/act.d.ts +22 -0
- package/dist/agent/act.d.ts.map +1 -0
- package/dist/agent/act.js +88 -0
- package/dist/agent/act.js.map +1 -0
- package/dist/agent/controller.d.ts +34 -0
- package/dist/agent/controller.d.ts.map +1 -0
- package/dist/agent/controller.js +90 -0
- package/dist/agent/controller.js.map +1 -0
- package/dist/agent/events.d.ts +27 -0
- package/dist/agent/events.d.ts.map +1 -0
- package/dist/agent/events.js +31 -0
- package/dist/agent/events.js.map +1 -0
- package/dist/agent/index.d.ts +17 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +15 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/perceive.d.ts +21 -0
- package/dist/agent/perceive.d.ts.map +1 -0
- package/dist/agent/perceive.js +386 -0
- package/dist/agent/perceive.js.map +1 -0
- package/dist/agent/types.d.ts +436 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +63 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/bitflag.d.ts +199 -0
- package/dist/bitflag.d.ts.map +1 -0
- package/dist/bitflag.js +478 -0
- package/dist/bitflag.js.map +1 -0
- package/dist/cmd.d.ts +164 -0
- package/dist/cmd.d.ts.map +1 -0
- package/dist/cmd.js +350 -0
- package/dist/cmd.js.map +1 -0
- package/dist/color.d.ts +104 -0
- package/dist/color.d.ts.map +1 -0
- package/dist/color.js +240 -0
- package/dist/color.js.map +1 -0
- package/dist/combat/brand-slay.d.ts +119 -0
- package/dist/combat/brand-slay.d.ts.map +1 -0
- package/dist/combat/brand-slay.js +264 -0
- package/dist/combat/brand-slay.js.map +1 -0
- package/dist/combat/hit.d.ts +198 -0
- package/dist/combat/hit.d.ts.map +1 -0
- package/dist/combat/hit.js +310 -0
- package/dist/combat/hit.js.map +1 -0
- package/dist/combat/index.d.ts +15 -0
- package/dist/combat/index.d.ts.map +1 -0
- package/dist/combat/index.js +15 -0
- package/dist/combat/index.js.map +1 -0
- package/dist/combat/melee.d.ts +261 -0
- package/dist/combat/melee.d.ts.map +1 -0
- package/dist/combat/melee.js +402 -0
- package/dist/combat/melee.js.map +1 -0
- package/dist/combat/mon-melee.d.ts +233 -0
- package/dist/combat/mon-melee.d.ts.map +1 -0
- package/dist/combat/mon-melee.js +883 -0
- package/dist/combat/mon-melee.js.map +1 -0
- package/dist/combat/ranged.d.ts +89 -0
- package/dist/combat/ranged.d.ts.map +1 -0
- package/dist/combat/ranged.js +253 -0
- package/dist/combat/ranged.js.map +1 -0
- package/dist/constants.d.ts +134 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +171 -0
- package/dist/constants.js.map +1 -0
- package/dist/dice.d.ts +91 -0
- package/dist/dice.d.ts.map +1 -0
- package/dist/dice.js +424 -0
- package/dist/dice.js.map +1 -0
- package/dist/effects/effect-choice.d.ts +15 -0
- package/dist/effects/effect-choice.d.ts.map +1 -0
- package/dist/effects/effect-choice.js +18 -0
- package/dist/effects/effect-choice.js.map +1 -0
- package/dist/effects/effect-info.d.ts +124 -0
- package/dist/effects/effect-info.d.ts.map +1 -0
- package/dist/effects/effect-info.js +706 -0
- package/dist/effects/effect-info.js.map +1 -0
- package/dist/effects/effect.d.ts +165 -0
- package/dist/effects/effect.d.ts.map +1 -0
- package/dist/effects/effect.js +452 -0
- package/dist/effects/effect.js.map +1 -0
- package/dist/effects/handlers.d.ts +70 -0
- package/dist/effects/handlers.d.ts.map +1 -0
- package/dist/effects/handlers.js +394 -0
- package/dist/effects/handlers.js.map +1 -0
- package/dist/effects/interpreter.d.ts +291 -0
- package/dist/effects/interpreter.d.ts.map +1 -0
- package/dist/effects/interpreter.js +325 -0
- package/dist/effects/interpreter.js.map +1 -0
- package/dist/events.d.ts +188 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +138 -0
- package/dist/events.js.map +1 -0
- package/dist/expression.d.ts +83 -0
- package/dist/expression.d.ts.map +1 -0
- package/dist/expression.js +333 -0
- package/dist/expression.js.map +1 -0
- package/dist/game/cave-cmd.d.ts +195 -0
- package/dist/game/cave-cmd.d.ts.map +1 -0
- package/dist/game/cave-cmd.js +968 -0
- package/dist/game/cave-cmd.js.map +1 -0
- package/dist/game/char-sheet.d.ts +189 -0
- package/dist/game/char-sheet.d.ts.map +1 -0
- package/dist/game/char-sheet.js +381 -0
- package/dist/game/char-sheet.js.map +1 -0
- package/dist/game/chest.d.ts +94 -0
- package/dist/game/chest.d.ts.map +1 -0
- package/dist/game/chest.js +267 -0
- package/dist/game/chest.js.map +1 -0
- package/dist/game/context.d.ts +970 -0
- package/dist/game/context.d.ts.map +1 -0
- package/dist/game/context.js +353 -0
- package/dist/game/context.js.map +1 -0
- package/dist/game/curse-tick.d.ts +35 -0
- package/dist/game/curse-tick.d.ts.map +1 -0
- package/dist/game/curse-tick.js +100 -0
- package/dist/game/curse-tick.js.map +1 -0
- package/dist/game/describe.d.ts +20 -0
- package/dist/game/describe.d.ts.map +1 -0
- package/dist/game/describe.js +45 -0
- package/dist/game/describe.js.map +1 -0
- package/dist/game/display.d.ts +196 -0
- package/dist/game/display.d.ts.map +1 -0
- package/dist/game/display.js +684 -0
- package/dist/game/display.js.map +1 -0
- package/dist/game/dump-level.d.ts +37 -0
- package/dist/game/dump-level.d.ts.map +1 -0
- package/dist/game/dump-level.js +110 -0
- package/dist/game/dump-level.js.map +1 -0
- package/dist/game/effect-attack.d.ts +36 -0
- package/dist/game/effect-attack.d.ts.map +1 -0
- package/dist/game/effect-attack.js +694 -0
- package/dist/game/effect-attack.js.map +1 -0
- package/dist/game/effect-detect.d.ts +34 -0
- package/dist/game/effect-detect.d.ts.map +1 -0
- package/dist/game/effect-detect.js +456 -0
- package/dist/game/effect-detect.js.map +1 -0
- package/dist/game/effect-env.d.ts +77 -0
- package/dist/game/effect-env.d.ts.map +1 -0
- package/dist/game/effect-env.js +166 -0
- package/dist/game/effect-env.js.map +1 -0
- package/dist/game/effect-game-env.d.ts +76 -0
- package/dist/game/effect-game-env.d.ts.map +1 -0
- package/dist/game/effect-game-env.js +23 -0
- package/dist/game/effect-game-env.js.map +1 -0
- package/dist/game/effect-general.d.ts +98 -0
- package/dist/game/effect-general.d.ts.map +1 -0
- package/dist/game/effect-general.js +914 -0
- package/dist/game/effect-general.js.map +1 -0
- package/dist/game/effect-item.d.ts +124 -0
- package/dist/game/effect-item.d.ts.map +1 -0
- package/dist/game/effect-item.js +789 -0
- package/dist/game/effect-item.js.map +1 -0
- package/dist/game/effect-melee.d.ts +43 -0
- package/dist/game/effect-melee.d.ts.map +1 -0
- package/dist/game/effect-melee.js +477 -0
- package/dist/game/effect-melee.js.map +1 -0
- package/dist/game/effect-mon-origin.d.ts +67 -0
- package/dist/game/effect-mon-origin.d.ts.map +1 -0
- package/dist/game/effect-mon-origin.js +164 -0
- package/dist/game/effect-mon-origin.js.map +1 -0
- package/dist/game/effect-monster.d.ts +29 -0
- package/dist/game/effect-monster.d.ts.map +1 -0
- package/dist/game/effect-monster.js +281 -0
- package/dist/game/effect-monster.js.map +1 -0
- package/dist/game/effect-summon.d.ts +37 -0
- package/dist/game/effect-summon.d.ts.map +1 -0
- package/dist/game/effect-summon.js +113 -0
- package/dist/game/effect-summon.js.map +1 -0
- package/dist/game/effect-teleport.d.ts +130 -0
- package/dist/game/effect-teleport.d.ts.map +1 -0
- package/dist/game/effect-teleport.js +529 -0
- package/dist/game/effect-teleport.js.map +1 -0
- package/dist/game/effect-terrain.d.ts +91 -0
- package/dist/game/effect-terrain.d.ts.map +1 -0
- package/dist/game/effect-terrain.js +812 -0
- package/dist/game/effect-terrain.js.map +1 -0
- package/dist/game/energy.d.ts +45 -0
- package/dist/game/energy.d.ts.map +1 -0
- package/dist/game/energy.js +51 -0
- package/dist/game/energy.js.map +1 -0
- package/dist/game/equip-cmp.d.ts +138 -0
- package/dist/game/equip-cmp.d.ts.map +1 -0
- package/dist/game/equip-cmp.js +363 -0
- package/dist/game/equip-cmp.js.map +1 -0
- package/dist/game/floor.d.ts +182 -0
- package/dist/game/floor.d.ts.map +1 -0
- package/dist/game/floor.js +435 -0
- package/dist/game/floor.js.map +1 -0
- package/dist/game/gear.d.ts +408 -0
- package/dist/game/gear.d.ts.map +1 -0
- package/dist/game/gear.js +1037 -0
- package/dist/game/gear.js.map +1 -0
- package/dist/game/harness.d.ts +61 -0
- package/dist/game/harness.d.ts.map +1 -0
- package/dist/game/harness.js +198 -0
- package/dist/game/harness.js.map +1 -0
- package/dist/game/history.d.ts +49 -0
- package/dist/game/history.d.ts.map +1 -0
- package/dist/game/history.js +55 -0
- package/dist/game/history.js.map +1 -0
- package/dist/game/ignore-cmd.d.ts +42 -0
- package/dist/game/ignore-cmd.d.ts.map +1 -0
- package/dist/game/ignore-cmd.js +59 -0
- package/dist/game/ignore-cmd.js.map +1 -0
- package/dist/game/inscription-confirm.d.ts +80 -0
- package/dist/game/inscription-confirm.d.ts.map +1 -0
- package/dist/game/inscription-confirm.js +95 -0
- package/dist/game/inscription-confirm.js.map +1 -0
- package/dist/game/known.d.ts +297 -0
- package/dist/game/known.d.ts.map +1 -0
- package/dist/game/known.js +849 -0
- package/dist/game/known.js.map +1 -0
- package/dist/game/loop.d.ts +139 -0
- package/dist/game/loop.d.ts.map +1 -0
- package/dist/game/loop.js +631 -0
- package/dist/game/loop.js.map +1 -0
- package/dist/game/lore-color.d.ts +25 -0
- package/dist/game/lore-color.d.ts.map +1 -0
- package/dist/game/lore-color.js +95 -0
- package/dist/game/lore-color.js.map +1 -0
- package/dist/game/mon-cast.d.ts +150 -0
- package/dist/game/mon-cast.d.ts.map +1 -0
- package/dist/game/mon-cast.js +301 -0
- package/dist/game/mon-cast.js.map +1 -0
- package/dist/game/mon-cmd.d.ts +51 -0
- package/dist/game/mon-cmd.d.ts.map +1 -0
- package/dist/game/mon-cmd.js +670 -0
- package/dist/game/mon-cmd.js.map +1 -0
- package/dist/game/mon-death.d.ts +143 -0
- package/dist/game/mon-death.d.ts.map +1 -0
- package/dist/game/mon-death.js +328 -0
- package/dist/game/mon-death.js.map +1 -0
- package/dist/game/mon-group.d.ts +81 -0
- package/dist/game/mon-group.d.ts.map +1 -0
- package/dist/game/mon-group.js +323 -0
- package/dist/game/mon-group.js.map +1 -0
- package/dist/game/mon-list.d.ts +85 -0
- package/dist/game/mon-list.d.ts.map +1 -0
- package/dist/game/mon-list.js +154 -0
- package/dist/game/mon-list.js.map +1 -0
- package/dist/game/mon-message.d.ts +100 -0
- package/dist/game/mon-message.d.ts.map +1 -0
- package/dist/game/mon-message.js +336 -0
- package/dist/game/mon-message.js.map +1 -0
- package/dist/game/mon-place.d.ts +226 -0
- package/dist/game/mon-place.d.ts.map +1 -0
- package/dist/game/mon-place.js +642 -0
- package/dist/game/mon-place.js.map +1 -0
- package/dist/game/mon-ranged.d.ts +87 -0
- package/dist/game/mon-ranged.d.ts.map +1 -0
- package/dist/game/mon-ranged.js +353 -0
- package/dist/game/mon-ranged.js.map +1 -0
- package/dist/game/mon-shape.d.ts +43 -0
- package/dist/game/mon-shape.d.ts.map +1 -0
- package/dist/game/mon-shape.js +115 -0
- package/dist/game/mon-shape.js.map +1 -0
- package/dist/game/mon-side.d.ts +63 -0
- package/dist/game/mon-side.d.ts.map +1 -0
- package/dist/game/mon-side.js +403 -0
- package/dist/game/mon-side.js.map +1 -0
- package/dist/game/monster-turn.d.ts +195 -0
- package/dist/game/monster-turn.d.ts.map +1 -0
- package/dist/game/monster-turn.js +1560 -0
- package/dist/game/monster-turn.js.map +1 -0
- package/dist/game/obj-cmd.d.ts +453 -0
- package/dist/game/obj-cmd.d.ts.map +1 -0
- package/dist/game/obj-cmd.js +1530 -0
- package/dist/game/obj-cmd.js.map +1 -0
- package/dist/game/obj-list.d.ts +92 -0
- package/dist/game/obj-list.d.ts.map +1 -0
- package/dist/game/obj-list.js +251 -0
- package/dist/game/obj-list.js.map +1 -0
- package/dist/game/object-inspect.d.ts +37 -0
- package/dist/game/object-inspect.d.ts.map +1 -0
- package/dist/game/object-inspect.js +106 -0
- package/dist/game/object-inspect.js.map +1 -0
- package/dist/game/pickup.d.ts +126 -0
- package/dist/game/pickup.d.ts.map +1 -0
- package/dist/game/pickup.js +367 -0
- package/dist/game/pickup.js.map +1 -0
- package/dist/game/player-path.d.ts +133 -0
- package/dist/game/player-path.d.ts.map +1 -0
- package/dist/game/player-path.js +1268 -0
- package/dist/game/player-path.js.map +1 -0
- package/dist/game/player-side.d.ts +59 -0
- package/dist/game/player-side.d.ts.map +1 -0
- package/dist/game/player-side.js +506 -0
- package/dist/game/player-side.js.map +1 -0
- package/dist/game/player-turn.d.ts +161 -0
- package/dist/game/player-turn.d.ts.map +1 -0
- package/dist/game/player-turn.js +739 -0
- package/dist/game/player-turn.js.map +1 -0
- package/dist/game/project-cast.d.ts +268 -0
- package/dist/game/project-cast.d.ts.map +1 -0
- package/dist/game/project-cast.js +496 -0
- package/dist/game/project-cast.js.map +1 -0
- package/dist/game/project-feat.d.ts +47 -0
- package/dist/game/project-feat.d.ts.map +1 -0
- package/dist/game/project-feat.js +350 -0
- package/dist/game/project-feat.js.map +1 -0
- package/dist/game/project-monster.d.ts +106 -0
- package/dist/game/project-monster.d.ts.map +1 -0
- package/dist/game/project-monster.js +272 -0
- package/dist/game/project-monster.js.map +1 -0
- package/dist/game/project-obj.d.ts +60 -0
- package/dist/game/project-obj.d.ts.map +1 -0
- package/dist/game/project-obj.js +245 -0
- package/dist/game/project-obj.js.map +1 -0
- package/dist/game/project-player.d.ts +120 -0
- package/dist/game/project-player.d.ts.map +1 -0
- package/dist/game/project-player.js +108 -0
- package/dist/game/project-player.js.map +1 -0
- package/dist/game/quest.d.ts +101 -0
- package/dist/game/quest.d.ts.map +1 -0
- package/dist/game/quest.js +192 -0
- package/dist/game/quest.js.map +1 -0
- package/dist/game/ranged-cmd.d.ts +32 -0
- package/dist/game/ranged-cmd.d.ts.map +1 -0
- package/dist/game/ranged-cmd.js +372 -0
- package/dist/game/ranged-cmd.js.map +1 -0
- package/dist/game/scheduler.d.ts +47 -0
- package/dist/game/scheduler.d.ts.map +1 -0
- package/dist/game/scheduler.js +141 -0
- package/dist/game/scheduler.js.map +1 -0
- package/dist/game/spell-cmd.d.ts +104 -0
- package/dist/game/spell-cmd.d.ts.map +1 -0
- package/dist/game/spell-cmd.js +320 -0
- package/dist/game/spell-cmd.js.map +1 -0
- package/dist/game/spoil.d.ts +28 -0
- package/dist/game/spoil.d.ts.map +1 -0
- package/dist/game/spoil.js +435 -0
- package/dist/game/spoil.js.map +1 -0
- package/dist/game/steal.d.ts +35 -0
- package/dist/game/steal.d.ts.map +1 -0
- package/dist/game/steal.js +145 -0
- package/dist/game/steal.js.map +1 -0
- package/dist/game/take-hit-hooks.d.ts +52 -0
- package/dist/game/take-hit-hooks.d.ts.map +1 -0
- package/dist/game/take-hit-hooks.js +127 -0
- package/dist/game/take-hit-hooks.js.map +1 -0
- package/dist/game/target-loop.d.ts +119 -0
- package/dist/game/target-loop.d.ts.map +1 -0
- package/dist/game/target-loop.js +408 -0
- package/dist/game/target-loop.js.map +1 -0
- package/dist/game/target.d.ts +133 -0
- package/dist/game/target.d.ts.map +1 -0
- package/dist/game/target.js +353 -0
- package/dist/game/target.js.map +1 -0
- package/dist/game/thrust.d.ts +37 -0
- package/dist/game/thrust.d.ts.map +1 -0
- package/dist/game/thrust.js +155 -0
- package/dist/game/thrust.js.map +1 -0
- package/dist/game/trap.d.ts +218 -0
- package/dist/game/trap.d.ts.map +1 -0
- package/dist/game/trap.js +618 -0
- package/dist/game/trap.js.map +1 -0
- package/dist/game/ui-entry.d.ts +282 -0
- package/dist/game/ui-entry.d.ts.map +1 -0
- package/dist/game/ui-entry.js +1838 -0
- package/dist/game/ui-entry.js.map +1 -0
- package/dist/game/wizard.d.ts +654 -0
- package/dist/game/wizard.d.ts.map +1 -0
- package/dist/game/wizard.js +1323 -0
- package/dist/game/wizard.js.map +1 -0
- package/dist/game/world.d.ts +183 -0
- package/dist/game/world.d.ts.map +1 -0
- package/dist/game/world.js +685 -0
- package/dist/game/world.js.map +1 -0
- package/dist/gen/cave.d.ts +247 -0
- package/dist/gen/cave.d.ts.map +1 -0
- package/dist/gen/cave.js +2406 -0
- package/dist/gen/cave.js.map +1 -0
- package/dist/gen/gen-monster.d.ts +151 -0
- package/dist/gen/gen-monster.d.ts.map +1 -0
- package/dist/gen/gen-monster.js +473 -0
- package/dist/gen/gen-monster.js.map +1 -0
- package/dist/gen/generate.d.ts +240 -0
- package/dist/gen/generate.d.ts.map +1 -0
- package/dist/gen/generate.js +358 -0
- package/dist/gen/generate.js.map +1 -0
- package/dist/gen/room.d.ts +160 -0
- package/dist/gen/room.d.ts.map +1 -0
- package/dist/gen/room.js +1910 -0
- package/dist/gen/room.js.map +1 -0
- package/dist/gen/util.d.ts +466 -0
- package/dist/gen/util.d.ts.map +1 -0
- package/dist/gen/util.js +1553 -0
- package/dist/gen/util.js.map +1 -0
- package/dist/generated/dun-profiles.d.ts +44 -0
- package/dist/generated/dun-profiles.d.ts.map +1 -0
- package/dist/generated/dun-profiles.js +28 -0
- package/dist/generated/dun-profiles.js.map +1 -0
- package/dist/generated/effects.d.ts +1021 -0
- package/dist/generated/effects.d.ts.map +1 -0
- package/dist/generated/effects.js +239 -0
- package/dist/generated/effects.js.map +1 -0
- package/dist/generated/elements.d.ts +83 -0
- package/dist/generated/elements.d.ts.map +1 -0
- package/dist/generated/elements.js +60 -0
- package/dist/generated/elements.js.map +1 -0
- package/dist/generated/equip-slots.d.ts +104 -0
- package/dist/generated/equip-slots.d.ts.map +1 -0
- package/dist/generated/equip-slots.js +34 -0
- package/dist/generated/equip-slots.js.map +1 -0
- package/dist/generated/history-types.d.ts +52 -0
- package/dist/generated/history-types.d.ts.map +1 -0
- package/dist/generated/history-types.js +32 -0
- package/dist/generated/history-types.js.map +1 -0
- package/dist/generated/ignore-types.d.ts +116 -0
- package/dist/generated/ignore-types.d.ts.map +1 -0
- package/dist/generated/ignore-types.js +64 -0
- package/dist/generated/ignore-types.js.map +1 -0
- package/dist/generated/index.d.ts +32 -0
- package/dist/generated/index.d.ts.map +1 -0
- package/dist/generated/index.js +33 -0
- package/dist/generated/index.js.map +1 -0
- package/dist/generated/kind-flags.d.ts +72 -0
- package/dist/generated/kind-flags.d.ts.map +1 -0
- package/dist/generated/kind-flags.js +42 -0
- package/dist/generated/kind-flags.js.map +1 -0
- package/dist/generated/message.d.ts +624 -0
- package/dist/generated/message.d.ts.map +1 -0
- package/dist/generated/message.js +318 -0
- package/dist/generated/message.js.map +1 -0
- package/dist/generated/mon-message.d.ts +386 -0
- package/dist/generated/mon-message.d.ts.map +1 -0
- package/dist/generated/mon-message.js +136 -0
- package/dist/generated/mon-message.js.map +1 -0
- package/dist/generated/mon-race-flags.d.ts +433 -0
- package/dist/generated/mon-race-flags.d.ts.map +1 -0
- package/dist/generated/mon-race-flags.js +180 -0
- package/dist/generated/mon-race-flags.js.map +1 -0
- package/dist/generated/mon-spells.d.ts +380 -0
- package/dist/generated/mon-spells.d.ts.map +1 -0
- package/dist/generated/mon-spells.js +196 -0
- package/dist/generated/mon-spells.js.map +1 -0
- package/dist/generated/mon-temp-flags.d.ts +52 -0
- package/dist/generated/mon-temp-flags.d.ts.map +1 -0
- package/dist/generated/mon-temp-flags.js +32 -0
- package/dist/generated/mon-temp-flags.js.map +1 -0
- package/dist/generated/mon-timed.d.ts +118 -0
- package/dist/generated/mon-timed.d.ts.map +1 -0
- package/dist/generated/mon-timed.js +32 -0
- package/dist/generated/mon-timed.js.map +1 -0
- package/dist/generated/object-flags.d.ts +169 -0
- package/dist/generated/object-flags.d.ts.map +1 -0
- package/dist/generated/object-flags.js +93 -0
- package/dist/generated/object-flags.js.map +1 -0
- package/dist/generated/object-modifiers.d.ts +50 -0
- package/dist/generated/object-modifiers.d.ts.map +1 -0
- package/dist/generated/object-modifiers.js +41 -0
- package/dist/generated/object-modifiers.js.map +1 -0
- package/dist/generated/options.d.ts +284 -0
- package/dist/generated/options.d.ts.map +1 -0
- package/dist/generated/options.js +102 -0
- package/dist/generated/options.js.map +1 -0
- package/dist/generated/origins.d.ts +138 -0
- package/dist/generated/origins.d.ts.map +1 -0
- package/dist/generated/origins.js +62 -0
- package/dist/generated/origins.js.map +1 -0
- package/dist/generated/parser-errors.d.ts +264 -0
- package/dist/generated/parser-errors.d.ts.map +1 -0
- package/dist/generated/parser-errors.js +138 -0
- package/dist/generated/parser-errors.js.map +1 -0
- package/dist/generated/player-flags.d.ts +62 -0
- package/dist/generated/player-flags.d.ts.map +1 -0
- package/dist/generated/player-flags.js +46 -0
- package/dist/generated/player-flags.js.map +1 -0
- package/dist/generated/player-timed.d.ts +273 -0
- package/dist/generated/player-timed.d.ts.map +1 -0
- package/dist/generated/player-timed.js +116 -0
- package/dist/generated/player-timed.js.map +1 -0
- package/dist/generated/projections.d.ts +130 -0
- package/dist/generated/projections.d.ts.map +1 -0
- package/dist/generated/projections.js +101 -0
- package/dist/generated/projections.js.map +1 -0
- package/dist/generated/randart-properties.d.ts +388 -0
- package/dist/generated/randart-properties.d.ts.map +1 -0
- package/dist/generated/randart-properties.js +200 -0
- package/dist/generated/randart-properties.js.map +1 -0
- package/dist/generated/room-flags.d.ts +21 -0
- package/dist/generated/room-flags.d.ts.map +1 -0
- package/dist/generated/room-flags.js +19 -0
- package/dist/generated/room-flags.js.map +1 -0
- package/dist/generated/rooms.d.ts +122 -0
- package/dist/generated/rooms.d.ts.map +1 -0
- package/dist/generated/rooms.js +48 -0
- package/dist/generated/rooms.js.map +1 -0
- package/dist/generated/square-flags.d.ts +96 -0
- package/dist/generated/square-flags.d.ts.map +1 -0
- package/dist/generated/square-flags.js +54 -0
- package/dist/generated/square-flags.js.map +1 -0
- package/dist/generated/stats.d.ts +23 -0
- package/dist/generated/stats.d.ts.map +1 -0
- package/dist/generated/stats.js +20 -0
- package/dist/generated/stats.js.map +1 -0
- package/dist/generated/terrain-flags.d.ts +136 -0
- package/dist/generated/terrain-flags.d.ts.map +1 -0
- package/dist/generated/terrain-flags.js +74 -0
- package/dist/generated/terrain-flags.js.map +1 -0
- package/dist/generated/terrain.d.ts +83 -0
- package/dist/generated/terrain.d.ts.map +1 -0
- package/dist/generated/terrain.js +60 -0
- package/dist/generated/terrain.js.map +1 -0
- package/dist/generated/trap-flags.d.ts +68 -0
- package/dist/generated/trap-flags.d.ts.map +1 -0
- package/dist/generated/trap-flags.js +40 -0
- package/dist/generated/trap-flags.js.map +1 -0
- package/dist/generated/tvals.d.ts +152 -0
- package/dist/generated/tvals.d.ts.map +1 -0
- package/dist/generated/tvals.js +82 -0
- package/dist/generated/tvals.js.map +1 -0
- package/dist/generated/ui-entry-renderers.d.ts +62 -0
- package/dist/generated/ui-entry-renderers.d.ts.map +1 -0
- package/dist/generated/ui-entry-renderers.js +22 -0
- package/dist/generated/ui-entry-renderers.js.map +1 -0
- package/dist/guard.d.ts +43 -0
- package/dist/guard.d.ts.map +1 -0
- package/dist/guard.js +65 -0
- package/dist/guard.js.map +1 -0
- package/dist/host/args.d.ts +129 -0
- package/dist/host/args.d.ts.map +1 -0
- package/dist/host/args.js +251 -0
- package/dist/host/args.js.map +1 -0
- package/dist/host/bridge.d.ts +61 -0
- package/dist/host/bridge.d.ts.map +1 -0
- package/dist/host/bridge.js +176 -0
- package/dist/host/bridge.js.map +1 -0
- package/dist/host/index.d.ts +18 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +18 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/io.d.ts +169 -0
- package/dist/host/io.d.ts.map +1 -0
- package/dist/host/io.js +137 -0
- package/dist/host/io.js.map +1 -0
- package/dist/host/memory.d.ts +56 -0
- package/dist/host/memory.d.ts.map +1 -0
- package/dist/host/memory.js +105 -0
- package/dist/host/memory.js.map +1 -0
- package/dist/host/raw.d.ts +114 -0
- package/dist/host/raw.d.ts.map +1 -0
- package/dist/host/raw.js +107 -0
- package/dist/host/raw.js.map +1 -0
- package/dist/index.d.ts +180 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +222 -0
- package/dist/index.js.map +1 -0
- package/dist/loc.d.ts +63 -0
- package/dist/loc.d.ts.map +1 -0
- package/dist/loc.js +128 -0
- package/dist/loc.js.map +1 -0
- package/dist/mod/hooks.d.ts +204 -0
- package/dist/mod/hooks.d.ts.map +1 -0
- package/dist/mod/hooks.js +161 -0
- package/dist/mod/hooks.js.map +1 -0
- package/dist/mod/ids.d.ts +160 -0
- package/dist/mod/ids.d.ts.map +1 -0
- package/dist/mod/ids.js +343 -0
- package/dist/mod/ids.js.map +1 -0
- package/dist/mod/registry-host.d.ts +156 -0
- package/dist/mod/registry-host.d.ts.map +1 -0
- package/dist/mod/registry-host.js +142 -0
- package/dist/mod/registry-host.js.map +1 -0
- package/dist/mod/save-blocks.d.ts +201 -0
- package/dist/mod/save-blocks.d.ts.map +1 -0
- package/dist/mod/save-blocks.js +640 -0
- package/dist/mod/save-blocks.js.map +1 -0
- package/dist/mod/vocabulary.d.ts +104 -0
- package/dist/mod/vocabulary.d.ts.map +1 -0
- package/dist/mod/vocabulary.js +0 -0
- package/dist/mod/vocabulary.js.map +1 -0
- package/dist/mon/bind.d.ts +266 -0
- package/dist/mon/bind.d.ts.map +1 -0
- package/dist/mon/bind.js +610 -0
- package/dist/mon/bind.js.map +1 -0
- package/dist/mon/desc.d.ts +72 -0
- package/dist/mon/desc.d.ts.map +1 -0
- package/dist/mon/desc.js +237 -0
- package/dist/mon/desc.js.map +1 -0
- package/dist/mon/knowledge-groups.d.ts +61 -0
- package/dist/mon/knowledge-groups.d.ts.map +1 -0
- package/dist/mon/knowledge-groups.js +121 -0
- package/dist/mon/knowledge-groups.js.map +1 -0
- package/dist/mon/lore-describe.d.ts +216 -0
- package/dist/mon/lore-describe.d.ts.map +1 -0
- package/dist/mon/lore-describe.js +1105 -0
- package/dist/mon/lore-describe.js.map +1 -0
- package/dist/mon/lore.d.ts +117 -0
- package/dist/mon/lore.d.ts.map +1 -0
- package/dist/mon/lore.js +221 -0
- package/dist/mon/lore.js.map +1 -0
- package/dist/mon/make.d.ts +147 -0
- package/dist/mon/make.d.ts.map +1 -0
- package/dist/mon/make.js +353 -0
- package/dist/mon/make.js.map +1 -0
- package/dist/mon/monster.d.ts +94 -0
- package/dist/mon/monster.d.ts.map +1 -0
- package/dist/mon/monster.js +90 -0
- package/dist/mon/monster.js.map +1 -0
- package/dist/mon/predicate.d.ts +87 -0
- package/dist/mon/predicate.d.ts.map +1 -0
- package/dist/mon/predicate.js +190 -0
- package/dist/mon/predicate.js.map +1 -0
- package/dist/mon/project-mon.d.ts +129 -0
- package/dist/mon/project-mon.d.ts.map +1 -0
- package/dist/mon/project-mon.js +652 -0
- package/dist/mon/project-mon.js.map +1 -0
- package/dist/mon/spell.d.ts +155 -0
- package/dist/mon/spell.d.ts.map +1 -0
- package/dist/mon/spell.js +355 -0
- package/dist/mon/spell.js.map +1 -0
- package/dist/mon/steal.d.ts +112 -0
- package/dist/mon/steal.d.ts.map +1 -0
- package/dist/mon/steal.js +163 -0
- package/dist/mon/steal.js.map +1 -0
- package/dist/mon/summon.d.ts +62 -0
- package/dist/mon/summon.d.ts.map +1 -0
- package/dist/mon/summon.js +111 -0
- package/dist/mon/summon.js.map +1 -0
- package/dist/mon/take-hit.d.ts +75 -0
- package/dist/mon/take-hit.d.ts.map +1 -0
- package/dist/mon/take-hit.js +122 -0
- package/dist/mon/take-hit.js.map +1 -0
- package/dist/mon/timed.d.ts +74 -0
- package/dist/mon/timed.d.ts.map +1 -0
- package/dist/mon/timed.js +219 -0
- package/dist/mon/timed.js.map +1 -0
- package/dist/mon/types.d.ts +252 -0
- package/dist/mon/types.d.ts.map +1 -0
- package/dist/mon/types.js +46 -0
- package/dist/mon/types.js.map +1 -0
- package/dist/msg.d.ts +71 -0
- package/dist/msg.d.ts.map +1 -0
- package/dist/msg.js +126 -0
- package/dist/msg.js.map +1 -0
- package/dist/obj/artifact-fake.d.ts +39 -0
- package/dist/obj/artifact-fake.d.ts.map +1 -0
- package/dist/obj/artifact-fake.js +52 -0
- package/dist/obj/artifact-fake.js.map +1 -0
- package/dist/obj/artifact-known.d.ts +50 -0
- package/dist/obj/artifact-known.d.ts.map +1 -0
- package/dist/obj/artifact-known.js +55 -0
- package/dist/obj/artifact-known.js.map +1 -0
- package/dist/obj/bind.d.ts +219 -0
- package/dist/obj/bind.d.ts.map +1 -0
- package/dist/obj/bind.js +1239 -0
- package/dist/obj/bind.js.map +1 -0
- package/dist/obj/chest.d.ts +91 -0
- package/dist/obj/chest.d.ts.map +1 -0
- package/dist/obj/chest.js +220 -0
- package/dist/obj/chest.js.map +1 -0
- package/dist/obj/desc.d.ts +79 -0
- package/dist/obj/desc.d.ts.map +1 -0
- package/dist/obj/desc.js +602 -0
- package/dist/obj/desc.js.map +1 -0
- package/dist/obj/effects-info.d.ts +78 -0
- package/dist/obj/effects-info.d.ts.map +1 -0
- package/dist/obj/effects-info.js +240 -0
- package/dist/obj/effects-info.js.map +1 -0
- package/dist/obj/flavor.d.ts +68 -0
- package/dist/obj/flavor.d.ts.map +1 -0
- package/dist/obj/flavor.js +201 -0
- package/dist/obj/flavor.js.map +1 -0
- package/dist/obj/ignore.d.ts +143 -0
- package/dist/obj/ignore.d.ts.map +1 -0
- package/dist/obj/ignore.js +345 -0
- package/dist/obj/ignore.js.map +1 -0
- package/dist/obj/knowledge.d.ts +520 -0
- package/dist/obj/knowledge.d.ts.map +1 -0
- package/dist/obj/knowledge.js +1364 -0
- package/dist/obj/knowledge.js.map +1 -0
- package/dist/obj/known-object.d.ts +293 -0
- package/dist/obj/known-object.d.ts.map +1 -0
- package/dist/obj/known-object.js +532 -0
- package/dist/obj/known-object.js.map +1 -0
- package/dist/obj/make.d.ts +292 -0
- package/dist/obj/make.d.ts.map +1 -0
- package/dist/obj/make.js +1055 -0
- package/dist/obj/make.js.map +1 -0
- package/dist/obj/object-info.d.ts +188 -0
- package/dist/obj/object-info.d.ts.map +1 -0
- package/dist/obj/object-info.js +1407 -0
- package/dist/obj/object-info.js.map +1 -0
- package/dist/obj/object.d.ts +335 -0
- package/dist/obj/object.d.ts.map +1 -0
- package/dist/obj/object.js +1051 -0
- package/dist/obj/object.js.map +1 -0
- package/dist/obj/power.d.ts +65 -0
- package/dist/obj/power.d.ts.map +1 -0
- package/dist/obj/power.js +580 -0
- package/dist/obj/power.js.map +1 -0
- package/dist/obj/randart-build.d.ts +223 -0
- package/dist/obj/randart-build.d.ts.map +1 -0
- package/dist/obj/randart-build.js +1444 -0
- package/dist/obj/randart-build.js.map +1 -0
- package/dist/obj/randart-data.d.ts +179 -0
- package/dist/obj/randart-data.d.ts.map +1 -0
- package/dist/obj/randart-data.js +1153 -0
- package/dist/obj/randart-data.js.map +1 -0
- package/dist/obj/randart.d.ts +128 -0
- package/dist/obj/randart.d.ts.map +1 -0
- package/dist/obj/randart.js +458 -0
- package/dist/obj/randart.js.map +1 -0
- package/dist/obj/randname.d.ts +33 -0
- package/dist/obj/randname.d.ts.map +1 -0
- package/dist/obj/randname.js +116 -0
- package/dist/obj/randname.js.map +1 -0
- package/dist/obj/recharge.d.ts +28 -0
- package/dist/obj/recharge.d.ts.map +1 -0
- package/dist/obj/recharge.js +52 -0
- package/dist/obj/recharge.js.map +1 -0
- package/dist/obj/types.d.ts +584 -0
- package/dist/obj/types.d.ts.map +1 -0
- package/dist/obj/types.js +104 -0
- package/dist/obj/types.js.map +1 -0
- package/dist/obj/value.d.ts +64 -0
- package/dist/obj/value.d.ts.map +1 -0
- package/dist/obj/value.js +176 -0
- package/dist/obj/value.js.map +1 -0
- package/dist/player/abilities.d.ts +57 -0
- package/dist/player/abilities.d.ts.map +1 -0
- package/dist/player/abilities.js +118 -0
- package/dist/player/abilities.js.map +1 -0
- package/dist/player/best-digger.d.ts +42 -0
- package/dist/player/best-digger.d.ts.map +1 -0
- package/dist/player/best-digger.js +89 -0
- package/dist/player/best-digger.js.map +1 -0
- package/dist/player/bind.d.ts +270 -0
- package/dist/player/bind.d.ts.map +1 -0
- package/dist/player/bind.js +698 -0
- package/dist/player/bind.js.map +1 -0
- package/dist/player/birth.d.ts +258 -0
- package/dist/player/birth.d.ts.map +1 -0
- package/dist/player/birth.js +639 -0
- package/dist/player/birth.js.map +1 -0
- package/dist/player/calcs.d.ts +403 -0
- package/dist/player/calcs.d.ts.map +1 -0
- package/dist/player/calcs.js +1189 -0
- package/dist/player/calcs.js.map +1 -0
- package/dist/player/combat-regen.d.ts +14 -0
- package/dist/player/combat-regen.d.ts.map +1 -0
- package/dist/player/combat-regen.js +29 -0
- package/dist/player/combat-regen.js.map +1 -0
- package/dist/player/exp.d.ts +96 -0
- package/dist/player/exp.d.ts.map +1 -0
- package/dist/player/exp.js +229 -0
- package/dist/player/exp.js.map +1 -0
- package/dist/player/history.d.ts +91 -0
- package/dist/player/history.d.ts.map +1 -0
- package/dist/player/history.js +145 -0
- package/dist/player/history.js.map +1 -0
- package/dist/player/options.d.ts +123 -0
- package/dist/player/options.d.ts.map +1 -0
- package/dist/player/options.js +199 -0
- package/dist/player/options.js.map +1 -0
- package/dist/player/player.d.ts +242 -0
- package/dist/player/player.d.ts.map +1 -0
- package/dist/player/player.js +119 -0
- package/dist/player/player.js.map +1 -0
- package/dist/player/shape-lore.d.ts +56 -0
- package/dist/player/shape-lore.d.ts.map +1 -0
- package/dist/player/shape-lore.js +221 -0
- package/dist/player/shape-lore.js.map +1 -0
- package/dist/player/spell.d.ts +146 -0
- package/dist/player/spell.d.ts.map +1 -0
- package/dist/player/spell.js +519 -0
- package/dist/player/spell.js.map +1 -0
- package/dist/player/take-hit.d.ts +87 -0
- package/dist/player/take-hit.d.ts.map +1 -0
- package/dist/player/take-hit.js +99 -0
- package/dist/player/take-hit.js.map +1 -0
- package/dist/player/timed.d.ts +205 -0
- package/dist/player/timed.d.ts.map +1 -0
- package/dist/player/timed.js +310 -0
- package/dist/player/timed.js.map +1 -0
- package/dist/player/types.d.ts +390 -0
- package/dist/player/types.d.ts.map +1 -0
- package/dist/player/types.js +51 -0
- package/dist/player/types.js.map +1 -0
- package/dist/rational.d.ts +99 -0
- package/dist/rational.d.ts.map +1 -0
- package/dist/rational.js +345 -0
- package/dist/rational.js.map +1 -0
- package/dist/rng.d.ts +168 -0
- package/dist/rng.d.ts.map +1 -0
- package/dist/rng.js +404 -0
- package/dist/rng.js.map +1 -0
- package/dist/save/buffer.d.ts +120 -0
- package/dist/save/buffer.d.ts.map +1 -0
- package/dist/save/buffer.js +238 -0
- package/dist/save/buffer.js.map +1 -0
- package/dist/save/compress.d.ts +79 -0
- package/dist/save/compress.d.ts.map +1 -0
- package/dist/save/compress.js +97 -0
- package/dist/save/compress.js.map +1 -0
- package/dist/save/description.d.ts +61 -0
- package/dist/save/description.d.ts.map +1 -0
- package/dist/save/description.js +51 -0
- package/dist/save/description.js.map +1 -0
- package/dist/save/integrity.d.ts +59 -0
- package/dist/save/integrity.d.ts.map +1 -0
- package/dist/save/integrity.js +103 -0
- package/dist/save/integrity.js.map +1 -0
- package/dist/score/display.d.ts +40 -0
- package/dist/score/display.d.ts.map +1 -0
- package/dist/score/display.js +86 -0
- package/dist/score/display.js.map +1 -0
- package/dist/score/score.d.ts +166 -0
- package/dist/score/score.d.ts.map +1 -0
- package/dist/score/score.js +244 -0
- package/dist/score/score.js.map +1 -0
- package/dist/score/types.d.ts +98 -0
- package/dist/score/types.d.ts.map +1 -0
- package/dist/score/types.js +27 -0
- package/dist/score/types.js.map +1 -0
- package/dist/session/boot.d.ts +207 -0
- package/dist/session/boot.d.ts.map +1 -0
- package/dist/session/boot.js +151 -0
- package/dist/session/boot.js.map +1 -0
- package/dist/session/game.d.ts +257 -0
- package/dist/session/game.d.ts.map +1 -0
- package/dist/session/game.js +2880 -0
- package/dist/session/game.js.map +1 -0
- package/dist/session/save.d.ts +847 -0
- package/dist/session/save.d.ts.map +1 -0
- package/dist/session/save.js +1306 -0
- package/dist/session/save.js.map +1 -0
- package/dist/sound/engine.d.ts +146 -0
- package/dist/sound/engine.d.ts.map +1 -0
- package/dist/sound/engine.js +332 -0
- package/dist/sound/engine.js.map +1 -0
- package/dist/sound/index.d.ts +13 -0
- package/dist/sound/index.d.ts.map +1 -0
- package/dist/sound/index.js +13 -0
- package/dist/sound/index.js.map +1 -0
- package/dist/sound/sound-prefs-data.d.ts +10 -0
- package/dist/sound/sound-prefs-data.d.ts.map +1 -0
- package/dist/sound/sound-prefs-data.js +165 -0
- package/dist/sound/sound-prefs-data.js.map +1 -0
- package/dist/sound/types.d.ts +64 -0
- package/dist/sound/types.d.ts.map +1 -0
- package/dist/sound/types.js +23 -0
- package/dist/sound/types.js.map +1 -0
- package/dist/store/bind.d.ts +43 -0
- package/dist/store/bind.d.ts.map +1 -0
- package/dist/store/bind.js +130 -0
- package/dist/store/bind.js.map +1 -0
- package/dist/store/price.d.ts +27 -0
- package/dist/store/price.d.ts.map +1 -0
- package/dist/store/price.js +81 -0
- package/dist/store/price.js.map +1 -0
- package/dist/store/store-cmd.d.ts +51 -0
- package/dist/store/store-cmd.d.ts.map +1 -0
- package/dist/store/store-cmd.js +73 -0
- package/dist/store/store-cmd.js.map +1 -0
- package/dist/store/store.d.ts +156 -0
- package/dist/store/store.d.ts.map +1 -0
- package/dist/store/store.js +616 -0
- package/dist/store/store.js.map +1 -0
- package/dist/store/transact.d.ts +198 -0
- package/dist/store/transact.d.ts.map +1 -0
- package/dist/store/transact.js +383 -0
- package/dist/store/transact.js.map +1 -0
- package/dist/store/types.d.ts +101 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/store/types.js +14 -0
- package/dist/store/types.js.map +1 -0
- package/dist/version.d.ts +25 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +25 -0
- package/dist/version.js.map +1 -0
- package/dist/visuals/engine.d.ts +223 -0
- package/dist/visuals/engine.d.ts.map +1 -0
- package/dist/visuals/engine.js +357 -0
- package/dist/visuals/engine.js.map +1 -0
- package/dist/visuals/glyph-table.d.ts +112 -0
- package/dist/visuals/glyph-table.d.ts.map +1 -0
- package/dist/visuals/glyph-table.js +156 -0
- package/dist/visuals/glyph-table.js.map +1 -0
- package/dist/visuals/grafmode-data.d.ts +4 -0
- package/dist/visuals/grafmode-data.d.ts.map +1 -0
- package/dist/visuals/grafmode-data.js +88 -0
- package/dist/visuals/grafmode-data.js.map +1 -0
- package/dist/visuals/grafmode.d.ts +83 -0
- package/dist/visuals/grafmode.d.ts.map +1 -0
- package/dist/visuals/grafmode.js +82 -0
- package/dist/visuals/grafmode.js.map +1 -0
- package/dist/visuals/index.d.ts +19 -0
- package/dist/visuals/index.d.ts.map +1 -0
- package/dist/visuals/index.js +19 -0
- package/dist/visuals/index.js.map +1 -0
- package/dist/visuals/map-text.d.ts +79 -0
- package/dist/visuals/map-text.d.ts.map +1 -0
- package/dist/visuals/map-text.js +122 -0
- package/dist/visuals/map-text.js.map +1 -0
- package/dist/visuals/pref-expr.d.ts +56 -0
- package/dist/visuals/pref-expr.d.ts.map +1 -0
- package/dist/visuals/pref-expr.js +173 -0
- package/dist/visuals/pref-expr.js.map +1 -0
- package/dist/visuals/prefs.d.ts +280 -0
- package/dist/visuals/prefs.d.ts.map +1 -0
- package/dist/visuals/prefs.js +835 -0
- package/dist/visuals/prefs.js.map +1 -0
- package/dist/visuals/tile-prefs.d.ts +132 -0
- package/dist/visuals/tile-prefs.d.ts.map +1 -0
- package/dist/visuals/tile-prefs.js +105 -0
- package/dist/visuals/tile-prefs.js.map +1 -0
- package/dist/world/chunk.d.ts +195 -0
- package/dist/world/chunk.d.ts.map +1 -0
- package/dist/world/chunk.js +422 -0
- package/dist/world/chunk.js.map +1 -0
- package/dist/world/feature.d.ts +86 -0
- package/dist/world/feature.d.ts.map +1 -0
- package/dist/world/feature.js +153 -0
- package/dist/world/feature.js.map +1 -0
- package/dist/world/flow.d.ts +33 -0
- package/dist/world/flow.d.ts.map +1 -0
- package/dist/world/flow.js +115 -0
- package/dist/world/flow.js.map +1 -0
- package/dist/world/project.d.ts +176 -0
- package/dist/world/project.d.ts.map +1 -0
- package/dist/world/project.js +543 -0
- package/dist/world/project.js.map +1 -0
- package/dist/world/projection.d.ts +100 -0
- package/dist/world/projection.d.ts.map +1 -0
- package/dist/world/projection.js +152 -0
- package/dist/world/projection.js.map +1 -0
- package/dist/world/scatter.d.ts +25 -0
- package/dist/world/scatter.d.ts.map +1 -0
- package/dist/world/scatter.js +54 -0
- package/dist/world/scatter.js.map +1 -0
- package/dist/world/trap.d.ts +84 -0
- package/dist/world/trap.d.ts.map +1 -0
- package/dist/world/trap.js +106 -0
- package/dist/world/trap.js.map +1 -0
- package/dist/world/view.d.ts +60 -0
- package/dist/world/view.d.ts.map +1 -0
- package/dist/world/view.js +436 -0
- package/dist/world/view.js.map +1 -0
- package/dist/z-queue.d.ts +133 -0
- package/dist/z-queue.d.ts.map +1 -0
- package/dist/z-queue.js +283 -0
- package/dist/z-queue.js.map +1 -0
- package/package.json +75 -0
- package/src/agent/act.ts +114 -0
- package/src/agent/controller.ts +109 -0
- package/src/agent/events.ts +47 -0
- package/src/agent/index.ts +36 -0
- package/src/agent/perceive.ts +440 -0
- package/src/agent/types.ts +464 -0
- package/src/bitflag.ts +536 -0
- package/src/cmd.ts +547 -0
- package/src/color.ts +267 -0
- package/src/combat/brand-slay.ts +360 -0
- package/src/combat/hit.ts +471 -0
- package/src/combat/index.ts +15 -0
- package/src/combat/melee.ts +728 -0
- package/src/combat/mon-melee.ts +1153 -0
- package/src/combat/ranged.ts +397 -0
- package/src/constants.ts +324 -0
- package/src/dice.ts +467 -0
- package/src/effects/effect-choice.ts +32 -0
- package/src/effects/effect-info.ts +859 -0
- package/src/effects/effect.ts +560 -0
- package/src/effects/handlers.ts +452 -0
- package/src/effects/interpreter.ts +603 -0
- package/src/events.ts +317 -0
- package/src/expression.ts +360 -0
- package/src/game/cave-cmd.ts +1147 -0
- package/src/game/char-sheet.ts +557 -0
- package/src/game/chest.ts +348 -0
- package/src/game/context.ts +1218 -0
- package/src/game/curse-tick.ts +130 -0
- package/src/game/describe.ts +62 -0
- package/src/game/display.ts +838 -0
- package/src/game/dump-level.ts +114 -0
- package/src/game/effect-attack.ts +746 -0
- package/src/game/effect-detect.ts +542 -0
- package/src/game/effect-env.ts +252 -0
- package/src/game/effect-game-env.ts +86 -0
- package/src/game/effect-general.ts +1122 -0
- package/src/game/effect-item.ts +999 -0
- package/src/game/effect-melee.ts +557 -0
- package/src/game/effect-mon-origin.ts +196 -0
- package/src/game/effect-monster.ts +310 -0
- package/src/game/effect-summon.ts +161 -0
- package/src/game/effect-teleport.ts +645 -0
- package/src/game/effect-terrain.ts +881 -0
- package/src/game/energy.ts +61 -0
- package/src/game/equip-cmp.ts +476 -0
- package/src/game/floor.ts +524 -0
- package/src/game/gear.ts +1352 -0
- package/src/game/harness.ts +270 -0
- package/src/game/history.ts +78 -0
- package/src/game/ignore-cmd.ts +68 -0
- package/src/game/inscription-confirm.ts +115 -0
- package/src/game/known.ts +960 -0
- package/src/game/loop.ts +671 -0
- package/src/game/lore-color.ts +108 -0
- package/src/game/mon-cast.ts +409 -0
- package/src/game/mon-cmd.ts +767 -0
- package/src/game/mon-death.ts +459 -0
- package/src/game/mon-group.ts +368 -0
- package/src/game/mon-list.ts +213 -0
- package/src/game/mon-message.ts +359 -0
- package/src/game/mon-place.ts +1012 -0
- package/src/game/mon-ranged.ts +405 -0
- package/src/game/mon-shape.ts +161 -0
- package/src/game/mon-side.ts +511 -0
- package/src/game/monster-turn.ts +1750 -0
- package/src/game/obj-cmd.ts +1970 -0
- package/src/game/obj-list.ts +302 -0
- package/src/game/object-inspect.ts +162 -0
- package/src/game/pickup.ts +483 -0
- package/src/game/player-path.ts +1434 -0
- package/src/game/player-side.ts +555 -0
- package/src/game/player-turn.ts +852 -0
- package/src/game/project-cast.ts +766 -0
- package/src/game/project-feat.ts +386 -0
- package/src/game/project-monster.ts +407 -0
- package/src/game/project-obj.ts +298 -0
- package/src/game/project-player.ts +236 -0
- package/src/game/quest.ts +248 -0
- package/src/game/ranged-cmd.ts +417 -0
- package/src/game/scheduler.ts +150 -0
- package/src/game/spell-cmd.ts +404 -0
- package/src/game/spoil.ts +562 -0
- package/src/game/steal.ts +169 -0
- package/src/game/take-hit-hooks.ts +152 -0
- package/src/game/target-loop.ts +501 -0
- package/src/game/target.ts +424 -0
- package/src/game/thrust.ts +174 -0
- package/src/game/trap.ts +791 -0
- package/src/game/ui-entry.ts +2075 -0
- package/src/game/wizard.ts +1760 -0
- package/src/game/world.ts +786 -0
- package/src/gen/cave.ts +2858 -0
- package/src/gen/gen-monster.ts +592 -0
- package/src/gen/generate.ts +523 -0
- package/src/gen/room.ts +2213 -0
- package/src/gen/util.ts +1958 -0
- package/src/generated/dun-profiles.ts +30 -0
- package/src/generated/effects.ts +241 -0
- package/src/generated/elements.ts +62 -0
- package/src/generated/equip-slots.ts +36 -0
- package/src/generated/history-types.ts +34 -0
- package/src/generated/ignore-types.ts +66 -0
- package/src/generated/index.ts +33 -0
- package/src/generated/kind-flags.ts +44 -0
- package/src/generated/message.ts +320 -0
- package/src/generated/mon-message.ts +138 -0
- package/src/generated/mon-race-flags.ts +182 -0
- package/src/generated/mon-spells.ts +198 -0
- package/src/generated/mon-temp-flags.ts +34 -0
- package/src/generated/mon-timed.ts +34 -0
- package/src/generated/object-flags.ts +95 -0
- package/src/generated/object-modifiers.ts +43 -0
- package/src/generated/options.ts +104 -0
- package/src/generated/origins.ts +64 -0
- package/src/generated/parser-errors.ts +140 -0
- package/src/generated/player-flags.ts +48 -0
- package/src/generated/player-timed.ts +118 -0
- package/src/generated/projections.ts +103 -0
- package/src/generated/randart-properties.ts +202 -0
- package/src/generated/room-flags.ts +21 -0
- package/src/generated/rooms.ts +50 -0
- package/src/generated/square-flags.ts +56 -0
- package/src/generated/stats.ts +22 -0
- package/src/generated/terrain-flags.ts +76 -0
- package/src/generated/terrain.ts +62 -0
- package/src/generated/trap-flags.ts +42 -0
- package/src/generated/tvals.ts +84 -0
- package/src/generated/ui-entry-renderers.ts +24 -0
- package/src/guard.ts +70 -0
- package/src/host/args.ts +334 -0
- package/src/host/bridge.ts +193 -0
- package/src/host/index.ts +18 -0
- package/src/host/io.ts +239 -0
- package/src/host/memory.ts +134 -0
- package/src/host/raw.ts +190 -0
- package/src/index.ts +250 -0
- package/src/loc.ts +157 -0
- package/src/mod/hooks.ts +278 -0
- package/src/mod/ids.ts +390 -0
- package/src/mod/registry-host.ts +258 -0
- package/src/mod/save-blocks.ts +787 -0
- package/src/mod/vocabulary.ts +0 -0
- package/src/mon/bind.ts +899 -0
- package/src/mon/desc.ts +212 -0
- package/src/mon/knowledge-groups.ts +164 -0
- package/src/mon/lore-describe.ts +1414 -0
- package/src/mon/lore.ts +306 -0
- package/src/mon/make.ts +422 -0
- package/src/mon/monster.ts +161 -0
- package/src/mon/predicate.ts +220 -0
- package/src/mon/project-mon.ts +855 -0
- package/src/mon/spell.ts +418 -0
- package/src/mon/steal.ts +246 -0
- package/src/mon/summon.ts +145 -0
- package/src/mon/take-hit.ts +195 -0
- package/src/mon/timed.ts +300 -0
- package/src/mon/types.ts +286 -0
- package/src/msg.ts +146 -0
- package/src/obj/artifact-fake.ts +63 -0
- package/src/obj/artifact-known.ts +69 -0
- package/src/obj/bind.ts +1345 -0
- package/src/obj/chest.ts +249 -0
- package/src/obj/desc.ts +699 -0
- package/src/obj/effects-info.ts +349 -0
- package/src/obj/flavor.ts +256 -0
- package/src/obj/ignore.ts +387 -0
- package/src/obj/knowledge.ts +1577 -0
- package/src/obj/known-object.ts +718 -0
- package/src/obj/make.ts +1367 -0
- package/src/obj/object-info.ts +1737 -0
- package/src/obj/object.ts +1296 -0
- package/src/obj/power.ts +674 -0
- package/src/obj/randart-build.ts +1705 -0
- package/src/obj/randart-data.ts +1344 -0
- package/src/obj/randart.ts +552 -0
- package/src/obj/randname.ts +128 -0
- package/src/obj/recharge.ts +62 -0
- package/src/obj/types.ts +559 -0
- package/src/obj/value.ts +215 -0
- package/src/player/abilities.ts +142 -0
- package/src/player/best-digger.ts +118 -0
- package/src/player/bind.ts +1021 -0
- package/src/player/birth.ts +794 -0
- package/src/player/calcs.ts +1522 -0
- package/src/player/combat-regen.ts +33 -0
- package/src/player/exp.ts +275 -0
- package/src/player/history.ts +211 -0
- package/src/player/options.ts +244 -0
- package/src/player/player.ts +356 -0
- package/src/player/shape-lore.ts +250 -0
- package/src/player/spell.ts +627 -0
- package/src/player/take-hit.ts +173 -0
- package/src/player/timed.ts +482 -0
- package/src/player/types.ts +415 -0
- package/src/rational.ts +388 -0
- package/src/rng.ts +476 -0
- package/src/save/buffer.ts +287 -0
- package/src/save/compress.ts +132 -0
- package/src/save/description.ts +70 -0
- package/src/save/integrity.ts +133 -0
- package/src/score/display.ts +125 -0
- package/src/score/score.ts +341 -0
- package/src/score/types.ts +104 -0
- package/src/session/boot.ts +338 -0
- package/src/session/game.ts +3712 -0
- package/src/session/save.ts +2074 -0
- package/src/sound/engine.ts +375 -0
- package/src/sound/index.ts +13 -0
- package/src/sound/sound-prefs-data.ts +173 -0
- package/src/sound/types.ts +68 -0
- package/src/store/bind.ts +145 -0
- package/src/store/price.ts +97 -0
- package/src/store/store-cmd.ts +73 -0
- package/src/store/store.ts +723 -0
- package/src/store/transact.ts +644 -0
- package/src/store/types.ts +110 -0
- package/src/version.ts +26 -0
- package/src/visuals/engine.ts +444 -0
- package/src/visuals/glyph-table.ts +191 -0
- package/src/visuals/grafmode-data.ts +90 -0
- package/src/visuals/grafmode.ts +123 -0
- package/src/visuals/index.ts +19 -0
- package/src/visuals/map-text.ts +152 -0
- package/src/visuals/pref-expr.ts +182 -0
- package/src/visuals/prefs.ts +981 -0
- package/src/visuals/tile-prefs.ts +183 -0
- package/src/world/chunk.ts +531 -0
- package/src/world/feature.ts +215 -0
- package/src/world/flow.ts +128 -0
- package/src/world/project.ts +687 -0
- package/src/world/projection.ts +228 -0
- package/src/world/scatter.ts +72 -0
- package/src/world/trap.ts +155 -0
- package/src/world/view.ts +513 -0
- package/src/z-queue.ts +300 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The behaviour seam: the closed set of points where a mod may change what the
|
|
3
|
+
* ENGINE does, as opposed to what content it runs on.
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS EXISTS
|
|
6
|
+
*
|
|
7
|
+
* Content mods are already fully expressible - a pack contributes records and
|
|
8
|
+
* composeContentPacks merges them, and core never learns a mod was involved.
|
|
9
|
+
* Behaviour is different. A fix like "don't log a duplicate unique kill" is not a
|
|
10
|
+
* record; it is a decision taken inside a function, and no amount of data can
|
|
11
|
+
* reach inside that function from outside. So the first cut of the bundled
|
|
12
|
+
* bug-fixes / QoL mods did the only thing that was available: the FIX LIVED IN
|
|
13
|
+
* CORE behind `if (modRuleEnabled(state, "bugfix.x"))`.
|
|
14
|
+
*
|
|
15
|
+
* That was wrong, and neostryder named exactly why (2026-07-29): "the whole point of
|
|
16
|
+
* making them mods was to exclude them from the core game." A flag-gated fix is
|
|
17
|
+
* not excluded from core. It ships in core, it is tested in core, and core
|
|
18
|
+
* carries the string "bugfix.uniqueKillHistory" - so core knows the mod's name.
|
|
19
|
+
* Deleting the mod folder would not delete one line of it.
|
|
20
|
+
*
|
|
21
|
+
* WHAT THIS CHANGES, AND WHAT IT HONESTLY DOES NOT
|
|
22
|
+
*
|
|
23
|
+
* After this, core contains no mod's fix and no mod's name: no `bugfix.*` or
|
|
24
|
+
* `qol.*` literal, no staircase repair, no message rewriter. Each fix body lives
|
|
25
|
+
* in its mod's own folder and arrives as that mod's code.
|
|
26
|
+
*
|
|
27
|
+
* What core still contains - and cannot stop containing - is the SEAM ITSELF:
|
|
28
|
+
* one named, documented extension point per behaviour a mod may override. That
|
|
29
|
+
* is not a residue of the bundled mods; it is the price of behaviour modding at
|
|
30
|
+
* all, and it is the same bargain SKSE, Forge and every other real modding
|
|
31
|
+
* system strikes. The difference from a flag read is the difference that matters:
|
|
32
|
+
* a seam is generic and available to ANY mod, and it holds no opinion about what
|
|
33
|
+
* should plug into it, whereas `if (modRuleEnabled(state, "bugfix.stairsReachable"))`
|
|
34
|
+
* is core implementing one specific mod.
|
|
35
|
+
*
|
|
36
|
+
* SHAPE
|
|
37
|
+
*
|
|
38
|
+
* A plain interface of optional functions rather than a string-keyed registry,
|
|
39
|
+
* for three reasons:
|
|
40
|
+
*
|
|
41
|
+
* - It is typed end to end. A registry keyed by strings pushes every payload
|
|
42
|
+
* through `unknown` and moves the errors to runtime.
|
|
43
|
+
* - "A disabled mod's patches DO NOT EXIST" becomes literally true, not merely
|
|
44
|
+
* false-y: with no mod loaded the field is ABSENT, the optional call is not
|
|
45
|
+
* made, and the faithful path is the only path that was ever compiled into
|
|
46
|
+
* the branch. No flag map is consulted because there is no flag map.
|
|
47
|
+
* - It costs nothing. `state.modHooks?.historyAdd?.(...)` on an absent object is
|
|
48
|
+
* one undefined check, not a map lookup per call.
|
|
49
|
+
*
|
|
50
|
+
* COMPOSITION IS THE HOST'S JOB
|
|
51
|
+
*
|
|
52
|
+
* Two enabled mods may both want the same hook. Core deliberately holds ONE
|
|
53
|
+
* ModHooks and knows nothing about mod identity, ordering or enablement - the
|
|
54
|
+
* host (web/cli) collects each enabled mod's contributions in load order and
|
|
55
|
+
* folds them into a single object (see composeModHooks). This is the same
|
|
56
|
+
* layering as content: core consumes a composed result and never the pack list.
|
|
57
|
+
*
|
|
58
|
+
* DETERMINISM
|
|
59
|
+
*
|
|
60
|
+
* Two of these run inside the generation and object pipelines, where an extra
|
|
61
|
+
* RNG draw does not merely change a value, it desynchronises every draw after
|
|
62
|
+
* it - so a seed would stop meaning the same level. Those hooks are documented
|
|
63
|
+
* RNG-FREE and are given no rng to draw from. That is a contract a mod can still
|
|
64
|
+
* break by reaching for a global; the test suite pins it by running generation
|
|
65
|
+
* with a hook installed and asserting the level is bit-identical.
|
|
66
|
+
*/
|
|
67
|
+
/**
|
|
68
|
+
* Fold several mods' contributions into the single ModHooks core holds.
|
|
69
|
+
*
|
|
70
|
+
* Order is LOAD order, and what "later wins" means differs per hook because the
|
|
71
|
+
* hooks differ in kind - which is precisely why this is one written-down function
|
|
72
|
+
* and not a generic merge:
|
|
73
|
+
*
|
|
74
|
+
* - VETO hooks (levelGenerated, artifactCommit, historyAdd) are conjunctive:
|
|
75
|
+
* every contributor must agree, and the first refusal decides. This is the
|
|
76
|
+
* only safe fold - a mod that vetoes a duplicate artifact must not be
|
|
77
|
+
* overruled by a later mod that merely has no opinion.
|
|
78
|
+
* - TRANSFORM hooks (messageText) compose in order, each seeing the previous
|
|
79
|
+
* one's output.
|
|
80
|
+
* - FIRST-HANDLER hooks (walkBlockedByDiggable) stop at the first non-null, so
|
|
81
|
+
* an earlier mod's handling wins and a later one cannot double-spend energy.
|
|
82
|
+
* - ANY hooks (saveNoiseScent) are disjunctive: one mod asking for the data is
|
|
83
|
+
* enough, because the data is additive and a second mod cannot object.
|
|
84
|
+
* - ORDERING hooks (objectListTiebreak) stop at the first non-zero answer, the
|
|
85
|
+
* same way a lexicographic comparator chains.
|
|
86
|
+
*
|
|
87
|
+
* Returns undefined when nothing contributed, so the caller can leave the field
|
|
88
|
+
* absent rather than storing an empty object - keeping "no mod loaded" and "a
|
|
89
|
+
* mod loaded that touches nothing" indistinguishable from core's side.
|
|
90
|
+
*/
|
|
91
|
+
export function composeModHooks(contributions) {
|
|
92
|
+
const list = contributions.filter((c) => Object.keys(c).length > 0);
|
|
93
|
+
if (list.length === 0)
|
|
94
|
+
return undefined;
|
|
95
|
+
const out = {};
|
|
96
|
+
const walk = list.map((c) => c.walkBlockedByDiggable).filter(isFn);
|
|
97
|
+
if (walk.length > 0) {
|
|
98
|
+
out.walkBlockedByDiggable = (state, grid, deps) => {
|
|
99
|
+
for (const fn of walk) {
|
|
100
|
+
const energy = fn(state, grid, deps);
|
|
101
|
+
if (energy !== null)
|
|
102
|
+
return energy;
|
|
103
|
+
}
|
|
104
|
+
return null;
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
const tiebreak = list.map((c) => c.objectListTiebreak).filter(isFn);
|
|
108
|
+
if (tiebreak.length > 0) {
|
|
109
|
+
out.objectListTiebreak = (a, b) => {
|
|
110
|
+
for (const fn of tiebreak) {
|
|
111
|
+
const r = fn(a, b);
|
|
112
|
+
if (r !== 0)
|
|
113
|
+
return r;
|
|
114
|
+
}
|
|
115
|
+
return 0;
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
const level = list.map((c) => c.levelGenerated).filter(isFn);
|
|
119
|
+
if (level.length > 0) {
|
|
120
|
+
out.levelGenerated = (gen, quest) => {
|
|
121
|
+
/* Every contributor runs even after one has repaired the level, because a
|
|
122
|
+
* second mod's invariant is not satisfied by the first mod's repair. The
|
|
123
|
+
* first REFUSAL short-circuits, since the level is being thrown away. */
|
|
124
|
+
for (const fn of level)
|
|
125
|
+
if (!fn(gen, quest))
|
|
126
|
+
return false;
|
|
127
|
+
return true;
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
const artifact = list.map((c) => c.artifactCommit).filter(isFn);
|
|
131
|
+
if (artifact.length > 0) {
|
|
132
|
+
out.artifactCommit = (aidx, alreadyCreated) => {
|
|
133
|
+
for (const fn of artifact)
|
|
134
|
+
if (!fn(aidx, alreadyCreated))
|
|
135
|
+
return false;
|
|
136
|
+
return true;
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
const history = list.map((c) => c.historyAdd).filter(isFn);
|
|
140
|
+
if (history.length > 0) {
|
|
141
|
+
out.historyAdd = (entry) => {
|
|
142
|
+
for (const fn of history)
|
|
143
|
+
if (!fn(entry))
|
|
144
|
+
return false;
|
|
145
|
+
return true;
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
const noise = list.map((c) => c.saveNoiseScent).filter(isFn);
|
|
149
|
+
if (noise.length > 0) {
|
|
150
|
+
out.saveNoiseScent = () => noise.some((fn) => fn());
|
|
151
|
+
}
|
|
152
|
+
const text = list.map((c) => c.messageText).filter(isFn);
|
|
153
|
+
if (text.length > 0) {
|
|
154
|
+
out.messageText = (raw) => text.reduce((s, fn) => fn(s), raw);
|
|
155
|
+
}
|
|
156
|
+
return out;
|
|
157
|
+
}
|
|
158
|
+
function isFn(v) {
|
|
159
|
+
return typeof v === "function";
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/mod/hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content ids: the load-bearing rule of the mod substrate (MOD_LIFECYCLE.md
|
|
3
|
+
* section 1, decision 19/1). Saves reference content by a stable namespaced
|
|
4
|
+
* string id - `core:kobold`, `frost:frost-wyrm` - never by a numeric array
|
|
5
|
+
* index. Upstream Angband serializes an r_idx / k_idx (an array position);
|
|
6
|
+
* add or remove one record and every later index shifts, silently corrupting
|
|
7
|
+
* older saves. Ids never move: adding, removing, or reordering content leaves
|
|
8
|
+
* every existing id pointing at the same thing.
|
|
9
|
+
*
|
|
10
|
+
* An id is `<namespace>:<localid>`. The namespace is the owning pack (`core`
|
|
11
|
+
* for the base game, pack zero). The localid is derived from the entity's own
|
|
12
|
+
* stable fields (its name/code, and for object kinds its tval) - so for the
|
|
13
|
+
* overwhelming majority of content it is identical no matter what else is
|
|
14
|
+
* loaded; only genuine duplicate names take an order-dependent suffix (see
|
|
15
|
+
* below). The localid is only required to be unique WITHIN its registry and
|
|
16
|
+
* namespace: an id's entity TYPE is implied by where it appears in the save (a
|
|
17
|
+
* kind reference is always a kind id), so a kind and a race may share a
|
|
18
|
+
* localid without ambiguity.
|
|
19
|
+
*
|
|
20
|
+
* This module is the one place ids are minted and resolved. The
|
|
21
|
+
* ContentIdResolver builds both directions (index <-> id) once from the bound
|
|
22
|
+
* registries.
|
|
23
|
+
*
|
|
24
|
+
* Duplicate names are real. Angband content is not name-unique: some egos
|
|
25
|
+
* ship twice under one name (e.g. "of Slay Animal" for both melee and
|
|
26
|
+
* launchers), several traps share a name with different effects ("dart trap"
|
|
27
|
+
* appears three times), and the "greater" variants ("*Healing*" vs "Healing")
|
|
28
|
+
* slug to the same token. A raw name therefore cannot be the key. When two
|
|
29
|
+
* entities in one registry would mint the same localid, the later one (in the
|
|
30
|
+
* registry's own binding order) gets a numeric suffix - `of-slay-animal`,
|
|
31
|
+
* `of-slay-animal-2`. This is deterministic and applied identically when
|
|
32
|
+
* writing and when reading a save, so the round-trip is exact. It is stable
|
|
33
|
+
* as long as content is APPENDED (mods live in their own namespace; core's
|
|
34
|
+
* frozen datafiles and cross-version additions append), which is the same
|
|
35
|
+
* append-only assumption every mod ecosystem relies on - and strictly less
|
|
36
|
+
* fragile than upstream's bare-index scheme, which breaks on ANY reorder.
|
|
37
|
+
*/
|
|
38
|
+
import type { ObjRegistry } from "../obj/bind.js";
|
|
39
|
+
import type { MonsterRace } from "../mon/types.js";
|
|
40
|
+
import type { PlayerClass, PlayerRace } from "../player/types.js";
|
|
41
|
+
import type { FeatureRegistry } from "../world/feature.js";
|
|
42
|
+
import type { TrapKind } from "../world/trap.js";
|
|
43
|
+
/** The base game's namespace (pack zero). */
|
|
44
|
+
export declare const CORE_NS = "core";
|
|
45
|
+
/** The namespace / localid separator (localids may contain further colons). */
|
|
46
|
+
export declare const ID_SEP = ":";
|
|
47
|
+
/**
|
|
48
|
+
* Kebab-slug a display name or code into an id-safe token: lowercase, every
|
|
49
|
+
* run of non-alphanumerics collapsed to a single hyphen, leading/trailing
|
|
50
|
+
* hyphens trimmed. Deterministic and pure, so the same name always yields the
|
|
51
|
+
* same token. "Ring of Barahir" -> "ring-of-barahir", "FIRE_3" -> "fire-3".
|
|
52
|
+
*/
|
|
53
|
+
export declare function slug(text: string): string;
|
|
54
|
+
/** Compose a namespaced id from a namespace and a localid. */
|
|
55
|
+
export declare function makeId(namespace: string, localid: string): string;
|
|
56
|
+
/** A core-namespaced id from a localid. */
|
|
57
|
+
export declare function coreId(localid: string): string;
|
|
58
|
+
/**
|
|
59
|
+
* Split an id into its namespace and localid on the FIRST separator only, so
|
|
60
|
+
* a localid may itself contain the separator (object kinds use `tval:name`).
|
|
61
|
+
* Returns null when the string carries no separator.
|
|
62
|
+
*/
|
|
63
|
+
export declare function parseId(id: string): {
|
|
64
|
+
namespace: string;
|
|
65
|
+
localid: string;
|
|
66
|
+
} | null;
|
|
67
|
+
/**
|
|
68
|
+
* An object kind's localid is `<tval>:<name>`, both slugged: the kind name
|
|
69
|
+
* alone is not unique across tvals (a base "Dagger" and a hypothetical potion
|
|
70
|
+
* of the same name would collide), but tval+name is the natural key upstream
|
|
71
|
+
* lookup_kind uses. The sval is deliberately NOT part of the id: svals are
|
|
72
|
+
* assigned in file order and shift when kinds are inserted, exactly the
|
|
73
|
+
* fragility ids exist to avoid.
|
|
74
|
+
*/
|
|
75
|
+
export declare function kindLocalId(tval: number, name: string): string;
|
|
76
|
+
/**
|
|
77
|
+
* The registries the resolver needs; a subset of CoreRegistries. Only
|
|
78
|
+
* `objects` is required: the monster / feature / trap registries are optional
|
|
79
|
+
* so a caller that only serializes object references (a focused test) can build
|
|
80
|
+
* a partial resolver. Production (loadGame/saveGame) always passes the full set.
|
|
81
|
+
*/
|
|
82
|
+
export interface ContentIdRegistries {
|
|
83
|
+
objects: ObjRegistry;
|
|
84
|
+
monsters?: {
|
|
85
|
+
races: readonly MonsterRace[];
|
|
86
|
+
};
|
|
87
|
+
features?: FeatureRegistry;
|
|
88
|
+
traps?: readonly TrapKind[] | null;
|
|
89
|
+
/**
|
|
90
|
+
* Player races/classes are optional: the save format does not reference them
|
|
91
|
+
* by id (a character carries its own race/class record), but the agent
|
|
92
|
+
* perceive facade exposes namespaced player race/class ids when they are
|
|
93
|
+
* supplied here, so every entity in the agent contract has a stable id.
|
|
94
|
+
*/
|
|
95
|
+
playerRaces?: readonly PlayerRace[];
|
|
96
|
+
playerClasses?: readonly PlayerClass[];
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Builds and holds the index<->id tables for every content type a save
|
|
100
|
+
* references. Constructed once per bound pack (both when writing and when
|
|
101
|
+
* reading a save); the two directions are symmetric so a save written on one
|
|
102
|
+
* registry ordering reloads correctly on any other ordering of the same ids.
|
|
103
|
+
*/
|
|
104
|
+
export declare class ContentIdResolver {
|
|
105
|
+
private readonly kinds;
|
|
106
|
+
private readonly egos;
|
|
107
|
+
private readonly artifacts;
|
|
108
|
+
private readonly curses;
|
|
109
|
+
private readonly brands;
|
|
110
|
+
private readonly slays;
|
|
111
|
+
private readonly races;
|
|
112
|
+
private readonly traps;
|
|
113
|
+
private readonly feats;
|
|
114
|
+
private readonly playerRaces;
|
|
115
|
+
private readonly playerClasses;
|
|
116
|
+
private readonly artifactNames;
|
|
117
|
+
constructor(reg: ContentIdRegistries, namespace?: string);
|
|
118
|
+
kindId(kidx: number): string;
|
|
119
|
+
/** The kind id for an index, or null when unbound (a partial resolver). */
|
|
120
|
+
kindIdOrNull(kidx: number): string | null;
|
|
121
|
+
kindIndex(id: string): number | undefined;
|
|
122
|
+
egoId(eidx: number): string;
|
|
123
|
+
/** The ego id for an index, or null when unbound (a partial resolver). */
|
|
124
|
+
egoIdOrNull(eidx: number): string | null;
|
|
125
|
+
egoIndex(id: string): number | undefined;
|
|
126
|
+
artifactId(aidx: number): string;
|
|
127
|
+
artifactIndex(id: string): number | undefined;
|
|
128
|
+
/** The upstream artifact NAME used by player history save/load. */
|
|
129
|
+
artifactName(aidx: number): string | null;
|
|
130
|
+
curseId(index: number): string;
|
|
131
|
+
curseIndex(id: string): number | undefined;
|
|
132
|
+
brandId(index: number): string;
|
|
133
|
+
brandIndex(id: string): number | undefined;
|
|
134
|
+
slayId(index: number): string;
|
|
135
|
+
slayIndex(id: string): number | undefined;
|
|
136
|
+
raceId(ridx: number): string;
|
|
137
|
+
/** The race id for an index, or null when unbound (a partial resolver). */
|
|
138
|
+
raceIdOrNull(ridx: number): string | null;
|
|
139
|
+
raceIndex(id: string): number | undefined;
|
|
140
|
+
trapId(tidx: number): string;
|
|
141
|
+
trapIndex(id: string): number | undefined;
|
|
142
|
+
featId(fidx: number): string;
|
|
143
|
+
/**
|
|
144
|
+
* The feature id for an index, or null when the index is not a bound feature
|
|
145
|
+
* (an unset terrain cell carries a sentinel like -1 that has no id). Used to
|
|
146
|
+
* build the terrain legend, which skips sentinels: they mean "no feature"
|
|
147
|
+
* and are pack-independent, so they never need remapping.
|
|
148
|
+
*/
|
|
149
|
+
featIdOrNull(fidx: number): string | null;
|
|
150
|
+
featIndex(id: string): number | undefined;
|
|
151
|
+
playerRaceId(ridx: number): string;
|
|
152
|
+
/** The player-race id for an index, or null when player races were not supplied. */
|
|
153
|
+
playerRaceIdOrNull(ridx: number): string | null;
|
|
154
|
+
playerRaceIndex(id: string): number | undefined;
|
|
155
|
+
playerClassId(cidx: number): string;
|
|
156
|
+
/** The player-class id for an index, or null when player classes were not supplied. */
|
|
157
|
+
playerClassIdOrNull(cidx: number): string | null;
|
|
158
|
+
playerClassIndex(id: string): number | undefined;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=ids.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/mod/ids.ts"],"names":[],"mappings":"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"}
|
package/dist/mod/ids.js
ADDED
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content ids: the load-bearing rule of the mod substrate (MOD_LIFECYCLE.md
|
|
3
|
+
* section 1, decision 19/1). Saves reference content by a stable namespaced
|
|
4
|
+
* string id - `core:kobold`, `frost:frost-wyrm` - never by a numeric array
|
|
5
|
+
* index. Upstream Angband serializes an r_idx / k_idx (an array position);
|
|
6
|
+
* add or remove one record and every later index shifts, silently corrupting
|
|
7
|
+
* older saves. Ids never move: adding, removing, or reordering content leaves
|
|
8
|
+
* every existing id pointing at the same thing.
|
|
9
|
+
*
|
|
10
|
+
* An id is `<namespace>:<localid>`. The namespace is the owning pack (`core`
|
|
11
|
+
* for the base game, pack zero). The localid is derived from the entity's own
|
|
12
|
+
* stable fields (its name/code, and for object kinds its tval) - so for the
|
|
13
|
+
* overwhelming majority of content it is identical no matter what else is
|
|
14
|
+
* loaded; only genuine duplicate names take an order-dependent suffix (see
|
|
15
|
+
* below). The localid is only required to be unique WITHIN its registry and
|
|
16
|
+
* namespace: an id's entity TYPE is implied by where it appears in the save (a
|
|
17
|
+
* kind reference is always a kind id), so a kind and a race may share a
|
|
18
|
+
* localid without ambiguity.
|
|
19
|
+
*
|
|
20
|
+
* This module is the one place ids are minted and resolved. The
|
|
21
|
+
* ContentIdResolver builds both directions (index <-> id) once from the bound
|
|
22
|
+
* registries.
|
|
23
|
+
*
|
|
24
|
+
* Duplicate names are real. Angband content is not name-unique: some egos
|
|
25
|
+
* ship twice under one name (e.g. "of Slay Animal" for both melee and
|
|
26
|
+
* launchers), several traps share a name with different effects ("dart trap"
|
|
27
|
+
* appears three times), and the "greater" variants ("*Healing*" vs "Healing")
|
|
28
|
+
* slug to the same token. A raw name therefore cannot be the key. When two
|
|
29
|
+
* entities in one registry would mint the same localid, the later one (in the
|
|
30
|
+
* registry's own binding order) gets a numeric suffix - `of-slay-animal`,
|
|
31
|
+
* `of-slay-animal-2`. This is deterministic and applied identically when
|
|
32
|
+
* writing and when reading a save, so the round-trip is exact. It is stable
|
|
33
|
+
* as long as content is APPENDED (mods live in their own namespace; core's
|
|
34
|
+
* frozen datafiles and cross-version additions append), which is the same
|
|
35
|
+
* append-only assumption every mod ecosystem relies on - and strictly less
|
|
36
|
+
* fragile than upstream's bare-index scheme, which breaks on ANY reorder.
|
|
37
|
+
*/
|
|
38
|
+
import { TVAL_ENTRIES } from "../generated/index.js";
|
|
39
|
+
/** The base game's namespace (pack zero). */
|
|
40
|
+
export const CORE_NS = "core";
|
|
41
|
+
/** The namespace / localid separator (localids may contain further colons). */
|
|
42
|
+
export const ID_SEP = ":";
|
|
43
|
+
/**
|
|
44
|
+
* Kebab-slug a display name or code into an id-safe token: lowercase, every
|
|
45
|
+
* run of non-alphanumerics collapsed to a single hyphen, leading/trailing
|
|
46
|
+
* hyphens trimmed. Deterministic and pure, so the same name always yields the
|
|
47
|
+
* same token. "Ring of Barahir" -> "ring-of-barahir", "FIRE_3" -> "fire-3".
|
|
48
|
+
*/
|
|
49
|
+
export function slug(text) {
|
|
50
|
+
return text
|
|
51
|
+
.toLowerCase()
|
|
52
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
53
|
+
.replace(/^-+|-+$/g, "");
|
|
54
|
+
}
|
|
55
|
+
/** Compose a namespaced id from a namespace and a localid. */
|
|
56
|
+
export function makeId(namespace, localid) {
|
|
57
|
+
return namespace + ID_SEP + localid;
|
|
58
|
+
}
|
|
59
|
+
/** A core-namespaced id from a localid. */
|
|
60
|
+
export function coreId(localid) {
|
|
61
|
+
return makeId(CORE_NS, localid);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Split an id into its namespace and localid on the FIRST separator only, so
|
|
65
|
+
* a localid may itself contain the separator (object kinds use `tval:name`).
|
|
66
|
+
* Returns null when the string carries no separator.
|
|
67
|
+
*/
|
|
68
|
+
export function parseId(id) {
|
|
69
|
+
const at = id.indexOf(ID_SEP);
|
|
70
|
+
if (at < 0)
|
|
71
|
+
return null;
|
|
72
|
+
return { namespace: id.slice(0, at), localid: id.slice(at + 1) };
|
|
73
|
+
}
|
|
74
|
+
/* ------------------------------------------------------------------ *
|
|
75
|
+
* Localid minting (pure functions of a single entity).
|
|
76
|
+
* ------------------------------------------------------------------ */
|
|
77
|
+
/**
|
|
78
|
+
* An object kind's localid is `<tval>:<name>`, both slugged: the kind name
|
|
79
|
+
* alone is not unique across tvals (a base "Dagger" and a hypothetical potion
|
|
80
|
+
* of the same name would collide), but tval+name is the natural key upstream
|
|
81
|
+
* lookup_kind uses. The sval is deliberately NOT part of the id: svals are
|
|
82
|
+
* assigned in file order and shift when kinds are inserted, exactly the
|
|
83
|
+
* fragility ids exist to avoid.
|
|
84
|
+
*/
|
|
85
|
+
export function kindLocalId(tval, name) {
|
|
86
|
+
const tv = TVAL_ENTRIES[tval];
|
|
87
|
+
return slug(tv ? tv.textName : String(tval)) + ID_SEP + slug(name);
|
|
88
|
+
}
|
|
89
|
+
/** One bidirectional index<->id table for a single entity kind. */
|
|
90
|
+
class IdTable {
|
|
91
|
+
namespace;
|
|
92
|
+
toId = [];
|
|
93
|
+
toIndex = new Map();
|
|
94
|
+
constructor(namespace) {
|
|
95
|
+
this.namespace = namespace;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Register an index's base localid. If that id is already taken (a genuine
|
|
99
|
+
* duplicate-name entity), append the first free numeric suffix so every id
|
|
100
|
+
* is unique. Called in registry-binding order, so the suffix a given entity
|
|
101
|
+
* receives is deterministic and identical across a save round-trip.
|
|
102
|
+
*/
|
|
103
|
+
add(index, base) {
|
|
104
|
+
let id = makeId(this.namespace, base);
|
|
105
|
+
if (this.toIndex.has(id)) {
|
|
106
|
+
let n = 2;
|
|
107
|
+
while (this.toIndex.has(makeId(this.namespace, `${base}-${n}`)))
|
|
108
|
+
n++;
|
|
109
|
+
id = makeId(this.namespace, `${base}-${n}`);
|
|
110
|
+
}
|
|
111
|
+
this.toIndex.set(id, index);
|
|
112
|
+
this.toId[index] = id;
|
|
113
|
+
}
|
|
114
|
+
/** The id for an index, or null when the index is unbound (e.g. slot 0). */
|
|
115
|
+
id(index) {
|
|
116
|
+
return this.toId[index] ?? null;
|
|
117
|
+
}
|
|
118
|
+
/** The index for an id, or undefined when no such id is bound. */
|
|
119
|
+
index(id) {
|
|
120
|
+
return this.toIndex.get(id);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Builds and holds the index<->id tables for every content type a save
|
|
125
|
+
* references. Constructed once per bound pack (both when writing and when
|
|
126
|
+
* reading a save); the two directions are symmetric so a save written on one
|
|
127
|
+
* registry ordering reloads correctly on any other ordering of the same ids.
|
|
128
|
+
*/
|
|
129
|
+
export class ContentIdResolver {
|
|
130
|
+
kinds;
|
|
131
|
+
egos;
|
|
132
|
+
artifacts;
|
|
133
|
+
curses;
|
|
134
|
+
brands;
|
|
135
|
+
slays;
|
|
136
|
+
races;
|
|
137
|
+
traps;
|
|
138
|
+
feats;
|
|
139
|
+
playerRaces;
|
|
140
|
+
playerClasses;
|
|
141
|
+
artifactNames = new Map();
|
|
142
|
+
constructor(reg, namespace = CORE_NS) {
|
|
143
|
+
const { objects } = reg;
|
|
144
|
+
this.kinds = new IdTable(namespace);
|
|
145
|
+
for (const kind of objects.kinds) {
|
|
146
|
+
this.kinds.add(kind.kidx, kindLocalId(kind.tval, kind.name));
|
|
147
|
+
}
|
|
148
|
+
this.egos = new IdTable(namespace);
|
|
149
|
+
for (const ego of objects.egos)
|
|
150
|
+
this.egos.add(ego.eidx, slug(ego.name));
|
|
151
|
+
/* Artifacts, curses, brands, slays are 1-based with a null at slot 0. */
|
|
152
|
+
this.artifacts = new IdTable(namespace);
|
|
153
|
+
for (let i = 1; i < objects.artifacts.length; i++) {
|
|
154
|
+
const a = objects.artifacts[i];
|
|
155
|
+
if (a) {
|
|
156
|
+
this.artifacts.add(i, slug(a.name));
|
|
157
|
+
this.artifactNames.set(i, a.name);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
this.curses = new IdTable(namespace);
|
|
161
|
+
for (let i = 1; i < objects.curses.length; i++) {
|
|
162
|
+
const c = objects.curses[i];
|
|
163
|
+
if (c)
|
|
164
|
+
this.curses.add(i, slug(c.name));
|
|
165
|
+
}
|
|
166
|
+
this.brands = new IdTable(namespace);
|
|
167
|
+
for (let i = 1; i < objects.brands.length; i++) {
|
|
168
|
+
const b = objects.brands[i];
|
|
169
|
+
if (b)
|
|
170
|
+
this.brands.add(i, slug(b.code));
|
|
171
|
+
}
|
|
172
|
+
this.slays = new IdTable(namespace);
|
|
173
|
+
for (let i = 1; i < objects.slays.length; i++) {
|
|
174
|
+
const s = objects.slays[i];
|
|
175
|
+
if (s)
|
|
176
|
+
this.slays.add(i, slug(s.code));
|
|
177
|
+
}
|
|
178
|
+
this.races = new IdTable(namespace);
|
|
179
|
+
for (const race of reg.monsters?.races ?? []) {
|
|
180
|
+
this.races.add(race.ridx, slug(race.name));
|
|
181
|
+
}
|
|
182
|
+
this.traps = new IdTable(namespace);
|
|
183
|
+
for (const trap of reg.traps ?? []) {
|
|
184
|
+
this.traps.add(trap.tidx, slug(trap.name));
|
|
185
|
+
}
|
|
186
|
+
this.feats = new IdTable(namespace);
|
|
187
|
+
for (const feat of reg.features?.allFeatures() ?? []) {
|
|
188
|
+
this.feats.add(feat.fidx, slug(feat.code));
|
|
189
|
+
}
|
|
190
|
+
this.playerRaces = new IdTable(namespace);
|
|
191
|
+
for (const race of reg.playerRaces ?? []) {
|
|
192
|
+
this.playerRaces.add(race.ridx, slug(race.name));
|
|
193
|
+
}
|
|
194
|
+
this.playerClasses = new IdTable(namespace);
|
|
195
|
+
for (const cls of reg.playerClasses ?? []) {
|
|
196
|
+
this.playerClasses.add(cls.cidx, slug(cls.name));
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/* Object kinds. */
|
|
200
|
+
kindId(kidx) {
|
|
201
|
+
const id = this.kinds.id(kidx);
|
|
202
|
+
if (id === null)
|
|
203
|
+
throw new Error(`mod/ids: unbound kind index ${kidx}`);
|
|
204
|
+
return id;
|
|
205
|
+
}
|
|
206
|
+
/** The kind id for an index, or null when unbound (a partial resolver). */
|
|
207
|
+
kindIdOrNull(kidx) {
|
|
208
|
+
return this.kinds.id(kidx);
|
|
209
|
+
}
|
|
210
|
+
kindIndex(id) {
|
|
211
|
+
return this.kinds.index(id);
|
|
212
|
+
}
|
|
213
|
+
/* Egos (nullable reference). */
|
|
214
|
+
egoId(eidx) {
|
|
215
|
+
const id = this.egos.id(eidx);
|
|
216
|
+
if (id === null)
|
|
217
|
+
throw new Error(`mod/ids: unbound ego index ${eidx}`);
|
|
218
|
+
return id;
|
|
219
|
+
}
|
|
220
|
+
/** The ego id for an index, or null when unbound (a partial resolver). */
|
|
221
|
+
egoIdOrNull(eidx) {
|
|
222
|
+
return this.egos.id(eidx);
|
|
223
|
+
}
|
|
224
|
+
egoIndex(id) {
|
|
225
|
+
return this.egos.index(id);
|
|
226
|
+
}
|
|
227
|
+
/* Artifacts (nullable reference; 1-based). */
|
|
228
|
+
artifactId(aidx) {
|
|
229
|
+
const id = this.artifacts.id(aidx);
|
|
230
|
+
if (id === null)
|
|
231
|
+
throw new Error(`mod/ids: unbound artifact index ${aidx}`);
|
|
232
|
+
return id;
|
|
233
|
+
}
|
|
234
|
+
artifactIndex(id) {
|
|
235
|
+
return this.artifacts.index(id);
|
|
236
|
+
}
|
|
237
|
+
/** The upstream artifact NAME used by player history save/load. */
|
|
238
|
+
artifactName(aidx) {
|
|
239
|
+
return this.artifactNames.get(aidx) ?? null;
|
|
240
|
+
}
|
|
241
|
+
/* Curses (positional on objects; 1-based). */
|
|
242
|
+
curseId(index) {
|
|
243
|
+
const id = this.curses.id(index);
|
|
244
|
+
if (id === null)
|
|
245
|
+
throw new Error(`mod/ids: unbound curse index ${index}`);
|
|
246
|
+
return id;
|
|
247
|
+
}
|
|
248
|
+
curseIndex(id) {
|
|
249
|
+
return this.curses.index(id);
|
|
250
|
+
}
|
|
251
|
+
/* Brands (positional on objects; 1-based). */
|
|
252
|
+
brandId(index) {
|
|
253
|
+
const id = this.brands.id(index);
|
|
254
|
+
if (id === null)
|
|
255
|
+
throw new Error(`mod/ids: unbound brand index ${index}`);
|
|
256
|
+
return id;
|
|
257
|
+
}
|
|
258
|
+
brandIndex(id) {
|
|
259
|
+
return this.brands.index(id);
|
|
260
|
+
}
|
|
261
|
+
/* Slays (positional on objects; 1-based). */
|
|
262
|
+
slayId(index) {
|
|
263
|
+
const id = this.slays.id(index);
|
|
264
|
+
if (id === null)
|
|
265
|
+
throw new Error(`mod/ids: unbound slay index ${index}`);
|
|
266
|
+
return id;
|
|
267
|
+
}
|
|
268
|
+
slayIndex(id) {
|
|
269
|
+
return this.slays.index(id);
|
|
270
|
+
}
|
|
271
|
+
/* Monster races. */
|
|
272
|
+
raceId(ridx) {
|
|
273
|
+
const id = this.races.id(ridx);
|
|
274
|
+
if (id === null)
|
|
275
|
+
throw new Error(`mod/ids: unbound race index ${ridx}`);
|
|
276
|
+
return id;
|
|
277
|
+
}
|
|
278
|
+
/** The race id for an index, or null when unbound (a partial resolver). */
|
|
279
|
+
raceIdOrNull(ridx) {
|
|
280
|
+
return this.races.id(ridx);
|
|
281
|
+
}
|
|
282
|
+
raceIndex(id) {
|
|
283
|
+
return this.races.index(id);
|
|
284
|
+
}
|
|
285
|
+
/* Trap kinds. */
|
|
286
|
+
trapId(tidx) {
|
|
287
|
+
const id = this.traps.id(tidx);
|
|
288
|
+
if (id === null)
|
|
289
|
+
throw new Error(`mod/ids: unbound trap index ${tidx}`);
|
|
290
|
+
return id;
|
|
291
|
+
}
|
|
292
|
+
trapIndex(id) {
|
|
293
|
+
return this.traps.index(id);
|
|
294
|
+
}
|
|
295
|
+
/* Terrain features. */
|
|
296
|
+
featId(fidx) {
|
|
297
|
+
const id = this.feats.id(fidx);
|
|
298
|
+
if (id === null)
|
|
299
|
+
throw new Error(`mod/ids: unbound feature index ${fidx}`);
|
|
300
|
+
return id;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* The feature id for an index, or null when the index is not a bound feature
|
|
304
|
+
* (an unset terrain cell carries a sentinel like -1 that has no id). Used to
|
|
305
|
+
* build the terrain legend, which skips sentinels: they mean "no feature"
|
|
306
|
+
* and are pack-independent, so they never need remapping.
|
|
307
|
+
*/
|
|
308
|
+
featIdOrNull(fidx) {
|
|
309
|
+
return this.feats.id(fidx);
|
|
310
|
+
}
|
|
311
|
+
featIndex(id) {
|
|
312
|
+
return this.feats.index(id);
|
|
313
|
+
}
|
|
314
|
+
/* Player races (only bound when playerRaces was supplied). */
|
|
315
|
+
playerRaceId(ridx) {
|
|
316
|
+
const id = this.playerRaces.id(ridx);
|
|
317
|
+
if (id === null)
|
|
318
|
+
throw new Error(`mod/ids: unbound player race index ${ridx}`);
|
|
319
|
+
return id;
|
|
320
|
+
}
|
|
321
|
+
/** The player-race id for an index, or null when player races were not supplied. */
|
|
322
|
+
playerRaceIdOrNull(ridx) {
|
|
323
|
+
return this.playerRaces.id(ridx);
|
|
324
|
+
}
|
|
325
|
+
playerRaceIndex(id) {
|
|
326
|
+
return this.playerRaces.index(id);
|
|
327
|
+
}
|
|
328
|
+
/* Player classes (only bound when playerClasses was supplied). */
|
|
329
|
+
playerClassId(cidx) {
|
|
330
|
+
const id = this.playerClasses.id(cidx);
|
|
331
|
+
if (id === null)
|
|
332
|
+
throw new Error(`mod/ids: unbound player class index ${cidx}`);
|
|
333
|
+
return id;
|
|
334
|
+
}
|
|
335
|
+
/** The player-class id for an index, or null when player classes were not supplied. */
|
|
336
|
+
playerClassIdOrNull(cidx) {
|
|
337
|
+
return this.playerClasses.id(cidx);
|
|
338
|
+
}
|
|
339
|
+
playerClassIndex(id) {
|
|
340
|
+
return this.playerClasses.index(id);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
//# sourceMappingURL=ids.js.map
|