mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 21:27:52 -04:00
136136e498
Adds `collide-shape` and a few other related ones.
1092 lines
43 KiB
Common Lisp
1092 lines
43 KiB
Common Lisp
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; name: target-swim.gc
|
|
;; name in dgo: target-swim
|
|
;; dgos: ENGINE, GAME
|
|
|
|
;; DECOMP BEGINS
|
|
|
|
(defstate target-wade-stance (target)
|
|
:event target-standard-event-handler
|
|
:enter (behavior ()
|
|
(set! (-> self state-time) (-> self clock frame-counter))
|
|
(set! (-> self control unknown-surface00) *wade-mods*)
|
|
(set-zero! (-> self water bob))
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(target-state-hook-exit)
|
|
(target-exit)
|
|
(let ((v1-1 (-> self skel effect)))
|
|
(set! (-> v1-1 channel-offset) 0)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
((-> self state-hook))
|
|
(when (and (not (logtest? (water-flags wading) (-> self water flags)))
|
|
(>= (- (-> self clock frame-counter) (-> self water wade-time)) (seconds 0.05))
|
|
)
|
|
(if (logtest? (water-flags swimming) (-> self water flags))
|
|
(go target-swim-stance)
|
|
(go target-stance)
|
|
)
|
|
)
|
|
(if (and (cpad-hold? (-> self control cpad number) l1) (can-duck?))
|
|
(go target-duck-stance #f)
|
|
)
|
|
(if (!= (-> *cpad-list* cpads (-> self control cpad number) stick0-speed) 0.0)
|
|
(go target-wade-walk)
|
|
)
|
|
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
|
|
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
|
|
)
|
|
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
|
|
)
|
|
(pad-buttons x)
|
|
)
|
|
(can-jump? #f)
|
|
)
|
|
(target-jump-go)
|
|
)
|
|
(when (and (cpad-pressed? (-> self control cpad number) circle) (can-feet? #t))
|
|
(sound-play "swim-stroke")
|
|
(spawn-ripples (-> self water) 1.4 (-> self control trans) 0 (-> self control transv) #f)
|
|
(go target-attack)
|
|
)
|
|
(if (and (cpad-pressed? (-> self control cpad number) square) (can-hands? #t))
|
|
(go target-running-attack)
|
|
)
|
|
(if (and (using-gun? self) (let ((v1-79 (ja-group)))
|
|
(and v1-79 (= v1-79 (-> self draw art-group data 5)))
|
|
)
|
|
)
|
|
(go target-gun-stance)
|
|
)
|
|
(none)
|
|
)
|
|
:code (-> target-stance code)
|
|
:post target-post
|
|
)
|
|
|
|
(defstate target-wade-walk (target)
|
|
:event target-standard-event-handler
|
|
:enter (behavior ()
|
|
((-> target-wade-stance enter))
|
|
(none)
|
|
)
|
|
:exit (-> target-wade-stance exit)
|
|
:trans (behavior ()
|
|
((-> self state-hook))
|
|
(when (and (not (logtest? (water-flags wading) (-> self water flags)))
|
|
(>= (- (-> self clock frame-counter) (-> self water wade-time)) (seconds 0.1))
|
|
)
|
|
(if (logtest? (water-flags swimming) (-> self water flags))
|
|
(go target-swim-stance)
|
|
(go target-stance)
|
|
)
|
|
)
|
|
(if (= (-> *cpad-list* cpads (-> self control cpad number) stick0-speed) 0.0)
|
|
(go target-wade-stance)
|
|
)
|
|
(if (and (cpad-hold? (-> self control cpad number) l1) (can-duck?))
|
|
(go target-duck-walk #f)
|
|
)
|
|
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
|
|
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
|
|
)
|
|
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
|
|
)
|
|
(pad-buttons x)
|
|
)
|
|
(can-jump? #f)
|
|
)
|
|
(target-jump-go)
|
|
)
|
|
(when (and (cpad-pressed? (-> self control cpad number) circle) (can-feet? #t))
|
|
(sound-play "swim-stroke")
|
|
(spawn-ripples (-> self water) 1.4 (-> self control trans) 0 (-> self control transv) #f)
|
|
(go target-attack)
|
|
)
|
|
(if (and (cpad-pressed? (-> self control cpad number) square) (can-hands? #t))
|
|
(go target-running-attack)
|
|
)
|
|
(none)
|
|
)
|
|
:code (behavior ()
|
|
(let ((gp-0 105)
|
|
(f30-0 0.0)
|
|
)
|
|
(let ((v1-2 (ja-group)))
|
|
(cond
|
|
((and v1-2 (or (= v1-2 (-> self draw art-group data 12)) (= v1-2 (-> self draw art-group data 7))))
|
|
(set! gp-0 15)
|
|
(set! f30-0 (ja-frame-num 0))
|
|
)
|
|
((let ((v1-9 (ja-group)))
|
|
(and v1-9 (or (= v1-9 (-> self draw art-group data 23)) (= v1-9 (-> self draw art-group data 27))))
|
|
)
|
|
(set! gp-0 30)
|
|
)
|
|
((let ((v1-16 (ja-group)))
|
|
(and v1-16 (= v1-16 (-> self draw art-group data 97)))
|
|
)
|
|
(set! gp-0 120)
|
|
)
|
|
)
|
|
)
|
|
(cond
|
|
((and (= (ja-group-size) 6) (let ((v1-25 (ja-group)))
|
|
(and v1-25 (= v1-25 (-> self draw art-group data 94)))
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(ja-channel-push! 6 (the-as time-frame gp-0))
|
|
(ja :group! (-> self draw art-group data 94)
|
|
:num! (identity f30-0)
|
|
:dist (-> *TARGET-bank* wade-shallow-walk-cycle-dist)
|
|
)
|
|
(ja :chan 1
|
|
:group! (-> self draw art-group data 95)
|
|
:num! (identity f30-0)
|
|
:dist (-> *TARGET-bank* wade-deep-walk-cycle-dist)
|
|
)
|
|
(let ((gp-3 (-> self skel root-channel 2)))
|
|
(let ((f0-2 0.0))
|
|
(set! (-> gp-3 frame-interp 1) f0-2)
|
|
(set! (-> gp-3 frame-interp 0) f0-2)
|
|
)
|
|
(set! (-> gp-3 dist) (-> *TARGET-bank* walk-cycle-dist))
|
|
(joint-control-channel-group-eval!
|
|
gp-3
|
|
(the-as art-joint-anim (-> self draw art-group data 12))
|
|
num-func-identity
|
|
)
|
|
(set! (-> gp-3 frame-num) f30-0)
|
|
)
|
|
(let ((gp-4 (-> self skel root-channel 3)))
|
|
(let ((f0-4 0.0))
|
|
(set! (-> gp-4 frame-interp 1) f0-4)
|
|
(set! (-> gp-4 frame-interp 0) f0-4)
|
|
)
|
|
(set! (-> gp-4 dist) (-> *TARGET-bank* walk-down-cycle-dist))
|
|
(joint-control-channel-group-eval!
|
|
gp-4
|
|
(the-as art-joint-anim (-> self draw art-group data 14))
|
|
num-func-identity
|
|
)
|
|
(set! (-> gp-4 frame-num) f30-0)
|
|
)
|
|
(let ((gp-5 (-> self skel root-channel 4)))
|
|
(let ((f0-6 0.0))
|
|
(set! (-> gp-5 frame-interp 1) f0-6)
|
|
(set! (-> gp-5 frame-interp 0) f0-6)
|
|
)
|
|
(set! (-> gp-5 dist) (-> *TARGET-bank* walk-side-cycle-dist))
|
|
(joint-control-channel-group-eval!
|
|
gp-5
|
|
(the-as art-joint-anim (-> self draw art-group data 16))
|
|
num-func-identity
|
|
)
|
|
(set! (-> gp-5 frame-num) f30-0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> self skel root-channel 2 command) (joint-control-command push))
|
|
(set! (-> self skel root-channel 5 command) (joint-control-command stack))
|
|
(let ((f28-0 0.0)
|
|
(f26-0 0.0)
|
|
(f30-1 (lerp-scale 1.0 0.0 (-> self control unknown-float05) 16384.0 32768.0))
|
|
(gp-6 0)
|
|
)
|
|
(until #f
|
|
(let ((f0-10 (fmax -1.0 (fmin 1.0 (* 2.0 (-> self control unknown-float17)))))
|
|
(f24-0 (fmax -1.0 (fmin 1.0 (* 1.6 (-> self control unknown-float18)))))
|
|
)
|
|
(let ((f1-4 (fabs (- f0-10 f28-0))))
|
|
(set! f28-0 (seek f28-0 f0-10 (fmax 0.05 (fmin 0.2 (* 0.25 f1-4)))))
|
|
)
|
|
(let ((f0-14 (fabs (- f24-0 f26-0))))
|
|
(set! f26-0 (seek f26-0 f24-0 (fmax 0.05 (fmin 0.2 (* 0.25 f0-14)))))
|
|
)
|
|
)
|
|
(ja :chan 3 :group! (-> self draw art-group data 14) :dist (-> *TARGET-bank* walk-down-cycle-dist))
|
|
(cond
|
|
((>= f28-0 0.0)
|
|
(let ((v1-83 (-> self skel root-channel 3)))
|
|
(let ((f0-20 (fabs f28-0)))
|
|
(set! (-> v1-83 frame-interp 1) f0-20)
|
|
(set! (-> v1-83 frame-interp 0) f0-20)
|
|
)
|
|
(set! (-> v1-83 dist) (-> *TARGET-bank* walk-up-cycle-dist))
|
|
(set! (-> v1-83 frame-group) (the-as art-joint-anim (-> self draw art-group data 13)))
|
|
)
|
|
)
|
|
(else
|
|
(let ((v1-86 (-> self skel root-channel 3)))
|
|
(let ((f0-22 (fabs f28-0)))
|
|
(set! (-> v1-86 frame-interp 1) f0-22)
|
|
(set! (-> v1-86 frame-interp 0) f0-22)
|
|
)
|
|
(set! (-> v1-86 dist) (-> *TARGET-bank* walk-down-cycle-dist))
|
|
(set! (-> v1-86 frame-group) (the-as art-joint-anim (-> self draw art-group data 14)))
|
|
)
|
|
)
|
|
)
|
|
(cond
|
|
((>= f26-0 0.0)
|
|
(let ((v1-89 (-> self skel root-channel 4)))
|
|
(let ((f0-25 (fabs f26-0)))
|
|
(set! (-> v1-89 frame-interp 1) f0-25)
|
|
(set! (-> v1-89 frame-interp 0) f0-25)
|
|
)
|
|
(set! (-> v1-89 dist) (-> *TARGET-bank* walk-side-cycle-dist))
|
|
(set! (-> v1-89 frame-group) (the-as art-joint-anim (-> self draw art-group data 15)))
|
|
)
|
|
)
|
|
(else
|
|
(let ((v1-92 (-> self skel root-channel 4)))
|
|
(let ((f0-27 (fabs f26-0)))
|
|
(set! (-> v1-92 frame-interp 1) f0-27)
|
|
(set! (-> v1-92 frame-interp 0) f0-27)
|
|
)
|
|
(set! (-> v1-92 dist) (-> *TARGET-bank* walk-side-cycle-dist))
|
|
(set! (-> v1-92 frame-group) (the-as art-joint-anim (-> self draw art-group data 16)))
|
|
)
|
|
)
|
|
)
|
|
(let* ((f0-30 (- (-> self water height) (-> self control trans y)))
|
|
(f24-1
|
|
(lerp-scale
|
|
0.0
|
|
1.0
|
|
f0-30
|
|
(lerp (-> self water wade-height) (-> self water swim-height) 0.25)
|
|
(lerp (-> self water wade-height) (-> self water swim-height) 0.75)
|
|
)
|
|
)
|
|
)
|
|
(let ((v1-100 (-> self skel effect)))
|
|
(set! (-> v1-100 channel-offset) (if (< 0.5 f24-1)
|
|
1
|
|
0
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(set! f30-1
|
|
(seek
|
|
f30-1
|
|
(lerp-scale 1.0 0.0 (-> self control unknown-float05) 16384.0 32768.0)
|
|
(* 4.0 (-> self clock seconds-per-frame))
|
|
)
|
|
)
|
|
(let ((v1-107 (-> self skel root-channel 1)))
|
|
(set! (-> v1-107 frame-interp 1) f24-1)
|
|
(set! (-> v1-107 frame-interp 0) f24-1)
|
|
)
|
|
(ja :num! (loop!
|
|
(/ (-> self control unknown-float05)
|
|
(* 60.0
|
|
(/ (* (current-cycle-distance (-> self skel)) (-> self control scale x)) (-> *TARGET-bank* run-cycle-length))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(let ((s5-3 (-> self skel root-channel 5))
|
|
(f0-44 (lerp f30-1 0.0 f24-1))
|
|
)
|
|
(set! (-> s5-3 frame-interp 1) f0-44)
|
|
(set! (-> s5-3 frame-interp 0) f0-44)
|
|
)
|
|
)
|
|
(ja :chan 1 :num! (chan 0))
|
|
(ja :chan 2 :num! (chan 0))
|
|
(ja :chan 3 :num! (chan 0))
|
|
(ja :chan 4 :num! (chan 0))
|
|
(when (and (>= (- (-> self clock frame-counter) (the-as time-frame gp-6)) (seconds 0.2))
|
|
(< (- (-> self water height) (-> self control trans y)) 4096.0)
|
|
)
|
|
(case (the int (ja-aframe-num 0))
|
|
((15 16 17 18)
|
|
(spawn-ripples
|
|
(-> self water)
|
|
0.2
|
|
(vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 39))
|
|
0
|
|
(vector-float*! (new 'stack-no-clear 'vector) (-> self control transv) 2.5)
|
|
#f
|
|
)
|
|
(set! gp-6 (the-as int (-> self clock frame-counter)))
|
|
)
|
|
((46 47 48 49)
|
|
(spawn-ripples
|
|
(-> self water)
|
|
0.2
|
|
(vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 32))
|
|
0
|
|
(vector-float*! (new 'stack-no-clear 'vector) (-> self control transv) 2.5)
|
|
#f
|
|
)
|
|
(set! gp-6 (the-as int (-> self clock frame-counter)))
|
|
)
|
|
)
|
|
)
|
|
(suspend)
|
|
)
|
|
)
|
|
#f
|
|
(none)
|
|
)
|
|
:post target-post
|
|
)
|
|
|
|
(defbehavior target-swim-tilt target ((arg0 float) (arg1 float) (arg2 float) (arg3 float))
|
|
(let ((gp-0 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self control quat-for-control))))
|
|
(let ((v1-2 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self control dir-targ)))
|
|
(f0-1
|
|
(fmin 1.0 (* arg0 (/ (-> self control unknown-float05) (-> self control unknown-surface01 target-speed))))
|
|
)
|
|
)
|
|
(seek!
|
|
(-> self control unknown-float43)
|
|
(fmax (fmin (* (+ f0-1 arg2) (fmax 0.5 (+ 0.5 (vector-dot gp-0 v1-2)))) arg3) (- arg3))
|
|
(* arg1 (-> self clock seconds-per-frame))
|
|
)
|
|
)
|
|
(let ((a2-2 (vector-y-quaternion! (new 'stack-no-clear 'vector) (-> self control quat-for-control))))
|
|
(forward-up-nopitch->quaternion (-> self control override-quat) gp-0 a2-2)
|
|
)
|
|
)
|
|
(quaternion-rotate-x!
|
|
(-> self control override-quat)
|
|
(-> self control override-quat)
|
|
(if (>= (-> self control unknown-float43) 0.0)
|
|
16384.0
|
|
-16384.0
|
|
)
|
|
)
|
|
(set! (-> self control override-quat-alpha) (fabs (-> self control unknown-float43)))
|
|
(if (and (-> self next-state) (= (-> self next-state name) 'target-swim-down))
|
|
(seek! (-> self control unknown-float001) -6144.0 (* 4096.0 (-> self clock seconds-per-frame)))
|
|
(seek! (-> self control unknown-float001) 0.0 (* 2048.0 (-> self clock seconds-per-frame)))
|
|
)
|
|
(set! (-> self control draw-offset y) (-> self control unknown-float001))
|
|
)
|
|
|
|
(defstate target-swim-stance (target)
|
|
:event target-standard-event-handler
|
|
:enter (behavior ()
|
|
(set! (-> self state-time) (-> self clock frame-counter))
|
|
(set! (-> self control unknown-surface00) *swim-mods*)
|
|
(logior! (-> self water flags) (water-flags swim-ground))
|
|
(set! (-> self state-flags) (logior (state-flags lleg-no-ik rleg-no-ik) (-> self state-flags)))
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(target-state-hook-exit)
|
|
(set! (-> self control unknown-surface00 target-speed) 28672.0)
|
|
(target-exit)
|
|
(when (not (and (-> self next-state) (let ((v1-6 (-> self next-state name)))
|
|
(or (= v1-6 'target-swim-stance)
|
|
(= v1-6 'target-swim-walk)
|
|
(= v1-6 'target-swim-down)
|
|
(= v1-6 'target-swim-up)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(quaternion-identity! (-> self control override-quat))
|
|
(set! (-> self control override-quat-alpha) 0.0)
|
|
)
|
|
(when (not (and (-> self next-state) (let ((v1-14 (-> self next-state name)))
|
|
(or (= v1-14 'target-swim-stance) (= v1-14 'target-swim-walk))
|
|
)
|
|
)
|
|
)
|
|
(let ((v1-15 (the-as sound-rpc-set-param (get-sound-buffer-entry))))
|
|
(set! (-> v1-15 command) (sound-command set-param))
|
|
(set! (-> v1-15 id) (-> self control unknown-sound-id02))
|
|
(set! (-> v1-15 params volume) -4)
|
|
(set! (-> v1-15 auto-time) 960)
|
|
(set! (-> v1-15 auto-from) 2)
|
|
(set! (-> v1-15 params mask) (the-as uint 17))
|
|
(-> v1-15 id)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
((-> self state-hook))
|
|
(if (and (logtest? (-> self control status) (collide-status on-surface))
|
|
(zero? (logand (-> self control status) (collide-status on-water)))
|
|
)
|
|
(set-zero! (-> self water bob))
|
|
)
|
|
(when (and (not (logtest? (water-flags swimming) (-> self water flags)))
|
|
(>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.1))
|
|
)
|
|
(if (logtest? (water-flags wading) (-> self water flags))
|
|
(go target-wade-stance)
|
|
(go target-stance)
|
|
)
|
|
)
|
|
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
|
|
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
|
|
)
|
|
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
|
|
)
|
|
(pad-buttons x)
|
|
)
|
|
(can-jump? #f)
|
|
(>= (- (-> self clock frame-counter) (-> self water enter-swim-time)) (seconds 0.1))
|
|
)
|
|
(go target-swim-jump (-> *TARGET-bank* swim-jump-height-min) (-> *TARGET-bank* swim-jump-height-max))
|
|
)
|
|
(when (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
|
|
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
|
|
)
|
|
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
|
|
)
|
|
(pad-buttons circle square)
|
|
)
|
|
(< (-> *TARGET-bank* min-dive-depth) (target-height-above-ground))
|
|
)
|
|
(spawn-ripples (-> self water) 0.7 (-> self control trans) 1 *null-vector* #t)
|
|
(set! (-> self control unknown-float43) 0.0)
|
|
(go target-swim-down)
|
|
)
|
|
(if (and (!= (-> *cpad-list* cpads (-> self control cpad number) stick0-speed) 0.0)
|
|
(let ((gp-0 (ja-group)))
|
|
(ja-aframe-num 0)
|
|
(if (or (and (= gp-0 (-> self draw art-group data 101)) #t) (and (= gp-0 (-> self draw art-group data 100)) #t))
|
|
#f
|
|
#t
|
|
)
|
|
)
|
|
)
|
|
(go target-swim-walk)
|
|
)
|
|
(target-swim-tilt 0.0 2.0 0.0 1.0)
|
|
(sound-play "swim-bubbles" :id (-> self control unknown-sound-id02))
|
|
(none)
|
|
)
|
|
:code (behavior ()
|
|
(let ((v1-2 (ja-group)))
|
|
(cond
|
|
((and v1-2 (or (= v1-2 (-> self draw art-group data 101)) (= v1-2 (-> self draw art-group data 100))))
|
|
(ja-channel-push! 1 (seconds 0.075))
|
|
(ja-no-eval :group! (-> self draw art-group data 102)
|
|
:num! (seek!
|
|
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 102)) frames num-frames) -1))
|
|
(if (= (-> *cpad-list* cpads (-> self control cpad number) stick0-speed) 0.0)
|
|
1.0
|
|
2.0
|
|
)
|
|
)
|
|
:frame-num 0.0
|
|
)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(let ((a0-9 (-> self skel root-channel 0)))
|
|
(set! (-> a0-9 param 0) (the float (+ (-> a0-9 frame-group frames num-frames) -1)))
|
|
(let ((v1-38 (if (= (-> *cpad-list* cpads (-> self control cpad number) stick0-speed) 0.0)
|
|
1.0
|
|
2.0
|
|
)
|
|
)
|
|
)
|
|
(set! (-> a0-9 param 1) v1-38)
|
|
)
|
|
(joint-control-channel-group-eval! a0-9 (the-as art-joint-anim #f) num-func-seek!)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(let ((v1-43 (ja-group)))
|
|
(if (and v1-43 (= v1-43 (-> self draw art-group data 97)))
|
|
(ja-channel-push! 1 (seconds 0.83))
|
|
(ja-channel-push! 1 (seconds 0.15))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(until #f
|
|
(ja :group! (-> self draw art-group data 96) :num! min)
|
|
(until (and (ja-done? 0) (= (-> self skel root-channel 0) (-> self skel channel)))
|
|
(can-play-stance-amibent?)
|
|
(suspend)
|
|
(if (= (-> self skel root-channel 0) (-> self skel channel))
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
)
|
|
#f
|
|
(none)
|
|
)
|
|
:post target-swim-post
|
|
)
|
|
|
|
(defstate target-swim-walk (target)
|
|
:event target-standard-event-handler
|
|
:enter (behavior ()
|
|
((-> target-swim-stance enter))
|
|
(die-on-next-update! (-> self water bob))
|
|
(set! (-> self control unknown-word04) (the-as uint (-> self clock frame-counter)))
|
|
(set! (-> self state-flags) (logior (state-flags lleg-no-ik rleg-no-ik) (-> self state-flags)))
|
|
(none)
|
|
)
|
|
:exit (-> target-swim-stance exit)
|
|
:trans (behavior ()
|
|
((-> self state-hook))
|
|
(if (and (logtest? (-> self control status) (collide-status on-surface))
|
|
(zero? (logand (-> self control status) (collide-status on-water)))
|
|
)
|
|
(set-zero! (-> self water bob))
|
|
)
|
|
(when (and (not (logtest? (water-flags swimming) (-> self water flags)))
|
|
(>= (- (-> self clock frame-counter) (-> self water swim-time)) (seconds 0.1))
|
|
)
|
|
(if (logtest? (water-flags wading) (-> self water flags))
|
|
(go target-wade-stance)
|
|
(go target-stance)
|
|
)
|
|
)
|
|
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
|
|
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
|
|
)
|
|
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
|
|
)
|
|
(pad-buttons x)
|
|
)
|
|
(can-jump? #f)
|
|
(>= (- (-> self clock frame-counter) (-> self water enter-swim-time)) (seconds 0.1))
|
|
)
|
|
(go target-swim-jump (-> *TARGET-bank* swim-jump-height-min) (-> *TARGET-bank* swim-jump-height-max))
|
|
)
|
|
(when (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control cpad number) button0-rel 0)
|
|
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 1)
|
|
)
|
|
(-> *cpad-list* cpads (-> self control cpad number) button0-rel 2)
|
|
)
|
|
(pad-buttons circle square)
|
|
)
|
|
(< (-> *TARGET-bank* min-dive-depth) (target-height-above-ground))
|
|
)
|
|
(spawn-ripples (-> self water) 0.7 (-> self control trans) 1 *null-vector* #t)
|
|
(set! (-> self control unknown-float43) 0.0)
|
|
(go target-swim-down)
|
|
)
|
|
(cond
|
|
((= (-> *cpad-list* cpads (-> self control cpad number) stick0-speed) 0.0)
|
|
(if (>= (the-as uint (- (-> self clock frame-counter) (the-as int (-> self control unknown-word04))))
|
|
(the-as uint 15)
|
|
)
|
|
(go target-swim-stance)
|
|
)
|
|
)
|
|
(else
|
|
(set! (-> self control unknown-word04) (the-as uint (-> self clock frame-counter)))
|
|
)
|
|
)
|
|
(target-swim-tilt 0.0 2.0 0.0 1.0)
|
|
(sound-play "swim-bubbles" :id (-> self control unknown-sound-id02))
|
|
(none)
|
|
)
|
|
:code (behavior ()
|
|
(let ((v1-2 (ja-group)))
|
|
(cond
|
|
((and v1-2 (or (= v1-2 (-> self draw art-group data 101))
|
|
(= v1-2 (-> self draw art-group data 100))
|
|
(= v1-2 (-> self draw art-group data 102))
|
|
)
|
|
)
|
|
(ja-channel-push! 1 (seconds 0.3))
|
|
)
|
|
((let ((v1-8 (ja-group)))
|
|
(and v1-8 (= v1-8 (-> self draw art-group data 102)))
|
|
)
|
|
(ja-channel-push! 1 (seconds 0.15))
|
|
(ja-no-eval :group! (-> self draw art-group data 97)
|
|
:num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 97)) frames num-frames) -1)))
|
|
:frame-num (ja-aframe 19.0 0)
|
|
)
|
|
(until (ja-done? 0)
|
|
(compute-alignment! (-> self align))
|
|
(if (not (logtest? (-> self align flags) (align-flags disabled)))
|
|
(set! (-> self control unknown-surface00 target-speed)
|
|
(* (-> self align delta trans z) (-> self control unknown-surface01 alignv) (-> self clock frames-per-second))
|
|
)
|
|
)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
(else
|
|
(ja-channel-push! 1 (seconds 0.15))
|
|
)
|
|
)
|
|
)
|
|
(until #f
|
|
(ja-no-eval :group! (-> self draw art-group data 97)
|
|
:num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 97)) frames num-frames) -1)))
|
|
:frame-num 0.0
|
|
)
|
|
(until (ja-done? 0)
|
|
(compute-alignment! (-> self align))
|
|
(if (not (logtest? (-> self align flags) (align-flags disabled)))
|
|
(set! (-> self control unknown-surface00 target-speed)
|
|
(* (-> self align delta trans z) (-> self control unknown-surface01 alignv) (-> self clock frames-per-second))
|
|
)
|
|
)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
#f
|
|
(none)
|
|
)
|
|
:post target-swim-post
|
|
)
|
|
|
|
(defstate target-swim-down (target)
|
|
:event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block))
|
|
(local-vars (t0-7 symbol))
|
|
(case event-type
|
|
(('attack 'attack-invinc 'attack-or-shove)
|
|
(let ((v1-1 (the-as attack-info (-> event param 1))))
|
|
(set! t0-7 (or (not (logtest? (-> v1-1 mask) (attack-info-mask mode)))
|
|
(case (-> v1-1 mode)
|
|
(('bot 'lava 'melt 'dark-eco-pool)
|
|
#f
|
|
)
|
|
(('drown-death 'sharkey 'instant-death 'crush 'death 'grenade 'endlessfall)
|
|
(set! t0-7 'drown-death)
|
|
(set! (-> v1-1 mode) t0-7)
|
|
t0-7
|
|
)
|
|
(else
|
|
#t
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when t0-7
|
|
(if (not (logtest? (attack-info-mask damage) (-> v1-1 mask)))
|
|
(set! (-> v1-1 damage) (-> *FACT-bank* health-single-inc))
|
|
)
|
|
(if (!= (-> v1-1 mode) 'drown-death)
|
|
(set! (-> v1-1 mode) 'damage)
|
|
)
|
|
(if (and (= (-> self game mode) 'play)
|
|
(>= 0.0 (- (-> (the-as fact-info-target (-> self fact-override)) health) (-> v1-1 damage)))
|
|
)
|
|
(set! (-> v1-1 mode) 'drown-death)
|
|
)
|
|
(logior! (-> v1-1 mask) (attack-info-mask mode))
|
|
(set! (-> self control unknown-word04) (the-as uint #t))
|
|
)
|
|
)
|
|
)
|
|
(('slide)
|
|
)
|
|
)
|
|
(target-standard-event-handler proc arg1 event-type event)
|
|
)
|
|
:enter (behavior ()
|
|
(set! (-> self state-time) (-> self clock frame-counter))
|
|
(set! (-> self state-flags) (logior (state-flags lleg-no-ik rleg-no-ik) (-> self state-flags)))
|
|
(logclear! (-> self water flags) (water-flags swim-ground))
|
|
(set! (-> self control unknown-surface00) *dive-mods*)
|
|
(set! (-> self control dynam gravity-max) 16384.0)
|
|
(set! (-> self control dynam gravity-length) 16384.0)
|
|
(set! (-> self water swim-time) (-> self clock frame-counter))
|
|
(set! (-> self control unknown-word04) (the-as uint #f))
|
|
(set! (-> self neck flex-blend) 0.0)
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(set! (-> self control dynam gravity-max) (-> self control unknown-dynamics00 gravity-max))
|
|
(set! (-> self control dynam gravity-length) (-> self control unknown-dynamics00 gravity-length))
|
|
(target-exit)
|
|
(when (not (and (-> self next-state) (let ((v1-11 (-> self next-state name)))
|
|
(or (= v1-11 'target-swim-stance)
|
|
(= v1-11 'target-swim-walk)
|
|
(= v1-11 'target-swim-down)
|
|
(= v1-11 'target-swim-up)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(quaternion-identity! (-> self control override-quat))
|
|
(set! (-> self control override-quat-alpha) 0.0)
|
|
)
|
|
(when (not (and (-> self next-state) (let ((v1-19 (-> self next-state name)))
|
|
(or (= v1-19 'target-swim-down) (= v1-19 'target-swim-up))
|
|
)
|
|
)
|
|
)
|
|
(let ((v1-21 (the-as sound-rpc-set-param (get-sound-buffer-entry))))
|
|
(set! (-> v1-21 command) (sound-command set-param))
|
|
(set! (-> v1-21 id) (-> self control unknown-sound-id03))
|
|
(set! (-> v1-21 params volume) -4)
|
|
(set! (-> v1-21 auto-time) 960)
|
|
(set! (-> v1-21 auto-from) 2)
|
|
(set! (-> v1-21 params mask) (the-as uint 17))
|
|
(-> v1-21 id)
|
|
)
|
|
)
|
|
(set! (-> self neck flex-blend) 1.0)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(if (>= (- (-> self clock frame-counter) (-> self water swim-time)) (seconds 0.5))
|
|
(go target-stance)
|
|
)
|
|
(cond
|
|
((>= (- (-> self clock frame-counter) (-> self control unknown-time-frame06)) (seconds 0.1))
|
|
(set! (-> self control unknown-surface00) *dive-mods*)
|
|
(if (and (-> self next-state) (= (-> self next-state name) 'target-swim-down))
|
|
(target-swim-tilt -0.9 1.0 0.0 0.5)
|
|
)
|
|
)
|
|
(else
|
|
(set! (-> self control unknown-surface00) *dive-bottom-mods*)
|
|
(if (and (-> self next-state) (let ((v1-18 (-> self next-state name)))
|
|
(or (= v1-18 'target-swim-down) (= v1-18 'target-swim-stance))
|
|
)
|
|
)
|
|
(target-swim-tilt 0.0 2.0 -1.0 1.0)
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:code (behavior ()
|
|
(let ((gp-0 60)
|
|
(s5-0 3000)
|
|
(f30-0 0.0)
|
|
)
|
|
(let ((v1-2 (ja-group)))
|
|
(set! f30-0
|
|
(cond
|
|
((and v1-2
|
|
(or (= v1-2 (-> self draw art-group data 96))
|
|
(= v1-2 (-> self draw art-group data 97))
|
|
(= v1-2 (-> self draw art-group data 102))
|
|
(= v1-2 (-> self draw art-group data 101))
|
|
(= v1-2 (-> self draw art-group data 100))
|
|
)
|
|
)
|
|
(let ((t9-0 ja-channel-push!)
|
|
(a0-16 1)
|
|
(v1-7 (ja-group))
|
|
)
|
|
(t9-0 a0-16 (the-as time-frame (if (and v1-7 (= v1-7 (-> self draw art-group data 100)))
|
|
105
|
|
22
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(ja-no-eval :group! (-> self draw art-group data 98)
|
|
:num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 98)) frames num-frames) -1)))
|
|
:frame-num 0.0
|
|
)
|
|
(until (ja-done? 0)
|
|
(compute-alignment! (-> self align))
|
|
(align! (-> self align) (align-opts adjust-y-vel adjust-xz-vel) 1.0 1.0 1.0)
|
|
(if (= (ja-aframe-num 0) 73.0)
|
|
(spawn-ripples (-> self water) 0.7 (-> self control trans) 1 *null-vector* #f)
|
|
)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
(ja :group! (-> self draw art-group data 99) :num! min)
|
|
f30-0
|
|
)
|
|
(else
|
|
(let ((v1-50 (ja-group)))
|
|
(cond
|
|
((and v1-50 (or (= v1-50 (-> self draw art-group data 52))
|
|
(= v1-50 (-> self draw art-group data 55))
|
|
(= v1-50 (-> self draw art-group data 53))
|
|
(= v1-50 (-> self draw art-group data 56))
|
|
)
|
|
)
|
|
(ja-channel-push! 1 (seconds 0.075))
|
|
(set! gp-0 120)
|
|
(ja :group! (-> self draw art-group data 99) :num! (identity (ja-aframe 124.0 0)))
|
|
-16384.0
|
|
)
|
|
(else
|
|
(ja-channel-push! 1 (seconds 0.075))
|
|
(ja :group! (-> self draw art-group data 99) :num! min)
|
|
f30-0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(until #f
|
|
(when (and (!= (-> self tobot?) 'tobot) (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.05)))
|
|
(if (and (or (not (cpad-hold? (-> self control cpad number) circle square)) (-> self control unknown-spool-anim00))
|
|
(>= (- (-> self clock frame-counter) (-> self state-time)) gp-0)
|
|
)
|
|
(go target-swim-up)
|
|
)
|
|
(if (or (>= (- (-> self clock frame-counter) (-> self control unknown-time-frame27)) s5-0)
|
|
(and (logtest? (-> self control status) (collide-status on-surface))
|
|
(and (< (-> self water swim-depth) 8192.0) (>= (- (-> self clock frame-counter) (-> self state-time)) gp-0))
|
|
)
|
|
)
|
|
(go target-swim-up)
|
|
)
|
|
)
|
|
(if (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.5))
|
|
(sound-play "water-bubbles" :id (-> self control unknown-sound-id03))
|
|
)
|
|
(let ((s4-3 (new-stack-vector0))
|
|
(f0-13 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
|
|
)
|
|
0.0
|
|
(vector-! s4-3 (-> self control transv) (vector-float*! s4-3 (-> self control dynam gravity-normal) f0-13))
|
|
(let* ((f28-0 (vector-length s4-3))
|
|
(f26-0 f28-0)
|
|
(f24-0 (+ f0-13 f30-0))
|
|
)
|
|
(set! f30-0 (seek f30-0 0.0 (* 32768.0 (-> self clock seconds-per-frame))))
|
|
(vector+!
|
|
(-> self control transv)
|
|
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f24-0)
|
|
(vector-float*! s4-3 s4-3 (/ f28-0 f26-0))
|
|
)
|
|
)
|
|
)
|
|
(suspend)
|
|
(ja :num! (loop! (lerp-scale 0.4 1.0 (vector-length (-> self control transv)) 0.0 16384.0)))
|
|
)
|
|
)
|
|
#f
|
|
(none)
|
|
)
|
|
:post target-swim-post
|
|
)
|
|
|
|
(defstate target-swim-up (target)
|
|
:event (-> target-swim-down event)
|
|
:enter (behavior ()
|
|
((-> target-swim-down enter))
|
|
(none)
|
|
)
|
|
:exit (-> target-swim-down exit)
|
|
:trans (behavior ()
|
|
(if (and (cpad-pressed? (-> self control cpad number) x)
|
|
(not (logtest? (-> self state-flags) (state-flags sf7)))
|
|
(zero? (logand (water-flags head-under-water bouncing) (-> self water flags)))
|
|
)
|
|
(go
|
|
target-swim-jump-jump
|
|
(-> *TARGET-bank* swim-jump-height-min)
|
|
(-> *TARGET-bank* swim-jump-height-max)
|
|
(the-as surface #f)
|
|
)
|
|
)
|
|
(when (and (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 10))
|
|
(< (target-move-dist (-> *TARGET-bank* stuck-time)) (-> *TARGET-bank* stuck-distance))
|
|
)
|
|
(let ((a1-3 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-3 from) (process->ppointer self))
|
|
(set! (-> a1-3 num-params) 2)
|
|
(set! (-> a1-3 message) 'attack)
|
|
(set! (-> a1-3 param 0) (the-as uint #f))
|
|
(let ((v1-27 (new 'static 'attack-info :mask (attack-info-mask mode id))))
|
|
(let* ((a0-8 *game-info*)
|
|
(a2-2 (+ (-> a0-8 attack-id) 1))
|
|
)
|
|
(set! (-> a0-8 attack-id) a2-2)
|
|
(set! (-> v1-27 id) a2-2)
|
|
)
|
|
(set! (-> v1-27 mode) 'drown-death)
|
|
(set! (-> a1-3 param 1) (the-as uint v1-27))
|
|
)
|
|
(send-event-function self a1-3)
|
|
)
|
|
)
|
|
(if (and (cpad-pressed? (-> self control cpad number) circle square)
|
|
(or (< (- (-> self clock frame-counter) (-> self control unknown-time-frame27)) (seconds 10))
|
|
(logtest? (-> self control status) (collide-status touch-ceiling))
|
|
)
|
|
(and (< (-> *TARGET-bank* min-dive-depth) (target-height-above-ground))
|
|
(>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.05))
|
|
)
|
|
)
|
|
(go target-swim-down)
|
|
)
|
|
(sound-play "water-bubbles" :id (-> self control unknown-sound-id03))
|
|
((-> target-swim-down trans))
|
|
(none)
|
|
)
|
|
:code (behavior ()
|
|
(ja-channel-push! 1 (seconds 0.1))
|
|
(let ((f30-0 1.0))
|
|
(let ((s5-0 #t)
|
|
(gp-0 #f)
|
|
)
|
|
(ja-no-eval :group! (-> self draw art-group data 100)
|
|
:num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 100)) frames num-frames) -1)))
|
|
:frame-num 0.0
|
|
)
|
|
(until (ja-done? 0)
|
|
(target-swim-tilt
|
|
(if (< 8192.0 (-> self water swim-depth))
|
|
0.5
|
|
0.0
|
|
)
|
|
1.0
|
|
0.0
|
|
0.1
|
|
)
|
|
(when (and (not gp-0)
|
|
(or (>= (ja-aframe-num 0) 240.0) (zero? (logand (water-flags head-under-water) (-> self water flags))))
|
|
)
|
|
(set! gp-0 #t)
|
|
(sound-play "swim-surface")
|
|
(spawn-ripples (-> self water) 0.2 (-> self control trans) 1 (-> self control transv) #t)
|
|
)
|
|
(if (and (not (logtest? (-> self water flags) (water-flags under-water)))
|
|
(and (or (>= (ja-aframe-num 0) 222.0)
|
|
(and (!= (-> *cpad-list* cpads (-> self control cpad number) stick0-speed) 0.0) (>= (ja-aframe-num 0) 200.0))
|
|
)
|
|
(!= (-> self tobot?) 'tobot)
|
|
)
|
|
)
|
|
(goto cfg-51)
|
|
)
|
|
(compute-alignment! (-> self align))
|
|
(when (not (logtest? (-> self water flags) (water-flags under-water)))
|
|
(logior! (-> self water flags) (water-flags swim-ground))
|
|
(set! s5-0 #f)
|
|
)
|
|
(if s5-0
|
|
(align! (-> self align) (align-opts adjust-y-vel) 1.0 1.0 1.0)
|
|
)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
(ja :group! (-> self draw art-group data 101) :num! min)
|
|
(until #f
|
|
(target-swim-tilt
|
|
(if (< 8192.0 (-> self water swim-depth))
|
|
0.3
|
|
0.0
|
|
)
|
|
1.0
|
|
0.0
|
|
0.1
|
|
)
|
|
(if (and (not (logtest? (-> self water flags) (water-flags under-water))) (!= (-> self tobot?) 'tobot))
|
|
(goto cfg-51)
|
|
)
|
|
(if (cpad-pressed? (-> self control cpad number) x)
|
|
(set! f30-0 2.0)
|
|
)
|
|
(compute-alignment! (-> self align))
|
|
(when (logtest? (-> self water flags) (water-flags under-water))
|
|
(align! (-> self align) (align-opts adjust-y-vel) 1.0 1.0 1.0)
|
|
(set! (-> self control transv y) (+ 8192.0 (* 8192.0 f30-0)))
|
|
)
|
|
(suspend)
|
|
(ja :num! (loop! f30-0))
|
|
(set! f30-0 (seek f30-0 1.0 (-> self clock seconds-per-frame)))
|
|
)
|
|
)
|
|
#f
|
|
(label cfg-51)
|
|
(logior! (-> self water flags) (water-flags swim-ground))
|
|
(set! (-> self water swim-time) (-> self clock frame-counter))
|
|
(start-bobbing! (-> self water) -4096.0 600 1500)
|
|
(set! (-> self water bob start-time) (+ (-> self clock frame-counter) (seconds -0.05)))
|
|
(go target-swim-stance)
|
|
(none)
|
|
)
|
|
:post target-swim-post
|
|
)
|
|
|
|
(defstate target-swim-jump-jump (target)
|
|
:event (-> target-jump event)
|
|
:enter (-> target-jump enter)
|
|
:exit target-exit
|
|
:trans (behavior ()
|
|
(cond
|
|
((< (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.5))
|
|
(set! (-> self water flags) (logior (water-flags jump-out) (-> self water flags)))
|
|
(logclear! (-> self control status) (collide-status on-surface on-ground touch-surface))
|
|
)
|
|
(else
|
|
(set! (-> self trans-hook) (-> target-jump trans))
|
|
)
|
|
)
|
|
((-> target-jump trans))
|
|
(none)
|
|
)
|
|
:code (-> target-jump code)
|
|
:post target-post
|
|
)
|
|
|
|
(defstate target-swim-jump (target)
|
|
:event target-standard-event-handler
|
|
:enter (-> target-swim-stance enter)
|
|
:exit (behavior ()
|
|
((-> target-swim-stance exit))
|
|
(die-on-next-update! (-> self water bob))
|
|
(set! (-> self water align-offset) 0.0)
|
|
(set! (-> self water flags) (logior (water-flags jump-out) (-> self water flags)))
|
|
(none)
|
|
)
|
|
:code (behavior ((arg0 float) (arg1 float))
|
|
(die-on-next-update! (-> self water bob))
|
|
(ja-channel-push! 1 (seconds 0.05))
|
|
(ja :group! (-> self draw art-group data 103) :num! min)
|
|
(until (and (ja-done? 0) (= (-> self skel root-channel 0) (-> self skel channel)))
|
|
(compute-alignment! (-> self align))
|
|
(if (not (logtest? (-> self align flags) (align-flags disabled)))
|
|
(+! (-> self water align-offset) (* 0.6 (-> self align delta trans y)))
|
|
)
|
|
(suspend)
|
|
(if (= (-> self skel root-channel 0) (-> self skel channel))
|
|
(ja :num! (seek! max 2.0))
|
|
)
|
|
)
|
|
(let ((f0-7 (fmax 0.0 (- (-> self water bob-offset)))))
|
|
(let ((v1-36 (new-stack-vector0)))
|
|
(let ((f1-5 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
|
|
0.0
|
|
(vector-! v1-36 (-> self control transv) (vector-float*! v1-36 (-> self control dynam gravity-normal) f1-5))
|
|
)
|
|
(let* ((f1-6 (vector-length v1-36))
|
|
(f2-2 f1-6)
|
|
(f3-0 0.4096)
|
|
)
|
|
(vector+!
|
|
(-> self control transv)
|
|
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f3-0)
|
|
(vector-float*! v1-36 v1-36 (/ f1-6 f2-2))
|
|
)
|
|
)
|
|
)
|
|
(go target-swim-jump-jump (+ f0-7 arg0) (+ f0-7 arg1) (the-as surface #f))
|
|
)
|
|
(none)
|
|
)
|
|
:post target-swim-post
|
|
)
|