home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC Gamer 13
/
1995-12_Disc_13.iso
/
abuse
/
lisp
/
people.lsp
< prev
next >
Wrap
Lisp/Scheme
|
1995-08-31
|
22KB
|
834 lines
;; Copyright 1995 Crack dot Com, All Rights reserved
;; See licencing information for more details on usage rights
(setq player_tints (make-array 6 :initial-contents (list
(def_tint "art/tints/cop/blue.spe")
(def_tint "art/tints/cop/africa.spe")
(def_tint "art/tints/cop/fire.spe")
(def_tint "art/tints/cop/olive.spe")
(def_tint "art/tints/cop/land.spe")
(def_tint "art/tints/cop/gold.spe")
)))
(setq cop_dead_parts (make-array (* 4 3) :initial-contents
; head arm leg
'((CP_1 "4dha") (CP_2 "4daa") (CP_3 "4dba") ; disapear
(CP_4 "4dhf") (CP_5 "4daf") (CP_6 "4dbf") ; flaming
(CP_7 "4dae") (CP_8 "4dle") (CP_9 "4dbe") ; electrical
(CP_10 "4dhn") (CP_11 "4dan") (CP_12 "4dbn")))) ; normal
(do ((i 0 (setq i (+ i 1))))
((>= i 12) nil)
(setq (aref cop_dead_parts i)
(make_dead_part (car (aref cop_dead_parts i))
(car (cdr (aref cop_dead_parts i))) 4 "art/cop.spe" 'dead_cop_part_draw)))
(setf fast_image (def_image "art/misc.spe" "fast_image"))
(setf fly_image (def_image "art/misc.spe" "fly_image"))
(setf sneaky_image (def_image "art/misc.spe" "sneaky_image"))
(setf health_image (def_image "art/misc.spe" "b_check_image"))
(defun give_player_health (amount)
(let ((h_amount (select difficulty
('easy amount)
('medium (/ (* amount 3) 4))
('hard (/ amount 2))
('extreme (/ amount 4))))
(h_max (if (eq special_power HEALTH_POWER)
200
100)))
(if (eq (hp) h_max)
nil
(progn
(if (<= (+ (hp) h_amount) h_max)
(add_hp h_amount)
(add_hp (- h_max (hp))))
(setq b_ramp (+ b_ramp (* h_amount 2)))
T)))
)
(defun pressing_action_key ()
(> (player_y_suggest) 0))
; signals for user function
(enum 'SET_SNEAKY_TIME
'SET_VISOR_TIME
'SET_FAST_TIME
'SET_FADE_COUNT
)
; states for cop
(enum 'JUST_START
'NORMAL_PLAY)
(enum 'NO_POWER
'FAST_POWER
'FLY_POWER
'SNEAKY_POWER
'HEALTH_POWER)
(defun cop_ufun (signal value)
(if (< (total_objects) 1) ; make sure upper body is there
nil
(select signal
(SET_SNEAKY_TIME
(progn
(set_sneaky_time value)
(with_obj0 (set_sneaky_time value))))
(SET_VISOR_TIME (set_visor_time value))
(SET_FAST_TIME
(progn
(set_fast_time value)
(with_obj0 (set_fast_time value))))
(SET_FADE_COUNT (set_fade_count value)
(with_obj0 (set_fade_count value)))
)))
(defun cop_adjust_top (return)
(if (< (total_objects) 1) ;; should be here
(let ((me (me)))
(link_object (add_object_after MGUN_TOP (x) (y)))
(with_obj0 (link_object me))
))
return
)
(defun climb_off_handler ()
(if (next_picture)
(progn
(view_push_down 4)
0)
(progn
(set_y (- (y) 28))
(set_state stopped)
0)))
(defun climb_handler (xm ym but)
(let ((yd in_climbing_area))
(setq in_climbing_area 0)
(if (eq (state) climb_off)
(climb_off_handler)
(if (eq (state) climbing)
(progn
(if (> ym 0)
(progn
(if (eq (current_frame) 0) (set_current_frame 9)
(set_current_frame (- (current_frame) 1)))
(set_y (+ (y) 3)))
(if (< ym 0)
(progn
(if (< yd 32)
(set_state climb_off)
(progn
(if (not (next_picture)) (set_state climbing))
(set_y (- (y) 3)))))))
(if (not (eq xm 0))
(if (can_see (x) (- (y) 20) (x) (y) nil)
(if (eq ym 0)
(progn
(set_state run_jump_fall)
(set_gravity 1))
(progn
(set_state run_jump)
(set_yvel (get_ability jump_yvel))
(set_gravity 1)
))))
0)
(if (and (>= (yvel) 0) (or (> ym 0)
(and (< ym 0) (> yd 8))))
(progn
(set_state climbing)
(set_gravity 0)
(set_xvel 0)
(set_yvel 0)
(set_xacel 0)
(set_yacel 0)
0)
(progn
(next_picture)
(cop_adjust_top (mover xm ym but))))
))))
(defun undo_special_power (xm ym but)
(select special_power
(FAST_POWER (setq used_special_power 0))
(SNEAKY_POWER (if (> used_special_power 0)
(setq used_special_power (- used_special_power 1))))))
(defun do_special_power (xm ym but)
(select special_power
(FLY_POWER
(add_object CLOUD (+ (+ (x) (* (direction) -10)) (random 5)) (+ (y) (random 5)))
(set_state run_jump)
(set_gravity 1)
(set_yacel 0)
(if (> (yvel) 0) (set_yvel (/ (yvel) 2)))
(set_yvel (- (yvel) 2))
(if (< ym 0)
(set_yvel (- (yvel) 1)))
)
(FAST_POWER
(setq used_special_power 1)
(setq last1_x (x))
(setq last1_y (y))
(if (> (total_objects) 0)
(with_obj0
(if (> fire_delay1 0)
(setq fire_delay1 (- fire_delay1 1)))))
(let ((in_area in_climbing_area)
(old_yvel (yvel)))
(player_move xm ym but)
(setq in_climbing_area in_area)
(if (and (< ym 0) (eq old_yvel 0) (< (yvel) 0))
(set_yvel (+ (yvel) (/ (yvel) 3))))
)
(setq last2_x (x))
(setq last2_y (y)))
(SNEAKY_POWER (if (<= used_special_power 15)
(setq used_special_power (+ used_special_power 1))))
))
(defun player_move (xm ym but)
(if (eq in_climbing_area 0)
(progn
(if (eq (state) climbing)
(progn
(set_gravity 1)
(set_state run_jump_fall)))
(next_picture)
(cop_adjust_top (mover xm ym but)))
(climb_handler xm ym but)))
/*(defun cop_mover (xm ym but)
(if (> (yvel) 10)
(progn
(set_yacel 0)
(set_yvel (- (yvel) 1)))) ;; terminal velocity
(select (aistate)
(JUST_START
(if (eq but 0) ; wait till user lets go of button before moving
(progn
(set_aistate NORMAL_PLAY)
(mover xm ym but))
(cop_adjust_top (tick))))
(NORMAL_PLAY
(if (or (<= (hp) 0) (eq (state) dieing) (eq (state) dead)) ; are we dead?
(progn
(if (not (eq (state) dead))
(if (not (eq (state) dieing))
(progn
(set_state dieing)
(set_xvel 0)
(set_yvel 0)
(set_xacel 0)
(set_yacel 0))
(if (not (next_picture))
(set_state dead) nil))
(if (not (eq but 0)) ; wait till dead and pressing but, then reset
(progn
(restart_player)
(set_aistate JUST_START))
(cop_adjust_top (tick))))
0)
; normal play code
(progn
; check to see if player is firing
(if (equal (bit-and but 1) 1)
(do_special_power xm ym but)
(undo_special_power xm ym but))
(let ((ret (player_move xm ym but))
(other (me)))
(with_obj0
(progn
(set_x (with_object other (x)))
(set_y (- (- (with_object other (y)) -29)
(with_object other (picture_height))))
))
(if (and (equal (bit-and but 2) 2)
(not (eq (state) dead)) (not (eq (state) dieing)))
(let ((ammo (ammo_total (current_weapon_type))))
(add_ammo (current_weapon_type) (with_obj0
(user_fun 'FIRE ammo)))
nil))
ret)
)))))
)*/
;;(defun normal_bottom_mover () ;; just runs around
(defun dead_cop_part_draw ()
(if (eq (aitype) 0)
(draw)
(draw_tint (aref player_tints (aitype)))))
(defun bottom_damage (amount from hitx hity push_xvel push_yvel) ; transfer damage to lower half
(if (eq is_teleporting 1)
nil
(let ((amount (select difficulty;; reduce damage according to difficulty
('easy (/ amount 2))
('medium (/ (* amount 3) 4))
('hard amount)
('extreme (* amount 2))
)))
(select (aistate)
(NORMAL_PLAY (if (and (not (eq (state) dieing)) (not (eq (state) dead)))
(progn
(if (eq (random 2) 0)
(set_state flinch_up)
(set_state flinch_down))
(setq r_ramp (+ r_ramp (* amount 7)))
(setq g_ramp (- g_ramp (* amount 14)))
(setq b_ramp (- b_ramp (* amount 14)))
(if (> r_ramp 120) (setq r_ramp 120))
(if (< g_ramp 0) (setq g_ramp 0))
(if (< b_ramp 0) (setq b_ramp 0))
(damage_fun amount from hitx hity (/ push_xvel 2) (/ push_yvel 2))
(if (eq (hp) 0)
(progn
(create_dead_parts cop_dead_parts (* (get_dead_part from) 3) (player_number))
(play_sound (aref PLAYER_DEATH (random 4)) 127 (x) (y)))
(if (> amount 8)
(play_sound (aref PLAYER_PAIN (random 4)) 127 (x) (y)))))))
)))
)
(defun should_draw_top? (mode)
(select mode
(JUST_START T)
(NORMAL_PLAY T)))
(defun change_mode (new_mode)
(setq disable_top_draw (if (should_draw_top? new_mode) 0 1))
(set_aistate new_mode))
(defun draw_fast ()
(put_image (- (view_x2) 20) (+ (view_y1) 5) fast_image)
(if (eq used_special_power 1)
(if (> (total_objects) 0)
(let ((nowx (x))
(nowy (y))
(l2x last2_x)
(l2y last2_y)
(l1x last1_x)
(l1y last1_y)
(td (top_draw_state (state)))
(h (picture_height)))
(set_x l2x)
(set_y l2y)
(draw_transparent 5 16)
(if td (with_obj0 (progn (set_x l2x)
(set_y (- (- l2y -29) h))
(draw_transparent 5 16))))
(set_x last1_x)
(set_y last1_y)
(draw_transparent 10 16)
(if td (with_obj0 (progn (set_x l1x)
(set_y (- (- l1y -29) h))
(draw_transparent 10 16)
(set_x nowx)
(set_y nowy)
)))
(set_x nowx)
(set_y nowy)))))
(defun sneaky_draw (count num)
(if (eq count 0)
(player_draw num)
(if (> count 15)
(draw_predator)
(draw_transparent count 16))))
(defun player_draw (num)
(if (eq num 0) (draw)
(draw_tint (aref player_tints num))))
/*(defun bottom_draw ()
(if (not (and (eq r_ramp 0) ;; need to draw red palette
(eq g_ramp 0)
(eq b_ramp 0)))
(progn
(if (> r_ramp 7)
(setq r_ramp (- r_ramp 7))
(if (< r_ramp -7)
(setq r_ramp (+ r_ramp 7))
(setq r_ramp 0)))
(if (> g_ramp 7)
(setq g_ramp (- g_ramp 7))
(if (< g_ramp -7)
(setq g_ramp (+ g_ramp 7))
(setq g_ramp 0)))
(if (> b_ramp 7)
(setq b_ramp (- b_ramp 7))
(if (< b_ramp -7)
(setq b_ramp (+ b_ramp 7))
(setq b_ramp 0)))
(if (local_player)
(tint_palette r_ramp g_ramp b_ramp))))
(select (aistate)
(JUST_START (player_draw (player_number)))
(NORMAL_PLAY
(select special_power
(NO_POWER (player_draw (player_number)))
(HEALTH_POWER (player_draw (player_number))
(put_image (- (view_x2) 20) (+ (view_y1) 5) health_image))
(FAST_POWER (draw_fast) (player_draw (player_number)))
(FLY_POWER (player_draw (player_number))
(put_image (- (view_x2) 20) (+ (view_y1) 5) fly_image))
(SNEAKY_POWER (put_image (- (view_x2) 20) (+ (view_y1) 5) sneaky_image)
(sneaky_draw used_special_power (player_number)))
))))*/
(defun restart_player ()
(setq special_power 0)
(if (and (local_player) (not (and (eq r_ramp 0)
(eq g_ramp 0)
(eq b_ramp 0))))
(progn
(setq r_ramp 0)
(setq g_ramp 0)
(setq b_ramp 0)
(tint_palette 0 0 0)))
(if (eq (total_players) 1) ;; is this a single player game?
(request_level_load (if (eq has_saved_this_level 0)
(progn
(set_hp 100)
(level_name))
(last_savegame_name)))
(reset_player)
))
(def_char DARNEL
(vars in_climbing_area
disable_top_draw
just_hit
ship_pan_x
special_power
used_special_power
last1_x last1_y
last2_x last2_y
has_saved_this_level
r_ramp g_ramp b_ramp
is_teleporting
)
(range 50 50)
(abilities (walk_top_speed 3)
(jump_yvel -15)
(run_top_speed 9)
(jump_top_speed 10)
(jump_xvel 9)
(stop_accel 9)
(start_accel 8)
(start_hp 100)
(hamper_xrange 80)
(push_xrange 9))
(flags (hurtable T)
(unlistable T))
(funs (move_fun cop_mover)
(damage_fun bottom_damage)
(draw_fun bottom_draw)
(user_fun cop_ufun))
(states "art/cop.spe"
(stopped (seq "stopped" 1 6))
(running (seq "4wlk" 1 10))
(fast_running (seq "4fst" 1 10))
(fly_running (seq "4fly" 1 10))
(fast_stopped (seq "bot2" 7 12))
(fly_stopped (seq "bot2" 1 6))
(dead "dead")
(start_run_jump "jump_up")
(run_jump "jump_up")
(run_jump_fall "jump_down")
(end_run_jump (seq "4jmp" 3 5))
(fly_start_run_jump "4flj0002.pcx")
(fly_run_jump "4flj0002.pcx")
(fly_run_jump_fall "4flj0003.pcx")
(fly_end_run_jump (seq "4flj" 4 6))
(fast_start_run_jump "4fjp0002.pcx")
(fast_run_jump "4fjp0002.pcx")
(fast_run_jump_fall "4fjp0003.pcx")
(fast_end_run_jump (seq "4fjp" 4 6))
(flinch_up (rep "4flh0002.pcx" 4))
(flinch_down (rep "4flh0003.pcx" 4))
(climbing (seq "4lad" 1 10))
(climb_off (seq "4off" 1 8))))
(defun clone_ai ()
(if (and (< (state_time) 200) (not (eq (state) dead)))
(progn
(select (direction)
(1 (if (blocked_right (move 1 0 0))
(set_direction -1)
nil))
(-1 (if (blocked_left (move -1 0 0))
(set_direction 1)
nil)))
(if (or (> (state_time) 185) (eq (state) dieing))
(set_fade_count (+ (fade_count) 1))
nil)
T)
nil))
(defun top_draw_state (state)
(or (eq state stopped) (eq state running)
(eq state run_jump) (eq state run_jump_fall)
(eq state end_run_jump)))
/*(defun top_draw ()
(if (> (total_objects) 0)
(let ((other (get_object 0)))
(if (or (with_object other (morphing))
(eq (with_object other disable_top_draw) 1)
(not (top_draw_state (with_object other (state)))))
nil
(progn
(if (eq (with_object other special_power) SNEAKY_POWER)
(sneaky_draw (with_object other used_special_power)
(with_object other (player_number)))
(let ((nowx (x))
(nowy (y)))
(set_x (with_object other (if (> (direction) 0) (x) (+ (x) 2))))
(set_y (- (- (with_object other (y)) -29) (with_object other (picture_height))))
(player_draw (with_object other (player_number)))
(set_x nowx)
(set_y nowy))
))))))
*/
(defun ammo_type ()
(select (otype)
(GRENADE_TOP 2)
(MGUN_TOP 10)
(FIREBOMB_TOP 5)
(ROCKET_TOP 3)
(PGUN_TOP 4)
(LSABER_TOP 5)
(DFIRS_TOP 6)
))
(defun ammo_delay ()
0)
(defun player_angle_suggestion ()
(atan2 (- (y) (player_pointer_y) 16)
(- (player_pointer_x) (x))))
(defun player_fire_weapon (type target)
(let ((angle (with_obj0 (player_angle_suggestion))))
(let ((firex (+ (x) (* (cos angle) 17) (xvel)))
(firey (+ (- (y) (* (sin angle) 16) 20) (yvel))))
(if (can_see (x) (- (y) 16) firex firey nil)
(progn
(fire_object (get_object 0) type firex firey angle target)
T)
nil))))
/* (defun top_ai ()
(if (> (total_objects) 0)
(let ((myself (get_object 0)))
(set_state rotate)
(let ((angle (with_object myself
(if (> (direction) 0)
(player_angle_suggestion)
(if (> (player_angle_suggestion) 180)
(- (player_angle_suggestion) 180)
(+ 180 (player_angle_suggestion)))))))
(setq point_angle angle)
(set_frame_angle 0 359 angle))
(if (not (eq fire_delay1 0))
(setq fire_delay1 (- fire_delay1 1)))
(if (eq (with_object myself (weapon_to_type (current_weapon_type))) (otype))
(select (aistate)
(2 ; start fire up
(progn
(set_state rotate_fire)
(set_frame_angle 0 359 (with_object myself
(if (> (direction) 0)
(player_angle_suggestion)
(if (> (player_angle_suggestion) 180)
(- (player_angle_suggestion) 180)
(+ 180 (player_angle_suggestion))))))
;; (set_state weapon_fire)
;; (set_fire_delay1 3)
;; (let ((otype (otype)))
;; (with_object myself (add_ammo otype -1)))
;; (with_object (add_object (ammo_type) (x) (- (y) 16) 1)
;; (user_fun myself))
(set_aistate 3)))
(1 ; special power
(progn (set_state weapon_fire_up)
(let ((otype (otype)))
(with_object myself (add_ammo weapon_type -1)))
(with_object (add_object (ammo_type) (x) (- (y) 20) 2)
(user_fun myself))
(set_aistate 3)))
(3 (if (eq fire_delay1 0) ;; (user_fun 'RESET_FIRE_OK nil)
(set_aistate 0)
(progn
(user_fun 'CONTINUE_FIRE nil)
(setq fire_delay1 (- fire_delay1 1)))
)))
(set_otype (with_object myself (weapon_to_type (current_weapon_type)))))))
(move 0 0 0)
T)
;(defun top_damage (amount from hitx hity push_xvel push_yvel) ; transfer damage to lower half
; (with_obj0 (damage_fun amount from hitx hity push_xvel push_yvel)))
(defun laser_ufun (signal value)
(select signal
('FIRE (if (eq (aistate) 0) ;; not already firing
(if (> value 0) ;; have ammo
(progn
(setq fire_delay1 3)
(set_aistate 2)
(if (player_fire_weapon (ammo_type) nil)
-1
0))
(progn
(setq fire_delay1 7)
(set_aistate 2)
(player_fire_weapon (ammo_type) nil)
0))
0))
('RESET_FIRE_OK (>= (state_time) fire_delay1))))
(defun top_ufun (signal value)
(select signal
('FIRE (if (and (> value 0) (eq (aistate) 0)) ;; have ammo and not already firing
(progn
(setq fire_delay1 12)
(set_aistate 2)
(if (player_fire_weapon (ammo_type) nil)
-1
0))
0))
('RESET_FIRE_OK (>= (state_time) fire_delay1))))
(defun plaser_ufun (signal value)
(select signal
('FIRE (if (and (> value 0) (eq (aistate) 0)) ;; have ammo and not already firing
(progn
(setq fire_delay1 2)
(set_aistate 2)
(if (player_fire_weapon (ammo_type) nil)
-1 0))
0))
('RESET_FIRE_OK (>= (state_time) fire_delay1))))
(defun player_rocket_ufun (signal value)
(select signal
('FIRE (if (and (> value 0) (eq (aistate) 0)) ;; have ammo and not already firing
(progn
(setq fire_delay1 12)
(set_aistate 2)
(if (player_fire_weapon (ammo_type)
(with_obj0 (find_object_in_area
(- (x) 160) (- (y) 160)
(+ (x) 160) (+ (y) 160)
bad_guy_list)))
-1 0))
0))
('RESET_FIRE_OK (>= (state_time) fire_delay1)))) */
(defun make_top_char (symbol base ufun dfun)
(eval (list 'def_char symbol
`(funs (ai_fun top_ai)
(draw_fun ,dfun)
(user_fun ,ufun))
'(flags (add_front T)
(is_weapon T)
(unlistable T))
'(vars point_angle fire_delay1)
`(states "art/coptop.spe"
(stopped (seq ,base 1 24))))))
(make_top_char 'MGUN_TOP "4gma" 'laser_ufun 'top_draw)
(make_top_char 'GRENADE_TOP "4gre" 'top_ufun 'top_draw)
(make_top_char 'ROCKET_TOP "4gro" 'player_rocket_ufun 'top_draw)
(make_top_char 'FIREBOMB_TOP "4gfi" 'top_ufun 'top_draw)
(defun restart_ai ()
(select (aistate)
(0 (next_picture)
(if (and (touching_bg) (with_object (bg) (pressing_action_key)))
(set_aistate 2)))
(1 (next_picture) ;; wait for save (actived state)
(if (and (touching_bg) (with_object (bg) (pressing_action_key)))
(set_aistate 2)))
(2 (set_state running)
(set_aistate 3))
(3 (set_aistate 4))
(4
(set_state stopped)
(set_aistate 1)
(show_help (concatenate 'string "Station #" (num2str (xvel)) " secured!"))
(with_object (bg)
(progn
(let ((old_hp (hp)))
(set_hp 100) ;; save the player with 100 health
(play_sound SAVE_SND 127 (x) (y))
(save_game (next_savegame_name))
(set_hp old_hp)
(setq has_saved_this_level 1)
)))
))
T)
(def_char RESTART_POSITION
(funs (ai_fun restart_ai)
(reload_fun lower_reload))
(fields ("xvel" "station number"))
(states "art/misc.spe"
(stopped (app (rep "console" 3) (rep "console2" 3)))
(running (rep "console_on" 2))))
(defun next_level_ai ()
(if (and (touching_bg) (with_object (bg) (pressing_action_key)))
(if (> (aistate) 1000)
(request_end_game (aistate))
(request_level_load (concatenate 'string "levels/level" (digstr (aistate) 2) ".spe"))))
T)
(def_char NEXT_LEVEL
(funs (ai_fun next_level_ai))
(flags (can_block T))
(fields ("aistate" "next_level"))
(states "art/misc.spe"
(stopped "end_port2")))
(defun next_level_top_ai ()
(shift_rand_table 80)
(let ((oldy (y)))
(try_move 0 100)
(setq floor_yoff (- (y) oldy))
(set_y oldy))
T)
(def_char NEXT_LEVEL_TOP
(funs (ai_fun next_level_top_ai))
(vars floor_yoff)
(draw_range 50 100)
(fields ("aistate" "next_level"))
(states "art/misc.spe"
(stopped "end_port1")))
(defun tele_beam_ai ()
(next_picture)
(if (> (direction) 0)
(if (eq (fade_count) 12)
(progn
(play_sound APPEAR_SND 100 (x) (y))
(set_direction -1))
(set_fade_count (+ (fade_count) 1)))
(if (eq (fade_count) 5)
(progn
(play_sound APPEAR_SND 100 (x) (y))
(set_direction 1))
(set_fade_count (- (fade_count) 1)))))
(def_char TELE_BEAM
(funs (ai_fun tele_beam_ai))
(states "art/chars/teleport.spe" (stopped (seq "beam" 1 5))))
(def_char END_OF_S
(funs (ai_fun do_nothing))
(states "art/misc.spe" (stopped "eos")))
(setq load_warn nil)
(load "register/people.lsp")
(setq load_warn T)