Files
Brent Hickey 685ff2cf1c [high fps] Increase input buffer size and fix cloud scroll speed (#3178)
The game stores the last 3 frames of input (50ms of time at 60fps) and
often checks if a button was pressed within those 3 saved frames as a
condition.

When transitioning states, it often checks if some input was received
during the previous state (within those 3 frames) in order to quickly
transition out. A good example of this is when transitioning to
standing, it checks if you can jump this frame and if you had pressed X
recently, and if so, transition immediately to jump. This allows
transitions between states to feel more smooth/forgiving by letting you
jump at a later time when you are transitioning from falling->standing
than if you were only falling.

At 165fps the last 3 frames is only 18ms of time so the input windows
for these smooth transitions are almost 3x shorter.

This PR saves 15 input frames (enough to cover 50ms of time at 300fps)
for each controller and adds a (recently-pressed?) macro that checks all
15 frames. However, it only updates the necessary frames in history
based on the current frame rate. This way, 60fps continues to only check
against 3 input frames, 165fps checks against 9, 240fps checks against
12, and 300fps checks all 15.

---------

Co-authored-by: Tyler Wilding <xtvaser@gmail.com>
2024-02-23 18:58:45 -05:00

3750 lines
138 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)
)
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(if (and (recently-pressed? x)
(can-jump? #f)
)
(target-jump-go)
)
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(if (and (recently-pressed? circle)
(can-feet? #t)
)
(go target-attack)
)
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(if (and (recently-pressed? 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)
)
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(if (and (logtest? (-> self game features) (game-feature carry))
(recently-pressed? 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)
)
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(if (and (recently-pressed? 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))
)
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(if (and (recently-pressed? x)
(can-jump? #f)
)
(target-jump-go)
)
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(if (and (recently-pressed? circle)
(can-feet? #t)
)
(go target-attack)
)
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(if (and (recently-pressed? 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)
)
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(if (and (logtest? (-> self game features) (game-feature carry))
(recently-pressed? 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))
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(if (and (recently-pressed? 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))
)
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(when (and (recently-pressed? 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*)
)
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(if (and (recently-pressed? circle)
(can-feet? #t)
(!= (-> self state-time) (current-time))
)
(go target-attack)
)
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(if (and (recently-pressed? 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))
)
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(when (and (recently-pressed? 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))
)
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(when (and (recently-pressed? 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
)
)
)
)
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(if (and (recently-pressed? 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 ()
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(if (and (recently-pressed? 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)
)
)
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(if (and (recently-pressed? circle)
(can-feet? #t)
)
(go target-attack)
)
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(if (and (recently-pressed? 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))
)
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(when (and (recently-pressed? 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) (joint-node jakb-lod0-jg neckB))
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)))
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(if (and (recently-pressed? 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
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(if (and (recently-pressed? 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
;; og:preserve-this - High FPS Fix - https://github.com/open-goal/jak-project/pull/3178
(if (and (recently-pressed? 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
)