@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,914 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The world-touching general effect handlers, ported from
|
|
3
|
+
* reference/src/effect-handler-general.c (Angband 4.2.6): EF_GLYPH (L700, a
|
|
4
|
+
* glyph of warding or a decoy on the player's grid), EF_WEB (L732, a web
|
|
5
|
+
* spinner filling its surroundings), EF_DISENCHANT (L2003, disenchanting
|
|
6
|
+
* a random piece of worn equipment), the stat family (RESTORE_STAT L773,
|
|
7
|
+
* DRAIN_STAT L803 with its sustain save and rune learning,
|
|
8
|
+
* LOSE_RANDOM_STAT L852, GAIN_STAT L875, SCRAMBLE_STATS / UNSCRAMBLE_STATS
|
|
9
|
+
* L3634 for the TMD_SCRAMBLE timed chains), the experience pair
|
|
10
|
+
* (RESTORE_EXP L893, GAIN_EXP L913), the drains (DRAIN_LIGHT L928,
|
|
11
|
+
* DRAIN_MANA L956 healing a monster caster and soaked by a decoy) and
|
|
12
|
+
* MON_TIMED_INC (L667). Like the other game-layer handlers they read their
|
|
13
|
+
* environment from context.env.game and no-op when it is absent (the
|
|
14
|
+
* worldless rule); GLYPH and WEB additionally need the trap system
|
|
15
|
+
* (env.general.trapDeps) since glyphs and webs ARE trap kinds upstream.
|
|
16
|
+
*
|
|
17
|
+
* disenchantEquipment is exported separately: project-player.c's DISEN
|
|
18
|
+
* handler applies the same disenchantment through effect_simple, so the
|
|
19
|
+
* player side-effect table (game/player-side.ts) calls it directly.
|
|
20
|
+
*
|
|
21
|
+
* Simplifications, ledgered: the equipment letter in the disenchant message
|
|
22
|
+
* (gear_to_label) and the ODESC_BASE description ride the display layer
|
|
23
|
+
* (#25) - the kind's base name is used; obj->known->to_h/to_d/to_a display
|
|
24
|
+
* sync likewise (knowledge is rune-based here). The decoy grid lives on
|
|
25
|
+
* GameState.decoy; the monster-AI decoy targeting is deferred with lore
|
|
26
|
+
* (#24).
|
|
27
|
+
*/
|
|
28
|
+
import { EF, MON_TMD, OF, PROJ, TMD } from "../generated/index.js";
|
|
29
|
+
import { DDGRID, distance, loc, locSum } from "../loc.js";
|
|
30
|
+
import { PROJECT } from "../world/project.js";
|
|
31
|
+
import { GLYPH_DECOY } from "../effects/effect.js";
|
|
32
|
+
import { DIR_TARGET, effectCalculateValue, sourcePlayer, } from "../effects/interpreter.js";
|
|
33
|
+
import { handleTIMED_INC as baseHandleTIMED_INC, timedIncEffectApplyToPlayer, } from "../effects/handlers.js";
|
|
34
|
+
import { equipLearnFlag, shapeLearnOnAssume, sustainFlag, } from "../obj/knowledge.js";
|
|
35
|
+
import { ODESC } from "../obj/desc.js";
|
|
36
|
+
import { describeObject } from "./describe.js";
|
|
37
|
+
import { buildObjectEffectChain } from "./obj-cmd.js";
|
|
38
|
+
import { OBJ_PROPERTY } from "../obj/types.js";
|
|
39
|
+
import { STAT_MAX } from "../player/types.js";
|
|
40
|
+
import { PY_MAX_EXP, playerExpGain, playerExpLose, playerFixScramble, playerScrambleStats, playerStatDec, playerStatInc, } from "../player/exp.js";
|
|
41
|
+
import { monIncTimed } from "../mon/timed.js";
|
|
42
|
+
import { monsterWake } from "../mon/take-hit.js";
|
|
43
|
+
import { loreDoProbe } from "../mon/lore.js";
|
|
44
|
+
import { monsterIsVisible } from "../mon/predicate.js";
|
|
45
|
+
import { featIsTrapHolding } from "../world/chunk.js";
|
|
46
|
+
import { squareIsView } from "../world/view.js";
|
|
47
|
+
import { lookupTrap } from "../world/trap.js";
|
|
48
|
+
import { gameEnv } from "./effect-game-env.js";
|
|
49
|
+
import { caveFindDecoy, destroyDecoy, monsterTargetMonster, } from "./effect-mon-origin.js";
|
|
50
|
+
import { floorPile } from "./floor.js";
|
|
51
|
+
import { castProjection, playerCastSource } from "./project-cast.js";
|
|
52
|
+
import { pushObject } from "./project-feat.js";
|
|
53
|
+
import { placeTrap, squareIsTrap, squareRemoveAllTraps } from "./trap.js";
|
|
54
|
+
import { dungeonGetNextLevel } from "./quest.js";
|
|
55
|
+
/** desc_stat: the stat's (positive or negative) adjective from its property. */
|
|
56
|
+
function descStat(env, stat, positive) {
|
|
57
|
+
const prop = env?.properties?.find((pr) => pr && pr.type === OBJ_PROPERTY.STAT && pr.propIndex === stat);
|
|
58
|
+
if (!prop)
|
|
59
|
+
return positive ? "better" : "worse";
|
|
60
|
+
return positive ? prop.adjective : prop.negAdj;
|
|
61
|
+
}
|
|
62
|
+
/** player_of_has: the racial flags plus every equipped item's. */
|
|
63
|
+
function playerOfHas(state, flag) {
|
|
64
|
+
const p = state.actor.player;
|
|
65
|
+
if (p.race.flags.has(flag))
|
|
66
|
+
return true;
|
|
67
|
+
for (let i = 0; i < p.body.count; i++) {
|
|
68
|
+
if (state.runeEnv.slotObject(i)?.flags.has(flag))
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
/** The expDeps fallback: level changes still recompute, messages ride ctx. */
|
|
74
|
+
function expDepsOf(ctx, env) {
|
|
75
|
+
if (env.general?.expDeps)
|
|
76
|
+
return env.general.expDeps;
|
|
77
|
+
return {
|
|
78
|
+
rng: env.state.rng,
|
|
79
|
+
msg: (t) => say(ctx, t),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/** msg() over the effect context's optional message sink. */
|
|
83
|
+
function say(ctx, text) {
|
|
84
|
+
ctx.env.messages?.msg(text);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* EF_GLYPH: create a glyph of warding (or a decoy) under the player.
|
|
88
|
+
*/
|
|
89
|
+
const handleGLYPH = (ctx) => {
|
|
90
|
+
const env = gameEnv(ctx);
|
|
91
|
+
if (!env)
|
|
92
|
+
return true;
|
|
93
|
+
const { state } = env;
|
|
94
|
+
/* Always notice */
|
|
95
|
+
ctx.ident = true;
|
|
96
|
+
/* Only one decoy at a time */
|
|
97
|
+
if (state.decoy && ctx.subtype === GLYPH_DECOY) {
|
|
98
|
+
say(ctx, "You can only deploy one decoy at a time.");
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
/* See if the effect works: square_istrappable (cave-square.c:220). */
|
|
102
|
+
const grid = state.actor.grid;
|
|
103
|
+
if (!featIsTrapHolding(state.chunk.features, state.chunk.feat(grid))) {
|
|
104
|
+
say(ctx, "There is no clear floor on which to cast the spell.");
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
const trapDeps = env.general?.trapDeps;
|
|
108
|
+
if (!trapDeps)
|
|
109
|
+
return true;
|
|
110
|
+
/* Push objects off the grid */
|
|
111
|
+
if (floorPile(state, grid).length > 0)
|
|
112
|
+
pushObject(state, grid);
|
|
113
|
+
/* Create a glyph (square_add_glyph: the glyph kinds are traps). */
|
|
114
|
+
const kind = lookupTrap(trapDeps.kinds, ctx.subtype === GLYPH_DECOY ? "decoy" : "glyph of warding");
|
|
115
|
+
if (!kind)
|
|
116
|
+
return true;
|
|
117
|
+
placeTrap(state, grid, kind.tidx, 0, trapDeps);
|
|
118
|
+
if (ctx.subtype === GLYPH_DECOY)
|
|
119
|
+
state.decoy = grid;
|
|
120
|
+
return true;
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* EF_WEB: the acting monster spins webs over its surroundings.
|
|
124
|
+
*/
|
|
125
|
+
const handleWEB = (ctx) => {
|
|
126
|
+
const env = gameEnv(ctx);
|
|
127
|
+
if (!env)
|
|
128
|
+
return true;
|
|
129
|
+
const { state } = env;
|
|
130
|
+
/* Get the creating monster; the player can't currently create webs. */
|
|
131
|
+
const midx = env.monCurrent ?? 0;
|
|
132
|
+
const mon = midx > 0 ? state.monsters[midx] : null;
|
|
133
|
+
if (!mon)
|
|
134
|
+
return false;
|
|
135
|
+
/* Always notice */
|
|
136
|
+
ctx.ident = true;
|
|
137
|
+
const trapDeps = env.general?.trapDeps;
|
|
138
|
+
if (!trapDeps)
|
|
139
|
+
return true;
|
|
140
|
+
const web = lookupTrap(trapDeps.kinds, "web");
|
|
141
|
+
if (!web)
|
|
142
|
+
return true;
|
|
143
|
+
/* Increase the radius for higher spell power */
|
|
144
|
+
let rad = 1;
|
|
145
|
+
if (mon.race.spellPower > 40)
|
|
146
|
+
rad++;
|
|
147
|
+
if (mon.race.spellPower > 80)
|
|
148
|
+
rad++;
|
|
149
|
+
/* Check within the radius for clear floor */
|
|
150
|
+
for (let y = mon.grid.y - rad; y <= mon.grid.y + rad; y++) {
|
|
151
|
+
for (let x = mon.grid.x - rad; x <= mon.grid.x + rad; x++) {
|
|
152
|
+
const grid = loc(x, y);
|
|
153
|
+
if (distance(grid, mon.grid) > rad || !state.chunk.inBoundsFully(grid))
|
|
154
|
+
continue;
|
|
155
|
+
/* square_iswebbable: a floor grid with no existing trap or glyph. */
|
|
156
|
+
if (squareIsTrap(state, grid))
|
|
157
|
+
continue;
|
|
158
|
+
if (!state.chunk.isFloor(grid))
|
|
159
|
+
continue;
|
|
160
|
+
/* Create a web: square_add_web (cave-square.c:1331). */
|
|
161
|
+
placeTrap(state, grid, web.tidx, 0, trapDeps);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return true;
|
|
165
|
+
};
|
|
166
|
+
/**
|
|
167
|
+
* The EF_DISENCHANT body, shared with the PROJ_DISEN player side effect
|
|
168
|
+
* (project-player.c dispatches it through effect_simple): pick a random
|
|
169
|
+
* disenchantable equipment slot (not rings, amulets or lights), let
|
|
170
|
+
* artifacts resist 60% of the time, and knock a point (sometimes two) off
|
|
171
|
+
* the item's enchantment.
|
|
172
|
+
*/
|
|
173
|
+
export function disenchantEquipment(state, opts = {}) {
|
|
174
|
+
const p = state.actor.player;
|
|
175
|
+
const rng = state.rng;
|
|
176
|
+
const skip = (i) => {
|
|
177
|
+
const type = p.body.slots[i]?.type;
|
|
178
|
+
return type === "RING" || type === "AMULET" || type === "LIGHT";
|
|
179
|
+
};
|
|
180
|
+
/* Count disenchantable slots */
|
|
181
|
+
let count = 0;
|
|
182
|
+
for (let i = 0; i < p.body.count; i++) {
|
|
183
|
+
if (skip(i))
|
|
184
|
+
continue;
|
|
185
|
+
count++;
|
|
186
|
+
}
|
|
187
|
+
/* Pick one at random */
|
|
188
|
+
let slot = -1;
|
|
189
|
+
for (let i = p.body.count - 1; i >= 0; i--) {
|
|
190
|
+
if (skip(i))
|
|
191
|
+
continue;
|
|
192
|
+
slot = i;
|
|
193
|
+
if (rng.oneIn(count--))
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
if (slot < 0)
|
|
197
|
+
return;
|
|
198
|
+
/* Get the item; no item, nothing happens */
|
|
199
|
+
const obj = state.runeEnv.slotObject(slot);
|
|
200
|
+
if (!obj)
|
|
201
|
+
return;
|
|
202
|
+
/* Nothing to disenchant */
|
|
203
|
+
if (obj.toH <= 0 && obj.toD <= 0 && obj.toA <= 0)
|
|
204
|
+
return;
|
|
205
|
+
const name = describeObject(state, obj, ODESC.BASE);
|
|
206
|
+
/* Artifacts have a 60% chance to resist */
|
|
207
|
+
if (obj.artifact && rng.randint0(100) < 60) {
|
|
208
|
+
opts.msg?.(`Your ${name} resist${obj.number !== 1 ? "" : "s"} disenchantment!`);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
/* Apply disenchantment, depending on which kind of equipment */
|
|
212
|
+
const type = p.body.slots[slot]?.type;
|
|
213
|
+
if (type === "WEAPON" || type === "BOW") {
|
|
214
|
+
/* Disenchant to-hit */
|
|
215
|
+
if (obj.toH > 0)
|
|
216
|
+
obj.toH--;
|
|
217
|
+
if (obj.toH > 5 && rng.randint0(100) < 20)
|
|
218
|
+
obj.toH--;
|
|
219
|
+
/* Disenchant to-dam */
|
|
220
|
+
if (obj.toD > 0)
|
|
221
|
+
obj.toD--;
|
|
222
|
+
if (obj.toD > 5 && rng.randint0(100) < 20)
|
|
223
|
+
obj.toD--;
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
/* Disenchant to-ac */
|
|
227
|
+
if (obj.toA > 0)
|
|
228
|
+
obj.toA--;
|
|
229
|
+
if (obj.toA > 5 && rng.randint0(100) < 20)
|
|
230
|
+
obj.toA--;
|
|
231
|
+
}
|
|
232
|
+
opts.msg?.(`Your ${name} ${obj.number !== 1 ? "were" : "was"} disenchanted!`);
|
|
233
|
+
/* Recalculate bonuses (PU_BONUS) */
|
|
234
|
+
state.updateBonuses?.();
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* EF_DISENCHANT: apply disenchantment to the player's equipment.
|
|
238
|
+
*/
|
|
239
|
+
const handleDISENCHANT = (ctx) => {
|
|
240
|
+
const env = gameEnv(ctx);
|
|
241
|
+
if (!env)
|
|
242
|
+
return true;
|
|
243
|
+
ctx.ident = true;
|
|
244
|
+
disenchantEquipment(env.state, {
|
|
245
|
+
msg: (text) => say(ctx, text),
|
|
246
|
+
});
|
|
247
|
+
return true;
|
|
248
|
+
};
|
|
249
|
+
/**
|
|
250
|
+
* EF_RESTORE_STAT: restore a drained stat (subtype is the stat index).
|
|
251
|
+
*/
|
|
252
|
+
const handleRESTORE_STAT = (ctx) => {
|
|
253
|
+
const env = gameEnv(ctx);
|
|
254
|
+
if (!env)
|
|
255
|
+
return true;
|
|
256
|
+
const p = env.state.actor.player;
|
|
257
|
+
const stat = ctx.subtype;
|
|
258
|
+
/* ID */
|
|
259
|
+
ctx.ident = true;
|
|
260
|
+
/* Check bounds */
|
|
261
|
+
if (stat < 0 || stat >= STAT_MAX)
|
|
262
|
+
return false;
|
|
263
|
+
/* Not needed */
|
|
264
|
+
if (p.statCur[stat] === p.statMax[stat])
|
|
265
|
+
return true;
|
|
266
|
+
/* Restore */
|
|
267
|
+
p.statCur[stat] = p.statMax[stat];
|
|
268
|
+
/* Recalculate bonuses (PU_BONUS) */
|
|
269
|
+
env.state.updateBonuses?.();
|
|
270
|
+
say(ctx, `You feel less ${descStat(env.general, stat, false)}.`);
|
|
271
|
+
return true;
|
|
272
|
+
};
|
|
273
|
+
/**
|
|
274
|
+
* EF_DRAIN_STAT: drain a stat temporarily (subtype is the stat index),
|
|
275
|
+
* unless the matching sustain saves it (teaching the sustain rune either
|
|
276
|
+
* way, as upstream equip_learn_flag runs on both branches).
|
|
277
|
+
*/
|
|
278
|
+
const handleDRAIN_STAT = (ctx) => {
|
|
279
|
+
const env = gameEnv(ctx);
|
|
280
|
+
if (!env)
|
|
281
|
+
return true;
|
|
282
|
+
const { state } = env;
|
|
283
|
+
const p = state.actor.player;
|
|
284
|
+
const stat = ctx.subtype;
|
|
285
|
+
const flag = sustainFlag(stat);
|
|
286
|
+
/* Bounds check */
|
|
287
|
+
if (flag < 0)
|
|
288
|
+
return false;
|
|
289
|
+
/* ID */
|
|
290
|
+
ctx.ident = true;
|
|
291
|
+
/* Sustain */
|
|
292
|
+
if (playerOfHas(state, flag)) {
|
|
293
|
+
equipLearnFlag(p, state.runeEnv, flag);
|
|
294
|
+
say(ctx, `You feel very ${descStat(env.general, stat, false)} for a moment, but the feeling passes.`);
|
|
295
|
+
return true;
|
|
296
|
+
}
|
|
297
|
+
/* Attempt to reduce the stat */
|
|
298
|
+
if (playerStatDec(p, stat, false)) {
|
|
299
|
+
let dam = effectCalculateValue(ctx, false);
|
|
300
|
+
const player = ctx.env.player;
|
|
301
|
+
if (player?.applyDamageReduction)
|
|
302
|
+
dam = player.applyDamageReduction(dam);
|
|
303
|
+
equipLearnFlag(p, state.runeEnv, flag);
|
|
304
|
+
/* show_damage " (N)" suffix (effect-handler-general.c L837-841). */
|
|
305
|
+
const damText = dam > 0 && ctx.env.showDamage ? ` (${dam})` : "";
|
|
306
|
+
say(ctx, `You feel very ${descStat(env.general, stat, false)}.${damText}`);
|
|
307
|
+
if (player?.takeHit)
|
|
308
|
+
player.takeHit(dam, "stat drain");
|
|
309
|
+
state.updateBonuses?.();
|
|
310
|
+
}
|
|
311
|
+
return true;
|
|
312
|
+
};
|
|
313
|
+
/**
|
|
314
|
+
* EF_LOSE_RANDOM_STAT: lose a stat point permanently, in a stat other than
|
|
315
|
+
* the one in subtype.
|
|
316
|
+
*/
|
|
317
|
+
const handleLOSE_RANDOM_STAT = (ctx) => {
|
|
318
|
+
const env = gameEnv(ctx);
|
|
319
|
+
if (!env)
|
|
320
|
+
return true;
|
|
321
|
+
const { state } = env;
|
|
322
|
+
const safeStat = ctx.subtype;
|
|
323
|
+
const lossStat = (state.rng.randint1(STAT_MAX - 1) + safeStat) % STAT_MAX;
|
|
324
|
+
if (playerStatDec(state.actor.player, lossStat, true)) {
|
|
325
|
+
say(ctx, `You feel very ${descStat(env.general, lossStat, false)}.`);
|
|
326
|
+
state.updateBonuses?.();
|
|
327
|
+
}
|
|
328
|
+
ctx.ident = true;
|
|
329
|
+
return true;
|
|
330
|
+
};
|
|
331
|
+
/**
|
|
332
|
+
* EF_GAIN_STAT: gain a stat point (subtype is the stat index).
|
|
333
|
+
*/
|
|
334
|
+
const handleGAIN_STAT = (ctx) => {
|
|
335
|
+
const env = gameEnv(ctx);
|
|
336
|
+
if (!env)
|
|
337
|
+
return true;
|
|
338
|
+
const { state } = env;
|
|
339
|
+
const stat = ctx.subtype;
|
|
340
|
+
if (playerStatInc(state.actor.player, state.rng, stat)) {
|
|
341
|
+
say(ctx, `You feel very ${descStat(env.general, stat, true)}!`);
|
|
342
|
+
state.updateBonuses?.();
|
|
343
|
+
}
|
|
344
|
+
ctx.ident = true;
|
|
345
|
+
return true;
|
|
346
|
+
};
|
|
347
|
+
/**
|
|
348
|
+
* EF_RESTORE_EXP: restore any drained experience.
|
|
349
|
+
*/
|
|
350
|
+
const handleRESTORE_EXP = (ctx) => {
|
|
351
|
+
const env = gameEnv(ctx);
|
|
352
|
+
if (!env)
|
|
353
|
+
return true;
|
|
354
|
+
const p = env.state.actor.player;
|
|
355
|
+
if (p.exp < p.maxExp) {
|
|
356
|
+
if (ctx.origin.what !== "none") {
|
|
357
|
+
say(ctx, "You feel your life energies returning.");
|
|
358
|
+
}
|
|
359
|
+
playerExpGain(p, p.maxExp - p.exp, expDepsOf(ctx, env));
|
|
360
|
+
}
|
|
361
|
+
ctx.ident = true;
|
|
362
|
+
return true;
|
|
363
|
+
};
|
|
364
|
+
/**
|
|
365
|
+
* EF_GAIN_EXP: gain experience (halved, a slight upstream hack to simplify
|
|
366
|
+
* food descriptions).
|
|
367
|
+
*/
|
|
368
|
+
const handleGAIN_EXP = (ctx) => {
|
|
369
|
+
const env = gameEnv(ctx);
|
|
370
|
+
if (!env)
|
|
371
|
+
return true;
|
|
372
|
+
const p = env.state.actor.player;
|
|
373
|
+
const amount = effectCalculateValue(ctx, false);
|
|
374
|
+
if (p.exp < PY_MAX_EXP) {
|
|
375
|
+
say(ctx, "You feel more experienced.");
|
|
376
|
+
playerExpGain(p, Math.trunc(amount / 2), expDepsOf(ctx, env));
|
|
377
|
+
}
|
|
378
|
+
ctx.ident = true;
|
|
379
|
+
return true;
|
|
380
|
+
};
|
|
381
|
+
/**
|
|
382
|
+
* EF_DRAIN_LIGHT: drain fuel from the player's light source, if it burns
|
|
383
|
+
* fuel and has any.
|
|
384
|
+
*/
|
|
385
|
+
const handleDRAIN_LIGHT = (ctx) => {
|
|
386
|
+
const env = gameEnv(ctx);
|
|
387
|
+
if (!env)
|
|
388
|
+
return true;
|
|
389
|
+
const { state } = env;
|
|
390
|
+
const p = state.actor.player;
|
|
391
|
+
const drain = effectCalculateValue(ctx, false);
|
|
392
|
+
const lightSlot = p.body.slots.findIndex((s) => s.type === "LIGHT");
|
|
393
|
+
const obj = lightSlot >= 0 ? state.runeEnv.slotObject(lightSlot) : null;
|
|
394
|
+
if (obj && !obj.flags.has(OF.NO_FUEL) && obj.timeout > 0) {
|
|
395
|
+
/* Reduce fuel */
|
|
396
|
+
obj.timeout -= drain;
|
|
397
|
+
if (obj.timeout < 1)
|
|
398
|
+
obj.timeout = 1;
|
|
399
|
+
/* Notice */
|
|
400
|
+
if (!(p.timed[TMD.BLIND] > 0)) {
|
|
401
|
+
say(ctx, "Your light dims.");
|
|
402
|
+
ctx.ident = true;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
return true;
|
|
406
|
+
};
|
|
407
|
+
/**
|
|
408
|
+
* EF_DRAIN_MANA: drain mana from the player, healing a monster caster six
|
|
409
|
+
* points per point drained. A decoy soaks the drain (and is destroyed);
|
|
410
|
+
* the monster-vs-monster branch (MON_TMD_DISEN on the target) rides the
|
|
411
|
+
* monster-spell targeting (#19).
|
|
412
|
+
*/
|
|
413
|
+
const handleDRAIN_MANA = (ctx) => {
|
|
414
|
+
const env = gameEnv(ctx);
|
|
415
|
+
if (!env)
|
|
416
|
+
return true;
|
|
417
|
+
const { state } = env;
|
|
418
|
+
const p = state.actor.player;
|
|
419
|
+
let drain = effectCalculateValue(ctx, false);
|
|
420
|
+
const isMonster = ctx.origin.what !== "trap";
|
|
421
|
+
const mon = ctx.origin.what === "monster" ? state.monsters[ctx.origin.monster] : null;
|
|
422
|
+
ctx.ident = true;
|
|
423
|
+
/* Target was a decoy - destroy it. */
|
|
424
|
+
if (state.decoy) {
|
|
425
|
+
const decoyKind = env.general?.trapDeps
|
|
426
|
+
? lookupTrap(env.general.trapDeps.kinds, "decoy")
|
|
427
|
+
: null;
|
|
428
|
+
squareRemoveAllTraps(state, state.decoy, decoyKind ? decoyKind.tidx : -1);
|
|
429
|
+
state.decoy = null;
|
|
430
|
+
return true;
|
|
431
|
+
}
|
|
432
|
+
/* The player has no mana. */
|
|
433
|
+
if (!p.csp) {
|
|
434
|
+
say(ctx, "The draining fails.");
|
|
435
|
+
/* update_smart_learn(PF_NO_MANA) rides lore (#24). */
|
|
436
|
+
return true;
|
|
437
|
+
}
|
|
438
|
+
/* Drain the given amount if the player has that much, or all of it. */
|
|
439
|
+
if (drain >= p.csp) {
|
|
440
|
+
drain = p.csp;
|
|
441
|
+
p.csp = 0;
|
|
442
|
+
p.cspFrac = 0;
|
|
443
|
+
}
|
|
444
|
+
else {
|
|
445
|
+
p.csp -= drain;
|
|
446
|
+
}
|
|
447
|
+
/* Heal the monster. */
|
|
448
|
+
if (isMonster && mon && mon.hp < mon.maxhp) {
|
|
449
|
+
mon.hp += 6 * drain;
|
|
450
|
+
if (mon.hp > mon.maxhp)
|
|
451
|
+
mon.hp = mon.maxhp;
|
|
452
|
+
if (monsterIsVisible(mon)) {
|
|
453
|
+
/* MDESC_STANDARD rides the display layer; the race name stands in. */
|
|
454
|
+
say(ctx, `${mon.race.name} appears healthier.`);
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
return true;
|
|
458
|
+
};
|
|
459
|
+
/**
|
|
460
|
+
* player_get_recall_depth (player-util.c L100): under birth_levels_persist the
|
|
461
|
+
* player CHOOSES which visited persistent level Word of Recall returns to.
|
|
462
|
+
* Reached from exactly one place, effect_handler_RECALL's depth-0 branch
|
|
463
|
+
* (effect-handler-general.c L1141), and only with that option on.
|
|
464
|
+
*
|
|
465
|
+
* The rules, exactly:
|
|
466
|
+
* - max_depth <= 0 (never left town) or birth_force_descend: no prompt at
|
|
467
|
+
* all, return true, recall_depth untouched (L109-111).
|
|
468
|
+
* - otherwise loop on get_quantity(prompt, p->max_depth): 0 cancels the whole
|
|
469
|
+
* scroll (return false); a depth with no entry in chunk_list re-prompts
|
|
470
|
+
* after "You must choose a level you have previously visited."
|
|
471
|
+
* - only on success is recall_depth assigned (L134).
|
|
472
|
+
* get_quantity itself skips the prompt and yields 1 when max == 1
|
|
473
|
+
* (ui-input.c L1211), so a max_depth of 1 never asks.
|
|
474
|
+
*
|
|
475
|
+
* `chooseDepth` is the get_quantity seam. With no seam an unprompted terminal
|
|
476
|
+
* takes get_quantity's clamp-to-max, i.e. the deepest level reached, which is
|
|
477
|
+
* always present in the cache.
|
|
478
|
+
*/
|
|
479
|
+
export function playerGetRecallDepth(state, chooseDepth, say) {
|
|
480
|
+
const p = state.actor.player;
|
|
481
|
+
const forceDescend = state.options?.get("birth_force_descend") ?? false;
|
|
482
|
+
if (p.maxDepth <= 0 || forceDescend)
|
|
483
|
+
return true;
|
|
484
|
+
const cache = state.levelCache;
|
|
485
|
+
for (;;) {
|
|
486
|
+
const chosen = p.maxDepth === 1
|
|
487
|
+
? 1
|
|
488
|
+
: (chooseDepth?.("Which level do you wish to return to (0 to cancel)? ", p.maxDepth) ?? p.maxDepth);
|
|
489
|
+
if (chosen === 0)
|
|
490
|
+
return false;
|
|
491
|
+
/* chunk_list scan (L124-129): the port's frozen-level cache is keyed by
|
|
492
|
+
* depth, which is the faithful identity for upstream's level name key. */
|
|
493
|
+
if (cache?.has(chosen)) {
|
|
494
|
+
p.recallDepth = chosen;
|
|
495
|
+
return true;
|
|
496
|
+
}
|
|
497
|
+
say?.("You must choose a level you have previously visited.");
|
|
498
|
+
/* An absent seam cannot answer differently on the next pass; upstream's
|
|
499
|
+
* while (!level_ok) would spin forever, so stop rather than hang. */
|
|
500
|
+
if (chooseDepth === undefined || p.maxDepth === 1)
|
|
501
|
+
return false;
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* EF_RECALL: toggle Word of Recall (effect-handler-general.c L1096) - a
|
|
506
|
+
* delayed level change counted down by process_world (game/loop.ts). The
|
|
507
|
+
* get_check prompts are the injected confirm (default yes, as an
|
|
508
|
+
* unprompted terminal would auto-accept); birth_no_recall is an option (#30,
|
|
509
|
+
* off); force_descend and is_quest read the teleport env; arenas are not
|
|
510
|
+
* modelled. birth_levels_persist IS honoured: it suppresses the "set recall
|
|
511
|
+
* depth to current depth?" prompt and turns on player_get_recall_depth.
|
|
512
|
+
*/
|
|
513
|
+
const handleRECALL = (ctx) => {
|
|
514
|
+
const env = gameEnv(ctx);
|
|
515
|
+
if (!env)
|
|
516
|
+
return true;
|
|
517
|
+
const { state } = env;
|
|
518
|
+
const p = state.actor.player;
|
|
519
|
+
const tp = env.teleport ?? {};
|
|
520
|
+
const confirm = env.general?.confirm ?? (() => true);
|
|
521
|
+
ctx.ident = true;
|
|
522
|
+
/* No recall from single combat. */
|
|
523
|
+
if (state.arenaLevel) {
|
|
524
|
+
say(ctx, "Nothing happens.");
|
|
525
|
+
return true;
|
|
526
|
+
}
|
|
527
|
+
/* No recall from quest levels with force_descend. */
|
|
528
|
+
if (tp.forceDescend && tp.isQuest?.(state.chunk.depth)) {
|
|
529
|
+
say(ctx, "Nothing happens.");
|
|
530
|
+
return true;
|
|
531
|
+
}
|
|
532
|
+
/* Warn the player if they're descending to an unrecallable level. */
|
|
533
|
+
const getNext = tp.getNextLevel ?? ((from, dir) => from + dir);
|
|
534
|
+
const targetDepth = getNext(p.maxDepth, 1);
|
|
535
|
+
if (tp.forceDescend && !state.chunk.depth && tp.isQuest?.(targetDepth)) {
|
|
536
|
+
if (!confirm("Are you sure you want to descend? "))
|
|
537
|
+
return false;
|
|
538
|
+
}
|
|
539
|
+
if (!p.wordRecall) {
|
|
540
|
+
/* Reset recall depth (effect-handler-general.c L1129-1143). The
|
|
541
|
+
* !OPT(birth_levels_persist) half of L1131 matters: with persistent levels
|
|
542
|
+
* on, an off-max depth takes the ELSE arm (recall_depth = max_depth, no
|
|
543
|
+
* prompt) instead of offering to re-anchor recall here. */
|
|
544
|
+
const levelsPersist = state.options?.get("birth_levels_persist") ?? false;
|
|
545
|
+
if (state.chunk.depth > 0) {
|
|
546
|
+
if (state.chunk.depth !== p.maxDepth && !levelsPersist) {
|
|
547
|
+
if (confirm("Set recall depth to current depth? ")) {
|
|
548
|
+
p.recallDepth = p.maxDepth = state.chunk.depth;
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
else {
|
|
552
|
+
p.recallDepth = p.maxDepth;
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
else if (levelsPersist) {
|
|
556
|
+
/* L1140-1142: in town, persistent-levels players pick the destination,
|
|
557
|
+
* and a cancel aborts the whole effect (no charge, no turn). */
|
|
558
|
+
if (!playerGetRecallDepth(state, env.general?.chooseDepth, (t) => say(ctx, t))) {
|
|
559
|
+
return false;
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
p.wordRecall = state.rng.randint0(20) + 15;
|
|
563
|
+
say(ctx, "The air about you becomes charged...");
|
|
564
|
+
}
|
|
565
|
+
else {
|
|
566
|
+
/* Deactivate recall. */
|
|
567
|
+
if (!confirm("Word of Recall is already active. Do you want to cancel it? ")) {
|
|
568
|
+
return false;
|
|
569
|
+
}
|
|
570
|
+
p.wordRecall = 0;
|
|
571
|
+
say(ctx, "A tension leaves the air around you...");
|
|
572
|
+
}
|
|
573
|
+
return true;
|
|
574
|
+
};
|
|
575
|
+
/**
|
|
576
|
+
* EF_DEEP_DESCENT: a delayed drop of several levels (effect-handler-
|
|
577
|
+
* general.c L1166), counted down by process_world. The target increment is
|
|
578
|
+
* (4 / stair_skip) + 1 from the deepest reached depth.
|
|
579
|
+
*/
|
|
580
|
+
const handleDEEP_DESCENT = (ctx) => {
|
|
581
|
+
const env = gameEnv(ctx);
|
|
582
|
+
if (!env)
|
|
583
|
+
return true;
|
|
584
|
+
const { state } = env;
|
|
585
|
+
const p = state.actor.player;
|
|
586
|
+
const tp = env.teleport ?? {};
|
|
587
|
+
/* Calculate target depth (effect-handler-general.c:1167-1169) - through
|
|
588
|
+
* dungeon_get_next_level, so the quest scan and the max_depth clamp both
|
|
589
|
+
* apply rather than a bare arithmetic min. */
|
|
590
|
+
const increment = Math.trunc(4 / state.z.stairSkip) + 1;
|
|
591
|
+
const targetDepth = dungeonGetNextLevel(p, p.maxDepth, increment, state.z);
|
|
592
|
+
if (targetDepth > state.chunk.depth) {
|
|
593
|
+
say(ctx, "The air around you starts to swirl...");
|
|
594
|
+
p.deepDescent = 3 + state.rng.randint1(4);
|
|
595
|
+
}
|
|
596
|
+
else {
|
|
597
|
+
say(ctx, "You sense a malevolent presence blocking passage to the levels below.");
|
|
598
|
+
}
|
|
599
|
+
ctx.ident = true;
|
|
600
|
+
return true;
|
|
601
|
+
};
|
|
602
|
+
/**
|
|
603
|
+
* EF_SCRAMBLE_STATS / EF_UNSCRAMBLE_STATS: the TMD_SCRAMBLE timed effect's
|
|
604
|
+
* on-begin / on-end chains.
|
|
605
|
+
*/
|
|
606
|
+
const handleSCRAMBLE_STATS = (ctx) => {
|
|
607
|
+
const env = gameEnv(ctx);
|
|
608
|
+
if (!env)
|
|
609
|
+
return true;
|
|
610
|
+
playerScrambleStats(env.state.actor.player, env.state.rng);
|
|
611
|
+
env.state.updateBonuses?.();
|
|
612
|
+
return true;
|
|
613
|
+
};
|
|
614
|
+
const handleUNSCRAMBLE_STATS = (ctx) => {
|
|
615
|
+
const env = gameEnv(ctx);
|
|
616
|
+
if (!env)
|
|
617
|
+
return true;
|
|
618
|
+
playerFixScramble(env.state.actor.player);
|
|
619
|
+
env.state.updateBonuses?.();
|
|
620
|
+
return true;
|
|
621
|
+
};
|
|
622
|
+
/**
|
|
623
|
+
* The player TMD -> monster MON_TMD map used when a monster's EF_TIMED_INC
|
|
624
|
+
* targets another monster (effect-handler-general.c L594-624). Subtypes with
|
|
625
|
+
* no monster analogue are absent, so the effect is skipped for them, exactly
|
|
626
|
+
* as the upstream default switch case does nothing.
|
|
627
|
+
*/
|
|
628
|
+
const TMD_TO_MON_TMD = {
|
|
629
|
+
[TMD.CONFUSED]: MON_TMD.CONF,
|
|
630
|
+
[TMD.SLOW]: MON_TMD.SLOW,
|
|
631
|
+
[TMD.PARALYZED]: MON_TMD.HOLD,
|
|
632
|
+
[TMD.BLIND]: MON_TMD.STUN,
|
|
633
|
+
[TMD.AFRAID]: MON_TMD.FEAR,
|
|
634
|
+
[TMD.AMNESIA]: MON_TMD.SLEEP,
|
|
635
|
+
};
|
|
636
|
+
/**
|
|
637
|
+
* EF_TIMED_INC (effect-handler-general.c L575): extend a timed condition. The
|
|
638
|
+
* game-layer override adds the SRC_MONSTER sub-branches the worldless base
|
|
639
|
+
* cannot reach: a monster attack destroying the player's decoy
|
|
640
|
+
* (square_destroy_decoy, gated on cave->mon_current > 0), or a monster
|
|
641
|
+
* targeting another monster (monster_target_monster -> the TMD -> MON_TMD map
|
|
642
|
+
* -> mon_inc_timed). Everything else (player origin, or a monster origin that
|
|
643
|
+
* falls through to the player) delegates to the base handler so the player
|
|
644
|
+
* player_inc_timed path stays single-sourced.
|
|
645
|
+
*/
|
|
646
|
+
const handleTIMED_INC = (ctx) => {
|
|
647
|
+
const env = gameEnv(ctx);
|
|
648
|
+
if (!env || ctx.origin.what !== "monster")
|
|
649
|
+
return baseHandleTIMED_INC(ctx);
|
|
650
|
+
const { state } = env;
|
|
651
|
+
const amount = effectCalculateValue(ctx, false);
|
|
652
|
+
ctx.ident = true;
|
|
653
|
+
/* Destroy the decoy if it's a monster attack. */
|
|
654
|
+
if ((env.monCurrent ?? 0) > 0 && caveFindDecoy(state)) {
|
|
655
|
+
destroyDecoy(state, env.general?.trapDeps, (t) => say(ctx, t));
|
|
656
|
+
return true;
|
|
657
|
+
}
|
|
658
|
+
/* A monster targeting another monster maps the player TMD to a MON_TMD. */
|
|
659
|
+
const tMon = monsterTargetMonster(state, ctx.origin.monster);
|
|
660
|
+
if (tMon) {
|
|
661
|
+
const monEffect = TMD_TO_MON_TMD[ctx.subtype];
|
|
662
|
+
if (monEffect !== undefined) {
|
|
663
|
+
monIncTimed(state.rng, tMon, monEffect, Math.max(amount, 0), 0, undefined, env.monShape);
|
|
664
|
+
}
|
|
665
|
+
return true;
|
|
666
|
+
}
|
|
667
|
+
/* Otherwise the player is the target. */
|
|
668
|
+
timedIncEffectApplyToPlayer(ctx, amount);
|
|
669
|
+
return true;
|
|
670
|
+
};
|
|
671
|
+
/**
|
|
672
|
+
* EF_MON_TIMED_INC: extend a monster status condition on the casting
|
|
673
|
+
* monster (effect-handler-general.c L667).
|
|
674
|
+
*/
|
|
675
|
+
const handleMON_TIMED_INC = (ctx) => {
|
|
676
|
+
const env = gameEnv(ctx);
|
|
677
|
+
if (!env)
|
|
678
|
+
return true;
|
|
679
|
+
if (ctx.origin.what !== "monster")
|
|
680
|
+
return true;
|
|
681
|
+
const { state } = env;
|
|
682
|
+
const amount = effectCalculateValue(ctx, false);
|
|
683
|
+
const mon = state.monsters[ctx.origin.monster];
|
|
684
|
+
if (mon) {
|
|
685
|
+
monIncTimed(state.rng, mon, ctx.subtype, Math.max(amount, 0), 0, undefined, env.monShape);
|
|
686
|
+
ctx.ident = true;
|
|
687
|
+
}
|
|
688
|
+
return true;
|
|
689
|
+
};
|
|
690
|
+
/**
|
|
691
|
+
* EF_SHAPECHANGE (L3449): assume the shape in the subtype - set
|
|
692
|
+
* player.shape (null = normal), run the shape's own effect chain, learn
|
|
693
|
+
* its obvious runes (shape_learn_on_assume) and refresh the bonuses.
|
|
694
|
+
*/
|
|
695
|
+
const handleSHAPECHANGE = (ctx) => {
|
|
696
|
+
const env = gameEnv(ctx);
|
|
697
|
+
if (!env)
|
|
698
|
+
return true;
|
|
699
|
+
const { state } = env;
|
|
700
|
+
const p = state.actor.player;
|
|
701
|
+
/* player_shape_by_idx (player-util.c L1000) walks the shape list for a
|
|
702
|
+
* matching sidx; bind.ts assigns sidx == array index (player/bind.ts L527),
|
|
703
|
+
* so the array read IS that lookup. Upstream then re-resolves the same shape
|
|
704
|
+
* by name through lookup_player_shape (L971) - a no-op round trip. Upstream
|
|
705
|
+
* assert(shape)s a miss; the port declines the effect instead. */
|
|
706
|
+
const shape = env.general?.shapes?.[ctx.subtype];
|
|
707
|
+
if (!shape)
|
|
708
|
+
return false;
|
|
709
|
+
/* Change shape. */
|
|
710
|
+
p.shape = shape.name === "normal" ? null : shape;
|
|
711
|
+
say(ctx, `You assume the shape of a ${shape.name}!`);
|
|
712
|
+
say(ctx, "Your gear merges into your body.");
|
|
713
|
+
/* Do effect. */
|
|
714
|
+
if (shape.effects.length) {
|
|
715
|
+
const chain = buildObjectEffectChain(shape.effects, state);
|
|
716
|
+
ctx.registry.effectDo(chain, ctx.env, {
|
|
717
|
+
origin: sourcePlayer(),
|
|
718
|
+
ident: { value: false },
|
|
719
|
+
aware: true,
|
|
720
|
+
dir: 0,
|
|
721
|
+
beam: 0,
|
|
722
|
+
});
|
|
723
|
+
}
|
|
724
|
+
/* Update. */
|
|
725
|
+
shapeLearnOnAssume(p, state.runeEnv, shape);
|
|
726
|
+
state.updateBonuses?.();
|
|
727
|
+
return true;
|
|
728
|
+
};
|
|
729
|
+
/**
|
|
730
|
+
* EF_COMMAND (L3479): bend the targeted monster to the player's will -
|
|
731
|
+
* wake it, roll the explicit level-vs-level save, then start the paired
|
|
732
|
+
* TMD_COMMAND / MON_TMD_COMMAND timers (game/mon-cmd.ts drives the
|
|
733
|
+
* possession; the world tick keeps the timers aligned).
|
|
734
|
+
*/
|
|
735
|
+
const handleCOMMAND = (ctx) => {
|
|
736
|
+
const env = gameEnv(ctx);
|
|
737
|
+
if (!env)
|
|
738
|
+
return true;
|
|
739
|
+
const { state } = env;
|
|
740
|
+
const p = state.actor.player;
|
|
741
|
+
const amount = effectCalculateValue(ctx, false);
|
|
742
|
+
const mon = state.monsters[state.target.midx] ?? null;
|
|
743
|
+
ctx.ident = true;
|
|
744
|
+
/* Need to choose a monster, not just point. */
|
|
745
|
+
if (!mon) {
|
|
746
|
+
say(ctx, "No monster selected!");
|
|
747
|
+
return false;
|
|
748
|
+
}
|
|
749
|
+
/* Wake up, become aware. */
|
|
750
|
+
monsterWake(state.rng, mon, false, 100);
|
|
751
|
+
/* Explicit saving throw. */
|
|
752
|
+
if (state.rng.randint1(p.lev) < state.rng.randint1(mon.race.level)) {
|
|
753
|
+
const name = mon.race.name;
|
|
754
|
+
say(ctx, `${name.charAt(0).toUpperCase()}${name.slice(1)} resists your command!`);
|
|
755
|
+
/* Take a turn and deduct mana when the monster resists. */
|
|
756
|
+
return true;
|
|
757
|
+
}
|
|
758
|
+
/* Player is commanding; monster is commanded. */
|
|
759
|
+
p.timed[TMD.COMMAND] = Math.max(amount, 0);
|
|
760
|
+
monIncTimed(state.rng, mon, MON_TMD.COMMAND, Math.max(amount, 0), 0);
|
|
761
|
+
return true;
|
|
762
|
+
};
|
|
763
|
+
/**
|
|
764
|
+
* EF_BIZARRE (L3516): the Ring of Bazaar-tan Ishi's random effect - a
|
|
765
|
+
* malignant aura (all stats and a quarter of the experience, permanently),
|
|
766
|
+
* a dispel-all burst, a 300-damage mana ball or a 250-damage mana bolt.
|
|
767
|
+
*/
|
|
768
|
+
const handleBIZARRE = (ctx) => {
|
|
769
|
+
const env = gameEnv(ctx);
|
|
770
|
+
if (!env)
|
|
771
|
+
return true;
|
|
772
|
+
const { state } = env;
|
|
773
|
+
const p = state.actor.player;
|
|
774
|
+
ctx.ident = true;
|
|
775
|
+
switch (state.rng.randint1(10)) {
|
|
776
|
+
case 1:
|
|
777
|
+
case 2: {
|
|
778
|
+
say(ctx, "You are surrounded by a malignant aura.");
|
|
779
|
+
/* Decrease all stats (permanently). */
|
|
780
|
+
for (let stat = 0; stat < STAT_MAX; stat++) {
|
|
781
|
+
playerStatDec(p, stat, true);
|
|
782
|
+
}
|
|
783
|
+
/* Lose some experience (permanently). */
|
|
784
|
+
playerExpLose(p, Math.trunc(p.exp / 4), true, expDepsOf(ctx, env));
|
|
785
|
+
state.updateBonuses?.();
|
|
786
|
+
return true;
|
|
787
|
+
}
|
|
788
|
+
case 3: {
|
|
789
|
+
say(ctx, "You are surrounded by a powerful aura.");
|
|
790
|
+
/* Dispel monsters. */
|
|
791
|
+
ctx.registry.effectSimple(EF.PROJECT_LOS, ctx.env, {
|
|
792
|
+
origin: ctx.origin,
|
|
793
|
+
diceString: "1000",
|
|
794
|
+
subtype: PROJ.DISP_ALL,
|
|
795
|
+
});
|
|
796
|
+
return true;
|
|
797
|
+
}
|
|
798
|
+
case 4:
|
|
799
|
+
case 5:
|
|
800
|
+
case 6: {
|
|
801
|
+
/* Mana ball. */
|
|
802
|
+
let flg = PROJECT.THRU |
|
|
803
|
+
PROJECT.STOP |
|
|
804
|
+
PROJECT.GRID |
|
|
805
|
+
PROJECT.ITEM |
|
|
806
|
+
PROJECT.KILL;
|
|
807
|
+
let target = locSum(state.actor.grid, DDGRID[ctx.dir] ?? loc(0, 0));
|
|
808
|
+
/* Ask for a target if no direction given. */
|
|
809
|
+
if (ctx.dir === DIR_TARGET && env.aimed) {
|
|
810
|
+
flg &= ~(PROJECT.STOP | PROJECT.THRU);
|
|
811
|
+
target = env.aimed;
|
|
812
|
+
}
|
|
813
|
+
/* Aim at the target, explode. */
|
|
814
|
+
return castProjection(state, env.cast, playerCastSource(state), target, 300, PROJ.MANA, flg, 3);
|
|
815
|
+
}
|
|
816
|
+
default: {
|
|
817
|
+
/* Mana bolt. */
|
|
818
|
+
const flg = PROJECT.STOP | PROJECT.KILL | PROJECT.THRU;
|
|
819
|
+
let target = locSum(state.actor.grid, DDGRID[ctx.dir] ?? loc(0, 0));
|
|
820
|
+
/* Use an actual target. */
|
|
821
|
+
if (ctx.dir === DIR_TARGET && env.aimed)
|
|
822
|
+
target = env.aimed;
|
|
823
|
+
/* Aim at the target, do NOT explode. */
|
|
824
|
+
return castProjection(state, env.cast, playerCastSource(state), target, 250, PROJ.MANA, flg, 0);
|
|
825
|
+
}
|
|
826
|
+
}
|
|
827
|
+
};
|
|
828
|
+
/**
|
|
829
|
+
* EF_PROBE: learn everything about every visible monster in line of
|
|
830
|
+
* sight, reporting its hit points (effect-handler-general.c L2451).
|
|
831
|
+
* Monster names are the race name until MDESC (#25).
|
|
832
|
+
*/
|
|
833
|
+
const handlePROBE = (ctx) => {
|
|
834
|
+
const env = gameEnv(ctx);
|
|
835
|
+
if (!env)
|
|
836
|
+
return true;
|
|
837
|
+
const { state } = env;
|
|
838
|
+
let probe = false;
|
|
839
|
+
for (let i = 1; i < state.monsters.length; i++) {
|
|
840
|
+
const mon = state.monsters[i];
|
|
841
|
+
if (!mon || !mon.race)
|
|
842
|
+
continue;
|
|
843
|
+
if (!squareIsView(state.chunk, mon.grid))
|
|
844
|
+
continue;
|
|
845
|
+
if (!monsterIsVisible(mon))
|
|
846
|
+
continue;
|
|
847
|
+
if (!probe)
|
|
848
|
+
say(ctx, "Probing...");
|
|
849
|
+
const name = mon.race.name;
|
|
850
|
+
say(ctx, `${name.charAt(0).toUpperCase()}${name.slice(1)} has ${mon.hp} hit ` +
|
|
851
|
+
`point${mon.hp === 1 ? "" : "s"}.`);
|
|
852
|
+
loreDoProbe(state.lore, mon);
|
|
853
|
+
probe = true;
|
|
854
|
+
}
|
|
855
|
+
if (probe) {
|
|
856
|
+
say(ctx, "That's all.");
|
|
857
|
+
ctx.ident = true;
|
|
858
|
+
}
|
|
859
|
+
return true;
|
|
860
|
+
};
|
|
861
|
+
/** The general handlers, keyed by upstream EF code. */
|
|
862
|
+
const GENERAL_HANDLERS = new Map([
|
|
863
|
+
[EF.PROBE, handlePROBE],
|
|
864
|
+
/* effect_handler_BIZARRE (effect-handler-general.c:3516) */
|
|
865
|
+
[EF.BIZARRE, handleBIZARRE],
|
|
866
|
+
[EF.COMMAND, handleCOMMAND],
|
|
867
|
+
/* effect_handler_SHAPECHANGE (effect-handler-general.c:3449) */
|
|
868
|
+
[EF.SHAPECHANGE, handleSHAPECHANGE],
|
|
869
|
+
[EF.GLYPH, handleGLYPH],
|
|
870
|
+
/* effect_handler_WEB (effect-handler-general.c:732) */
|
|
871
|
+
[EF.WEB, handleWEB],
|
|
872
|
+
[EF.DISENCHANT, handleDISENCHANT],
|
|
873
|
+
[EF.RECALL, handleRECALL],
|
|
874
|
+
/* effect_handler_DEEP_DESCENT (effect-handler-general.c:1163) */
|
|
875
|
+
[EF.DEEP_DESCENT, handleDEEP_DESCENT],
|
|
876
|
+
/* effect_handler_RESTORE_STAT (effect-handler-general.c:773) */
|
|
877
|
+
[EF.RESTORE_STAT, handleRESTORE_STAT],
|
|
878
|
+
[EF.DRAIN_STAT, handleDRAIN_STAT],
|
|
879
|
+
/* effect_handler_LOSE_RANDOM_STAT (effect-handler-general.c:852) */
|
|
880
|
+
[EF.LOSE_RANDOM_STAT, handleLOSE_RANDOM_STAT],
|
|
881
|
+
/* effect_handler_GAIN_STAT (effect-handler-general.c:875) */
|
|
882
|
+
[EF.GAIN_STAT, handleGAIN_STAT],
|
|
883
|
+
/* effect_handler_RESTORE_EXP (effect-handler-general.c:893) */
|
|
884
|
+
[EF.RESTORE_EXP, handleRESTORE_EXP],
|
|
885
|
+
/* effect_handler_GAIN_EXP (effect-handler-general.c:913) */
|
|
886
|
+
[EF.GAIN_EXP, handleGAIN_EXP],
|
|
887
|
+
/* effect_handler_DRAIN_LIGHT (effect-handler-general.c:928) */
|
|
888
|
+
[EF.DRAIN_LIGHT, handleDRAIN_LIGHT],
|
|
889
|
+
/* effect_handler_DRAIN_MANA (effect-handler-general.c:956) */
|
|
890
|
+
[EF.DRAIN_MANA, handleDRAIN_MANA],
|
|
891
|
+
/* effect_handler_SCRAMBLE_STATS (effect-handler-general.c:3634) */
|
|
892
|
+
[EF.SCRAMBLE_STATS, handleSCRAMBLE_STATS],
|
|
893
|
+
/* effect_handler_UNSCRAMBLE_STATS (effect-handler-general.c:3646) */
|
|
894
|
+
[EF.UNSCRAMBLE_STATS, handleUNSCRAMBLE_STATS],
|
|
895
|
+
/* effect_handler_TIMED_INC (effect-handler-general.c:576) */
|
|
896
|
+
[EF.TIMED_INC, handleTIMED_INC],
|
|
897
|
+
[EF.MON_TIMED_INC, handleMON_TIMED_INC],
|
|
898
|
+
]);
|
|
899
|
+
/**
|
|
900
|
+
* Register the general world-touching handlers, overriding the stubs
|
|
901
|
+
* registerCoreHandlers installed. Call after registerCoreHandlers. Each
|
|
902
|
+
* handler reads its game environment from context.env.game (attach it with
|
|
903
|
+
* attachGameEnv) and no-ops when it is absent.
|
|
904
|
+
*/
|
|
905
|
+
export function registerGeneralHandlers(registry) {
|
|
906
|
+
for (const [code, handler] of GENERAL_HANDLERS) {
|
|
907
|
+
registry.register(code, { handler, status: "implemented" });
|
|
908
|
+
}
|
|
909
|
+
}
|
|
910
|
+
/** The general EF codes this module registers. */
|
|
911
|
+
export const GENERAL_HANDLER_CODES = [
|
|
912
|
+
...GENERAL_HANDLERS.keys(),
|
|
913
|
+
];
|
|
914
|
+
//# sourceMappingURL=effect-general.js.map
|