@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
package/src/game/trap.ts
ADDED
|
@@ -0,0 +1,791 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Live traps, ported from reference/src/trap.c (Angband 4.2.6): trap
|
|
3
|
+
* instances on squares (state.traps, the same GameState seam as floor
|
|
4
|
+
* piles and monster groups), placement (pick_trap / place_trap), reveal,
|
|
5
|
+
* activation (hit_trap running the kind's effect chains through the
|
|
6
|
+
* effect interpreter with a trap source), disable timeouts, door locks
|
|
7
|
+
* (the "door lock" trap kind), and the disarm command with the cmd-cave.c
|
|
8
|
+
* skill math.
|
|
9
|
+
*
|
|
10
|
+
* Knowledge simplifications (with #24): traps place with their upstream
|
|
11
|
+
* visibility (most are TRF_INVISIBLE until revealed or triggered);
|
|
12
|
+
* square_memorize_traps / the player's shadow cave are replaced by the
|
|
13
|
+
* VISIBLE instance flag the renderer reads. player_is_trapsafe and the
|
|
14
|
+
* OF_ save-flag checks ride on the playerHasFlag hook; a flag that saves
|
|
15
|
+
* is noticed on the equipment supplying it (equipLearnFlag, rune
|
|
16
|
+
* knowledge #13).
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import type { Loc } from "../loc.js";
|
|
20
|
+
import { DDGRID, locEq, locSum } from "../loc.js";
|
|
21
|
+
import type { Rng } from "../rng.js";
|
|
22
|
+
import { SKILL } from "../player/types.js";
|
|
23
|
+
import { OF, TMD, TRF } from "../generated/index.js";
|
|
24
|
+
import { checkHit } from "../combat/mon-melee.js";
|
|
25
|
+
import { equipLearnFlag } from "../obj/knowledge.js";
|
|
26
|
+
import { featIsTrapHolding } from "../world/chunk.js";
|
|
27
|
+
import type { TrapKind } from "../world/trap.js";
|
|
28
|
+
import { lookupTrap } from "../world/trap.js";
|
|
29
|
+
import { squareIsSeen } from "../world/view.js";
|
|
30
|
+
import { sourceTrap } from "../effects/interpreter.js";
|
|
31
|
+
import type { GameState, PlayerCommand } from "./context.js";
|
|
32
|
+
import { movePlayer, queueCommandRepeat } from "./context.js";
|
|
33
|
+
import { floorPile } from "./floor.js";
|
|
34
|
+
import { buildObjectEffectChain } from "./obj-cmd.js";
|
|
35
|
+
import type { ObjCmdDeps } from "./obj-cmd.js";
|
|
36
|
+
import { buildEffectContext } from "./effect-env.js";
|
|
37
|
+
import { squareIsKnown } from "./known.js";
|
|
38
|
+
import { attachGameEnv } from "./effect-game-env.js";
|
|
39
|
+
import type { ActionRegistry } from "./player-turn.js";
|
|
40
|
+
import { gearGet } from "./gear.js";
|
|
41
|
+
|
|
42
|
+
/** struct trap: one trap instance on a grid. */
|
|
43
|
+
export interface Trap {
|
|
44
|
+
tidx: number;
|
|
45
|
+
kind: TrapKind;
|
|
46
|
+
grid: Loc;
|
|
47
|
+
/** Rolled from the kind's power at placement (vs SEARCH on reveal). */
|
|
48
|
+
power: number;
|
|
49
|
+
/** Turns this trap is disabled for (0 = armed). */
|
|
50
|
+
timeout: number;
|
|
51
|
+
/** Instance flags (a copy of the kind's; VISIBLE toggles here). */
|
|
52
|
+
flags: import("../bitflag.js").FlagSet;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Hooks for unported subsystems; all optional. */
|
|
56
|
+
export interface TrapEnv {
|
|
57
|
+
msg?: (text: string) => void;
|
|
58
|
+
/** player_is_trapsafe / player_of_has(OF_TRAP_IMMUNE etc, #13/#24). */
|
|
59
|
+
playerHasFlag?: (ofFlag: number) => boolean;
|
|
60
|
+
/** is_quest(depth) for the trapdoor legality check. */
|
|
61
|
+
isQuest?: (depth: number) => boolean;
|
|
62
|
+
/** dungeon_change_level for TRF_DOWN (default: signal generateLevel). */
|
|
63
|
+
changeLevel?: (state: GameState) => void;
|
|
64
|
+
/** player_exp_gain on a successful disarm (experience system). */
|
|
65
|
+
expGain?: (amount: number) => void;
|
|
66
|
+
disturb?: () => void;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** Everything the trap runtime needs beyond the state. */
|
|
70
|
+
export interface TrapDeps {
|
|
71
|
+
kinds: readonly TrapKind[];
|
|
72
|
+
/** The effect stack (same registry/cast/envDeps bundle as obj-cmd). */
|
|
73
|
+
effects?: Pick<
|
|
74
|
+
ObjCmdDeps,
|
|
75
|
+
| "registry"
|
|
76
|
+
| "cast"
|
|
77
|
+
| "envDeps"
|
|
78
|
+
| "inject"
|
|
79
|
+
| "teleport"
|
|
80
|
+
| "general"
|
|
81
|
+
| "item"
|
|
82
|
+
| "summon"
|
|
83
|
+
>;
|
|
84
|
+
env?: TrapEnv;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** player_is_trapsafe (player-util.c:1073-1077). */
|
|
88
|
+
export function playerIsTrapsafe(state: GameState): boolean {
|
|
89
|
+
const equipmentImmune = state.actor.player.equipment.some((handle) =>
|
|
90
|
+
handle > 0 && (gearGet(state.gear, handle)?.flags.has(OF.TRAP_IMMUNE) ?? false),
|
|
91
|
+
);
|
|
92
|
+
return (
|
|
93
|
+
(state.actor.player.timed[TMD.TRAPSAFE] ?? 0) > 0 ||
|
|
94
|
+
(state.playerState?.flags.has(OF.TRAP_IMMUNE) ?? false) ||
|
|
95
|
+
equipmentImmune
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* The trap-backed TeleportEnv / FloorEnv predicates (square_isplayertrap,
|
|
101
|
+
* square_iswarded, square_iswebbed) for the modules that stubbed them.
|
|
102
|
+
*/
|
|
103
|
+
export function trapPredicates(state: GameState): {
|
|
104
|
+
isPlayerTrap: (grid: Loc) => boolean;
|
|
105
|
+
isWarded: (grid: Loc) => boolean;
|
|
106
|
+
isWebbed: (grid: Loc) => boolean;
|
|
107
|
+
isTrap: (grid: Loc) => boolean;
|
|
108
|
+
} {
|
|
109
|
+
return {
|
|
110
|
+
isPlayerTrap: (grid) => squareIsPlayerTrap(state, grid),
|
|
111
|
+
isWarded: (grid) => squareIsWarded(state, grid),
|
|
112
|
+
isWebbed: (grid) => squareIsWebbed(state, grid),
|
|
113
|
+
isTrap: (grid) => squareIsTrap(state, grid),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function gridIdx(state: GameState, grid: Loc): number {
|
|
118
|
+
return grid.y * state.chunk.width + grid.x;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/** square_trap: the traps on a grid, newest first (place prepends). */
|
|
122
|
+
export function squareTrap(state: GameState, grid: Loc): readonly Trap[] {
|
|
123
|
+
return state.traps.get(gridIdx(state, grid)) ?? [];
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/** square_istrap-ish: any trap here? */
|
|
127
|
+
export function squareIsTrap(state: GameState, grid: Loc): boolean {
|
|
128
|
+
return squareTrap(state, grid).length > 0;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** square_trap_flag: any trap here with the given TRF flag? */
|
|
132
|
+
export function squareTrapFlag(
|
|
133
|
+
state: GameState,
|
|
134
|
+
grid: Loc,
|
|
135
|
+
flag: number,
|
|
136
|
+
): boolean {
|
|
137
|
+
return squareTrap(state, grid).some((t) => t.flags.has(flag));
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/** square_isplayertrap. */
|
|
141
|
+
export function squareIsPlayerTrap(state: GameState, grid: Loc): boolean {
|
|
142
|
+
return squareTrapFlag(state, grid, TRF.TRAP);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/** square_isvisibletrap. */
|
|
146
|
+
export function squareIsVisibleTrap(state: GameState, grid: Loc): boolean {
|
|
147
|
+
return squareTrapFlag(state, grid, TRF.VISIBLE);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* square_isdisabledtrap (cave-square.c L823): a known (visible) player trap that
|
|
152
|
+
* is currently on a disable timeout.
|
|
153
|
+
*/
|
|
154
|
+
export function squareIsDisabledTrap(state: GameState, grid: Loc): boolean {
|
|
155
|
+
return (
|
|
156
|
+
squareIsVisibleTrap(state, grid) && squareTrapTimeout(state, grid, -1) > 0
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* square_isdisarmabletrap (cave-square.c L832): a visible, enabled player trap -
|
|
162
|
+
* the gate KILL_TRAP and the disarm command require (not merely "visible").
|
|
163
|
+
*/
|
|
164
|
+
export function squareIsDisarmableTrap(state: GameState, grid: Loc): boolean {
|
|
165
|
+
if (squareIsDisabledTrap(state, grid)) return false;
|
|
166
|
+
return squareIsVisibleTrap(state, grid) && squareIsPlayerTrap(state, grid);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* square_iswarded (cave-square.c:751-755): only the specific "glyph of
|
|
171
|
+
* warding" trap, not every TRF_GLYPH (decoys also carry GLYPH).
|
|
172
|
+
*/
|
|
173
|
+
export function squareIsWarded(state: GameState, grid: Loc): boolean {
|
|
174
|
+
return squareTrap(state, grid).some((t) => {
|
|
175
|
+
/* Live traps always carry kind; match C's lookup_trap("glyph of warding"). */
|
|
176
|
+
if (t.kind) {
|
|
177
|
+
return t.kind.desc === "glyph of warding" || t.kind.name === "glyph of warding";
|
|
178
|
+
}
|
|
179
|
+
/* Harness stubs without a kind: a bare GLYPH stands for warding. */
|
|
180
|
+
return t.flags.has(TRF.GLYPH);
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
/** square_iswebbed (cave-square.c:763-767). */
|
|
184
|
+
export function squareIsWebbed(state: GameState, grid: Loc): boolean {
|
|
185
|
+
return squareTrapFlag(state, grid, TRF.WEB);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* square_destroy_trap (cave-square.c:1391-1394): remove every trap on a grid.
|
|
190
|
+
*/
|
|
191
|
+
export function squareDestroyTrap(state: GameState, grid: Loc): void {
|
|
192
|
+
squareRemoveAllTraps(state, grid);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Live square_set_feat trap half (cave-square.c:1256-1259): when the grid
|
|
197
|
+
* is no longer player-trap-allowed, destroy its traps. Wired as Chunk.onFeatSet.
|
|
198
|
+
*/
|
|
199
|
+
export function squareSetFeatTrapSideEffect(state: GameState, grid: Loc): void {
|
|
200
|
+
if (!squarePlayerTrapAllowed(state, grid)) {
|
|
201
|
+
squareDestroyTrap(state, grid);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Install the live character_dungeon set_feat hook on the current chunk
|
|
207
|
+
* (cave-square.c:1256-1259). Re-call after every state.chunk reassignment.
|
|
208
|
+
*/
|
|
209
|
+
export function installChunkFeatHook(state: GameState): void {
|
|
210
|
+
state.chunk.onFeatSet = (grid: Loc): void => {
|
|
211
|
+
squareSetFeatTrapSideEffect(state, grid);
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/** square_trap_specific: a trap of the exact kind index here? */
|
|
216
|
+
export function squareTrapSpecific(
|
|
217
|
+
state: GameState,
|
|
218
|
+
grid: Loc,
|
|
219
|
+
tidx: number,
|
|
220
|
+
): boolean {
|
|
221
|
+
return squareTrap(state, grid).some((t) => t.tidx === tidx);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/** square_remove_trap: remove one trap instance. */
|
|
225
|
+
export function squareRemoveTrap(
|
|
226
|
+
state: GameState,
|
|
227
|
+
grid: Loc,
|
|
228
|
+
trap: Trap,
|
|
229
|
+
): boolean {
|
|
230
|
+
const key = gridIdx(state, grid);
|
|
231
|
+
const list = state.traps.get(key);
|
|
232
|
+
if (!list) return false;
|
|
233
|
+
const at = list.indexOf(trap);
|
|
234
|
+
if (at < 0) return false;
|
|
235
|
+
list.splice(at, 1);
|
|
236
|
+
if (list.length === 0) state.traps.delete(key);
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/** square_remove_all_traps / _of_type. */
|
|
241
|
+
export function squareRemoveAllTraps(
|
|
242
|
+
state: GameState,
|
|
243
|
+
grid: Loc,
|
|
244
|
+
tidx = -1,
|
|
245
|
+
): boolean {
|
|
246
|
+
const key = gridIdx(state, grid);
|
|
247
|
+
const list = state.traps.get(key);
|
|
248
|
+
if (!list || list.length === 0) return false;
|
|
249
|
+
if (tidx < 0) {
|
|
250
|
+
state.traps.delete(key);
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
const kept = list.filter((t) => t.tidx !== tidx);
|
|
254
|
+
const removed = kept.length !== list.length;
|
|
255
|
+
if (kept.length === 0) state.traps.delete(key);
|
|
256
|
+
else state.traps.set(key, kept);
|
|
257
|
+
return removed;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* square_player_trap_allowed: no second trap, no objects, trappable
|
|
262
|
+
* terrain (TF TRAP on the feature).
|
|
263
|
+
*/
|
|
264
|
+
export function squarePlayerTrapAllowed(
|
|
265
|
+
state: GameState,
|
|
266
|
+
grid: Loc,
|
|
267
|
+
): boolean {
|
|
268
|
+
if (squareIsTrap(state, grid)) return false;
|
|
269
|
+
if (floorPile(state, grid).length > 0) return false;
|
|
270
|
+
/* square_istrappable (cave-square.c:220), trap.c:269. */
|
|
271
|
+
return featIsTrapHolding(state.chunk.features, state.chunk.feat(grid));
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/** The level context pick_trap reads for its trapdoor legality guards. */
|
|
275
|
+
export interface TrapLevelCtx {
|
|
276
|
+
/** c->depth (player->depth): town has no traps. */
|
|
277
|
+
depth: number;
|
|
278
|
+
/** z_info->max_depth: no trap doors on the deepest level. */
|
|
279
|
+
maxDepth: number;
|
|
280
|
+
/** is_quest(player->depth): no trap doors on quest levels. */
|
|
281
|
+
isQuest: boolean;
|
|
282
|
+
/** OPT(player, birth_levels_persist): no trap doors with persistent levels. */
|
|
283
|
+
persist: boolean;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* pick_trap core (trap.c:275-345): cumulative-rarity selection of a player
|
|
288
|
+
* trap kind at a trap level, drawing exactly one randint0. Pure - the caller
|
|
289
|
+
* supplies the RNG and level context, so both the live placer (pickTrap) and
|
|
290
|
+
* the generation-time placer (gen/util.ts placeTrap) share one implementation
|
|
291
|
+
* and one draw order. The feature is assumed floor / trap-holding in the
|
|
292
|
+
* ported subset, so C's `feat_is_floor(feat) && !TRF_FLOOR` branch reduces to
|
|
293
|
+
* an unconditional TRF_FLOOR requirement. Returns the t_idx or -1.
|
|
294
|
+
*/
|
|
295
|
+
export function pickTrapKind(
|
|
296
|
+
rng: Rng,
|
|
297
|
+
kinds: readonly TrapKind[],
|
|
298
|
+
trapLevel: number,
|
|
299
|
+
ctx: TrapLevelCtx,
|
|
300
|
+
): number {
|
|
301
|
+
/* No traps in town. */
|
|
302
|
+
if (ctx.depth === 0) return -1;
|
|
303
|
+
|
|
304
|
+
const probs: number[] = [];
|
|
305
|
+
let probMax = 0;
|
|
306
|
+
for (const kind of kinds) {
|
|
307
|
+
probs[kind.tidx] = probMax;
|
|
308
|
+
if (!kind.name) continue;
|
|
309
|
+
if (!kind.rarity) continue;
|
|
310
|
+
if (!kind.flags.has(TRF.TRAP)) continue;
|
|
311
|
+
if (kind.minDepth > trapLevel) continue;
|
|
312
|
+
|
|
313
|
+
/* Floor features need floor-capable traps. */
|
|
314
|
+
if (!kind.flags.has(TRF.FLOOR)) continue;
|
|
315
|
+
|
|
316
|
+
/* Check legality of trapdoors (trap.c:308-320). */
|
|
317
|
+
if (kind.flags.has(TRF.DOWN)) {
|
|
318
|
+
if (ctx.isQuest) continue;
|
|
319
|
+
if (ctx.depth >= ctx.maxDepth - 1) continue;
|
|
320
|
+
/* No trap doors with persistent levels (for now). */
|
|
321
|
+
if (ctx.persist) continue;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
probs[kind.tidx] = probMax + Math.trunc(100 / kind.rarity);
|
|
325
|
+
probMax = probs[kind.tidx] as number;
|
|
326
|
+
}
|
|
327
|
+
if (probMax === 0) return -1;
|
|
328
|
+
|
|
329
|
+
const pick = rng.randint0(probMax);
|
|
330
|
+
for (const kind of kinds) {
|
|
331
|
+
if (pick < (probs[kind.tidx] ?? 0)) return kind.tidx;
|
|
332
|
+
}
|
|
333
|
+
return -1;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* pick_trap: choose a player-trap kind for a feature at a trap level, by
|
|
338
|
+
* cumulative rarity. Returns the t_idx or -1.
|
|
339
|
+
*/
|
|
340
|
+
export function pickTrap(
|
|
341
|
+
state: GameState,
|
|
342
|
+
feat: number,
|
|
343
|
+
trapLevel: number,
|
|
344
|
+
deps: TrapDeps,
|
|
345
|
+
): number {
|
|
346
|
+
const env = deps.env ?? {};
|
|
347
|
+
void feat; /* Only floor features are trappable in the ported subset. */
|
|
348
|
+
return pickTrapKind(state.rng, deps.kinds, trapLevel, {
|
|
349
|
+
depth: state.chunk.depth,
|
|
350
|
+
maxDepth: state.z.maxDepth,
|
|
351
|
+
isQuest: env.isQuest?.(state.chunk.depth) ?? false,
|
|
352
|
+
persist: state.options?.get("birth_levels_persist") ?? false,
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
/**
|
|
357
|
+
* place_trap: make a new trap of the given type (or a random player trap
|
|
358
|
+
* when the index is not legal).
|
|
359
|
+
*/
|
|
360
|
+
export function placeTrap(
|
|
361
|
+
state: GameState,
|
|
362
|
+
grid: Loc,
|
|
363
|
+
tIdx: number,
|
|
364
|
+
trapLevel: number,
|
|
365
|
+
deps: TrapDeps,
|
|
366
|
+
): void {
|
|
367
|
+
if (tIdx <= 0 || tIdx >= deps.kinds.length) {
|
|
368
|
+
if (!squarePlayerTrapAllowed(state, grid)) return;
|
|
369
|
+
tIdx = pickTrap(state, state.chunk.feat(grid), trapLevel, deps);
|
|
370
|
+
}
|
|
371
|
+
if (tIdx < 0) return;
|
|
372
|
+
const kind = deps.kinds[tIdx]!;
|
|
373
|
+
|
|
374
|
+
/* Don't allow trap doors in single combat arenas (trap.c:370-374). */
|
|
375
|
+
if (state.arenaLevel && kind.flags.has(TRF.DOWN)) return;
|
|
376
|
+
|
|
377
|
+
installTrap(state, grid, tIdx, state.rng.randcalc(kind.power, trapLevel, "randomise"), deps);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* place_trap's allocation half (trap.c:376-393) with the kind and power
|
|
382
|
+
* already chosen: prepend a new trap instance to the grid's list. Used by
|
|
383
|
+
* placeTrap after its pick_trap / randcalc draws, and directly by the level
|
|
384
|
+
* populate path when the kind and power were rolled at generation time
|
|
385
|
+
* (gen/util.ts placeTrap), so those draws are not spent twice.
|
|
386
|
+
*
|
|
387
|
+
* square_set_trap (cave-square.c:1299) has no counterpart by design: upstream
|
|
388
|
+
* keeps a per-square singly-linked trap list and that setter writes its HEAD
|
|
389
|
+
* pointer. The port stores an array per grid in state.traps, so head-pointer
|
|
390
|
+
* assignment becomes unshift here, splice in squareRemoveTrap and delete in
|
|
391
|
+
* squareRemoveAllTraps.
|
|
392
|
+
*/
|
|
393
|
+
export function installTrap(
|
|
394
|
+
state: GameState,
|
|
395
|
+
grid: Loc,
|
|
396
|
+
tIdx: number,
|
|
397
|
+
power: number,
|
|
398
|
+
deps: TrapDeps,
|
|
399
|
+
): void {
|
|
400
|
+
const kind = deps.kinds[tIdx];
|
|
401
|
+
if (!kind) return;
|
|
402
|
+
const trap: Trap = {
|
|
403
|
+
tidx: tIdx,
|
|
404
|
+
kind,
|
|
405
|
+
grid,
|
|
406
|
+
power,
|
|
407
|
+
timeout: 0,
|
|
408
|
+
flags: kind.flags.clone(),
|
|
409
|
+
};
|
|
410
|
+
const key = gridIdx(state, grid);
|
|
411
|
+
const list = state.traps.get(key);
|
|
412
|
+
if (list) list.unshift(trap);
|
|
413
|
+
else state.traps.set(key, [trap]);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* square_reveal_trap: mark unnoticed player traps visible when the SEARCH
|
|
418
|
+
* skill beats their power (or always). Returns whether any were found.
|
|
419
|
+
*/
|
|
420
|
+
export function squareRevealTrap(
|
|
421
|
+
state: GameState,
|
|
422
|
+
grid: Loc,
|
|
423
|
+
always: boolean,
|
|
424
|
+
deps: TrapDeps,
|
|
425
|
+
): boolean {
|
|
426
|
+
if (!squareIsPlayerTrap(state, grid)) return false;
|
|
427
|
+
let found = 0;
|
|
428
|
+
for (const trap of squareTrap(state, grid)) {
|
|
429
|
+
if (!trap.flags.has(TRF.TRAP)) continue;
|
|
430
|
+
const search = state.actor.combat.skills[SKILL.SEARCH] ?? 0;
|
|
431
|
+
if (!always && search < trap.power) continue;
|
|
432
|
+
if (!trap.flags.has(TRF.VISIBLE)) {
|
|
433
|
+
trap.flags.on(TRF.VISIBLE);
|
|
434
|
+
found++;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
if (found) {
|
|
438
|
+
deps.env?.msg?.(
|
|
439
|
+
found === 1 ? "You have found a trap." : `You have found ${found} traps.`,
|
|
440
|
+
);
|
|
441
|
+
}
|
|
442
|
+
return found !== 0;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
/**
|
|
446
|
+
* square_note_spot's secret-trap revelation (cave-map.c:236-238) and the
|
|
447
|
+
* per-grid update_one pass (cave-view.c:840-842): when a grid becomes seen, a
|
|
448
|
+
* secret player trap on it is revealed if the SEARCH skill beats its power
|
|
449
|
+
* (always=false). Called from the note_spot pass (game/known.ts noteSpots) so
|
|
450
|
+
* invisible traps are spotted before being stepped on, matching upstream. The
|
|
451
|
+
* "You have found a trap" message rides the game's message seam (state.msg);
|
|
452
|
+
* squareRevealTrap reads only that env hook, never deps.kinds here.
|
|
453
|
+
*/
|
|
454
|
+
export function noteSpotRevealTrap(state: GameState, grid: Loc): void {
|
|
455
|
+
/* square_issecrettrap (cave-square.c:815) = !square_isvisibletrap &&
|
|
456
|
+
* square_isplayertrap; the !visible half is absorbed into
|
|
457
|
+
* squareRevealTrap, which counts only newly-revealed traps and so is a
|
|
458
|
+
* no-op (and silent) on an already-visible grid. */
|
|
459
|
+
if (!squareIsPlayerTrap(state, grid)) return;
|
|
460
|
+
squareRevealTrap(state, grid, false, {
|
|
461
|
+
kinds: [],
|
|
462
|
+
...(state.msg ? { env: { msg: state.msg } } : {}),
|
|
463
|
+
});
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
/**
|
|
467
|
+
* hit_trap: trigger the player traps on a grid. `delayed` selects
|
|
468
|
+
* TRF_DELAY traps (1), immediate traps (0), or all (-1).
|
|
469
|
+
*/
|
|
470
|
+
export function hitTrap(
|
|
471
|
+
state: GameState,
|
|
472
|
+
grid: Loc,
|
|
473
|
+
delayed: number,
|
|
474
|
+
deps: TrapDeps,
|
|
475
|
+
): void {
|
|
476
|
+
const env = deps.env ?? {};
|
|
477
|
+
for (const trap of [...squareTrap(state, grid)]) {
|
|
478
|
+
if (!trap.kind.flags.has(TRF.TRAP)) continue;
|
|
479
|
+
if (trap.timeout) continue;
|
|
480
|
+
const isDelay = trap.kind.flags.has(TRF.DELAY) ? 1 : 0;
|
|
481
|
+
if (delayed !== isDelay && delayed !== -1) continue;
|
|
482
|
+
|
|
483
|
+
/* player_is_trapsafe (player-util.c:1073): TMD_TRAPSAFE or OF_TRAP_IMMUNE.
|
|
484
|
+
* A trap-immune player learns the rune on the flag's source; the trap
|
|
485
|
+
* becomes visible and does not fire (trap.c:515-523). */
|
|
486
|
+
const trapImmune = env.playerHasFlag?.(OF.TRAP_IMMUNE) ?? false;
|
|
487
|
+
if ((state.actor.player.timed[TMD.TRAPSAFE] ?? 0) > 0 || trapImmune) {
|
|
488
|
+
if (trapImmune) {
|
|
489
|
+
equipLearnFlag(state.actor.player, state.runeEnv, OF.TRAP_IMMUNE);
|
|
490
|
+
}
|
|
491
|
+
trap.flags.on(TRF.VISIBLE);
|
|
492
|
+
continue;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
env.disturb?.();
|
|
496
|
+
if (trap.kind.msg) env.msg?.(trap.kind.msg);
|
|
497
|
+
|
|
498
|
+
/* Test for save due to flag (OF_ flags via the hook); a flag that
|
|
499
|
+
* saves is noticed on whatever equipment supplies it (trap.c L538). */
|
|
500
|
+
let saved = false;
|
|
501
|
+
for (const flag of trap.kind.saveFlags) {
|
|
502
|
+
if (env.playerHasFlag?.(flag)) {
|
|
503
|
+
saved = true;
|
|
504
|
+
equipLearnFlag(state.actor.player, state.runeEnv, flag);
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
/* Test for save due to armor. */
|
|
509
|
+
if (
|
|
510
|
+
trap.kind.flags.has(TRF.SAVE_ARMOR) &&
|
|
511
|
+
!checkHit(state.rng, 125, state.actor.defense)
|
|
512
|
+
) {
|
|
513
|
+
saved = true;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
/* Test for save due to saving throw. */
|
|
517
|
+
if (
|
|
518
|
+
trap.kind.flags.has(TRF.SAVE_THROW) &&
|
|
519
|
+
state.rng.randint0(100) < (state.actor.combat.skills[SKILL.SAVE] ?? 0)
|
|
520
|
+
) {
|
|
521
|
+
saved = true;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
if (saved) {
|
|
525
|
+
if (trap.kind.msgGood) env.msg?.(trap.kind.msgGood);
|
|
526
|
+
} else {
|
|
527
|
+
if (trap.kind.msgBad) env.msg?.(trap.kind.msgBad);
|
|
528
|
+
runTrapEffect(state, trap, trap.kind.effect, deps);
|
|
529
|
+
/* trap.c:561-562: stop if the square lost its traps or the player died. */
|
|
530
|
+
if (!squareTrap(state, grid).length || state.isDead) break;
|
|
531
|
+
if (trap.kind.effectXtra.length && state.rng.oneIn(2)) {
|
|
532
|
+
if (trap.kind.msgXtra) env.msg?.(trap.kind.msgXtra);
|
|
533
|
+
runTrapEffect(state, trap, trap.kind.effectXtra, deps);
|
|
534
|
+
/* trap.c:572-573 */
|
|
535
|
+
if (!squareTrap(state, grid).length || state.isDead) break;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
/* Some traps drop you a dungeon level. */
|
|
540
|
+
if (trap.kind.flags.has(TRF.DOWN)) {
|
|
541
|
+
if (env.changeLevel) env.changeLevel(state);
|
|
542
|
+
else state.generateLevel = true;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
/* Some traps drop you onto them. */
|
|
546
|
+
if (trap.kind.flags.has(TRF.PIT) && !locEq(state.actor.grid, trap.grid)) {
|
|
547
|
+
movePlayer(state, trap.grid);
|
|
548
|
+
state.updateFov?.(state);
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
/* Some traps disappear after activating, all have a chance to. */
|
|
552
|
+
if (trap.kind.flags.has(TRF.ONETIME) || state.rng.oneIn(3)) {
|
|
553
|
+
squareRemoveTrap(state, grid, trap);
|
|
554
|
+
} else {
|
|
555
|
+
trap.flags.on(TRF.VISIBLE);
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
/** Run one of a trap's effect chains through the interpreter. */
|
|
561
|
+
function runTrapEffect(
|
|
562
|
+
state: GameState,
|
|
563
|
+
trap: Trap,
|
|
564
|
+
records: readonly import("../obj/types.js").EffectRecordJson[],
|
|
565
|
+
deps: TrapDeps,
|
|
566
|
+
): void {
|
|
567
|
+
if (!deps.effects || records.length === 0) return;
|
|
568
|
+
const chain = buildObjectEffectChain(records, state, deps.effects.inject);
|
|
569
|
+
const ctx = attachGameEnv(
|
|
570
|
+
buildEffectContext(state, deps.effects.envDeps),
|
|
571
|
+
{
|
|
572
|
+
state,
|
|
573
|
+
cast: deps.effects.cast,
|
|
574
|
+
/* take_hit consequences so a trap effect that damages the player records
|
|
575
|
+
* died_from + shows the death chain (the trap's EF_DAMAGE also reaches
|
|
576
|
+
* this via ctx.player.takeHit / envDeps.takeHitHooks). */
|
|
577
|
+
...(deps.effects.envDeps.takeHitHooks
|
|
578
|
+
? { takeHitHooks: deps.effects.envDeps.takeHitHooks }
|
|
579
|
+
: {}),
|
|
580
|
+
...(deps.effects.teleport ? { teleport: deps.effects.teleport } : {}),
|
|
581
|
+
...(deps.effects.general ? { general: deps.effects.general } : {}),
|
|
582
|
+
...(deps.effects.item ? { item: deps.effects.item } : {}),
|
|
583
|
+
...(deps.effects.summon ? { summon: deps.effects.summon } : {}),
|
|
584
|
+
},
|
|
585
|
+
);
|
|
586
|
+
deps.effects.registry.effectDo(chain, ctx, {
|
|
587
|
+
origin: sourceTrap(trap),
|
|
588
|
+
aware: false,
|
|
589
|
+
});
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
/**
|
|
593
|
+
* square_set_trap_timeout (trap.c:625): disable traps here for `time` turns.
|
|
594
|
+
*
|
|
595
|
+
* `domsg` is DEAD IN THE C. square_set_trap_timeout has exactly one caller in
|
|
596
|
+
* all of 4.2.6 - square_disable_trap at cave-square.c:1399 - and it passes
|
|
597
|
+
* false, so trap.c:653's "You have disabled the %s." can never reach a player
|
|
598
|
+
* upstream. It is ported anyway, behind the same parameter and the same
|
|
599
|
+
* default, so the port is a complete translation of the function rather than a
|
|
600
|
+
* translation of the reachable half; a mod that calls this with domsg on gets
|
|
601
|
+
* upstream's message rather than silence.
|
|
602
|
+
*/
|
|
603
|
+
export function squareSetTrapTimeout(
|
|
604
|
+
state: GameState,
|
|
605
|
+
grid: Loc,
|
|
606
|
+
tIdx: number,
|
|
607
|
+
time: number,
|
|
608
|
+
domsg = false,
|
|
609
|
+
msg?: (text: string) => void,
|
|
610
|
+
): boolean {
|
|
611
|
+
let disabled = false;
|
|
612
|
+
for (const trap of squareTrap(state, grid)) {
|
|
613
|
+
if (tIdx >= 0 && tIdx !== trap.tidx) continue;
|
|
614
|
+
trap.timeout = time;
|
|
615
|
+
disabled = true;
|
|
616
|
+
/* trap.c:651-654 - unreachable upstream, see above. */
|
|
617
|
+
if (domsg) (msg ?? state.msg)?.(`You have disabled the ${trap.kind.name}.`);
|
|
618
|
+
}
|
|
619
|
+
return disabled;
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
/** square_trap_timeout: the first matching trap's remaining disable time. */
|
|
623
|
+
export function squareTrapTimeout(
|
|
624
|
+
state: GameState,
|
|
625
|
+
grid: Loc,
|
|
626
|
+
tIdx: number,
|
|
627
|
+
): number {
|
|
628
|
+
for (const trap of squareTrap(state, grid)) {
|
|
629
|
+
if (tIdx >= 0 && tIdx !== trap.tidx) continue;
|
|
630
|
+
if (trap.timeout) return trap.timeout;
|
|
631
|
+
}
|
|
632
|
+
return 0;
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
/* ------------------------------------------------------------------ *
|
|
636
|
+
* Door locks (trap.c L706): the lock is a "door lock" trap.
|
|
637
|
+
* ------------------------------------------------------------------ */
|
|
638
|
+
|
|
639
|
+
/** square_set_door_lock: lock a closed door to a power. */
|
|
640
|
+
export function squareSetDoorLock(
|
|
641
|
+
state: GameState,
|
|
642
|
+
grid: Loc,
|
|
643
|
+
power: number,
|
|
644
|
+
deps: TrapDeps,
|
|
645
|
+
): void {
|
|
646
|
+
const lock = lookupTrap(deps.kinds, "door lock");
|
|
647
|
+
if (!lock || !state.chunk.isClosedDoor(grid)) return;
|
|
648
|
+
if (!squareTrapSpecific(state, grid, lock.tidx)) {
|
|
649
|
+
placeTrap(state, grid, lock.tidx, 0, deps);
|
|
650
|
+
}
|
|
651
|
+
for (const trap of squareTrap(state, grid)) {
|
|
652
|
+
if (trap.tidx === lock.tidx) trap.power = power;
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
/** square_door_power: the lock power on a closed door (0 = unlocked). */
|
|
657
|
+
export function squareDoorPower(
|
|
658
|
+
state: GameState,
|
|
659
|
+
grid: Loc,
|
|
660
|
+
deps: TrapDeps,
|
|
661
|
+
): number {
|
|
662
|
+
const lock = lookupTrap(deps.kinds, "door lock");
|
|
663
|
+
if (!lock || !state.chunk.isClosedDoor(grid)) return 0;
|
|
664
|
+
for (const trap of squareTrap(state, grid)) {
|
|
665
|
+
if (trap.tidx === lock.tidx) return trap.power;
|
|
666
|
+
}
|
|
667
|
+
return 0;
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
/**
|
|
671
|
+
* calc_unlocking_chance (player-calcs.c L1676): DISARM_PHYS vs 4x lock
|
|
672
|
+
* power, tenth-ed while blind / confused / hallucinating, floor of 2.
|
|
673
|
+
*/
|
|
674
|
+
export function calcUnlockingChance(
|
|
675
|
+
state: GameState,
|
|
676
|
+
lockPower: number,
|
|
677
|
+
): number {
|
|
678
|
+
let skill = state.actor.combat.skills[SKILL.DISARM_PHYS] ?? 0;
|
|
679
|
+
const p = state.actor.player;
|
|
680
|
+
if ((p.timed[TMD.BLIND] ?? 0) > 0) skill = Math.trunc(skill / 10);
|
|
681
|
+
if (
|
|
682
|
+
(p.timed[TMD.CONFUSED] ?? 0) > 0 ||
|
|
683
|
+
(p.timed[TMD.IMAGE] ?? 0) > 0
|
|
684
|
+
) {
|
|
685
|
+
skill = Math.trunc(skill / 10);
|
|
686
|
+
}
|
|
687
|
+
return Math.max(2, skill - 4 * lockPower);
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
/* ------------------------------------------------------------------ *
|
|
691
|
+
* Disarm (cmd-cave.c do_cmd_disarm).
|
|
692
|
+
* ------------------------------------------------------------------ */
|
|
693
|
+
|
|
694
|
+
/**
|
|
695
|
+
* do_cmd_disarm_aux: one disarm attempt on the first player trap at a
|
|
696
|
+
* grid. Returns whether the command may repeat.
|
|
697
|
+
*/
|
|
698
|
+
export function disarmAux(
|
|
699
|
+
state: GameState,
|
|
700
|
+
grid: Loc,
|
|
701
|
+
deps: TrapDeps,
|
|
702
|
+
): boolean {
|
|
703
|
+
const env = deps.env ?? {};
|
|
704
|
+
const trap = squareTrap(state, grid).find((t) => t.flags.has(TRF.TRAP));
|
|
705
|
+
if (!trap) return false;
|
|
706
|
+
|
|
707
|
+
/* Get the base disarming skill, penalizing some conditions. */
|
|
708
|
+
let skill = trap.flags.has(TRF.MAGICAL)
|
|
709
|
+
? (state.actor.combat.skills[SKILL.DISARM_MAGIC] ?? 0)
|
|
710
|
+
: (state.actor.combat.skills[SKILL.DISARM_PHYS] ?? 0);
|
|
711
|
+
const p = state.actor.player;
|
|
712
|
+
/*
|
|
713
|
+
* cmd-cave.c:812-817: one /10 when any of blind, no_light, confused, or
|
|
714
|
+
* image. no_light is !square_isseen on the player grid (cave-view.c:914-917).
|
|
715
|
+
*/
|
|
716
|
+
if (
|
|
717
|
+
(p.timed[TMD.BLIND] ?? 0) > 0 ||
|
|
718
|
+
!squareIsSeen(state.chunk, state.actor.grid) ||
|
|
719
|
+
(p.timed[TMD.CONFUSED] ?? 0) > 0 ||
|
|
720
|
+
(p.timed[TMD.IMAGE] ?? 0) > 0
|
|
721
|
+
) {
|
|
722
|
+
skill = Math.trunc(skill / 10);
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
/* Extract trap power and the percentage success. */
|
|
726
|
+
const power = Math.trunc(state.chunk.depth / 5);
|
|
727
|
+
const chance = Math.max(skill - power, 2);
|
|
728
|
+
|
|
729
|
+
/* Two chances - one to disarm, one not to set the trap off. */
|
|
730
|
+
if (state.rng.randint0(100) < chance) {
|
|
731
|
+
env.msg?.(`You have disarmed the ${trap.kind.name}.`);
|
|
732
|
+
env.expGain?.(1 + power);
|
|
733
|
+
squareRemoveTrap(state, grid, trap);
|
|
734
|
+
return false;
|
|
735
|
+
}
|
|
736
|
+
if (state.rng.randint0(100) < chance) {
|
|
737
|
+
env.msg?.(`You failed to disarm the ${trap.kind.name}.`);
|
|
738
|
+
return true; /* Player can try again. */
|
|
739
|
+
}
|
|
740
|
+
env.msg?.(`You set off the ${trap.kind.name}!`);
|
|
741
|
+
hitTrap(state, grid, -1, deps);
|
|
742
|
+
return false;
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
/**
|
|
746
|
+
* Register the disarm command and wire the trap hooks: walk onto a player
|
|
747
|
+
* trap triggers it, and the door-lock seams back cave-cmd's open command.
|
|
748
|
+
*/
|
|
749
|
+
export function installTraps(
|
|
750
|
+
state: GameState,
|
|
751
|
+
registry: ActionRegistry,
|
|
752
|
+
deps: TrapDeps,
|
|
753
|
+
): void {
|
|
754
|
+
registry.register("disarm", (s, cmd: PlayerCommand) => {
|
|
755
|
+
const dir = cmd.dir;
|
|
756
|
+
if (dir === undefined || dir < 1 || dir > 9 || dir === 5) return 0;
|
|
757
|
+
const grid = locSum(s.actor.grid, DDGRID[dir] as Loc);
|
|
758
|
+
/* do_cmd_disarm_test (cmd-cave.c:698-721): knowledge first. */
|
|
759
|
+
if (!squareIsKnown(s, grid)) {
|
|
760
|
+
deps.env?.msg?.("You see nothing there.");
|
|
761
|
+
return 0;
|
|
762
|
+
}
|
|
763
|
+
/* Traps must be visible to disarm. */
|
|
764
|
+
if (!squareIsVisibleTrap(s, grid)) {
|
|
765
|
+
deps.env?.msg?.("You see nothing there to disarm.");
|
|
766
|
+
/* cmd-cave.c:713-715 re-memorizes the grid's traps when player->cave
|
|
767
|
+
* still remembers a disarmable one. The port has no separate known-trap
|
|
768
|
+
* store (known.ts:11 - trap knowledge reads the live grid), so there is
|
|
769
|
+
* no stale trap memory here to reconcile. */
|
|
770
|
+
return 0;
|
|
771
|
+
}
|
|
772
|
+
const more = disarmAux(s, grid, deps);
|
|
773
|
+
queueCommandRepeat(s, cmd, more);
|
|
774
|
+
return s.z.moveEnergy;
|
|
775
|
+
});
|
|
776
|
+
|
|
777
|
+
/*
|
|
778
|
+
* player_leaving (mon-util.c:503-515): delayed traps fire on the OLD grid
|
|
779
|
+
* when the player leaves. Wired through movePlayer so every swap path
|
|
780
|
+
* (walk, teleport, pit pull) matches monster_swap.
|
|
781
|
+
*/
|
|
782
|
+
state.onPlayerLeaving = (s, oldGrid, _newGrid): void => {
|
|
783
|
+
/* Decoy range check (mon-util.c:508-511) is handled where decoys live. */
|
|
784
|
+
if (squareIsPlayerTrap(s, oldGrid)) hitTrap(s, oldGrid, 1, deps);
|
|
785
|
+
};
|
|
786
|
+
|
|
787
|
+
/* player_handle_post_move eval_trap (player-util.c:1627-1629): immediate. */
|
|
788
|
+
state.onPlayerMoved = (s, grid): void => {
|
|
789
|
+
if (squareIsPlayerTrap(s, grid)) hitTrap(s, grid, 0, deps);
|
|
790
|
+
};
|
|
791
|
+
}
|