@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,407 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The project_m driver, ported from reference/src/project-mon.c (Angband 4.2.6):
|
|
3
|
+
* project_m (L1328) and its appliers project_m_player_attack (L1102),
|
|
4
|
+
* project_m_monster_attack (L1034) and project_m_apply_side_effects (L1177).
|
|
5
|
+
*
|
|
6
|
+
* This is the game-layer half of the monster projection: it operates on the
|
|
7
|
+
* live GameState (monster-by-grid lookup, damage, removal), wiring together the
|
|
8
|
+
* pure effect-computation core (mon/project-mon.ts runMonsterHandler), the
|
|
9
|
+
* shared damage primitive (mon/take-hit.ts monTakeHit), and the projection
|
|
10
|
+
* behaviour data (world/projection.ts obvious / wake). It implements the
|
|
11
|
+
* onMonster seam of project() (world/project.ts).
|
|
12
|
+
*
|
|
13
|
+
* mon/ must not depend on game/, so the driver lives here (it mutates
|
|
14
|
+
* GameState). The genuinely downstream consequences are injected as hooks, so
|
|
15
|
+
* this ships and is tested before their subsystems land:
|
|
16
|
+
* - onKill / onMonsterDeath (player_kill_monster / monster_death: experience,
|
|
17
|
+
* drops, quests - blocked on floor objects, lore, experience, quests). The
|
|
18
|
+
* minimal removal (delete_monster_idx) is done here; the hook does the rest.
|
|
19
|
+
* - polymorph (poly_race + place_new_monster: needs monster generation).
|
|
20
|
+
* - teleport (effect_simple EF_TELEPORT: an effect handler, #18).
|
|
21
|
+
* - thrustAway (thrust_away: the cave-mutating knockback).
|
|
22
|
+
* - becomeAware / revertShape / message / messagePain / lore learning: the
|
|
23
|
+
* knowledge, shapechange and message-list systems.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import { MON_MSG, MON_TMD, PROJ } from "../generated/index.js";
|
|
27
|
+
import type { Loc } from "../loc.js";
|
|
28
|
+
import type { Monster } from "../mon/monster.js";
|
|
29
|
+
import {
|
|
30
|
+
monsterIsCamouflaged,
|
|
31
|
+
monsterIsDestroyed,
|
|
32
|
+
monsterIsInView,
|
|
33
|
+
monsterIsUnique,
|
|
34
|
+
monsterIsVisible,
|
|
35
|
+
} from "../mon/predicate.js";
|
|
36
|
+
import { newMonProjectContext, runMonsterHandler } from "../mon/project-mon.js";
|
|
37
|
+
import type { MonProjectContext } from "../mon/project-mon.js";
|
|
38
|
+
import { monsterWake, monTakeHit } from "../mon/take-hit.js";
|
|
39
|
+
import { MON_TMD_FLG_NOTIFY, monIncTimed } from "../mon/timed.js";
|
|
40
|
+
import type { MonTimedMessageSink } from "../mon/timed.js";
|
|
41
|
+
import { PROJECT } from "../world/project.js";
|
|
42
|
+
import type { MonsterHitResult } from "../world/project.js";
|
|
43
|
+
import type { ProjectionInfo } from "../world/projection.js";
|
|
44
|
+
import { arenaInterceptDeath, deleteMonster } from "./context.js";
|
|
45
|
+
import type { GameState } from "./context.js";
|
|
46
|
+
|
|
47
|
+
/** The player-facing / downstream consequences the driver defers to the caller. */
|
|
48
|
+
export interface ProjectMonsterHooks {
|
|
49
|
+
/**
|
|
50
|
+
* add_monster_message(mon, msg_code, delay): queue a message about the monster
|
|
51
|
+
* (by MON_MSG index). `delay` is upstream's third argument (what_delay,
|
|
52
|
+
* mon-msg.c:238), not a comma flag. When `damage` is given the caller must use
|
|
53
|
+
* add_monster_message_show_damage (mon-msg.c:288) and append " (N)".
|
|
54
|
+
*/
|
|
55
|
+
message?: (
|
|
56
|
+
mon: Monster,
|
|
57
|
+
msg: number,
|
|
58
|
+
delay?: boolean,
|
|
59
|
+
damage?: number,
|
|
60
|
+
) => void;
|
|
61
|
+
/**
|
|
62
|
+
* message_pain: a graded "it is hurt" message from the damage amount. With
|
|
63
|
+
* `showDamage` the caller must use message_pain_show_damage (mon-msg.c:132).
|
|
64
|
+
*/
|
|
65
|
+
messagePain?: (mon: Monster, dam: number, showDamage?: boolean) => void;
|
|
66
|
+
/**
|
|
67
|
+
* OPT(player, show_damage) (list-options.h): project_m_player_attack combines
|
|
68
|
+
* it with origin.what == SRC_PLAYER into its `display_dam`
|
|
69
|
+
* (project-mon.c:1111-1112), which selects the *_show_damage message calls.
|
|
70
|
+
*/
|
|
71
|
+
showDamage?: boolean;
|
|
72
|
+
/** Timed-effect messages emitted while applying side-effect timers. */
|
|
73
|
+
timedMessage?: MonTimedMessageSink;
|
|
74
|
+
/** player_kill_monster: experience, drops, quests (removal is done here). */
|
|
75
|
+
onKill?: (mon: Monster) => void;
|
|
76
|
+
/** monster_death for a monster-vs-monster kill (drops; removal done here). */
|
|
77
|
+
onMonsterDeath?: (mon: Monster) => void;
|
|
78
|
+
/** become_aware: reveal a camouflaged monster. */
|
|
79
|
+
becomeAware?: (mon: Monster) => void;
|
|
80
|
+
/** monster_revert_shape: a shapechanged monster reverts on death. */
|
|
81
|
+
revertShape?: (mon: Monster) => void;
|
|
82
|
+
/** rf_on(lore): learn a race flag when seen. */
|
|
83
|
+
learnRaceFlag?: (mon: Monster, flag: number) => void;
|
|
84
|
+
/** rsf_on(lore): learn a spell flag when seen. */
|
|
85
|
+
learnSpellFlag?: (mon: Monster, flag: number) => void;
|
|
86
|
+
/** multiply_monster (PROJ_MON_CLONE). */
|
|
87
|
+
multiplyMonster?: (mon: Monster) => boolean;
|
|
88
|
+
/**
|
|
89
|
+
* poly_race + place_new_monster: replace the monster with a polymorphed one.
|
|
90
|
+
* Returns the new monster, or null if the polymorph failed / is unmodelled.
|
|
91
|
+
*/
|
|
92
|
+
polymorph?: (mon: Monster, power: number, directPoly: boolean) => Monster | null;
|
|
93
|
+
/** effect_simple EF_TELEPORT: teleport the monster up to `distance` grids. */
|
|
94
|
+
teleport?: (mon: Monster, distance: number) => void;
|
|
95
|
+
/** thrust_away(centre, target, gridsAway): knock a monster back (PROJ_FORCE). */
|
|
96
|
+
thrustAway?: (centre: Loc, target: Loc, gridsAway: number) => void;
|
|
97
|
+
/** update_mon + square_light_spot + PR_MONSTER: refresh a surviving monster. */
|
|
98
|
+
onUpdate?: (mon: Monster) => void;
|
|
99
|
+
/** clear the player's TMD_COVERTRACKS once player damage lands. */
|
|
100
|
+
coverTracksBroken?: () => void;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** The projection source, resolved for the driver. */
|
|
104
|
+
export interface ProjectMonsterSource {
|
|
105
|
+
/** origin.what == SRC_PLAYER (routes to project_m_player_attack). */
|
|
106
|
+
isPlayer: boolean;
|
|
107
|
+
/** origin.which.monster for SRC_MONSTER (0 otherwise). */
|
|
108
|
+
monster: number;
|
|
109
|
+
/** origin_get_loc(origin): thrust-away centre. */
|
|
110
|
+
grid: Loc;
|
|
111
|
+
/** player_has(PF_CHARM): boosts effects vs animals. */
|
|
112
|
+
charm: boolean;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** Everything the per-grid driver needs, built once per project() call. */
|
|
116
|
+
export interface ProjectMonsterCtx {
|
|
117
|
+
state: GameState;
|
|
118
|
+
projections: readonly ProjectionInfo[];
|
|
119
|
+
origin: ProjectMonsterSource;
|
|
120
|
+
hooks: ProjectMonsterHooks;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const NO_HIT: MonsterHitResult = { didHit: false, wasObvious: false };
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* project_m for one grid: affect the monster (if any) in `grid` with projection
|
|
127
|
+
* `typ` for `dam` damage at distance `dist`. Returns project_m's out-parameters
|
|
128
|
+
* (did_hit / was_obvious, plus the monster's post-hit grid). Suitable as the
|
|
129
|
+
* onMonster hook of project().
|
|
130
|
+
*/
|
|
131
|
+
export function projectMonster(
|
|
132
|
+
pctx: ProjectMonsterCtx,
|
|
133
|
+
dist: number,
|
|
134
|
+
grid: Loc,
|
|
135
|
+
dam: number,
|
|
136
|
+
typ: number,
|
|
137
|
+
flg: number,
|
|
138
|
+
): MonsterHitResult {
|
|
139
|
+
const { state, hooks, origin } = pctx;
|
|
140
|
+
|
|
141
|
+
/* Walls protect monsters. */
|
|
142
|
+
if (!state.chunk.isPassable(grid)) return NO_HIT;
|
|
143
|
+
|
|
144
|
+
const mIdx = state.chunk.mon(grid);
|
|
145
|
+
/* No monster here. */
|
|
146
|
+
if (mIdx <= 0) return NO_HIT;
|
|
147
|
+
|
|
148
|
+
/* Never affect the projecting monster. */
|
|
149
|
+
if (origin.monster !== 0 && origin.monster === mIdx) return NO_HIT;
|
|
150
|
+
|
|
151
|
+
const mon = state.monsters[mIdx];
|
|
152
|
+
if (!mon) return NO_HIT;
|
|
153
|
+
|
|
154
|
+
/* See visible monsters (camouflaged ones only when in view). */
|
|
155
|
+
let seen = monsterIsCamouflaged(mon)
|
|
156
|
+
? monsterIsInView(mon)
|
|
157
|
+
: monsterIsVisible(mon);
|
|
158
|
+
|
|
159
|
+
/* Breathers may not blast members of the same race. */
|
|
160
|
+
if (origin.monster !== 0 && flg & PROJECT.SAFE) {
|
|
161
|
+
const caster = state.monsters[origin.monster];
|
|
162
|
+
if (!caster) return NO_HIT;
|
|
163
|
+
if (caster.race === mon.race) return NO_HIT;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const ctx = newMonProjectContext(state.rng, mon, typ, dam, {
|
|
167
|
+
originIsMonster: origin.monster !== 0,
|
|
168
|
+
r: dist,
|
|
169
|
+
grid,
|
|
170
|
+
charm: origin.charm,
|
|
171
|
+
seen,
|
|
172
|
+
obvious: (flg & PROJECT.AWARE) !== 0,
|
|
173
|
+
hooks: {
|
|
174
|
+
...(hooks.learnRaceFlag ? { learnRaceFlag: hooks.learnRaceFlag } : {}),
|
|
175
|
+
...(hooks.learnSpellFlag ? { learnSpellFlag: hooks.learnSpellFlag } : {}),
|
|
176
|
+
...(hooks.multiplyMonster
|
|
177
|
+
? { multiplyMonster: hooks.multiplyMonster }
|
|
178
|
+
: {}),
|
|
179
|
+
...(hooks.timedMessage ? { onMessage: hooks.timedMessage } : {}),
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
/* Some monsters get "destroyed" rather than slain. */
|
|
184
|
+
if (monsterIsDestroyed(mon)) ctx.dieMsg = MON_MSG.DESTROYED;
|
|
185
|
+
|
|
186
|
+
/* Reveal a camouflaged monster that stopped an effect. */
|
|
187
|
+
if (flg & PROJECT.STOP && monsterIsCamouflaged(mon) && monsterIsInView(mon)) {
|
|
188
|
+
hooks.becomeAware?.(mon);
|
|
189
|
+
if (monsterIsVisible(mon)) {
|
|
190
|
+
seen = true;
|
|
191
|
+
ctx.seen = true;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/* Force obviousness for certain projection types if seen. */
|
|
196
|
+
const info = pctx.projections[typ];
|
|
197
|
+
if (info && info.obvious && ctx.seen) ctx.obvious = true;
|
|
198
|
+
|
|
199
|
+
/* Run the type handler (accumulates damage / timers / poly / teleport). */
|
|
200
|
+
runMonsterHandler(ctx);
|
|
201
|
+
|
|
202
|
+
/* PROJ_FORCE thrust happens in the handler upstream, before wake / damage. */
|
|
203
|
+
if (ctx.thrustGridsAway > 0) {
|
|
204
|
+
hooks.thrustAway?.(origin.grid, grid, ctx.thrustGridsAway);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/* Wake the monster if the projection type forces it. */
|
|
208
|
+
if (info && info.wake) monsterWake(state.rng, mon, false, 100);
|
|
209
|
+
|
|
210
|
+
/* Absolutely no effect. */
|
|
211
|
+
if (ctx.skipped) return NO_HIT;
|
|
212
|
+
|
|
213
|
+
/* Apply damage, based on who did the damage. */
|
|
214
|
+
const monDied = origin.monster !== 0
|
|
215
|
+
? monsterAttack(pctx, ctx, mIdx, seen)
|
|
216
|
+
: playerAttack(pctx, ctx, mIdx, seen);
|
|
217
|
+
|
|
218
|
+
if (!monDied) applySideEffects(pctx, ctx, typ, flg, seen);
|
|
219
|
+
|
|
220
|
+
/* The side-effect appliers can change ctx.mon (polymorph) or remove it. */
|
|
221
|
+
const finalMon = ctx.mon;
|
|
222
|
+
if (finalMon && !monDied) hooks.onUpdate?.(finalMon);
|
|
223
|
+
|
|
224
|
+
return {
|
|
225
|
+
didHit: true,
|
|
226
|
+
wasObvious: ctx.obvious,
|
|
227
|
+
grid: finalMon ? finalMon.grid : grid,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* project_m_player_attack: damage from the player (or a trap), routed through
|
|
233
|
+
* mon_take_hit so death, fear and waking match every other player attack.
|
|
234
|
+
*/
|
|
235
|
+
function playerAttack(
|
|
236
|
+
pctx: ProjectMonsterCtx,
|
|
237
|
+
ctx: MonProjectContext,
|
|
238
|
+
mIdx: number,
|
|
239
|
+
seen: boolean,
|
|
240
|
+
): boolean {
|
|
241
|
+
const { state, hooks } = pctx;
|
|
242
|
+
const mon = ctx.mon;
|
|
243
|
+
const dam = ctx.dam;
|
|
244
|
+
|
|
245
|
+
/* display_dam (project-mon.c:1111-1112): only the PLAYER's own damage gets
|
|
246
|
+
* the " (N)" suffix, and only with OPT(player, show_damage) on - a trap also
|
|
247
|
+
* routes here (origin.what == SRC_TRAP) and must stay bare. */
|
|
248
|
+
const displayDam = pctx.origin.isPlayer && (hooks.showDamage ?? false);
|
|
249
|
+
|
|
250
|
+
/* Lethal blow: show the death message before mon_take_hit (which is passed
|
|
251
|
+
* an empty note, so it prints none, keeping message order correct). */
|
|
252
|
+
if (dam > mon.hp) {
|
|
253
|
+
hooks.revertShape?.(mon);
|
|
254
|
+
const dieMsg = seen ? ctx.dieMsg : MON_MSG.MORIA_DEATH;
|
|
255
|
+
/* add_monster_message_show_damage vs add_monster_message
|
|
256
|
+
* (project-mon.c:1127-1132). */
|
|
257
|
+
if (displayDam) hooks.message?.(mon, dieMsg, false, dam);
|
|
258
|
+
else hooks.message?.(mon, dieMsg);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
let died = false;
|
|
262
|
+
let fear = false;
|
|
263
|
+
if (dam) {
|
|
264
|
+
const res = monTakeHit(state.rng, mon, dam, "", {
|
|
265
|
+
onKill: (m) => {
|
|
266
|
+
hooks.onKill?.(m);
|
|
267
|
+
deleteMonster(state, mIdx);
|
|
268
|
+
},
|
|
269
|
+
...(hooks.becomeAware ? { becomeAware: hooks.becomeAware } : {}),
|
|
270
|
+
...(hooks.coverTracksBroken
|
|
271
|
+
? { coverTracksBroken: hooks.coverTracksBroken }
|
|
272
|
+
: {}),
|
|
273
|
+
/* Single combat: the kill waits for the arena exit. */
|
|
274
|
+
...(state.arenaLevel
|
|
275
|
+
? { onArenaDeath: (m: Monster) => void arenaInterceptDeath(state, m) }
|
|
276
|
+
: {}),
|
|
277
|
+
});
|
|
278
|
+
died = res.died;
|
|
279
|
+
fear = res.fear;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
if (!died) {
|
|
283
|
+
/* project-mon.c:1145-1159: the display_dam branch swaps both the specific
|
|
284
|
+
* hurt message and the fallback pain message for their damage-showing
|
|
285
|
+
* twins. The FLEE_IN_TERROR line never shows damage. */
|
|
286
|
+
if (seen && ctx.hurtMsg !== MON_MSG.NONE) {
|
|
287
|
+
if (displayDam) hooks.message?.(mon, ctx.hurtMsg, false, dam);
|
|
288
|
+
else hooks.message?.(mon, ctx.hurtMsg);
|
|
289
|
+
} else if (dam > 0) {
|
|
290
|
+
hooks.messagePain?.(mon, dam, displayDam);
|
|
291
|
+
}
|
|
292
|
+
if (seen && fear) hooks.message?.(mon, MON_MSG.FLEE_IN_TERROR, true);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
return died;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* project_m_monster_attack: damage from another monster. Like mon_take_hit but
|
|
300
|
+
* without the player-oriented handling; uniques are reduced to but not killed.
|
|
301
|
+
*/
|
|
302
|
+
function monsterAttack(
|
|
303
|
+
pctx: ProjectMonsterCtx,
|
|
304
|
+
ctx: MonProjectContext,
|
|
305
|
+
mIdx: number,
|
|
306
|
+
seen: boolean,
|
|
307
|
+
): boolean {
|
|
308
|
+
const { state, hooks } = pctx;
|
|
309
|
+
const mon = ctx.mon;
|
|
310
|
+
let dam = ctx.dam;
|
|
311
|
+
|
|
312
|
+
/* "Unique" or arena monsters can only be killed by the player. */
|
|
313
|
+
if ((monsterIsUnique(mon) || state.arenaLevel) && dam > mon.hp) dam = mon.hp;
|
|
314
|
+
|
|
315
|
+
/* Wake the monster up, don't notice the player. */
|
|
316
|
+
monsterWake(state.rng, mon, false, 0);
|
|
317
|
+
|
|
318
|
+
mon.hp -= dam;
|
|
319
|
+
|
|
320
|
+
if (mon.hp < 0) {
|
|
321
|
+
hooks.revertShape?.(mon);
|
|
322
|
+
const dieMsg = seen ? ctx.dieMsg : MON_MSG.MORIA_DEATH;
|
|
323
|
+
hooks.message?.(mon, dieMsg);
|
|
324
|
+
hooks.onMonsterDeath?.(mon);
|
|
325
|
+
deleteMonster(state, mIdx);
|
|
326
|
+
return true;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
if (!monsterIsCamouflaged(mon)) {
|
|
330
|
+
if (ctx.hurtMsg !== MON_MSG.NONE && seen) {
|
|
331
|
+
hooks.message?.(mon, ctx.hurtMsg);
|
|
332
|
+
} else if (dam > 0) {
|
|
333
|
+
hooks.messagePain?.(mon, dam);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
return false;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* project_m_apply_side_effects: polymorph, teleport, or apply the accumulated
|
|
342
|
+
* timed effects. Polymorph and teleport are checked first since they may
|
|
343
|
+
* invalidate applying status effects to a changed monster.
|
|
344
|
+
*/
|
|
345
|
+
function applySideEffects(
|
|
346
|
+
pctx: ProjectMonsterCtx,
|
|
347
|
+
ctx: MonProjectContext,
|
|
348
|
+
typ: number,
|
|
349
|
+
_flg: number,
|
|
350
|
+
seen: boolean,
|
|
351
|
+
): void {
|
|
352
|
+
const { state, hooks } = pctx;
|
|
353
|
+
const mon = ctx.mon;
|
|
354
|
+
|
|
355
|
+
if (ctx.doPoly) {
|
|
356
|
+
/* Uniques cannot be polymorphed, nor can anything on an arena level
|
|
357
|
+
* (project-mon.c L1197: monster_is_unique(mon) || player->arena_level). PR3. */
|
|
358
|
+
if (monsterIsUnique(mon) || state.arenaLevel) {
|
|
359
|
+
if (seen) hooks.message?.(mon, MON_MSG.UNAFFECTED);
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
if (seen) ctx.obvious = true;
|
|
364
|
+
|
|
365
|
+
/* Saving throw: damage-based for direct poly, random for chaos. */
|
|
366
|
+
const savelvl =
|
|
367
|
+
typ === PROJ.MON_POLY
|
|
368
|
+
? state.rng.randint1(Math.max(1, ctx.doPoly - 10)) + 10
|
|
369
|
+
: state.rng.randint1(90);
|
|
370
|
+
if (mon.race.level > savelvl) {
|
|
371
|
+
if (seen) {
|
|
372
|
+
hooks.message?.(
|
|
373
|
+
mon,
|
|
374
|
+
typ === PROJ.MON_POLY ? MON_MSG.MAINTAIN_SHAPE : MON_MSG.UNAFFECTED,
|
|
375
|
+
);
|
|
376
|
+
}
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
const newMon =
|
|
381
|
+
hooks.polymorph?.(mon, ctx.doPoly, typ === PROJ.MON_POLY) ?? null;
|
|
382
|
+
if (newMon && newMon !== mon) {
|
|
383
|
+
if (seen) hooks.message?.(mon, MON_MSG.CHANGE);
|
|
384
|
+
ctx.mon = newMon;
|
|
385
|
+
} else if (seen) {
|
|
386
|
+
hooks.message?.(mon, MON_MSG.MAINTAIN_SHAPE);
|
|
387
|
+
}
|
|
388
|
+
} else if (ctx.teleportDistance > 0) {
|
|
389
|
+
hooks.teleport?.(mon, ctx.teleportDistance);
|
|
390
|
+
/* Wake the monster up, don't notice the player. */
|
|
391
|
+
monsterWake(state.rng, mon, false, 0);
|
|
392
|
+
} else {
|
|
393
|
+
for (let i = 0; i < MON_TMD.MAX; i++) {
|
|
394
|
+
if (ctx.monTimed[i]! > 0) {
|
|
395
|
+
monIncTimed(
|
|
396
|
+
state.rng,
|
|
397
|
+
mon,
|
|
398
|
+
i,
|
|
399
|
+
ctx.monTimed[i]!,
|
|
400
|
+
ctx.flag | MON_TMD_FLG_NOTIFY,
|
|
401
|
+
hooks.timedMessage,
|
|
402
|
+
);
|
|
403
|
+
if (seen) ctx.obvious = true;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Projection effects on objects, ported from reference/src/project-obj.c
|
|
3
|
+
* (Angband 4.2.6): the project_o driver over the floor pile at a grid, the
|
|
4
|
+
* per-projection object handlers (elemental destruction driven by the
|
|
5
|
+
* EL_INFO_HATES / EL_INFO_IGNORE bits), and inven_damage (the pack-side
|
|
6
|
+
* casualty roll elemental hits on the player make).
|
|
7
|
+
*
|
|
8
|
+
* KILL_TRAP's chest unlock (is_locked_chest / unlock_chest), the mimic reveal
|
|
9
|
+
* on object destruction (obj->mimicking_m_idx -> become_aware via
|
|
10
|
+
* state.becomeAware) and the protected_obj parameter (the object that created
|
|
11
|
+
* the projection, so it does not destroy itself) are ported here.
|
|
12
|
+
*
|
|
13
|
+
* Knowledge / ignore integration (gap 6.12, C project-obj.c L86-90, L146,
|
|
14
|
+
* L537, L546-569):
|
|
15
|
+
* - inven_damage's obj->known->to_h / to_d / to_a writes (L86-90, L103-104) are
|
|
16
|
+
* subsumed by the on-demand known shadow: objectKnownShadow reads the live
|
|
17
|
+
* obj->to_* gated by p->obj_k, so decrementing them here is reflected in every
|
|
18
|
+
* later describe without a separate twin write (there is no persistent twin to
|
|
19
|
+
* update, and no known twin to object_delete on destruction).
|
|
20
|
+
* - inven_damage now labels the casualty with gear_to_label (L143) and project_o
|
|
21
|
+
* gates its "unaffected" / destruction / "Click!" messages on
|
|
22
|
+
* ignore_item_ok (state.isIgnored, L363-364, L546-569). square_isseen still
|
|
23
|
+
* stands in for the obj->known visibility half, matching the rest of this
|
|
24
|
+
* driver (the persistent floor twin is game/known.ts' reduced glyph memory).
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
import type { Loc } from "../loc.js";
|
|
28
|
+
import { ELEM, PROJ } from "../generated/index.js";
|
|
29
|
+
import { EL_INFO_HATES, EL_INFO_IGNORE } from "../obj/types.js";
|
|
30
|
+
import type { GameObject } from "../obj/object.js";
|
|
31
|
+
import { tvalIsAmmo, tvalIsArmor, tvalIsRod, tvalIsWeapon } from "../obj/object.js";
|
|
32
|
+
import { isLockedChest, unlockChest } from "../obj/chest.js";
|
|
33
|
+
import { ODESC } from "../obj/desc.js";
|
|
34
|
+
import { squareIsSeen } from "../world/view.js";
|
|
35
|
+
import type { GameState } from "./context.js";
|
|
36
|
+
import { describeObject } from "./describe.js";
|
|
37
|
+
import { floorExcise, floorPile } from "./floor.js";
|
|
38
|
+
import { gearObjectForUse, gearToLabel } from "./gear.js";
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* gear_to_label (obj-gear.c:443) lives in game/gear.ts, beside the Gear it reads.
|
|
42
|
+
* Re-exported here because inven_damage's own callers import it from this module;
|
|
43
|
+
* equipment is exempt from inven_damage, so the two-argument form is all it needs.
|
|
44
|
+
*/
|
|
45
|
+
export { gearToLabel };
|
|
46
|
+
|
|
47
|
+
/** The world seams project_o/project_f need beyond the GameState. */
|
|
48
|
+
export interface ProjectWorldEnv {
|
|
49
|
+
msg?(text: string): void;
|
|
50
|
+
/**
|
|
51
|
+
* protected_obj (project-obj.c L537): the object that created the
|
|
52
|
+
* projection, which must not destroy itself. Absent when the projection has
|
|
53
|
+
* no object source (the common case; no live caller projects from an object
|
|
54
|
+
* yet).
|
|
55
|
+
*/
|
|
56
|
+
protectedObj?: GameObject;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** VERB_AGREEMENT over an object stack. */
|
|
60
|
+
function verbAgree(n: number, singular: string, plural: string): string {
|
|
61
|
+
return n > 1 ? plural : singular;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** One handler outcome (project_object_handler_context_t's out fields). */
|
|
65
|
+
interface ObjHandlerResult {
|
|
66
|
+
doKill: boolean;
|
|
67
|
+
ignore: boolean;
|
|
68
|
+
noteKill: string | null;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** project_object_elemental: destruction gated by the HATES/IGNORE bits. */
|
|
72
|
+
function elemental(
|
|
73
|
+
obj: GameObject,
|
|
74
|
+
out: ObjHandlerResult,
|
|
75
|
+
element: number,
|
|
76
|
+
singular: string,
|
|
77
|
+
plural: string,
|
|
78
|
+
): void {
|
|
79
|
+
const info = obj.elInfo[element];
|
|
80
|
+
if (info && info.flags & EL_INFO_HATES) {
|
|
81
|
+
out.doKill = true;
|
|
82
|
+
out.noteKill = verbAgree(obj.number, singular, plural);
|
|
83
|
+
out.ignore = (info.flags & EL_INFO_IGNORE) !== 0;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** The object handler for one projection type (null = no object effect). */
|
|
88
|
+
function runObjectHandler(typ: number, obj: GameObject): ObjHandlerResult {
|
|
89
|
+
const out: ObjHandlerResult = { doKill: false, ignore: false, noteKill: null };
|
|
90
|
+
switch (typ) {
|
|
91
|
+
case PROJ.ACID:
|
|
92
|
+
elemental(obj, out, ELEM.ACID, "melts", "melt");
|
|
93
|
+
break;
|
|
94
|
+
case PROJ.ELEC:
|
|
95
|
+
elemental(obj, out, ELEM.ELEC, "is destroyed", "are destroyed");
|
|
96
|
+
break;
|
|
97
|
+
case PROJ.FIRE:
|
|
98
|
+
elemental(obj, out, ELEM.FIRE, "burns up", "burn up");
|
|
99
|
+
break;
|
|
100
|
+
case PROJ.COLD:
|
|
101
|
+
elemental(obj, out, ELEM.COLD, "shatters", "shatter");
|
|
102
|
+
break;
|
|
103
|
+
case PROJ.SOUND:
|
|
104
|
+
elemental(obj, out, ELEM.SOUND, "shatters", "shatter");
|
|
105
|
+
break;
|
|
106
|
+
case PROJ.SHARD:
|
|
107
|
+
elemental(obj, out, ELEM.SHARD, "shatters", "shatter");
|
|
108
|
+
break;
|
|
109
|
+
case PROJ.ICE:
|
|
110
|
+
elemental(obj, out, ELEM.ICE, "shatters", "shatter");
|
|
111
|
+
break;
|
|
112
|
+
case PROJ.FORCE:
|
|
113
|
+
elemental(obj, out, ELEM.FORCE, "shatters", "shatter");
|
|
114
|
+
break;
|
|
115
|
+
case PROJ.PLASMA:
|
|
116
|
+
elemental(obj, out, ELEM.FIRE, "burns up", "burn up");
|
|
117
|
+
elemental(obj, out, ELEM.ELEC, "is destroyed", "are destroyed");
|
|
118
|
+
break;
|
|
119
|
+
case PROJ.METEOR:
|
|
120
|
+
elemental(obj, out, ELEM.FIRE, "burns up", "burn up");
|
|
121
|
+
elemental(obj, out, ELEM.COLD, "shatters", "shatter");
|
|
122
|
+
break;
|
|
123
|
+
case PROJ.MANA:
|
|
124
|
+
/* Mana -- destroys everything. */
|
|
125
|
+
out.doKill = true;
|
|
126
|
+
out.noteKill = verbAgree(obj.number, "is destroyed", "are destroyed");
|
|
127
|
+
break;
|
|
128
|
+
/* KILL_TRAP's chest unlock is handled in projectObject (it mutates the
|
|
129
|
+
* object and messages instead of destroying it). Every other projection
|
|
130
|
+
* has no object effect, exactly as the upstream stubs. */
|
|
131
|
+
default:
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
return out;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* project_o: affect every object in the pile at `grid` (PROJECT_ITEM).
|
|
139
|
+
* Returns whether anything the player can see happened.
|
|
140
|
+
*/
|
|
141
|
+
export function projectObject(
|
|
142
|
+
state: GameState,
|
|
143
|
+
_r: number,
|
|
144
|
+
grid: Loc,
|
|
145
|
+
_dam: number,
|
|
146
|
+
typ: number,
|
|
147
|
+
env: ProjectWorldEnv = {},
|
|
148
|
+
): boolean {
|
|
149
|
+
let obvious = false;
|
|
150
|
+
|
|
151
|
+
/* Scan a snapshot: destruction mutates the pile. */
|
|
152
|
+
for (const obj of [...floorPile(state, grid)]) {
|
|
153
|
+
/* KILL_TRAP unlocks a locked chest instead of destroying it. */
|
|
154
|
+
if (typ === PROJ.KILL_TRAP) {
|
|
155
|
+
if (isLockedChest(obj)) {
|
|
156
|
+
unlockChest(obj);
|
|
157
|
+
/* project_object_handler_KILL_TRAP L363-364: obj->known &&
|
|
158
|
+
* !ignore_item_ok(player, obj). The chest's known->pval reveal (L365)
|
|
159
|
+
* rides the on-demand shadow; squareIsSeen stands in for obj->known. */
|
|
160
|
+
if (
|
|
161
|
+
squareIsSeen(state.chunk, grid) &&
|
|
162
|
+
!(state.isIgnored?.(obj) ?? false)
|
|
163
|
+
) {
|
|
164
|
+
env.msg?.("Click!");
|
|
165
|
+
obvious = true;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
const { doKill: rawKill, ignore, noteKill } = runObjectHandler(typ, obj);
|
|
172
|
+
/* protected_obj never destroys itself. */
|
|
173
|
+
const doKill = rawKill && obj !== env.protectedObj;
|
|
174
|
+
if (!doKill) continue;
|
|
175
|
+
|
|
176
|
+
/* Upstream gates the observed effect on obj->known && !ignore_item_ok(player,
|
|
177
|
+
* obj) && square_isseen (L546-547); squareIsSeen stands in for obj->known. */
|
|
178
|
+
const notIgnored = !(state.isIgnored?.(obj) ?? false);
|
|
179
|
+
const observed = squareIsSeen(state.chunk, grid) && notIgnored;
|
|
180
|
+
if (observed) obvious = true;
|
|
181
|
+
|
|
182
|
+
if (obj.artifact || ignore) {
|
|
183
|
+
/* Artifacts and ignoring objects resist (L554-560). */
|
|
184
|
+
if (observed) {
|
|
185
|
+
env.msg?.(
|
|
186
|
+
`The ${describeObject(state, obj, ODESC.BASE)} ${verbAgree(obj.number, "is", "are")} unaffected!`,
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
} else if (obj.mimickingMIdx) {
|
|
190
|
+
/* Reveal a mimic instead of destroying its fake item (L561-565). */
|
|
191
|
+
if (obvious) {
|
|
192
|
+
const mon = state.monsters[obj.mimickingMIdx];
|
|
193
|
+
if (mon) state.becomeAware?.(mon);
|
|
194
|
+
}
|
|
195
|
+
} else {
|
|
196
|
+
/* Describe the destruction if it is observed (L566-571). */
|
|
197
|
+
if (observed && noteKill) {
|
|
198
|
+
env.msg?.(`The ${describeObject(state, obj, ODESC.BASE)} ${noteKill}!`);
|
|
199
|
+
}
|
|
200
|
+
floorExcise(state, grid, obj);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
return obvious;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* inven_damage (project-obj.c L42): give every vulnerable pack item a shot
|
|
209
|
+
* at destruction on an elemental hit. `cperc` is in hundredths of a percent
|
|
210
|
+
* (a 1-in-10000 roll per item). Weapons and armor are damaged (to_h/to_d or
|
|
211
|
+
* to_a decremented) instead of destroyed; rods quarter the chance.
|
|
212
|
+
* Returns the number of items destroyed.
|
|
213
|
+
*/
|
|
214
|
+
export function invenDamage(
|
|
215
|
+
state: GameState,
|
|
216
|
+
typ: number,
|
|
217
|
+
cperc: number,
|
|
218
|
+
env: ProjectWorldEnv = {},
|
|
219
|
+
): number {
|
|
220
|
+
if (cperc <= 0) return 0;
|
|
221
|
+
const player = state.actor.player;
|
|
222
|
+
const gear = state.gear;
|
|
223
|
+
let killed = 0;
|
|
224
|
+
|
|
225
|
+
/* Scan a snapshot of the pack (equipment is exempt). */
|
|
226
|
+
for (const handle of [...gear.pack]) {
|
|
227
|
+
const obj = gear.store.get(handle);
|
|
228
|
+
if (!obj) continue;
|
|
229
|
+
if (obj.artifact) continue; /* for now, skip artifacts */
|
|
230
|
+
|
|
231
|
+
const info = obj.elInfo[typ];
|
|
232
|
+
if (!info || !(info.flags & EL_INFO_HATES) || info.flags & EL_INFO_IGNORE) {
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
let chance = cperc;
|
|
237
|
+
let damage = false;
|
|
238
|
+
|
|
239
|
+
if (tvalIsWeapon(obj.tval) && !tvalIsAmmo(obj.tval)) {
|
|
240
|
+
if (state.rng.randint0(10000) < cperc) {
|
|
241
|
+
/* obj->to_h-- / obj->to_d-- (L85, L88). The known-twin writes at L86-90
|
|
242
|
+
* (gated on p->obj_k->to_h / to_d) are subsumed by the on-demand shadow,
|
|
243
|
+
* which reads the live obj->to_* under the same p->obj_k gate. */
|
|
244
|
+
obj.toH--;
|
|
245
|
+
obj.toD--;
|
|
246
|
+
damage = true;
|
|
247
|
+
} else {
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
} else if (tvalIsArmor(obj.tval)) {
|
|
251
|
+
if (state.rng.randint0(10000) < cperc) {
|
|
252
|
+
/* obj->to_a-- (L102); the L103-104 known->to_a write is likewise
|
|
253
|
+
* subsumed by the on-demand shadow. */
|
|
254
|
+
obj.toA--;
|
|
255
|
+
damage = true;
|
|
256
|
+
} else {
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
} else if (tvalIsRod(obj.tval)) {
|
|
260
|
+
chance = Math.trunc(chance / 4);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/* Count the casualties (a damaged stack counts whole). */
|
|
264
|
+
let amt = 0;
|
|
265
|
+
if (damage) {
|
|
266
|
+
amt = obj.number;
|
|
267
|
+
} else {
|
|
268
|
+
for (let j = 0; j < obj.number; j++) {
|
|
269
|
+
if (state.rng.randint0(10000) < chance) amt++;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (!amt) continue;
|
|
273
|
+
|
|
274
|
+
const prefix =
|
|
275
|
+
obj.number > 1
|
|
276
|
+
? amt === obj.number
|
|
277
|
+
? "All of y"
|
|
278
|
+
: amt > 1
|
|
279
|
+
? "Some of y"
|
|
280
|
+
: "One of y"
|
|
281
|
+
: "Y";
|
|
282
|
+
/* "%sour %s (%c) %s %s!" (L139-145): the (%c) is gear_to_label. */
|
|
283
|
+
const label = gearToLabel(gear, handle);
|
|
284
|
+
env.msg?.(
|
|
285
|
+
`${prefix}our ${describeObject(state, obj, ODESC.BASE)} (${label}) ${amt > 1 ? "were" : "was"} ${
|
|
286
|
+
damage ? "damaged" : "destroyed"
|
|
287
|
+
}!`,
|
|
288
|
+
);
|
|
289
|
+
|
|
290
|
+
if (damage) continue;
|
|
291
|
+
|
|
292
|
+
/* Destroy amt items (the detached split is discarded). */
|
|
293
|
+
gearObjectForUse(gear, player, handle, amt);
|
|
294
|
+
killed += amt;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return killed;
|
|
298
|
+
}
|