@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,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Player spells, ported from reference/src/player-spell.c (Angband 4.2.6)
|
|
3
|
+
* plus the spell-related pieces of player-calcs.c (calc_mana, calc_spells,
|
|
4
|
+
* average_spell_stat) and init.c's write_book_kind (spellbook object kinds
|
|
5
|
+
* are created FROM the class book definitions, exactly as upstream does at
|
|
6
|
+
* class-parse time - object.txt carries no book kinds).
|
|
7
|
+
*
|
|
8
|
+
* This module is pure player/object domain logic: learning, fail chances,
|
|
9
|
+
* mana, book lookups. The cast itself (running a spell's effect chain
|
|
10
|
+
* against the live GameState) lives in game/spell-cmd.ts, the same split as
|
|
11
|
+
* monster spells (mon/spell.ts vs game/mon-cast.ts).
|
|
12
|
+
*/
|
|
13
|
+
import type { ObjRegistry } from "../obj/bind.js";
|
|
14
|
+
import type { GameObject } from "../obj/object.js";
|
|
15
|
+
import type { ClassBook, ClassSpell, MagicRealm, PlayerClass } from "./types.js";
|
|
16
|
+
import type { Player } from "./player.js";
|
|
17
|
+
/** PY_SPELL_ flags (player.h). */
|
|
18
|
+
export declare const PY_SPELL: {
|
|
19
|
+
readonly LEARNED: 1;
|
|
20
|
+
readonly WORKED: 2;
|
|
21
|
+
readonly FORGOTTEN: 4;
|
|
22
|
+
};
|
|
23
|
+
/** Stat Table (INT/WIS) -- minimum spell failure rate (player-spell.c L49). */
|
|
24
|
+
export declare const adj_mag_fail: readonly number[];
|
|
25
|
+
/** Stat Table (INT/WIS) -- failure rate adjustment (player-spell.c L94). */
|
|
26
|
+
export declare const adj_mag_stat: readonly number[];
|
|
27
|
+
/**
|
|
28
|
+
* Create (or find) the object kind for every class book and stamp the
|
|
29
|
+
* numeric tval/sval back onto the bound ClassBook, exactly as upstream
|
|
30
|
+
* creates book kinds at class-parse time. Books shared between classes
|
|
31
|
+
* (e.g. the priest and paladin prayer books) resolve to one kind. Run once
|
|
32
|
+
* per bound registry, BEFORE building the allocation tables, so books
|
|
33
|
+
* generate in the dungeon with their book-properties commonness.
|
|
34
|
+
*/
|
|
35
|
+
export declare function registerBookKinds(reg: ObjRegistry, classes: readonly PlayerClass[]): void;
|
|
36
|
+
/** player_spells_init: size the spell flag/order arrays for the class. */
|
|
37
|
+
export declare function playerSpellsInit(player: Player): void;
|
|
38
|
+
/** class_magic_realms: the distinct realms the class casts from. */
|
|
39
|
+
export declare function classMagicRealms(cls: PlayerClass): MagicRealm[];
|
|
40
|
+
/** player_object_to_book: the class book an object is, or null. */
|
|
41
|
+
export declare function playerObjectToBook(player: Player, obj: GameObject): ClassBook | null;
|
|
42
|
+
/** spell_by_index: the class spell with the given class-wide sidx. */
|
|
43
|
+
export declare function spellByIndex(cls: PlayerClass, index: number): ClassSpell | null;
|
|
44
|
+
/** spell_collect_from_book: the sidx list of a book object's spells. */
|
|
45
|
+
export declare function spellCollectFromBook(player: Player, obj: GameObject): number[];
|
|
46
|
+
/** spell_book_count_spells over a tester. */
|
|
47
|
+
export declare function spellBookCountSpells(player: Player, obj: GameObject, tester: (player: Player, spell: number) => boolean): number;
|
|
48
|
+
/** spell_okay_to_cast. */
|
|
49
|
+
/**
|
|
50
|
+
* spell_okay_list (player-spell.c L320) is upstream's "does ANY spell in this
|
|
51
|
+
* list pass `spell_test`" fold over spellOkayToCast / spellOkayToStudy. Its one
|
|
52
|
+
* caller is spell_menu_new (ui-spell.c:233), which refuses to build the menu
|
|
53
|
+
* when no listed spell qualifies; the web shell's equivalent is the
|
|
54
|
+
* `items.every((it) => it.disabled)` check in castSpell / studySpell.
|
|
55
|
+
*/
|
|
56
|
+
export declare function spellOkayToCast(player: Player, spell: number): boolean;
|
|
57
|
+
/** spell_okay_to_study. */
|
|
58
|
+
export declare function spellOkayToStudy(player: Player, spellIndex: number): boolean;
|
|
59
|
+
/** spell_okay_to_browse. */
|
|
60
|
+
export declare function spellOkayToBrowse(player: Player, spellIndex: number): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* obj_can_browse (obj-util.c L775) over obj_kind_can_browse (L762): a book of
|
|
63
|
+
* one of this class's own realms. The BROWSE book picker's item_tester
|
|
64
|
+
* (ui-spell.c L340).
|
|
65
|
+
*/
|
|
66
|
+
export declare function objCanBrowse(player: Player, obj: GameObject): boolean;
|
|
67
|
+
/**
|
|
68
|
+
* obj_can_cast_from (obj-util.c L780): browsable AND holding at least one
|
|
69
|
+
* spell that passes spell_okay_to_cast. This - not obj_can_browse - is
|
|
70
|
+
* do_cmd_cast's book item_tester (cmd-obj.c L1129), so a book of the right
|
|
71
|
+
* realm whose spells are all still unlearned is NEVER offered, and the
|
|
72
|
+
* remaining books keep the letters they would have in the C.
|
|
73
|
+
*/
|
|
74
|
+
export declare function objCanCastFrom(player: Player, obj: GameObject): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* obj_can_study (obj-util.c L786): browsable AND holding at least one spell
|
|
77
|
+
* that passes spell_okay_to_study. do_cmd_study_spell's / do_cmd_study_book's
|
|
78
|
+
* book item_tester (cmd-obj.c L1187 / L1215) and the filter
|
|
79
|
+
* player_book_has_unlearned_spells scans with (player-util.c L1330).
|
|
80
|
+
*/
|
|
81
|
+
export declare function objCanStudy(player: Player, obj: GameObject): boolean;
|
|
82
|
+
/** average_spell_stat: the mean casting-stat index over the class realms. */
|
|
83
|
+
export declare function averageSpellStat(cls: PlayerClass, statInd: readonly number[]): number;
|
|
84
|
+
/** Hooks for unported inputs to spell_chance; all optional. */
|
|
85
|
+
export interface SpellChanceEnv {
|
|
86
|
+
/** player_has(PF_ZERO_FAIL / PF_UNLIGHT / PF_BEAM): class pflags. */
|
|
87
|
+
hasPf?: (pf: number) => boolean;
|
|
88
|
+
/** square_islit(cave, player->grid) for the UNLIGHT penalty. */
|
|
89
|
+
gridIsLit?: () => boolean;
|
|
90
|
+
/**
|
|
91
|
+
* player_of_has(p, OF_AFRAID) (player-spell.c:424): fear from ANY source -
|
|
92
|
+
* the timed TMD_AFRAID synonym OR an OF_AFRAID object/intrinsic flag. The
|
|
93
|
+
* game caller passes the computed player_state flags here; when omitted the
|
|
94
|
+
* fallback reads timed[TMD_AFRAID] only, which misses equipment-borne fear.
|
|
95
|
+
*/
|
|
96
|
+
afraid?: () => boolean;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* spell_chance: the percentage failure chance for a spell, from base fail,
|
|
100
|
+
* level and casting-stat adjustments, low mana, fear, stunning and amnesia.
|
|
101
|
+
*/
|
|
102
|
+
export declare function spellChance(player: Player, statInd: readonly number[], spellIndex: number, env?: SpellChanceEnv): number;
|
|
103
|
+
/** spell_learn: learn a spell and append it to the learn order. */
|
|
104
|
+
export declare function spellLearn(player: Player, spellIndex: number, msg?: (text: string) => void): void;
|
|
105
|
+
/**
|
|
106
|
+
* calc_spells (player-calcs.c L1268): how many spells the player may learn,
|
|
107
|
+
* forgetting or remembering spells as the allowance and level change.
|
|
108
|
+
* Updates player.upkeep.newSpells.
|
|
109
|
+
*/
|
|
110
|
+
export declare function calcSpells(player: Player, statInd: readonly number[], msg?: (text: string) => void): void;
|
|
111
|
+
/**
|
|
112
|
+
* state->cumber_armor on its own (player-calcs.c:1524-1529): is the worn armour
|
|
113
|
+
* heavy enough over the class allowance to cost this player mana? Split out of
|
|
114
|
+
* calcMana so a caller that must NOT disturb msp/csp - loading a save, where
|
|
115
|
+
* maximum mana is restored rather than recomputed - can still derive the flag
|
|
116
|
+
* the encumbrance messages diff against.
|
|
117
|
+
*/
|
|
118
|
+
export declare function cumberArmorFrom(player: Player, armorWeight: number): boolean;
|
|
119
|
+
/**
|
|
120
|
+
* calc_mana (player-calcs.c L1480): maximum mana from effective levels and
|
|
121
|
+
* the casting stat, penalized by heavy armor over the class allowance.
|
|
122
|
+
* `armorWeight` is the summed weight of worn body armor (the caller sums
|
|
123
|
+
* the non-weapon/bow/ring/amulet/light slots). Updates msp and clamps csp.
|
|
124
|
+
*
|
|
125
|
+
* Returns state->cumber_armor (L1503, L1528) - true when the worn armour is
|
|
126
|
+
* heavy enough to cost mana. Upstream stores it on player_state; the port's
|
|
127
|
+
* PlayerState carries the same field but calcBonuses cannot fill it (the mana
|
|
128
|
+
* calc runs in the session layer afterwards), so it is returned here for the
|
|
129
|
+
* caller to record. It had been left permanently false, which is why the
|
|
130
|
+
* armour-encumbrance messages could never fire even once they existed.
|
|
131
|
+
*/
|
|
132
|
+
export declare function calcMana(player: Player, statInd: readonly number[], armorWeight: number): boolean;
|
|
133
|
+
/**
|
|
134
|
+
* player_restore_mana (player.c:351) - DEAD IN 4.2.6.
|
|
135
|
+
*
|
|
136
|
+
* Nothing calls it anywhere in the reference tree. The mana-restoring effects
|
|
137
|
+
* all take the RESTORE_MANA path in effect-handler-general.c, which does its
|
|
138
|
+
* own arithmetic and prints its own message; this function's
|
|
139
|
+
* "You feel some of your energies returning." never reaches an upstream
|
|
140
|
+
* player. Returns whether csp actually moved, as the C does.
|
|
141
|
+
*
|
|
142
|
+
* @param msg upstream's unconditional msg(); optional here so a caller can
|
|
143
|
+
* route it, since core has no ambient message sink at this layer.
|
|
144
|
+
*/
|
|
145
|
+
export declare function playerRestoreMana(player: Player, amt: number, msg?: (text: string) => void): boolean;
|
|
146
|
+
//# sourceMappingURL=spell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spell.d.ts","sourceRoot":"","sources":["../../src/player/spell.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGlD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAO1C,kCAAkC;AAClC,eAAO,MAAM,QAAQ;;;;CAA4D,CAAC;AAElF,+EAA+E;AAC/E,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAGzC,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAGzC,CAAC;AA0BF;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,SAAS,WAAW,EAAE,GAC9B,IAAI,CAyFN;AAMD,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAKrD;AAED,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,WAAW,GAAG,UAAU,EAAE,CAS/D;AAED,mEAAmE;AACnE,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,UAAU,GACd,SAAS,GAAG,IAAI,CAKlB;AAED,sEAAsE;AACtE,wBAAgB,YAAY,CAC1B,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,MAAM,GACZ,UAAU,GAAG,IAAI,CAUnB;AAED,wEAAwE;AACxE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,UAAU,GACd,MAAM,EAAE,CAIV;AAED,6CAA6C;AAC7C,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,GACjD,MAAM,CAIR;AAED,0BAA0B;AAC1B;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAEtE;AAED,2BAA2B;AAC3B,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAO5E;AAED,4BAA4B;AAC5B,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAG7E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAErE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAKvE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAKpE;AAED,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,MAAM,CAOR;AAED,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B,qEAAqE;IACrE,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IAChC,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC;IAC1B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,cAAmB,GACvB,MAAM,CAgDR;AAED,mEAAmE;AACnE,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC3B,IAAI,CAsBN;AAMD;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC3B,IAAI,CA2FN;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAG5E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,WAAW,EAAE,MAAM,GAClB,OAAO,CAmCT;AAcD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC3B,OAAO,CAOT"}
|
|
@@ -0,0 +1,519 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Player spells, ported from reference/src/player-spell.c (Angband 4.2.6)
|
|
3
|
+
* plus the spell-related pieces of player-calcs.c (calc_mana, calc_spells,
|
|
4
|
+
* average_spell_stat) and init.c's write_book_kind (spellbook object kinds
|
|
5
|
+
* are created FROM the class book definitions, exactly as upstream does at
|
|
6
|
+
* class-parse time - object.txt carries no book kinds).
|
|
7
|
+
*
|
|
8
|
+
* This module is pure player/object domain logic: learning, fail chances,
|
|
9
|
+
* mana, book lookups. The cast itself (running a spell's effect chain
|
|
10
|
+
* against the live GameState) lives in game/spell-cmd.ts, the same split as
|
|
11
|
+
* monster spells (mon/spell.ts vs game/mon-cast.ts).
|
|
12
|
+
*/
|
|
13
|
+
import { TMD, PF, TVAL_ENTRIES } from "../generated/index.js";
|
|
14
|
+
import { newElemInfo, newModifiersRv, newOfFlags } from "../obj/types.js";
|
|
15
|
+
import { adj_mag_mana, adj_mag_study } from "./calcs.js";
|
|
16
|
+
/* ------------------------------------------------------------------ *
|
|
17
|
+
* Constants and tables.
|
|
18
|
+
* ------------------------------------------------------------------ */
|
|
19
|
+
/** PY_SPELL_ flags (player.h). */
|
|
20
|
+
export const PY_SPELL = { LEARNED: 0x01, WORKED: 0x02, FORGOTTEN: 0x04 };
|
|
21
|
+
/** Stat Table (INT/WIS) -- minimum spell failure rate (player-spell.c L49). */
|
|
22
|
+
export const adj_mag_fail = [
|
|
23
|
+
99, 99, 99, 99, 99, 50, 30, 20, 15, 12, 11, 10, 9, 8, 7, 6, 6, 5, 5, 5, 4, 4,
|
|
24
|
+
4, 4, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0,
|
|
25
|
+
];
|
|
26
|
+
/** Stat Table (INT/WIS) -- failure rate adjustment (player-spell.c L94). */
|
|
27
|
+
export const adj_mag_stat = [
|
|
28
|
+
-5, -4, -3, -3, -2, -1, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
|
|
29
|
+
15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57,
|
|
30
|
+
];
|
|
31
|
+
const at = (table, i) => table[Math.max(0, Math.min(i, table.length - 1))] ?? 0;
|
|
32
|
+
function tvalByTextName(name) {
|
|
33
|
+
const idx = TVAL_ENTRIES.findIndex((t) => t.textName === name);
|
|
34
|
+
if (idx < 0)
|
|
35
|
+
throw new Error(`spell: unknown book tval "${name}"`);
|
|
36
|
+
return idx;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Create (or find) the object kind for every class book and stamp the
|
|
40
|
+
* numeric tval/sval back onto the bound ClassBook, exactly as upstream
|
|
41
|
+
* creates book kinds at class-parse time. Books shared between classes
|
|
42
|
+
* (e.g. the priest and paladin prayer books) resolve to one kind. Run once
|
|
43
|
+
* per bound registry, BEFORE building the allocation tables, so books
|
|
44
|
+
* generate in the dungeon with their book-properties commonness.
|
|
45
|
+
*/
|
|
46
|
+
export function registerBookKinds(reg, classes) {
|
|
47
|
+
for (const cls of classes) {
|
|
48
|
+
for (const book of cls.magic.books) {
|
|
49
|
+
const tval = tvalByTextName(book.tval);
|
|
50
|
+
/* Check we haven't already made this book. */
|
|
51
|
+
const existing = reg.kinds.find((k) => k.tval === tval && k.name === book.name);
|
|
52
|
+
if (existing) {
|
|
53
|
+
book.tvalIdx = tval;
|
|
54
|
+
book.sval = existing.sval;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
/* The next sval for this tval. */
|
|
58
|
+
let sval = 0;
|
|
59
|
+
for (const k of reg.kinds) {
|
|
60
|
+
if (k.tval === tval && k.sval > sval)
|
|
61
|
+
sval = k.sval;
|
|
62
|
+
}
|
|
63
|
+
sval += 1;
|
|
64
|
+
const base = reg.bases[tval];
|
|
65
|
+
if (!base)
|
|
66
|
+
throw new Error(`spell: no object base for tval ${tval}`);
|
|
67
|
+
const graphics = book.graphics;
|
|
68
|
+
const props = book.properties;
|
|
69
|
+
let allocMin = 0;
|
|
70
|
+
let allocMax = 0;
|
|
71
|
+
if (props?.minmax) {
|
|
72
|
+
const m = /^(\d+)\s+to\s+(\d+)$/.exec(props.minmax);
|
|
73
|
+
if (m) {
|
|
74
|
+
allocMin = parseInt(m[1], 10);
|
|
75
|
+
allocMax = parseInt(m[2], 10);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const kind = {
|
|
79
|
+
name: book.name,
|
|
80
|
+
text: "",
|
|
81
|
+
base,
|
|
82
|
+
kidx: reg.kinds.length,
|
|
83
|
+
tval,
|
|
84
|
+
sval,
|
|
85
|
+
pval: { base: 0, dice: 0, sides: 0, mBonus: 0 },
|
|
86
|
+
toH: { base: 0, dice: 0, sides: 0, mBonus: 0 },
|
|
87
|
+
toD: { base: 0, dice: 0, sides: 0, mBonus: 0 },
|
|
88
|
+
toA: { base: 0, dice: 0, sides: 0, mBonus: 0 },
|
|
89
|
+
ac: 0,
|
|
90
|
+
dd: 1,
|
|
91
|
+
ds: 1,
|
|
92
|
+
weight: 30,
|
|
93
|
+
cost: props?.cost ?? 0,
|
|
94
|
+
flags: newOfFlags(),
|
|
95
|
+
kindFlags: base.kindFlags.clone(),
|
|
96
|
+
modifiers: newModifiersRv(),
|
|
97
|
+
elInfo: newElemInfo(),
|
|
98
|
+
brands: null,
|
|
99
|
+
slays: null,
|
|
100
|
+
curses: null,
|
|
101
|
+
dAttr: graphics?.color ?? "R",
|
|
102
|
+
dChar: graphics?.glyph ?? "*",
|
|
103
|
+
allocProb: props?.common ?? 0,
|
|
104
|
+
allocMin,
|
|
105
|
+
allocMax,
|
|
106
|
+
level: allocMin,
|
|
107
|
+
activation: null,
|
|
108
|
+
effect: null,
|
|
109
|
+
power: 0,
|
|
110
|
+
effectMsg: "",
|
|
111
|
+
visMsg: "",
|
|
112
|
+
time: { base: 0, dice: 0, sides: 0, mBonus: 0 },
|
|
113
|
+
charge: { base: 0, dice: 0, sides: 0, mBonus: 0 },
|
|
114
|
+
genMultProb: 0,
|
|
115
|
+
stackSize: { base: 1, dice: 0, sides: 0, mBonus: 0 },
|
|
116
|
+
};
|
|
117
|
+
/* NOTE ON ORDER (init.c:208-232 write_book_kind): upstream creates book
|
|
118
|
+
* kinds while parsing class.txt - BEFORE the special-artifact dummies -
|
|
119
|
+
* and bumps ordinary_kind_max with each one, so upstream's k_info runs
|
|
120
|
+
* [object.txt kinds][books][INSTA_ART dummies] and "kidx >=
|
|
121
|
+
* ordinary_kind_max" means exactly "is a dummy". Here the dummies are
|
|
122
|
+
* appended during bindCore and the books after it, so books sit ABOVE
|
|
123
|
+
* ordinaryKindCount. Anything that wants "is this a special-artifact
|
|
124
|
+
* dummy?" must therefore test the INSTA_ART flag, not the index - which
|
|
125
|
+
* is what flavorInit does when it marks the ordinary kinds aware. */
|
|
126
|
+
reg.kinds.push(kind);
|
|
127
|
+
book.tvalIdx = tval;
|
|
128
|
+
book.sval = sval;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/* ------------------------------------------------------------------ *
|
|
133
|
+
* player-spell.c proper.
|
|
134
|
+
* ------------------------------------------------------------------ */
|
|
135
|
+
/** player_spells_init: size the spell flag/order arrays for the class. */
|
|
136
|
+
export function playerSpellsInit(player) {
|
|
137
|
+
const num = player.cls.magic.totalSpells;
|
|
138
|
+
if (!num)
|
|
139
|
+
return;
|
|
140
|
+
player.spellFlags = new Array(num).fill(0);
|
|
141
|
+
player.spellOrder = new Array(num).fill(99);
|
|
142
|
+
}
|
|
143
|
+
/** class_magic_realms: the distinct realms the class casts from. */
|
|
144
|
+
export function classMagicRealms(cls) {
|
|
145
|
+
const realms = [];
|
|
146
|
+
if (!cls.magic.totalSpells)
|
|
147
|
+
return realms;
|
|
148
|
+
for (const book of cls.magic.books) {
|
|
149
|
+
if (!realms.some((r) => r.name === book.realm.name)) {
|
|
150
|
+
realms.push(book.realm);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return realms;
|
|
154
|
+
}
|
|
155
|
+
/** player_object_to_book: the class book an object is, or null. */
|
|
156
|
+
export function playerObjectToBook(player, obj) {
|
|
157
|
+
for (const book of player.cls.magic.books) {
|
|
158
|
+
if (obj.tval === book.tvalIdx && obj.sval === book.sval)
|
|
159
|
+
return book;
|
|
160
|
+
}
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
/** spell_by_index: the class spell with the given class-wide sidx. */
|
|
164
|
+
export function spellByIndex(cls, index) {
|
|
165
|
+
const magic = cls.magic;
|
|
166
|
+
if (index < 0 || index >= magic.totalSpells)
|
|
167
|
+
return null;
|
|
168
|
+
let book = 0;
|
|
169
|
+
let count = 0;
|
|
170
|
+
while (count + (magic.books[book]?.numSpells ?? 0) - 1 < index) {
|
|
171
|
+
count += magic.books[book].numSpells;
|
|
172
|
+
book++;
|
|
173
|
+
}
|
|
174
|
+
return magic.books[book]?.spells[index - count] ?? null;
|
|
175
|
+
}
|
|
176
|
+
/** spell_collect_from_book: the sidx list of a book object's spells. */
|
|
177
|
+
export function spellCollectFromBook(player, obj) {
|
|
178
|
+
const book = playerObjectToBook(player, obj);
|
|
179
|
+
if (!book)
|
|
180
|
+
return [];
|
|
181
|
+
return book.spells.map((s) => s.sidx);
|
|
182
|
+
}
|
|
183
|
+
/** spell_book_count_spells over a tester. */
|
|
184
|
+
export function spellBookCountSpells(player, obj, tester) {
|
|
185
|
+
const book = playerObjectToBook(player, obj);
|
|
186
|
+
if (!book)
|
|
187
|
+
return 0;
|
|
188
|
+
return book.spells.filter((s) => tester(player, s.sidx)).length;
|
|
189
|
+
}
|
|
190
|
+
/** spell_okay_to_cast. */
|
|
191
|
+
/**
|
|
192
|
+
* spell_okay_list (player-spell.c L320) is upstream's "does ANY spell in this
|
|
193
|
+
* list pass `spell_test`" fold over spellOkayToCast / spellOkayToStudy. Its one
|
|
194
|
+
* caller is spell_menu_new (ui-spell.c:233), which refuses to build the menu
|
|
195
|
+
* when no listed spell qualifies; the web shell's equivalent is the
|
|
196
|
+
* `items.every((it) => it.disabled)` check in castSpell / studySpell.
|
|
197
|
+
*/
|
|
198
|
+
export function spellOkayToCast(player, spell) {
|
|
199
|
+
return ((player.spellFlags[spell] ?? 0) & PY_SPELL.LEARNED) !== 0;
|
|
200
|
+
}
|
|
201
|
+
/** spell_okay_to_study. */
|
|
202
|
+
export function spellOkayToStudy(player, spellIndex) {
|
|
203
|
+
const spell = spellByIndex(player.cls, spellIndex);
|
|
204
|
+
return (spell !== null &&
|
|
205
|
+
spell.level <= player.lev &&
|
|
206
|
+
((player.spellFlags[spellIndex] ?? 0) & PY_SPELL.LEARNED) === 0);
|
|
207
|
+
}
|
|
208
|
+
/** spell_okay_to_browse. */
|
|
209
|
+
export function spellOkayToBrowse(player, spellIndex) {
|
|
210
|
+
const spell = spellByIndex(player.cls, spellIndex);
|
|
211
|
+
return spell !== null && spell.level < 99;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* obj_can_browse (obj-util.c L775) over obj_kind_can_browse (L762): a book of
|
|
215
|
+
* one of this class's own realms. The BROWSE book picker's item_tester
|
|
216
|
+
* (ui-spell.c L340).
|
|
217
|
+
*/
|
|
218
|
+
export function objCanBrowse(player, obj) {
|
|
219
|
+
return playerObjectToBook(player, obj) !== null;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* obj_can_cast_from (obj-util.c L780): browsable AND holding at least one
|
|
223
|
+
* spell that passes spell_okay_to_cast. This - not obj_can_browse - is
|
|
224
|
+
* do_cmd_cast's book item_tester (cmd-obj.c L1129), so a book of the right
|
|
225
|
+
* realm whose spells are all still unlearned is NEVER offered, and the
|
|
226
|
+
* remaining books keep the letters they would have in the C.
|
|
227
|
+
*/
|
|
228
|
+
export function objCanCastFrom(player, obj) {
|
|
229
|
+
return (objCanBrowse(player, obj) &&
|
|
230
|
+
spellBookCountSpells(player, obj, spellOkayToCast) > 0);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* obj_can_study (obj-util.c L786): browsable AND holding at least one spell
|
|
234
|
+
* that passes spell_okay_to_study. do_cmd_study_spell's / do_cmd_study_book's
|
|
235
|
+
* book item_tester (cmd-obj.c L1187 / L1215) and the filter
|
|
236
|
+
* player_book_has_unlearned_spells scans with (player-util.c L1330).
|
|
237
|
+
*/
|
|
238
|
+
export function objCanStudy(player, obj) {
|
|
239
|
+
return (objCanBrowse(player, obj) &&
|
|
240
|
+
spellBookCountSpells(player, obj, spellOkayToStudy) > 0);
|
|
241
|
+
}
|
|
242
|
+
/** average_spell_stat: the mean casting-stat index over the class realms. */
|
|
243
|
+
export function averageSpellStat(cls, statInd) {
|
|
244
|
+
const realms = classMagicRealms(cls);
|
|
245
|
+
const count = realms.length;
|
|
246
|
+
if (!count)
|
|
247
|
+
return 0;
|
|
248
|
+
let sum = 0;
|
|
249
|
+
for (const r of realms)
|
|
250
|
+
sum += statInd[r.stat] ?? 0;
|
|
251
|
+
return Math.trunc((sum + count - 1) / count);
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* spell_chance: the percentage failure chance for a spell, from base fail,
|
|
255
|
+
* level and casting-stat adjustments, low mana, fear, stunning and amnesia.
|
|
256
|
+
*/
|
|
257
|
+
export function spellChance(player, statInd, spellIndex, env = {}) {
|
|
258
|
+
if (!player.cls.magic.totalSpells)
|
|
259
|
+
return 100;
|
|
260
|
+
const spell = spellByIndex(player.cls, spellIndex);
|
|
261
|
+
if (!spell)
|
|
262
|
+
return 100;
|
|
263
|
+
const hasPf = env.hasPf ?? ((pf) => player.cls.pflags.has(pf));
|
|
264
|
+
const statIdx = statInd[spell.realm.stat] ?? 0;
|
|
265
|
+
/* Base rate, adjusted by effective level and the casting stat. */
|
|
266
|
+
let chance = spell.fail;
|
|
267
|
+
chance -= 3 * (player.lev - spell.level);
|
|
268
|
+
chance -= at(adj_mag_stat, statIdx);
|
|
269
|
+
/* Not enough mana to cast. */
|
|
270
|
+
if (spell.mana > player.csp)
|
|
271
|
+
chance += 5 * (spell.mana - player.csp);
|
|
272
|
+
/* Get the minimum failure rate for the casting stat level. */
|
|
273
|
+
let minfail = at(adj_mag_fail, statIdx);
|
|
274
|
+
/* Non zero-fail characters never get better than 5 percent. */
|
|
275
|
+
if (!hasPf(PF.ZERO_FAIL) && minfail < 5)
|
|
276
|
+
minfail = 5;
|
|
277
|
+
/* Necromancers are punished by being on lit squares. */
|
|
278
|
+
if (hasPf(PF.UNLIGHT) && (env.gridIsLit?.() ?? false))
|
|
279
|
+
chance += 25;
|
|
280
|
+
/* Fear makes spells harder (before minfail). Upstream reads player_of_has(
|
|
281
|
+
* OF_AFRAID); the fallback below covers only the timed synonym, so the game
|
|
282
|
+
* caller supplies env.afraid from the computed player_state flags. */
|
|
283
|
+
const afraid = env.afraid ?? (() => (player.timed[TMD.AFRAID] ?? 0) > 0);
|
|
284
|
+
if (afraid())
|
|
285
|
+
chance += 20;
|
|
286
|
+
/* Minimal and maximal failure rate. */
|
|
287
|
+
if (chance < minfail)
|
|
288
|
+
chance = minfail;
|
|
289
|
+
if (chance > 50)
|
|
290
|
+
chance = 50;
|
|
291
|
+
/* Stunning makes spells harder (after minfail). */
|
|
292
|
+
const stun = player.timed[TMD.STUN] ?? 0;
|
|
293
|
+
if (stun > 50)
|
|
294
|
+
chance += 25;
|
|
295
|
+
else if (stun)
|
|
296
|
+
chance += 15;
|
|
297
|
+
/* Amnesia makes spells very difficult. */
|
|
298
|
+
if ((player.timed[TMD.AMNESIA] ?? 0) > 0) {
|
|
299
|
+
chance = 50 + Math.trunc(chance / 2);
|
|
300
|
+
}
|
|
301
|
+
/* Always a 5 percent chance of working. */
|
|
302
|
+
if (chance > 95)
|
|
303
|
+
chance = 95;
|
|
304
|
+
return chance;
|
|
305
|
+
}
|
|
306
|
+
/** spell_learn: learn a spell and append it to the learn order. */
|
|
307
|
+
export function spellLearn(player, spellIndex, msg) {
|
|
308
|
+
const spell = spellByIndex(player.cls, spellIndex);
|
|
309
|
+
if (!spell)
|
|
310
|
+
return;
|
|
311
|
+
player.spellFlags[spellIndex] = (player.spellFlags[spellIndex] ?? 0) | PY_SPELL.LEARNED;
|
|
312
|
+
/* Find the next open entry in spell_order[]. */
|
|
313
|
+
for (let i = 0; i < player.cls.magic.totalSpells; i++) {
|
|
314
|
+
if (player.spellOrder[i] === 99) {
|
|
315
|
+
player.spellOrder[i] = spellIndex;
|
|
316
|
+
break;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
msg?.(`You have learned the ${spell.realm.spellNoun} of ${spell.name}.`);
|
|
320
|
+
player.upkeep.newSpells--;
|
|
321
|
+
if (player.upkeep.newSpells > 0) {
|
|
322
|
+
msg?.(`You can learn ${player.upkeep.newSpells} more ${spell.realm.spellNoun}` +
|
|
323
|
+
`${player.upkeep.newSpells !== 1 ? "s" : ""}.`);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
/* ------------------------------------------------------------------ *
|
|
327
|
+
* calc_spells / calc_mana (player-calcs.c).
|
|
328
|
+
* ------------------------------------------------------------------ */
|
|
329
|
+
/**
|
|
330
|
+
* calc_spells (player-calcs.c L1268): how many spells the player may learn,
|
|
331
|
+
* forgetting or remembering spells as the allowance and level change.
|
|
332
|
+
* Updates player.upkeep.newSpells.
|
|
333
|
+
*/
|
|
334
|
+
export function calcSpells(player, statInd, msg) {
|
|
335
|
+
const magic = player.cls.magic;
|
|
336
|
+
const numTotal = magic.totalSpells;
|
|
337
|
+
if (!numTotal)
|
|
338
|
+
return;
|
|
339
|
+
/* Save the new_spells value (player-calcs.c:1288) for the change check. */
|
|
340
|
+
const oldSpells = player.upkeep.newSpells;
|
|
341
|
+
/* Determine the number of spells allowed. */
|
|
342
|
+
let levels = player.lev - magic.spellFirst + 1;
|
|
343
|
+
if (levels < 0)
|
|
344
|
+
levels = 0;
|
|
345
|
+
const percentSpells = at(adj_mag_study, averageSpellStat(player.cls, statInd));
|
|
346
|
+
const numAllowed = Math.trunc((percentSpells * levels + 50) / 100);
|
|
347
|
+
/* Count the number of spells we know. */
|
|
348
|
+
let numKnown = 0;
|
|
349
|
+
for (let j = 0; j < numTotal; j++) {
|
|
350
|
+
if ((player.spellFlags[j] ?? 0) & PY_SPELL.LEARNED)
|
|
351
|
+
numKnown++;
|
|
352
|
+
}
|
|
353
|
+
player.upkeep.newSpells = numAllowed - numKnown;
|
|
354
|
+
/* Forget spells which are too hard. */
|
|
355
|
+
for (let i = numTotal - 1; i >= 0; i--) {
|
|
356
|
+
const j = player.spellOrder[i] ?? 99;
|
|
357
|
+
if (j >= 99)
|
|
358
|
+
continue;
|
|
359
|
+
const spell = spellByIndex(player.cls, j);
|
|
360
|
+
if (!spell || spell.level <= player.lev)
|
|
361
|
+
continue;
|
|
362
|
+
if ((player.spellFlags[j] ?? 0) & PY_SPELL.LEARNED) {
|
|
363
|
+
player.spellFlags[j] =
|
|
364
|
+
((player.spellFlags[j] ?? 0) | PY_SPELL.FORGOTTEN) & ~PY_SPELL.LEARNED;
|
|
365
|
+
msg?.(`You have forgotten the ${spell.realm.spellNoun} of ${spell.name}.`);
|
|
366
|
+
player.upkeep.newSpells++;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
/* Forget spells if we know too many spells. */
|
|
370
|
+
for (let i = numTotal - 1; i >= 0; i--) {
|
|
371
|
+
if (player.upkeep.newSpells >= 0)
|
|
372
|
+
break;
|
|
373
|
+
const j = player.spellOrder[i] ?? 99;
|
|
374
|
+
if (j >= 99)
|
|
375
|
+
continue;
|
|
376
|
+
const spell = spellByIndex(player.cls, j);
|
|
377
|
+
if (spell && (player.spellFlags[j] ?? 0) & PY_SPELL.LEARNED) {
|
|
378
|
+
player.spellFlags[j] =
|
|
379
|
+
((player.spellFlags[j] ?? 0) | PY_SPELL.FORGOTTEN) & ~PY_SPELL.LEARNED;
|
|
380
|
+
msg?.(`You have forgotten the ${spell.realm.spellNoun} of ${spell.name}.`);
|
|
381
|
+
player.upkeep.newSpells++;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
/* Check for spells to remember. */
|
|
385
|
+
for (let i = 0; i < numTotal; i++) {
|
|
386
|
+
if (player.upkeep.newSpells <= 0)
|
|
387
|
+
break;
|
|
388
|
+
const j = player.spellOrder[i] ?? 99;
|
|
389
|
+
if (j >= 99)
|
|
390
|
+
break;
|
|
391
|
+
const spell = spellByIndex(player.cls, j);
|
|
392
|
+
if (!spell || spell.level > player.lev)
|
|
393
|
+
continue;
|
|
394
|
+
if ((player.spellFlags[j] ?? 0) & PY_SPELL.FORGOTTEN) {
|
|
395
|
+
player.spellFlags[j] =
|
|
396
|
+
((player.spellFlags[j] ?? 0) & ~PY_SPELL.FORGOTTEN) | PY_SPELL.LEARNED;
|
|
397
|
+
msg?.(`You have remembered the ${spell.realm.spellNoun} of ${spell.name}.`);
|
|
398
|
+
player.upkeep.newSpells--;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
/* Cannot learn more spells than exist. */
|
|
402
|
+
let learnable = 0;
|
|
403
|
+
for (let j = 0; j < numTotal; j++) {
|
|
404
|
+
const spell = spellByIndex(player.cls, j);
|
|
405
|
+
if (!spell || spell.level > player.lev || spell.level === 0)
|
|
406
|
+
continue;
|
|
407
|
+
if ((player.spellFlags[j] ?? 0) & PY_SPELL.LEARNED)
|
|
408
|
+
continue;
|
|
409
|
+
learnable++;
|
|
410
|
+
}
|
|
411
|
+
if (player.upkeep.newSpells > learnable) {
|
|
412
|
+
player.upkeep.newSpells = learnable;
|
|
413
|
+
}
|
|
414
|
+
/* Spell count changed: announce the new allowance (player-calcs.c:1433-1466).
|
|
415
|
+
The realm spell_noun list is pluralised only when >1 new spell. The
|
|
416
|
+
old!=new guard means load/boot recalcs (newSpells restored from save) stay
|
|
417
|
+
silent - only a real change (level-up, stat shift) speaks. */
|
|
418
|
+
if (oldSpells !== player.upkeep.newSpells && player.upkeep.newSpells > 0) {
|
|
419
|
+
const realms = classMagicRealms(player.cls);
|
|
420
|
+
const plural = player.upkeep.newSpells > 1;
|
|
421
|
+
const suffix = plural ? "s" : "";
|
|
422
|
+
let buf = realms.length > 0 ? `${realms[0].spellNoun}${suffix}` : "spells";
|
|
423
|
+
for (let i = 1; i < realms.length; i++) {
|
|
424
|
+
buf += i < realms.length - 1 ? ", " : " or ";
|
|
425
|
+
buf += `${realms[i].spellNoun}${suffix}`;
|
|
426
|
+
}
|
|
427
|
+
msg?.(`You can learn ${player.upkeep.newSpells} more ${buf}.`);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* state->cumber_armor on its own (player-calcs.c:1524-1529): is the worn armour
|
|
432
|
+
* heavy enough over the class allowance to cost this player mana? Split out of
|
|
433
|
+
* calcMana so a caller that must NOT disturb msp/csp - loading a save, where
|
|
434
|
+
* maximum mana is restored rather than recomputed - can still derive the flag
|
|
435
|
+
* the encumbrance messages diff against.
|
|
436
|
+
*/
|
|
437
|
+
export function cumberArmorFrom(player, armorWeight) {
|
|
438
|
+
if (!player.cls.magic.totalSpells)
|
|
439
|
+
return false;
|
|
440
|
+
return Math.trunc((armorWeight - player.cls.magic.spellWeight) / 10) > 0;
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* calc_mana (player-calcs.c L1480): maximum mana from effective levels and
|
|
444
|
+
* the casting stat, penalized by heavy armor over the class allowance.
|
|
445
|
+
* `armorWeight` is the summed weight of worn body armor (the caller sums
|
|
446
|
+
* the non-weapon/bow/ring/amulet/light slots). Updates msp and clamps csp.
|
|
447
|
+
*
|
|
448
|
+
* Returns state->cumber_armor (L1503, L1528) - true when the worn armour is
|
|
449
|
+
* heavy enough to cost mana. Upstream stores it on player_state; the port's
|
|
450
|
+
* PlayerState carries the same field but calcBonuses cannot fill it (the mana
|
|
451
|
+
* calc runs in the session layer afterwards), so it is returned here for the
|
|
452
|
+
* caller to record. It had been left permanently false, which is why the
|
|
453
|
+
* armour-encumbrance messages could never fire even once they existed.
|
|
454
|
+
*/
|
|
455
|
+
export function calcMana(player, statInd, armorWeight) {
|
|
456
|
+
if (!player.cls.magic.totalSpells) {
|
|
457
|
+
player.msp = 0;
|
|
458
|
+
player.csp = 0;
|
|
459
|
+
player.cspFrac = 0;
|
|
460
|
+
/* A non-caster leaves cumber_armor at its L1503 reset (L1483-1487 returns
|
|
461
|
+
* before the armour weigh-in). */
|
|
462
|
+
return false;
|
|
463
|
+
}
|
|
464
|
+
/* Extract "effective" player level. */
|
|
465
|
+
const levels = player.lev - player.cls.magic.spellFirst + 1;
|
|
466
|
+
let msp = 0;
|
|
467
|
+
if (levels > 0) {
|
|
468
|
+
msp = 1;
|
|
469
|
+
msp += Math.trunc((at(adj_mag_mana, averageSpellStat(player.cls, statInd)) * levels) / 100);
|
|
470
|
+
}
|
|
471
|
+
/* Heavy armor penalizes mana (L1524-1532). */
|
|
472
|
+
const over = Math.trunc((armorWeight - player.cls.magic.spellWeight) / 10);
|
|
473
|
+
const cumberArmor = cumberArmorFrom(player, armorWeight);
|
|
474
|
+
if (cumberArmor)
|
|
475
|
+
msp -= over;
|
|
476
|
+
if (msp < 0)
|
|
477
|
+
msp = 0;
|
|
478
|
+
if (player.msp !== msp) {
|
|
479
|
+
player.msp = msp;
|
|
480
|
+
if (player.csp >= msp) {
|
|
481
|
+
player.csp = msp;
|
|
482
|
+
player.cspFrac = 0;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
return cumberArmor;
|
|
486
|
+
}
|
|
487
|
+
/* ------------------------------------------------------------------ *
|
|
488
|
+
* DEAD CODE IN ANGBAND 4.2.6, ported and cordoned.
|
|
489
|
+
*
|
|
490
|
+
* Everything below this line has NO CALLER in the reference tree. It is
|
|
491
|
+
* ported because the port is a translation of 4.2.6, not of the reachable
|
|
492
|
+
* subset of 4.2.6: a mod, a future upstream release, or a reader comparing the
|
|
493
|
+
* two trees should find the function where the C has it, behaving as the C
|
|
494
|
+
* says. Nothing in core may call these - if a caller ever appears upstream,
|
|
495
|
+
* the call-site census (packages/cli/src/call-census.ts) will report the port
|
|
496
|
+
* symbol as unused and the pairing can be made then.
|
|
497
|
+
* ------------------------------------------------------------------ */
|
|
498
|
+
/**
|
|
499
|
+
* player_restore_mana (player.c:351) - DEAD IN 4.2.6.
|
|
500
|
+
*
|
|
501
|
+
* Nothing calls it anywhere in the reference tree. The mana-restoring effects
|
|
502
|
+
* all take the RESTORE_MANA path in effect-handler-general.c, which does its
|
|
503
|
+
* own arithmetic and prints its own message; this function's
|
|
504
|
+
* "You feel some of your energies returning." never reaches an upstream
|
|
505
|
+
* player. Returns whether csp actually moved, as the C does.
|
|
506
|
+
*
|
|
507
|
+
* @param msg upstream's unconditional msg(); optional here so a caller can
|
|
508
|
+
* route it, since core has no ambient message sink at this layer.
|
|
509
|
+
*/
|
|
510
|
+
export function playerRestoreMana(player, amt, msg) {
|
|
511
|
+
const oldCsp = player.csp;
|
|
512
|
+
player.csp += amt;
|
|
513
|
+
if (player.csp > player.msp)
|
|
514
|
+
player.csp = player.msp;
|
|
515
|
+
/* PR_MANA redraw is the front end's business. */
|
|
516
|
+
msg?.("You feel some of your energies returning.");
|
|
517
|
+
return player.csp !== oldCsp;
|
|
518
|
+
}
|
|
519
|
+
//# sourceMappingURL=spell.js.map
|