OSDN Git Service

7b485951610fb17a7b8983b82ea865790c76d66f
[nazghul-jp/nazghul-jp.git] / worlds / haxima-1.002 / occs.scm
1 ;;----------------------------------------------------------------------------
2 ;; occupations
3
4 ;; Occupation gob fields (these are all procedures for evaluating a kchar's
5 ;; ability at something):
6 ;;
7 ;; 0 thief
8 ;; 1 white magic
9 ;; 2 black magic
10 ;; 3 magic defense
11 ;; 4 strength-based attack
12 ;; 5 dexterity-based attack
13 ;; 6 dexterity-based defense
14 ;; 7 crafting
15
16 (define (mk-occ tag name hit def dam arm xp skset)
17   (kern-mk-occ tag name 1.0 0 0 0 0 hit def dam arm xp skset)
18   (kern-occ-set-gob (eval tag) (list nil nil nil nil nil nil nil nil)))
19
20 ;;            /           /         / t  / f / e /   /
21 ;;           /           /         / i  / e / g / r /
22 ;;          /           / e       / h  / d / a / o /
23 ;;         / g         / m       / -  / - / m / m /
24 ;;        / a         / a       / o  / o / a / r / p
25 ;;       / t         / n       / t  / t / d / a / x
26 (mk-occ 'oc_wizard   "wizard"   -1  -1  -1  -1   4 nil)
27 (mk-occ 'oc_warrior  "warrior"   1   0   1   0   4 sks_warrior)
28 (mk-occ 'oc_wright   "wright"    0   1   0   1   4 sks_wright)
29 (mk-occ 'oc_wrogue   "wrogue"    1   1   0   0   4 sks_wrogue)
30 (mk-occ 'oc_wanderer "wanderer"  5   5   5   5   8 sks_wanderer)
31 (mk-occ 'oc_ranger   "ranger"    1   1   0   0   4 sks_ranger)
32
33 (define (occ-get-abil kocc ability)
34         (if (null? kocc)
35                 nil
36                 (list-ref (kern-occ-get-gob kocc) ability)))
37                 
38 (define (occ-set-abil kocc ability calc)
39         (set-car! 
40                 (list-tail 
41                         (kern-occ-get-gob kocc) 
42                         ability)
43                 calc))
44
45 ;---------------------------------
46 ;Thiefliness
47
48 (define (occ-ability-thief kchar)
49   (let ((occ-abil (occ-get-abil (kern-char-get-occ kchar) 0)))
50     (if (null? occ-abil)
51         (floor 
52          (/ (+ (kern-char-get-level kchar) 
53                (kern-char-get-dexterity kchar)) 4))
54         (occ-abil kchar)
55         )))
56
57
58 (occ-set-abil oc_wrogue 0
59               (lambda (kchar)
60                 (floor 
61                  (+ (kern-char-get-level kchar)
62                     (/ (kern-char-get-dexterity kchar) 3)))
63                 ))
64
65 (let ((partskill
66        (lambda (kchar)
67          (floor 
68           (+ (/ (kern-char-get-level kchar) 2)
69              (/ (kern-char-get-dexterity kchar) 4)
70              )))))
71   (occ-set-abil oc_wright 0 partskill)
72   (occ-set-abil oc_ranger 0 partskill)
73   (occ-set-abil oc_wanderer 0 partskill)
74   )
75
76 (define (occ-thief-dice-roll kchar)
77   (kern-dice-roll (string-append "1d" 
78                                  (number->string (occ-ability-thief kchar)))))
79
80 ;-----------------------------
81 ;Magic output
82
83 (define (occ-ability-whitemagic kchar)
84         (let ((occ-abil (occ-get-abil (kern-char-get-occ kchar) 1)))
85                 (if (null? occ-abil)
86                         (floor 
87                                 (+ (/ (kern-char-get-level kchar) 3)
88                                         (/ (kern-char-get-intelligence kchar) 3)))
89                         (occ-abil kchar)
90                         )))
91                         
92 (define (occ-ability-blackmagic kchar)
93         (let ((occ-abil (occ-get-abil (kern-char-get-occ kchar) 2)))
94                 (if (null? occ-abil)
95                         (floor 
96                                 (/ (+ (kern-char-get-level kchar) 
97                                         (kern-char-get-intelligence kchar)) 4))
98                         (occ-abil kchar)
99                         )))
100                         
101 (let (
102         (highskill
103                 (lambda (kchar)
104                         (floor 
105                                 (+ (kern-char-get-level kchar)
106                                         (/ (kern-char-get-intelligence kchar) 2))
107                         )))
108         (modskill
109                 (lambda (kchar)
110                         (floor 
111                                 (+ (* (kern-char-get-level kchar) 0.75)
112                                         (/ (kern-char-get-intelligence kchar) 3))
113                         )))
114         (someskill
115                 (lambda (kchar)
116                         (floor 
117                                 (+ (/ (kern-char-get-level kchar) 3)
118                                         (/ (kern-char-get-intelligence kchar) 3))
119                         )))     
120         (poorskill
121                 (lambda (kchar)
122                         (floor 
123                                 (+ (/ (kern-char-get-level kchar) 4)
124                                         (/ (kern-char-get-intelligence kchar) 4))
125                         )))
126         (noskill
127                 (lambda (kchar)
128                         (floor 
129                                 (+ (/ (kern-char-get-level kchar) 6)
130                                         (/ (kern-char-get-intelligence kchar) 4))
131                         )))
132         )
133         (occ-set-abil oc_wizard 1 highskill)
134         (occ-set-abil oc_wizard 2 highskill)
135         (occ-set-abil oc_wanderer 1 modskill)
136         (occ-set-abil oc_wanderer 2 modskill)
137         (occ-set-abil oc_warrior 1 poorskill)
138         (occ-set-abil oc_warrior 2 noskill)
139         (occ-set-abil oc_ranger 2 someskill)
140 )
141
142 ;-----------------------------
143 ; Magic defense
144
145 (define (occ-ability-magicdef kchar)
146         (let ((occ-abil (occ-get-abil (kern-char-get-occ kchar) 3)))
147                 (if (null? occ-abil)
148                         (floor 
149                                 (+ (/ (kern-char-get-level kchar) 3)
150                                         (/ (kern-char-get-intelligence kchar) 2)))
151                         (occ-abil kchar)
152                         )))
153                         
154 (let (
155         (highskill
156                 (lambda (kchar)
157                         (floor 
158                                 (+ (/ (kern-char-get-level kchar) 2)
159                                         (/ (kern-char-get-intelligence kchar) 2))
160                         )))
161         (modskill
162                 (lambda (kchar)
163                         (floor 
164                                 (+ (* (kern-char-get-level kchar) 0.4)
165                                         (/ (kern-char-get-intelligence kchar) 2))
166                         )))
167         )
168         (occ-set-abil oc_wizard 3 highskill)
169         (occ-set-abil oc_wanderer 3 modskill)
170 )
171
172 ;----------------------------
173 ; Combat
174
175 (define (occ-ability-strattack kchar)
176         (let ((occ-abil (occ-get-abil (kern-char-get-occ kchar) 4)))
177                  (if (null? occ-abil)
178                      (floor (/ (* (kern-char-get-level kchar)
179                                   (+ (kern-char-get-strength kchar) 15))
180                                30))
181                      (occ-abil kchar)
182                      )))
183
184 (let (
185         (highskill
186                 (lambda (kchar)
187                   (floor (/ (* (kern-char-get-level kchar)
188                                (+ (kern-char-get-strength kchar) 10))
189                             20))
190                          ))
191         (modskill
192                 (lambda (kchar)
193                   (floor (/ (* (kern-char-get-level kchar)
194                                (+ (kern-char-get-strength kchar) 12))
195                             24))
196                         ))
197         (lowskill
198                 (lambda (kchar) 
199                   (floor (/ (* (kern-char-get-level kchar)
200                                 (+ (kern-char-get-strength kchar) 10))
201                              30))
202                          ))
203         )
204         (occ-set-abil oc_wizard 4 lowskill)
205         (occ-set-abil oc_wright 4 modskill)
206         (occ-set-abil oc_wanderer 4 modskill)
207         (occ-set-abil oc_warrior 4 highskill)
208         (occ-set-abil oc_ranger 4 modskill)
209 )
210
211
212 (define (occ-ability-dexattack kchar)
213   (let ((occ-abil (occ-get-abil (kern-char-get-occ kchar) 5)))
214     (if (null? occ-abil)
215         (floor (/ (* (kern-char-get-level kchar)
216                      (+ (kern-char-get-dexterity kchar) 15))
217                   30))
218         (occ-abil kchar)
219         )))
220
221 (let (
222       (highskill
223        (lambda (kchar)
224          (floor (/ (* (kern-char-get-level kchar)
225                       (+ (kern-char-get-dexterity kchar) 10))
226                    20))
227          ))
228       (modskill
229        (lambda (kchar)
230          (floor (/ (* (kern-char-get-level kchar)
231                       (+ (kern-char-get-dexterity kchar) 12))
232                    24))
233          ))
234       (lowskill
235        (lambda (kchar) 
236            (floor (/ (* (kern-char-get-level kchar)
237                         (+ (kern-char-get-dexterity kchar) 10))
238                      30))
239            ))
240       )
241   (occ-set-abil oc_wizard 5 lowskill)
242   (occ-set-abil oc_wrogue 5 modskill)
243   (occ-set-abil oc_wanderer 5 modskill)
244   (occ-set-abil oc_warrior 5 highskill)
245   (occ-set-abil oc_ranger 5 modskill)
246 )
247
248 (define (occ-ability-strdamage kchar)
249   (floor (* 2 (-  (log (+ 2 (occ-ability-strattack kchar)))))))
250
251 (define (occ-ability-dexdefend kchar)
252   (let ((occ-abil (occ-get-abil (kern-char-get-occ kchar) 6)))
253     (if (null? occ-abil)
254         (floor (+ (/ (kern-char-get-level kchar) 2)
255                   (/ (kern-char-get-dexterity kchar) 3)))
256                (occ-abil kchar)
257                )))
258
259 (let (
260         (highskill
261          (lambda (kchar)
262            (floor (+ (* (kern-char-get-level kchar) 0.8)
263                      (/ (kern-char-get-dexterity kchar) 2)))
264            ))
265         (modskill
266          (lambda (kchar)
267            (floor (+ (* (kern-char-get-level kchar) 0.6)
268                      (* (kern-char-get-dexterity kchar) 0.4)))
269            ))
270         (lowskill
271          (lambda (kchar) 
272            (floor (+ (/ (kern-char-get-level kchar) 3)
273                      (/ (kern-char-get-dexterity kchar) 4)))
274                   ))
275         )
276         (occ-set-abil oc_wizard 6 lowskill)
277         (occ-set-abil oc_wrogue 6 highskill)
278         (occ-set-abil oc_wanderer 6 modskill)
279         (occ-set-abil oc_warrior 6 modskill)
280         (occ-set-abil oc_ranger 6 highskill)
281 )
282
283 (define (proc-stratt kchar)
284         (* 1000 (occ-ability-strattack kchar)))
285
286 (define (proc-dexatt kchar)
287         (* 1000 (occ-ability-dexattack kchar)))
288
289 (define (proc-strdam kchar)
290         (* 1000 (occ-ability-strdamage kchar)))
291
292 (define (proc-dexdef kchar)
293         (* 1000 (occ-ability-dexdefend kchar)))
294
295 ;----------------------------
296 ; Crafting
297
298 ;; Note: I'm not sure this is really how we want to handle wright skills, but
299 ;; it serves as a starting point. For one thing, we probably need to break the
300 ;; skills up into different abilities. Eg, a wizard might not be able to skin a
301 ;; deer as well as a ranger, but he can do a better job of whittling a magic
302 ;; wand. Also, I just used all the core attributes and divided them
303 ;; evenly. Different types of wright skills might emphasize dexterity over
304 ;; intelligence, or vice versa, and etc.
305
306 (define (occ-ability-crafting kchar)
307   (let ((occ-abil (occ-get-abil (kern-char-get-occ kchar) 7)))
308     (if (null? occ-abil)
309         (floor (/ (* (kern-char-get-level kchar)
310                      (+ (/ (kern-char-get-dexterity kchar) 3)
311                         (/ (kern-char-get-strength kchar) 3)
312                         (/ (kern-char-get-intelligence kchar) 3)
313                         15))
314                   30))
315         (occ-abil kchar)
316         )))
317
318 (let (
319       (highskill
320        (lambda (kchar)
321          (floor (/ (* (kern-char-get-level kchar)
322                       (+ (/ (kern-char-get-dexterity kchar) 3)
323                          (/ (kern-char-get-strength kchar) 3)
324                          (/ (kern-char-get-intelligence kchar) 3)
325                          10))
326                    20))
327          ))
328       (modskill
329        (lambda (kchar)
330          (floor (/ (* (kern-char-get-level kchar)
331                       (+ (/ (kern-char-get-dexterity kchar) 3)
332                          (/ (kern-char-get-strength kchar) 3)
333                          (/ (kern-char-get-intelligence kchar) 3)
334                          12))
335                    24))
336          ))
337       (lowskill
338        (lambda (kchar) 
339            (floor (/ (* (kern-char-get-level kchar)
340                         (+ (/ (kern-char-get-dexterity kchar) 3)
341                            (/ (kern-char-get-strength kchar) 3)
342                            (/ (kern-char-get-intelligence kchar) 3)
343                            10))
344                      30))
345            ))
346       )
347   (occ-set-abil oc_wizard 7 lowskill)
348   (occ-set-abil oc_wrogue 7 highskill)
349   (occ-set-abil oc_wanderer 7 modskill)
350   (occ-set-abil oc_warrior 7 lowskill)
351   (occ-set-abil oc_ranger 7 modskill)
352 )
353
354 ;----------------------------
355 ; Acrobatics
356
357 ;; These are for physical feats like sprinting and wriggling through
358 ;; bars. Piggyback on some of the other abilities for now.
359
360 (define (occ-ability-stracro kchar) (occ-ability-strattack kchar))
361 (define (occ-ability-dexacro kchar) (occ-ability-dexdef kchar))