home *** CD-ROM | disk | FTP | other *** search
/ PC Gamer 13 / 1995-12_Disc_13.iso / abuse / lisp / duong.lsp < prev    next >
Lisp/Scheme  |  1995-08-31  |  11KB  |  417 lines

  1. ;; Copyright 1995 Crack dot Com,  All Rights reserved
  2. ;; See licencing information for more details on usage rights
  3.        
  4.  
  5. (defun mine_ai ()
  6.   (if (or (eq (total_objects) 0) (not (eq (with_object (get_object 0) (aistate)) 0)))
  7.       (select (aistate)
  8.           (0 (if (touching_bg)
  9.              (progn (set_state running)
  10.                 (if (eq (xvel) 1)
  11.                 (progn
  12.                   (with_object (bg)
  13.                            (make_view_solid (find_rgb 250 10 10)))
  14.                   (hurt_radius (x) (y) 40 35 nil 20))
  15.                   (hurt_radius (x) (y) 40 25 nil 20))
  16.                 (go_state 1))
  17.            (next_picture))
  18.            T)
  19.           (1 (next_picture)))
  20.     T))
  21.  
  22.  
  23.  
  24.  
  25. (def_char CONC
  26.   (funs (ai_fun  mine_ai))
  27.   (fields  ("xvel" "flash [1=on]"))
  28.   (states "art/chars/mine.spe"
  29.       (running   (seq "mine" 1 8))
  30.       (stopped    '("mine0001.pcx" "mine_off"))))
  31.  
  32.  
  33.  
  34. (defun air_mine_ai ()
  35.   (if (or (eq (total_objects) 0)                                 ;; turned on?
  36.       (not (eq (with_object (get_object 0) (aistate)) 0)))
  37.  
  38.       (if (touching_bg)
  39.       (progn
  40.         (if (eq (xvel) 1)
  41.         (with_object (bg) (make_view_solid (find_rgb 250 10 10))))
  42.         (do_explo 40 25)
  43.         nil)
  44.     (progn (next_picture)
  45.            T))
  46.     T))
  47.  
  48. (def_char CONC_AIR
  49.   (funs (ai_fun  air_mine_ai))
  50.   (fields  ("xvel" "flash [1=on]"))
  51.   (states "art/chars/mine.spe"
  52.       (stopped   (seq "amin" 1 2))))
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59. (defun bomb_cons ()
  60.   (setq blink_time 14))
  61.  
  62. (defun bomb_ai ()
  63.   (select (aistate)
  64.       (0 ;; wait for a signal if connected, or wait for player touch
  65.        (if (activated)
  66.            (go_state 1)
  67.          T))
  68.  
  69.       (1 ;; count down blink time until zero then blow up
  70.        (if (< blink_time 1)
  71.            (go_state 2)
  72.          (progn
  73.            (if (or (< blink_time 10)
  74.                (and (< blink_time 18) (eq (mod blink_time 2) 0))
  75.                (and (< blink_time 30) (eq (mod blink_time 3) 0))
  76.                (and (< blink_time 50) (eq (mod blink_time 4) 0)))
  77.            (progn
  78.              (play_sound TICK_SND 127 (x) (y))
  79.              (next_picture)))
  80.            (setq blink_time (- blink_time 1))
  81.            T)))
  82.  
  83.       (2 ;; blow up
  84.        (let ((oldy (y)))
  85.          (set_y (- (y) (/ (picture_height) 2)))
  86.          (do_explo 40 (get_ability jump_yvel))
  87.          (set_y oldy))
  88.        nil)))
  89.   
  90.       
  91.                  
  92. (def_char BOMB
  93.   (funs (ai_fun      bomb_ai)
  94.     (constructor bomb_cons))
  95.   (abilities (jump_yvel 30))
  96.   (range 150 150)
  97.   (vars blink_time)
  98.   (fields ("blink_time" "blink time"))
  99.   (states "art/chars/mine.spe"
  100.       (stopped '("abomb0001.pcx" "abomb0002.pcx"))))
  101.  
  102. (def_char BIG_BOMB
  103.   (funs (ai_fun      bomb_ai)
  104.     (constructor bomb_cons))
  105.   (abilities (jump_yvel 400))
  106.   (range 150 150)
  107.   (vars blink_time)
  108.   (fields ("blink_time" "blink time"))
  109.   (states "art/chars/mine.spe"
  110.       (stopped '("abomb0001.pcx+" "abomb0002.pcx+"))))
  111.       
  112.  
  113.  
  114.  
  115. (defun block_ai ()
  116.   (if (<= (hp) 0)
  117.       (if (eq (state) dieing)
  118.       (next_picture)
  119.     (progn
  120.       (play_sound CRUMBLE_SND 127 (x) (y))
  121.       (set_state dieing)
  122.       T))
  123.     T))
  124.  
  125. (def_char BLOCK
  126.                     ;block has only 1 frame now will have block blowing up
  127.   (funs (ai_fun  block_ai))
  128.   (flags (can_block T)
  129.      (hurtable  T))
  130.   (abilities (start_hp 30))
  131.   (states "art/chars/block.spe"
  132.       (stopped       "block.pcx")
  133.       (dieing        (seq "bexplo" 1 7))))
  134.  
  135.  
  136. (defun trap_door_ai ()
  137.   (if (> (total_objects) 0)
  138.       (select (aistate)
  139.           (0 ;; wait for switch to go off
  140.            (if (not (eq (with_object (get_object 0) (aistate)) 0))
  141.            (progn 
  142.              (set_state running)
  143.              (go_state 1))))
  144.           (1 ;; wait for animation
  145.            (if (next_picture) T
  146.          (progn
  147.            (set_state blocking)
  148.            (set_aistate 2))))
  149.           (2 ;; just stay here 
  150.            T)))
  151. T)
  152.       
  153.  
  154. (defun strap_door_ai ()
  155.   (general_sdoor_ai nil))
  156.  
  157.  
  158. (def_char TRAP_DOOR2
  159.   (funs (ai_fun strap_door_ai))
  160.   (flags (can_block T))
  161.   (abilities (start_hp 30))
  162.   (states "art/chars/tdoor.spe"
  163.       (stopped        "tdor0001.pcx")
  164.       (running        (seq "tdor" 1 7))
  165.       (walking        (seq "tdor" 7 1))
  166.       (blocking       "tdor0007.pcx")))
  167.  
  168.  
  169. (def_char TRAP_DOOR3
  170.   (funs (ai_fun strap_door_ai))
  171.   (flags (can_block T))
  172.   (abilities (start_hp 30))
  173.   (states "art/chars/tdoor.spe"
  174.           (stopped        "cdor0001.pcx")
  175.           (running        (seq "cdor" 1 7))
  176.           (walking        (seq "cdor" 7 1))
  177.           (blocking       "cdor0007.pcx")))
  178.  
  179. (defun lightin_ai ()
  180.   (if (or (eq (total_objects) 0) (not (eq (with_object (get_object 0) (aistate)) 0)))
  181.       (select (aistate)
  182.           (0  ;; delay
  183.            (if (< (state_time) (* (aitype) 2)) (set_state stopped)
  184.          (progn
  185.                     ;         (hurt_radius (x) (y) 40 30 nil 30)
  186.            (set_state running)
  187.            (play_sound ELECTRIC_SND 127 (x) (y))
  188.            (go_state 1))))
  189.           (1  ;; next picture
  190.            (if (next_picture) T
  191.          (set_aistate 0)))))
  192. T)
  193.  
  194. (def_char LIGHTIN
  195.   (funs (ai_fun lightin_ai))
  196.   (flags (can_block T))
  197.   (fields  ("aitype" "flash_speed 0..9"))
  198.   (states "art/chars/lightin.spe"
  199.       (running   (seq "lite" 1 9))
  200.       (stopped    "lite0001.pcx")))
  201.       
  202.  
  203. (def_particle 'LAVA_PART "art/chars/lavap.spe")
  204.  
  205. (defun lava_ai ()
  206.   (if (and (touching_bg) (eq (mod (state_time) 10) 0))
  207.       (do_damage 6 (bg)))
  208.  
  209.   (select (aistate)
  210.       (0 (if (eq (random 100) 0)
  211.          (progn
  212.            (play_sound LAVA_SND 64 (x) (y))
  213. ;           (add_panim LAVA_PART (x) (y) (direction))
  214.            (set_aistate 1)))
  215.          (next_picture))
  216.       (1 (next_picture)
  217.          (if (eq (state_time) 5)
  218.          (progn
  219.            (hurt_radius (x) (y) 20 20 nil 10)
  220.            (set_aistate 0)))))
  221.   T)
  222.  
  223.  
  224. (def_char LAVA
  225.   (funs (ai_fun lava_ai))
  226.   (states  "art/chars/lava.spe"
  227.        (stopped (seq "lava" 1 15))))
  228.  
  229.  
  230. (defun tp2_ai ()
  231.   (if (> (total_objects) 0)
  232.       (select (aistate)
  233.           (0 ;; wait for player to activate
  234.            (if (touching_bg)
  235.            (progn
  236.              (show_help telep_msg)
  237.              (if (with_object (bg) (pressing_action_key))
  238.              (progn
  239.                (link_object (bg))
  240.                (set_state running)
  241.                (play_sound TELEPORTER_SND 127 (x) (y))
  242.                (set_aistate 1))))))
  243.           (1 ;; wait for animation
  244.            (if (next_picture)
  245.            (let ((x (x))
  246.              (y (- (y) 16))
  247.              (fade (if (< (current_frame) 16) (current_frame) 15)))
  248.              (with_object (get_object 1) 
  249.                   (progn
  250.                     (set_x x) 
  251.                     (set_y y) 
  252.                     (user_fun SET_FADE_COUNT fade)
  253.                     (setq is_teleporting 1)
  254.                     )))
  255.          (let ((x (with_object (get_object 0) (x)))
  256.                (y (with_object (get_object 0) (- (y) 16))))           
  257.            (with_object (get_object 1)
  258.                 (progn 
  259.                   (set_x x)
  260.                   (set_y y)
  261.                   (setq is_teleporting 0)
  262.                   (user_fun SET_FADE_COUNT 0)
  263.                   ))
  264.            (remove_object (get_object 1))
  265.            (set_aistate 0))))))
  266.   T)
  267.          
  268.                
  269.  
  270. (def_char TELE2
  271.   (funs  (ai_fun tp2_ai))
  272.   (flags (can_block  T))
  273.   (states "art/chars/teleport.spe"
  274.       (stopped "close")
  275.       (running (seq "elec" 1 15))))
  276.      
  277.  
  278. (defun bolder_ai ()
  279.   (if (or (eq (total_objects) 0) (not (eq (with_object (get_object 0) (aistate)) 0)))
  280.       (if (eq (hp) 0)
  281.       (progn
  282.         (play_sound P_EXPLODE_SND 127 (x) (y))
  283.         (add_object EXPLODE1 (+ (x) (random 5)) (+ (y) (random 5)) 0)
  284.         (add_object EXPLODE1 (+ (x) (random 5)) (+ (y) (random 5)) 2)
  285.         (add_object EXPLODE1 (- (x) (random 5)) (- (y) (random 5)) 1)
  286.         (add_object EXPLODE1 (- (x) (random 5)) (- (y) (random 5)) 2)
  287.         (with_object (add_object SMALL_BOLDER (x) (y)) (progn (set_xvel -4) (set_yvel -8)))
  288.         (with_object (add_object SMALL_BOLDER (x) (y)) (progn (set_xvel 4) (set_yvel -9)))
  289.         (with_object (add_object SMALL_BOLDER (x) (y)) (progn (set_xvel 2) (set_yvel -5)))
  290.         (with_object (add_object SMALL_BOLDER (x) (y)) (progn (set_xvel -3) (set_yvel -5)))
  291.         (with_object (add_object SMALL_BOLDER (x) (y)) (progn (set_xvel -1) (set_yvel 2)))
  292.         (add_object EXP_LIGHT (x) (y) 100)
  293.         nil)
  294.     (progn
  295.       (next_picture)
  296.       (set_yvel (+ (yvel) 1))      
  297.       (let ((old_yv  (yvel))
  298.         (old_xv  (xvel))
  299.         (old_x   (x))
  300.         (old_y   (y))
  301.         (status (float_tick)))
  302.  
  303.         (let ((new_x (x))
  304.           (new_y (y))
  305.           (set_x old_x)
  306.           (set_y old_y))
  307.           (platform_push (- new_x (x)) (- new_y (y)))
  308.           (set_x new_x)
  309.           (set_y new_y))
  310.         (hurt_radius (x) (y) 19 30 (me) 15)
  311.         (if (not (eq status T));; T means we did not hit anything    
  312.         (let ((block_flags (car status)))
  313.           (if (or (blocked_up block_flags) (blocked_down block_flags));; bounce up/down
  314.               (progn
  315.             (if (> (abs old_yv) 3)
  316.                 (play_sound SBALL_SND 127 (x) (y)))
  317.             (set_xvel old_xv)
  318.             (if (> old_yv 1)
  319.                 (set_yvel (- 2 old_yv))
  320.               (set_yvel (- 0 old_yv))))
  321.             (if (or (blocked_left block_flags) (blocked_right block_flags));; bounce left/right
  322.             (progn
  323.               (set_yvel old_yv)
  324.               (set_xvel (- 0 old_xv))))))))
  325.       T))
  326.     T))
  327.   
  328.  
  329. (defun bolder_cons ()
  330.   (set_xvel -4)
  331.   (set_yvel 0))
  332.  
  333.  
  334. (defun bold_dam (amount from hitx hity push_xvel push_yvel) 
  335.   (add_object EXPLODE3 (+ (x) (- 10 (random 20))) (- (y) (random 30)) 0)
  336.   (damage_fun amount from hitx hity (/ push_xvel 10) (/ push_yvel 2)))
  337.  
  338. (def_char BOLDER
  339.   (funs  (ai_fun bolder_ai)
  340.      (damage_fun bold_dam)
  341.      (constructor bolder_cons))
  342.   (flags (can_block  T)
  343.      (add_front  T)
  344.      (hurtable   T))
  345.   (range 200 200)
  346.   (abilities (start_hp 40))
  347.   (fields ("xvel" "xvel")
  348.       ("yvel" "yvel"))
  349.   (states "art/bold.spe"
  350.       (stopped '("bold0001.pcx" "bold0001.pcx" "bold0001.pcx" 
  351.             "bold0002.pcx" "bold0002.pcx" "bold0002.pcx"
  352.             "bold0003.pcx" "bold0003.pcx" "bold0003.pcx"
  353.             "bold0004.pcx" "bold0004.pcx" "bold0004.pcx"))))
  354.  
  355. (defun bounce_move (left_stub right_stub up_stub down_stub nothing_stub)
  356.   (let ((old_yv  (yvel))
  357.     (old_xv  (xvel))
  358.     (status (float_tick)))
  359.     (if (not (eq status T)) ;; T means we did not hit anything    
  360.     (let ((block_flags (car status)))            
  361.       (if (blocked_up block_flags) ;; bounce up/down
  362.           (progn
  363.         (set_xvel old_xv)
  364.         (if (> old_yv 1)
  365.             (set_yvel (- 2 old_yv))
  366.           (set_yvel (- 0 old_yv)))
  367.         (eval up_stub))
  368.         (if (blocked_down block_flags)
  369.         (progn
  370.           (set_xvel old_xv)
  371.           (if (> old_yv 1)
  372.               (set_yvel (- 2 old_yv))
  373.             (set_yvel (- 0 old_yv)))
  374.           (eval down_stub))
  375.           (if (blocked_left block_flags)
  376.           (progn
  377.             (set_yvel old_yv)
  378.             (set_xvel (- 0 old_xv))
  379.             (eval left_stub))
  380.         (if (blocked_right block_flags)
  381.             (progn
  382.               (set_yvel old_yv)
  383.               (set_xvel (- 0 old_xv))
  384.               (eval right_stub)))))))
  385.       (eval nothing_stub))))
  386.           
  387.  
  388.  
  389. (defun small_rock_ai ()
  390.   (next_picture)
  391.   (set_yvel (+ (yvel) 1))
  392.   (bounce_move T T T            
  393.            '(progn (add_object EXPLODE1 (+ (x) (random 10)) (- (+ (random 5) (y)) 10)     0)               
  394.          (add_object EXPLODE1 (- (x) (random 10)) (- (- (y) (random 5)) 10) 2)
  395.          (play_sound P_EXPLODE_SND 127 (x) (y))
  396.          (hurt_radius (x) (y) 40 15 (if (> (total_objects) 0)
  397.                         (get_object 0)
  398.                           nil) 20)
  399.          nil) T))
  400.   
  401.  
  402. (def_char SMALL_BOLDER
  403.   (funs  (ai_fun small_rock_ai))
  404.  
  405.   (flags (add_front  T)
  406.      (unlistable T))
  407.     
  408.   (states "art/bold.spe"
  409.       (stopped "bsmall")))
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.