- (pick (5 `(:wand cold :charges ,(wand-charges)))
- (5 `(:wand enemy-detection :charges ,(wand-charges)))
- (4 `(:wand fear :charges ,(wand-charges)))
- (5 `(:wand fireballs :charges ,(wand-charges)))
- (4 `(:wand illusion :charges ,(wand-charges)))
- (5 `(:wand lightning-bolts :charges ,(wand-charges)))
- (5 `(:wand magic-detection :charges ,(wand-charges)))
- (5 `(:wand metal-detection :charges ,(wand-charges)))
- (4 `(:wand negation :charges ,(wand-charges)))
- (5 `(:wand paralysation :charges ,(wand-charges)))
- (5 `(:wand polymorphing :charges ,(wand-charges)))
- (4 `(:wand secret-door-detection
- :charges ,(wand-charges)))
- (4 `(:wand trap-detection :charges ,(wand-charges)))
- (1 `(:staff commanding :charges nil))
- (2 `(:staff dispelling :charges ,(staff-charges)))
- (3 `(:staff druids :charges ,(staff-charges)))
- (3 `(:staff ,(choose 19 'air
- 19 'earth
- 19 'fire
- 19 'water
- 6 'air-and-water
- 6 'earth-and-fire
- 2 'elemental-power)
- :charges ,(staff-charges)))
- (2 `(:staff harming :charges ,(staff-charges)))
- (7 `(:staff healing :charges ,(staff-charges)))
- (1 `(:staff power :charges ,(staff-charges)))
- (3 `(:staff snake :charges ,(staff-charges)))
- (3 `(:staff striking :charges ,(staff-charges)))
- (2 `(:staff withering :charges ,(staff-charges)))
- (1 `(:staff wizardry :charges ,(staff-charges)))
- (2 `(:rod cancellation))
- (1 `(:rod dominion))
- (1 `(:rod health))
- (2 `(:rod inertia))
- (1 `(:rod parrying))
- (1 `(:rod victory))
- (3 `(:rod weaponry))
- (1 `(:rod wyrm :colour ,(choose 5 'gold
- 3 'blue
- 2 'black)))))
- (ring ()
- (pick (2 `(:ring animal-control))
- (6 `(:ring delusion))
- (1 `(:ring djinni-summoning))
- (4 `(:ring ear))
- (4 `(:ring ,(choose 19 'air-adaptation
- 19 'earth-adaptation
- 19 'fire-adaptation
- 19 'water-adaptation
- 6 'air-and-water-adaptation
- 6 'earth-and-fire-adaptation
- 2 'elemental-adaptation)))
- (6 `(:ring fire-resistance))
- (3 `(:ring holiness))
- (1 `(:ring human-control))
- (5 `(:ring invisibility))
- (3 `(:ring life-protection :charges ,(d 6)))
- (3 `(:ring memory))
- (2 `(:ring plant-control))
- (1 `(:ring protection :bonus 1 :radius 5))
- (10 `(:ring protection :bonus ,(choose 4 1
- 3 2
- 2 3
- 1 4)))
- (4 `(:ring quickness))
- (1 `(:ring regeneration))
- (3 `(:ring remedies))
- (2 `(:ring safety :charges ,(d 4)))
- (3 `(:ring seeing))
- (3 `(:ring spell-eating))
- (2 (let* ((caster (spell-caster-type))
- (spells (loop repeat (d 6)
- collect (random-spell caster))))
- `(:ring spell-storing
- :caster ,caster
- :spells ,(remove-duplicates (sort spells
- #'string<)))))
- (2 `(:ring spell-turning))
- (4 `(:ring survival :charges ,(+ 100 (d 100))))
- (2 `(:ring telekinesis))
- (4 `(:ring truth))
- (3 `(:ring truthfulness))
- (2 `(:ring truthlessness))
- (5 `(:ring water-walking))
- (5 `(:ring weakness))
- (2 `(:ring wishes :charges ,(choose 4 1
- 3 2
- 2 3
- 1 4)))
- (2 `(:ring x-ray-vision))))
+ (pick-matching (form)
+ (5 (:user (:magic-user :elf))
+ `(:wand cold :charges ,(wand-charges)))
+ (5 (:user (:magic-user :elf))
+ `(:wand enemy-detection :charges ,(wand-charges)))
+ (4 (:user (:magic-user :elf))
+ `(:wand fear :charges ,(wand-charges)))
+ (5 (:user (:magic-user :elf))
+ `(:wand fireballs :charges ,(wand-charges)))
+ (4 (:user (:magic-user :elf))
+ `(:wand illusion :charges ,(wand-charges)))
+ (5 (:user (:magic-user :elf))
+ `(:wand lightning-bolts :charges ,(wand-charges)))
+ (5 (:user (:magic-user :elf))
+ `(:wand magic-detection :charges ,(wand-charges)))
+ (5 (:user (:magic-user :elf))
+ `(:wand metal-detection :charges ,(wand-charges)))
+ (4 (:user (:magic-user :elf))
+ `(:wand negation :charges ,(wand-charges)))
+ (5 (:user (:magic-user :elf))
+ `(:wand paralysation :charges ,(wand-charges)))
+ (5 (:user (:magic-user :elf))
+ `(:wand polymorphing :charges ,(wand-charges)))
+ (4 (:user (:magic-user :elf))
+ `(:wand secret-door-detection :charges ,(wand-charges)))
+ (4 (:user (:magic-user :elf))
+ `(:wand trap-detection :charges ,(wand-charges)))
+ (1 (:user (:magic-user :elf :cleric :druid :palatin))
+ `(:staff commanding :charges nil))
+ (2 nil
+ `(:staff dispelling :charges ,(staff-charges)))
+ (3 (:user :druid)
+ `(:staff druids :charges ,(staff-charges)))
+ (3 (:user (:magic-user :elf))
+ `(:staff ,(choose 19 'air
+ 19 'earth
+ 19 'fire
+ 19 'water
+ 6 'air-and-water
+ 6 'earth-and-fire
+ 2 'elemental-power)
+ :charges ,(staff-charges)))
+ (2 (:user (:cleric :druid :paladin))
+ `(:staff harming :charges ,(staff-charges)))
+ (7 (:user (:cleric :druid :paladin))
+ `(:staff healing :charges ,(staff-charges)))
+ (1 (:user (:cleric :druid :magic-user :elf :paladin))
+ `(:staff power :charges ,(staff-charges)))
+ (3 (:user (:cleric :druid :paladin))
+ `(:staff snake :charges ,(staff-charges)))
+ (3 (:user (:cleric :druid :magic-user :elf :paladin))
+ `(:staff striking :charges ,(staff-charges)))
+ (2 (:user (:cleric :druid :paladin))
+ `(:staff withering :charges ,(staff-charges)))
+ (1 (:user (:magic-user :elf))
+ `(:staff wizardry :charges ,(staff-charges)))
+ (2 nil `(:rod cancellation))
+ (1 nil `(:rod dominion))
+ (1 (:user (:cleric :druid :paladin)) `(:rod health))
+ (2 (:user (:dwarf :halfling :elf :fighter
+ :paladin :thief :mystic))
+ `(:rod inertia))
+ (1 nil `(:rod parrying))
+ (1 nil `(:rod victory))
+ (3 (:user (:dwarf :halfling :elf :fighter
+ :paladin :thief :mystic))
+ `(:rod weaponry))
+ (1 nil
+ `(:rod wyrm :colour ,(choose 5 'gold
+ 3 'blue
+ 2 'black)))))
+ (ring (&optional (recursivep nil))
+ (pick-matching (form)
+ (2 (:cursed nil) `(:ring animal-control))
+ ((if recursivep 0 6)
+ (:cursed t)
+ (setf form :any)
+ `(:ring delusion :fakes ,@(cdr (ring t))))
+ (1 (:cursed nil) `(:ring djinni-summoning))
+ (4 (:cursed nil) `(:ring ear))
+ (4 (:cursed nil) `(:ring ,(choose 19 'air-adaptation
+ 19 'earth-adaptation
+ 19 'fire-adaptation
+ 19 'water-adaptation
+ 6 'air-and-water-adaptation
+ 6 'earth-and-fire-adaptation
+ 2 'elemental-adaptation)))
+ (6 (:cursed nil) `(:ring fire-resistance))
+ (3 (:cursed nil :user (:cleric :druid :paladin))
+ `(:ring holiness))
+ (1 (:cursed nil) `(:ring human-control))
+ (5 (:cursed nil) `(:ring invisibility))
+ (3 (:cursed nil) `(:ring life-protection :charges ,(d 6)))
+ (3 (:cursed nil
+ :user (:cleric :druid :magic-user :elf :paladin))
+ `(:ring memory))
+ (2 (:cursed nil) `(:ring plant-control))
+ (1 (:cursed nil) `(:ring protection :bonus 1 :radius 5))
+ (10 (:cursed nil) `(:ring protection :bonus ,(choose 4 1
+ 3 2
+ 2 3
+ 1 4)))
+ (4 (:cursed nil) `(:ring quickness))
+ (1 (:cursed nil) `(:ring regeneration))
+ (3 (:cursed nil) `(:ring remedies))
+ (2 (:cursed nil) `(:ring safety :charges ,(d 4)))
+ (3 (:cursed nil) `(:ring seeing))
+ (3 (:cursed t) `(:ring spell-eating))
+ (2 (:cursed nil)
+ (let* ((caster (spell-caster-type))
+ (spells (loop repeat (d 6)
+ collect (random-spell caster))))
+ `(:ring spell-storing
+ :caster ,caster
+ :spells ,(remove-duplicates (sort spells
+ #'string<)))))
+ (2 (:cursed nil) `(:ring spell-turning))
+ (4 (:cursed nil) `(:ring survival :charges ,(+ 100 (d 100))))
+ (2 (:cursed nil) `(:ring telekinesis))
+ (4 (:cursed nil) `(:ring truth))
+ (3 (:cursed t) `(:ring truthfulness))
+ (2 (:cursed t) `(:ring truthlessness))
+ (5 (:cursed nil) `(:ring water-walking))
+ (5 (:cursed t) `(:ring weakness))
+ (2 (:cursed nil) `(:ring wishes :charges ,(choose 4 1
+ 3 2
+ 2 3
+ 1 4)))
+ (2 (:cursed nil) `(:ring x-ray-vision))))