mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 21:27:52 -04:00
a857061e96
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.
1168 lines
39 KiB
Common Lisp
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)
|
|
)
|
|
)
|