1 | (setq ant_tints (make-array 14 :initial-contents (list
|
---|
2 | (def_tint "art/tints/ant/green.spe")
|
---|
3 | (def_tint "art/tints/ant/blue.spe")
|
---|
4 | (def_tint "art/tints/ant/brown.spe")
|
---|
5 | (def_tint "art/tints/ant/egg.spe")
|
---|
6 | (def_tint "art/tints/ant/yellow.spe")
|
---|
7 | (def_tint "art/tints/ant/mustard.spe")
|
---|
8 | (def_tint "art/tints/ant/orange.spe")
|
---|
9 | (def_tint "art/tints/ant/gray.spe")
|
---|
10 | normal_tint
|
---|
11 | normal_tint
|
---|
12 | normal_tint
|
---|
13 | (def_tint "addon/leon/gray.spe")
|
---|
14 | (def_tint "addon/leon/gray.spe")
|
---|
15 | (def_tint "addon/leon/gray.spe")
|
---|
16 | )))
|
---|
17 |
|
---|
18 | (defun crackN_ai ()
|
---|
19 | (if (eq (aistate) 0)
|
---|
20 | (if (if (eq (total_objects) 0)
|
---|
21 | (and (< (distx) 50) (< (disty) 70))
|
---|
22 | (with_object (get_object 0) (not (eq (aistate) 0))))
|
---|
23 | (set_aistate 1))
|
---|
24 | (select (current_frame)
|
---|
25 | (4 nil)
|
---|
26 | (3
|
---|
27 | (let ((d (direction))
|
---|
28 | (type (aitype)))
|
---|
29 | (if (or (eq create_total 0) (eq create_total 1))
|
---|
30 | (set_current_frame 4)
|
---|
31 | (progn
|
---|
32 | (setq create_total (- create_total 1))
|
---|
33 | (set_current_frame 0)))
|
---|
34 | (with_object (add_object_after ANT (+ (x) (* (direction) 20)) (y))
|
---|
35 | (progn
|
---|
36 | (set_aitype type)
|
---|
37 | (set_direction d)
|
---|
38 | (set_xvel (* d 20))
|
---|
39 | (set_state run_jump)
|
---|
40 | (set_aistate 6)))
|
---|
41 | ))
|
---|
42 | (0 (next_picture))
|
---|
43 | (1 (next_picture))
|
---|
44 | (2 (next_picture))))
|
---|
45 | T)
|
---|
46 |
|
---|
47 |
|
---|
48 |
|
---|
49 | (def_char ANT_CRACK_HIDDEN
|
---|
50 | (funs (ai_fun crack_ai)
|
---|
51 | (draw_fun dev_draw)
|
---|
52 | (get_cache_list_fun ant_cache)
|
---|
53 | (constructor crack_cons))
|
---|
54 | (range 250 0)
|
---|
55 | (vars create_total)
|
---|
56 | (fields ("create_total" ant_total)
|
---|
57 | ("aitype" ant_type))
|
---|
58 | (states "art/ant.spe"
|
---|
59 | (stopped (seq "aisw" 2 6))))
|
---|
60 |
|
---|
61 | (def_char ANT_CRACK_NEW
|
---|
62 | (funs (ai_fun crackN_ai)
|
---|
63 | (draw_fun ant_draw)
|
---|
64 | (get_cache_list_fun ant_cache)
|
---|
65 | (constructor crack_cons))
|
---|
66 | (range 250 0)
|
---|
67 | (vars create_total)
|
---|
68 | (fields ("create_total" ant_total)
|
---|
69 | ("aitype" ant_type))
|
---|
70 | (states "art/ant.spe"
|
---|
71 | (stopped (seq "aisw" 2 6))))
|
---|
72 |
|
---|
73 |
|
---|
74 |
|
---|
75 |
|
---|
76 | (defun anthole_ai ()
|
---|
77 | (select (aistate)
|
---|
78 | (0
|
---|
79 | (if (and (activated) (< (total_objects) (+ (xvel) 1) ) )
|
---|
80 | (go_state 2)
|
---|
81 | )
|
---|
82 | )
|
---|
83 | (3
|
---|
84 | (if (and (activated) (< (total_objects) (+ (xvel) 1) ) )
|
---|
85 | (progn
|
---|
86 | (if (eq (current_frame) 4)
|
---|
87 | (set_current_frame 1)
|
---|
88 | )
|
---|
89 | (go_state 4)
|
---|
90 | )
|
---|
91 | )
|
---|
92 | )
|
---|
93 | (4
|
---|
94 | (select (current_frame)
|
---|
95 | (0 (next_picture))
|
---|
96 | (1 (next_picture))
|
---|
97 | (2 (next_picture))
|
---|
98 | (3 (next_picture))
|
---|
99 | (4 (go_state 2))
|
---|
100 | )
|
---|
101 | )
|
---|
102 |
|
---|
103 | (1
|
---|
104 | (if (eq (state_time) (yvel))
|
---|
105 | (select (otype) (ANTHOLE (go_state 0))
|
---|
106 | (ANTCRACK2 (go_state 3))
|
---|
107 | )
|
---|
108 | )
|
---|
109 | )
|
---|
110 | (2
|
---|
111 | (if (eq (otype) ANTHOLE)
|
---|
112 | (let ( ( newant (add_object_after ANT_ROOF (x) (y) ) ) ( type (aitype) ) )
|
---|
113 | (with_object newant
|
---|
114 | (progn
|
---|
115 | (set_aitype type)
|
---|
116 | (set_state run_jump)
|
---|
117 | (set_aistate 1)
|
---|
118 | )
|
---|
119 | )
|
---|
120 | (link_object newant)
|
---|
121 | )
|
---|
122 | (let ( ( newant (add_object_after ANT_ROOF (+ (x) (* (direction) 20)) (y) ) ) ( type (aitype) ) ( d (direction) ) )
|
---|
123 | (with_object newant
|
---|
124 | (progn
|
---|
125 | (set_aitype type)
|
---|
126 | (set_direction d)
|
---|
127 | (set_xvel (* d 20))
|
---|
128 | (set_state run_jump)
|
---|
129 | (set_aistate 6)
|
---|
130 | )
|
---|
131 | )
|
---|
132 | (link_object newant)
|
---|
133 | )
|
---|
134 | )
|
---|
135 | (go_state 1)
|
---|
136 | )
|
---|
137 | )
|
---|
138 | T
|
---|
139 | )
|
---|
140 |
|
---|
141 | (def_char ANTHOLE
|
---|
142 | (funs (ai_fun anthole_ai)
|
---|
143 | (draw_fun dev_draw)
|
---|
144 | (get_cache_list_fun ant_cache))
|
---|
145 | (range 250 0)
|
---|
146 | (fields ("xvel" "max ants")
|
---|
147 | ("aitype" ai_type)
|
---|
148 | ("aistate" "ai_state")
|
---|
149 | ("yvel" "delay"))
|
---|
150 | (states "art/ant.spe"
|
---|
151 | (stopped (seq "affc" 1 2))))
|
---|
152 |
|
---|
153 | (defun crack2_cons ()
|
---|
154 | (set_aistate 3))
|
---|
155 |
|
---|
156 | (def_char ANTCRACK2
|
---|
157 | (funs (ai_fun anthole_ai)
|
---|
158 | (draw_fun ant_draw)
|
---|
159 | (get_cache_list_fun ant_cache)
|
---|
160 | (constructor crack2_cons))
|
---|
161 | (range 250 0)
|
---|
162 | (fields ("xvel" "max ants")
|
---|
163 | ("aitype" ai_type)
|
---|
164 | ("aistate" "ai_state")
|
---|
165 | ("yvel" "delay"))
|
---|
166 | (states "art/ant.spe"
|
---|
167 | (stopped (seq "aisw" 2 6))))
|
---|
168 |
|
---|
169 | (defun make_new_ant_type ( name aifun drawfun damfun runspd shp pacel tacel jumpyvel jumpxvel )
|
---|
170 | (eval `(def_char ,name
|
---|
171 | (vars need_to_dodge
|
---|
172 | no_see_time
|
---|
173 | hide_flag
|
---|
174 | xvar1
|
---|
175 | xvar2
|
---|
176 | xvar3
|
---|
177 | aivar1
|
---|
178 | aivar2)
|
---|
179 |
|
---|
180 | (fields
|
---|
181 | ("xvar1" "class specific var1")
|
---|
182 | ("xvar2" "class specific var2")
|
---|
183 | ("xvar3" "class specific var3")
|
---|
184 | ("hide_flag" ant_hide)
|
---|
185 | ("fade_count" ai_fade)
|
---|
186 | ("aitype" ai_type)
|
---|
187 | ("hp" ai_health)
|
---|
188 | ("aistate" ai_state))
|
---|
189 | (range 250 20)
|
---|
190 | (draw_range 40 40)
|
---|
191 | (funs (ai_fun ,aifun)
|
---|
192 | (draw_fun ,drawfun)
|
---|
193 | (constructor ant_cons)
|
---|
194 | (type_change_fun ant_ct)
|
---|
195 | (get_cache_list_fun ant_cache)
|
---|
196 | (damage_fun ,damfun))
|
---|
197 |
|
---|
198 | (abilities (run_top_speed runspd)
|
---|
199 | (start_hp shp)
|
---|
200 | (stop_acel pacel)
|
---|
201 | (start_acel tacel)
|
---|
202 | (jump_yvel jumpyvel)
|
---|
203 | (jump_xvel jumpxvel)
|
---|
204 | (push_xrange 1)
|
---|
205 | (jump_top_speed (+ jumpyvel jumpxvel) ))
|
---|
206 |
|
---|
207 | (flags
|
---|
208 | (hurtable T)
|
---|
209 | (force_health T))
|
---|
210 |
|
---|
211 | (states "art/ant.spe"
|
---|
212 | (hanging (rep "ant" 2))
|
---|
213 |
|
---|
214 | (fall_start "affc0001.pcx")
|
---|
215 | (falling "affc0002.pcx")
|
---|
216 |
|
---|
217 | (stopped "awlk0001.pcx")
|
---|
218 | (running (seq "awlk" 1 10))
|
---|
219 | (landing (seq "acff" 1 4))
|
---|
220 | (pounce_wait "acff0001.pcx")
|
---|
221 | (turn_around (seq "atrn" 1 5))
|
---|
222 |
|
---|
223 | (run_jump "dive")
|
---|
224 | (run_jump_fall "dive")
|
---|
225 | (start_run_jump "dive")
|
---|
226 | (fire_wait (seq "wait" 1 3))
|
---|
227 |
|
---|
228 | (ceil_fire (seq "cfire" 1 3))
|
---|
229 | (top_walk (seq "awkc" 1 10))
|
---|
230 | (flinch_up (rep "afh10001.pcx" 2))
|
---|
231 | (flinch_down (rep "afh20001.pcx" 2))
|
---|
232 | (blown_back_dead "adib0009.pcx")
|
---|
233 | (jump_up "ajmp.pcx")
|
---|
234 | (hiding "hidden")
|
---|
235 | (dead "hidden")
|
---|
236 | (weapon_fire (seq "asht" 2 5))))
|
---|
237 | ))
|
---|
238 |
|
---|
239 |
|
---|
240 |
|
---|
241 |
|
---|
242 | (setq ai_ammo (make-array 15 :initial-contents (list MBULLET_ICON5
|
---|
243 | MBULLET_ICON5
|
---|
244 | GRENADE_ICON2
|
---|
245 | ROCKET_ICON2
|
---|
246 | PLASMA_ICON20
|
---|
247 | MBULLET_ICON5
|
---|
248 | MBULLET_ICON5
|
---|
249 | MBULLET_ICON5
|
---|
250 | MBULLET_ICON5
|
---|
251 | MBULLET_ICON20
|
---|
252 | MBULLET_ICON20
|
---|
253 | MBULLET_ICON20
|
---|
254 | MBULLET_ICON20
|
---|
255 | MBULLET_ICON20
|
---|
256 | MBULLET_ICON20)))
|
---|
257 |
|
---|
258 | (defun ant_Ndamage (amount from hitx hity push_xvel push_yvel) ; Some piece of really ugly looking code
|
---|
259 |
|
---|
260 | (if (and (not (eq (state) dead))
|
---|
261 | (or (not from)
|
---|
262 | (with_object from (if (eq (total_objects) 0)
|
---|
263 | (not (eq (otype) ANT_ROOF))
|
---|
264 | (with_object (get_object 0) (not (eq (otype) ANT_ROOF)))))))
|
---|
265 | (if (not (eq (aistate) 15))
|
---|
266 | (progn
|
---|
267 | (if (eq (random 2) 0)
|
---|
268 | (set_state flinch_up)
|
---|
269 | (set_state flinch_down))
|
---|
270 | (damage_fun amount from hitx hity push_xvel push_yvel)
|
---|
271 | (play_sound APAIN_SND 127 (x) (y))
|
---|
272 | (setq need_to_dodge 1)
|
---|
273 | (if (<= (hp) 0)
|
---|
274 | (progn
|
---|
275 | (if (eq (aitype) 0)
|
---|
276 | (play_sound (aref ASML_DEATH (random 2)) 127 (x) (y))
|
---|
277 | (play_sound (aref ALRG_DEATH (random 3)) 127 (x) (y)))
|
---|
278 |
|
---|
279 | (set_state dead)
|
---|
280 | (if (or (eq (aitype) 2) (eq (aitype) 4) ) (set_aitype 0) nil )
|
---|
281 | (set_hp 0 )
|
---|
282 | (if (eq (random (select difficulty
|
---|
283 | ('easy 2)
|
---|
284 | ('medium 5)
|
---|
285 | ('hard 8)
|
---|
286 | ('extreme 20))) 0)
|
---|
287 | (if (eq (random 4) 0)
|
---|
288 | (add_object (aitype_to_ammo (+ (aitype) 1)) (x) (y)))
|
---|
289 | (add_object (aitype_to_ammo (aitype)) (x) (y)))
|
---|
290 | (if ( eq (get_dead_part from) flaming_part )
|
---|
291 | ; Explosive weapon?
|
---|
292 | (if (eq (random 2) 0) (create_dead_parts ant_dead_parts (* (get_dead_part from) 3) (aitype))
|
---|
293 | (let ((d (direction))
|
---|
294 | (type (aitype)))
|
---|
295 | (with_object (add_object ANTBODY (x) (y))
|
---|
296 | (progn
|
---|
297 | (set_aitype type)
|
---|
298 | (set_direction d)
|
---|
299 | )))
|
---|
300 | )
|
---|
301 | ; No?
|
---|
302 | (if (eq (random 5) 0) (create_dead_parts ant_dead_parts (* (get_dead_part from) 3) (aitype))
|
---|
303 | (let ((d (direction))
|
---|
304 | (type (aitype)))
|
---|
305 | (with_object (add_object DECO_ANTBODY (x) (y))
|
---|
306 | (progn
|
---|
307 | (set_aitype type)
|
---|
308 | (set_direction d)
|
---|
309 | )))
|
---|
310 | )
|
---|
311 |
|
---|
312 | )
|
---|
313 |
|
---|
314 |
|
---|
315 |
|
---|
316 |
|
---|
317 | )
|
---|
318 | )))))
|
---|
319 |
|
---|
320 |
|
---|
321 |
|
---|
322 | (defun pred_draw ()
|
---|
323 | (if (edit_mode)
|
---|
324 | (ant_draw)
|
---|
325 | (draw_predator)))
|
---|
326 |
|
---|
327 | (defun great_damage (amount from hitx hity push_xvel push_yvel)
|
---|
328 | (if (and (eq (fade_count) 0) (not (eq (aistate) 15)) )
|
---|
329 | (progn
|
---|
330 | (play_sound APAIN_SND 127 (x) (y))
|
---|
331 | (if (eq (random 3) 0)
|
---|
332 | (damage_fun amount from hitx hity push_xvel push_yvel)
|
---|
333 | (add_hp (* amount -1) ) )
|
---|
334 | (if (eq (hp) 0)
|
---|
335 | (progn
|
---|
336 | (if (> xvar1 0) (set_hp 100) nil)
|
---|
337 | (setq xvar1 (- xvar1 1))
|
---|
338 | (if (eq xvar1 -1) ;; substract 1 life
|
---|
339 | (let ((d (direction))
|
---|
340 | (type (aitype)))
|
---|
341 | (with_object (add_object GRANTBODY (x) (y))
|
---|
342 | (progn
|
---|
343 | (set_aitype type)
|
---|
344 | (set_direction d)
|
---|
345 | )))
|
---|
346 | (set_aistate 6))))))) ;; Continue
|
---|
347 |
|
---|
348 |
|
---|
349 |
|
---|
350 | (defun grantbody_ai ()
|
---|
351 | (if (< (hp) 12) (play_sound (aref ASML_DEATH (random 2)) 127 (x) (y)) nil)
|
---|
352 | (if (< (hp) 16) (play_sound (aref ALRG_DEATH (random 3)) 127 (x) (y)) nil)
|
---|
353 | (if (< (hp) 9) (create_dead_parts ant_dead_parts (* normal_part 3) (aitype)) nil)
|
---|
354 | (if (< (hp) 16 ) (progn (next_picture) (set_hp (+ (hp) 1) ) ) nil )
|
---|
355 | (if (eq0 (aistate)) (progn
|
---|
356 | (try_move 0 10)
|
---|
357 | (if (eq (second (see_dist (x) (y) (x) (+ (y) 1))) (y)) ; if we are on the floor, don't check falling anymore
|
---|
358 | (set_aistate 1))))
|
---|
359 | T
|
---|
360 | )
|
---|
361 |
|
---|
362 |
|
---|
363 | (def_char GRANTBODY
|
---|
364 | (funs (ai_fun grantbody_ai)
|
---|
365 | (draw_fun ant_draw))
|
---|
366 | (flags (unlistable T) (add_front T))
|
---|
367 | (states "art/ant.spe" (stopped (seq "adib" 1 16))))
|
---|
368 |
|
---|
369 | (defun grant_ai ()
|
---|
370 | (if (eq (aistate) 6)
|
---|
371 | (if (eq xvar2 1)
|
---|
372 | (progn
|
---|
373 | (if (eq (random 3) 0)
|
---|
374 | (set_aistate 2)
|
---|
375 | (set_aistate 8)
|
---|
376 | )
|
---|
377 | (ant_ai)
|
---|
378 | )
|
---|
379 | (ant_ai)
|
---|
380 | )
|
---|
381 | (ant_ai)
|
---|
382 | )
|
---|
383 | )
|
---|
384 |
|
---|
385 | (defun stat( aistat )
|
---|
386 | (eq (aistate) aistat)
|
---|
387 | )
|
---|
388 |
|
---|
389 | (defun tant_ai ()
|
---|
390 | (if (stat 8)
|
---|
391 | (progn
|
---|
392 | (ant_ai)
|
---|
393 | (set_direction (toward) )
|
---|
394 | (if (and (stat 2) (not (eq (random 5) 0) ) )
|
---|
395 | (set_aistate 8)
|
---|
396 | )
|
---|
397 | )
|
---|
398 | (ant_ai)
|
---|
399 | )
|
---|
400 | (if (eq (hp) 0 ) nil T )
|
---|
401 | )
|
---|
402 |
|
---|
403 | (defun tough_damage (amount from hitx hity push_xvel push_yvel)
|
---|
404 | (if (not (eq (aistate) 15))
|
---|
405 | (progn
|
---|
406 | (if (eq (random 5) 0)
|
---|
407 | (damage_fun amount from hitx hity push_xvel push_yvel)
|
---|
408 | (add_hp (* amount -1) ) )
|
---|
409 | (if (<= (hp) 0)
|
---|
410 | (let ((d (direction))
|
---|
411 | (type (aitype)))
|
---|
412 | (with_object (add_object ANTBODY (x) (y))
|
---|
413 | (progn
|
---|
414 | (set_aitype type)
|
---|
415 | (set_direction d)
|
---|
416 | )
|
---|
417 | )
|
---|
418 | (play_sound (aref ASML_DEATH (random 2)) 127 (x) (y))
|
---|
419 | (create_dead_parts ant_dead_parts (* normal_part 3) type)
|
---|
420 | )
|
---|
421 | )
|
---|
422 | )
|
---|
423 | )
|
---|
424 | )
|
---|
425 |
|
---|
426 | (make_new_ant_type 'ANT_PRED 'ant_ai 'pred_draw 'ant_damage 7 20 20 20 -4 20)
|
---|
427 | (make_new_ant_type 'ANT_JUMPER 'ant_ai 'ant_draw 'ant_Ndamage 7 20 20 20 -12 10)
|
---|
428 | (make_new_ant_type 'ANT 'ant_ai 'ant_draw 'ant_Ndamage 6 30 15 15 -6 18)
|
---|
429 | (make_new_ant_type 'ANT_GREATER2 'grant_ai 'ant_draw 'great_damage 12 100 30 30 -6 15)
|
---|
430 | ;; Xvar1 = Number of lives. Xvar2 = Can't jump?
|
---|
431 | ;; Used to be ANT_GREATER, but this class was removed when I added make_new_ant_type function.
|
---|
432 | (make_new_ant_type 'ANT_TOUGH 'tant_ai 'ant_draw 'tough_damage 9 200 10 10 -6 10) |
---|