;; Copyright 1995 Crack dot Com, All Rights reserved ;; See licencing information for more details on usage rights (defun switcher_ai () (next_picture) (select (aistate) (0 ; waiting for player to press, then turn to on (if (and (< (distx) 20) (< (disty) 30) (with_object (bg) (pressing_action_key))) (progn (play_sound SWITCH_SND 127 (x) (y)) (set_state running) (set_aistate 1)))) (1 ; wait for player to let go of button (if (not (with_object (bg) (pressing_action_key))) (set_aistate 2))) (2 ; wait for player to press, then turn to off (if (and (< (distx) 20) (< (disty) 30) (with_object (bg) (pressing_action_key))) (progn (play_sound SWITCH_SND 127 (x) (y)) (set_state stopped) (set_aistate 4)))) (4 ; wait for player to let go of button (if (not (with_object (bg) (pressing_action_key))) (set_aistate 0))) ) T) (defun switch_once_ai () (select (aistate) (0 ; waiting for player to press, then turn to on (next_picture) (if (and (< (distx) 20) (< (disty) 30) (with_object (bg) (pressing_action_key))) (progn (print (random 1000)) (play_sound SWITCH_SND 127 (x) (y)) (set_state running) (set_aistate 1))))) T) (defun lower_reload () (lower)) (def_char SWITCH (funs (ai_fun switcher_ai) (reload_fun lower_reload)) (range 0 0) (states "art/misc.spe" (stopped '("switch_off1" "switch_off2")) (running '("switch_on1" "switch_on2")))) (def_char SWITCH_ONCE (funs (ai_fun switch_once_ai) (reload_fun lower_reload)) (range 0 0) (states "art/misc.spe" (stopped '("switch_off1" "switch_off2")) (running '("switch_on1" "switch_on2")))) (defun switch_delay_cons () (setq reset_time 14)) (def_char SWITCH_DELAY (funs (ai_fun switch_delay_ai) (reload_fun lower_reload) (constructor switch_delay_cons)) (vars reset_time) (fields ("reset_time" "reset time")) (range 0 0) (states "art/misc.spe" (stopped '("switch_off1" "switch_off2")) (running '("switch_on1" "switch_on2")))) (defun switch_delay_ai () (select (aistate) (0 ; waiting for player to press, then turn to on (next_picture) (if (and (< (distx) 20) (< (disty) 30) (with_object (bg) (pressing_action_key))) (progn (print (random 1000)) (play_sound SWITCH_SND 127 (x) (y)) (set_state running) (set_aistate 1)))) (1 ; wait for player to let go of button (if (not (with_object (bg) (pressing_action_key))) (set_aistate 2))) (2 ; wait for reset time (if (> (state_time) reset_time) (progn (play_sound SWITCH_SND 127 (x) (y)) (set_state stopped) (set_aistate 0))))) T) (defun switch_mover_ai () (if (> (total_objects) 1) (select (aistate) (0 (if (not (eq (with_object (get_object 0) (aistate)) 0)) (let ((mex (x)) (mey (y))) (if (eq (xvel) 0) (progn (with_object (get_object 1) (progn (set_x mex) (set_y mey) (set_fade_count 15) )) (set_aistate 1) T) (with_object (get_object 1) (progn (set_x mex) (set_y mey) nil)))) T)) (1 (let ((count (with_object (get_object 1) (fade_count)))) (if (equal count 0) nil (progn (with_object (get_object 1) (set_fade_count (- count 1))) T))))) nil)) (def_char SWITCH_MOVER (funs (ai_fun switch_mover_ai) (draw_fun dev_draw)) (range 0 0) (states "art/misc.spe" (stopped "switch_mover"))) (defun sensor_cons () (set_aitype 1) (add_hp -10)) /*(defun sensor_ai () (if (eq (aistate) 0) (if (and (< (distx) (xvel)) (< (disty) (yvel))) (progn (if (eq (hp) 0) ;; don't time out (set_aistate 1) (set_aistate (hp))) (set_state blocking)) (set_state stopped)) (if (eq (hp) 0) (if (or (> (distx) (xacel)) (> (disty) (yacel))) (set_aistate 0)) (set_aistate (- (aistate) 1)))) T) */ (defun sensor_draw () (if (edit_mode) (progn (draw) (let ((x1 (- (x) (xvel))) (y1 (- (y) (yvel))) (x2 (+ (x) (xvel))) (y2 (+ (y) (yvel))) (c (find_rgb 0 255 0))) (draw_line x1 y1 x2 y1 c) (draw_line x2 y1 x2 y2 c) (draw_line x2 y2 x1 y2 c) (draw_line x1 y2 x1 y1 c)) (let ((x1 (- (x) (xacel))) (y1 (- (y) (yacel))) (x2 (+ (x) (xacel))) (y2 (+ (y) (yacel))) (c (find_rgb 255 0 0))) (draw_line x1 y1 x2 y1 c) (draw_line x2 y1 x2 y2 c) (draw_line x2 y2 x1 y2 c) (draw_line x1 y2 x1 y1 c))) nil)) (defun sensor_ct () (select (aitype) (1 (set_xvel 50) (set_yvel 50) (set_xacel 100) (set_yacel 100)) (2 (set_xvel 50) (set_yvel 30) (set_xacel 100) (set_yacel 50)) (3 (set_xvel 50) (set_yvel 15) (set_xacel 100) (set_yacel 30)))) (def_char SENSOR (range 100 100) (funs (ai_fun sensor_ai) (draw_fun sensor_draw) (type_change_fun sensor_ct) (constructor sensor_cons)) (vars unoffable) (fields ("xvel" "(on) x dist") ("yvel" "(on) y dist") ("xacel" "(off) x dist") ("yacel" "(off) y dist") ("hp" "(off) reset time") ("unoffable" "unoffable (1=yes)") ("aistate" "current state")) (states "art/misc.spe" (stopped "off") (blocking "on"))) (defun dead_object (current) (if (>= current 0) (let ((st (with_object (get_object current) (state)))) (if (or (eq st dead) (eq st blown_back_dead)) (let ((dead_guy (get_object current))) (remove_object (get_object current)) dead_guy) (dead_object (- current 1)))) nil)) (defun death_re_ai () (if (> (total_objects) 1) (let ((find (dead_object (- (total_objects) 1)))) (if find (add_object (with_object (get_object 0) (otype)) (with_object find (x)) (with_object find (y)))))) T) (def_char DEATH_RESPAWNER (range 50 50) (funs (ai_fun death_re_ai) (draw_fun dev_draw)) (states "art/misc.spe" (stopped "death_respawn"))) (defun death_sen_ai () (if (eq (total_objects) 0) (progn (set_state running) (set_aistate 1)) (if (with_object (get_object 0) (or (eq (state) dead) (eq (state) blown_back_dead))) (remove_object (get_object 0)))) T) (def_char DEATH_SENSOR (range 50 50) (funs (ai_fun death_sen_ai) (draw_fun dev_draw)) (states "art/misc.spe" (stopped "death_sensor0") (running "death_sensor1")))