jak-project/goal_src/jak2/engine/target/target.gc

3864 lines
146 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: target.gc
;; name in dgo: target
;; dgos: ENGINE, GAME
;; DECOMP BEGINS
(defbehavior target-falling-trans target ((arg0 symbol) (arg1 time-frame))
(if (want-to-darkjak?)
(go target-darkjak-get-on (darkjak-stage active))
)
(if (and (cpad-pressed? (-> self control cpad number) circle) (can-feet? #f))
(go target-attack-air #f)
)
(if (logtest? (-> self control status) (collide-status on-surface))
(go target-hit-ground #f)
)
(when (if (and (< (target-move-dist (-> *TARGET-bank* stuck-time)) (-> *TARGET-bank* stuck-distance))
(>= arg1 0)
(time-elapsed? (-> self state-time) arg1)
(not (and *cheat-mode* (cpad-hold? (-> self control cpad number) r2)))
)
#t
)
(logior! (-> self control status) (collide-status on-surface))
(go target-hit-ground 'stuck)
)
(if (!= (-> self state-time) (current-time))
(slide-down-test)
)
0
(none)
)
(defstate target-startup (target)
:event target-standard-event-handler
:code (behavior ()
(suspend)
(suspend)
(go target-stance)
)
:post target-no-move-post
)
(defstate target-stance (target)
:event target-standard-event-handler
:enter (behavior ()
(set! (-> self control mod-surface) *walk-mods*)
(set-time! (-> self state-time))
)
:exit (behavior ()
(logclear! (-> self state-flags) (state-flags lleg-still rleg-still))
(set! (-> self control bend-target) 0.0)
(target-state-hook-exit)
)
:trans (behavior ()
((-> self state-hook))
(if (and (logtest? (water-flags wading) (-> self water flags)) (not (using-gun? self)))
(go target-wade-stance)
)
(when (= (-> self control ground-pat material) (pat-material ice))
(set! (-> self control bend-target) 0.0)
(logclear! (-> self state-flags) (state-flags lleg-still rleg-still lleg-no-ik rleg-no-ik))
(remove-exit)
(go target-ice-stance)
)
(when (move-legs?)
(set! (-> self control bend-target) 0.0)
(logclear! (-> self state-flags) (state-flags lleg-still rleg-still lleg-no-ik rleg-no-ik))
(remove-exit)
(go target-walk)
)
(if (want-to-darkjak?)
(go target-darkjak-get-on (darkjak-stage active))
)
(when (and (cpad-hold? (-> self control cpad number) l1) (can-duck?))
(logclear! (-> self state-flags) (state-flags lleg-still rleg-still lleg-no-ik rleg-no-ik))
(set! (-> self control bend-target) 0.0)
(remove-exit)
(go target-duck-stance #f)
)
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons x)
)
(can-jump? #f)
)
(target-jump-go)
)
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons circle)
)
(can-feet? #t)
)
(go target-attack)
)
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons square)
)
(can-hands? #t)
)
(go target-running-attack)
)
(if (and (using-gun? self)
(and (-> self next-state) (= (-> self next-state name) 'target-stance))
(let ((v1-85 (ja-group)))
(and v1-85 (= v1-85 jakb-stance-loop-ja))
)
)
(go target-gun-stance)
)
(if (and (logtest? (-> self game features) (game-feature carry))
(logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons r1)
)
)
(go target-carry-pickup)
)
(slide-down-test)
(fall-test target-falling -4096000.0)
)
:code target-stance-anim
:post target-post
)
(defstate target-walk (target)
:event target-walk-event-handler
:enter (behavior ()
(if (and (using-gun? self) (-> self next-state) (= (-> self next-state name) 'target-walk))
(go target-gun-walk)
)
(set-time! (-> self state-time))
(set! (-> self control mod-surface) *walk-mods*)
)
:exit (behavior ()
(target-effect-exit)
(target-state-hook-exit)
)
:trans (behavior ()
((-> self state-hook))
(when (= (-> self control ground-pat material) (pat-material ice))
(target-effect-exit)
(remove-exit)
(go target-ice-walk)
)
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons l1)
)
(and (!= (-> *cpad-list* cpads (-> self control cpad number) stick0-speed) 0.0) (can-roll?))
)
(go target-roll)
)
(when (and (cpad-hold? (-> self control cpad number) l1) (can-duck?))
(target-effect-exit)
(remove-exit)
(go target-duck-walk #f)
)
(when (not (move-legs?))
(target-effect-exit)
(remove-exit)
(go target-stance)
)
(if (want-to-darkjak?)
(go target-darkjak-get-on (darkjak-stage active))
)
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons x)
)
(can-jump? #f)
)
(target-jump-go)
)
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons circle)
)
(can-feet? #t)
)
(go target-attack)
)
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons square)
)
(can-hands? #t)
)
(go target-running-attack)
)
(when (and (turn-around?) (time-elapsed? (-> self state-time) (seconds 0.3)))
(set! (-> self control transv quad)
(-> self control transv-history (-> self control idx-of-fastest-xz-vel) quad)
)
(set! (-> self control transv w) 1.0)
(go target-turn-around)
)
(if (and (logtest? (-> self game features) (game-feature carry))
(logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons r1)
)
)
(go target-carry-pickup)
)
(if (wall-hide?)
(go target-hide)
)
(slide-down-test)
(fall-test target-falling -4096000.0)
)
:code (behavior ()
(target-walk-anim -300)
)
:post target-post
)
(defstate target-turn-around (target)
:event target-standard-event-handler
:enter (behavior ()
(vector-turn-to (-> self control transv))
(set! (-> self control mod-surface) *turn-around-mods*)
(set! (-> self control bend-target) 1.0)
)
:exit (behavior ()
(target-state-hook-exit)
(set-forward-vel 0.0)
(set! (-> self control ctrl-xz-vel) 0.0)
(set-quaternion! (-> self control) (-> self control dir-targ))
(set! (-> self control bend-target) 0.0)
)
:trans (behavior ()
((-> self state-hook))
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons x)
)
(can-jump? #f)
)
(target-jump-go)
)
(if (and (cpad-pressed? (-> self control cpad number) circle) (can-feet? #t))
(go target-attack)
)
(if (and (cpad-pressed? (-> self control cpad number) square) (can-hands? #t))
(go target-running-attack)
)
(if (and (not (logtest? (-> self control status) (collide-status on-surface)))
(time-elapsed? (-> self control last-time-on-surface) (seconds 0.08))
)
(go target-falling #f)
)
(slide-down-test)
)
:code (behavior ()
(ja-channel-push! 1 (seconds 0.04))
(ja :group! jakb-turn-around-ja :num! min)
(quaternion-rotate-y! (-> self control dir-targ) (-> self control dir-targ) 32768.0)
(compute-alignment! (-> self align))
(until (ja-done? 0)
(suspend)
(ja :num! (seek! max 2.0))
(compute-alignment! (-> self align))
(align! (-> self align) (align-opts adjust-quat) 1.0 1.0 1.0)
)
(remove-exit)
(set! (-> self control bend-target) 0.0)
(set! (-> self control ctrl-xz-vel) (* 40960.0 (-> self darkjak-giant-interp)))
(set-forward-vel (-> self control ctrl-xz-vel))
(target-state-hook-exit)
(go target-walk)
)
:post target-no-stick-post
)
(defstate target-slide-down (target)
:event target-walk-event-handler
:enter (behavior ()
(set! (-> self control mod-surface) *jump-mods*)
)
:exit (behavior ()
(set-time! (-> self control unknown-time-frame13))
)
:trans (behavior ()
(when (or (logtest? (-> self control status) (collide-status on-surface))
(if (< (target-move-dist (-> *TARGET-bank* stuck-time)) (-> *TARGET-bank* stuck-distance))
#t
)
)
(logior! (-> self control status) (collide-status on-surface))
(if (using-gun? self)
(go target-stance)
(go target-duck-stance #f)
)
)
)
:code (behavior ()
(let ((v1-2 (ja-group)))
(if (not (and v1-2 (= v1-2 jakb-duck-stance-ja)))
(ja-channel-push! 1 (seconds 0.1))
)
)
(until #f
(ja-no-eval :group! jakb-duck-stance-ja :num! (seek!) :frame-num 0.0)
(until (ja-done? 0)
(suspend)
(ja :num! (seek!))
)
)
#f
)
:post target-post
)
(define *slide-down-mods* (new 'static 'surface
:name 'run
:turnv 131072.0
:turnvv 524288.0
:tiltv 65536.0
:tiltvv 262144.0
:transv-max 81920.0
:target-speed 81920.0
:seek0 0.4
:seek90 0.4
:seek180 0.4
:fric 1.0
:nonlin-fric-dist 1.0
:slip-factor 1.0
:slide-factor 1.0
:slope-up-factor 1.0
:slope-down-factor 1.0
:slope-slip-angle 1.0
:impact-fric 1.0
:bend-factor 1.0
:bend-speed 1.0
:alignv 1.0
:slope-up-traction 1.0
:align-speed 1.0
:turnvf 60.0
:turnvvf 30.0
:tiltvf 150.0
:tiltvvf 15.0
:flags (surface-flag no-turn-around)
)
)
(define *slide-jump-mods* (new 'static 'surface
:name 'jump
:turnv 32768.0
:turnvv 18204.445
:tiltv 32768.0
:tiltvv 262144.0
:transv-max 65536.0
:target-speed 65536.0
:seek0 0.05
:seek90 0.05
:seek180 0.05
:fric 0.05
:nonlin-fric-dist 1.0
:slip-factor 1.0
:slide-factor 1.0
:slope-up-factor 1.0
:slope-down-factor 1.0
:slope-slip-angle 1.0
:impact-fric 1.0
:bend-factor 1.0
:bend-speed 1.0
:alignv 1.0
:slope-up-traction 1.0
:align-speed 1.0
:turnvf 300.0
:turnvvf 30.0
:tiltvf 150.0
:tiltvvf 15.0
:mode 'air
:flags (surface-flag check-edge air)
)
)
(defstate target-slide-down-to-ground (target)
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
(case message
(('slide)
#f
)
(else
(target-standard-event-handler proc argc message block)
)
)
)
:enter (behavior ()
(set-time! (-> self state-time))
(set! (-> self control mod-surface) *slide-down-mods*)
(set! (-> self control sliding-start-time) 0)
(set! (-> self control force-turn-to-strength) 1.0)
(set! (-> self control force-turn-to-speed) 1.0)
)
:exit (behavior ()
(target-effect-exit)
(target-exit)
(set-time! (-> self control unknown-time-frame13))
)
:trans (behavior ()
(if (and (or (and (logtest? (-> self control status) (collide-status on-surface))
(and (< 0.9 (-> self control surface-angle))
(!= (-> self control cur-pat material) 14)
(!= (-> self control cur-pat event) 7)
(!= (-> self control cur-pat event) 14)
(or (= (-> self control cur-pat mode) (pat-mode ground))
(= (-> self control cur-pat mode) (pat-mode halfpipe))
)
)
)
(if (< (target-move-dist (-> *TARGET-bank* stuck-time)) (-> *TARGET-bank* stuck-distance))
#t
)
)
(zero? (-> self control sliding-start-time))
)
(set-time! (-> self control sliding-start-time))
)
(when (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons x)
)
(can-jump? #f)
(!= (-> self state-time) (current-time))
)
(forward-up-nopitch->quaternion
(-> self control dir-targ)
(vector-normalize-copy! (new 'stack-no-clear 'vector) (-> self control force-turn-to-direction) 1.0)
(vector-y-quaternion! (new 'stack-no-clear 'vector) (-> self control quat))
)
(vector-normalize-copy! (-> self control transv) (-> self control force-turn-to-direction) 40960.0)
(go target-jump (-> *TARGET-bank* jump-height-min) (-> *TARGET-bank* jump-height-max) *slide-jump-mods*)
)
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons circle)
)
(can-feet? #t)
(!= (-> self state-time) (current-time))
)
(go target-attack)
)
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons square)
)
(can-hands? #t)
(time-elapsed? (-> self control last-running-attack-end-time) (seconds 0.7))
(!= (-> self state-time) (current-time))
)
(go target-running-attack)
)
(when (= (-> self control force-turn-to-strength) 0.0)
(logior! (-> self control status) (collide-status on-surface))
(if (using-gun? self)
(go target-stance)
(go target-duck-stance #f)
)
)
(set! (-> self control ctrl-xz-vel) (* 40960.0 (-> self darkjak-giant-interp)))
)
:code (-> target-walk code)
:post (behavior ()
(cond
((zero? (-> self control sliding-start-time))
(vector-normalize!
(vector-flatten!
(-> self control force-turn-to-direction)
(vector-negate! (new 'stack-no-clear 'vector) (-> self control dynam gravity-normal))
(-> self control surface-normal)
)
1.0
)
(if (< 0.0
(vector-dot
(-> self control force-turn-to-direction)
(vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self control quat-for-control))
)
)
(forward-up-nopitch->quaternion
(-> self control dir-targ)
(-> self control force-turn-to-direction)
(vector-y-quaternion! (new-stack-vector0) (-> self control dir-targ))
)
(forward-up-nopitch->quaternion
(-> self control dir-targ)
(vector-negate! (new 'stack-no-clear 'vector) (-> self control force-turn-to-direction))
(vector-y-quaternion! (new-stack-vector0) (-> self control dir-targ))
)
)
)
((nonzero? (-> self control sliding-start-time))
(seek! (-> self control force-turn-to-strength) 0.0 (* 4.0 (seconds-per-frame)))
)
)
(set! (-> self control turn-lockout-end-time) (+ (current-time) (seconds 0.1)))
(target-post)
)
)
(defbehavior init-var-jump target ((arg0 float) (arg1 float) (arg2 symbol) (arg3 symbol) (arg4 vector) (arg5 float))
(when (and (focus-test? self dark)
(nonzero? (-> self darkjak))
(logtest? (-> self darkjak stage) (darkjak-stage giant))
)
(set! arg0 (* arg0 (-> self darkjak-giant-interp)))
(set! arg1 (* arg1 (-> self darkjak-giant-interp)))
)
(logclear! (-> self control status) (collide-status touch-ceiling-sticky))
(set-time! (-> self control unknown-time-frame19))
(delete-back-vel)
(let* ((f0-4 arg5)
(f1-2 0.0)
(f2-2 (+ (* 0.0016666667 (-> self control dynam gravity-length))
(fmax 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
)
)
(f0-5 (* f0-4 (fmax f1-2 (/ (* 0.5 f2-2 f2-2) (-> self control dynam gravity-length)))))
(s3-1 (+ arg0 f0-5))
)
(let ((s2-1 (+ arg1 f0-5)))
(when (not (time-elapsed? (-> self control rider-time) (seconds 0.05)))
(let ((f0-8
(fmax
0.0
(fmin 28672.0 (* 0.5 (vector-dot (-> self control dynam gravity-normal) (-> self control rider-last-move))))
)
)
)
(set! s3-1 (+ s3-1 f0-8))
(set! s2-1 (+ s2-1 f0-8))
)
(send-event self 'push-transv (-> self control rider-last-move) (seconds 100))
)
(set! (-> self control unknown-float36) 0.0)
(set! (-> self control unknown-float37) 0.0)
(cond
(arg3
(set! (-> self control unknown-word04)
(the-as uint (- s3-1 (+ -409.6 (-> *TARGET-bank* jump-collide-offset))))
)
(set! (-> self control did-move-to-pole-or-max-jump-height) (- s2-1 (-> *TARGET-bank* jump-collide-offset)))
)
(else
(set! (-> self control unknown-word04) (the-as uint s3-1))
(set! (-> self control did-move-to-pole-or-max-jump-height) s2-1)
)
)
)
(when arg2
(let ((v1-55 (new-stack-vector0)))
(let ((f0-19 (vector-dot (-> self control dynam gravity-normal) arg4)))
0.0
(vector-! v1-55 arg4 (vector-float*! v1-55 (-> self control dynam gravity-normal) f0-19))
)
(let* ((f0-20 (vector-length v1-55))
(f1-16 f0-20)
(f2-13
(- (sqrtf (* 2.0 (-> self control dynam gravity-length) s3-1))
(* 0.008333334 (- (-> self control dynam gravity-length)))
)
)
)
(vector+!
arg4
(vector-float*! arg4 (-> self control dynam gravity-normal) f2-13)
(vector-float*! v1-55 v1-55 (/ f0-20 f1-16))
)
)
)
)
)
(let ((v0-2 (-> self control unknown-vector37)))
(set! (-> v0-2 quad) (-> self control trans quad))
v0-2
)
)
(defbehavior mod-var-jump target ((arg0 symbol) (arg1 symbol) (arg2 symbol) (arg3 vector))
(local-vars (v0-1 vector))
(let ((f0-1 (* 0.033333335 (the float (- (current-time) (-> self state-time))))))
(cond
((or (< 1.0 f0-1) (< (-> self control unknown-float36) 0.0) (not arg2))
(set! (-> self control unknown-float36) -1.0)
)
(else
(set! (-> self control unknown-float36) f0-1)
(set! (-> self control unknown-float37) f0-1)
(when arg0
(let ((s3-1 (vector-! (new-stack-vector0) (-> self control trans) (-> self control unknown-vector37)))
(s4-0 (new-stack-vector0))
)
(let ((f1-5 (vector-dot (-> self control dynam gravity-normal) arg3)))
0.0
(vector-! s4-0 arg3 (vector-float*! s4-0 (-> self control dynam gravity-normal) f1-5))
)
(let* ((f30-0 (vector-length s4-0))
(f28-0 f30-0)
(f0-7
(- (sqrtf
(* 2.0
(-> self control dynam gravity-length)
(- (lerp-scale
(the-as float (-> self control unknown-word04))
(-> self control did-move-to-pole-or-max-jump-height)
f0-1
0.0
1.0
)
(vector-dot (-> self control dynam gravity-normal) s3-1)
)
)
)
(* 0.008333334 (- (-> self control dynam gravity-length)))
)
)
)
(vector+!
arg3
(vector-float*! arg3 (-> self control dynam gravity-normal) f0-7)
(vector-float*! s4-0 s4-0 (/ f30-0 f28-0))
)
)
)
)
)
)
)
0
(when (and arg1 (ja-group) (and (-> (ja-group) extra)
(not (and (focus-test? self dark)
(nonzero? (-> self darkjak))
(logtest? (-> self darkjak stage) (darkjak-stage giant))
)
)
#t
)
)
(let ((v1-62 (res-lump-struct (-> (ja-group) extra) 'collide-offset vector :time (ja-aframe-num 0))))
(cond
(v1-62
(if (and (focus-test? self dark)
(nonzero? (-> self darkjak))
(logtest? (-> self darkjak stage) (darkjak-stage giant))
)
(set! (-> v1-62 y) (* 0.5 (-> v1-62 y)))
)
(set! v0-1 (-> self control anim-collide-offset-local))
(set! (-> v0-1 quad) (-> v1-62 quad))
)
(else
(set! v0-1 (-> self control anim-collide-offset-local))
(set! (-> v0-1 quad) (the-as uint128 0))
)
)
)
v0-1
)
)
(define *duck-mods* (new 'static 'surface
:name 'duck
:turnv 131072.0
:turnvv 524288.0
:tiltv 65536.0
:tiltvv 262144.0
:transv-max 16384.0
:target-speed 16384.0
:seek0 1.0
:seek90 1.0
:seek180 1.0
:fric 1.0
:nonlin-fric-dist 1.0
:slip-factor 1.0
:slide-factor 1.0
:slope-up-factor 1.0
:slope-down-factor 1.0
:slope-slip-angle 1.0
:impact-fric 1.0
:bend-factor 1.0
:bend-speed 1.0
:alignv 1.0
:slope-up-traction 1.0
:align-speed 1.0
:turnvf 30.0
:turnvvf 30.0
:tiltvf 150.0
:tiltvvf 15.0
:mult-hook (lambda :behavior target
((arg0 surface) (arg1 surface) (arg2 surface) (arg3 int))
(surface-clamp-speed arg0 arg1 arg2 arg3)
(when (= arg3 1)
(cond
((and (focus-test? self dark)
(nonzero? (-> self darkjak))
(logtest? (-> self darkjak stage) (darkjak-stage giant))
)
(set! (-> arg0 target-speed) 81920.0)
)
((and (focus-test? self dark) (nonzero? (-> self darkjak)))
(set! (-> arg0 target-speed) 40960.0)
)
(else
(set! (-> arg0 target-speed) 16384.0)
)
)
)
)
:flags (surface-flag duck)
)
)
(defstate target-duck-stance (target)
:event target-standard-event-handler
:enter (behavior ((arg0 symbol))
(if (not arg0)
(set-time! (-> self state-time))
)
(set! (-> self control bend-target) 1.0)
(set! (-> self control mod-surface) *duck-mods*)
(target-collide-set! 'duck 1.0)
)
:exit (behavior ()
(if (not (and (-> self next-state) (let ((v1-3 (-> self next-state name)))
(or (= v1-3 'target-duck-walk)
(= v1-3 'target-duck-stance)
(= v1-3 'target-walk)
(= v1-3 'target-stance)
(= v1-3 'target-stance-look-around)
)
)
)
)
(target-state-hook-exit)
)
(target-exit)
(if (= (-> self control collide-mode) 'duck)
(target-collide-set! 'normal 0.0)
)
)
:trans (behavior ()
((-> self state-hook))
(if (and (or (not (cpad-hold? (-> self control cpad number) l1))
(logtest? (-> self state-flags) (state-flags prevent-duck))
)
(let ((v1-13 (ja-group)))
(and (not (and v1-13 (or (= v1-13 jakb-duck-roll-end-ja)
(= v1-13 jakb-duck-roll-ja)
(= v1-13 jakb-gun-duck-roll-end-ja)
(= v1-13 jakb-gun-duck-roll-ja)
)
)
)
(can-exit-duck? self)
)
)
)
(go target-stance)
)
(if (and (move-legs?) (!= (-> self control current-surface seek0) 0.0))
(go target-duck-walk 'duck)
)
(if (want-to-darkjak?)
(go target-darkjak-get-on (darkjak-stage active))
)
(when (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons x)
)
(can-jump? #f)
)
(if (= (-> *cpad-list* cpads (-> self control cpad number) stick0-speed) 0.0)
(go target-high-jump (-> *TARGET-bank* duck-jump-height-min) (-> *TARGET-bank* duck-jump-height-max) 'duck)
(target-jump-go)
)
)
(if (and (cpad-pressed? (-> self control cpad number) square)
(can-hands? #t)
(can-exit-duck? self)
(not (logtest? (-> self control current-surface flags) (surface-flag no-jump)))
(not (logtest? (-> self state-flags) (state-flags prevent-jump)))
)
(go
target-attack-uppercut
(-> *TARGET-bank* attack-jump-height-min)
(-> *TARGET-bank* attack-jump-height-max)
)
)
(fall-test target-falling -4096000.0)
(slide-down-test)
)
:code (behavior ((arg0 symbol))
(let ((v1-2 (ja-group)))
(cond
((and v1-2 (or (= v1-2 jakb-duck-roll-ja) (= v1-2 jakb-gun-duck-roll-ja)))
(set! (-> self neck flex-blend) 0.0)
(set! (-> self neck base-joint) (the-as uint 8))
(cond
((using-gun? self)
(set! (-> self gun surpress-time) (+ (current-time) (seconds 0.7)))
(push-anim-to-targ
(-> self skel top-anim)
(the-as art-joint-anim jakb-gun-duck-roll-end-ja)
0.0
0
30
1.0
6.0
#f
)
(ja-no-eval :group! jakb-gun-duck-roll-end-ja :num! (seek!) :frame-num 0.0)
(until (ja-done? 0)
(suspend)
(ja :num! (seek!))
)
)
(else
(ja-no-eval :group! jakb-duck-roll-end-ja :num! (seek!) :frame-num 0.0)
(until (ja-done? 0)
(suspend)
(ja :num! (seek!))
)
)
)
(set! (-> self neck flex-blend) 1.0)
(set! (-> self neck base-joint) (the-as uint 6))
)
((let ((v1-68 (ja-group)))
(and (and v1-68 (= v1-68 jakb-duck-stance-ja)) (= (-> self skel root-channel 0) (-> self skel channel)))
)
)
((let ((v1-78 (ja-group)))
(and v1-78 (or (= v1-78 jakb-duck-walk-ja) (= v1-78 jakb-gun-duck-walk-ja)))
)
(ja-channel-push! 1 (seconds 0.1))
)
((and (focus-test? self dark) (nonzero? (-> self darkjak)))
(ja-channel-push! 1 (seconds 0.1))
)
(else
(ja-channel-push! 1 (seconds 0.04))
(ja-no-eval :group! jakb-stance-to-duck-ja :num! (seek!) :frame-num 0.0)
(until (ja-done? 0)
(suspend)
(ja :num! (seek!))
)
)
)
)
(until #f
(ja-no-eval :group! jakb-duck-stance-ja :num! (seek!) :frame-num 0.0)
(until (ja-done? 0)
(suspend)
(ja :num! (seek!))
)
)
#f
)
:post target-post
)
(defstate target-duck-walk (target)
:event target-standard-event-handler
:enter (behavior ((arg0 symbol))
(if (not arg0)
(set-time! (-> self state-time))
)
(set! (-> self control bend-target) 1.0)
(target-collide-set! 'duck 1.0)
(let ((v1-7 (ja-group)))
(if (not (and v1-7 (or (= v1-7 jakb-duck-roll-ja) (= v1-7 jakb-gun-duck-roll-ja))))
(set! (-> self control mod-surface) *duck-mods*)
)
)
)
:exit (-> target-duck-stance exit)
:trans (behavior ()
(local-vars (v1-22 joint-control-channel))
((-> self state-hook))
(when (and (or (not (cpad-hold? (-> self control cpad number) l1))
(logtest? (-> self state-flags) (state-flags prevent-duck))
(and (logtest? (water-flags wading) (-> self water flags))
(>= (- (- (-> self control trans y) (- (-> self water base-height) (-> self water wade-height)))) 2457.6)
)
)
(can-exit-duck? self)
)
(if (and (using-gun? self)
(begin (set! v1-22 (get-channel (-> self skel top-anim) 0)) v1-22)
(= (-> v1-22 frame-group) jakb-gun-duck-roll-end-ja)
)
(target-top-anim-base-mode 60)
)
(go target-walk)
)
(if (not (move-legs?))
(go target-duck-stance 'duck)
)
(if (want-to-darkjak?)
(go target-darkjak-get-on (darkjak-stage active))
)
(when (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons x)
)
(can-jump? #f)
)
(if (= (-> *cpad-list* cpads (-> self control cpad number) stick0-speed) 0.0)
(go target-high-jump (-> *TARGET-bank* duck-jump-height-min) (-> *TARGET-bank* duck-jump-height-max) 'duck)
(target-jump-go)
)
)
(if (and (cpad-pressed? (-> self control cpad number) square)
(can-hands? #t)
(can-exit-duck? self)
(not (logtest? (-> self control current-surface flags) (surface-flag no-jump)))
(not (logtest? (-> self state-flags) (state-flags prevent-jump)))
)
(go
target-attack-uppercut
(-> *TARGET-bank* attack-jump-height-min)
(-> *TARGET-bank* attack-jump-height-max)
)
)
(fall-test target-falling -4096000.0)
(slide-down-test)
)
:code (behavior ((arg0 symbol))
(let ((gp-0 (if (using-gun? self)
jakb-gun-duck-walk-ja
jakb-duck-walk-ja
)
)
(v1-6 (ja-group))
)
(cond
((and (and v1-6 (or (= v1-6 jakb-duck-walk-ja) (= v1-6 jakb-gun-duck-walk-ja)))
(= (-> self skel root-channel 0) (-> self skel channel))
)
)
(else
(let ((v1-16 (ja-group)))
(cond
((and v1-16 (= v1-16 jakb-duck-stance-ja))
(ja-channel-push! 1 (seconds 0.45))
(ja :group! gp-0 :num! min)
)
(else
(ja-channel-push! 1 (seconds 0.1))
(ja :group! gp-0 :num! min)
)
)
)
)
)
)
(logior! (-> self state-flags) (state-flags lleg-no-ik rleg-no-ik))
(until #f
(if (= (-> self skel root-channel 0) (-> self skel channel))
(set! (-> self control mod-surface) *duck-mods*)
)
(ja :num! (loop! (fmin 3.0 (/ (-> self control ctrl-xz-vel)
(* 60.0 (/ (-> *TARGET-bank* duck-walk-cycle-dist) (-> *TARGET-bank* run-cycle-length)))
)
)
)
)
(suspend)
)
#f
)
:post target-post
)
(defbehavior target-jump-top-anim target ()
(let ((gp-0 (get-channel (-> self skel top-anim) 0)))
(when gp-0
(let ((s5-0 (-> gp-0 frame-group))
(f0-0 (ja-aframe-num 0))
)
(when (or (= s5-0 jakb-gun-side-jump-ja) (= s5-0 jakb-gun-front-jump-ja))
(let ((v1-13 (ja-group)))
(if (and v1-13 (= v1-13 jakb-duck-high-jump-ja))
(set! (-> gp-0 frame-num) (/ (- f0-0 (+ 16.0 (-> s5-0 artist-base))) (-> s5-0 artist-step)))
(set! (-> gp-0 frame-num) (/ (- f0-0 (-> s5-0 artist-base)) (-> s5-0 artist-step)))
)
)
)
)
)
)
0
(none)
)
(defstate target-jump (target)
:event target-jump-event-handler
:enter (behavior ((arg0 float) (arg1 float) (arg2 surface))
(when (= (-> self control jump-kind) 'launch)
(talker-spawn-func (-> *talker-speech* 326) *entity-pool* (target-pos 0) (the-as region #f))
(talker-spawn-func (-> *talker-speech* 327) *entity-pool* (target-pos 0) (the-as region #f))
enter-state
(let ((a0-7 (-> self control unknown-dword07))
(a1-3 (-> self control unknown-dword08))
(a2-3 (-> self control unknown-vector37))
)
(set! (-> a2-3 quad) (-> (the-as vector (-> self control unknown-dword09)) quad))
(go target-launch (the-as float a0-7) (the-as symbol a1-3) a2-3 (-> self control unknown-dword10))
)
)
(set-time! (-> self state-time))
(sound-play "jump" :vol 70)
(init-var-jump arg0 arg1 #t #t (-> self control transv) 2.0)
(logclear! (-> self control status) (collide-status on-surface on-ground touch-surface))
(set! arg2 (cond
(arg2
(empty)
arg2
)
(else
*jump-mods*
)
)
)
(set! (-> self control mod-surface) arg2)
(set! (-> self control unknown-float36)
(fmax 0.0 (fmin 1.0 (* 0.00004359654 (+ -11468.8 (-> self control ctrl-xz-vel)))))
)
(set! (-> self control unknown-float35)
(fmax 0.0 (fmin 1.0 (* 0.000048828126 (+ -10240.0 (-> self control ctrl-xz-vel)))))
)
)
:exit target-exit
:trans (behavior ()
(set! (-> self control unknown-float36)
(fmax
(-> self control unknown-float36)
(* 0.003921569 (the float (-> *cpad-list* cpads (-> self control cpad number) abutton 6)))
)
)
(let ((t9-0 target-falling-trans)
(a0-1 #f)
(v1-12 (ja-group))
)
(t9-0 a0-1 (the-as time-frame (if (and v1-12 (= v1-12 jakb-jump-loop-ja))
15
-1
)
)
)
)
(if (and (cpad-pressed? (-> self control cpad number) x)
(< (vector-dot (-> self control dynam gravity-normal) (-> self control transv))
(* 12288.0 (-> self darkjak-giant-interp) (-> self darkjak-giant-interp))
)
(and (< -61440.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
(not (logtest? (water-flags touch-water) (-> self water flags)))
(not (logtest? (state-flags prevent-jump prevent-double-jump) (-> self state-flags)))
)
)
(go target-double-jump (-> *TARGET-bank* double-jump-height-min) (-> *TARGET-bank* double-jump-height-max))
)
(if (and (cpad-pressed? (-> self control cpad number) square)
(and (< (vector-dot (-> self control dynam gravity-normal) (-> self control transv))
(* 26624.0 (-> self darkjak-giant-interp) (-> self darkjak-giant-interp))
)
(< -61440.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
(and (time-elapsed? (-> self control last-time-of-stuck) (the-as time-frame (-> *TARGET-bank* stuck-timeout)))
(not (logtest? (-> self state-flags) (state-flags prevent-attack)))
(not (logtest? (-> self control current-surface flags) (surface-flag no-attack no-hands)))
(not (and (not (using-gun? self)) (!= (-> self skel top-anim interp) 0.0)))
)
)
)
(go
target-flop
65502.96
-163840.0
(the-as float (if (= (-> *cpad-list* cpads (-> self control cpad number) stick0-speed) 0.0)
0
#x47866666
)
)
)
)
(mod-var-jump #t #t (cpad-hold? (-> self control cpad number) x) (-> self control transv))
(slide-down-test)
(seek!
(-> self control unknown-float35)
(fmax 0.0 (fmin 1.0 (* 0.000048828126 (+ -10240.0 (-> self control ctrl-xz-vel)))))
(seconds-per-frame)
)
)
:code (behavior ((arg0 float) (arg1 float) (arg2 surface))
(let ((f28-0 20.0)
(f30-0 1.0)
)
(when (using-gun? self)
(set! (-> self gun top-anim-low-high) 0.0)
(case (-> self gun gun-type)
(((pickup-type eco-blue))
(push-anim-to-targ (-> self skel top-anim) (the-as art-joint-anim jakb-gun-side-jump-ja) 0.0 30 30 1.0 0.0 #f)
)
(else
(push-anim-to-targ
(-> self skel top-anim)
(the-as art-joint-anim jakb-gun-front-jump-ja)
0.0
30
30
1.0
0.0
#f
)
)
)
)
(let ((v1-18 (ja-group)))
(cond
((and (and v1-18 (= v1-18 jakb-flop-down-land-ja)) (>= 25.0 (ja-aframe-num 0)) (>= (ja-aframe-num 0) 17.0))
(set! (-> self neck flex-blend) 0.0)
(ja-channel-push! 1 0)
(cond
((using-gun? self)
(ja :group! jakb-duck-high-jump-ja :num! (identity (ja-aframe 16.0 0)))
(set! f28-0 35.0)
)
(else
(ja :group! jakb-flop-jump-ja :num! (identity (ja-aframe 25.0 0)))
(set! f28-0 24.0)
(set! f30-0 0.3)
)
)
)
((and (focus-test? self dark) (nonzero? (-> self darkjak)))
(ja-channel-push! 1 (seconds 0.05))
(ja :group! jakb-darkjak-jump-ja :num! min)
(suspend)
0
)
(else
(ja-channel-push! 2 (seconds 0.05))
(ja :group! jakb-jump-ja :num! min)
(let ((a0-23 (-> self skel root-channel 1)))
(let ((f0-8 (-> self control unknown-float35)))
(set! (-> a0-23 frame-interp 1) f0-8)
(set! (-> a0-23 frame-interp 0) f0-8)
)
(set! (-> a0-23 frame-group) (the-as art-joint-anim jakb-jump-forward-ja))
(set! (-> a0-23 param 0) 0.0)
(joint-control-channel-group-eval! a0-23 (the-as art-joint-anim jakb-jump-forward-ja) num-func-chan)
)
(suspend)
(ja :group! jakb-jump-ja :num! (+!))
(let ((a0-25 (-> self skel root-channel 1)))
(let ((f0-11 (-> self control unknown-float35)))
(set! (-> a0-25 frame-interp 1) f0-11)
(set! (-> a0-25 frame-interp 0) f0-11)
)
(set! (-> a0-25 frame-group) (the-as art-joint-anim jakb-jump-forward-ja))
(set! (-> a0-25 param 0) 0.0)
(joint-control-channel-group-eval! a0-25 (the-as art-joint-anim jakb-jump-forward-ja) num-func-chan)
)
(suspend)
0
)
)
)
(until (ja-done? 0)
(let ((f26-1 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
(f24-0 (- f28-0 (ja-aframe-num 0)))
)
(target-jump-top-anim)
(ja :num! (seek! max (if (and (< 0.0 f26-1) (< 0.0 f24-0))
(fmin (fmin 3.0 f24-0) (/ (* 5.0 f24-0) (the float (time-to-apex f26-1 -245760.0))))
f30-0
)
)
)
)
(when (>= (ja-group-size) 2)
(let ((a0-30 (-> self skel root-channel 1)))
(let ((f0-26 (-> self control unknown-float35)))
(set! (-> a0-30 frame-interp 1) f0-26)
(set! (-> a0-30 frame-interp 0) f0-26)
)
(set! (-> a0-30 param 0) 0.0)
(joint-control-channel-group-eval! a0-30 (the-as art-joint-anim #f) num-func-chan)
)
)
(suspend)
)
)
(target-falling-anim -1 (seconds 0.2))
(go target-falling #f)
)
:post target-post
)
(defstate target-jump-forward (target)
:event target-jump-event-handler
:enter (behavior ((arg0 float) (arg1 float))
((-> target-jump enter) arg0 arg1 (the-as surface #f))
(set! (-> self control mod-surface) *forward-jump-mods*)
)
:exit target-exit
:trans (-> target-jump trans)
:code (behavior ((arg0 float) (arg1 float))
(when (using-gun? self)
(set! (-> self gun top-anim-low-high) 0.0)
(case (-> self gun gun-type)
(((pickup-type eco-blue))
(push-anim-to-targ (-> self skel top-anim) (the-as art-joint-anim jakb-gun-side-jump-ja) 3.0 30 30 1.0 0.0 #f)
)
(else
(push-anim-to-targ
(-> self skel top-anim)
(the-as art-joint-anim jakb-gun-front-jump-ja)
3.0
30
30
1.0
0.0
#f
)
)
)
)
(ja-channel-set! 1)
(ja-no-eval :group! jakb-jump-ja :num! (seek!) :frame-num (ja-aframe 3.0 0))
(until (ja-done? 0)
(set! (-> self control time-of-last-clear-wall-in-jump) 0)
(suspend)
(ja :num! (seek!))
)
(ja-no-eval :group! jakb-jump-loop-ja :num! (loop!) :frame-num 0.0)
(until #f
(suspend)
(target-jump-top-anim)
(ja :group! jakb-jump-loop-ja :num! (loop!))
)
#f
)
:post target-post
)
(defstate target-double-jump (target)
:event target-jump-event-handler
:enter (behavior ((arg0 float) (arg1 float))
(when (= (-> self control jump-kind) 'launch)
enter-state
(let ((a0-3 (-> self control unknown-dword07))
(a1-1 (-> self control unknown-dword08))
(a2-0 (-> self control unknown-vector37))
)
(set! (-> a2-0 quad) (-> (the-as vector (-> self control unknown-dword09)) quad))
(go target-launch (the-as float a0-3) (the-as symbol a1-1) a2-0 (-> self control unknown-dword10))
)
)
(set-time! (-> self state-time))
(init-var-jump arg0 arg1 #t #t (-> self control transv) 2.0)
(logclear! (-> self control status) (collide-status on-surface on-ground touch-surface))
(if (!= (-> self control mod-surface) *slide-jump-mods*)
(set! (-> self control mod-surface) *double-jump-mods*)
)
)
:exit target-exit
:trans (behavior ()
(let ((t9-0 target-falling-trans)
(a0-0 #f)
(v1-2 (ja-group))
)
(t9-0 a0-0 (the-as time-frame (if (and v1-2 (= v1-2 jakb-jump-loop-ja))
15
-1
)
)
)
)
(if (and (cpad-pressed? (-> self control cpad number) square)
(< (vector-dot (-> self control dynam gravity-normal) (-> self control transv)) 22118.4)
(< -61440.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
(and (time-elapsed? (-> self control last-time-of-stuck) (the-as time-frame (-> *TARGET-bank* stuck-timeout)))
(not (logtest? (-> self state-flags) (state-flags prevent-attack)))
(not (logtest? (-> self control current-surface flags) (surface-flag no-attack no-hands)))
(not (and (not (using-gun? self)) (!= (-> self skel top-anim interp) 0.0)))
)
)
(go
target-flop
33775.48
-122880.0
(the-as float (if (= (-> *cpad-list* cpads (-> self control cpad number) stick0-speed) 0.0)
0
#x47866666
)
)
)
)
(if (!= (-> self state-time) (current-time))
(mod-var-jump #t #t (cpad-hold? (-> self control cpad number) x) (-> self control transv))
)
(seek!
(-> self control unknown-float35)
(fmax 0.0 (fmin 1.0 (* 0.000048828126 (+ -10240.0 (-> self control ctrl-xz-vel)))))
(seconds-per-frame)
)
)
:code (behavior ((arg0 float) (arg1 float))
(sound-play "jump-double")
(when (using-gun? self)
(set! (-> self gun top-anim-low-high) 0.0)
(case (-> self gun gun-type)
(((pickup-type eco-blue))
(push-anim-to-targ (-> self skel top-anim) (the-as art-joint-anim jakb-gun-side-jump-ja) 7.0 30 30 1.0 0.0 #f)
)
(else
(push-anim-to-targ
(-> self skel top-anim)
(the-as art-joint-anim jakb-gun-front-jump-ja)
7.0
30
30
1.0
0.0
#f
)
)
)
)
(cond
((and (focus-test? self dark) (nonzero? (-> self darkjak)))
(ja-channel-push! 1 (seconds 0.05))
(ja-no-eval :group! jakb-darkjak-jump-ja :num! (seek!) :frame-num (ja-aframe 7.0 0))
)
(else
(ja-channel-push! 2 (seconds 0.05))
(ja-no-eval :group! jakb-jump-ja :num! (seek!) :frame-num (ja-aframe 5.0 0))
(ja :chan 1 :group! jakb-jump-forward-ja :num! (chan 0))
)
)
(until (ja-done? 0)
(suspend)
(target-jump-top-anim)
(ja :num! (seek!))
(when (>= (ja-group-size) 2)
(let ((a0-18 (-> self skel root-channel 1)))
(let ((f0-13 (-> self control unknown-float35)))
(set! (-> a0-18 frame-interp 1) f0-13)
(set! (-> a0-18 frame-interp 0) f0-13)
)
(set! (-> a0-18 param 0) 0.0)
(joint-control-channel-group-eval! a0-18 (the-as art-joint-anim #f) num-func-chan)
)
)
)
(target-falling-anim -1 (seconds 0.2))
(go target-falling #f)
)
:post target-post
)
(defstate target-high-jump (target)
:event target-jump-event-handler
:enter (behavior ((arg0 float) (arg1 float) (arg2 object))
(when (and (= (-> self control jump-kind) 'launch) (!= arg2 'launch))
enter-state
(let ((a0-3 (-> self control unknown-dword07))
(a1-1 (-> self control unknown-dword08))
(a2-1 (-> self control unknown-vector37))
)
(set! (-> a2-1 quad) (-> (the-as vector (-> self control unknown-dword09)) quad))
(go target-launch (the-as float a0-3) (the-as symbol a1-1) a2-1 (-> self control unknown-dword10))
)
)
(set! (-> self control unknown-symbol03) (the-as float arg2))
(if (or (= arg2 'duck) (= arg2 'launch))
(go target-duck-high-jump arg0 arg1 (the-as symbol arg2))
)
(set-time! (-> self state-time))
(logclear! (-> self control status) (collide-status on-surface on-ground touch-surface))
(sound-play "jump" :pitch 0.3)
(init-var-jump arg0 arg1 #t #t (-> self control transv) 2.0)
(set! (-> self control mod-surface) (cond
((= arg2 'flip)
*flip-jump-mods*
)
((= arg2 'flop-forward)
*forward-high-jump-mods*
)
(else
*high-jump-mods*
)
)
)
(set! (-> self control unknown-float35)
(fmax 0.0 (fmin 0.5 (* 0.00008138021 (+ -409.6 (-> self control ctrl-xz-vel)))))
)
)
:exit target-exit
:trans (behavior ()
(let ((t9-0 target-falling-trans)
(a0-0 #f)
(v1-2 (ja-group))
)
(t9-0 a0-0 (the-as time-frame (if (and v1-2 (= v1-2 jakb-jump-loop-ja))
15
-1
)
)
)
)
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons square)
)
(< (vector-dot (-> self control dynam gravity-normal) (-> self control transv)) 73728.0)
(< -61440.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
(and (time-elapsed? (-> self control last-time-of-stuck) (the-as time-frame (-> *TARGET-bank* stuck-timeout)))
(not (logtest? (-> self state-flags) (state-flags prevent-attack)))
(not (logtest? (-> self control current-surface flags) (surface-flag no-attack no-hands)))
(not (and (not (using-gun? self)) (!= (-> self skel top-anim interp) 0.0)))
)
)
(go
target-flop
33775.48
-122880.0
(the-as float (if (= (-> *cpad-list* cpads (-> self control cpad number) stick0-speed) 0.0)
0
#x47866666
)
)
)
)
(mod-var-jump #t #t (cpad-hold? (-> self control cpad number) x) (-> self control transv))
(seek!
(-> self control unknown-float35)
(fmax 0.0 (fmin 1.0 (* 0.00012207031 (+ -2048.0 (-> self control ctrl-xz-vel)))))
(seconds-per-frame)
)
)
:code (-> target-jump code)
:post target-post
)
(defstate target-duck-high-jump (target)
:event target-standard-event-handler
:enter (behavior ((arg0 float) (arg1 float) (arg2 symbol))
(set-time! (-> self state-time))
(logclear! (-> self control status) (collide-status on-surface on-ground touch-surface))
(set! (-> self control mod-surface) *turn-around-mods*)
(case arg2
(('launch)
)
(else
)
)
)
:exit target-exit
:code (behavior ((arg0 float) (arg1 float) (arg2 symbol))
(let ((v1-2 (ja-group)))
(if (not (and (and v1-2 (= v1-2 jakb-duck-stance-ja)) (= (-> self skel root-channel 0) (-> self skel channel))))
(ja-channel-push! 1 (seconds 0.04))
)
)
(let ((v1-11 arg2))
(cond
((or (= v1-11 'flop) (= v1-11 'flop-forward))
(ja-no-eval :group! jakb-flop-jump-ja :num! (seek! (ja-aframe 25.0 0)) :frame-num 0.0)
(until (ja-done? 0)
(suspend)
(ja :num! (seek! (ja-aframe 25.0 0)))
)
)
((using-gun? self)
(ja :group! jakb-duck-high-jump-ja :num! (identity (ja-aframe 16.0 0)))
)
(else
(ja-no-eval :group! jakb-duck-high-jump-ja :num! (seek! (ja-aframe 16.0 0)) :frame-num 0.0)
(until (ja-done? 0)
(suspend)
(ja :num! (seek! (ja-aframe 16.0 0)))
)
)
)
)
(go target-duck-high-jump-jump arg0 arg1 arg2)
)
:post target-post
)
(defstate target-duck-high-jump-jump (target)
:event target-jump-event-handler
:enter (behavior ((arg0 float) (arg1 float) (arg2 symbol))
(set! (-> self control unknown-symbol03) (the-as float arg2))
(set-time! (-> self state-time))
(sound-play "jump" :vol 80 :pitch -0.4)
(init-var-jump arg0 arg1 #t #f (-> self control transv) 2.0)
(logclear! (-> self control status) (collide-status on-surface on-ground touch-surface))
(cond
((= arg2 'launch)
(set! (-> self neck flex-blend) 0.0)
(set! (-> self control mod-surface) *launch-jump-mods*)
)
(else
(set! (-> self control mod-surface) *high-jump-mods*)
)
)
)
:exit target-exit
:trans (behavior ()
((-> target-high-jump trans))
(let ((v1-2 (-> self control unknown-symbol03)))
(when (= (the-as int v1-2) 'launch)
(when *sound-player-enable*
(let ((gp-0 (the-as sound-rpc-set-param (get-sound-buffer-entry))))
(set! (-> gp-0 command) (sound-command set-param))
(set! (-> gp-0 id) (-> self control unknown-sound-id00))
(let ((a1-0 (ear-trans 0)))
(let ((s5-0 self))
(when (= a1-0 #t)
(if (and s5-0 (type? s5-0 process-drawable) (nonzero? (-> s5-0 control)))
(set! a1-0 (-> s5-0 control trans))
(set! a1-0 (the-as vector #f))
)
)
)
(sound-trans-convert (the-as vector3w (-> gp-0 params trans)) a1-0)
)
(set! (-> gp-0 params mask) (the-as uint 32))
(-> gp-0 id)
)
)
)
)
)
:code (behavior ((arg0 float) (arg1 float) (arg2 symbol))
(when (using-gun? self)
(set! (-> self gun top-anim-low-high) 0.0)
(case (-> self gun gun-type)
(((pickup-type eco-blue))
(push-anim-to-targ (-> self skel top-anim) (the-as art-joint-anim jakb-gun-side-jump-ja) 0.0 30 30 1.0 0.0 #f)
)
(else
(push-anim-to-targ
(-> self skel top-anim)
(the-as art-joint-anim jakb-gun-front-jump-ja)
0.0
30
30
1.0
0.0
#f
)
)
)
)
(let* ((f30-0 1.0)
(v1-15 arg2)
(f28-0 (cond
((= v1-15 'launch)
110.0
)
((or (= v1-15 'flop) (= v1-15 'flop-forward))
(set! f30-0 0.75)
44.0
)
(else
35.0
)
)
)
)
(until (ja-done? 0)
(let ((f24-0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
(f26-0 (- f28-0 (ja-aframe-num 0)))
)
(target-jump-top-anim)
(let ((f22-1 (fmin (fmin 3.0 f26-0) (/ (* 5.0 f26-0) (the float (time-to-apex f24-0 -245760.0)))))
(s5-0 (-> self skel root-channel 0))
)
(set! (-> s5-0 param 0) (the float (+ (-> s5-0 frame-group frames num-frames) -1)))
(let ((v1-38 (cond
((and (< 0.0 f24-0) (< 0.0 f26-0))
(if (= arg2 'launch)
(set! f30-0 (lerp f30-0 (* 4.0 f22-1) 0.25))
)
f22-1
)
(else
f30-0
)
)
)
)
(set! (-> s5-0 param 1) v1-38)
)
(joint-control-channel-group-eval! s5-0 (the-as art-joint-anim #f) num-func-seek!)
)
)
(suspend)
)
)
(cond
((or (= arg2 'flop) (= arg2 'flop-forward))
(ja-channel-push! 1 (seconds 0.5))
(ja-no-eval :group! jakb-jump-loop-ja :num! (loop!) :frame-num 0.0)
(until #f
(suspend)
(ja :group! jakb-jump-loop-ja :num! (loop!))
)
#f
)
(else
(ja-no-eval :group! jakb-jump-loop-ja :num! (loop!) :frame-num 0.0)
(until #f
(suspend)
(ja :group! jakb-jump-loop-ja :num! (loop!))
)
#f
)
)
)
:post target-post
)
(defstate target-falling (target)
:event target-jump-event-handler
:enter (behavior ((arg0 symbol))
(case arg0
(('uppercut)
(set! (-> self control mod-surface) *uppercut-jump-mods*)
)
(else
(set! (-> self control mod-surface) *jump-mods*)
)
)
(set! (-> self control unknown-word04) (the-as uint arg0))
(set-time! (-> self state-time))
)
:trans (behavior ()
(target-falling-trans
(the-as symbol (-> self control unknown-spool-anim00))
(the-as time-frame (if (= (-> self control unknown-spool-anim00) #f)
0
(the-as int (/ (the-as int (-> *TARGET-bank* stuck-time)) 2))
)
)
)
)
:code (behavior ((arg0 symbol))
(case arg0
(('uppercut)
(ja-no-eval :num! (seek!))
(while (not (ja-done? 0))
(suspend)
(ja-eval)
)
(set! (-> self gun surpress-time) 0)
(send-event self 'gun (-> self gun gun-type))
(set! (-> self gun track-target-hold-time) 0)
0
)
(('hit)
(ja-channel-push! 1 (seconds 0.3))
(ja-no-eval :group! jakb-hit-from-front-ja :num! (seek!) :frame-num (ja-aframe 15.0 0))
(until (ja-done? 0)
(suspend)
(ja :num! (seek!))
)
)
)
(target-falling-anim -1 (seconds 0.33))
)
:post target-post
)
(defstate target-hit-ground (target)
:event target-walk-event-handler
:enter (behavior ((arg0 symbol))
(set! (-> self control turn-go-the-long-way) 0.0)
(cond
((or (= arg0 'stuck) (focus-test? self indax))
)
(else
(let ((f0-2
(vector-dot
(-> self control dynam gravity-normal)
(vector-! (new 'stack-no-clear 'vector) (-> self control last-trans-any-surf) (-> self control trans))
)
)
)
(if (and (< (-> *TARGET-bank* fall-far) f0-2) (not (logtest? (-> self control status) (collide-status on-water))))
(go target-hit-ground-hard f0-2)
)
)
)
)
(cond
((= arg0 'stuck)
)
(else
(target-land-effect)
)
)
(set! (-> self control last-running-attack-end-time) 0)
(set! (-> self control last-attack-end-time) 0)
(if (>= (-> self control ground-impact-vel) (-> *TARGET-bank* fall-stumble-threshold))
(set-forward-vel 0.0)
)
(if (!= (-> self control ground-pat material) (pat-material ice))
(delete-back-vel)
)
(set! (-> self control mod-surface) *walk-mods*)
(start-bobbing!
(-> self water)
(lerp-scale 0.0 4096.0 (-> self control ground-impact-vel) 40960.0 102400.0)
600
1500
)
(if (and (focus-test? self dark)
(nonzero? (-> self darkjak))
(logtest? (-> self darkjak stage) (darkjak-stage giant))
)
(activate! *camera-smush-control* 1638.4 15 75 1.0 0.9 (-> *display* camera-clock))
)
(when (and (using-gun? self) (let ((v1-44 (-> self water flags)))
(not (and (logtest? (water-flags touch-water) v1-44)
(logtest? (water-flags under-water swimming) v1-44)
(not (logtest? (focus-status mech) (-> self focus-status)))
)
)
)
)
(set! (-> self gun top-anim-low-high) 0.0)
(case (-> self gun gun-type)
(((pickup-type eco-blue))
(push-anim-to-targ
(-> self skel top-anim)
(the-as art-joint-anim jakb-gun-side-jump-land-ja)
0.0
30
30
1.0
0.0
#f
)
)
(((pickup-type eco-red) (pickup-type eco-dark))
(push-anim-to-targ
(-> self skel top-anim)
(the-as art-joint-anim jakb-gun-front-jump-land-ja)
0.0
30
30
1.0
0.0
#f
)
)
(else
(push-anim-to-targ
(-> self skel top-anim)
(the-as art-joint-anim jakb-gun-front-jump-land-ja)
0.0
30
30
1.0
25.0
#f
)
)
)
)
)
:exit (behavior ()
(logclear! (-> self state-flags) (state-flags lleg-still rleg-still lleg-no-ik rleg-no-ik))
)
:trans (behavior ()
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons x)
)
(can-jump? #f)
)
(target-jump-go)
)
(if (and (or (cpad-hold? (-> self control cpad number) l1) (not (can-exit-duck? self))) (can-duck?))
(go target-duck-stance #f)
)
(when (!= (-> *cpad-list* cpads (-> self control cpad number) stick0-speed) 0.0)
(if (logtest? (water-flags wading) (-> self water flags))
(go target-wade-walk)
(go target-walk)
)
)
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons circle)
)
(can-feet? #t)
)
(go target-attack)
)
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons square)
)
(can-hands? #t)
)
(go target-running-attack)
)
(fall-test target-falling -4096000.0)
(slide-down-test)
)
:code (behavior ((arg0 symbol))
(target-hit-ground-anim #f (are-still?))
(go target-stance)
)
:post target-post
)
(define *attack-mods* (new 'static 'surface
:name 'attack
:tiltv 65536.0
:tiltvv 262144.0
:transv-max 40960.0
:target-speed 40960.0
:seek0 1.0
:seek90 1.0
:seek180 1.0
:fric 1.0
:nonlin-fric-dist 1.0
:slip-factor 1.0
:slide-factor 1.0
:slope-up-factor 1.0
:slope-down-factor 1.0
:slope-slip-angle 1.0
:impact-fric 1.0
:bend-factor 1.0
:bend-speed 1.0
:alignv 1.0
:slope-up-traction 1.0
:align-speed 1.0
:tiltvf 150.0
:tiltvvf 15.0
:mult-hook (lambda :behavior target
((arg0 surface) (arg1 object) (arg2 object) (arg3 int))
(case arg3
((1)
(case (-> self control ground-pat event)
(((pat-event slide))
(set! (-> arg0 seek0) 0.05)
(set! (-> arg0 seek90) 0.05)
(set! (-> arg0 seek180) 0.05)
)
)
)
)
)
:mode 'attack
:flags (surface-flag attack spin gun-inactive gun-turn-fast)
)
)
(let ((v1-25 (copy *attack-mods* 'global)))
(set! (-> v1-25 flags) (surface-flag attack spin gun-turn-fast))
(set! (-> v1-25 mult-hook)
(lambda :behavior target
((arg0 surface) (arg1 surface) (arg2 surface) (arg3 int))
((-> *attack-mods* mult-hook) arg0 arg1 arg2 arg3)
(when (= arg3 1)
(if (and (nonzero? (-> self gun turn-fast-hold-time)) (< (current-time) (-> self gun turn-fast-hold-time)))
(set-quaternion! (-> self control) (-> self control dir-targ))
)
)
(none)
)
)
(set! *attack-end-mods* v1-25)
)
(defstate target-attack (target)
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
(case message
(('touched)
(cond
(((method-of-type touching-shapes-entry prims-touching?)
(the-as touching-shapes-entry (-> block param 0))
(-> self control)
(the-as uint 1920)
)
(when (target-send-attack
proc
(-> self control danger-mode)
(the-as touching-shapes-entry (-> block param 0))
(the-as int (-> self control target-attack-id))
(the-as int (-> self control attack-count))
(-> self control penetrate-using)
)
(set-time! (-> self gun combo-window-start))
(let ((v0-2 (the-as object (-> self state name))))
(set! (-> self gun combo-window-state) (the-as symbol v0-2))
v0-2
)
)
)
(else
(target-dangerous-event-handler proc argc message block)
)
)
)
(('gun-combo)
(when (-> block param 0)
(forward-up-nopitch->quaternion
(-> self control dir-targ)
(vector-! (new 'stack-no-clear 'vector) (-> self gun track-trans) (-> self control trans))
(vector-y-quaternion! (new-stack-vector0) (-> self control dir-targ))
)
(set-quaternion! (-> self control) (-> self control dir-targ))
(go target-stance)
)
#t
)
(('slide)
#f
)
(else
(target-dangerous-event-handler proc argc message block)
)
)
)
:enter (behavior ()
(set-time! (-> self state-time))
(target-start-attack)
(target-danger-set! 'spin #f)
(set! (-> self control mod-surface) *attack-mods*)
(set! (-> self water drip-mult) 4.0)
(set! (-> self neck flex-blend) 0.0)
(set! (-> self gun track-target-hold-time) 0)
(if (< 0.0 (-> self control turn-to-magnitude))
(forward-up-nopitch->quaternion
(-> self control dir-targ)
(-> self control to-target-pt-xz)
(vector-y-quaternion! (new-stack-vector0) (-> self control dir-targ))
)
)
(set-quaternion! (-> self control) (-> self control dir-targ))
(quaternion-copy! (-> self control unknown-quaternion04) (-> self control dir-targ))
(set! (-> self control unknown-float41) 0.0)
(set! (-> self control unknown-float42) 0.0)
)
:exit (behavior ()
(if (zero? (-> self gun track-target-hold-time))
(quaternion-copy! (-> self control dir-targ) (-> self control unknown-quaternion04))
)
(set-time! (-> self control last-attack-end-time))
(target-exit)
)
:code (behavior ()
(let ((gp-0 jakb-attack-from-stance-ja))
(cond
((and (focus-test? self dark) (nonzero? (-> self darkjak)))
(set! gp-0 jakb-darkjak-attack-spin-ja)
(quaternion-rotate-y! (-> self control quat-for-control) (-> self control quat-for-control) -1365.3334)
)
((using-gun? self)
(set! (-> self gun top-anim-low-high) 0.0)
(case (-> self gun gun-type)
(((pickup-type eco-yellow))
(push-anim-to-targ
(-> self skel top-anim)
(the-as art-joint-anim jakb-gun-attack-from-stance-ja)
0.0
30
30
1.0
0.0
#f
)
(set! gp-0 jakb-gun-attack-from-stance-ja)
(quaternion-rotate-y! (-> self control quat-for-control) (-> self control quat-for-control) -3276.8)
)
(((pickup-type eco-blue))
(push-anim-to-targ
(-> self skel top-anim)
(the-as art-joint-anim jakb-gun-attack-from-stance-blue-ja)
0.0
30
30
1.0
0.0
#f
)
(set! gp-0 jakb-gun-attack-from-stance-blue-ja)
)
(else
(push-anim-to-targ
(-> self skel top-anim)
(the-as art-joint-anim jakb-gun-attack-from-stance-ja)
0.0
30
30
1.0
0.0
#f
)
(set! gp-0 jakb-gun-attack-from-stance-ja)
(quaternion-rotate-y! (-> self control quat-for-control) (-> self control quat-for-control) -3276.8)
)
)
)
(else
(quaternion-rotate-y! (-> self control quat-for-control) (-> self control quat-for-control) -1365.3334)
)
)
(ja-channel-push! 1 (seconds 0.05))
(set! (-> self control unknown-sound-id01) (sound-play "spin-kick"))
(ja-no-eval :group! gp-0 :num! (seek! max (-> self control current-surface align-speed)) :frame-num 0.0)
)
(until (ja-done? 0)
(compute-alignment! (-> self align))
(align! (-> self align) (align-opts adjust-quat) 1.0 1.0 1.0)
(when (and (= (-> self fact eco-type) 2) (>= (-> self fact eco-level) 1.0))
(do-effect (-> self skel effect) 'group-red-eco-spinkick (ja-frame-num 0) 38)
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 153 (seconds 0.1))
(talker-spawn-func (-> *talker-speech* 328) *entity-pool* (target-pos 0) (the-as region #f))
)
(when (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons x)
)
(can-jump? #f)
)
(set-quaternion! (-> self control) (-> self control dir-targ))
(target-jump-go)
)
(suspend)
(ja :num! (seek! max (-> self control current-surface align-speed)))
)
(cond
((and (focus-test? self dark) (nonzero? (-> self darkjak)))
(quaternion-rotate-y! (-> self control quat-for-control) (-> self control quat-for-control) -12743.111)
)
((using-gun? self)
(when (zero? (-> self gun track-target-hold-time))
(case (-> self gun gun-type)
(((pickup-type eco-blue))
(push-anim-to-targ
(-> self skel top-anim)
(the-as art-joint-anim jakb-gun-attack-from-stance-blue-end-ja)
0.0
0
60
1.0
6.0
#f
)
(quaternion-rotate-y! (-> self control quat-for-control) (-> self control quat-for-control) -3640.889)
)
(((pickup-type eco-yellow))
(push-anim-to-targ
(-> self skel top-anim)
(the-as art-joint-anim jakb-gun-attack-from-stance-end-ja)
0.0
0
60
1.0
6.0
#f
)
(quaternion-rotate-y! (-> self control quat-for-control) (-> self control quat-for-control) -5461.3335)
)
(else
(push-anim-to-targ
(-> self skel top-anim)
(the-as art-joint-anim jakb-gun-attack-from-stance-end-ja)
0.0
0
60
1.0
6.0
#f
)
(quaternion-rotate-y! (-> self control quat-for-control) (-> self control quat-for-control) -5461.3335)
)
)
)
)
(else
(quaternion-rotate-y! (-> self control quat-for-control) (-> self control quat-for-control) -1365.3334)
)
)
(go target-stance)
)
:post target-post
)
(define *run-attack-mods* (new 'static 'surface
:name 'punch
:tiltv 32768.0
:tiltvv 262144.0
:transv-max 91750.4
:target-speed 122880.0
:seek90 0.5
:seek180 0.15
:slip-factor 1.0
:slide-factor 1.0
:slope-up-factor 0.25
:slope-down-factor 1.0
:slope-slip-angle 1.0
:impact-fric 1.0
:bend-factor 1.0
:bend-speed 1.0
:alignv 1.0
:slope-up-traction 1.0
:align-speed 1.0
:tiltvf 150.0
:tiltvvf 15.0
:mode 'attack
:flags (surface-flag no-turn-around turn-to-pad attack gun-inactive)
)
)
(defstate target-running-attack (target)
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
(case message
(('touched)
(cond
(((method-of-type touching-shapes-entry prims-touching?)
(the-as touching-shapes-entry (-> block param 0))
(-> self control)
(the-as uint 1920)
)
(let ((gp-1 (target-send-attack
proc
(-> self control danger-mode)
(the-as touching-shapes-entry (-> block param 0))
(the-as int (-> self control target-attack-id))
(the-as int (-> self control attack-count))
(-> self control penetrate-using)
)
)
)
(when gp-1
(set-time! (-> self control sliding-start-time))
(set-time! (-> self gun combo-window-start))
(set! (-> self gun combo-window-state) (-> self state name))
(let ((v1-13 (if (type? proc process-focusable)
proc
)
)
)
(when v1-13
(let* ((s5-1 (-> (the-as target v1-13) control))
(v1-14 (if (type? s5-1 collide-shape)
s5-1
)
)
)
(if (and v1-14 (or (logtest? (-> v1-14 root-prim prim-core collide-as) (collide-spec enemy))
(logtest? (-> v1-14 root-prim prim-core action) (collide-action no-smack))
)
)
(+! (-> self control unknown-word04) 1)
)
)
)
)
(cond
((or (= gp-1 'die) (= gp-1 'push))
(let ((v0-2 (the-as object (current-time))))
(set! (-> self control unknown-time-frame18) (the-as time-frame v0-2))
v0-2
)
)
((= gp-1 'back)
(let ((f0-0 -122880.0))
(set! (-> self control unknown-word04) (the-as uint f0-0))
f0-0
)
)
)
)
)
)
(else
(target-dangerous-event-handler proc argc message block)
)
)
)
(('gun-combo)
(if (-> block param 0)
(go target-stance)
)
#t
)
(('slide)
#f
)
(else
(target-dangerous-event-handler proc argc message block)
)
)
)
:enter (behavior ()
(if (and (and (focus-test? self dark) (nonzero? (-> self darkjak)))
(and (-> self next-state) (= (-> self next-state name) 'target-running-attack))
)
(go target-darkjak-running-attack)
)
(logclear! (-> *cpad-list* cpads (-> self control cpad number) button0-abs 0) (pad-buttons square))
(logclear! (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0) (pad-buttons square))
(set-time! (-> self state-time))
(combo-tracker-method-12
(-> self control unknown-combo-tracker00)
*null-vector*
*null-vector*
(the-as process #f)
(current-time)
)
(set! (-> self control sliding-start-time) 0)
(set! (-> self control unknown-time-frame18) 0)
(set! (-> self control unknown-word04) (the-as uint 0))
(set! (-> self control unknown-word04) (the-as uint 0.0))
(set! (-> self control mod-surface) *run-attack-mods*)
(cond
((= (-> self control ground-pat event) (pat-event slide))
(set! (-> *run-attack-mods* turnv) 0.0)
(set! (-> *run-attack-mods* turnvv) 0.0)
)
(else
(set! (-> *run-attack-mods* turnv) 655360.0)
(set! (-> *run-attack-mods* turnvv) 655360.0)
)
)
(set! (-> self neck flex-blend) 0.0)
(set! (-> self gun track-target-hold-time) 0)
(if (or (< (fabs (-> self control local-slope-x)) 0.3) (< 0.3 (fabs (-> self control local-slope-z))))
(set! (-> self control bend-target) 1.0)
)
(set! (-> self upper-body twist z) 0.0)
)
:exit (behavior ()
(set! (-> self control dynam gravity-max) (-> self control standard-dynamics gravity-max))
(set! (-> self control dynam gravity-length) (-> self control standard-dynamics gravity-length))
(set! (-> *run-attack-mods* turnv) 0.0)
(set! (-> *run-attack-mods* turnvv) 0.0)
(set-time! (-> self control last-running-attack-end-time))
(target-exit)
)
:trans (behavior ()
(when (!= (-> self state-time) (current-time))
(when (and (or (smack-surface? #t)
(and (>= (-> self control surface-slope-z) 0.7)
(not (logtest? (-> self control status) (collide-status touch-actor)))
)
)
(begin
(set-time! (-> self control unknown-time-frame18))
(set! (-> self control bend-target) 0.0)
(let ((v1-11 (new-stack-vector0))
(f0-3 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
)
0.0
(vector-! v1-11 (-> self control transv) (vector-float*! v1-11 (-> self control dynam gravity-normal) f0-3))
(let* ((f1-3 (vector-length v1-11))
(f2-0 f1-3)
(f0-4 (fmin 0.0 f0-3))
)
(vector+!
(-> self control transv)
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f0-4)
(vector-float*! v1-11 v1-11 (/ f1-3 f2-0))
)
)
)
#t
)
(or (zero? (-> self control sliding-start-time))
(time-elapsed? (-> self control sliding-start-time) (seconds 0.04))
)
(!= (-> self control unknown-word04) 1)
)
)
(if (and (cpad-pressed? (-> self control cpad number) x)
(< 4096.0 (-> self control ctrl-xz-vel))
(or (time-elapsed? (-> self state-time) (seconds 0.1))
(not (logtest? (-> *cpad-list* cpads (-> self control cpad number) button0-abs 0) (pad-buttons square)))
)
(not (logtest? (-> self state-flags) (state-flags prevent-jump prevent-attack)))
(not (logtest? (-> self control current-surface flags) (surface-flag no-attack)))
(let ((v1-48 (ja-group)))
(and (not (and v1-48 (= v1-48 jakb-darkjak-attack-combo3-ja)))
(and (not (logtest? (-> self control current-surface flags) (surface-flag no-jump)))
(not (logtest? (-> self state-flags) (state-flags prevent-jump)))
)
)
)
)
(go
target-attack-uppercut
(-> *TARGET-bank* attack-jump-height-min)
(-> *TARGET-bank* attack-jump-height-max)
)
)
(if (and (logtest? (water-flags touch-water) (-> self water flags))
(zero? (mod (- (current-time) (-> self state-time)) 21))
)
(spawn-ripples
(-> self water)
0.6
(vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 8))
0
(-> self control transv)
#f
)
)
(when (and (= (-> self fact eco-type) 2) (>= (-> self fact eco-level) 1.0))
(do-effect (-> self skel effect) 'group-red-eco-spinkick (ja-frame-num 0) 22)
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 153 (seconds 0.1))
(talker-spawn-func (-> *talker-speech* 328) *entity-pool* (target-pos 0) (the-as region #f))
)
)
)
:code (behavior ()
(if (logtest? (water-flags touch-water) (-> self water flags))
(sound-play "swim-stroke")
)
(set! (-> self control dynam gravity-max) 368640.0)
(set! (-> self control dynam gravity-length) 368640.0)
(let ((gp-1 jakb-attack-punch-ja))
(ja-channel-push! 1 (seconds 0.02))
(when (using-gun? self)
(set! (-> self gun top-anim-low-high) 0.0)
(case (-> self gun gun-type)
(((pickup-type eco-yellow))
(push-anim-to-targ
(-> self skel top-anim)
(the-as art-joint-anim jakb-gun-attack-butt-ja)
0.0
30
60
1.0
0.0
#f
)
(set! gp-1 jakb-gun-attack-butt-blue-ja)
)
(((pickup-type eco-blue))
(push-anim-to-targ
(-> self skel top-anim)
(the-as art-joint-anim jakb-gun-attack-butt-blue-ja)
0.0
30
60
1.0
0.0
#f
)
(set! gp-1 jakb-gun-attack-butt-blue-ja)
)
(else
(push-anim-to-targ
(-> self skel top-anim)
(the-as art-joint-anim jakb-gun-attack-butt-ja)
0.0
30
60
1.0
0.0
#f
)
(set! gp-1 jakb-gun-attack-butt-ja)
)
)
)
(ja-no-eval :group! gp-1 :num! (seek!))
)
(target-start-attack)
(target-danger-set! 'punch #f)
(initialize (-> self control impact-ctrl) self 22 3276.8 (-> self control root-prim prim-core collide-with))
(let ((f26-0 (the-as number 0.0))
(f30-0 1.0)
(gp-2 0)
(f28-0 1.0)
)
(until (ja-done? 0)
(compute-alignment! (-> self align))
(when (not (ja-min? 0))
(cond
((and (>= (ja-aframe-num 0) 20.0)
(and (and (not (logtest? (-> self control status) (collide-status on-surface)))
(time-elapsed? (-> self control last-time-on-surface) (the-as time-frame (-> *TARGET-bank* ground-timeout)))
(>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
(>= (target-height-above-ground) (-> *TARGET-bank* fall-height))
)
(time-elapsed? (-> self control sliding-start-time) (seconds 0.04))
)
)
(go target-falling #f)
)
((< (the-as float f26-0) 0.0)
(set! f26-0 (seek (the-as float f26-0) -0.04096 (* 491520.0 (seconds-per-frame))))
(set-forward-vel (the-as float f26-0))
)
((and (nonzero? (-> self control unknown-time-frame18))
(time-elapsed? (-> self control unknown-time-frame18) (seconds 0.04))
)
(set-forward-vel 0.0)
)
((and (not (cpad-hold? (-> self control cpad number) square))
(time-elapsed? (-> self control unknown-combo-tracker00 move-start-time) (seconds 0.05))
)
(if (= (-> self control ground-pat material) (pat-material ice))
(set-forward-vel (fmax 32768.0 (* 0.8 (-> self control ctrl-xz-vel))))
(set-forward-vel (* 0.8 (-> self control ctrl-xz-vel)))
)
)
((ja-done? 0)
(set-forward-vel (the-as float f26-0))
)
(else
(set! f26-0
(* (target-align-vel-z-adjust (-> self align delta trans z)) (-> self clock frames-per-second) f30-0)
)
(set-forward-vel (the-as float f26-0))
)
)
)
(let ((s5-1 (new-stack-vector0)))
(vector-matrix*! s5-1 (-> self control transv) (-> self control w-R-c))
(set! (-> s5-1 y) 0.0)
(vector-matrix*! (-> self control align-xz-vel) s5-1 (-> self control c-R-w))
)
(when (!= (the-as float (-> self control unknown-word04)) 0.0)
(activate! *camera-smush-control* 819.2 15 75 1.0 0.9 (-> *display* camera-clock))
(set! f26-0 (-> self control unknown-word04))
(set! (-> self control unknown-word04) (the-as uint 0.0))
)
(when (and (>= (the-as float f26-0) 0.0)
(let ((s5-2 (ja-group))
(f24-0 (ja-aframe-num 0))
)
(if (or (and (= s5-2 jakb-attack-punch-ja)
(>= f24-0 10.0)
(>= (the float (+ (-> (the-as art-joint-anim jakb-attack-punch-ja) frames num-frames) -1)) (ja-frame-num 0))
)
(and (= s5-2 jakb-gun-attack-butt-ja)
(>= f24-0 10.0)
(>= (the float (+ (-> (the-as art-joint-anim jakb-gun-attack-butt-ja) frames num-frames) -1))
(ja-frame-num 0)
)
)
(and (= s5-2 jakb-gun-attack-butt-blue-ja)
(>= f24-0 10.0)
(>= (the float (+ (-> (the-as art-joint-anim jakb-gun-attack-butt-blue-ja) frames num-frames) -1))
(ja-frame-num 0)
)
)
)
#t
)
)
)
(let ((s5-3 (new 'stack-no-clear 'collide-query)))
(when (and (>= (impact-control-method-11
(-> self control impact-ctrl)
s5-3
(the-as process #f)
(new 'static 'pat-surface :noentity #x1 :nojak #x1 :probe #x1 :noendlessfall #x1)
)
0.0
)
(>= 0.0 (vector-dot (-> s5-3 best-other-tri normal) (-> self control impact-ctrl dir)))
)
(when (= (-> s5-3 best-other-tri pat mode) (pat-mode wall))
(let ((s4-0 (get-process *default-dead-pool* part-tracker #x4000)))
(when s4-0
(let ((t9-34 (method-of-type part-tracker activate)))
(t9-34 (the-as part-tracker s4-0) self (symbol->string (-> part-tracker symbol)) (the-as pointer #x70004000))
)
(let ((t9-35 run-function-in-process)
(a0-62 s4-0)
(a1-17 part-tracker-init)
(a2-13 (-> *part-group-id-table* 11))
(a3-8 0)
(t0-6 #f)
(t1-5 #f)
(t2-5 #f)
(t3-3 *launch-matrix*)
)
(set! (-> t3-3 trans quad) (-> s5-3 best-other-tri intersect quad))
((the-as (function object object object object object object object object none) t9-35)
a0-62
a1-17
a2-13
a3-8
t0-6
t1-5
t2-5
t3-3
)
)
(-> s4-0 ppointer)
)
)
(let ((t1-6 (if (using-gun? self)
(the-as sound-name (static-sound-name "gun-punch-w-hit"))
(the-as sound-name (static-sound-name "punch-w-hit"))
)
)
)
(play-effect-sound
(-> self skel effect)
'punch
-1.0
(-> self control impact-ctrl joint)
(the-as basic #f)
t1-6
)
)
(activate! *camera-smush-control* 819.2 15 75 1.0 0.9 (-> *display* camera-clock))
(set! f26-0 -61440.0)
)
)
)
)
(suspend)
(ja :num! (seek! max (* (-> self control current-surface align-speed) f28-0)))
(if (time-elapsed? (-> self state-time) (seconds 0.1))
(set! (-> *run-attack-mods* turnvv) 0.0)
)
(if (< 2 gp-2)
(set! f30-0 (* f30-0 (fmin 1.0 (-> self control zx-vel-frac))))
)
(+! gp-2 1)
)
)
(if (and (not (logtest? (-> self control status) (collide-status on-surface)))
(time-elapsed? (-> self control last-time-on-surface) (the-as time-frame (-> *TARGET-bank* ground-timeout)))
(>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
(>= (target-height-above-ground) (-> *TARGET-bank* fall-height))
)
(go target-falling #f)
)
(when (and (using-gun? self)
(or (< (-> self control pad-magnitude) 0.7) (= (-> self gun gun-type) (pickup-type eco-blue)))
)
(set! (-> self gun surpress-time) (+ (current-time) (seconds 0.5)))
(when (zero? (-> self gun track-target-hold-time))
(case (-> self gun gun-type)
(((pickup-type eco-blue))
(push-anim-to-targ
(-> self skel top-anim)
(the-as art-joint-anim jakb-gun-attack-butt-blue-end-ja)
0.0
0
60
1.0
12.0
#f
)
)
(else
(push-anim-to-targ
(-> self skel top-anim)
(the-as art-joint-anim jakb-gun-attack-butt-end-ja)
0.0
0
60
1.0
12.0
#f
)
)
)
)
)
(go target-stance)
)
:post target-post
)
(define *jump-attack-mods*
(new 'static 'surface
:name 'attack
:turnvv 18204.445
:tiltv 32768.0
:tiltvv 262144.0
:transv-max 24576.0
:target-speed 24576.0
:seek0 0.9
:seek90 0.9
:seek180 0.9
:fric 0.2
:nonlin-fric-dist 1.0
:slip-factor 1.0
:slide-factor 1.0
:slope-up-factor 1.0
:slope-down-factor 1.0
:slope-slip-angle 1.0
:impact-fric 1.0
:bend-factor 1.0
:bend-speed 1.0
:alignv 1.0
:slope-up-traction 1.0
:align-speed 1.0
:turnvvf 30.0
:tiltvf 150.0
:tiltvvf 15.0
:mult-hook (lambda :behavior target
((arg0 surface) (arg1 object) (arg2 object) (arg3 int))
(the-as symbol (case arg3
((1)
(if (and (>= (-> self gun fire-pending) 2) (< (-> self gun fire-pending) 5))
(logclear! (-> arg0 flags) (surface-flag gun-direct))
)
(case (-> self control ground-pat event)
(((pat-event slide))
(set! (-> arg0 seek0) 0.05)
(set! (-> arg0 seek90) 0.05)
(set! (-> arg0 seek180) 0.05)
)
)
)
)
)
)
:mode 'air
:flags (surface-flag check-edge air attack spin gun-direct laser-hide)
)
)
(defstate target-attack-air (target)
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
(let ((v0-0 (target-bonk-event-handler proc argc message block)))
(cond
(v0-0
(empty)
v0-0
)
(else
(target-dangerous-event-handler proc argc message block)
)
)
)
)
:enter (behavior ((arg0 symbol))
(set-time! (-> self state-time))
(logclear! (-> self control status) (collide-status on-surface on-ground touch-surface))
(target-start-attack)
(target-danger-set! 'spin-air #f)
(set! (-> self control mod-surface) *jump-attack-mods*)
(set! (-> self neck flex-blend) 0.0)
(let ((f0-2 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
(cond
((or (>= 0.0 f0-2) (= arg0 'flop))
(let ((v1-14 (new-stack-vector0)))
(let ((f0-4 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
0.0
(vector-! v1-14 (-> self control transv) (vector-float*! v1-14 (-> self control dynam gravity-normal) f0-4))
)
(let* ((f0-5 (vector-length v1-14))
(f1-2 f0-5)
(f2-0 33775.48)
)
(vector+!
(-> self control transv)
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f2-0)
(vector-float*! v1-14 v1-14 (/ f0-5 f1-2))
)
)
)
)
(else
(let* ((f1-5 (/ f0-2 (* (-> self control dynam gravity-length) (seconds-per-frame))))
(f0-7 (* 0.5 f1-5 (seconds-per-frame) f0-2))
)
(let ((v1-22 (ja-group)))
(if (and v1-22
(or (= v1-22 jakb-attack-uppercut-ja)
(= v1-22 jakb-gun-attack-upperbutt-ja)
(= v1-22 jakb-gun-attack-upperbutt-blue-ja)
)
)
(set! f0-7
(fmax
0.0
(- (-> *TARGET-bank* attack-jump-height-max)
(vector-dot
(-> self control dynam gravity-normal)
(vector-! (new 'stack-no-clear 'vector) (-> self control trans) (-> self control last-trans-any-surf))
)
)
)
)
)
)
(let ((v1-33 (new-stack-vector0)))
(let ((f1-11 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
0.0
(vector-! v1-33 (-> self control transv) (vector-float*! v1-33 (-> self control dynam gravity-normal) f1-11))
)
(let* ((f1-12 (vector-length v1-33))
(f2-7 f1-12)
(f0-12 (+ 1024.0 (sqrtf (* 245760.0 (+ 2048.0 f0-7)))))
)
(vector+!
(-> self control transv)
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f0-12)
(vector-float*! v1-33 v1-33 (/ f1-12 f2-7))
)
)
)
)
)
)
)
(set! (-> self control dynam gravity-length) 122880.0)
(set! (-> self control last-trans-any-surf quad) (-> self control trans quad))
)
:exit (behavior ()
(set! (-> self control dynam gravity-max) (-> self control standard-dynamics gravity-max))
(set! (-> self control dynam gravity-length) (-> self control standard-dynamics gravity-length))
(set-time! (-> self control last-attack-end-time))
(target-exit)
)
:trans (behavior ()
(when (logtest? (-> self control status) (collide-status on-surface))
(set-quaternion! (-> self control) (-> self control dir-targ))
(go target-hit-ground #f)
)
(if (time-elapsed? (-> self state-time) (seconds 0.5))
(seek!
(-> self control dynam gravity-length)
(-> self control standard-dynamics gravity-length)
(* 245760.0 (seconds-per-frame))
)
)
(when (and (time-elapsed? (-> self state-time) (seconds 0.05))
(< (vector-dot (-> self control dynam gravity-normal) (-> self control last-transv))
(vector-dot (-> self control dynam gravity-normal) (-> self control transv))
)
)
(set! (-> self control dynam gravity-max) (-> self control standard-dynamics gravity-max))
(set! (-> self control dynam gravity-length) (-> self control standard-dynamics gravity-length))
)
(when (and (= (-> self fact eco-type) 2) (>= (-> self fact eco-level) 1.0))
(do-effect (-> self skel effect) 'group-red-eco-spinkick (ja-frame-num 0) 31)
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 153 (seconds 0.1))
(talker-spawn-func (-> *talker-speech* 328) *entity-pool* (target-pos 0) (the-as region #f))
)
(when (and (cpad-pressed? (-> self control cpad number) r1) (zero? (-> self gun fire-pending)))
(case (-> self gun gun-type)
(((pickup-type eco-yellow))
(+! (-> self gun fire-pending) 5)
)
(((pickup-type eco-blue))
(+! (-> self gun fire-pending) 5)
(set! (-> self gun fire-spinv) 218453.33)
)
(((pickup-type eco-red))
(+! (-> self gun fire-pending) 2)
)
)
)
)
:code (behavior ((arg0 symbol))
(target-attack-air-anim)
(go target-falling #f)
)
:post target-post
)
(let ((v1-32 (copy *turn-around-mods* 'global)))
(set! (-> v1-32 flags) (surface-flag attack gun-inactive))
(set! *uppercut-mods* v1-32)
)
(define *uppercut-jump-mods* (new 'static 'surface
:name 'uppercut
:turnvv 18204.445
:tiltv 32768.0
:tiltvv 262144.0
:transv-max 32768.0
:target-speed 32768.0
:seek0 0.3
:seek90 0.3
:seek180 0.3
:fric 0.2
:nonlin-fric-dist 1.0
:slip-factor 1.0
:slide-factor 1.0
:slope-up-factor 1.0
:slope-down-factor 1.0
:slope-slip-angle 1.0
:impact-fric 1.0
:bend-factor 1.0
:bend-speed 1.0
:alignv 1.0
:slope-up-traction 1.0
:align-speed 1.0
:turnvvf 30.0
:tiltvf 150.0
:tiltvvf 15.0
:mult-hook (lambda :behavior target
((arg0 surface) (arg1 surface) (arg2 surface) (arg3 int))
(surface-clamp-speed arg0 arg1 arg2 arg3)
(when (= arg3 1)
(when (nonzero? (-> self gun track-target-hold-time))
(set! (-> arg0 turnv) 262144.0)
(set! (-> arg0 turnvf) 15.0)
)
)
)
:mode 'air
:flags (surface-flag check-edge air attack spin gun-direct laser-hide)
)
)
(defstate target-attack-uppercut (target)
:event target-dangerous-event-handler
:enter (behavior ((arg0 float) (arg1 float))
(set-time! (-> self state-time))
(target-start-attack)
(target-danger-set! 'uppercut #f)
(set! (-> self control mod-surface) *uppercut-mods*)
(set! (-> self neck flex-blend) 0.0)
(set! (-> self gun surpress-time) (+ (current-time) (seconds 0.15)))
(if (using-gun? self)
(target-top-anim-base-mode 37)
)
(set! (-> self control unknown-sound-id00) (new 'static 'sound-id))
0
)
:exit (behavior ()
(if (not (and (-> self next-state) (= (-> self next-state name) 'target-darkjak-bomb1)))
(set-action!
*gui-control*
(gui-action play)
(-> self control unknown-sound-id00)
(gui-channel none)
(gui-action none)
(the-as string #f)
(the-as (function gui-connection symbol) #f)
(the-as process #f)
)
)
(target-exit)
)
:code (behavior ((arg0 float) (arg1 float))
(let* ((v1-2 (ja-group))
(f30-0 (if (and v1-2 (= v1-2 jakb-duck-stance-ja))
5.0
0.0
)
)
)
(cond
((using-gun? self)
(set! (-> self gun top-anim-low-high) 0.0)
(case (-> self gun gun-type)
(((pickup-type eco-blue))
(push-anim-to-targ
(-> self skel top-anim)
(the-as art-joint-anim jakb-gun-attack-upperbutt-blue-ja)
f30-0
5
30
1.0
0.0
#f
)
(ja-no-eval :group! jakb-gun-attack-upperbutt-blue-ja
:num! (seek! (ja-aframe 7.0 0))
:frame-num (ja-aframe f30-0 0)
)
(until (ja-done? 0)
(suspend)
(ja :num! (seek! (ja-aframe 7.0 0)))
)
)
(else
(push-anim-to-targ
(-> self skel top-anim)
(the-as art-joint-anim jakb-gun-attack-upperbutt-ja)
f30-0
5
30
1.0
0.0
#f
)
(ja-no-eval :group! jakb-gun-attack-upperbutt-ja
:num! (seek! (ja-aframe 7.0 0))
:frame-num (ja-aframe f30-0 0)
)
(until (ja-done? 0)
(suspend)
(ja :num! (seek! (ja-aframe 7.0 0)))
)
)
)
)
((and (focus-test? self dark)
(nonzero? (-> self darkjak))
(logtest? (-> self darkjak stage) (darkjak-stage bomb1))
)
(set! (-> self control unknown-sound-id00)
(add-process *gui-control* self (gui-channel jak) (gui-action queue) "darkbom1" -99.0 0)
)
(ja-no-eval :group! jakb-darkjak-attack-ice-ja :num! (seek! (ja-aframe 7.0 0)) :frame-num (ja-aframe f30-0 0))
(until (ja-done? 0)
(suspend)
(ja :num! (seek! (ja-aframe 7.0 0)))
)
(go target-darkjak-bomb1 arg0 arg1)
)
(else
(ja-no-eval :group! jakb-attack-uppercut-ja :num! (seek! (ja-aframe 7.0 0)) :frame-num (ja-aframe f30-0 0))
(until (ja-done? 0)
(suspend)
(ja :num! (seek! (ja-aframe 7.0 0)))
)
)
)
)
(go target-attack-uppercut-jump arg0 arg1)
)
:post target-post
)
(defstate target-attack-uppercut-jump (target)
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
(case message
(('gun-combo)
(when (-> block param 0)
(forward-up-nopitch->quaternion
(-> self control dir-targ)
(vector-! (new 'stack-no-clear 'vector) (-> self gun track-trans) (-> self control trans))
(vector-y-quaternion! (new-stack-vector0) (-> self control dir-targ))
)
(let ((v1-7 (new-stack-vector0)))
(let ((f0-1 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
0.0
(vector-! v1-7 (-> self control transv) (vector-float*! v1-7 (-> self control dynam gravity-normal) f0-1))
)
(let* ((f0-2 (vector-length v1-7))
(f1-1 f0-2)
(f2-3
(- (sqrtf (* 8192.0 (-> self control dynam gravity-length)))
(* 0.008333334 (- (-> self control dynam gravity-length)))
)
)
)
(vector+!
(-> self control transv)
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f2-3)
(vector-float*! v1-7 v1-7 (/ f0-2 f1-1))
)
)
)
(set! (-> self gun surpress-time) (+ (current-time) (seconds 0.5)))
(go target-falling 'uppercut)
)
#t
)
(else
(target-dangerous-event-handler proc argc message block)
)
)
)
:enter (behavior ((arg0 float) (arg1 float))
(if (and (= (-> self control ground-pat material) (pat-material ice)) (< 32768.0 (-> self control ctrl-xz-vel)))
(set-forward-vel 32768.0)
)
(set-time! (-> self state-time))
(init-var-jump arg0 arg1 #t #f (-> self control transv) 2.0)
(logclear! (-> self control status) (collide-status on-surface on-ground touch-surface))
(set! (-> self neck flex-blend) 0.0)
(set! (-> self control mod-surface) *uppercut-jump-mods*)
(target-start-attack)
(target-danger-set! 'uppercut #f)
(set-time! (-> self gun combo-window-start))
(set! (-> self gun combo-window-state) (-> self state name))
(set! (-> self gun track-target-hold-time) 0)
0
)
:exit target-exit
:trans (behavior ()
(if (logtest? (-> self control status) (collide-status on-surface))
(go target-hit-ground #f)
)
(when (and (cpad-pressed? (-> self control cpad number) square)
(< (vector-dot (-> self control dynam gravity-normal) (-> self control transv)) 22118.4)
(< -61440.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
(and (time-elapsed? (-> self control last-time-of-stuck) (the-as time-frame (-> *TARGET-bank* stuck-timeout)))
(not (logtest? (-> self state-flags) (state-flags prevent-attack)))
(not (logtest? (-> self control current-surface flags) (surface-flag no-attack no-hands)))
(not (and (not (using-gun? self)) (!= (-> self skel top-anim interp) 0.0)))
)
)
(set-quaternion! (-> self control) (-> self control dir-targ))
(build-conversions (-> self control transv))
(go
target-flop
65502.96
-163840.0
(the-as float (if (= (-> *cpad-list* cpads (-> self control cpad number) stick0-speed) 0.0)
0
#x47866666
)
)
)
)
(if (and (cpad-pressed? (-> self control cpad number) circle)
(and (can-feet? #f)
(let ((v1-65 (ja-group)))
(and v1-65 (or (= v1-65 jakb-attack-uppercut-ja) (= v1-65 jakb-gun-attack-upperbutt-ja)))
)
(>= (ja-aframe-num 0) 12.0)
)
)
(go target-attack-air 'uppercut)
)
(mod-var-jump #t #t (cpad-hold? (-> self control cpad number) x) (-> self control transv))
(when (and (= (-> self fact eco-type) 2) (>= (-> self fact eco-level) 1.0))
(do-effect (-> self skel effect) 'group-red-eco-spinkick (ja-frame-num 0) 22)
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 153 (seconds 0.1))
)
(if (and (= (-> self control danger-mode) 'uppercut)
(< (vector-dot (-> self control dynam gravity-normal) (-> self control transv)) -8192.0)
)
(target-danger-set! 'harmless #f)
)
(slide-down-test)
)
:code (behavior ((arg0 float) (arg1 float))
(when (or (= (-> self skel top-anim frame-group) jakb-gun-attack-upperbutt-ja)
(= (-> self skel top-anim frame-group) jakb-gun-attack-upperbutt-blue-ja)
)
(let ((v1-10 (get-channel (-> self skel top-anim) 0)))
(if v1-10
(set! (-> v1-10 param 1) 0.9)
)
)
)
(compute-alignment! (-> self align))
(until (ja-done? 0)
(suspend)
(ja :num! (seek! max 0.9))
(compute-alignment! (-> self align))
(set! (-> self control turn-go-the-long-way) 1.0)
(let ((v1-27 (ja-group)))
(if (and v1-27 (= v1-27 jakb-attack-uppercut-ja))
(align!
(-> self align)
(the-as align-opts (cond
((>= 30.0 (ja-aframe-num 0))
(set! (-> self gun surpress-time) (+ (current-time) (seconds 0.1)))
(if (nonzero? (-> self gun track-target-hold-time))
2
18
)
)
((>= 43.0 (ja-aframe-num 0))
(set! (-> self control mod-surface) *double-jump-mods*)
2
)
(else
0
)
)
)
1.0
0.95
1.0
)
(align!
(-> self align)
(the-as align-opts (cond
((>= 35.0 (ja-aframe-num 0))
(set! (-> self gun surpress-time) (+ (current-time) (seconds 0.1)))
(if (nonzero? (-> self gun track-target-hold-time))
2
18
)
)
((>= 43.0 (ja-aframe-num 0))
(set! (-> self control mod-surface) *double-jump-mods*)
2
)
(else
0
)
)
)
1.0
0.95
1.0
)
)
)
)
(set-time! (-> self gun surpress-time))
(go target-falling #f)
)
:post target-post
)
(defstate target-flop (target)
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
(local-vars (v1-0 symbol))
(let ((v0-0 (target-bonk-event-handler proc argc message block)))
(cond
(v0-0
(empty)
v0-0
)
((begin (set! v1-0 message) (= v1-0 'slide))
#f
)
((= v1-0 'swim)
(cond
((< 6144.0 (target-height-above-ground))
(sound-play "swim-flop")
(set! (-> self control unknown-float43) 0.0)
(go target-swim-down)
)
(else
(go target-flop-hit-ground 'swim)
)
)
)
(else
(target-dangerous-event-handler proc argc message block)
)
)
)
)
:enter (behavior ((arg0 float) (arg1 float) (arg2 float))
(cond
((and (= (-> self fact eco-type) 1) (>= (-> self fact eco-level) 1.0))
(go target-yellow-jump-blast)
)
((and (focus-test? self dark)
(nonzero? (-> self darkjak))
(logtest? (-> self darkjak stage) (darkjak-stage bomb0))
)
(go target-darkjak-bomb0)
)
)
(if (= arg2 0.0)
(set-forward-vel arg2)
(set-forward-vel (-> self control ctrl-xz-vel))
)
(set-time! (-> self state-time))
(logclear! (-> self control status) (collide-status on-surface on-ground touch-surface))
(set! (-> self control mod-surface) *flop-mods*)
(set! (-> self neck flex-blend) 0.0)
(set! (-> self control unknown-word04) (the-as uint 0))
(set! (-> self control dynam gravity-max) 245760.0)
(set! (-> self control dynam gravity-length) 245760.0)
(let ((v1-33 (new-stack-vector0)))
(let ((f0-7 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
0.0
(vector-! v1-33 (-> self control transv) (vector-float*! v1-33 (-> self control dynam gravity-normal) f0-7))
)
(let* ((f0-8 (vector-length v1-33))
(f1-3 f0-8)
(f2-0 29491.2)
)
(vector+!
(-> self control transv)
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f2-0)
(vector-float*! v1-33 v1-33 (/ f0-8 f1-3))
)
)
)
)
:exit (behavior ()
(let ((v1-2 (get-channel (-> self skel top-anim) 0)))
(when v1-2
(case (-> v1-2 frame-group)
((jakb-gun-flop-down-ja)
(set! (-> v1-2 param 1) 10.0)
)
)
)
)
(target-danger-set! 'harmless #f)
(set! (-> self control dynam gravity-max) (-> self control standard-dynamics gravity-max))
(set! (-> self control dynam gravity-length) (-> self control standard-dynamics gravity-length))
(set! (-> self control dynam gravity quad) (-> self control standard-dynamics gravity quad))
(set! (-> self neck flex-blend) 1.0)
)
:trans (behavior ()
(delete-back-vel)
(let ((gp-1 (logtest? (-> self control status) (collide-status on-surface))))
(when (and (not gp-1) (let ((v1-6 (ja-group)))
(and v1-6 (or (= v1-6 jakb-flop-down-loop-ja) (= v1-6 jakb-moving-flop-down-ja)))
)
)
(when (and (or (< (target-move-dist (seconds 0.1)) 1638.4)
(and (logtest? (-> self control status) (collide-status touch-wall)) (< 0.7 (-> self control poly-angle)))
)
(not (logtest? (-> self control status) (collide-status touch-actor)))
(>= (-> self control unknown-word04) (the-as uint 2))
)
(set-time! (-> self control last-time-of-stuck))
(set! gp-1 'stuck)
)
)
(when gp-1
(logior! (-> self control status) (collide-status on-surface))
(when (or (and (= (-> self fact eco-type) 2) (>= (-> self fact eco-level) 1.0))
(and (focus-test? self dark)
(nonzero? (-> self darkjak))
(logtest? (-> self darkjak stage) (darkjak-stage active))
)
)
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 255 (seconds 0.5))
(if (and (= (-> self fact eco-type) 2) (>= (-> self fact eco-level) 1.0))
(do-effect (-> self skel effect) 'group-red-eco-strike-ground (ja-frame-num 0) 0)
)
(let ((v1-56 (process-spawn touch-tracker :init touch-tracker-init (-> self control trans) #x45800000 30 :to self))
)
(send-event
(ppointer->process v1-56)
'function
(lambda :behavior target
((arg0 target))
(set! (-> arg0 control root-prim local-sphere w)
(seek (-> arg0 control root-prim local-sphere w) 28672.0 (* 286720.0 (seconds-per-frame)))
)
)
)
)
)
(go target-flop-hit-ground gp-1)
)
)
(when (and (= (-> self fact eco-type) 2) (>= (-> self fact eco-level) 1.0))
(do-effect (-> self skel effect) 'group-red-eco-spinkick (ja-frame-num 0) (if (rand-vu-percent? 0.5)
22
18
)
)
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 153 (seconds 0.1))
)
(when (and (not (-> self control danger-mode))
(let ((v1-82 (ja-group)))
(and v1-82 (= v1-82 jakb-flop-down-ja))
)
(>= (ja-aframe-num 0) 8.0)
)
(target-start-attack)
(target-danger-set! 'flop #f)
)
)
:code (behavior ((arg0 float) (arg1 float) (arg2 float))
(if (using-gun? self)
(push-anim-to-targ (-> self skel top-anim) (the-as art-joint-anim jakb-gun-flop-down-ja) 0.0 0 30 1.0 0.0 #f)
)
(ja-channel-set! 2)
(ja-no-eval :group! jakb-flop-down-ja :num! (seek!) :frame-num 0.0)
(ja :chan 1 :group! jakb-moving-flop-down-ja :num! (chan 0) :frame-num 0.0)
(until (ja-done? 0)
(suspend)
(ja :num! (seek!))
(let ((gp-0 (-> self skel root-channel 1)))
(let ((f0-10 (lerp-scale 0.0 1.0 (-> self control ctrl-xz-vel) 0.0 40960.0)))
(set! (-> gp-0 frame-interp 1) f0-10)
(set! (-> gp-0 frame-interp 0) f0-10)
)
(set! (-> gp-0 param 0) (the float (+ (-> gp-0 frame-group frames num-frames) -1)))
(set! (-> gp-0 param 1) 1.0)
(joint-control-channel-group-eval! gp-0 (the-as art-joint-anim #f) num-func-seek!)
)
)
(set! (-> self control dynam gravity-length) (-> self control standard-dynamics gravity-length))
(set! (-> self control dynam gravity quad) (-> self control standard-dynamics gravity quad))
(target-danger-set! 'flop-down #f)
(let ((v1-56 (get-channel (-> self skel top-anim) 0)))
(if (and v1-56 (= (-> v1-56 frame-group) jakb-gun-flop-down-ja))
(set! (-> v1-56 param 1) 0.0)
)
)
(let ((f30-0 1.0))
(let ((v1-58 (new-stack-vector0)))
(let ((f0-17 (vector-dot (-> self control dynam gravity-normal) (-> self control align-xz-vel))))
0.0
(vector-!
v1-58
(-> self control align-xz-vel)
(vector-float*! v1-58 (-> self control dynam gravity-normal) f0-17)
)
)
(let* ((f0-18 (vector-length v1-58))
(f1-1 f0-18)
(f2-0 -368640.0)
)
(vector+!
(-> self control align-xz-vel)
(vector-float*! (-> self control align-xz-vel) (-> self control dynam gravity-normal) f2-0)
(vector-float*! v1-58 v1-58 (/ f0-18 f1-1))
)
)
)
(let ((v1-59 (new-stack-vector0)))
(let ((f0-21 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
0.0
(vector-! v1-59 (-> self control transv) (vector-float*! v1-59 (-> self control dynam gravity-normal) f0-21))
)
(let* ((f0-22 (vector-length v1-59))
(f1-3 f0-22)
(f2-2 (* -368640.0 f30-0))
)
(vector+!
(-> self control transv)
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f2-2)
(vector-float*! v1-59 v1-59 (/ f0-22 f1-3))
)
)
)
(suspend)
(until #f
(+! (-> self control unknown-word04) 1)
(ja :num! (seek!))
(let ((gp-1 (-> self skel root-channel 1)))
(let ((f0-28 (lerp-scale 0.0 1.0 (-> self control ctrl-xz-vel) 0.0 40960.0)))
(set! (-> gp-1 frame-interp 1) f0-28)
(set! (-> gp-1 frame-interp 0) f0-28)
)
(set! (-> gp-1 param 0) 0.0)
(joint-control-channel-group-eval! gp-1 (the-as art-joint-anim #f) num-func-chan)
)
(set! f30-0 (* f30-0 (fmin 1.0 (-> self control zx-vel-frac))))
(let ((v1-77 (new-stack-vector0))
(f0-33 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
)
0.0
(vector-! v1-77 (-> self control transv) (vector-float*! v1-77 (-> self control dynam gravity-normal) f0-33))
(let* ((f2-3 (vector-length v1-77))
(f1-7 f2-3)
)
(if (< (-> self control current-surface transv-max) f2-3)
(set! f2-3 (-> self control current-surface transv-max))
)
(vector+!
(-> self control transv)
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f0-33)
(vector-float*! v1-77 v1-77 (/ f2-3 f1-7))
)
)
)
(if (and (time-elapsed? (-> self state-time) (the-as time-frame (-> *TARGET-bank* fall-timeout)))
(!= (-> self tobot?) 'tobot)
)
(go target-falling #f)
)
(if (and (= *cheat-mode* 'debug)
(cpad-hold? (-> self control cpad number) r2)
(not *pause-lock*)
(!= (-> self tobot?) 'tobot)
)
(go target-falling #f)
)
(suspend)
)
)
#f
)
:post target-post
)
(defstate target-flop-hit-ground (target)
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
(cond
((and (-> self next-state) (= (-> self next-state name) 'target-flop-hit-ground))
(case message
(('swim 'slide)
#f
)
(else
(target-standard-event-handler proc argc message block)
)
)
)
(else
(target-jump-event-handler proc argc message block)
)
)
)
:enter (behavior ((arg0 symbol))
(let ((f0-1 (vector-dot
(-> self control dynam gravity-normal)
(vector-! (new 'stack-no-clear 'vector) (-> self control highest-jump-mark) (-> self control trans))
)
)
)
(if (< (-> *TARGET-bank* fall-far) f0-1)
(go target-hit-ground-hard f0-1)
)
)
(target-land-effect)
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 255 (seconds 0.1))
(set-time! (-> self state-time))
(set! (-> self control unknown-word04) (the-as uint arg0))
(set-forward-vel 0.0)
(set! (-> self control mod-surface) *flop-land-mods*)
(logclear! (-> *flop-land-mods* flags) (surface-flag check-edge))
(logior! (-> self state-flags) (state-flags sf15))
(set! (-> self neck flex-blend) 0.0)
(cond
((= arg0 'swim)
)
(else
)
)
)
:exit target-exit
:trans (behavior ()
(when (and (!= (-> self control unknown-spool-anim00) 'stuck) (!= (-> self state-time) (current-time)))
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons circle)
)
(can-feet? #f)
)
(go target-attack-air 'flop)
)
)
(when (and (and (= (-> self fact eco-type) 2) (>= (-> self fact eco-level) 1.0))
(not (time-elapsed? (-> self state-time) (seconds 0.25)))
)
(do-effect (-> self skel effect) 'group-red-eco-spinkick (ja-frame-num 0) (if (rand-vu-percent? 0.5)
22
18
)
)
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 153 (seconds 0.1))
)
(let ((v1-37 (ja-group)))
(if (and (and v1-37 (= v1-37 jakb-flop-down-land-ja)) (>= (ja-aframe-num 0) 28.0))
(logior! (-> *flop-land-mods* flags) (surface-flag check-edge))
)
)
(slide-down-test)
)
:code (behavior ((arg0 symbol))
(target-hit-ground-anim arg0 (are-still?))
(go target-falling #f)
)
:post target-post
)
(defstate target-roll (target)
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
(if (= message 'touched)
(send-event proc 'roll)
)
(case message
(('gun-combo)
(when (-> block param 0)
(forward-up-nopitch->quaternion
(-> self control dir-targ)
(vector-! (new 'stack-no-clear 'vector) (-> self gun track-trans) (-> self control trans))
(vector-y-quaternion! (new-stack-vector0) (-> self control dir-targ))
)
(let ((a0-8 (-> self control)))
(set-quaternion! a0-8 (-> self control dir-targ))
(go target-duck-stance (the-as symbol a0-8))
)
)
#t
)
(else
(target-standard-event-handler proc argc message block)
)
)
)
:enter (behavior ()
(target-collide-set! 'duck 1.0)
(set-time! (-> self state-time))
(set! (-> self neck flex-blend) 0.0)
(set! (-> self neck base-joint) (the-as uint 8))
(set! (-> self control mod-surface) *roll-mods*)
(+! (-> self control unknown-word02) 1)
(rot->dir-targ! (-> self control))
(set-forward-vel (+ (-> *TARGET-bank* roll-speed-min)
(* (-> *TARGET-bank* roll-speed-inc) (the float (+ (-> self control unknown-word02) -1)))
)
)
(if (or (< (fabs (-> self control local-slope-x)) 0.3) (< 0.3 (fabs (-> self control local-slope-z))))
(set! (-> self control bend-target) 1.0)
)
(set! (-> self control unknown-word04) (the-as uint 0))
(set! (-> self control did-move-to-pole-or-max-jump-height) 0.0)
(set! (-> self gun track-target-hold-time) 0)
)
:exit (behavior ()
(when (not (and (-> self next-state) (= (-> self next-state name) 'target-roll)))
(set! (-> self control unknown-word02) 0)
(set-time! (-> self control last-roll-end-time))
)
(target-exit)
(target-collide-set! 'normal 0.0)
)
:code (behavior ()
(let ((gp-0 0))
0
(let ((s5-0 0)
(f30-0 1.0)
(s4-0 #f)
)
(ja-channel-push! 1 (seconds 0.04))
(cond
((using-gun? self)
(set! (-> self gun top-anim-low-high) 0.0)
(push-anim-to-targ (-> self skel top-anim) (the-as art-joint-anim jakb-gun-duck-roll-ja) 0.0 15 30 1.0 0.0 #f)
(ja :group! jakb-gun-duck-roll-ja :num! min)
)
(else
(ja :group! jakb-duck-roll-ja :num! min)
)
)
(until (ja-done? 0)
(if (cpad-pressed? (-> self control cpad number) x)
(set! gp-0 (the-as int (current-time)))
)
(when (and (not s4-0) (time-elapsed? (-> self state-time) (seconds 0.2)))
(set! s4-0 #t)
(set-time! (-> self gun combo-window-start))
(set! (-> self gun combo-window-state) (-> self state name))
)
(when (and (or (smack-surface? #f) (>= (-> self control surface-slope-z) 0.7))
(>= (the-as uint (- (current-time) (the-as int (-> self control unknown-word04)))) (the-as uint 3))
(time-elapsed? (-> self state-time) 1)
)
(when (>= 6.0 (ja-aframe-num 0))
(if (using-gun? self)
(target-top-anim-base-mode 15)
)
(target-shoved
(-> *TARGET-bank* smack-surface-dist)
(-> *TARGET-bank* smack-surface-height)
(the-as process #f)
target-hit
)
)
(if (zero? s5-0)
(set! s5-0 (the-as int (current-time)))
)
)
(if (cpad-pressed? (-> self control cpad number) square)
(current-time)
)
(compute-alignment! (-> self align))
(cond
((nonzero? s5-0)
)
(else
(align! (-> self align) (align-opts adjust-xz-vel) 1.0 1.0 f30-0)
(let ((s3-2 (new-stack-vector0)))
(vector-matrix*! s3-2 (-> self control transv) (-> self control w-R-c))
(set! (-> s3-2 y) 0.0)
(vector-matrix*! (-> self control align-xz-vel) s3-2 (-> self control c-R-w))
)
)
)
(suspend)
(ja :num! (seek!))
(set! f30-0 (* f30-0 (fmin 1.0 (-> self control zx-vel-frac))))
)
)
(if (and (or (not (time-elapsed? (the-as time-frame gp-0) (the-as time-frame (-> *TARGET-bank* roll-jump-pre-window))))
(cpad-pressed? (-> self control cpad number) x)
)
(can-jump? 'target-roll-flip)
)
(go target-roll-flip (-> *TARGET-bank* roll-flip-height) (-> *TARGET-bank* roll-flip-dist))
)
)
(set-time! (-> self state-hook-time))
(set! (-> self state-hook)
(lambda :behavior target
()
(cond
((time-elapsed? (-> self state-hook-time) (the-as time-frame (-> *TARGET-bank* roll-jump-post-window)))
(set! (-> self state-hook) (the-as (function none :behavior target) nothing))
)
(else
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons x)
)
(can-jump? 'target-roll-flip)
)
(go target-roll-flip (-> *TARGET-bank* roll-flip-height) (-> *TARGET-bank* roll-flip-dist))
)
)
)
(none)
)
)
(set! (-> self gun surpress-time) (+ (current-time) (seconds 0.2)))
(go target-duck-stance 'roll)
)
:post target-post
)
(defstate target-roll-flip (target)
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
(case message
(('gun-combo)
(when (-> block param 0)
(forward-up-nopitch->quaternion
(-> self control dir-targ)
(vector-! (new 'stack-no-clear 'vector) (-> self gun track-trans) (-> self control trans))
(vector-y-quaternion! (new-stack-vector0) (-> self control dir-targ))
)
(set-quaternion! (-> self control) (-> self control dir-targ))
(go target-falling #f)
)
#t
)
(else
(target-jump-event-handler proc argc message block)
)
)
)
:enter (behavior ((arg0 float) (arg1 float))
(set! (-> self control mod-surface) *roll-flip-mods*)
(set! (-> self neck flex-blend) 0.0)
(set! (-> self neck base-joint) (the-as uint 8))
(set! (-> self gun track-target-hold-time) 0)
(set-time! (-> self gun combo-window-start))
(set! (-> self gun combo-window-state) (-> self state name))
(target-collide-set! 'duck 1.0)
)
:exit (behavior ()
(target-exit)
(target-collide-set! 'normal 0.0)
)
:trans (behavior ()
(if (and (or (smack-surface? #f)
(< (target-move-dist (-> *TARGET-bank* stuck-time)) (-> *TARGET-bank* stuck-distance))
)
(and (!= (-> self state-time) (current-time)) (not (using-gun? self)))
)
(target-shoved
(-> *TARGET-bank* smack-surface-dist)
(-> *TARGET-bank* smack-surface-height)
(the-as process #f)
target-hit
)
)
(if (and (cpad-pressed? (-> self control cpad number) circle)
(can-feet? #f)
(let ((v1-20 (ja-group)))
(and (and v1-20 (= v1-20 jakb-jump-loop-ja)) (= (-> self skel root-channel 0) (-> self skel channel)))
)
)
(go target-attack-air #f)
)
)
:code (behavior ((arg0 float) (arg1 float))
(local-vars (v1-37 symbol))
(ja-channel-push! 1 (seconds 0.04))
(ja :group! jakb-roll-flip-ja :num! min)
(when (using-gun? self)
(set! (-> self gun top-anim-low-high) 0.0)
(push-anim-to-targ (-> self skel top-anim) (the-as art-joint-anim jakb-gun-roll-flip-ja) 0.0 0 30 1.0 0.0 #f)
)
(let ((f30-0 1.0))
(until v1-37
(compute-alignment! (-> self align))
(if (not (ja-max? 0))
(align!
(-> self align)
(align-opts adjust-y-vel adjust-xz-vel)
1.0
(/ arg0 (-> *TARGET-bank* roll-flip-art-height))
(* f30-0 (/ arg1 (-> *TARGET-bank* roll-flip-art-dist)))
)
(align!
(-> self align)
(align-opts adjust-xz-vel)
1.0
1.0
(* f30-0 (/ arg1 (-> *TARGET-bank* roll-flip-art-dist)))
)
)
(let ((s4-1 (new-stack-vector0)))
(vector-matrix*! s4-1 (-> self control transv) (-> self control w-R-c))
(set! (-> s4-1 y) 0.0)
(vector-matrix*! (-> self control align-xz-vel) s4-1 (-> self control c-R-w))
)
(suspend)
(ja :num! (seek!))
(set! f30-0 (* f30-0 (fmin 1.0 (-> self control zx-vel-frac))))
(set! v1-37
(or (ja-max? 0)
(and (>= (ja-aframe-num 0) 4.0) (logtest? (-> self control status) (collide-status on-surface)))
)
)
)
)
(set-time! (-> self state-time))
(while (not (logtest? (-> self control status) (collide-status on-surface)))
(when (time-elapsed? (-> self state-time) (seconds 0.01))
(let ((v1-50 (ja-group)))
(when (not (and v1-50 (= v1-50 jakb-jump-loop-ja)))
(ja-channel-push! 1 (seconds 0.1))
(ja :group! jakb-jump-loop-ja :num! min)
)
)
)
(let ((v1-59 (new-stack-vector0))
(f0-19 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
)
0.0
(vector-! v1-59 (-> self control transv) (vector-float*! v1-59 (-> self control dynam gravity-normal) f0-19))
(let* ((f2-0 (vector-length v1-59))
(f1-7 f2-0)
(f2-1 (* 0.9 f2-0))
)
(vector+!
(-> self control transv)
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f0-19)
(vector-float*! v1-59 v1-59 (/ f2-1 f1-7))
)
)
)
(suspend)
(let ((v1-62 (ja-group)))
(if (and v1-62 (= v1-62 jakb-jump-loop-ja))
(ja :num! (loop!))
(ja :num-func num-func-identity :frame-num max)
)
)
)
(target-land-effect)
(set! (-> self gun surpress-time) (+ (current-time) (seconds 0.1)))
(set-time! (-> self state-hook-time))
(set! (-> self state-hook)
(lambda :behavior target
()
(cond
((time-elapsed? (-> self state-hook-time) (seconds 0.1))
(set! (-> self state-hook) (the-as (function none :behavior target) nothing))
)
(else
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
)
(pad-buttons x)
)
(can-jump? #f)
(or (not (-> *TARGET-bank* strafe-duck-jump)) (not (enabled-gun? self)))
)
(go target-high-jump (-> *TARGET-bank* flip-jump-height-min) (-> *TARGET-bank* flip-jump-height-max) 'flip)
)
)
)
(none)
)
)
(cond
((not (can-exit-duck? self))
(go target-duck-stance #f)
)
(else
(let ((v1-86 (ja-group)))
(if (and v1-86 (= v1-86 jakb-jump-loop-ja))
(go target-hit-ground #f)
(go target-stance)
)
)
)
)
)
:post target-post
)