From: Mark Wooding Date: Sat, 12 May 2007 23:03:44 +0000 (+0100) Subject: Merge commit 'nc/master' into temp X-Git-Url: https://git.distorted.org.uk/~mdw/dnd/commitdiff_plain/da704ab3e5163297d581bf4d06fd3a31dbdc42fe?hp=4005b3424e2f89eba44b1dda567a6e0cd7b452a0 Merge commit 'nc/master' into temp * commit 'nc/master': Updates Conflicts: dice.lisp monsters.tex spells.tex tables.cls treasure.tex --- diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cc1dc12 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +*.aux +*.dvi +*.log +*.x86f +*~ +\#* +.#* +*.[0-9] +*.ps diff --git a/combat.tex b/combat.tex index 8f34298..0afce9a 100644 --- a/combat.tex +++ b/combat.tex @@ -86,6 +86,22 @@ \end{tabular} \end{set} +\begin{set} + +\begin{order*}{Naval combat} +\item Magic and giant monsters: usually 1 hull point for each 5 hit + points, rounding down. \\ +\item Each 10\% of damage or 10\% loss of rowers reduces speed by 10\%. \\ +\item Dead in water at 75\% damage; sinks at 100\%. \\ +\item Grappling: at $50'$ or less; successful 2 in 6 or by mutual + agreement. \\ +\item Boarding: $-2$ on hit rolls and AC during boarding round. \\ +\item Repairs: five crewmen required; 1\,hp per turn up to half damage, fails + after 5d6 days. \\ +\end{order*} + +\end{set} + \end{document} %%% Local Variables: diff --git a/dice.lisp b/dice.lisp index 61f99d8..ee031fa 100644 --- a/dice.lisp +++ b/dice.lisp @@ -178,20 +178,19 @@ (when (< (random n) 1) (setf it (car things)))))) -(defmacro pick (&rest clauses) +(defmacro pick (&body clauses) `(funcall (choose ,@(loop for (n . clause) in clauses collect n collect `(lambda () ,@clause))))) -(defconstant druid-spells - #((detect-danger faerie-fire locate predict-weather) - (heat-metal obscure produce-fire warp-wood) - (call-lightning hold-animal protection-from-poison water-breathing) - (control-temperature-10-ft-radius plant-door protection-from-lightning - summon-animals) - (anti-plant-shell control-winds dissolve pass-plant) - (anti-animal-shell summon-weather transport-through-plants turn-wood) - (creeping-doom metal-to-wood summon-elemental weather-control))) +(defmacro pick-matching ((form &key) &body clauses) + (let ((formtemp (gensym "FORM"))) + `(let ((,formtemp ,form)) + (pick ,@(loop for (prob assertion . code) in clauses + collect `((if (assertion-match-p ,formtemp ',assertion) + ,prob + 0) + ,@code)))))) (defconstant cleric-spells #((cure-light-wounds detect-evil detect-magic light protection-from-evil @@ -210,6 +209,21 @@ (earthquake holy-word raise-dead-fully restore survival travel wish wizardry))) +(defconstant druid-only-spells + #((detect-danger faerie-fire locate predict-weather) + (heat-metal obscure produce-fire warp-wood) + (call-lightning hold-animal protection-from-poison water-breathing) + (control-temperature-10-ft-radius plant-door protection-from-lightning + summon-animals) + (anti-plant-shell control-winds dissolve pass-plant) + (anti-animal-shell summon-weather transport-through-plants turn-wood) + (creeping-doom metal-to-wood summon-elemental weather-control))) + +(defconstant druid-spells + (make-array 7 :initial-contents (loop for cs across cleric-spells + for ds across druid-only-spells + collect (append cs ds)))) + (defconstant magic-user-spells #((analyse charm-person detect-magic floating-disc hold-portal light magic-missile protection-from-evil read-languages read-magic shield @@ -239,8 +253,11 @@ (contingency create-any-monster gate heal immunity maze meteor-swarm power-word-kill prismatic-wall shapechange survival timestop wish))) -(defun spell-caster-type () - (choose 25 :cleric 5 :druid 70 :magic-user)) +(defun spell-caster-type (&optional (form :any)) + (pick-matching (form) + (5 (:user (:cleric :druid :paladin)) :cleric) + (1 (:user :druid) :druid) + (14 (:user (:magic-user :elf :thief)) :magic-user))) (defun random-spell (&optional (caster (spell-caster-type)) (level (ecase caster @@ -263,21 +280,31 @@ (let ((list (aref (ecase caster ((:magic-user) magic-user-spells) ((:cleric) cleric-spells) - ((:druid) druid-spells)) + ((:druid) druid-only-spells)) level))) (values (elt list (random (length list))) caster level))) -(defun symbol-match-p (form sym) - (cond ((eq form t) t) - ((eq form nil) nil) - ((eq form sym) t) - ((atom form) nil) - (t (ecase (car form) - ((and) (every (lambda (f) (symbol-match-p f sym)) (cdr form))) - ((or) (some (lambda (f) (symbol-match-p f sym)) (cdr form))) - ((not) (not (symbol-match-p (cadr form) sym))))))) +(let ((magic (list :magic))) + (defun assertion-match-p (form assertions) + (cond ((eq form :any) t) + ((eq form :none) nil) + ((atom form) (if (atom assertions) + (eql form assertions) + (member form assertions))) + (t (case (car form) + ((and) (every (lambda (f) + (assertion-match-p f assertions)) + (cdr form))) + ((or) (some (lambda (f) + (assertion-match-p f assertions)) + (cdr form))) + ((not) (not (assertion-match-p (cadr form) assertions))) + (t (let ((sub (getf assertions (car form) magic))) + (if (eq sub magic) + t + (assertion-match-p (cadr form) sub))))))))) (defun choose-distinct-items (n seq) (let* ((copy (subseq (coerce seq 'vector) 0)) @@ -290,303 +317,369 @@ (setf (aref copy j) (aref copy len)))))) (defun magic-item (form) - (labels ((potion (&key recursivep) - (pick (2 `(:potion agility)) - (1 `(:potion animal-control)) - (3 `(:potion antidote)) - (2 `(:potion blending)) - (2 `(:potion bug-repellent)) - (2 `(:potion clairaudience)) - (2 `(:potion clairvoyance)) - (2 `(:potion climbing)) - (2 `(:potion defence :bonus ,(choose 3 1 - 2 2 - 2 3 - 2 4 - 1 5))) - ((if recursivep 0 4) - `(:potion delusion - :fakes ,@(cdr (potion :recursivep t)))) - (2 `(:potion diminution)) - (1 `(:potion ,(choose 35 'white-dragon-control - 15 'crystal-dragon-control - 35 'black-dragon-control - 15 'onyx-dragon-control - 28 'green-dragon-control - 12 'jade-dragon-control - 21 'blue-dragon-control - 9 'sapphire-dragon-control - 14 'red-dragon-control - 6 'ruby-dragon-control - 7 'gold-dragon-control - 3 'amber-dragon-control))) - (2 `(:potion dreamspeech)) - (1 `(:potion elasicity)) - (2 `(:potion ,(choose-uniformly 'air-form - 'water-form - 'earth-form - 'fire-form))) - (2 `(:potion esp)) - (1 `(:potion ethereality)) - (3 `(:potion fire-resistance)) - (3 `(:potion flying)) - (2 `(:potion fortitude)) - (1 `(:potion freedom)) - (3 `(:potion gaseous-form)) - (1 `(:potion ,(choose 5 'hill-giant-control - 5 'stone-giant-control - 4 'frost-giant-control - 2 'fire-giant-control - 1 'mountain-giant-control - 1 'sea-giant-control - 1 'cloud-giant-control - 1 'storm-giant-control))) - (3 `(:potion giant-strength)) - (2 `(:potion growth)) - (6 `(:potion healing)) - (3 `(:potion heroism)) - (1 `(:potion human-control)) - (3 `(:potion invisibility)) - (2 `(:potion invulnerability)) - (2 `(:potion levitation)) - (2 `(:potion longevity)) - (1 `(:potion luck)) - (1 `(:potion merging)) - (2 `(:potion plant-control)) - (3 `(:potion poison)) - (3 `(:potion polymorph-self)) - (2 `(:potion sight)) - (2 `(:potion speech)) - (4 `(:potion speed)) - (2 `(:potion strength)) - (3 `(:potion super-healing)) - (3 `(:potion swimming)) - (1 `(:potion treasure-finding)) - (1 `(:potion undead-control)) - (2 `(:potion water-breathing)))) + (labels ((cursedp (&optional (prob 10)) + (cond ((assertion-match-p form '(:cursed :unspecified)) + (zerop (random prob))) + ((assertion-match-p form '(:cursed nil)) + nil) + (t t))) + (potion (&key recursivep) + (pick-matching (form) + (2 (:cursed nil) `(:potion agility)) + (1 (:cursed nil) `(:potion animal-control)) + (3 (:cursed nil) `(:potion antidote)) + (2 (:cursed nil) `(:potion blending)) + (2 (:cursed nil) `(:potion bug-repellent)) + (2 (:cursed nil) `(:potion clairaudience)) + (2 (:cursed nil) `(:potion clairvoyance)) + (2 (:cursed nil) `(:potion climbing)) + (2 (:cursed nil) `(:potion defence :bonus ,(choose 3 1 + 2 2 + 2 3 + 2 4 + 1 5))) + ((if recursivep 0 4) (:cursed t) + (setf form :any) + `(:potion delusion + :fakes ,@(cdr (potion :recursivep t)))) + (2 (:cursed nil) `(:potion diminution)) + (1 (:cursed nil) `(:potion ,(choose 35 'white-dragon-control + 15 'crystal-dragon-control + 35 'black-dragon-control + 15 'onyx-dragon-control + 28 'green-dragon-control + 12 'jade-dragon-control + 21 'blue-dragon-control + 9 'sapphire-dragon-control + 14 'red-dragon-control + 6 'ruby-dragon-control + 7 'gold-dragon-control + 3 'amber-dragon-control))) + (2 (:cursed nil) `(:potion dreamspeech)) + (1 (:cursed nil) `(:potion elasicity)) + (2 (:cursed nil) `(:potion ,(choose-uniformly 'air-form + 'water-form + 'earth-form + 'fire-form))) + (2 (:cursed nil) `(:potion esp)) + (1 (:cursed nil) `(:potion ethereality)) + (3 (:cursed nil) `(:potion fire-resistance)) + (3 (:cursed nil) `(:potion flying)) + (2 (:cursed nil) `(:potion fortitude)) + (1 (:cursed nil) `(:potion freedom)) + (3 (:cursed nil) `(:potion gaseous-form)) + (1 (:cursed nil) `(:potion ,(choose 5 'hill-giant-control + 5 'stone-giant-control + 4 'frost-giant-control + 2 'fire-giant-control + 1 'mountain-giant-control + 1 'sea-giant-control + 1 'cloud-giant-control + 1 'storm-giant-control))) + (3 (:cursed nil) `(:potion giant-strength)) + (2 (:cursed nil) `(:potion growth)) + (6 (:cursed nil) `(:potion healing)) + (3 (:cursed nil) `(:potion heroism)) + (1 (:cursed nil) `(:potion human-control)) + (3 (:cursed nil) `(:potion invisibility)) + (2 (:cursed nil) `(:potion invulnerability)) + (2 (:cursed nil) `(:potion levitation)) + (2 (:cursed nil) `(:potion longevity)) + (1 (:cursed nil) `(:potion luck)) + (1 (:cursed nil) `(:potion merging)) + (2 (:cursed nil) `(:potion plant-control)) + (3 (:cursed t) `(:potion poison)) + (3 (:cursed nil) `(:potion polymorph-self)) + (2 (:cursed nil) `(:potion sight)) + (2 (:cursed nil) `(:potion speech)) + (4 (:cursed nil) `(:potion speed)) + (2 (:cursed nil) `(:potion strength)) + (3 (:cursed nil) `(:potion super-healing)) + (3 (:cursed nil) `(:potion swimming)) + (1 (:cursed nil) `(:potion treasure-finding)) + (1 (:cursed nil) `(:potion undead-control)) + (2 (:cursed nil) `(:potion water-breathing)))) (scroll () - (pick (3 `(:scroll communication)) - (2 `(:scroll creation)) - (8 `(:scroll curse)) - (1 (multiple-value-bind - (spell caster level) - (random-spell) - (declare (ignore level)) - `(:scroll delay :caster ,caster :spells (,spell)))) - (3 `(:scroll equipment - :items ,(choose-distinct-items 6 - '(grappling-hook - hammer - iron-spikes - lantern - mirror - wooden-pole - rope - saddle - backpack - saddle-bags - stakes-and-mallet - wolfsbane)))) - (2 `(:scroll illumination)) - (2 `(:scroll mages)) - (4 `(:map normal-treasure)) - (3 `(:map magical-treasure)) - (2 `(:map combined-treasure)) - (1 `(:map special-treasure)) - (3 `(:scroll mapping)) - (2 `(:scroll portals)) - (6 `(:scroll protection-from-elementals)) - (8 `(:scroll protection-from-lycanthropes)) - (4 `(:scroll protection-from-magic)) - (7 `(:scroll protection-from-undead)) - (2 `(:scroll questioning)) - (1 (multiple-value-bind - (spell caster level) - (random-spell) - `(:scroll repetition - :caster ,caster - :level ,level - :spells (,spell)))) - (2 `(:scroll seeing)) - (2 `(:scroll shelter)) - (3 `(:scroll spell-catching :max-level ,(choose 4 1 - 3 2 - 2 3 - 1 8))) - (25 (let ((caster (spell-caster-type)) - (spells (choose 50 1 33 2 17 3))) - `(:scroll spell - :caster ,caster - :spells ,(loop repeat spells - collect (random-spell caster))))) - (2 `(:scroll trapping)) - (2 `(:scroll truth)))) + (pick-matching (form) + (3 (:cursed nil) `(:scroll communication)) + (2 (:cursed nil) `(:scroll creation)) + (8 (:cursed t) `(:scroll curse)) + (1 (:user (:cleric :druid :magic-user :elf :thief :paladin) + :cursed nil) + (multiple-value-bind + (spell caster level) + (random-spell (spell-caster-type form)) + (declare (ignore level)) + `(:scroll delay :caster ,caster :spells (,spell)))) + (3 (:cursed nil) + `(:scroll equipment + :items ,(choose-distinct-items 6 + '(grappling-hook + hammer + iron-spikes + lantern + mirror + wooden-pole + rope + saddle + backpack + saddle-bags + stakes-and-mallet + wolfsbane)))) + (2 (:cursed nil) `(:scroll illumination)) + (2 (:cursed nil :user (:magic-user :cleric :druid :elf)) + `(:scroll mages)) + (4 (:cursed nil) `(:map normal-treasure)) + (3 (:cursed nil) `(:map magical-treasure)) + (2 (:cursed nil) `(:map combined-treasure)) + (1 (:cursed nil) `(:map special-treasure)) + (3 (:cursed nil) `(:scroll mapping)) + (2 (:cursed nil) `(:scroll portals)) + (6 (:cursed nil) `(:scroll protection-from-elementals)) + (8 (:cursed nil) `(:scroll protection-from-lycanthropes)) + (4 (:cursed nil) `(:scroll protection-from-magic)) + (7 (:cursed nil) `(:scroll protection-from-undead)) + (2 (:cursed nil) `(:scroll questioning)) + (1 (:cursed nil + :user (:cleric :druid :magic-user :elf :thief :paladin)) + (multiple-value-bind + (spell caster level) + (random-spell (spell-caster-type form)) + `(:scroll repetition + :caster ,caster + :level ,level + :spells (,spell)))) + (2 (:cursed nil) `(:scroll seeing)) + (2 (:cursed nil) `(:scroll shelter)) + (3 (:cursed nil) + `(:scroll spell-catching :max-level ,(choose 4 1 + 3 2 + 2 3 + 1 8))) + (25 (:cursed nil + :user (:cleric :druid :magic-user :elf :thief :paladin)) + (let ((caster (spell-caster-type form)) + (spells (choose 50 1 33 2 17 3))) + `(:scroll spell + :caster ,caster + :spells ,(loop repeat spells + collect (random-spell caster))))) + (2 (:cursed nil) `(:scroll trapping)) + (2 (:cursed nil) `(:scroll truth)))) (wand-charges () (d 10 3)) (staff-charges () (d 20 2)) (wandlike () - (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)))) (misc-item () - (pick (2 `(:amulet protection-from-crystal-balls-and-esp)) - (2 `(:bag devouring)) - (5 `(:bag holding)) - (3 `(:boat undersea)) - (2 `(:boots levitation)) - (3 `(:boots speed)) - (2 `(:boots travelling-and-leaping)) - (1 `(:bowl commanding-water-elementals)) - (1 `(:brazier commanding-fire-elementals)) - (2 `(:broom flying)) - (1 `(:censer controlling-air-elementals)) - (3 `(:chime time)) - (2 `(:crystal-ball normal)) - (1 `(:crystal-ball clairaudience)) - (1 `(:crystal-ball esp)) - (2 `(:cloak displacer)) - (1 `(:drums panic)) - (1 `(:bottle efreeti)) - (3 `(:egg ,(choose-uniformly 'rock-baboon - 'giant-bat - 'black-bear - 'grizzly-bear - 'boar - 'mountain-lion - 'panther - 'giant-ferret - 'gecko - 'draco - 'racer-snake - 'wolf))) - (2 `(:boots elven)) - (2 `(:cloak elven)) - (1 `(:carpet flying)) - (2 `(:gauntlets ogre-power)) - (2 `(:girdle giant-strength)) - (2 `(:helm ,(choose-uniformly 'lawful-alignment - 'neutral-alignment - 'chaotic-alignment))) - (2 `(:helm reading)) - (1 `(:helm telepathy)) - (1 `(:helm teleportation)) - (1 `(:horn blasting)) - (2 `(:lamp hurricane)) - (3 `(:lamp long-burning)) - (2 `(:medallion esp-30-ft-range)) - (1 `(:medallion esp-90-ft-range)) - (1 `(:mirror life-trapping)) ;;; fixme include contents - (3 `(:muzzle training)) - (2 `(:nail finger)) - (3 `(:nail pointing)) - (5 `(:ointment ,(choose-uniformly 'blessing - 'healing - 'poison - 'scarring - 'soothing - 'tanning))) - (3 `(:pouch security)) - (3 `(:quill copying)) - (4 `(:rope climbing)) - (2 `(:scarab protection :charges ,(d 6 2))) - (3 `(:slate identification)) - (1 `(:stone controlling-earth-elementals)) - (2 `(:talisman ,(choose-uniformly 'air-travel - 'earth-travel - 'fire-travel - 'water-travel - 'elemental-travel))) - (3 `(:wheel floating)) - (1 `(:wheel fortune)) - (2 `(:wheel square)))) + (pick-matching (form) + (2 (:cursed nil) + `(:amulet protection-from-crystal-balls-and-esp)) + (2 (:cursed t) `(:bag devouring)) + (5 (:cursed nil) `(:bag holding)) + (3 (:cursed nil) `(:boat undersea)) + (2 (:cursed nil) `(:boots levitation)) + (3 (:cursed nil) `(:boots speed)) + (2 (:cursed nil) `(:boots travelling-and-leaping)) + (1 (:cursed nil) `(:bowl commanding-water-elementals)) + (1 (:cursed nil) `(:brazier commanding-fire-elementals)) + (2 (:cursed nil) `(:broom flying)) + (1 (:cursed nil) `(:censer controlling-air-elementals)) + (3 (:cursed nil) `(:chime time)) + (2 (:cursed nil :user (:magic-user :elf)) + `(:crystal-ball normal)) + (1 (:cursed nil :user (:magic-user :elf)) + `(:crystal-ball clairaudience)) + (1 (:cursed nil :user (:magic-user :elf)) + `(:crystal-ball esp)) + (2 (:cursed nil) `(:cloak displacer)) + (1 (:cursed nil) `(:drums panic)) + (1 (:cursed nil) `(:bottle efreeti)) + (3 (:cursed nil) `(:egg ,(choose-uniformly 'rock-baboon + 'giant-bat + 'black-bear + 'grizzly-bear + 'boar + 'mountain-lion + 'panther + 'giant-ferret + 'gecko + 'draco + 'racer-snake + 'wolf))) + (2 (:cursed nil) `(:boots elven)) + (2 (:cursed nil) `(:cloak elven)) + (1 (:cursed nil) `(:carpet flying)) + (2 (:cursed nil) `(:gauntlets ogre-power)) + (2 (:cursed nil) `(:girdle giant-strength)) + (2 (:cursed t) + `(:helm ,(choose-uniformly 'lawful-alignment + 'neutral-alignment + 'chaotic-alignment))) + (2 (:cursed nil) `(:helm reading)) + (1 (:cursed nil) `(:helm telepathy)) + (1 (:cursed nil) `(:helm teleportation)) + (1 (:cursed nil) `(:horn blasting)) + (2 (:cursed t) `(:lamp hurricane)) + (3 (:cursed nil) `(:lamp long-burning)) + (2 (:cursed nil) `(:medallion esp-30-ft-range)) + (1 (:cursed nil) `(:medallion esp-90-ft-range)) + (1 (:cursed nil) `(:mirror life-trapping)) + ; fixme include contents + (3 (:cursed nil) `(:muzzle training)) + (2 (:cursed nil) `(:nail finger)) + (3 (:cursed nil) `(:nail pointing)) + (5 nil `(:ointment ,(pick-matching (form) + (1 (:cursed nil) 'blessing) + (1 (:cursed nil) 'healing) + (1 (:cursed t) 'poison) + (1 (:cursed t) 'scarring) + (1 (:cursed nil) 'soothing) + (1 (:cursed t) 'tanning)))) + (3 (:cursed nil) `(:pouch security)) + (3 (:cursed nil :user (:cleric :druid :magic-user :elf)) + `(:quill copying)) + (4 (:cursed nil) `(:rope climbing)) + (2 (:cursed nil) `(:scarab protection :charges ,(d 6 2))) + (3 (:cursed nil :user (:cleric :druid :magic-user :elf)) + `(:slate identification)) + (1 (:cursed nil) `(:stone controlling-earth-elementals)) + (2 (:cursed nil) + `(:talisman ,(choose-uniformly 'air-travel + 'earth-travel + 'fire-travel + 'water-travel + 'elemental-travel))) + (3 (:cursed nil) `(:wheel floating)) + (1 (:cursed nil) `(:wheel fortune)) + (2 (:cursed nil) `(:wheel square)))) (weapon-bonus (class) (loop for bonus from 1 for roll = (random 100) then (- roll item) @@ -597,11 +690,12 @@ ((d) '(70 18 8 3 1))) when (< roll item) return bonus)) (armour-size () - (choose 68 'human - 13 'dwarf - 10 'elf - 7 'halfling - 2 'giant)) + (pick-matching (form) + (68 (:user (:cleric :fighter :paladin :druid :thief)) 'human) + (13 (:user :dwarf) 'dwarf) + (10 (:user :elf) 'elf) + (7 (:user :halfling) 'halfling) + (2 (:user nil) 'giant))) (armour-piece (class) (let* ((bonus (weapon-bonus class)) (power (and (percentp (* 5 (1+ bonus))) @@ -619,27 +713,40 @@ (7 `(remove-curse :charges ,(d 3)))))) (cursedp (if (and power (eq (car power) 'remove-curse)) nil - (zerop (random 8))))) + (cursedp 8)))) `(:bonus ,bonus ,@(and power (cons :power power)) :size ,(armour-size) ,@(and cursedp `(:cursed t))))) (armour () - (pick (10 `((:leather ,@(armour-piece 'd)))) - ( 7 `((:scale-mail ,@(armour-piece 'd)))) - (13 `((:chain-mail ,@(armour-piece 'c)))) - ( 9 `((:banded-mail ,@(armour-piece 'd)))) - (11 `((:plate-mail ,@(armour-piece 'b)))) - ( 5 `((:suit-armour ,@(armour-piece 'b)))) - (20 `((:shield ,@(armour-piece 'a)))) - ( 2 `((:scale-mail ,@(armour-piece 'd)) - (:shield ,@(armour-piece 'a)))) - ( 8 `((:chain-mail ,@(armour-piece 'c)) - (:shield ,@(armour-piece 'a)))) - ( 5 `((:banded-mail ,@(armour-piece 'd)) - (:shield ,@(armour-piece 'a)))) - (10 `((:plate-mail ,@(armour-piece 'b)) - (:shield ,@(armour-piece 'a)))))) + (pick-matching (form) + (10 (:user (:cleric :fighter :paladin :druid :thief + :dwarf :elf :halfling)) + `((:armour leather ,@(armour-piece 'd)))) + ( 7 (:user (:cleric :fighter :paladin :dwarf :elf :halfling)) + `((:armour scale-mail ,@(armour-piece 'd)))) + (13 (:user (:cleric :fighter :paladin :dwarf :elf :halfling)) + `((:armour chain-mail ,@(armour-piece 'c)))) + ( 9 (:user (:cleric :fighter :paladin :dwarf :elf :halfling)) + `((:armour banded-mail ,@(armour-piece 'd)))) + (11 (:user (:cleric :fighter :paladin :dwarf :elf :halfling)) + `((:armour plate-mail ,@(armour-piece 'b)))) + ( 5 (:user (:cleric :fighter :paladin :dwarf :elf :halfling)) + `((:armour suit ,@(armour-piece 'b)))) + (20 (:user (:cleric :fighter :paladin :dwarf :elf :halfling)) + `((:shield ,@(armour-piece 'a)))) + ( 2 (:user (:cleric :fighter :paladin :dwarf :elf :halfling)) + `((:armour scale-mail ,@(armour-piece 'd)) + (:shield ,@(armour-piece 'a)))) + ( 8 (:user (:cleric :fighter :paladin :dwarf :elf :halfling)) + `((:armour chain-mail ,@(armour-piece 'c)) + (:shield ,@(armour-piece 'a)))) + ( 5 (:user (:cleric :fighter :paladin :dwarf :elf :halfling)) + `((:armour banded-mail ,@(armour-piece 'd)) + (:shield ,@(armour-piece 'a)))) + (10 (:user (:cleric :fighter :paladin :dwarf :elf :halfling)) + `((:armour plate-mail ,@(armour-piece 'b)) + (:shield ,@(armour-piece 'a)))))) (opponent () (choose 6 'bugs 3 'constructs @@ -696,39 +803,59 @@ (missile () (multiple-value-bind (item class) - (pick (37 (values :arrow 'a)) - (22 (values :quarrel 'a)) - (11 (values :sling-stone 'a)) - (2 (values :blowgun 'd)) - (8 (values :long-bow 'd)) - (5 (values :short-bow 'd)) - (2 (values :heavy-crossbow 'd)) - (5 (values :light-crossbow 'd)) - (8 (values :sling 'd))) + (pick-matching (form) + (37 (:user (:thief :fighter :paladin :mystic + :dwarf :elf :halfling)) + (values :arrow 'a)) + (22 (:user (:thief :fighter :paladin :mystic + :dwarf :elf :halfling)) + (values :quarrel 'a)) + (11 (:user (:cleric :druid :thief :fighter :paladin + :mystic :dwarf :elf :halfling)) + (values :sling-stone 'a)) + (2 (:user (:thief :fighter :paladin :mystic + :dwarf :elf :halfling)) + (values :blowgun 'd)) + (8 (:user (:thief :fighter :paladin :mystic + :dwarf :elf :halfling)) + (values :long-bow 'd)) + (5 (:user (:thief :fighter :paladin :mystic + :dwarf :elf :halfling)) + (values :short-bow 'd)) + (2 (:user (:thief :fighter :paladin :mystic + :dwarf :elf :halfling)) + (values :heavy-crossbow 'd)) + (5 (:user (:thief :fighter :paladin :mystic + :dwarf :elf :halfling)) + (values :light-crossbow 'd)) + (8 (:user (:cleric :druid :thief :fighter :paladin + :mystic :dwarf :elf :halfling)) + (values :sling 'd))) (ecase class ((a) (let* ((bonus (weapon-bonus 'a)) (cursedp (zerop (random 10))) (talent (and (percentp (* 5 (- 7 bonus))) - (choose 4 'biting - 5 'blinking - 5 'charming - 7 'climbing - 10 'curing - 3 'disarming - 4 'dispelling - 7 'flying - 7 'lightning - 5 'penetrating - 4 'refilling - 6 'screaming - 5 'seeking - 4 'sinking - 2 'slaying - 7 'speaking - 4 'stunning - 2 'teleporting - 5 'transporting - 4 'wounding))) + (pick (4 'biting) + (5 'blinking) + (5 'charming) + (7 'climbing) + (10 'curing) + (3 'disarming) + (4 'dispelling) + (7 'flying) + (7 'lightning) + (5 'penetrating) + (4 'refilling) + (6 'screaming) + (5 'seeking) + (4 'sinking) + (2 `(slaying + :opponent ,(opponent))) + (7 'speaking) + (4 'stunning) + (2 'teleporting) + (5 'transporting) + (4 'wounding)))) (number (ecase bonus ((1) (d 10 2)) ((2) (d 8 2)) @@ -740,7 +867,7 @@ :number ,number ,@(and cursedp `(:cursed t))))) ((d) (let* ((bonus (weapon-bonus 'd)) - (cursedp (zerop (random 10))) + (cursedp (cursedp 10)) (modifier (weapon-modifier bonus :missilep t)) (range (ecase (+ bonus (d 4)) ((2 3 4) nil) @@ -833,10 +960,14 @@ (sword () (multiple-value-bind (type class) - (pick (65 (values :normal-sword 'c)) - (19 (values :short-sword 'c)) - (8 (values :two-handed-sword 'd)) - (8 (values :bastard-sword 'd))) + (pick-matching (form) + (65 nil (values :normal-sword 'c)) + (19 nil (values :short-sword 'c)) + (8 (:user (:fighter :paladin :dwarf :mystic :elf)) + (values :two-handed-sword 'd)) + (8 (:user (:fighter :paladin :dwarf + :mystic :elf :halfling)) + (values :bastard-sword 'd))) (let* ((bonus (weapon-bonus class)) (cursedp (zerop (random 10))) (modifier (sword-modifier bonus)) @@ -847,30 +978,67 @@ ,@(and cursedp `(:cursed t)))))) (weapon () (multiple-value-bind - (type returnsp class) - (pick (7 (values :battle-axe nil 'd)) - (8 (values :hand-axe (choose 3 nil 1 t) 'b)) - (3 (values :blackjack nil 'c)) - (3 (values :bola (choose 2 nil 1 t) 'b)) - (5 (values :club nil 'c)) - (14 (values :dagger (choose 11 nil 3 t) 'b)) - (4 (values :one-handed-flail nil 'c)) - (2 (values :two-handed-flail nil 'd)) - (3 (values :halberd nil 'd)) - (8 (values :war-hammer nil 'c)) - (4 (values :javelin (choose 3 nil 1 t) 'b)) - (4 (values :lance nil 'd)) - (7 (values :mace nil 'c)) - (5 (values :morning-star nil 'c)) - (3 (values :net (choose 2 nil 1 t) 'b)) - (3 (values :pike nil 'd)) - (2 (values :pole-axe nil 'd)) - (12 (values :spear (choose 3 nil 1 t) 'b)) - (3 (values :whip nil 'c))) + (type returnsp intelpc class) + (pick-matching (form) + (7 (:user (:fighter :paladin :mystic :dwarf :elf)) + (values :battle-axe nil 30 'd)) + (8 (:user (:fighter :paladin :mystic :dwarf :thief + :elf :halfling)) + (values :hand-axe (choose 3 nil 1 t) nil 'b)) + (3 (:user (:fighter :paladin :mystic :dwarf :cleric + :elf :halfling)) + (values :blackjack nil nil 'c)) + (3 (:user (:fighter :paladin :mystic :dwarf :cleric + :thief :elf :halfling)) + (values :bola (choose 2 nil 1 t) nil 'b)) + (5 (:user (:fighter :paladin :mystic :dwarf + :thief :cleric :druid :elf :halfling)) + (values :club nil nil 'c)) + (14 (:user (:fighter :paladin :mystic :dwarf :magic-user + :thief :elf :halfling)) + (values :dagger (choose 11 nil 3 t) 50 'b)) + (4 (:user (:fighter :paladin :mystic :dwarf :cleric + :elf :halfling :thief)) + (values :one-handed-flail nil nil 'c)) + (2 (:user (:fighter :paladin :mystic :dwarf :cleric :elf)) + (values :two-handed-flail nil nil 'd)) + (3 (:user (:fighter :paladin :mystic :dwarf :elf)) + (values :halberd nil 20 'd)) + (8 (:user (:fighter :paladin :mystic :dwarf :cleric + :druid :elf :halfling :thief)) + (values :war-hammer nil 30 'c)) + (4 (:user (:fighter :paladin :mystic :dwarf :thief + :elf :halfling)) + (values :javelin (choose 3 nil 1 t) nil 'b)) + (4 (:user (:fighter :paladin :mystic :dwarf :elf)) + (values :lance nil nil 'd)) + (7 (:user (:fighter :paladin :mystic :dwarf :cleric :thief + :elf :halfling :druid)) + (values :mace nil 35 'c)) + (5 (:user (:fighter :paladin :mystic :dwarf :cleric :thief + :elf :halfling)) + (values :morning-star nil nil 'c)) + (3 (:user (:fighter :paladin :mystic :dwarf :cleric :thief + :druid :elf :halfling)) + (values :net (choose 2 nil 1 t) nil 'b)) + (3 (:user (:fighter :paladin :mystic :dwarf :elf)) + (values :pike nil 20 'd)) + (2 (:user (:fighter :paladin :mystic :dwarf :elf)) + (values :pole-axe nil 20 'd)) + (12 (:user (:fighter :paladin :mystic :dwarf :thief + :elf :halfling)) + (values :spear (choose 3 nil 1 t) nil 'b)) + (4 (:user (:fighter :paladin :mystic :dwarf :thief :cleric + :druid :elf :halfling :magic-user)) + (values :staff nil 20 'd)) + (3 (:user (:fighter :paladin :mystic :dwarf :thief :cleric + :druid :elf :halfling)) + (values :whip nil nil 'c))) (let* ((bonus (weapon-bonus class)) - (cursedp (zerop (random 10))) + (cursedp (cursedp 10)) (modifier (sword-modifier bonus)) - (intel (and (percentp 40) + (intel (and intelpc + (percentp intelpc) (weapon-intelligence)))) `(,type ,@(and returnsp `(:returning t)) @@ -878,15 +1046,21 @@ ,@modifier ,@intel ,@(and cursedp `(:cursed t))))))) - (pick ((if (symbol-match-p form :potion) 25 0) (list (potion))) - ((if (symbol-match-p form :scroll) 12 0) (list (scroll))) - ((if (symbol-match-p form :wandlike) 9 0) (list (wandlike))) - ((if (symbol-match-p form :ring) 6 0) (list (ring))) - ((if (symbol-match-p form :misc) 10 0) (list (misc-item))) - ((if (symbol-match-p form :armour) 10 0) (armour)) - ((if (symbol-match-p form :missile) 11 0) (list (missile))) - ((if (symbol-match-p form :sword) 9 0) (list (sword))) - ((if (symbol-match-p form :weapon) 8 0) (list (weapon)))))) + (pick-matching (form) + (25 (:type :potion) (list (potion))) + (12 (:type :scroll) (list (scroll))) + (9 (:type :wandlike :cursed nil) (list (wandlike))) + (6 (:type :ring) (list (ring))) + (10 (:type :misc) (list (misc-item))) + (10 (:type :armour + :user (:cleric :druid :fighter :paladin + :thief :dwarf :elf :halfling)) + (armour)) + (11 (:type :missile) (list (missile))) + (9 (:type :sword + :user (:fighter :paladin :mystic :thief :dwarf :elf :halfling)) + (list (sword))) + (8 (:type :weapon) (list (weapon)))))) (defun treasure-type (type-code) (labels ((common-fur-type () @@ -899,7 +1073,7 @@ 'mink 'sable)) (special (n) - (tagged-bag + (cons :special (loop repeat n collect @@ -1008,7 +1182,7 @@ (intern (format nil "STAR-~A" (string kind)))))))) (gems (n) - (tagged-bag + (cons :gems (loop while (plusp n) for i = (min n (d 5)) @@ -1043,14 +1217,14 @@ (2 (values 'good 4)) (1 (values 'very-good 8))) (setf mod-list - (append `(:size ,mod) mod-list)) + (append `(:quality ,mod) mod-list)) (setf value (* value mult)))) `(:kind ,kind :value ,(max 1 (round value)) ,@mod-list ,@(and (> i 1) `(:quantity ,i)))))))) (jewellery (n) - (tagged-bag + (cons :jewellery (loop while (plusp n) for i = (min n (d 5)) @@ -1111,13 +1285,13 @@ :encumbrance ,enc ,@(and (> i 1) `(:quantity ,i)))))))) (magic (&rest forms) - (tagged-bag :magic - (loop with list = nil - for (form n) on forms by #'cddr do - (loop repeat n do - (dolist (item (magic-item form)) - (push item list))) - finally (return list))))) + (cons :magic + (loop with list = nil + for (form n) on forms by #'cddr do + (loop repeat n do + (dolist (item (magic-item (list :type form))) + (push item list))) + finally (return list))))) (ecase type-code ;; treasure in lair @@ -1130,7 +1304,7 @@ (and (percentp 50) (gems (d 6 6))) (and (percentp 50) (jewellery (d 6 6))) (and (percentp 10) (special (d 2))) - (and (percentp 30) (magic t 3)))) + (and (percentp 30) (magic :any 3)))) ((b) (bag (tagged-bag :coins (and (percentp 50) `(:cp ,(* 1000 (d 8)))) (and (percentp 25) `(:sp ,(* 1000 (d 6)))) @@ -1147,7 +1321,7 @@ (and (percentp 50) (gems (d 6 6))) (and (percentp 50) (jewellery (d 6 6))) (and (percentp 5) (special (d 2))) - (and (percentp 10) (magic t 2)))) + (and (percentp 10) (magic :any 2)))) ((d) (bag (tagged-bag :coins (and (percentp 10) `(:cp ,(* 1000 (d 8)))) (and (percentp 15) `(:sp ,(* 1000 (d 12)))) @@ -1155,7 +1329,7 @@ (and (percentp 30) (gems (d 8))) (and (percentp 30) (jewellery (d 8))) (and (percentp 10) (special (d 2))) - (and (percentp 10) (magic t 1 :potion 1)))) + (and (percentp 10) (magic :any 1 :potion 1)))) ((e) (bag (tagged-bag :coins (and (percentp 5) `(:cp ,(* 1000 (d 10)))) (and (percentp 30) `(:sp ,(* 1000 (d 12)))) @@ -1164,7 +1338,7 @@ (and (percentp 10) (gems (d 10))) (and (percentp 10) (jewellery (d 10))) (and (percentp 15) (special (d 2))) - (and (percentp 25) (magic t 3 :scroll 1)))) + (and (percentp 25) (magic :any 3 :scroll 1)))) ((f) (bag (tagged-bag :coins (and (percentp 30) `(:sp ,(* 1000 (d 10 2)))) (and (percentp 20) `(:ep ,(* 1000 (d 8)))) @@ -1182,7 +1356,7 @@ (and (percentp 25) (gems (d 6 3))) (and (percentp 25) (jewellery (d 10))) (and (percentp 30) (special (d 3))) - (and (percentp 35) (magic t 4 :scroll 1)))) + (and (percentp 35) (magic :any 4 :scroll 1)))) ((h) (bag (tagged-bag :coins (and (percentp 25) `(:cp ,(* 1000 (d 8 3)))) (and (percentp 50) `(:sp ,(* 1000 (d 100)))) @@ -1192,13 +1366,13 @@ (and (percentp 50) (gems (d 100))) (and (percentp 50) (jewellery (* 10 (d 4)))) (and (percentp 10) (special (d 2))) - (and (percentp 15) (magic t 4 :potion 1 :scroll 1)))) + (and (percentp 15) (magic :any 4 :potion 1 :scroll 1)))) ((i) (bag (tagged-bag :coins (and (percentp 30) `(:pp ,(* 1000 (d 8))))) (and (percentp 50) (gems (d 6 2))) (and (percentp 50) (jewellery (d 6 2))) (and (percentp 5) (special (d 2))) - (and (percentp 15) (magic t 1)))) + (and (percentp 15) (magic :any 1)))) ((j) (bag (tagged-bag :coins (and (percentp 25) `(:cp ,(* 1000 (d 4)))) (and (percentp 10) `(:sp ,(* 1000 (d 3))))))) @@ -1228,7 +1402,7 @@ (and (percentp 5) (gems (d 2))) (and (percentp 5) (gems (d 4))) (and (percentp 2) (special 1)) - (and (percentp 2) (magic t 1)))) + (and (percentp 2) (magic :any 1)))) ((v) (bag (tagged-bag :coins (and (percentp 10) `(:sp ,(d 100))) (and (percentp 5) `(:ep ,(d 100))) @@ -1237,7 +1411,7 @@ (and (percentp 10) (gems (d 2))) (and (percentp 10) (gems (d 4))) (and (percentp 5) (special 1)) - (and (percentp 5) (magic t 1)))) + (and (percentp 5) (magic :any 1)))) ;; unguarded treasures ((unguarded-1) @@ -1246,32 +1420,81 @@ (and (percentp 50) `(:gp ,(* 10 (d 6))))) (and (percentp 5) (gems (d 6))) (and (percentp 2) (jewellery (d 6))) - (and (percentp 2) (magic t 1)))) + (and (percentp 2) (magic :any 1)))) ((unguarded-2 unguarded-3) (bag (tagged-bag :coins `(:sp ,(* 100 (d 12))) (and (percentp 50) `(:gp ,(* 100 (d 6))))) (and (percentp 10) (gems (d 6))) (and (percentp 5) (jewellery (d 6))) - (and (percentp 8) (magic t 1)))) + (and (percentp 8) (magic :any 1)))) ((unguarded-4 unguarded-5) (bag (tagged-bag :coins `(:sp ,(* 1000 (d 6))) `(:gp ,(* 200 (d 6)))) (and (percentp 20) (gems (d 8))) (and (percentp 10) (jewellery (d 8))) - (and (percentp 10) (magic t 1)))) + (and (percentp 10) (magic :any 1)))) ((unguarded-6 unguarded-7) (bag (tagged-bag :coins `(:sp ,(* 2000 (d 6))) `(:gp ,(* 500 (d 6)))) (and (percentp 30) (gems (d 10))) (and (percentp 15) (jewellery (d 10))) - (and (percentp 15) (magic t 1)))) + (and (percentp 15) (magic :any 1)))) ((unguarded-8 unguarded-9) (bag (tagged-bag :coins `(:sp ,(* 5000 (d 6))) `(:gp ,(* 1000 (d 6)))) (and (percentp 40) (gems (d 12))) (and (percentp 20) (jewellery (d 12))) - (and (percentp 20) (magic t 1))))))) + (and (percentp 20) (magic :any 1))))))) + +(defconstant combine-treasures + '((:coins (t . +)) + (t . append))) + +(defun combine2 (spec a b) + (labels ((comb (tag x y) + (dolist (pair spec) + (let ((label (car pair))) + (when (or (eq label t) + (eq label tag)) + (return-from comb + (let ((method (cdr pair))) + (etypecase method + (list (combine2 method x y)) + ((member +) (list (+ (car x) (car y)))) + ((or symbol function) + (funcall method x y)))))))) + (error "No combiner found for ~S." tag))) + (let ((list nil)) + (dolist (pair a) + (let* ((tag (car pair)) + (match (assoc tag b))) + (push (if (null match) + pair + (cons tag + (comb tag (cdr pair) (cdr match)))) + list))) + (dolist (pair b) + (let* ((tag (car pair)) + (match (assoc tag a))) + (unless match + (push pair list)))) + (nreverse list)))) + +(defun combine (spec &rest lists) + (reduce (lambda (x y) (combine2 spec x y)) lists)) + +(defun treasure (types) + (apply #'combine + combine-treasures + (loop for type in types + collect (treasure-type type)))) + +(defun select-spells (table spells) + (loop for n in spells + for list across table + collect (sort (loop repeat n collect (apply #'choose-uniformly list)) + #'string<))) diff --git a/equip.tex b/equip.tex index 59bb202..653bd7c 100644 --- a/equip.tex +++ b/equip.tex @@ -106,6 +106,35 @@ \end{tabular} \end{set} +\begin{set} +\begin{tabular}{\shade lccMrcccMlccr} \hlx*{hv} + \tt{Siege equipment} \\ + \th{Weapon} & \th{Cost (gp)} & \th{Enc (cn)} & \th{AC} & + \th{HP} & \th{Crew} & \th{Range} & \th{Damage} & \th{Rate} & + \th{Ammo (gp/wk)} \\ \hlx{vhv} + Ballista & \075 & \06\,000\s t & 4 & + \09 & \04 & \0\05--100/200/300 & \d{1d10} + 6 & 1/2 & + 2\,000 \\ \hlx{+} + Catapult, light & 150 & 12\,000\s t & 4 & + 18 & \06 & 150--200/250/300 & \d{1d8} + 8 & + 1/5 & 4\,000 \\ \hlx{+} + Catapult, heavy & 250 & 18\,000\s t & 0 & + 27 & \08 & 175--250/325/400 & \d{1d10} + 10 & + 1/6 & 6\,000 \\ \hlx{+} + Trebuchet & 400 & 24\,000\s t & 0 & + 36 & 12 & 100--250/400/500 & \d{1d12} + 13 & + 1/6 & 8\,000 \\ \hlx{+} + Bore & 150 & \03\,000 & -4 & + 50 & 10 & --- & \d{1d6} + 14 & + 1/2 & --- \\ \hlx{+} + Ram, battering & 100 & \03\,000 & -4 & + 50 & 10 & --- & \d{1d6} + 8 & + 1/2 & --- \\ \hlx*{vh+v} + \multicolumn{7}{l}{\small\itshape \s t\quad + Towing encumbrance is 1/12 of that listed.} +\end{tabular} +\end{set} + \end{document} %%% Local Variables: diff --git a/monsters.tex b/monsters.tex index f97564d..7cc278c 100644 --- a/monsters.tex +++ b/monsters.tex @@ -1624,7 +1624,18 @@ turns; with colour change). \begin{monster}{Harpy}{ 60 \flying 150 & - 3*(M), F6, XP50 d{1d4} \times 10$ years) & + 3*(M), F6, XP50 & + AC7, T17; claw ($2 \times \d{1d4}$) \emph{or} weapon & + M, R(H,M); 1d6~(2d4) & + I7, C, ML7; C} + Singing: hearers SvS or are \emph{charmed}. +\end{monster} + +\begin{monster}[3]{Haunt**}{ + \h Banshee & + \flying 60 & + 13$^4$*(M), ---, XP5150 & + AC$^-3$, T9; touch (age $\d{1d4} \times 10$ years) & U, VR(R); 1~(1) & I12, C, ML9; E, N, O \\ \h Ghost & diff --git a/spells.tex b/spells.tex index 47b508d..e248b07 100644 --- a/spells.tex +++ b/spells.tex @@ -43,6 +43,7 @@ \newenvironment{spells}[1]{% \raggedright% \begin{multicols}{2}[\sect{#1}]% + \small% \itemcount1% \def\levelstart{% \medskip% @@ -53,8 +54,8 @@ \let\makelabel\hbox% \desclabelstyle{\nextlinelabel}% \desclabelwidth{2em}% - \parsep\z@% - \itemsep\medskipamount% + \parsep\smallskipamount% + \itemsep\smallskipamount% }% \ignorespaces% }% @@ -516,7 +517,14 @@ Water springs from ground or wall. Water for 12 people is about 50 gallons. Heals $\d{2d6} + 2$\,hp. Reverse \emph{cause serious wounds}: causes damage. \spell{Dispel magic}{$120'$, P, $20'$ cube} -Destroys spells in area; fails $L' - L$ in 20. FIXME touch dispel +Destroys spells in area; fails $L' - L$ in 20. Also \emph{touch dispel} (T, +P, 1 spell effect): must be used within 1T, cannot cast other spells until +used; nonmagical containers double effective level of contained items, max +distance to item $5'$, random selection between contained items; item levels +and effects are: potions (6, destroyed), scroll (as level needed to cast, +destroyed), wand or staff (12; drains $L$ charges), misc (36 or as maker, +drains $L$ charges or deactivated for 1d10 rounds); other permanent (18, +deactivated for 1d10 rounds). \spell{Neutralize poison*}{T, P, 1 creature/container/object} Makes poison harmless; revives victim killed by poison in previous 10 @@ -533,7 +541,8 @@ communication with treants. \spell{Sticks to snakes}{$120'$, 6T, 2d8 sticks} Turns sticks into snakes (3 in 6 chance per snake of being poisonous). -Stats: MV90, HD1(S), F1, XP10/13, AT bite (1d4, poison), I2, N, ML12. +MV90; HD1(S), 20\,hp, F1, XP10/13; AC6, T19; bite (1d4, poison); A; I2, N, +ML12. \level @@ -572,7 +581,7 @@ undead with 9HD or less, target must SvS (penalty $-2$) or be destroyed half). Reverse \emph{finger of death} ($60'$, I, 1 creature): SvDR or die; against undead with more than 9HD, cures 3d10\,hp damage. -\spell{Truesight}{0, $1\textrm{T} + L\textrm{R}$} +\spell{Truesight}{0, $1\textrm{T} + L\textrm{R}$, $120'$} Caster can see all hidden, invisible and Ethereal objects in range, in their true forms, undisguised; experience and power (level/HD) and basic character traits (alignment-ish) detected. @@ -650,11 +659,11 @@ for 2d10 days. Reverse \emph{life drain}: inflicts 1ED:Wt. Protects target from all non-magical environmental damage. \spell{Travel}{0, $L$T} -Allows free travel. Flying (MV\flying360); move between planes by one -round's concentration (at most 1 per turn), bringing along $\lfloor L/5 -\rfloor$ others touched; assume gaseous form by one round's concentration -(with all equipment; MV\flying720, AC$^-2$, cannot pass \emph{protection from -evil} or \emph{anti-magic shell}). +Allows free travel. MV\flying360; move between planes by one round's +concentration (at most 1 per turn), bringing along $\lfloor L/5 \rfloor$ +others touched; assume gaseous form by one round's concentration (with all +equipment; MV\flying720, cannot pass \emph{protection from evil} or +\emph{anti-magic shell}). \spell{Wish}{special} See notes in rules. @@ -796,7 +805,7 @@ others must use \emph{dispel magic} or \emph{dispel evil}. \spell{Weather control}{0, C, weather within $240'$} Caster can create a weather condition; must be outdoors. Possible effects: -\begin{description*} +\begin{description} \item[Rain] Missile hit rolls have $-2$ penalty; after 3 turns, ground muddy, movement halved. \item[Snow] Visibility $20'$; half movement; water may @@ -809,7 +818,7 @@ Caster can create a weather condition; must be outdoors. Possible effects: move 50\% faster; sandstorm in desert ($20'$ visibility). \item[Tornado] Inland, whirlwind as 12HD air elemental; at sea, storm or gale. -\end{description*} +\end{description} \end{spells} @@ -941,10 +950,18 @@ turn. \spell{Create air}{$10'$, $6L$T, $20'$ cube of air} Cast on area to move effect with area; cast on person to allow breathing (and -flight) in hostile environments. +flight) in hostile environments (e.g., under water, in poison gas). Cannot +negate effects of breath weapon. \spell{Dispel magic}{$120'$, P, $20'$ cube} -Destroys spells in area; fails $L' - L$ in 20. FIXME touch dispel +Destroys spells in area; fails $L' - L$ in 20. Also \emph{touch dispel} (T, +P, 1 spell effect): must be used within 1T, cannot cast other spells until +used; nonmagical containers double effective level of contained items, max +distance to item $5'$, random selection between contained items; item levels +and effects are: potions (6, destroyed), scroll (as level needed to cast, +destroyed), wand or staff (12; drains $L$ charges), misc (36 or as maker, +drains $L$ charges or deactivated for 1d10 rounds); other permanent (18, +deactivated for 1d10 rounds). \spell{Fire ball}{$240'$, I, $40'\phi$} Causes $L$d6 damage to all in effect (max 20d6, SvS for half damage). @@ -1190,14 +1207,14 @@ at unfinished ends. Casting time up to 12 turns; may be used to modify \emph{stoneformed} objects. Final casting to `lock' item down. Can be used to create transparent and translucent stones. -\spell{Wall of iron}{$120'$, P, 500\,sq,ft} +\spell{Wall of iron}{$120'$, P, 500\,sq\,ft} Creates a $2'$ thick vertical wall; must be vertical and supported. When toppled, cases 10d10 damage to anyone underneath. Wall has hp equal to the caster. \spell{Weather control}{0, C, weather within $240'$} Caster can create a weather condition; must be outdoors. Possible effects: -\begin{description*} +\begin{description} \item[Rain] Missile hit rolls have $-2$ penalty; after 3 turns, ground muddy, movement halved. \item[Snow] Visibility $20'$; half movement; water may @@ -1210,7 +1227,7 @@ Caster can create a weather condition; must be outdoors. Possible effects: move 50\% faster; sandstorm in desert ($20'$ visibility). \item[Tornado] Inland, whirlwind as 12HD air elemental; at sea, storm or gale. -\end{description*} +\end{description} \level @@ -1268,8 +1285,8 @@ at the time, the caster will know who and where that person is. Caster does not need to be on the same plane of existence. \spell{Sword}{$30'$, $L$R} -Sword does 1d10 damage against any opponent in range. Caster must -concentrate for sword to attack. +Sword does 1d10 damage against any opponent in range; two attacks per round; +hit rolls as caster. Caster must concentrate for sword to attack. \spell{Teleport any object}{T, I, 1 500\,cn object} Teleports an object, with normal chances of error. Unwilling creature or @@ -1318,7 +1335,8 @@ etc. Can only be removed by \emph{wish} or \emph{disintegrate}. {$120'$, as \emph{charm person}, 30HD of creatures in $20'$ cube} Charms up to 30HD or levels of creatures; each may save at $-2$. If caster attacks a charmed creature, its charm is broken; others seeing attack may -save again. +save again. Reverse \emph{remove charm} ($120'$, 1T, $20'$ cube): removes +and prevents all charm effects in volume. \spell{Mind barrier*}{$10'$, $6L$T, 1 creature} Prevents \emph{ESP}, \emph{clairvoyance}, \emph{clairaudience}, \emph{crystal @@ -1356,7 +1374,7 @@ item down. Place symbol on object or in mid-air. When creature passes over or through the symbol, or touches or reads it, effect occurs (SvS only for magic-users, elves etc., if touched or read but not passed). -\begin{description*} +\begin{description} \item[Death] Slays creature with 75\,hp or less. \item[Discord] Attacks allies, or is otherwise \emph{confused} until dispelled or cured (e.g., by \emph{cureall}). @@ -1365,14 +1383,14 @@ elves etc., if touched or read but not passed). abilities until dispelled or cured (e.g., by \emph{cureall}). \item[Sleep] Falls asleep for $\d{1d10} + 10$ hours or until dispelled. \item[Stunning] Stuns creature with 150\,hp or less for 2d6 rounds. -\end{description*} +\end{description} \spell{Travel}{0, $L$T} -Allows free travel. Flying (MV\flying360); move between planes by one -round's concentration (at most 1 per turn), bringing along $\lfloor L/5 -\rfloor$ others touched; assume gaseous form by one round's concentration -(with all equipment; MV\flying720, AC$^-2$, cannot pass \emph{protection from -evil} or \emph{anti-magic shell}). +Allows free travel. MV\flying360); move between planes by one round's +concentration (at most 1 per turn), bringing along $\lfloor L/5 \rfloor$ +others touched; assume gaseous form by one round's concentration (with all +equipment; MV\flying720, cannot pass \emph{protection from evil} or +\emph{anti-magic shell}). \level diff --git a/tables.cls b/tables.cls index 241b020..d0bebf7 100644 --- a/tables.cls +++ b/tables.cls @@ -26,6 +26,13 @@ \global\advance\sectcount\@ne% \global\count0\@ne% } + +\def\subsect#1{% + \goodbreak\medskip% + {\normalsize\bfseries\sffamily#1}\par% + \nobreak\@nobreaktrue% +} + \AtEndDocument{\label{pgn:\the\sectcount}} %%% tables diff --git a/treasure.tex b/treasure.tex index d5dde7b..42ef6b8 100644 --- a/treasure.tex +++ b/treasure.tex @@ -4,16 +4,13 @@ \def\nil{\multicolumn{2}{c}{---}} \def\lnil{\multicolumn{2}{l}{---}} -\makeatletter -\def\subsect#1{\goodbreak\medskip\textbf{#1}\par\nobreak\@nobreaktrue} - \renewenvironment{description}{% \basedescript{% \let\makelabel\textit% \desclabelstyle{\pushlabel}% \desclabelwidth{2em}% \parsep\z@% - \itemsep\medskipamount% + \itemsep\smallskipamount% }% }{% \endbasedescript% @@ -373,6 +370,19 @@ 97--98 & Wishes \\ \hlx{+} 99--00 & X-ray vision \\ \hlx*{vh} \end{tabular} +\line +\begin{tabular}{\shade cl} \hlx*{hv} + \tt{Elements (for staff/ring)} \\ + \th{d\%} & \th{Element} \\ \hlx{vhv} + 01--21 & Air \\ \hlx{+} + 22--42 & Earth \\ \hlx{+} + 43--63 & Fire \\ \hlx{+} + 64--84 & Water \\ \hlx{+} + 85--91 & Air and Water \\ \hlx{+} + 92--98 & Earth and Fire \\ \hlx{+} + 99--00 & All elements \\ \hlx*{vh} +\end{tabular} + \end{set} \begin{set} @@ -711,47 +721,28 @@ \end{tabular} \colgap \begin{tabular}{\shade cl} \hlx*{hv} - \tt{Opponents} \\ - \th{d\%} & \th{Type} \\ \hlx{vhv} - 00--06 & Bugs \\ \hlx{+} - 05--09 & Constructs \\ \hlx{+} - 10--15 & Dragonkind \\ \hlx{+} - 16--24 & Enchanted monsters \\ \hlx{+} - 25--36 & Giantkind \\ \hlx{+} - 37--48 & Lycanthropes \\ \hlx{+} - 49--52 & Planar monsters \\ \hlx{+} - 53--58 & Regenerating monsters \\ \hlx{+} - 59--67 & Reptiles, dinosaurs \\ \hlx{+} - 68--70 & Spell-immune monsters \\ \hlx{+} - 71--76 & Spellcasters \\ \hlx{+} - 77--88 & Undead \\ \hlx{+} - 89--94 & Water-breathing monsters \\ \hlx{+} - 95--00 & Weapon-using monsters \\ \hlx*{vh} -\end{tabular} -\colgap -\begin{tabular}{\shade cl} \hlx*{hv} \tt{Missile talents} \\ - \th{d\%} & \th{Talent} \\ \hlx{vhv} - 01--04 & Biting \\ \hlx{+} - 05--09 & Blinking \\ \hlx{+} - 10--14 & Charming \\ \hlx{+} - 15--21 & Climbing \\ \hlx{+} - 22--31 & Curing \\ \hlx{+} - 32--34 & Disarming \\ \hlx{+} - 35--38 & Dispelling \\ \hlx{+} - 39--45 & Flying \\ \hlx{+} - 46--52 & Lightning \\ \hlx{+} - 53--57 & Penetrating \\ \hlx{+} - 58--61 & Refilling \\ \hlx{+} - 62--67 & Screaming \\ \hlx{+} - 68--72 & Seeking \\ \hlx{+} - 73--76 & Sinking \\ \hlx{+} - 77--78 & Slaying \\ \hlx{+} - 79--85 & Speaking \\ \hlx{+} - 86--89 & Stunning \\ \hlx{+} - 90--91 & Teleporting \\ \hlx{+} - 92--96 & Transporting \\ \hlx{+} - 97--00 & Wounding \\ \hlx*{vh} + \th{d\%} & \th{Talent} \\ \hlx{vhv} + 01--04 & Biting \\ \hlx{+} + 05--09 & Blinking \\ \hlx{+} + 10--14 & Charming \\ \hlx{+} + 15--21 & Climbing \\ \hlx{+} + 22--31 & Curing \\ \hlx{+} + 32--34 & Disarming \\ \hlx{+} + 35--38 & Dispelling \\ \hlx{+} + 39--45 & Flying \\ \hlx{+} + 46--52 & Lightning \\ \hlx{+} + 53--57 & Penetrating \\ \hlx{+} + 58--61 & Refilling \\ \hlx{+} + 62--67 & Screaming \\ \hlx{+} + 68--72 & Seeking \\ \hlx{+} + 73--76 & Sinking \\ \hlx{+} + 77--78 & Slaying \emph{opp.} \\ \hlx{+} + 79--85 & Speaking \\ \hlx{+} + 86--89 & Stunning \\ \hlx{+} + 90--91 & Teleporting \\ \hlx{+} + 92--96 & Transporting \\ \hlx{+} + 97--00 & Wounding \\ \hlx*{vh} \end{tabular} \quad \begin{tabular}{\shade cl} \hlx*{hv} @@ -779,6 +770,25 @@ 95--99 & Watching \\ \hlx{+} 00 & Wishing \\ \hlx*{vh} \end{tabular} +\colgap +\begin{tabular}{\shade cl} \hlx*{hv} + \tt{Opponents} \\ + \th{d\%} & \th{Type} \\ \hlx{vhv} + 00--06 & Bugs \\ \hlx{+} + 05--09 & Constructs \\ \hlx{+} + 10--15 & Dragonkind \\ \hlx{+} + 16--24 & Enchanted monsters \\ \hlx{+} + 25--36 & Giantkind \\ \hlx{+} + 37--48 & Lycanthropes \\ \hlx{+} + 49--52 & Planar monsters \\ \hlx{+} + 53--58 & Regenerating monsters \\ \hlx{+} + 59--67 & Reptiles, dinosaurs \\ \hlx{+} + 68--70 & Spell-immune monsters \\ \hlx{+} + 71--76 & Spellcasters \\ \hlx{+} + 77--88 & Undead \\ \hlx{+} + 89--94 & Water-breathing monsters \\ \hlx{+} + 95--00 & Weapon-using monsters \\ \hlx*{vh} +\end{tabular} \quad \end{set} @@ -819,7 +829,7 @@ 01--10 & Clairaudience \\ \hlx{+} 11--20 & Clairvoyance \\ \hlx{+} 21--30 & ESP \\ \hlx{+} - 31--35 & Extra damage ($\times\,5$ or more)\s d + 31--35 & Extra damage ($\times\,4$ or more)\s d \\ \hlx{+} 36--40 & Flying \\ \hlx{+} 41--45 & Healing (6\,hp)\s d \\ \hlx{+} @@ -835,20 +845,16 @@ \end{tabular} \end{set} -\sect{Magical items} - -\begin{multicols}{2} +\begin{multicols}{2}[\sect{Magical items}] \raggedright \subsect{Potions} -\begin{itemize*} -\item \textbf{Level:} Treat as 6th level. -\item \textbf{Duration:} Usually $\d{1d6} + 6$ turns. -\item \textbf{Control:} User must concentrate to control victims: cannot - fight, half movement; victim allowed SvS, but attempt may be repeated each - round. Range is $60'$. -\end{itemize*} +Treat as 6th level magic. Duration usually $\d{1d6} + 6$ turns. + +\textbf{Control potions:} User must concentrate to control victims: cannot +fight, half movement; victim allowed SvS, but attempt may be repeated each +round. Range is $60'$. \begin{description} @@ -1108,10 +1114,7 @@ \subsect{Wands} -\begin{itemize*} -\item \textbf{Charges:} Usually 2d10. -\item \textbf{Level:} Treat as 6th level. -\end{itemize*} +Usually 2d10 charges. Treat as 6th level magic. \begin{description} @@ -1151,10 +1154,7 @@ \subsect{Staves} -\begin{itemize*} -\item \textbf{Charges:} Usually 3d10. -\item \textbf{Level:} Treat as 8th level. -\end{itemize*} +Usually 3d10 charges. Treat as 8th level magic. \begin{description} @@ -1185,17 +1185,6 @@ Usable as $+2$ weapon. - \begin{tabular}[C]{\shade cl} \hlx*{hv} - \th{d\%} & \th{Element} \\ \hlx{vhv} - 01--21 & Air \\ \hlx{+} - 22--42 & Earth \\ \hlx{+} - 43--63 & Fire \\ \hlx{+} - 64--84 & Water \\ \hlx{+} - 85--91 & Air and Water \\ \hlx{+} - 92--98 & Earth and Fire \\ \hlx{+} - 99--00 & Elemental power \\ \hlx*{vh} - \end{tabular} - \item[Harming] Does $\d{1d6} + 1$ extra damage (uses charge). Also \emph{cause blindness} (2), \emph{cause disease} (2), \emph{cause serious wounds} (3), \emph{create poison} (4). @@ -1207,12 +1196,13 @@ \item[Power] As \emph{staff of striking}; also \emph{fire ball}, \emph{lightning bolt}, \emph{ice storm}, \emph{continual light}, or - \emph{telekinesis} (up to 2400\,cn, 6 rounds), one charge each. + \emph{telekinesis} (inanimate objects up to 2400\,cn, 6 rounds), one charge + each. \item[Snake staff] Usable as $+1$ weapon. Turns into snake on command; SvS - or coils round man-size target for 1d4 turns or commanded. MV60; HD3, - 20\,hp, C3, XP6; AC5, T17, coil; ML12. Spend charges to improve hit roll, - or transfer \emph{cure} (no range limit). + or coils round man-size target for 1d4 turns or commanded. MV60; HD3(M), + 20\,hp, C3, XP6; AC5, T17, coil; A; ML12. Spend charges to improve hit + roll, or transfer \emph{cure} (no range limit). \item[Striking] Causes 2d6 damage per hit (uses charge). @@ -1245,6 +1235,591 @@ \item[Inertia] Spear $+3$. Stops or releases on command; stores momentum while stopped. +\item[Parrying] Rod $+5$ (does $\d{1d8} + 5$ damage, no $\delta S$); may + \emph{parry} attacks ($+5$ to AC in mel\'ee). + +\item[Victory] Combat Results roll biased by $+25$; combat results difference + capped at 100. + +\item[Weaponry] Rod $+5$; may split into two $+2$ rods which may each split + into two $+1$ rods. Cannot divide by accident; easily reassembled. All + rods do $\d{1d8} + \delta G$ damage (no $\delta S$). + +\item[Wyrm] Rod $+5$ (does $\d{1d8} + 5$ damage, no $\delta S$). On command, + once per day, changes into small dragon (d10: 1--5 10 gold, 6--8 blue, + 9--10 black) with 30\,hp, harmed only by magic; may be magically healed. + +\end{description} + +\subsect{Rings} + +Maximum one ring per hand. + +\begin{description} + +\item[Animal control] Command 1d6 normal or one giant animal; no save; + requires concentration; animals may flee or attack afterwards. Usable once + per turn. + +\item[Delusion] Believed to be some other kind of ring. + +\item[Djinni summoning] Summon djinni to serve for one day. Usable once per + week. + +\item[Ear] Worn as earring. Placed against surface; user hears sounds within + $60'$ of surface. Usable three times per day. + +\item[Elemental adaptation] Permits vision and breathing on elemental plane. + +\item[Fire resistance] Withstand normal fire; $+2$ to save against fire and + damage biased by $-1$ per die. + +\item[Holiness] Worn during meditation for spells; gain 1 spell each of + levels 1--3. Cleric gains $+1$ on Turning rolls. + +\item[Human control] Control up to 6HD (NM is $\tfrac{1}{2}$), similar to + \emph{charm person}. Lasts until cancelled, ring removed, or charm removed + by \emph{dispel magic} or \emph{remove charm}. + +\item[Invisibility] Wearer becomes invisible (with items carried) while ring + worn; becomes visible if attacking or casting spells. Usable once per + turn; no duration limit. + +\item[Life protection] Negates 1d6 energy drain attacks. At zero, becomes + \emph{ring of protection $+1$}; at $-1$, disintegrates. + +\item[Memory] Recall one spell cast within 1 turn. Usable once per day. + +\item[Plant control] Control plants (and plantlike monsters) in $30'$ square + within $60'$; plants can entangle but not damage. Requires concentration. + +\item[Protection] Bonus to AC and saving throws. A \emph{ring of protection + $+1$, 5$'$ radius} applies to all within area. + +\item[Quickness] Move and attack at double speed for one turn. Usable once + per day. + +\item[Regeneration] Regenerates 1\,hp per turn; fingers regrow in 24 hours, + limbs in 1 week. Cannot regenerate fire or acid damage. Will revive dead + characters. + +\item[Remedies] Once per day, \emph{cure blindness}, \emph{cure disease}, + \emph{remove curse} or \emph{neutralize poison}, as C25. + +\item[Safety] Can retrospectively make saving throws; works 1d4 times and + disintegrates. + +\item[Seeing] Can see all hidden, invisible and Ethereal objects within + $120'$, in their true forms, undisguised; experience and power (level/HD) + and basic character traits (alignment-ish) detected. Duration 3 turns; + usable once per day. + +\item[Spell eating] As \emph{ring of spell turning}, but `eats' user's memory + of spells after first one cast. A \emph{remove curse} from C25 allows + removal of ring; from C36 turns it into a \emph{ring of spell turning}. + +\item[Spell storing] Contains 1d6 spells; wearer knows spells and effects. + Spells replaced by casting at ring. About 20\% of rings contain cleric + spells. Effects dispelled as M5 or C8. + +\item[Spell turning] Reflects 2d6 spells back to caster per day. + +\item[Survival] Contains $\d{1d\%} + 100$ charges; one charge for survival + without food or water for 24 hours, or without air for 1 hour; turns black + when 5 charges left. + +\item[Telekinesis] Move inanimate objects of up to 2000\,cn by concentration, + for distance of $50'$. + +\item[Truth] Detects lies, three times per day. Ring informs wearer of power + telepathically. + +\item[Truthfulness] Ring informs wearer it is \emph{ring of truth}; when + activated, wearer cannot lie (or evade). A \emph{remove curse} by C26 + allows removal. + +\item[Truthlessness] Ring informs wearer it is \emph{ring of truth}; when + activated, wearer cannot tell the truth. A \emph{remove curse} by C26 + allows removal. + +\item[Water walking] Allows walking on any body of water without sinking. + +\item[Weakness] Strength becomes 3 within 1d6 rounds; \emph{remove curse} + allows removal. + +\item[Wishes] Grants 1--4 wishes (1d10: 1--4 1, 5--7 2, 8--9 3, 10 4). + +\item[X-ray vision] See $30'$ through stone walls (or $60'$ through wood, + cloth or water) by concentrating, detecting traps and secret doors; blocked + by gold or lead; inspect $10' \times 10'$ area per turn. Usable once per + hour. + +\end{description} + +\subsect{Miscellaneous items} + +\begin{description} + +\item[Amulet of protection from crystal balls and ESP] Wearer cannot be spied + upon by a crystal ball or any form of \emph{ESP}. + +\item[Bag of devouring] Looks like small sack. Items in the bag are lost + forever after $\d{1d6} + 6$ turns. + +\item[Bag of holding] Looks like small sack. Holds up to 10\,000\,cn of $10' + \times 5' \times 3'$ items; weighs only 600\,cn when full. + +\item[Boat, undersea] Looks like riverboat; AC4, 40 hull points. Obeys + commands to start, stop, turn, submerge, level off, and surface; bestows + \emph{water breathing} on passengers and crew. + +\item[Boots of levitation] Move up and down (only) at $20'$ per round, + carrying up to 2000\,cn. No duration limit. + +\item[Boots of speed] Move at 240 for 12 hours (must rest for 1 day + afterwards). + +\item[Boots of travelling and leaping] Need no rest during normal movement; + may jump $10'$ and $30'$ across. + +\item[Bowl of commanding water elementals] $3'\phi$; summons a 12HD water + elemental (takes 1 turn), allowing control (requires concentration; + elemental is hostile afterwards). Usable once per day. + +\item[Brazier of commanding fire elementals] Summons a 12HD fire elemental + (takes 1 turn), allowing control (requires concentration; elemental is + hostile afterwards). Usable once per day. + +\item[Broom of flying] On command, carries owner at MV\flying240 (can carry + 2000\,cn at MV\flying180). + +\item[Censer of controlling air elementals] Summons a 12HD air elemental + (takes 1 turn), allowing control (requires concentration; elemental is + hostile afterwards). Usable once per day. + +\item[Chime of time] $3''$ silvery metal stick. On command keeps track of + time, chiming every hour (audible by all within $60'$; a \emph{silence + 15$'$ radius} spell dampens it to $30'$, but is dispelled). On command, + shows time as gold colour extending from one end to other. + +\item[Crystal ball] See any place or object thought about; image clarity + depends on familiarity with target. Image lasts 1 turn; usable three times + per day. + +\item[Crystal ball with clairaudience] As \emph{crystal ball}, but can hear + sound through ears of creature in area viewed. + +\item[Crystal ball with ESP] As \emph{crystal ball}, but can listen to + thoughts of creature in area viewed. + +\item[Displacer cloak] Wearer appears to be $5'$ from actual position; $+2$ + on saves against spells, wands, turn-to-stone; $-2$ to hit in mel\'ee; + most missile attacks fail automatically. + +\item[Drums of panic] Hearers $10'$--$240'$ away must SvS or flee for 3 + turns. + +\item[Efreeti bottle] Heavy jug $3'$ high. When unsealed and unstoppered, + efreeti emerges to serve once per day for 101 days. + +\item[Egg of wonder] Thrown up to $60'$ range; creature emerges and grows to + full size, obeys thrower's commands; disappears after one hour. + \begin{tabular}[C]{\shade cl|cl} \hlx*{hv} + \th{1d12} & \th{Animal} & \th{1d12} & \th{Animal} \\ \hlx{vhv} + \01 & Baboon, rock & \07 & Cat, leopard \\ \hlx{+} + \02 & Bat, giant & \08 & Ferret, giant \\ \hlx{+} + \03 & Bear, black & \09 & Lizard, gecko \\ \hlx{+} + \04 & Bear, grizzly & 10 & Lizard, draco \\ \hlx{+} + \05 & Boar & 11 & Snake, racer \\ \hlx{+} + \06 & Cat, mountain lion & 12 & Wolf, normal \\ \hlx*{vh} + \end{tabular} + +\item[Elven cloak] Wearer almost invisible (detectable 1 in 6); becomes + visible when attacking or casting spell, cannot become invisible for 1 + turn. + +\item[Elven boots] Move almost completely silently (detectable 1 in 10). + +\item[Flying carpet] Carry one passenger at MV\flying300, two at MV\flying + 240 or three at MV\flying180. + +\item[Gauntlets of ogre power] Strength of 18. + +\item[Girdle of giant strength] THAC0 12, double damage with weapon. + +\item[Helm of alignment changing] Changes wearer's alignment; \emph{remove + curse} allows removal but wearer will resist. + +\item[Helm of reading] Wearer can read any writings (strange languages, + magical writing, codes, etc.). May (1 in 10) be destroyed when wearer hit; + destroyed if wearer killed. + +\item[Helm of telepathy] Send messages by thought to creature within $90'$, + may read thoughts (requires concentration, SvS allowed to avoid thought + reading). + +\item[Helm of teleportation] Allows \emph{teleport} as spell. After first + use, or any use to teleport another creature, stops working until user + casts \emph{teleport} on it. + +\item[Horn of blasting] Cone of sound $100' \times 20'$; 2d6 damage to those + in area, SvS or deafened for 1 turn. Usable once per turn. + +\item[Lamp, hurricane] As \emph{lamp of long burning}. Shutters closed when + found; when opened the first time each day, emits gusts of wind and rain, + drenching all within $30'$. All must SvS (holder automatically fails) or + be knocked over with carried items scattered within $60'$. + +\item[Lamp of long burning] Burns and illuminates without using oil. Becomes + nonmagical if flame doused with water. + +\item[Metallion of ESP] Read thoughts of one creature within range by + concentrating for 1 round (SvS to avoid); 1 in 6 chance broadcasts thoughts + to all in range. + +\item[Mirror of life trapping] If looking into mirror, SvS or be sucked into + it with all items. Stores up to 20 man-size or smaller creatures, who do + not need food or air. Can communicate with those trapped inside. Breaking + mirror or \emph{wish} (one each) releases those trapped. + +\item[Muzzle of training] Adjusts to fit any monster with bite attack. + Victim can breathe but not bite or talk. Locks in place (as if + \emph{wizard lock} by M15) and unlocks by command. + +\item[Nail, finger] Looks like $1''$--$4''$ carpentry nail. Disappears if + commanded as \emph{nail of pointing}; thereafter, if user attempts to hide + from enemy (e.g., by using \emph{invisibility}), may appear (always first + time, 1 in 4 chance thereafter) as glowing finger pointing at user for 1d6 + rounds. A \emph{remove curse} removes the nail forever. + +\item[Nail of pointing] Looks like $1''$--$4''$ carpentry nail. If + commanded, turns into bony finger and points to named nonmagical item. + Cannot detect living or undead creatures; no range limit. Usable once per + day. + +\item[Ointment] Salve in small box. + \begin{enumerate*} + \item \emph{Blessing:} Bonus $+2$ on AC and saves for 1 turn. + \item \emph{Healing:} Cures $\d{2d6} + 2$\,hp damage. + \item \emph{Poison:} Seems like \emph{blessing}; SvPn at $-2$ or die. + \item \emph{Scarring:} Seems like \emph{healing}; causes $\d{2d6} + 2$\,hp + burn damage curable by \emph{ointment of soothing}, \emph{cureall}, + \emph{heal} or \emph{wish}. + \item \emph{Soothing:} Cures all burn damage. + \item \emph{Tanning:} Skin turns bright colour; wears off in 1d4 months. + \end{enumerate*} + +\item[Pouch of security] Size of large sack. Attempts to steal cause it to + scream `I am being stolen!' for 1 hour or until held by owner and commanded + to stop. + +\item[Quill of copying] Copies spell on scroll: burn original scroll, mix + ashes with rare ink (1000\,gp cost), place on blank scroll with inkwell and + command to write; quill writes two copies of the spell. Only copies one + spell (one of lowest level on original scroll). Blots 1 in 4, ruining + scroll unless fixed with \emph{wish}. + +\item[Rope of climbing] Thin rope $50'$ long: climbs in any direction on + command, fastens to any protruding surface and supports 10\,000\,cn. + +\item[Scarab of protection] Absorbs curses, or \emph{finger of death}; usable + 2d6 times. + +\item[Slate of identification] Identifies magical items placed on it, with a + (new, if possible) command word; cannot detect \emph{cursed} items or + numbers of charges. Ten charges usable per day; uses: potion~(2), + missile~(3), wand~(4), staff~(5), permanent weapon~(6), armour or + shield~(7), miscellaneous item~(10 or more). + +\item[Stone of controlling earth elementals] $3''\phi$; summons a 12HD earth + elemental (takes 1 turn), allowing control (requires concentration; + elemental is hostile afterwards). Usable once per day. + +\item[Talisman of elemental travel] Cast \emph{conjure elemental} while + touching elemental symbol on talisman to enter elemental plane; talisman + allows clear vision ($120'$--$1200'$ range) and breathing. Talisman may be + of any element or greater talisman with all four symbols (equal chances for + all five). Greater talisman can (on command) be used to control + elementals, usable ten times per trip. + +\item[Wheel of floating] Allows wagon to be towed across river or stream. + First wheel allows 10\,000\,cn to be carried; each extra wheel allows extra + 5000\,cn, up to maximum of four. + +\item[Wheel of fortune] Wheel, $10'\phi$, mounted on wall and easily rotated, + contains black (with white skull) and white (with red heart) wedges. When + spun, rotates for 3 rounds. Cannot be affected by magic; a \emph{wish} + will make the wheel disappear. Requires 26HD to move, weighs 20\,000\,cn. + Usable by each person once per day; cannot be used by \emph{charmed} + creatures. + \begin{tabular}[C]{\shade c>{\raggedright}p{5pc}|c>{\raggedright}p{5pc}} + \hlx*{hv} + \th{1d12} & \th{Effect} & + \th{1d12} & \th{Effect} \\ \hlx{vhv} + \01 & 1000\,gp appear & + \07 & ability score drops by 1 \\ \hlx{+} + \02 & 10 garnets (100\,gp each) appear & + \08 & PR drops by 1 \\ \hlx{+} + \03 & 1 brooch (1000\,gp) appears & + \09 & $C$ drops by 1 \\ \hlx{+} + \04 & 1 misc magic item appears & + 10 & least valuable magic item disintegrates \\ \hlx{+} + \05 & ability score rises by 1 & + 11 & nonmagical items disintegrate \\ \hlx{+} + \06 & PR or $C$ rises by 1 & + 12 & die \\ \hlx*{vh} + \end{tabular} + +\item[Wheel, square] Useless on roads or flat terrain. Allows movement on + mountains and deserts (MV20 with one, MV30 with two, MV40 with three and + MV60 with four). + +\end{description} + +\subsect{Armour and shields} + +Cursed 1 in 8: revealed in earnest combat; \emph{remove curse} allows +removal, C36 removes curse entirely. + +Special powers usable once per day. + +\begin{description} + +\item[Absorption] Energy drains lose one `plus' instead of affecting wearer; + armour disintegrates at zero; no daily limit. + +\item[Charm] When hit, opponent must SvS or be \emph{charmed} ($+4$ bonus if + using weapon). Only one \emph{charm} per day. + +\item[Cure wounds] Cures half wearer's damage. + +\item[Electricity] When charged by command, inflicts 6d6 damage (SvS for + half, $+4$ bonus if using weapon) against next attacker to hit. Only one + blast per day. + +\item[Energy drain] When charged by command, inflicts 1ED:Wt (SvS to avoid, + $+4$ bonus if using weapon) against next attacker to hit. Only one drain + per day. + +\item[Ethereality] Become ethereal or return to prime by command, once each + once per day. + +\item[Fly] On command allows flight (MV\flying360, for 12 turns). Usable + once per day. + +\item[Gaseous form] Assume gaseous form (with items carried) for up to 6 + turns. Usable once per day. + +\item[Haste] Double movement and attacks for 1 turn. Usable once per day. + +\item[Invisibility] Become invisible on command with all items carried, until + attacking or casting spell. Usable three times per day. + +\item[Reflection] Reflects \emph{light} or \emph{continual light} at caster + (who may SvS to avoid), three times per day. Meet gaze attacks as if using + mirror, but without $-2$ to hit. + +\item[Remove curse] Cannot be \emph{cursed}; removes curses as if C36. + Usable three times in total. + +\end{description} + +\subsect{Missiles} + +\begin{description} + +\item[Biting] On hit, becomes poisonous snake: SvPn or die. + +\item[Blinking] Blinks in and out of existence to pass allies. + +\item[Charming] Target must SvS or be \emph{charmed}. + +\item[Climbing] If shot at object, fastens securely and creates $50'$ rope + supporting any number of climbers. Disappears with rope after 1 turn. + +\item[Curing] Obviously blunt and inscribed with holy symbol: cures $\d{2d6} + + 2\delta G$ damage. + +\item[Disarming] SvS or drop weapon. + +\item[Dispelling] Creates \emph{dispel magic} (by M15) on target. + +\item[Flying] Ranges increased by factor of 5. + +\item[Lighting] Creates \emph{light} ($30'$ radius, 12 turns) on demand or + on hit (SvS or blinded) and disintegrates. + +\item[Penetrating] Not slowed by underbrush, webs, or other cover; no hit + modification for cover. + +\item[Refilling] If left in container with normal missiles, creates 1d20 more + normal missiles each day. + +\item[Screaming] Emits screams as it flies; all within $30'$ of path must + check morale or retreat for 1d8 rounds. + +\item[Seeking] Automatically hits target object (misses creatures). Can be + used for disarming. + +\item[Sinking] Causes $\d{1d10} + 10$ hull points damage to ships. + +\item[Slaying] Designated \emph{opponent}s must SvDR or die. + +\item[Speaking] Misses creatures: may be shot at target or named place within + 10 miles; repeats 20 word spoken message. + +\item[Stunning] Target must SvS or be stunned for 1d6 rounds. + +\item[Teleporting] Target must SvS (with $+2$ bonus) or be \emph{teleported} + 1d\% miles in random direction; will land safely. + +\item[Transporting] Target must SvS or be sent $360'$ to place of user's + choosing. + +\item[Wounding] Causes 1\,hp damage per round until magically cured; cannot + affect constructs or undead. + +\end{description} + +\subsect{Sword primary powers} + +Usually usable once per round as often as desired. + +\begin{description} + +\item[Detect evil/good] Detects good or ill intentions within $20'$. + +\item[Detect gems] Points to gems within $60'$, detecting amounts. + +\item[Detect magic] Detects magical items and effects within $20'$. Usable + three times per day. + +\item[Detect metal] Points to metal of requested type within $60'$, but + cannot detect amount. + +\item[Detect shifting walls] Within $10'$. + +\item[Detect slopes] Within $10'$. + +\item[Find secret doors] Within $10'$. Usable three times per day. + +\item[Find traps] Within $10'$. Usable three times per day. + +\item[See invisible] Find invisible and hidden creatures and objects (not + secret doors) within $20'$. + +\end{description} + +\subsect{Sword extraordinary powers} + +Usually usable once per round, up to three times per day. + +\begin{description} + +\item[Clairaudience] Hear sound through ears of creature within $60'$. + +\item[Clairvoyance] See through eyes of creature within $60'$. + +\item[ESP] Listen to thoughts of creature within $60'$. + +\item[Extra damage] Damage multiplied by 4 (or 5, 6, \dots\ for duplicates). + Duration 1d10 rounds. + +\item[Flying] Allows flight MV\flying360 for 3 turns. + +\item[Healing] Heals 6\,hp (or 12, 18, \dots\ for duplicates) per day, at + 1\,hp per round. + +\item[Illusion] Creates illusion in $20'$ cube within $240'$ while user + concentrates. Monsters are AC9 and disappear when hit. Victim may SvS to + disbelieve the illusion. Never causes damage; effects wear off in 1d4 + turns. + +\item[Levitation] Move up and down (only) at $20'$ per round, carrying up to + 2000\,cn, for 3 turns. + +\item[Telekinesis] Move inanimate objects of up to 2000\,cn by concentration, + for distance of $50'$. + +\item[Telepathy] Send messages by thought to creature within $90'$, may read + thoughts (requires concentration, SvS allowed to avoid thought reading). + +\item[Teleportation] As spell. Usable once per day. + +\item[X-ray vision] See $30'$ through stone walls (or $60'$ through wood, + cloth or water) by concentrating, detecting traps and secret doors; blocked + by gold or lead; inspect $10' \times 10'$ area per use. + +\end{description} + +\subsect{Weapon talents} + +Usually usable once per day. Missile weapon talents usually apply to +missiles fired. + +\begin{description} + +\item[Breathing] Allows \emph{water breathing} (for 1 day) or \emph{create + air} (for one hour). + +\item[Charming] Can \emph{charm} one humanoid within $120'$. + +\item[Deceiving] Change appearance of user (facial features, equipment, but + not size) while carried (unsheathed); cannot disguise itself. + +\item[Defending] Bonus can be applied to AC instead of hit/damage. + +\item[Deflecting] Optionally used to deflect energy drain, losing one `plus'; + disintegrates at $-1$. Applies to missile weapon itself. + +\item[Draining] Can drain $\d{1d4} + 4$ levels, as 1ED:Wh. Missile weapons + lose one `plus' per drain. + +\item[Extinguishing] Cool to touch. Double $\delta G$ against fire-using + creatures. Douses normal fire. + +\item[Finding] Sense direction of one known object within $120'$ (but not + distance). Will not locate creatures. + +\item[Flaming] Harmless to weapon and user. Bonus $+2$ to hit and damage + hippogriff, pegasis, roc and troll, $+3$ to hit and damage treant and + undead. Usable as required. + +\item[Flying] Must first be used normally in each battle; on command attacks + by itself for three rounds (or on command). Missile weapons create + ammunition as needed. + +\item[Healing] Cures $\d{2d6} + 2$\,hp of the user only. + +\item[Hiding] Can render the user invisible (with all items, becomes visible + when attacking or casting spells). Additionally, weapon only can become + invisible three times per day. + +\item[Holding] Up to four humanoids within $180'$ SvS or paralysed for 9 + turns. Penalty $-2$ on save if cast on single individual. Cancelled by + \emph{dispel magic} or \emph{free person}. + +\item[Lighting] Create \emph{light} at $120'$ range. + +\item[Silencing] Cause \emph{silence} in $15'$ radius, at $180'$ range, for + 12 turns. + +\item[Slicing] (Only edged weapons.) If $\textrm{hit roll} + \delta G \ge + 19$, opponent must SvDR or be killed. Doesn't work against constructs or + undead. + +\item[Slowing] Opponent hit moves and attacks at half speed for 1 turn (no + save). + +\item[Speeding] Doubles user's movement and attack rate for 1 turn. + +\item[Translating] User can understand any languages heard for 6 turns. + +\item[Watching] On command, weapon will watch for monster type and vibrate + slightly if any come within $60'$. + +\item[Wishing] Grants 1d3 wishes. + \end{description} \end{multicols} diff --git a/weapons.tex b/weapons.tex index 28d5d3b..949032d 100644 --- a/weapons.tex +++ b/weapons.tex @@ -60,7 +60,7 @@ \hlx{v+/v} \weap{Blackjack} - {1H(s) [H], C \\ 5\,gp \\ 5\,cn} + {1H(s) [H] (C) \\ 5\,gp \\ 5\,cn} & BS & --- & $\dice{1d2}$ & --- & knockout \\* & SK & --- & $\dice{1d3} + 1$ & --- & knockout ($+1$) \\* & EX & --- & $\dice{1d4} + 1$ & --- & knockout ($+2$) \\* @@ -417,7 +417,7 @@ deflect 3, disarm ($+4$) \\ \hlx{v+/v} - \weap{Sword. short} + \weap{Sword, short} {1H(s) [H] \\ 7\,gp \\ 30\,cn} & BS & --- & $\dice{1d6}$ & --- & --- \\* & SK & --- & $\dice{1d6} + 2$ & H: $-1/1$ & deflect 1, disarm \\*