1;;----------------------------------------------------------------------------
2;; hidden -- wrapper object; when s)earched it creates the revelaed object and
3;; removes itself
4
5(define (hidden-mk objtype-tag quan) (list objtype-tag quan))
6(define (hidden-objtype-tag hidden) (car hidden))
7(define (hidden-quan hidden) (cadr hidden))
8
9(define (hidden-search khidden ksearcher)
10  (println "hidden-search")
11  (let* ((hidden (kobj-gob-data khidden))
12         (kobj (kern-mk-obj (eval (hidden-objtype-tag hidden))
13                            (hidden-quan hidden))))
14    (kern-obj-put-at kobj
15                     (kern-obj-get-location khidden))
16    (kern-log-msg "You find something!")
17    (kern-obj-remove khidden)))
18
19(define hidden-ifc
20  (ifc nil
21       (method 'search hidden-search)))
22
23(mk-obj-type 't_hidden nil nil layer-none hidden-ifc)
24
25(define (mk-hidden objtype-tag quan)
26  (bind (kern-mk-obj t_hidden 1)
27        (hidden-mk objtype-tag quan)))
28
29(define (is-hidden? kobj)
30  (eqv? (kern-obj-get-type kobj)
31        t_hidden))
32