home *** CD-ROM | disk | FTP | other *** search
/ CD-ROM Today (BR) Volume 2 #6 / CDRTV2N6.iso / games / abuse / disk2.dat / LISP / WEAPONS.LSP < prev   
Lisp/Scheme  |  1996-01-15  |  14KB  |  507 lines

  1. ;; Copyright 1995 Crack dot Com,  All Rights reserved
  2. ;; See licensing information for more details on usage rights
  3.  
  4.  
  5. (defun mbullet_ai ()
  6.   (if (> (state_time) 5)
  7.       nil
  8.     (let ((bx (bmove (if (> (total_objects) 0) (get_object 0) nil))))  ; don't hit the guy who fired us.
  9.       (if (eq bx T)
  10.       T
  11.     (progn 
  12.       (if (null bx)
  13.           (if (eq (random 2) 0)
  14.           (progn
  15.             (add_panim MGUN_HIT1 (x) (y) (direction))
  16.             (play_sound MG_HIT_SND1 127 (x) (y)))
  17.         (progn
  18.           (add_panim MGUN_HIT2 (x) (y) (direction))
  19.           (play_sound MG_HIT_SND2 127 (x) (y))))
  20.         (progn
  21. ;          (add_panim EXPLO2 (x) (y) (direction))
  22. ;          (add_object EXP_LIGHT (x) (y) 80)    
  23.           (do_damage 5 bx (if (> 0 (direction)) -10 10) 0)
  24.           ))
  25.       nil))))
  26. )
  27.  
  28. (defun grenade_ai ()
  29.   (if (and (eq (tick) 0)
  30.        (if (< (total_objects) 1)
  31.            nil         
  32.          (let ((mex (x))
  33.            (mey (y)))
  34.            (not (with_object (get_object 0) (find_object_in_area (- mex 7) 
  35.                                      (- mey 7) 
  36.                                      (+ mex 7) 
  37.                                      (+ mey 7) bad_guy_list))))))
  38.       (progn (next_picture) T)
  39.     (do_explo 40 36)))
  40.  
  41. (defun fb_draw () nil)   ;; only draw while in the air
  42.  
  43. (defun firebomb_ai ()
  44.  
  45.   (add_object EXPLODE1 (- (x) (random 5)) (+ (y) (random 20)) 0)
  46.   (hurt_radius (x) (y) 60 40 (if (> (total_objects) 0) (get_object 0) nil) 10)     
  47.  
  48.   (and (or (< (state_time) 3) (not (eq (xvel) 0)))
  49.        (< (state_time) 20)
  50.        (select (direction)
  51.           (1 (progn ;(set_xvel 30) 
  52.             (not (blocked_right (move 0 0 0)))
  53.             ))
  54.           (-1 (progn ;(set_xvel -30) 
  55.              (not (blocked_left (move 0 0 0))))))))
  56.       
  57.  
  58.  
  59.  
  60.  
  61. (defun mbullet_ufun (creator) 
  62.   (set_direction (with_object creator (direction)))
  63.  
  64.   (let ((start (if (> (direction) 0) 335 155))
  65.     (end   (if (> (direction) 0) 25 205)))
  66.     (let ((target (with_object creator (find_object_in_angle start end bad_guy_list))))
  67.       (if (and target (< (abs (- (x) (with_object target (x)))) 150)
  68.            (< (abs (- (y) (with_object target (y)))) 100))
  69.       (set_course (site_angle target) 50)
  70.     (if (> (direction) 0)
  71.         (set_course 0 50)
  72.       (set_course 180 50)))))
  73.  
  74.   (link_object creator)
  75. )
  76.  
  77.  
  78. (defun firebomb_ufun (creator) 
  79.   (set_direction (with_object creator (direction)))
  80.   (link_object creator)
  81. )
  82.  
  83.  
  84.  
  85. (defun player_mine_ufun (creator) 
  86.   (set_x (with_object creator (x)))
  87.   (set_y (with_object creator (y)))
  88.   (link_object creator)
  89.   (let ((me (me)))
  90.     (with_object creator (link_object me)))
  91. )
  92.  
  93. (defun player_mine_ai ()
  94.   (select (aistate)
  95.       (0
  96.        ;; wait till no player (just in case), or player lets go of fire button  
  97.        (if (or (eq 0 (total_objects)) 
  98.            (and (eq (with_object (get_object 0) (player_b1_suggest)) 0)
  99.             (eq (with_object (get_object 0) (player_b2_suggest)) 0)))
  100.            (progn
  101.          (set_state blocking)
  102.          (set_aistate 1)
  103.          T)
  104.          T))
  105.       (1 (if (next_picture)
  106.          T
  107.            (do_explo 50 40)
  108.          ))))
  109.       
  110.  
  111. (def_char MBULLET
  112.   (funs (ai_fun     mbullet_ai)  
  113.     (draw_fun   dev_draw)     ; you can't see the bullets
  114.     (user_fun   mbullet_ufun))
  115.   (range 10000 10000)
  116.   (flags (unlistable T))
  117.   (states "art/misc.spe" (stopped "mbullet_icon")))
  118.  
  119.  
  120. (defun grenade_ufun (creator) 
  121.   (set_direction (with_object creator (direction)))
  122.   (play_sound GRENADE_THROW 127 (x) (y))
  123.   (select (aitype)
  124.       (1 (progn (set_xvel (if (> (direction) 0) 
  125.                   (+ 13 (random 2)) 
  126.                 (+ -13 (random 2)))) (set_yvel -4)))
  127.       (2 (progn (set_xvel (if (> (direction) 0) 
  128.                   (+ 7 (random 2)) 
  129.                 (+ -7 (random 2)))) (set_yvel -10))))
  130.   (set_xvel (+ (xvel) (with_object creator (xvel))))
  131.   (link_object creator)
  132. )
  133.  
  134. (defun grenade_cache (type)
  135.   (list (list EXPLODE1 EXP_LIGHT) 
  136.     (list GRENADE_SND)))
  137.  
  138.  
  139. (def_char GRENADE
  140.   (funs (ai_fun   grenade_ai)  
  141.     (get_cache_list_fun grenade_cache)
  142.     (user_fun grenade_ufun))
  143.   (range 10000 10000)
  144.   (flags (unlistable  T))
  145.   (states "art/misc.spe" (stopped (seq "4gre" 1 8))))
  146.  
  147.  
  148. (def_char FIREBOMB
  149.   (funs (ai_fun   firebomb_ai)  
  150.     (user_fun firebomb_ufun)
  151.     (get_cache_list_fun grenade_cache)
  152.     (draw_fun fb_draw))
  153.   (abilities (walk_top_speed  20)
  154.          (run_top_speed   20))
  155.   (range 10000 10000)
  156.   (flags (unlistable T))
  157.   (states "art/misc.spe"
  158.       (stopped "firebomb")
  159.       (walking "firebomb")))
  160.  
  161. (defun giver (type)
  162.   (let ((amount (get_ability start_hp)))
  163.     (with_object (bg)
  164.          (progn 
  165.            (if (and (not (has_weapon type)) change_on_pickup)
  166.                (progn
  167.              (give_weapon type)
  168.              (set_current_weapon type))                          
  169.              (give_weapon type))
  170.            (add_ammo type amount)))))
  171.  
  172.  
  173. (defun weapon_icon_ai () 
  174.   (if (eq0 (aistate))
  175.       (if (activated)
  176.       (progn
  177.         (try_move 0 10)
  178.         (if (eq (second (see_dist (x) (y) (x) (+ (y) 1))) (y))  ; if we are on the floor, don't check falling anymore
  179.         (set_aistate 1))
  180.  
  181.         (if (touching_bg) 
  182.         (progn
  183.           (play_sound AMMO_SND 127 (x) (y))
  184.           (select (otype)
  185.               (MBULLET_ICON5   (giver 0));; these numbers correspond to status bar position
  186.               (MBULLET_ICON20  (giver 0))
  187.               (GRENADE_ICON2   (giver 1))        
  188.               (GRENADE_ICON10  (giver 1))
  189.  
  190.               (ROCKET_ICON2    (giver 2))
  191.               (ROCKET_ICON5    (giver 2))
  192.  
  193.               (FBOMB_ICON1     (giver 3))
  194.               (FBOMB_ICON5     (giver 3))
  195.  
  196.               (PLASMA_ICON20   (giver 4))
  197.               (PLASMA_ICON50   (giver 4))
  198.  
  199.               (LSABER_ICON50   (giver 5))
  200.               (LSABER_ICON100  (giver 5))
  201.  
  202.               (DFRIS_ICON4     (giver 6))
  203.               (DFRIS_ICON10    (giver 6))
  204.  
  205.               )
  206.  
  207.           nil)
  208.           T))
  209.     T)
  210.     (if (touching_bg) 
  211.     (progn
  212.       (play_sound AMMO_SND 127 (x) (y))
  213.       (select (otype)
  214.           (MBULLET_ICON5   (giver 0));; these numbers correspond to status bar position
  215.           (MBULLET_ICON20  (giver 0))
  216.           (GRENADE_ICON2   (giver 1))        
  217.           (GRENADE_ICON10  (giver 1))
  218.  
  219.           (ROCKET_ICON2    (giver 2))
  220.           (ROCKET_ICON5    (giver 2))
  221.  
  222.           (FBOMB_ICON1     (giver 3))
  223.           (FBOMB_ICON5     (giver 3))
  224.  
  225.           (PLASMA_ICON20   (giver 4))
  226.           (PLASMA_ICON50   (giver 4))
  227.  
  228.           (LSABER_ICON50   (giver 5))
  229.           (LSABER_ICON100  (giver 5))
  230.  
  231.           (DFRIS_ICON4     (giver 6))
  232.           (DFRIS_ICON10    (giver 6))
  233.  
  234.           )
  235.       nil)
  236.       T)))
  237.     
  238. (defun on_draw ()
  239.   (if (activated)
  240.       (draw)
  241.     (dev_draw)))
  242.       
  243.  
  244. (defun ammo_cache (type)    ;; tells what other chars to load in with this character
  245.   (list
  246.    (select type
  247.        (GRENADE_ICON2    `(,GRENADE ,GRENADE_TOP))
  248.        (GRENADE_ICON10   `(,GRENADE ,GRENADE_TOP))
  249.        (MBULLET_ICON5    `(,SHOTGUN_BULLET ,MGUN_TOP))
  250.        (MBULLET_ICON20   `(,SHOTGUN_BULLET ,MGUN_TOP))
  251.        (ROCKET_ICON2     `(,ROCKET ,ROCKET_TOP))
  252.        (ROCKET_ICON5     `(,ROCKET ,ROCKET_TOP))      
  253.        (FBOMB_ICON1      `(,FIREBOMB ,FIREBOMB_TOP))
  254.        (FBOMB_ICON5      `(,FIREBOMB ,FIREBOMB_TOP))
  255.  
  256.        (PLASMA_ICON20    `(,PLASMAGUN_BULLET))
  257.        (PLASMA_ICON50    `(,PLASMAGUN_BULLET))       
  258.  
  259.        (LSABER_ICON50    `(,LSABER_BULLET ,PGUN_TOP))
  260.        (LSABER_ICON100   `(,LSABER_BULLET ,PGUN_TOP))
  261.  
  262.        (DFRIS_ICON4      `(,DFRIS_BULLET ,DFRIS_TOP))
  263.        (DFRIS_ICON10     `(,DFRIS_BULLET ,DFRIS_TOP))
  264.    nil)))
  265.  
  266. (defun make_ammo_icon (symbol icon_name increment)
  267.   (eval (list 'def_char symbol          
  268.           '(funs (ai_fun weapon_icon_ai)
  269.              (get_cache_list_fun ammo_cache)
  270.              (draw_fun on_draw))
  271.           '(range 5 5)
  272.           '(flags (add_front T))
  273.           `(abilities (start_hp ,increment))
  274.           `(states  "art/chars/ammo.spe" (stopped ,icon_name)))))
  275.  
  276. (make_ammo_icon 'GRENADE_ICON2  "grenade_small" 2 )
  277. (make_ammo_icon 'GRENADE_ICON10 "grenade_large" 10)
  278.  
  279. (make_ammo_icon 'MBULLET_ICON5  "bullets_small"  5)
  280. (make_ammo_icon 'MBULLET_ICON20 "bullets_large" 20)
  281.  
  282. (make_ammo_icon 'FBOMB_ICON1 "firebomb_small"   1)
  283. (make_ammo_icon 'FBOMB_ICON5 "firebomb_large"   5)
  284.  
  285. (make_ammo_icon 'ROCKET_ICON2 "rocket_small"      2)
  286. (make_ammo_icon 'ROCKET_ICON5 "rocket_large"      5)
  287.  
  288.  
  289.  
  290. (defun guner_cons () 
  291.   (set_xvel 7)     ;; fire speed
  292.   (set_yvel 50)    ;; speed of bullet
  293.   (set_xacel 290)  ;; start angle
  294.   (set_yacel 359)  ;; end angle
  295. )
  296.  
  297.  
  298. (defun guner_damage (amount from hitx hity push_xvel push_yvel)  ; transfer damage to lower half
  299.   (if (not (eq (state) stopped))
  300.       (progn
  301.     (add_object EXPLODE3 (+ hitx (random 5)) (+ hity (random 5)) 0)
  302.     (add_object EXPLODE2 (+ hitx (random 5)) (+ hity (random 5)) 2)
  303.     (add_object EXPLODE3 (- hitx (random 5)) (- hity (random 5)) 1)
  304.     (add_object EXPLODE3 (- hitx (random 5)) (- hity (random 5)) 2)
  305.  
  306.     (damage_fun amount from hitx hity 0 0)     ; don't allow pushing
  307.  
  308.     (if (<= (hp) 0)
  309.         (progn
  310.           (play_sound BLOWN_UP 127 (x) (y))
  311.           (add_object EXPLODE1 (- hitx (random 10)) (- hity (random 25)) 0)      
  312.           (add_object EXPLODE1 (+ hitx (random 10)) (+ hity (random 25)) 1)      
  313.           (add_object EXPLODE1 (- hitx (random 10)) (- hity (random 10)) 2)      
  314.           (add_object EXPLODE1 (+ hitx (random 10)) (+ hity (random 10)) 3) ))))
  315. )
  316.  
  317.  
  318.  
  319.  
  320.  
  321.         
  322. (defun shot_ai () (eq (bmove nil) T))
  323. (defun gun_ai ()
  324.   (if (> (hp) 0)
  325.       (progn
  326.     (select (state)
  327.         (stopped (if (> (state_time) (xvel))
  328.                  (let ((a (site_angle (bg)))
  329.                    (me (me))
  330.                    (speed (yvel)))
  331.                    (if (eq (aitype) 1)
  332.                    (print a))        ;; show the angle for level designers
  333.                    (if (and (>= a (xacel)) (<= a (yacel)) (if (> (direction) 0)
  334.                        (set_frame_angle 290 0 a)
  335.                      (set_frame_angle 180 250 a)))
  336.                    (progn
  337.                      (with_object (add_object VIS_SHOT
  338.                                   (+ (x) (* (cos a) 10)) 
  339.                                   (- (y) (+ 10 (* (sin a) 10))))
  340.                           (progn
  341.                             (play_sound MGUN_SND 127 (x) (y))
  342.                             (set_course a speed)
  343.                             (link_object me)))
  344.                           (set_aistate (+ (aistate) 1))
  345.                           (jump_state walking))))
  346.                nil))
  347.         (walking (jump_state blocking))
  348.         (blocking (jump_state stopped)))
  349.     T)
  350.     nil)
  351.   )
  352.  
  353.  
  354. (defun rocket_ai ()  
  355.   (if (not (frame_panic))
  356.       (let ((rand (rand_on)))
  357.     (with_object (add_object SMALL_LIGHT_CLOUD (+ (x) (random 3)) 
  358.                  (- (y) (random 3) (/ (picture_height) 2)))
  359.              (set_fade_count 11))
  360.     (set_rand_on rand)))
  361.  
  362.   (if (> (total_objects) 1)  ;; if not attached to object, just fly strait (0 is player)
  363.     (let ((angle (atan2 (- (- (y) (with_object (get_object 1) (y))) -15)
  364.             (- (with_object (get_object 1) (x)) (x) ))))
  365.       (let ((clock_dist (if (< angle (aistate))          ;; calculate clockwise andle distance
  366.                 (- (aistate) angle)
  367.               (+ (aistate) (- 360 angle)))))
  368.     (let ((closest_dist (if (> clock_dist 180) 
  369.                 (- 360 clock_dist)
  370.                   clock_dist)))
  371.       (let ((angle_add (if (> closest_dist 23)
  372.                    23
  373.                  (if (< closest_dist 5)
  374.                  0
  375.                    closest_dist))))
  376.         (if (> clock_dist 180)     ;; should we steer clock wise or counter?
  377.         (set_aistate (mod (+ (aistate) angle_add) 360))
  378.           (set_aistate (mod (+ (- (aistate) angle_add) 360) 360))) )))))
  379.  
  380.   (if (< speed max_speed)
  381.       (setq speed (+ speed 2)))
  382.   (set_course (aistate) speed)
  383.   (set_frame_angle 0 359 (aistate))
  384.   (if (or (eq (hp) 0)
  385.       (not (eq (bmove (if (> (total_objects) 0) (get_object 0) nil)) T)) 
  386.       (and (> (total_objects) 1) 
  387.            (< (abs (- (with_object (get_object 1) (x)) (x) )) 10)
  388.            (< (abs (- (- (with_object (get_object 1) (y)) (y)) 15 )) 10)))
  389.       (progn
  390.     (do_explo 40 50)
  391.     nil)
  392.   T))
  393.       
  394.  
  395. (defun rocket_ufun (creator) 
  396.   (link_object creator)
  397.   (play_sound ROCKET_SND 127 (x) (y))
  398.  
  399.   (let ((target (with_object creator (find_object_in_area 
  400.                       (- (x) 160) (- (y) 160)
  401.                       (+ (x) 160) (+ (y) 160) bad_guy_list))))
  402.     (select (aitype)
  403.         (1 (set_aistate (if (> (with_object creator (direction)) 0) 0 180)))
  404.         (2  (set_aistate (if (> (with_object creator (direction)) 0) 45 135))))
  405.     (if target (link_object target)))
  406.  
  407. )
  408.  
  409. (defun rocket_cache (type)
  410.   (list (list SMALL_LIGHT_CLOUD) nil))
  411.  
  412. (def_char ROCKET
  413.   (funs (ai_fun   rocket_ai)
  414.     (get_cache_list_fun rocket_cache)    
  415.     (get_cache_list_fun grenade_cache)
  416.     (user_fun rocket_ufun))
  417.   (vars speed max_speed)
  418.   (range 10000 10000)
  419.   (flags (unlistable T)
  420.      (hurtable T)
  421.      (add_front T))
  422.   (abilities (start_hp 4))
  423.   (states "art/missle.spe" (stopped  (seq "miss" 1 32))))
  424.  
  425.  
  426. /*
  427. (defun sgun_ai ()
  428.   (setq sgb_lastx (x))
  429.   (setq sgb_lasty (y))
  430.   (setq sgb_speed (/ (* sgb_speed 6) 5))
  431.   (set_course sgb_angle sgb_speed)  
  432.   (if (eq sgb_lifetime 0)
  433.       nil
  434.     (let ((bx (bmove (if (> (total_objects) 0) (get_object 0) nil))))  ; don't hit the guy who fired us.
  435.       (setq sgb_lifetime (- sgb_lifetime 1))
  436.       (if (eq bx T) T
  437.     (progn
  438.       (setq sgb_lifetime 0)    ;; disappear next tick
  439.       (if (eq bx nil)
  440.           (add_object EXPLODE5 (- (x) (random 5)) (- (y) (random 5)) 0)
  441.         (progn
  442.           (add_object EXPLODE3 (- (x) (random 5)) (- (y) (random 5)) 0)
  443.           (do_damage 5 bx (* (cos sgb_angle) 10) (* (sin sgb_angle) 10))))))
  444.       T)))
  445.     */
  446.  
  447.  
  448. (defun sgun_draw ()
  449.   (draw_line sgb_lastx (- sgb_lasty 1) (x) (- (y) 1) sgb_medium_color)
  450.   (draw_line sgb_lastx (+ sgb_lasty 1) (x) (+ (y) 1) sgb_medium_color)
  451.  
  452.   (draw_line (- sgb_lastx 1) sgb_lasty (- (x) 1) (y) sgb_bright_color)
  453.   (draw_line (+ sgb_lastx 1) sgb_lasty (+ (x) 1) (y) sgb_medium_color)
  454.  
  455.  
  456.   (draw_line sgb_lastx sgb_lasty (x) (y) sgb_bright_color)
  457. )
  458.  
  459.  
  460. (defun sgun_ufun (creator) 
  461.   (set_direction (with_object creator (direction)))
  462.   (set_y (- (y) 4))
  463.   (set_x (+ (x) (* (direction) 20)))
  464.   (play_sound ZAP_SND 127 (x) (y))
  465.   (let ((start (if (> (direction) 0) 335 155))
  466.     (end   (if (> (direction) 0) 25 205)))
  467.     (setq sgb_speed 8)
  468.     (setq sgb_lastx (x))
  469.     (setq sgb_lasty (y))
  470.     (let ((target (with_object creator (find_object_in_angle start end bad_guy_list))))
  471.       (if (and target (< (abs (- (x) (with_object target (x)))) 150)
  472.            (< (abs (- (y) (with_object target (y)))) 100))
  473.       (setq sgb_angle (site_angle target))
  474.     (if (> (direction) 0)        
  475.         (setq sgb_angle 0)
  476.       (setq sgb_angle 180)))))
  477.   (link_object creator)
  478. )
  479.  
  480.  
  481. (def_char SHOTGUN_BULLET
  482.   (vars sgb_speed sgb_angle sgb_lastx sgb_lasty 
  483.     sgb_bright_color sgb_medium_color sgb_lifetime)
  484.   (funs (ai_fun   sgun_ai)
  485.     (user_fun sgun_ufun)
  486.     (draw_fun sgun_draw))
  487.   (range 10000 10000)
  488.   (flags (unlistable T)
  489.      (add_front T))
  490.   (states "art/misc.spe" (stopped  "sgun_bullet")))
  491.  
  492.  
  493. (setq load_warn nil)
  494. (if (not (load "register/weapons.lsp"))
  495.     (load "lisp/share.lsp"))
  496. (setq load_warn T)
  497.  
  498.  
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506.  
  507.