@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,881 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The terrain-shaping effect handlers, ported from
|
|
3
|
+
* reference/src/effect-handler-general.c and effect-handler-attack.c
|
|
4
|
+
* (Angband 4.2.6): EF_RUBBLE (general L2939, rubble falling into the empty
|
|
5
|
+
* grids around the player), EF_GRANITE (L2991, a granite wall on the
|
|
6
|
+
* originating trap's grid), EF_CREATE_STAIRS (L1975, stairs under the
|
|
7
|
+
* player), EF_LIGHT_LEVEL / EF_DARKEN_LEVEL (L3003, wiz_light / wiz_dark),
|
|
8
|
+
* EF_LIGHT_AREA / EF_DARKEN_AREA (L3026, light_room over the room's grids),
|
|
9
|
+
* EF_DESTRUCTION (attack L1169, the *Destruction* circle that deletes
|
|
10
|
+
* monsters and rebuilds the terrain) and EF_EARTHQUAKE (attack L1290, the
|
|
11
|
+
* radius-r quake with player and monster displacement).
|
|
12
|
+
*
|
|
13
|
+
* light_room / wiz_light are ported here (cave-map.c): SQUARE_GLOW changes,
|
|
14
|
+
* room flooding, illumination wake-up rolls, and player square memory.
|
|
15
|
+
*
|
|
16
|
+
* Like the other game-layer handlers these read their environment from
|
|
17
|
+
* context.env.game and no-op when it is absent (the worldless rule).
|
|
18
|
+
*
|
|
19
|
+
* Simplifications, ledgered in parity/ledger/game-effect-terrain.yaml:
|
|
20
|
+
* - No town or arena (depth 0 short-circuits like the town branch), no
|
|
21
|
+
* birth_levels_persist / show_damage options (#30).
|
|
22
|
+
* - expose_to_sun on the surface rides the day-night cycle.
|
|
23
|
+
* - MDESC monster names and MON_MSG grammar ride the display layer (#25);
|
|
24
|
+
* the race name stands in for the quake and DARKEN_AREA target messages.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
import { ELEM, FEAT, EF, MON_TMD, RF, SQUARE, TF, TMD } from "../generated/index.js";
|
|
28
|
+
import type { Loc } from "../loc.js";
|
|
29
|
+
import { DDGRID_DDD, distance, loc, locEq, locSum } from "../loc.js";
|
|
30
|
+
import type {
|
|
31
|
+
EffectHandler,
|
|
32
|
+
EffectHandlerContext,
|
|
33
|
+
EffectRegistry,
|
|
34
|
+
Source,
|
|
35
|
+
} from "../effects/interpreter.js";
|
|
36
|
+
import { monsterIsSmart, monsterIsStupid, monsterIsVisible } from "../mon/predicate.js";
|
|
37
|
+
import { monsterWake } from "../mon/take-hit.js";
|
|
38
|
+
import { liveObjectIsKnownArtifact } from "../obj/artifact-known.js";
|
|
39
|
+
import { equipLearnElement } from "../obj/knowledge.js";
|
|
40
|
+
import { featIsBright } from "../world/chunk.js";
|
|
41
|
+
import { los } from "../world/view.js";
|
|
42
|
+
import {
|
|
43
|
+
caveFindDecoy,
|
|
44
|
+
monsterIsDecoyed,
|
|
45
|
+
monsterTargetMonster,
|
|
46
|
+
} from "./effect-mon-origin.js";
|
|
47
|
+
import type { GameState } from "./context.js";
|
|
48
|
+
import {
|
|
49
|
+
deleteMonster,
|
|
50
|
+
monsterSwap,
|
|
51
|
+
movePlayer,
|
|
52
|
+
squareIsEmpty,
|
|
53
|
+
squareMonster,
|
|
54
|
+
} from "./context.js";
|
|
55
|
+
import { gameEnv } from "./effect-game-env.js";
|
|
56
|
+
import type { GameEffectEnv } from "./effect-game-env.js";
|
|
57
|
+
import { floorExcise, floorPile } from "./floor.js";
|
|
58
|
+
import {
|
|
59
|
+
squareForget,
|
|
60
|
+
squareKnowPile,
|
|
61
|
+
squareMemorize,
|
|
62
|
+
squareMemoryBad,
|
|
63
|
+
squareSensePile,
|
|
64
|
+
} from "./known.js";
|
|
65
|
+
import { pushObject } from "./project-feat.js";
|
|
66
|
+
import { squareIsVisibleTrap, squareIsWarded } from "./trap.js";
|
|
67
|
+
|
|
68
|
+
/** msg() over the effect context's optional message sink. */
|
|
69
|
+
function say(ctx: EffectHandlerContext, text: string): void {
|
|
70
|
+
ctx.env.messages?.msg(text);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** origin_get_loc: the grid an effect originates from. */
|
|
74
|
+
function originGrid(env: GameEffectEnv, origin: Source): Loc | null {
|
|
75
|
+
switch (origin.what) {
|
|
76
|
+
case "player":
|
|
77
|
+
return env.state.actor.grid;
|
|
78
|
+
case "monster":
|
|
79
|
+
return env.state.monsters[origin.monster]?.grid ?? null;
|
|
80
|
+
case "trap": {
|
|
81
|
+
const trap = origin.trap as { grid?: Loc } | null;
|
|
82
|
+
return trap?.grid ?? null;
|
|
83
|
+
}
|
|
84
|
+
default:
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* light_room (cave-map.c L372): flood the room containing `grid` (walls get
|
|
91
|
+
* lit but stop the spread) and light or darken every grid at once. Lighting
|
|
92
|
+
* rolls the illumination wake-ups (smart monsters always, normal 1/4,
|
|
93
|
+
* stupid 1/10); darkening spares internally-lit (BRIGHT) grids. The
|
|
94
|
+
* square-memory half (PF_UNLIGHT memorize, floor forget) rides map memory.
|
|
95
|
+
*/
|
|
96
|
+
export function lightRoom(state: GameState, grid: Loc, light: boolean): void {
|
|
97
|
+
const c = state.chunk;
|
|
98
|
+
const pts: Loc[] = [];
|
|
99
|
+
const seen = new Set<number>();
|
|
100
|
+
const add = (g: Loc): void => {
|
|
101
|
+
if (!c.inBounds(g)) return;
|
|
102
|
+
const key = g.y * c.width + g.x;
|
|
103
|
+
if (seen.has(key)) return;
|
|
104
|
+
if (!c.sqinfoHas(g, SQUARE.ROOM)) return;
|
|
105
|
+
seen.add(key);
|
|
106
|
+
pts.push(g);
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
/* Add the initial grid, then spread along projectable room grids. */
|
|
110
|
+
add(grid);
|
|
111
|
+
for (let i = 0; i < pts.length; i++) {
|
|
112
|
+
if (!c.isProjectable(pts[i]!)) continue;
|
|
113
|
+
for (let d = 0; d < 8; d++) {
|
|
114
|
+
add(locSum(pts[i]!, DDGRID_DDD[d]!));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (light) {
|
|
119
|
+
/* cave_light: perma-light, then process the affected monsters. */
|
|
120
|
+
for (const g of pts) c.sqinfoOn(g, SQUARE.GLOW);
|
|
121
|
+
for (const g of pts) {
|
|
122
|
+
const mon = squareMonster(state, g);
|
|
123
|
+
if (!mon) continue;
|
|
124
|
+
let chance = 25;
|
|
125
|
+
if (monsterIsStupid(mon)) chance = 10;
|
|
126
|
+
if (monsterIsSmart(mon)) chance = 100;
|
|
127
|
+
if (
|
|
128
|
+
(mon.mTimed[MON_TMD.SLEEP] ?? 0) > 0 &&
|
|
129
|
+
state.rng.randint0(100) < chance
|
|
130
|
+
) {
|
|
131
|
+
monsterWake(state.rng, mon, true, 100);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
} else {
|
|
135
|
+
/* cave_unlight: darken all but internally-lit grids. */
|
|
136
|
+
for (const g of pts) {
|
|
137
|
+
if (!featIsBright(c.features, c.feat(g))) c.sqinfoOff(g, SQUARE.GLOW);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
state.updateFov?.(state);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* wiz_light (cave-map.c:417-479) and wiz_dark (cave-map.c:490-546).
|
|
146
|
+
*
|
|
147
|
+
* The two upstream bodies are line-for-line identical except for ONE
|
|
148
|
+
* expression: wiz_light does `sqinfo_on(..., SQUARE_GLOW)` on each neighbour
|
|
149
|
+
* (cave-map.c:435) where wiz_dark does `sqinfo_off` (cave-map.c:508). Both
|
|
150
|
+
* MEMORIZE terrain, both know/sense the floor piles, and both run the same
|
|
151
|
+
* mark / forget-misremembered / unmark passes. wiz_dark is therefore "light up
|
|
152
|
+
* the map, but perma-DARK the grids" - it is not a forget-everything.
|
|
153
|
+
*
|
|
154
|
+
* Structure, guaranteed by the C:
|
|
155
|
+
* - the neighbour loop is gated on `!square_seemslikewall(grid)` (TF_ROCK,
|
|
156
|
+
* cave-square.c:769), but the pile pass and the forget pass run for EVERY
|
|
157
|
+
* grid in 1..h-2 / 1..w-2, walls included (the `continue` at cave-map.c:426
|
|
158
|
+
* is dead: square_in_bounds_fully is always true in that range);
|
|
159
|
+
* - a neighbour is memorized only when `!square_isfloor(a_grid) ||
|
|
160
|
+
* square_isvisibletrap(a_grid)` (cave-map.c:439-440 / :510-511), and each
|
|
161
|
+
* memorized neighbour is square_mark'ed (cave-square.c:1585);
|
|
162
|
+
* - `full` picks square_know_pile over square_sense_pile (cave-map.c:448-452 /
|
|
163
|
+
* :519-523), threaded from context->value.base by both effect handlers
|
|
164
|
+
* (effect-handler-general.c:3005 / :3016) and true for the wizard command
|
|
165
|
+
* (cmd-wizard.c:2909);
|
|
166
|
+
* - then `!square_ismark(grid) && square_ismemorybad(grid) ->
|
|
167
|
+
* square_forget(grid)` (cave-map.c:456-459 / :527-530);
|
|
168
|
+
* - then a square_unmark sweep over 1..h-2 / 1..w-2 only (cave-map.c:463-470 /
|
|
169
|
+
* :534-541). Upstream WART preserved: a MARK set on row 0 / column 0 by the
|
|
170
|
+
* neighbour loop is never swept, so it survives into the savefile. It is
|
|
171
|
+
* never read again (square_ismark is only ever called on 1..h-2 grids), so
|
|
172
|
+
* the wart is inert; it is kept because core keeps warts.
|
|
173
|
+
*
|
|
174
|
+
* SQUARE_MARK's whole life in 4.2.6 is inside these two functions: it is set
|
|
175
|
+
* only at cave-map.c:441 / :512, read only at cave-map.c:456 / :527, and
|
|
176
|
+
* cleared by the sweep. The four other square_unmark calls
|
|
177
|
+
* (project-feat.c:332/355/465/526, effect-handler-general.c:1263) are
|
|
178
|
+
* vestigial no-ops - nothing marks those grids, and MAP_AREA's own forget check
|
|
179
|
+
* (effect-handler-general.c:1252) deliberately omits the !square_ismark half.
|
|
180
|
+
*
|
|
181
|
+
* `isCurrentCave` is upstream's `c != cave` guard (square_memorize
|
|
182
|
+
* cave-square.c:1576, square_forget :1582, square_know_pile :1169,
|
|
183
|
+
* square_sense_pile :1147 all return early when c is not the live cave).
|
|
184
|
+
* generate.c:1109 (arena) and :1256 (a "known" labyrinth) call
|
|
185
|
+
* wiz_light(chunk, p, false) on a chunk that is not yet `cave`, so those calls
|
|
186
|
+
* set SQUARE_GLOW and nothing else. Pass false to reproduce that.
|
|
187
|
+
*/
|
|
188
|
+
export function wizLightLevel(
|
|
189
|
+
state: GameState,
|
|
190
|
+
lit: boolean,
|
|
191
|
+
full: boolean,
|
|
192
|
+
isCurrentCave = true,
|
|
193
|
+
): void {
|
|
194
|
+
const c = state.chunk;
|
|
195
|
+
for (let y = 1; y < c.height - 1; y++) {
|
|
196
|
+
for (let x = 1; x < c.width - 1; x++) {
|
|
197
|
+
const grid = loc(x, y);
|
|
198
|
+
/* Process all non-walls (square_seemslikewall, cave-square.c:769). */
|
|
199
|
+
if (!c.feature(grid).flags.has(TF.ROCK)) {
|
|
200
|
+
/* Scan all neighbors (ddgrid_ddd[8] is the grid itself). */
|
|
201
|
+
for (let i = 0; i < 9; i++) {
|
|
202
|
+
const a = locSum(grid, DDGRID_DDD[i]!);
|
|
203
|
+
/* Perma-light / perma-darken: the ONLY difference between the two
|
|
204
|
+
* upstream functions (cave-map.c:435 vs :508). */
|
|
205
|
+
if (lit) c.sqinfoOn(a, SQUARE.GLOW);
|
|
206
|
+
else c.sqinfoOff(a, SQUARE.GLOW);
|
|
207
|
+
/* Memorize normal features (cave-map.c:439-442 / :510-513): only
|
|
208
|
+
* non-floor terrain, or a floor grid carrying a VISIBLE trap. Plain
|
|
209
|
+
* floor is lit but deliberately NOT remembered. */
|
|
210
|
+
if (!c.isFloor(a) || squareIsVisibleTrap(state, a)) {
|
|
211
|
+
if (isCurrentCave) squareMemorize(state, a);
|
|
212
|
+
c.sqinfoOn(a, SQUARE.MARK);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/* Memorize objects (cave-map.c:445-452 / :516-523). */
|
|
217
|
+
if (isCurrentCave) {
|
|
218
|
+
if (full) squareKnowPile(state, grid);
|
|
219
|
+
else squareSensePile(state, grid);
|
|
220
|
+
}
|
|
221
|
+
/* Forget grids that are both unprocessed and misremembered in the
|
|
222
|
+
* mapping area (cave-map.c:456-459 / :527-530). */
|
|
223
|
+
if (
|
|
224
|
+
isCurrentCave &&
|
|
225
|
+
!c.sqinfoHas(grid, SQUARE.MARK) &&
|
|
226
|
+
squareMemoryBad(state, grid)
|
|
227
|
+
) {
|
|
228
|
+
squareForget(state, grid);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/* Unmark grids (cave-map.c:463-470 / :534-541). */
|
|
233
|
+
for (let y = 1; y < c.height - 1; y++) {
|
|
234
|
+
for (let x = 1; x < c.width - 1; x++) {
|
|
235
|
+
c.sqinfoOff(loc(x, y), SQUARE.MARK);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/*
|
|
239
|
+
* cave-map.c:474 sets PU_UPDATE_VIEW; it does NOT call update_view. The
|
|
240
|
+
* difference matters at generate.c:1109 and :1256, where wiz_light runs on a
|
|
241
|
+
* chunk that is not yet `cave`: upstream's flag is serviced at the next
|
|
242
|
+
* update_stuff, by which time the player has been placed on the new level. This
|
|
243
|
+
* port has no PU_ flags and refreshes immediately, so on the not-current-cave
|
|
244
|
+
* path it would build the view while `state.chunk` is the NEW level and the
|
|
245
|
+
* player's grid is still the OLD one.
|
|
246
|
+
*
|
|
247
|
+
* That threw `square out of bounds: 75,31` on arena entry the moment core
|
|
248
|
+
* acquired a default updateFov - a live crash in the web build, which has always
|
|
249
|
+
* had one, reachable through EF_SINGLE_COMBAT. It was invisible for as long as
|
|
250
|
+
* the seam could be absent. Deferring to the caller's own refresh (changeLevel
|
|
251
|
+
* calls updateFov after placePlayer) is what upstream's flag does.
|
|
252
|
+
*/
|
|
253
|
+
if (isCurrentCave) state.updateFov?.(state);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/** square_changeable: no perma-grids, shops, stairs or artifact piles. */
|
|
257
|
+
function squareChangeable(state: GameState, grid: Loc): boolean {
|
|
258
|
+
const c = state.chunk;
|
|
259
|
+
if (c.isPerm(grid) || c.isShop(grid) || c.isStairs(grid)) return false;
|
|
260
|
+
for (const obj of floorPile(state, grid)) {
|
|
261
|
+
if (obj.artifact) return false;
|
|
262
|
+
}
|
|
263
|
+
return true;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* EF_RUBBLE: rubble falls into the empty grids around the player.
|
|
268
|
+
*/
|
|
269
|
+
const handleRUBBLE: EffectHandler = (ctx) => {
|
|
270
|
+
const env = gameEnv(ctx);
|
|
271
|
+
if (!env) return true;
|
|
272
|
+
const { state } = env;
|
|
273
|
+
const c = state.chunk;
|
|
274
|
+
const pgrid = state.actor.grid;
|
|
275
|
+
|
|
276
|
+
/* Work out how many grids to fill, limited to the open neighbours. */
|
|
277
|
+
let rubbleGrids = state.rng.randint1(3);
|
|
278
|
+
let openGrids = 0;
|
|
279
|
+
for (let d = 0; d < 8; d++) {
|
|
280
|
+
const grid = locSum(pgrid, DDGRID_DDD[d]!);
|
|
281
|
+
if (c.inBounds(grid) && squareIsEmpty(state, grid)) openGrids++;
|
|
282
|
+
}
|
|
283
|
+
if (rubbleGrids > openGrids) rubbleGrids = openGrids;
|
|
284
|
+
|
|
285
|
+
/* Avoid infinite loops */
|
|
286
|
+
let iterations = 0;
|
|
287
|
+
while (rubbleGrids > 0 && iterations < 10) {
|
|
288
|
+
/* Look around the player */
|
|
289
|
+
for (let d = 0; d < 8; d++) {
|
|
290
|
+
const grid = locSum(pgrid, DDGRID_DDD[d]!);
|
|
291
|
+
if (!c.inBoundsFully(grid)) continue;
|
|
292
|
+
if (!squareIsEmpty(state, grid)) continue;
|
|
293
|
+
|
|
294
|
+
if (state.rng.oneIn(3)) {
|
|
295
|
+
c.setFeat(grid, state.rng.oneIn(2) ? FEAT.PASS_RUBBLE : FEAT.RUBBLE);
|
|
296
|
+
rubbleGrids--;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
iterations++;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
ctx.ident = true;
|
|
303
|
+
state.updateFov?.(state);
|
|
304
|
+
return true;
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* EF_GRANITE: a granite wall on the originating trap's grid (the earthquake
|
|
309
|
+
* trap's wall-sealing effect).
|
|
310
|
+
*/
|
|
311
|
+
const handleGRANITE: EffectHandler = (ctx) => {
|
|
312
|
+
const env = gameEnv(ctx);
|
|
313
|
+
if (!env) return true;
|
|
314
|
+
if (ctx.origin.what !== "trap") return true;
|
|
315
|
+
const grid = originGrid(env, ctx.origin);
|
|
316
|
+
if (!grid) return true;
|
|
317
|
+
|
|
318
|
+
env.state.chunk.setFeat(grid, FEAT.GRANITE);
|
|
319
|
+
env.state.updateFov?.(env.state);
|
|
320
|
+
return true;
|
|
321
|
+
};
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* EF_CREATE_STAIRS: stairs on the player's grid (square_add_stairs picks the
|
|
325
|
+
* direction: always down in town, never down on quest or bottom levels).
|
|
326
|
+
*/
|
|
327
|
+
const handleCREATE_STAIRS: EffectHandler = (ctx) => {
|
|
328
|
+
const env = gameEnv(ctx);
|
|
329
|
+
if (!env) return true;
|
|
330
|
+
const { state } = env;
|
|
331
|
+
const grid = state.actor.grid;
|
|
332
|
+
ctx.ident = true;
|
|
333
|
+
|
|
334
|
+
/* Fails in arenas (birth_levels_persist rides #30). */
|
|
335
|
+
if (state.arenaLevel) {
|
|
336
|
+
say(ctx, "Nothing happens!");
|
|
337
|
+
return false;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/* Only allow stairs to be created on empty floor. */
|
|
341
|
+
if (!state.chunk.isFloor(grid)) {
|
|
342
|
+
say(ctx, "There is no empty floor here.");
|
|
343
|
+
return false;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
/* Push objects off the grid. */
|
|
347
|
+
if (floorPile(state, grid).length > 0) pushObject(state, grid);
|
|
348
|
+
|
|
349
|
+
/* square_add_stairs */
|
|
350
|
+
let down = state.rng.randint0(100) < 50;
|
|
351
|
+
const depth = state.chunk.depth;
|
|
352
|
+
if (depth === 0) {
|
|
353
|
+
down = true;
|
|
354
|
+
} else if (env.teleport?.isQuest?.(depth) || depth >= state.z.maxDepth - 1) {
|
|
355
|
+
down = false;
|
|
356
|
+
}
|
|
357
|
+
state.chunk.setFeat(grid, down ? FEAT.MORE : FEAT.LESS);
|
|
358
|
+
|
|
359
|
+
return true;
|
|
360
|
+
};
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* EF_LIGHT_LEVEL: light the whole level (wiz_light); a nonzero value base is
|
|
364
|
+
* the "full" clairvoyant form with its message.
|
|
365
|
+
*/
|
|
366
|
+
const handleLIGHT_LEVEL: EffectHandler = (ctx) => {
|
|
367
|
+
const env = gameEnv(ctx);
|
|
368
|
+
if (!env) return true;
|
|
369
|
+
/* bool full = context->value.base ? true : false (effect-handler-general.c
|
|
370
|
+
* :3005): the same flag gates the message AND square_know_pile vs
|
|
371
|
+
* square_sense_pile inside wiz_light. */
|
|
372
|
+
const full = ctx.value.base ? true : false;
|
|
373
|
+
if (full) {
|
|
374
|
+
say(ctx, "An image of your surroundings forms in your mind...");
|
|
375
|
+
}
|
|
376
|
+
wizLightLevel(env.state, true, full);
|
|
377
|
+
ctx.ident = true;
|
|
378
|
+
return true;
|
|
379
|
+
};
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* EF_DARKEN_LEVEL: darken the whole level (wiz_dark).
|
|
383
|
+
*/
|
|
384
|
+
const handleDARKEN_LEVEL: EffectHandler = (ctx) => {
|
|
385
|
+
const env = gameEnv(ctx);
|
|
386
|
+
if (!env) return true;
|
|
387
|
+
/* bool full = context->value.base (effect-handler-general.c:3016). */
|
|
388
|
+
const full = ctx.value.base ? true : false;
|
|
389
|
+
if (full) {
|
|
390
|
+
say(ctx, "A great blackness rolls through the dungeon...");
|
|
391
|
+
}
|
|
392
|
+
wizLightLevel(env.state, false, full);
|
|
393
|
+
ctx.ident = true;
|
|
394
|
+
return true;
|
|
395
|
+
};
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* EF_LIGHT_AREA: light the room around the player.
|
|
399
|
+
*/
|
|
400
|
+
const handleLIGHT_AREA: EffectHandler = (ctx) => {
|
|
401
|
+
const env = gameEnv(ctx);
|
|
402
|
+
if (!env) return true;
|
|
403
|
+
const { state } = env;
|
|
404
|
+
|
|
405
|
+
/* Message */
|
|
406
|
+
if (!((state.actor.player.timed[TMD.BLIND] ?? 0) > 0)) {
|
|
407
|
+
say(ctx, "You are surrounded by a white light.");
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
/* Light up the room */
|
|
411
|
+
lightRoom(state, state.actor.grid, true);
|
|
412
|
+
|
|
413
|
+
/* Assume seen */
|
|
414
|
+
ctx.ident = true;
|
|
415
|
+
return true;
|
|
416
|
+
};
|
|
417
|
+
|
|
418
|
+
/**
|
|
419
|
+
* EF_DARKEN_AREA: darken the room around the player, a targeted monster, or
|
|
420
|
+
* the player's decoy (effect-handler-general.c EF_DARKEN_AREA). A monster
|
|
421
|
+
* caster targeting another monster darkens its room; a decoyed caster darkens
|
|
422
|
+
* the decoy's room (and the effect is unseen if the decoy is out of sight or
|
|
423
|
+
* the player is blind). The player-cast form blinds an unresisting caster.
|
|
424
|
+
* (monster_desc MDESC_TARG is deferred (8.9); the race name stands in.)
|
|
425
|
+
*/
|
|
426
|
+
const handleDARKEN_AREA: EffectHandler = (ctx) => {
|
|
427
|
+
const env = gameEnv(ctx);
|
|
428
|
+
if (!env) return true;
|
|
429
|
+
const { state } = env;
|
|
430
|
+
let target = state.actor.grid;
|
|
431
|
+
let message = !((state.actor.player.timed[TMD.BLIND] ?? 0) > 0);
|
|
432
|
+
let decoyUnseen = false;
|
|
433
|
+
|
|
434
|
+
const mon =
|
|
435
|
+
ctx.origin.what === "monster"
|
|
436
|
+
? (state.monsters[ctx.origin.monster] ?? null)
|
|
437
|
+
: null;
|
|
438
|
+
|
|
439
|
+
/* Check for monster targeting another monster. */
|
|
440
|
+
const tMon =
|
|
441
|
+
ctx.origin.what === "monster"
|
|
442
|
+
? monsterTargetMonster(state, ctx.origin.monster)
|
|
443
|
+
: null;
|
|
444
|
+
if (tMon) {
|
|
445
|
+
target = tMon.grid;
|
|
446
|
+
if (message) {
|
|
447
|
+
say(ctx, `Darkness surrounds the ${tMon.race.name}.`);
|
|
448
|
+
message = false;
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
/* Check for a decoy. */
|
|
453
|
+
if (mon && monsterIsDecoyed(state, mon)) {
|
|
454
|
+
const decoy = caveFindDecoy(state);
|
|
455
|
+
if (decoy) target = decoy;
|
|
456
|
+
if (
|
|
457
|
+
!decoy ||
|
|
458
|
+
!los(state.chunk, state.actor.grid, decoy) ||
|
|
459
|
+
(state.actor.player.timed[TMD.BLIND] ?? 0) > 0
|
|
460
|
+
) {
|
|
461
|
+
decoyUnseen = true;
|
|
462
|
+
}
|
|
463
|
+
if (message && !decoyUnseen) {
|
|
464
|
+
say(ctx, "Darkness surrounds the decoy.");
|
|
465
|
+
message = false;
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
if (message) {
|
|
470
|
+
say(ctx, "Darkness surrounds you.");
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
/* Darken the room */
|
|
474
|
+
lightRoom(state, target, false);
|
|
475
|
+
|
|
476
|
+
/* Hack - blind the player directly if player-cast */
|
|
477
|
+
if (
|
|
478
|
+
ctx.origin.what === "player" &&
|
|
479
|
+
env.cast.playerActor.resistLevel(ELEM.DARK) <= 0
|
|
480
|
+
) {
|
|
481
|
+
const amount = 3 + state.rng.randint1(5);
|
|
482
|
+
ctx.env.player?.timed?.incTimed(TMD.BLIND, amount, true, !ctx.aware, true);
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
/* Assume seen (unless the decoy was out of sight). */
|
|
486
|
+
ctx.ident = !decoyUnseen;
|
|
487
|
+
return true;
|
|
488
|
+
};
|
|
489
|
+
|
|
490
|
+
/**
|
|
491
|
+
* EF_DESTRUCTION: the *Destruction* circle - monsters within the radius are
|
|
492
|
+
* deleted (not killed), non-permanent terrain is rebuilt (square_destroy)
|
|
493
|
+
* and a light or dark subtype blinds an unresisting player.
|
|
494
|
+
*/
|
|
495
|
+
const handleDESTRUCTION: EffectHandler = (ctx) => {
|
|
496
|
+
const env = gameEnv(ctx);
|
|
497
|
+
if (!env) return true;
|
|
498
|
+
const { state } = env;
|
|
499
|
+
const c = state.chunk;
|
|
500
|
+
const r = ctx.radius;
|
|
501
|
+
const elem = ctx.subtype;
|
|
502
|
+
const pgrid = state.actor.grid;
|
|
503
|
+
|
|
504
|
+
ctx.ident = true;
|
|
505
|
+
|
|
506
|
+
/* No effect in town or arena. */
|
|
507
|
+
if (c.depth === 0 || state.arenaLevel) {
|
|
508
|
+
say(ctx, "The ground shakes for a moment.");
|
|
509
|
+
return true;
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
/* Big area of affect */
|
|
513
|
+
for (let y = pgrid.y - r; y <= pgrid.y + r; y++) {
|
|
514
|
+
for (let x = pgrid.x - r; x <= pgrid.x + r; x++) {
|
|
515
|
+
const grid = loc(x, y);
|
|
516
|
+
if (!c.inBoundsFully(grid)) continue;
|
|
517
|
+
|
|
518
|
+
/* Stay in the circle of death */
|
|
519
|
+
if (distance(pgrid, grid) > r) continue;
|
|
520
|
+
|
|
521
|
+
/* Lose room and vault */
|
|
522
|
+
c.sqinfoOff(grid, SQUARE.ROOM);
|
|
523
|
+
c.sqinfoOff(grid, SQUARE.VAULT);
|
|
524
|
+
|
|
525
|
+
/* Forget completely (effect-handler-attack.c:1201-1207). */
|
|
526
|
+
if (!featIsBright(c.features, c.feat(grid))) {
|
|
527
|
+
c.sqinfoOff(grid, SQUARE.GLOW);
|
|
528
|
+
}
|
|
529
|
+
c.sqinfoOff(grid, SQUARE.SEEN);
|
|
530
|
+
squareForget(state, grid);
|
|
531
|
+
|
|
532
|
+
/* Deal with player later */
|
|
533
|
+
if (locEq(grid, pgrid)) continue;
|
|
534
|
+
|
|
535
|
+
/* Delete the monster (if any) */
|
|
536
|
+
const midx = c.mon(grid);
|
|
537
|
+
if (midx > 0) deleteMonster(state, midx);
|
|
538
|
+
|
|
539
|
+
/* Don't remove stairs */
|
|
540
|
+
if (c.isStairs(grid)) continue;
|
|
541
|
+
|
|
542
|
+
/* Destroy any grid that isn't a permanent wall */
|
|
543
|
+
if (!c.isPerm(grid)) {
|
|
544
|
+
/* Deal with artifacts before removing the pile
|
|
545
|
+
* (effect-handler-attack.c:1220-1243). */
|
|
546
|
+
const loseArts = state.options?.get("birth_lose_arts") ?? false;
|
|
547
|
+
/* square_excise_pile (cave-square.c:1031): drop the whole pile. The
|
|
548
|
+
* port's pile is a Map entry, so excising every member removes it -
|
|
549
|
+
* there is no square_set_obj(c, grid, NULL) head pointer to clear. */
|
|
550
|
+
for (const obj of [...floorPile(state, grid)]) {
|
|
551
|
+
if (obj.artifact) {
|
|
552
|
+
const lostForever = loseArts || liveObjectIsKnownArtifact(obj);
|
|
553
|
+
if (lostForever) state.onArtifactLost?.(obj.artifact);
|
|
554
|
+
state.artifacts?.markCreated(obj.artifact.aidx, lostForever);
|
|
555
|
+
}
|
|
556
|
+
floorExcise(state, grid, obj);
|
|
557
|
+
}
|
|
558
|
+
/* square_destroy */
|
|
559
|
+
const roll = state.rng.randint0(200);
|
|
560
|
+
let feat: number = FEAT.FLOOR;
|
|
561
|
+
if (roll < 20) feat = FEAT.GRANITE;
|
|
562
|
+
else if (roll < 70) feat = FEAT.QUARTZ;
|
|
563
|
+
else if (roll < 100) feat = FEAT.MAGMA;
|
|
564
|
+
c.setFeat(grid, feat);
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
/* Player is affected */
|
|
570
|
+
if (elem === ELEM.LIGHT || elem === ELEM.DARK) {
|
|
571
|
+
say(
|
|
572
|
+
ctx,
|
|
573
|
+
elem === ELEM.LIGHT
|
|
574
|
+
? "There is a searing blast of light!"
|
|
575
|
+
: "Darkness seems to crush you!",
|
|
576
|
+
);
|
|
577
|
+
equipLearnElement(state.actor.player, state.runeEnv, elem);
|
|
578
|
+
if (env.cast.playerActor.resistLevel(elem) <= 0) {
|
|
579
|
+
const amount = 10 + state.rng.randint1(10);
|
|
580
|
+
ctx.env.player?.timed?.incTimed(TMD.BLIND, amount, true, true, true);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
/* Fully update the visuals */
|
|
585
|
+
state.updateFov?.(state);
|
|
586
|
+
return true;
|
|
587
|
+
};
|
|
588
|
+
|
|
589
|
+
/**
|
|
590
|
+
* EF_EARTHQUAKE: the radius-r quake centred on the instigator. Walls and
|
|
591
|
+
* floors are shuffled (square_earthquake), the player jumps to a safe grid
|
|
592
|
+
* or is crushed, and monsters that cannot coexist with rock take damage,
|
|
593
|
+
* escape, or are buried (deleted).
|
|
594
|
+
*/
|
|
595
|
+
const handleEARTHQUAKE: EffectHandler = (ctx) => {
|
|
596
|
+
const env = gameEnv(ctx);
|
|
597
|
+
if (!env) return true;
|
|
598
|
+
const { state } = env;
|
|
599
|
+
const c = state.chunk;
|
|
600
|
+
let r = ctx.radius;
|
|
601
|
+
const targeted = ctx.subtype !== 0;
|
|
602
|
+
const pgrid = state.actor.grid;
|
|
603
|
+
let centre = originGrid(env, ctx.origin) ?? pgrid;
|
|
604
|
+
|
|
605
|
+
ctx.ident = true;
|
|
606
|
+
|
|
607
|
+
/* Sometimes ask for a target (get_aim_dir / target_get: the aimed seam). */
|
|
608
|
+
if (targeted && env.aimed) centre = env.aimed;
|
|
609
|
+
|
|
610
|
+
if (c.depth > 0 && (!state.arenaLevel || ctx.origin.what === "monster")) {
|
|
611
|
+
say(ctx, "The ground shakes! The ceiling caves in!");
|
|
612
|
+
} else {
|
|
613
|
+
/* No effect in town or arena. */
|
|
614
|
+
say(ctx, "The ground shakes for a moment.");
|
|
615
|
+
return true;
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
/* Paranoia -- Enforce maximum range */
|
|
619
|
+
if (r > 15) r = 15;
|
|
620
|
+
|
|
621
|
+
/* A map of the maximal blast area, indexed [16 + dy][16 + dx]. */
|
|
622
|
+
const map: boolean[][] = Array.from(
|
|
623
|
+
{ length: 32 },
|
|
624
|
+
() => new Array<boolean>(32).fill(false),
|
|
625
|
+
);
|
|
626
|
+
const mapAt = (g: Loc): boolean =>
|
|
627
|
+
map[16 + g.y - centre.y]?.[16 + g.x - centre.x] ?? false;
|
|
628
|
+
const mapSet = (g: Loc, v: boolean): void => {
|
|
629
|
+
const row = map[16 + g.y - centre.y];
|
|
630
|
+
if (row) row[16 + g.x - centre.x] = v;
|
|
631
|
+
};
|
|
632
|
+
|
|
633
|
+
/* Check around the epicenter */
|
|
634
|
+
let hurt = false;
|
|
635
|
+
for (let dy = -r; dy <= r; dy++) {
|
|
636
|
+
for (let dx = -r; dx <= r; dx++) {
|
|
637
|
+
const grid = locSum(centre, loc(dx, dy));
|
|
638
|
+
if (!c.inBoundsFully(grid)) continue;
|
|
639
|
+
if (distance(centre, grid) > r) continue;
|
|
640
|
+
|
|
641
|
+
/* Lose room and vault; forget completely (memory rides #25). */
|
|
642
|
+
c.sqinfoOff(grid, SQUARE.ROOM);
|
|
643
|
+
c.sqinfoOff(grid, SQUARE.VAULT);
|
|
644
|
+
if (!featIsBright(c.features, c.feat(grid))) {
|
|
645
|
+
c.sqinfoOff(grid, SQUARE.GLOW);
|
|
646
|
+
}
|
|
647
|
+
c.sqinfoOff(grid, SQUARE.SEEN);
|
|
648
|
+
|
|
649
|
+
/* Skip the epicenter */
|
|
650
|
+
if (dx === 0 && dy === 0) continue;
|
|
651
|
+
|
|
652
|
+
/* Skip most grids */
|
|
653
|
+
if (state.rng.randint0(100) < 85) continue;
|
|
654
|
+
|
|
655
|
+
/* Damage this grid */
|
|
656
|
+
mapSet(grid, true);
|
|
657
|
+
|
|
658
|
+
/* Take note of player damage */
|
|
659
|
+
if (locEq(grid, pgrid)) hurt = true;
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
/* First, determine the effects on the player (if necessary) */
|
|
664
|
+
let damage = 0;
|
|
665
|
+
if (hurt) {
|
|
666
|
+
/* Check around the player */
|
|
667
|
+
let safeGrids = 0;
|
|
668
|
+
let safeGrid = loc(0, 0);
|
|
669
|
+
for (let i = 0; i < 8; i++) {
|
|
670
|
+
const grid = locSum(pgrid, DDGRID_DDD[i]!);
|
|
671
|
+
/* square_isopen: skip non-empty grids (pushing into traps is fine). */
|
|
672
|
+
if (!c.isFloor(grid) || c.mon(grid) !== 0) continue;
|
|
673
|
+
/* Important -- Skip grids marked for damage */
|
|
674
|
+
if (mapAt(grid)) continue;
|
|
675
|
+
/* Count "safe" grids, apply the randomizer */
|
|
676
|
+
if (++safeGrids > 1 && state.rng.randint0(safeGrids) !== 0) continue;
|
|
677
|
+
safeGrid = grid;
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
/* Random message */
|
|
681
|
+
switch (state.rng.randint1(3)) {
|
|
682
|
+
case 1:
|
|
683
|
+
say(ctx, "The cave ceiling collapses on you!");
|
|
684
|
+
break;
|
|
685
|
+
case 2:
|
|
686
|
+
say(ctx, "The cave floor twists in an unnatural way!");
|
|
687
|
+
break;
|
|
688
|
+
default:
|
|
689
|
+
say(ctx, "The cave quakes!");
|
|
690
|
+
say(ctx, "You are pummeled with debris!");
|
|
691
|
+
break;
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
const player = ctx.env.player;
|
|
695
|
+
if (!safeGrids) {
|
|
696
|
+
/* Hurt the player a lot */
|
|
697
|
+
damage = player?.applyDamageReduction
|
|
698
|
+
? player.applyDamageReduction(300)
|
|
699
|
+
: 300;
|
|
700
|
+
say(ctx, "You are severely crushed!");
|
|
701
|
+
} else {
|
|
702
|
+
/* Destroy the grid, and push the player to (relative) safety */
|
|
703
|
+
let hurtMsg = "";
|
|
704
|
+
switch (state.rng.randint1(3)) {
|
|
705
|
+
case 1:
|
|
706
|
+
hurtMsg = "You nimbly dodge the blast!";
|
|
707
|
+
damage = 0;
|
|
708
|
+
break;
|
|
709
|
+
case 2: {
|
|
710
|
+
hurtMsg = "You are bashed by rubble!";
|
|
711
|
+
damage = state.rng.damroll(10, 4);
|
|
712
|
+
const stun = state.rng.randint1(50);
|
|
713
|
+
player?.timed?.incTimed(TMD.STUN, stun, true, true, true);
|
|
714
|
+
break;
|
|
715
|
+
}
|
|
716
|
+
default: {
|
|
717
|
+
hurtMsg = "You are crushed between the floor and ceiling!";
|
|
718
|
+
damage = state.rng.damroll(10, 4);
|
|
719
|
+
const stun = state.rng.randint1(50);
|
|
720
|
+
player?.timed?.incTimed(TMD.STUN, stun, true, true, true);
|
|
721
|
+
break;
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
if (damage > 0 && player?.applyDamageReduction) {
|
|
726
|
+
damage = player.applyDamageReduction(damage);
|
|
727
|
+
}
|
|
728
|
+
say(ctx, hurtMsg);
|
|
729
|
+
|
|
730
|
+
/* Move player (monster_swap into an open grid + post-move). */
|
|
731
|
+
movePlayer(state, safeGrid);
|
|
732
|
+
env.teleport?.onPlayerPostMove?.(true);
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
/* Examine the quaked region: process monsters */
|
|
737
|
+
for (let dy = -r; dy <= r; dy++) {
|
|
738
|
+
for (let dx = -r; dx <= r; dx++) {
|
|
739
|
+
const grid = locSum(centre, loc(dx, dy));
|
|
740
|
+
|
|
741
|
+
/* Skip unaffected grids */
|
|
742
|
+
if (!mapAt(grid)) continue;
|
|
743
|
+
|
|
744
|
+
const mon = squareMonster(state, grid);
|
|
745
|
+
if (!mon) continue;
|
|
746
|
+
|
|
747
|
+
/* Most monsters cannot co-exist with rock */
|
|
748
|
+
if (
|
|
749
|
+
mon.race.flags.has(RF.KILL_WALL) ||
|
|
750
|
+
mon.race.flags.has(RF.PASS_WALL)
|
|
751
|
+
) {
|
|
752
|
+
continue;
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
/* Assume not safe */
|
|
756
|
+
let safeGrids = 0;
|
|
757
|
+
let safeGrid = loc(0, 0);
|
|
758
|
+
|
|
759
|
+
/* Monster can move to escape the wall */
|
|
760
|
+
if (!mon.race.flags.has(RF.NEVER_MOVE)) {
|
|
761
|
+
/* Look for safety */
|
|
762
|
+
for (let i = 0; i < 8; i++) {
|
|
763
|
+
const safe = locSum(grid, DDGRID_DDD[i]!);
|
|
764
|
+
/* Skip non-empty grids */
|
|
765
|
+
if (!squareIsEmpty(state, safe)) continue;
|
|
766
|
+
/* No safety on glyph of warding */
|
|
767
|
+
if (squareIsWarded(state, safe)) continue;
|
|
768
|
+
/* Important -- Skip quake grids */
|
|
769
|
+
if (mapAt(safe)) continue;
|
|
770
|
+
/* Count safe grids, apply the randomizer */
|
|
771
|
+
if (++safeGrids > 1 && state.rng.randint0(safeGrids) !== 0) {
|
|
772
|
+
continue;
|
|
773
|
+
}
|
|
774
|
+
safeGrid = safe;
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
/* Take damage from the quake */
|
|
779
|
+
const mDam = safeGrids ? state.rng.damroll(4, 8) : mon.hp + 1;
|
|
780
|
+
|
|
781
|
+
/* Monster is certainly awake, not thinking about player */
|
|
782
|
+
monsterWake(state.rng, mon, false, 0);
|
|
783
|
+
|
|
784
|
+
/* Apply damage directly */
|
|
785
|
+
mon.hp -= mDam;
|
|
786
|
+
|
|
787
|
+
if (mon.hp < 0) {
|
|
788
|
+
/* MON_MSG_QUAKE_DEATH; the race name stands in for MDESC (#25). */
|
|
789
|
+
if (monsterIsVisible(mon)) {
|
|
790
|
+
say(ctx, `${mon.race.name} is embedded in rock!`);
|
|
791
|
+
}
|
|
792
|
+
/* Delete (not kill) "dead" monsters. */
|
|
793
|
+
deleteMonster(state, mon.midx);
|
|
794
|
+
} else {
|
|
795
|
+
if (monsterIsVisible(mon)) {
|
|
796
|
+
say(ctx, `${mon.race.name} wails out in pain!`);
|
|
797
|
+
}
|
|
798
|
+
/* Escape from the rock */
|
|
799
|
+
if (safeGrids) monsterSwap(state, grid, safeGrid);
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
/* Important -- no wall on player */
|
|
805
|
+
if (
|
|
806
|
+
Math.abs(pgrid.x - centre.x) <= 15 &&
|
|
807
|
+
Math.abs(pgrid.y - centre.y) <= 15
|
|
808
|
+
) {
|
|
809
|
+
mapSet(pgrid, false);
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
/* Examine the quaked region and damage marked grids if possible */
|
|
813
|
+
for (let dy = -r; dy <= r; dy++) {
|
|
814
|
+
for (let dx = -r; dx <= r; dx++) {
|
|
815
|
+
const grid = locSum(centre, loc(dx, dy));
|
|
816
|
+
if (!c.inBoundsFully(grid)) continue;
|
|
817
|
+
|
|
818
|
+
/* Unaffected grids only get their light redrawn (#25). */
|
|
819
|
+
if (!mapAt(grid)) continue;
|
|
820
|
+
|
|
821
|
+
/* Destroy location and all objects (if valid) */
|
|
822
|
+
if (!squareChangeable(state, grid)) continue;
|
|
823
|
+
for (const obj of [...floorPile(state, grid)]) {
|
|
824
|
+
floorExcise(state, grid, obj);
|
|
825
|
+
}
|
|
826
|
+
/* square_earthquake */
|
|
827
|
+
const t = state.rng.randint0(100);
|
|
828
|
+
if (!c.isPassable(grid)) {
|
|
829
|
+
c.setFeat(grid, FEAT.FLOOR);
|
|
830
|
+
continue;
|
|
831
|
+
}
|
|
832
|
+
c.setFeat(grid, t < 20 ? FEAT.GRANITE : t < 70 ? FEAT.QUARTZ : FEAT.MAGMA);
|
|
833
|
+
}
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
/* Apply damage to the player last, so messages are ordered properly. */
|
|
837
|
+
if (damage > 0) ctx.env.player?.takeHit?.(damage, "an earthquake");
|
|
838
|
+
|
|
839
|
+
/* Fully update the visuals */
|
|
840
|
+
state.updateFov?.(state);
|
|
841
|
+
return true;
|
|
842
|
+
};
|
|
843
|
+
|
|
844
|
+
/** The terrain handlers, keyed by upstream EF code. */
|
|
845
|
+
const TERRAIN_HANDLERS: ReadonlyMap<number, EffectHandler> = new Map<
|
|
846
|
+
number,
|
|
847
|
+
EffectHandler
|
|
848
|
+
>([
|
|
849
|
+
[EF.RUBBLE, handleRUBBLE],
|
|
850
|
+
[EF.GRANITE, handleGRANITE],
|
|
851
|
+
/* effect_handler_CREATE_STAIRS (effect-handler-general.c:1975) */
|
|
852
|
+
[EF.CREATE_STAIRS, handleCREATE_STAIRS],
|
|
853
|
+
/* effect_handler_LIGHT_LEVEL (effect-handler-general.c:3003) */
|
|
854
|
+
[EF.LIGHT_LEVEL, handleLIGHT_LEVEL],
|
|
855
|
+
/* effect_handler_DARKEN_LEVEL (effect-handler-general.c:3013) */
|
|
856
|
+
[EF.DARKEN_LEVEL, handleDARKEN_LEVEL],
|
|
857
|
+
/* effect_handler_LIGHT_AREA (effect-handler-general.c:3026) */
|
|
858
|
+
[EF.LIGHT_AREA, handleLIGHT_AREA],
|
|
859
|
+
/* effect_handler_DARKEN_AREA (effect-handler-general.c:3044) */
|
|
860
|
+
[EF.DARKEN_AREA, handleDARKEN_AREA],
|
|
861
|
+
/* effect_handler_DESTRUCTION (effect-handler-attack.c:1169) */
|
|
862
|
+
[EF.DESTRUCTION, handleDESTRUCTION],
|
|
863
|
+
[EF.EARTHQUAKE, handleEARTHQUAKE],
|
|
864
|
+
]);
|
|
865
|
+
|
|
866
|
+
/**
|
|
867
|
+
* Register the terrain-shaping handlers, overriding the stubs
|
|
868
|
+
* registerCoreHandlers installed. Call after registerCoreHandlers. Each
|
|
869
|
+
* handler reads its game environment from context.env.game (attach it with
|
|
870
|
+
* attachGameEnv) and no-ops when it is absent.
|
|
871
|
+
*/
|
|
872
|
+
export function registerTerrainHandlers(registry: EffectRegistry): void {
|
|
873
|
+
for (const [code, handler] of TERRAIN_HANDLERS) {
|
|
874
|
+
registry.register(code, { handler, status: "implemented" });
|
|
875
|
+
}
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
/** The terrain EF codes this module registers. */
|
|
879
|
+
export const TERRAIN_HANDLER_CODES: readonly number[] = [
|
|
880
|
+
...TERRAIN_HANDLERS.keys(),
|
|
881
|
+
];
|