@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,1444 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Random artifact generation: the artifact-building primitives, ported from
|
|
3
|
+
* reference/src/obj-randart.c (Angband 4.2.6) lines 1332-2670. These are the
|
|
4
|
+
* routines do_randart uses to construct a single random artifact: pick a base
|
|
5
|
+
* item (get_base_item), seed it with its base stats (artifact_prep), build its
|
|
6
|
+
* per-item ability frequency table (build_freq_table), optionally supercharge
|
|
7
|
+
* it (try_supercharge), and then add individual abilities/curses via the many
|
|
8
|
+
* add_* helpers, choose_ability, add_ability(_aux), remove_contradictory and
|
|
9
|
+
* make_bad.
|
|
10
|
+
*
|
|
11
|
+
* Every routine that needs randomness takes an Rng explicitly (no globals) and
|
|
12
|
+
* draws in the exact upstream order so a randart_seed remains reproducible. The
|
|
13
|
+
* two inhibiting macros are, per upstream obj-randart.h:
|
|
14
|
+
* INHIBIT_STRONG => rng.oneIn(6) (one_in_(6))
|
|
15
|
+
* INHIBIT_WEAK => rng.oneIn(2) (one_in_(2))
|
|
16
|
+
* Each textual occurrence of these macros consumes one draw, and C's
|
|
17
|
+
* short-circuit evaluation of && / || is reproduced exactly so no draw is
|
|
18
|
+
* added or dropped.
|
|
19
|
+
*
|
|
20
|
+
* Faithful notes / approximations:
|
|
21
|
+
* - The upstream file_putf(log_file, ...) logging is dropped throughout; it
|
|
22
|
+
* never affects any returned value or RNG draw (same convention as power.ts
|
|
23
|
+
* and randart-data.ts). Where a routine's only use of a value was logging
|
|
24
|
+
* (e.g. lookup_obj_property in add_flag / add_mod), that lookup is dropped.
|
|
25
|
+
* - add_brand adds the resist matching the picked brand by comparing the
|
|
26
|
+
* brand's name to projections[element].name for the four base elements.
|
|
27
|
+
* Projections are not bound in ObjRegistry, so the base-element projection
|
|
28
|
+
* names are held in a small local table (BASE_ELEMENT_PROJ_NAMES) mirroring
|
|
29
|
+
* projection.txt / projection.json; noted as an approximation.
|
|
30
|
+
* - remove_contradictory_activation depends on effect_summarize_properties
|
|
31
|
+
* (effects-info.c). That summarizer lives in the effects domain, so it is
|
|
32
|
+
* ported in ./effects-info.ts (makeActivationSummarizer) and injected here as
|
|
33
|
+
* the ActivationSummarizer seam. It consumes no RNG and only ever nulls an
|
|
34
|
+
* activation when it is fully redundant with the artifact's other properties.
|
|
35
|
+
* When no summarizer is supplied this stays a conservative no-op (activations
|
|
36
|
+
* are never treated as redundant).
|
|
37
|
+
* - artifact_curse_conflicts's TIMED_INC "effect foiled by an existing
|
|
38
|
+
* property" branch depends on the timed-effects failure tables (not ported);
|
|
39
|
+
* only the explicit conflict-flags branch is ported. This affects only the
|
|
40
|
+
* cursed-artifact path (make_bad) and consumes no RNG. Noted as an
|
|
41
|
+
* approximation.
|
|
42
|
+
* - add_curse computes power as randint1(9) + 10 * m_bonus(9, level); C leaves
|
|
43
|
+
* the evaluation order of the two calls unspecified, so this port draws
|
|
44
|
+
* randint1 then m_bonus (left-to-right textual order).
|
|
45
|
+
*/
|
|
46
|
+
import { ELEM, KF, OBJ_MOD, OF, STAT_ENTRIES, TV } from "../generated/index.js";
|
|
47
|
+
import { ART_IDX } from "../generated/randart-properties.js";
|
|
48
|
+
import { copyBrands, copySlays, curseTimedIncFoiled } from "./object.js";
|
|
49
|
+
import { INHIBIT_POWER } from "./power.js";
|
|
50
|
+
import { EL_INFO_IGNORE, ELEM_BASE_MIN, ELEM_HIGH_MIN, OBJ_MOD_MAX, } from "./types.js";
|
|
51
|
+
/* ------------------------------------------------------------------ */
|
|
52
|
+
/* Constants (obj-randart.h, obj-power.h) */
|
|
53
|
+
/* ------------------------------------------------------------------ */
|
|
54
|
+
/** MAX_TRIES (obj-randart.h L28). */
|
|
55
|
+
const MAX_TRIES = 200;
|
|
56
|
+
/**
|
|
57
|
+
* AGGR_POWER (obj-randart.h L47): power below which uncursed randarts cannot
|
|
58
|
+
* aggravate.
|
|
59
|
+
*/
|
|
60
|
+
const AGGR_POWER = 300;
|
|
61
|
+
/** STAT_MAX (list-stats.h): the number of player stats. */
|
|
62
|
+
const STAT_MAX = STAT_ENTRIES.length;
|
|
63
|
+
/** Inhibiting thresholds (obj-power.h L67-L76). */
|
|
64
|
+
const INHIBIT_BLOWS = 3;
|
|
65
|
+
const INHIBIT_MIGHT = 4;
|
|
66
|
+
const INHIBIT_SHOTS = 21;
|
|
67
|
+
const HIGH_TO_HIT = 16;
|
|
68
|
+
const VERYHIGH_TO_HIT = 26;
|
|
69
|
+
const HIGH_TO_DAM = 16;
|
|
70
|
+
const VERYHIGH_TO_DAM = 26;
|
|
71
|
+
const HIGH_TO_AC = 26;
|
|
72
|
+
const VERYHIGH_TO_AC = 36;
|
|
73
|
+
/** ART_IDX_TOTAL (obj-randart.h): number of learned-probability slots. */
|
|
74
|
+
const ART_IDX_TOTAL = ART_IDX.TOTAL;
|
|
75
|
+
/**
|
|
76
|
+
* projections[element].name for the four base elements (projection.txt), used
|
|
77
|
+
* by add_brand to add the resist that matches the brand it just added.
|
|
78
|
+
* Projections are not bound in ObjRegistry, so the names are held here.
|
|
79
|
+
* Indexed by ELEM value (ACID..COLD).
|
|
80
|
+
*/
|
|
81
|
+
const BASE_ELEMENT_PROJ_NAMES = [
|
|
82
|
+
"acid", // ELEM_ACID
|
|
83
|
+
"lightning", // ELEM_ELEC
|
|
84
|
+
"fire", // ELEM_FIRE
|
|
85
|
+
"cold", // ELEM_COLD
|
|
86
|
+
];
|
|
87
|
+
/* ------------------------------------------------------------------ */
|
|
88
|
+
/* Arrays of indices by item type (obj-randart.c L52) */
|
|
89
|
+
/* ------------------------------------------------------------------ */
|
|
90
|
+
const artIdxBow = [
|
|
91
|
+
ART_IDX.BOW_SHOTS,
|
|
92
|
+
ART_IDX.BOW_MIGHT,
|
|
93
|
+
ART_IDX.BOW_BRAND,
|
|
94
|
+
ART_IDX.BOW_SLAY,
|
|
95
|
+
];
|
|
96
|
+
const artIdxWeapon = [
|
|
97
|
+
ART_IDX.WEAPON_HIT,
|
|
98
|
+
ART_IDX.WEAPON_DAM,
|
|
99
|
+
ART_IDX.WEAPON_AGGR,
|
|
100
|
+
];
|
|
101
|
+
const artIdxNonweapon = [
|
|
102
|
+
ART_IDX.NONWEAPON_HIT,
|
|
103
|
+
ART_IDX.NONWEAPON_DAM,
|
|
104
|
+
ART_IDX.NONWEAPON_HIT_DAM,
|
|
105
|
+
ART_IDX.NONWEAPON_AGGR,
|
|
106
|
+
ART_IDX.NONWEAPON_BRAND,
|
|
107
|
+
ART_IDX.NONWEAPON_SLAY,
|
|
108
|
+
ART_IDX.NONWEAPON_BLOWS,
|
|
109
|
+
ART_IDX.NONWEAPON_SHOTS,
|
|
110
|
+
];
|
|
111
|
+
const artIdxMelee = [
|
|
112
|
+
ART_IDX.MELEE_BLESS,
|
|
113
|
+
ART_IDX.MELEE_SINV,
|
|
114
|
+
ART_IDX.MELEE_BRAND,
|
|
115
|
+
ART_IDX.MELEE_SLAY,
|
|
116
|
+
ART_IDX.MELEE_BLOWS,
|
|
117
|
+
ART_IDX.MELEE_AC,
|
|
118
|
+
ART_IDX.MELEE_DICE,
|
|
119
|
+
ART_IDX.MELEE_WEIGHT,
|
|
120
|
+
ART_IDX.MELEE_TUNN,
|
|
121
|
+
];
|
|
122
|
+
const artIdxAllarmor = [ART_IDX.ALLARMOR_WEIGHT];
|
|
123
|
+
const artIdxBoot = [
|
|
124
|
+
ART_IDX.BOOT_AC,
|
|
125
|
+
ART_IDX.BOOT_FEATHER,
|
|
126
|
+
ART_IDX.BOOT_STEALTH,
|
|
127
|
+
ART_IDX.BOOT_TRAP_IMM,
|
|
128
|
+
ART_IDX.BOOT_SPEED,
|
|
129
|
+
ART_IDX.BOOT_MOVES,
|
|
130
|
+
];
|
|
131
|
+
const artIdxGlove = [
|
|
132
|
+
ART_IDX.GLOVE_AC,
|
|
133
|
+
ART_IDX.GLOVE_HIT_DAM,
|
|
134
|
+
ART_IDX.GLOVE_FA,
|
|
135
|
+
ART_IDX.GLOVE_DEX,
|
|
136
|
+
];
|
|
137
|
+
const artIdxHeadgear = [
|
|
138
|
+
ART_IDX.HELM_AC,
|
|
139
|
+
ART_IDX.HELM_RBLIND,
|
|
140
|
+
ART_IDX.HELM_ESP,
|
|
141
|
+
ART_IDX.HELM_SINV,
|
|
142
|
+
ART_IDX.HELM_WIS,
|
|
143
|
+
ART_IDX.HELM_INT,
|
|
144
|
+
];
|
|
145
|
+
const artIdxShield = [
|
|
146
|
+
ART_IDX.SHIELD_AC,
|
|
147
|
+
ART_IDX.SHIELD_LRES,
|
|
148
|
+
];
|
|
149
|
+
const artIdxCloak = [
|
|
150
|
+
ART_IDX.CLOAK_AC,
|
|
151
|
+
ART_IDX.CLOAK_STEALTH,
|
|
152
|
+
];
|
|
153
|
+
const artIdxArmor = [
|
|
154
|
+
ART_IDX.ARMOR_AC,
|
|
155
|
+
ART_IDX.ARMOR_STEALTH,
|
|
156
|
+
ART_IDX.ARMOR_HLIFE,
|
|
157
|
+
ART_IDX.ARMOR_CON,
|
|
158
|
+
ART_IDX.ARMOR_LRES,
|
|
159
|
+
ART_IDX.ARMOR_ALLRES,
|
|
160
|
+
ART_IDX.ARMOR_HRES,
|
|
161
|
+
];
|
|
162
|
+
const artIdxGen = [
|
|
163
|
+
ART_IDX.GEN_STAT,
|
|
164
|
+
ART_IDX.GEN_SUST,
|
|
165
|
+
ART_IDX.GEN_STEALTH,
|
|
166
|
+
ART_IDX.GEN_SEARCH,
|
|
167
|
+
ART_IDX.GEN_INFRA,
|
|
168
|
+
ART_IDX.GEN_SPEED,
|
|
169
|
+
ART_IDX.GEN_IMMUNE,
|
|
170
|
+
ART_IDX.GEN_FA,
|
|
171
|
+
ART_IDX.GEN_HLIFE,
|
|
172
|
+
ART_IDX.GEN_FEATHER,
|
|
173
|
+
ART_IDX.GEN_LIGHT,
|
|
174
|
+
ART_IDX.GEN_SINV,
|
|
175
|
+
ART_IDX.GEN_ESP,
|
|
176
|
+
ART_IDX.GEN_SDIG,
|
|
177
|
+
ART_IDX.GEN_REGEN,
|
|
178
|
+
ART_IDX.GEN_LRES,
|
|
179
|
+
ART_IDX.GEN_RPOIS,
|
|
180
|
+
ART_IDX.GEN_RFEAR,
|
|
181
|
+
ART_IDX.GEN_RLIGHT,
|
|
182
|
+
ART_IDX.GEN_RDARK,
|
|
183
|
+
ART_IDX.GEN_RBLIND,
|
|
184
|
+
ART_IDX.GEN_RCONF,
|
|
185
|
+
ART_IDX.GEN_RSOUND,
|
|
186
|
+
ART_IDX.GEN_RSHARD,
|
|
187
|
+
ART_IDX.GEN_RNEXUS,
|
|
188
|
+
ART_IDX.GEN_RNETHER,
|
|
189
|
+
ART_IDX.GEN_RCHAOS,
|
|
190
|
+
ART_IDX.GEN_RDISEN,
|
|
191
|
+
ART_IDX.GEN_AC,
|
|
192
|
+
ART_IDX.GEN_TUNN,
|
|
193
|
+
ART_IDX.GEN_ACTIV,
|
|
194
|
+
ART_IDX.GEN_PSTUN,
|
|
195
|
+
ART_IDX.GEN_DAM_RED,
|
|
196
|
+
ART_IDX.GEN_MOVES,
|
|
197
|
+
ART_IDX.GEN_TRAP_IMM,
|
|
198
|
+
];
|
|
199
|
+
const artIdxHighResist = [
|
|
200
|
+
ART_IDX.GEN_RPOIS,
|
|
201
|
+
ART_IDX.GEN_RFEAR,
|
|
202
|
+
ART_IDX.GEN_RLIGHT,
|
|
203
|
+
ART_IDX.GEN_RDARK,
|
|
204
|
+
ART_IDX.GEN_RBLIND,
|
|
205
|
+
ART_IDX.GEN_RCONF,
|
|
206
|
+
ART_IDX.GEN_RSOUND,
|
|
207
|
+
ART_IDX.GEN_RSHARD,
|
|
208
|
+
ART_IDX.GEN_RNEXUS,
|
|
209
|
+
ART_IDX.GEN_RNETHER,
|
|
210
|
+
ART_IDX.GEN_RCHAOS,
|
|
211
|
+
ART_IDX.GEN_RDISEN,
|
|
212
|
+
ART_IDX.GEN_PSTUN,
|
|
213
|
+
];
|
|
214
|
+
/* ------------------------------------------------------------------ */
|
|
215
|
+
/* Helpers */
|
|
216
|
+
/* ------------------------------------------------------------------ */
|
|
217
|
+
/** randcalc(v, 0, MINIMISE): base + dice (consumes no RNG). */
|
|
218
|
+
function rvMinimise(v) {
|
|
219
|
+
return v.base + v.dice;
|
|
220
|
+
}
|
|
221
|
+
/* ------------------------------------------------------------------ */
|
|
222
|
+
/* get_base_item (obj-randart.c L1348) */
|
|
223
|
+
/* ------------------------------------------------------------------ */
|
|
224
|
+
/**
|
|
225
|
+
* get_base_item (obj-randart.c L1348): pick a random base item kind for a given
|
|
226
|
+
* tval, drawn uniformly across the tval's svals; rejects elven Rings-of and
|
|
227
|
+
* quest-artifact kinds. For rings/amulets the search starts past the ordinary
|
|
228
|
+
* kinds (so only special jewellery bases are used).
|
|
229
|
+
*/
|
|
230
|
+
export function getBaseItem(reg, tval, rng) {
|
|
231
|
+
let kind = null;
|
|
232
|
+
let start = 1;
|
|
233
|
+
/* Restrict to appropriate kinds if jewellery. */
|
|
234
|
+
if (tval === TV.RING || tval === TV.AMULET) {
|
|
235
|
+
let testKind = reg.lookupKind(tval, start);
|
|
236
|
+
while (testKind && testKind.kidx < reg.ordinaryKindCount) {
|
|
237
|
+
start++;
|
|
238
|
+
testKind = reg.lookupKind(tval, start);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
const numSvals = reg.bases[tval]?.numSvals ?? 0;
|
|
242
|
+
/* Pick an sval for that tval at random. */
|
|
243
|
+
while (!kind) {
|
|
244
|
+
const r = start + rng.randint0(numSvals - start + 1);
|
|
245
|
+
kind = reg.lookupKind(tval, r);
|
|
246
|
+
/* No items based on quest artifacts or elven rings. */
|
|
247
|
+
if (kind &&
|
|
248
|
+
(kind.name.includes("Ring of") || kind.kindFlags.has(KF.QUEST_ART))) {
|
|
249
|
+
kind = null;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return kind;
|
|
253
|
+
}
|
|
254
|
+
/* ------------------------------------------------------------------ */
|
|
255
|
+
/* artifact_prep (obj-randart.c L1383) */
|
|
256
|
+
/* ------------------------------------------------------------------ */
|
|
257
|
+
/**
|
|
258
|
+
* artifact_prep (obj-randart.c L1383): add basic data to an artifact of a given
|
|
259
|
+
* object kind, then assign basic combat stats based on the item type. Draws
|
|
260
|
+
* randint0 for the weapon to-hit/to-dam or armour to-AC starting bonus.
|
|
261
|
+
*/
|
|
262
|
+
export function artifactPrep(reg, art, kind, data, rng) {
|
|
263
|
+
art.tval = kind.tval;
|
|
264
|
+
art.sval = kind.sval;
|
|
265
|
+
art.toH = rvMinimise(kind.toH);
|
|
266
|
+
art.toD = rvMinimise(kind.toD);
|
|
267
|
+
art.toA = rvMinimise(kind.toA);
|
|
268
|
+
art.ac = kind.ac;
|
|
269
|
+
art.dd = kind.dd;
|
|
270
|
+
art.ds = kind.ds;
|
|
271
|
+
art.weight = kind.weight;
|
|
272
|
+
art.flags.copy(kind.flags);
|
|
273
|
+
art.slays = copySlays(null, kind.slays, reg.slays);
|
|
274
|
+
art.brands = copyBrands(null, kind.brands, reg.brands);
|
|
275
|
+
art.curses = kind.curses ? kind.curses.slice() : null;
|
|
276
|
+
art.activation = null;
|
|
277
|
+
art.altMsg = "";
|
|
278
|
+
/* Inherit an activation's level, else the kind's level (if it has an
|
|
279
|
+
* effect), else 0. */
|
|
280
|
+
if (kind.activation) {
|
|
281
|
+
art.level = kind.activation.level;
|
|
282
|
+
}
|
|
283
|
+
else if (kind.effect) {
|
|
284
|
+
art.level = kind.level;
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
art.level = 0;
|
|
288
|
+
}
|
|
289
|
+
art.time = { base: 0, dice: 0, sides: 0, mBonus: 0 };
|
|
290
|
+
for (let i = 0; i < OBJ_MOD_MAX; i++) {
|
|
291
|
+
art.modifiers[i] = rvMinimise(kind.modifiers[i]);
|
|
292
|
+
}
|
|
293
|
+
for (let i = 0; i < art.elInfo.length; i++) {
|
|
294
|
+
const ke = kind.elInfo[i];
|
|
295
|
+
art.elInfo[i] = { resLevel: ke.resLevel, flags: ke.flags };
|
|
296
|
+
}
|
|
297
|
+
/* Artifacts ignore everything (base elements). */
|
|
298
|
+
for (let i = ELEM_BASE_MIN; i < ELEM_HIGH_MIN; i++) {
|
|
299
|
+
art.elInfo[i].flags |= EL_INFO_IGNORE;
|
|
300
|
+
}
|
|
301
|
+
/* Assign basic stats to the artifact based on its type. */
|
|
302
|
+
switch (kind.tval) {
|
|
303
|
+
case TV.BOW:
|
|
304
|
+
case TV.DIGGING:
|
|
305
|
+
case TV.HAFTED:
|
|
306
|
+
case TV.SWORD:
|
|
307
|
+
case TV.POLEARM:
|
|
308
|
+
art.toH += Math.trunc(data.hitStartval / 2) + rng.randint0(data.hitStartval);
|
|
309
|
+
art.toD += Math.trunc(data.damStartval / 2) + rng.randint0(data.damStartval);
|
|
310
|
+
break;
|
|
311
|
+
case TV.BOOTS:
|
|
312
|
+
case TV.GLOVES:
|
|
313
|
+
case TV.HELM:
|
|
314
|
+
case TV.CROWN:
|
|
315
|
+
case TV.SHIELD:
|
|
316
|
+
case TV.CLOAK:
|
|
317
|
+
case TV.SOFT_ARMOR:
|
|
318
|
+
case TV.HARD_ARMOR:
|
|
319
|
+
case TV.DRAG_ARMOR:
|
|
320
|
+
art.toA += Math.trunc(data.acStartval / 2) + rng.randint0(data.acStartval);
|
|
321
|
+
break;
|
|
322
|
+
case TV.LIGHT:
|
|
323
|
+
art.flags.off(OF.TAKES_FUEL);
|
|
324
|
+
art.flags.off(OF.BURNS_OUT);
|
|
325
|
+
art.flags.on(OF.NO_FUEL);
|
|
326
|
+
if (kind.kidx >= reg.ordinaryKindCount) {
|
|
327
|
+
art.modifiers[OBJ_MOD.LIGHT] = 3;
|
|
328
|
+
}
|
|
329
|
+
break;
|
|
330
|
+
default:
|
|
331
|
+
break;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
/* ------------------------------------------------------------------ */
|
|
335
|
+
/* build_freq_table (obj-randart.c L1505) */
|
|
336
|
+
/* ------------------------------------------------------------------ */
|
|
337
|
+
/**
|
|
338
|
+
* build_freq_table (obj-randart.c L1505): build a cumulative ability-frequency
|
|
339
|
+
* table for the given artifact's item type, zeroing frequencies for abilities
|
|
340
|
+
* that do not apply. Returns the cumulative table (length ART_IDX_TOTAL).
|
|
341
|
+
*/
|
|
342
|
+
export function buildFreqTable(art, data) {
|
|
343
|
+
const fTemp = new Array(ART_IDX_TOTAL).fill(0);
|
|
344
|
+
const freq = new Array(ART_IDX_TOTAL).fill(0);
|
|
345
|
+
const copyGroup = (group) => {
|
|
346
|
+
for (const idx of group)
|
|
347
|
+
fTemp[idx] = data.artProbs[idx];
|
|
348
|
+
};
|
|
349
|
+
/* Bow abilities. */
|
|
350
|
+
if (art.tval === TV.BOW)
|
|
351
|
+
copyGroup(artIdxBow);
|
|
352
|
+
/* General weapon abilities. */
|
|
353
|
+
if (art.tval === TV.BOW ||
|
|
354
|
+
art.tval === TV.DIGGING ||
|
|
355
|
+
art.tval === TV.HAFTED ||
|
|
356
|
+
art.tval === TV.POLEARM ||
|
|
357
|
+
art.tval === TV.SWORD) {
|
|
358
|
+
copyGroup(artIdxWeapon);
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
/* General non-weapon abilities. */
|
|
362
|
+
copyGroup(artIdxNonweapon);
|
|
363
|
+
}
|
|
364
|
+
/* General melee abilities. */
|
|
365
|
+
if (art.tval === TV.DIGGING ||
|
|
366
|
+
art.tval === TV.HAFTED ||
|
|
367
|
+
art.tval === TV.POLEARM ||
|
|
368
|
+
art.tval === TV.SWORD) {
|
|
369
|
+
copyGroup(artIdxMelee);
|
|
370
|
+
}
|
|
371
|
+
/* General armor abilities. */
|
|
372
|
+
if (art.tval === TV.BOOTS ||
|
|
373
|
+
art.tval === TV.GLOVES ||
|
|
374
|
+
art.tval === TV.HELM ||
|
|
375
|
+
art.tval === TV.CROWN ||
|
|
376
|
+
art.tval === TV.SHIELD ||
|
|
377
|
+
art.tval === TV.CLOAK ||
|
|
378
|
+
art.tval === TV.SOFT_ARMOR ||
|
|
379
|
+
art.tval === TV.HARD_ARMOR ||
|
|
380
|
+
art.tval === TV.DRAG_ARMOR) {
|
|
381
|
+
copyGroup(artIdxAllarmor);
|
|
382
|
+
}
|
|
383
|
+
/* Boot abilities. */
|
|
384
|
+
if (art.tval === TV.BOOTS)
|
|
385
|
+
copyGroup(artIdxBoot);
|
|
386
|
+
/* Glove abilities. */
|
|
387
|
+
if (art.tval === TV.GLOVES)
|
|
388
|
+
copyGroup(artIdxGlove);
|
|
389
|
+
/* Headgear abilities. */
|
|
390
|
+
if (art.tval === TV.HELM || art.tval === TV.CROWN)
|
|
391
|
+
copyGroup(artIdxHeadgear);
|
|
392
|
+
/* Shield abilities. */
|
|
393
|
+
if (art.tval === TV.SHIELD)
|
|
394
|
+
copyGroup(artIdxShield);
|
|
395
|
+
/* Cloak abilities. */
|
|
396
|
+
if (art.tval === TV.CLOAK)
|
|
397
|
+
copyGroup(artIdxCloak);
|
|
398
|
+
/* Armor abilities. */
|
|
399
|
+
if (art.tval === TV.SOFT_ARMOR ||
|
|
400
|
+
art.tval === TV.HARD_ARMOR ||
|
|
401
|
+
art.tval === TV.DRAG_ARMOR) {
|
|
402
|
+
copyGroup(artIdxArmor);
|
|
403
|
+
}
|
|
404
|
+
/* General abilities - no constraint. */
|
|
405
|
+
copyGroup(artIdxGen);
|
|
406
|
+
/* Build the cumulative frequency table. */
|
|
407
|
+
for (let i = 0; i < ART_IDX_TOTAL; i++) {
|
|
408
|
+
for (let j = i; j < ART_IDX_TOTAL; j++) {
|
|
409
|
+
freq[j] += fTemp[i];
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
return freq;
|
|
413
|
+
}
|
|
414
|
+
/* ------------------------------------------------------------------ */
|
|
415
|
+
/* try_supercharge (obj-randart.c L1627) */
|
|
416
|
+
/* ------------------------------------------------------------------ */
|
|
417
|
+
/**
|
|
418
|
+
* try_supercharge (obj-randart.c L1627): give the artifact one up-front chance
|
|
419
|
+
* at each supercharge ability (huge dice/blows, max shots/might, big speed, big
|
|
420
|
+
* AC, aggravation), weighted by the learned supercharge frequencies. The
|
|
421
|
+
* randint0(a_max) rolls use reg.artifacts.length (z_info->a_max).
|
|
422
|
+
*/
|
|
423
|
+
export function trySupercharge(reg, art, targetPower, data, rng) {
|
|
424
|
+
const aMax = reg.artifacts.length;
|
|
425
|
+
/* Huge damage dice or max blows - melee weapon only. */
|
|
426
|
+
if (art.tval === TV.DIGGING ||
|
|
427
|
+
art.tval === TV.HAFTED ||
|
|
428
|
+
art.tval === TV.POLEARM ||
|
|
429
|
+
art.tval === TV.SWORD) {
|
|
430
|
+
if (rng.randint0(aMax) < data.artProbs[ART_IDX.MELEE_DICE_SUPER]) {
|
|
431
|
+
art.dd += 3 + rng.randint0(4);
|
|
432
|
+
}
|
|
433
|
+
else if (rng.randint0(aMax) < data.artProbs[ART_IDX.MELEE_BLOWS_SUPER]) {
|
|
434
|
+
art.modifiers[OBJ_MOD.BLOWS] = INHIBIT_BLOWS - 1;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
/* Bows - max might or shots. */
|
|
438
|
+
if (art.tval === TV.BOW) {
|
|
439
|
+
if (rng.randint0(aMax) < data.artProbs[ART_IDX.BOW_SHOTS_SUPER]) {
|
|
440
|
+
art.modifiers[OBJ_MOD.SHOTS] = INHIBIT_SHOTS - 1;
|
|
441
|
+
}
|
|
442
|
+
else if (rng.randint0(aMax) < data.artProbs[ART_IDX.BOW_MIGHT_SUPER]) {
|
|
443
|
+
art.modifiers[OBJ_MOD.MIGHT] = INHIBIT_MIGHT - 1;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
/* Big speed bonus - any item but more likely on boots. C short-circuits the
|
|
447
|
+
* || so the second randint0 only rolls when the first test fails and the
|
|
448
|
+
* item is boots. */
|
|
449
|
+
if (rng.randint0(aMax) < data.artProbs[ART_IDX.GEN_SPEED_SUPER] ||
|
|
450
|
+
(art.tval === TV.BOOTS &&
|
|
451
|
+
rng.randint0(aMax) < data.artProbs[ART_IDX.BOOT_SPEED])) {
|
|
452
|
+
art.modifiers[OBJ_MOD.SPEED] = 5 + rng.randint0(6);
|
|
453
|
+
if (rng.oneIn(2))
|
|
454
|
+
art.modifiers[OBJ_MOD.SPEED] += rng.randint1(3);
|
|
455
|
+
if (rng.oneIn(6))
|
|
456
|
+
art.modifiers[OBJ_MOD.SPEED] += 1 + rng.randint1(6);
|
|
457
|
+
}
|
|
458
|
+
/* Big AC bonus. */
|
|
459
|
+
if (art.tval === TV.DIGGING ||
|
|
460
|
+
art.tval === TV.HAFTED ||
|
|
461
|
+
art.tval === TV.POLEARM ||
|
|
462
|
+
art.tval === TV.SWORD) {
|
|
463
|
+
if (rng.randint0(aMax) < data.artProbs[ART_IDX.MELEE_AC_SUPER]) {
|
|
464
|
+
art.toA += 19 + rng.randint1(11);
|
|
465
|
+
if (rng.oneIn(2))
|
|
466
|
+
art.toA += rng.randint1(10);
|
|
467
|
+
if (rng.oneIn(6))
|
|
468
|
+
art.toA += rng.randint1(20);
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
else if (art.tval !== TV.BOW &&
|
|
472
|
+
rng.randint0(aMax) < data.artProbs[ART_IDX.GEN_AC_SUPER]) {
|
|
473
|
+
art.toA += 19 + rng.randint1(11);
|
|
474
|
+
if (rng.oneIn(2))
|
|
475
|
+
art.toA += rng.randint1(10);
|
|
476
|
+
if (rng.oneIn(6))
|
|
477
|
+
art.toA += rng.randint1(20);
|
|
478
|
+
}
|
|
479
|
+
/* Aggravation. C short-circuits the && so target_power is only tested when
|
|
480
|
+
* the randint0 roll succeeds. */
|
|
481
|
+
if (art.tval === TV.BOW ||
|
|
482
|
+
art.tval === TV.DIGGING ||
|
|
483
|
+
art.tval === TV.HAFTED ||
|
|
484
|
+
art.tval === TV.POLEARM ||
|
|
485
|
+
art.tval === TV.SWORD) {
|
|
486
|
+
if (rng.randint0(aMax) < data.artProbs[ART_IDX.WEAPON_AGGR] &&
|
|
487
|
+
targetPower > AGGR_POWER) {
|
|
488
|
+
art.flags.on(OF.AGGRAVATE);
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
else {
|
|
492
|
+
if (rng.randint0(aMax) < data.artProbs[ART_IDX.NONWEAPON_AGGR] &&
|
|
493
|
+
targetPower > AGGR_POWER) {
|
|
494
|
+
art.flags.on(OF.AGGRAVATE);
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
/* ------------------------------------------------------------------ */
|
|
499
|
+
/* add_flag (obj-randart.c L1721) */
|
|
500
|
+
/* ------------------------------------------------------------------ */
|
|
501
|
+
/** add_flag (obj-randart.c L1721): add a flag; returns true when it changed. */
|
|
502
|
+
export function addFlag(art, flag) {
|
|
503
|
+
if (art.flags.has(flag))
|
|
504
|
+
return false;
|
|
505
|
+
art.flags.on(flag);
|
|
506
|
+
return true;
|
|
507
|
+
}
|
|
508
|
+
/* ------------------------------------------------------------------ */
|
|
509
|
+
/* add_resist (obj-randart.c L1736) */
|
|
510
|
+
/* ------------------------------------------------------------------ */
|
|
511
|
+
/** add_resist (obj-randart.c L1736): add a resist; true when it changed. */
|
|
512
|
+
export function addResist(art, element) {
|
|
513
|
+
const info = art.elInfo[element];
|
|
514
|
+
if (info.resLevel > 0)
|
|
515
|
+
return false;
|
|
516
|
+
info.resLevel = 1;
|
|
517
|
+
return true;
|
|
518
|
+
}
|
|
519
|
+
/* ------------------------------------------------------------------ */
|
|
520
|
+
/* add_immunity (obj-randart.c L1750) */
|
|
521
|
+
/* ------------------------------------------------------------------ */
|
|
522
|
+
/** add_immunity (obj-randart.c L1750): grant immunity to a random base element. */
|
|
523
|
+
export function addImmunity(art, rng) {
|
|
524
|
+
const r = rng.randint0(4);
|
|
525
|
+
art.elInfo[r].resLevel = 3;
|
|
526
|
+
}
|
|
527
|
+
/* ------------------------------------------------------------------ */
|
|
528
|
+
/* add_mod (obj-randart.c L1761) */
|
|
529
|
+
/* ------------------------------------------------------------------ */
|
|
530
|
+
/**
|
|
531
|
+
* add_mod (obj-randart.c L1761): add, increase (or worsen a negative) a
|
|
532
|
+
* modifier, favouring a few large bonuses over many small ones. Blows, might
|
|
533
|
+
* and moves are "powerful" and applied sparingly. Returns true when changed.
|
|
534
|
+
*/
|
|
535
|
+
export function addMod(art, mod, rng) {
|
|
536
|
+
const powerful = mod === OBJ_MOD.BLOWS || mod === OBJ_MOD.MIGHT || mod === OBJ_MOD.MOVES;
|
|
537
|
+
let success = false;
|
|
538
|
+
if (art.modifiers[mod] < 0) {
|
|
539
|
+
/* Negative mods just get a bit worse. */
|
|
540
|
+
if (rng.oneIn(2)) {
|
|
541
|
+
art.modifiers[mod]--;
|
|
542
|
+
success = true;
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
else if (powerful) {
|
|
546
|
+
/* Powerful mods need to be applied sparingly. */
|
|
547
|
+
if (art.modifiers[mod] === 0) {
|
|
548
|
+
art.modifiers[mod] = rng.randint1(2);
|
|
549
|
+
success = true;
|
|
550
|
+
}
|
|
551
|
+
else if (rng.oneIn(20 * art.modifiers[mod])) {
|
|
552
|
+
art.modifiers[mod]++;
|
|
553
|
+
success = true;
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
else {
|
|
557
|
+
/* Hard cap of 6 on non-speed mods. */
|
|
558
|
+
if (mod !== OBJ_MOD.SPEED && art.modifiers[mod] >= 6) {
|
|
559
|
+
return false;
|
|
560
|
+
}
|
|
561
|
+
/* New mods average 3, old ones are incremented by 1 or 2. */
|
|
562
|
+
if (art.modifiers[mod] === 0) {
|
|
563
|
+
art.modifiers[mod] = rng.randint0(3) + rng.randint1(3);
|
|
564
|
+
success = true;
|
|
565
|
+
}
|
|
566
|
+
else {
|
|
567
|
+
art.modifiers[mod] += rng.randint1(2);
|
|
568
|
+
success = true;
|
|
569
|
+
}
|
|
570
|
+
/* Enforce cap. */
|
|
571
|
+
if (mod !== OBJ_MOD.SPEED && art.modifiers[mod] >= 6) {
|
|
572
|
+
art.modifiers[mod] = 6;
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
return success;
|
|
576
|
+
}
|
|
577
|
+
/* ------------------------------------------------------------------ */
|
|
578
|
+
/* add_stat (obj-randart.c L1823) */
|
|
579
|
+
/* ------------------------------------------------------------------ */
|
|
580
|
+
/** add_stat (obj-randart.c L1823): add or increase a random stat modifier. */
|
|
581
|
+
export function addStat(art, rng) {
|
|
582
|
+
addMod(art, OBJ_MOD.STR + rng.randint0(STAT_MAX), rng);
|
|
583
|
+
}
|
|
584
|
+
/* ------------------------------------------------------------------ */
|
|
585
|
+
/* add_sustain (obj-randart.c L1831) */
|
|
586
|
+
/* ------------------------------------------------------------------ */
|
|
587
|
+
/** add_sustain (obj-randart.c L1831): add a random sustain, if any are free. */
|
|
588
|
+
export function addSustain(art, rng) {
|
|
589
|
+
/* Break out if all stats are sustained to avoid an infinite loop. */
|
|
590
|
+
if (art.flags.testAll(OF.SUST_STR, OF.SUST_INT, OF.SUST_WIS, OF.SUST_DEX, OF.SUST_CON)) {
|
|
591
|
+
return;
|
|
592
|
+
}
|
|
593
|
+
let success = false;
|
|
594
|
+
while (!success) {
|
|
595
|
+
const r = rng.randint0(5);
|
|
596
|
+
if (r === 0)
|
|
597
|
+
success = addFlag(art, OF.SUST_STR);
|
|
598
|
+
else if (r === 1)
|
|
599
|
+
success = addFlag(art, OF.SUST_INT);
|
|
600
|
+
else if (r === 2)
|
|
601
|
+
success = addFlag(art, OF.SUST_WIS);
|
|
602
|
+
else if (r === 3)
|
|
603
|
+
success = addFlag(art, OF.SUST_DEX);
|
|
604
|
+
else if (r === 4)
|
|
605
|
+
success = addFlag(art, OF.SUST_CON);
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
/* ------------------------------------------------------------------ */
|
|
609
|
+
/* add_low_resist (obj-randart.c L1854) */
|
|
610
|
+
/* ------------------------------------------------------------------ */
|
|
611
|
+
/** add_low_resist (obj-randart.c L1854): add a random unheld low resist. */
|
|
612
|
+
export function addLowResist(art, rng) {
|
|
613
|
+
let count = 0;
|
|
614
|
+
for (let i = ELEM_BASE_MIN; i < ELEM_HIGH_MIN; i++) {
|
|
615
|
+
if (art.elInfo[i].resLevel <= 0)
|
|
616
|
+
count++;
|
|
617
|
+
}
|
|
618
|
+
if (!count)
|
|
619
|
+
return;
|
|
620
|
+
const r = rng.randint0(count);
|
|
621
|
+
count = 0;
|
|
622
|
+
for (let i = ELEM_BASE_MIN; i < ELEM_HIGH_MIN; i++) {
|
|
623
|
+
if (art.elInfo[i].resLevel > 0)
|
|
624
|
+
continue;
|
|
625
|
+
if (r === count++) {
|
|
626
|
+
addResist(art, i);
|
|
627
|
+
return;
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
/* ------------------------------------------------------------------ */
|
|
632
|
+
/* add_high_resist (obj-randart.c L1879) */
|
|
633
|
+
/* ------------------------------------------------------------------ */
|
|
634
|
+
/**
|
|
635
|
+
* add_high_resist (obj-randart.c L1879): add a high resist chosen from the
|
|
636
|
+
* learned high-resist frequency distribution. Faithfully preserves the
|
|
637
|
+
* upstream weighting quirk in which the running `temp` accumulator is left in
|
|
638
|
+
* a partial-sum state between retry iterations (it is not reset to the total).
|
|
639
|
+
*/
|
|
640
|
+
export function addHighResist(art, data, rng) {
|
|
641
|
+
const n = artIdxHighResist.length;
|
|
642
|
+
let temp = 0;
|
|
643
|
+
for (let k = 0; k < n; k++)
|
|
644
|
+
temp += data.artProbs[artIdxHighResist[k]];
|
|
645
|
+
let success = false;
|
|
646
|
+
let count = 0;
|
|
647
|
+
while (!success && count < MAX_TRIES) {
|
|
648
|
+
/* Randomize from 1 to the current total amount. */
|
|
649
|
+
const r = rng.randint1(temp);
|
|
650
|
+
/* Determine which (weighted) resist this number corresponds to. */
|
|
651
|
+
temp = data.artProbs[artIdxHighResist[0]];
|
|
652
|
+
let i = 0;
|
|
653
|
+
while (r > temp && i < n) {
|
|
654
|
+
temp += data.artProbs[artIdxHighResist[i]];
|
|
655
|
+
i++;
|
|
656
|
+
}
|
|
657
|
+
/* i is the index of the correct high resist. */
|
|
658
|
+
if (i === 0)
|
|
659
|
+
success = addResist(art, ELEM.POIS);
|
|
660
|
+
else if (i === 1)
|
|
661
|
+
success = addFlag(art, OF.PROT_FEAR);
|
|
662
|
+
else if (i === 2)
|
|
663
|
+
success = addResist(art, ELEM.LIGHT);
|
|
664
|
+
else if (i === 3)
|
|
665
|
+
success = addResist(art, ELEM.DARK);
|
|
666
|
+
else if (i === 4)
|
|
667
|
+
success = addFlag(art, OF.PROT_BLIND);
|
|
668
|
+
else if (i === 5)
|
|
669
|
+
success = addFlag(art, OF.PROT_CONF);
|
|
670
|
+
else if (i === 6)
|
|
671
|
+
success = addResist(art, ELEM.SOUND);
|
|
672
|
+
else if (i === 7)
|
|
673
|
+
success = addResist(art, ELEM.SHARD);
|
|
674
|
+
else if (i === 8)
|
|
675
|
+
success = addResist(art, ELEM.NEXUS);
|
|
676
|
+
else if (i === 9)
|
|
677
|
+
success = addResist(art, ELEM.NETHER);
|
|
678
|
+
else if (i === 10)
|
|
679
|
+
success = addResist(art, ELEM.CHAOS);
|
|
680
|
+
else if (i === 11)
|
|
681
|
+
success = addResist(art, ELEM.DISEN);
|
|
682
|
+
else if (i === 12)
|
|
683
|
+
success = addFlag(art, OF.PROT_STUN);
|
|
684
|
+
count++;
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
/* ------------------------------------------------------------------ */
|
|
688
|
+
/* append_brand / append_slay (obj-slays.c) */
|
|
689
|
+
/* ------------------------------------------------------------------ */
|
|
690
|
+
/**
|
|
691
|
+
* append_brand (obj-slays.c): try to add brand `pick`, replacing a same-named
|
|
692
|
+
* lower-multiplier brand if present. Returns false when a same-or-greater
|
|
693
|
+
* multiplier brand of the same name already exists.
|
|
694
|
+
*/
|
|
695
|
+
function appendBrand(art, pick, reg) {
|
|
696
|
+
const brand = reg.brands[pick];
|
|
697
|
+
if (!art.brands) {
|
|
698
|
+
art.brands = new Array(reg.brands.length).fill(false);
|
|
699
|
+
art.brands[pick] = true;
|
|
700
|
+
return true;
|
|
701
|
+
}
|
|
702
|
+
for (let i = 1; i < reg.brands.length; i++) {
|
|
703
|
+
if (art.brands[i]) {
|
|
704
|
+
if (reg.brands[i].name === brand.name) {
|
|
705
|
+
if (brand.multiplier <= reg.brands[i].multiplier)
|
|
706
|
+
return false;
|
|
707
|
+
art.brands[i] = false;
|
|
708
|
+
art.brands[pick] = true;
|
|
709
|
+
return true;
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
art.brands[pick] = true;
|
|
714
|
+
return true;
|
|
715
|
+
}
|
|
716
|
+
/**
|
|
717
|
+
* same_monsters_slain (obj-slays.c): whether two slays affect the same
|
|
718
|
+
* monsters (same race flag and same base).
|
|
719
|
+
*/
|
|
720
|
+
function sameMonstersSlain(reg, i, j) {
|
|
721
|
+
const a = reg.slays[i];
|
|
722
|
+
const b = reg.slays[j];
|
|
723
|
+
if (a.raceFlag !== b.raceFlag)
|
|
724
|
+
return false;
|
|
725
|
+
if (!a.base && !b.base)
|
|
726
|
+
return true;
|
|
727
|
+
if ((a.base && !b.base) || (!a.base && b.base))
|
|
728
|
+
return false;
|
|
729
|
+
return a.base === b.base;
|
|
730
|
+
}
|
|
731
|
+
/**
|
|
732
|
+
* append_slay (obj-slays.c): try to add slay `pick`, replacing a
|
|
733
|
+
* same-monsters lower-multiplier slay if present. Returns false when a
|
|
734
|
+
* same-or-greater multiplier slay of the same monsters already exists.
|
|
735
|
+
*/
|
|
736
|
+
function appendSlay(art, pick, reg) {
|
|
737
|
+
const slay = reg.slays[pick];
|
|
738
|
+
if (!art.slays) {
|
|
739
|
+
art.slays = new Array(reg.slays.length).fill(false);
|
|
740
|
+
art.slays[pick] = true;
|
|
741
|
+
return true;
|
|
742
|
+
}
|
|
743
|
+
for (let i = 1; i < reg.slays.length; i++) {
|
|
744
|
+
if (art.slays[i]) {
|
|
745
|
+
if (sameMonstersSlain(reg, i, pick)) {
|
|
746
|
+
if (slay.multiplier <= reg.slays[i].multiplier)
|
|
747
|
+
return false;
|
|
748
|
+
art.slays[i] = false;
|
|
749
|
+
art.slays[pick] = true;
|
|
750
|
+
return true;
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
art.slays[pick] = true;
|
|
755
|
+
return true;
|
|
756
|
+
}
|
|
757
|
+
/* ------------------------------------------------------------------ */
|
|
758
|
+
/* add_brand (obj-randart.c L1928) */
|
|
759
|
+
/* ------------------------------------------------------------------ */
|
|
760
|
+
/**
|
|
761
|
+
* add_brand (obj-randart.c L1928): add a brand (mostly only one), then
|
|
762
|
+
* frequently add the resist matching the brand's element.
|
|
763
|
+
*/
|
|
764
|
+
export function addBrand(reg, art, rng) {
|
|
765
|
+
/* Mostly only one brand. C short-circuits so randint0(4) is only rolled
|
|
766
|
+
* when the artifact already has brands. */
|
|
767
|
+
if (art.brands && rng.randint0(4))
|
|
768
|
+
return;
|
|
769
|
+
/* Get a random brand. */
|
|
770
|
+
let brandIdx = 0;
|
|
771
|
+
for (let count = 0; count < MAX_TRIES; count++) {
|
|
772
|
+
const pick = rng.randint1(reg.brands.length - 1);
|
|
773
|
+
if (!appendBrand(art, pick, reg))
|
|
774
|
+
continue;
|
|
775
|
+
brandIdx = pick;
|
|
776
|
+
break;
|
|
777
|
+
}
|
|
778
|
+
/* Frequently add the corresponding resist. randint0(4) only rolls when a
|
|
779
|
+
* brand was actually added. */
|
|
780
|
+
if (brandIdx && rng.randint0(4)) {
|
|
781
|
+
const brand = reg.brands[brandIdx];
|
|
782
|
+
for (let i = ELEM_BASE_MIN; i < ELEM_HIGH_MIN; i++) {
|
|
783
|
+
if (brand.name === BASE_ELEMENT_PROJ_NAMES[i] &&
|
|
784
|
+
art.elInfo[i].resLevel <= 0) {
|
|
785
|
+
addResist(art, i);
|
|
786
|
+
}
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
/* ------------------------------------------------------------------ */
|
|
791
|
+
/* add_slay (obj-randart.c L1962) */
|
|
792
|
+
/* ------------------------------------------------------------------ */
|
|
793
|
+
/**
|
|
794
|
+
* add_slay (obj-randart.c L1962): add a slay, then frequently add more slays
|
|
795
|
+
* if the first choice was weak (power < 105).
|
|
796
|
+
*/
|
|
797
|
+
export function addSlay(reg, art, rng) {
|
|
798
|
+
let slayIdx = 0;
|
|
799
|
+
for (let count = 0; count < MAX_TRIES; count++) {
|
|
800
|
+
const pick = rng.randint1(reg.slays.length - 1);
|
|
801
|
+
if (!appendSlay(art, pick, reg))
|
|
802
|
+
continue;
|
|
803
|
+
slayIdx = pick;
|
|
804
|
+
break;
|
|
805
|
+
}
|
|
806
|
+
/* Frequently add more slays if the first choice is weak. randint0(4) only
|
|
807
|
+
* rolls when a slay was actually added. */
|
|
808
|
+
if (slayIdx && rng.randint0(4) && reg.slays[slayIdx].power < 105) {
|
|
809
|
+
addSlay(reg, art, rng);
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
/* ------------------------------------------------------------------ */
|
|
813
|
+
/* add_damage_dice (obj-randart.c L1986) */
|
|
814
|
+
/* ------------------------------------------------------------------ */
|
|
815
|
+
/** add_damage_dice (obj-randart.c L1986): add one or two damage dice. */
|
|
816
|
+
export function addDamageDice(art, rng) {
|
|
817
|
+
art.dd += rng.randint1(2);
|
|
818
|
+
}
|
|
819
|
+
/* ------------------------------------------------------------------ */
|
|
820
|
+
/* add_to_hit (obj-randart.c L1997) */
|
|
821
|
+
/* ------------------------------------------------------------------ */
|
|
822
|
+
/**
|
|
823
|
+
* add_to_hit (obj-randart.c L1997): add to-hit unless already too high (the
|
|
824
|
+
* high thresholds are only bypassed by the inhibiting rolls).
|
|
825
|
+
*/
|
|
826
|
+
export function addToHit(art, fixed, random, rng) {
|
|
827
|
+
if (art.toH > VERYHIGH_TO_HIT) {
|
|
828
|
+
if (!rng.oneIn(6))
|
|
829
|
+
return;
|
|
830
|
+
}
|
|
831
|
+
else if (art.toH > HIGH_TO_HIT) {
|
|
832
|
+
if (!rng.oneIn(2))
|
|
833
|
+
return;
|
|
834
|
+
}
|
|
835
|
+
art.toH += fixed + rng.randint0(random);
|
|
836
|
+
}
|
|
837
|
+
/* ------------------------------------------------------------------ */
|
|
838
|
+
/* add_to_dam (obj-randart.c L2020) */
|
|
839
|
+
/* ------------------------------------------------------------------ */
|
|
840
|
+
/**
|
|
841
|
+
* add_to_dam (obj-randart.c L2020): add to-dam unless already too high. Note
|
|
842
|
+
* the upstream quirk kept faithfully: the HIGH threshold branch tests to_h,
|
|
843
|
+
* not to_d.
|
|
844
|
+
*/
|
|
845
|
+
export function addToDam(art, fixed, random, rng) {
|
|
846
|
+
if (art.toD > VERYHIGH_TO_DAM) {
|
|
847
|
+
if (!rng.oneIn(6))
|
|
848
|
+
return;
|
|
849
|
+
}
|
|
850
|
+
else if (art.toH > HIGH_TO_DAM) {
|
|
851
|
+
if (!rng.oneIn(2))
|
|
852
|
+
return;
|
|
853
|
+
}
|
|
854
|
+
art.toD += fixed + rng.randint0(random);
|
|
855
|
+
}
|
|
856
|
+
/* ------------------------------------------------------------------ */
|
|
857
|
+
/* add_to_AC (obj-randart.c L2044) */
|
|
858
|
+
/* ------------------------------------------------------------------ */
|
|
859
|
+
/**
|
|
860
|
+
* add_to_AC (obj-randart.c L2044): add to-AC unless already too high. Note the
|
|
861
|
+
* upstream quirk kept faithfully: the HIGH threshold branch tests to_h, not
|
|
862
|
+
* to_a.
|
|
863
|
+
*/
|
|
864
|
+
export function addToAC(art, fixed, random, rng) {
|
|
865
|
+
if (art.toA > VERYHIGH_TO_AC) {
|
|
866
|
+
if (!rng.oneIn(6))
|
|
867
|
+
return;
|
|
868
|
+
}
|
|
869
|
+
else if (art.toH > HIGH_TO_AC) {
|
|
870
|
+
if (!rng.oneIn(2))
|
|
871
|
+
return;
|
|
872
|
+
}
|
|
873
|
+
art.toA += fixed + rng.randint0(random);
|
|
874
|
+
}
|
|
875
|
+
/* ------------------------------------------------------------------ */
|
|
876
|
+
/* add_weight_mod (obj-randart.c L2068) */
|
|
877
|
+
/* ------------------------------------------------------------------ */
|
|
878
|
+
/** add_weight_mod (obj-randart.c L2068): lower the artifact's weight by 10%. */
|
|
879
|
+
export function addWeightMod(art) {
|
|
880
|
+
art.weight = Math.trunc((art.weight * 9) / 10);
|
|
881
|
+
}
|
|
882
|
+
/* ------------------------------------------------------------------ */
|
|
883
|
+
/* add_activation (obj-randart.c L2078) */
|
|
884
|
+
/* ------------------------------------------------------------------ */
|
|
885
|
+
/**
|
|
886
|
+
* add_activation (obj-randart.c L2078): give the artifact a random activation
|
|
887
|
+
* that is useful but not exploitable and roughly proportionate to its power.
|
|
888
|
+
* z_info->act_max is reg.activations.length (index 0 is the null/zeroed slot,
|
|
889
|
+
* mirroring the zeroed activations[0] upstream).
|
|
890
|
+
*/
|
|
891
|
+
export function addActivation(reg, art, targetPower, maxPower, rng) {
|
|
892
|
+
const actMax = reg.activations.length;
|
|
893
|
+
/* Work out the maximum allowed activation power. */
|
|
894
|
+
let maxEffect = 0;
|
|
895
|
+
for (let i = 0; i < actMax; i++) {
|
|
896
|
+
const act = reg.activations[i];
|
|
897
|
+
const power = act ? act.power : 0;
|
|
898
|
+
if (power > maxEffect && power < INHIBIT_POWER)
|
|
899
|
+
maxEffect = power;
|
|
900
|
+
}
|
|
901
|
+
/* Select an activation at random. */
|
|
902
|
+
let count = 0;
|
|
903
|
+
while (count < MAX_TRIES) {
|
|
904
|
+
const x = rng.randint0(actMax);
|
|
905
|
+
const act = reg.activations[x];
|
|
906
|
+
const p = act ? act.power : 0;
|
|
907
|
+
if (p < INHIBIT_POWER &&
|
|
908
|
+
Math.trunc((100 * p) / maxEffect) >
|
|
909
|
+
Math.trunc((50 * targetPower) / maxPower) &&
|
|
910
|
+
Math.trunc((100 * p) / maxEffect) <
|
|
911
|
+
Math.trunc((200 * targetPower) / maxPower)) {
|
|
912
|
+
art.activation = act;
|
|
913
|
+
art.level = act.level;
|
|
914
|
+
art.time.base = p * 8;
|
|
915
|
+
art.time.dice = p > 5 ? Math.trunc(p / 5) : 1;
|
|
916
|
+
art.time.sides = p;
|
|
917
|
+
return;
|
|
918
|
+
}
|
|
919
|
+
count++;
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
/* ------------------------------------------------------------------ */
|
|
923
|
+
/* choose_ability (obj-randart.c L2121) */
|
|
924
|
+
/* ------------------------------------------------------------------ */
|
|
925
|
+
/**
|
|
926
|
+
* choose_ability (obj-randart.c L2121): choose an ability index weighted by the
|
|
927
|
+
* given cumulative frequency table (length ART_IDX_TOTAL).
|
|
928
|
+
*/
|
|
929
|
+
export function chooseAbility(freqTable, rng) {
|
|
930
|
+
const r = rng.randint1(freqTable[ART_IDX_TOTAL - 1]);
|
|
931
|
+
let ability = 0;
|
|
932
|
+
while (r > freqTable[ability])
|
|
933
|
+
ability++;
|
|
934
|
+
return ability;
|
|
935
|
+
}
|
|
936
|
+
/* ------------------------------------------------------------------ */
|
|
937
|
+
/* add_ability_aux (obj-randart.c L2150) */
|
|
938
|
+
/* ------------------------------------------------------------------ */
|
|
939
|
+
/**
|
|
940
|
+
* add_ability_aux (obj-randart.c L2150): add the ability given by index r. A
|
|
941
|
+
* general dispatch that imposes no item-type restriction (that is handled by
|
|
942
|
+
* the frequency table).
|
|
943
|
+
*/
|
|
944
|
+
export function addAbilityAux(reg, art, r, targetPower, data, rng) {
|
|
945
|
+
const kind = reg.lookupKind(art.tval, art.sval);
|
|
946
|
+
switch (r) {
|
|
947
|
+
case ART_IDX.BOW_SHOTS:
|
|
948
|
+
case ART_IDX.NONWEAPON_SHOTS:
|
|
949
|
+
addMod(art, OBJ_MOD.SHOTS, rng);
|
|
950
|
+
break;
|
|
951
|
+
case ART_IDX.BOW_MIGHT:
|
|
952
|
+
addMod(art, OBJ_MOD.MIGHT, rng);
|
|
953
|
+
break;
|
|
954
|
+
case ART_IDX.WEAPON_HIT:
|
|
955
|
+
case ART_IDX.NONWEAPON_HIT:
|
|
956
|
+
addToHit(art, 1, 2 * data.hitIncrement, rng);
|
|
957
|
+
break;
|
|
958
|
+
case ART_IDX.WEAPON_DAM:
|
|
959
|
+
case ART_IDX.NONWEAPON_DAM:
|
|
960
|
+
addToDam(art, 1, 2 * data.damIncrement, rng);
|
|
961
|
+
break;
|
|
962
|
+
case ART_IDX.NONWEAPON_HIT_DAM:
|
|
963
|
+
case ART_IDX.GLOVE_HIT_DAM:
|
|
964
|
+
addToHit(art, 1, 2 * data.hitIncrement, rng);
|
|
965
|
+
addToDam(art, 1, 2 * data.damIncrement, rng);
|
|
966
|
+
break;
|
|
967
|
+
case ART_IDX.WEAPON_AGGR:
|
|
968
|
+
case ART_IDX.NONWEAPON_AGGR:
|
|
969
|
+
if (targetPower > AGGR_POWER)
|
|
970
|
+
addFlag(art, OF.AGGRAVATE);
|
|
971
|
+
break;
|
|
972
|
+
case ART_IDX.MELEE_BLESS:
|
|
973
|
+
addFlag(art, OF.BLESSED);
|
|
974
|
+
break;
|
|
975
|
+
case ART_IDX.BOW_BRAND:
|
|
976
|
+
case ART_IDX.MELEE_BRAND:
|
|
977
|
+
case ART_IDX.NONWEAPON_BRAND:
|
|
978
|
+
addBrand(reg, art, rng);
|
|
979
|
+
break;
|
|
980
|
+
case ART_IDX.BOW_SLAY:
|
|
981
|
+
case ART_IDX.MELEE_SLAY:
|
|
982
|
+
case ART_IDX.NONWEAPON_SLAY:
|
|
983
|
+
addSlay(reg, art, rng);
|
|
984
|
+
break;
|
|
985
|
+
case ART_IDX.MELEE_SINV:
|
|
986
|
+
case ART_IDX.HELM_SINV:
|
|
987
|
+
case ART_IDX.GEN_SINV:
|
|
988
|
+
addFlag(art, OF.SEE_INVIS);
|
|
989
|
+
break;
|
|
990
|
+
case ART_IDX.MELEE_BLOWS:
|
|
991
|
+
case ART_IDX.NONWEAPON_BLOWS:
|
|
992
|
+
addMod(art, OBJ_MOD.BLOWS, rng);
|
|
993
|
+
break;
|
|
994
|
+
case ART_IDX.MELEE_AC:
|
|
995
|
+
case ART_IDX.BOOT_AC:
|
|
996
|
+
case ART_IDX.GLOVE_AC:
|
|
997
|
+
case ART_IDX.HELM_AC:
|
|
998
|
+
case ART_IDX.SHIELD_AC:
|
|
999
|
+
case ART_IDX.CLOAK_AC:
|
|
1000
|
+
case ART_IDX.ARMOR_AC:
|
|
1001
|
+
case ART_IDX.GEN_AC:
|
|
1002
|
+
addToAC(art, 1, 2 * data.acIncrement, rng);
|
|
1003
|
+
break;
|
|
1004
|
+
case ART_IDX.MELEE_DICE:
|
|
1005
|
+
addDamageDice(art, rng);
|
|
1006
|
+
break;
|
|
1007
|
+
case ART_IDX.MELEE_WEIGHT:
|
|
1008
|
+
case ART_IDX.ALLARMOR_WEIGHT:
|
|
1009
|
+
addWeightMod(art);
|
|
1010
|
+
break;
|
|
1011
|
+
case ART_IDX.MELEE_TUNN:
|
|
1012
|
+
case ART_IDX.GEN_TUNN:
|
|
1013
|
+
addMod(art, OBJ_MOD.TUNNEL, rng);
|
|
1014
|
+
break;
|
|
1015
|
+
case ART_IDX.BOOT_FEATHER:
|
|
1016
|
+
case ART_IDX.GEN_FEATHER:
|
|
1017
|
+
addFlag(art, OF.FEATHER);
|
|
1018
|
+
break;
|
|
1019
|
+
case ART_IDX.BOOT_STEALTH:
|
|
1020
|
+
case ART_IDX.CLOAK_STEALTH:
|
|
1021
|
+
case ART_IDX.ARMOR_STEALTH:
|
|
1022
|
+
case ART_IDX.GEN_STEALTH:
|
|
1023
|
+
addMod(art, OBJ_MOD.STEALTH, rng);
|
|
1024
|
+
break;
|
|
1025
|
+
case ART_IDX.BOOT_SPEED:
|
|
1026
|
+
case ART_IDX.GEN_SPEED:
|
|
1027
|
+
addMod(art, OBJ_MOD.SPEED, rng);
|
|
1028
|
+
break;
|
|
1029
|
+
case ART_IDX.GLOVE_FA:
|
|
1030
|
+
case ART_IDX.GEN_FA:
|
|
1031
|
+
addFlag(art, OF.FREE_ACT);
|
|
1032
|
+
break;
|
|
1033
|
+
case ART_IDX.GLOVE_DEX:
|
|
1034
|
+
addMod(art, OBJ_MOD.DEX, rng);
|
|
1035
|
+
break;
|
|
1036
|
+
case ART_IDX.HELM_RBLIND:
|
|
1037
|
+
case ART_IDX.GEN_RBLIND:
|
|
1038
|
+
addFlag(art, OF.PROT_BLIND);
|
|
1039
|
+
break;
|
|
1040
|
+
case ART_IDX.HELM_ESP:
|
|
1041
|
+
case ART_IDX.GEN_ESP:
|
|
1042
|
+
addFlag(art, OF.TELEPATHY);
|
|
1043
|
+
break;
|
|
1044
|
+
case ART_IDX.HELM_WIS:
|
|
1045
|
+
addMod(art, OBJ_MOD.WIS, rng);
|
|
1046
|
+
break;
|
|
1047
|
+
case ART_IDX.HELM_INT:
|
|
1048
|
+
addMod(art, OBJ_MOD.INT, rng);
|
|
1049
|
+
break;
|
|
1050
|
+
case ART_IDX.SHIELD_LRES:
|
|
1051
|
+
case ART_IDX.ARMOR_LRES:
|
|
1052
|
+
case ART_IDX.GEN_LRES:
|
|
1053
|
+
addLowResist(art, rng);
|
|
1054
|
+
break;
|
|
1055
|
+
case ART_IDX.ARMOR_HLIFE:
|
|
1056
|
+
case ART_IDX.GEN_HLIFE:
|
|
1057
|
+
addFlag(art, OF.HOLD_LIFE);
|
|
1058
|
+
break;
|
|
1059
|
+
case ART_IDX.ARMOR_CON:
|
|
1060
|
+
addMod(art, OBJ_MOD.CON, rng);
|
|
1061
|
+
break;
|
|
1062
|
+
case ART_IDX.ARMOR_ALLRES:
|
|
1063
|
+
addResist(art, ELEM.ACID);
|
|
1064
|
+
addResist(art, ELEM.ELEC);
|
|
1065
|
+
addResist(art, ELEM.FIRE);
|
|
1066
|
+
addResist(art, ELEM.COLD);
|
|
1067
|
+
break;
|
|
1068
|
+
case ART_IDX.ARMOR_HRES:
|
|
1069
|
+
addHighResist(art, data, rng);
|
|
1070
|
+
break;
|
|
1071
|
+
case ART_IDX.GEN_STAT:
|
|
1072
|
+
addStat(art, rng);
|
|
1073
|
+
break;
|
|
1074
|
+
case ART_IDX.GEN_SUST:
|
|
1075
|
+
addSustain(art, rng);
|
|
1076
|
+
break;
|
|
1077
|
+
case ART_IDX.GEN_SEARCH:
|
|
1078
|
+
addMod(art, OBJ_MOD.SEARCH, rng);
|
|
1079
|
+
break;
|
|
1080
|
+
case ART_IDX.GEN_INFRA:
|
|
1081
|
+
addMod(art, OBJ_MOD.INFRA, rng);
|
|
1082
|
+
break;
|
|
1083
|
+
case ART_IDX.GEN_IMMUNE:
|
|
1084
|
+
addImmunity(art, rng);
|
|
1085
|
+
break;
|
|
1086
|
+
case ART_IDX.GEN_LIGHT:
|
|
1087
|
+
if (art.tval !== TV.LIGHT)
|
|
1088
|
+
art.modifiers[OBJ_MOD.LIGHT] = 1;
|
|
1089
|
+
break;
|
|
1090
|
+
case ART_IDX.GEN_SDIG:
|
|
1091
|
+
addFlag(art, OF.SLOW_DIGEST);
|
|
1092
|
+
break;
|
|
1093
|
+
case ART_IDX.GEN_REGEN:
|
|
1094
|
+
addFlag(art, OF.REGEN);
|
|
1095
|
+
break;
|
|
1096
|
+
case ART_IDX.GEN_RPOIS:
|
|
1097
|
+
addResist(art, ELEM.POIS);
|
|
1098
|
+
break;
|
|
1099
|
+
case ART_IDX.GEN_RFEAR:
|
|
1100
|
+
addFlag(art, OF.PROT_FEAR);
|
|
1101
|
+
break;
|
|
1102
|
+
case ART_IDX.GEN_RLIGHT:
|
|
1103
|
+
addResist(art, ELEM.LIGHT);
|
|
1104
|
+
break;
|
|
1105
|
+
case ART_IDX.GEN_RDARK:
|
|
1106
|
+
addResist(art, ELEM.DARK);
|
|
1107
|
+
break;
|
|
1108
|
+
case ART_IDX.GEN_RCONF:
|
|
1109
|
+
addFlag(art, OF.PROT_CONF);
|
|
1110
|
+
break;
|
|
1111
|
+
case ART_IDX.GEN_RSOUND:
|
|
1112
|
+
addResist(art, ELEM.SOUND);
|
|
1113
|
+
break;
|
|
1114
|
+
case ART_IDX.GEN_RSHARD:
|
|
1115
|
+
addResist(art, ELEM.SHARD);
|
|
1116
|
+
break;
|
|
1117
|
+
case ART_IDX.GEN_RNEXUS:
|
|
1118
|
+
addResist(art, ELEM.NEXUS);
|
|
1119
|
+
break;
|
|
1120
|
+
case ART_IDX.GEN_RNETHER:
|
|
1121
|
+
addResist(art, ELEM.NETHER);
|
|
1122
|
+
break;
|
|
1123
|
+
case ART_IDX.GEN_RCHAOS:
|
|
1124
|
+
addResist(art, ELEM.CHAOS);
|
|
1125
|
+
break;
|
|
1126
|
+
case ART_IDX.GEN_RDISEN:
|
|
1127
|
+
addResist(art, ELEM.DISEN);
|
|
1128
|
+
break;
|
|
1129
|
+
case ART_IDX.GEN_PSTUN:
|
|
1130
|
+
addFlag(art, OF.PROT_STUN);
|
|
1131
|
+
break;
|
|
1132
|
+
case ART_IDX.BOOT_TRAP_IMM:
|
|
1133
|
+
case ART_IDX.GEN_TRAP_IMM:
|
|
1134
|
+
addFlag(art, OF.TRAP_IMMUNE);
|
|
1135
|
+
break;
|
|
1136
|
+
case ART_IDX.GEN_DAM_RED:
|
|
1137
|
+
addMod(art, OBJ_MOD.DAM_RED, rng);
|
|
1138
|
+
break;
|
|
1139
|
+
case ART_IDX.GEN_MOVES:
|
|
1140
|
+
case ART_IDX.BOOT_MOVES:
|
|
1141
|
+
addMod(art, OBJ_MOD.MOVES, rng);
|
|
1142
|
+
break;
|
|
1143
|
+
case ART_IDX.GEN_ACTIV:
|
|
1144
|
+
if (!art.activation && !kind?.activation) {
|
|
1145
|
+
addActivation(reg, art, targetPower, data.maxPower, rng);
|
|
1146
|
+
}
|
|
1147
|
+
break;
|
|
1148
|
+
default:
|
|
1149
|
+
break;
|
|
1150
|
+
}
|
|
1151
|
+
}
|
|
1152
|
+
/* ------------------------------------------------------------------ */
|
|
1153
|
+
/* Curse conflict helpers (obj-curse.c) */
|
|
1154
|
+
/* ------------------------------------------------------------------ */
|
|
1155
|
+
/**
|
|
1156
|
+
* check_artifact_curses (obj-curse.c L243): drop the curses field if no active
|
|
1157
|
+
* curse remains.
|
|
1158
|
+
*/
|
|
1159
|
+
function checkArtifactCurses(art) {
|
|
1160
|
+
if (!art.curses)
|
|
1161
|
+
return;
|
|
1162
|
+
for (let i = 0; i < art.curses.length; i++) {
|
|
1163
|
+
if (art.curses[i])
|
|
1164
|
+
return;
|
|
1165
|
+
}
|
|
1166
|
+
art.curses = null;
|
|
1167
|
+
}
|
|
1168
|
+
/**
|
|
1169
|
+
* curses_conflict (obj-curse.c L95): whether curse `second` is in curse
|
|
1170
|
+
* `first`'s conflict list.
|
|
1171
|
+
*/
|
|
1172
|
+
function cursesConflict(reg, first, second) {
|
|
1173
|
+
const c = reg.curses[first];
|
|
1174
|
+
if (!c.conflict)
|
|
1175
|
+
return false;
|
|
1176
|
+
const needle = "|" + reg.curses[second].name + "|";
|
|
1177
|
+
return c.conflict.includes(needle);
|
|
1178
|
+
}
|
|
1179
|
+
/**
|
|
1180
|
+
* artifact_curse_conflicts (obj-curse.c L262): whether curse `pick` is foiled
|
|
1181
|
+
* by an existing artifact property - its TIMED_INC effect fails against a
|
|
1182
|
+
* flag/resist/vulnerability the artifact already has (obj-curse.c L267-296,
|
|
1183
|
+
* consulted only when `timedFoil` is supplied), or it explicitly conflicts with
|
|
1184
|
+
* an artifact flag. Draws no RNG.
|
|
1185
|
+
*/
|
|
1186
|
+
function artifactCurseConflicts(reg, art, pick, timedFoil) {
|
|
1187
|
+
const c = reg.curses[pick];
|
|
1188
|
+
/* Reject curses with effects foiled by an existing artifact property. */
|
|
1189
|
+
if (timedFoil && curseTimedIncFoiled(c, art.flags, art.elInfo, timedFoil)) {
|
|
1190
|
+
checkArtifactCurses(art);
|
|
1191
|
+
return true;
|
|
1192
|
+
}
|
|
1193
|
+
for (const flag of c.conflictFlags) {
|
|
1194
|
+
if (art.flags.has(flag)) {
|
|
1195
|
+
checkArtifactCurses(art);
|
|
1196
|
+
return true;
|
|
1197
|
+
}
|
|
1198
|
+
}
|
|
1199
|
+
return false;
|
|
1200
|
+
}
|
|
1201
|
+
/**
|
|
1202
|
+
* append_artifact_curse (obj-curse.c L317): add curse `pick` at the given
|
|
1203
|
+
* power, rejecting conflicts. Returns true when the curse was applied.
|
|
1204
|
+
*/
|
|
1205
|
+
function appendArtifactCurse(reg, art, pick, power, timedFoil) {
|
|
1206
|
+
if (!art.curses)
|
|
1207
|
+
art.curses = new Array(reg.curses.length).fill(0);
|
|
1208
|
+
/* Reject conflicting curses. */
|
|
1209
|
+
for (let i = 0; i < reg.curses.length; i++) {
|
|
1210
|
+
if (art.curses[i] && cursesConflict(reg, i, pick)) {
|
|
1211
|
+
checkArtifactCurses(art);
|
|
1212
|
+
return false;
|
|
1213
|
+
}
|
|
1214
|
+
}
|
|
1215
|
+
/* Reject curses foiled by an existing artifact property. */
|
|
1216
|
+
if (artifactCurseConflicts(reg, art, pick, timedFoil)) {
|
|
1217
|
+
checkArtifactCurses(art);
|
|
1218
|
+
return false;
|
|
1219
|
+
}
|
|
1220
|
+
/* Adjust power if our pick is a duplicate. */
|
|
1221
|
+
if (power > art.curses[pick])
|
|
1222
|
+
art.curses[pick] = power;
|
|
1223
|
+
checkArtifactCurses(art);
|
|
1224
|
+
return true;
|
|
1225
|
+
}
|
|
1226
|
+
/* ------------------------------------------------------------------ */
|
|
1227
|
+
/* remove_contradictory_activation (obj-randart.c L2420) */
|
|
1228
|
+
/* ------------------------------------------------------------------ */
|
|
1229
|
+
/**
|
|
1230
|
+
* enum effect_object_property_kind (effects-info.h L40): the kind of object
|
|
1231
|
+
* property an activation effect grants, as summarized for redundancy checks.
|
|
1232
|
+
*/
|
|
1233
|
+
export const EFPROP = {
|
|
1234
|
+
OBJECT_FLAG_EXACT: 0,
|
|
1235
|
+
OBJECT_FLAG: 1,
|
|
1236
|
+
RESIST: 2,
|
|
1237
|
+
CURE_FLAG: 3,
|
|
1238
|
+
CURE_RESIST: 4,
|
|
1239
|
+
CONFLICT_FLAG: 5,
|
|
1240
|
+
CONFLICT_RESIST: 6,
|
|
1241
|
+
CONFLICT_VULN: 7,
|
|
1242
|
+
BRAND: 8,
|
|
1243
|
+
SLAY: 9,
|
|
1244
|
+
};
|
|
1245
|
+
/**
|
|
1246
|
+
* remove_contradictory_activation (obj-randart.c L2420): drop the activation
|
|
1247
|
+
* when everything it does is already provided by (or in conflict with) the
|
|
1248
|
+
* artifact's other properties. Upstream summarizes the activation via
|
|
1249
|
+
* effect_summarize_properties; the port injects that summarizer (see
|
|
1250
|
+
* ActivationSummarizer / gap 3.8 WIRING-NEEDED). The redundancy switch below is
|
|
1251
|
+
* a faithful transcription; it draws no RNG.
|
|
1252
|
+
*/
|
|
1253
|
+
export function removeContradictoryActivation(reg, art, summarize) {
|
|
1254
|
+
if (!art.activation || !art.activation.effect)
|
|
1255
|
+
return;
|
|
1256
|
+
/* Without the effects-domain summarizer we cannot prove redundancy; keep the
|
|
1257
|
+
* activation (conservative). */
|
|
1258
|
+
if (!summarize)
|
|
1259
|
+
return;
|
|
1260
|
+
const { props, unsummarizedCount } = summarize(art.activation.effect);
|
|
1261
|
+
let redundant = true;
|
|
1262
|
+
if (unsummarizedCount > 0) {
|
|
1263
|
+
/* The activation does at least one thing with no object-property twin. */
|
|
1264
|
+
redundant = false;
|
|
1265
|
+
}
|
|
1266
|
+
else {
|
|
1267
|
+
for (const p of props) {
|
|
1268
|
+
if (!redundant)
|
|
1269
|
+
break;
|
|
1270
|
+
switch (p.kind) {
|
|
1271
|
+
case EFPROP.BRAND: {
|
|
1272
|
+
let maxmult = 1;
|
|
1273
|
+
for (let i = 1; i < reg.brands.length; i++) {
|
|
1274
|
+
if (!art.brands?.[i])
|
|
1275
|
+
continue;
|
|
1276
|
+
if (reg.brands[i].resistFlag !== reg.brands[p.idx].resistFlag) {
|
|
1277
|
+
continue;
|
|
1278
|
+
}
|
|
1279
|
+
maxmult = Math.max(reg.brands[i].multiplier, maxmult);
|
|
1280
|
+
}
|
|
1281
|
+
if (maxmult < reg.brands[p.idx].multiplier)
|
|
1282
|
+
redundant = false;
|
|
1283
|
+
break;
|
|
1284
|
+
}
|
|
1285
|
+
case EFPROP.SLAY: {
|
|
1286
|
+
let maxmult = 1;
|
|
1287
|
+
for (let i = 1; i < reg.slays.length; i++) {
|
|
1288
|
+
if (!art.slays?.[i])
|
|
1289
|
+
continue;
|
|
1290
|
+
if (!sameMonstersSlain(reg, i, p.idx))
|
|
1291
|
+
continue;
|
|
1292
|
+
maxmult = Math.max(reg.slays[i].multiplier, maxmult);
|
|
1293
|
+
}
|
|
1294
|
+
if (maxmult < reg.slays[p.idx].multiplier)
|
|
1295
|
+
redundant = false;
|
|
1296
|
+
break;
|
|
1297
|
+
}
|
|
1298
|
+
case EFPROP.RESIST:
|
|
1299
|
+
case EFPROP.CONFLICT_RESIST:
|
|
1300
|
+
case EFPROP.CONFLICT_VULN: {
|
|
1301
|
+
const res = art.elInfo[p.idx]?.resLevel ?? 0;
|
|
1302
|
+
if (res >= p.reslevelMin && res <= p.reslevelMax)
|
|
1303
|
+
redundant = false;
|
|
1304
|
+
break;
|
|
1305
|
+
}
|
|
1306
|
+
case EFPROP.OBJECT_FLAG:
|
|
1307
|
+
/* Does more than the flag; keep it (also screens HERO/SHERO). */
|
|
1308
|
+
redundant = false;
|
|
1309
|
+
break;
|
|
1310
|
+
case EFPROP.OBJECT_FLAG_EXACT:
|
|
1311
|
+
case EFPROP.CURE_FLAG:
|
|
1312
|
+
case EFPROP.CONFLICT_FLAG:
|
|
1313
|
+
if (!art.flags.has(p.idx))
|
|
1314
|
+
redundant = false;
|
|
1315
|
+
break;
|
|
1316
|
+
default:
|
|
1317
|
+
/* Something unexpected; assume the effect is useful. */
|
|
1318
|
+
redundant = false;
|
|
1319
|
+
break;
|
|
1320
|
+
}
|
|
1321
|
+
}
|
|
1322
|
+
}
|
|
1323
|
+
if (redundant)
|
|
1324
|
+
art.activation = null;
|
|
1325
|
+
}
|
|
1326
|
+
/* ------------------------------------------------------------------ */
|
|
1327
|
+
/* remove_contradictory (obj-randart.c L2530) */
|
|
1328
|
+
/* ------------------------------------------------------------------ */
|
|
1329
|
+
/**
|
|
1330
|
+
* remove_contradictory (obj-randart.c L2530): clean up illogical combinations
|
|
1331
|
+
* of powers (aggravation vs stealth, negative stats vs their sustains,
|
|
1332
|
+
* drain-exp vs hold-life), remove conflicting curses, and drop a redundant
|
|
1333
|
+
* activation.
|
|
1334
|
+
*/
|
|
1335
|
+
export function removeContradictory(reg, art, timedFoil, activationSummarize) {
|
|
1336
|
+
if (art.flags.has(OF.AGGRAVATE))
|
|
1337
|
+
art.modifiers[OBJ_MOD.STEALTH] = 0;
|
|
1338
|
+
if (art.modifiers[OBJ_MOD.STR] < 0)
|
|
1339
|
+
art.flags.off(OF.SUST_STR);
|
|
1340
|
+
if (art.modifiers[OBJ_MOD.INT] < 0)
|
|
1341
|
+
art.flags.off(OF.SUST_INT);
|
|
1342
|
+
if (art.modifiers[OBJ_MOD.WIS] < 0)
|
|
1343
|
+
art.flags.off(OF.SUST_WIS);
|
|
1344
|
+
if (art.modifiers[OBJ_MOD.DEX] < 0)
|
|
1345
|
+
art.flags.off(OF.SUST_DEX);
|
|
1346
|
+
if (art.modifiers[OBJ_MOD.CON] < 0)
|
|
1347
|
+
art.flags.off(OF.SUST_CON);
|
|
1348
|
+
if (art.flags.has(OF.DRAIN_EXP))
|
|
1349
|
+
art.flags.off(OF.HOLD_LIFE);
|
|
1350
|
+
/* Remove any conflicting curses. */
|
|
1351
|
+
if (art.curses) {
|
|
1352
|
+
for (let i = 1; i < reg.curses.length; i++) {
|
|
1353
|
+
if (artifactCurseConflicts(reg, art, i, timedFoil)) {
|
|
1354
|
+
if (art.curses)
|
|
1355
|
+
art.curses[i] = 0;
|
|
1356
|
+
checkArtifactCurses(art);
|
|
1357
|
+
}
|
|
1358
|
+
if (!art.curses)
|
|
1359
|
+
break;
|
|
1360
|
+
}
|
|
1361
|
+
}
|
|
1362
|
+
removeContradictoryActivation(reg, art, activationSummarize);
|
|
1363
|
+
}
|
|
1364
|
+
/* ------------------------------------------------------------------ */
|
|
1365
|
+
/* add_ability (obj-randart.c L2567) */
|
|
1366
|
+
/* ------------------------------------------------------------------ */
|
|
1367
|
+
/**
|
|
1368
|
+
* add_ability (obj-randart.c L2567): choose a random ability from the frequency
|
|
1369
|
+
* table, add it, remove contradictions, and bless WIS-bearing sharp weapons.
|
|
1370
|
+
*/
|
|
1371
|
+
export function addAbility(reg, art, targetPower, freq, data, rng) {
|
|
1372
|
+
/* Choose a random ability using the frequency table. */
|
|
1373
|
+
const r = chooseAbility(freq, rng);
|
|
1374
|
+
/* Add the appropriate ability. */
|
|
1375
|
+
addAbilityAux(reg, art, r, targetPower, data, rng);
|
|
1376
|
+
/* Remove contradictory or redundant powers. */
|
|
1377
|
+
removeContradictory(reg, art, data.timedFoil, data.activationSummarize);
|
|
1378
|
+
/* Adding WIS to sharp weapons always blesses them. */
|
|
1379
|
+
if (art.modifiers[OBJ_MOD.WIS] &&
|
|
1380
|
+
(art.tval === TV.SWORD || art.tval === TV.POLEARM)) {
|
|
1381
|
+
addFlag(art, OF.BLESSED);
|
|
1382
|
+
}
|
|
1383
|
+
}
|
|
1384
|
+
/* ------------------------------------------------------------------ */
|
|
1385
|
+
/* add_curse (obj-randart.c L2591) */
|
|
1386
|
+
/* ------------------------------------------------------------------ */
|
|
1387
|
+
/**
|
|
1388
|
+
* add_curse (obj-randart.c L2591): randomly select a curse and apply it, unless
|
|
1389
|
+
* the artifact is blessed. Each attempt draws pick then power regardless of
|
|
1390
|
+
* whether the curse is possible on this tval. See the module note on the
|
|
1391
|
+
* randint1(9) + 10 * m_bonus(9, level) evaluation order.
|
|
1392
|
+
*/
|
|
1393
|
+
export function addCurse(reg, art, level, rng, timedFoil) {
|
|
1394
|
+
if (art.flags.has(OF.BLESSED))
|
|
1395
|
+
return false;
|
|
1396
|
+
let maxTries = 5;
|
|
1397
|
+
while (maxTries) {
|
|
1398
|
+
const pick = rng.randint1(reg.curses.length - 1);
|
|
1399
|
+
const rand9 = rng.randint1(9);
|
|
1400
|
+
const bonus = rng.mBonus(9, level);
|
|
1401
|
+
const power = rand9 + 10 * bonus;
|
|
1402
|
+
if (!reg.curses[pick].poss[art.tval]) {
|
|
1403
|
+
maxTries--;
|
|
1404
|
+
continue;
|
|
1405
|
+
}
|
|
1406
|
+
return appendArtifactCurse(reg, art, pick, power, timedFoil);
|
|
1407
|
+
}
|
|
1408
|
+
return false;
|
|
1409
|
+
}
|
|
1410
|
+
/* ------------------------------------------------------------------ */
|
|
1411
|
+
/* make_bad (obj-randart.c L2613) */
|
|
1412
|
+
/* ------------------------------------------------------------------ */
|
|
1413
|
+
/**
|
|
1414
|
+
* make_bad (obj-randart.c L2613): make an artifact bad, or worse: possibly add
|
|
1415
|
+
* aggravation / drain-exp / no-teleport, flip some positive modifiers and
|
|
1416
|
+
* combat bonuses to negative, and apply one or two curses.
|
|
1417
|
+
*/
|
|
1418
|
+
export function makeBad(reg, art, level, rng, timedFoil) {
|
|
1419
|
+
let num = rng.randint1(2);
|
|
1420
|
+
if (rng.oneIn(7))
|
|
1421
|
+
art.flags.on(OF.AGGRAVATE);
|
|
1422
|
+
if (rng.oneIn(4))
|
|
1423
|
+
art.flags.on(OF.DRAIN_EXP);
|
|
1424
|
+
if (rng.oneIn(7))
|
|
1425
|
+
art.flags.on(OF.NO_TELEPORT);
|
|
1426
|
+
for (let i = 0; i < OBJ_MOD_MAX; i++) {
|
|
1427
|
+
if (art.modifiers[i] > 0) {
|
|
1428
|
+
if (rng.oneIn(2) && i !== OBJ_MOD.MIGHT) {
|
|
1429
|
+
art.modifiers[i] = -art.modifiers[i];
|
|
1430
|
+
}
|
|
1431
|
+
}
|
|
1432
|
+
}
|
|
1433
|
+
if (art.toA > 0 && rng.oneIn(2))
|
|
1434
|
+
art.toA = -art.toA;
|
|
1435
|
+
if (art.toH > 0 && rng.oneIn(2))
|
|
1436
|
+
art.toH = -art.toH;
|
|
1437
|
+
if (art.toD > 0 && rng.oneIn(4))
|
|
1438
|
+
art.toD = -art.toD;
|
|
1439
|
+
while (num) {
|
|
1440
|
+
addCurse(reg, art, level, rng, timedFoil);
|
|
1441
|
+
num--;
|
|
1442
|
+
}
|
|
1443
|
+
}
|
|
1444
|
+
//# sourceMappingURL=randart-build.js.map
|