OSDN Git Service

569828fbb6431dd50df56a1fa5d896201ad93433
[nazghul-jp/nazghul-jp.git] / worlds / haxima-1.002 / runes.scm
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))