@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,1323 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The WIZARD / DEBUG command surface, ported from Angband 4.2.6:
|
|
3
|
+
* - reference/src/cmd-wizard.c (the do_cmd_wiz_* command actions)
|
|
4
|
+
* - reference/src/wiz-debug.c (wiz_cheat_death)
|
|
5
|
+
*
|
|
6
|
+
* UPSTREAM HAS TWO SEPARATE CONCEPTS HERE, and this module gates on the second.
|
|
7
|
+
* The port originally collapsed them into one `wizard` boolean, which silently
|
|
8
|
+
* made every debug command unreachable unless wizard mode was also on - a gate
|
|
9
|
+
* upstream does not have:
|
|
10
|
+
*
|
|
11
|
+
* - DEBUG consent (player_can_debug_prereq, reference/src/player-util.c
|
|
12
|
+
* L1296-1307) gates all 41 debug-menu commands. It consults ONLY
|
|
13
|
+
* `player->noscore & NOSCORE_DEBUG`; on the first use it asks confirm_debug()
|
|
14
|
+
* and, if accepted, ORs the bit in permanently. It never reads
|
|
15
|
+
* player->wizard. Every row of every cmd_debug_* table in
|
|
16
|
+
* reference/src/ui-game.c L247-322 uses this prereq and nothing else.
|
|
17
|
+
* - WIZARD mode (player->wizard, toggled by ^W / do_cmd_wizard,
|
|
18
|
+
* reference/src/cmd-misc.c L40-67) is a separate, much smaller thing: it
|
|
19
|
+
* changes six display / knowledge behaviours and nothing in this module.
|
|
20
|
+
* Its 15 upstream call sites are the toggle itself, cheat death
|
|
21
|
+
* (player-util.c L246), the "[=-WIZARD-=]" title (ui-display.c L178,
|
|
22
|
+
* ui-player.c L628), all-artifacts-known (ui-knowledge.c L1695), the seven
|
|
23
|
+
* look/target coordinate+noise+scent lines (ui-target.c), the headless
|
|
24
|
+
* stats build (main-stats.c L435) and the borg's cheat-death check.
|
|
25
|
+
*
|
|
26
|
+
* So WizardDeps carries BOTH flags: `debug` (the player_can_debug_prereq result)
|
|
27
|
+
* gates the commands here, and `wizard` gates only wizCheatDeath, whose upstream
|
|
28
|
+
* path is `player->wizard || OPT(player, cheat_live)`. A normal, faithful game
|
|
29
|
+
* (design decision 16: no save-scumming, faithful play) reaches neither without
|
|
30
|
+
* the player accepting an explicit, savefile-marking warning first.
|
|
31
|
+
*
|
|
32
|
+
* MOST of these commands are thin wrappers that drive already-ported engine
|
|
33
|
+
* systems with debug parameters, so this module wires to the existing port and
|
|
34
|
+
* does not re-implement the engine:
|
|
35
|
+
* - object / gold / artifact creation -> obj/make.ts (objectPrep, applyMagic,
|
|
36
|
+
* makeGold, copyArtifactData) through the shared MakeDeps bundle;
|
|
37
|
+
* - detection / mapping / teleport / summon-random / project-los / restore
|
|
38
|
+
* stat+exp -> the effect interpreter's effect_simple (effects/interpreter.ts
|
|
39
|
+
* effectSimple) over a game effect context (game/effect-env.ts +
|
|
40
|
+
* game/effect-game-env.ts), the same stack items and spells run through;
|
|
41
|
+
* - banish -> deleteMonster (game/context.ts);
|
|
42
|
+
* - create_trap -> placeTrap (game/trap.ts);
|
|
43
|
+
* - summon_named -> scatterExt + placeNewMonster (world/scatter.ts,
|
|
44
|
+
* game/mon-place.ts);
|
|
45
|
+
* - curse_item -> appendObjectCurse / removeObjectCurse (obj/object.ts);
|
|
46
|
+
* - exp / level / stat edits -> player/exp.ts (playerExpGain / playerExpLose);
|
|
47
|
+
* - learn_object_kinds -> the per-game FlavorKnowledge (obj/knowledge.ts);
|
|
48
|
+
* - recall / wipe monster -> cheatMonsterLore / wipeMonsterLore (mon/lore.ts);
|
|
49
|
+
* - wizard_light -> wizLightLevel (game/effect-terrain.ts);
|
|
50
|
+
* - push_object -> pushObject (game/project-feat.ts).
|
|
51
|
+
*
|
|
52
|
+
* The Term / prompt UI halves stay with the shell (the "which item / which
|
|
53
|
+
* monster / how many" menus and the map-highlight redraws): where a command
|
|
54
|
+
* needs a selection or count, this module takes it as a parameter. The map
|
|
55
|
+
* QUERY commands (query_feature / query_square_flag / peek_noise_scent) and
|
|
56
|
+
* dump_level_map port their DATA half only - they return the grids or map the
|
|
57
|
+
* shell would highlight or write, not the drawing.
|
|
58
|
+
*
|
|
59
|
+
* The item / player debug shells whose non-UI halves are engine data or state
|
|
60
|
+
* changes are ported here too (their Term rendering and menu loops stay with the
|
|
61
|
+
* shell, WP-14): wizDisplayItem (wiz_display_item DATA), wizPlayItemBegin /
|
|
62
|
+
* wizPlayItemReject / wizPlayItemAccept (the do_cmd_wiz_play_item session
|
|
63
|
+
* snapshot / restore / commit), wizStatItem (do_cmd_wiz_stat_item's make_object
|
|
64
|
+
* rarity sampler) and wizEditPlayerStart (do_cmd_wiz_edit_player_start's batch
|
|
65
|
+
* stat/gold/exp apply). The NOSCORE_* cheat-flag model and the markNoscore seam
|
|
66
|
+
* (15.3) live here as well.
|
|
67
|
+
*
|
|
68
|
+
* DEFERRED (see parity/ledger/wizard-debug.yaml): the wiz-spoil.c spoiler
|
|
69
|
+
* generators and the three Monte-Carlo collectors (do_cmd_wiz_collect_*) are
|
|
70
|
+
* dev-tooling ports that live in packages/cli (spoilers.ts, stats.ts,
|
|
71
|
+
* wiz-stats.ts) alongside the other headless generation harnesses, not in this
|
|
72
|
+
* engine module.
|
|
73
|
+
*/
|
|
74
|
+
import { EF, KF, ORIGIN, PROJ, TMD } from "../generated/index.js";
|
|
75
|
+
import { PLAYER_EXP, PY_MAX_EXP, playerExpGain, playerExpLose } from "../player/exp.js";
|
|
76
|
+
import { PY_MAX_LEVEL } from "../player/calcs.js";
|
|
77
|
+
import { STAT_MAX } from "../player/types.js";
|
|
78
|
+
import { applyMagic, copyArtifactData, egoApplyMagic, makeGold, makeObject, objectPrep, } from "../obj/make.js";
|
|
79
|
+
import { appendObjectCurse, objectCopy, objectWeightOne, removeObjectCurse, tvalCanHaveCharges, tvalCanHaveTimeout, tvalIsAmmo, tvalIsMoney, } from "../obj/object.js";
|
|
80
|
+
import { objectValue } from "../obj/value.js";
|
|
81
|
+
import { OBJ_NOTICE, objectLearnOnWield } from "../obj/knowledge.js";
|
|
82
|
+
import { MAX_PVAL, OBJ_MOD_MAX } from "../obj/types.js";
|
|
83
|
+
import { MON_GROUP } from "../mon/types.js";
|
|
84
|
+
import { PY_FOOD_FULL_DEFAULT as PY_FOOD_FULL } from "../player/birth.js";
|
|
85
|
+
import { cheatMonsterLore, getLore, wipeMonsterLore } from "../mon/lore.js";
|
|
86
|
+
import { sourceNone, sourcePlayer } from "../effects/interpreter.js";
|
|
87
|
+
import { scatterExt } from "../world/scatter.js";
|
|
88
|
+
import { deleteMonster, monsterMax, squareIsEmpty } from "./context.js";
|
|
89
|
+
import { dropNear, floorPile } from "./floor.js";
|
|
90
|
+
import { objectIsInQuiver } from "./gear.js";
|
|
91
|
+
import { placeNewMonster } from "./mon-place.js";
|
|
92
|
+
import { placeTrap, squareIsTrap, squareIsWebbed } from "./trap.js";
|
|
93
|
+
import { pushObject } from "./project-feat.js";
|
|
94
|
+
import { wizLightLevel } from "./effect-terrain.js";
|
|
95
|
+
import { squareIsKnown, updatePlayerObjectKnowledge } from "./known.js";
|
|
96
|
+
import { buildEffectContext } from "./effect-env.js";
|
|
97
|
+
import { attachGameEnv } from "./effect-game-env.js";
|
|
98
|
+
/**
|
|
99
|
+
* player_can_debug_prereq (player-util.c L1296-1307): the gate on every debug
|
|
100
|
+
* command. Returns false (and the command no-ops) until the character has
|
|
101
|
+
* consented to debug mode. Deliberately independent of wizard mode.
|
|
102
|
+
*/
|
|
103
|
+
export function debugEnabled(deps) {
|
|
104
|
+
return deps.debug === true;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* player->wizard (cmd-misc.c L40-67). Only wizCheatDeath gates on this here; see
|
|
108
|
+
* WizardDeps.wizard for where the other wizard-mode behaviours live.
|
|
109
|
+
*/
|
|
110
|
+
export function wizardEnabled(deps) {
|
|
111
|
+
return deps.wizard === true;
|
|
112
|
+
}
|
|
113
|
+
/* ------------------------------------------------------------------ *
|
|
114
|
+
* NOSCORE cheat flags (player.h L92-100).
|
|
115
|
+
* ------------------------------------------------------------------ */
|
|
116
|
+
/**
|
|
117
|
+
* NOSCORE_*: the "ways in which players can be marked as cheaters" bit model
|
|
118
|
+
* (player.h L92-100). Stored on player->noscore (a uint16), persisted in the
|
|
119
|
+
* savefile (save.c L622 wr_u16b / load.c L965 rd_u16b) and re-asserted from the
|
|
120
|
+
* savefile's own wizard flag on load (savefile.c L650). A set cheat bit
|
|
121
|
+
* invalidates the high-score entry (score.c L289). The bit values match
|
|
122
|
+
* upstream exactly so a loaded uint16 is interpreted identically.
|
|
123
|
+
*/
|
|
124
|
+
export const NOSCORE = {
|
|
125
|
+
/** Character used wizard mode (wiz-debug.c L32, cmd-misc.c L51). */
|
|
126
|
+
WIZARD: 0x0002,
|
|
127
|
+
/** Character used a debug command / debug options (player-util.c L1303). */
|
|
128
|
+
DEBUG: 0x0008,
|
|
129
|
+
/** Character jumped levels (cmd-wizard.c L1366); transient, cleared after
|
|
130
|
+
* the jump completes (generate.c L824-828). Does NOT invalidate the score. */
|
|
131
|
+
JUMPING: 0x0010,
|
|
132
|
+
/** Character was played by the Borg (cmd-misc.c L140, main-win.c L3396). */
|
|
133
|
+
BORG: 0x0020,
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* The two upstream build switches that decide whether NOSCORE_BORG exists and
|
|
137
|
+
* whether it disqualifies a score. Upstream expresses these as #ifdefs
|
|
138
|
+
* (player.h L97-99 wraps the bit in ALLOW_BORG; score.c L292-297 skips the borg
|
|
139
|
+
* branch when SCORE_BORGS is defined), so the port records the configuration it
|
|
140
|
+
* builds under as named constants instead of leaving the choice implicit.
|
|
141
|
+
*
|
|
142
|
+
* ALLOW_BORG: true. The Borg ships as a bundled mod (decision 31), so the bit
|
|
143
|
+
* exists and can be set.
|
|
144
|
+
* SCORE_BORGS: false, matching upstream's default - a borg-played character is
|
|
145
|
+
* not eligible for the high-score table.
|
|
146
|
+
*/
|
|
147
|
+
export const ALLOW_BORG = true;
|
|
148
|
+
export const SCORE_BORGS = false;
|
|
149
|
+
/**
|
|
150
|
+
* The cheat bits that invalidate a high-score entry (score.c L289-298).
|
|
151
|
+
* NOSCORE_WIZARD | NOSCORE_DEBUG always disqualify; NOSCORE_BORG additionally
|
|
152
|
+
* does so only under ALLOW_BORG && !SCORE_BORGS, which is this port's
|
|
153
|
+
* configuration. NOSCORE_JUMPING is deliberately absent: it is a transient
|
|
154
|
+
* generation marker, not a scoring disqualifier.
|
|
155
|
+
*/
|
|
156
|
+
export const NOSCORE_SCORE_INVALIDATING = NOSCORE.WIZARD |
|
|
157
|
+
NOSCORE.DEBUG |
|
|
158
|
+
(ALLOW_BORG && !SCORE_BORGS ? NOSCORE.BORG : 0);
|
|
159
|
+
/** markNoscore (obj-mark analogue): OR cheat bits into a noscore value. Pure. */
|
|
160
|
+
export function markNoscore(current, bits) {
|
|
161
|
+
return (current | bits) & 0xffff;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* noscoreInvalidatesScore (score.c L289): true when the character's cheat flags
|
|
165
|
+
* disqualify it from the high-score table.
|
|
166
|
+
*/
|
|
167
|
+
export function noscoreInvalidatesScore(noscore) {
|
|
168
|
+
return (noscore & NOSCORE_SCORE_INVALIDATING) !== 0;
|
|
169
|
+
}
|
|
170
|
+
/** Build a game effect context (the same shape spellCast / useAux build). */
|
|
171
|
+
function effContext(state, eff) {
|
|
172
|
+
const base = buildEffectContext(state, eff.envDeps);
|
|
173
|
+
return attachGameEnv(base, {
|
|
174
|
+
state,
|
|
175
|
+
cast: eff.cast,
|
|
176
|
+
...(eff.teleport ? { teleport: eff.teleport } : {}),
|
|
177
|
+
...(eff.general ? { general: eff.general } : {}),
|
|
178
|
+
...(eff.item ? { item: eff.item } : {}),
|
|
179
|
+
...(eff.summon ? { summon: eff.summon } : {}),
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
/** Run one effect_simple with a player (or none) source; false if no bundle. */
|
|
183
|
+
function runSimple(state, eff, index, params) {
|
|
184
|
+
if (!eff)
|
|
185
|
+
return false;
|
|
186
|
+
const ctx = effContext(state, eff);
|
|
187
|
+
return eff.registry.effectSimple(index, ctx, {
|
|
188
|
+
origin: params.none ? sourceNone() : sourcePlayer(),
|
|
189
|
+
diceString: params.diceString ?? "0",
|
|
190
|
+
subtype: params.subtype ?? 0,
|
|
191
|
+
radius: params.radius ?? 0,
|
|
192
|
+
other: params.other ?? 0,
|
|
193
|
+
y: params.y ?? 0,
|
|
194
|
+
x: params.x ?? 0,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
/* ------------------------------------------------------------------ *
|
|
198
|
+
* Shared object-creation building blocks (cmd-wizard.c L139-L302).
|
|
199
|
+
* ------------------------------------------------------------------ */
|
|
200
|
+
/**
|
|
201
|
+
* wiz_create_object_from_kind (cmd-wizard.c L169): a fresh instance of a kind,
|
|
202
|
+
* money made as gold, everything else prepped and given plain magic (no
|
|
203
|
+
* messages, no artifacts).
|
|
204
|
+
*/
|
|
205
|
+
export function wizCreateObjectFromKind(state, kind, makeDeps) {
|
|
206
|
+
if (tvalIsMoney(kind.tval)) {
|
|
207
|
+
return makeGold(state.rng, makeDeps, state.chunk.depth, kind.name);
|
|
208
|
+
}
|
|
209
|
+
const obj = objectPrep(state.rng, makeDeps.reg, makeDeps.constants, kind, state.chunk.depth, "randomise");
|
|
210
|
+
/* apply_magic(obj, depth, allow_artifacts=false, good=false, great=false,
|
|
211
|
+
* extra=false). */
|
|
212
|
+
applyMagic(state.rng, makeDeps, obj, state.chunk.depth, false, false, false, false, state.chunk.depth);
|
|
213
|
+
return obj;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* wiz_create_object_from_artifact (cmd-wizard.c L139): instantiate an artifact
|
|
217
|
+
* on its base kind and mark it created in the shared registry (L157), so the
|
|
218
|
+
* normal generation paths will not spawn it again.
|
|
219
|
+
*/
|
|
220
|
+
export function wizCreateObjectFromArtifact(state, art, makeDeps) {
|
|
221
|
+
if (!art.name)
|
|
222
|
+
return null;
|
|
223
|
+
const kind = makeDeps.reg.lookupKind(art.tval, art.sval);
|
|
224
|
+
if (!kind)
|
|
225
|
+
return null;
|
|
226
|
+
const obj = objectPrep(state.rng, makeDeps.reg, makeDeps.constants, kind, art.allocMin, "randomise");
|
|
227
|
+
obj.artifact = art;
|
|
228
|
+
copyArtifactData(state.rng, makeDeps.reg, obj, art);
|
|
229
|
+
makeDeps.artifacts.markCreated(art.aidx, true);
|
|
230
|
+
return obj;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* wiz_drop_object (cmd-wizard.c L292): mark the object as a cheat and drop it
|
|
234
|
+
* from heaven near the player.
|
|
235
|
+
*/
|
|
236
|
+
export function wizDropObject(state, obj) {
|
|
237
|
+
if (!obj)
|
|
238
|
+
return;
|
|
239
|
+
obj.origin = ORIGIN.CHEAT;
|
|
240
|
+
obj.originDepth = state.chunk.depth;
|
|
241
|
+
dropNear(state, obj, 0, state.actor.grid, true, true);
|
|
242
|
+
}
|
|
243
|
+
/* ------------------------------------------------------------------ *
|
|
244
|
+
* The command actions.
|
|
245
|
+
* ------------------------------------------------------------------ */
|
|
246
|
+
/**
|
|
247
|
+
* do_cmd_wiz_acquire (L389): acquire `quantity` good (or great) objects and
|
|
248
|
+
* drop them near the player. Wires to make_object (the acquirement() loop).
|
|
249
|
+
*/
|
|
250
|
+
export function wizAcquire(state, params, deps) {
|
|
251
|
+
if (!debugEnabled(deps) || !deps.makeDeps)
|
|
252
|
+
return false;
|
|
253
|
+
const great = params.great ?? false;
|
|
254
|
+
for (let i = 0; i < params.quantity; i++) {
|
|
255
|
+
/* acquirement: make_object(cave, level, good=true, great, extra=true). */
|
|
256
|
+
const obj = makeObject(state.rng, deps.makeDeps, state.chunk.depth, true, great, true, 0, state.chunk.depth);
|
|
257
|
+
if (!obj)
|
|
258
|
+
continue;
|
|
259
|
+
obj.origin = ORIGIN.ACQUIRE;
|
|
260
|
+
obj.originDepth = state.chunk.depth;
|
|
261
|
+
dropNear(state, obj, 0, state.actor.grid, true, true);
|
|
262
|
+
}
|
|
263
|
+
return true;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* do_cmd_wiz_advance (L414): max stats, a heap of gold, level 50, full HP/SP.
|
|
267
|
+
*/
|
|
268
|
+
export function wizAdvance(state, deps) {
|
|
269
|
+
if (!debugEnabled(deps) || !deps.expDeps)
|
|
270
|
+
return false;
|
|
271
|
+
const p = state.actor.player;
|
|
272
|
+
for (let i = 0; i < STAT_MAX; i++) {
|
|
273
|
+
p.statCur[i] = 118;
|
|
274
|
+
p.statMax[i] = 118;
|
|
275
|
+
}
|
|
276
|
+
p.au = 1000000;
|
|
277
|
+
playerExpGain(p, PY_MAX_EXP, deps.expDeps);
|
|
278
|
+
p.chp = p.mhp;
|
|
279
|
+
p.chpFrac = 0;
|
|
280
|
+
p.csp = p.msp;
|
|
281
|
+
p.cspFrac = 0;
|
|
282
|
+
return true;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* do_cmd_wiz_banish (L449): delete every monster within `range` grids
|
|
286
|
+
* (measured by mon->cdis, as upstream).
|
|
287
|
+
*/
|
|
288
|
+
export function wizBanish(state, params, deps) {
|
|
289
|
+
if (!debugEnabled(deps))
|
|
290
|
+
return false;
|
|
291
|
+
for (let i = 1; i < monsterMax(state); i++) {
|
|
292
|
+
const mon = state.monsters[i];
|
|
293
|
+
if (!mon)
|
|
294
|
+
continue;
|
|
295
|
+
if (mon.cdis > params.range)
|
|
296
|
+
continue;
|
|
297
|
+
deleteMonster(state, i);
|
|
298
|
+
}
|
|
299
|
+
return true;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* do_cmd_wiz_create_all_artifact (L728): create every artifact and drop them.
|
|
303
|
+
*/
|
|
304
|
+
export function wizCreateAllArtifact(state, deps) {
|
|
305
|
+
if (!debugEnabled(deps) || !deps.makeDeps || !deps.artifacts)
|
|
306
|
+
return false;
|
|
307
|
+
for (let i = 1; i < deps.artifacts.length; i++) {
|
|
308
|
+
const art = deps.artifacts[i];
|
|
309
|
+
if (!art)
|
|
310
|
+
continue;
|
|
311
|
+
wizDropObject(state, wizCreateObjectFromArtifact(state, art, deps.makeDeps));
|
|
312
|
+
}
|
|
313
|
+
return true;
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* do_cmd_wiz_create_all_artifact_from_tval (L746): create every artifact of a
|
|
317
|
+
* given tval.
|
|
318
|
+
*/
|
|
319
|
+
export function wizCreateAllArtifactFromTval(state, params, deps) {
|
|
320
|
+
if (!debugEnabled(deps) || !deps.makeDeps || !deps.artifacts)
|
|
321
|
+
return false;
|
|
322
|
+
for (let i = 1; i < deps.artifacts.length; i++) {
|
|
323
|
+
const art = deps.artifacts[i];
|
|
324
|
+
if (!art || art.tval !== params.tval)
|
|
325
|
+
continue;
|
|
326
|
+
wizDropObject(state, wizCreateObjectFromArtifact(state, art, deps.makeDeps));
|
|
327
|
+
}
|
|
328
|
+
return true;
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* do_cmd_wiz_create_all_obj (L780): create one of every ordinary kind (skip
|
|
332
|
+
* instant-artifact kinds) and drop them.
|
|
333
|
+
*/
|
|
334
|
+
export function wizCreateAllObj(state, deps) {
|
|
335
|
+
if (!debugEnabled(deps) || !deps.makeDeps)
|
|
336
|
+
return false;
|
|
337
|
+
const kinds = deps.makeDeps.reg.kinds;
|
|
338
|
+
for (const kind of kinds) {
|
|
339
|
+
if (!kind || !kind.base || !kind.base.name)
|
|
340
|
+
continue;
|
|
341
|
+
if (kind.kindFlags.has(KF_INSTA_ART))
|
|
342
|
+
continue;
|
|
343
|
+
wizDropObject(state, wizCreateObjectFromKind(state, kind, deps.makeDeps));
|
|
344
|
+
}
|
|
345
|
+
return true;
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* do_cmd_wiz_create_all_obj_from_tval (L803): create one of every kind with a
|
|
349
|
+
* given tval; `art` selects whether instant-artifact kinds are included.
|
|
350
|
+
*/
|
|
351
|
+
export function wizCreateAllObjFromTval(state, params, deps) {
|
|
352
|
+
if (!debugEnabled(deps) || !deps.makeDeps)
|
|
353
|
+
return false;
|
|
354
|
+
const art = params.art ?? false;
|
|
355
|
+
for (const kind of deps.makeDeps.reg.kinds) {
|
|
356
|
+
if (!kind || kind.tval !== params.tval)
|
|
357
|
+
continue;
|
|
358
|
+
if (!art && kind.kindFlags.has(KF_INSTA_ART))
|
|
359
|
+
continue;
|
|
360
|
+
wizDropObject(state, wizCreateObjectFromKind(state, kind, deps.makeDeps));
|
|
361
|
+
}
|
|
362
|
+
return true;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* do_cmd_wiz_create_artifact (L842): create one artifact by index.
|
|
366
|
+
*/
|
|
367
|
+
export function wizCreateArtifact(state, params, deps) {
|
|
368
|
+
if (!debugEnabled(deps) || !deps.makeDeps || !deps.artifacts)
|
|
369
|
+
return false;
|
|
370
|
+
const ind = params.index;
|
|
371
|
+
if (ind < 1 || ind >= deps.artifacts.length) {
|
|
372
|
+
deps.msg?.("That's not a valid artifact.");
|
|
373
|
+
return false;
|
|
374
|
+
}
|
|
375
|
+
const art = deps.artifacts[ind];
|
|
376
|
+
if (!art) {
|
|
377
|
+
deps.msg?.("That's not a valid artifact.");
|
|
378
|
+
return false;
|
|
379
|
+
}
|
|
380
|
+
wizDropObject(state, wizCreateObjectFromArtifact(state, art, deps.makeDeps));
|
|
381
|
+
return true;
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* do_cmd_wiz_create_obj (L873): create one object of a kind by index.
|
|
385
|
+
*/
|
|
386
|
+
export function wizCreateObj(state, params, deps) {
|
|
387
|
+
if (!debugEnabled(deps) || !deps.makeDeps)
|
|
388
|
+
return false;
|
|
389
|
+
const kinds = deps.makeDeps.reg.kinds;
|
|
390
|
+
const ind = params.index;
|
|
391
|
+
if (ind < 0 || ind >= kinds.length) {
|
|
392
|
+
deps.msg?.("That's not a valid kind of object.");
|
|
393
|
+
return false;
|
|
394
|
+
}
|
|
395
|
+
const kind = kinds[ind];
|
|
396
|
+
if (!kind) {
|
|
397
|
+
deps.msg?.("That's not a valid kind of object.");
|
|
398
|
+
return false;
|
|
399
|
+
}
|
|
400
|
+
wizDropObject(state, wizCreateObjectFromKind(state, kind, deps.makeDeps));
|
|
401
|
+
return true;
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* do_cmd_wiz_create_trap (L904): place a trap of type `index` under the player
|
|
405
|
+
* when the grid permits it.
|
|
406
|
+
*/
|
|
407
|
+
export function wizCreateTrap(state, params, deps) {
|
|
408
|
+
if (!debugEnabled(deps) || !deps.trapDeps)
|
|
409
|
+
return false;
|
|
410
|
+
const grid = state.actor.grid;
|
|
411
|
+
const tidx = params.index;
|
|
412
|
+
if (!state.chunk.isFloor(grid) ||
|
|
413
|
+
squareIsTrap(state, grid) ||
|
|
414
|
+
squareIsWebbed(state, grid) ||
|
|
415
|
+
floorPile(state, grid).length > 0) {
|
|
416
|
+
deps.msg?.("You can't place a trap there!");
|
|
417
|
+
return false;
|
|
418
|
+
}
|
|
419
|
+
if (state.chunk.depth === 0) {
|
|
420
|
+
deps.msg?.("You can't place a trap in the town!");
|
|
421
|
+
return false;
|
|
422
|
+
}
|
|
423
|
+
if (tidx < 1 || tidx >= deps.trapDeps.kinds.length) {
|
|
424
|
+
deps.msg?.("Trap not found.");
|
|
425
|
+
return false;
|
|
426
|
+
}
|
|
427
|
+
placeTrap(state, grid, tidx, 0, deps.trapDeps);
|
|
428
|
+
return true;
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* do_cmd_wiz_cure_all (L941): remove equipment curses, restore every stat and
|
|
432
|
+
* lost experience, top HP/SP, clear the affliction timers and feed the player.
|
|
433
|
+
*/
|
|
434
|
+
export function wizCureAll(state, deps) {
|
|
435
|
+
if (!debugEnabled(deps) || !deps.effect)
|
|
436
|
+
return false;
|
|
437
|
+
const p = state.actor.player;
|
|
438
|
+
/* Remove curses from equipped items. */
|
|
439
|
+
for (const handle of p.equipment) {
|
|
440
|
+
if (!handle)
|
|
441
|
+
continue;
|
|
442
|
+
const obj = state.gear.store.get(handle);
|
|
443
|
+
if (obj && obj.curses)
|
|
444
|
+
obj.curses = null;
|
|
445
|
+
}
|
|
446
|
+
const ctx = effContext(state, deps.effect);
|
|
447
|
+
/* Restore stats (EF_RESTORE_STAT, one per stat) and lost experience. */
|
|
448
|
+
for (let i = 0; i < STAT_MAX; i++) {
|
|
449
|
+
deps.effect.registry.effectSimple(EF.RESTORE_STAT, ctx, {
|
|
450
|
+
origin: sourcePlayer(),
|
|
451
|
+
diceString: "0",
|
|
452
|
+
subtype: i,
|
|
453
|
+
});
|
|
454
|
+
}
|
|
455
|
+
deps.effect.registry.effectSimple(EF.RESTORE_EXP, ctx, {
|
|
456
|
+
origin: sourceNone(),
|
|
457
|
+
diceString: "0",
|
|
458
|
+
});
|
|
459
|
+
/* Heal and restore mana. */
|
|
460
|
+
p.chp = p.mhp;
|
|
461
|
+
p.chpFrac = 0;
|
|
462
|
+
p.csp = p.msp;
|
|
463
|
+
p.cspFrac = 0;
|
|
464
|
+
/* Cure the affliction timers (player_clear_timed). */
|
|
465
|
+
const timed = ctx.player?.timed;
|
|
466
|
+
if (timed) {
|
|
467
|
+
for (const idx of CURE_ALL_TIMED)
|
|
468
|
+
timed.clearTimed(idx, true, false);
|
|
469
|
+
/* No longer hungry (player_set_timed FOOD). */
|
|
470
|
+
timed.setTimed(TMD.FOOD, PY_FOOD_FULL - 1, false, false);
|
|
471
|
+
}
|
|
472
|
+
deps.msg?.("You feel *much* better!");
|
|
473
|
+
return true;
|
|
474
|
+
}
|
|
475
|
+
/** The affliction timers cure_all clears (cmd-wizard.c L972-981). */
|
|
476
|
+
const CURE_ALL_TIMED = [
|
|
477
|
+
TMD.BLIND,
|
|
478
|
+
TMD.CONFUSED,
|
|
479
|
+
TMD.POISONED,
|
|
480
|
+
TMD.AFRAID,
|
|
481
|
+
TMD.PARALYZED,
|
|
482
|
+
TMD.IMAGE,
|
|
483
|
+
TMD.STUN,
|
|
484
|
+
TMD.CUT,
|
|
485
|
+
TMD.SLOW,
|
|
486
|
+
TMD.AMNESIA,
|
|
487
|
+
];
|
|
488
|
+
/**
|
|
489
|
+
* do_cmd_wiz_curse_item (L1004): add a curse (power > 0) or remove one
|
|
490
|
+
* (power == 0) on an item. The "which item / which curse" prompts are the
|
|
491
|
+
* shell's; the object, curse index and power arrive as parameters.
|
|
492
|
+
*/
|
|
493
|
+
export function wizCurseItem(state, params, deps) {
|
|
494
|
+
if (!debugEnabled(deps) || !deps.curses)
|
|
495
|
+
return false;
|
|
496
|
+
const { obj, index, power } = params;
|
|
497
|
+
if (index <= 0 || index >= deps.curses.length)
|
|
498
|
+
return false;
|
|
499
|
+
if (power < 0)
|
|
500
|
+
return false;
|
|
501
|
+
if (power) {
|
|
502
|
+
appendObjectCurse(state.rng, obj, index, power, deps.curses);
|
|
503
|
+
}
|
|
504
|
+
else if (!removeObjectCurse(obj, index)) {
|
|
505
|
+
return false;
|
|
506
|
+
}
|
|
507
|
+
return true;
|
|
508
|
+
}
|
|
509
|
+
/**
|
|
510
|
+
* do_cmd_wiz_detect_all_local (L1068): detect traps / doors / stairs / gold /
|
|
511
|
+
* objects / visible + invisible monsters in a 22x40 rectangle.
|
|
512
|
+
*/
|
|
513
|
+
export function wizDetectAllLocal(state, deps) {
|
|
514
|
+
if (!debugEnabled(deps) || !deps.effect)
|
|
515
|
+
return false;
|
|
516
|
+
const local = { y: 22, x: 40 };
|
|
517
|
+
runSimple(state, deps.effect, EF.DETECT_TRAPS, local);
|
|
518
|
+
runSimple(state, deps.effect, EF.DETECT_DOORS, local);
|
|
519
|
+
runSimple(state, deps.effect, EF.DETECT_STAIRS, local);
|
|
520
|
+
runSimple(state, deps.effect, EF.DETECT_GOLD, local);
|
|
521
|
+
runSimple(state, deps.effect, EF.DETECT_OBJECTS, local);
|
|
522
|
+
runSimple(state, deps.effect, EF.DETECT_VISIBLE_MONSTERS, local);
|
|
523
|
+
runSimple(state, deps.effect, EF.DETECT_INVISIBLE_MONSTERS, local);
|
|
524
|
+
return true;
|
|
525
|
+
}
|
|
526
|
+
/**
|
|
527
|
+
* do_cmd_wiz_detect_all_monsters (L1091): detect all monsters in a 500x500
|
|
528
|
+
* rectangle (i.e. the whole level).
|
|
529
|
+
*/
|
|
530
|
+
export function wizDetectAllMonsters(state, deps) {
|
|
531
|
+
if (!debugEnabled(deps) || !deps.effect)
|
|
532
|
+
return false;
|
|
533
|
+
const whole = { y: 500, x: 500 };
|
|
534
|
+
runSimple(state, deps.effect, EF.DETECT_VISIBLE_MONSTERS, whole);
|
|
535
|
+
runSimple(state, deps.effect, EF.DETECT_INVISIBLE_MONSTERS, whole);
|
|
536
|
+
return true;
|
|
537
|
+
}
|
|
538
|
+
/**
|
|
539
|
+
* do_cmd_wiz_magic_map (L1418): map the area around the player (22x40).
|
|
540
|
+
*/
|
|
541
|
+
export function wizMagicMap(state, deps) {
|
|
542
|
+
if (!debugEnabled(deps) || !deps.effect)
|
|
543
|
+
return false;
|
|
544
|
+
return runSimple(state, deps.effect, EF.MAP_AREA, { y: 22, x: 40 });
|
|
545
|
+
}
|
|
546
|
+
/**
|
|
547
|
+
* do_cmd_wiz_hit_all_los (L1303): PROJECT_LOS 10000 damage as PROJ_DISP_ALL
|
|
548
|
+
* (dispel every monster in line of sight).
|
|
549
|
+
*/
|
|
550
|
+
export function wizHitAllLos(state, deps) {
|
|
551
|
+
if (!debugEnabled(deps) || !deps.effect)
|
|
552
|
+
return false;
|
|
553
|
+
return runSimple(state, deps.effect, EF.PROJECT_LOS, {
|
|
554
|
+
diceString: "10000",
|
|
555
|
+
subtype: PROJ.DISP_ALL,
|
|
556
|
+
});
|
|
557
|
+
}
|
|
558
|
+
/**
|
|
559
|
+
* do_cmd_wiz_edit_player_exp (L1137): set the player's experience to `value`,
|
|
560
|
+
* clamped to [0, PY_MAX_EXP], gaining or losing to reach it.
|
|
561
|
+
*/
|
|
562
|
+
export function wizEditPlayerExp(state, params, deps) {
|
|
563
|
+
if (!debugEnabled(deps) || !deps.expDeps)
|
|
564
|
+
return false;
|
|
565
|
+
const p = state.actor.player;
|
|
566
|
+
const newv = Math.min(PY_MAX_EXP, Math.max(0, params.value));
|
|
567
|
+
if (newv > p.exp) {
|
|
568
|
+
playerExpGain(p, newv - p.exp, deps.expDeps);
|
|
569
|
+
}
|
|
570
|
+
else {
|
|
571
|
+
playerExpLose(p, p.exp - newv, false, deps.expDeps);
|
|
572
|
+
}
|
|
573
|
+
return true;
|
|
574
|
+
}
|
|
575
|
+
/**
|
|
576
|
+
* do_cmd_wiz_edit_player_gold (L1169): set the player's gold to `value`,
|
|
577
|
+
* clamped to [0, INT32_MAX].
|
|
578
|
+
*/
|
|
579
|
+
export function wizEditPlayerGold(state, params, deps) {
|
|
580
|
+
if (!debugEnabled(deps))
|
|
581
|
+
return false;
|
|
582
|
+
state.actor.player.au = Math.min(2147483647, Math.max(0, params.value));
|
|
583
|
+
return true;
|
|
584
|
+
}
|
|
585
|
+
/**
|
|
586
|
+
* do_cmd_wiz_edit_player_stat (L1247): set one stat to `value`, clamped to
|
|
587
|
+
* [3, 118].
|
|
588
|
+
*/
|
|
589
|
+
export function wizEditPlayerStat(state, params, deps) {
|
|
590
|
+
if (!debugEnabled(deps))
|
|
591
|
+
return false;
|
|
592
|
+
const { stat } = params;
|
|
593
|
+
if (stat < 0 || stat >= STAT_MAX)
|
|
594
|
+
return false;
|
|
595
|
+
const newv = Math.min(118, Math.max(3, params.value));
|
|
596
|
+
const p = state.actor.player;
|
|
597
|
+
p.statCur[stat] = newv;
|
|
598
|
+
p.statMax[stat] = newv;
|
|
599
|
+
return true;
|
|
600
|
+
}
|
|
601
|
+
/**
|
|
602
|
+
* do_cmd_wiz_increase_exp (L1314): gain `quantity` (>= 1) experience.
|
|
603
|
+
*/
|
|
604
|
+
export function wizIncreaseExp(state, params, deps) {
|
|
605
|
+
if (!debugEnabled(deps) || !deps.expDeps)
|
|
606
|
+
return false;
|
|
607
|
+
const n = params.quantity < 1 ? 1 : params.quantity;
|
|
608
|
+
playerExpGain(state.actor.player, n, deps.expDeps);
|
|
609
|
+
return true;
|
|
610
|
+
}
|
|
611
|
+
/**
|
|
612
|
+
* do_cmd_wiz_jump_level (L1339): jump to dungeon level `level` (dungeon_change_
|
|
613
|
+
* level - the port signals a pending level change). Out-of-range is a no-op.
|
|
614
|
+
*
|
|
615
|
+
* `chooseGen` is the answer to "Choose cave profile? " (L1360-1363). It is the
|
|
616
|
+
* ONLY thing that sets NOSCORE_JUMPING (L1365-1367), and that bit is not really
|
|
617
|
+
* a cheat marker: choose_profile consumes it as the one-shot signal to ask which
|
|
618
|
+
* profile to build (generate.c:824). Marking it unconditionally - which this
|
|
619
|
+
* function used to do - both mis-flags the savefile and would make every jump
|
|
620
|
+
* ask for a profile name.
|
|
621
|
+
*/
|
|
622
|
+
export function wizJumpLevel(state, params, deps) {
|
|
623
|
+
if (!debugEnabled(deps))
|
|
624
|
+
return false;
|
|
625
|
+
const level = params.level;
|
|
626
|
+
if (level < 0 || level >= state.z.maxDepth)
|
|
627
|
+
return false;
|
|
628
|
+
/* player->noscore |= NOSCORE_JUMPING (cmd-wizard.c L1366). */
|
|
629
|
+
if (params.chooseGen)
|
|
630
|
+
deps.markNoscore?.(NOSCORE.JUMPING);
|
|
631
|
+
deps.msg?.(`You jump to dungeon level ${level}.`);
|
|
632
|
+
state.targetDepth = level;
|
|
633
|
+
state.generateLevel = true;
|
|
634
|
+
return true;
|
|
635
|
+
}
|
|
636
|
+
/**
|
|
637
|
+
* do_cmd_wiz_learn_object_kinds (L1386): make the player aware of every kind up
|
|
638
|
+
* to `level`. Awareness lives in the per-game FlavorKnowledge in the port.
|
|
639
|
+
*/
|
|
640
|
+
export function wizLearnObjectKinds(state, params, deps) {
|
|
641
|
+
if (!debugEnabled(deps) || !deps.makeDeps || !deps.flavor)
|
|
642
|
+
return false;
|
|
643
|
+
for (const kind of deps.makeDeps.reg.kinds) {
|
|
644
|
+
if (!kind || !kind.name)
|
|
645
|
+
continue;
|
|
646
|
+
if (kind.level <= params.level)
|
|
647
|
+
deps.flavor.setAware(kind);
|
|
648
|
+
}
|
|
649
|
+
deps.msg?.("You now know about many items!");
|
|
650
|
+
return true;
|
|
651
|
+
}
|
|
652
|
+
/**
|
|
653
|
+
* do_cmd_wiz_recall_monster (L2161): fully learn a monster race's lore, or all
|
|
654
|
+
* races when `all` is set.
|
|
655
|
+
*/
|
|
656
|
+
export function wizRecallMonster(state, params, deps) {
|
|
657
|
+
if (!debugEnabled(deps))
|
|
658
|
+
return false;
|
|
659
|
+
if (params.all) {
|
|
660
|
+
if (!deps.races)
|
|
661
|
+
return false;
|
|
662
|
+
for (const race of deps.races) {
|
|
663
|
+
if (race)
|
|
664
|
+
cheatMonsterLore(race, getLore(state.lore, race));
|
|
665
|
+
}
|
|
666
|
+
return true;
|
|
667
|
+
}
|
|
668
|
+
if (!params.race)
|
|
669
|
+
return false;
|
|
670
|
+
cheatMonsterLore(params.race, getLore(state.lore, params.race));
|
|
671
|
+
return true;
|
|
672
|
+
}
|
|
673
|
+
/**
|
|
674
|
+
* do_cmd_wiz_wipe_recall (L2860): forget a monster race's lore, or all races.
|
|
675
|
+
*/
|
|
676
|
+
export function wizWipeRecall(state, params, deps) {
|
|
677
|
+
if (!debugEnabled(deps))
|
|
678
|
+
return false;
|
|
679
|
+
if (params.all) {
|
|
680
|
+
if (!deps.races)
|
|
681
|
+
return false;
|
|
682
|
+
for (const race of deps.races) {
|
|
683
|
+
if (race)
|
|
684
|
+
wipeMonsterLore(race, getLore(state.lore, race));
|
|
685
|
+
}
|
|
686
|
+
return true;
|
|
687
|
+
}
|
|
688
|
+
if (!params.race)
|
|
689
|
+
return false;
|
|
690
|
+
wipeMonsterLore(params.race, getLore(state.lore, params.race));
|
|
691
|
+
return true;
|
|
692
|
+
}
|
|
693
|
+
/**
|
|
694
|
+
* do_cmd_wiz_rerate (L2209): reroll the player's per-level hitpoint table until
|
|
695
|
+
* it lands in the legal band, and report the life rating. Returns the rating.
|
|
696
|
+
*/
|
|
697
|
+
export function wizRerate(state, deps) {
|
|
698
|
+
if (!debugEnabled(deps))
|
|
699
|
+
return null;
|
|
700
|
+
const p = state.actor.player;
|
|
701
|
+
let minValue = Math.trunc((PY_MAX_LEVEL * 3 * (p.hitdie - 1)) / 8);
|
|
702
|
+
minValue += PY_MAX_LEVEL;
|
|
703
|
+
let maxValue = Math.trunc((PY_MAX_LEVEL * 5 * (p.hitdie - 1)) / 8);
|
|
704
|
+
maxValue += PY_MAX_LEVEL;
|
|
705
|
+
p.playerHp[0] = p.hitdie;
|
|
706
|
+
for (;;) {
|
|
707
|
+
for (let i = 1; i < PY_MAX_LEVEL; i++) {
|
|
708
|
+
p.playerHp[i] = state.rng.randint1(p.hitdie) + p.playerHp[i - 1];
|
|
709
|
+
}
|
|
710
|
+
const top = p.playerHp[PY_MAX_LEVEL - 1];
|
|
711
|
+
if (top >= minValue && top <= maxValue)
|
|
712
|
+
break;
|
|
713
|
+
}
|
|
714
|
+
const percent = Math.trunc((p.playerHp[PY_MAX_LEVEL - 1] * 200) /
|
|
715
|
+
(p.hitdie + (PY_MAX_LEVEL - 1) * p.hitdie));
|
|
716
|
+
deps.msg?.(`Current Life Rating is ${percent}/100.`);
|
|
717
|
+
return percent;
|
|
718
|
+
}
|
|
719
|
+
/**
|
|
720
|
+
* do_cmd_wiz_reroll_item (L2254): reroll a non-artifact item on its kind at the
|
|
721
|
+
* player's depth. `roll` is 0 normal, 1 good, 2 excellent (good + great). The
|
|
722
|
+
* rerolled properties are written back onto the object in place.
|
|
723
|
+
*/
|
|
724
|
+
export function wizRerollItem(state, params, deps) {
|
|
725
|
+
if (!debugEnabled(deps) || !deps.makeDeps)
|
|
726
|
+
return false;
|
|
727
|
+
const { obj } = params;
|
|
728
|
+
if (obj.artifact)
|
|
729
|
+
return false;
|
|
730
|
+
const good = params.roll >= 1;
|
|
731
|
+
const great = params.roll >= 2;
|
|
732
|
+
const fresh = objectPrep(state.rng, deps.makeDeps.reg, deps.makeDeps.constants, obj.kind, state.chunk.depth, "randomise");
|
|
733
|
+
applyMagic(state.rng, deps.makeDeps, fresh, state.chunk.depth, false, good, great, false, state.chunk.depth);
|
|
734
|
+
/* Copy the rolled combat / property values back onto the target object,
|
|
735
|
+
* keeping its identity and pile position (obj is not a fresh allocation
|
|
736
|
+
* here, so pile links stay intact). */
|
|
737
|
+
obj.ego = fresh.ego;
|
|
738
|
+
obj.dd = fresh.dd;
|
|
739
|
+
obj.ds = fresh.ds;
|
|
740
|
+
obj.ac = fresh.ac;
|
|
741
|
+
obj.toA = fresh.toA;
|
|
742
|
+
obj.toH = fresh.toH;
|
|
743
|
+
obj.toD = fresh.toD;
|
|
744
|
+
obj.weight = fresh.weight;
|
|
745
|
+
for (let i = 0; i < obj.modifiers.length; i++) {
|
|
746
|
+
obj.modifiers[i] = fresh.modifiers[i];
|
|
747
|
+
}
|
|
748
|
+
obj.flags.copy(fresh.flags);
|
|
749
|
+
obj.slays = fresh.slays;
|
|
750
|
+
obj.brands = fresh.brands;
|
|
751
|
+
obj.curses = fresh.curses;
|
|
752
|
+
for (let i = 0; i < obj.elInfo.length; i++) {
|
|
753
|
+
const dst = obj.elInfo[i];
|
|
754
|
+
const src = fresh.elInfo[i];
|
|
755
|
+
dst.resLevel = src.resLevel;
|
|
756
|
+
dst.flags = src.flags;
|
|
757
|
+
}
|
|
758
|
+
obj.origin = ORIGIN.CHEAT;
|
|
759
|
+
return true;
|
|
760
|
+
}
|
|
761
|
+
/**
|
|
762
|
+
* do_cmd_wiz_tweak_item (L2698): apply the complete DATA command. The shell
|
|
763
|
+
* owns the prompts; the values arrive as parameters. Every field is optional;
|
|
764
|
+
* only supplied fields are changed. Selecting an ego or artifact follows C's
|
|
765
|
+
* object_prep + ego_apply_magic / copy_artifact_data sequence, including its
|
|
766
|
+
* RNG draws, before the scalar modifier prompts are applied.
|
|
767
|
+
*/
|
|
768
|
+
export function wizTweakItem(state, params, deps) {
|
|
769
|
+
if (!debugEnabled(deps))
|
|
770
|
+
return false;
|
|
771
|
+
const { obj } = params;
|
|
772
|
+
if (obj.artifact)
|
|
773
|
+
return false;
|
|
774
|
+
const copyPreparedFields = (fresh) => {
|
|
775
|
+
/* object_prep mutates the existing C object while preserving its pile /
|
|
776
|
+
* identity fields. Copy the generated fields back while retaining those
|
|
777
|
+
* live carrier fields in the port's object model. */
|
|
778
|
+
obj.ego = fresh.ego;
|
|
779
|
+
obj.artifact = fresh.artifact;
|
|
780
|
+
obj.tval = fresh.tval;
|
|
781
|
+
obj.sval = fresh.sval;
|
|
782
|
+
obj.pval = fresh.pval;
|
|
783
|
+
obj.weight = fresh.weight;
|
|
784
|
+
obj.dd = fresh.dd;
|
|
785
|
+
obj.ds = fresh.ds;
|
|
786
|
+
obj.ac = fresh.ac;
|
|
787
|
+
obj.toA = fresh.toA;
|
|
788
|
+
obj.toH = fresh.toH;
|
|
789
|
+
obj.toD = fresh.toD;
|
|
790
|
+
obj.flags.copy(fresh.flags);
|
|
791
|
+
for (let i = 0; i < obj.modifiers.length; i++) {
|
|
792
|
+
obj.modifiers[i] = fresh.modifiers[i];
|
|
793
|
+
}
|
|
794
|
+
for (let i = 0; i < obj.elInfo.length; i++) {
|
|
795
|
+
obj.elInfo[i].resLevel = fresh.elInfo[i].resLevel;
|
|
796
|
+
obj.elInfo[i].flags = fresh.elInfo[i].flags;
|
|
797
|
+
}
|
|
798
|
+
obj.brands = fresh.brands ? [...fresh.brands] : null;
|
|
799
|
+
obj.slays = fresh.slays ? [...fresh.slays] : null;
|
|
800
|
+
obj.curses = fresh.curses ? fresh.curses.map((c) => ({ ...c })) : null;
|
|
801
|
+
obj.effect = fresh.effect;
|
|
802
|
+
obj.effectMsg = fresh.effectMsg;
|
|
803
|
+
obj.activation = fresh.activation;
|
|
804
|
+
obj.time = { ...fresh.time };
|
|
805
|
+
obj.timeout = fresh.timeout;
|
|
806
|
+
};
|
|
807
|
+
if (params.ego !== undefined) {
|
|
808
|
+
if (params.ego && !deps.makeDeps)
|
|
809
|
+
return false;
|
|
810
|
+
if (params.ego && deps.makeDeps) {
|
|
811
|
+
const fresh = objectPrep(state.rng, deps.makeDeps.reg, deps.makeDeps.constants, obj.kind, state.chunk.depth, "randomise");
|
|
812
|
+
fresh.ego = params.ego;
|
|
813
|
+
egoApplyMagic(state.rng, deps.makeDeps.reg, fresh, state.chunk.depth);
|
|
814
|
+
copyPreparedFields(fresh);
|
|
815
|
+
}
|
|
816
|
+
else {
|
|
817
|
+
obj.ego = null;
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
if (params.artifact !== undefined) {
|
|
821
|
+
if (params.artifact && !deps.makeDeps)
|
|
822
|
+
return false;
|
|
823
|
+
if (params.artifact && deps.makeDeps) {
|
|
824
|
+
const fresh = objectPrep(state.rng, deps.makeDeps.reg, deps.makeDeps.constants, obj.kind, params.artifact.allocMin, "randomise");
|
|
825
|
+
fresh.ego = null;
|
|
826
|
+
fresh.artifact = params.artifact;
|
|
827
|
+
copyArtifactData(state.rng, deps.makeDeps.reg, fresh, params.artifact);
|
|
828
|
+
copyPreparedFields(fresh);
|
|
829
|
+
}
|
|
830
|
+
else {
|
|
831
|
+
obj.artifact = null;
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
if (params.modifiers) {
|
|
835
|
+
for (let i = 0; i < obj.modifiers.length && i < params.modifiers.length; i++) {
|
|
836
|
+
obj.modifiers[i] = params.modifiers[i];
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
if (params.toA !== undefined)
|
|
840
|
+
obj.toA = params.toA;
|
|
841
|
+
if (params.toH !== undefined)
|
|
842
|
+
obj.toH = params.toH;
|
|
843
|
+
if (params.toD !== undefined)
|
|
844
|
+
obj.toD = params.toD;
|
|
845
|
+
return true;
|
|
846
|
+
}
|
|
847
|
+
/**
|
|
848
|
+
* do_cmd_wiz_summon_named (L2569): summon a specific monster near the player.
|
|
849
|
+
* Wires to scatter_ext + place_new_monster, trying up to 10 empty grids.
|
|
850
|
+
*/
|
|
851
|
+
export function wizSummonNamed(state, params, deps) {
|
|
852
|
+
if (!debugEnabled(deps) || !deps.monPlace)
|
|
853
|
+
return false;
|
|
854
|
+
const info = { index: 0, role: MON_GROUP.LEADER };
|
|
855
|
+
for (let i = 0; i < 10; i++) {
|
|
856
|
+
const spots = scatterExt(state.chunk, state.rng, 1, state.actor.grid, 1, true, (_c, g) => squareIsEmpty(state, g));
|
|
857
|
+
if (spots.length === 0) {
|
|
858
|
+
deps.msg?.("Could not place monster.");
|
|
859
|
+
return false;
|
|
860
|
+
}
|
|
861
|
+
/* wiz_create_monster (cmd-wizard.c L2614-2615): ORIGIN_DROP_WIZARD. */
|
|
862
|
+
if (placeNewMonster(state, spots[0], params.race, true, true, info, deps.monPlace, ORIGIN.DROP_WIZARD)) {
|
|
863
|
+
return true;
|
|
864
|
+
}
|
|
865
|
+
}
|
|
866
|
+
deps.msg?.("Could not place monster.");
|
|
867
|
+
return false;
|
|
868
|
+
}
|
|
869
|
+
/**
|
|
870
|
+
* do_cmd_wiz_summon_random (L2629): summon `quantity` random monsters near the
|
|
871
|
+
* player (one EF_SUMMON per monster, value 1).
|
|
872
|
+
*/
|
|
873
|
+
export function wizSummonRandom(state, params, deps) {
|
|
874
|
+
if (!debugEnabled(deps) || !deps.effect)
|
|
875
|
+
return false;
|
|
876
|
+
const n = params.quantity < 1 ? 1 : params.quantity;
|
|
877
|
+
for (let i = 0; i < n; i++) {
|
|
878
|
+
runSimple(state, deps.effect, EF.SUMMON, { diceString: "1" });
|
|
879
|
+
}
|
|
880
|
+
return true;
|
|
881
|
+
}
|
|
882
|
+
/**
|
|
883
|
+
* do_cmd_wiz_teleport_random (L2651): teleport the player a given range.
|
|
884
|
+
*/
|
|
885
|
+
export function wizTeleportRandom(state, params, deps) {
|
|
886
|
+
if (!debugEnabled(deps) || !deps.effect || params.range < 1)
|
|
887
|
+
return false;
|
|
888
|
+
return runSimple(state, deps.effect, EF.TELEPORT, {
|
|
889
|
+
diceString: String(params.range),
|
|
890
|
+
});
|
|
891
|
+
}
|
|
892
|
+
/**
|
|
893
|
+
* do_cmd_wiz_teleport_to (L2673): teleport the player onto a target grid, if it
|
|
894
|
+
* is passable.
|
|
895
|
+
*/
|
|
896
|
+
export function wizTeleportTo(state, params, deps) {
|
|
897
|
+
if (!debugEnabled(deps) || !deps.effect)
|
|
898
|
+
return false;
|
|
899
|
+
if (!state.chunk.isPassable(params.grid)) {
|
|
900
|
+
deps.msg?.("The square you are aiming for is impassable.");
|
|
901
|
+
return false;
|
|
902
|
+
}
|
|
903
|
+
return runSimple(state, deps.effect, EF.TELEPORT_TO, {
|
|
904
|
+
y: params.grid.y,
|
|
905
|
+
x: params.grid.x,
|
|
906
|
+
});
|
|
907
|
+
}
|
|
908
|
+
/**
|
|
909
|
+
* do_cmd_wiz_push_object (L1871): push the pile off a chosen grid.
|
|
910
|
+
*/
|
|
911
|
+
export function wizPushObject(state, params, deps) {
|
|
912
|
+
if (!debugEnabled(deps))
|
|
913
|
+
return false;
|
|
914
|
+
pushObject(state, params.grid);
|
|
915
|
+
return true;
|
|
916
|
+
}
|
|
917
|
+
/**
|
|
918
|
+
* do_cmd_wiz_wizard_light (L2907): permanently light and know the whole level.
|
|
919
|
+
*/
|
|
920
|
+
export function wizWizardLight(state, deps) {
|
|
921
|
+
if (!debugEnabled(deps))
|
|
922
|
+
return false;
|
|
923
|
+
/* wiz_light(cave, player, true) (cmd-wizard.c:2909): the wizard command is
|
|
924
|
+
* always the `full` form, so it square_know_piles rather than sense_piles. */
|
|
925
|
+
wizLightLevel(state, true, true);
|
|
926
|
+
return true;
|
|
927
|
+
}
|
|
928
|
+
/**
|
|
929
|
+
* wiz_cheat_death (wiz-debug.c L28): survive a lethal blow - reset age, refill
|
|
930
|
+
* HP/SP, cure the afflictions, feed, cancel recall / deep descent and return to
|
|
931
|
+
* town. The recall / deep-descent counters are player upkeep the port carries
|
|
932
|
+
* on the player; word_recall / deep_descent live there.
|
|
933
|
+
*/
|
|
934
|
+
export function wizCheatDeath(state, deps) {
|
|
935
|
+
/* player->wizard || OPT(player, cheat_live) (player-util.c L246); the caller
|
|
936
|
+
* (game/take-hit-hooks.ts) enforces the cheat_live half. */
|
|
937
|
+
if (!wizardEnabled(deps))
|
|
938
|
+
return false;
|
|
939
|
+
const p = state.actor.player;
|
|
940
|
+
/* player->noscore |= NOSCORE_WIZARD (wiz-debug.c L32). */
|
|
941
|
+
deps.markNoscore?.(NOSCORE.WIZARD);
|
|
942
|
+
p.age = 1;
|
|
943
|
+
state.isDead = false;
|
|
944
|
+
p.chp = p.mhp;
|
|
945
|
+
p.chpFrac = 0;
|
|
946
|
+
p.csp = p.msp;
|
|
947
|
+
p.cspFrac = 0;
|
|
948
|
+
/* Timed clear + food need the effect/timed bundle (wiz-debug.c L43-53). When
|
|
949
|
+
* the shell has not assembled it yet, HP/SP/age still revive (W2-009). */
|
|
950
|
+
if (deps.effect) {
|
|
951
|
+
const ctx = effContext(state, deps.effect);
|
|
952
|
+
const timed = ctx.player?.timed;
|
|
953
|
+
if (timed) {
|
|
954
|
+
for (const idx of CHEAT_DEATH_TIMED)
|
|
955
|
+
timed.clearTimed(idx, true, false);
|
|
956
|
+
timed.setTimed(TMD.FOOD, PY_FOOD_FULL - 1, false, false);
|
|
957
|
+
}
|
|
958
|
+
}
|
|
959
|
+
/* Cancel recall (wiz-debug.c L56-64) and deep descent (L67-74). Both are
|
|
960
|
+
* counters on the player, so zeroing them is state, not UI - and without this
|
|
961
|
+
* a cheated death left a pending recall or descent still counting down in
|
|
962
|
+
* process_world, which would fire from the town you were just returned to. */
|
|
963
|
+
if (p.wordRecall) {
|
|
964
|
+
deps.msg?.("A tension leaves the air around you...");
|
|
965
|
+
p.wordRecall = 0;
|
|
966
|
+
}
|
|
967
|
+
if (p.deepDescent) {
|
|
968
|
+
deps.msg?.("The air around you stops swirling...");
|
|
969
|
+
p.deepDescent = 0;
|
|
970
|
+
}
|
|
971
|
+
/* Back to the town. */
|
|
972
|
+
state.targetDepth = 0;
|
|
973
|
+
state.generateLevel = true;
|
|
974
|
+
return true;
|
|
975
|
+
}
|
|
976
|
+
/** The affliction timers cheat_death clears (wiz-debug.c L43-50). */
|
|
977
|
+
const CHEAT_DEATH_TIMED = [
|
|
978
|
+
TMD.BLIND,
|
|
979
|
+
TMD.CONFUSED,
|
|
980
|
+
TMD.POISONED,
|
|
981
|
+
TMD.AFRAID,
|
|
982
|
+
TMD.PARALYZED,
|
|
983
|
+
TMD.IMAGE,
|
|
984
|
+
TMD.STUN,
|
|
985
|
+
TMD.CUT,
|
|
986
|
+
];
|
|
987
|
+
export function wizDisplayItem(obj, deps, opts = {}) {
|
|
988
|
+
if (!debugEnabled(deps) || !deps.makeDeps)
|
|
989
|
+
return null;
|
|
990
|
+
const all = opts.all ?? true;
|
|
991
|
+
const known = opts.known ?? null;
|
|
992
|
+
/* The object the "+" combat fields and the known flag set are read from. */
|
|
993
|
+
const view = all ? obj : known ?? obj;
|
|
994
|
+
return {
|
|
995
|
+
dd: obj.dd,
|
|
996
|
+
ds: obj.ds,
|
|
997
|
+
toH: view.toH,
|
|
998
|
+
toD: view.toD,
|
|
999
|
+
ac: obj.ac,
|
|
1000
|
+
toA: view.toA,
|
|
1001
|
+
kidx: obj.kind.kidx,
|
|
1002
|
+
tval: obj.tval,
|
|
1003
|
+
sval: obj.sval,
|
|
1004
|
+
weight: objectWeightOne(obj, deps.curses),
|
|
1005
|
+
timeout: obj.timeout,
|
|
1006
|
+
number: obj.number,
|
|
1007
|
+
pval: obj.pval,
|
|
1008
|
+
name1: obj.artifact ? obj.artifact.aidx : 0,
|
|
1009
|
+
egoidx: obj.ego ? obj.ego.eidx : -1,
|
|
1010
|
+
cost: objectValue(deps.makeDeps.reg, obj, 1, true),
|
|
1011
|
+
flags: obj.flags,
|
|
1012
|
+
flagsKnown: (known ?? obj).flags,
|
|
1013
|
+
};
|
|
1014
|
+
}
|
|
1015
|
+
/**
|
|
1016
|
+
* do_cmd_wiz_change_item_quantity (CMD_WIZ_CHANGE_ITEM_QUANTITY, cmd-wizard.c
|
|
1017
|
+
* L484-575), the [q] entry of the do_cmd_wiz_play_item session (L1771-1789).
|
|
1018
|
+
*
|
|
1019
|
+
* Refuses an equipped item ("Can not change the quantity of an equipped item.",
|
|
1020
|
+
* L495) and any artifact ("Can not modify the quantity of an artifact.", L501),
|
|
1021
|
+
* then computes the ceiling nmax the same three ways upstream does (L505-517):
|
|
1022
|
+
* - obj->kind->base->max_stack, always;
|
|
1023
|
+
* - for a charge-carrying device with pval > 0, (MAX_PVAL * number) / pval, so
|
|
1024
|
+
* the scaled-up charges cannot overflow MAX_PVAL;
|
|
1025
|
+
* - for a quiver item, quiver_slot_size / (ammo ? 1 : thrown_quiver_mult).
|
|
1026
|
+
* The requested count is then clamped to [1, nmax] (L520 MAX(1, MIN(nmax, n))).
|
|
1027
|
+
*
|
|
1028
|
+
* Upstream warts preserved: charges and timeouts are rescaled by INTEGER
|
|
1029
|
+
* division `(pval * n) / number` BEFORE obj->number is assigned (L524-530), so
|
|
1030
|
+
* both reads use the OLD number; and the whole body is skipped when n equals the
|
|
1031
|
+
* current number, leaving charges untouched. `update` false suppresses only the
|
|
1032
|
+
* weight/upkeep refresh (L551-570), never the number change itself.
|
|
1033
|
+
*
|
|
1034
|
+
* The PU_BONUS / PU_INVEN / PN_COMBINE / PR_* upkeep bits are UI (the shell's);
|
|
1035
|
+
* the carried-weight arithmetic upstream does alongside them IS state and is
|
|
1036
|
+
* applied here.
|
|
1037
|
+
*/
|
|
1038
|
+
export function wizChangeItemQuantity(state, params, deps) {
|
|
1039
|
+
if (!debugEnabled(deps) || !deps.makeDeps)
|
|
1040
|
+
return null;
|
|
1041
|
+
const { obj, handle } = params;
|
|
1042
|
+
const p = state.actor.player;
|
|
1043
|
+
/* cmd-wizard.c L494-497: an explicitly supplied equipped item is refused. */
|
|
1044
|
+
if (handle !== undefined && p.equipment.includes(handle)) {
|
|
1045
|
+
deps.msg?.("Can not change the quantity of an equipped item.");
|
|
1046
|
+
return null;
|
|
1047
|
+
}
|
|
1048
|
+
/* L499-503: artifacts are one of a kind. */
|
|
1049
|
+
if (obj.artifact) {
|
|
1050
|
+
deps.msg?.("Can not modify the quantity of an artifact.");
|
|
1051
|
+
return null;
|
|
1052
|
+
}
|
|
1053
|
+
const z = deps.makeDeps.constants;
|
|
1054
|
+
let nmax = obj.kind.base.maxStack;
|
|
1055
|
+
if (tvalCanHaveCharges(obj.tval) && obj.pval > 0 && obj.number > 0) {
|
|
1056
|
+
nmax = Math.min(Math.trunc((MAX_PVAL * obj.number) / obj.pval), nmax);
|
|
1057
|
+
}
|
|
1058
|
+
if (handle !== undefined && objectIsInQuiver(state.gear, handle)) {
|
|
1059
|
+
nmax = Math.min(Math.trunc(z.quiverSlotSize / (tvalIsAmmo(obj.tval) ? 1 : z.thrownQuiverMult)), nmax);
|
|
1060
|
+
}
|
|
1061
|
+
const n = Math.max(1, Math.min(nmax, params.quantity));
|
|
1062
|
+
if (n === obj.number)
|
|
1063
|
+
return { number: obj.number, max: nmax, changed: false };
|
|
1064
|
+
/* L523-530: rescale charges / timeouts against the OLD number. */
|
|
1065
|
+
if (tvalCanHaveCharges(obj.tval) && obj.number > 0) {
|
|
1066
|
+
obj.pval = Math.trunc((obj.pval * n) / obj.number);
|
|
1067
|
+
}
|
|
1068
|
+
if (tvalCanHaveTimeout(obj.tval) && obj.number > 0) {
|
|
1069
|
+
obj.timeout = Math.trunc((obj.timeout * n) / obj.number);
|
|
1070
|
+
}
|
|
1071
|
+
/* L532-570: with "update" absent or true, restate the carried weight. */
|
|
1072
|
+
if ((params.update ?? true) && handle !== undefined) {
|
|
1073
|
+
const one = objectWeightOne(obj, deps.curses);
|
|
1074
|
+
p.upkeep.totalWeight -= obj.number * one;
|
|
1075
|
+
p.upkeep.totalWeight += n * one;
|
|
1076
|
+
}
|
|
1077
|
+
obj.number = n;
|
|
1078
|
+
return { number: n, max: nmax, changed: true };
|
|
1079
|
+
}
|
|
1080
|
+
/**
|
|
1081
|
+
* wizPlayItemBegin (do_cmd_wiz_play_item, cmd-wizard.c L1642-1645): snapshot the
|
|
1082
|
+
* object so the [t]weak / [r]eroll / [c]urse edits can be rejected. Upstream
|
|
1083
|
+
* allocates a fresh object and object_copy()s the working item into it; the port
|
|
1084
|
+
* uses objectCopy (obj/object.ts) which produces the same value snapshot.
|
|
1085
|
+
* Returns the preserved copy the shell hands back to Accept / Reject.
|
|
1086
|
+
*/
|
|
1087
|
+
export function wizPlayItemBegin(obj, deps) {
|
|
1088
|
+
if (!debugEnabled(deps))
|
|
1089
|
+
return null;
|
|
1090
|
+
return objectCopy(obj);
|
|
1091
|
+
}
|
|
1092
|
+
/** The mutable item properties wiz_play_item's reject restores (object_copy). */
|
|
1093
|
+
function restoreItemFields(dst, src) {
|
|
1094
|
+
dst.kind = src.kind;
|
|
1095
|
+
dst.ego = src.ego;
|
|
1096
|
+
dst.artifact = src.artifact;
|
|
1097
|
+
dst.tval = src.tval;
|
|
1098
|
+
dst.sval = src.sval;
|
|
1099
|
+
dst.pval = src.pval;
|
|
1100
|
+
dst.weight = src.weight;
|
|
1101
|
+
dst.dd = src.dd;
|
|
1102
|
+
dst.ds = src.ds;
|
|
1103
|
+
dst.ac = src.ac;
|
|
1104
|
+
dst.toA = src.toA;
|
|
1105
|
+
dst.toH = src.toH;
|
|
1106
|
+
dst.toD = src.toD;
|
|
1107
|
+
dst.flags.copy(src.flags);
|
|
1108
|
+
for (let i = 0; i < dst.modifiers.length; i++) {
|
|
1109
|
+
dst.modifiers[i] = src.modifiers[i];
|
|
1110
|
+
}
|
|
1111
|
+
for (let i = 0; i < dst.elInfo.length; i++) {
|
|
1112
|
+
const d = dst.elInfo[i];
|
|
1113
|
+
const s = src.elInfo[i];
|
|
1114
|
+
d.resLevel = s.resLevel;
|
|
1115
|
+
d.flags = s.flags;
|
|
1116
|
+
}
|
|
1117
|
+
dst.brands = src.brands ? [...src.brands] : null;
|
|
1118
|
+
dst.slays = src.slays ? [...src.slays] : null;
|
|
1119
|
+
dst.curses = src.curses ? src.curses.map((c) => ({ ...c })) : null;
|
|
1120
|
+
dst.effect = src.effect;
|
|
1121
|
+
dst.effectMsg = src.effectMsg;
|
|
1122
|
+
dst.activation = src.activation;
|
|
1123
|
+
dst.time = { ...src.time };
|
|
1124
|
+
dst.timeout = src.timeout;
|
|
1125
|
+
dst.number = src.number;
|
|
1126
|
+
dst.notice = src.notice;
|
|
1127
|
+
dst.origin = src.origin;
|
|
1128
|
+
dst.originDepth = src.originDepth;
|
|
1129
|
+
dst.originRace = src.originRace;
|
|
1130
|
+
}
|
|
1131
|
+
/**
|
|
1132
|
+
* wizPlayItemReject (do_cmd_wiz_play_item, cmd-wizard.c L1822-1843): the play
|
|
1133
|
+
* session was abandoned with changes; copy the preserved original back onto the
|
|
1134
|
+
* working object in place. Upstream restores the pile links after object_copy;
|
|
1135
|
+
* the port mutates the existing object (its pile membership is by array position
|
|
1136
|
+
* in floor/gear, not per-object links), so no link fix-up is needed.
|
|
1137
|
+
*/
|
|
1138
|
+
export function wizPlayItemReject(obj, original, deps) {
|
|
1139
|
+
if (!debugEnabled(deps))
|
|
1140
|
+
return false;
|
|
1141
|
+
restoreItemFields(obj, original);
|
|
1142
|
+
return true;
|
|
1143
|
+
}
|
|
1144
|
+
/**
|
|
1145
|
+
* wizPlayItemAccept (do_cmd_wiz_play_item, cmd-wizard.c L1679-1718): commit the
|
|
1146
|
+
* changes. When the item actually changed and is equipped, upstream clears the
|
|
1147
|
+
* known WORN notice and re-runs object_learn_on_wield so the panel reflects the
|
|
1148
|
+
* edited properties. The total_weight / redraw upkeep is UI (the shell's). The
|
|
1149
|
+
* caller supplies whether the item is worn (the slot it was picked from).
|
|
1150
|
+
*/
|
|
1151
|
+
export function wizPlayItemAccept(state, obj, params, deps) {
|
|
1152
|
+
if (!debugEnabled(deps))
|
|
1153
|
+
return false;
|
|
1154
|
+
if (params.changed && params.equipped) {
|
|
1155
|
+
obj.notice &= ~OBJ_NOTICE_WORN;
|
|
1156
|
+
objectLearnOnWield(state.actor.player, obj, state.runeEnv);
|
|
1157
|
+
updatePlayerObjectKnowledge(state); /* player_learn_rune sweep (L1373). */
|
|
1158
|
+
}
|
|
1159
|
+
return true;
|
|
1160
|
+
}
|
|
1161
|
+
/** OBJ_NOTICE_WORN: the "has been worn" learn gate cleared on accept. */
|
|
1162
|
+
const OBJ_NOTICE_WORN = OBJ_NOTICE.WORN;
|
|
1163
|
+
/**
|
|
1164
|
+
* do_cmd_wiz_stat_item (cmd-wizard.c L2386-2562): roll `nRolls` items with
|
|
1165
|
+
* make_object at `level` and classify each as match / better / worse / other
|
|
1166
|
+
* against the target object. `roll` is 0 normal, 1 good, 2 excellent (good +
|
|
1167
|
+
* great). The interrupt polling and the running Term readout are UI and are
|
|
1168
|
+
* omitted; the classification math, RNG draw order and the artifact-preserve
|
|
1169
|
+
* quirk are faithful.
|
|
1170
|
+
*
|
|
1171
|
+
* Upstream quirk preserved (L2504-2506, L2559-2561): it marks the TARGET
|
|
1172
|
+
* object's artifact uncreated before each roll (so make_object may regenerate
|
|
1173
|
+
* it) and re-marks it created at the end - note it tests obj->artifact, the
|
|
1174
|
+
* target's, not the rolled test object's, exactly as upstream does.
|
|
1175
|
+
*/
|
|
1176
|
+
export function wizStatItem(state, params, deps) {
|
|
1177
|
+
if (!debugEnabled(deps) || !deps.makeDeps)
|
|
1178
|
+
return null;
|
|
1179
|
+
const { obj } = params;
|
|
1180
|
+
const good = params.roll >= 1;
|
|
1181
|
+
const great = params.roll >= 2;
|
|
1182
|
+
const level = params.level;
|
|
1183
|
+
const n = params.nRolls ?? TEST_ROLL;
|
|
1184
|
+
let matches = 0;
|
|
1185
|
+
let better = 0;
|
|
1186
|
+
let worse = 0;
|
|
1187
|
+
let other = 0;
|
|
1188
|
+
let i = 0;
|
|
1189
|
+
for (; i < n; i++) {
|
|
1190
|
+
/* make_object(cave, level, good, great, false, NULL, 0). */
|
|
1191
|
+
const test = makeObject(state.rng, deps.makeDeps, level, good, great, false, 0, level);
|
|
1192
|
+
/* Allow the target artifact to be regenerated (L2504-2506). */
|
|
1193
|
+
if (obj.artifact)
|
|
1194
|
+
deps.makeDeps.artifacts.markCreated(obj.artifact.aidx, false);
|
|
1195
|
+
if (!test)
|
|
1196
|
+
continue;
|
|
1197
|
+
/* Same tval and sval? (L2512-2516) */
|
|
1198
|
+
if (obj.tval !== test.tval || obj.sval !== test.sval)
|
|
1199
|
+
continue;
|
|
1200
|
+
/* Compare modifiers (L2518-2528). */
|
|
1201
|
+
let isMatch = true;
|
|
1202
|
+
let isBetter = true;
|
|
1203
|
+
let isWorse = true;
|
|
1204
|
+
for (let j = 0; j < OBJ_MOD_MAX; j++) {
|
|
1205
|
+
const tm = test.modifiers[j];
|
|
1206
|
+
const om = obj.modifiers[j];
|
|
1207
|
+
if (tm !== om) {
|
|
1208
|
+
isMatch = false;
|
|
1209
|
+
if (tm < om)
|
|
1210
|
+
isBetter = false;
|
|
1211
|
+
else
|
|
1212
|
+
isWorse = false;
|
|
1213
|
+
}
|
|
1214
|
+
}
|
|
1215
|
+
if (isMatch && test.toA === obj.toA && test.toH === obj.toH && test.toD === obj.toD) {
|
|
1216
|
+
matches++;
|
|
1217
|
+
}
|
|
1218
|
+
else if (isBetter && test.toA >= obj.toA && test.toH >= obj.toH && test.toD >= obj.toD) {
|
|
1219
|
+
better++;
|
|
1220
|
+
}
|
|
1221
|
+
else if (isWorse && test.toA <= obj.toA && test.toH <= obj.toH && test.toD <= obj.toD) {
|
|
1222
|
+
worse++;
|
|
1223
|
+
}
|
|
1224
|
+
else {
|
|
1225
|
+
other++;
|
|
1226
|
+
}
|
|
1227
|
+
}
|
|
1228
|
+
/* Normally leave a single artifact created (L2559-2561). */
|
|
1229
|
+
if (obj.artifact)
|
|
1230
|
+
deps.makeDeps.artifacts.markCreated(obj.artifact.aidx, true);
|
|
1231
|
+
return { rolls: i, matches, better, worse, other };
|
|
1232
|
+
}
|
|
1233
|
+
/** TEST_ROLL (cmd-wizard.c L2385): the default sample size. */
|
|
1234
|
+
const TEST_ROLL = 100000;
|
|
1235
|
+
/**
|
|
1236
|
+
* do_cmd_wiz_edit_player_start (cmd-wizard.c L1202-1239): the batch player
|
|
1237
|
+
* editor. Upstream chains a queued CMD_WIZ_EDIT_PLAYER_STAT per stat plus a
|
|
1238
|
+
* gold and an exp edit through the edit_player_state machine; the queue
|
|
1239
|
+
* plumbing is UI. The engine effect is: apply the six stat edits, the gold
|
|
1240
|
+
* edit, and the exp edit. Each field is optional; a supplied value is applied
|
|
1241
|
+
* through the already-ported per-field editor (same clamps), so an absent field
|
|
1242
|
+
* is left unchanged (the shell's "cancel this stage" path).
|
|
1243
|
+
*/
|
|
1244
|
+
export function wizEditPlayerStart(state, params, deps) {
|
|
1245
|
+
if (!debugEnabled(deps))
|
|
1246
|
+
return false;
|
|
1247
|
+
if (params.stats) {
|
|
1248
|
+
for (let stat = 0; stat < STAT_MAX && stat < params.stats.length; stat++) {
|
|
1249
|
+
const v = params.stats[stat];
|
|
1250
|
+
if (v !== undefined)
|
|
1251
|
+
wizEditPlayerStat(state, { stat, value: v }, deps);
|
|
1252
|
+
}
|
|
1253
|
+
}
|
|
1254
|
+
if (params.gold !== undefined)
|
|
1255
|
+
wizEditPlayerGold(state, { value: params.gold }, deps);
|
|
1256
|
+
if (params.exp !== undefined)
|
|
1257
|
+
wizEditPlayerExp(state, { value: params.exp }, deps);
|
|
1258
|
+
return true;
|
|
1259
|
+
}
|
|
1260
|
+
/* ------------------------------------------------------------------ *
|
|
1261
|
+
* The map QUERY commands (DATA half only; the highlight redraw is the shell's).
|
|
1262
|
+
* ------------------------------------------------------------------ */
|
|
1263
|
+
/**
|
|
1264
|
+
* do_cmd_wiz_query_feature (L1930, DATA half): the fully-in-bounds grids whose
|
|
1265
|
+
* feature is one of `features`. The shell highlights them.
|
|
1266
|
+
*/
|
|
1267
|
+
export function wizQueryFeature(state, params, deps) {
|
|
1268
|
+
if (!debugEnabled(deps))
|
|
1269
|
+
return [];
|
|
1270
|
+
const out = [];
|
|
1271
|
+
const c = state.chunk;
|
|
1272
|
+
for (let y = 1; y < c.height - 1; y++) {
|
|
1273
|
+
for (let x = 1; x < c.width - 1; x++) {
|
|
1274
|
+
const grid = { x, y };
|
|
1275
|
+
if (params.features.includes(c.feat(grid)))
|
|
1276
|
+
out.push(grid);
|
|
1277
|
+
}
|
|
1278
|
+
}
|
|
1279
|
+
return out;
|
|
1280
|
+
}
|
|
1281
|
+
/**
|
|
1282
|
+
* do_cmd_wiz_query_square_flag (L2105, DATA half): the fully-in-bounds grids
|
|
1283
|
+
* carrying a SQUARE_* flag; flag 0 selects the known grids (as upstream).
|
|
1284
|
+
*/
|
|
1285
|
+
export function wizQuerySquareFlag(state, params, deps) {
|
|
1286
|
+
if (!debugEnabled(deps))
|
|
1287
|
+
return [];
|
|
1288
|
+
const out = [];
|
|
1289
|
+
const c = state.chunk;
|
|
1290
|
+
for (let y = 1; y < c.height - 1; y++) {
|
|
1291
|
+
for (let x = 1; x < c.width - 1; x++) {
|
|
1292
|
+
const grid = { x, y };
|
|
1293
|
+
const show = params.flag
|
|
1294
|
+
? c.sqinfoHas(grid, params.flag)
|
|
1295
|
+
: squareIsKnown(state, grid);
|
|
1296
|
+
if (show)
|
|
1297
|
+
out.push(grid);
|
|
1298
|
+
}
|
|
1299
|
+
}
|
|
1300
|
+
return out;
|
|
1301
|
+
}
|
|
1302
|
+
/**
|
|
1303
|
+
* do_cmd_wiz_peek_noise_scent (L1477, DATA half): the fully-in-bounds grids at
|
|
1304
|
+
* exactly `depth` on the chosen flow heatmap ("noise" or "scent"). The shell
|
|
1305
|
+
* steps depth from 0 upward and highlights each returned set.
|
|
1306
|
+
*/
|
|
1307
|
+
export function wizPeekFlow(state, params, deps) {
|
|
1308
|
+
if (!debugEnabled(deps))
|
|
1309
|
+
return [];
|
|
1310
|
+
const out = [];
|
|
1311
|
+
const c = state.chunk;
|
|
1312
|
+
const map = params.which === "scent" ? c.scent : c.noise;
|
|
1313
|
+
for (let y = 1; y < c.height - 1; y++) {
|
|
1314
|
+
for (let x = 1; x < c.width - 1; x++) {
|
|
1315
|
+
if (map[y * c.width + x] === params.depth)
|
|
1316
|
+
out.push({ x, y });
|
|
1317
|
+
}
|
|
1318
|
+
}
|
|
1319
|
+
return out;
|
|
1320
|
+
}
|
|
1321
|
+
/** KF_INSTA_ART: the kind-flag marking instant-artifact base kinds. */
|
|
1322
|
+
const KF_INSTA_ART = KF.INSTA_ART;
|
|
1323
|
+
//# sourceMappingURL=wizard.js.map
|