1 ;;----------------------------------------------------------------------------
2 ;; Special mech for the Keep Crypt
4 ;; When the lever is pulled, this mech engages. Every turn it picks a
5 ;; random location from its region. If the location does not contain a being
6 ;; but does contain a corpse it removes the corpse and creates a skeletal
7 ;; warrior in its place.
8 ;;----------------------------------------------------------------------------
12 (define (kcm-set-on! kcm) (set-car! kcm #t))
13 (define (kcm-on? kcm) (car kcm))
14 (define (kcm-area kcm) (cadr kcm))
16 (define (kcm-exec-main kcm kplace)
19 (let ((area (kcm-area kcm)))
20 (let ((x (+ (rect-x area)
21 (modulo (random-next) (rect-w area))))
23 (modulo (random-next) (rect-h area)))))
24 (mk-loc kplace x y))))
26 (define (get-corpse-at loc)
27 ;;(display "get-corpse-at")(newline)
28 (let ((corpses (find-object-types-at loc t_corpse)))
33 (let* ((loc (pick-loc))
34 (corpse (get-corpse-at loc)))
36 ;;(display "loc:")(display loc)(newline)
37 ;;(display "corpse:")(display corpse)(newline)
39 (define (corpse-at? loc)
40 ;;(display "corpse-at?")(newline)
43 (define (remove-corpse loc)
44 ;;(display "remove-corpse")(newline)
45 (kern-obj-remove corpse))
48 (if (> (modulo (random-next) 2) 0)
49 (mk-npc 'skeletal-warrior (kern-dice-roll "1d3+4"))
50 (mk-npc 'skeletal-spear-thrower (kern-dice-roll "1d3+4"))))
52 (define (put-skeleton loc)
53 ;;(display "put-skeleton")(newline)
54 (kern-obj-put-at (mk-skeleton) loc))
57 ;;(display "good?")(newline)
58 (and (not (being-at? loc))
61 (define (change-corpse-to-skeleton loc)
62 ;;(display "change-corpse-to-skeleton")(newline)
63 (kern-log-msg "You have disturbed the dead!")
68 (change-corpse-to-skeleton loc))))
70 (define (kcm-exec kself)
71 (let ((kcm (kobj-gob-data kself)))
72 (if (and (kcm-on? kcm)
73 (> (modulo (random-next) 20) 16))
75 (loc-place (kern-obj-get-location kself))))))
77 (define (kcm-on kself ksender)
78 (kcm-set-on! (kobj-gob-data kself)))
83 (method 'exec kcm-exec)))
85 (mk-obj-type 't_kcm nil nil layer-none kcm-ifc)
88 (bind (kern-mk-obj t_kcm 1)