1 ;;----------------------------------------------------------------------------
4 ;; Occupation gob fields (these are all procedures for evaluating a kchar's
5 ;; ability at something):
11 ;; 4 strength-based attack
12 ;; 5 dexterity-based attack
13 ;; 6 dexterity-based defense
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)))
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)
33 (define (occ-get-abil kocc ability)
36 (list-ref (kern-occ-get-gob kocc) ability)))
38 (define (occ-set-abil kocc ability calc)
41 (kern-occ-get-gob kocc)
45 ;---------------------------------
48 (define (occ-ability-thief kchar)
49 (let ((occ-abil (occ-get-abil (kern-char-get-occ kchar) 0)))
52 (/ (+ (kern-char-get-level kchar)
53 (kern-char-get-dexterity kchar)) 4))
58 (occ-set-abil oc_wrogue 0
61 (+ (kern-char-get-level kchar)
62 (/ (kern-char-get-dexterity kchar) 3)))
68 (+ (/ (kern-char-get-level kchar) 2)
69 (/ (kern-char-get-dexterity kchar) 4)
71 (occ-set-abil oc_wright 0 partskill)
72 (occ-set-abil oc_ranger 0 partskill)
73 (occ-set-abil oc_wanderer 0 partskill)
76 (define (occ-thief-dice-roll kchar)
77 (kern-dice-roll (string-append "1d"
78 (number->string (occ-ability-thief kchar)))))
80 ;-----------------------------
83 (define (occ-ability-whitemagic kchar)
84 (let ((occ-abil (occ-get-abil (kern-char-get-occ kchar) 1)))
87 (+ (/ (kern-char-get-level kchar) 3)
88 (/ (kern-char-get-intelligence kchar) 3)))
92 (define (occ-ability-blackmagic kchar)
93 (let ((occ-abil (occ-get-abil (kern-char-get-occ kchar) 2)))
96 (/ (+ (kern-char-get-level kchar)
97 (kern-char-get-intelligence kchar)) 4))
105 (+ (kern-char-get-level kchar)
106 (/ (kern-char-get-intelligence kchar) 2))
111 (+ (* (kern-char-get-level kchar) 0.75)
112 (/ (kern-char-get-intelligence kchar) 3))
117 (+ (/ (kern-char-get-level kchar) 3)
118 (/ (kern-char-get-intelligence kchar) 3))
123 (+ (/ (kern-char-get-level kchar) 4)
124 (/ (kern-char-get-intelligence kchar) 4))
129 (+ (/ (kern-char-get-level kchar) 6)
130 (/ (kern-char-get-intelligence kchar) 4))
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)
142 ;-----------------------------
145 (define (occ-ability-magicdef kchar)
146 (let ((occ-abil (occ-get-abil (kern-char-get-occ kchar) 3)))
149 (+ (/ (kern-char-get-level kchar) 3)
150 (/ (kern-char-get-intelligence kchar) 2)))
158 (+ (/ (kern-char-get-level kchar) 2)
159 (/ (kern-char-get-intelligence kchar) 2))
164 (+ (* (kern-char-get-level kchar) 0.4)
165 (/ (kern-char-get-intelligence kchar) 2))
168 (occ-set-abil oc_wizard 3 highskill)
169 (occ-set-abil oc_wanderer 3 modskill)
172 ;----------------------------
175 (define (occ-ability-strattack kchar)
176 (let ((occ-abil (occ-get-abil (kern-char-get-occ kchar) 4)))
178 (floor (/ (* (kern-char-get-level kchar)
179 (+ (kern-char-get-strength kchar) 15))
187 (floor (/ (* (kern-char-get-level kchar)
188 (+ (kern-char-get-strength kchar) 10))
193 (floor (/ (* (kern-char-get-level kchar)
194 (+ (kern-char-get-strength kchar) 12))
199 (floor (/ (* (kern-char-get-level kchar)
200 (+ (kern-char-get-strength kchar) 10))
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)
212 (define (occ-ability-dexattack kchar)
213 (let ((occ-abil (occ-get-abil (kern-char-get-occ kchar) 5)))
215 (floor (/ (* (kern-char-get-level kchar)
216 (+ (kern-char-get-dexterity kchar) 15))
224 (floor (/ (* (kern-char-get-level kchar)
225 (+ (kern-char-get-dexterity kchar) 10))
230 (floor (/ (* (kern-char-get-level kchar)
231 (+ (kern-char-get-dexterity kchar) 12))
236 (floor (/ (* (kern-char-get-level kchar)
237 (+ (kern-char-get-dexterity kchar) 10))
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)
248 (define (occ-ability-strdamage kchar)
249 (floor (* 2 (- (log (+ 2 (occ-ability-strattack kchar)))))))
251 (define (occ-ability-dexdefend kchar)
252 (let ((occ-abil (occ-get-abil (kern-char-get-occ kchar) 6)))
254 (floor (+ (/ (kern-char-get-level kchar) 2)
255 (/ (kern-char-get-dexterity kchar) 3)))
262 (floor (+ (* (kern-char-get-level kchar) 0.8)
263 (/ (kern-char-get-dexterity kchar) 2)))
267 (floor (+ (* (kern-char-get-level kchar) 0.6)
268 (* (kern-char-get-dexterity kchar) 0.4)))
272 (floor (+ (/ (kern-char-get-level kchar) 3)
273 (/ (kern-char-get-dexterity kchar) 4)))
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)
283 (define (proc-stratt kchar)
284 (* 1000 (occ-ability-strattack kchar)))
286 (define (proc-dexatt kchar)
287 (* 1000 (occ-ability-dexattack kchar)))
289 (define (proc-strdam kchar)
290 (* 1000 (occ-ability-strdamage kchar)))
292 (define (proc-dexdef kchar)
293 (* 1000 (occ-ability-dexdefend kchar)))
295 ;----------------------------
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.
306 (define (occ-ability-crafting kchar)
307 (let ((occ-abil (occ-get-abil (kern-char-get-occ kchar) 7)))
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)
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)
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)
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)
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)
354 ;----------------------------
357 ;; These are for physical feats like sprinting and wriggling through
358 ;; bars. Piggyback on some of the other abilities for now.
360 (define (occ-ability-stracro kchar) (occ-ability-strattack kchar))
361 (define (occ-ability-dexacro kchar) (occ-ability-dexdef kchar))