jak-project/goal_src/levels/flut_common/target-flut.gc
Tyler Wilding b95be06fef
decomp: mostly finish ogreboss (#1024)
* decomp: partially done `ogreboss`

* decomp: finish `ogreboss`

* update

* fix `ogreboss` and `viewer`

* update ref tests

* update ogreboss
2022-01-15 20:33:11 -05:00

2752 lines
109 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: target-flut.gc
;; name in dgo: target-flut
;; dgos: L1, SNO, SWA
(define-extern target-flut-falling-anim-trans (function none :behavior target))
;; DECOMP BEGINS
(deftype flut-info (basic)
((entity basic :offset-assert 4)
(flut-trans vector :inline :offset-assert 16)
(flut-quat vector :inline :offset-assert 32)
(flut-scale vector :inline :offset-assert 48)
(stick-lock basic :offset-assert 64)
(flap-sound-id sound-id :offset-assert 68)
)
:method-count-assert 9
:size-assert #x48
:flag-assert #x900000048
)
(deftype flut-bank (basic)
((jump-height-min meters :offset-assert 4)
(jump-height-max meters :offset-assert 8)
(double-jump-height-min meters :offset-assert 12)
(double-jump-height-max meters :offset-assert 16)
(air-attack-speed meters :offset-assert 20)
(ground-timeout int64 :offset-assert 24)
)
:method-count-assert 9
:size-assert #x20
:flag-assert #x900000020
)
(define *FLUT-bank* (new 'static 'flut-bank
:jump-height-min (meters 5.0)
:jump-height-max (meters 7.0)
:double-jump-height-min (meters 1.0)
:double-jump-height-max (meters 2.0)
:air-attack-speed (meters 20.0)
:ground-timeout #x96
)
)
(define *flut-walk-mods* (new 'static 'surface
:name 'run
:turnv 54613.332
:turnvv 524288.0
:tiltv 65536.0
:tiltvv 131072.0
:transv-max 81920.0
:target-speed 81920.0
:seek0 1.5
:seek90 3.0
:seek180 2.0
:fric 1.0
:nonlin-fric-dist 0.1
: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
:flags #x8
)
)
(define *flut-jump-mods* (new 'static 'surface
:name 'jump
:turnv 131072.0
:turnvv 54613.332
:tiltv 32768.0
:tiltvv 131072.0
:transv-max 81920.0
:target-speed 81920.0
:seek0 0.9
:seek90 1.5
:seek180 1.5
: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
:mode 'air
:flags #x800
)
)
(define *flut-double-jump-mods* (new 'static 'surface
:name 'jump-double
:turnv 131072.0
:turnvv 54613.332
:tiltv 32768.0
:tiltvv 131072.0
:transv-max 81920.0
:target-speed 81920.0
:seek0 0.9
:seek90 1.5
:seek180 1.5
:fric 0.1
:nonlin-fric-dist 10.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
:mode 'air
:flags #x800
)
)
(define *flut-run-attack-mods* (new 'static 'surface
:name 'wheel-flip
:tiltv 32768.0
:tiltvv 131072.0
:transv-max 122880.0
: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
:mode 'attack
:flags #x1018
)
)
(define *flut-air-attack-mods* (new 'static 'surface
:name 'flop
:tiltv 32768.0
:tiltvv 131072.0
:transv-max 122880.0
:target-speed 122880.0
:seek0 1.0
:seek90 0.3
:seek180 1.5
: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
:mode 'attack
:flags #x1800
)
)
(defbehavior target-flut-post-post target ()
(vector+! (-> self flut flut-trans) (-> self control trans) (-> self control unknown-vector12))
(quaternion-copy! (the-as quaternion (-> self flut flut-quat)) (-> self control quat))
(set! (-> self flut flut-scale quad) (-> self control scale quad))
(let ((v1-8 (-> *target-shadow-control* settings shadow-dir quad)))
(set! (-> *flutflut-shadow-control* settings shadow-dir quad) v1-8)
)
0
(none)
)
(defbehavior target-flut-post target ()
(target-post)
(target-flut-post-post)
0
(none)
)
;; ERROR: function was not converted to expressions. Cannot decompile.
(defbehavior target-flut-hit-ground-anim target ()
(cond
((= (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
(-> self draw art-group data 144)
)
(if (!= (-> self skel root-channel 0) (-> self skel channel))
(ja-channel-push! 2 15)
(ja-channel-set! 2)
)
(let ((gp-0 (-> self skel root-channel 0)))
(joint-control-channel-group-eval!
gp-0
(the-as art-joint-anim (-> self draw art-group data 145))
num-func-identity
)
(set! (-> gp-0 frame-num) 0.0)
)
(let ((gp-1 (-> self skel root-channel 1)))
(joint-control-channel-group-eval!
gp-1
(the-as art-joint-anim (-> self draw art-group data 148))
num-func-identity
)
(set! (-> gp-1 frame-num) 0.0)
)
(until (ja-done? 0)
(suspend)
(let ((a0-11 (-> self skel root-channel 0)))
(set! (-> a0-11 param 0) (the float (+ (-> a0-11 frame-group data 0 length) -1)))
(set! (-> a0-11 param 1) 1.0)
(joint-control-channel-group-eval! a0-11 (the-as art-joint-anim #f) num-func-seek!)
)
(let ((a0-12 (-> self skel root-channel 1)))
(set! (-> a0-12 param 0) 0.0)
(joint-control-channel-group-eval! a0-12 (the-as art-joint-anim #f) num-func-chan)
)
)
#f
)
((let ((v1-33 (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
)
)
(or (= v1-33 (-> self draw art-group data 143)) (= v1-33 (-> self draw art-group data 145)))
)
#f
)
((= (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
(-> self draw art-group data 149)
)
(ja-channel-set! 1)
(let ((a0-26 (-> self skel root-channel 0)))
(set! (-> a0-26 frame-group) (the-as art-joint-anim (-> self draw art-group data 145)))
(set! (-> a0-26 param 0)
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 145)) data 0 length) -1))
)
(set! (-> a0-26 param 1) 1.0)
(set! (-> a0-26 frame-num) 0.0)
(joint-control-channel-group! a0-26 (the-as art-joint-anim (-> self draw art-group data 145)) num-func-seek!)
)
(until (ja-done? 0)
(suspend)
(let ((a0-27 (-> self skel root-channel 0)))
(set! (-> a0-27 param 0) (the float (+ (-> a0-27 frame-group data 0 length) -1)))
(set! (-> a0-27 param 1) 1.0)
(joint-control-channel-group-eval! a0-27 (the-as art-joint-anim #f) num-func-seek!)
)
)
#f
)
((let ((v1-68 (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
)
)
(or (= v1-68 (-> self draw art-group data 152)) (= v1-68 (-> self draw art-group data 153)))
)
(ja-channel-set! 1)
(let ((a0-37 (-> self skel root-channel 0)))
(set! (-> a0-37 frame-group) (the-as art-joint-anim (-> self draw art-group data 154)))
(set! (-> a0-37 param 0)
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 154)) data 0 length) -1))
)
(set! (-> a0-37 param 1) 1.0)
(set! (-> a0-37 frame-num) 0.0)
(joint-control-channel-group! a0-37 (the-as art-joint-anim (-> self draw art-group data 154)) num-func-seek!)
)
(until (ja-done? 0)
(TODO-RENAME-9 (-> self align))
(TODO-RENAME-10 (-> self align) 4 (the-as float 1.0) (the-as float 1.0) (the-as float 1.0))
(suspend)
(let ((a0-40 (-> self skel root-channel 0)))
(set! (-> a0-40 param 0) (the float (+ (-> a0-40 frame-group data 0 length) -1)))
(set! (-> a0-40 param 1) 1.0)
(joint-control-channel-group-eval! a0-40 (the-as art-joint-anim #f) num-func-seek!)
)
)
#f
)
)
)
(defbehavior target-flut-standard-event-handler target ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
(cond
((and (= arg2 'query) (= (-> arg3 param 0) 'mode))
'flut
)
(else
(case arg2
(('end-mode)
(go target-flut-get-off (process->handle arg0))
)
(('attack 'attack-or-shove 'attack-invinc)
(target-attacked
arg2
(the-as attack-info (-> arg3 param 1))
arg0
(the-as process (-> arg3 param 0))
(the-as (state handle attack-info target) target-flut-hit)
)
)
(('shove)
(when (!= (-> self next-state name) 'target-hit)
(mem-copy! (the-as pointer (-> self attack-info-rec)) (the-as pointer (-> arg3 param 1)) 104)
(when (zero? (logand (-> self attack-info-rec mask) 8))
(set! (-> self attack-info-rec attacker) (process->handle arg0))
(logior! (-> self attack-info-rec mask) 8)
)
(go target-flut-hit 'shove (-> self attack-info-rec))
)
)
(('falling)
(when #t
enter-state
(go target-flut-falling)
)
)
(('swim)
(let* ((gp-1 (-> self control last-known-safe-ground))
(s3-1 (vector-! (new 'stack-no-clear 'vector) gp-1 (-> self control trans)))
(f30-1 (fmax (-> (new 'static 'array float 1 8192.0) 0) (fmin 40960.0 (vector-xz-length s3-1))))
)
(vector-xz-normalize! s3-1 f30-1)
(let ((s5-0 (new 'stack-no-clear 'event-message-block)))
(set! (-> s5-0 from) self)
(set! (-> s5-0 num-params) 2)
(set! (-> s5-0 message) 'shove)
(set! (-> s5-0 param 0) (the-as uint #f))
(let ((s4-0 (new 'static 'attack-info :mask #x882)))
(set! (-> s4-0 vector quad) (-> s3-1 quad))
(set! (-> s4-0 shove-up) (+ (lerp-scale
(the-as float 4096.0)
(-> (new 'static 'array float 1 16384.0) 0)
f30-1
(the-as float 4096.0)
(the-as float 40960.0)
)
(fmax 0.0 (- (-> gp-1 y) (-> self control trans y)))
)
)
(set! (-> s4-0 angle) 'up)
(set! (-> s5-0 param 1) (the-as uint s4-0))
)
(send-event-function self s5-0)
)
)
)
(('change-mode)
(case (-> arg3 param 0)
(('grab)
(go target-flut-grab)
)
)
)
(('clone-anim)
(go target-flut-clone-anim (process->handle (the-as process (-> arg3 param 0))))
)
(else
(target-generic-event-handler arg0 arg1 arg2 arg3)
)
)
)
)
)
(defbehavior target-flut-dangerous-event-handler target ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
(case arg2
(('touched)
(if ((method-of-type touching-shapes-entry prims-touching?)
(the-as touching-shapes-entry (-> arg3 param 0))
(-> self control)
(the-as uint 224)
)
(target-send-attack
arg0
(the-as uint (-> self control unknown-symbol30))
(-> arg3 param 0)
(-> self control unknown-dword50)
(-> self control unknown-dword51)
)
(target-flut-standard-event-handler arg0 arg1 arg2 arg3)
)
)
(('attack 'attack-or-shove 'attack-invinc)
(target-attacked
arg2
(the-as attack-info (-> arg3 param 1))
arg0
(the-as process (-> arg3 param 0))
(the-as (state handle attack-info target) target-flut-hit)
)
)
(else
(target-flut-standard-event-handler arg0 arg1 arg2 arg3)
)
)
)
(defstate target-flut-start (target)
:event
target-flut-standard-event-handler
:exit
(behavior ()
(when (not (or (= (-> self next-state name) 'target-flut-stance)
(= (-> self next-state name) 'target-flut-walk)
(= (-> self next-state name) 'target-flut-jump)
(= (-> self next-state name) 'target-flut-double-jump)
(= (-> self next-state name) 'target-flut-hit-ground)
(= (-> self next-state name) 'target-flut-falling)
(= (-> self next-state name) 'target-flut-running-attack)
(= (-> self next-state name) 'target-flut-air-attack)
(= (-> self next-state name) 'target-flut-air-attack-hit-ground)
(= (-> self next-state name) 'target-flut-hit)
(= (-> self next-state name) 'target-flut-death)
(= (-> self next-state name) 'target-flut-get-on)
(= (-> self next-state name) 'target-flut-get-off)
(= (-> self next-state name) 'target-flut-get-off-jump)
(= (-> self next-state name) 'target-flut-grab)
(= (-> self next-state name) 'target-flut-clone-anim)
)
)
(let ((v1-33 (-> self manipy)))
(when v1-33
(deactivate (-> v1-33 0))
(set! (-> self manipy) (the-as (pointer manipy) #f))
)
)
(logclear! (-> self control root-prim prim-core action) (collide-action ca-14))
(set! (-> self control unknown-surface00) *walk-mods*)
(set! (-> self state-flags) (logand -1025 (-> self state-flags)))
(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-collide-set! 'normal (-> (new 'static 'array float 1 0.0) 0))
(set! (-> self control reaction) target-collision-reaction)
(set! (-> self control unknown-vector12 quad) (the-as uint128 0))
(clear-pending-settings-from-process *setting-control* self 'sound-flava)
(target-exit)
)
(none)
)
:code
(behavior ((arg0 handle))
(target-exit)
(set! *display-profile* #f)
(set! *display-entity-errors* #f)
(set-setting! *setting-control* self 'sound-flava #f (the-as float 30.0) 2)
(if (zero? (-> self flut))
(set! (-> self flut) (new 'process 'flut-info))
)
(set! (-> self flut stick-lock) #f)
(set! (-> self flut flap-sound-id) (new-sound-id))
(set! (-> self flut entity) #f)
(let ((v1-11 (handle->process arg0)))
(if v1-11
(set! (-> self flut entity) (-> v1-11 entity))
)
)
(target-collide-set! 'flut (-> (new 'static 'array float 1 0.0) 0))
(set! (-> self control transv quad) (the-as uint128 0))
(set! (-> self control unknown-float01) 0.0)
(logior! (-> self control root-prim prim-core action) (collide-action ca-14))
(let ((s5-0 (-> self entity)))
(set! (-> self entity) (the-as entity (-> self flut entity)))
(let ((s4-0 (get-process *default-dead-pool* manipy #x4000)))
(set! (-> self manipy)
(the-as (pointer manipy) (when s4-0
(let ((t9-6 (method-of-type manipy activate)))
(t9-6 (the-as manipy s4-0) self 'manipy (the-as pointer #x70004000))
)
(run-now-in-process
s4-0
manipy-init
(-> self control trans)
(-> self entity)
*flutflut-sg*
'collide-shape-moving
)
(-> s4-0 ppointer)
)
)
)
)
(set! (-> self entity) s5-0)
)
(when (-> self manipy)
(send-event
(ppointer->process (-> self manipy))
'trans-hook
(lambda :behavior flutflut
()
(let* ((a0-0 (-> self parent-override))
(v1-0 (if a0-0
(-> a0-0 0 self-override)
)
)
)
(set! (-> self root-override trans quad) (-> v1-0 flut flut-trans quad))
(let ((a0-4 (-> v1-0 flut flut-quat quad)))
(set! (-> self root-override quat vec quad) a0-4)
)
(set! (-> self root-override scale quad) (-> v1-0 flut flut-scale quad))
(set! (-> self root-override ground-pat material) (the-as int (-> v1-0 control ground-pat material)))
(set! (-> self draw light-index) (the-as uint 255))
(let ((a0-13 (-> v1-0 draw color-mult quad)))
(set! (-> self draw color-mult quad) a0-13)
)
(let ((a0-15 (-> v1-0 draw color-emissive quad)))
(set! (-> self draw color-emissive quad) a0-15)
)
(let ((f0-0 (-> v1-0 draw secondary-interp)))
(set! (-> self draw secondary-interp) f0-0)
f0-0
)
)
)
)
(send-event (ppointer->process (-> self manipy)) 'anim-mode 'loop)
(send-event
(ppointer->process (-> self manipy))
'art-joint-anim
"flut-get-on"
(-> (new 'static 'array float 1 0.0) 0)
)
(send-event (ppointer->process (-> self manipy)) 'blend-shape #t)
(send-event
(ppointer->process (-> self manipy))
'eval
(lambda :behavior target
()
(set! (-> self attack-info intersection z) (the-as float #f))
(let ((v1-1 (-> *target-shadow-control* settings shadow-dir quad)))
(set! (-> *flutflut-shadow-control* settings shadow-dir quad) v1-1)
)
(let ((v0-0 *flutflut-shadow-control*))
(set! (-> self draw shadow-ctrl) v0-0)
v0-0
)
)
)
)
(remove-exit)
(go target-flut-get-on arg0)
(none)
)
:post
(the-as (function none :behavior target) target-post)
)
(defstate target-flut-stance (target)
:event
target-flut-standard-event-handler
:enter
(behavior ()
(set! (-> self control unknown-surface00) *flut-walk-mods*)
(none)
)
:exit
(-> target-flut-start exit)
:trans
(behavior ()
(if (move-legs?)
(go target-flut-walk)
)
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 0)
(-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 2)
)
(pad-buttons x)
)
(can-jump? #f)
)
(go target-flut-jump (-> *FLUT-bank* jump-height-min) (-> *FLUT-bank* jump-height-max))
)
(if (can-hands? #t)
(go target-flut-running-attack)
)
(when (and (zero? (logand (-> self control status) 1))
(and (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *FLUT-bank* ground-timeout))
(>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
(let ((v1-37 (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
)
)
(or (not (or (= v1-37 (-> self draw art-group data 59))
(= v1-37 (-> self draw art-group data 60))
(= v1-37 (-> self draw art-group data 61))
)
)
(< 4096.0 (target-height-above-ground))
)
)
)
)
enter-state
(go target-flut-falling)
)
(none)
)
:code
(behavior ()
(let ((gp-0 22))
(let ((v1-2 (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
)
)
(cond
((or (= v1-2 (-> self draw art-group data 141)) (= v1-2 (-> self draw art-group data 161)))
(set! gp-0 60)
)
((= (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
(-> self draw art-group data 155)
)
(let ((a0-11 (-> self skel root-channel 0)))
(set! (-> a0-11 param 0) (the float (+ (-> a0-11 frame-group data 0 length) -1)))
(set! (-> a0-11 param 1) 1.0)
(joint-control-channel-group! a0-11 (the-as art-joint-anim #f) num-func-seek!)
)
(while (not (ja-done? 0))
(suspend)
(ja-eval)
)
)
((= (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
(-> self draw art-group data 158)
)
(let ((a0-17 (-> self skel root-channel 0)))
(set! (-> a0-17 frame-group) (the-as art-joint-anim (-> self draw art-group data 159)))
(set! (-> a0-17 param 0)
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 159)) data 0 length) -1))
)
(set! (-> a0-17 param 1) 1.0)
(set! (-> a0-17 frame-num) 0.0)
(joint-control-channel-group! a0-17 (the-as art-joint-anim (-> self draw art-group data 159)) num-func-seek!)
)
(until (ja-done? 0)
(suspend)
(let ((a0-18 (-> self skel root-channel 0)))
(set! (-> a0-18 param 0) (the float (+ (-> a0-18 frame-group data 0 length) -1)))
(set! (-> a0-18 param 1) 1.0)
(joint-control-channel-group-eval! a0-18 (the-as art-joint-anim #f) num-func-seek!)
)
)
)
((= (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
(-> self draw art-group data 150)
)
(let ((a0-24 (-> self skel root-channel 0)))
(set! (-> a0-24 frame-group) (the-as art-joint-anim (-> self draw art-group data 151)))
(set! (-> a0-24 param 0)
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 151)) data 0 length) -1))
)
(set! (-> a0-24 param 1) 1.0)
(set! (-> a0-24 frame-num) 0.0)
(joint-control-channel-group! a0-24 (the-as art-joint-anim (-> self draw art-group data 151)) num-func-seek!)
)
(until (ja-done? 0)
(suspend)
(let ((a0-25 (-> self skel root-channel 0)))
(set! (-> a0-25 param 0) (the float (+ (-> a0-25 frame-group data 0 length) -1)))
(set! (-> a0-25 param 1) 1.0)
(joint-control-channel-group-eval! a0-25 (the-as art-joint-anim #f) num-func-seek!)
)
)
)
)
)
(if (not (= (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
(-> self draw art-group data 140)
)
)
(ja-channel-push! 1 gp-0)
)
)
(let ((v1-91 (-> self skel root-channel 0)))
(set! (-> v1-91 frame-group) (the-as art-joint-anim (-> self draw art-group data 140)))
)
(while #t
(suspend)
(let ((a0-35 (-> self skel root-channel 0)))
(set! (-> a0-35 param 0) 1.0)
(joint-control-channel-group-eval! a0-35 (the-as art-joint-anim #f) num-func-loop!)
)
)
(none)
)
:post
target-flut-post
)
(defstate target-flut-walk (target)
:event
target-flut-standard-event-handler
:enter
(behavior ()
(set! (-> self state-time) (-> *display* base-frame-counter))
(set! (-> self control unknown-surface00) *flut-walk-mods*)
(set! (-> self control unknown-uint20) (the-as uint (-> self control unknown-surface00 turnv)))
(set! (-> self control unknown-int21) (the-as int (-> self control unknown-surface00 target-speed)))
(none)
)
:exit
(behavior ()
(set! (-> self control unknown-surface00 turnv) (the-as float (-> self control unknown-uint20)))
(set! (-> self control unknown-surface00 target-speed) (the-as float (-> self control unknown-uint30)))
((-> target-flut-start exit))
(none)
)
:trans
(behavior ()
(if (not (move-legs?))
(go target-flut-stance)
)
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 0)
(-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 2)
)
(pad-buttons x)
)
(can-jump? #f)
)
(go target-flut-jump (-> *FLUT-bank* jump-height-min) (-> *FLUT-bank* jump-height-max))
)
(if (can-hands? #t)
(go target-flut-running-attack)
)
(when (and (zero? (logand (-> self control status) 1))
(and (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *FLUT-bank* ground-timeout))
(>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
(let ((v1-37 (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
)
)
(or (not (or (= v1-37 (-> self draw art-group data 59))
(= v1-37 (-> self draw art-group data 60))
(= v1-37 (-> self draw art-group data 61))
)
)
(< 4096.0 (target-height-above-ground))
)
)
)
)
enter-state
(go target-flut-falling)
)
(let ((f30-1 (fabs (deg-diff (quaternion-y-angle (-> self control dir-targ)) (y-angle (-> self control))))))
(set! (-> self control unknown-surface00 turnv) (lerp-scale
(the-as float (-> self control unknown-uint20))
(* 4.0 (the-as float (-> self control unknown-uint20)))
f30-1
(-> (new 'static 'array float 1 8192.0) 0)
(the-as float 21845.334)
)
)
(if (and (= (-> self control surf name) '*tar-surface*) (< (-> (new 'static 'array float 1 8192.0) 0) f30-1))
(set! (-> self control unknown-surface00 target-speed) (seek
(-> self control unknown-surface00 target-speed)
(the-as float 4096.0)
(* 245760.0 (-> *display* seconds-per-frame))
)
)
(set! (-> self control unknown-surface00 target-speed) (seek
(-> self control unknown-surface00 target-speed)
(the-as float (-> self control unknown-uint30))
(* 81920.0 (-> *display* seconds-per-frame))
)
)
)
)
(none)
)
:code
(behavior ()
(let ((f28-0 0.0)
(f30-0 0.0)
)
(let ((gp-0 22))
(cond
((= (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
(-> self draw art-group data 140)
)
(set! gp-0 60)
)
((let ((v1-9 (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
)
)
(or (= v1-9 (-> self draw art-group data 143))
(= v1-9 (-> self draw art-group data 144))
(= v1-9 (-> self draw art-group data 152))
(= v1-9 (-> self draw art-group data 154))
)
)
(ja-channel-push! 1 24)
(let ((a0-18 (-> self skel root-channel 0)))
(set! (-> a0-18 frame-group) (the-as art-joint-anim (-> self draw art-group data 161)))
(set! (-> a0-18 param 0)
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 161)) data 0 length) -1))
)
(set! (-> a0-18 param 1) 1.0)
(set! (-> a0-18 frame-num) 0.0)
(joint-control-channel-group! a0-18 (the-as art-joint-anim (-> self draw art-group data 161)) num-func-seek!)
)
(until (ja-done? 0)
(suspend)
(let ((a0-19 (-> self skel root-channel 0)))
(set! (-> a0-19 param 0) (the float (+ (-> a0-19 frame-group data 0 length) -1)))
(set! (-> a0-19 param 1) 1.0)
(joint-control-channel-group-eval! a0-19 (the-as art-joint-anim #f) num-func-seek!)
)
)
)
)
(set! f30-0 (cond
((= (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
(-> self draw art-group data 161)
)
(ja-channel-set! 2)
1.0
)
((= (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
(-> self draw art-group data 141)
)
(set! f28-0 (ja-frame-num 0))
(-> self skel root-channel 1 frame-interp)
)
(else
(ja-channel-push! 2 gp-0)
f30-0
)
)
)
)
(let ((a0-32 (-> self skel root-channel 0)))
(set! (-> a0-32 dist) 49152.0)
(set! (-> a0-32 frame-group) (the-as art-joint-anim (-> self draw art-group data 141)))
(set! (-> a0-32 param 0) 1.0)
(set! (-> a0-32 frame-num) f28-0)
(joint-control-channel-group! a0-32 (the-as art-joint-anim (-> self draw art-group data 141)) num-func-loop!)
)
(let ((gp-1 (-> self skel root-channel 1)))
(set! (-> gp-1 frame-interp) f30-0)
(set! (-> gp-1 dist) 40960.0)
(joint-control-channel-group!
gp-1
(the-as art-joint-anim (-> self draw art-group data 142))
num-func-identity
)
(set! (-> gp-1 frame-num) (* 0.5 f28-0))
)
(while #t
(suspend)
(let ((f0-13 (lerp-scale
(-> (new 'static 'array float 1 0.0) 0)
(the-as float 1.0)
(-> self control unknown-float01)
(the-as float 49152.0)
(the-as float 77824.0)
)
)
)
(set! f30-0 (seek f30-0 f0-13 (* 4.0 (-> *display* seconds-per-frame))))
)
(set! (-> self skel root-channel 1 frame-interp) f30-0)
(let* ((f0-16 (dummy-9 (-> self skel)))
(f0-18 (/ (* 58.0 (-> self control unknown-float01)) (* 60.0 f0-16)))
)
(if (= (-> self control surf name) '*tar-surface*)
(set! f0-18 (* 0.4 (-> self control unknown-float12)))
)
(let ((a0-40 (-> self skel root-channel 0)))
(set! (-> a0-40 param 0) f0-18)
(joint-control-channel-group-eval! a0-40 (the-as art-joint-anim #f) num-func-loop!)
)
)
(let ((gp-2 (-> self skel root-channel 1)))
(set! (-> gp-2 num-func) num-func-identity)
(set! (-> gp-2 frame-num) (* 0.5 (ja-frame-num 0)))
)
(let ((f0-22 (ja-aframe-num 0)))
(cond
((and (>= (-> self skel effect last-frame-num) 20.0) (< f0-22 20.0))
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 51 120)
)
((and (< (-> self skel effect last-frame-num) 12.0) (>= f0-22 12.0))
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 51 120)
)
)
)
)
)
(none)
)
:post
target-flut-post
)
(defstate target-flut-jump (target)
:event
(behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
(when (and (= arg2 'touched)
((method-of-type touching-shapes-entry prims-touching?)
(the-as touching-shapes-entry (-> arg3 param 0))
(-> self control)
(the-as uint 6)
)
(< 0.0
(vector-dot
(-> self control dynam gravity-normal)
(vector-! (new 'stack-no-clear 'vector) (the-as vector (-> self control trans-old)) (-> self control trans))
)
)
)
(send-event arg0 'bonk (-> arg3 param 0) (-> self control ground-impact-vel))
(when (target-send-attack
arg0
(the-as uint 'flut-bonk)
(-> arg3 param 0)
(-> self control unknown-dword50)
(-> self control unknown-dword51)
)
)
)
(case arg2
(('jump)
(go target-flut-jump (the-as float (-> arg3 param 0)) (the-as float (-> arg3 param 0)))
)
(else
(target-flut-standard-event-handler arg0 arg1 arg2 arg3)
)
)
)
:enter
(behavior ((arg0 float) (arg1 float))
(set! (-> self state-time) (-> *display* base-frame-counter))
(sound-play-by-name (static-sound-name "jump") (new-sound-id) 1024 -762 0 1 #t)
(init-var-jump arg0 arg1 (the-as vector #t) (the-as vector #t) (-> self control transv))
(set! (-> self control status) (logand -8 (-> self control status)))
(set! (-> self control unknown-surface00) *flut-jump-mods*)
(set! (-> self control unknown-float123)
(fmax 0.0 (fmin 1.0 (* 0.00004359654 (+ -11468.8 (-> self control unknown-float01)))))
)
(set! (-> self control unknown-float122)
(fmax 0.0 (fmin 1.0 (* 0.000048828126 (+ -10240.0 (-> self control unknown-float01)))))
)
(none)
)
:exit
(behavior ()
(target-exit)
((-> target-flut-start exit))
(none)
)
:trans
(behavior ()
(set! (-> self control unknown-float123)
(fmax
(-> self control unknown-float123)
(* 0.003921569 (the float (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) abutton 6)))
)
)
(if (logtest? (-> self control status) 1)
(go target-flut-hit-ground)
)
(if (and (logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 0) (pad-buttons x))
(< (vector-dot (-> self control dynam gravity-normal) (-> self control transv)) 40960.0)
(and (zero? (logand (-> self water flags) 512))
(zero? (logand (-> self state-flags) 2048))
(< 4096.0 (target-height-above-ground))
)
)
(go target-flut-double-jump (-> *FLUT-bank* double-jump-height-min) (-> *FLUT-bank* double-jump-height-max))
)
(if (and (logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 0)
(pad-buttons square)
)
(< (vector-dot (-> self control dynam gravity-normal) (-> self control transv)) 61440.0)
(and (< -61440.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
(>= (- (-> *display* base-frame-counter) (-> self control unknown-dword36))
(the-as int (-> *TARGET-bank* stuck-timeout))
)
(zero? (logand (-> self state-flags) 4096))
(zero? (logand (-> self control unknown-surface01 flags) 384))
)
)
(go target-flut-air-attack (-> *FLUT-bank* air-attack-speed))
)
(when (if (and (< (target-move-dist (the-as int (-> *TARGET-bank* stuck-time))) (-> *TARGET-bank* stuck-distance))
(and (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30)
(not
(and *cheat-mode*
(logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons r2))
)
)
)
)
#t
)
(logior! (-> self control status) 1)
enter-state
'stuck
(go target-flut-hit-ground)
)
(mod-var-jump
#t
#t
(logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons x))
(-> self control transv)
)
(set! (-> self control unknown-float122)
(seek
(-> self control unknown-float122)
(fmax 0.0 (fmin 1.0 (* 0.000048828126 (+ -10240.0 (-> self control unknown-float01)))))
(-> *display* seconds-per-frame)
)
)
(none)
)
:code
(behavior ((arg0 float) (arg1 float))
(ja-channel-push! 2 36)
(let ((gp-0 (-> self skel root-channel 0)))
(joint-control-channel-group-eval!
gp-0
(the-as art-joint-anim (-> self draw art-group data 143))
num-func-identity
)
(set! (-> gp-0 frame-num) 0.0)
)
(let ((a0-3 (-> self skel root-channel 1)))
(set! (-> a0-3 frame-interp) (-> self control unknown-float122))
(set! (-> a0-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 146)))
(set! (-> a0-3 param 0) 0.0)
(joint-control-channel-group-eval!
a0-3
(the-as art-joint-anim (-> self draw art-group data 146))
num-func-chan
)
)
(suspend)
(let ((a0-4 (-> self skel root-channel 0)))
(set! (-> a0-4 frame-group) (the-as art-joint-anim (-> self draw art-group data 143)))
(set! (-> a0-4 param 0) 1.0)
(joint-control-channel-group-eval! a0-4 (the-as art-joint-anim (-> self draw art-group data 143)) num-func-+!)
)
(let ((a0-5 (-> self skel root-channel 1)))
(set! (-> a0-5 frame-interp) (-> self control unknown-float122))
(set! (-> a0-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 146)))
(set! (-> a0-5 param 0) 0.0)
(joint-control-channel-group-eval!
a0-5
(the-as art-joint-anim (-> self draw art-group data 146))
num-func-chan
)
)
(suspend)
(until (ja-done? 0)
(let ((f30-0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
(f0-10 (/ (- 10.0 (ja-aframe-num 0)) (* (ja-step 0) (ja-speed 0))))
(gp-1 (-> self skel root-channel 0))
)
(set! (-> gp-1 param 0) (the float (+ (-> gp-1 frame-group data 0 length) -1)))
(let ((v1-45 (and (< 0.0 f30-0) (< 0.0 f0-10))))
(set! (-> gp-1 param 1)
(the-as
float
(if v1-45
(fmin (fmin 3.0 f0-10) (/ (* 5.0 f0-10) (the float (time-to-apex f30-0 (the-as float -245760.0)))))
1.0
)
)
)
)
(joint-control-channel-group-eval! gp-1 (the-as art-joint-anim #f) num-func-seek!)
)
(let ((a0-12 (-> self skel root-channel 1)))
(set! (-> a0-12 frame-interp) (-> self control unknown-float122))
(set! (-> a0-12 param 0) 0.0)
(joint-control-channel-group-eval! a0-12 (the-as art-joint-anim #f) num-func-chan)
)
(suspend)
)
(let ((a0-14 (-> self skel root-channel 0)))
(set! (-> a0-14 frame-group) (the-as art-joint-anim (-> self draw art-group data 144)))
(set! (-> a0-14 param 0) 1.0)
(set! (-> a0-14 frame-num) 0.0)
(joint-control-channel-group! a0-14 (the-as art-joint-anim (-> self draw art-group data 144)) num-func-loop!)
)
(let ((a0-15 (-> self skel root-channel 1)))
(set! (-> a0-15 frame-interp) (-> self control unknown-float122))
(set! (-> a0-15 frame-group) (the-as art-joint-anim (-> self draw art-group data 147)))
(set! (-> a0-15 param 0) 0.0)
(joint-control-channel-group-eval!
a0-15
(the-as art-joint-anim (-> self draw art-group data 147))
num-func-chan
)
)
(while #t
(suspend)
(let ((a0-16 (-> self skel root-channel 0)))
(set! (-> a0-16 frame-group) (the-as art-joint-anim (-> self draw art-group data 144)))
(set! (-> a0-16 param 0) 1.0)
(joint-control-channel-group-eval!
a0-16
(the-as art-joint-anim (-> self draw art-group data 144))
num-func-loop!
)
)
(let ((a0-17 (-> self skel root-channel 1)))
(set! (-> a0-17 frame-interp) (-> self control unknown-float122))
(set! (-> a0-17 frame-group) (the-as art-joint-anim (-> self draw art-group data 147)))
(set! (-> a0-17 param 0) 0.0)
(joint-control-channel-group-eval!
a0-17
(the-as art-joint-anim (-> self draw art-group data 147))
num-func-chan
)
)
)
(none)
)
:post
target-flut-post
)
(defstate target-flut-double-jump (target)
:event
(-> target-flut-jump event)
:enter
(behavior ((arg0 float) (arg1 float))
(set! (-> self state-time) (-> *display* base-frame-counter))
(init-var-jump arg0 arg1 (the-as vector #t) (the-as vector #t) (-> self control transv))
(set! (-> self control dynam gravity-max) 40960.0)
(set! (-> self control dynam gravity-length) 245760.0)
(set! (-> self control status) (logand -8 (-> self control status)))
(set! (-> self control unknown-surface00) *flut-double-jump-mods*)
(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)
((-> target-flut-start exit))
(none)
)
:trans
(behavior ()
(if (logtest? (-> self control status) 1)
(go target-flut-hit-ground)
)
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 0)
(-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 2)
)
(pad-buttons square)
)
(and (zero? (logand (-> self state-flags) 4096))
(zero? (logand (-> self control unknown-surface01 flags) 384))
(>= (- (-> *display* base-frame-counter) (-> self control unknown-dword36))
(the-as int (-> *TARGET-bank* stuck-timeout))
)
(< 4096.0 (target-height-above-ground))
)
)
(go target-flut-air-attack (-> *FLUT-bank* air-attack-speed))
)
(if (!= (-> self state-time) (-> *display* base-frame-counter))
(mod-var-jump
#t
#t
(logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons x))
(-> self control transv)
)
)
(if (= (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
(-> self draw art-group data 149)
)
(sound-play-by-name (static-sound-name "flut-flap") (-> self flut flap-sound-id) 1024 0 0 1 #t)
)
(set! (-> self control unknown-float122)
(seek
(-> self control unknown-float122)
(fmax 0.0 (fmin 1.0 (* 0.000048828126 (+ -10240.0 (-> self control unknown-float01)))))
(-> *display* seconds-per-frame)
)
)
(none)
)
:code
(behavior ((arg0 float) (arg1 float))
(ja-channel-push! 1 15)
(let ((a0-2 (-> self skel root-channel 0)))
(set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 149)))
(set! (-> a0-2 param 0)
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 149)) data 0 length) -1))
)
(set! (-> a0-2 param 1) 1.0)
(set! (-> a0-2 frame-num) 0.0)
(joint-control-channel-group! a0-2 (the-as art-joint-anim (-> self draw art-group data 149)) num-func-seek!)
)
(until (ja-done? 0)
(cpad-set-buzz! (-> *cpad-list* cpads 0) 0 3 30)
(suspend)
(let ((a0-4 (-> self skel root-channel 0)))
(set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1)))
(set! (-> a0-4 param 1) 1.0)
(joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-seek!)
)
)
(set! (-> self control unknown-surface00) *flut-jump-mods*)
(dotimes (gp-0 1)
(let ((s5-0 (-> self skel root-channel 0)))
(set! (-> s5-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 149)))
(set! (-> s5-0 param 0)
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 149)) data 0 length) -1))
)
(set! (-> s5-0 param 1) 1.0)
(set! (-> s5-0 frame-num) (ja-aframe (the-as float 14.0) 0))
(joint-control-channel-group! s5-0 (the-as art-joint-anim (-> self draw art-group data 149)) num-func-seek!)
)
(until (ja-done? 0)
(cpad-set-buzz! (-> *cpad-list* cpads 0) 0 3 30)
(suspend)
(let ((a0-10 (-> self skel root-channel 0)))
(set! (-> a0-10 param 0) (the float (+ (-> a0-10 frame-group data 0 length) -1)))
(set! (-> a0-10 param 1) 1.0)
(joint-control-channel-group-eval! a0-10 (the-as art-joint-anim #f) num-func-seek!)
)
)
)
(while (< (-> (new 'static 'array float 1 8192.0) 0) (target-height-above-ground))
(suspend)
(cpad-set-buzz! (-> *cpad-list* cpads 0) 0 3 30)
(let ((a0-13 (-> self skel root-channel 0)))
(set! (-> a0-13 param 0) 1.0)
(joint-control-channel-group-eval! a0-13 (the-as art-joint-anim #f) num-func-loop!)
)
(when (< (ja-aframe-num 0) 14.0)
(let ((gp-1 (-> self skel root-channel 0)))
(set! (-> gp-1 num-func) num-func-identity)
(set! (-> gp-1 frame-num) (ja-aframe (the-as float 14.0) 0))
)
)
(set! (-> self control dynam gravity-max) (seek
(-> self control dynam gravity-max)
(-> self control unknown-dynamics00 gravity-max)
(* 163840.0 (-> *display* seconds-per-frame))
)
)
(set! (-> self control dynam gravity-length) (seek
(-> self control dynam gravity-length)
(-> self control unknown-dynamics00 gravity-length)
(* 163840.0 (-> *display* seconds-per-frame))
)
)
)
(-> *display* base-frame-counter)
(ja-channel-push! 2 30)
(let ((a0-19 (-> self skel root-channel 0)))
(set! (-> a0-19 frame-group) (the-as art-joint-anim (-> self draw art-group data 144)))
(set! (-> a0-19 param 0) 1.0)
(set! (-> a0-19 frame-num) 0.0)
(joint-control-channel-group! a0-19 (the-as art-joint-anim (-> self draw art-group data 144)) num-func-loop!)
)
(let ((gp-2 (-> self skel root-channel 1)))
(set! (-> gp-2 frame-interp) (-> self control unknown-float122))
(joint-control-channel-group-eval!
gp-2
(the-as art-joint-anim (-> self draw art-group data 147))
num-func-identity
)
(set! (-> gp-2 frame-num) 0.0)
)
(while #t
(suspend)
(set! (-> self control dynam gravity-max) (seek
(-> self control dynam gravity-max)
(-> self control unknown-dynamics00 gravity-max)
(* 163840.0 (-> *display* seconds-per-frame))
)
)
(set! (-> self control dynam gravity-length) (seek
(-> self control dynam gravity-length)
(-> self control unknown-dynamics00 gravity-length)
(* 163840.0 (-> *display* seconds-per-frame))
)
)
(let ((a0-23 (-> self skel root-channel 0)))
(set! (-> a0-23 param 0) (the float (+ (-> a0-23 frame-group data 0 length) -1)))
(joint-control-channel-group-eval! a0-23 (the-as art-joint-anim #f) num-func-loop!)
)
(let ((a0-24 (-> self skel root-channel 1)))
(set! (-> a0-24 frame-interp) (-> self control unknown-float122))
(set! (-> a0-24 param 0) 0.0)
(joint-control-channel-group-eval! a0-24 (the-as art-joint-anim #f) num-func-chan)
)
)
(none)
)
:post
target-flut-post
)
(defstate target-flut-hit-ground (target)
:event
target-flut-standard-event-handler
:enter
(behavior ()
(target-land-effect)
(if (< 40960.0 (-> self control ground-impact-vel))
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 178 60)
)
(set! (-> self control unknown-dword31) 0)
(set! (-> self control unknown-dword33) 0)
(set! (-> self control unknown-surface00) *flut-walk-mods*)
(none)
)
:exit
(-> target-flut-start exit)
:trans
(behavior ()
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 0)
(-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 1)
)
(-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 2)
)
(pad-buttons x)
)
(can-jump? #f)
)
(go target-flut-jump (-> *FLUT-bank* jump-height-min) (-> *FLUT-bank* jump-height-max))
)
(if (move-legs?)
(go target-flut-walk)
)
(when (and (zero? (logand (-> self control status) 1))
(and (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *FLUT-bank* ground-timeout))
(>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
(let ((v1-34 (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
)
)
(or (not (or (= v1-34 (-> self draw art-group data 59))
(= v1-34 (-> self draw art-group data 60))
(= v1-34 (-> self draw art-group data 61))
)
)
(< 4096.0 (target-height-above-ground))
)
)
)
)
enter-state
(go target-flut-falling)
)
(none)
)
:code
(behavior ()
(let ((t9-0 target-flut-hit-ground-anim))
(t9-0)
)
(go target-flut-stance)
(none)
)
:post
target-flut-post
)
(defstate target-flut-falling (target)
:event
(-> target-flut-jump event)
:enter
(behavior ()
(set! (-> self control unknown-surface00) *flut-jump-mods*)
(set! (-> self state-time) (-> *display* base-frame-counter))
(none)
)
:exit
(-> target-flut-start exit)
:trans
(behavior ()
(when (or (logtest? (-> self control status) 1)
(if (and (< (target-move-dist (the-as int (-> *TARGET-bank* stuck-time))) (-> *TARGET-bank* stuck-distance))
(and (>= (- (-> *display* base-frame-counter) (-> self state-time))
(/ (the-as int (-> *TARGET-bank* stuck-time)) 2)
)
(not
(and *cheat-mode*
(logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons r2))
)
)
)
)
#t
)
)
(logior! (-> self control status) 1)
(go target-flut-hit-ground)
)
(set! (-> self control unknown-float122)
(seek
(-> self control unknown-float122)
(fmax 0.0 (fmin 1.0 (* 0.000048828126 (+ -10240.0 (-> self control unknown-float01)))))
(-> *display* seconds-per-frame)
)
)
(none)
)
:code
(behavior ()
(cond
((= (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
(-> self draw art-group data 144)
)
)
((= (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
(-> self draw art-group data 149)
)
(ja-channel-push! 2 60)
)
(else
(ja-channel-push! 2 150)
)
)
(let ((a0-10 (-> self skel root-channel 0)))
(set! (-> a0-10 frame-group) (the-as art-joint-anim (-> self draw art-group data 144)))
(set! (-> a0-10 param 0) 1.0)
(set! (-> a0-10 frame-num) 0.0)
(joint-control-channel-group! a0-10 (the-as art-joint-anim (-> self draw art-group data 144)) num-func-loop!)
)
(let ((gp-0 (-> self skel root-channel 1)))
(set! (-> gp-0 frame-interp) (-> self control unknown-float122))
(joint-control-channel-group-eval!
gp-0
(the-as art-joint-anim (-> self draw art-group data 147))
num-func-identity
)
(set! (-> gp-0 frame-num) 0.0)
)
(while #t
(suspend)
(let ((a0-12 (-> self skel root-channel 0)))
(set! (-> a0-12 param 0) (the float (+ (-> a0-12 frame-group data 0 length) -1)))
(joint-control-channel-group-eval! a0-12 (the-as art-joint-anim #f) num-func-loop!)
)
(let ((a0-13 (-> self skel root-channel 1)))
(set! (-> a0-13 frame-interp) (-> self control unknown-float122))
(set! (-> a0-13 param 0) 0.0)
(joint-control-channel-group-eval! a0-13 (the-as art-joint-anim #f) num-func-chan)
)
)
(none)
)
:post
target-flut-post
)
(defstate target-flut-running-attack (target)
:event
(behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
(case arg2
(('touched)
(cond
(((method-of-type touching-shapes-entry prims-touching?)
(the-as touching-shapes-entry (-> arg3 param 0))
(-> self control)
(the-as uint 224)
)
(let ((gp-1 (target-send-attack
arg0
(the-as uint (-> self control unknown-symbol30))
(-> arg3 param 0)
(-> self control unknown-dword50)
(-> self control unknown-dword51)
)
)
)
(when gp-1
(set! (-> self control unknown-uint20) (the-as uint (-> *display* base-frame-counter)))
(let ((v1-9 (if (and (nonzero? arg0) (type-type? (-> arg0 type) process-drawable))
arg0
)
)
)
(when v1-9
(let* ((s5-1 (-> (the-as process-drawable v1-9) root))
(v1-11 (if (and (nonzero? s5-1) (type-type? (-> s5-1 type) collide-shape))
s5-1
)
)
)
(if (and v1-11
(or (logtest? (-> (the-as collide-shape v1-11) root-prim prim-core collide-as) (collide-kind enemy))
(logtest? (-> (the-as collide-shape v1-11) root-prim prim-core action) (collide-action ca-10))
)
)
(set! (-> self control unknown-uint31) (the-as uint 1))
)
)
)
)
(when (or (= gp-1 'die) (= gp-1 'push))
(let ((v0-2 (the-as object (-> *display* base-frame-counter))))
(set! (-> self control unknown-int21) (the-as int v0-2))
v0-2
)
)
)
)
)
(else
(target-flut-dangerous-event-handler arg0 arg1 arg2 arg3)
)
)
)
(else
(target-flut-dangerous-event-handler arg0 arg1 arg2 arg3)
)
)
)
:enter
(behavior ()
(set! (-> self state-time) (-> *display* base-frame-counter))
(set! (-> self control unknown-uint20) (the-as uint 0))
(set! (-> self control unknown-int21) 0)
(set! (-> self control unknown-uint31) (the-as uint 0))
(set! (-> self control unknown-surface00) *flut-run-attack-mods*)
(set! (-> *run-attack-mods* turnv) 655360.0)
(set! (-> *run-attack-mods* turnvv) 655360.0)
(target-start-attack)
(target-danger-set! 'flut-attack #f)
(when (and (and (= (-> self fact-info-target eco-type) 1) (>= (-> self fact-info-target eco-level) 1.0))
(>= (- (-> *display* base-frame-counter) (-> self control unknown-dword82)) 75)
)
(let ((gp-0 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self control quat)))
(s5-0 (vector<-cspace! (new 'stack-no-clear 'vector) (-> self manipy 0 node-list data 32)))
)
(set! (-> gp-0 y) 0.0)
(vector-normalize! gp-0 (+ 81920.0 (-> *TARGET-bank* yellow-projectile-speed)))
(vector+! gp-0 gp-0 (-> self control transv))
(let ((s4-0 (get-process *default-dead-pool* projectile-yellow #x4000)))
(when s4-0
(let ((t9-6 (method-of-type projectile-yellow activate)))
(t9-6 (the-as projectile-yellow s4-0) self 'projectile-yellow (the-as pointer #x70004000))
)
(run-now-in-process
s4-0
projectile-init-by-other
(-> self entity)
s5-0
gp-0
(if (>= (-> self fact-info-target eco-level) (-> *FACT-bank* eco-level-max))
281
265
)
#f
)
(-> s4-0 ppointer)
)
)
)
(set! (-> self control unknown-dword82) (-> *display* base-frame-counter))
)
(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))
(set! (-> *run-attack-mods* turnv) 0.0)
(set! (-> *run-attack-mods* turnvv) 0.0)
(set! (-> self control unknown-dword31) (-> *display* base-frame-counter))
(target-exit)
(none)
)
:trans
(behavior ()
(when (!= (-> self state-time) (-> *display* base-frame-counter))
(if (and (or (smack-surface? #t)
(and (>= (-> self control unknown-float63) 0.7) (zero? (logand (-> self control status) 32)))
)
(begin
(set! (-> self control unknown-int21) (-> *display* base-frame-counter))
(set! (-> self control unknown-float81) 0.0)
(let ((gp-0 (new-stack-vector0))
(f30-0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
)
0.0
(vector-! gp-0 (-> self control transv) (vector-float*! gp-0 (-> self control dynam gravity-normal) f30-0))
(let* ((f0-5 (vector-length gp-0))
(f1-1 f0-5)
(f2-1 (fmin 0.0 f30-0))
)
(vector+!
(-> self control transv)
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f2-1)
(vector-float*! gp-0 gp-0 (/ f0-5 f1-1))
)
)
)
#t
)
(or (zero? (-> self control unknown-uint20))
(>= (the-as uint (- (-> *display* base-frame-counter) (the-as int (-> self control unknown-uint20))))
(the-as uint 12)
)
)
(!= (-> self control unknown-uint31) 1)
)
(target-shoved
(-> (new 'static 'array float 1 8192.0) 0)
(-> *TARGET-bank* smack-surface-height)
(the-as process #f)
target-flut-hit
)
)
(if (and (logtest? (-> self water flags) 512)
(zero? (mod (- (-> *display* base-frame-counter) (-> self state-time)) 21))
)
(dummy-13
(-> self water)
(the-as float 0.6)
(vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 37))
0
(-> self control transv)
)
)
)
(none)
)
:code
(behavior ()
(ja-channel-push! 1 6)
(sound-play-by-name (static-sound-name "flut-hit") (new-sound-id) 1024 0 0 1 #t)
(let ((gp-1 (-> self skel root-channel 0)))
(joint-control-channel-group-eval!
gp-1
(the-as art-joint-anim (-> self draw art-group data 150))
num-func-identity
)
(set! (-> gp-1 frame-num) 0.0)
)
(set! (-> self control dynam gravity-max) 368640.0)
(set! (-> self control dynam gravity-length) 368640.0)
(let ((f28-0 0.0)
(f30-0 (the-as float (if (= (-> self control unknown-dword82) (-> *display* base-frame-counter))
0.2
0.8
)
)
)
)
(until (or (ja-done? 0) (< f30-0 0.05))
(TODO-RENAME-9 (-> self align))
(when (not (ja-min? 0))
(cond
((and (>= (ja-aframe-num 0) 20.0)
(and (and (zero? (logand (-> self control status) 1))
(>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *FLUT-bank* ground-timeout))
(>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
(let ((v1-39 (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
)
)
(or (not
(or (= v1-39 (-> self draw art-group data 59))
(= v1-39 (-> self draw art-group data 60))
(= v1-39 (-> self draw art-group data 61))
)
)
(< 4096.0 (target-height-above-ground))
)
)
)
(>= (the-as uint (- (-> *display* base-frame-counter) (the-as int (-> self control unknown-uint20))))
(the-as uint 12)
)
)
)
enter-state
(go target-flut-falling)
)
((and (nonzero? (-> self control unknown-uint30))
(>= (the-as uint (- (-> *display* base-frame-counter) (the-as int (-> self control unknown-uint30))))
(the-as uint 12)
)
)
(set-forward-vel (-> (new 'static 'array float 1 0.0) 0))
(set! f30-0 0.0)
)
((ja-done? 0)
(set-forward-vel f28-0)
)
(else
(set! f28-0
(* f30-0 (target-align-vel-z-adjust (-> self align delta trans z)) (-> *display* frames-per-second))
)
(set-forward-vel f28-0)
)
)
)
(let ((gp-2 (new-stack-vector0)))
(vector-matrix*! gp-2 (-> self control transv) (-> self control unknown-matrix00))
(set! (-> gp-2 y) 0.0)
(vector-matrix*! (-> self control unknown-vector120) gp-2 (-> self control unknown-matrix01))
)
(suspend)
(let ((a0-36 (-> self skel root-channel 0)))
(set! (-> a0-36 param 0) (the float (+ (-> a0-36 frame-group data 0 length) -1)))
(set! (-> a0-36 param 1) (-> self control unknown-surface01 align-speed))
(joint-control-channel-group-eval! a0-36 (the-as art-joint-anim #f) num-func-seek!)
)
(if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30)
(set! (-> *flut-run-attack-mods* turnvv) 0.0)
)
(if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30)
(set! f30-0 (* f30-0 (the-as float (fmin 1.0 (the-as float (-> self control unknown-float140))))))
)
)
(when (and (zero? (logand (-> self control status) 1))
(>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *FLUT-bank* ground-timeout))
(>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
(let ((v1-105 (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
)
)
(or (not (or (= v1-105 (-> self draw art-group data 59))
(= v1-105 (-> self draw art-group data 60))
(= v1-105 (-> self draw art-group data 61))
)
)
(< 4096.0 (target-height-above-ground))
)
)
)
enter-state
(go target-flut-falling)
)
(when (!= f30-0 0.0)
(set! (-> self trans-hook) (-> target-flut-hit-ground trans))
(if (not (ja-done? 0))
(ja-channel-push! 1 15)
)
(let ((a0-59 (-> self skel root-channel 0)))
(set! (-> a0-59 frame-group) (the-as art-joint-anim (-> self draw art-group data 151)))
(set! (-> a0-59 param 0)
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 151)) data 0 length) -1))
)
(set! (-> a0-59 param 1) 1.0)
(set! (-> a0-59 frame-num) 0.0)
(joint-control-channel-group! a0-59 (the-as art-joint-anim (-> self draw art-group data 151)) num-func-seek!)
)
(until (ja-done? 0)
(TODO-RENAME-9 (-> self align))
(TODO-RENAME-10 (-> self align) 4 (the-as float 1.0) (the-as float 1.0) f30-0)
(suspend)
(let ((a0-62 (-> self skel root-channel 0)))
(set! (-> a0-62 param 0) (the float (+ (-> a0-62 frame-group data 0 length) -1)))
(set! (-> a0-62 param 1) 1.0)
(joint-control-channel-group-eval! a0-62 (the-as art-joint-anim #f) num-func-seek!)
)
)
)
)
(go target-flut-stance)
(none)
)
:post
target-flut-post
)
(defstate target-flut-air-attack (target)
:event
(behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
(if (and (= arg2 'touched)
((method-of-type touching-shapes-entry prims-touching?)
(the-as touching-shapes-entry (-> arg3 param 0))
(-> self control)
(the-as uint 6)
)
(< 0.0
(vector-dot
(-> self control dynam gravity-normal)
(vector-! (new 'stack-no-clear 'vector) (the-as vector (-> self control trans-old)) (-> self control trans))
)
)
)
(send-event arg0 'bonk (-> arg3 param 0) (-> self control ground-impact-vel))
)
(case arg2
(('jump)
(go target-flut-jump (the-as float (-> arg3 param 0)) (the-as float (-> arg3 param 0)))
)
(else
(target-flut-dangerous-event-handler arg0 arg1 arg2 arg3)
)
)
)
:enter
(behavior ((arg0 float))
(set-forward-vel arg0)
(set! (-> self state-time) (-> *display* base-frame-counter))
(set! (-> self control status) (logand -8 (-> self control status)))
(set! (-> self control unknown-surface00) *flut-air-attack-mods*)
(target-start-attack)
(target-danger-set! 'flut-attack #f)
(let ((gp-0 (new-stack-vector0)))
(let ((f0-1 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
0.0
(vector-! gp-0 (-> self control transv) (vector-float*! gp-0 (-> self control dynam gravity-normal) f0-1))
)
(let* ((f0-2 (vector-length gp-0))
(f1-1 f0-2)
(f2-0 0.0)
)
(vector+!
(-> self control transv)
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f2-0)
(vector-float*! gp-0 gp-0 (/ f0-2 f1-1))
)
)
)
(none)
)
:exit
(behavior ()
(target-danger-set! 'harmless #f)
(set! (-> self control dynam gravity-max) (-> self control unknown-dynamics00 gravity-max))
(set! (-> self control dynam gravity-length) (-> self control unknown-dynamics00 gravity-length))
(set! (-> self control dynam gravity quad) (-> self control unknown-dynamics00 gravity quad))
(none)
)
:trans
(behavior ()
(let ((s5-0 (new-stack-vector0)))
(vector-z-quaternion! s5-0 (-> self control unknown-quaternion00))
(let ((gp-0 (new-stack-vector0))
(f30-0 (vector-dot s5-0 (-> self control transv)))
)
0.0
(vector-! gp-0 (-> self control transv) (vector-float*! gp-0 s5-0 f30-0))
(let* ((f0-3 (vector-length gp-0))
(f1-0 f0-3)
)
(if (< f30-0 0.0)
(set! f30-0 0.0)
)
(vector+!
(-> self control transv)
(vector-float*! (-> self control transv) s5-0 f30-0)
(vector-float*! gp-0 gp-0 (/ f0-3 f1-0))
)
)
)
)
(when (logtest? (-> self control status) 1)
(logior! (-> self control status) 1)
(remove-exit)
(go target-flut-air-attack-hit-ground)
)
(when (if (and (< (target-move-dist (the-as int (-> *TARGET-bank* stuck-time))) 4096.0)
(and (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150)
(not
(and *cheat-mode*
(logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons r2))
)
)
)
)
#t
)
(logior! (-> self control status) 1)
(go target-flut-hit-ground)
)
(none)
)
:code
(behavior ((arg0 float))
(sound-play-by-name (static-sound-name "flut-hit") (new-sound-id) 1024 -762 0 1 #t)
(ja-channel-push! 1 15)
(let ((gp-1 (-> self skel root-channel 0)))
(set! (-> gp-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 152)))
(set! (-> gp-1 param 0) (ja-aframe (the-as float 8.0) 0))
(set! (-> gp-1 param 1) 1.0)
(set! (-> gp-1 frame-num) 0.0)
(joint-control-channel-group! gp-1 (the-as art-joint-anim (-> self draw art-group data 152)) num-func-seek!)
)
(until (ja-done? 0)
(TODO-RENAME-9 (-> self align))
(TODO-RENAME-10 (-> self align) 6 (the-as float 1.0) (the-as float 1.0) (the-as float 1.0))
(suspend)
(let ((gp-2 (-> self skel root-channel 0)))
(set! (-> gp-2 param 0) (ja-aframe (the-as float 8.0) 0))
(set! (-> gp-2 param 1) 1.0)
(joint-control-channel-group-eval! gp-2 (the-as art-joint-anim #f) num-func-seek!)
)
)
(let ((gp-3 (-> self skel root-channel 0)))
(set! (-> gp-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 152)))
(set! (-> gp-3 param 0)
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 152)) data 0 length) -1))
)
(set! (-> gp-3 param 1) 1.0)
(set! (-> gp-3 frame-num) (ja-aframe (the-as float 8.0) 0))
(joint-control-channel-group! gp-3 (the-as art-joint-anim (-> self draw art-group data 152)) num-func-seek!)
)
(until (ja-done? 0)
(TODO-RENAME-9 (-> self align))
(TODO-RENAME-10 (-> self align) 6 (the-as float 1.0) (the-as float 1.0) (the-as float 1.0))
(suspend)
(let ((a0-14 (-> self skel root-channel 0)))
(set! (-> a0-14 param 0) (the float (+ (-> a0-14 frame-group data 0 length) -1)))
(set! (-> a0-14 param 1) 1.0)
(joint-control-channel-group-eval! a0-14 (the-as art-joint-anim #f) num-func-seek!)
)
)
(let ((gp-4 (-> self skel root-channel 0)))
(joint-control-channel-group-eval!
gp-4
(the-as art-joint-anim (-> self draw art-group data 153))
num-func-identity
)
(set! (-> gp-4 frame-num) 0.0)
)
(while #t
(suspend)
)
(none)
)
:post
target-flut-post
)
(defstate target-flut-air-attack-hit-ground (target)
:event
target-flut-standard-event-handler
:enter
(behavior ()
(target-land-effect)
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 255 120)
(set! (-> self control unknown-dword31) 0)
(set! (-> self control unknown-dword33) 0)
(set! (-> self control unknown-surface00) *flut-air-attack-mods*)
(sound-play-by-name (static-sound-name "flop-land") (new-sound-id) 1024 -609 0 1 #t)
(dummy-10 (-> self skel effect) 'group-flut-attack-strike-ground (ja-frame-num 0) 0)
(let* ((s5-2 (get-process *default-dead-pool* touch-tracker #x4000))
(gp-2 (when s5-2
(let ((t9-7 (method-of-type touch-tracker activate)))
(t9-7 (the-as touch-tracker s5-2) self 'touch-tracker (the-as pointer #x70004000))
)
(run-now-in-process s5-2 touch-tracker-init (-> self control trans) 4096.0 30)
(-> s5-2 ppointer)
)
)
)
(send-event (ppointer->process gp-2) 'event 'attack 'flut-attack)
(send-event
(ppointer->process gp-2)
'function
(lambda :behavior target
((arg0 nav-enemy))
(set! (-> arg0 collide-info root-prim local-sphere w) (seek
(-> arg0 collide-info root-prim local-sphere w)
(the-as float 28672.0)
(* 286720.0 (-> *display* seconds-per-frame))
)
)
(update-transforms! (-> arg0 collide-info))
(none)
)
)
)
(none)
)
:exit
(-> target-flut-air-attack exit)
:trans
(-> target-flut-hit-ground trans)
:code
(behavior ()
(ja-channel-set! 1)
(let ((gp-0 (-> self skel root-channel 0)))
(set! (-> gp-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 154)))
(set! (-> gp-0 param 0) (ja-aframe (the-as float 22.0) 0))
(set! (-> gp-0 param 1) 1.0)
(set! (-> gp-0 frame-num) 0.0)
(joint-control-channel-group! gp-0 (the-as art-joint-anim (-> self draw art-group data 154)) num-func-seek!)
)
(until (ja-done? 0)
(TODO-RENAME-9 (-> self align))
(TODO-RENAME-10 (-> self align) 4 (the-as float 1.0) (the-as float 1.0) (the-as float 1.0))
(suspend)
(let ((gp-1 (-> self skel root-channel 0)))
(set! (-> gp-1 param 0) (ja-aframe (the-as float 22.0) 0))
(set! (-> gp-1 param 1) 1.0)
(joint-control-channel-group-eval! gp-1 (the-as art-joint-anim #f) num-func-seek!)
)
)
(target-danger-set! 'harmless #f)
(let ((gp-2 (-> self skel root-channel 0)))
(set! (-> gp-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 154)))
(set! (-> gp-2 param 0)
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 154)) data 0 length) -1))
)
(set! (-> gp-2 param 1) 1.0)
(set! (-> gp-2 frame-num) (ja-aframe (the-as float 22.0) 0))
(joint-control-channel-group! gp-2 (the-as art-joint-anim (-> self draw art-group data 154)) num-func-seek!)
)
(until (ja-done? 0)
(TODO-RENAME-9 (-> self align))
(TODO-RENAME-10 (-> self align) 4 (the-as float 1.0) (the-as float 1.0) (the-as float 1.0))
(suspend)
(let ((a0-13 (-> self skel root-channel 0)))
(set! (-> a0-13 param 0) (the float (+ (-> a0-13 frame-group data 0 length) -1)))
(set! (-> a0-13 param 1) 1.0)
(joint-control-channel-group-eval! a0-13 (the-as art-joint-anim #f) num-func-seek!)
)
)
(go target-flut-stance)
(none)
)
:post
target-flut-post
)
(defstate target-flut-hit (target)
:event
target-flut-standard-event-handler
:exit
(behavior ()
(if (!= (-> self next-state name) 'target-flut-death)
(set! (-> self state-flags) (logand -32777 (-> self state-flags)))
)
(target-exit)
((-> target-flut-start exit))
(none)
)
:trans
(behavior ()
(when (= *cheat-mode* 'debug)
(when (and (not *pause-lock*)
(logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons r2))
)
(pickup-collectable! (-> self fact-info-target) (pickup-type eco-green) (the-as float 1.0) (the-as handle #f))
(go target-flut-stance)
)
)
(none)
)
:code
(behavior ((arg0 symbol) (arg1 attack-info))
(set! (-> self state-time) (-> *display* base-frame-counter))
(let ((gp-0 (-> self attack-info)))
(let ((s5-0 (new 'stack-no-clear 'vector)))
(let ((v1-2 gp-0))
(set! (-> v1-2 attacker) (the-as handle #f))
(set! (-> v1-2 mode) 'generic)
(set! (-> v1-2 shove-back) 10240.0)
(set! (-> v1-2 shove-up) 9011.2)
(set! (-> v1-2 angle) #f)
(set! (-> v1-2 trans quad) (-> self control trans quad))
(set! (-> v1-2 control) 0.0)
(set! (-> v1-2 invinc-time) (-> *TARGET-bank* hit-invulnerable-timeout))
)
(case arg0
(('shove)
(let ((v1-5 gp-0))
(set! (-> v1-5 shove-back) (-> *TARGET-bank* smack-surface-dist))
(set! (-> v1-5 shove-up) (-> *TARGET-bank* smack-surface-height))
(set! (-> v1-5 angle) 'shove)
)
)
)
(dummy-9 gp-0 arg1)
(when (zero? (logand (-> gp-0 mask) 2))
(vector-z-quaternion! (-> gp-0 vector) (-> self control unknown-quaternion00))
(vector-xz-normalize! (-> gp-0 vector) (- (fabs (-> gp-0 shove-back))))
(set! (-> gp-0 vector y) (-> gp-0 shove-up))
)
(set! (-> s5-0 quad) (-> gp-0 vector quad))
(let ((f0-10 (vector-dot
(vector-normalize-copy! (new 'stack-no-clear 'vector) s5-0 (the-as float 1.0))
(vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self control unknown-quaternion00))
)
)
)
(if (not (-> self attack-info angle))
(set! (-> self attack-info angle) (if (>= 0.0 f0-10)
'front
'back
)
)
)
)
(when (= arg0 'attack)
(logior! (-> self state-flags) 8)
(set! (-> self game hit-time) (-> *display* base-frame-counter))
(case (-> gp-0 mode)
(('endlessfall)
(cond
((= (-> self game mode) 'debug)
(let ((s4-1 (new-stack-vector0)))
(set! (-> s4-1 quad) (-> self control last-known-safe-ground quad))
(ja-channel-set! 0)
(let ((s3-1 (-> *display* base-frame-counter)))
(until (>= (- (-> *display* base-frame-counter) s3-1) 300)
(suspend)
)
)
(move-to-point! (-> self control) s4-1)
)
(set! (-> (&-> (-> self control) unknown-qword00) 0) (-> self control trans quad))
(send-event *camera* 'teleport)
(go target-flut-stance)
)
(else
(pickup-collectable!
(-> self fact-info-target)
(pickup-type eco-green)
(the-as float -1000.0)
(the-as handle #f)
)
(go target-flut-death (-> gp-0 mode))
)
)
)
(('water-vol 'sharkey)
(pickup-collectable!
(-> self fact-info-target)
(pickup-type eco-green)
(the-as float -1000.0)
(the-as handle #f)
)
(if (= (-> self game mode) 'play)
(go target-flut-death (-> gp-0 mode))
)
)
(('death)
(pickup-collectable!
(-> self fact-info-target)
(pickup-type eco-green)
(the-as float -1000.0)
(the-as handle #f)
)
)
(else
(pickup-collectable!
(-> self fact-info-target)
(pickup-type eco-green)
(- (-> *FACT-bank* health-single-inc))
(the-as handle #f)
)
)
)
(target-hit-effect gp-0)
(sound-play-by-name (static-sound-name "flut-hit") (new-sound-id) 1024 -1524 0 1 #t)
)
(set! (-> self control unknown-surface00) *smack-mods*)
(let ((f30-0 1.0))
(case (-> gp-0 angle)
(('shove)
(when (not (= (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
(-> self draw art-group data 158)
)
)
(ja-channel-set! 1)
(let ((s4-3 (-> self skel root-channel 0)))
(joint-control-channel-group-eval!
s4-3
(the-as art-joint-anim (-> self draw art-group data 158))
num-func-identity
)
(set! (-> s4-3 frame-num) 0.0)
)
)
(sound-play-by-name (static-sound-name "smack-surface") (new-sound-id) 1024 0 0 1 #t)
(sound-play-by-name (static-sound-name "flut-hit") (new-sound-id) 1024 1524 0 1 #t)
)
(else
(when (not (= (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
(-> self draw art-group data 157)
)
)
(ja-channel-push! 1 22)
(let ((s4-6 (-> self skel root-channel 0)))
(joint-control-channel-group-eval!
s4-6
(the-as art-joint-anim (-> self draw art-group data 157))
num-func-identity
)
(set! (-> s4-6 frame-num) 0.0)
)
)
)
)
(target-hit-move gp-0 (target-hit-orient gp-0 s5-0) target-flut-falling-anim-trans f30-0)
)
)
(if (and (= (-> self game mode) 'play) (>= 0.0 (-> self fact-info-target health)))
(go target-flut-death (-> gp-0 mode))
)
)
(go target-flut-hit-ground)
(none)
)
:post
target-flut-post
)
(defstate target-flut-death (target)
:event
(-> target-death event)
:exit
(behavior ()
(set! (-> self state-flags) (logand -32777 (-> self state-flags)))
(target-exit)
(clear-pending-settings-from-process *setting-control* self 'process-mask)
(copy-settings-from-target! *setting-control*)
(none)
)
:trans
(-> target-hit trans)
:code
(behavior ((arg0 symbol))
(local-vars (v1-104 symbol))
(logior! (-> self state-flags) #x8000)
(set! (-> self neck flex-blend) 0.0)
(target-timed-invulnerable-off self)
(push-setting! *setting-control* self 'process-mask 'set (-> (new 'static 'array float 1 0.0) 0) #x14a0000)
(copy-settings-from-target! *setting-control*)
(set! (-> self control transv quad) (the-as uint128 0))
(cond
((or (= arg0 'none) (= arg0 'water-vol) (= arg0 'sharkey))
)
((= arg0 'endlessfall)
(sound-play-by-name (static-sound-name "death-fall") (new-sound-id) 1024 0 0 1 #t)
(sound-play-by-name (static-sound-name "flut-hit") (new-sound-id) 716 -2133 0 1 #t)
(camera-change-to (the-as string cam-endlessfall) 30 #f)
(set! (-> self control pat-ignore-mask unknown-bit) 1)
(set! (-> self water flags) (logand -17 (-> self water flags)))
(let ((f30-0 (fmin -4096.0 (- (-> self control ground-impact-vel)))))
(set! (-> self control unknown-uint20) (the-as uint f30-0))
(let ((gp-3 (new-stack-vector0)))
(let ((f0-3 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
0.0
(vector-! gp-3 (-> self control transv) (vector-float*! gp-3 (-> self control dynam gravity-normal) f0-3))
)
(let* ((f0-4 (vector-length gp-3))
(f1-3 f0-4)
)
(vector+!
(-> self control transv)
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f30-0)
(vector-float*! gp-3 gp-3 (/ f0-4 f1-3))
)
)
)
)
(let ((gp-4 (-> *display* base-frame-counter)))
(until (>= (- (-> *display* base-frame-counter) gp-4) 300)
(target-flut-falling-anim-trans)
(vector-seek! (-> self draw color-mult) *zero-vector* (-> *display* seconds-per-frame))
(let ((s5-2 (new-stack-vector0))
(f30-1 (the-as number (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
)
0.0
(vector-!
s5-2
(-> self control transv)
(vector-float*! s5-2 (-> self control dynam gravity-normal) (the-as float f30-1))
)
(let* ((f0-10 (vector-length s5-2))
(f1-4 f0-10)
)
(if (< (the-as float (-> self control unknown-uint20)) (the-as float f30-1))
(set! f30-1 (-> self control unknown-uint20))
)
(vector+!
(-> self control transv)
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) (the-as float f30-1))
(vector-float*! s5-2 s5-2 (/ f0-10 f1-4))
)
)
)
(target-flut-post-post)
(suspend)
)
)
(camera-change-to (the-as string 'base) 0 #f)
)
(else
(set! (-> self control unknown-surface00) *neutral-mods*)
(ja-channel-push! 1 30)
(let ((a0-33 (-> self skel root-channel 0)))
(set! (-> a0-33 frame-group) (the-as art-joint-anim (-> self draw art-group data 160)))
(set! (-> a0-33 param 0)
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 160)) data 0 length) -1))
)
(set! (-> a0-33 param 1) 1.0)
(set! (-> a0-33 frame-num) 0.0)
(joint-control-channel-group! a0-33 (the-as art-joint-anim (-> self draw art-group data 160)) num-func-seek!)
)
(until (ja-done? 0)
(TODO-RENAME-9 (-> self align))
(let ((gp-5 (new 'stack-no-clear 'vector)))
(when (zero? (logand (-> self align flags) 1))
(vector-matrix*! gp-5 (the-as vector (-> self align delta)) (-> self control unknown-matrix01))
(vector-float*! (-> self control transv) gp-5 (-> *display* frames-per-second))
)
)
(suspend)
(let ((a0-37 (-> self skel root-channel 0)))
(set! (-> a0-37 param 0) (the float (+ (-> a0-37 frame-group data 0 length) -1)))
(set! (-> a0-37 param 1) 1.0)
(joint-control-channel-group-eval! a0-37 (the-as art-joint-anim #f) num-func-seek!)
)
)
)
)
(set! (-> self control transv quad) (the-as uint128 0))
(initialize! (-> self game) 'dead (the-as game-save #f) (the-as string #f))
(set! (-> self state-time) (-> *display* base-frame-counter))
(until v1-104
(suspend)
(set! v1-104 (and (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) (not (movie?))))
)
(go target-flut-stance)
(none)
)
:post
target-no-stick-post
)
(defstate target-flut-get-on (target)
:event
target-generic-event-handler
:exit
(-> target-flut-start exit)
:code
(behavior ((arg0 handle))
(set! (-> self control transv quad) (the-as uint128 0))
(set! (-> self alt-cam-pos quad) (-> (&-> (-> self control) unknown-qword00) 0))
(logior! (-> self state-flags) 1024)
(set! (-> self state-time) (-> *display* base-frame-counter))
(let ((gp-0 (new 'stack-no-clear 'vector)))
(set! (-> gp-0 quad) (-> self control trans quad))
(let ((s5-0 (new 'stack-no-clear 'vector)))
(set! (-> s5-0 quad) (-> self control trans quad))
(quaternion-copy! (-> self control unknown-quaternion02) (-> self control quat))
(quaternion-copy! (-> self control unknown-quaternion03) (-> self control unknown-quaternion00))
(set! (-> self control unknown-uint20) (the-as uint (-> self control unknown-vector11 y)))
(let* ((s3-0 (handle->process arg0))
(s4-1 (if (and (nonzero? s3-0) (type-type? (-> s3-0 type) process-drawable))
s3-0
)
)
)
(when s4-1
(set! (-> s5-0 quad) (-> (the-as process-drawable s4-1) root trans quad))
(quaternion-copy! (-> self control unknown-quaternion03) (-> (the-as process-drawable s4-1) root quat))
(send-event s4-1 'trans (-> self flut flut-trans))
(quaternion-copy! (the-as quaternion (-> self flut flut-quat)) (-> (the-as process-drawable s4-1) root quat))
(set! (-> self flut flut-scale quad) (-> (the-as process-drawable s4-1) root scale quad))
(set! (-> self control unknown-int21) (the-as int (-> self flut flut-trans y)))
)
)
(set! (-> self control unknown-vector102 quad) (-> gp-0 quad))
(set! (-> self control unknown-vector103 quad) (-> s5-0 quad))
)
)
(let ((gp-1 #f))
(sound-play-by-name (static-sound-name "uppercut") (new-sound-id) 1024 0 0 1 #t)
(ja-channel-push! 1 15)
(let ((s5-2 (-> self skel root-channel 0)))
(set! (-> s5-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 155)))
(set! (-> s5-2 param 0) (ja-aframe (the-as float 24.0) 0))
(set! (-> s5-2 param 1) 1.0)
(set! (-> s5-2 frame-num) 0.0)
(joint-control-channel-group! s5-2 (the-as art-joint-anim (-> self draw art-group data 155)) num-func-seek!)
)
(until (ja-done? 0)
(when (and (not gp-1) (= (-> self skel root-channel 0) (-> self skel channel)))
(send-event (ppointer->process (-> self manipy)) 'anim-mode 'clone-anim)
(set! gp-1 #t)
)
(set! (-> self control transv quad) (the-as uint128 0))
(suspend)
(let ((s5-3 (-> self skel root-channel 0)))
(set! (-> s5-3 param 0) (ja-aframe (the-as float 24.0) 0))
(set! (-> s5-3 param 1) 1.0)
(joint-control-channel-group-eval! s5-3 (the-as art-joint-anim #f) num-func-seek!)
)
)
)
(sound-play-by-name (static-sound-name "flut-coo") (new-sound-id) 1024 0 0 1 #t)
(set! (-> self state-flags) (logand -1025 (-> self state-flags)))
(set! (-> self control transv quad) (the-as uint128 0))
(quaternion-copy! (-> self control quat) (-> self control unknown-quaternion00))
(rot->dir-targ! (-> self control))
(go target-flut-stance)
(none)
)
:post
(behavior ()
(let ((gp-0 (new 'stack-no-clear 'vector))
(f30-0 (fmin 1.0 (* 0.0044444446 (the float (- (-> *display* base-frame-counter) (-> self state-time))))))
)
(vector-lerp! gp-0 (-> self control unknown-vector102) (-> self control unknown-vector103) f30-0)
(set! (-> gp-0 y)
(lerp
(-> self control unknown-vector102 y)
(-> self control unknown-vector103 y)
(fmax
0.0
(fmin 1.0 (* 0.006666667 (the float (+ (- (-> self state-time)) (-> *display* base-frame-counter)))))
)
)
)
(move-to-point! (-> self control) gp-0)
(quaternion-slerp!
(-> self control unknown-quaternion00)
(-> self control unknown-quaternion02)
(-> self control unknown-quaternion03)
f30-0
)
)
(target-no-move-post)
(none)
)
)
(defstate target-flut-get-off (target)
:event
target-generic-event-handler
:exit
(-> target-flut-start exit)
:code
(behavior ((arg0 handle))
(set-forward-vel (-> (new 'static 'array float 1 0.0) 0))
(let ((s5-0 0))
(while (zero? (logand (-> self control status) 1))
(target-flut-falling-anim-trans)
(+! s5-0 (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter)))
(suspend)
)
)
(go target-flut-get-off-jump arg0)
(none)
)
:post
(behavior ()
(target-no-stick-post)
(target-flut-post-post)
(none)
)
)
(defstate target-flut-get-off-jump (target)
:event
target-generic-event-handler
:exit
(-> target-flut-start exit)
:code
(behavior ((arg0 handle))
(set! (-> self state-time) (-> *display* base-frame-counter))
(set! (-> self control transv quad) (the-as uint128 0))
(let ((gp-0 (new 'stack-no-clear 'vector)))
(set! (-> gp-0 quad) (-> self control trans quad))
(let ((s4-0 (new 'stack-no-clear 'vector)))
(set! (-> s4-0 quad) (-> self control trans quad))
(quaternion-copy! (-> self control unknown-quaternion02) (-> self control quat))
(quaternion-copy! (-> self control unknown-quaternion03) (-> self control unknown-quaternion00))
(set! (-> self control unknown-uint20) (the-as uint (-> self control unknown-vector11 y)))
(let* ((s2-0 (handle->process arg0))
(s3-0 (if (and (nonzero? s2-0) (type-type? (-> s2-0 type) process-drawable))
s2-0
)
)
)
(when s3-0
(set! (-> s4-0 quad) (-> (the-as process-drawable s3-0) root trans quad))
(set-yaw-angle-clear-roll-pitch!
(-> (the-as process-drawable s3-0) root)
(quaternion-y-angle (-> self control quat))
)
(quaternion-copy! (-> self control unknown-quaternion03) (-> (the-as process-drawable s3-0) root quat))
(send-event s3-0 'trans (-> self flut flut-trans))
(quaternion-copy! (the-as quaternion (-> self flut flut-quat)) (-> (the-as process-drawable s3-0) root quat))
(set! (-> self flut flut-scale quad) (-> (the-as process-drawable s3-0) root scale quad))
(set! (-> self control unknown-int21) (the-as int (-> self flut flut-trans y)))
)
)
(set! (-> self control unknown-vector102 quad) (-> gp-0 quad))
(set! (-> self control unknown-vector103 quad) (-> s4-0 quad))
)
(sound-play-by-name (static-sound-name "flut-coo") (new-sound-id) 921 -762 0 1 #t)
(ja-channel-push! 1 15)
(let ((a0-23 (-> self skel root-channel 0)))
(set! (-> a0-23 frame-group) (the-as art-joint-anim (-> self draw art-group data 156)))
(set! (-> a0-23 param 0)
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 156)) data 0 length) -1))
)
(set! (-> a0-23 param 1) 1.0)
(set! (-> a0-23 frame-num) 0.0)
(joint-control-channel-group! a0-23 (the-as art-joint-anim (-> self draw art-group data 156)) num-func-seek!)
)
(until (ja-done? 0)
(suspend)
(let ((a0-24 (-> self skel root-channel 0)))
(set! (-> a0-24 param 0) (the float (+ (-> a0-24 frame-group data 0 length) -1)))
(set! (-> a0-24 param 1) 1.0)
(joint-control-channel-group-eval! a0-24 (the-as art-joint-anim #f) num-func-seek!)
)
)
(send-event (handle->process arg0) 'draw)
(set-yaw-angle-clear-roll-pitch!
(-> self control)
(quaternion-y-angle (-> self control unknown-quaternion03))
)
(rot->dir-targ! (-> self control))
(ja-post)
(vector<-cspace! gp-0 (-> self node-list data 3))
(set! (-> gp-0 y) (+ -5896.192 (-> gp-0 y)))
(move-to-point! (-> self control) gp-0)
)
(send-event *camera* 'ease-in)
(ja-channel-set! 0)
(go target-flut-get-off-hit-ground #f)
(none)
)
:post
(behavior ()
(let ((gp-0 (new 'stack-no-clear 'vector))
(f30-0
(fmax 0.0 (fmin 1.0 (* 0.006666667 (the float (- (-> *display* base-frame-counter) (-> self state-time))))))
)
)
(fmax 0.0 (fmin 1.0 (* 0.006666667 (the float (- (-> *display* base-frame-counter) (-> self state-time))))))
(vector-lerp! gp-0 (-> self control unknown-vector102) (-> self control unknown-vector103) f30-0)
(set! (-> gp-0 y)
(lerp
(-> self control unknown-vector102 y)
(-> self control unknown-vector103 y)
(fmax
0.0
(fmin 1.0 (* 0.0044444446 (the float (+ (- -150 (-> self state-time)) (-> *display* base-frame-counter)))))
)
)
)
(move-to-point! (-> self control) gp-0)
(quaternion-slerp!
(-> self control unknown-quaternion00)
(-> self control unknown-quaternion02)
(-> self control unknown-quaternion03)
f30-0
)
)
(vector+! (-> self flut flut-trans) (-> self control trans) (-> self control unknown-vector12))
(quaternion-copy! (the-as quaternion (-> self flut flut-quat)) (-> self control quat))
(set! (-> self flut flut-scale quad) (-> self control scale quad))
(target-no-move-post)
(none)
)
)
(defstate target-flut-get-off-hit-ground (target)
:event
target-standard-event-handler
:enter
(-> target-hit-ground enter)
:trans
(behavior ()
(logior! (-> self control status) 7)
((-> target-hit-ground trans))
(none)
)
:code
(behavior ((arg0 symbol))
(ja-channel-set! 1)
(let ((gp-0 (-> self skel root-channel 0)))
(set! (-> gp-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 35)))
(set! (-> gp-0 param 0)
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 35)) data 0 length) -1))
)
(set! (-> gp-0 param 1) 1.0)
(set! (-> gp-0 frame-num) (ja-aframe (the-as float 42.0) 0))
(joint-control-channel-group! gp-0 (the-as art-joint-anim (-> self draw art-group data 35)) num-func-seek!)
)
(until (ja-done? 0)
(suspend)
(let ((a0-4 (-> self skel root-channel 0)))
(set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1)))
(set! (-> a0-4 param 1) 1.0)
(joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-seek!)
)
)
(go target-stance)
(none)
)
:post
(the-as (function none :behavior target) target-post)
)
(defstate target-flut-grab (target)
:event
(behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
(cond
((and (= arg2 'query) (= (-> arg3 param 0) 'mode))
(-> self state name)
)
(else
(case arg2
(('end-mode)
(go target-flut-stance)
)
(('clone-anim)
(go target-flut-clone-anim (process->handle (the-as process (-> arg3 param 0))))
)
(else
(target-generic-event-handler arg0 arg1 arg2 arg3)
)
)
)
)
)
:enter
(behavior ()
(set! (-> self control unknown-surface00) *grab-mods*)
(set! (-> self neck flex-blend) 0.0)
(logior! (-> self state-flags) 272)
(none)
)
:exit
(behavior ()
(set! (-> self state-flags) (logand -273 (-> self state-flags)))
(target-exit)
((-> target-flut-start exit))
(none)
)
:code
(-> target-flut-stance code)
:post
(behavior ()
(target-no-stick-post)
(target-flut-post-post)
(none)
)
)
(defstate target-flut-clone-anim (target)
:event
(behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
(if (and (= arg2 'trans) (= (-> arg3 param 0) 'restore))
(set! (-> self control unknown-uint20) (the-as uint #f))
)
((-> target-flut-grab event) arg0 arg1 arg2 arg3)
)
:enter
(-> target-clone-anim enter)
:exit
(behavior ()
(send-event (ppointer->process (-> self sidekick)) 'matrix #f)
((-> target-clone-anim exit))
((-> target-flut-start exit))
(none)
)
:code
(behavior ((arg0 handle))
(send-event (ppointer->process (-> self sidekick)) 'matrix 'play-anim)
(clone-anim arg0 33 #t "")
(go target-flut-stance)
(none)
)
:post
(behavior ()
(target-no-ja-move-post)
(target-flut-post-post)
(none)
)
)