;;-*-Lisp-*- (in-package goal) ;; definition of type flut-info (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 ) ;; definition for method 3 of type flut-info (defmethod inspect flut-info ((obj flut-info)) (format #t "[~8x] ~A~%" obj (-> obj type)) (format #t "~Tentity: ~A~%" (-> obj entity)) (format #t "~Tflut-trans: ~`vector`P~%" (-> obj flut-trans)) (format #t "~Tflut-quat: ~`vector`P~%" (-> obj flut-quat)) (format #t "~Tflut-scale: ~`vector`P~%" (-> obj flut-scale)) (format #t "~Tstick-lock: ~A~%" (-> obj stick-lock)) (format #t "~Tflap-sound-id: ~D~%" (-> obj flap-sound-id)) obj ) ;; definition of type flut-bank (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 ) ;; definition for method 3 of type flut-bank (defmethod inspect flut-bank ((obj flut-bank)) (format #t "[~8x] ~A~%" obj (-> obj type)) (format #t "~Tjump-height-min: (meters ~m)~%" (-> obj jump-height-min)) (format #t "~Tjump-height-max: (meters ~m)~%" (-> obj jump-height-max)) (format #t "~Tdouble-jump-height-min: (meters ~m)~%" (-> obj double-jump-height-min)) (format #t "~Tdouble-jump-height-max: (meters ~m)~%" (-> obj double-jump-height-max)) (format #t "~Tair-attack-speed: (meters ~m)~%" (-> obj air-attack-speed)) (format #t "~Tground-timeout: ~D~%" (-> obj ground-timeout)) obj ) ;; definition for symbol *FLUT-bank*, type flut-bank (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 ) ) ;; definition for symbol *flut-walk-mods*, type surface (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 ) ) ;; definition for symbol *flut-jump-mods*, type surface (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 ) ) ;; definition for symbol *flut-double-jump-mods*, type surface (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 ) ) ;; definition for symbol *flut-run-attack-mods*, type surface (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 ) ) ;; definition for symbol *flut-air-attack-mods*, type surface (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 ) ) ;; definition for function target-flut-post-post ;; INFO: Return type mismatch int vs none. ;; Used lq/sq (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) ) ;; definition for function target-flut-post ;; INFO: Return type mismatch int vs none. (defbehavior target-flut-post target () (target-post) (target-flut-post-post) 0 (none) ) ;; definition for function target-flut-falling-anim-trans ;; ERROR: function was not converted to expressions. Cannot decompile. ;; definition for function target-flut-hit-ground-anim (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 ) ) ) ;; definition for function target-flut-standard-event-handler ;; Used lq/sq (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 unknown-vector54)) (s3-1 (vector-! (new 'stack-no-clear 'vector) gp-1 (-> self control trans))) (f30-1 (fmax 8192.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) (the-as float 16384.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) ) ) ) ) ) ;; definition for function target-flut-dangerous-event-handler (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) ) ) ) ;; failed to figure out what this is: (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) ) ;; failed to figure out what this is: (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 ) ;; failed to figure out what this is: (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 (the-as float 8192.0) (the-as float 21845.334) ) ) (if (and (= (-> self control surf name) '*tar-surface*) (< 8192.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 ) ;; failed to figure out what this is: (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 ) ;; failed to figure out what this is: (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 (< 8192.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 ) ;; failed to figure out what this is: (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 ) ;; failed to figure out what this is: (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 ) ;; failed to figure out what this is: (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 (meters 2.0) (-> *TARGET-bank* smack-surface-height) (the-as process #f) (the-as (state target) 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 ) ;; failed to figure out what this is: (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 ) ;; failed to figure out what this is: (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)) ) ) (dummy-47 (-> 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 ) ;; failed to figure out what this is: (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 unknown-vector54 quad)) (ja-channel-set! 0) (let ((s3-1 (-> *display* base-frame-counter))) (until (>= (- (-> *display* base-frame-counter) s3-1) 300) (suspend) ) ) (TODO-RENAME-30 (-> 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 ) ;; failed to figure out what this is: (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 ) ;; failed to figure out what this is: (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))))) ) ) ) (TODO-RENAME-30 (-> 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) ) ) ;; failed to figure out what this is: (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) ) ) ;; failed to figure out what this is: (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))) (TODO-RENAME-30 (-> 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))))) ) ) ) (TODO-RENAME-30 (-> 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) ) ) ;; failed to figure out what this is: (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) ) ;; failed to figure out what this is: (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) ) ) ;; failed to figure out what this is: (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) ) )