[44] | 1 | ;; Copyright 1995 Crack dot Com, All Rights reserved |
---|
| 2 | ;; See licensing information for more details on usage rights |
---|
| 3 | |
---|
[582] | 4 | ; draw function for characters only displayed during edit mode |
---|
[44] | 5 | ; such as start, etc. |
---|
| 6 | ; (defun dev_draw () (if (edit_mode) (draw) nil)) -- compiled C function -- |
---|
| 7 | |
---|
| 8 | (defun middle_draw () |
---|
| 9 | (let ((y (y))) |
---|
| 10 | (set_y (+ (y) (/ (picture_height) 2))) |
---|
| 11 | (draw) |
---|
| 12 | (set_y y))) |
---|
| 13 | |
---|
| 14 | |
---|
[582] | 15 | |
---|
[44] | 16 | (defun push_char (xamount yamount) |
---|
| 17 | (let ((bgx (with_object (bg) (x)) (x)) |
---|
| 18 | (bgy (with_object (bg) (y)) (y))) |
---|
| 19 | (if (and (<= bgy (y)) (< (disty) yamount) (< (distx) xamount)) |
---|
| 20 | (let ((amount (if (> bgx (x)) |
---|
| 21 | (- xamount (- bgx (x))) |
---|
| 22 | (- (- (x) bgx) xamount)))) |
---|
| 23 | (with_object (bg) (try_move amount 0)))))) |
---|
| 24 | |
---|
| 25 | |
---|
| 26 | |
---|
| 27 | (defun do_nothing () (next_picture) T) |
---|
| 28 | |
---|
| 29 | (defun lhold_ai () |
---|
| 30 | (if (> (total_objects) 0) |
---|
| 31 | (progn |
---|
| 32 | (set_x (with_object (get_object 0) (x))) |
---|
| 33 | (set_y (with_object (get_object 0) (- (y) (/ (picture_height) 2) ))))) |
---|
| 34 | (if (eq (total_lights) 1) |
---|
| 35 | (progn |
---|
| 36 | (set_light_x (get_light 0) (x)) |
---|
| 37 | (set_light_y (get_light 0) (y))) |
---|
| 38 | nil) |
---|
| 39 | T) |
---|
| 40 | |
---|
| 41 | |
---|
[582] | 42 | |
---|
[44] | 43 | (def_char LIGHTHOLD |
---|
| 44 | (funs (ai_fun lhold_ai) |
---|
| 45 | (draw_fun dev_draw)) |
---|
[582] | 46 | (states "art/misc.spe" |
---|
[44] | 47 | (stopped "lhold"))) |
---|
| 48 | |
---|
| 49 | |
---|
| 50 | |
---|
[582] | 51 | (def_char OBJ_MOVER |
---|
[44] | 52 | (funs (ai_fun mover_ai) |
---|
| 53 | (constructor mover_cons) |
---|
| 54 | (draw_fun dev_draw)) |
---|
| 55 | (range 300 40) |
---|
| 56 | (fields ("aitype" "frames till arrival") |
---|
| 57 | ("aistate" "current frame")) |
---|
| 58 | (states "art/misc.spe" (stopped '("mover" "mover" )))) |
---|
| 59 | |
---|
[582] | 60 | /* Compiled C |
---|
[44] | 61 | (defun mover_ai () |
---|
| 62 | (if (eq (total_objects) 2) |
---|
| 63 | (let ((dest (get_object 0)) |
---|
| 64 | (mover (get_object 1))) |
---|
[582] | 65 | (if (< (aistate) 2) ; transfer object to next mover |
---|
[44] | 66 | (progn |
---|
[582] | 67 | (with_object dest |
---|
[44] | 68 | (progn |
---|
| 69 | (link_object mover) |
---|
| 70 | (set_aistate (aitype)))) |
---|
| 71 | (remove_object mover)) |
---|
[582] | 72 | (progn |
---|
[44] | 73 | (set_aistate (- (aistate) 1)) |
---|
| 74 | (let ((newx (- (with_object dest (x)) (/ (* (- (with_object dest (x)) (x)) (aistate)) (aitype)))) |
---|
| 75 | (newy (- (with_object dest (y)) (/ (* (- (with_object dest (y)) (y)) (aistate)) (aitype))))) |
---|
[582] | 76 | (with_object mover |
---|
| 77 | (progn |
---|
[44] | 78 | (platform_push (- newx (x)) (- newy (y))) |
---|
| 79 | (set_x newx) |
---|
| 80 | (set_y newy))))))) |
---|
| 81 | nil) |
---|
| 82 | T) |
---|
| 83 | */ |
---|
| 84 | |
---|
| 85 | (defun mover_cons () (set_aitype 20)) |
---|
| 86 | |
---|
| 87 | |
---|
| 88 | (defun respawn_ai () |
---|
| 89 | (let ((x (total_objects))) |
---|
| 90 | (if (eq x 0) ; if not linked to anything return |
---|
| 91 | T |
---|
| 92 | (let ((last (get_object (- x 1)))) ; see if the last object has the same position as us |
---|
| 93 | (if (and (eq (with_object last (x)) (x)) (eq (with_object last (y)) (y))) |
---|
[582] | 94 | (if (eq (aistate) 1) |
---|
[44] | 95 | (if (eq (with_object last (fade_count)) 0) |
---|
| 96 | (set_aistate 1) |
---|
| 97 | (with_object last (set_fade_count (- (with_object last (fade_count)) 1)))) |
---|
| 98 | T) ; if so then return |
---|
| 99 | (if (eq (aistate) 1) |
---|
| 100 | (set_aistate 0) |
---|
| 101 | (if (> (state_time) (xvel)) |
---|
| 102 | (let ((new (add_object (with_object (get_object (random x)) (otype)) (x) (y)))) |
---|
| 103 | (with_object new (set_fade_count 15)) ; make faded out so we can fade it in |
---|
| 104 | (link_object new) |
---|
| 105 | (set_aistate 1)) |
---|
| 106 | T)))))) |
---|
| 107 | T) |
---|
| 108 | |
---|
[582] | 109 | (defun respwan_cons () (set_xvel 50)) |
---|
[44] | 110 | |
---|
| 111 | |
---|
[582] | 112 | (def_char RESPAWN |
---|
[44] | 113 | (funs (ai_fun respawn_ai) |
---|
[582] | 114 | (draw_fun dev_draw) |
---|
[44] | 115 | (constructor respwan_cons)) |
---|
| 116 | (flags (unlistable T)) |
---|
| 117 | (fields ("xvel" "frames to regenerate")) |
---|
| 118 | (range 100 100) |
---|
| 119 | (states "art/misc.spe" |
---|
| 120 | (stopped "respawn"))) |
---|
| 121 | |
---|
| 122 | |
---|
| 123 | |
---|
| 124 | (def_char MARKER |
---|
| 125 | (funs (ai_fun do_nothing) |
---|
| 126 | (draw_fun dev_draw)) |
---|
| 127 | (states "art/misc.spe" (stopped "marker"))) |
---|
| 128 | |
---|
| 129 | |
---|
| 130 | (defun get_option (opt_name) |
---|
| 131 | (do ((i 1 (setq i (+ i 1))) |
---|
| 132 | (found nil nil)) |
---|
| 133 | ((or (>= i (argc)) found) found) |
---|
| 134 | (if (equal opt_name (argv i)) |
---|
| 135 | (setq found T)))) |
---|