mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 11:26:18 -04:00
5eeaffcde0
Removes trailing whitespace from goal_src files, eventually the formatter will do this as well but it's not ready yet so this is a decent interim solution. A competent text editor will also do this / flag it for you.
131 lines
4.6 KiB
Common Lisp
131 lines
4.6 KiB
Common Lisp
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
#|
|
|
|
|
Code for the statistics tracker.
|
|
|
|
|#
|
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;;; debug functions
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
|
|
(defun-debug pu->string (out (pu penetrate))
|
|
(bit-enum->string penetrate pu out)
|
|
)
|
|
|
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;;; functions
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
|
|
(defmacro pu? (pu &rest flags)
|
|
`(logtest? ,pu (penetrate ,@flags))
|
|
)
|
|
|
|
(defmacro pu-all? (pu &rest flags)
|
|
`(logtesta? ,pu (penetrate ,@flags))
|
|
)
|
|
|
|
(define-extern bot type)
|
|
(define-extern crimson-guard type)
|
|
(define-extern turret type)
|
|
(defun pu&attacker->kill-source ((pu penetrate) (attacker process))
|
|
"returns the appropriate kill source based on penetrate-using and attacker"
|
|
|
|
(cond
|
|
((not attacker)
|
|
(format #t "got null attacker~%")
|
|
(kill-stats-source unknown))
|
|
|
|
((type? attacker turret)
|
|
(kill-stats-source turret))
|
|
|
|
((type? attacker target)
|
|
(case pu
|
|
(((penetrate spin touch)) (if (focus-test? (the target attacker) indax) (kill-stats-source indax-spin) (kill-stats-source spin)))
|
|
(((penetrate flop touch)) (kill-stats-source flop))
|
|
(((penetrate uppercut touch)) (kill-stats-source uppercut))
|
|
(((penetrate punch touch)) (if (focus-test? (the target attacker) indax) (kill-stats-source indax-punch) (kill-stats-source punch)))
|
|
|
|
(((penetrate mech-punch mech punch touch)) (kill-stats-source mech))
|
|
(((penetrate mech-bonk bonk touch)) (kill-stats-source mech-bonk))
|
|
|
|
(((penetrate board spin touch)) (kill-stats-source board-trick))
|
|
(((penetrate board touch)) (kill-stats-source board))
|
|
|
|
(((penetrate dark-skin spin touch) (penetrate dark-giant dark-skin spin touch)) (kill-stats-source darkjak-spin))
|
|
(((penetrate dark-skin flop touch) (penetrate dark-giant dark-skin flop touch)) (kill-stats-source darkjak-flop))
|
|
(((penetrate dark-skin uppercut touch) (penetrate dark-giant dark-skin uppercut touch)) (kill-stats-source darkjak-uppercut))
|
|
(((penetrate dark-punch dark-skin punch touch) (penetrate dark-giant dark-punch dark-skin punch touch)) (kill-stats-source darkjak-punch))
|
|
(((penetrate dark-bomb dark-skin touch) (penetrate dark-giant dark-bomb dark-skin touch))
|
|
(case (-> attacker state)
|
|
((target-darkjak-bomb0) (kill-stats-source darkjak-bomb0))
|
|
((target-darkjak-bomb1) (kill-stats-source darkjak-bomb1))
|
|
(else (kill-stats-source unknown))))
|
|
(((penetrate dark-skin touch) (penetrate dark-giant dark-skin touch)) (kill-stats-source unknown))
|
|
|
|
(((penetrate jak-yellow-shot generic-attack)) (kill-stats-source gun-yellow))
|
|
(((penetrate jak-red-shot generic-attack)) (kill-stats-source gun-red))
|
|
(((penetrate jak-blue-shot generic-attack)) (kill-stats-source gun-blue))
|
|
(((penetrate generic-attack)) (kill-stats-source gun-dark))
|
|
|
|
(else
|
|
(format #t "unhandled target penetrate-using #x~x for kill-source~%" pu)
|
|
(kill-stats-source unknown)))
|
|
)
|
|
|
|
((is-metalhead? attacker) (kill-stats-source metalhead))
|
|
|
|
((type? attacker sig) (kill-stats-source sig))
|
|
((type? attacker ashelin) (kill-stats-source ashelin))
|
|
((type? attacker mog) (kill-stats-source mog)) ;; note that mog and grim are subtypes of jinx
|
|
((type? attacker grim) (kill-stats-source grim))
|
|
((type? attacker jinx) (kill-stats-source jinx))
|
|
((type? attacker bot) (kill-stats-source bot))
|
|
((type? attacker crimson-guard) (kill-stats-source guard))
|
|
((type? attacker enemy) (kill-stats-source enemy))
|
|
|
|
(else
|
|
(format #t "unknown attacker ~A~%" attacker)
|
|
(kill-stats-source unknown))
|
|
)
|
|
)
|
|
|
|
|
|
|
|
(defun add-to-kill-stats ((enemy enemy) (attack enemy-attack-info))
|
|
"adds a kill to the statistics tracker"
|
|
|
|
;; (format #t "enemy ~A killed (incoming ~e sec ago)~%" (-> enemy name) (- (-> PP clock old-frame-counter) (-> attack attack-time)))
|
|
;; (format #t "~Tattacker: ~A~%" (handle->process (-> attack attacker-handle)))
|
|
;; (format #t "~Tpu: ")
|
|
;; (pu->string #t (-> attack penetrate-using))
|
|
;; (format #t "~%")
|
|
|
|
(let ((enemy-name (remap-enemy-type-name (-> enemy type)))
|
|
(source (pu&attacker->kill-source (-> attack penetrate-using) (handle->process (-> attack attacker-handle)))))
|
|
|
|
(when *debug-segment*
|
|
(format #t "STATS : enemy ~S(~S) killed by ~S~%" enemy-name (-> enemy type symbol) (kill-source->string source)))
|
|
|
|
(if (or (!= source (kill-stats-source unknown)) (-> *statistics* kill-stats allow-unknown?))
|
|
(increment (-> *statistics* kill-stats) enemy-name source))
|
|
)
|
|
)
|
|
|
|
|
|
|
|
(defun reset-kill-stats ()
|
|
(initialize (-> *statistics* kill-stats)))
|
|
|
|
|
|
|