source: abuse/trunk/data/addon/twist/lisp/ai.lsp @ 589

Last change on this file since 589 was 589, checked in by Sam Hocevar, 10 years ago

data: remove exact duplicate Lisp files, merge all main space Lisp files,
and move most frabs addons to the main data directory.

File size: 15.9 KB
Line 
1;; Copyright 1999 Profound Corp,  All Rights reserved
2;; See licensing information for more details on usage rights
3
4
5(defun lower_draw ()
6   (lower)
7   (draw))
8
9
10(defun mantrack_ai ()
11(if (<= (total_objects) 0)
12      nil
13    (if (activated)
14        (if (eq (state) stopped)
15            (progn
16              (set_targetable T)
17              (set_state opening)
18              T)
19          (if (and (eq (state) opening) (next_picture))
20              T
21            (progn
22              (set_state spinning)
23              (set_frame_angle 0 359 angle)
24
25              (if (eq continue_time_left 0);; do we need to wait?
26                  (if (eq fire_delay_left 0)
27                      ;; get the angle to the player
28                      (let ((pangle (atan2 (- (- (y) (with_object (bg) (y))) -8)
29                                           (- (with_object (bg) (x)) (x) ))))
30                        (let ((clock_dist (if (< pangle angle);; calculate clockwise angle distance
31                                              (- angle pangle)
32                                            (+ angle (- 360 pangle)))))
33                          (let ((closest_dist (if (> clock_dist 180)
34                                                  (- 360 clock_dist)
35                                                clock_dist)))
36                            (let ((angle_add (if (>= closest_dist track_speed)
37                                                 track_speed
38                                               closest_dist)))
39                              (if (> clock_dist 180);; should we steer clowck wise or counter?
40                                  (track_set_angle (mod (+ angle angle_add) 360))
41                                (track_set_angle (mod (+ (- angle angle_add) 360) 360)))
42                              (if (< angle_add 5);; pretty close to target, FIRE!
43                                  (track_fire))))))
44                    (setq fire_delay_left (- fire_delay_left 1)))
45                (progn
46                  (setq continue_time_left (- continue_time_left 1))
47                  (if (eq continue_time_left 0)
48                      (setq burst_total_left burst_total))))
49              T))) (progn
50        (set_targetable nil)
51        (set_state stopped)
52        T))))
53
54
55(defun manspray_ai ()
56  (if (<= (total_objects) 0)
57      nil
58    (if (and (< (distx) 450) (< (disty) 400))
59        (progn
60          (select (aistate)
61                  (0;; look at sensor
62                   (if (activated)
63                       (if (eq (state) stopped)
64                           (progn
65                             (set_targetable T)
66                             (set_state spray.appear)
67                             (go_state 1))
68                         (go_state 3))
69                     (progn
70                       (set_targetable nil)
71                       (set_state stopped))))
72                  (1;; unfold
73                   (if (next_picture) T
74                     (progn (set_aistate 3)
75                            (set_state spray.aim)
76                            (setq spray.angle spray.start_angle)
77                            (set_frame_angle 0 359 spray.angle)
78                            )))
79                  (2;; fold up
80                   (if (next_picture) T
81                     (progn (set_state stopped)
82                            (set_aistate 0))))
83                  (3;; swivel down
84                   (if (> (state_time) spray.fire_delay)
85                       (progn
86                         (set_aistate 3);; reset state time
87                         (setq spray.angle (- spray.angle spray.angle_speed))
88                         (if (<= spray.angle spray.start_angle)
89                             (progn
90                               (setq spray.angle spray.start_angle)
91                               (set_aistate 4)))
92                         (set_frame_angle 0 359 spray.angle)
93                         (spray_fire))))
94                  (4;; swivel up
95                   (if (> (state_time) spray.fire_delay)
96                       (progn
97                         (set_aistate 4);; reset state time
98                         (setq spray.angle (+ spray.angle spray.angle_speed))
99                         (if (>= spray.angle spray.end_angle)
100                             (progn
101                               (setq spray.angle spray.end_angle)
102                               (set_aistate 0)))
103                         (set_frame_angle 0 359 spray.angle)
104                         (spray_fire)))))
105          T) (progn (set_state stopped) T))))
106
107
108(defun fire_ai ()
109  (if (and (touching_bg) (eq (mod (state_time) 10) 0))
110      (do_damage 10 (bg)))
111
112  (select (aistate)
113          (0 (if (eq (random 75) 0)
114                 (progn
115                   (play_sound LAVA_SND 64 (x) (y))
116                   (set_aistate 1)))
117             (next_picture))
118          (1 (next_picture)
119             (if (eq (state_time) 5)
120                 (progn
121                   (hurt_radius (x) (y) 20 20 nil 10)
122                   (set_aistate 0)))))
123  T)
124
125
126
127(defun forceobj_ai ()
128  (if (<= (total_objects) 0)
129      nil
130     (progn
131        (let ((xfrc (xacel))
132              (yfrc (yacel)))
133        (try_move xfrc yfrc))
134          T)))
135
136
137(defun forceobj_cons ()
138  (set_xacel 0)
139  (set_yacel 10))
140
141
142(defun do_fire_explo (radius amount)
143      (play_sound GRENADE_SND 127 (x) (y))
144      (add_object EXPFIRE (+ (x) (random 10)) (+ (+ (random 10) (y)) -20)     0)
145      (if (not (frame_panic))
146          (progn
147            (add_object EXPFIRE (- (x) (random 10)) (+ (- (y) (random 10)) -20) 2)
148            (add_object EXP_LIGHT (x) (y) 100)))         ; add cool light if not too slow
149      (hurt_radius (x) (y) radius amount (if (> (total_objects) 0)
150                                             (get_object 0)
151                                           nil) 20)
152      nil)
153
154
155(defun do_light_explo (radius amount)
156      (play_sound GRENADE_SND 127 (x) (y))
157;;      (add_object EXPFIRE (+ (x) (random 10)) (+ (+ (random 10) (y)) -20)     0)
158      (if (not (frame_panic))
159          (progn
160;;          (add_object EXPFIRE (- (x) (random 10)) (+ (- (y) (random 10)) -20) 2)
161            (add_object EXP_LIGHT (x) (y) 100)))         ; add cool light if not too slow
162      (hurt_radius (x) (y) radius amount (if (> (total_objects) 0)
163                                             (get_object 0)
164                                           nil) 20)
165      nil)
166
167
168(defun msensor_ai ()
169      (if (and (< (distx) (xvel)) (< (disty) (yvel)))
170           (progn
171                (stop_song)
172                (select (aitype)
173                   (0  (play_song "music/intro.hmi"))
174                   (1  (play_song "music/abuse01.hmi"))
175                   (2  (play_song "music/abuse02.hmi"))
176                   (3  (play_song "music/abuse03.hmi"))
177                   (4  (play_song "music/abuse04.hmi"))
178                   (5  (play_song "music/abuse06.hmi"))
179                   (6  (play_song "music/abuse08.hmi"))
180                   (7  (play_song "music/abuse09.hmi"))
181                   (8  (play_song "music/abuse11.hmi"))
182                   (9  (play_song "music/abuse13.hmi"))
183                   (10 (play_song "music/abuse15.hmi"))
184                   (11 (play_song "music/abuse17.hmi")))
185                nil)
186           T))
187
188(defun msensor_cons ()
189  (set_xvel 50)
190  (set_yvel 50)
191  (set_xacel 0)
192  (set_yacel 0)
193  (add_hp -10))
194
195
196(defun music_sensor_draw ()
197  (if (edit_mode)
198      (progn
199        (draw)
200        (let ((x1 (- (x) (xvel)))
201              (y1 (- (y) (yvel)))
202              (x2 (+ (x) (xvel)))
203              (y2 (+ (y) (yvel)))
204              (c  (find_rgb 0 0 255)))
205          (draw_line x1 y1 x2 y1 c)
206          (draw_line x2 y1 x2 y2 c)
207          (draw_line x2 y2 x1 y2 c)
208          (draw_line x1 y2 x1 y1 c)))
209    nil))
210
211
212(defun gsensor_ai ()
213      (if (and (< (distx) (xvel)) (< (disty) (yvel)))
214           (progn
215                (let ((xgvty (xacel))
216                      (ygvty (yacel)))
217                        (with_object (bg) (try_move xgvty ygvty))))
218                T)
219           T)
220
221
222(defun gsensor_cons ()
223  (set_xvel 50)
224  (set_yvel 50)
225  (set_xacel 0)
226  (set_yacel -15))
227
228
229(defun gravity_sensor_draw ()
230  (if (edit_mode)
231      (progn
232        (draw)
233        (let ((x1 (- (x) (xvel)))
234              (y1 (- (y) (yvel)))
235              (x2 (+ (x) (xvel)))
236              (y2 (+ (y) (yvel)))
237              (c  (find_rgb 255 255 0)))
238          (draw_line x1 y1 x2 y1 c)
239          (draw_line x2 y1 x2 y2 c)
240          (draw_line x2 y2 x1 y2 c)
241          (draw_line x1 y2 x1 y1 c)))
242    nil))
243
244
245(defun hsensor_ai ()
246      (if (and (< (distx) (xvel)) (< (disty) (yvel)))
247           (progn
248                (select (aitype)
249                   (0   (let ((phlth (xacel))) (if (eq (mod (state_time) 10) 0) (do_damage phlth (bg)))))
250                   (1   (let ((phlth (xacel)) (hlthrad (/ (xvel) 2))) (hurt_radius (x) (y) hlthrad phlth nil 10)))
251                   (2   (let ((phlth (xacel)) (hlthrad (/ (xvel) 2))) (do_explo hlthrad phlth)))
252                        )
253                T)
254           T))
255
256
257(defun hsensor_cons ()
258  (set_xvel 50)
259  (set_yvel 50)
260  (set_aitype 0)
261  (set_aistate 0)
262  (set_xacel 10)
263  (set_yacel 0))
264
265
266(defun health_sensor_draw ()
267  (if (edit_mode)
268      (progn
269        (draw)
270        (let ((x1 (- (x) (xvel)))
271              (y1 (- (y) (yvel)))
272              (x2 (+ (x) (xvel)))
273              (y2 (+ (y) (yvel)))
274              (c  (find_rgb 255 0 255)))
275          (draw_line x1 y1 x2 y1 c)
276          (draw_line x2 y1 x2 y2 c)
277          (draw_line x2 y2 x1 y2 c)
278          (draw_line x1 y2 x1 y1 c)))
279    nil))
280
281
282(defun lsensor_ai ()
283      (if (and (< (distx) (xvel)) (< (disty) (yvel)))
284           (progn
285                (if (eq (aistate) 1) (request_end_game))
286                (if (eq (aitype) 1) (show_stats))
287                (request_level_load (concatenate 'string "addon/twist/levels/l" (digstr (xacel) 2) "s" (digstr (yacel) 2) ".lvl"))
288           )
289                T)
290           T)
291
292
293(defun lsensor_cons ()
294  (set_xvel 50)
295  (set_yvel 50)
296  (set_xacel 1)
297  (set_yacel 1)
298  (set_aistate 0)
299  (set_aitype 1))
300
301
302(defun level_sensor_draw ()
303  (if (edit_mode)
304      (progn
305        (draw)
306        (let ((x1 (- (x) (xvel)))
307              (y1 (- (y) (yvel)))
308              (x2 (+ (x) (xvel)))
309              (y2 (+ (y) (yvel)))
310              (c  (find_rgb 255 128 0)))
311          (draw_line x1 y1 x2 y1 c)
312          (draw_line x2 y1 x2 y2 c)
313          (draw_line x2 y2 x1 y2 c)
314          (draw_line x1 y2 x1 y1 c)))
315    nil))
316
317
318;; Cheats
319;;
320;; Add Health:  Vitalize
321;; All Weapons: Arms
322;; Full Ammo:   Reload
323;; Power Fast:  Steroids
324;; Power Fly:   Lift
325;; Power Sneaky:Mirage
326;; Power Health:Elixir
327;; Power Light: Visor
328;; End Game:    Outcome
329;; To use cheat, type cheat code.
330;; Note: if you press any direction keys, you'll have to retype the whole thing.
331
332(defun csensor_ai ()
333(progn (set_x (with_object (bg) (x))) (set_y (with_object (bg) (y))))
334
335(if (local_key_pressed up-key) (set_aistate 0))
336(if (local_key_pressed down-key) (set_aistate 0))
337(if (local_key_pressed left-key) (set_aistate 0))
338(if (local_key_pressed right-key) (set_aistate 0))
339(if (local_key_pressed weapon-left-key) (set_aistate 0))
340(if (local_key_pressed weapon-right-key) (set_aistate 0))
341
342      (if (eq (fourth (mouse_stat)) 1)
343           (progn
344                (select (aistate)
345                ;; First Letter
346                   (0   (if (local_key_pressed key-v) (set_aistate 1))
347                        (if (local_key_pressed key-a) (set_aistate 10))
348                        (if (local_key_pressed key-r) (set_aistate 13))
349                        (if (local_key_pressed key-s) (set_aistate 18))
350                        (if (local_key_pressed key-l) (set_aistate 25))
351                        (if (local_key_pressed key-m) (set_aistate 28))
352                        (if (local_key_pressed key-e) (set_aistate 33))
353                        (if (local_key_pressed key-o) (set_aistate 38)))
354                ;; Vitalize
355                   (1   (if (local_key_pressed key-i) (set_aistate 2)))
356                   (2   (if (local_key_pressed key-t) (set_aistate 3))
357                        (if (local_key_pressed key-s) (set_aistate 8)))
358                   (3   (if (local_key_pressed key-a) (set_aistate 4)))
359                   (4   (if (local_key_pressed key-l) (set_aistate 5)))
360                   (5   (if (local_key_pressed key-i) (set_aistate 6)))
361                   (6   (if (local_key_pressed key-z) (set_aistate 44)))
362                   (7   (if (local_key_pressed key-e) (set_aistate 44)))
363                ;; Visor
364                   (8   (if (local_key_pressed key-o) (set_aistate 45)))
365                   (9   (if (local_key_pressed key-r) (set_aistate 45)))
366                ;; Arms
367                   (10  (if (local_key_pressed key-r) (set_aistate 11)))
368                   (11  (if (local_key_pressed key-m) (set_aistate 46)))
369                   (12  (if (local_key_pressed key-s) (set_aistate 46)))
370                ;; Reload
371                   (13  (if (local_key_pressed key-e) (set_aistate 14)))
372                   (14  (if (local_key_pressed key-l) (set_aistate 15)))
373                   (15  (if (local_key_pressed key-o) (set_aistate 16)))
374                   (16  (if (local_key_pressed key-a) (set_aistate 47)))
375                   (17  (if (local_key_pressed key-d) (set_aistate 47)))
376                ;; Steroids
377                   (18  (if (local_key_pressed key-t) (set_aistate 19)))
378                   (19  (if (local_key_pressed key-e) (set_aistate 20)))
379                   (20  (if (local_key_pressed key-r) (set_aistate 21)))
380                   (21  (if (local_key_pressed key-o) (set_aistate 22)))
381                   (22  (if (local_key_pressed key-i) (set_aistate 23)))
382                   (23  (if (local_key_pressed key-d) (set_aistate 48)))
383                   (24  (if (local_key_pressed key-s) (set_aistate 48)))
384                ;; Lift
385                   (25  (if (local_key_pressed key-i) (set_aistate 26)))
386                   (26  (if (local_key_pressed key-f) (set_aistate 49)))
387                   (27  (if (local_key_pressed key-t) (set_aistate 49)))
388                ;; Mirage
389                   (28  (if (local_key_pressed key-i) (set_aistate 29)))
390                   (29  (if (local_key_pressed key-r) (set_aistate 30)))
391                   (30  (if (local_key_pressed key-a) (set_aistate 31)))
392                   (31  (if (local_key_pressed key-g) (set_aistate 50)))
393                   (32  (if (local_key_pressed key-e) (set_aistate 50)))
394                ;; Elixir
395                   (33  (if (local_key_pressed key-l) (set_aistate 34)))
396                   (34  (if (local_key_pressed key-i) (set_aistate 35)))
397                   (35  (if (local_key_pressed key-x) (set_aistate 36)))
398                   (36  (if (local_key_pressed key-i) (set_aistate 51)))
399                   (37  (if (local_key_pressed key-r) (set_aistate 51)))
400                ;; Outcome
401                   (38  (if (local_key_pressed key-u) (set_aistate 39)))
402                   (39  (if (local_key_pressed key-t) (set_aistate 40)))
403                   (40  (if (local_key_pressed key-c) (set_aistate 41)))
404                   (41  (if (local_key_pressed key-o) (set_aistate 42)))
405                   (42  (if (local_key_pressed key-m) (set_aistate 52)))
406                   (43  (if (local_key_pressed key-e) (set_aistate 52)))
407
408        ;; Last Word
409                ;; Vitalize Activation
410                   (44  (if (local_key_pressed key-e) (progn (with_object (bg) (give_player_health 20)) (set_aistate 0))))
411                ;; Visor Activation
412                   (45  (if (local_key_pressed key-r) (progn (with_object (bg) (progn (setq special_power HEALTH_POWER))) (set_aistate 0))))
413                ;; Arms Activation
414                   (46  (if (local_key_pressed key-s) (progn (with_object (bg) (progn (give_weapon 0)(give_weapon 1)(give_weapon 2)(give_weapon 3)(give_weapon 4)(give_weapon 5)(give_weapon 6)(give_weapon 7))) (set_aistate 0))))
415                ;; Reload Activation
416                   (47  (if (local_key_pressed key-d) (progn (with_object (bg) (progn (add_ammo 0 999)(add_ammo 1 999)(add_ammo 2 999)(add_ammo 3 999)(add_ammo 4 999)(add_ammo 5 999)(add_ammo 6 999)(add_ammo 7 999))) (set_aistate 0))))
417                ;; Steroids Activation
418                   (48  (if (local_key_pressed key-s) (progn (with_object (bg) (progn (setq special_power FAST_POWER))) (set_aistate 0))))
419                ;; Lift Activation
420                   (49  (if (local_key_pressed key-t) (progn (with_object (bg) (progn (setq special_power FLY_POWER))) (set_aistate 0))))
421                ;; Mirage Activation
422                   (50  (if (local_key_pressed key-e) (progn (with_object (bg) (progn (setq special_power SNEAKY_POWER))) (set_aistate 0))))
423                ;; Elixir Activation
424                   (51  (if (local_key_pressed key-r) (progn (with_object (bg) (progn (setq special_power HEALTH_POWER))) (set_aistate 0))))
425                ;; Outcome Activation
426                   (52  (if (local_key_pressed key-e) (progn (stop_song) (play_song "music/victory.hmi")(play_sound END_LEV_SND 127 (x) (y))(request_end_game))))
427                ) T) T))
428
429
430(defun burst_fire (firex firey angle)
431  (if (> fire_time 0);; if we need to wait till next burst
432      (progn
433        (setq fire_time (- fire_time 1))
434        (if (eq fire_time 0)
435            (progn
436              (setq burst_left burst_total)
437              (setq burst_wait 0))))
438    (if (eq burst_wait 0)
439        (progn
440          (if (or (eq burst_left 1) (eq burst_left 0))
441              (setq fire_time fire_delay)
442            (setq burst_left (- burst_left 1)))
443          (setq burst_wait burst_delay)
444          (fire_object (me) (aitype) firex firey angle (bg)))
445      (setq burst_wait (- burst_wait 1)))))
446
447
448(defun wrob_cons ()
449  (setq fire_delay 4)
450  (setq burst_delay 1)
451  (setq max_xvel 10)
452  (setq max_yvel 5)
453  (set_aitype 0)
454  (setq burst_total 5))
455
456
457(defun wrob_ai ()
458  (if (eq (hp) 0)
459        (with_object (add_object WALK_ROBHEAD (x) (- (y) 24) 1)
460      nil)
461    (progn
462        (try_move 0 10)
463      (select (aistate)
464              (0;; walk toward player
465               (if (or (> (distx) 120) (not (eq (direction) (toward))))
466                   (progn
467                     (move (toward) 0 0)
468                     (next_picture))
469                 (progn
470                   (set_state stopped)
471                   (set_aistate 1))))
472              (1;; stop and fire
473               (burst_fire  (+ (x) (* (direction) 28)) (- (y) 35)
474                            (if (> (direction) 0)
475                                (mod (- 375 (/ (* burst_left 30) burst_total)) 360)
476                              (+ 165 (/ (* burst_left 30) burst_total))))
477               (if (not (eq fire_time 0))
478                   (set_aistate 0))))
479      T)))
480
481
482(defun telesensor_ai ()
483  (if (> (total_objects) 0)
484      (select (aistate)
485              (0 ;; wait for player to activate
486               (if (and (< (distx) (xvel)) (< (disty) (yvel)))
487                   (progn
488                (if (eq (aitype) 0)
489                         (progn
490                           (link_object (bg))
491                           (set_state running)
492                           (set_aistate 1))
493
494                     (if (with_object (bg) (pressing_action_key))
495                         (progn
496                           (link_object (bg))
497                           (set_state running)
498                           (set_aistate 1))
499                         )))) )
500              (1 ;; wait for animation
501               (if (next_picture)
502                   (let ((x (x))
503                         (y (- (y) 16))
504                         (fade (if (< (current_frame) 16) (current_frame) 15)))
505                     (with_object (get_object 1)
506                                  (progn
507                                    (set_x x)
508                                    (set_y y)
509                                    (user_fun SET_FADE_COUNT fade)
510                                    (setq is_teleporting 1)
511                                    )))
512
513                 (let ((x (with_object (get_object 0) (x)))
514                       (y (with_object (get_object 0) (- (y) 16))))
515                   (with_object (get_object 1)
516                                (progn
517                                  (set_x x)
518                                  (set_y y)
519                                  (setq is_teleporting 0)
520                                  (user_fun SET_FADE_COUNT 0)
521                                  ))
522                   (remove_object (get_object 1))
523                   (set_aistate 0))))))
524  T)
525
526
527(defun telesensor_cons ()
528  (set_xvel 50)
529  (set_yvel 50))
530
531
532(defun teleport_sensor_draw ()
533  (if (edit_mode)
534      (progn
535        (draw)
536        (let ((x1 (- (x) (xvel)))
537              (y1 (- (y) (yvel)))
538              (x2 (+ (x) (xvel)))
539              (y2 (+ (y) (yvel)))
540              (c  (find_rgb 128 255 0)))
541          (draw_line x1 y1 x2 y1 c)
542          (draw_line x2 y1 x2 y2 c)
543          (draw_line x2 y2 x1 y2 c)
544          (draw_line x1 y2 x1 y1 c)))
545    nil))
Note: See TracBrowser for help on using the repository browser.