@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,728 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Player melee attacks, ported from reference/src/player-attack.c (Angband
|
|
3
|
+
* 4.2.6): chance_of_melee_hit(_base), melee_damage, py_attack_real and the
|
|
4
|
+
* py_attack blow loop. Standard (non-O) combat only.
|
|
5
|
+
*
|
|
6
|
+
* The upstream `struct player` carries a computed `struct player_state`
|
|
7
|
+
* (calc_bonuses) with to_h/to_d/ac/num_blows/skills/stat_ind; the port's
|
|
8
|
+
* Player does not yet compute that (player/calcs.ts defers it). Combat
|
|
9
|
+
* therefore takes an explicit PlayerCombatState alongside the Player, exactly
|
|
10
|
+
* as upstream separates `p` from `p->state`. num_blows is likewise injected.
|
|
11
|
+
*
|
|
12
|
+
* Knowledge / learning side effects (equip_learn_on_melee_attack,
|
|
13
|
+
* learn_brand_slay_from_melee) are wired at the GAME layer around pyAttack
|
|
14
|
+
* (game/player-turn.ts, game/cave-cmd.ts), keeping this module pure combat
|
|
15
|
+
* math; see obj/knowledge.ts and parity/ledger/obj-knowledge.yaml.
|
|
16
|
+
*
|
|
17
|
+
* Damage now routes through the shared mon_take_hit primitive (mon/take-hit.ts)
|
|
18
|
+
* so a blow generates monster fear (gap 2.4); the full py_attack side-effect
|
|
19
|
+
* suite (gap 2.5) - blow_side_effects (TMD_ATT_CONF), the vampiric drain
|
|
20
|
+
* (TMD_ATT_VAMP), OF_IMPACT earthquakes, bloodlust over-exertion, the
|
|
21
|
+
* shapechange verb, splash, shield bash and the PF_COMBAT_REGEN mana reward -
|
|
22
|
+
* is interleaved at the faithful RNG points via optional MeleeEffectHooks. A
|
|
23
|
+
* caller supplying no hooks (e.g. the effect handlers) still rolls fear but
|
|
24
|
+
* skips the state-mutating side effects, exactly as those simplified paths do.
|
|
25
|
+
*
|
|
26
|
+
* DEFERRED (ledgered in parity/ledger/combat-melee.yaml):
|
|
27
|
+
* - Message text/formatting (the combat code returns the HitType key only).
|
|
28
|
+
*
|
|
29
|
+
* O-combat (birth_percent_damage) IS ported: oMeleeDamage / o_critical_melee,
|
|
30
|
+
* gated in pyAttackReal at the same point upstream branches (player-attack.c
|
|
31
|
+
* L803/L811/L826). With the option off the path is byte-identical to standard.
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
import type { Rng } from "../rng.js";
|
|
35
|
+
import type { Brand, Slay } from "../obj/types.js";
|
|
36
|
+
import type { GameObject } from "../obj/object.js";
|
|
37
|
+
import { objectWeightOne } from "../obj/object.js";
|
|
38
|
+
import { MON_TMD } from "../generated/index.js";
|
|
39
|
+
import type { Monster } from "../mon/monster.js";
|
|
40
|
+
import { monsterIsLiving } from "../mon/predicate.js";
|
|
41
|
+
import { monTakeHit, monsterWake } from "../mon/take-hit.js";
|
|
42
|
+
import type { MonTakeHitHooks } from "../mon/take-hit.js";
|
|
43
|
+
import { MON_TMD_FLG_NOTIFY, monClearTimed } from "../mon/timed.js";
|
|
44
|
+
import type { Player } from "../player/player.js";
|
|
45
|
+
import { SKILL } from "../player/types.js";
|
|
46
|
+
import { adj_dex_th, adj_str_td } from "../player/calcs.js";
|
|
47
|
+
import type { CritActor, HitType } from "./hit.js";
|
|
48
|
+
import {
|
|
49
|
+
BTH_PLUS_ADJ,
|
|
50
|
+
applyDeadliness,
|
|
51
|
+
criticalMelee,
|
|
52
|
+
oCriticalMelee,
|
|
53
|
+
testHit,
|
|
54
|
+
} from "./hit.js";
|
|
55
|
+
import {
|
|
56
|
+
getMonsterBrandMultiplier,
|
|
57
|
+
improveAttackModifier,
|
|
58
|
+
objectToDam,
|
|
59
|
+
objectToHit,
|
|
60
|
+
} from "./brand-slay.js";
|
|
61
|
+
import type { AttackModifier, TempBrandSlay } from "./brand-slay.js";
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* The subset of upstream `struct player_state` that combat reads. Supplied by
|
|
65
|
+
* the caller (calc_bonuses is deferred in player/calcs.ts).
|
|
66
|
+
*/
|
|
67
|
+
export interface PlayerCombatState {
|
|
68
|
+
/** state->to_h. */
|
|
69
|
+
toH: number;
|
|
70
|
+
/** state->to_d. */
|
|
71
|
+
toD: number;
|
|
72
|
+
/** state->ac. */
|
|
73
|
+
ac: number;
|
|
74
|
+
/** state->to_a. */
|
|
75
|
+
toA: number;
|
|
76
|
+
/** state->skills[SKILL_MAX], indexed by SKILL. */
|
|
77
|
+
skills: readonly number[];
|
|
78
|
+
/** state->num_blows, in hundredths of a blow (100 = one blow). */
|
|
79
|
+
numBlows: number;
|
|
80
|
+
/** state->ammo_mult (ranged). */
|
|
81
|
+
ammoMult: number;
|
|
82
|
+
/** state->num_shots, in tenths of a shot (10 = one shot). */
|
|
83
|
+
numShots: number;
|
|
84
|
+
/** state->ammo_tval: the ammo tval the equipped launcher fires (0 = none). */
|
|
85
|
+
ammoTval: number;
|
|
86
|
+
/** state->bless_wield (blessed weapon / holy-wield bonus). */
|
|
87
|
+
blessWield: boolean;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* The state-mutating side effects of a melee blow (player-attack.c:669-978),
|
|
92
|
+
* all optional. combat/melee.ts draws every RNG at the faithful point whenever
|
|
93
|
+
* the triggering condition (the boolean flags below) is met, keeping the stream
|
|
94
|
+
* faithful; the callback then applies the game-state change. A caller that
|
|
95
|
+
* omits a callback leaves that effect's state change a no-op while still
|
|
96
|
+
* drawing its RNG, matching the simplified effect-handler melee paths.
|
|
97
|
+
*/
|
|
98
|
+
export interface MeleeEffectHooks {
|
|
99
|
+
/** mon_take_hit hooks (kill / become_aware / cover-tracks / arena death). */
|
|
100
|
+
takeHit?: MonTakeHitHooks;
|
|
101
|
+
/** p->timed[TMD_ATT_CONF] > 0: the confusion-brand side effect is armed. */
|
|
102
|
+
attConf?: boolean;
|
|
103
|
+
/** player_clear_timed(p, TMD_ATT_CONF): spend the confusion brand. */
|
|
104
|
+
clearAttConf?: () => void;
|
|
105
|
+
/** mon_inc_timed(mon, MON_TMD_CONF, dur, NOTIFY). */
|
|
106
|
+
confuseMonster?: (mon: Monster, dur: number) => void;
|
|
107
|
+
/** p->timed[TMD_ATT_VAMP] > 0: the vampiric drain is armed. */
|
|
108
|
+
attVamp?: boolean;
|
|
109
|
+
/** effect_simple(EF_HEAL_HP, drain): heal the player by the amount drained. */
|
|
110
|
+
healPlayer?: (amount: number) => void;
|
|
111
|
+
/** p->timed[TMD_BLOODLUST] > 0: bloodlust over-exertion is armed. */
|
|
112
|
+
bloodlust?: boolean;
|
|
113
|
+
/** player_over_exert(p, PY_EXERT_SCRAMBLE, 20, 20) on a missed bloodlust blow. */
|
|
114
|
+
overExertScramble?: () => void;
|
|
115
|
+
/** player_over_exert(p, PY_EXERT_CON, 20, 0) on a landed bloodlust blow. */
|
|
116
|
+
overExertCon?: () => void;
|
|
117
|
+
/** player_of_has(p, OF_IMPACT): earthquake brand present. */
|
|
118
|
+
impact?: boolean;
|
|
119
|
+
/** equip_learn_flag(p, OF_IMPACT), run when the quake condition trips. */
|
|
120
|
+
learnImpact?: () => void;
|
|
121
|
+
/** effect_simple(EF_EARTHQUAKE, rad 10) at the player; draws its own RNG. */
|
|
122
|
+
earthquake?: () => void;
|
|
123
|
+
/** square_monster(cave, grid) == null after the quake (monster gone/moved). */
|
|
124
|
+
monsterGone?: () => boolean;
|
|
125
|
+
/**
|
|
126
|
+
* PF_COMBAT_REGEN: reward the player with 5% of max SP before the blows
|
|
127
|
+
* (player-attack.c L1002); present only when the player has the flag.
|
|
128
|
+
*/
|
|
129
|
+
combatRegen?: () => void;
|
|
130
|
+
/**
|
|
131
|
+
* PF_SHIELD_BASH (player-attack.c L1009): present only when the player has
|
|
132
|
+
* the flag; the bash also needs a visible monster.
|
|
133
|
+
*/
|
|
134
|
+
shieldBash?: ShieldBashDeps;
|
|
135
|
+
/**
|
|
136
|
+
* player_is_shapechanged: the shape's blow verbs (p->shape->blows). When
|
|
137
|
+
* present a random one replaces the attack verb, drawing randint0(len).
|
|
138
|
+
*/
|
|
139
|
+
shapeBlows?: readonly string[];
|
|
140
|
+
/**
|
|
141
|
+
* Temporary brands/slays (improve_attack_modifier(p, NULL, ...)); consulted
|
|
142
|
+
* only on the melee path, exactly as upstream.
|
|
143
|
+
*/
|
|
144
|
+
temp?: TempBrandSlay;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/** Options for a melee attack. */
|
|
148
|
+
export interface MeleeOptions {
|
|
149
|
+
/** monster_is_visible(mon); a non-visible target halves the to-hit. */
|
|
150
|
+
monVisible?: boolean;
|
|
151
|
+
/** player_of_has(p, OF_AFRAID); an afraid player cannot attack. */
|
|
152
|
+
afraid?: boolean;
|
|
153
|
+
/**
|
|
154
|
+
* Off-weapon equipped items (body slots >= 2) carrying brands/slays, in
|
|
155
|
+
* slot order. Upstream iterates these before the weapon.
|
|
156
|
+
*/
|
|
157
|
+
offhand?: readonly GameObject[];
|
|
158
|
+
/** p->energy for the blow loop (defaults to moveEnergy: one full turn). */
|
|
159
|
+
energy?: number;
|
|
160
|
+
/** z_info->move_energy (constants.txt; 100 upstream). */
|
|
161
|
+
moveEnergy?: number;
|
|
162
|
+
/**
|
|
163
|
+
* OPT(p, birth_percent_damage): route damage through the O-combat path
|
|
164
|
+
* (oMeleeDamage) instead of the standard melee_damage + critical_melee.
|
|
165
|
+
* Off by default; when off, RNG draws are byte-identical to the standard
|
|
166
|
+
* path (the gate adds/reorders nothing).
|
|
167
|
+
*/
|
|
168
|
+
percentDamage?: boolean;
|
|
169
|
+
/** The blow side effects (gap 2.5); omitted by pure-math / effect callers. */
|
|
170
|
+
hooks?: MeleeEffectHooks;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/** The outcome of a single blow (py_attack_real). */
|
|
174
|
+
export interface MeleeBlow {
|
|
175
|
+
hit: boolean;
|
|
176
|
+
damage: number;
|
|
177
|
+
msg: HitType;
|
|
178
|
+
verb: string;
|
|
179
|
+
/** Brand index used (0 = none). */
|
|
180
|
+
brand: number;
|
|
181
|
+
/** Slay index used (0 = none). */
|
|
182
|
+
slay: number;
|
|
183
|
+
/** The monster was killed by the blow (mon_take_hit died). */
|
|
184
|
+
monsterDied: boolean;
|
|
185
|
+
/**
|
|
186
|
+
* The upstream `stop` value: the monster died, OR the impact quake removed
|
|
187
|
+
* or moved it (blow_after_effects). Ends the blow loop; equals monsterDied
|
|
188
|
+
* whenever no earthquake hook fires.
|
|
189
|
+
*/
|
|
190
|
+
stopAttack: boolean;
|
|
191
|
+
/** The blow newly frightened the monster (mon_take_hit's *fear out-param). */
|
|
192
|
+
fear: boolean;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/** The outcome of a full attack (py_attack). */
|
|
196
|
+
export interface MeleeAttack {
|
|
197
|
+
blows: MeleeBlow[];
|
|
198
|
+
totalDamage: number;
|
|
199
|
+
monsterDied: boolean;
|
|
200
|
+
/**
|
|
201
|
+
* The monster survived and was left frightened and visible: py_attack's
|
|
202
|
+
* end-of-loop add_monster_message(MON_MSG_FLEE_IN_TERROR). The caller emits
|
|
203
|
+
* the "flees in terror" line.
|
|
204
|
+
*/
|
|
205
|
+
monsterFled: boolean;
|
|
206
|
+
/**
|
|
207
|
+
* p->upkeep->energy_use as py_attack leaves it: blow_energy per blow landed
|
|
208
|
+
* plus any shield-bash stumble. May be less than a full move_energy (e.g.
|
|
209
|
+
* two 40-energy blows leave 80), exactly as upstream.
|
|
210
|
+
*/
|
|
211
|
+
energyUsed: number;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
function skill(state: PlayerCombatState, idx: number): number {
|
|
215
|
+
return state.skills[idx] ?? 0;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
function critActor(p: Player, state: PlayerCombatState): CritActor {
|
|
219
|
+
return {
|
|
220
|
+
lev: p.lev,
|
|
221
|
+
toH: state.toH,
|
|
222
|
+
meleeSkill: skill(state, SKILL.TO_HIT_MELEE),
|
|
223
|
+
bowSkill: skill(state, SKILL.TO_HIT_BOW),
|
|
224
|
+
throwSkill: skill(state, SKILL.TO_HIT_THROW),
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* chance_of_melee_hit_base: the player's melee to-hit before the target.
|
|
230
|
+
*/
|
|
231
|
+
export function chanceOfMeleeHitBase(
|
|
232
|
+
state: PlayerCombatState,
|
|
233
|
+
weapon: GameObject | null,
|
|
234
|
+
): number {
|
|
235
|
+
const bonus =
|
|
236
|
+
state.toH + (weapon ? objectToHit(weapon) : 0) + (state.blessWield ? 2 : 0);
|
|
237
|
+
return skill(state, SKILL.TO_HIT_MELEE) + bonus * BTH_PLUS_ADJ;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* chance_of_melee_hit: to-hit against a specific monster (half if unseen).
|
|
242
|
+
*/
|
|
243
|
+
export function chanceOfMeleeHit(
|
|
244
|
+
state: PlayerCombatState,
|
|
245
|
+
weapon: GameObject | null,
|
|
246
|
+
monVisible: boolean,
|
|
247
|
+
): number {
|
|
248
|
+
const chance = chanceOfMeleeHitBase(state, weapon);
|
|
249
|
+
return monVisible ? chance : Math.trunc(chance / 2);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* melee_damage: base weapon dice, times the best slay or brand multiplier,
|
|
254
|
+
* plus the weapon's to-dam. Standard (non-O) combat.
|
|
255
|
+
*/
|
|
256
|
+
export function meleeDamage(
|
|
257
|
+
rng: Rng,
|
|
258
|
+
mon: Monster,
|
|
259
|
+
weapon: GameObject | null,
|
|
260
|
+
brand: number,
|
|
261
|
+
slay: number,
|
|
262
|
+
brands: readonly (Brand | null)[],
|
|
263
|
+
slays: readonly (Slay | null)[],
|
|
264
|
+
): number {
|
|
265
|
+
let dmg = weapon ? rng.damroll(weapon.dd, weapon.ds) : 1;
|
|
266
|
+
|
|
267
|
+
if (slay) {
|
|
268
|
+
dmg *= (slays[slay] as Slay).multiplier;
|
|
269
|
+
} else if (brand) {
|
|
270
|
+
dmg *= getMonsterBrandMultiplier(mon, brands[brand] as Brand, false);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
if (weapon) dmg += objectToDam(weapon);
|
|
274
|
+
|
|
275
|
+
return dmg;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/** The (possibly critical-boosted) damage of a single blow plus its message. */
|
|
279
|
+
export interface DamageOutcome {
|
|
280
|
+
damage: number;
|
|
281
|
+
msg: HitType;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* o_melee_damage (player-attack.c L501): the birth_percent_damage melee path.
|
|
286
|
+
* Deadliness and the slay/brand o_multiplier add extra SIDES to the damage
|
|
287
|
+
* dice; criticals add extra DICE. Unlike the standard path, the player's
|
|
288
|
+
* to-dam (player_damage_bonus) is folded in here via deadliness, so the caller
|
|
289
|
+
* must NOT add state.toD afterwards (upstream skips it under the option gate).
|
|
290
|
+
*
|
|
291
|
+
* RNG order, matching upstream exactly:
|
|
292
|
+
* 1. randint0(10000) - the fractional-sides roll (drawn even when unarmed).
|
|
293
|
+
* 2. (weapon only) o_critical_melee: randint1(chance_den) crit test, then on
|
|
294
|
+
* a crit the one_in_ level walk.
|
|
295
|
+
* 3. damroll(dice, sides).
|
|
296
|
+
*/
|
|
297
|
+
export function oMeleeDamage(
|
|
298
|
+
rng: Rng,
|
|
299
|
+
state: PlayerCombatState,
|
|
300
|
+
mon: Monster,
|
|
301
|
+
weapon: GameObject | null,
|
|
302
|
+
brand: number,
|
|
303
|
+
slay: number,
|
|
304
|
+
brands: readonly (Brand | null)[],
|
|
305
|
+
slays: readonly (Slay | null)[],
|
|
306
|
+
): DamageOutcome {
|
|
307
|
+
let dice = weapon ? weapon.dd : 1;
|
|
308
|
+
let add = 0;
|
|
309
|
+
|
|
310
|
+
/* Average value of a single damage die, x10. */
|
|
311
|
+
let dieAverage = Math.trunc((10 * ((weapon ? weapon.ds : 1) + 1)) / 2);
|
|
312
|
+
|
|
313
|
+
/* Slays/brands inflate the average (10x) and contribute a flat add. Melee
|
|
314
|
+
* prefers a slay over a brand (player-attack.c L512: `if (s) ... else if`). */
|
|
315
|
+
if (slay) {
|
|
316
|
+
const oMult = (slays[slay] as Slay).oMultiplier;
|
|
317
|
+
dieAverage *= oMult;
|
|
318
|
+
add = oMult - 10;
|
|
319
|
+
} else if (brand) {
|
|
320
|
+
const bmult = getMonsterBrandMultiplier(mon, brands[brand] as Brand, true);
|
|
321
|
+
dieAverage *= bmult;
|
|
322
|
+
add = bmult - 10;
|
|
323
|
+
} else {
|
|
324
|
+
dieAverage *= 10;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/* Apply deadliness (x100) from to_d + weapon to-dam. */
|
|
328
|
+
const deadliness = state.toD + (weapon ? objectToDam(weapon) : 0);
|
|
329
|
+
dieAverage = applyDeadliness(dieAverage, Math.min(deadliness, 150));
|
|
330
|
+
|
|
331
|
+
/* Sides per die, with a fractional-sides roll. */
|
|
332
|
+
let sides = 2 * dieAverage - 10000;
|
|
333
|
+
const extra = rng.randint0(10000) < sides % 10000;
|
|
334
|
+
sides = Math.trunc(sides / 10000);
|
|
335
|
+
sides += extra ? 1 : 0;
|
|
336
|
+
|
|
337
|
+
/* Criticals add dice (excluded for unarmed; upstream leaves msg at MSG_HIT). */
|
|
338
|
+
let msg: HitType = "HIT";
|
|
339
|
+
if (weapon) {
|
|
340
|
+
const crit = oCriticalMelee(rng, chanceOfMeleeHitBase(state, weapon), mon);
|
|
341
|
+
dice += crit.addDice;
|
|
342
|
+
msg = crit.msg;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
let dmg = rng.damroll(dice, sides);
|
|
346
|
+
dmg += add;
|
|
347
|
+
|
|
348
|
+
return { damage: dmg, msg };
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* py_attack_real: a single melee blow against the monster (player-attack.c
|
|
353
|
+
* L717). Mutates mon.hp on a damaging hit (through mon_take_hit, which also
|
|
354
|
+
* rolls fear), and interleaves the blow side effects via opts.hooks at the
|
|
355
|
+
* faithful RNG points. Returns the blow outcome; blow.monsterDied is the
|
|
356
|
+
* upstream `stop` value and blow.fear is mon_take_hit's *fear out-param.
|
|
357
|
+
*/
|
|
358
|
+
export function pyAttackReal(
|
|
359
|
+
rng: Rng,
|
|
360
|
+
p: Player,
|
|
361
|
+
state: PlayerCombatState,
|
|
362
|
+
weapon: GameObject | null,
|
|
363
|
+
mon: Monster,
|
|
364
|
+
brands: readonly (Brand | null)[],
|
|
365
|
+
slays: readonly (Slay | null)[],
|
|
366
|
+
opts: MeleeOptions = {},
|
|
367
|
+
): MeleeBlow {
|
|
368
|
+
const monVisible = opts.monVisible ?? true;
|
|
369
|
+
const h = opts.hooks;
|
|
370
|
+
|
|
371
|
+
/* An afraid player cannot attack (player-attack.c L752). */
|
|
372
|
+
if (opts.afraid) {
|
|
373
|
+
return {
|
|
374
|
+
hit: false, damage: 0, msg: "MISS", verb: "afraid",
|
|
375
|
+
brand: 0, slay: 0, monsterDied: false, stopAttack: false, fear: false,
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/* Disturb the monster: monster_wake(mon, false, 100) + clear any Hold
|
|
380
|
+
* (player-attack.c L759-760). Draws randint0(100); mon_take_hit's own
|
|
381
|
+
* non-fatal wake later re-draws, exactly as upstream. */
|
|
382
|
+
monsterWake(rng, mon, false, 100);
|
|
383
|
+
monClearTimed(rng, mon, MON_TMD.HOLD, MON_TMD_FLG_NOTIFY);
|
|
384
|
+
const th = h?.takeHit;
|
|
385
|
+
|
|
386
|
+
/* See if the player hit. */
|
|
387
|
+
const success = testHit(
|
|
388
|
+
rng,
|
|
389
|
+
chanceOfMeleeHit(state, weapon, monVisible),
|
|
390
|
+
mon.race.ac,
|
|
391
|
+
);
|
|
392
|
+
if (!success) {
|
|
393
|
+
/* Small chance of bloodlust side-effects on a miss (player-attack.c L770). */
|
|
394
|
+
if (h?.bloodlust && rng.oneIn(50)) h.overExertScramble?.();
|
|
395
|
+
return {
|
|
396
|
+
hit: false, damage: 0, msg: "MISS", verb: weapon ? "hit" : "punch",
|
|
397
|
+
brand: 0, slay: 0, monsterDied: false, stopAttack: false, fear: false,
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
const weight = weapon ? objectWeightOne(weapon) : 0;
|
|
402
|
+
const oCombat = opts.percentDamage ?? false;
|
|
403
|
+
|
|
404
|
+
/* Best attack from all slays or brands on all non-launcher equipment.
|
|
405
|
+
* improve_attack_modifier reads birth_percent_damage internally to pick the
|
|
406
|
+
* comparison multiplier, so the O flag is threaded here too (no RNG). */
|
|
407
|
+
const mod: AttackModifier = { brand: 0, slay: 0, verb: weapon ? "hit" : "punch" };
|
|
408
|
+
for (const off of opts.offhand ?? []) {
|
|
409
|
+
improveAttackModifier(off, mon, brands, slays, mod, false, oCombat);
|
|
410
|
+
}
|
|
411
|
+
if (weapon) {
|
|
412
|
+
improveAttackModifier(weapon, mon, brands, slays, mod, false, oCombat);
|
|
413
|
+
}
|
|
414
|
+
/* improve_attack_modifier(p, NULL, ...) for temporary brands/slays. */
|
|
415
|
+
improveAttackModifier(null, mon, brands, slays, mod, false, oCombat, h?.temp);
|
|
416
|
+
|
|
417
|
+
/* Get the damage. The option gate matches upstream player-attack.c
|
|
418
|
+
* L803/L811/L826: the standard branch computes base damage, criticals, then
|
|
419
|
+
* adds player_damage_bonus; the O branch folds all of that into oMeleeDamage
|
|
420
|
+
* (to_d enters via deadliness) and skips the trailing state.toD. */
|
|
421
|
+
let dmg: number;
|
|
422
|
+
let msg: HitType;
|
|
423
|
+
if (!oCombat) {
|
|
424
|
+
dmg = meleeDamage(rng, mon, weapon, mod.brand, mod.slay, brands, slays);
|
|
425
|
+
msg = "HIT";
|
|
426
|
+
if (weapon) {
|
|
427
|
+
const crit = criticalMelee(
|
|
428
|
+
rng,
|
|
429
|
+
critActor(p, state),
|
|
430
|
+
mon,
|
|
431
|
+
weight,
|
|
432
|
+
objectToHit(weapon),
|
|
433
|
+
dmg,
|
|
434
|
+
);
|
|
435
|
+
dmg = crit.damage;
|
|
436
|
+
msg = crit.msg;
|
|
437
|
+
}
|
|
438
|
+
/* Apply the player damage bonus (player_damage_bonus = state->to_d). */
|
|
439
|
+
dmg += state.toD;
|
|
440
|
+
} else {
|
|
441
|
+
const o = oMeleeDamage(rng, state, mon, weapon, mod.brand, mod.slay, brands, slays);
|
|
442
|
+
dmg = o.damage;
|
|
443
|
+
msg = o.msg;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
/* Splash damage and earthquakes (player-attack.c L814): splash is computed
|
|
447
|
+
* upstream (weight * dmg / 100) but blow_after_effects ignores its splash
|
|
448
|
+
* parameter - an upstream quirk, so nothing to apply. do_quake needs
|
|
449
|
+
* OF_IMPACT and dmg > 50, and learns the flag immediately (L818). */
|
|
450
|
+
const doQuake = Boolean(h?.impact) && dmg > 50;
|
|
451
|
+
if (doQuake) h?.learnImpact?.();
|
|
452
|
+
|
|
453
|
+
/* Substitute shape-specific blows for shapechanged players (L830): a random
|
|
454
|
+
* shape blow verb replaces the attack verb (drawn even at zero damage). */
|
|
455
|
+
if (h?.shapeBlows && h.shapeBlows.length > 0) {
|
|
456
|
+
mod.verb = h.shapeBlows[rng.randint0(h.shapeBlows.length)]!;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
/* No negative damage; change verb if no damage done. */
|
|
460
|
+
if (dmg <= 0) {
|
|
461
|
+
dmg = 0;
|
|
462
|
+
msg = "MISS";
|
|
463
|
+
mod.verb = "fail to harm";
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
/* Pre-damage side effects: blow_side_effects (player-attack.c L864). The
|
|
467
|
+
* confusion brand clears itself and confuses the monster. */
|
|
468
|
+
if (h?.attConf) {
|
|
469
|
+
h.clearAttConf?.();
|
|
470
|
+
/* mon_inc_timed(mon, MON_TMD_CONF, 10 + randint0(p->lev) / 10, NOTIFY). */
|
|
471
|
+
const dur = 10 + Math.trunc(rng.randint0(p.lev) / 10);
|
|
472
|
+
h.confuseMonster?.(mon, dur);
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
/* Damage, check for hp drain, fear and death (player-attack.c L867). */
|
|
476
|
+
const drain = Math.min(mon.hp, dmg);
|
|
477
|
+
const res = monTakeHit(rng, mon, dmg, null, th ?? {});
|
|
478
|
+
const died = res.died;
|
|
479
|
+
let stop = died;
|
|
480
|
+
let fear = res.fear;
|
|
481
|
+
|
|
482
|
+
/* Small chance of bloodlust side-effects on a hit (player-attack.c L871). */
|
|
483
|
+
if (h?.bloodlust && rng.oneIn(50)) h.overExertCon?.();
|
|
484
|
+
|
|
485
|
+
/* Vampiric drain: heal by the damage drained if the monster lives (L877). */
|
|
486
|
+
if (!stop && h?.attVamp && monsterIsLiving(mon)) {
|
|
487
|
+
h.healPlayer?.(drain);
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
/* A dead monster is not frightened (player-attack.c L883). */
|
|
491
|
+
if (stop) fear = false;
|
|
492
|
+
|
|
493
|
+
/* Post-damage effects: blow_after_effects earthquake (player-attack.c L887). */
|
|
494
|
+
if (doQuake && h?.earthquake) {
|
|
495
|
+
h.earthquake();
|
|
496
|
+
/* Monster may be dead or moved by the quake. */
|
|
497
|
+
if (h.monsterGone?.() ?? false) stop = true;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
return {
|
|
501
|
+
hit: true,
|
|
502
|
+
damage: dmg,
|
|
503
|
+
msg,
|
|
504
|
+
verb: mod.verb,
|
|
505
|
+
brand: mod.brand,
|
|
506
|
+
slay: mod.slay,
|
|
507
|
+
monsterDied: died,
|
|
508
|
+
stopAttack: stop,
|
|
509
|
+
fear,
|
|
510
|
+
};
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
/**
|
|
514
|
+
* The player-state / equipment inputs attempt_shield_bash reads beyond the
|
|
515
|
+
* combat state (player-attack.c:897-978). Present on MeleeEffectHooks only when
|
|
516
|
+
* the player has PF_SHIELD_BASH.
|
|
517
|
+
*/
|
|
518
|
+
export interface ShieldBashDeps {
|
|
519
|
+
/** slot_object(p, slot_by_name(p, "arm")): the equipped shield, if any. */
|
|
520
|
+
shield: GameObject | null;
|
|
521
|
+
/** state->stat_ind[STAT_DEX] (indexes adj_dex_th). */
|
|
522
|
+
dexInd: number;
|
|
523
|
+
/** state->stat_ind[STAT_STR] (indexes adj_str_td). */
|
|
524
|
+
strInd: number;
|
|
525
|
+
/** p->wt: the player's body weight. */
|
|
526
|
+
playerWt: number;
|
|
527
|
+
/** p->upkeep->total_weight: carried weight. */
|
|
528
|
+
totalWeight: number;
|
|
529
|
+
/** OPT(p, show_damage): append " (N)" to the bash message. */
|
|
530
|
+
showDamage?: boolean;
|
|
531
|
+
/** msg sink for "You get in a shield bash!" / "WHAMM!" / "You stumble!". */
|
|
532
|
+
msg?: (text: string) => void;
|
|
533
|
+
/** mon_inc_timed(mon, MON_TMD_STUN, dur, 0). */
|
|
534
|
+
stunMonster?: (mon: Monster, dur: number) => void;
|
|
535
|
+
/** mon_inc_timed(mon, MON_TMD_CONF, dur, 0). */
|
|
536
|
+
confuseMonster?: (mon: Monster, dur: number) => void;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
/** The outcome of a shield bash attempt. */
|
|
540
|
+
interface ShieldBashResult {
|
|
541
|
+
/** The bash killed the monster (py_attack returns immediately). */
|
|
542
|
+
died: boolean;
|
|
543
|
+
/** mon_take_hit's fear out-param from the bash damage. */
|
|
544
|
+
fear: boolean;
|
|
545
|
+
/** Stumble energy: energy_lost * move_energy / 100 added to energy_use. */
|
|
546
|
+
energyLost: number;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
/**
|
|
550
|
+
* attempt_shield_bash (player-attack.c L897): before the blows, a shield-bash
|
|
551
|
+
* character may slam the monster with the shield - damage, stun/confusion
|
|
552
|
+
* rolls, and a possible stumble that costs part of the turn. Duration rolls
|
|
553
|
+
* for stun/confusion are drawn whenever their condition trips, even if the
|
|
554
|
+
* caller supplies no monster-timed hook, keeping the RNG stream faithful.
|
|
555
|
+
*/
|
|
556
|
+
function attemptShieldBash(
|
|
557
|
+
rng: Rng,
|
|
558
|
+
p: Player,
|
|
559
|
+
state: PlayerCombatState,
|
|
560
|
+
weapon: GameObject | null,
|
|
561
|
+
mon: Monster,
|
|
562
|
+
deps: ShieldBashDeps,
|
|
563
|
+
takeHit: MonTakeHitHooks,
|
|
564
|
+
moveEnergy: number,
|
|
565
|
+
): ShieldBashResult {
|
|
566
|
+
const none: ShieldBashResult = { died: false, fear: false, energyLost: 0 };
|
|
567
|
+
const shield = deps.shield;
|
|
568
|
+
const nblows = Math.trunc(state.numBlows / 100);
|
|
569
|
+
|
|
570
|
+
/* Bashing chance depends on melee skill, DEX, and a level bonus. */
|
|
571
|
+
let bashChance =
|
|
572
|
+
Math.trunc(skill(state, SKILL.TO_HIT_MELEE) / 8) +
|
|
573
|
+
Math.trunc((adj_dex_th[deps.dexInd] ?? 0) / 2);
|
|
574
|
+
|
|
575
|
+
/* No shield, no bash. */
|
|
576
|
+
if (!shield) return none;
|
|
577
|
+
|
|
578
|
+
/* Monster is too pathetic, don't bother. */
|
|
579
|
+
if (mon.race.level < Math.trunc(p.lev / 2)) return none;
|
|
580
|
+
|
|
581
|
+
/* Players bash more often when they see a real need. */
|
|
582
|
+
if (!weapon) {
|
|
583
|
+
/* Unarmed... */
|
|
584
|
+
bashChance *= 4;
|
|
585
|
+
} else if (weapon.dd * weapon.ds * nblows < shield.dd * shield.ds * 3) {
|
|
586
|
+
/* ... or armed with a puny weapon. */
|
|
587
|
+
bashChance *= 2;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
/* Try to get in a shield bash. */
|
|
591
|
+
if (bashChance <= rng.randint0(200 + mon.race.level)) {
|
|
592
|
+
return none;
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
/* Calculate attack quality, a mix of momentum and accuracy. */
|
|
596
|
+
const bashQuality =
|
|
597
|
+
Math.trunc(skill(state, SKILL.TO_HIT_MELEE) / 4) +
|
|
598
|
+
Math.trunc(deps.playerWt / 8) +
|
|
599
|
+
Math.trunc(deps.totalWeight / 80) +
|
|
600
|
+
Math.trunc(objectWeightOne(shield) / 2);
|
|
601
|
+
|
|
602
|
+
/* Calculate damage. Big shields are deadly. */
|
|
603
|
+
let bashDam = rng.damroll(shield.dd, shield.ds);
|
|
604
|
+
|
|
605
|
+
/* Multiply by quality and experience factors. */
|
|
606
|
+
bashDam *= Math.trunc(bashQuality / 40) + Math.trunc(p.lev / 14);
|
|
607
|
+
|
|
608
|
+
/* Strength bonus. */
|
|
609
|
+
bashDam += adj_str_td[deps.strInd] ?? 0;
|
|
610
|
+
|
|
611
|
+
/* Paranoia. */
|
|
612
|
+
if (bashDam <= 0) return none;
|
|
613
|
+
bashDam = Math.min(bashDam, 125);
|
|
614
|
+
|
|
615
|
+
deps.msg?.(
|
|
616
|
+
deps.showDamage
|
|
617
|
+
? `You get in a shield bash! (${bashDam})`
|
|
618
|
+
: "You get in a shield bash!",
|
|
619
|
+
);
|
|
620
|
+
|
|
621
|
+
/* Encourage the player to keep wearing that heavy shield. */
|
|
622
|
+
if (rng.randint1(bashDam) > 30 + rng.randint1(Math.trunc(bashDam / 2))) {
|
|
623
|
+
deps.msg?.("WHAMM!");
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
/* Damage, check for fear and death. */
|
|
627
|
+
const res = monTakeHit(rng, mon, bashDam, null, takeHit);
|
|
628
|
+
if (res.died) return { died: true, fear: false, energyLost: 0 };
|
|
629
|
+
const fear = res.fear;
|
|
630
|
+
|
|
631
|
+
/* Stunning (duration drawn whenever the condition trips). */
|
|
632
|
+
if (bashQuality + p.lev > rng.randint1(200 + mon.race.level * 8)) {
|
|
633
|
+
const dur = rng.randint0(Math.trunc(p.lev / 5)) + 4;
|
|
634
|
+
deps.stunMonster?.(mon, dur);
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
/* Confusion. */
|
|
638
|
+
if (bashQuality + p.lev > rng.randint1(300 + mon.race.level * 12)) {
|
|
639
|
+
const dur = rng.randint0(Math.trunc(p.lev / 5)) + 4;
|
|
640
|
+
deps.confuseMonster?.(mon, dur);
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
/* The player will sometimes stumble. */
|
|
644
|
+
let energyLost = 0;
|
|
645
|
+
if (35 + (adj_dex_th[deps.dexInd] ?? 0) < rng.randint1(60)) {
|
|
646
|
+
const lost = rng.randint1(50) + 25;
|
|
647
|
+
/* Lose 26-75% of a turn due to stumbling after shield bash. */
|
|
648
|
+
deps.msg?.("You stumble!");
|
|
649
|
+
energyLost = Math.trunc((lost * moveEnergy) / 100);
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
return { died: false, fear, energyLost };
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
/**
|
|
656
|
+
* py_attack (player-attack.c L988): land blows until the next blow would
|
|
657
|
+
* exceed the energy available for a single turn, or the monster dies.
|
|
658
|
+
* blow_energy = 100 * move_energy / num_blows; energy defaults to a full
|
|
659
|
+
* turn's worth. Runs the PF_COMBAT_REGEN mana reward and the shield bash
|
|
660
|
+
* before the blow loop, accumulates the fear flag across blows, and reports
|
|
661
|
+
* the delayed "flees in terror" condition and the energy actually used.
|
|
662
|
+
*/
|
|
663
|
+
export function pyAttack(
|
|
664
|
+
rng: Rng,
|
|
665
|
+
p: Player,
|
|
666
|
+
state: PlayerCombatState,
|
|
667
|
+
weapon: GameObject | null,
|
|
668
|
+
mon: Monster,
|
|
669
|
+
brands: readonly (Brand | null)[],
|
|
670
|
+
slays: readonly (Slay | null)[],
|
|
671
|
+
opts: MeleeOptions = {},
|
|
672
|
+
): MeleeAttack {
|
|
673
|
+
const moveEnergy = opts.moveEnergy ?? 100;
|
|
674
|
+
const availEnergy = Math.min(opts.energy ?? moveEnergy, moveEnergy);
|
|
675
|
+
/* Guard a degenerate num_blows against a zero-energy infinite loop. */
|
|
676
|
+
const blowEnergy = Math.max(
|
|
677
|
+
1,
|
|
678
|
+
Math.trunc((100 * moveEnergy) / state.numBlows),
|
|
679
|
+
);
|
|
680
|
+
const h = opts.hooks;
|
|
681
|
+
const monVisible = opts.monVisible ?? true;
|
|
682
|
+
|
|
683
|
+
const blows: MeleeBlow[] = [];
|
|
684
|
+
let totalDamage = 0;
|
|
685
|
+
let slain = false;
|
|
686
|
+
let fear = false;
|
|
687
|
+
let used = 0;
|
|
688
|
+
|
|
689
|
+
/* Reward BGs with 5% of max SPs, min 1/2 point (player-attack.c L1002). */
|
|
690
|
+
h?.combatRegen?.();
|
|
691
|
+
|
|
692
|
+
/* Player attempts a shield bash if they can, and if monster is visible and
|
|
693
|
+
* not too pathetic (player-attack.c L1009). */
|
|
694
|
+
if (h?.shieldBash && monVisible) {
|
|
695
|
+
const bash = attemptShieldBash(
|
|
696
|
+
rng, p, state, weapon, mon, h.shieldBash, h.takeHit ?? {}, moveEnergy,
|
|
697
|
+
);
|
|
698
|
+
if (bash.died) {
|
|
699
|
+
/* Monster may die: py_attack returns without any blows. */
|
|
700
|
+
return {
|
|
701
|
+
blows, totalDamage, monsterDied: true, monsterFled: false,
|
|
702
|
+
energyUsed: used,
|
|
703
|
+
};
|
|
704
|
+
}
|
|
705
|
+
fear = fear || bash.fear;
|
|
706
|
+
used += bash.energyLost;
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
let died = false;
|
|
710
|
+
while (availEnergy - used >= blowEnergy && !slain) {
|
|
711
|
+
const blow = pyAttackReal(rng, p, state, weapon, mon, brands, slays, opts);
|
|
712
|
+
blows.push(blow);
|
|
713
|
+
totalDamage += blow.damage;
|
|
714
|
+
fear = fear || blow.fear;
|
|
715
|
+
if (blow.monsterDied) {
|
|
716
|
+
died = true;
|
|
717
|
+
/* py_attack_real: if (stop) (*fear) = false clears the shared flag. */
|
|
718
|
+
fear = false;
|
|
719
|
+
}
|
|
720
|
+
if (blow.stopAttack) slain = true;
|
|
721
|
+
used += blowEnergy;
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
/* Hack - delay fear messages (player-attack.c L1023). */
|
|
725
|
+
const monsterFled = fear && monVisible;
|
|
726
|
+
|
|
727
|
+
return { blows, totalDamage, monsterDied: died, monsterFled, energyUsed: used };
|
|
728
|
+
}
|