(define-signal vision-range 1200) (define-signal stopping-distance 24) (define-signal rotation-gain 2.5) (define-signal player-to-attack (nearest-visible-enemy)) (define-signal strafe-distance 300) (define-signal nearest-ammo-index (nearest-item 1)) (define-signal nearest-ammo-distance (distance-to-item 1 nearest-ammo-index)) ;;;;;;;;;;;;;;;;;;;;;;;;;; freespace follower ;;;;;;;;;;;;;;;;;;;;; ;; Going with the somewhat silly assumption that if the bot simply chases ;; ammo, he'll probably pick up weapons and such along the way. It worked ;; out okay, though. (define-signal item-rotation (yaw-to-item 1 nearest-ammo-index)) (define-signal item-distance (distance-to-item 1 nearest-ammo-index)) (define-signal translation 2) (define-signal item-rotation-gain 18) (define-signal rotation (if (and (> nearest-item-index -1) (< item-distance 450)) (- (round->integer (* item-rotation-gain item-rotation))) (round->integer (* rotation-gain (- (get-left-distance vision-range) (get-right-distance vision-range)))))) (define-signal freespace-follower-pitch-gain 15) (define-signal freespace-follower-pitch (round->integer (* (get-absolute-pitch) freespace-follower-pitch-gain))) (define-signal freespace-follower-reload (< (ammo-in-clip) 5)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;unwedger;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-signal unwedge-rotation-gain 1000) (define-signal stuck? (one-shot (or (< (get-center-distance vision-range) stopping-distance) (< (get-vision-distance-with-pitch 0.0 -45.0 vision-range) stopping-distance)) 1000)) (define-signal rotation-error (- (get-left-distance vision-range) (get-right-distance vision-range))) (define-signal unwedge-rotation (latch (if (> (abs rotation-error) 20) (* unwedge-rotation-gain (sgn rotation-error)) unwedge-rotation-gain) (onset stuck?))) (define-signal unwedge-translation -2) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;attacker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-signal attacker-pitch-gain 25) (define-signal attacker-weapon (cond ((get-possesses-gun 7) 7) ((get-possesses-gun 11) 11) ((get-possesses-gun 10) 10) ((get-possesses-gun 9) 9) ((get-possesses-gun 5) 5) ((get-possesses-gun 4) 4) ((get-possesses-gun 3) 3) ((get-possesses-gun 2) 2) ((get-possesses-gun 8) 8) ((get-possesses-gun 6) 6) ((get-possesses-gun 1) 1) (else 0))) (define-signal nearest-audible-enemy (latch (yaw-to-enemy-sound) #t)) (define-signal attacker-rotation-gain 115) (define-signal attacker-rotation (if (> player-to-attack -1) (- (round->integer (* attacker-rotation-gain (yaw-to-player player-to-attack)))) (- (round->integer (* attacker-rotation-gain nearest-audible-enemy))))) (define-signal attacker-pitch (if (> player-to-attack -1) (round->integer (* (pitch-to-player player-to-attack) attacker-pitch-gain)) 0)) (define-signal attacker-translation (cond ((and (> (abs (pitch-to-player player-to-attack)) 25) (< (distance-to-player player-to-attack) 200)) -2) ((> (distance-to-player player-to-attack) 100) 2) (else 0))) (define-signal attacker-strafe (if (> (get-right-distance vision-range) (get-left-distance vision-range)) 2 -2)) (define-signal attack? (or (> player-to-attack -1) (and (> (distance-to-enemy-sound) 12) (< (distance-to-enemy-sound) 1200)))) (define-signal shoot? (and (or (> (ammo-in-clip) 0) (get-possesses-gun 0)) (is-player-visible player-to-attack) (< (round->integer (abs (yaw-to-player player-to-attack))) 15) (< (abs (distance-to-player player-to-attack)) 2400))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-signal strafe 0) (define-signal pitch 0) (define-signal jump #f) (define-signal duck #f) (define-signal secondary #f) (define-signal weapon 0) (define-signal reload #f) (define-signal use #f) (define-signal freespace-follower (hl-bot-vector rotation translation strafe freespace-follower-pitch #f jump duck secondary weapon freespace-follower-reload use)) (define-signal freespace-follower-behavior (behavior #t freespace-follower)) (define-signal unwedger (hl-bot-vector unwedge-rotation unwedge-translation strafe pitch #f jump duck secondary weapon reload use)) (define-signal unwedger-behavior (behavior stuck? unwedger)) (define-signal attacker (hl-bot-vector attacker-rotation attacker-translation attacker-strafe attacker-pitch shoot? jump duck secondary attacker-weapon reload use)) (define-signal attacker-behavior (behavior attack? attacker)) (define-signal killa (drive-hl-bot (behavior-or unwedger-behavior attacker-behavior freespace-follower-behavior)))