@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,723 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Store runtime and stock maintenance, ported from reference/src/store.c
|
|
3
|
+
* (Angband 4.2.6): the live store instance plus store_maint and its helpers
|
|
4
|
+
* (store_carry, store_object_absorb, store_check_num, mass_produce,
|
|
5
|
+
* store_create_random, store_get_choice, store_create_item,
|
|
6
|
+
* store_delete_random, store_find_kind, store_choose_owner, store_shuffle,
|
|
7
|
+
* store_reset).
|
|
8
|
+
*
|
|
9
|
+
* Model divergences, all faithful in reachable states:
|
|
10
|
+
* - The stock is a GameObject[] rather than upstream's doubly-linked pile;
|
|
11
|
+
* store->stock_num is the array length and store->stock_size is
|
|
12
|
+
* z_info->store_inven_max.
|
|
13
|
+
* - There is no obj->known twin, so the parallel stock_k pile and every
|
|
14
|
+
* obj->known assignment are dropped (they mirror the real object; the
|
|
15
|
+
* knowledge/display system is a separate increment).
|
|
16
|
+
* - player->max_depth (used only to pick generation levels) is threaded in as
|
|
17
|
+
* `maxDepth`, since dungeon progress is not modelled on Player yet.
|
|
18
|
+
* - The buy/sell commands and home_carry live in store/transact.ts (they use
|
|
19
|
+
* the player pack model in game/gear.ts); this module is the stocking half.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import type { Constants } from "../constants.js";
|
|
23
|
+
import { FEAT, OF, ORIGIN, TV } from "../generated/index.js";
|
|
24
|
+
import type { ObjRegistry } from "../obj/bind.js";
|
|
25
|
+
import type { MakeDeps } from "../obj/make.js";
|
|
26
|
+
import { applyMagic, objectPrep } from "../obj/make.js";
|
|
27
|
+
import type { GameObject, StackLimits } from "../obj/object.js";
|
|
28
|
+
import {
|
|
29
|
+
distributeCharges,
|
|
30
|
+
objectMergeable,
|
|
31
|
+
objectOriginCombine,
|
|
32
|
+
OSTACK_PACK,
|
|
33
|
+
OSTACK_STORE,
|
|
34
|
+
tvalCanHaveCharges,
|
|
35
|
+
tvalCanHaveTimeout,
|
|
36
|
+
tvalHasVariablePower,
|
|
37
|
+
tvalIsAmmo,
|
|
38
|
+
tvalIsArmor,
|
|
39
|
+
tvalIsLauncher,
|
|
40
|
+
tvalIsLight,
|
|
41
|
+
tvalIsWeapon,
|
|
42
|
+
} from "../obj/object.js";
|
|
43
|
+
import { OBJ_NOTICE } from "../obj/knowledge.js";
|
|
44
|
+
import type { ObjectKind } from "../obj/types.js";
|
|
45
|
+
import type { PlayerClass } from "../player/types.js";
|
|
46
|
+
import { objectValue, objectValueReal } from "../obj/value.js";
|
|
47
|
+
import type { Rng } from "../rng.js";
|
|
48
|
+
import type { BoundStore, ObjectBuy, StoreOwner } from "./types.js";
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* A live store: a BoundStore's tables plus a mutable stock and the currently
|
|
52
|
+
* selected proprietor.
|
|
53
|
+
*/
|
|
54
|
+
export interface Store {
|
|
55
|
+
feat: number;
|
|
56
|
+
featName: string;
|
|
57
|
+
owners: StoreOwner[];
|
|
58
|
+
/** The current proprietor (store->owner), chosen at bind/shuffle. */
|
|
59
|
+
owner: StoreOwner;
|
|
60
|
+
alwaysTable: ObjectKind[];
|
|
61
|
+
normalTable: ObjectKind[];
|
|
62
|
+
buy: ObjectBuy[] | null;
|
|
63
|
+
turnover: number;
|
|
64
|
+
normalStockMin: number;
|
|
65
|
+
normalStockMax: number;
|
|
66
|
+
/** Live stock (store->stock); its length is store->stock_num. */
|
|
67
|
+
stock: GameObject[];
|
|
68
|
+
/** store->stock_size = z_info->store_inven_max. */
|
|
69
|
+
stockSize: number;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Context shared by the maintenance routines. */
|
|
73
|
+
export interface StoreMaintContext {
|
|
74
|
+
rng: Rng;
|
|
75
|
+
deps: MakeDeps;
|
|
76
|
+
/** player->max_depth: the deepest dungeon level reached (0 in a fresh town). */
|
|
77
|
+
maxDepth: number;
|
|
78
|
+
/** Every live store, for black_market_ok's cross-store check. */
|
|
79
|
+
stores: Store[];
|
|
80
|
+
/**
|
|
81
|
+
* store_update's cheat_xtra readouts (store.c:1424, :1444). The option is in
|
|
82
|
+
* scope per the exact-parity mandate; the session supplies this sink only
|
|
83
|
+
* when cheat_xtra is on, so faithful play stays silent.
|
|
84
|
+
*/
|
|
85
|
+
cheatMsg?: (text: string) => void;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** OSTACK_STORE/PACK never read the quiver limits, so these go unused here. */
|
|
89
|
+
const STORE_LIMITS: StackLimits = { quiverSlotSize: 1, thrownQuiverMult: 1 };
|
|
90
|
+
|
|
91
|
+
/* ------------------------------------------------------------------ */
|
|
92
|
+
/* Owners (store.c L1465) */
|
|
93
|
+
/* ------------------------------------------------------------------ */
|
|
94
|
+
|
|
95
|
+
/** store_choose_owner (L1478): a uniformly random proprietor. */
|
|
96
|
+
export function storeChooseOwner(
|
|
97
|
+
rng: Rng,
|
|
98
|
+
store: { owners: StoreOwner[]; featName: string },
|
|
99
|
+
): StoreOwner {
|
|
100
|
+
const n = rng.randint0(store.owners.length);
|
|
101
|
+
const owner = store.owners[n];
|
|
102
|
+
if (!owner) throw new Error(`store ${store.featName} has no owners`);
|
|
103
|
+
return owner;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* store_shuffle (L1493): swap in a different proprietor.
|
|
108
|
+
*
|
|
109
|
+
* C store.c:1497-1498 retries until the owner changes and assumes more than
|
|
110
|
+
* one owner. A one-owner table (accepted by the port's data model) would spin
|
|
111
|
+
* forever. Keep the multi-owner draw loop identical to C; terminate cleanly
|
|
112
|
+
* when there is only one owner (randint0(1) is a no-op on the WELL stream).
|
|
113
|
+
*/
|
|
114
|
+
export function storeShuffle(rng: Rng, store: Store): void {
|
|
115
|
+
if (store.owners.length <= 1) {
|
|
116
|
+
if (store.owners.length === 1) store.owner = storeChooseOwner(rng, store);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
let o = store.owner;
|
|
120
|
+
while (o === store.owner) o = storeChooseOwner(rng, store);
|
|
121
|
+
store.owner = o;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* object_kind_to_book branch of parse_always (store.c:208-231): every TOWN
|
|
126
|
+
* (non-dungeon) book kind of `tval`, deduped. A book is a town book when some
|
|
127
|
+
* class lists it as a non-dungeon book (object_kind_to_book, player-spell.c).
|
|
128
|
+
* The bookseller's no-sval `always:` lines defer to this expansion, which needs
|
|
129
|
+
* the class-book metadata unavailable at parse time.
|
|
130
|
+
*/
|
|
131
|
+
function townBooksOfTval(
|
|
132
|
+
reg: ObjRegistry,
|
|
133
|
+
classes: readonly PlayerClass[],
|
|
134
|
+
tval: number,
|
|
135
|
+
): ObjectKind[] {
|
|
136
|
+
const out: ObjectKind[] = [];
|
|
137
|
+
const seen = new Set<number>();
|
|
138
|
+
for (const cls of classes) {
|
|
139
|
+
for (const b of cls.magic.books) {
|
|
140
|
+
if (b.tvalIdx !== tval || b.dungeon) continue;
|
|
141
|
+
const kind = reg.lookupKind(b.tvalIdx, b.sval);
|
|
142
|
+
if (kind && !seen.has(kind.kidx)) {
|
|
143
|
+
seen.add(kind.kidx);
|
|
144
|
+
out.push(kind);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return out;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Create a live Store from a bound definition. The proprietor is a provisional
|
|
153
|
+
* placeholder (owners[0]); store_reset assigns the real owner with a single
|
|
154
|
+
* randint0, matching C store_shuffle against a NULL initial owner (store.c
|
|
155
|
+
* L340-357, L1493-1501). When `reg`/`classes` are supplied, the bookseller's
|
|
156
|
+
* deferred town-book `always:` lines (bound.alwaysBookTvals) are expanded into
|
|
157
|
+
* the runtime alwaysTable so the shop stocks the town spellbooks
|
|
158
|
+
* (parse_always, store.c:208-231).
|
|
159
|
+
*
|
|
160
|
+
* `rng` is accepted for call-site compatibility but is not consumed here - the
|
|
161
|
+
* first owner draw happens in storeReset.
|
|
162
|
+
*/
|
|
163
|
+
export function bindStoreRuntime(
|
|
164
|
+
bound: BoundStore,
|
|
165
|
+
_rng: Rng,
|
|
166
|
+
storeInvenMax: number,
|
|
167
|
+
reg?: ObjRegistry,
|
|
168
|
+
classes?: readonly PlayerClass[],
|
|
169
|
+
): Store {
|
|
170
|
+
/* A fresh array so the parse-time bound.alwaysTable stays pristine (the
|
|
171
|
+
* expansion is per store instance / per new game). */
|
|
172
|
+
const alwaysTable = [...bound.alwaysTable];
|
|
173
|
+
if (reg && classes && bound.alwaysBookTvals.length) {
|
|
174
|
+
for (const tval of bound.alwaysBookTvals) {
|
|
175
|
+
for (const kind of townBooksOfTval(reg, classes, tval)) {
|
|
176
|
+
if (!alwaysTable.includes(kind)) alwaysTable.push(kind);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
const provisional = bound.owners[0];
|
|
181
|
+
if (!provisional) throw new Error(`store ${bound.featName} has no owners`);
|
|
182
|
+
return {
|
|
183
|
+
feat: bound.feat,
|
|
184
|
+
featName: bound.featName,
|
|
185
|
+
owners: bound.owners,
|
|
186
|
+
owner: provisional,
|
|
187
|
+
alwaysTable,
|
|
188
|
+
normalTable: bound.normalTable,
|
|
189
|
+
buy: bound.buy,
|
|
190
|
+
turnover: bound.turnover,
|
|
191
|
+
normalStockMin: bound.normalStockMin,
|
|
192
|
+
normalStockMax: bound.normalStockMax,
|
|
193
|
+
stock: [],
|
|
194
|
+
stockSize: storeInvenMax,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/* ------------------------------------------------------------------ */
|
|
199
|
+
/* Stock classification (store.c L373) */
|
|
200
|
+
/* ------------------------------------------------------------------ */
|
|
201
|
+
|
|
202
|
+
/** store_is_staple (L373): is the kind on the store's always list? */
|
|
203
|
+
function storeIsStaple(store: Store, kind: ObjectKind): boolean {
|
|
204
|
+
return store.alwaysTable.includes(kind);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/** store_can_carry (L391): is the kind on the normal or always list? */
|
|
208
|
+
function storeCanCarry(store: Store, kind: ObjectKind): boolean {
|
|
209
|
+
return store.normalTable.includes(kind) || storeIsStaple(store, kind);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/** store_sale_should_reduce_stock (L405). */
|
|
213
|
+
export function storeSaleShouldReduceStock(store: Store, obj: GameObject): boolean {
|
|
214
|
+
if (obj.artifact || obj.ego) return true;
|
|
215
|
+
if (tvalIsWeapon(obj.tval) && (obj.toH || obj.toD)) return true;
|
|
216
|
+
if (tvalIsArmor(obj.tval) && obj.toA) return true;
|
|
217
|
+
return !storeIsStaple(store, obj.kind);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/* ------------------------------------------------------------------ */
|
|
221
|
+
/* Buy decision (store.c L524) */
|
|
222
|
+
/* ------------------------------------------------------------------ */
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* store_will_buy (L524): will this store purchase the object? The home accepts
|
|
226
|
+
* anything; a normal store refuses apparently worthless items (except unknown
|
|
227
|
+
* variable-power items when birth_no_selling is on) and, if it has a buy list,
|
|
228
|
+
* only buys listed tvals.
|
|
229
|
+
*
|
|
230
|
+
* `aware` feeds object_value; `runesKnown` is object_runes_known(obj) for the
|
|
231
|
+
* no-selling worthless exception. The buy-list flag branch's
|
|
232
|
+
* object_flag_is_known check is DEFERRED (needs the knowledge system); 4.2.6
|
|
233
|
+
* data uses only bare tvals (flag 0), so it is unreached at the baseline.
|
|
234
|
+
*/
|
|
235
|
+
export function storeWillBuy(
|
|
236
|
+
reg: ObjRegistry,
|
|
237
|
+
store: { feat: number; buy: ObjectBuy[] | null },
|
|
238
|
+
obj: GameObject,
|
|
239
|
+
aware: boolean,
|
|
240
|
+
noSelling: boolean,
|
|
241
|
+
runesKnown: boolean,
|
|
242
|
+
): boolean {
|
|
243
|
+
/* Home accepts anything. */
|
|
244
|
+
if (store.feat === FEAT.HOME) return true;
|
|
245
|
+
|
|
246
|
+
/* Ignore apparently worthless items, except no-selling unknown items. */
|
|
247
|
+
const value = objectValue(reg, obj, 1, aware);
|
|
248
|
+
if (
|
|
249
|
+
value <= 0 &&
|
|
250
|
+
!(noSelling && tvalHasVariablePower(obj.tval) && !runesKnown)
|
|
251
|
+
) {
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/* No buy list means we buy anything. */
|
|
256
|
+
if (!store.buy) return true;
|
|
257
|
+
|
|
258
|
+
/* Run through the buy list. */
|
|
259
|
+
for (const buy of store.buy) {
|
|
260
|
+
if (buy.tval !== obj.tval) continue;
|
|
261
|
+
if (!buy.flag) return true;
|
|
262
|
+
/* DEFERRED: && object_flag_is_known(player, obj, buy.flag). */
|
|
263
|
+
if (obj.flags.has(buy.flag)) return true;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/* ------------------------------------------------------------------ */
|
|
270
|
+
/* Mass production (store.c L680) */
|
|
271
|
+
/* ------------------------------------------------------------------ */
|
|
272
|
+
|
|
273
|
+
/** mass_roll (L680): sum of `times` rolls of randint0(max). */
|
|
274
|
+
function massRoll(rng: Rng, times: number, max: number): number {
|
|
275
|
+
let t = 0;
|
|
276
|
+
for (let i = 0; i < times; i++) t += rng.randint0(max);
|
|
277
|
+
return t;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/** mass_produce (L696): set a stack size for cheap store items. */
|
|
281
|
+
export function massProduce(reg: ObjRegistry, rng: Rng, obj: GameObject): void {
|
|
282
|
+
let size = 1;
|
|
283
|
+
const cost = objectValueReal(reg, obj, 1);
|
|
284
|
+
|
|
285
|
+
switch (obj.tval) {
|
|
286
|
+
case TV.FOOD:
|
|
287
|
+
case TV.MUSHROOM:
|
|
288
|
+
case TV.FLASK:
|
|
289
|
+
case TV.LIGHT:
|
|
290
|
+
if (cost <= 5) size += massRoll(rng, 3, 5);
|
|
291
|
+
if (cost <= 20) size += massRoll(rng, 3, 5);
|
|
292
|
+
break;
|
|
293
|
+
case TV.POTION:
|
|
294
|
+
case TV.SCROLL:
|
|
295
|
+
if (cost <= 60) size += massRoll(rng, 3, 5);
|
|
296
|
+
if (cost <= 240) size += massRoll(rng, 1, 5);
|
|
297
|
+
break;
|
|
298
|
+
case TV.MAGIC_BOOK:
|
|
299
|
+
case TV.PRAYER_BOOK:
|
|
300
|
+
case TV.NATURE_BOOK:
|
|
301
|
+
case TV.SHADOW_BOOK:
|
|
302
|
+
case TV.OTHER_BOOK:
|
|
303
|
+
if (cost <= 50) size += massRoll(rng, 2, 3);
|
|
304
|
+
if (cost <= 500) size += massRoll(rng, 1, 3);
|
|
305
|
+
break;
|
|
306
|
+
case TV.SOFT_ARMOR:
|
|
307
|
+
case TV.HARD_ARMOR:
|
|
308
|
+
case TV.SHIELD:
|
|
309
|
+
case TV.GLOVES:
|
|
310
|
+
case TV.BOOTS:
|
|
311
|
+
case TV.CLOAK:
|
|
312
|
+
case TV.HELM:
|
|
313
|
+
case TV.CROWN:
|
|
314
|
+
case TV.SWORD:
|
|
315
|
+
case TV.POLEARM:
|
|
316
|
+
case TV.HAFTED:
|
|
317
|
+
case TV.DIGGING:
|
|
318
|
+
case TV.BOW:
|
|
319
|
+
if (obj.ego) break;
|
|
320
|
+
if (cost <= 10) size += massRoll(rng, 3, 5);
|
|
321
|
+
if (cost <= 100) size += massRoll(rng, 3, 5);
|
|
322
|
+
break;
|
|
323
|
+
case TV.SHOT:
|
|
324
|
+
case TV.ARROW:
|
|
325
|
+
case TV.BOLT:
|
|
326
|
+
if (cost <= 5) size = rng.randint1(2) * 20;
|
|
327
|
+
else if (cost > 5 && cost <= 50) size = rng.randint1(4) * 10;
|
|
328
|
+
else if (cost > 50 && cost <= 500) size = rng.randint1(4) * 5;
|
|
329
|
+
else size = 1;
|
|
330
|
+
break;
|
|
331
|
+
default:
|
|
332
|
+
break;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
obj.number = Math.min(size, obj.kind.base.maxStack);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/* ------------------------------------------------------------------ */
|
|
339
|
+
/* Carrying / removing stock (store.c L813) */
|
|
340
|
+
/* ------------------------------------------------------------------ */
|
|
341
|
+
|
|
342
|
+
/** store_object_absorb (L813): merge `newObj` into `old`, losing excess. */
|
|
343
|
+
function storeObjectAbsorb(old: GameObject, newObj: GameObject): void {
|
|
344
|
+
const change =
|
|
345
|
+
old.number < old.kind.base.maxStack
|
|
346
|
+
? Math.min(newObj.number, old.kind.base.maxStack - old.number)
|
|
347
|
+
: 0;
|
|
348
|
+
distributeCharges(newObj, old, change, false);
|
|
349
|
+
old.number += change;
|
|
350
|
+
objectOriginCombine(old, newObj, ORIGIN.MIXED);
|
|
351
|
+
/* newObj is fully absorbed; the caller drops it (excess is lost). */
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/** store_check_num (L836): will the store hold this object (room or merge)? */
|
|
355
|
+
export function storeCheckNum(store: Store, obj: GameObject): boolean {
|
|
356
|
+
if (store.stock.length < store.stockSize) return true;
|
|
357
|
+
const mode = store.feat === FEAT.HOME ? OSTACK_PACK : OSTACK_STORE;
|
|
358
|
+
for (const stockObj of store.stock) {
|
|
359
|
+
if (objectMergeable(stockObj, obj, mode, STORE_LIMITS)) return true;
|
|
360
|
+
}
|
|
361
|
+
return false;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* store_carry (L912): add a store-generated object to a real store, merging
|
|
366
|
+
* into an existing stack when possible. Returns the resulting stack, or null
|
|
367
|
+
* when the store rejects it (worthless, or no room). The player-carried value
|
|
368
|
+
* branch and the obj->known pile are deferred to the transactions increment;
|
|
369
|
+
* maintenance always passes fresh, non-carried objects.
|
|
370
|
+
*/
|
|
371
|
+
export function storeCarry(
|
|
372
|
+
rng: Rng,
|
|
373
|
+
reg: ObjRegistry,
|
|
374
|
+
constants: Constants,
|
|
375
|
+
store: Store,
|
|
376
|
+
obj: GameObject,
|
|
377
|
+
maintain: boolean,
|
|
378
|
+
): GameObject | null {
|
|
379
|
+
const kind = obj.kind;
|
|
380
|
+
|
|
381
|
+
/* Evaluate the object (store-generated -> real value). */
|
|
382
|
+
const value = objectValueReal(reg, obj, 1);
|
|
383
|
+
|
|
384
|
+
/* Cursed/worthless items "disappear" when sold. */
|
|
385
|
+
if (value <= 0) return null;
|
|
386
|
+
|
|
387
|
+
/* Erase the inscription. */
|
|
388
|
+
obj.note = null;
|
|
389
|
+
|
|
390
|
+
/* Some item types require maintenance. */
|
|
391
|
+
if (tvalIsLight(obj.tval)) {
|
|
392
|
+
if (!obj.flags.has(OF.NO_FUEL)) {
|
|
393
|
+
if (obj.flags.has(OF.BURNS_OUT)) obj.timeout = constants.fuelTorch;
|
|
394
|
+
else if (obj.flags.has(OF.TAKES_FUEL)) obj.timeout = constants.defaultLamp;
|
|
395
|
+
}
|
|
396
|
+
} else if (tvalCanHaveTimeout(obj.tval)) {
|
|
397
|
+
obj.timeout = 0;
|
|
398
|
+
} else if (tvalIsLauncher(obj.tval)) {
|
|
399
|
+
/* obj->known->pval = obj->pval (no known twin; nothing to do). */
|
|
400
|
+
} else if (tvalCanHaveCharges(obj.tval)) {
|
|
401
|
+
/* If the store can stock this kind, recharge. */
|
|
402
|
+
if (maintain && storeCanCarry(store, kind)) {
|
|
403
|
+
let charges = 0;
|
|
404
|
+
for (let i = 0; i < obj.number; i++) {
|
|
405
|
+
charges += rng.randcalc(kind.charge, 0, "randomise");
|
|
406
|
+
}
|
|
407
|
+
/* Use the recharged value only if greater. */
|
|
408
|
+
if (charges > obj.pval) obj.pval = charges;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
/* Try to merge into an existing stack. */
|
|
413
|
+
for (const stockObj of store.stock) {
|
|
414
|
+
if (objectMergeable(stockObj, obj, OSTACK_STORE, STORE_LIMITS)) {
|
|
415
|
+
storeObjectAbsorb(stockObj, obj);
|
|
416
|
+
return stockObj;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
/* No space? */
|
|
421
|
+
if (store.stock.length >= store.stockSize) return null;
|
|
422
|
+
|
|
423
|
+
store.stock.push(obj);
|
|
424
|
+
return obj;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
/** store_delete (L989): remove `amt` of a stack, or the whole stack. */
|
|
428
|
+
export function storeDelete(store: Store, obj: GameObject, amt: number): void {
|
|
429
|
+
if (obj.number > amt) {
|
|
430
|
+
obj.number -= amt;
|
|
431
|
+
} else {
|
|
432
|
+
const idx = store.stock.indexOf(obj);
|
|
433
|
+
if (idx >= 0) store.stock.splice(idx, 1);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
/** store_find_kind (L1011): first stock of a kind, optionally excluded. */
|
|
438
|
+
function storeFindKind(
|
|
439
|
+
store: Store,
|
|
440
|
+
kind: ObjectKind,
|
|
441
|
+
fexclude?: (s: Store, o: GameObject) => boolean,
|
|
442
|
+
): GameObject | null {
|
|
443
|
+
for (const obj of store.stock) {
|
|
444
|
+
if (obj.kind === kind && (!fexclude || !fexclude(store, obj))) return obj;
|
|
445
|
+
}
|
|
446
|
+
return null;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
/** store_delete_random (L1040): imitate a non-PC buyer taking some stock. */
|
|
450
|
+
function storeDeleteRandom(rng: Rng, store: Store): void {
|
|
451
|
+
if (store.stock.length === 0) return;
|
|
452
|
+
const what = rng.randint0(store.stock.length);
|
|
453
|
+
const obj = store.stock[what];
|
|
454
|
+
if (!obj) return;
|
|
455
|
+
|
|
456
|
+
let num = obj.number;
|
|
457
|
+
if (num > 1) {
|
|
458
|
+
if (tvalIsAmmo(obj.tval)) {
|
|
459
|
+
if (rng.randint0(100) < 50 || num < 10) num = obj.number;
|
|
460
|
+
else num = rng.randint1(Math.trunc(num / 5)) * 5 + (num % 5);
|
|
461
|
+
} else {
|
|
462
|
+
if (rng.randint0(100) < 50) num = 1;
|
|
463
|
+
else if (rng.randint0(100) < 50) num = Math.trunc((num + 1) / 2);
|
|
464
|
+
else num = obj.number;
|
|
465
|
+
|
|
466
|
+
if (tvalCanHaveCharges(obj.tval)) {
|
|
467
|
+
obj.pval -= Math.trunc((num * obj.pval) / obj.number);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
storeDelete(store, obj, num);
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
/* ------------------------------------------------------------------ */
|
|
476
|
+
/* Random stock creation (store.c L1105) */
|
|
477
|
+
/* ------------------------------------------------------------------ */
|
|
478
|
+
|
|
479
|
+
/**
|
|
480
|
+
* black_market_ok (L1105): the black market only stocks items other stores
|
|
481
|
+
* do not, unless they are ego or notably enchanted.
|
|
482
|
+
*/
|
|
483
|
+
function blackMarketOk(
|
|
484
|
+
reg: ObjRegistry,
|
|
485
|
+
obj: GameObject,
|
|
486
|
+
stores: Store[],
|
|
487
|
+
): boolean {
|
|
488
|
+
if (obj.ego) return true;
|
|
489
|
+
if (obj.toA > 2) return true;
|
|
490
|
+
if (obj.toH > 1) return true;
|
|
491
|
+
if (obj.toD > 2) return true;
|
|
492
|
+
if (objectValueReal(reg, obj, 1) < 10) return false;
|
|
493
|
+
|
|
494
|
+
for (const s of stores) {
|
|
495
|
+
if (s.feat === FEAT.STORE_BLACK || s.feat === FEAT.HOME) continue;
|
|
496
|
+
for (const stockObj of s.stock) {
|
|
497
|
+
if (obj.kind === stockObj.kind) return false;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
return true;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
/** store_get_choice (L1146): a random kind from the normal table. */
|
|
504
|
+
function storeGetChoice(rng: Rng, store: Store): ObjectKind {
|
|
505
|
+
const kind = store.normalTable[rng.randint0(store.normalTable.length)];
|
|
506
|
+
if (!kind) throw new Error(`store ${store.featName} has an empty normal table`);
|
|
507
|
+
return kind;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/** store_create_random (L1156): make a random object and give it to the store. */
|
|
511
|
+
export function storeCreateRandom(ctx: StoreMaintContext, store: Store): boolean {
|
|
512
|
+
const { rng, deps, maxDepth, stores } = ctx;
|
|
513
|
+
const reg = deps.reg;
|
|
514
|
+
const constants = deps.constants;
|
|
515
|
+
|
|
516
|
+
let minLevel: number;
|
|
517
|
+
let maxLevel: number;
|
|
518
|
+
if (store.feat === FEAT.STORE_BLACK) {
|
|
519
|
+
minLevel = maxDepth + 5;
|
|
520
|
+
maxLevel = maxDepth + 20;
|
|
521
|
+
} else {
|
|
522
|
+
minLevel = 1;
|
|
523
|
+
maxLevel = constants.storeMagicLevel + Math.max(maxDepth - 20, 0);
|
|
524
|
+
}
|
|
525
|
+
if (minLevel > 55) minLevel = 55;
|
|
526
|
+
if (maxLevel > 70) maxLevel = 70;
|
|
527
|
+
|
|
528
|
+
for (let tries = 0; tries < 6; tries++) {
|
|
529
|
+
const level = rng.randRange(minLevel, maxLevel);
|
|
530
|
+
|
|
531
|
+
const kind =
|
|
532
|
+
store.feat === FEAT.STORE_BLACK
|
|
533
|
+
? deps.alloc.getObjNum(rng, constants, level, false, 0)
|
|
534
|
+
: storeGetChoice(rng, store);
|
|
535
|
+
|
|
536
|
+
/* No chests in stores. */
|
|
537
|
+
if (!kind || kind.tval === TV.CHEST) continue;
|
|
538
|
+
|
|
539
|
+
const obj = objectPrep(rng, reg, constants, kind, level, "randomise");
|
|
540
|
+
/* depth 0: store stock is generated at the player's town depth, so no
|
|
541
|
+
* artifacts (allowArtifacts is false regardless). */
|
|
542
|
+
applyMagic(rng, deps, obj, level, false, false, false, false, 0);
|
|
543
|
+
|
|
544
|
+
/* Reject 'damaged' items (negative combat mods, curses). */
|
|
545
|
+
if (
|
|
546
|
+
(tvalIsWeapon(obj.tval) && (obj.toH < 0 || obj.toD < 0)) ||
|
|
547
|
+
(tvalIsArmor(obj.tval) && obj.toA < 0) ||
|
|
548
|
+
obj.curses
|
|
549
|
+
) {
|
|
550
|
+
continue;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
/* The player knows everything about store stock (store.c L1216-1219:
|
|
554
|
+
* obj->known->notice |= OBJ_NOTICE_ASSESSED; player_know_object). The port
|
|
555
|
+
* keeps the assessed bit on the live object, where objectKnownShadow reads
|
|
556
|
+
* it to fill combat/mod details, so a mundane enchanted item shows its
|
|
557
|
+
* (+h,+d)/[+a] with no "{??}" and only unlearned ego runes flag "{??}". */
|
|
558
|
+
obj.notice |= OBJ_NOTICE.ASSESSED;
|
|
559
|
+
obj.origin = ORIGIN.NONE;
|
|
560
|
+
|
|
561
|
+
/* Black markets have expensive tastes. */
|
|
562
|
+
if (store.feat === FEAT.STORE_BLACK && !blackMarketOk(reg, obj, stores)) {
|
|
563
|
+
continue;
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
/* No worthless items. */
|
|
567
|
+
if (objectValueReal(reg, obj, 1) < 1) continue;
|
|
568
|
+
|
|
569
|
+
massProduce(reg, rng, obj);
|
|
570
|
+
|
|
571
|
+
if (!storeCarry(rng, reg, constants, store, obj, true)) continue;
|
|
572
|
+
|
|
573
|
+
return true;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
return false;
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
/** store_create_item (L1262): make a specific always-stocked kind. */
|
|
580
|
+
export function storeCreateItem(
|
|
581
|
+
ctx: StoreMaintContext,
|
|
582
|
+
store: Store,
|
|
583
|
+
kind: ObjectKind,
|
|
584
|
+
): GameObject | null {
|
|
585
|
+
const reg = ctx.deps.reg;
|
|
586
|
+
const constants = ctx.deps.constants;
|
|
587
|
+
const obj = objectPrep(ctx.rng, reg, constants, kind, 0, "randomise");
|
|
588
|
+
/* Store stock is fully assessed (store.c L1274-1276); see storeCreateRandom. */
|
|
589
|
+
obj.notice |= OBJ_NOTICE.ASSESSED;
|
|
590
|
+
obj.origin = ORIGIN.NONE;
|
|
591
|
+
return storeCarry(ctx.rng, reg, constants, store, obj, true);
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
/* ------------------------------------------------------------------ */
|
|
595
|
+
/* Maintenance (store.c L1294) */
|
|
596
|
+
/* ------------------------------------------------------------------ */
|
|
597
|
+
|
|
598
|
+
/** store_maint (L1294): keep a store's stock between its bounds. */
|
|
599
|
+
export function storeMaint(ctx: StoreMaintContext, store: Store): void {
|
|
600
|
+
const { rng, deps } = ctx;
|
|
601
|
+
|
|
602
|
+
/* Ignore home. */
|
|
603
|
+
if (store.feat === FEAT.HOME) return;
|
|
604
|
+
|
|
605
|
+
/* Destroy crappy black market items. */
|
|
606
|
+
if (store.feat === FEAT.STORE_BLACK) {
|
|
607
|
+
for (const obj of [...store.stock]) {
|
|
608
|
+
if (!blackMarketOk(deps.reg, obj, ctx.stores)) {
|
|
609
|
+
storeDelete(store, obj, obj.number);
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
const alwaysNum = store.alwaysTable.length;
|
|
615
|
+
|
|
616
|
+
if (store.turnover) {
|
|
617
|
+
let stock = store.stock.length - rng.randint1(store.turnover);
|
|
618
|
+
const min = 0;
|
|
619
|
+
const max = store.normalStockMax;
|
|
620
|
+
if (stock < min) stock = min;
|
|
621
|
+
if (stock > max) stock = max;
|
|
622
|
+
while (store.stock.length > stock) storeDeleteRandom(rng, store);
|
|
623
|
+
} else if (alwaysNum && store.stock.length) {
|
|
624
|
+
/* For the Bookseller, occasionally sell a book. */
|
|
625
|
+
let sales = rng.randint1(store.stock.length);
|
|
626
|
+
while (sales--) storeDeleteRandom(rng, store);
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
/* Ensure staples exist. */
|
|
630
|
+
if (alwaysNum) {
|
|
631
|
+
for (const kind of store.alwaysTable) {
|
|
632
|
+
let obj = storeFindKind(store, kind, storeSaleShouldReduceStock);
|
|
633
|
+
if (!obj) {
|
|
634
|
+
obj = storeCreateItem(ctx, store, kind);
|
|
635
|
+
if (!obj) continue;
|
|
636
|
+
}
|
|
637
|
+
/* Ensure a full stack. */
|
|
638
|
+
obj.number = obj.kind.base.maxStack;
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
if (store.turnover) {
|
|
643
|
+
let stock = store.stock.length + rng.randint1(store.turnover);
|
|
644
|
+
const min = store.normalStockMin + alwaysNum;
|
|
645
|
+
const max = store.normalStockMax + alwaysNum;
|
|
646
|
+
if (stock > max) stock = max;
|
|
647
|
+
if (stock < min) stock = min;
|
|
648
|
+
|
|
649
|
+
let restockAttempts = 100000;
|
|
650
|
+
while (store.stock.length < stock && --restockAttempts) {
|
|
651
|
+
storeCreateRandom(ctx, store);
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
/**
|
|
657
|
+
* store_update (L1422): on the return to town, catch the stores up on the days
|
|
658
|
+
* that elapsed while the player was in the dungeon. For each accrued day, run
|
|
659
|
+
* store_maint on every non-home store, then occasionally (one_in_(store_shuffle))
|
|
660
|
+
* shuffle one random non-home shopkeeper. The home is never maintained. The
|
|
661
|
+
* caller zeroes daycount afterwards (upstream sets `daycount = 0` at the end).
|
|
662
|
+
*
|
|
663
|
+
* RNG order is faithful: all maintenance draws for the day precede the single
|
|
664
|
+
* shuffle-chance draw, and the store picked to shuffle is randint0(n_non_home).
|
|
665
|
+
*/
|
|
666
|
+
export function storeUpdate(ctx: StoreMaintContext, daycount: number): void {
|
|
667
|
+
const shuffle = ctx.deps.constants.storeShuffle;
|
|
668
|
+
ctx.cheatMsg?.("Updating Shops...");
|
|
669
|
+
let dc = daycount;
|
|
670
|
+
while (dc-- > 0) {
|
|
671
|
+
/* Maintain each shop (except home). */
|
|
672
|
+
for (const store of ctx.stores) {
|
|
673
|
+
if (store.feat === FEAT.HOME) continue;
|
|
674
|
+
storeMaint(ctx, store);
|
|
675
|
+
}
|
|
676
|
+
/* Sometimes, shuffle the shop-keepers. */
|
|
677
|
+
if (ctx.rng.oneIn(shuffle)) {
|
|
678
|
+
ctx.cheatMsg?.("Shuffling a Shopkeeper...");
|
|
679
|
+
const nonHome = ctx.stores.filter((s) => s.feat !== FEAT.HOME);
|
|
680
|
+
if (nonHome.length > 0) {
|
|
681
|
+
const n = ctx.rng.randint0(nonHome.length);
|
|
682
|
+
storeShuffle(ctx.rng, nonHome[n]!);
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
/**
|
|
689
|
+
* store_reset (L340): (re)initialise every non-home store's stock, running
|
|
690
|
+
* store_maint ten times to fill it. Home is left empty.
|
|
691
|
+
*
|
|
692
|
+
* Owner assignment matches C store_shuffle against a NULL initial owner: a
|
|
693
|
+
* single randint0(n_owners) per store, not a force-different re-draw (the port
|
|
694
|
+
* used to choose at bind and again in storeShuffle, over-drawing the stream).
|
|
695
|
+
* Later re-shuffles (store_update / empty-store) still use storeShuffle.
|
|
696
|
+
*/
|
|
697
|
+
export function storeReset(ctx: StoreMaintContext): void {
|
|
698
|
+
for (const store of ctx.stores) {
|
|
699
|
+
store.stock = [];
|
|
700
|
+
store.owner = storeChooseOwner(ctx.rng, store);
|
|
701
|
+
if (store.feat === FEAT.HOME) continue;
|
|
702
|
+
for (let j = 0; j < 10; j++) storeMaint(ctx, store);
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
/**
|
|
707
|
+
* store_init + store_reset for a fresh town: build every store's live instance
|
|
708
|
+
* from the bound registry and stock it. Returns the stores in registry order
|
|
709
|
+
* (the session holds them on GameState; a shell looks one up by entrance feat).
|
|
710
|
+
*/
|
|
711
|
+
export function createTownStores(
|
|
712
|
+
bound: BoundStore[],
|
|
713
|
+
deps: MakeDeps,
|
|
714
|
+
rng: Rng,
|
|
715
|
+
maxDepth: number,
|
|
716
|
+
classes?: readonly PlayerClass[],
|
|
717
|
+
): Store[] {
|
|
718
|
+
const stores = bound.map((b) =>
|
|
719
|
+
bindStoreRuntime(b, rng, deps.constants.storeInvenMax, deps.reg, classes),
|
|
720
|
+
);
|
|
721
|
+
storeReset({ rng, deps, maxDepth, stores });
|
|
722
|
+
return stores;
|
|
723
|
+
}
|