@rpgm-tools/neo-angband-core 0.18.0 → 0.19.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/README.md +1 -1
- package/dist/agent/perceive.d.ts.map +1 -1
- package/dist/agent/perceive.js +2 -2
- package/dist/agent/perceive.js.map +1 -1
- package/dist/combat/blow-vectors.d.ts +78 -0
- package/dist/combat/blow-vectors.d.ts.map +1 -0
- package/dist/combat/blow-vectors.fixtures.d.ts +19 -0
- package/dist/combat/blow-vectors.fixtures.d.ts.map +1 -0
- package/dist/combat/blow-vectors.fixtures.js +81 -0
- package/dist/combat/blow-vectors.fixtures.js.map +1 -0
- package/dist/combat/blow-vectors.js +195 -0
- package/dist/combat/blow-vectors.js.map +1 -0
- package/dist/combat/brand-slay.d.ts +22 -9
- package/dist/combat/brand-slay.d.ts.map +1 -1
- package/dist/combat/brand-slay.js +37 -10
- package/dist/combat/brand-slay.js.map +1 -1
- package/dist/combat/index.d.ts +1 -1
- package/dist/combat/index.js +1 -1
- package/dist/combat/melee.d.ts +25 -13
- package/dist/combat/melee.d.ts.map +1 -1
- package/dist/combat/melee.js +23 -19
- package/dist/combat/melee.js.map +1 -1
- package/dist/combat/mon-melee.d.ts +166 -7
- package/dist/combat/mon-melee.d.ts.map +1 -1
- package/dist/combat/mon-melee.js +469 -338
- package/dist/combat/mon-melee.js.map +1 -1
- package/dist/combat/ranged.d.ts +15 -13
- package/dist/combat/ranged.d.ts.map +1 -1
- package/dist/combat/ranged.js +31 -29
- package/dist/combat/ranged.js.map +1 -1
- package/dist/constants.d.ts +14 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +14 -0
- package/dist/constants.js.map +1 -1
- package/dist/datafile.d.ts +48 -0
- package/dist/datafile.d.ts.map +1 -0
- package/dist/datafile.js +102 -0
- package/dist/datafile.js.map +1 -0
- package/dist/effects/effect-info-registry.d.ts +237 -0
- package/dist/effects/effect-info-registry.d.ts.map +1 -0
- package/dist/effects/effect-info-registry.js +138 -0
- package/dist/effects/effect-info-registry.js.map +1 -0
- package/dist/effects/effect-info-vectors.d.ts +92 -0
- package/dist/effects/effect-info-vectors.d.ts.map +1 -0
- package/dist/effects/effect-info-vectors.fixtures.d.ts +18 -0
- package/dist/effects/effect-info-vectors.fixtures.d.ts.map +1 -0
- package/dist/effects/effect-info-vectors.fixtures.js +51 -0
- package/dist/effects/effect-info-vectors.fixtures.js.map +1 -0
- package/dist/effects/effect-info-vectors.js +315 -0
- package/dist/effects/effect-info-vectors.js.map +1 -0
- package/dist/effects/effect-info.d.ts +5 -1
- package/dist/effects/effect-info.d.ts.map +1 -1
- package/dist/effects/effect-info.js +245 -143
- package/dist/effects/effect-info.js.map +1 -1
- package/dist/effects/effect.d.ts +4 -3
- package/dist/effects/effect.d.ts.map +1 -1
- package/dist/effects/effect.js +88 -70
- package/dist/effects/effect.js.map +1 -1
- package/dist/effects/handlers.d.ts +1 -1
- package/dist/effects/handlers.d.ts.map +1 -1
- package/dist/effects/handlers.js +5 -2
- package/dist/effects/handlers.js.map +1 -1
- package/dist/effects/interpreter.d.ts +11 -0
- package/dist/effects/interpreter.d.ts.map +1 -1
- package/dist/effects/interpreter.js +13 -0
- package/dist/effects/interpreter.js.map +1 -1
- package/dist/game/cave-cmd.d.ts +9 -5
- package/dist/game/cave-cmd.d.ts.map +1 -1
- package/dist/game/cave-cmd.js +56 -11
- package/dist/game/cave-cmd.js.map +1 -1
- package/dist/game/cave-square.d.ts +42 -0
- package/dist/game/cave-square.d.ts.map +1 -0
- package/dist/game/cave-square.js +73 -0
- package/dist/game/cave-square.js.map +1 -0
- package/dist/game/char-sheet.d.ts +12 -8
- package/dist/game/char-sheet.d.ts.map +1 -1
- package/dist/game/char-sheet.js +41 -8
- package/dist/game/char-sheet.js.map +1 -1
- package/dist/game/chest.d.ts +2 -3
- package/dist/game/chest.d.ts.map +1 -1
- package/dist/game/chest.js +17 -6
- package/dist/game/chest.js.map +1 -1
- package/dist/game/context.d.ts +213 -22
- package/dist/game/context.d.ts.map +1 -1
- package/dist/game/context.js +109 -17
- package/dist/game/context.js.map +1 -1
- package/dist/game/describe.d.ts +13 -0
- package/dist/game/describe.d.ts.map +1 -1
- package/dist/game/describe.js +32 -4
- package/dist/game/describe.js.map +1 -1
- package/dist/game/display.d.ts +97 -8
- package/dist/game/display.d.ts.map +1 -1
- package/dist/game/display.js +157 -13
- package/dist/game/display.js.map +1 -1
- package/dist/game/dump-level.d.ts.map +1 -1
- package/dist/game/dump-level.js +3 -2
- package/dist/game/dump-level.js.map +1 -1
- package/dist/game/effect-attack.d.ts.map +1 -1
- package/dist/game/effect-attack.js +36 -27
- package/dist/game/effect-attack.js.map +1 -1
- package/dist/game/effect-detect.d.ts +4 -4
- package/dist/game/effect-detect.d.ts.map +1 -1
- package/dist/game/effect-detect.js +42 -9
- package/dist/game/effect-detect.js.map +1 -1
- package/dist/game/effect-env.d.ts +7 -1
- package/dist/game/effect-env.d.ts.map +1 -1
- package/dist/game/effect-env.js +1 -0
- package/dist/game/effect-env.js.map +1 -1
- package/dist/game/effect-general.d.ts +5 -3
- package/dist/game/effect-general.d.ts.map +1 -1
- package/dist/game/effect-general.js +94 -43
- package/dist/game/effect-general.js.map +1 -1
- package/dist/game/effect-item.d.ts +2 -1
- package/dist/game/effect-item.d.ts.map +1 -1
- package/dist/game/effect-item.js +136 -82
- package/dist/game/effect-item.js.map +1 -1
- package/dist/game/effect-melee.d.ts +10 -4
- package/dist/game/effect-melee.d.ts.map +1 -1
- package/dist/game/effect-melee.js +44 -19
- package/dist/game/effect-melee.js.map +1 -1
- package/dist/game/effect-monster.d.ts +26 -4
- package/dist/game/effect-monster.d.ts.map +1 -1
- package/dist/game/effect-monster.js +52 -9
- package/dist/game/effect-monster.js.map +1 -1
- package/dist/game/effect-teleport.d.ts +58 -19
- package/dist/game/effect-teleport.d.ts.map +1 -1
- package/dist/game/effect-teleport.js +143 -27
- package/dist/game/effect-teleport.js.map +1 -1
- package/dist/game/effect-terrain.d.ts +1 -3
- package/dist/game/effect-terrain.d.ts.map +1 -1
- package/dist/game/effect-terrain.js +38 -22
- package/dist/game/effect-terrain.js.map +1 -1
- package/dist/game/equip-cmp.d.ts.map +1 -1
- package/dist/game/equip-cmp.js +10 -7
- package/dist/game/equip-cmp.js.map +1 -1
- package/dist/game/floor.d.ts +16 -4
- package/dist/game/floor.d.ts.map +1 -1
- package/dist/game/floor.js +22 -4
- package/dist/game/floor.js.map +1 -1
- package/dist/game/gear.d.ts +101 -13
- package/dist/game/gear.d.ts.map +1 -1
- package/dist/game/gear.js +183 -24
- package/dist/game/gear.js.map +1 -1
- package/dist/game/harness.d.ts +2 -1
- package/dist/game/harness.d.ts.map +1 -1
- package/dist/game/harness.js +12 -1
- package/dist/game/harness.js.map +1 -1
- package/dist/game/ignore-cmd.d.ts +47 -8
- package/dist/game/ignore-cmd.d.ts.map +1 -1
- package/dist/game/ignore-cmd.js +76 -8
- package/dist/game/ignore-cmd.js.map +1 -1
- package/dist/game/known.d.ts +223 -34
- package/dist/game/known.d.ts.map +1 -1
- package/dist/game/known.js +301 -67
- package/dist/game/known.js.map +1 -1
- package/dist/game/loop.d.ts +4 -3
- package/dist/game/loop.d.ts.map +1 -1
- package/dist/game/loop.js +49 -29
- package/dist/game/loop.js.map +1 -1
- package/dist/game/lore-color.d.ts.map +1 -1
- package/dist/game/lore-color.js +13 -1
- package/dist/game/lore-color.js.map +1 -1
- package/dist/game/mon-cast.d.ts +3 -4
- package/dist/game/mon-cast.d.ts.map +1 -1
- package/dist/game/mon-cast.js +30 -2
- package/dist/game/mon-cast.js.map +1 -1
- package/dist/game/mon-cmd.d.ts +4 -5
- package/dist/game/mon-cmd.d.ts.map +1 -1
- package/dist/game/mon-cmd.js +80 -27
- package/dist/game/mon-cmd.js.map +1 -1
- package/dist/game/mon-death.d.ts +8 -4
- package/dist/game/mon-death.d.ts.map +1 -1
- package/dist/game/mon-death.js +6 -9
- package/dist/game/mon-death.js.map +1 -1
- package/dist/game/mon-group.d.ts +9 -5
- package/dist/game/mon-group.d.ts.map +1 -1
- package/dist/game/mon-group.js +9 -5
- package/dist/game/mon-group.js.map +1 -1
- package/dist/game/mon-message.d.ts +90 -40
- package/dist/game/mon-message.d.ts.map +1 -1
- package/dist/game/mon-message.js +267 -59
- package/dist/game/mon-message.js.map +1 -1
- package/dist/game/mon-place.d.ts +11 -1
- package/dist/game/mon-place.d.ts.map +1 -1
- package/dist/game/mon-place.js +15 -3
- package/dist/game/mon-place.js.map +1 -1
- package/dist/game/mon-ranged.d.ts +2 -1
- package/dist/game/mon-ranged.d.ts.map +1 -1
- package/dist/game/mon-ranged.js +11 -5
- package/dist/game/mon-ranged.js.map +1 -1
- package/dist/game/mon-side.d.ts +3 -2
- package/dist/game/mon-side.d.ts.map +1 -1
- package/dist/game/mon-side.js +15 -14
- package/dist/game/mon-side.js.map +1 -1
- package/dist/game/monster-turn.d.ts +20 -10
- package/dist/game/monster-turn.d.ts.map +1 -1
- package/dist/game/monster-turn.js +110 -83
- package/dist/game/monster-turn.js.map +1 -1
- package/dist/game/notice.d.ts +36 -0
- package/dist/game/notice.d.ts.map +1 -0
- package/dist/game/notice.js +79 -0
- package/dist/game/notice.js.map +1 -0
- package/dist/game/obj-cmd.d.ts +14 -3
- package/dist/game/obj-cmd.d.ts.map +1 -1
- package/dist/game/obj-cmd.js +109 -35
- package/dist/game/obj-cmd.js.map +1 -1
- package/dist/game/obj-list.d.ts +13 -2
- package/dist/game/obj-list.d.ts.map +1 -1
- package/dist/game/obj-list.js +42 -27
- package/dist/game/obj-list.js.map +1 -1
- package/dist/game/object-inspect.d.ts +9 -0
- package/dist/game/object-inspect.d.ts.map +1 -1
- package/dist/game/object-inspect.js +4 -0
- package/dist/game/object-inspect.js.map +1 -1
- package/dist/game/pickup.d.ts +0 -2
- package/dist/game/pickup.d.ts.map +1 -1
- package/dist/game/pickup.js +18 -3
- package/dist/game/pickup.js.map +1 -1
- package/dist/game/player-side-vectors.d.ts +174 -0
- package/dist/game/player-side-vectors.d.ts.map +1 -0
- package/dist/game/player-side-vectors.fixtures.d.ts +33 -0
- package/dist/game/player-side-vectors.fixtures.d.ts.map +1 -0
- package/dist/game/player-side-vectors.fixtures.js +191 -0
- package/dist/game/player-side-vectors.fixtures.js.map +1 -0
- package/dist/game/player-side-vectors.js +292 -0
- package/dist/game/player-side-vectors.js.map +1 -0
- package/dist/game/player-side.d.ts +129 -1
- package/dist/game/player-side.d.ts.map +1 -1
- package/dist/game/player-side.js +520 -338
- package/dist/game/player-side.js.map +1 -1
- package/dist/game/player-turn.d.ts +26 -7
- package/dist/game/player-turn.d.ts.map +1 -1
- package/dist/game/player-turn.js +180 -33
- package/dist/game/player-turn.js.map +1 -1
- package/dist/game/poly.d.ts +38 -0
- package/dist/game/poly.d.ts.map +1 -0
- package/dist/game/poly.js +82 -0
- package/dist/game/poly.js.map +1 -0
- package/dist/game/project-cast.d.ts +20 -3
- package/dist/game/project-cast.d.ts.map +1 -1
- package/dist/game/project-cast.js +49 -6
- package/dist/game/project-cast.js.map +1 -1
- package/dist/game/project-feat-vectors.d.ts +124 -0
- package/dist/game/project-feat-vectors.d.ts.map +1 -0
- package/dist/game/project-feat-vectors.fixtures.d.ts +13 -0
- package/dist/game/project-feat-vectors.fixtures.d.ts.map +1 -0
- package/dist/game/project-feat-vectors.fixtures.js +94 -0
- package/dist/game/project-feat-vectors.fixtures.js.map +1 -0
- package/dist/game/project-feat-vectors.js +229 -0
- package/dist/game/project-feat-vectors.js.map +1 -0
- package/dist/game/project-feat.d.ts +53 -1
- package/dist/game/project-feat.d.ts.map +1 -1
- package/dist/game/project-feat.js +374 -247
- package/dist/game/project-feat.js.map +1 -1
- package/dist/game/project-monster.d.ts +21 -8
- package/dist/game/project-monster.d.ts.map +1 -1
- package/dist/game/project-monster.js +45 -21
- package/dist/game/project-monster.js.map +1 -1
- package/dist/game/project-obj.d.ts +62 -0
- package/dist/game/project-obj.d.ts.map +1 -1
- package/dist/game/project-obj.js +72 -41
- package/dist/game/project-obj.js.map +1 -1
- package/dist/game/project-player.d.ts +8 -0
- package/dist/game/project-player.d.ts.map +1 -1
- package/dist/game/project-player.js.map +1 -1
- package/dist/game/projection-handlers.d.ts +81 -0
- package/dist/game/projection-handlers.d.ts.map +1 -0
- package/dist/game/projection-handlers.js +93 -0
- package/dist/game/projection-handlers.js.map +1 -0
- package/dist/game/quest.d.ts +23 -0
- package/dist/game/quest.d.ts.map +1 -1
- package/dist/game/quest.js +42 -0
- package/dist/game/quest.js.map +1 -1
- package/dist/game/ranged-cmd.d.ts +13 -2
- package/dist/game/ranged-cmd.d.ts.map +1 -1
- package/dist/game/ranged-cmd.js +32 -15
- package/dist/game/ranged-cmd.js.map +1 -1
- package/dist/game/repeat.d.ts +78 -0
- package/dist/game/repeat.d.ts.map +1 -0
- package/dist/game/repeat.js +88 -0
- package/dist/game/repeat.js.map +1 -0
- package/dist/game/shape-inspect.d.ts +74 -0
- package/dist/game/shape-inspect.d.ts.map +1 -0
- package/dist/game/shape-inspect.js +114 -0
- package/dist/game/shape-inspect.js.map +1 -0
- package/dist/game/spell-cmd.d.ts +15 -4
- package/dist/game/spell-cmd.d.ts.map +1 -1
- package/dist/game/spell-cmd.js +35 -6
- package/dist/game/spell-cmd.js.map +1 -1
- package/dist/game/spoil.d.ts.map +1 -1
- package/dist/game/spoil.js +89 -40
- package/dist/game/spoil.js.map +1 -1
- package/dist/game/steal.d.ts +3 -3
- package/dist/game/steal.d.ts.map +1 -1
- package/dist/game/steal.js +9 -4
- package/dist/game/steal.js.map +1 -1
- package/dist/game/target-loop.d.ts +10 -4
- package/dist/game/target-loop.d.ts.map +1 -1
- package/dist/game/target-loop.js +14 -8
- package/dist/game/target-loop.js.map +1 -1
- package/dist/game/target.d.ts +4 -4
- package/dist/game/target.d.ts.map +1 -1
- package/dist/game/target.js +19 -8
- package/dist/game/target.js.map +1 -1
- package/dist/game/ui-entry.d.ts +63 -4
- package/dist/game/ui-entry.d.ts.map +1 -1
- package/dist/game/ui-entry.js +151 -23
- package/dist/game/ui-entry.js.map +1 -1
- package/dist/game/wizard.d.ts +23 -5
- package/dist/game/wizard.d.ts.map +1 -1
- package/dist/game/wizard.js +93 -11
- package/dist/game/wizard.js.map +1 -1
- package/dist/game/world.d.ts.map +1 -1
- package/dist/game/world.js +6 -0
- package/dist/game/world.js.map +1 -1
- package/dist/gen/cave.d.ts +49 -8
- package/dist/gen/cave.d.ts.map +1 -1
- package/dist/gen/cave.js +200 -28
- package/dist/gen/cave.js.map +1 -1
- package/dist/gen/generate.d.ts +54 -9
- package/dist/gen/generate.d.ts.map +1 -1
- package/dist/gen/generate.js +55 -8
- package/dist/gen/generate.js.map +1 -1
- package/dist/gen/glyph-vectors.d.ts +109 -0
- package/dist/gen/glyph-vectors.d.ts.map +1 -0
- package/dist/gen/glyph-vectors.fixtures.d.ts +18 -0
- package/dist/gen/glyph-vectors.fixtures.d.ts.map +1 -0
- package/dist/gen/glyph-vectors.fixtures.js +94 -0
- package/dist/gen/glyph-vectors.fixtures.js.map +1 -0
- package/dist/gen/glyph-vectors.js +218 -0
- package/dist/gen/glyph-vectors.js.map +1 -0
- package/dist/gen/glyph.d.ts +104 -0
- package/dist/gen/glyph.d.ts.map +1 -0
- package/dist/gen/glyph.js +72 -0
- package/dist/gen/glyph.js.map +1 -0
- package/dist/gen/room.d.ts +26 -2
- package/dist/gen/room.d.ts.map +1 -1
- package/dist/gen/room.js +414 -264
- package/dist/gen/room.js.map +1 -1
- package/dist/gen/util.d.ts +11 -2
- package/dist/gen/util.d.ts.map +1 -1
- package/dist/gen/util.js +31 -9
- package/dist/gen/util.js.map +1 -1
- package/dist/i18n/i18n.d.ts +207 -0
- package/dist/i18n/i18n.d.ts.map +1 -0
- package/dist/i18n/i18n.js +405 -0
- package/dist/i18n/i18n.js.map +1 -0
- package/dist/i18n/text.d.ts +62 -0
- package/dist/i18n/text.d.ts.map +1 -0
- package/dist/i18n/text.js +120 -0
- package/dist/i18n/text.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -1
- package/dist/mod/extension.d.ts +115 -0
- package/dist/mod/extension.d.ts.map +1 -0
- package/dist/mod/extension.js +85 -0
- package/dist/mod/extension.js.map +1 -0
- package/dist/mod/ids.d.ts +10 -0
- package/dist/mod/ids.d.ts.map +1 -1
- package/dist/mod/ids.js +90 -21
- package/dist/mod/ids.js.map +1 -1
- package/dist/mod/record-keys.d.ts +43 -0
- package/dist/mod/record-keys.d.ts.map +1 -0
- package/dist/mod/record-keys.js +100 -0
- package/dist/mod/record-keys.js.map +1 -0
- package/dist/mod/registry-host.d.ts +472 -0
- package/dist/mod/registry-host.d.ts.map +1 -1
- package/dist/mod/registry-host.js +313 -0
- package/dist/mod/registry-host.js.map +1 -1
- package/dist/mod/save-blocks.d.ts +1 -1
- package/dist/mon/bind.d.ts.map +1 -1
- package/dist/mon/bind.js +6 -3
- package/dist/mon/bind.js.map +1 -1
- package/dist/mon/knowledge-groups.d.ts +0 -6
- package/dist/mon/knowledge-groups.d.ts.map +1 -1
- package/dist/mon/knowledge-groups.js +12 -8
- package/dist/mon/knowledge-groups.js.map +1 -1
- package/dist/mon/lore-describe.d.ts +46 -10
- package/dist/mon/lore-describe.d.ts.map +1 -1
- package/dist/mon/lore-describe.js +74 -22
- package/dist/mon/lore-describe.js.map +1 -1
- package/dist/mon/lore-file.d.ts +126 -0
- package/dist/mon/lore-file.d.ts.map +1 -0
- package/dist/mon/lore-file.js +291 -0
- package/dist/mon/lore-file.js.map +1 -0
- package/dist/mon/lore.d.ts +9 -3
- package/dist/mon/lore.d.ts.map +1 -1
- package/dist/mon/lore.js +9 -3
- package/dist/mon/lore.js.map +1 -1
- package/dist/mon/make.d.ts +4 -2
- package/dist/mon/make.d.ts.map +1 -1
- package/dist/mon/make.js +4 -2
- package/dist/mon/make.js.map +1 -1
- package/dist/mon/monster.d.ts +1 -1
- package/dist/mon/monster.js +1 -1
- package/dist/mon/predicate.d.ts +14 -9
- package/dist/mon/predicate.d.ts.map +1 -1
- package/dist/mon/predicate.js +14 -9
- package/dist/mon/predicate.js.map +1 -1
- package/dist/mon/project-mon.d.ts +16 -3
- package/dist/mon/project-mon.d.ts.map +1 -1
- package/dist/mon/project-mon.js +14 -5
- package/dist/mon/project-mon.js.map +1 -1
- package/dist/mon/steal.d.ts +31 -4
- package/dist/mon/steal.d.ts.map +1 -1
- package/dist/mon/steal.js +20 -7
- package/dist/mon/steal.js.map +1 -1
- package/dist/mon/take-hit.d.ts +8 -3
- package/dist/mon/take-hit.d.ts.map +1 -1
- package/dist/mon/take-hit.js +8 -3
- package/dist/mon/take-hit.js.map +1 -1
- package/dist/mon/timed.d.ts +15 -9
- package/dist/mon/timed.d.ts.map +1 -1
- package/dist/mon/timed.js +13 -8
- package/dist/mon/timed.js.map +1 -1
- package/dist/mon/types.d.ts +11 -4
- package/dist/mon/types.d.ts.map +1 -1
- package/dist/mon/types.js.map +1 -1
- package/dist/msg.d.ts +40 -1
- package/dist/msg.d.ts.map +1 -1
- package/dist/msg.js +42 -1
- package/dist/msg.js.map +1 -1
- package/dist/obj/artifact-fake.d.ts +46 -14
- package/dist/obj/artifact-fake.d.ts.map +1 -1
- package/dist/obj/artifact-fake.js +46 -17
- package/dist/obj/artifact-fake.js.map +1 -1
- package/dist/obj/bind.d.ts +23 -0
- package/dist/obj/bind.d.ts.map +1 -1
- package/dist/obj/bind.js +49 -9
- package/dist/obj/bind.js.map +1 -1
- package/dist/obj/desc-vectors.d.ts +68 -0
- package/dist/obj/desc-vectors.d.ts.map +1 -0
- package/dist/obj/desc-vectors.fixtures.d.ts +12 -0
- package/dist/obj/desc-vectors.fixtures.d.ts.map +1 -0
- package/dist/obj/desc-vectors.fixtures.js +95 -0
- package/dist/obj/desc-vectors.fixtures.js.map +1 -0
- package/dist/obj/desc-vectors.js +86 -0
- package/dist/obj/desc-vectors.js.map +1 -0
- package/dist/obj/desc.d.ts +17 -2
- package/dist/obj/desc.d.ts.map +1 -1
- package/dist/obj/desc.js +129 -54
- package/dist/obj/desc.js.map +1 -1
- package/dist/obj/effects-info.d.ts.map +1 -1
- package/dist/obj/effects-info.js +87 -58
- package/dist/obj/effects-info.js.map +1 -1
- package/dist/obj/fake-object.d.ts +70 -0
- package/dist/obj/fake-object.d.ts.map +1 -0
- package/dist/obj/fake-object.js +104 -0
- package/dist/obj/fake-object.js.map +1 -0
- package/dist/obj/ignore.d.ts +55 -12
- package/dist/obj/ignore.d.ts.map +1 -1
- package/dist/obj/ignore.js +68 -31
- package/dist/obj/ignore.js.map +1 -1
- package/dist/obj/knowledge.d.ts +46 -3
- package/dist/obj/knowledge.d.ts.map +1 -1
- package/dist/obj/knowledge.js +169 -151
- package/dist/obj/knowledge.js.map +1 -1
- package/dist/obj/known-object.d.ts +68 -8
- package/dist/obj/known-object.d.ts.map +1 -1
- package/dist/obj/known-object.js +90 -10
- package/dist/obj/known-object.js.map +1 -1
- package/dist/obj/make.d.ts +15 -4
- package/dist/obj/make.d.ts.map +1 -1
- package/dist/obj/make.js +49 -27
- package/dist/obj/make.js.map +1 -1
- package/dist/obj/object-info.d.ts +10 -0
- package/dist/obj/object-info.d.ts.map +1 -1
- package/dist/obj/object-info.js +93 -7
- package/dist/obj/object-info.js.map +1 -1
- package/dist/obj/object.d.ts +42 -4
- package/dist/obj/object.d.ts.map +1 -1
- package/dist/obj/object.js +362 -147
- package/dist/obj/object.js.map +1 -1
- package/dist/obj/power.d.ts +23 -4
- package/dist/obj/power.d.ts.map +1 -1
- package/dist/obj/power.js +231 -65
- package/dist/obj/power.js.map +1 -1
- package/dist/obj/randart-build.d.ts +27 -22
- package/dist/obj/randart-build.d.ts.map +1 -1
- package/dist/obj/randart-build.js +435 -357
- package/dist/obj/randart-build.js.map +1 -1
- package/dist/obj/randart-data.d.ts +62 -24
- package/dist/obj/randart-data.d.ts.map +1 -1
- package/dist/obj/randart-data.js +333 -189
- package/dist/obj/randart-data.js.map +1 -1
- package/dist/obj/randart-file.d.ts +21 -0
- package/dist/obj/randart-file.d.ts.map +1 -0
- package/dist/obj/randart-file.js +119 -0
- package/dist/obj/randart-file.js.map +1 -0
- package/dist/obj/randart-log.d.ts +63 -0
- package/dist/obj/randart-log.d.ts.map +1 -0
- package/dist/obj/randart-log.js +72 -0
- package/dist/obj/randart-log.js.map +1 -0
- package/dist/obj/randart-registry.d.ts +178 -0
- package/dist/obj/randart-registry.d.ts.map +1 -0
- package/dist/obj/randart-registry.js +140 -0
- package/dist/obj/randart-registry.js.map +1 -0
- package/dist/obj/randart-vectors.d.ts +97 -0
- package/dist/obj/randart-vectors.d.ts.map +1 -0
- package/dist/obj/randart-vectors.fixtures.d.ts +18 -0
- package/dist/obj/randart-vectors.fixtures.d.ts.map +1 -0
- package/dist/obj/randart-vectors.fixtures.js +50 -0
- package/dist/obj/randart-vectors.fixtures.js.map +1 -0
- package/dist/obj/randart-vectors.js +311 -0
- package/dist/obj/randart-vectors.js.map +1 -0
- package/dist/obj/randart.d.ts +53 -15
- package/dist/obj/randart.d.ts.map +1 -1
- package/dist/obj/randart.js +166 -44
- package/dist/obj/randart.js.map +1 -1
- package/dist/obj/rune-registry.d.ts +180 -0
- package/dist/obj/rune-registry.d.ts.map +1 -0
- package/dist/obj/rune-registry.js +161 -0
- package/dist/obj/rune-registry.js.map +1 -0
- package/dist/obj/rune-vectors.d.ts +99 -0
- package/dist/obj/rune-vectors.d.ts.map +1 -0
- package/dist/obj/rune-vectors.fixtures.d.ts +44 -0
- package/dist/obj/rune-vectors.fixtures.d.ts.map +1 -0
- package/dist/obj/rune-vectors.fixtures.js +125 -0
- package/dist/obj/rune-vectors.fixtures.js.map +1 -0
- package/dist/obj/rune-vectors.js +159 -0
- package/dist/obj/rune-vectors.js.map +1 -0
- package/dist/obj/tval-registry.d.ts +174 -0
- package/dist/obj/tval-registry.d.ts.map +1 -0
- package/dist/obj/tval-registry.js +151 -0
- package/dist/obj/tval-registry.js.map +1 -0
- package/dist/obj/tval-vectors.d.ts +85 -0
- package/dist/obj/tval-vectors.d.ts.map +1 -0
- package/dist/obj/tval-vectors.fixtures.d.ts +24 -0
- package/dist/obj/tval-vectors.fixtures.d.ts.map +1 -0
- package/dist/obj/tval-vectors.fixtures.js +41 -0
- package/dist/obj/tval-vectors.fixtures.js.map +1 -0
- package/dist/obj/tval-vectors.js +76 -0
- package/dist/obj/tval-vectors.js.map +1 -0
- package/dist/obj/types.d.ts +18 -7
- package/dist/obj/types.d.ts.map +1 -1
- package/dist/obj/types.js.map +1 -1
- package/dist/obj/value.d.ts.map +1 -1
- package/dist/obj/value.js +23 -20
- package/dist/obj/value.js.map +1 -1
- package/dist/parser.d.ts +116 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +205 -0
- package/dist/parser.js.map +1 -0
- package/dist/player/bind.d.ts.map +1 -1
- package/dist/player/bind.js +3 -2
- package/dist/player/bind.js.map +1 -1
- package/dist/player/birth.d.ts +2 -1
- package/dist/player/birth.d.ts.map +1 -1
- package/dist/player/birth.js +2 -1
- package/dist/player/birth.js.map +1 -1
- package/dist/player/calcs.d.ts +58 -23
- package/dist/player/calcs.d.ts.map +1 -1
- package/dist/player/calcs.js +93 -36
- package/dist/player/calcs.js.map +1 -1
- package/dist/player/death.d.ts +50 -0
- package/dist/player/death.d.ts.map +1 -0
- package/dist/player/death.js +46 -0
- package/dist/player/death.js.map +1 -0
- package/dist/player/options-file.d.ts +129 -0
- package/dist/player/options-file.d.ts.map +1 -0
- package/dist/player/options-file.js +309 -0
- package/dist/player/options-file.js.map +1 -0
- package/dist/player/options.d.ts +2 -1
- package/dist/player/options.d.ts.map +1 -1
- package/dist/player/options.js +2 -1
- package/dist/player/options.js.map +1 -1
- package/dist/player/player.d.ts +50 -3
- package/dist/player/player.d.ts.map +1 -1
- package/dist/player/player.js +10 -1
- package/dist/player/player.js.map +1 -1
- package/dist/player/shape-lore.d.ts +11 -7
- package/dist/player/shape-lore.d.ts.map +1 -1
- package/dist/player/shape-lore.js +24 -11
- package/dist/player/shape-lore.js.map +1 -1
- package/dist/player/timed.d.ts +5 -3
- package/dist/player/timed.d.ts.map +1 -1
- package/dist/player/timed.js +11 -2
- package/dist/player/timed.js.map +1 -1
- package/dist/player/types.d.ts +29 -4
- package/dist/player/types.d.ts.map +1 -1
- package/dist/player/types.js +24 -1
- package/dist/player/types.js.map +1 -1
- package/dist/session/boot.d.ts +26 -2
- package/dist/session/boot.d.ts.map +1 -1
- package/dist/session/boot.js +21 -2
- package/dist/session/boot.js.map +1 -1
- package/dist/session/game.d.ts +15 -0
- package/dist/session/game.d.ts.map +1 -1
- package/dist/session/game.js +616 -140
- package/dist/session/game.js.map +1 -1
- package/dist/session/save-migrate.d.ts.map +1 -1
- package/dist/session/save-migrate.js +76 -1
- package/dist/session/save-migrate.js.map +1 -1
- package/dist/session/save.d.ts +75 -12
- package/dist/session/save.d.ts.map +1 -1
- package/dist/session/save.js +177 -18
- package/dist/session/save.js.map +1 -1
- package/dist/store/bind.d.ts +1 -1
- package/dist/store/bind.d.ts.map +1 -1
- package/dist/store/bind.js +4 -3
- package/dist/store/bind.js.map +1 -1
- package/dist/store/mass-produce-vectors.d.ts +40 -0
- package/dist/store/mass-produce-vectors.d.ts.map +1 -0
- package/dist/store/mass-produce-vectors.fixtures.d.ts +13 -0
- package/dist/store/mass-produce-vectors.fixtures.d.ts.map +1 -0
- package/dist/store/mass-produce-vectors.fixtures.js +52 -0
- package/dist/store/mass-produce-vectors.fixtures.js.map +1 -0
- package/dist/store/mass-produce-vectors.js +44 -0
- package/dist/store/mass-produce-vectors.js.map +1 -0
- package/dist/store/store.d.ts +104 -7
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +199 -77
- package/dist/store/store.js.map +1 -1
- package/dist/store/transact.d.ts +14 -5
- package/dist/store/transact.d.ts.map +1 -1
- package/dist/store/transact.js +17 -16
- package/dist/store/transact.js.map +1 -1
- package/dist/store/types.d.ts +3 -2
- package/dist/store/types.d.ts.map +1 -1
- package/dist/store/types.js +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/visuals/index.d.ts +1 -0
- package/dist/visuals/index.d.ts.map +1 -1
- package/dist/visuals/index.js +1 -0
- package/dist/visuals/index.js.map +1 -1
- package/dist/visuals/map-text.d.ts +8 -0
- package/dist/visuals/map-text.d.ts.map +1 -1
- package/dist/visuals/map-text.js +1 -1
- package/dist/visuals/map-text.js.map +1 -1
- package/dist/visuals/object-glyph.d.ts +56 -0
- package/dist/visuals/object-glyph.d.ts.map +1 -0
- package/dist/visuals/object-glyph.js +52 -0
- package/dist/visuals/object-glyph.js.map +1 -0
- package/dist/visuals/prefs.d.ts +14 -22
- package/dist/visuals/prefs.d.ts.map +1 -1
- package/dist/visuals/prefs.js +4 -23
- package/dist/visuals/prefs.js.map +1 -1
- package/dist/visuals/tile-prefs.d.ts +26 -0
- package/dist/visuals/tile-prefs.d.ts.map +1 -1
- package/dist/visuals/tile-prefs.js +28 -0
- package/dist/visuals/tile-prefs.js.map +1 -1
- package/dist/world/feature.d.ts +2 -1
- package/dist/world/feature.d.ts.map +1 -1
- package/dist/world/feature.js +2 -0
- package/dist/world/feature.js.map +1 -1
- package/dist/world/project.d.ts +10 -2
- package/dist/world/project.d.ts.map +1 -1
- package/dist/world/project.js +18 -6
- package/dist/world/project.js.map +1 -1
- package/dist/world/projection.d.ts +37 -3
- package/dist/world/projection.d.ts.map +1 -1
- package/dist/world/projection.js +69 -7
- package/dist/world/projection.js.map +1 -1
- package/dist/world/trap.d.ts +2 -1
- package/dist/world/trap.d.ts.map +1 -1
- package/dist/world/trap.js +2 -1
- package/dist/world/trap.js.map +1 -1
- package/dist/world/view.d.ts +1 -1
- package/dist/world/view.d.ts.map +1 -1
- package/dist/world/view.js +11 -3
- package/dist/world/view.js.map +1 -1
- package/package.json +1 -1
- package/src/agent/perceive.ts +2 -3
- package/src/combat/blow-vectors.fixtures.ts +99 -0
- package/src/combat/blow-vectors.json +482 -0
- package/src/combat/blow-vectors.ts +280 -0
- package/src/combat/brand-slay.ts +42 -11
- package/src/combat/index.ts +1 -1
- package/src/combat/melee.ts +37 -19
- package/src/combat/mon-melee.ts +611 -364
- package/src/combat/ranged.ts +43 -26
- package/src/constants.ts +15 -0
- package/src/datafile.ts +148 -0
- package/src/effects/effect-info-registry.ts +313 -0
- package/src/effects/effect-info-vectors.fixtures.ts +61 -0
- package/src/effects/effect-info-vectors.json +11532 -0
- package/src/effects/effect-info-vectors.ts +376 -0
- package/src/effects/effect-info.ts +1005 -859
- package/src/effects/effect.ts +96 -62
- package/src/effects/handlers.ts +5 -2
- package/src/effects/interpreter.ts +14 -0
- package/src/game/cave-cmd.ts +54 -11
- package/src/game/cave-square.ts +80 -0
- package/src/game/char-sheet.ts +59 -16
- package/src/game/chest.ts +25 -8
- package/src/game/context.ts +293 -27
- package/src/game/describe.ts +34 -4
- package/src/game/display.ts +215 -19
- package/src/game/dump-level.ts +3 -2
- package/src/game/effect-attack.ts +41 -28
- package/src/game/effect-detect.ts +45 -8
- package/src/game/effect-env.ts +8 -0
- package/src/game/effect-general.ts +110 -47
- package/src/game/effect-item.ts +1075 -999
- package/src/game/effect-melee.ts +51 -18
- package/src/game/effect-monster.ts +55 -9
- package/src/game/effect-teleport.ts +173 -38
- package/src/game/effect-terrain.ts +38 -22
- package/src/game/equip-cmp.ts +483 -480
- package/src/game/floor.ts +22 -4
- package/src/game/gear.ts +210 -21
- package/src/game/harness.ts +12 -1
- package/src/game/ignore-cmd.ts +96 -8
- package/src/game/known.ts +392 -73
- package/src/game/loop.ts +52 -27
- package/src/game/lore-color.ts +13 -1
- package/src/game/mon-cast.ts +31 -6
- package/src/game/mon-cmd.ts +95 -30
- package/src/game/mon-death.ts +14 -12
- package/src/game/mon-group.ts +9 -5
- package/src/game/mon-message.ts +363 -65
- package/src/game/mon-place.ts +15 -3
- package/src/game/mon-ranged.ts +14 -5
- package/src/game/mon-side.ts +16 -12
- package/src/game/monster-turn.ts +120 -87
- package/src/game/notice.ts +85 -0
- package/src/game/obj-cmd.ts +126 -37
- package/src/game/obj-list.ts +44 -26
- package/src/game/object-inspect.ts +13 -0
- package/src/game/pickup.ts +29 -5
- package/src/game/player-side-vectors.fixtures.ts +215 -0
- package/src/game/player-side-vectors.json +6914 -0
- package/src/game/player-side-vectors.ts +420 -0
- package/src/game/player-side.ts +622 -340
- package/src/game/player-turn.ts +228 -31
- package/src/game/poly.ts +107 -0
- package/src/game/project-cast.ts +63 -6
- package/src/game/project-feat-vectors.fixtures.ts +106 -0
- package/src/game/project-feat-vectors.json +6554 -0
- package/src/game/project-feat-vectors.ts +323 -0
- package/src/game/project-feat.ts +417 -248
- package/src/game/project-monster.ts +69 -30
- package/src/game/project-obj-vectors.json +1 -0
- package/src/game/project-obj.ts +115 -47
- package/src/game/project-player.ts +8 -0
- package/src/game/projection-handlers.ts +110 -0
- package/src/game/quest.ts +48 -0
- package/src/game/ranged-cmd.ts +45 -11
- package/src/game/repeat.ts +92 -0
- package/src/game/shape-inspect.ts +166 -0
- package/src/game/spell-cmd.ts +39 -6
- package/src/game/spoil.ts +92 -39
- package/src/game/steal.ts +9 -4
- package/src/game/target-loop.ts +14 -7
- package/src/game/target.ts +18 -7
- package/src/game/ui-entry.ts +172 -22
- package/src/game/wizard.ts +97 -10
- package/src/game/world.ts +6 -0
- package/src/gen/cave.ts +225 -26
- package/src/gen/generate.ts +62 -9
- package/src/gen/glyph-vectors.fixtures.ts +122 -0
- package/src/gen/glyph-vectors.json +5996 -0
- package/src/gen/glyph-vectors.ts +280 -0
- package/src/gen/glyph.ts +132 -0
- package/src/gen/room.ts +446 -265
- package/src/gen/util.ts +32 -9
- package/src/i18n/i18n.ts +492 -0
- package/src/i18n/text.ts +117 -0
- package/src/index.ts +307 -254
- package/src/mod/extension.ts +136 -0
- package/src/mod/ids.ts +92 -21
- package/src/mod/record-keys.ts +102 -0
- package/src/mod/registry-host.ts +1063 -234
- package/src/mon/bind.ts +14 -8
- package/src/mon/knowledge-groups.ts +12 -12
- package/src/mon/lore-describe.ts +93 -26
- package/src/mon/lore-file.ts +365 -0
- package/src/mon/lore.ts +9 -3
- package/src/mon/make.ts +4 -2
- package/src/mon/monster.ts +1 -1
- package/src/mon/predicate.ts +14 -9
- package/src/mon/project-mon.ts +23 -5
- package/src/mon/steal.ts +39 -7
- package/src/mon/take-hit.ts +8 -3
- package/src/mon/timed.ts +15 -9
- package/src/mon/types.ts +11 -4
- package/src/msg.ts +55 -1
- package/src/obj/artifact-fake.ts +47 -17
- package/src/obj/bind.ts +52 -9
- package/src/obj/desc-vectors.fixtures.ts +119 -0
- package/src/obj/desc-vectors.json +2360 -0
- package/src/obj/desc-vectors.ts +128 -0
- package/src/obj/desc.ts +159 -55
- package/src/obj/effects-info.ts +90 -59
- package/src/obj/fake-object.ts +135 -0
- package/src/obj/ignore.ts +95 -28
- package/src/obj/knowledge.ts +291 -139
- package/src/obj/known-object.ts +126 -11
- package/src/obj/make.ts +53 -29
- package/src/obj/object-info.ts +103 -6
- package/src/obj/object.ts +392 -151
- package/src/obj/power.ts +297 -59
- package/src/obj/randart-build.ts +1875 -1705
- package/src/obj/randart-data.ts +1547 -1344
- package/src/obj/randart-file.ts +130 -0
- package/src/obj/randart-log.ts +78 -0
- package/src/obj/randart-registry.ts +247 -0
- package/src/obj/randart-vectors.fixtures.ts +61 -0
- package/src/obj/randart-vectors.json +836 -0
- package/src/obj/randart-vectors.ts +369 -0
- package/src/obj/randart.ts +722 -552
- package/src/obj/rune-registry.ts +270 -0
- package/src/obj/rune-vectors.fixtures.ts +164 -0
- package/src/obj/rune-vectors.json +121 -0
- package/src/obj/rune-vectors.ts +229 -0
- package/src/obj/tval-kind-vectors.json +391 -0
- package/src/obj/tval-registry.ts +243 -0
- package/src/obj/tval-vectors.fixtures.ts +50 -0
- package/src/obj/tval-vectors.json +38 -0
- package/src/obj/tval-vectors.ts +126 -0
- package/src/obj/types.ts +18 -7
- package/src/obj/value.ts +26 -20
- package/src/parser.ts +214 -0
- package/src/player/bind.ts +5 -2
- package/src/player/birth.ts +2 -1
- package/src/player/calcs.ts +123 -42
- package/src/player/death.ts +78 -0
- package/src/player/options-file.ts +387 -0
- package/src/player/options.ts +2 -1
- package/src/player/player.ts +60 -4
- package/src/player/shape-lore.ts +33 -14
- package/src/player/timed.ts +14 -4
- package/src/player/types.ts +30 -4
- package/src/session/boot.ts +51 -1
- package/src/session/game.ts +720 -163
- package/src/session/save-migrate.ts +81 -1
- package/src/session/save.ts +264 -22
- package/src/store/bind.ts +4 -3
- package/src/store/mass-produce-vectors.fixtures.ts +64 -0
- package/src/store/mass-produce-vectors.json +1169 -0
- package/src/store/mass-produce-vectors.ts +67 -0
- package/src/store/store.ts +266 -63
- package/src/store/transact.ts +39 -16
- package/src/store/types.ts +3 -2
- package/src/version.ts +1 -1
- package/src/visuals/index.ts +1 -0
- package/src/visuals/map-text.ts +1 -1
- package/src/visuals/object-glyph.ts +76 -0
- package/src/visuals/prefs.ts +22 -32
- package/src/visuals/tile-prefs.ts +32 -0
- package/src/world/feature.ts +4 -1
- package/src/world/project.ts +19 -4
- package/src/world/projection.ts +79 -8
- package/src/world/trap.ts +25 -21
- package/src/world/view.ts +11 -1
package/dist/obj/randart-data.js
CHANGED
|
@@ -14,32 +14,44 @@
|
|
|
14
14
|
* L1332+) is a separate, later port.
|
|
15
15
|
*
|
|
16
16
|
* Faithful notes / approximations:
|
|
17
|
-
* - The upstream file_putf(log_file, ...) logging is
|
|
18
|
-
*
|
|
17
|
+
* - The upstream file_putf(log_file, ...) logging is PORTED (PORT_TODO 5.5),
|
|
18
|
+
* through the randartLog sink in ./randart-log.js. It never affects any
|
|
19
|
+
* returned value, so a run with no log open behaves identically.
|
|
19
20
|
* - artifact_power (obj-randart.c L186) builds a "fake" object with
|
|
20
|
-
* make_fake_artifact (obj-make.c L728)
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
21
|
+
* make_fake_artifact (obj-make.c L728) and calls object_power on it. It calls
|
|
22
|
+
* the REAL one: obj/artifact-fake.ts, the same builder the knowledge browser
|
|
23
|
+
* and the spoiler dump use, which is object_prep(kind, 0, MAXIMISE)
|
|
24
|
+
* (obj-make.c L817) followed by copy_artifact_data (obj-make.c L520).
|
|
25
|
+
* This file used to carry its own hand-written copy of that field mapping,
|
|
26
|
+
* flattened into a PowerObject because object_power reads only a few fields.
|
|
27
|
+
* Two hand-written copies of one C function agree until they do not, and the
|
|
28
|
+
* divergence would have been silent and total (artifact_power drives the
|
|
29
|
+
* whole design loop). It also cost the object_desc log line, which needs the
|
|
30
|
+
* whole object. Both are gone: one builder, one field mapping.
|
|
26
31
|
* - The fake object's curse timeouts (copy_curses, obj-curse.c) are set from a
|
|
27
|
-
* RANDOMISE
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
32
|
+
* RANDOMISE roll upstream, and that roll DRAWS. The timeout never enters
|
|
33
|
+
* object_power, so this file used to skip it and say no RNG was consumed;
|
|
34
|
+
* that was measured on the standard artifact set (one curse in the whole
|
|
35
|
+
* file) and was wrong during generation, where design_artifact re-powers an
|
|
36
|
+
* artifact make_bad has just cursed. The rolls are made, in upstream's order,
|
|
37
|
+
* by copyArtifactData itself now that the real builder does the work.
|
|
31
38
|
* - Upstream mean()/variance() (z-util.c L1389/L1516) are exact-rational
|
|
32
39
|
* multi-precision routines; store_base_power calls them with a non-NULL frac,
|
|
33
40
|
* which is the "round the result down" path. Both are now ported for real in
|
|
34
41
|
* ../rational (saturation and all) and called through meanFloored /
|
|
35
42
|
* varianceFloored below, rather than reimplemented here.
|
|
36
43
|
*/
|
|
44
|
+
import { randartLog, randartLogf } from "./randart-log.js";
|
|
45
|
+
import { randartRegistry, seedRandart } from "./randart-registry.js";
|
|
37
46
|
import { ELEM, KF, OBJ_MOD, OF, TV } from "../generated/index.js";
|
|
38
47
|
import { ART_IDX } from "../generated/randart-properties.js";
|
|
39
|
-
import {
|
|
48
|
+
import { tvalFindName } from "./bind.js";
|
|
49
|
+
import { makeFakeArtifact } from "./artifact-fake.js";
|
|
50
|
+
import { ODESC, objectDesc } from "./desc.js";
|
|
51
|
+
import { makeRuneEnv } from "./knowledge.js";
|
|
40
52
|
import { mean, variance } from "../rational.js";
|
|
41
53
|
import { objectPower } from "./power.js";
|
|
42
|
-
import {
|
|
54
|
+
import { TV_MAX } from "./types.js";
|
|
43
55
|
/** ART_IDX_TOTAL: number of learned-probability slots (obj-randart.h). */
|
|
44
56
|
const ART_IDX_TOTAL = ART_IDX.TOTAL;
|
|
45
57
|
/* ------------------------------------------------------------------ */
|
|
@@ -125,10 +137,6 @@ const artIdxArmor = [
|
|
|
125
137
|
function rvMinimise(v) {
|
|
126
138
|
return v.base + v.dice;
|
|
127
139
|
}
|
|
128
|
-
/** randcalc(v, 0, MAXIMISE): base + dice*sides + mBonus. */
|
|
129
|
-
function rvMaximise(v) {
|
|
130
|
-
return v.base + v.dice * v.sides + v.mBonus;
|
|
131
|
-
}
|
|
132
140
|
/** Number of set entries in a 1-based boolean slay/brand array, or 0. */
|
|
133
141
|
function countTrue(arr) {
|
|
134
142
|
if (!arr)
|
|
@@ -162,122 +170,72 @@ function varianceFloored(nums) {
|
|
|
162
170
|
/* ------------------------------------------------------------------ */
|
|
163
171
|
/* artifact_power (obj-randart.c L186) */
|
|
164
172
|
/* ------------------------------------------------------------------ */
|
|
165
|
-
/**
|
|
166
|
-
* Build the "fake" object object_power evaluates for an artifact, reproducing
|
|
167
|
-
* make_fake_artifact (obj-make.c L728) = object_prep(kind, 0, MAXIMISE)
|
|
168
|
-
* followed by copy_artifact_data (obj-make.c L520). Returns null when the
|
|
169
|
-
* artifact has no tval or no base kind (make_fake_artifact would return false).
|
|
170
|
-
*/
|
|
171
|
-
function makeFakeArtifactPower(reg, art) {
|
|
172
|
-
if (!art.tval)
|
|
173
|
-
return null;
|
|
174
|
-
const kind = reg.lookupKind(art.tval, art.sval);
|
|
175
|
-
if (!kind)
|
|
176
|
-
return null;
|
|
177
|
-
/* Flags: object_prep copies base then kind flags (the second copy
|
|
178
|
-
* overwrites the first, upstream quirk kept in objectPrep), then
|
|
179
|
-
* copy_artifact_data clears the light-fuel flags and unions art flags. */
|
|
180
|
-
const flags = newOfFlags();
|
|
181
|
-
flags.copy(kind.base.flags);
|
|
182
|
-
flags.copy(kind.flags);
|
|
183
|
-
flags.off(OF.TAKES_FUEL);
|
|
184
|
-
flags.off(OF.BURNS_OUT);
|
|
185
|
-
flags.union(art.flags);
|
|
186
|
-
/* Modifiers: object_prep fills from the kind (MAXIMISE), then
|
|
187
|
-
* copy_artifact_data overwrites every entry with the artifact's. */
|
|
188
|
-
const modifiers = new Array(OBJ_MOD_MAX).fill(0);
|
|
189
|
-
for (let i = 0; i < OBJ_MOD_MAX; i++) {
|
|
190
|
-
modifiers[i] = art.modifiers[i] ?? 0;
|
|
191
|
-
}
|
|
192
|
-
/* pval: object_prep assigns charges then food/oil/launcher pval; the
|
|
193
|
-
* artifact copy does not touch pval. */
|
|
194
|
-
let pval = 0;
|
|
195
|
-
if (tvalCanHaveCharges(art.tval)) {
|
|
196
|
-
pval = rvMaximise(kind.charge);
|
|
197
|
-
}
|
|
198
|
-
if (tvalIsEdible(art.tval) ||
|
|
199
|
-
tvalIsPotion(art.tval) ||
|
|
200
|
-
tvalIsFuel(art.tval) ||
|
|
201
|
-
tvalIsLauncher(art.tval)) {
|
|
202
|
-
pval = rvMaximise(kind.pval);
|
|
203
|
-
}
|
|
204
|
-
/* Slays/brands: object_prep copies the kind's, copy_artifact_data unions
|
|
205
|
-
* the artifact's on top. */
|
|
206
|
-
let slays = copySlays(null, kind.slays, reg.slays);
|
|
207
|
-
slays = copySlays(slays, art.slays, reg.slays);
|
|
208
|
-
let brands = copyBrands(null, kind.brands, reg.brands);
|
|
209
|
-
brands = copyBrands(brands, art.brands, reg.brands);
|
|
210
|
-
/* Element info: object_prep sets res_level and flags from kind (+ base
|
|
211
|
-
* flags); copy_artifact_data overrides res_level with any non-zero
|
|
212
|
-
* artifact level and unions the artifact ignore flags. */
|
|
213
|
-
const elInfo = [];
|
|
214
|
-
for (let i = 0; i < ELEM_MAX; i++) {
|
|
215
|
-
const ke = kind.elInfo[i];
|
|
216
|
-
const be = kind.base.elInfo[i];
|
|
217
|
-
const ae = art.elInfo[i];
|
|
218
|
-
let resLevel = ke.resLevel;
|
|
219
|
-
let elFlags = ke.flags | be.flags;
|
|
220
|
-
if (ae.resLevel !== 0)
|
|
221
|
-
resLevel = ae.resLevel;
|
|
222
|
-
elFlags |= ae.flags;
|
|
223
|
-
elInfo.push({ resLevel, flags: elFlags });
|
|
224
|
-
}
|
|
225
|
-
/* Curses: copy_curses copies the kind's then the artifact's powers.
|
|
226
|
-
* Timeouts (a RANDOMISE roll upstream) never affect power, so they are
|
|
227
|
-
* left at 0 and no RNG is consumed. */
|
|
228
|
-
let curses = null;
|
|
229
|
-
if (kind.curses || art.curses) {
|
|
230
|
-
curses = [];
|
|
231
|
-
for (let i = 0; i < reg.curses.length; i++) {
|
|
232
|
-
curses.push({ power: 0, timeout: 0 });
|
|
233
|
-
}
|
|
234
|
-
if (kind.curses) {
|
|
235
|
-
for (let i = 0; i < reg.curses.length; i++) {
|
|
236
|
-
const power = kind.curses[i] ?? 0;
|
|
237
|
-
if (power)
|
|
238
|
-
curses[i].power = power;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
if (art.curses) {
|
|
242
|
-
for (let i = 0; i < reg.curses.length; i++) {
|
|
243
|
-
const power = art.curses[i] ?? 0;
|
|
244
|
-
if (power)
|
|
245
|
-
curses[i].power = power;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
/* Activation comes from the artifact or, failing that, the kind. */
|
|
250
|
-
const act = art.activation ?? kind.activation;
|
|
251
|
-
const activation = act ? { power: act.power } : null;
|
|
252
|
-
return {
|
|
253
|
-
tval: art.tval,
|
|
254
|
-
toH: art.toH,
|
|
255
|
-
toD: art.toD,
|
|
256
|
-
toA: art.toA,
|
|
257
|
-
ac: art.ac,
|
|
258
|
-
dd: art.dd,
|
|
259
|
-
ds: art.ds,
|
|
260
|
-
weight: art.weight,
|
|
261
|
-
pval,
|
|
262
|
-
modifiers,
|
|
263
|
-
brands,
|
|
264
|
-
slays,
|
|
265
|
-
flags,
|
|
266
|
-
elInfo,
|
|
267
|
-
curses,
|
|
268
|
-
activation,
|
|
269
|
-
kind: { power: kind.power, kindFlags: kind.kindFlags },
|
|
270
|
-
ego: null,
|
|
271
|
-
};
|
|
272
|
-
}
|
|
273
173
|
/**
|
|
274
174
|
* artifact_power (obj-randart.c L186): the artifact's power, by generating a
|
|
275
175
|
* fake object from the artifact and calling the common object_power.
|
|
276
176
|
*/
|
|
277
|
-
export function artifactPower(reg,
|
|
278
|
-
|
|
177
|
+
export function artifactPower(reg,
|
|
178
|
+
/**
|
|
179
|
+
* object_prep's z_info / player constants, reached upstream as globals. Only
|
|
180
|
+
* the real make_fake_artifact needs them, which is why this argument appears
|
|
181
|
+
* here at all: the flattened builder that used to live in this file could
|
|
182
|
+
* skip object_prep, and skipping object_prep is what let the two copies of
|
|
183
|
+
* one C function drift.
|
|
184
|
+
*/
|
|
185
|
+
constants, art,
|
|
186
|
+
/**
|
|
187
|
+
* artifact_power's `reason` (obj-randart.c:186), which exists only to head
|
|
188
|
+
* the log block. REQUIRED rather than optional: upstream writes it out at
|
|
189
|
+
* every one of its four call sites, and a default here would silently label
|
|
190
|
+
* one evaluation as another in the log the argument exists to produce.
|
|
191
|
+
*/
|
|
192
|
+
reason,
|
|
193
|
+
/**
|
|
194
|
+
* make_fake_artifact's copy_curses rolls a timeout per cursed slot and those
|
|
195
|
+
* rolls DRAW. Required, because a default would hand back a private Rng and
|
|
196
|
+
* silently restore the divergence this argument exists to close.
|
|
197
|
+
*/
|
|
198
|
+
rng) {
|
|
199
|
+
randartLogf(() => `********** Evaluating ${reason} ********\n`);
|
|
200
|
+
randartLogf(() => `Artifact index is ${art.aidx}\n`);
|
|
201
|
+
const obj = makeFakeArtifact(reg, constants, art, rng);
|
|
279
202
|
if (!obj)
|
|
280
203
|
return 0;
|
|
204
|
+
/*
|
|
205
|
+
* object_desc of the fake artifact (obj-randart.c L205-L206), with
|
|
206
|
+
* ODESC_PREFIX | ODESC_FULL | ODESC_SPOIL and a NULL player - upstream's own
|
|
207
|
+
* argument, and the reason this needs no knowledge state. A null player is
|
|
208
|
+
* an omniscient observer: objectDesc uses the object as its own known shadow
|
|
209
|
+
* and every gate opens, so the RuneEnv below is never asked a knowledge
|
|
210
|
+
* question. It supplies the registries and nothing else, and slot_object is
|
|
211
|
+
* null for every slot because there is no player to have equipment.
|
|
212
|
+
*
|
|
213
|
+
* The KnownDesc is equally thin, and deliberately says the honest thing
|
|
214
|
+
* rather than the convenient one: isAware/isTried are FALSE, exactly as
|
|
215
|
+
* upstream's kind->aware at this point in birth. It does not matter -- SPOIL
|
|
216
|
+
* forces `aware` true a line later, and obj_desc_get_basename returns
|
|
217
|
+
* kind->name for an artifact regardless -- but a KnownDesc that lied here
|
|
218
|
+
* would be a claim about the player, and this code has no player.
|
|
219
|
+
*
|
|
220
|
+
* Its format string is "%s\n", which has no literal span for the census in
|
|
221
|
+
* randart-log.census.test.ts to match, so this line was carried there as
|
|
222
|
+
* UNWRITTEN_SPANLESS = 1 for as long as it went unwritten. That count is now
|
|
223
|
+
* zero, which is the only reason the reassuring EXPECTED_MISSING_RANDART = 0
|
|
224
|
+
* can be read as "nothing left".
|
|
225
|
+
*/
|
|
226
|
+
randartLogf(() => {
|
|
227
|
+
const env = makeRuneEnv(() => null, (v) => rng.randcalcVaries(v), {
|
|
228
|
+
brands: reg.brands,
|
|
229
|
+
slays: reg.slays,
|
|
230
|
+
curses: reg.curses,
|
|
231
|
+
properties: reg.properties,
|
|
232
|
+
elementNames: (reg.projections ?? []).map((p) => p.name),
|
|
233
|
+
});
|
|
234
|
+
const deps = { isAware: () => false, isTried: () => false };
|
|
235
|
+
const name = objectDesc(obj, ODESC.PREFIX | ODESC.FULL | ODESC.SPOIL, null, env, deps);
|
|
236
|
+
return `${name}
|
|
237
|
+
`;
|
|
238
|
+
});
|
|
281
239
|
return objectPower(reg, obj);
|
|
282
240
|
}
|
|
283
241
|
/* ------------------------------------------------------------------ */
|
|
@@ -288,8 +246,8 @@ export function artifactPower(reg, art) {
|
|
|
288
246
|
* ratings as a baseline, and capture the per-set and per-tval power statistics
|
|
289
247
|
* and base-item info.
|
|
290
248
|
*/
|
|
291
|
-
export function storeBasePower(reg, data) {
|
|
292
|
-
const aMax =
|
|
249
|
+
export function storeBasePower(reg, constants, arts, data, rng) {
|
|
250
|
+
const aMax = arts.length;
|
|
293
251
|
data.maxPower = 0;
|
|
294
252
|
data.minPower = INHIBIT_POWER + 1;
|
|
295
253
|
data.varPower = 0;
|
|
@@ -301,8 +259,10 @@ export function storeBasePower(reg, data) {
|
|
|
301
259
|
data.maxTvPower[i] = 0;
|
|
302
260
|
}
|
|
303
261
|
for (let i = 0; i < aMax; i++) {
|
|
304
|
-
const art =
|
|
305
|
-
const power = art
|
|
262
|
+
const art = arts[i] ?? null;
|
|
263
|
+
const power = art
|
|
264
|
+
? artifactPower(reg, constants, art, "for original power", rng)
|
|
265
|
+
: 0;
|
|
306
266
|
data.basePower[i] = power;
|
|
307
267
|
/* Capture power stats, ignoring cursed and uber arts. */
|
|
308
268
|
if (power > data.maxPower && power < INHIBIT_POWER) {
|
|
@@ -341,48 +301,70 @@ export function storeBasePower(reg, data) {
|
|
|
341
301
|
data.avgTvPower[i] = meanFloored(fakeTvPower[i]);
|
|
342
302
|
}
|
|
343
303
|
}
|
|
304
|
+
randartLogf(() => `Max power is ${String(data.maxPower)}, min is ${String(data.minPower)}\n`);
|
|
305
|
+
randartLogf(() => `Mean is ${String(data.avgPower)}, variance is ${String(data.varPower)}\n`);
|
|
306
|
+
for (let i = 0; i < TV_MAX; i++) {
|
|
307
|
+
if (data.avgTvPower[i]) {
|
|
308
|
+
randartLogf(() => `Power for tval ${tvalFindName(i)}: min ${String(data.minTvPower[i])}, max ${String(data.maxTvPower[i])}, avg ${String(data.avgTvPower[i])}\n`);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
344
311
|
/* Store the number of different types, for use later. */
|
|
345
312
|
for (let i = 0; i < aMax; i++) {
|
|
346
|
-
const art =
|
|
313
|
+
const art = arts[i] ?? null;
|
|
347
314
|
const tval = art ? art.tval : TV.NULL;
|
|
348
|
-
switch
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
case TV.HARD_ARMOR:
|
|
359
|
-
case TV.DRAG_ARMOR:
|
|
360
|
-
data.armorTotal++;
|
|
361
|
-
break;
|
|
362
|
-
case TV.SHIELD:
|
|
363
|
-
data.shieldTotal++;
|
|
364
|
-
break;
|
|
365
|
-
case TV.CLOAK:
|
|
366
|
-
data.cloakTotal++;
|
|
367
|
-
break;
|
|
368
|
-
case TV.HELM:
|
|
369
|
-
case TV.CROWN:
|
|
370
|
-
data.headgearTotal++;
|
|
371
|
-
break;
|
|
372
|
-
case TV.GLOVES:
|
|
373
|
-
data.gloveTotal++;
|
|
374
|
-
break;
|
|
375
|
-
case TV.BOOTS:
|
|
376
|
-
data.bootTotal++;
|
|
377
|
-
break;
|
|
378
|
-
case TV.NULL:
|
|
379
|
-
break;
|
|
380
|
-
default:
|
|
381
|
-
data.otherTotal++;
|
|
382
|
-
}
|
|
315
|
+
/* The upstream switch on tval is now the randart registry's `census`
|
|
316
|
+
* table. This is not bookkeeping: the totals feed the frequency table the
|
|
317
|
+
* design loop SPENDS, so a mod's item class landing in `otherTotal` skews
|
|
318
|
+
* what every randart in the game becomes. An unregistered tval counts
|
|
319
|
+
* toward `otherTotal`, which is upstream's own default arm. */
|
|
320
|
+
const bucket = randartRegistry().census.handlerFor(tval);
|
|
321
|
+
if (bucket)
|
|
322
|
+
bucket(data);
|
|
323
|
+
else
|
|
324
|
+
data.otherTotal++;
|
|
383
325
|
data.total++;
|
|
384
326
|
}
|
|
385
327
|
}
|
|
328
|
+
/* ------------------------------------------------------------------ *
|
|
329
|
+
* Core's item-class census buckets, lifted case by case.
|
|
330
|
+
* ------------------------------------------------------------------ */
|
|
331
|
+
seedRandart((registry) => {
|
|
332
|
+
const bucket = (tvals, count) => {
|
|
333
|
+
for (const tval of tvals)
|
|
334
|
+
registry.census.set(tval, count);
|
|
335
|
+
};
|
|
336
|
+
bucket([TV.SWORD, TV.POLEARM, TV.HAFTED], (d) => {
|
|
337
|
+
d.meleeTotal++;
|
|
338
|
+
});
|
|
339
|
+
bucket([TV.BOW], (d) => {
|
|
340
|
+
d.bowTotal++;
|
|
341
|
+
});
|
|
342
|
+
bucket([TV.SOFT_ARMOR, TV.HARD_ARMOR, TV.DRAG_ARMOR], (d) => {
|
|
343
|
+
d.armorTotal++;
|
|
344
|
+
});
|
|
345
|
+
bucket([TV.SHIELD], (d) => {
|
|
346
|
+
d.shieldTotal++;
|
|
347
|
+
});
|
|
348
|
+
bucket([TV.CLOAK], (d) => {
|
|
349
|
+
d.cloakTotal++;
|
|
350
|
+
});
|
|
351
|
+
bucket([TV.HELM, TV.CROWN], (d) => {
|
|
352
|
+
d.headgearTotal++;
|
|
353
|
+
});
|
|
354
|
+
bucket([TV.GLOVES], (d) => {
|
|
355
|
+
d.gloveTotal++;
|
|
356
|
+
});
|
|
357
|
+
bucket([TV.BOOTS], (d) => {
|
|
358
|
+
d.bootTotal++;
|
|
359
|
+
});
|
|
360
|
+
/* An EMPTY artifact slot, registered explicitly rather than left to the
|
|
361
|
+
* default: upstream distinguishes "no artifact here" (counts toward nothing)
|
|
362
|
+
* from "an item class I have no bucket for" (counts toward otherTotal), and
|
|
363
|
+
* the default arm can only express the second. */
|
|
364
|
+
bucket([TV.NULL], () => {
|
|
365
|
+
/* deliberately nothing */
|
|
366
|
+
});
|
|
367
|
+
});
|
|
386
368
|
/* ------------------------------------------------------------------ */
|
|
387
369
|
/* Ability counters (obj-randart.c L342-L1053) */
|
|
388
370
|
/* ------------------------------------------------------------------ */
|
|
@@ -398,60 +380,89 @@ export function countWeaponAbilities(reg, art, data) {
|
|
|
398
380
|
const minToA = rvMinimise(kind.toA);
|
|
399
381
|
/* To-hit and to-dam. */
|
|
400
382
|
let bonus = Math.trunc((art.toH - minToH - data.hitStartval) / data.hitIncrement);
|
|
383
|
+
if (bonus > 0) {
|
|
384
|
+
randartLogf(() => `Adding ${bonus} instances of extra to-hit bonus for weapon\n`);
|
|
385
|
+
}
|
|
386
|
+
else if (bonus < 0) {
|
|
387
|
+
randartLogf(() => `Subtracting ${bonus} instances of extra to-hit bonus for weapon\n`);
|
|
388
|
+
}
|
|
401
389
|
data.artProbs[ART_IDX.WEAPON_HIT] += bonus;
|
|
402
390
|
bonus = Math.trunc((art.toD - minToD - data.damStartval) / data.damIncrement);
|
|
391
|
+
/* Asymmetric with to-hit ON PURPOSE: the to-dam arm has no `< 0` test, so a
|
|
392
|
+
* bonus of exactly 0 logs "Subtracting 0" (obj-randart.c L359-363). */
|
|
393
|
+
if (bonus > 0) {
|
|
394
|
+
randartLogf(() => `Adding ${bonus} instances of extra to-dam bonus for weapon\n`);
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
randartLogf(() => `Subtracting ${bonus} instances of extra to-dam bonus for weapon\n`);
|
|
398
|
+
}
|
|
403
399
|
data.artProbs[ART_IDX.WEAPON_DAM] += bonus;
|
|
404
400
|
/* Does this weapon have an unusual bonus to AC? */
|
|
405
401
|
bonus = Math.trunc((art.toA - minToA) / data.acIncrement);
|
|
406
402
|
if (art.toA > 20) {
|
|
403
|
+
randartLogf(() => `Adding ${bonus} for supercharged AC\n`);
|
|
407
404
|
data.artProbs[ART_IDX.MELEE_AC_SUPER]++;
|
|
408
405
|
}
|
|
409
406
|
else if (bonus > 0) {
|
|
407
|
+
randartLogf(() => `Adding ${bonus} instances of extra AC bonus for weapon\n`);
|
|
410
408
|
data.artProbs[ART_IDX.MELEE_AC] += bonus;
|
|
411
409
|
}
|
|
412
410
|
/* Check damage dice - are they more than normal? */
|
|
413
411
|
if (art.dd > kind.dd) {
|
|
414
412
|
if (art.dd - kind.dd > 2) {
|
|
413
|
+
randartLog(`Adding 1 for super-charged damage dice!\n`);
|
|
415
414
|
data.artProbs[ART_IDX.MELEE_DICE_SUPER]++;
|
|
416
415
|
}
|
|
417
416
|
else {
|
|
417
|
+
randartLog(`Adding 1 for extra damage dice.\n`);
|
|
418
418
|
data.artProbs[ART_IDX.MELEE_DICE]++;
|
|
419
419
|
}
|
|
420
420
|
}
|
|
421
421
|
/* Check weight - is it different from normal? */
|
|
422
422
|
if (art.weight !== kind.weight) {
|
|
423
|
+
randartLog(`Adding 1 for unusual weight.\n`);
|
|
423
424
|
data.artProbs[ART_IDX.MELEE_WEIGHT]++;
|
|
424
425
|
}
|
|
425
426
|
/* Do we have 3 or more extra blows? */
|
|
426
427
|
const blows = art.modifiers[OBJ_MOD.BLOWS] ?? 0;
|
|
427
428
|
if (blows > 2) {
|
|
429
|
+
randartLog(`Adding 1 for supercharged blows (3 or more!)\n`);
|
|
428
430
|
data.artProbs[ART_IDX.MELEE_BLOWS_SUPER]++;
|
|
429
431
|
}
|
|
430
432
|
else if (blows > 0) {
|
|
433
|
+
randartLog(`Adding 1 for extra blows\n`);
|
|
431
434
|
data.artProbs[ART_IDX.MELEE_BLOWS]++;
|
|
432
435
|
}
|
|
433
436
|
/* Aggravation. */
|
|
434
437
|
if (art.flags.has(OF.AGGRAVATE)) {
|
|
438
|
+
randartLog(`Adding 1 for aggravation - weapon\n`);
|
|
435
439
|
data.artProbs[ART_IDX.WEAPON_AGGR]++;
|
|
436
440
|
}
|
|
437
441
|
/* Blessed weapon? */
|
|
438
442
|
if (art.flags.has(OF.BLESSED)) {
|
|
443
|
+
randartLog(`Adding 1 for blessed weapon\n`);
|
|
439
444
|
data.artProbs[ART_IDX.MELEE_BLESS]++;
|
|
440
445
|
}
|
|
441
446
|
/* See invisible? */
|
|
442
447
|
if (art.flags.has(OF.SEE_INVIS)) {
|
|
448
|
+
randartLog(`Adding 1 for see invisible (weapon case)\n`);
|
|
443
449
|
data.artProbs[ART_IDX.MELEE_SINV]++;
|
|
444
450
|
}
|
|
445
451
|
/* Tunnelling ability. */
|
|
446
452
|
if ((art.modifiers[OBJ_MOD.TUNNEL] ?? 0) > 0) {
|
|
453
|
+
randartLog(`Adding 1 for tunnelling bonus.\n`);
|
|
447
454
|
data.artProbs[ART_IDX.MELEE_TUNN]++;
|
|
448
455
|
}
|
|
449
456
|
/* Count brands and slays. */
|
|
450
457
|
if (art.slays) {
|
|
451
|
-
|
|
458
|
+
const n = countTrue(art.slays);
|
|
459
|
+
data.artProbs[ART_IDX.MELEE_SLAY] += n;
|
|
460
|
+
randartLogf(() => `Adding ${n} for slays\n`);
|
|
452
461
|
}
|
|
453
462
|
if (art.brands) {
|
|
454
|
-
|
|
463
|
+
const n = countTrue(art.brands);
|
|
464
|
+
data.artProbs[ART_IDX.MELEE_BRAND] += n;
|
|
465
|
+
randartLogf(() => `Adding ${n} for brands\n`);
|
|
455
466
|
}
|
|
456
467
|
}
|
|
457
468
|
/**
|
|
@@ -466,41 +477,66 @@ export function countBowAbilities(reg, art, data) {
|
|
|
466
477
|
const minToA = rvMinimise(kind.toA);
|
|
467
478
|
/* To-hit. */
|
|
468
479
|
let bonus = Math.trunc((art.toH - minToH - data.hitStartval) / data.hitIncrement);
|
|
480
|
+
if (bonus > 0) {
|
|
481
|
+
randartLogf(() => `Adding ${bonus} instances of extra to-hit bonus for weapon\n`);
|
|
482
|
+
}
|
|
483
|
+
else if (bonus < 0) {
|
|
484
|
+
randartLogf(() => `Subtracting ${bonus} instances of extra to-hit bonus for weapon\n`);
|
|
485
|
+
}
|
|
469
486
|
data.artProbs[ART_IDX.WEAPON_HIT] += bonus;
|
|
470
487
|
/* To-dam. */
|
|
471
488
|
bonus = Math.trunc((art.toD - minToD - data.damStartval) / data.damIncrement);
|
|
489
|
+
/* Plain `else`, as in count_weapon_abilities: the to-dam arm has no `< 0`
|
|
490
|
+
* test either here (obj-randart.c L461-466), so a bonus of exactly 0 logs
|
|
491
|
+
* "Subtracting 0". The to-hit arm above DOES have one. */
|
|
492
|
+
if (bonus > 0) {
|
|
493
|
+
randartLogf(() => `Adding ${bonus} instances of extra to-dam bonus for weapon\n`);
|
|
494
|
+
}
|
|
495
|
+
else {
|
|
496
|
+
randartLogf(() => `Subtracting ${bonus} instances of extra to-dam bonus for weapon\n`);
|
|
497
|
+
}
|
|
472
498
|
data.artProbs[ART_IDX.WEAPON_DAM] += bonus;
|
|
473
499
|
/* Armor class. */
|
|
474
500
|
bonus = Math.trunc((art.toA - minToA - data.acStartval) / data.acIncrement);
|
|
475
501
|
if (bonus > 0) {
|
|
502
|
+
randartLogf(() => `Adding ${bonus} for AC bonus - general\n`);
|
|
476
503
|
data.artProbs[ART_IDX.GEN_AC] += bonus;
|
|
477
504
|
}
|
|
478
505
|
/* Aggravation. */
|
|
479
506
|
if (art.flags.has(OF.AGGRAVATE)) {
|
|
507
|
+
randartLog(`Adding 1 for aggravation - weapon\n`);
|
|
480
508
|
data.artProbs[ART_IDX.WEAPON_AGGR]++;
|
|
481
509
|
}
|
|
482
510
|
/* Do we have more than 1 extra shot? */
|
|
483
511
|
const shots = art.modifiers[OBJ_MOD.SHOTS] ?? 0;
|
|
484
512
|
if (shots > 10) {
|
|
513
|
+
randartLog(`Adding 1 for supercharged shots (more than 1!)\n`);
|
|
485
514
|
data.artProbs[ART_IDX.BOW_SHOTS_SUPER]++;
|
|
486
515
|
}
|
|
487
516
|
else if (shots > 0) {
|
|
517
|
+
randartLog(`Adding 1 for extra shots\n`);
|
|
488
518
|
data.artProbs[ART_IDX.BOW_SHOTS]++;
|
|
489
519
|
}
|
|
490
520
|
/* Do we have 3 or more extra might? */
|
|
491
521
|
const might = art.modifiers[OBJ_MOD.MIGHT] ?? 0;
|
|
492
522
|
if (might > 2) {
|
|
523
|
+
randartLog(`Adding 1 for supercharged might (3 or more!)\n`);
|
|
493
524
|
data.artProbs[ART_IDX.BOW_MIGHT_SUPER]++;
|
|
494
525
|
}
|
|
495
526
|
else if (might > 0) {
|
|
527
|
+
randartLog(`Adding 1 for extra might\n`);
|
|
496
528
|
data.artProbs[ART_IDX.BOW_MIGHT]++;
|
|
497
529
|
}
|
|
498
530
|
/* Count brands and slays. */
|
|
499
531
|
if (art.slays) {
|
|
500
|
-
|
|
532
|
+
const n = countTrue(art.slays);
|
|
533
|
+
data.artProbs[ART_IDX.BOW_SLAY] += n;
|
|
534
|
+
randartLogf(() => `Adding ${n} for slays\n`);
|
|
501
535
|
}
|
|
502
536
|
if (art.brands) {
|
|
503
|
-
|
|
537
|
+
const n = countTrue(art.brands);
|
|
538
|
+
data.artProbs[ART_IDX.BOW_BRAND] += n;
|
|
539
|
+
randartLogf(() => `Adding ${n} for brands\n`);
|
|
504
540
|
}
|
|
505
541
|
}
|
|
506
542
|
/**
|
|
@@ -518,29 +554,37 @@ export function countNonweaponAbilities(reg, art, data) {
|
|
|
518
554
|
/* Armor class. */
|
|
519
555
|
if (bonus > 0) {
|
|
520
556
|
if (art.toA > 20) {
|
|
557
|
+
randartLogf(() => `Adding ${bonus} for supercharged AC\n`);
|
|
521
558
|
data.artProbs[ART_IDX.GEN_AC_SUPER]++;
|
|
522
559
|
}
|
|
523
560
|
else if (art.tval === TV.BOOTS) {
|
|
561
|
+
randartLogf(() => `Adding ${bonus} for AC bonus - boots\n`);
|
|
524
562
|
data.artProbs[ART_IDX.BOOT_AC] += bonus;
|
|
525
563
|
}
|
|
526
564
|
else if (art.tval === TV.GLOVES) {
|
|
565
|
+
randartLogf(() => `Adding ${bonus} for AC bonus - gloves\n`);
|
|
527
566
|
data.artProbs[ART_IDX.GLOVE_AC] += bonus;
|
|
528
567
|
}
|
|
529
568
|
else if (art.tval === TV.HELM || art.tval === TV.CROWN) {
|
|
569
|
+
randartLogf(() => `Adding ${bonus} for AC bonus - hat\n`);
|
|
530
570
|
data.artProbs[ART_IDX.HELM_AC] += bonus;
|
|
531
571
|
}
|
|
532
572
|
else if (art.tval === TV.SHIELD) {
|
|
573
|
+
randartLogf(() => `Adding ${bonus} for AC bonus - shield\n`);
|
|
533
574
|
data.artProbs[ART_IDX.SHIELD_AC] += bonus;
|
|
534
575
|
}
|
|
535
576
|
else if (art.tval === TV.CLOAK) {
|
|
577
|
+
randartLogf(() => `Adding ${bonus} for AC bonus - cloak\n`);
|
|
536
578
|
data.artProbs[ART_IDX.CLOAK_AC] += bonus;
|
|
537
579
|
}
|
|
538
580
|
else if (art.tval === TV.SOFT_ARMOR ||
|
|
539
581
|
art.tval === TV.HARD_ARMOR ||
|
|
540
582
|
art.tval === TV.DRAG_ARMOR) {
|
|
583
|
+
randartLogf(() => `Adding ${bonus} for AC bonus - body armor\n`);
|
|
541
584
|
data.artProbs[ART_IDX.ARMOR_AC] += bonus;
|
|
542
585
|
}
|
|
543
586
|
else {
|
|
587
|
+
randartLogf(() => `Adding ${bonus} for AC bonus - general\n`);
|
|
544
588
|
data.artProbs[ART_IDX.GEN_AC] += bonus;
|
|
545
589
|
}
|
|
546
590
|
}
|
|
@@ -549,9 +593,11 @@ export function countNonweaponAbilities(reg, art, data) {
|
|
|
549
593
|
bonus = Math.trunc((toHit + toDam) / (data.hitIncrement + data.damIncrement));
|
|
550
594
|
if (bonus > 0) {
|
|
551
595
|
if (art.tval === TV.GLOVES) {
|
|
596
|
+
randartLogf(() => `Adding ${bonus} instances of extra to-hit and to-dam bonus for gloves\n`);
|
|
552
597
|
data.artProbs[ART_IDX.GLOVE_HIT_DAM] += bonus;
|
|
553
598
|
}
|
|
554
599
|
else {
|
|
600
|
+
randartLogf(() => `Adding ${bonus} instances of extra to-hit and to-dam bonus for non-weapon\n`);
|
|
555
601
|
data.artProbs[ART_IDX.NONWEAPON_HIT_DAM] += bonus;
|
|
556
602
|
}
|
|
557
603
|
}
|
|
@@ -559,40 +605,51 @@ export function countNonweaponAbilities(reg, art, data) {
|
|
|
559
605
|
else if (toHit > 0) {
|
|
560
606
|
bonus = Math.trunc(toHit / data.hitIncrement);
|
|
561
607
|
if (bonus > 0) {
|
|
608
|
+
randartLogf(() => `Adding ${bonus} instances of extra to-hit bonus for non-weapon\n`);
|
|
562
609
|
data.artProbs[ART_IDX.NONWEAPON_HIT] += bonus;
|
|
563
610
|
}
|
|
564
611
|
}
|
|
565
612
|
else if (toDam > 0) {
|
|
566
613
|
bonus = Math.trunc(toDam / data.damIncrement);
|
|
567
614
|
if (bonus > 0) {
|
|
615
|
+
randartLogf(() => `Adding ${bonus} instances of extra to-dam bonus for non-weapon\n`);
|
|
568
616
|
data.artProbs[ART_IDX.NONWEAPON_DAM] += bonus;
|
|
569
617
|
}
|
|
570
618
|
}
|
|
571
619
|
/* Check weight - is it different from normal? */
|
|
572
620
|
if (art.weight !== kind.weight) {
|
|
621
|
+
randartLog(`Adding 1 for unusual weight.\n`);
|
|
573
622
|
data.artProbs[ART_IDX.ALLARMOR_WEIGHT]++;
|
|
574
623
|
}
|
|
575
624
|
/* Aggravation. */
|
|
576
625
|
if (art.flags.has(OF.AGGRAVATE)) {
|
|
626
|
+
randartLog(`Adding 1 for aggravation - nonweapon\n`);
|
|
577
627
|
data.artProbs[ART_IDX.NONWEAPON_AGGR]++;
|
|
578
628
|
}
|
|
579
629
|
/* Count brands and slays. */
|
|
580
630
|
if (art.slays) {
|
|
581
|
-
|
|
631
|
+
const n = countTrue(art.slays);
|
|
632
|
+
data.artProbs[ART_IDX.NONWEAPON_SLAY] += n;
|
|
633
|
+
randartLogf(() => `Adding ${n} for slays\n`);
|
|
582
634
|
}
|
|
583
635
|
if (art.brands) {
|
|
584
|
-
|
|
636
|
+
const n = countTrue(art.brands);
|
|
637
|
+
data.artProbs[ART_IDX.NONWEAPON_BRAND] += n;
|
|
638
|
+
randartLogf(() => `Adding ${n} for brands\n`);
|
|
585
639
|
}
|
|
586
640
|
/* Blows. */
|
|
587
641
|
if ((art.modifiers[OBJ_MOD.BLOWS] ?? 0) > 0) {
|
|
642
|
+
randartLog(`Adding 1 for extra blows on nonweapon\n`);
|
|
588
643
|
data.artProbs[ART_IDX.NONWEAPON_BLOWS]++;
|
|
589
644
|
}
|
|
590
645
|
/* Shots. */
|
|
591
646
|
if ((art.modifiers[OBJ_MOD.SHOTS] ?? 0) > 0) {
|
|
647
|
+
randartLog(`Adding 1 for extra shots on nonweapon\n`);
|
|
592
648
|
data.artProbs[ART_IDX.NONWEAPON_SHOTS]++;
|
|
593
649
|
}
|
|
594
650
|
/* Tunnelling ability. */
|
|
595
651
|
if ((art.modifiers[OBJ_MOD.TUNNEL] ?? 0) > 0) {
|
|
652
|
+
randartLog(`Adding 1 for tunnelling bonus - general.\n`);
|
|
596
653
|
data.artProbs[ART_IDX.GEN_TUNN]++;
|
|
597
654
|
}
|
|
598
655
|
}
|
|
@@ -617,10 +674,12 @@ export function countModifiers(art, data) {
|
|
|
617
674
|
((art.modifiers[OBJ_MOD.WIS] ?? 0) > 0 ||
|
|
618
675
|
(art.modifiers[OBJ_MOD.INT] ?? 0) > 0)) {
|
|
619
676
|
if ((art.modifiers[OBJ_MOD.WIS] ?? 0) > 0) {
|
|
677
|
+
randartLog("Adding 1 for WIS bonus on headgear.\n");
|
|
620
678
|
data.artProbs[ART_IDX.HELM_WIS]++;
|
|
621
679
|
num--;
|
|
622
680
|
}
|
|
623
681
|
if ((art.modifiers[OBJ_MOD.INT] ?? 0) > 0) {
|
|
682
|
+
randartLog("Adding 1 for INT bonus on headgear.\n");
|
|
624
683
|
data.artProbs[ART_IDX.HELM_INT]++;
|
|
625
684
|
num--;
|
|
626
685
|
}
|
|
@@ -629,52 +688,64 @@ export function countModifiers(art, data) {
|
|
|
629
688
|
art.tval === TV.HARD_ARMOR ||
|
|
630
689
|
art.tval === TV.DRAG_ARMOR) &&
|
|
631
690
|
(art.modifiers[OBJ_MOD.CON] ?? 0) > 0) {
|
|
691
|
+
randartLog("Adding 1 for CON bonus on body armor.\n");
|
|
632
692
|
data.artProbs[ART_IDX.ARMOR_CON]++;
|
|
633
693
|
num--;
|
|
634
694
|
}
|
|
635
695
|
else if (art.tval === TV.GLOVES && (art.modifiers[OBJ_MOD.DEX] ?? 0) > 0) {
|
|
696
|
+
randartLog("Adding 1 for DEX bonus on gloves.\n");
|
|
636
697
|
data.artProbs[ART_IDX.GLOVE_DEX]++;
|
|
637
698
|
num--;
|
|
638
699
|
}
|
|
639
700
|
/* Now the general case. */
|
|
640
701
|
if (num > 0) {
|
|
702
|
+
randartLogf(() => `Adding ${num} for stat bonuses - general.\n`);
|
|
641
703
|
data.artProbs[ART_IDX.GEN_STAT] += num;
|
|
642
704
|
}
|
|
643
705
|
/* Handle stealth, including a couple of special cases. */
|
|
644
706
|
if ((art.modifiers[OBJ_MOD.STEALTH] ?? 0) > 0) {
|
|
645
707
|
if (art.tval === TV.BOOTS) {
|
|
708
|
+
randartLog("Adding 1 for stealth bonus on boots.\n");
|
|
646
709
|
data.artProbs[ART_IDX.BOOT_STEALTH]++;
|
|
647
710
|
}
|
|
648
711
|
else if (art.tval === TV.CLOAK) {
|
|
712
|
+
randartLog("Adding 1 for stealth bonus on cloak.\n");
|
|
649
713
|
data.artProbs[ART_IDX.CLOAK_STEALTH]++;
|
|
650
714
|
}
|
|
651
715
|
else if (art.tval === TV.SOFT_ARMOR ||
|
|
652
716
|
art.tval === TV.HARD_ARMOR ||
|
|
653
717
|
art.tval === TV.DRAG_ARMOR) {
|
|
718
|
+
randartLog("Adding 1 for stealth bonus on armor.\n");
|
|
654
719
|
data.artProbs[ART_IDX.ARMOR_STEALTH]++;
|
|
655
720
|
}
|
|
656
721
|
else {
|
|
722
|
+
randartLog("Adding 1 for stealth bonus - general.\n");
|
|
657
723
|
data.artProbs[ART_IDX.GEN_STEALTH]++;
|
|
658
724
|
}
|
|
659
725
|
}
|
|
660
726
|
/* Searching bonus - fully generic. */
|
|
661
727
|
if ((art.modifiers[OBJ_MOD.SEARCH] ?? 0) > 0) {
|
|
728
|
+
randartLog("Adding 1 for search bonus - general.\n");
|
|
662
729
|
data.artProbs[ART_IDX.GEN_SEARCH]++;
|
|
663
730
|
}
|
|
664
731
|
/* Infravision bonus - fully generic. */
|
|
665
732
|
if ((art.modifiers[OBJ_MOD.INFRA] ?? 0) > 0) {
|
|
733
|
+
randartLog("Adding 1 for infravision bonus - general.\n");
|
|
666
734
|
data.artProbs[ART_IDX.GEN_INFRA]++;
|
|
667
735
|
}
|
|
668
736
|
/* Damage reduction bonus - fully generic. */
|
|
669
737
|
if ((art.modifiers[OBJ_MOD.DAM_RED] ?? 0) > 0) {
|
|
738
|
+
randartLog("Adding 1 for damage reduction bonus - general.\n");
|
|
670
739
|
data.artProbs[ART_IDX.GEN_DAM_RED]++;
|
|
671
740
|
}
|
|
672
741
|
/* Moves bonus. */
|
|
673
742
|
if ((art.modifiers[OBJ_MOD.MOVES] ?? 0) > 0) {
|
|
674
743
|
if (art.tval === TV.BOOTS) {
|
|
744
|
+
randartLog("Adding 1 for moves bonus on boots.\n");
|
|
675
745
|
data.artProbs[ART_IDX.BOOT_MOVES]++;
|
|
676
746
|
}
|
|
677
747
|
else {
|
|
748
|
+
randartLog("Adding 1 for moves bonus - general.\n");
|
|
678
749
|
data.artProbs[ART_IDX.GEN_MOVES]++;
|
|
679
750
|
}
|
|
680
751
|
}
|
|
@@ -682,17 +753,21 @@ export function countModifiers(art, data) {
|
|
|
682
753
|
const speed = art.modifiers[OBJ_MOD.SPEED] ?? 0;
|
|
683
754
|
if (speed > 0) {
|
|
684
755
|
if (speed > 7) {
|
|
756
|
+
randartLog("Adding 1 for supercharged speed bonus!\n");
|
|
685
757
|
data.artProbs[ART_IDX.GEN_SPEED_SUPER]++;
|
|
686
758
|
}
|
|
687
759
|
else if (art.tval === TV.BOOTS) {
|
|
760
|
+
randartLog("Adding 1 for normal speed bonus on boots.\n");
|
|
688
761
|
data.artProbs[ART_IDX.BOOT_SPEED]++;
|
|
689
762
|
}
|
|
690
763
|
else {
|
|
764
|
+
randartLog("Adding 1 for normal speed bonus - general.\n");
|
|
691
765
|
data.artProbs[ART_IDX.GEN_SPEED]++;
|
|
692
766
|
}
|
|
693
767
|
}
|
|
694
768
|
/* Permanent light. */
|
|
695
769
|
if ((art.modifiers[OBJ_MOD.LIGHT] ?? 0) > 0) {
|
|
770
|
+
randartLog("Adding 1 for light radius - general.\n");
|
|
696
771
|
data.artProbs[ART_IDX.GEN_LIGHT]++;
|
|
697
772
|
}
|
|
698
773
|
}
|
|
@@ -710,6 +785,7 @@ export function countLowResists(art, data) {
|
|
|
710
785
|
num++;
|
|
711
786
|
if (art.elInfo[ELEM.COLD].resLevel === 3)
|
|
712
787
|
num++;
|
|
788
|
+
randartLogf(() => `Adding ${num} for immunities.\n`);
|
|
713
789
|
data.artProbs[ART_IDX.GEN_IMMUNE] += num;
|
|
714
790
|
/* Count up low resists (not the type, just the number). */
|
|
715
791
|
num = 0;
|
|
@@ -723,19 +799,23 @@ export function countLowResists(art, data) {
|
|
|
723
799
|
num++;
|
|
724
800
|
if (num) {
|
|
725
801
|
if (art.tval === TV.SHIELD) {
|
|
802
|
+
randartLogf(() => `Adding ${num} for low resists on shield.\n`);
|
|
726
803
|
data.artProbs[ART_IDX.SHIELD_LRES] += num;
|
|
727
804
|
}
|
|
728
805
|
else if (art.tval === TV.SOFT_ARMOR ||
|
|
729
806
|
art.tval === TV.HARD_ARMOR ||
|
|
730
807
|
art.tval === TV.DRAG_ARMOR) {
|
|
731
808
|
if (num === 4) {
|
|
809
|
+
randartLog("Adding 1 for ALL LOW RESISTS on body armor.\n");
|
|
732
810
|
data.artProbs[ART_IDX.ARMOR_ALLRES]++;
|
|
733
811
|
}
|
|
734
812
|
else {
|
|
813
|
+
randartLogf(() => `Adding ${num} for low resists on body armor.\n`);
|
|
735
814
|
data.artProbs[ART_IDX.ARMOR_LRES] += num;
|
|
736
815
|
}
|
|
737
816
|
}
|
|
738
817
|
else {
|
|
818
|
+
randartLogf(() => `Adding ${num} for low resists - general.\n`);
|
|
739
819
|
data.artProbs[ART_IDX.GEN_LRES] += num;
|
|
740
820
|
}
|
|
741
821
|
}
|
|
@@ -775,51 +855,66 @@ export function countHighResists(art, data) {
|
|
|
775
855
|
num++;
|
|
776
856
|
if (art.flags.has(OF.PROT_STUN))
|
|
777
857
|
num++;
|
|
858
|
+
randartLogf(() => `Adding ${num} for high resists on body armor.\n`);
|
|
778
859
|
data.artProbs[ART_IDX.ARMOR_HRES] += num;
|
|
779
860
|
}
|
|
780
861
|
/* Now do the high resists individually. */
|
|
781
862
|
if (art.elInfo[ELEM.POIS].resLevel === 1) {
|
|
863
|
+
randartLog("Adding 1 for resist poison - general.\n");
|
|
782
864
|
data.artProbs[ART_IDX.GEN_RPOIS]++;
|
|
783
865
|
}
|
|
784
866
|
if (art.flags.has(OF.PROT_FEAR)) {
|
|
867
|
+
randartLog("Adding 1 for resist fear - general.\n");
|
|
785
868
|
data.artProbs[ART_IDX.GEN_RFEAR]++;
|
|
786
869
|
}
|
|
787
870
|
if (art.elInfo[ELEM.LIGHT].resLevel === 1) {
|
|
871
|
+
randartLog("Adding 1 for resist light - general.\n");
|
|
788
872
|
data.artProbs[ART_IDX.GEN_RLIGHT]++;
|
|
789
873
|
}
|
|
790
874
|
if (art.elInfo[ELEM.DARK].resLevel === 1) {
|
|
875
|
+
randartLog("Adding 1 for resist dark - general.\n");
|
|
791
876
|
data.artProbs[ART_IDX.GEN_RDARK]++;
|
|
792
877
|
}
|
|
793
878
|
if (art.flags.has(OF.PROT_BLIND)) {
|
|
794
879
|
if (art.tval === TV.HELM || art.tval === TV.CROWN) {
|
|
880
|
+
randartLog("Adding 1 for resist blindness - headgear.\n");
|
|
795
881
|
data.artProbs[ART_IDX.HELM_RBLIND]++;
|
|
796
882
|
}
|
|
797
883
|
else {
|
|
884
|
+
randartLog("Adding 1 for resist blindness - general.\n");
|
|
798
885
|
data.artProbs[ART_IDX.GEN_RBLIND]++;
|
|
799
886
|
}
|
|
800
887
|
}
|
|
801
888
|
if (art.flags.has(OF.PROT_CONF)) {
|
|
889
|
+
randartLog("Adding 1 for resist confusion - general.\n");
|
|
802
890
|
data.artProbs[ART_IDX.GEN_RCONF]++;
|
|
803
891
|
}
|
|
804
892
|
if (art.elInfo[ELEM.SOUND].resLevel === 1) {
|
|
893
|
+
randartLog("Adding 1 for resist sound - general.\n");
|
|
805
894
|
data.artProbs[ART_IDX.GEN_RSOUND]++;
|
|
806
895
|
}
|
|
807
896
|
if (art.elInfo[ELEM.SHARD].resLevel === 1) {
|
|
897
|
+
randartLog("Adding 1 for resist shards - general.\n");
|
|
808
898
|
data.artProbs[ART_IDX.GEN_RSHARD]++;
|
|
809
899
|
}
|
|
810
900
|
if (art.elInfo[ELEM.NEXUS].resLevel === 1) {
|
|
901
|
+
randartLog("Adding 1 for resist nexus - general.\n");
|
|
811
902
|
data.artProbs[ART_IDX.GEN_RNEXUS]++;
|
|
812
903
|
}
|
|
813
904
|
if (art.elInfo[ELEM.NETHER].resLevel === 1) {
|
|
905
|
+
randartLog("Adding 1 for resist nether - general.\n");
|
|
814
906
|
data.artProbs[ART_IDX.GEN_RNETHER]++;
|
|
815
907
|
}
|
|
816
908
|
if (art.elInfo[ELEM.CHAOS].resLevel === 1) {
|
|
909
|
+
randartLog("Adding 1 for resist chaos - general.\n");
|
|
817
910
|
data.artProbs[ART_IDX.GEN_RCHAOS]++;
|
|
818
911
|
}
|
|
819
912
|
if (art.elInfo[ELEM.DISEN].resLevel === 1) {
|
|
913
|
+
randartLog("Adding 1 for resist disenchantment - general.\n");
|
|
820
914
|
data.artProbs[ART_IDX.GEN_RDISEN]++;
|
|
821
915
|
}
|
|
822
916
|
if (art.flags.has(OF.PROT_STUN)) {
|
|
917
|
+
randartLog("Adding 1 for res_stun - general.\n");
|
|
823
918
|
data.artProbs[ART_IDX.GEN_PSTUN]++;
|
|
824
919
|
}
|
|
825
920
|
}
|
|
@@ -846,14 +941,17 @@ export function countAbilities(reg, art, data) {
|
|
|
846
941
|
num++;
|
|
847
942
|
if (art.flags.has(OF.SUST_CON))
|
|
848
943
|
num++;
|
|
944
|
+
randartLogf(() => `Adding ${num} for stat sustains.\n`);
|
|
849
945
|
data.artProbs[ART_IDX.GEN_SUST] += num;
|
|
850
946
|
}
|
|
851
947
|
/* Free action - handle gloves separately. */
|
|
852
948
|
if (art.flags.has(OF.FREE_ACT)) {
|
|
853
949
|
if (art.tval === TV.GLOVES) {
|
|
950
|
+
randartLog("Adding 1 for free action on gloves.\n");
|
|
854
951
|
data.artProbs[ART_IDX.GLOVE_FA]++;
|
|
855
952
|
}
|
|
856
953
|
else {
|
|
954
|
+
randartLog("Adding 1 for free action - general.\n");
|
|
857
955
|
data.artProbs[ART_IDX.GEN_FA]++;
|
|
858
956
|
}
|
|
859
957
|
}
|
|
@@ -862,18 +960,22 @@ export function countAbilities(reg, art, data) {
|
|
|
862
960
|
if (art.tval === TV.SOFT_ARMOR ||
|
|
863
961
|
art.tval === TV.HARD_ARMOR ||
|
|
864
962
|
art.tval === TV.DRAG_ARMOR) {
|
|
963
|
+
randartLog("Adding 1 for hold life on armor.\n");
|
|
865
964
|
data.artProbs[ART_IDX.ARMOR_HLIFE]++;
|
|
866
965
|
}
|
|
867
966
|
else {
|
|
967
|
+
randartLog("Adding 1 for hold life - general.\n");
|
|
868
968
|
data.artProbs[ART_IDX.GEN_HLIFE]++;
|
|
869
969
|
}
|
|
870
970
|
}
|
|
871
971
|
/* Feather fall - handle boots separately. */
|
|
872
972
|
if (art.flags.has(OF.FEATHER)) {
|
|
873
973
|
if (art.tval === TV.BOOTS) {
|
|
974
|
+
randartLog("Adding 1 for feather fall on boots.\n");
|
|
874
975
|
data.artProbs[ART_IDX.BOOT_FEATHER]++;
|
|
875
976
|
}
|
|
876
977
|
else {
|
|
978
|
+
randartLog("Adding 1 for feather fall - general.\n");
|
|
877
979
|
data.artProbs[ART_IDX.GEN_FEATHER]++;
|
|
878
980
|
}
|
|
879
981
|
}
|
|
@@ -884,9 +986,11 @@ export function countAbilities(reg, art, data) {
|
|
|
884
986
|
art.tval === TV.POLEARM ||
|
|
885
987
|
art.tval === TV.SWORD)) {
|
|
886
988
|
if (art.tval === TV.HELM || art.tval === TV.CROWN) {
|
|
989
|
+
randartLog("Adding 1 for see invisible - headgear.\n");
|
|
887
990
|
data.artProbs[ART_IDX.HELM_SINV]++;
|
|
888
991
|
}
|
|
889
992
|
else {
|
|
993
|
+
randartLog("Adding 1 for see invisible - general.\n");
|
|
890
994
|
data.artProbs[ART_IDX.GEN_SINV]++;
|
|
891
995
|
}
|
|
892
996
|
}
|
|
@@ -894,31 +998,38 @@ export function countAbilities(reg, art, data) {
|
|
|
894
998
|
/* ESP - handle helms/crowns separately. */
|
|
895
999
|
if (art.flags.has(OF.TELEPATHY)) {
|
|
896
1000
|
if (art.tval === TV.HELM || art.tval === TV.CROWN) {
|
|
1001
|
+
randartLog("Adding 1 for ESP on headgear.\n");
|
|
897
1002
|
data.artProbs[ART_IDX.HELM_ESP]++;
|
|
898
1003
|
}
|
|
899
1004
|
else {
|
|
1005
|
+
randartLog("Adding 1 for ESP - general.\n");
|
|
900
1006
|
data.artProbs[ART_IDX.GEN_ESP]++;
|
|
901
1007
|
}
|
|
902
1008
|
}
|
|
903
1009
|
/* Slow digestion - generic. */
|
|
904
1010
|
if (art.flags.has(OF.SLOW_DIGEST)) {
|
|
1011
|
+
randartLog("Adding 1 for slow digestion - general.\n");
|
|
905
1012
|
data.artProbs[ART_IDX.GEN_SDIG]++;
|
|
906
1013
|
}
|
|
907
1014
|
/* Regeneration - generic. */
|
|
908
1015
|
if (art.flags.has(OF.REGEN)) {
|
|
1016
|
+
randartLog("Adding 1 for regeneration - general.\n");
|
|
909
1017
|
data.artProbs[ART_IDX.GEN_REGEN]++;
|
|
910
1018
|
}
|
|
911
1019
|
/* Trap immunity - handle boots separately. */
|
|
912
1020
|
if (art.flags.has(OF.TRAP_IMMUNE)) {
|
|
913
1021
|
if (art.tval === TV.BOOTS) {
|
|
1022
|
+
randartLog("Adding 1 for trap immunity on boots.\n");
|
|
914
1023
|
data.artProbs[ART_IDX.BOOT_TRAP_IMM]++;
|
|
915
1024
|
}
|
|
916
1025
|
else {
|
|
1026
|
+
randartLog("Adding 1 for trap immunity - general.\n");
|
|
917
1027
|
data.artProbs[ART_IDX.GEN_TRAP_IMM]++;
|
|
918
1028
|
}
|
|
919
1029
|
}
|
|
920
1030
|
/* Activation. */
|
|
921
1031
|
if (art.activation || kind?.activation) {
|
|
1032
|
+
randartLog("Adding 1 for activation.\n");
|
|
922
1033
|
data.artProbs[ART_IDX.GEN_ACTIV]++;
|
|
923
1034
|
}
|
|
924
1035
|
}
|
|
@@ -929,10 +1040,15 @@ export function countAbilities(reg, art, data) {
|
|
|
929
1040
|
* collect_artifact_data (obj-randart.c L1059): parse the standard artifacts and
|
|
930
1041
|
* count up the frequencies of the various abilities.
|
|
931
1042
|
*/
|
|
932
|
-
export function collectArtifactCounts(reg, data) {
|
|
933
|
-
const aMax =
|
|
1043
|
+
export function collectArtifactCounts(reg, arts, data) {
|
|
1044
|
+
const aMax = arts.length;
|
|
934
1045
|
for (let i = 0; i < aMax; i++) {
|
|
935
|
-
const art =
|
|
1046
|
+
const art = arts[i] ?? null;
|
|
1047
|
+
/* obj-randart.c:1066-1067 logs the index BEFORE any skip, so a cursed,
|
|
1048
|
+
* tval-0 or absent entry still prints its line. Upstream reads a_info[i]
|
|
1049
|
+
* out of a dense array and never has a null to guard, so the port's own
|
|
1050
|
+
* null check has to come after this to keep the counts aligned. */
|
|
1051
|
+
randartLogf(() => `Current artifact index is ${i}\n`);
|
|
936
1052
|
if (!art)
|
|
937
1053
|
continue;
|
|
938
1054
|
/* Don't parse cursed or null items. */
|
|
@@ -947,6 +1063,7 @@ export function collectArtifactCounts(reg, data) {
|
|
|
947
1063
|
}
|
|
948
1064
|
/* Add the base item tval to the tv_probs array. */
|
|
949
1065
|
data.tvProbs[kind.tval] = (data.tvProbs[kind.tval] ?? 0) + 1;
|
|
1066
|
+
randartLogf(() => `Base item is ${kind.kidx}\n`);
|
|
950
1067
|
/* Count combat abilities broken up by type. */
|
|
951
1068
|
if (art.tval === TV.DIGGING ||
|
|
952
1069
|
art.tval === TV.HAFTED ||
|
|
@@ -1048,27 +1165,46 @@ export function adjustFreqs(data) {
|
|
|
1048
1165
|
* frequencies of their abilities and base object kinds, building the dynamic
|
|
1049
1166
|
* generation probabilities.
|
|
1050
1167
|
*/
|
|
1051
|
-
export function parseFrequencies(reg, data) {
|
|
1168
|
+
export function parseFrequencies(reg, arts, data) {
|
|
1169
|
+
randartLog("\n****** BEGINNING GENERATION OF FREQUENCIES\n\n");
|
|
1052
1170
|
/* Zero the frequencies for artifact attributes. */
|
|
1053
1171
|
for (let i = 0; i < ART_IDX_TOTAL; i++)
|
|
1054
1172
|
data.artProbs[i] = 0;
|
|
1055
|
-
collectArtifactCounts(reg, data);
|
|
1173
|
+
collectArtifactCounts(reg, arts, data);
|
|
1056
1174
|
/* Big hack, reduce frequencies of sharp weapons. */
|
|
1057
1175
|
for (let i = 0; i < TV_MAX; i++) {
|
|
1058
1176
|
if (i === TV.SWORD || i === TV.POLEARM) {
|
|
1059
1177
|
data.tvProbs[i] = Math.trunc((data.tvProbs[i] * 2) / 3);
|
|
1060
1178
|
}
|
|
1061
1179
|
}
|
|
1180
|
+
/* "Print out some of the abilities, to make sure that everything's fine"
|
|
1181
|
+
* (obj-randart.c:1295-1301). Both loops run to their FULL extent, before any
|
|
1182
|
+
* rescaling - the pre- and post-rescale dumps are what make the log usable
|
|
1183
|
+
* for comparing two runs. */
|
|
1184
|
+
for (let i = 0; i < ART_IDX_TOTAL; i++) {
|
|
1185
|
+
randartLogf(() => `Frequency of ability ${i}: ${data.artProbs[i]}\n`);
|
|
1186
|
+
}
|
|
1187
|
+
for (let i = 0; i < TV_MAX; i++) {
|
|
1188
|
+
randartLogf(() => `Frequency of ${tvalFindName(i)}: ${data.tvProbs[i]}\n`);
|
|
1189
|
+
}
|
|
1062
1190
|
/* Rescale frequencies. */
|
|
1063
1191
|
rescaleFreqs(data);
|
|
1064
1192
|
/* Perform any additional rescaling and adjustment. */
|
|
1065
1193
|
adjustFreqs(data);
|
|
1194
|
+
/* "Log the final frequencies to check that everything's correct" (:1309). */
|
|
1195
|
+
for (let i = 0; i < ART_IDX_TOTAL; i++) {
|
|
1196
|
+
randartLogf(() => `Rescaled frequency of ability ${i}: ${data.artProbs[i]}\n`);
|
|
1197
|
+
}
|
|
1066
1198
|
/* Build a cumulative frequency table for tvals. */
|
|
1067
1199
|
for (let i = 0; i < TV_MAX; i++) {
|
|
1068
1200
|
for (let j = i; j < TV_MAX; j++) {
|
|
1069
1201
|
data.tvFreq[j] = (data.tvFreq[j] ?? 0) + (data.tvProbs[i] ?? 0);
|
|
1070
1202
|
}
|
|
1071
1203
|
}
|
|
1204
|
+
/* "Print out the frequency table, for verification" (:1319). */
|
|
1205
|
+
for (let i = 0; i < TV_MAX; i++) {
|
|
1206
|
+
randartLogf(() => `Cumulative frequency of ${tvalFindName(i)} is: ${data.tvFreq[i]}\n`);
|
|
1207
|
+
}
|
|
1072
1208
|
}
|
|
1073
1209
|
/* ------------------------------------------------------------------ */
|
|
1074
1210
|
/* Generation of a random artifact (header) */
|
|
@@ -1136,18 +1272,26 @@ export function artifactSetDataNew(reg) {
|
|
|
1136
1272
|
};
|
|
1137
1273
|
}
|
|
1138
1274
|
/**
|
|
1139
|
-
* Allocate an ArtifactSetData and run the measurement pipeline over
|
|
1140
|
-
*
|
|
1141
|
-
*
|
|
1142
|
-
*
|
|
1143
|
-
*
|
|
1144
|
-
* standard
|
|
1275
|
+
* Allocate an ArtifactSetData and run the measurement pipeline over `arts`:
|
|
1276
|
+
* store_base_power, then parse_frequencies (which runs collect_artifact_data,
|
|
1277
|
+
* rescale_freqs and adjust_freqs). Returns the populated data. `rng` is drawn
|
|
1278
|
+
* from, not merely threaded: store_base_power powers every artifact, and
|
|
1279
|
+
* make_fake_artifact rolls a timeout per cursed slot (see
|
|
1280
|
+
* makeFakeArtifactPower). Over the standard set that is a handful of draws;
|
|
1281
|
+
* over a generated set it is one per curse the design loop added.
|
|
1282
|
+
*
|
|
1283
|
+
* WHICH SET is a parameter because do_randart measures TWICE (obj-randart.c
|
|
1284
|
+
* L3175-L3186): once over the standard artifacts, and once more over the
|
|
1285
|
+
* finished ones. Upstream can leave it implicit because create_artifact_set
|
|
1286
|
+
* overwrites the a_info global in place, so "the artifacts" means a different
|
|
1287
|
+
* set the second time round without anything being passed. This port generates
|
|
1288
|
+
* into a fresh array and leaves reg.artifacts alone, so the set being measured
|
|
1289
|
+
* has to be handed in.
|
|
1145
1290
|
*/
|
|
1146
|
-
export function collectArtifactData(reg, rng) {
|
|
1147
|
-
void rng;
|
|
1291
|
+
export function collectArtifactData(reg, constants, arts, rng) {
|
|
1148
1292
|
const data = artifactSetDataNew(reg);
|
|
1149
|
-
storeBasePower(reg, data);
|
|
1150
|
-
parseFrequencies(reg, data);
|
|
1293
|
+
storeBasePower(reg, constants, arts, data, rng);
|
|
1294
|
+
parseFrequencies(reg, arts, data);
|
|
1151
1295
|
return data;
|
|
1152
1296
|
}
|
|
1153
1297
|
//# sourceMappingURL=randart-data.js.map
|