3 ;; also used where external events trigger quest
4 (define (rune-basic-quest questtag questicon)
5 (quest-data-complete questtag)
6 (quest-data-assign-once questtag)
7 (quest-data-update-with questtag 'done 1 (grant-party-xp-fn 50))
8 (qst-set-icon! (quest-get questtag) questicon)
11 (define (rune-basic-get kobj kchar questtag)
12 ;; Get the sprite before picking up the object, because picking it up will
14 (let ((sprite (kern-obj-get-sprite kobj)))
16 (rune-basic-quest questtag sprite)))
18 ;; rune interface: when a rune is used on a special altar, it transforms the
19 ;; alter and signals the demon gate mechanism
20 (define (rune-use ktype kuser)
21 (let ((loc (get-target-loc kuser 1)))
24 ((eqv? (kern-place-get-terrain loc) t_rune_altar)
26 (kern-log-msg "A LOCK IS RELEASED!")
27 (kern-obj-remove-from-inventory kuser ktype 1)
28 (kern-place-set-terrain loc t_active_altar)
29 (send-signal kuser demon-gate 'on)
36 (method 'use rune-use)
39 ;; special extended interface for rune of leadership: summon the ghost of the
40 ;; warritrix when the player picks it up
41 (define (rune-li-get kobj kchar)
42 (kern-log-msg "An apparition appears!")
43 (kern-obj-put-at (mk-warritrix)
44 (kern-obj-get-location kobj))
45 (let ((sprite (kern-obj-get-sprite kobj)))
46 (kern-obj-remove kobj)
47 (kobj-get (kern-mk-obj t_rune_l 1) kchar)
48 (rune-basic-quest 'questentry-rune-l sprite))
52 (method 'get rune-li-get)))
54 ;; trigger quest update
55 (define (rune-l-get kobj kchar)
56 (rune-basic-get kobj kchar 'questentry-rune-p)
60 (method 'get rune-l-get)))
62 ;; trigger quest update
63 (define (rune-k-receive ktype kchar)
64 (quest-data-update-with 'questentry-thiefrune 'recovered 1 (quest-notify (grant-party-xp-fn 50)))
65 (quest-data-update 'questentry-rune-k 'player-got-rune 1)
67 (define (rune-k-get kobj kchar)
68 (rune-k-receive kobj kchar)
73 (method 'get rune-k-get)
74 (method 'receive rune-k-receive)
77 ;; trigger quest update
78 (define (rune-p-get kobj kchar)
79 (rune-basic-get kobj kchar 'questentry-rune-p)
83 (method 'get rune-p-get)))
85 ;; trigger quest update
86 (define (rune-w-get kobj kchar)
87 (rune-basic-get kobj kchar 'questentry-rune-w)
91 (method 'get rune-w-get)))
93 ;; trigger quest update
94 (define (rune-f-get kobj kchar)
95 (rune-basic-get kobj kchar 'questentry-rune-f)
99 (method 'get rune-f-get)))
101 ;; trigger quest update
102 (define (rune-d-get kobj kchar)
103 (rune-basic-get kobj kchar 'questentry-rune-d)
107 (method 'get rune-d-get)))
109 ;; trigger quest update
110 (define (rune-c-get kobj kchar)
111 (rune-basic-get kobj kchar 'questentry-rune-c)
115 (method 'get rune-c-get)))
117 ;; trigger quest update
118 (define (rune-s-get kobj kchar)
119 (rune-basic-get kobj kchar 'questentry-rune-s)
123 (method 'get rune-s-get)))
126 (mk-quest-obj-type 't_rune_k "Rune of Knowledge" s_runestone_k layer-item rune-k-ifc)
127 (mk-quest-obj-type 't_rune_p "Rune of Power" s_runestone_p layer-item rune-p-ifc)
128 (mk-quest-obj-type 't_rune_s "Rune of Skill" s_runestone_s layer-item rune-s-ifc)
129 (mk-quest-obj-type 't_rune_c "Rune of Curiosity" s_runestone_c layer-item rune-c-ifc)
130 (mk-quest-obj-type 't_rune_f "Rune of Freedom" s_runestone_f layer-item rune-f-ifc)
131 (mk-quest-obj-type 't_rune_w "Rune of Wisdom" s_runestone_w layer-item rune-w-ifc)
132 (mk-quest-obj-type 't_rune_d "Rune of Discretion" s_runestone_d layer-item rune-d-ifc)
133 (mk-quest-obj-type 't_rune_l "Rune of Leadership" s_runestone_l layer-item rune-l-ifc)
134 (mk-quest-obj-type 't_rune_l_init "Rune of Leadership" s_runestone_l layer-item rune-li-ifc)
136 ;; list of all rune types
147 ;; check if kpc has all the runes in inventory
148 (define (has-all-runes? kpc)
149 (all-in-inventory? kpc rune-types))