1;; rune sprites 2 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) 9 ) 10 11(define (rune-basic-get kobj kchar questtag) 12 ;; Get the sprite before picking up the object, because picking it up will 13 ;; deallocate it. 14 (let ((sprite (kern-obj-get-sprite kobj))) 15 (kobj-get kobj kchar) 16 (rune-basic-quest questtag sprite))) 17 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))) 22 (cond ((null? loc) 23 result-no-target) 24 ((eqv? (kern-place-get-terrain loc) t_rune_altar) 25 (shake-map 5) 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) 30 result-ok) 31 (else 32 result-not-here)))) 33 34(define rune-ifc 35 (ifc obj-ifc 36 (method 'use rune-use) 37 )) 38 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)) 49 ) 50(define rune-li-ifc 51 (ifc rune-ifc 52 (method 'get rune-li-get))) 53 54;; trigger quest update 55(define (rune-l-get kobj kchar) 56 (rune-basic-get kobj kchar 'questentry-rune-p) 57 ) 58(define rune-l-ifc 59 (ifc rune-ifc 60 (method 'get rune-l-get))) 61 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) 66 ) 67(define (rune-k-get kobj kchar) 68 (rune-k-receive kobj kchar) 69 (kobj-get kobj kchar) 70 ) 71(define rune-k-ifc 72 (ifc rune-ifc 73 (method 'get rune-k-get) 74 (method 'receive rune-k-receive) 75 )) 76 77;; trigger quest update 78(define (rune-p-get kobj kchar) 79 (rune-basic-get kobj kchar 'questentry-rune-p) 80 ) 81(define rune-p-ifc 82 (ifc rune-ifc 83 (method 'get rune-p-get))) 84 85;; trigger quest update 86(define (rune-w-get kobj kchar) 87 (rune-basic-get kobj kchar 'questentry-rune-w) 88 ) 89(define rune-w-ifc 90 (ifc rune-ifc 91 (method 'get rune-w-get))) 92 93;; trigger quest update 94(define (rune-f-get kobj kchar) 95 (rune-basic-get kobj kchar 'questentry-rune-f) 96 ) 97(define rune-f-ifc 98 (ifc rune-ifc 99 (method 'get rune-f-get))) 100 101;; trigger quest update 102(define (rune-d-get kobj kchar) 103 (rune-basic-get kobj kchar 'questentry-rune-d) 104 ) 105(define rune-d-ifc 106 (ifc rune-ifc 107 (method 'get rune-d-get))) 108 109;; trigger quest update 110(define (rune-c-get kobj kchar) 111 (rune-basic-get kobj kchar 'questentry-rune-c) 112 ) 113(define rune-c-ifc 114 (ifc rune-ifc 115 (method 'get rune-c-get))) 116 117;; trigger quest update 118(define (rune-s-get kobj kchar) 119 (rune-basic-get kobj kchar 'questentry-rune-s) 120 ) 121(define rune-s-ifc 122 (ifc rune-ifc 123 (method 'get rune-s-get))) 124 125;; rune types 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) 135 136;; list of all rune types 137(define rune-types 138 (list t_rune_k 139 t_rune_p 140 t_rune_s 141 t_rune_c 142 t_rune_l 143 t_rune_f 144 t_rune_w 145 t_rune_d)) 146 147;; check if kpc has all the runes in inventory 148(define (has-all-runes? kpc) 149 (all-in-inventory? kpc rune-types)) 150