anchor.diff:      (affect-from-char target +spell-barkskin+))
     (when (affected-by-spell target +spell-thorn-skin+)
       (affect-from-char target +spell-thorn-skin+))
  -  (affect :duration (dice 3 (1+ (floor level 4)))
  -          :modifier (- (+ 5 (floor (get-skill-bonus caster +spell-thorn-skin+) 10)))
  -          :location +apply-ac+)
  +  (duration (dice 3 (1+ (floor level 4))))
  +  (affect :location +apply-ac+
  +          :modifier (- (+ 5 (floor (get-skill-bonus caster +spell-thorn-skin+) 10))))
     (to-target "Large thorns erupt from your skin!")
     (to-room "Large thorns erupt from $n's skin!"))
   
   (define-spell pray ()
  -  (affect :location +apply-hitroll+
  -          :modifier (+ 3 (floor level 8))
  -          :duration (+ 4 (floor level 16)))
  -  (affect :location +apply-saving-spell+
  -          :modifier (- (+ 3 (floor level 16)))
  -          :duration (+ 4 (floor level 16)))
  +  (duration (+ 4 (floor level 16)))
  +  (affect :location +apply-hitroll+ :modifier (+ 3 (floor level 8)))
  +  (affect :location +apply-saving-spell+ :modifier (- (+ 3 (floor level 16))))
     (if (is-good target)
       (to-target "You feel extremely righteous")
       (to-target "You feel a dark power enter your soul.")))
  
positive.code:      (remove-all-combat target)
       (setf (position-of target) +pos-stunned+)
       (wait-state target (* 2 +pulse-violence+))
       (affect :location +apply-int+ :modifier -1 :duration 1)
       (to-target "You have been stunned!")
       (to-room "$n suddenly looks stunned!"))))
  
negative.code:         (id-name (intern (format nil "+SPELL-~a+" name))))
      `(progn
         (defun ,func-name (caster level target)
           (let ((duration (floor level 4)))
             (flet ((duration (new-duration)
                      (setf duration new-duration))
                    (affect (&key (modifier 0) (location +apply-none+))
                      (affect-to-char target
                                      (make-instance 'affected-type
                                                     :kind ,id-name
                                                     :owner (idnum-of caster)
                                                     :duration duration
                                                     :level level
                                                     :modifier modifier
                                                     :location location)))
                    (set-affbit (idx bit)
                      (affect-to-char target
                                      (make-instance 'affected-type
                                                     :kind ,id-name
                                                     :owner (idnum-of caster)
                                                     :duration duration
                                                     :level level
                                                     :aff-index idx
                                                     :bitvector bit)))
                    (to-caster (str)
                      (send-to-char caster "~a~%" str))
                    (to-target (str)
                      (send-to-char target "~a~%" str))
                    (to-room (str)
                      (act target :place-emit str)))
               (declare (ignorable #'affect #'to-target #'to-room #'to-caster #'set-affbit)
                        (dynamic-extent #'affect #'to-target #'to-room #'to-caster
                                        #'set-affbit))
               ,@body)))
         (when (null (aref *spell-info* ,id-name))
           (setf (aref *spell-info* ,id-name) (make-instance 'spell-info)))
         (setf (func-of (aref *spell-info* ,id-name)) (function ,func-name)))))
  
  (define-spell armor ()
    (duration 24)
    (affect :location +apply-ac+ :modifier (+ (floor level 4) 20))
    (to-target "You feel someone protecting you."))
  
  (define-spell chill-touch ()
    (duration 4)
    (affect :location +apply-str+ :modifier (- (1+ (floor level 16))))
    (to-target "You feel your strength wither!"))
  
  (define-spell barkskin ()
    (duration (dice 4 (1+ (floor level 8))))
    (when (affected-by-spell target +spell-stoneskin+)
      (affect-from-char target +spell-stoneskin+))
    (when (affected-by-spell target +spell-thorn-skin+)
      (affect-from-char target +spell-thorn-skin+))
    (affect :location +apply-ac+ :modifier -10)
    (to-target "Your skin tightens up and hardens."))
  
  (define-spell stoneskin ()
    (duration(dice 4 (1+ (floor level 8))))
    (when (affected-by-spell target +spell-barkskin+)
      (affect-from-char target +spell-stoneskin+))
    (when (affected-by-spell target +spell-thorn-skin+)
      (affect-from-char target +spell-thorn-skin+))
    (affect :location +apply-ac+ :modifier -10)
    (to-target "Your skin hardens to a rock-like shell.")
    (to-room "$n's skin turns a pale, rough grey."))
  
  