@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,849 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The player's map knowledge, a reduction of the upstream player->cave twin
|
|
3
|
+
* chunk (cave.c cave_know_*, cave-square.c square_memorize / square_forget /
|
|
4
|
+
* square_know_pile / square_sense_pile, and cave-view.c note_spot).
|
|
5
|
+
*
|
|
6
|
+
* Upstream duplicates the whole chunk for the player's knowledge so memory
|
|
7
|
+
* can go stale (you remember the door you saw, not the open floor it has
|
|
8
|
+
* since become). This port keeps the same staleness property with a flat
|
|
9
|
+
* remembered-feat array plus a remembered-floor-object marker per grid;
|
|
10
|
+
* that is exactly what detection, magic mapping and the renderer's
|
|
11
|
+
* remembered-terrain display need. The full twin (known traps as objects,
|
|
12
|
+
* per-object known twins) rides later batches and is ledgered.
|
|
13
|
+
*
|
|
14
|
+
* noteSpots() is the note_spot pass over the current field of view: every
|
|
15
|
+
* SEEN grid is memorized with its floor pile. It then runs updateMonsters()
|
|
16
|
+
* - the faithful port of update_mon (mon-util.c) - to refresh every live
|
|
17
|
+
* monster's visibility flags from telepathy, infravision, see-invisible and
|
|
18
|
+
* illumination. The session and front end call it after every updateView.
|
|
19
|
+
*
|
|
20
|
+
* update_mon only READS MFLAG_MARK; the detection-fade lifecycle
|
|
21
|
+
* (MFLAG_MARK / MFLAG_SHOW clearing, game-world.c process_world) lives in
|
|
22
|
+
* tickMonsterMarks() until the world-clock port absorbs it.
|
|
23
|
+
*/
|
|
24
|
+
import { FEAT, MFLAG, OF, RF, SQUARE, TF, TMD } from "../generated/index.js";
|
|
25
|
+
import { DDGRID_DDD, loc, locEq, locSum } from "../loc.js";
|
|
26
|
+
import { featIsBright, featIsGranite, featIsMagma, featIsPassable, featIsProjectable, featIsQuartz, } from "../world/chunk.js";
|
|
27
|
+
import { caveIlluminate } from "../gen/cave.js";
|
|
28
|
+
import { squareIsNoEsp, squareIsSeen, squareIsView, } from "../world/view.js";
|
|
29
|
+
import { getLore, loreCountU16 } from "../mon/lore.js";
|
|
30
|
+
import { monsterIsCamouflaged, monsterIsEspDetectable, monsterIsInView, monsterIsInvisible, monsterIsVisible, } from "../mon/predicate.js";
|
|
31
|
+
import { disturb } from "./player-path.js";
|
|
32
|
+
import { describeObject } from "./describe.js";
|
|
33
|
+
import { floorCarry, floorExcise, floorPile, squareHoldsObject } from "./floor.js";
|
|
34
|
+
import { noteSpotRevealTrap } from "./trap.js";
|
|
35
|
+
import { GEAR_LABELS, gearToLabel } from "./gear.js";
|
|
36
|
+
import { ODESC } from "../obj/desc.js";
|
|
37
|
+
import { monsterCarry } from "../mon/make.js";
|
|
38
|
+
import { objectCopy, tvalIsJewelry } from "../obj/object.js";
|
|
39
|
+
import { objectTouch, playerKnowsEgo } from "../obj/known-object.js";
|
|
40
|
+
import { NOOP_FLAVOR_AWARE_DEPS, OBJ_NOTICE, buildRuneList, objectRunesKnown, playerKnowObjectAwareness, } from "../obj/knowledge.js";
|
|
41
|
+
/** A blank (all-unknown) knowledge map for a fresh level. */
|
|
42
|
+
export function newKnownMap(width, height) {
|
|
43
|
+
return {
|
|
44
|
+
width,
|
|
45
|
+
height,
|
|
46
|
+
feat: new Int16Array(width * height).fill(-1),
|
|
47
|
+
objects: new Map(),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function gi(state, grid) {
|
|
51
|
+
return grid.y * state.chunk.width + grid.x;
|
|
52
|
+
}
|
|
53
|
+
/** square_memorize: remember the grid's current terrain. */
|
|
54
|
+
export function squareMemorize(state, grid) {
|
|
55
|
+
/* square_set_known_feat (cave-square.c:1274), the static setter behind both
|
|
56
|
+
* square_memorize (cave-square.c:1576) and square_forget (:1582): upstream
|
|
57
|
+
* writes player->cave->squares[y][x].feat; the port writes state.known.feat.
|
|
58
|
+
* The `c != cave` guard is structural here - there is only one known map. */
|
|
59
|
+
state.known.feat[gi(state, grid)] = state.chunk.feat(grid);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* square_forget (cave-square.c:1580-1583): forget the grid's TERRAIN only.
|
|
63
|
+
* Upstream is `square_set_known_feat(c, grid, FEAT_NONE)` and nothing else -
|
|
64
|
+
* it does not touch the remembered object pile, and map_info's object loop
|
|
65
|
+
* (cave-map.c:155-169) is NOT gated on square_isknown, so an object remembered
|
|
66
|
+
* on a grid whose terrain has been forgotten stays on the player's map. The
|
|
67
|
+
* remembered pile is dropped only by forget_remembered_objects, i.e. through
|
|
68
|
+
* squareKnowPile / squareSensePile.
|
|
69
|
+
*/
|
|
70
|
+
export function squareForget(state, grid) {
|
|
71
|
+
state.known.feat[gi(state, grid)] = -1;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* cave_illuminate (cave-map.c L555), the runtime version: the generation-time
|
|
75
|
+
* flag subset (gen/cave.ts caveIlluminate) plus the player-knowledge half
|
|
76
|
+
* (square_memorize / square_forget), gated per grid on the same "light" test
|
|
77
|
+
* upstream computes over the 9-entry ddgrid_ddd (the 8 neighbors plus self,
|
|
78
|
+
* cave.c L72-73): a floor or stairs grid nearby makes the boundary worth
|
|
79
|
+
* remembering. RNG-free.
|
|
80
|
+
*
|
|
81
|
+
* DEFERRED: PU_UPDATE_VIEW | PU_MONSTERS and the PR_MAP / PR_MONLIST /
|
|
82
|
+
* PR_ITEMLIST redraws (cave-map.c L608-612) - the front end's updateView +
|
|
83
|
+
* noteSpots pass already runs unconditionally after every state-changing
|
|
84
|
+
* action (packages/web/src/main.ts), so there is no separate dirty-flag
|
|
85
|
+
* mechanism to set here, matching the other knowledge-writing effect handlers
|
|
86
|
+
* (game/effect-detect.ts) which don't re-trigger it either.
|
|
87
|
+
*/
|
|
88
|
+
export function caveIlluminateKnown(state, daytime) {
|
|
89
|
+
const c = state.chunk;
|
|
90
|
+
/* Apply light or darkness (the flag subset, shared with generation). */
|
|
91
|
+
caveIlluminate(c, daytime);
|
|
92
|
+
/* The player-knowledge half: memorize / forget gated on adjacency light. */
|
|
93
|
+
for (let y = 0; y < c.height; y++) {
|
|
94
|
+
for (let x = 0; x < c.width; x++) {
|
|
95
|
+
const grid = loc(x, y);
|
|
96
|
+
/* Skip grids with no surrounding floors or stairs. */
|
|
97
|
+
let light = false;
|
|
98
|
+
for (let d = 0; d < 9; d++) {
|
|
99
|
+
const aGrid = locSum(grid, DDGRID_DDD[d]);
|
|
100
|
+
if (!c.inBoundsFully(aGrid))
|
|
101
|
+
continue;
|
|
102
|
+
if (c.isFloor(aGrid) || c.isStairs(aGrid)) {
|
|
103
|
+
light = true;
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (daytime || !c.isFloor(grid)) {
|
|
108
|
+
if (light)
|
|
109
|
+
squareMemorize(state, grid);
|
|
110
|
+
}
|
|
111
|
+
else if (!featIsBright(c.features, c.feat(grid))) {
|
|
112
|
+
/* Like cave_unlight(), forget "boring" grids. */
|
|
113
|
+
if (c.isFloor(grid))
|
|
114
|
+
squareForget(state, grid);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/* Light shop doorways. */
|
|
119
|
+
for (let y = 0; y < c.height; y++) {
|
|
120
|
+
for (let x = 0; x < c.width; x++) {
|
|
121
|
+
const grid = loc(x, y);
|
|
122
|
+
if (!c.isShop(grid))
|
|
123
|
+
continue;
|
|
124
|
+
for (let i = 0; i < 8; i++) {
|
|
125
|
+
const aGrid = locSum(grid, DDGRID_DDD[i]);
|
|
126
|
+
if (c.inBounds(aGrid))
|
|
127
|
+
squareMemorize(state, aGrid);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* cave_known (cave-map.c:633-660): memorize town terrain except interior
|
|
134
|
+
* wall/lava regions.
|
|
135
|
+
*
|
|
136
|
+
* MUST run BEFORE caveIlluminateKnown, as generate.c:1547-1550 does. The order
|
|
137
|
+
* is load-bearing and not interchangeable: cave_illuminate writes player memory
|
|
138
|
+
* too -- square_memorize at cave-map.c:582 and, at night, square_forget on
|
|
139
|
+
* boring floor grids at :586-587. So upstream deliberately memorizes the whole
|
|
140
|
+
* town here and then lets night-time illumination FORGET the boring floors
|
|
141
|
+
* again. Running this second would leave a night town fully mapped, which is the
|
|
142
|
+
* opposite of upstream.
|
|
143
|
+
*/
|
|
144
|
+
export function caveKnown(state) {
|
|
145
|
+
const c = state.chunk;
|
|
146
|
+
for (let y = 0; y < c.height; y++) {
|
|
147
|
+
for (let x = 0; x < c.width; x++) {
|
|
148
|
+
const grid = loc(x, y);
|
|
149
|
+
let count = 0;
|
|
150
|
+
for (let d = 0; d < 8; d++) {
|
|
151
|
+
const adjacent = locSum(grid, DDGRID_DDD[d]);
|
|
152
|
+
if (!c.isProjectable(adjacent) || featIsBright(c.features, c.feat(adjacent)))
|
|
153
|
+
count++;
|
|
154
|
+
}
|
|
155
|
+
if (count < 8)
|
|
156
|
+
squareMemorize(state, grid);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/** square_isknown: the player remembers some terrain here. */
|
|
161
|
+
export function squareIsKnown(state, grid) {
|
|
162
|
+
return state.known.feat[gi(state, grid)] >= 0;
|
|
163
|
+
}
|
|
164
|
+
/** The remembered feat at a grid (-1 = unknown). */
|
|
165
|
+
export function knownFeat(state, grid) {
|
|
166
|
+
return state.known.feat[gi(state, grid)];
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* square_isbelievedwall (cave-square.c L901-912): out-of-bounds is a wall,
|
|
170
|
+
* unknown terrain is not believed to be a wall, and known terrain is tested
|
|
171
|
+
* against the remembered feature rather than the live map.
|
|
172
|
+
*/
|
|
173
|
+
export function squareIsBelievedWall(state, grid) {
|
|
174
|
+
if (!state.chunk.inBoundsFully(grid))
|
|
175
|
+
return true;
|
|
176
|
+
if (!squareIsKnown(state, grid))
|
|
177
|
+
return false;
|
|
178
|
+
return !featIsProjectable(state.chunk.features, knownFeat(state, grid));
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* square_isrubble(player->cave, grid): is the terrain the player REMEMBERS here
|
|
182
|
+
* rubble? Upstream freely runs the square predicates against player->cave to
|
|
183
|
+
* ask "what does the player think is there", which is how the bump-into-terrain
|
|
184
|
+
* paths decide whether their message contradicts the player's memory
|
|
185
|
+
* (cmd-cave.c:1112, :1243). Unknown terrain is not remembered as anything.
|
|
186
|
+
*/
|
|
187
|
+
export function knownIsRubble(state, grid) {
|
|
188
|
+
const feat = knownFeat(state, grid);
|
|
189
|
+
if (feat < 0)
|
|
190
|
+
return false;
|
|
191
|
+
const reg = state.chunk.features;
|
|
192
|
+
return !reg.featHas(feat, TF["WALL"]) && reg.featHas(feat, TF["ROCK"]);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* square_isperm(player->cave, grid): PERMANENT and ROCK, remembered.
|
|
196
|
+
* do_cmd_tunnel_test MEMORIZES rather than forgets on this one - hitting
|
|
197
|
+
* permanent rock the player did not know about teaches them it is there
|
|
198
|
+
* (cmd-cave.c:462-468).
|
|
199
|
+
*/
|
|
200
|
+
export function knownIsPerm(state, grid) {
|
|
201
|
+
const feat = knownFeat(state, grid);
|
|
202
|
+
if (feat < 0)
|
|
203
|
+
return false;
|
|
204
|
+
const reg = state.chunk.features;
|
|
205
|
+
return reg.featHas(feat, TF["PERMANENT"]) && reg.featHas(feat, TF["ROCK"]);
|
|
206
|
+
}
|
|
207
|
+
/** square_isopendoor(player->cave, grid): a remembered closable door. */
|
|
208
|
+
export function knownIsOpenDoor(state, grid) {
|
|
209
|
+
const feat = knownFeat(state, grid);
|
|
210
|
+
if (feat < 0)
|
|
211
|
+
return false;
|
|
212
|
+
return state.chunk.features.featHas(feat, TF["CLOSABLE"]);
|
|
213
|
+
}
|
|
214
|
+
/** square_isbrokendoor(player->cave, grid): remembered, passable, unclosable. */
|
|
215
|
+
export function knownIsBrokenDoor(state, grid) {
|
|
216
|
+
const feat = knownFeat(state, grid);
|
|
217
|
+
if (feat < 0)
|
|
218
|
+
return false;
|
|
219
|
+
const reg = state.chunk.features;
|
|
220
|
+
return (reg.featHas(feat, TF["DOOR_ANY"]) &&
|
|
221
|
+
reg.featHas(feat, TF["PASSABLE"]) &&
|
|
222
|
+
!reg.featHas(feat, TF["CLOSABLE"]));
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* square_isdiggable(player->cave, grid): remembered mineral wall, secret door
|
|
226
|
+
* or rubble - square_ismineral || square_issecretdoor || square_isrubble
|
|
227
|
+
* (cave-square.c), evaluated on the remembered feature index.
|
|
228
|
+
*/
|
|
229
|
+
export function knownIsDiggable(state, grid) {
|
|
230
|
+
const feat = knownFeat(state, grid);
|
|
231
|
+
if (feat < 0)
|
|
232
|
+
return false;
|
|
233
|
+
const reg = state.chunk.features;
|
|
234
|
+
const isDoor = reg.featHas(feat, TF["DOOR_ANY"]);
|
|
235
|
+
const mineral = featIsMagma(reg, feat) ||
|
|
236
|
+
featIsQuartz(reg, feat) ||
|
|
237
|
+
(featIsGranite(reg, feat) && !isDoor);
|
|
238
|
+
const secretDoor = featIsGranite(reg, feat) && isDoor;
|
|
239
|
+
return mineral || secretDoor || knownIsRubble(state, grid);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* square_iscloseddoor(player->cave, grid): does the player REMEMBER a closed
|
|
243
|
+
* door here? The open / close / disarm tests use it to spot a stale memory - a
|
|
244
|
+
* remembered door where the real grid has none is forgotten rather than left to
|
|
245
|
+
* mislead the map (cmd-cave.c:160-163, :243-246).
|
|
246
|
+
*/
|
|
247
|
+
export function knownIsClosedDoor(state, grid) {
|
|
248
|
+
const feat = knownFeat(state, grid);
|
|
249
|
+
if (feat < 0)
|
|
250
|
+
return false;
|
|
251
|
+
return state.chunk.features.featHas(feat, TF["DOOR_CLOSED"]);
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* square_ispassable || square_isrubble || square_iscloseddoor on player->cave
|
|
255
|
+
* (cmd-cave.c:1126-1128, :1253-1255): the player remembers something they could
|
|
256
|
+
* have walked into here. Discovering a wall instead means the memory was wrong
|
|
257
|
+
* and upstream forgets the grid.
|
|
258
|
+
*/
|
|
259
|
+
export function knownIsEnterable(state, grid) {
|
|
260
|
+
const feat = knownFeat(state, grid);
|
|
261
|
+
if (feat < 0)
|
|
262
|
+
return false;
|
|
263
|
+
const reg = state.chunk.features;
|
|
264
|
+
return (featIsPassable(reg, feat) ||
|
|
265
|
+
knownIsRubble(state, grid) ||
|
|
266
|
+
reg.featHas(feat, TF["DOOR_CLOSED"]));
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* square_ismemorybad: the player remembers terrain here that no longer
|
|
270
|
+
* matches the live cave.
|
|
271
|
+
*/
|
|
272
|
+
export function squareMemoryBad(state, grid) {
|
|
273
|
+
const known = state.known.feat[gi(state, grid)];
|
|
274
|
+
return known >= 0 && known !== state.chunk.feat(grid);
|
|
275
|
+
}
|
|
276
|
+
/** The remembered feat at a grid, or FEAT_NONE ("unknown grid") if unknown. */
|
|
277
|
+
function apparentFeat(state, grid) {
|
|
278
|
+
const f = knownFeat(state, grid);
|
|
279
|
+
return f >= 0 ? f : FEAT.NONE;
|
|
280
|
+
}
|
|
281
|
+
/** The mimic-resolved feature backing the grid's remembered terrain. */
|
|
282
|
+
function apparentFeature(state, grid) {
|
|
283
|
+
const f = state.chunk.features.get(apparentFeat(state, grid));
|
|
284
|
+
return f.mimic !== null ? state.chunk.features.get(f.mimic) : f;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* square_apparent_name (cave-square.c): the mimic-resolved name of the
|
|
288
|
+
* grid's remembered terrain (the look/target UI's "You see <name>").
|
|
289
|
+
*/
|
|
290
|
+
export function squareApparentName(state, grid) {
|
|
291
|
+
return apparentFeature(state, grid).name;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* square_apparent_look_prefix (cave-square.c): the indefinite article (or a
|
|
295
|
+
* feature-specific override) that precedes squareApparentName. Overrides are
|
|
296
|
+
* reproduced verbatim from terrain.txt, trailing space and all - stores'
|
|
297
|
+
* "the entrance to the " carries one, LAVA's "some" does not (upstream data,
|
|
298
|
+
* not a port bug).
|
|
299
|
+
*/
|
|
300
|
+
export function squareApparentLookPrefix(state, grid) {
|
|
301
|
+
const f = apparentFeature(state, grid);
|
|
302
|
+
if (f.lookPrefix)
|
|
303
|
+
return f.lookPrefix;
|
|
304
|
+
const c = f.name.charAt(0).toLowerCase();
|
|
305
|
+
return "aeiou".includes(c) ? "an " : "a ";
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* square_apparent_look_in_preposition (cave-square.c): the preposition (or a
|
|
309
|
+
* feature-specific override) used for the player's own grid ("You are
|
|
310
|
+
* <preposition><name>."). Overrides are reproduced verbatim from terrain.txt
|
|
311
|
+
* (e.g. doors' "in" carries no trailing space, unlike the "on " default).
|
|
312
|
+
*/
|
|
313
|
+
export function squareApparentLookInPreposition(state, grid) {
|
|
314
|
+
const f = apparentFeature(state, grid);
|
|
315
|
+
return f.lookInPreposition || "on ";
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* square_isinteresting (cave-square.c), read against the player's knowledge
|
|
319
|
+
* (as target_accept and the look UI's terrain handler do): a memorized grid
|
|
320
|
+
* whose feature carries TF_INTERESTING.
|
|
321
|
+
*/
|
|
322
|
+
export function squareIsInteresting(state, grid) {
|
|
323
|
+
if (!squareIsKnown(state, grid))
|
|
324
|
+
return false;
|
|
325
|
+
return state.chunk.features.featHas(knownFeat(state, grid), TF.INTERESTING);
|
|
326
|
+
}
|
|
327
|
+
/** The remembered floor object at a grid, if any. */
|
|
328
|
+
export function knownObject(state, grid) {
|
|
329
|
+
return state.known.objects.get(gi(state, grid)) ?? null;
|
|
330
|
+
}
|
|
331
|
+
function pileHead(state, grid, pred) {
|
|
332
|
+
const pile = state.floor.get(gi(state, grid));
|
|
333
|
+
if (!pile)
|
|
334
|
+
return null;
|
|
335
|
+
for (const obj of pile) {
|
|
336
|
+
if (!pred || pred(obj))
|
|
337
|
+
return obj;
|
|
338
|
+
}
|
|
339
|
+
return null;
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* square_know_pile (reduced): remember the (first matching) floor object
|
|
343
|
+
* exactly; forget a remembered object that is no longer there. Without a
|
|
344
|
+
* predicate the whole pile is considered (the note_spot case).
|
|
345
|
+
*
|
|
346
|
+
* forget_remembered_objects (cave-square.c:1106, called at :1156 and :1186):
|
|
347
|
+
* upstream walks player->cave's shadow pile and excises/deletes any known
|
|
348
|
+
* twin whose original is no longer on the grid. The port's knowledge is one
|
|
349
|
+
* glyph per grid (state.known.objects), so that whole walk collapses to the
|
|
350
|
+
* "nothing here any more -> delete the entry" branch at the end of this
|
|
351
|
+
* function and of squareSensePile.
|
|
352
|
+
*/
|
|
353
|
+
export function squareKnowPile(state, grid, pred) {
|
|
354
|
+
/* object_touch (cave-square.c square_know_pile L1177-1181, obj-knowledge.c
|
|
355
|
+
* object_touch L960-972): only the pile on the player's OWN grid is "touched",
|
|
356
|
+
* which marks each object ASSESSED (revealing its combat bracket and, for an
|
|
357
|
+
* artifact, its name - the shadow gates both on ASSESSED), auto-notices the
|
|
358
|
+
* artifact, and logs the find (history_find_artifact). A detected/lit pile at
|
|
359
|
+
* a distance is only "seen", never touched, so it does not count as found -
|
|
360
|
+
* hence the player-grid gate here. (player_know_object's flavour-awareness
|
|
361
|
+
* side effect is the cross-object rune-learn sweep - updatePlayerObjectKnowledge
|
|
362
|
+
* below - fired at the live rune-learn sites, not here.) */
|
|
363
|
+
if (locEq(grid, state.actor.grid)) {
|
|
364
|
+
const pile = state.floor.get(gi(state, grid));
|
|
365
|
+
if (pile) {
|
|
366
|
+
for (const obj of pile) {
|
|
367
|
+
if (!pred || pred(obj)) {
|
|
368
|
+
objectTouch(obj, {
|
|
369
|
+
onArtifactFound: () => state.onArtifactFound?.(obj.artifact),
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
const head = pileHead(state, grid, pred);
|
|
376
|
+
if (head) {
|
|
377
|
+
state.known.objects.set(gi(state, grid), {
|
|
378
|
+
ch: head.kind.dChar,
|
|
379
|
+
attr: head.kind.dAttr,
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
else if (!pileHead(state, grid)) {
|
|
383
|
+
/* Nothing at all here: any memory is stale. */
|
|
384
|
+
state.known.objects.delete(gi(state, grid));
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* gear_to_label (obj-gear.c:443) for a held handle. The one implementation lives
|
|
389
|
+
* in game/gear.ts; equipment is handled by this module's callers (they know the
|
|
390
|
+
* body slot), so the two-argument form is what is wanted here.
|
|
391
|
+
*/
|
|
392
|
+
function gearPackLabel(state, handle) {
|
|
393
|
+
return gearToLabel(state.gear, handle);
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* update_player_object_knowledge (obj-knowledge.c L1218): after any rune-learn,
|
|
397
|
+
* re-run player_know_object over every object the player can currently see or
|
|
398
|
+
* hold, so a newly-learned rune propagates awareness across ALL of them - not
|
|
399
|
+
* just the object that taught it. This is the sweep the audit's KN-03 flagged
|
|
400
|
+
* missing: e.g. wielding a Ring of Strength learns the STR modifier rune, and it
|
|
401
|
+
* is this sweep (not object_learn_on_wield itself) that then makes the ring's
|
|
402
|
+
* kind flavour-aware, so it stops reading as an unidentified "Steel Ring".
|
|
403
|
+
*
|
|
404
|
+
* The port keeps rune knowledge in typed player stores and synthesises each
|
|
405
|
+
* object's known-twin on demand for display, so the only persistent side effect
|
|
406
|
+
* that needs a home here is player_know_object's awareness half (L1163-1198): a
|
|
407
|
+
* carried/floor jewel whose non-curse runes are now all known becomes
|
|
408
|
+
* flavour-aware (L1163-1167, KN-03), a special artifact becomes aware outright
|
|
409
|
+
* (L1168-1175), and a first reveal of a name/ego prints "You have %s (%c)." /
|
|
410
|
+
* "On the ground: %s." (L1184-1198, KN-04).
|
|
411
|
+
*
|
|
412
|
+
* Scope vs upstream: flavour awareness is per-KIND and global to the game (the
|
|
413
|
+
* shared FlavorKnowledge), so making a kind aware from a carried jewel already
|
|
414
|
+
* covers every store / curse-template instance of that kind - the port need only
|
|
415
|
+
* sweep the player's gear and the floor, not the store/curse lists C also walks
|
|
416
|
+
* purely to rewrite their per-object display twins. Called at the live rune-learn
|
|
417
|
+
* sites (wield, being hit, identify), exactly where C's player_learn_rune
|
|
418
|
+
* tail-calls it (L1373).
|
|
419
|
+
*/
|
|
420
|
+
export function updatePlayerObjectKnowledge(state) {
|
|
421
|
+
const flavor = state.flavorKnown;
|
|
422
|
+
if (!flavor)
|
|
423
|
+
return; // worldless harness: no flavour store to mutate.
|
|
424
|
+
const flavorDeps = state.flavorAwareDeps ?? NOOP_FLAVOR_AWARE_DEPS;
|
|
425
|
+
const env = state.runeEnv;
|
|
426
|
+
const p = state.actor.player;
|
|
427
|
+
const runes = buildRuneList(env);
|
|
428
|
+
const nonCurse = runes.filter((r) => r.variety !== "curse");
|
|
429
|
+
const know = (obj, report) => {
|
|
430
|
+
/* player_know_object early return (L1033): the unassessed get no ID. */
|
|
431
|
+
if ((obj.notice & OBJ_NOTICE.ASSESSED) === 0)
|
|
432
|
+
return;
|
|
433
|
+
/* seen defaults true (L1025); a first name/ego reveal sets it false. */
|
|
434
|
+
let seen = true;
|
|
435
|
+
/* Ego branch (L1156-1161): a newly-known ego reports unless its ego was
|
|
436
|
+
* already everseen. */
|
|
437
|
+
if (obj.ego && playerKnowsEgo(p, obj.ego, obj, env)) {
|
|
438
|
+
seen = state.everseen ? state.everseen.egoSeen(obj.ego) : true;
|
|
439
|
+
}
|
|
440
|
+
/* Jewelry / special-artifact awareness (L1163-1175). playerKnowObjectAwareness
|
|
441
|
+
* fires object_flavor_aware for both; the `seen` reads below mirror its
|
|
442
|
+
* conditions (from the same objectRunesKnown / kidx tests) purely to decide
|
|
443
|
+
* whether to print the report. */
|
|
444
|
+
if (tvalIsJewelry(obj.tval)) {
|
|
445
|
+
if (objectRunesKnown(p, env, obj, nonCurse)) {
|
|
446
|
+
seen = obj.artifact
|
|
447
|
+
? true
|
|
448
|
+
: state.everseen
|
|
449
|
+
? state.everseen.kindSeen(obj.kind)
|
|
450
|
+
: true;
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
else if (obj.kind.kidx >= flavor.ordinaryKindMax) {
|
|
454
|
+
seen = true; // L1173: special artifacts never report from this branch.
|
|
455
|
+
}
|
|
456
|
+
/* The awareness mutation itself (idempotent across repeated sweeps). */
|
|
457
|
+
playerKnowObjectAwareness(p, env, obj, runes, flavor, flavorDeps);
|
|
458
|
+
/* Report on new stuff (L1184-1198). describeObject marks kind/ego everseen
|
|
459
|
+
* (obj-desc.c L633-637), exactly as C's object_desc does at L1190. */
|
|
460
|
+
if (!seen)
|
|
461
|
+
report(describeObject(state, obj, ODESC.PREFIX | ODESC.FULL));
|
|
462
|
+
};
|
|
463
|
+
/* Level objects first (L1223-1226: cave->objects), matching C's order so a
|
|
464
|
+
* floor instance wins the first-reveal report over a carried one of the same
|
|
465
|
+
* (now-everseen) kind. */
|
|
466
|
+
for (const pile of state.floor.values()) {
|
|
467
|
+
for (const obj of pile) {
|
|
468
|
+
/* Every level object becomes known, but the REPORT is gated on
|
|
469
|
+
* square_holds_object(cave, p->grid, obj) (L1193) - only what is under the
|
|
470
|
+
* player's feet is announced. The port used to announce every pile on the
|
|
471
|
+
* level, so learning one rune could name objects across the whole floor. */
|
|
472
|
+
know(obj, (name) => {
|
|
473
|
+
if (squareHoldsObject(state, state.actor.grid, obj)) {
|
|
474
|
+
state.msg?.(`On the ground: ${name}.`);
|
|
475
|
+
}
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
/* Player objects (L1229 walks p->gear; the port splits it into equipment +
|
|
480
|
+
* pack). */
|
|
481
|
+
const equip = p.equipment;
|
|
482
|
+
for (let slot = 0; slot < equip.length; slot++) {
|
|
483
|
+
const handle = equip[slot] ?? 0;
|
|
484
|
+
if (!handle)
|
|
485
|
+
continue;
|
|
486
|
+
const obj = state.gear.store.get(handle);
|
|
487
|
+
if (!obj)
|
|
488
|
+
continue;
|
|
489
|
+
const label = GEAR_LABELS[slot] ?? ""; // equipped_item_slot -> label (L452).
|
|
490
|
+
know(obj, (name) => state.msg?.(`You have ${name} (${label}).`));
|
|
491
|
+
}
|
|
492
|
+
for (const handle of state.gear.pack) {
|
|
493
|
+
const obj = state.gear.store.get(handle);
|
|
494
|
+
if (!obj)
|
|
495
|
+
continue;
|
|
496
|
+
const label = gearPackLabel(state, handle);
|
|
497
|
+
know(obj, (name) => state.msg?.(`You have ${name} (${label}).`));
|
|
498
|
+
}
|
|
499
|
+
/* autoinscribe_ground + autoinscribe_pack (obj-knowledge.c:1245-1247): the
|
|
500
|
+
* tail of update_player_object_knowledge. This is where learning a rune
|
|
501
|
+
* stamps its autoinscription onto everything the player can already see or
|
|
502
|
+
* carry, and where a newly-aware kind's note lands. Reached through the
|
|
503
|
+
* state seam because obj-cmd.ts imports this module. */
|
|
504
|
+
state.autoinscribeAll?.();
|
|
505
|
+
}
|
|
506
|
+
/**
|
|
507
|
+
* square_sense_pile (reduced): become aware that something matching is
|
|
508
|
+
* here without learning what (the null-glyph marker), keeping an exact
|
|
509
|
+
* memory if one exists; forget stale memories like squareKnowPile.
|
|
510
|
+
*/
|
|
511
|
+
export function squareSensePile(state, grid, pred) {
|
|
512
|
+
const idx = gi(state, grid);
|
|
513
|
+
const head = pileHead(state, grid, pred);
|
|
514
|
+
if (head) {
|
|
515
|
+
const existing = state.known.objects.get(idx);
|
|
516
|
+
if (!existing || existing.ch === null) {
|
|
517
|
+
state.known.objects.set(idx, { ch: null, attr: "" });
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
else if (!pileHead(state, grid)) {
|
|
521
|
+
state.known.objects.delete(idx);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
/* forgetMap (a whole-map "forget everything + wipe DTRAP" pass) was removed:
|
|
525
|
+
* 4.2.6 has no such function. It existed only to back wiz_dark, and wiz_dark
|
|
526
|
+
* (cave-map.c:490-546) does the OPPOSITE - it memorizes terrain exactly as
|
|
527
|
+
* wiz_light does and only perma-darkens the grids. See game/effect-terrain.ts
|
|
528
|
+
* wizLightLevel. */
|
|
529
|
+
/** OPT(player, disturb_near): shipped default true (options.c). */
|
|
530
|
+
function disturbNear(state) {
|
|
531
|
+
return state.options?.get("disturb_near") ?? true;
|
|
532
|
+
}
|
|
533
|
+
/**
|
|
534
|
+
* update_mon (mon-util.c): recompute a single monster's visibility. When
|
|
535
|
+
* `full`, recompute its distance to the player (mon->cdis); otherwise use the
|
|
536
|
+
* stored one. Sets MFLAG_VISIBLE / MFLAG_VIEW from telepathy, infravision,
|
|
537
|
+
* see-invisible and illumination, learns the associated lore flags, and
|
|
538
|
+
* disturbs the player on appearance / disappearance. Draws no RNG.
|
|
539
|
+
*
|
|
540
|
+
* The player's derived flags (OF_TELEPATHY / OF_SEE_INVIS) and see_infra come
|
|
541
|
+
* from the last calc_bonuses (state.playerState); the blind check reads
|
|
542
|
+
* player->timed[TMD_BLIND] directly. update_mon only READS MFLAG_MARK - the
|
|
543
|
+
* MARK / SHOW detection-fade lives in tickMonsterMarks.
|
|
544
|
+
*/
|
|
545
|
+
export function updateMon(state, mon, full) {
|
|
546
|
+
const c = state.chunk;
|
|
547
|
+
const lore = getLore(state.lore, mon.race);
|
|
548
|
+
/* If still generating the level, measure distances from the middle
|
|
549
|
+
* (character_dungeon); a live refresh always uses the player's grid. */
|
|
550
|
+
const pgrid = state.playing
|
|
551
|
+
? state.actor.grid
|
|
552
|
+
: loc(Math.trunc(c.width / 2), Math.trunc(c.height / 2));
|
|
553
|
+
/* Seen at all. */
|
|
554
|
+
let flag = false;
|
|
555
|
+
/* Seen by vision. */
|
|
556
|
+
let easy = false;
|
|
557
|
+
/* ESP permitted, see-invisible and infravision come from the derived
|
|
558
|
+
* player state (racial / class innate flags, worn equipment, and the timed
|
|
559
|
+
* player_flags_timed / see_infra bumps all flow through calc_bonuses). With
|
|
560
|
+
* no derived state (worldless harness) fall back to a bare character: no OF
|
|
561
|
+
* flags, racial infravision only. */
|
|
562
|
+
const ps = state.playerState;
|
|
563
|
+
let telepathyOk = ps ? ps.flags.has(OF.TELEPATHY) : false;
|
|
564
|
+
const seeInvis = ps ? ps.flags.has(OF.SEE_INVIS) : false;
|
|
565
|
+
const seeInfra = ps ? ps.seeInfra : state.actor.player.race.infravision;
|
|
566
|
+
/* Compute distance, or just use the current one. */
|
|
567
|
+
let d;
|
|
568
|
+
if (full) {
|
|
569
|
+
const dy = Math.abs(pgrid.y - mon.grid.y);
|
|
570
|
+
const dx = Math.abs(pgrid.x - mon.grid.x);
|
|
571
|
+
d = dy > dx ? dy + (dx >> 1) : dx + (dy >> 1);
|
|
572
|
+
if (d > 255)
|
|
573
|
+
d = 255;
|
|
574
|
+
mon.cdis = d;
|
|
575
|
+
}
|
|
576
|
+
else {
|
|
577
|
+
d = mon.cdis;
|
|
578
|
+
}
|
|
579
|
+
/* Detected (read-only: the MARK / SHOW fade belongs to tickMonsterMarks). */
|
|
580
|
+
if (mon.mflag.has(MFLAG.MARK))
|
|
581
|
+
flag = true;
|
|
582
|
+
/* Check if telepathy works here. */
|
|
583
|
+
if (squareIsNoEsp(c, mon.grid) || squareIsNoEsp(c, pgrid)) {
|
|
584
|
+
telepathyOk = false;
|
|
585
|
+
}
|
|
586
|
+
/* Nearby. */
|
|
587
|
+
if (d <= state.z.maxSight) {
|
|
588
|
+
/* Basic telepathy. */
|
|
589
|
+
if (telepathyOk && monsterIsEspDetectable(mon)) {
|
|
590
|
+
flag = true;
|
|
591
|
+
/* Check for LOS so that MFLAG_VIEW is set later. */
|
|
592
|
+
if (squareIsView(c, mon.grid))
|
|
593
|
+
easy = true;
|
|
594
|
+
}
|
|
595
|
+
/* Normal line of sight and player is not blind. */
|
|
596
|
+
if (squareIsView(c, mon.grid) && !state.actor.player.timed[TMD.BLIND]) {
|
|
597
|
+
/* Use "infravision". */
|
|
598
|
+
if (d <= seeInfra) {
|
|
599
|
+
/* Learn about warm / cold blood. */
|
|
600
|
+
lore.flags.on(RF.COLD_BLOOD);
|
|
601
|
+
if (!mon.race.flags.has(RF.COLD_BLOOD)) {
|
|
602
|
+
easy = flag = true;
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
/* Use illumination. */
|
|
606
|
+
if (squareIsSeen(c, mon.grid)) {
|
|
607
|
+
/* Learn about invisibility. */
|
|
608
|
+
lore.flags.on(RF.INVISIBLE);
|
|
609
|
+
if (monsterIsInvisible(mon)) {
|
|
610
|
+
/* See invisible. */
|
|
611
|
+
if (seeInvis)
|
|
612
|
+
easy = flag = true;
|
|
613
|
+
}
|
|
614
|
+
else {
|
|
615
|
+
easy = flag = true;
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
/* path_analyse (learn intervening-square terrain): DEFERRED. */
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
/* If a mimic looks like an ignored item, it's not seen (mon-util.c L394):
|
|
622
|
+
* if (monster_is_mimicking(mon) && ignore_item_ok(player, obj))
|
|
623
|
+
* easy = flag = false;
|
|
624
|
+
* mon.mimickedObj is always 0 until mimic placement is generated, so the
|
|
625
|
+
* guard never fires; resolving the handle to a GameObject is DEFERRED with
|
|
626
|
+
* that work. */
|
|
627
|
+
/* Is the monster now visible? */
|
|
628
|
+
if (flag) {
|
|
629
|
+
/* Learn about the monster's mind. */
|
|
630
|
+
if (telepathyOk) {
|
|
631
|
+
lore.flags.on(RF.EMPTY_MIND);
|
|
632
|
+
lore.flags.on(RF.WEIRD_MIND);
|
|
633
|
+
lore.flags.on(RF.SMART);
|
|
634
|
+
lore.flags.on(RF.STUPID);
|
|
635
|
+
}
|
|
636
|
+
/* It was previously unseen. */
|
|
637
|
+
if (!monsterIsVisible(mon)) {
|
|
638
|
+
mon.mflag.on(MFLAG.VISIBLE);
|
|
639
|
+
/* square_light_spot / PR_HEALTH / PR_MONLIST are presentation (#25). */
|
|
640
|
+
/* Count "fresh" sightings (capped at SHRT_MAX). */
|
|
641
|
+
loreCountU16(lore, "sights");
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
else if (monsterIsVisible(mon)) {
|
|
645
|
+
/* Not visible but was previously seen. With mimickedObj always 0 the
|
|
646
|
+
* mimic caveat (!mon->mimicked_obj || ignore_item_ok) always clears. */
|
|
647
|
+
if (mon.mimickedObj === 0) {
|
|
648
|
+
mon.mflag.off(MFLAG.VISIBLE);
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
/* Is the monster now easily visible? */
|
|
652
|
+
if (easy) {
|
|
653
|
+
if (!monsterIsInView(mon)) {
|
|
654
|
+
mon.mflag.on(MFLAG.VIEW);
|
|
655
|
+
/* Disturb on appearance. */
|
|
656
|
+
if (disturbNear(state))
|
|
657
|
+
disturb(state);
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
else {
|
|
661
|
+
if (monsterIsInView(mon)) {
|
|
662
|
+
mon.mflag.off(MFLAG.VIEW);
|
|
663
|
+
/* Disturb on disappearance (but not for a camouflaged monster). */
|
|
664
|
+
if (disturbNear(state) && !monsterIsCamouflaged(mon))
|
|
665
|
+
disturb(state);
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
/**
|
|
670
|
+
* become_aware (mon-util.c L711): reveal a camouflaged mimic. Clears
|
|
671
|
+
* MFLAG_CAMOUFLAGE and, when the race has RF_UNAWARE, learns that flag into
|
|
672
|
+
* its lore. If the monster was mimicking a floor object, names it (ODESC_BASE)
|
|
673
|
+
* in a message when its square is seen, breaks the mimicry link on both
|
|
674
|
+
* sides, removes the fake item from the floor, and refreshes the monster's
|
|
675
|
+
* own visibility now that mimicry no longer masks it (update_mon). A no-op
|
|
676
|
+
* monster that is not camouflaged. Draws no RNG.
|
|
677
|
+
*
|
|
678
|
+
* Object-mimic placement is wired for live-placed (summoned / bred) mimics
|
|
679
|
+
* via game/mon-place.ts monCreateMimickedObject, which links mon.mimickedObj
|
|
680
|
+
* and the object's mimickingMIdx back-reference at the monster's grid; the
|
|
681
|
+
* object branch below fires for those and for any hand-built Monster/
|
|
682
|
+
* GameObject pair in tests. (SEAM: generation-spawned mimics still need the
|
|
683
|
+
* handoff to call monCreateMimickedObject - see that function's docstring.)
|
|
684
|
+
*
|
|
685
|
+
* RF_MIMIC_INV's "give the monster a copy of the object before deleting it"
|
|
686
|
+
* (mon-util.c L740-758) is now ported via obj/object.ts objectCopy (memcpy, no
|
|
687
|
+
* RNG); only the known twin is DEFERRED with the knowledge subsystem. The
|
|
688
|
+
* upkeep/redraw bits (PU_UPDATE_VIEW | PU_MONSTERS, PR_MONLIST | PR_ITEMLIST,
|
|
689
|
+
* square_note_spot, square_light_spot) are presentation (#25), matching the
|
|
690
|
+
* redraw deferral already noted for updateMon above.
|
|
691
|
+
*/
|
|
692
|
+
export function becomeAware(state, mon) {
|
|
693
|
+
if (!monsterIsCamouflaged(mon))
|
|
694
|
+
return;
|
|
695
|
+
mon.mflag.off(MFLAG.CAMOUFLAGE);
|
|
696
|
+
const lore = getLore(state.lore, mon.race);
|
|
697
|
+
if (mon.race.flags.has(RF.UNAWARE))
|
|
698
|
+
lore.flags.on(RF.UNAWARE);
|
|
699
|
+
if (mon.mimickedObj !== 0) {
|
|
700
|
+
const obj = floorPile(state, mon.grid).find((o) => o.mimickingMIdx === mon.midx);
|
|
701
|
+
if (obj && obj.grid) {
|
|
702
|
+
const name = describeObject(state, obj, ODESC.BASE);
|
|
703
|
+
if (squareIsSeen(state.chunk, obj.grid)) {
|
|
704
|
+
state.msg?.(`The ${name} was really a monster!`);
|
|
705
|
+
}
|
|
706
|
+
/* Clear the mimicry. */
|
|
707
|
+
obj.mimickingMIdx = 0;
|
|
708
|
+
mon.mimickedObj = 0;
|
|
709
|
+
/* Give a copy of the object to the monster if appropriate
|
|
710
|
+
* (mon-util.c L740-758). object_copy is a memcpy (draws no RNG); the
|
|
711
|
+
* known twin (given->known) is DEFERRED with the knowledge subsystem
|
|
712
|
+
* (obj/object.ts module docs), so only the base object is copied. The
|
|
713
|
+
* port's monsterCarry always succeeds (it prepends to heldObj), so the
|
|
714
|
+
* upstream carry-failed delete branch (L751-757) is unreachable and
|
|
715
|
+
* omitted. */
|
|
716
|
+
if (mon.race.flags.has(RF.MIMIC_INV)) {
|
|
717
|
+
const given = objectCopy(obj);
|
|
718
|
+
monsterCarry(mon.heldObj, given, mon.midx);
|
|
719
|
+
}
|
|
720
|
+
/* Delete the mimicked object; lighting/noting done via update_mon. */
|
|
721
|
+
floorExcise(state, obj.grid, obj);
|
|
722
|
+
/* Since mimicry affects visibility, update that. */
|
|
723
|
+
updateMon(state, mon, false);
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
/**
|
|
728
|
+
* move_mimicked_object (mon-util.c L620-650): move the fake floor object with
|
|
729
|
+
* a camouflaged monster swap. The copied object keeps its mimic back-link;
|
|
730
|
+
* if the destination cannot carry it, RF_MIMIC_INV gives it to the monster.
|
|
731
|
+
* This operation is presentation/RNG-free.
|
|
732
|
+
*/
|
|
733
|
+
export function moveMimickedObject(state, mon, from, to) {
|
|
734
|
+
if (mon.mimickedObj === 0)
|
|
735
|
+
return;
|
|
736
|
+
const obj = floorPile(state, from).find((o) => o.mimickingMIdx === mon.midx);
|
|
737
|
+
if (!obj)
|
|
738
|
+
return;
|
|
739
|
+
const moved = objectCopy(obj);
|
|
740
|
+
if (!floorCarry(state, to, moved)) {
|
|
741
|
+
if (mon.race.flags.has(RF.MIMIC_INV)) {
|
|
742
|
+
monsterCarry(mon.heldObj, moved, mon.midx);
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
floorExcise(state, from, obj);
|
|
746
|
+
if (!floorPile(state, to).some((o) => o.mimickingMIdx === mon.midx)) {
|
|
747
|
+
mon.mimickedObj = 0;
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
/** update_monsters (mon-util.c): update every live (non-dead) monster. */
|
|
751
|
+
export function updateMonsters(state, full) {
|
|
752
|
+
for (let i = 1; i < state.monsters.length; i++) {
|
|
753
|
+
const mon = state.monsters[i];
|
|
754
|
+
if (!mon)
|
|
755
|
+
continue;
|
|
756
|
+
updateMon(state, mon, full);
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
/**
|
|
760
|
+
* The five player fields updateView reads, taken off a live GameState.
|
|
761
|
+
*
|
|
762
|
+
* One definition because there were two, and they agreed on the wrong thing.
|
|
763
|
+
* `level` is `p->lev` (cave-view.c:778, the UNLIGHT view radius
|
|
764
|
+
* `2 + p->lev / 6 - cur_light`), and both the web shell and the MCP session were
|
|
765
|
+
* passing `chunk.depth` - the dungeon depth. Only an UNLIGHT player carrying no
|
|
766
|
+
* light can see the difference, which is exactly the kind of field that stays
|
|
767
|
+
* wrong for a year in two copies and is right once in one.
|
|
768
|
+
*/
|
|
769
|
+
export function viewerStateOf(state) {
|
|
770
|
+
const actor = state.actor;
|
|
771
|
+
return {
|
|
772
|
+
grid: actor.grid,
|
|
773
|
+
curLight: actor.light,
|
|
774
|
+
blind: (actor.player.timed[TMD.BLIND] ?? 0) > 0,
|
|
775
|
+
hasUnlight: actor.unlight,
|
|
776
|
+
level: actor.player.lev,
|
|
777
|
+
};
|
|
778
|
+
}
|
|
779
|
+
/**
|
|
780
|
+
* note_spot pass: memorize every currently seen grid with its floor pile,
|
|
781
|
+
* then refresh all monster visibility via update_mon.
|
|
782
|
+
*
|
|
783
|
+
* Called after every updateView. Upstream, movement sets PU_DISTANCE and
|
|
784
|
+
* update() runs update_monsters(TRUE) - cdis and visibility recompute in one
|
|
785
|
+
* pass - while a view-only change runs update_monsters(FALSE). Since cdis is
|
|
786
|
+
* purely geometric (idempotent when nothing moved, correct when the player
|
|
787
|
+
* did), noteSpots recomputes it here (full=true) so the d <= max_sight and
|
|
788
|
+
* d <= see_infra gates never read a stale distance after a step.
|
|
789
|
+
*/
|
|
790
|
+
export function noteSpots(state) {
|
|
791
|
+
const c = state.chunk;
|
|
792
|
+
/*
|
|
793
|
+
* Blind forget of the current non-passable remembered square
|
|
794
|
+
* (cave-view.c:894-897): when blind and the player grid is known as
|
|
795
|
+
* impassable in map memory, forget it. Lives here (not pure view.ts)
|
|
796
|
+
* because it mutates KnownMap; called immediately after every updateView.
|
|
797
|
+
*/
|
|
798
|
+
if ((state.actor.player.timed[TMD.BLIND] ?? 0) > 0) {
|
|
799
|
+
const pgrid = state.actor.grid;
|
|
800
|
+
if (squareIsKnown(state, pgrid)) {
|
|
801
|
+
const feat = knownFeat(state, pgrid);
|
|
802
|
+
if (feat >= 0 && !featIsPassable(c.features, feat)) {
|
|
803
|
+
squareForget(state, pgrid);
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
for (let y = 0; y < c.height; y++) {
|
|
808
|
+
for (let x = 0; x < c.width; x++) {
|
|
809
|
+
const grid = { x, y };
|
|
810
|
+
if (!squareIsSeen(c, grid))
|
|
811
|
+
continue;
|
|
812
|
+
squareMemorize(state, grid);
|
|
813
|
+
squareKnowPile(state, grid);
|
|
814
|
+
/* Notice secret traps on the newly-seen grid (cave-map.c square_note_spot
|
|
815
|
+
* L236-238 / cave-view.c update_one L840-842). */
|
|
816
|
+
noteSpotRevealTrap(state, grid);
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
updateMonsters(state, true);
|
|
820
|
+
}
|
|
821
|
+
/**
|
|
822
|
+
* The MFLAG_NICE / MFLAG_MARK / MFLAG_SHOW housekeeping process_world runs at
|
|
823
|
+
* the end of a player turn (game-world.c:882-908): clear NICE; where a monster
|
|
824
|
+
* is MARKed but no longer SHOWn, drop the mark and re-run update_mon; then
|
|
825
|
+
* clear every SHOW. This keeps a freshly detected monster displayed for one
|
|
826
|
+
* more refresh before fading. Interim home until the world-clock / process_world
|
|
827
|
+
* port absorbs it (the NICE clear must be preserved when it does).
|
|
828
|
+
*/
|
|
829
|
+
export function tickMonsterMarks(state) {
|
|
830
|
+
/* Clear NICE flag, and show marked monsters. */
|
|
831
|
+
for (let i = 1; i < state.monsters.length; i++) {
|
|
832
|
+
const mon = state.monsters[i];
|
|
833
|
+
if (!mon)
|
|
834
|
+
continue;
|
|
835
|
+
mon.mflag.off(MFLAG.NICE);
|
|
836
|
+
if (mon.mflag.has(MFLAG.MARK) && !mon.mflag.has(MFLAG.SHOW)) {
|
|
837
|
+
mon.mflag.off(MFLAG.MARK);
|
|
838
|
+
updateMon(state, mon, false);
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
/* Clear SHOW flag. */
|
|
842
|
+
for (let i = 1; i < state.monsters.length; i++) {
|
|
843
|
+
const mon = state.monsters[i];
|
|
844
|
+
if (!mon)
|
|
845
|
+
continue;
|
|
846
|
+
mon.mflag.off(MFLAG.SHOW);
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
//# sourceMappingURL=known.js.map
|