jak-project/goal_src/jak2/characters/ashelin/ash-states.gc
Hat Kid a857061e96
jak2: focus-test? macro, fix (zero? (logand ...)) -> (not (logtest? ...)) detection (#2321)
There are *a lot* of file changes and while I have carefully gone
through every gsrc change to fix up manual patches, there might still be
spots that I missed.
2023-03-14 22:57:31 -04:00

1168 lines
39 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: ash-states.gc
;; name in dgo: ash-states
;; dgos: ATE, CTYASHA
;; DECOMP BEGINS
(defstate waiting-idle (ashelin)
:virtual #t
:event (the-as (function process int symbol event-message-block object :behavior ashelin) enemy-event-handler)
:enter (behavior ()
(set! (-> self state-time) (-> self clock frame-counter))
(let ((v1-2 self))
(set! (-> v1-2 enemy-flags) (the-as enemy-flag (logclear (-> v1-2 enemy-flags) (enemy-flag enemy-flag36))))
(set! (-> v1-2 nav callback-info) *nav-enemy-null-callback-info*)
)
0
(nav-enemy-method-167 self)
(let ((v1-7 self))
(set! (-> v1-7 enemy-flags) (the-as enemy-flag (logclear (-> v1-7 enemy-flags) (enemy-flag enemy-flag37))))
)
0
(look-at-target! self (enemy-flag lock-focus))
(set! (-> self travel-anim-interp) 0.0)
(none)
)
:trans (behavior ()
(bot-method-223 self #f)
(when (not (focus-test? self grabbed))
(cond
((bot-method-214 self)
(go-hostile self)
)
((not (outside-spot-radius? self (the-as bot-spot #f) (the-as vector #f) #f))
(go-virtual traveling)
)
)
)
0
(none)
)
:code (behavior ()
(let ((v1-2 (ja-group)))
(cond
((and v1-2 (= v1-2 (-> self draw art-group data 3)))
(ja-no-eval :num! (seek!))
(while (not (ja-done? 0))
(suspend)
(ja-eval)
)
)
((let ((v1-16 (ja-group)))
(and v1-16 (= v1-16 (-> self draw art-group data 29)))
)
(ja-no-eval :num! (seek!))
(while (not (ja-done? 0))
(suspend)
(ja-eval)
)
(ja-channel-push! 1 (seconds 0.03))
(ja-no-eval :group! (-> self draw art-group data 30)
:num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 30)) frames num-frames) -1)))
:frame-num 0.0
)
(until (ja-done? 0)
(suspend)
(ja :num! (seek!))
)
(ja-channel-push! 1 (seconds 0.03))
)
(else
(let ((v1-55 (ja-group)))
(cond
((and v1-55 (= v1-55 (-> self draw art-group data 30)))
(ja-no-eval :num! (seek!))
(while (not (ja-done? 0))
(suspend)
(ja-eval)
)
(ja-channel-push! 1 (seconds 0.03))
)
(else
(ja-channel-push! 1 (seconds 0.2))
)
)
)
)
)
)
(until #f
(ja-no-eval :group! (-> self draw art-group data 3)
:num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) frames num-frames) -1)))
:frame-num 0.0
)
(until (ja-done? 0)
(suspend)
(ja :num! (seek!))
)
)
#f
(none)
)
:post (the-as (function none :behavior ashelin) nav-enemy-simple-post)
)
(defstate standing-idle (ashelin)
:virtual #t
:event (the-as (function process int symbol event-message-block object :behavior ashelin) enemy-event-handler)
:enter (behavior ()
(set! (-> self state-time) (-> self clock frame-counter))
(let ((v1-2 self))
(set! (-> v1-2 enemy-flags) (the-as enemy-flag (logclear (-> v1-2 enemy-flags) (enemy-flag enemy-flag36))))
(set! (-> v1-2 nav callback-info) *nav-enemy-null-callback-info*)
)
0
(nav-enemy-method-167 self)
(let ((v1-7 self))
(set! (-> v1-7 enemy-flags) (the-as enemy-flag (logclear (-> v1-7 enemy-flags) (enemy-flag enemy-flag37))))
)
0
(look-at-target! self (enemy-flag lock-focus))
(set! (-> self travel-anim-interp) 0.0)
(logclear! (-> self bot-flags) (bot-flags bf21))
(none)
)
:trans (behavior ()
(bot-method-223 self #t)
(cond
((bot-method-214 self)
(cond
((ashelin-method-238 self #t #t)
(when (and (ashelin-method-235 self #t) (let ((v1-11 (ja-group)))
(and v1-11 (= v1-11 (-> self draw art-group data 29)))
)
)
(cond
((and (-> self focus-info fproc) (< 8192.0 (fabs (-> self focus-info ry-diff))))
(go-virtual standing-turn)
)
((ashelin-method-235 self #f)
(go-virtual standing-blast)
)
(else
(let ((a1-4 (ashelin-method-242 self)))
(if (nonzero? a1-4)
(ashelin-method-240 self a1-4)
)
)
)
)
)
(let ((a1-5 (ashelin-method-246 self)))
(cond
((nonzero? a1-5)
(ashelin-method-240 self a1-5)
)
((and (-> self focus-info fproc) (< 8192.0 (fabs (-> self focus-info ry-diff))))
(go-virtual standing-turn)
)
)
)
)
(else
(let ((a1-6 (ashelin-method-246 self)))
(cond
((nonzero? a1-6)
(ashelin-method-240 self a1-6)
)
(else
(if (and (>= (- (-> self clock frame-counter) (-> self state-time)) (-> self reaction-time))
(ashelin-method-247 self)
)
(go-virtual chase)
)
)
)
)
)
)
(when (logtest? (bot-flags bf21) (-> self bot-flags))
(logclear! (-> self bot-flags) (bot-flags bf21))
(let ((a1-7 (ashelin-method-241 self)))
(if (nonzero? a1-7)
(ashelin-method-240 self a1-7)
)
)
)
)
(else
(if (>= (- (-> self clock frame-counter) (-> self state-time)) (-> self reaction-time))
(ashelin-method-239 self)
)
)
)
(none)
)
:code (behavior ()
(let ((v1-2 (ja-group)))
(cond
((and v1-2 (= v1-2 (-> self draw art-group data 29)))
(ja-no-eval :num! (seek!))
(while (not (ja-done? 0))
(suspend)
(ja-eval)
)
)
((let ((v1-16 (ja-group)))
(and v1-16 (or (= v1-16 (-> self draw art-group data 27))
(= v1-16 (-> self draw art-group data 31))
(= v1-16 (-> self draw art-group data 32))
)
)
)
(ja-no-eval :num! (seek!))
(while (not (ja-done? 0))
(suspend)
(ja-eval)
)
(ja-channel-push! 1 (seconds 0.03))
)
((let ((v1-31 (ja-group)))
(and v1-31 (= v1-31 (-> self draw art-group data 3)))
)
(ja-channel-push! 1 (seconds 0.1))
(ja-no-eval :group! (-> self draw art-group data 27)
:num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 27)) frames num-frames) -1)))
:frame-num 0.0
)
(until (ja-done? 0)
(suspend)
(ja :num! (seek!))
)
(ja-channel-push! 1 (seconds 0.03))
)
(else
(ja-channel-push! 1 (seconds 0.2))
)
)
)
(until #f
(ja-no-eval :group! (-> self draw art-group data 29)
:num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 29)) frames num-frames) -1)))
:frame-num 0.0
)
(until (ja-done? 0)
(suspend)
(ja :num! (seek!))
)
)
#f
(none)
)
:post (the-as (function none :behavior ashelin) nav-enemy-simple-post)
)
(defstate standing-turn (ashelin)
:virtual #t
:event (the-as (function process int symbol event-message-block object :behavior ashelin) enemy-event-handler)
:enter (behavior ()
(set! (-> self state-time) (-> self clock frame-counter))
(let ((v1-2 self))
(set! (-> v1-2 enemy-flags) (the-as enemy-flag (logclear (-> v1-2 enemy-flags) (enemy-flag enemy-flag36))))
(set! (-> v1-2 nav callback-info) *nav-enemy-null-callback-info*)
)
0
(nav-enemy-method-167 self)
(let ((v1-7 self))
(set! (-> v1-7 enemy-flags) (the-as enemy-flag (logclear (-> v1-7 enemy-flags) (enemy-flag enemy-flag37))))
)
0
(look-at-target! self (enemy-flag lock-focus))
(set! (-> self travel-anim-interp) 0.0)
(logclear! (-> self bot-flags) (bot-flags bf21))
(none)
)
:trans (behavior ()
(bot-method-223 self #f)
(when (bot-method-214 self)
(let ((a1-1 (ashelin-method-246 self)))
(if (nonzero? a1-1)
(ashelin-method-240 self a1-1)
)
)
(when (logtest? (bot-flags bf21) (-> self bot-flags))
(logclear! (-> self bot-flags) (bot-flags bf21))
(let ((a1-2 (ashelin-method-241 self)))
(if (nonzero? a1-2)
(ashelin-method-240 self a1-2)
)
)
)
)
(none)
)
:code (behavior ()
(let ((gp-0 (new 'stack-no-clear 'bot-turn-info)))
(let ((s5-0 (-> self focus-info fproc)))
(if (not s5-0)
(ashelin-method-239 self)
)
(turn-to-target self gp-0 s5-0 0.335)
)
(let ((s4-0 (-> self draw art-group data (if (>= (-> gp-0 predicted-ry-diff) 0.0)
31
32
)
)
)
)
(ja-channel-push! 1 (seconds 0.1))
(let ((s5-1 (new 'stack-no-clear 'quaternion))
(f0-1 (-> gp-0 predicted-ry-diff))
(f30-0 0.0)
(f28-0 10.0)
)
(quaternion-rotate-y! s5-1 (-> gp-0 src-quat) f0-1)
(ja-no-eval :group! s4-0
:num! (seek! (the float (+ (-> (the-as art-joint-anim s4-0) frames num-frames) -1)) 2.0)
:frame-num 0.0
)
(until (ja-done? 0)
(let ((f0-6 (ja-aframe-num 0)))
(cond
((< f0-6 f28-0)
(if (>= f0-6 f30-0)
(quaternion-slerp! (-> self root-override2 quat) (-> gp-0 src-quat) s5-1 (/ (- f0-6 f30-0) (- f28-0 f30-0)))
)
)
(else
(quaternion-copy! (-> self root-override2 quat) s5-1)
)
)
)
(suspend)
(ja :num! (seek! max 2.0))
)
)
)
)
(go-virtual standing-idle)
(none)
)
:post (the-as (function none :behavior ashelin) nav-enemy-simple-post)
)
(defstate traveling (ashelin)
:virtual #t
:event (the-as (function process int symbol event-message-block object :behavior ashelin) enemy-event-handler)
:enter (behavior ()
(set! (-> self state-time) (-> self clock frame-counter))
(let ((v1-2 self))
(if (not (logtest? (enemy-flag enemy-flag36) (-> v1-2 enemy-flags)))
(set! (-> v1-2 enemy-flags) (the-as enemy-flag (logior (enemy-flag enemy-flag38) (-> v1-2 enemy-flags))))
)
(set! (-> v1-2 enemy-flags) (the-as enemy-flag (logior (enemy-flag enemy-flag36) (-> v1-2 enemy-flags))))
(set! (-> v1-2 nav callback-info) (-> v1-2 enemy-info-override callback-info))
)
0
(let ((v1-5 self))
(set! (-> v1-5 enemy-flags) (the-as enemy-flag (logior (enemy-flag enemy-flag37) (-> v1-5 enemy-flags))))
)
0
(stop-looking-at-target! self)
(nav-enemy-method-165 self)
(set! (-> self player-blocking) 0.0)
(none)
)
:trans (behavior ()
(if (focus-test? self grabbed)
(go-virtual waiting-idle)
)
(bot-method-223 self #f)
(cond
((bot-method-214 self)
(go-hostile self)
)
((outside-spot-radius? self (the-as bot-spot #f) (the-as vector #f) #t)
(ashelin-method-239 self)
)
((and (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.5)) (bot-method-208 self))
(go-virtual traveling-blocked)
)
((and (nav-enemy-method-163 self)
(>= (- (-> self clock frame-counter) (-> self state-time)) (-> self reaction-time))
)
(go-stare2 self)
)
)
0
(none)
)
:code (behavior ()
(until #f
(ashelin-method-249 self)
(suspend)
)
#f
(none)
)
:post (behavior ()
(let ((a0-0 (-> self nav state))
(v1-1 (-> self spot))
)
(logclear! (-> a0-0 flags) (nav-state-flag directional-mode))
(logior! (-> a0-0 flags) (nav-state-flag target-poly-dirty))
(set! (-> a0-0 target-post quad) (-> v1-1 center quad))
)
0
(nav-enemy-travel-post)
(none)
)
)
(defstate traveling-blocked (ashelin)
:virtual #t
:event (the-as (function process int symbol event-message-block object :behavior ashelin) enemy-event-handler)
:enter (behavior ()
(set! (-> self state-time) (-> self clock frame-counter))
(let ((v1-2 self))
(set! (-> v1-2 enemy-flags) (the-as enemy-flag (logclear (-> v1-2 enemy-flags) (enemy-flag enemy-flag36))))
(set! (-> v1-2 nav callback-info) *nav-enemy-null-callback-info*)
)
0
(nav-enemy-method-167 self)
(let ((v1-7 self))
(set! (-> v1-7 enemy-flags) (the-as enemy-flag (logclear (-> v1-7 enemy-flags) (enemy-flag enemy-flag37))))
)
0
(look-at-target! self (enemy-flag lock-focus))
(set! (-> self travel-anim-interp) 0.0)
(none)
)
:trans (behavior ()
(bot-method-223 self #f)
(cond
((bot-method-214 self)
(go-hostile self)
)
((and (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 1)) (not (bot-method-208 self)))
(go-virtual traveling)
)
)
(none)
)
:code (-> (method-of-type ashelin waiting-idle) code)
:post (the-as (function none :behavior ashelin) nav-enemy-simple-post)
)
(defstate stare (ashelin)
:virtual #t
:enter (behavior ()
(let ((t9-0 (-> (method-of-type bot stare) enter)))
(if t9-0
(t9-0)
)
)
(let ((v1-4 self))
(set! (-> v1-4 enemy-flags) (the-as enemy-flag (logclear (-> v1-4 enemy-flags) (enemy-flag enemy-flag37))))
)
0
(set! (-> self travel-anim-interp) 0.0)
(none)
)
:trans (behavior ()
(bot-method-223 self #f)
(when (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.1))
(when (bot-method-214 self)
(if (ashelin-method-238 self #t #f)
(go-virtual standing-idle)
)
)
(if (not (nav-enemy-method-163 self))
(go-virtual traveling)
)
)
(none)
)
:code (-> (method-of-type ashelin waiting-idle) code)
)
(defstate standing-blast (ashelin)
:virtual #t
:event (the-as (function process int symbol event-message-block object :behavior ashelin) enemy-event-handler)
:enter (behavior ()
((-> (method-of-type nav-enemy hostile) enter))
(let ((v1-2 self))
(set! (-> v1-2 enemy-flags) (the-as enemy-flag (logclear (-> v1-2 enemy-flags) (enemy-flag enemy-flag36))))
(set! (-> v1-2 nav callback-info) *nav-enemy-null-callback-info*)
)
0
(nav-enemy-method-167 self)
(set! (-> self enemy-flags) (logior (enemy-flag actor-pause-backup) (-> self enemy-flags)))
(if (not (handle->process (-> self focus handle)))
(react-to-focus self)
)
(set! (-> self travel-anim-interp) 0.0)
(none)
)
:exit (behavior ()
(logclear! (-> self enemy-flags) (enemy-flag actor-pause-backup))
(none)
)
:code (behavior ()
(bot-method-223 self #t)
(if (or (not (bot-method-214 self)) (not (ashelin-method-235 self #f)))
(react-to-focus self)
)
(let ((v1-12 (ja-group)))
(if (and v1-12 (or (= v1-12 (-> self draw art-group data 29)) (= v1-12 (-> self draw art-group data 28))))
(ja-channel-push! 1 (seconds 0.03))
(ja-channel-push! 1 (seconds 0.08))
)
)
(let ((gp-0 #f))
(ja-no-eval :group! (-> self draw art-group data 28)
:num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 28)) frames num-frames) -1)))
:frame-num 0.0
)
(until (ja-done? 0)
(when (and (not gp-0) (>= (ja-aframe-num 0) 7.0))
(set! gp-0 #t)
(fire-projectile self (-> self focus-info bullseye))
)
(suspend)
(ja :num! (seek!))
)
)
(cond
((logtest? (-> self bot-flags) (bot-flags attacked))
(logclear! (-> self enemy-flags) (enemy-flag look-at-focus))
(reset-attacker! self)
)
((logtest? (-> self enemy-flags) (enemy-flag look-at-focus))
(ashelin-method-245 self)
)
)
(react-to-focus self)
(none)
)
:post (the-as (function none :behavior ashelin) nav-enemy-simple-post)
)
(defstate chase (ashelin)
:virtual #t
:event (the-as (function process int symbol event-message-block object :behavior ashelin) enemy-event-handler)
:enter (behavior ()
((-> (method-of-type nav-enemy hostile) enter))
(nav-enemy-method-166 self)
(none)
)
:trans (behavior ()
(bot-method-223 self #t)
(cond
((and (nav-enemy-method-163 self)
(>= (- (-> self clock frame-counter) (-> self state-time)) (-> self reaction-time))
)
(go-stare2 self)
)
((not (bot-method-214 self))
(go-virtual traveling)
)
)
(when (>= (- (-> self clock frame-counter) (-> self state-time)) (-> self reaction-time))
(if (or (ashelin-method-238 self #t #f) (ashelin-method-248 self))
(go-virtual standing-idle)
)
)
(let ((gp-0 (-> self nav)))
(set! (-> gp-0 target-speed) (lerp-scale
(-> self enemy-info-override walk-travel-speed)
(-> self enemy-info-override run-travel-speed)
(-> self focus-info bullseye-xz-dist)
81920.0
92160.0
)
)
)
0
(none)
)
:code (behavior ()
(until #f
(ashelin-method-249 self)
(suspend)
)
#f
(none)
)
:post (behavior ()
(let ((gp-0 (-> self nav state))
(v1-6 (get-trans (the-as process-focusable (handle->process (-> self focus handle))) 0))
)
(logclear! (-> gp-0 flags) (nav-state-flag directional-mode))
(logior! (-> gp-0 flags) (nav-state-flag target-poly-dirty))
(set! (-> gp-0 target-post quad) (-> v1-6 quad))
)
0
(nav-enemy-travel-post)
(none)
)
)
(defstate back-spring (ashelin)
:virtual #t
:event (the-as (function process int symbol event-message-block object :behavior ashelin) enemy-event-handler)
:enter (behavior ()
(set! (-> self state-time) (-> self clock frame-counter))
(let ((v1-2 self))
(set! (-> v1-2 enemy-flags) (the-as enemy-flag (logclear (-> v1-2 enemy-flags) (enemy-flag enemy-flag36))))
(set! (-> v1-2 nav callback-info) *nav-enemy-null-callback-info*)
)
0
(let ((v1-5 self))
(set! (-> v1-5 enemy-flags) (the-as enemy-flag (logclear (-> v1-5 enemy-flags) (enemy-flag enemy-flag37))))
)
0
(stop-looking-at-target! self)
(nav-enemy-method-167 self)
(logclear! (-> self nav flags) (nav-control-flag update-heading-from-facing))
(set! (-> self travel-anim-interp) 0.0)
(none)
)
:exit (behavior ()
(if (logtest? (enemy-flag enemy-flag43) (-> self enemy-flags))
(logior! (-> self nav flags) (nav-control-flag update-heading-from-facing))
(logclear! (-> self nav flags) (nav-control-flag update-heading-from-facing))
)
(none)
)
:code (behavior ()
(ja-channel-push! 1 (seconds 0.2))
(let ((gp-1 (vector-! (new 'stack-no-clear 'vector) (-> self root-override2 trans) (-> self move-dest))))
(let ((s5-0 (new 'stack-no-clear 'quaternion))
(s4-0 (new 'stack-no-clear 'quaternion))
)
(quaternion-copy! s5-0 (-> self root-override2 quat))
(quaternion<-rotate-y-vector s4-0 gp-1)
(ja-no-eval :group! (-> self draw art-group data 33)
:num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 33)) frames num-frames) -1)))
:frame-num 0.0
)
(until (ja-done? 0)
(quaternion-slerp! (-> self root-override2 quat) s5-0 s4-0 (/ (ja-frame-num 0) (the float (ja-num-frames 0))))
(suspend)
(ja :num! (seek!))
)
)
(logior! (-> self focus-status) (focus-status dangerous))
(let* ((v1-30 *game-info*)
(a0-11 (+ (-> v1-30 attack-id) 1))
)
(set! (-> v1-30 attack-id) a0-11)
(set! (-> self attack-id) a0-11)
)
(countdown (s5-1 2)
(vector-! gp-1 (-> self move-dest) (-> self root-override2 trans))
(let ((a0-14 (-> self nav state))
(v1-33 gp-1)
)
(set! (-> a0-14 heading quad) (-> v1-33 quad))
)
0
(let ((v1-36 (-> self nav)))
(set! (-> v1-36 acceleration) 1638400.0)
)
0
(let ((v1-38 (-> self nav)))
(set! (-> v1-38 turning-acceleration) 1638400.0)
)
0
(let ((v1-40 self))
(if (not (logtest? (enemy-flag enemy-flag36) (-> v1-40 enemy-flags)))
(set! (-> v1-40 enemy-flags) (the-as enemy-flag (logior (enemy-flag enemy-flag38) (-> v1-40 enemy-flags))))
)
(set! (-> v1-40 enemy-flags) (the-as enemy-flag (logior (enemy-flag enemy-flag36) (-> v1-40 enemy-flags))))
(set! (-> v1-40 nav callback-info) (-> v1-40 enemy-info-override callback-info))
)
0
(let ((f0-13 (* 1.6153771 (vector-length gp-1))))
(let ((v1-46 (-> self nav)))
(set! (-> v1-46 target-speed) f0-13)
)
0
(set! (-> self nav state speed) f0-13)
)
0
(ja-no-eval :group! (-> self draw art-group data 34)
:num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 34)) frames num-frames) -1)) 1.4)
:frame-num 0.0
)
(until (ja-done? 0)
(let ((a1-12 (-> self nav state)))
(set! (-> gp-1 quad) (-> a1-12 heading quad))
)
(set! (-> gp-1 y) 0.0)
(vector-normalize! gp-1 1.0)
(vector-negate! gp-1 gp-1)
(quaternion-set! (-> self root-override2 quat) 0.0 (-> gp-1 x) 0.0 (+ 1.0 (-> gp-1 z)))
(quaternion-normalize! (-> self root-override2 quat))
(suspend)
(ja :num! (seek! max 1.4))
)
(bot-method-223 self #f)
(if (or (not (bot-method-214 self)) (!= (ashelin-method-246 self) 1))
(goto cfg-15)
)
)
)
(label cfg-15)
(let ((v1-92 self))
(set! (-> v1-92 enemy-flags) (the-as enemy-flag (logclear (-> v1-92 enemy-flags) (enemy-flag enemy-flag36))))
(set! (-> v1-92 nav callback-info) *nav-enemy-null-callback-info*)
)
0
(nav-enemy-method-167 self)
(if (logtest? (-> self enemy-flags) (enemy-flag check-water))
(logior! (-> self focus-status) (focus-status dangerous))
(logclear! (-> self focus-status) (focus-status dangerous))
)
(ja-no-eval :group! (-> self draw art-group data 35)
:num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 35)) frames num-frames) -1)))
:frame-num 0.0
)
(until (ja-done? 0)
(suspend)
(ja :num! (seek!))
)
(react-to-focus self)
(none)
)
:post (behavior ()
(let ((a0-0 (-> self nav state))
(v1-1 (-> self move-dest))
)
(logclear! (-> a0-0 flags) (nav-state-flag directional-mode))
(logior! (-> a0-0 flags) (nav-state-flag target-poly-dirty))
(set! (-> a0-0 target-post quad) (-> v1-1 quad))
)
0
(nav-enemy-travel-post)
(none)
)
)
(defstate cartwheel-left (ashelin)
:virtual #t
:event (the-as (function process int symbol event-message-block object :behavior ashelin) enemy-event-handler)
:enter (behavior ()
(set! (-> self state-time) (-> self clock frame-counter))
(let ((v1-2 self))
(set! (-> v1-2 enemy-flags) (the-as enemy-flag (logclear (-> v1-2 enemy-flags) (enemy-flag enemy-flag36))))
(set! (-> v1-2 nav callback-info) *nav-enemy-null-callback-info*)
)
0
(let ((v1-5 self))
(set! (-> v1-5 enemy-flags) (the-as enemy-flag (logclear (-> v1-5 enemy-flags) (enemy-flag enemy-flag37))))
)
0
(stop-looking-at-target! self)
(nav-enemy-method-167 self)
(logclear! (-> self nav flags) (nav-control-flag update-heading-from-facing))
(set! (-> self travel-anim-interp) 0.0)
(none)
)
:exit (behavior ()
(if (logtest? (enemy-flag enemy-flag43) (-> self enemy-flags))
(logior! (-> self nav flags) (nav-control-flag update-heading-from-facing))
(logclear! (-> self nav flags) (nav-control-flag update-heading-from-facing))
)
(none)
)
:code (behavior ()
(ja-channel-push! 1 (seconds 0.2))
(let ((gp-1 (vector-! (new 'stack-no-clear 'vector) (-> self move-dest) (-> self root-override2 trans))))
(let ((s5-0 (new 'stack-no-clear 'quaternion))
(s4-0 (new 'stack-no-clear 'quaternion))
)
(quaternion-copy! s5-0 (-> self root-override2 quat))
(quaternion<-rotate-y-vector s4-0 gp-1)
(quaternion-rotate-y! s4-0 s4-0 -16384.0)
(ja-no-eval :group! (-> self draw art-group data 36)
:num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 36)) frames num-frames) -1)))
:frame-num 0.0
)
(until (ja-done? 0)
(quaternion-slerp! (-> self root-override2 quat) s5-0 s4-0 (/ (ja-frame-num 0) (the float (ja-num-frames 0))))
(suspend)
(ja :num! (seek!))
)
)
(logior! (-> self focus-status) (focus-status dangerous))
(let* ((v1-29 *game-info*)
(a0-13 (+ (-> v1-29 attack-id) 1))
)
(set! (-> v1-29 attack-id) a0-13)
(set! (-> self attack-id) a0-13)
)
(let ((a0-14 (-> self nav state))
(v1-31 gp-1)
)
(set! (-> a0-14 heading quad) (-> v1-31 quad))
)
0
(let ((v1-34 (-> self nav)))
(set! (-> v1-34 acceleration) 1638400.0)
)
0
(let ((v1-36 (-> self nav)))
(set! (-> v1-36 turning-acceleration) 1638400.0)
)
0
(let ((v1-38 self))
(if (not (logtest? (enemy-flag enemy-flag36) (-> v1-38 enemy-flags)))
(set! (-> v1-38 enemy-flags) (the-as enemy-flag (logior (enemy-flag enemy-flag38) (-> v1-38 enemy-flags))))
)
(set! (-> v1-38 enemy-flags) (the-as enemy-flag (logior (enemy-flag enemy-flag36) (-> v1-38 enemy-flags))))
(set! (-> v1-38 nav callback-info) (-> v1-38 enemy-info-override callback-info))
)
0
(let ((f0-13 (* 1.0714335 (vector-length gp-1))))
(let ((v1-44 (-> self nav)))
(set! (-> v1-44 target-speed) f0-13)
)
0
(set! (-> self nav state speed) f0-13)
)
0
(ja-no-eval :group! (-> self draw art-group data 37)
:num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 37)) frames num-frames) -1)))
:frame-num 0.0
)
(until (ja-done? 0)
(let ((a1-11 (-> self nav state)))
(set! (-> gp-1 quad) (-> a1-11 heading quad))
)
(set! (-> gp-1 y) 0.0)
(vector-normalize! gp-1 1.0)
(vector-rotate-around-y! gp-1 gp-1 -16384.0)
(quaternion-set! (-> self root-override2 quat) 0.0 (-> gp-1 x) 0.0 (+ 1.0 (-> gp-1 z)))
(quaternion-normalize! (-> self root-override2 quat))
(suspend)
(ja :num! (seek!))
)
)
(let ((v1-78 self))
(set! (-> v1-78 enemy-flags) (the-as enemy-flag (logclear (-> v1-78 enemy-flags) (enemy-flag enemy-flag36))))
(set! (-> v1-78 nav callback-info) *nav-enemy-null-callback-info*)
)
0
(nav-enemy-method-167 self)
(if (logtest? (-> self enemy-flags) (enemy-flag check-water))
(logior! (-> self focus-status) (focus-status dangerous))
(logclear! (-> self focus-status) (focus-status dangerous))
)
(ja-no-eval :group! (-> self draw art-group data 38)
:num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 38)) frames num-frames) -1)))
:frame-num 0.0
)
(until (ja-done? 0)
(suspend)
(ja :num! (seek!))
)
(react-to-focus self)
(none)
)
:post (behavior ()
(let ((a0-0 (-> self nav state))
(v1-1 (-> self move-dest))
)
(logclear! (-> a0-0 flags) (nav-state-flag directional-mode))
(logior! (-> a0-0 flags) (nav-state-flag target-poly-dirty))
(set! (-> a0-0 target-post quad) (-> v1-1 quad))
)
0
(nav-enemy-travel-post)
(none)
)
)
(defstate tumble-right (ashelin)
:virtual #t
:event (the-as (function process int symbol event-message-block object :behavior ashelin) enemy-event-handler)
:enter (behavior ()
(set! (-> self state-time) (-> self clock frame-counter))
(let ((v1-2 self))
(set! (-> v1-2 enemy-flags) (the-as enemy-flag (logclear (-> v1-2 enemy-flags) (enemy-flag enemy-flag36))))
(set! (-> v1-2 nav callback-info) *nav-enemy-null-callback-info*)
)
0
(let ((v1-5 self))
(set! (-> v1-5 enemy-flags) (the-as enemy-flag (logclear (-> v1-5 enemy-flags) (enemy-flag enemy-flag37))))
)
0
(stop-looking-at-target! self)
(nav-enemy-method-167 self)
(logclear! (-> self nav flags) (nav-control-flag update-heading-from-facing))
(set! (-> self travel-anim-interp) 0.0)
(none)
)
:exit (behavior ()
(if (logtest? (enemy-flag enemy-flag43) (-> self enemy-flags))
(logior! (-> self nav flags) (nav-control-flag update-heading-from-facing))
(logclear! (-> self nav flags) (nav-control-flag update-heading-from-facing))
)
(none)
)
:code (behavior ()
(ja-channel-push! 1 (seconds 0.2))
(let ((gp-1 (vector-! (new 'stack-no-clear 'vector) (-> self move-dest) (-> self root-override2 trans))))
(let ((s5-0 (new 'stack-no-clear 'quaternion))
(s4-0 (new 'stack-no-clear 'quaternion))
)
(quaternion-copy! s5-0 (-> self root-override2 quat))
(quaternion<-rotate-y-vector s4-0 gp-1)
(quaternion-rotate-y! s4-0 s4-0 16384.0)
(ja-no-eval :group! (-> self draw art-group data 39)
:num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 39)) frames num-frames) -1)))
:frame-num 0.0
)
(until (ja-done? 0)
(quaternion-slerp! (-> self root-override2 quat) s5-0 s4-0 (/ (ja-frame-num 0) (the float (ja-num-frames 0))))
(suspend)
(ja :num! (seek!))
)
)
(logior! (-> self focus-status) (focus-status dangerous))
(let* ((v1-29 *game-info*)
(a0-13 (+ (-> v1-29 attack-id) 1))
)
(set! (-> v1-29 attack-id) a0-13)
(set! (-> self attack-id) a0-13)
)
(let ((a0-14 (-> self nav state))
(v1-31 gp-1)
)
(set! (-> a0-14 heading quad) (-> v1-31 quad))
)
0
(let ((v1-34 (-> self nav)))
(set! (-> v1-34 acceleration) 1638400.0)
)
0
(let ((v1-36 (-> self nav)))
(set! (-> v1-36 turning-acceleration) 1638400.0)
)
0
(let ((v1-38 self))
(if (not (logtest? (enemy-flag enemy-flag36) (-> v1-38 enemy-flags)))
(set! (-> v1-38 enemy-flags) (the-as enemy-flag (logior (enemy-flag enemy-flag38) (-> v1-38 enemy-flags))))
)
(set! (-> v1-38 enemy-flags) (the-as enemy-flag (logior (enemy-flag enemy-flag36) (-> v1-38 enemy-flags))))
(set! (-> v1-38 nav callback-info) (-> v1-38 enemy-info-override callback-info))
)
0
(let ((f0-13 (* 1.8749386 (vector-length gp-1))))
(let ((v1-44 (-> self nav)))
(set! (-> v1-44 target-speed) f0-13)
)
0
(set! (-> self nav state speed) f0-13)
)
0
(ja-no-eval :group! (-> self draw art-group data 40)
:num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 40)) frames num-frames) -1)))
:frame-num 0.0
)
(until (ja-done? 0)
(let ((a1-11 (-> self nav state)))
(set! (-> gp-1 quad) (-> a1-11 heading quad))
)
(set! (-> gp-1 y) 0.0)
(vector-normalize! gp-1 1.0)
(vector-rotate-around-y! gp-1 gp-1 16384.0)
(quaternion-set! (-> self root-override2 quat) 0.0 (-> gp-1 x) 0.0 (+ 1.0 (-> gp-1 z)))
(quaternion-normalize! (-> self root-override2 quat))
(suspend)
(ja :num! (seek!))
)
)
(let ((v1-78 self))
(set! (-> v1-78 enemy-flags) (the-as enemy-flag (logclear (-> v1-78 enemy-flags) (enemy-flag enemy-flag36))))
(set! (-> v1-78 nav callback-info) *nav-enemy-null-callback-info*)
)
0
(nav-enemy-method-167 self)
(if (logtest? (-> self enemy-flags) (enemy-flag check-water))
(logior! (-> self focus-status) (focus-status dangerous))
(logclear! (-> self focus-status) (focus-status dangerous))
)
(ja-no-eval :group! (-> self draw art-group data 41)
:num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 41)) frames num-frames) -1)))
:frame-num 0.0
)
(until (ja-done? 0)
(suspend)
(ja :num! (seek!))
)
(react-to-focus self)
(none)
)
:post (behavior ()
(let ((a0-0 (-> self nav state))
(v1-1 (-> self move-dest))
)
(logclear! (-> a0-0 flags) (nav-state-flag directional-mode))
(logior! (-> a0-0 flags) (nav-state-flag target-poly-dirty))
(set! (-> a0-0 target-post quad) (-> v1-1 quad))
)
0
(nav-enemy-travel-post)
(none)
)
)
(defstate hit (ashelin)
:virtual #t
:enter (behavior ()
(let ((t9-0 (-> (method-of-type bot hit) enter)))
(if t9-0
(t9-0)
)
)
(set! (-> self travel-anim-interp) 0.0)
(set! (-> self last-fire-time) 0)
0
(none)
)
:code (behavior ()
(local-vars (v1-7 enemy-flag) (v1-15 enemy-flag))
(if (logtest? (-> self enemy-flags) (enemy-flag check-water))
(logior! (-> self focus-status) (focus-status dangerous))
(logclear! (-> self focus-status) (focus-status dangerous))
)
(let ((v1-6 (-> self enemy-flags)))
(if (logtest? v1-6 (enemy-flag checking-water))
(set! v1-7 (logior v1-6 (enemy-flag enable-on-active)))
(set! v1-7 (logclear v1-6 (enemy-flag enable-on-active)))
)
)
(set! (-> self enemy-flags) v1-7)
(if (logtest? (-> self enemy-flags) (enemy-flag look-at-move-dest))
(set! (-> self mask) (logior (process-mask collectable) (-> self mask)))
(logclear! (-> self mask) (process-mask collectable))
)
(let ((v1-14 (-> self enemy-flags)))
(if (logtest? (enemy-flag no-initial-move-to-ground) v1-14)
(set! v1-15 (logior (enemy-flag check-water-backup) v1-14))
(set! v1-15 (logclear v1-14 (enemy-flag check-water-backup)))
)
)
(set! (-> self enemy-flags) v1-15)
(logclear! (-> self enemy-flags) (enemy-flag actor-pause-backup))
(logclear! (-> self focus-status) (focus-status hit))
(react-to-focus self)
(none)
)
)
(defstate knocked (ashelin)
:virtual #t
:enter (behavior ()
(set! (-> self travel-anim-interp) 0.0)
(set! (-> self last-fire-time) 0)
(let ((t9-0 (-> (method-of-type bot knocked) enter)))
(if t9-0
(t9-0)
)
)
(logclear! (-> self bot-flags) (bot-flags bf23))
(when (and (nonzero? (-> self hit-points)) (zero? (-> self fated-time)))
(if (logtest? (-> self bot-flags) (bot-flags bf04))
(logior! (-> self bot-flags) (bot-flags bf12))
(set! (-> self bot-flags) (logior (bot-flags bf23) (-> self bot-flags)))
)
)
(none)
)
:trans (behavior ()
(let ((t9-0 (-> (method-of-type bot knocked) trans)))
(if t9-0
(t9-0)
)
)
(when (and (logtest? (bot-flags bf23) (-> self bot-flags)) (!= (-> self state-time) (-> self clock frame-counter)))
(logclear! (-> self bot-flags) (bot-flags bf23))
(ashelin-method-244 self)
)
(none)
)
)
(defstate die-falling (ashelin)
:virtual #t
:enter (behavior ()
(let ((t9-0 (-> (method-of-type bot die-falling) enter)))
(if t9-0
(t9-0)
)
)
(set! (-> self travel-anim-interp) 0.0)
(none)
)
:code (behavior ()
(let ((v1-1 (get-rand-int self 3)))
(cond
((zero? v1-1)
(play-death-sound self "asha057")
)
((= v1-1 1)
(play-death-sound self "asha055")
)
(else
(play-death-sound self "asha056")
)
)
)
(let ((v1-10 (ja-group)))
(cond
((and v1-10 (or (= v1-10 (-> self draw art-group data 9)) (= v1-10 (-> self draw art-group data 12))))
(ja-no-eval :num! (seek!))
(while (not (ja-done? 0))
(suspend)
(ja-eval)
)
)
(else
(ja-channel-push! 1 (seconds 0.1))
(let ((gp-0 (-> self draw art-group data (if (enemy-method-133 self)
(-> self enemy-info-override die-falling-anim)
(-> self enemy-info-override die-anim)
)
)
)
(f30-0 (get-rand-float-range self 0.8 1.2))
)
(ja-no-eval :group! gp-0
:num! (seek! (the float (+ (-> (the-as art-joint-anim gp-0) frames num-frames) -1)) f30-0)
:frame-num 0.0
)
(until (ja-done? 0)
(suspend)
(ja :num! (seek! max f30-0))
)
)
)
)
)
(until #f
(if (and (logtest? (-> self bot-flags) (bot-flags failed)) (reset? *fail-mission-control*))
(reset! *fail-mission-control*)
)
(suspend)
)
#f
(none)
)
)
(defstate failed (ashelin)
:virtual #t
:enter (behavior ()
(go-virtual die-falling)
(none)
)
)