mirror of
https://github.com/open-goal/jak-project
synced 2026-09-06 11:20:54 -04:00
c162c66118
This PR does two main things: 1. Work through the main low-hanging fruit issues in the formatter keeping it from feeling mature and usable 2. Iterate and prove that point by formatting all of the Jak 1 code base. **This has removed around 100K lines in total.** - The decompiler will now format it's results for jak 1 to keep things from drifting back to where they were. This is controlled by a new config flag `format_code`. How am I confident this hasn't broken anything?: - I compiled the entire project and stored it's `out/jak1/obj` files separately - I then recompiled the project after formatting and wrote a script that md5's each file and compares it (`compare-compilation-outputs.py` - The results (eventually) were the same:  > This proves that the only difference before and after is non-critical whitespace for all code/macros that is actually in use. I'm still aware of improvements that could be made to the formatter, as well as general optimization of it's performance. But in general these are for rare or non-critical situations in my opinion and I'll work through them before doing Jak 2. The vast majority looks great and is working properly at this point. Those known issues are the following if you are curious: 
1971 lines
107 KiB
Common Lisp
1971 lines
107 KiB
Common Lisp
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
(bundles "ENGINE.CGO" "GAME.CGO")
|
|
(require "engine/target/target-handler.gc")
|
|
|
|
;; note: changed for high fps
|
|
|
|
;; TODO - almost all of these are in target-handler or target2, temporary
|
|
|
|
(define-extern target-state-hook-exit (function none :behavior target))
|
|
|
|
(define-extern target-effect-exit (function none :behavior target))
|
|
|
|
(define-extern target-post (function none :behavior target))
|
|
|
|
(define-extern target-walk-event-handler (function process int symbol event-message-block object :behavior target))
|
|
|
|
(define-extern target-land-effect (function none :behavior target))
|
|
|
|
(define-extern target-dangerous-event-handler (function process int symbol event-message-block object :behavior target))
|
|
|
|
(define-extern target-standard-event-handler (function process int symbol event-message-block object :behavior target))
|
|
|
|
(define-extern target-jump-event-handler (function process int symbol event-message-block object :behavior target))
|
|
|
|
(define-extern target-shoved (function meters meters process (state object object target) object :behavior target))
|
|
|
|
(define-extern target-send-attack (function process uint touching-shapes-entry int int symbol :behavior target))
|
|
|
|
(define-extern target-bonk-event-handler (function process int symbol event-message-block object :behavior target))
|
|
|
|
;; DECOMP BEGINS
|
|
|
|
(defbehavior target-falling-anim target ((arg0 time-frame) (arg1 time-frame))
|
|
(let ((v1-2 (ja-group)))
|
|
(cond
|
|
((or (= v1-2 eichar-jump-loop-ja) (= v1-2 eichar-attack-uppercut-ja)))
|
|
((let ((v1-8 (ja-group))) (or (= v1-8 eichar-edge-grab-stance0-ja) (= v1-8 eichar-edge-grab-stance1-ja)))
|
|
(ja-channel-push! 1 (seconds 0.15))
|
|
(ja-no-eval :group! eichar-edge-grab-off-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))))
|
|
((ja-group? eichar-edge-grab-off-ja)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!)))
|
|
(ja-channel-push! 1 (seconds 0.15)))
|
|
((ja-group? eichar-yellow-jumping-blast-ja)
|
|
(ja-channel-push! 1 (seconds 0.15))
|
|
(ja-no-eval :group! eichar-jump-ja :num! (seek!) :frame-num (ja-aframe (the-as float 20.0) 0))
|
|
(until (ja-done? 0)
|
|
(ja :num! (seek!))
|
|
(suspend)))
|
|
(else
|
|
(ja-channel-push! 1 arg1)
|
|
(ja :group! eichar-jump-loop-ja)
|
|
(while (!= (-> self skel root-channel 0) (-> self skel channel))
|
|
(suspend)))))
|
|
(ja-no-eval :group! eichar-jump-loop-ja :num! (loop!) :frame-num 0.0)
|
|
(let ((s5-1 (current-time)))
|
|
(while (or (= arg0 -1) (not (time-elapsed? s5-1 arg0)))
|
|
(suspend)
|
|
(ja :group! eichar-jump-loop-ja :num! (loop!))))
|
|
#f)
|
|
|
|
(defbehavior target-falling-anim-trans target ()
|
|
(let ((v1-2 (ja-group))) (b! (or (= v1-2 eichar-jump-loop-ja) (= v1-2 eichar-jump-land-ja)) cfg-7 :delay (empty-form)))
|
|
(ja-channel-push! 1 (seconds 0.33))
|
|
(ja :group! eichar-jump-loop-ja)
|
|
(b! #t cfg-23 :delay (nop!))
|
|
(label cfg-7)
|
|
(cond
|
|
((and (logtest? (-> self control status) (cshape-moving-flags onsurf)) (not (ja-group? eichar-jump-land-ja)))
|
|
(ja-channel-push! 1 (seconds 0.02))
|
|
(ja :group! eichar-jump-land-ja))
|
|
((ja-group? eichar-jump-loop-ja) (ja :num! (loop!)))
|
|
((ja-group? eichar-jump-land-ja) (ja :num! (seek!))))
|
|
(label cfg-23)
|
|
0
|
|
(none))
|
|
|
|
(defbehavior target-falling-trans target ((arg0 basic) (arg1 time-frame))
|
|
(if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) circle) (can-feet?)) (go target-attack-air #f))
|
|
(when (= arg0 'target-eco-powerup)
|
|
(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))
|
|
(not (logtest? (-> self water flags) (water-flags wt09)))
|
|
(not (time-elapsed? (-> self state-time) (seconds 3)))
|
|
(not (logtest? (-> self state-flags) (state-flags prevent-jump))))
|
|
(go target-jump (-> *TARGET-bank* jump-height-min) (-> *TARGET-bank* jump-height-max) (the-as surface #f))))
|
|
(if (logtest? (-> self control status) (cshape-moving-flags onsurf)) (go target-hit-ground #f))
|
|
(when (if (and (< (target-move-dist (-> *TARGET-bank* stuck-time)) (-> *TARGET-bank* stuck-distance))
|
|
(>= arg1 0)
|
|
(time-elapsed? (-> self state-time) arg1)
|
|
(not (and *cheat-mode* (cpad-hold? (-> self control unknown-cpad-info00 number) r2))))
|
|
#t)
|
|
(logior! (-> self control status) (cshape-moving-flags onsurf))
|
|
(go target-hit-ground 'stuck))
|
|
(if (!= (-> self state-time) (current-time)) (slide-down-test))
|
|
0
|
|
(none))
|
|
|
|
(defbehavior target-hit-ground-anim target ((arg0 symbol))
|
|
(let ((v1-2 (ja-group)))
|
|
(cond
|
|
((or (= v1-2 eichar-flop-down-ja)
|
|
(= v1-2 eichar-flop-down-loop-ja)
|
|
(= v1-2 eichar-moving-flop-down-ja)
|
|
(= v1-2 eichar-moving-flop-down-loop-ja))
|
|
(let ((gp-0 (or (= (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) stick0-speed) 0.0)
|
|
(< (-> self control unknown-float01) 61440.0)))
|
|
(f30-0 (the-as float (if (= arg0 'swim) 0.4 1.0))))
|
|
(ja-channel-set! 1)
|
|
(let ((s5-0 (-> self skel root-channel 0)))
|
|
(set! (-> s5-0 frame-group) (the-as art-joint-anim (if gp-0 eichar-flop-down-land-ja eichar-moving-flop-down-land-ja)))
|
|
(set! (-> s5-0 param 0)
|
|
(the float
|
|
(+ (-> (the-as art-joint-anim (if gp-0 eichar-flop-down-land-ja eichar-moving-flop-down-land-ja)) data 0 length) -1)))
|
|
(let ((f30-1 (seek f30-0 (the-as float 1.0) (* 0.5 (seconds-per-frame)))))
|
|
(set! (-> s5-0 param 1) f30-1)
|
|
(set! (-> s5-0 frame-num) 0.0)
|
|
(joint-control-channel-group! s5-0
|
|
(the-as art-joint-anim (if gp-0 eichar-flop-down-land-ja eichar-moving-flop-down-land-ja))
|
|
num-func-seek!)
|
|
(until (ja-done? 0)
|
|
(compute-alignment! (-> self align))
|
|
(align! (-> self align)
|
|
(if gp-0 (align-opts adjust-y-vel) (align-opts adjust-y-vel adjust-xz-vel))
|
|
(the-as float 1.0)
|
|
(the-as float 1.0)
|
|
(the-as float 1.5))
|
|
(when (and (>= 25.0 (ja-aframe-num 0))
|
|
(and (>= (ja-aframe-num 0) 21.0)
|
|
(= (-> self next-state name) 'target-flop-hit-ground)
|
|
(!= (-> self control unknown-spoolanim00) 'stuck)))
|
|
(set! (-> self event-hook) target-jump-event-handler)
|
|
(when (and (cpad-hold? (-> self control unknown-cpad-info00 number) x) (can-jump? #f))
|
|
(ja-channel-set! 0)
|
|
(go target-high-jump
|
|
(-> *TARGET-bank* flop-jump-height-min)
|
|
(-> *TARGET-bank* flop-jump-height-max)
|
|
(if gp-0 'flop 'flop-forward))))
|
|
(suspend)
|
|
(let ((s5-1 (-> self skel root-channel 0)))
|
|
(set! (-> s5-1 param 0) (the float (+ (-> s5-1 frame-group data 0 length) -1)))
|
|
(set! f30-1 (seek f30-1 (the-as float 1.0) (* 0.5 (seconds-per-frame))))
|
|
(set! (-> s5-1 param 1) f30-1)
|
|
(joint-control-channel-group-eval! s5-1 (the-as art-joint-anim #f) num-func-seek!))))))
|
|
#f)
|
|
((and (= (-> self control ground-pat material) (pat-material ice)) (< 16384.0 (-> self control unknown-float01))) #f)
|
|
((let ((v1-95 (ja-group)))
|
|
(or (or (= v1-95 eichar-jump-loop-ja) (= v1-95 eichar-launch-jump-ja) (= v1-95 eichar-launch-jump-loop-ja))
|
|
(and (ja-group? eichar-jump-ja) (>= (ja-aframe-num 0) 38.0))))
|
|
(ja-channel-push! 1 (seconds 0.02))
|
|
(ja-no-eval :group! eichar-jump-land-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!)))
|
|
#f)
|
|
((and (ja-group? eichar-jump-ja) (>= (ja-aframe-num 0) 35.0))
|
|
(ja-channel-set! 1)
|
|
(ja-no-eval :group! eichar-jump-short-land-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!)))
|
|
(ja-no-eval :group! eichar-jump-land-ja :num! (seek!) :frame-num (ja-aframe (the-as float 50.0) 0))
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!)))
|
|
#f)
|
|
((let ((v1-187 (ja-group))) (or (= v1-187 eichar-jump-ja) (= v1-187 eichar-duck-high-jump-ja)))
|
|
(ja-channel-set! 1)
|
|
(ja-no-eval :group! eichar-jump-short-land-ja :num! (seek!) :frame-num (ja-aframe (the-as float 38.0) 0))
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!)))
|
|
(ja-no-eval :group! eichar-jump-land-ja :num! (seek!) :frame-num (ja-aframe (the-as float 50.0) 0))
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!)))
|
|
#f)
|
|
((let ((v1-242 (ja-group))) (or (= v1-242 eichar-hit-from-front-ja) (= v1-242 eichar-hit-from-back-ja)))
|
|
(let ((f30-2 (the-as float (if (ja-group? eichar-hit-from-back-ja) 24576.0 -24576.0))))
|
|
(ja-channel-push! 1 (seconds 0.04))
|
|
(ja-no-eval :group! eichar-jump-short-land-ja :num! (seek!) :frame-num (ja-aframe (the-as float 38.0) 0))
|
|
(until (ja-done? 0)
|
|
(set-forward-vel f30-2)
|
|
(suspend)
|
|
(ja :num! (seek!))))
|
|
(ja-no-eval :group! eichar-jump-land-ja :num! (seek!) :frame-num (ja-aframe (the-as float 50.0) 0))
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!)))
|
|
#f)
|
|
((let ((v1-305 (ja-group)))
|
|
(or (= v1-305 eichar-jump-ja)
|
|
(= v1-305 eichar-attack-from-jump-ja)
|
|
(= v1-305 eichar-attack-from-jump-loop-ja)
|
|
(= v1-305 eichar-attack-from-jump-end-ja)
|
|
(= v1-305 eichar-moving-flop-down-land-ja)
|
|
(= v1-305 eichar-flop-down-land-ja)
|
|
(= v1-305 eichar-attack-uppercut-ja)))
|
|
(ja-channel-push! 1 (seconds 0.04))
|
|
(ja-no-eval :group! eichar-jump-land-ja :num! (seek!) :frame-num (ja-aframe (the-as float 42.0) 0))
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!)))
|
|
#f)
|
|
((ja-group? eichar-jump-land-ja) (ja-no-eval :num! (seek!)) (while (not (ja-done? 0)) (suspend) (ja-eval)) #f))))
|
|
|
|
(defstate target-startup (target)
|
|
:event target-standard-event-handler
|
|
:code
|
|
(behavior ()
|
|
(suspend)
|
|
(suspend)
|
|
(go target-stance))
|
|
:post target-no-move-post)
|
|
|
|
(defstate target-stance (target)
|
|
:event target-standard-event-handler
|
|
:enter
|
|
(behavior ()
|
|
(set! (-> self control unknown-surface00) *walk-mods*)
|
|
(set-time! (-> self state-time)))
|
|
:exit
|
|
(behavior ()
|
|
(set! (-> self control unknown-float81) 0.0)
|
|
(target-state-hook-exit))
|
|
:trans
|
|
(behavior ()
|
|
((-> self state-hook))
|
|
(if (logtest? (-> self water flags) (water-flags wt10)) (go target-wade-stance))
|
|
(when (= (-> self control ground-pat material) (pat-material ice))
|
|
(set! (-> self control unknown-float81) 0.0)
|
|
(remove-exit)
|
|
(go target-ice-stance))
|
|
(when (move-legs?)
|
|
(set! (-> self control unknown-float81) 0.0)
|
|
(remove-exit)
|
|
(go target-walk))
|
|
(when (and (cpad-hold? (-> self control unknown-cpad-info00 number) l1 r1) (can-duck?))
|
|
(set! (-> self control unknown-float81) 0.0)
|
|
(remove-exit)
|
|
(go target-duck-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-jump (-> *TARGET-bank* jump-height-min) (-> *TARGET-bank* jump-height-max) (the-as surface #f)))
|
|
(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 circle))
|
|
(can-feet?))
|
|
(go target-attack))
|
|
(if (can-hands? #t) (go target-running-attack))
|
|
(slide-down-test)
|
|
(fall-test))
|
|
:code
|
|
(behavior ()
|
|
(let ((s5-0 22)
|
|
(gp-0 (new 'stack 'ground-tween-info)))
|
|
(let ((v1-3 (ja-group)))
|
|
(cond
|
|
((or (= v1-3 eichar-wade-shallow-walk-ja) (= v1-3 eichar-wade-deep-walk-ja)) (set! s5-0 45))
|
|
((ja-group? eichar-wheel-flip-ja)
|
|
(ja-no-eval :group! eichar-wheel-flip-land-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))))
|
|
((ja-group? eichar-attack-from-stance-ja)
|
|
(cond
|
|
((rand-vu-percent? (the-as float 0.3))
|
|
(ja-no-eval :group! eichar-attack-from-stance-alt-end-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))))
|
|
(else
|
|
(ja-no-eval :group! eichar-attack-from-stance-end-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))))))
|
|
((ja-group? eichar-smack-surface-ja)
|
|
(ja-no-eval :group! eichar-smack-surface-end-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))))
|
|
((ja-group? eichar-yellow-running-blast-ja)
|
|
(ja-no-eval :group! eichar-yellow-running-blast-end-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!)))
|
|
(set! s5-0 0))
|
|
((ja-group? eichar-attack-punch-ja)
|
|
(set! (-> self control unknown-float81) (-> self control unknown-float80))
|
|
(set! (-> self control unknown-surface00) *walk-no-turn-mods*)
|
|
(ja-no-eval :group!
|
|
(if (rand-vu-percent? (the-as float 0.3)) eichar-attack-punch-alt-end-ja eichar-attack-punch-end-ja)
|
|
:num! (seek!)
|
|
:frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(seek! (-> self control unknown-float81) (the-as float 0.0) (seconds-per-frame))
|
|
(suspend)
|
|
(ja :num! (seek!)))
|
|
(set! (-> self control unknown-surface00) *walk-mods*)
|
|
(set! (-> self control unknown-float81) 0.0)
|
|
(rot->dir-targ! (-> self control)))
|
|
((let ((v1-206 (ja-group))) (or (= v1-206 eichar-duck-stance-ja) (= v1-206 eichar-duck-walk-ja)))
|
|
(ja-channel-push! 1 (seconds 0.04))
|
|
(ja-no-eval :group! eichar-stance-to-duck-ja :num! (seek! 0.0 1.2) :frame-num max)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! 0.0 1.2)))
|
|
(set! s5-0 12))
|
|
((or (and (ja-group? eichar-walk-ja) (begin (set! s5-0 45) (< 0.5 (-> self skel root-channel 6 frame-interp))))
|
|
(let ((v1-243 (ja-group)))
|
|
(or (= v1-243 eichar-run-squash-ja)
|
|
(= v1-243 eichar-run-squash-weak-ja)
|
|
(= v1-243 eichar-attack-from-stance-run-end-ja)
|
|
(= v1-243 eichar-attack-from-stance-run-alt-end-ja))))
|
|
(let ((f30-1 (the-as float
|
|
(cond
|
|
((ja-group? eichar-walk-ja)
|
|
(let ((f0-57 (+ 50.0 (* 0.8333333 (+ -25.0 (ja-aframe-num 0))))))
|
|
(- f0-57 (* (the float (the int (/ f0-57 50.0))) 50.0))))
|
|
(else 0.0)))))
|
|
(set! s5-0 45)
|
|
(ja-channel-push! 3 (the-as time-frame s5-0))
|
|
(ground-tween-initialize gp-0
|
|
(the-as uint 0)
|
|
(the-as uint eichar-run-to-stance-loop-ja)
|
|
(the-as uint eichar-run-to-stance-loop-up-ja)
|
|
(the-as uint eichar-run-to-stance-loop-down-ja)
|
|
(the-as uint eichar-run-to-stance-loop-left-ja)
|
|
(the-as uint eichar-run-to-stance-loop-right-ja))
|
|
(ja :num-func num-func-identity :frame-num (ja-aframe f30-1 0)))
|
|
(ja :chan 1 :num! (chan 0))
|
|
(ja :chan 2 :num! (chan 0))
|
|
(dotimes (s4-2 3)
|
|
(until (ja-done? 0)
|
|
(ground-tween-update gp-0 (-> self control unknown-float61) (-> self control unknown-float62))
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
(ja :chan 1 :num! (chan 0))
|
|
(ja :chan 2 :num! (chan 0)))
|
|
(ja :num-func num-func-identity :frame-num 0.0))
|
|
(ground-tween-initialize gp-0
|
|
(the-as uint 0)
|
|
(the-as uint eichar-run-to-stance-ja)
|
|
(the-as uint eichar-run-to-stance-up-ja)
|
|
(the-as uint eichar-run-to-stance-down-ja)
|
|
(the-as uint eichar-run-to-stance-left-ja)
|
|
(the-as uint eichar-run-to-stance-right-ja))
|
|
(until (ja-done? 0)
|
|
(ground-tween-update gp-0 (-> self control unknown-float61) (-> self control unknown-float62))
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
(ja :chan 1 :num! (chan 0))
|
|
(ja :chan 2 :num! (chan 0))))
|
|
((and (ja-group? eichar-walk-ja) (>= (-> self control unknown-float01) 5734.4)) (set! s5-0 45))))
|
|
(if (not (and (ja-group? eichar-stance-loop-ja) (= (ja-group-size) 3))) (ja-channel-push! 3 (the-as time-frame s5-0)))
|
|
(ground-tween-initialize gp-0
|
|
(the-as uint 0)
|
|
(the-as uint eichar-stance-loop-ja)
|
|
(the-as uint eichar-stance-loop-up-ja)
|
|
(the-as uint eichar-stance-loop-down-ja)
|
|
(the-as uint eichar-stance-loop-left-ja)
|
|
(the-as uint eichar-stance-loop-right-ja))
|
|
(loop
|
|
(ground-tween-update gp-0 (-> self control unknown-float61) (-> self control unknown-float62))
|
|
(suspend)
|
|
(ja :num! (loop!))
|
|
(ja :chan 1 :num! (chan 0))
|
|
(ja :chan 2 :num! (chan 0))
|
|
(if (can-play-stance-amibent?) (go target-stance-ambient)))))
|
|
:post target-post)
|
|
|
|
(defstate target-walk (target)
|
|
:event target-walk-event-handler
|
|
:enter
|
|
(behavior ()
|
|
(set-time! (-> self state-time))
|
|
(set! (-> self control unknown-surface00) *walk-mods*))
|
|
:exit
|
|
(behavior ()
|
|
(target-effect-exit)
|
|
(target-state-hook-exit))
|
|
:trans
|
|
(behavior ()
|
|
((-> self state-hook))
|
|
(when (= (-> self control ground-pat material) (pat-material ice))
|
|
(target-effect-exit)
|
|
(remove-exit)
|
|
(go target-ice-walk))
|
|
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control 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 l1 r1))
|
|
(and (time-elapsed? (-> *TARGET-bank* wheel-timeout) (-> self control unknown-dword30))
|
|
(and (!= (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) stick0-speed) 0.0) (can-wheel?))))
|
|
(go target-wheel))
|
|
(when (and (cpad-hold? (-> self control unknown-cpad-info00 number) l1 r1) (can-duck?))
|
|
(target-effect-exit)
|
|
(remove-exit)
|
|
(go target-duck-walk))
|
|
(when (not (move-legs?))
|
|
(target-effect-exit)
|
|
(remove-exit)
|
|
(go target-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-jump (-> *TARGET-bank* jump-height-min) (-> *TARGET-bank* jump-height-max) (the-as surface #f)))
|
|
(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 circle))
|
|
(can-feet?))
|
|
(go target-attack))
|
|
(if (can-hands? #t) (go target-running-attack))
|
|
(when (and (turn-around?) (time-elapsed? (-> self state-time) (seconds 0.3)))
|
|
(set! (-> self control transv quad) (-> self control unknown-vector-array10 (-> self control unknown-int10) quad))
|
|
(set! (-> self control transv w) 1.0)
|
|
(go target-turn-around))
|
|
(slide-down-test)
|
|
(fall-test))
|
|
:code
|
|
(behavior ()
|
|
(let ((f28-0 0.0)
|
|
(f30-0 (fmax 0.0 (fmin 1.0 (* 0.000048828126 (+ -16384.0 (-> self control unknown-float01))))))
|
|
(gp-0 #f))
|
|
(cond
|
|
((ja-group? eichar-turn-around-ja) (set! f30-0 1.0) (ja-channel-push! 7 (seconds 0.05)))
|
|
((ja-group? eichar-duck-roll-ja) (ja-channel-push! 7 (seconds 0.075)) (set! f30-0 1.0))
|
|
((ja-group? eichar-attack-from-stance-ja)
|
|
(let ((f30-1 (fmax 0.8 (fmin 1.0 (* 0.000048828126 (-> self control unknown-float01))))))
|
|
(cond
|
|
((and (rand-vu-percent? (the-as float 0.3)) (< 20480.0 (-> self control unknown-float01)))
|
|
(ja-no-eval :group!
|
|
eichar-attack-from-stance-alt-end-ja
|
|
:num!
|
|
(seek! (ja-aframe (the-as float 29.0) 0) f30-1)
|
|
:frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! (ja-aframe (the-as float 29.0) 0) f30-1)))
|
|
(ja-no-eval :group! eichar-attack-from-stance-run-alt-end-ja :num! (seek! max f30-1) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! max f30-1))))
|
|
(else
|
|
(ja-no-eval :group!
|
|
eichar-attack-from-stance-end-ja
|
|
:num!
|
|
(seek! (ja-aframe (the-as float 29.0) 0) f30-1)
|
|
:frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! (ja-aframe (the-as float 29.0) 0) f30-1)))
|
|
(ja-no-eval :group! eichar-attack-from-stance-run-end-ja :num! (seek! max f30-1) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! max f30-1))))))
|
|
(ja-channel-push! 7 (seconds 0.05))
|
|
(set! f30-0 1.0)
|
|
(set! f28-0 30.0))
|
|
(else
|
|
(let ((v1-108 (ja-group)))
|
|
(cond
|
|
((or (= v1-108 eichar-attack-punch-ja) (= v1-108 eichar-attack-punch-end-ja))
|
|
(set! f30-0 1.0)
|
|
(set! f28-0 30.0)
|
|
(ja-channel-push! 7 (seconds 0.15)))
|
|
((let ((v1-116 (ja-group))) (or (= v1-116 eichar-yellow-running-blast-ja) (= v1-116 eichar-yellow-running-blast-end-ja)))
|
|
(set! f30-0 1.0)
|
|
(set! f28-0 26.0)
|
|
(ja-channel-push! 7 (seconds 0.1)))
|
|
((and (ja-group? eichar-walk-ja) (= (-> self skel root-channel 0) (-> self skel channel)))
|
|
(set! f28-0 (ja-aframe-num 0)))
|
|
((ja-group? eichar-ice-skate-ja) (set! f28-0 (ja-aframe-num 0)) (ja-channel-push! 7 (seconds 0.1)))
|
|
((ja-group? eichar-wade-shallow-walk-ja) (set! f28-0 (ja-aframe-num 0)) (ja-channel-push! 7 (seconds 0.05)))
|
|
((let ((v1-146 (ja-group)))
|
|
(and (or (or (= v1-146 eichar-jump-loop-ja)
|
|
(= v1-146 eichar-wheel-flip-ja)
|
|
(= v1-146 eichar-attack-from-jump-end-ja)
|
|
(= v1-146 eichar-attack-uppercut-ja)
|
|
(= v1-146 eichar-flop-down-land-ja)
|
|
(= v1-146 eichar-moving-flop-down-land-ja))
|
|
(and (ja-group? eichar-jump-ja) (< 30.0 (ja-aframe-num 0))))
|
|
(< 12288.0 (-> self control unknown-float01))))
|
|
(let ((s5-4 (ja-group))
|
|
(f30-2 (-> self control ground-impact-vel)))
|
|
(case (ja-group)
|
|
((eichar-wheel-flip-ja eichar-attack-from-jump-end-ja) (ja-channel-push! 1 (seconds 0.05)))
|
|
(else (ja-channel-set! 1)))
|
|
(cond
|
|
((< (the-as float (if (= s5-4 eichar-jump-ja) 77824.0 102400.0)) f30-2)
|
|
(ja-no-eval :group! eichar-run-squash-ja :num! (seek! (ja-aframe (the-as float 3.0) 0) 1.00001) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! (ja-aframe (the-as float 3.0) 0) 1.00001))))
|
|
((< (the-as float (if (= s5-4 eichar-jump-ja) 61440.0 102400.0)) f30-2)
|
|
(ja-no-eval :group!
|
|
eichar-run-squash-ja
|
|
:num!
|
|
(seek! (ja-aframe (the-as float 3.0) 0) 1.00001)
|
|
:frame-num
|
|
(ja-aframe (the-as float -1.0) 0))
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! (ja-aframe (the-as float 3.0) 0) 1.00001))))
|
|
(else
|
|
(ja-no-eval :group! eichar-run-squash-weak-ja :num! (seek! (ja-aframe (the-as float 4.0) 0) 1.00001) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! (ja-aframe (the-as float 4.0) 0) 1.00001))))))
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
;; This controls the slow walk animation that occurs after landing from a jump. > 60fps was broken here so I think should not be tied to seconds-per-frame
|
|
;; unknown-float01 is the magnitude of xz velocity
|
|
(ja :num!
|
|
(seek! max
|
|
(/ (* (fmax 20480.0 (-> self control unknown-float01))
|
|
(if (= (-> *setting-control* current video-mode) 'custom) 0.016666668 (-> *display* seconds-per-frame)))
|
|
(/ (-> *TARGET-bank* run-up-cycle-dist) (-> *TARGET-bank* run-cycle-length))))))
|
|
(set! f28-0 30.0)
|
|
(set! f30-0 1.0)
|
|
(ja-channel-set! 7))
|
|
((ja-group? eichar-jump-ja) (ja-channel-push! 7 (seconds 0.05)) (set! gp-0 #t))
|
|
((ja-group? eichar-smack-surface-ja) (ja-channel-push! 7 (seconds 0.15)))
|
|
(else (ja-channel-push! 7 (seconds 0.05)))))))
|
|
(set! (-> self skel root-channel 3 command) 'push)
|
|
(set! (-> self skel root-channel 6 command) 'stack)
|
|
(ja :group! eichar-walk-ja)
|
|
(let ((f28-1 (ja-aframe f28-0 0)))
|
|
(ja :group! eichar-walk-ja :num! (identity f28-1) :frame-interp 0.0 :dist (-> *TARGET-bank* walk-cycle-dist))
|
|
(ja :chan 1
|
|
:group!
|
|
eichar-walk-down-ja
|
|
:num! (identity f28-1)
|
|
:frame-interp 0.0
|
|
:dist (-> *TARGET-bank* walk-down-cycle-dist))
|
|
(ja :chan 2
|
|
:group!
|
|
eichar-walk-left-ja
|
|
:num! (identity f28-1)
|
|
:frame-interp 0.0
|
|
:dist (-> *TARGET-bank* walk-side-cycle-dist))
|
|
(ja :chan 4
|
|
:group!
|
|
eichar-run-down-ja
|
|
:num! (identity f28-1)
|
|
:frame-interp 0.0
|
|
:dist (-> *TARGET-bank* run-down-cycle-dist))
|
|
(ja :chan 5
|
|
:group!
|
|
eichar-run-left-ja
|
|
:num! (identity f28-1)
|
|
:frame-interp 0.0
|
|
:dist (-> *TARGET-bank* run-side-cycle-dist))
|
|
(ja :chan 3 :group! eichar-run-ja :num! (identity f28-1) :frame-interp 0.0 :dist (-> *TARGET-bank* run-cycle-dist)))
|
|
(let ((f28-2 0.0)
|
|
(f26-1 0.0))
|
|
(loop
|
|
(let ((f22-0 (fmax -1.0 (fmin 1.0 (* 2.0 (-> self control unknown-float61)))))
|
|
(f24-0 (fmax -1.0 (fmin 1.0 (* 1.6 (-> self control unknown-float62))))))
|
|
(set! f30-0
|
|
(seek f30-0
|
|
(fmax 0.0 (fmin 1.0 (* 0.000048828126 (+ -16384.0 (-> self control unknown-float01)))))
|
|
(* 2.0 (seconds-per-frame))))
|
|
(let ((v1-317 (-> self skel effect))) (set! (-> v1-317 channel-offset) (if (< 0.5 f30-0) 3 0)))
|
|
0
|
|
(let ((f0-64 (fabs (- f22-0 f28-2)))) (set! f28-2 (seek f28-2 f22-0 (fmax 0.05 (fmin 0.2 (* 0.25 f0-64))))))
|
|
(let ((f0-69 (fabs (- f24-0 f26-1)))) (set! f26-1 (seek f26-1 f24-0 (fmax 0.05 (fmin 0.2 (* 0.25 f0-69)))))))
|
|
(cond
|
|
((>= f28-2 0.0)
|
|
(ja :chan 1 :group! eichar-walk-up-ja :frame-interp (fabs f28-2) :dist (-> *TARGET-bank* walk-up-cycle-dist))
|
|
(ja :chan 4 :group! eichar-run-up-ja :frame-interp (fabs f28-2) :dist (-> *TARGET-bank* run-up-cycle-dist)))
|
|
(else
|
|
(ja :chan 1 :group! eichar-walk-down-ja :frame-interp (fabs f28-2) :dist (-> *TARGET-bank* walk-down-cycle-dist))
|
|
(ja :chan 4 :group! eichar-run-down-ja :frame-interp (fabs f28-2) :dist (-> *TARGET-bank* run-down-cycle-dist))))
|
|
(cond
|
|
((>= f26-1 0.0)
|
|
(ja :chan 2 :group! eichar-walk-right-ja :frame-interp (fabs f26-1) :dist (-> *TARGET-bank* walk-side-cycle-dist))
|
|
(ja :chan 5 :group! eichar-run-right-ja :frame-interp (fabs f26-1) :dist (-> *TARGET-bank* run-side-cycle-dist)))
|
|
(else
|
|
(ja :chan 2 :group! eichar-walk-left-ja :frame-interp (fabs f26-1) :dist (-> *TARGET-bank* walk-side-cycle-dist))
|
|
(ja :chan 5 :group! eichar-run-left-ja :frame-interp (fabs f26-1) :dist (-> *TARGET-bank* run-side-cycle-dist))))
|
|
(set! (-> self skel root-channel 6 frame-interp) f30-0)
|
|
(let* ((f1-19 (current-cycle-distance (-> self skel)))
|
|
(f0-92 (/ (-> self control unknown-float01) (* 60.0 (/ f1-19 (-> *TARGET-bank* run-cycle-length))))))
|
|
(ja :num! (loop! f0-92)))
|
|
(ja :chan 1 :num! (chan 0))
|
|
(ja :chan 2 :num! (chan 0))
|
|
(ja :chan 3 :num! (chan 0))
|
|
(ja :chan 4 :num! (chan 0))
|
|
(ja :chan 5 :num! (chan 0))
|
|
(if (and gp-0 (!= (-> self skel root-channel 0) (-> self skel channel))) (ja-blend-eval))
|
|
(suspend)))))
|
|
:post target-post)
|
|
|
|
(defstate target-turn-around (target)
|
|
:event target-standard-event-handler
|
|
:enter
|
|
(behavior ()
|
|
(vector-turn-to (-> self control transv))
|
|
(set! (-> self control unknown-surface00) *turn-around-mods*)
|
|
(set! (-> self control unknown-float81) 1.0))
|
|
:exit
|
|
(behavior ()
|
|
(target-state-hook-exit)
|
|
(set-forward-vel (the-as float 0.0))
|
|
(set! (-> self control unknown-float01) 0.0)
|
|
(set-quaternion! (-> self control) (-> self control dir-targ))
|
|
(set! (-> self control unknown-float81) 0.0))
|
|
:trans
|
|
(behavior ()
|
|
((-> self state-hook))
|
|
(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-jump (-> *TARGET-bank* jump-height-min) (-> *TARGET-bank* jump-height-max) (the-as surface #f)))
|
|
(if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) circle) (can-feet?)) (go target-attack))
|
|
(if (can-hands? #t) (go target-running-attack))
|
|
(if (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf)))
|
|
(time-elapsed? (-> self control unknown-dword11) (seconds 0.08)))
|
|
(go target-falling #f))
|
|
(slide-down-test))
|
|
:code
|
|
(behavior ()
|
|
(ja-channel-push! 1 (seconds 0.04))
|
|
(ja :group! eichar-turn-around-ja :num! min)
|
|
(quaternion-rotate-y! (-> self control dir-targ) (-> self control dir-targ) (the-as float 32768.0))
|
|
(compute-alignment! (-> self align))
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! max 2.0))
|
|
(compute-alignment! (-> self align))
|
|
(align! (-> self align) (align-opts adjust-quat) (the-as float 1.0) (the-as float 1.0) (the-as float 1.0)))
|
|
(remove-exit)
|
|
(set! (-> self control unknown-float81) 0.0)
|
|
(set-forward-vel (the-as float 40960.0))
|
|
(set! (-> self control unknown-float01) 40960.0)
|
|
(target-state-hook-exit)
|
|
(go target-walk))
|
|
:post target-no-stick-post)
|
|
|
|
(defstate target-slide-down (target)
|
|
:event target-walk-event-handler
|
|
:enter
|
|
(behavior ()
|
|
(set! (-> self control unknown-surface00) *jump-mods*))
|
|
:exit
|
|
(behavior ()
|
|
(set-time! (-> self control unknown-dword35)))
|
|
:trans
|
|
(behavior ()
|
|
(when (or (logtest? (-> self control status) (cshape-moving-flags onsurf))
|
|
(if (< (target-move-dist (-> *TARGET-bank* stuck-time)) (-> *TARGET-bank* stuck-distance)) #t))
|
|
(logior! (-> self control status) (cshape-moving-flags onsurf))
|
|
(go target-duck-stance)))
|
|
:code
|
|
(behavior ()
|
|
(if (not (ja-group? eichar-duck-stance-ja)) (ja-channel-push! 1 (seconds 0.1)))
|
|
(loop
|
|
(ja-no-eval :group! eichar-duck-stance-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!)))))
|
|
:post target-post)
|
|
|
|
(defbehavior init-var-jump target ((arg0 float) (arg1 float) (arg2 vector) (arg3 vector) (arg4 vector))
|
|
(logclear! (-> self control status) (cshape-moving-flags csmf14))
|
|
(delete-back-vel)
|
|
(when (not (time-elapsed? (-> self control rider-time) (seconds 0.05)))
|
|
(let ((f0-1 (fmax 0.0 (fmin 28672.0 (* 0.5 (vector-dot (-> self control dynam gravity-normal) (-> self control rider-last-move)))))))
|
|
(set! arg0 (+ arg0 f0-1))
|
|
(set! arg1 (+ arg1 f0-1)))
|
|
(when (or (logtest? (-> self control unknown-surface01 flags) (surface-flags moving-ground))
|
|
(= (-> self control poly-pat material) (pat-material rotate)))
|
|
(+! (-> self control transv x) (-> self control rider-last-move x))
|
|
(+! (-> self control transv z) (-> self control rider-last-move z))))
|
|
(set! (-> self control unknown-float123) 0.0)
|
|
(set! (-> self control unknown-float124) 0.0)
|
|
(cond
|
|
(arg3
|
|
(set! (-> self control unknown-uint20) (the-as uint (- arg0 (+ -409.6 (-> *TARGET-bank* jump-collide-offset)))))
|
|
(set! (-> self control unknown-int21) (the-as int (- arg1 (-> *TARGET-bank* jump-collide-offset)))))
|
|
(else
|
|
(set! (-> self control unknown-uint20) (the-as uint arg0))
|
|
(set! (-> self control unknown-int21) (the-as int arg1))))
|
|
(when arg2
|
|
(let ((s4-1 (new-stack-vector0)))
|
|
(let ((f0-16 (vector-dot (-> self control dynam gravity-normal) arg4)))
|
|
0.0
|
|
(vector-! s4-1 arg4 (vector-float*! s4-1 (-> self control dynam gravity-normal) f0-16)))
|
|
(let* ((f0-17 (vector-length s4-1))
|
|
(f1-11 f0-17)
|
|
(f2-7 (- (sqrtf (* 2.0 (-> self control dynam gravity-length) arg0))
|
|
(* 0.008333334 (- (-> self control dynam gravity-length))))))
|
|
(vector+! arg4
|
|
(vector-float*! arg4 (-> self control dynam gravity-normal) f2-7)
|
|
(vector-float*! s4-1 s4-1 (/ f0-17 f1-11))))))
|
|
(let ((v0-2 (-> self control unknown-vector102))) (set! (-> v0-2 quad) (-> self control trans quad)) v0-2))
|
|
|
|
(defbehavior mod-var-jump target ((arg0 symbol) (arg1 symbol) (arg2 symbol) (arg3 vector))
|
|
(local-vars (v0-2 vector))
|
|
(let ((f30-0 (* 0.033333335 (the float (- (current-time) (-> self state-time))))))
|
|
(cond
|
|
((or (< 1.0 f30-0) (< (-> self control unknown-float123) 0.0) (not arg2))
|
|
(set! (-> self control unknown-float123) -1.0))
|
|
(else
|
|
(set! (-> self control unknown-float123) f30-0)
|
|
(set! (-> self control unknown-float124) f30-0)
|
|
(when arg0
|
|
(let ((s3-1 (vector-! (new-stack-vector0) (-> self control trans) (-> self control unknown-vector102)))
|
|
(s4-0 (new-stack-vector0)))
|
|
(let ((f0-5 (vector-dot (-> self control dynam gravity-normal) arg3)))
|
|
0.0
|
|
(vector-! s4-0 arg3 (vector-float*! s4-0 (-> self control dynam gravity-normal) f0-5)))
|
|
(let* ((f28-0 (vector-length s4-0))
|
|
(f26-0 f28-0)
|
|
(f0-13 (- (sqrtf (* 2.0
|
|
(-> self control dynam gravity-length)
|
|
(- (lerp-scale (the-as float (-> self control unknown-uint20))
|
|
(the-as float (-> self control unknown-uint30))
|
|
f30-0
|
|
(the-as float 0.0)
|
|
(the-as float 1.0))
|
|
(vector-dot (-> self control dynam gravity-normal) s3-1))))
|
|
(* 0.008333334 (- (-> self control dynam gravity-length))))))
|
|
(vector+! arg3
|
|
(vector-float*! arg3 (-> self control dynam gravity-normal) f0-13)
|
|
(vector-float*! s4-0 s4-0 (/ f28-0 f26-0)))))))))
|
|
0
|
|
(when (and arg1 (ja-group) (and (-> (ja-group) extra) #t))
|
|
(let ((v1-57 (res-lump-struct (-> (ja-group) extra) 'collide-offset vector :time (ja-frame-num 0))))
|
|
(cond
|
|
(v1-57 (set! v0-2 (-> self control unknown-vector13)) (set! (-> v0-2 quad) (-> v1-57 quad)))
|
|
(else (set! v0-2 (-> self control unknown-vector13)) (set! (-> v0-2 quad) (the-as uint128 0)))))
|
|
v0-2))
|
|
|
|
(defstate target-duck-stance (target)
|
|
:event target-standard-event-handler
|
|
:enter
|
|
(behavior ()
|
|
(set! (-> self control unknown-float81) 1.0)
|
|
(set! (-> self control unknown-surface00) *duck-mods*)
|
|
(target-collide-set! 'duck (the-as float 1.0)))
|
|
:exit
|
|
(behavior ()
|
|
(if (not (or (= (-> self next-state name) 'target-duck-walk)
|
|
(= (-> self next-state name) 'target-duck-stance)
|
|
(= (-> self next-state name) 'target-walk)
|
|
(= (-> self next-state name) 'target-stance)
|
|
(= (-> self next-state name) 'target-stance-look-around)))
|
|
(target-state-hook-exit))
|
|
(target-exit)
|
|
(target-collide-set! 'normal (the-as float 0.0)))
|
|
:trans
|
|
(behavior ()
|
|
((-> self state-hook))
|
|
(if (and (or (not (cpad-hold? (-> self control unknown-cpad-info00 number) l1 r1))
|
|
(logtest? (-> self state-flags) (state-flags prevent-duck)))
|
|
(let ((v1-13 (ja-group)))
|
|
(and (not (or (= v1-13 eichar-duck-roll-end-ja) (= v1-13 eichar-duck-roll-ja))) (can-exit-duck?))))
|
|
(go target-stance))
|
|
(if (move-legs?) (go target-duck-walk))
|
|
(when (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))
|
|
(if (= (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) stick0-speed) 0.0)
|
|
(go target-high-jump (-> *TARGET-bank* duck-jump-height-min) (-> *TARGET-bank* duck-jump-height-max) 'duck)
|
|
(go target-jump (-> *TARGET-bank* jump-height-min) (-> *TARGET-bank* jump-height-max) (the-as surface #f))))
|
|
(if (and (can-hands? #t) (can-exit-duck?))
|
|
(go target-attack-uppercut (-> *TARGET-bank* attack-jump-height-min) (-> *TARGET-bank* attack-jump-height-max)))
|
|
(fall-test)
|
|
(slide-down-test))
|
|
:code
|
|
(behavior ()
|
|
(cond
|
|
((ja-group? eichar-duck-roll-ja)
|
|
(ja-no-eval :group! eichar-duck-roll-end-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))))
|
|
((and (ja-group? eichar-duck-stance-ja) (= (-> self skel root-channel 0) (-> self skel channel))))
|
|
((ja-group? eichar-duck-walk-ja) (ja-channel-push! 1 (seconds 0.1)))
|
|
(else
|
|
(ja-channel-push! 1 (seconds 0.04))
|
|
(ja-no-eval :group! eichar-stance-to-duck-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!)))))
|
|
(loop
|
|
(ja-no-eval :group! eichar-duck-stance-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!)))))
|
|
:post target-post)
|
|
|
|
(defstate target-duck-walk (target)
|
|
:event target-standard-event-handler
|
|
:enter
|
|
(behavior ()
|
|
(set! (-> self control unknown-float81) 1.0)
|
|
(target-collide-set! 'duck (the-as float 1.0))
|
|
(if (not (ja-group? eichar-duck-roll-ja)) (set! (-> self control unknown-surface00) *duck-mods*)))
|
|
:exit
|
|
(-> target-duck-stance
|
|
exit)
|
|
:trans
|
|
(behavior ()
|
|
((-> self state-hook))
|
|
(if (and (or (not (cpad-hold? (-> self control unknown-cpad-info00 number) l1 r1))
|
|
(logtest? (-> self state-flags) (state-flags prevent-duck))
|
|
(and (logtest? (-> self water flags) (water-flags wt10))
|
|
(>= (- (- (-> self control trans y) (- (-> self water base-height) (-> self water wade-height)))) 2457.6)))
|
|
(can-exit-duck?))
|
|
(go target-walk))
|
|
(if (not (move-legs?)) (go target-duck-stance))
|
|
(when (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))
|
|
(if (= (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) stick0-speed) 0.0)
|
|
(go target-high-jump (-> *TARGET-bank* duck-jump-height-min) (-> *TARGET-bank* duck-jump-height-max) 'duck)
|
|
(go target-jump (-> *TARGET-bank* jump-height-min) (-> *TARGET-bank* jump-height-max) (the-as surface #f))))
|
|
(if (and (can-hands? #t) (can-exit-duck?))
|
|
(go target-attack-uppercut (-> *TARGET-bank* attack-jump-height-min) (-> *TARGET-bank* attack-jump-height-max)))
|
|
(fall-test)
|
|
(slide-down-test))
|
|
:code
|
|
(behavior ()
|
|
(cond
|
|
((and (ja-group? eichar-duck-walk-ja) (= (-> self skel root-channel 0) (-> self skel channel))))
|
|
((ja-group? eichar-duck-stance-ja) (ja-channel-push! 1 (seconds 0.45)) (ja :group! eichar-duck-walk-ja :num! min))
|
|
(else (ja-channel-push! 1 (seconds 0.1)) (ja :group! eichar-duck-walk-ja :num! min)))
|
|
(loop
|
|
(if (= (-> self skel root-channel 0) (-> self skel channel)) (set! (-> self control unknown-surface00) *duck-mods*))
|
|
(ja :num!
|
|
(loop! (fmin 1.0
|
|
(/ (-> self control unknown-float01)
|
|
(* 60.0 (/ (-> *TARGET-bank* duck-walk-cycle-dist) (-> *TARGET-bank* run-cycle-length)))))))
|
|
(suspend)))
|
|
:post target-post)
|
|
|
|
(defstate target-jump (target)
|
|
:event target-jump-event-handler
|
|
:enter
|
|
(behavior ((arg0 float) (arg1 float) (arg2 surface))
|
|
(when (= (-> self control unknown-symbol40) 'launch)
|
|
(level-hint-spawn (text-id sidekick-launcher1) "sksp009d" (the-as entity #f) *entity-pool* (game-task none))
|
|
(level-hint-spawn (text-id sidekick-launcher2) "sksp009e" (the-as entity #f) *entity-pool* (game-task none))
|
|
(case (-> (level-get-target-inside *level*) name)
|
|
(('citadel)
|
|
(level-hint-spawn (text-id citadel-launcher2) "sksp0393" (the-as entity #f) *entity-pool* (game-task none))
|
|
(level-hint-spawn (text-id citadel-launcher) "sksp0388" (the-as entity #f) *entity-pool* (game-task none))))
|
|
enter-state
|
|
(let ((a0-9 (-> self control unknown-dword60))
|
|
(a1-5 (-> self control unknown-dword61))
|
|
(a2-5 (-> self control unknown-vector102)))
|
|
(set! (-> a2-5 quad) (-> (the-as vector (-> self control unknown-dword62)) quad))
|
|
(go target-launch (the-as float a0-9) (the-as symbol a1-5) a2-5 (-> self control unknown-dword63))))
|
|
(set-time! (-> self state-time))
|
|
(sound-play "jump" :vol 70)
|
|
(init-var-jump arg0 arg1 (the-as vector #t) (the-as vector #t) (-> self control transv))
|
|
(logclear! (-> self control status) (cshape-moving-flags onsurf onground tsurf))
|
|
(set! arg2
|
|
(cond
|
|
(arg2 (empty) arg2)
|
|
(else *jump-mods*)))
|
|
(set! (-> self control unknown-surface00) arg2)
|
|
(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)))))))
|
|
:exit target-exit
|
|
: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)))))
|
|
(target-falling-trans #f (the-as time-frame (if (ja-group? eichar-jump-loop-ja) 15 -1)))
|
|
(if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) x)
|
|
(< (vector-dot (-> self control dynam gravity-normal) (-> self control transv)) 12288.0)
|
|
(and (< -61440.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
|
|
(not (logtest? (-> self water flags) (water-flags wt09)))
|
|
(not (logtest? (-> self state-flags) (state-flags prevent-jump)))))
|
|
(go target-double-jump (-> *TARGET-bank* double-jump-height-min) (-> *TARGET-bank* double-jump-height-max)))
|
|
(if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) square)
|
|
(< (vector-dot (-> self control dynam gravity-normal) (-> self control transv)) 26624.0)
|
|
(and (< -61440.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
|
|
(time-elapsed? (-> self control unknown-dword36) (the-as time-frame (-> *TARGET-bank* stuck-timeout)))
|
|
(not (logtest? (-> self state-flags) (state-flags prevent-attack)))
|
|
(not (logtest? (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump surf08)))))
|
|
(go target-flop
|
|
(the-as float 65502.96)
|
|
(the-as float -163840.0)
|
|
(the-as float (if (= (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) stick0-speed) 0.0) 0.0 68812.8))))
|
|
(mod-var-jump #t #t (cpad-hold? (-> self control unknown-cpad-info00 number) x) (-> self control transv))
|
|
(slide-down-test)
|
|
(seek! (-> self control unknown-float122)
|
|
(fmax 0.0 (fmin 1.0 (* 0.000048828126 (+ -10240.0 (-> self control unknown-float01)))))
|
|
(seconds-per-frame)))
|
|
:code
|
|
(behavior ((arg0 float) (arg1 float) (arg2 surface))
|
|
(ja-channel-push! 2 (seconds 0.05))
|
|
(ja :group! eichar-jump-ja :num! min)
|
|
(ja :chan 1 :group! eichar-jump-forward-ja :num! (chan 0) :frame-interp (-> self control unknown-float122))
|
|
(suspend)
|
|
(ja :group! eichar-jump-ja :num! (+!))
|
|
(ja :chan 1 :group! eichar-jump-forward-ja :num! (chan 0) :frame-interp (-> self control unknown-float122))
|
|
(suspend)
|
|
(until (ja-done? 0)
|
|
(let ((f30-0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
|
|
(f0-8 (- 20.0 (ja-aframe-num 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-8))))
|
|
(set! (-> gp-1 param 1)
|
|
(the-as float
|
|
(if v1-45 (fmin (fmin 3.0 f0-8) (/ (* 5.0 f0-8) (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!))
|
|
(ja :chan 1 :num! (chan 0) :frame-interp (-> self control unknown-float122))
|
|
(suspend))
|
|
(target-falling-anim -1 (seconds 0.2)))
|
|
:post target-post)
|
|
|
|
(defstate target-jump-forward (target)
|
|
:event target-jump-event-handler
|
|
:enter
|
|
(behavior ((arg0 float) (arg1 float))
|
|
((-> target-jump enter) arg0 arg1 (the-as surface #f))
|
|
(set! (-> self control unknown-surface00) *forward-jump-mods*))
|
|
:exit target-exit
|
|
:trans
|
|
(-> target-jump
|
|
trans)
|
|
:code
|
|
(behavior ((arg0 float) (arg1 float))
|
|
(ja-channel-set! 1)
|
|
(ja-no-eval :group! eichar-jump-ja :num! (seek!) :frame-num (ja-aframe (the-as float 3.0) 0))
|
|
(until (ja-done? 0)
|
|
(set! (-> self control unknown-dword70) 0)
|
|
(suspend)
|
|
(ja :num! (seek!)))
|
|
(ja-no-eval :group! eichar-jump-loop-ja :num! (loop!) :frame-num 0.0)
|
|
(loop
|
|
(suspend)
|
|
(ja :group! eichar-jump-loop-ja :num! (loop!))))
|
|
:post target-post)
|
|
|
|
(defstate target-double-jump (target)
|
|
:event target-jump-event-handler
|
|
:enter
|
|
(behavior ((arg0 float) (arg1 float))
|
|
(when (= (-> self control unknown-symbol40) 'launch)
|
|
enter-state
|
|
(let ((a0-3 (-> self control unknown-dword60))
|
|
(a1-1 (-> self control unknown-dword61))
|
|
(a2-0 (-> self control unknown-vector102)))
|
|
(set! (-> a2-0 quad) (-> (the-as vector (-> self control unknown-dword62)) quad))
|
|
(go target-launch (the-as float a0-3) (the-as symbol a1-1) a2-0 (-> self control unknown-dword63))))
|
|
(set-time! (-> self state-time))
|
|
(init-var-jump arg0 arg1 (the-as vector #t) (the-as vector #t) (-> self control transv))
|
|
(logclear! (-> self control status) (cshape-moving-flags onsurf onground tsurf))
|
|
(set! (-> self control unknown-surface00) *double-jump-mods*))
|
|
:exit target-exit
|
|
:trans
|
|
(behavior ()
|
|
(target-falling-trans #f (the-as time-frame (if (ja-group? eichar-jump-loop-ja) 15 -1)))
|
|
(if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) square)
|
|
(< (vector-dot (-> self control dynam gravity-normal) (-> self control transv)) 22118.4)
|
|
(and (< -61440.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
|
|
(time-elapsed? (-> self control unknown-dword36) (the-as time-frame (-> *TARGET-bank* stuck-timeout)))
|
|
(not (logtest? (-> self state-flags) (state-flags prevent-attack)))
|
|
(not (logtest? (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump surf08)))))
|
|
(go target-flop
|
|
(the-as float 33775.48)
|
|
(the-as float -122880.0)
|
|
(the-as float (if (= (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) stick0-speed) 0.0) 0.0 68812.8))))
|
|
(if (!= (-> self state-time) (current-time))
|
|
(mod-var-jump #t #t (cpad-hold? (-> self control unknown-cpad-info00 number) x) (-> self control transv)))
|
|
(seek! (-> self control unknown-float122)
|
|
(fmax 0.0 (fmin 1.0 (* 0.000048828126 (+ -10240.0 (-> self control unknown-float01)))))
|
|
(seconds-per-frame)))
|
|
:code
|
|
(behavior ((arg0 float) (arg1 float))
|
|
(ja-channel-push! 2 (seconds 0.05))
|
|
(effect-control-method-10 (-> self skel effect) 'jump-double (the-as float -1.0) -1)
|
|
(ja-no-eval :group! eichar-jump-ja :num! (seek!) :frame-num (ja-aframe (the-as float 5.0) 0))
|
|
(ja :chan 1 :group! eichar-jump-forward-ja :num! (chan 0))
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
(ja :chan 1 :num! (chan 0) :frame-interp (-> self control unknown-float122)))
|
|
(target-falling-anim -1 (seconds 0.2)))
|
|
:post target-post)
|
|
|
|
(defstate target-high-jump (target)
|
|
:event target-jump-event-handler
|
|
:enter
|
|
(behavior ((arg0 float) (arg1 float) (arg2 basic))
|
|
(when (and (= (-> self control unknown-symbol40) 'launch) (!= arg2 'launch))
|
|
enter-state
|
|
(let ((a0-3 (-> self control unknown-dword60))
|
|
(a1-1 (-> self control unknown-dword61))
|
|
(a2-1 (-> self control unknown-vector102)))
|
|
(set! (-> a2-1 quad) (-> (the-as vector (-> self control unknown-dword62)) quad))
|
|
(go target-launch (the-as float a0-3) (the-as symbol a1-1) a2-1 (-> self control unknown-dword63))))
|
|
(set! (-> self control unknown-uint31) (the-as uint arg2))
|
|
(if (or (= arg2 'duck) (= arg2 'launch)) (go target-duck-high-jump arg0 arg1 (the-as symbol arg2)))
|
|
(set-time! (-> self state-time))
|
|
(logclear! (-> self control status) (cshape-moving-flags onsurf onground tsurf))
|
|
(sound-play "jump" :pitch 0.3)
|
|
(init-var-jump arg0 arg1 (the-as vector #t) (the-as vector #t) (-> self control transv))
|
|
(set! (-> self control unknown-surface00)
|
|
(cond
|
|
((= arg2 'flip) *flip-jump-mods*)
|
|
((= arg2 'flop-forward) *forward-high-jump-mods*)
|
|
(else *high-jump-mods*)))
|
|
(set! (-> self control unknown-float122)
|
|
(fmax 0.0 (fmin 0.5 (* 0.00008138021 (+ -409.6 (-> self control unknown-float01)))))))
|
|
:exit target-exit
|
|
:trans
|
|
(behavior ()
|
|
(target-falling-trans #f (the-as time-frame (if (ja-group? eichar-jump-loop-ja) 15 -1)))
|
|
(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))
|
|
(< (vector-dot (-> self control dynam gravity-normal) (-> self control transv)) 73728.0)
|
|
(and (< -61440.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
|
|
(time-elapsed? (-> self control unknown-dword36) (the-as time-frame (-> *TARGET-bank* stuck-timeout)))
|
|
(not (logtest? (-> self state-flags) (state-flags prevent-attack)))
|
|
(not (logtest? (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump surf08)))))
|
|
(go target-flop
|
|
(the-as float 33775.48)
|
|
(the-as float -122880.0)
|
|
(the-as float (if (= (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) stick0-speed) 0.0) 0.0 68812.8))))
|
|
(mod-var-jump #t #t (cpad-hold? (-> self control unknown-cpad-info00 number) x) (-> self control transv))
|
|
(seek! (-> self control unknown-float122)
|
|
(fmax 0.0 (fmin 1.0 (* 0.00012207031 (+ -2048.0 (-> self control unknown-float01)))))
|
|
(seconds-per-frame)))
|
|
:code
|
|
(-> target-jump
|
|
code)
|
|
:post target-post)
|
|
|
|
(defstate target-duck-high-jump (target)
|
|
:event target-standard-event-handler
|
|
:enter
|
|
(behavior ((arg0 float) (arg1 float) (arg2 symbol))
|
|
(set-time! (-> self state-time))
|
|
(logclear! (-> self control status) (cshape-moving-flags onsurf onground tsurf))
|
|
(set! (-> self control unknown-surface00) *turn-around-mods*))
|
|
:exit target-exit
|
|
:code
|
|
(behavior ((arg0 float) (arg1 float) (arg2 symbol))
|
|
(if (not (and (ja-group? eichar-duck-stance-ja) (= (-> self skel root-channel 0) (-> self skel channel))))
|
|
(ja-channel-push! 1 (seconds 0.04)))
|
|
(case arg2
|
|
(('launch)
|
|
;; og:preserve-this PAL patch here
|
|
(set! (-> self control unknown-soundid01) (sound-play "launch-fire"))
|
|
(ja-no-eval :group! eichar-launch-jump-ja :num! (seek! (ja-aframe (the-as float 16.0) 0)) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(let ((s3-2 (the-as sound-rpc-set-param (get-sound-buffer-entry))))
|
|
(set! (-> s3-2 command) (sound-command set-param))
|
|
(set! (-> s3-2 id) (-> self control unknown-soundid01))
|
|
(let ((a1-5 (ear-trans)))
|
|
(let ((s2-1 self))
|
|
(when (= a1-5 #t)
|
|
(if (and s2-1 (type-type? (-> s2-1 type) process-drawable) (nonzero? (-> s2-1 control)))
|
|
(set! a1-5 (-> s2-1 control trans))
|
|
(set! a1-5 (the-as vector #f)))))
|
|
(sound-trans-convert (-> s3-2 parms trans) a1-5))
|
|
(set! (-> s3-2 parms mask) (sound-mask trans))
|
|
(-> s3-2 id))
|
|
(suspend)
|
|
(ja :num! (seek! (ja-aframe (the-as float 16.0) 0)))))
|
|
(else
|
|
(ja-no-eval :group! eichar-duck-high-jump-ja :num! (seek! (ja-aframe (the-as float 16.0) 0)) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! (ja-aframe (the-as float 16.0) 0))))))
|
|
(go target-duck-high-jump-jump arg0 arg1 arg2))
|
|
:post target-post)
|
|
|
|
(defstate target-duck-high-jump-jump (target)
|
|
:event target-jump-event-handler
|
|
:enter
|
|
(behavior ((arg0 float) (arg1 float) (arg2 symbol))
|
|
(set-time! (-> self state-time))
|
|
(sound-play "jump" :vol 80 :pitch -0.4)
|
|
(init-var-jump arg0 arg1 (the-as vector #t) (the-as vector #f) (-> self control transv))
|
|
(logclear! (-> self control status) (cshape-moving-flags onsurf onground tsurf))
|
|
(cond
|
|
((= arg2 'launch) (set! (-> self neck flex-blend) 0.0) (set! (-> self control unknown-surface00) *launch-jump-mods*))
|
|
(else (set! (-> self control unknown-surface00) *high-jump-mods*))))
|
|
:exit target-exit
|
|
;; og:preserve-this PAL patch here
|
|
:trans
|
|
(behavior ()
|
|
((-> target-high-jump trans))
|
|
(case (-> self control unknown-int37)
|
|
(('launch)
|
|
(let ((gp-0 (the-as sound-rpc-set-param (get-sound-buffer-entry))))
|
|
(set! (-> gp-0 command) (sound-command set-param))
|
|
(set! (-> gp-0 id) (-> self control unknown-soundid01))
|
|
(let ((a1-0 (ear-trans)))
|
|
(let ((s5-0 self))
|
|
(when (= a1-0 #t)
|
|
(if (and s5-0 (type-type? (-> s5-0 type) process-drawable) (nonzero? (-> s5-0 control)))
|
|
(set! a1-0 (-> s5-0 control trans))
|
|
(set! a1-0 (the-as vector #f)))))
|
|
(sound-trans-convert (-> gp-0 parms trans) a1-0))
|
|
(set! (-> gp-0 parms mask) (sound-mask trans))
|
|
(-> gp-0 id)))))
|
|
:code
|
|
(behavior ((arg0 float) (arg1 float) (arg2 symbol))
|
|
(let ((f30-0 (the-as float (if (= arg2 'launch) 110.0 35.0)))
|
|
(f28-0 1.0))
|
|
(until (ja-done? 0)
|
|
(let* ((f24-0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
|
|
(f26-0 (- f30-0 (ja-aframe-num 0)))
|
|
(f22-1 (fmin (fmin 3.0 f26-0) (/ (* 5.0 f26-0) (the float (time-to-apex f24-0 (the-as float -245760.0))))))
|
|
(s5-0 (-> self skel root-channel 0)))
|
|
(set! (-> s5-0 param 0) (the float (+ (-> s5-0 frame-group data 0 length) -1)))
|
|
(let ((v1-26 (cond
|
|
((and (< 0.0 f24-0) (< 0.0 f26-0))
|
|
(if (= arg2 'launch) (set! f28-0 (lerp f28-0 (* 4.0 f22-1) (the-as float 0.25))))
|
|
f22-1)
|
|
(else f28-0))))
|
|
(set! (-> s5-0 param 1) v1-26))
|
|
(joint-control-channel-group-eval! s5-0 (the-as art-joint-anim #f) num-func-seek!))
|
|
(suspend))
|
|
(cond
|
|
((= arg2 'launch)
|
|
(ja-no-eval :group! eichar-launch-jump-loop-ja :num! (loop! f28-0) :frame-num 0.0)
|
|
(loop
|
|
(suspend)
|
|
(ja :group! eichar-launch-jump-loop-ja :num! (loop! f28-0))))
|
|
(else
|
|
(ja-no-eval :group! eichar-jump-loop-ja :num! (loop!) :frame-num 0.0)
|
|
(loop
|
|
(suspend)
|
|
(ja :group! eichar-jump-loop-ja :num! (loop!))))))
|
|
(the-as none 0))
|
|
:post target-post)
|
|
|
|
(defstate target-falling (target)
|
|
:event target-jump-event-handler
|
|
:enter
|
|
(behavior ((arg0 symbol))
|
|
(set! (-> self control unknown-surface00) *jump-mods*)
|
|
(set! (-> self control unknown-uint20) (the-as uint arg0))
|
|
(set-time! (-> self state-time)))
|
|
:trans
|
|
(behavior ()
|
|
(target-falling-trans (-> self control unknown-spoolanim00)
|
|
(the-as time-frame (if (= (-> self control unknown-spoolanim00) #f) 0 (/ (the-as int (-> *TARGET-bank* stuck-time)) 2)))))
|
|
:code
|
|
(behavior ((arg0 symbol))
|
|
(target-falling-anim -1 (seconds 0.33)))
|
|
:post target-post)
|
|
|
|
(defstate target-hit-ground (target)
|
|
:event target-walk-event-handler
|
|
:enter
|
|
(behavior ((arg0 symbol))
|
|
(cond
|
|
((= arg0 'stuck))
|
|
((let ((v1-4 (ja-group))) (or (= v1-4 eichar-launch-jump-ja) (= v1-4 eichar-launch-jump-loop-ja)))
|
|
(effect-control-method-10 (-> self skel effect) 'group-blue-hit-ground-effect (the-as float 0.0) -1)
|
|
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 255 (seconds 0.3)))
|
|
(else
|
|
(let ((f0-1 (vector-dot (-> self control dynam gravity-normal)
|
|
(vector-! (new 'stack-no-clear 'vector) (-> self control unknown-vector52) (-> self control trans)))))
|
|
(if (and (< (-> *TARGET-bank* fall-far) f0-1) (not (logtest? (-> self control status) (cshape-moving-flags on-water))))
|
|
(go target-hit-ground-hard f0-1)))))
|
|
(cond
|
|
((= arg0 'stuck))
|
|
(else (target-land-effect)))
|
|
(set! (-> self control unknown-dword31) 0)
|
|
(set! (-> self control unknown-dword33) 0)
|
|
(if (>= (-> self control ground-impact-vel) (-> *TARGET-bank* fall-stumble-threshold)) (set-forward-vel (the-as float 0.0)))
|
|
(if (!= (-> self control ground-pat material) (pat-material ice)) (delete-back-vel))
|
|
(set! (-> self control unknown-surface00) *walk-mods*)
|
|
(start-bobbing! (-> self water)
|
|
(lerp-scale (the-as float 0.0)
|
|
(the-as float 4096.0)
|
|
(-> self control ground-impact-vel)
|
|
(the-as float 40960.0)
|
|
(the-as float 102400.0))
|
|
600
|
|
1500))
|
|
: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-jump (-> *TARGET-bank* jump-height-min) (-> *TARGET-bank* jump-height-max) (the-as surface #f)))
|
|
(if (and (not (can-exit-duck?)) (can-duck?)) (go target-duck-stance))
|
|
(when (!= (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) stick0-speed) 0.0)
|
|
(if (logtest? (-> self water flags) (water-flags wt10)) (go target-wade-walk) (go target-walk)))
|
|
(if (and (or (cpad-hold? (-> self control unknown-cpad-info00 number) l1 r1) (not (can-exit-duck?))) (can-duck?))
|
|
(go target-duck-stance))
|
|
(if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) circle) (can-feet?)) (go target-attack))
|
|
(if (can-hands? #t) (go target-running-attack))
|
|
(fall-test)
|
|
(slide-down-test))
|
|
:code
|
|
(behavior ((arg0 symbol))
|
|
(target-hit-ground-anim #f)
|
|
(go target-stance))
|
|
:post target-post)
|
|
|
|
(defstate target-attack (target)
|
|
:event target-dangerous-event-handler
|
|
:enter
|
|
(behavior ()
|
|
(set-time! (-> self state-time))
|
|
(target-start-attack)
|
|
(target-danger-set! 'spin #f)
|
|
(set! (-> self control unknown-surface00) *attack-mods*)
|
|
(set! (-> self water drip-mult) 4.0)
|
|
(set! (-> self neck flex-blend) 0.0))
|
|
:exit
|
|
(behavior ()
|
|
(set-time! (-> self control unknown-dword33))
|
|
(target-exit))
|
|
:code
|
|
(behavior ()
|
|
(ja-channel-push! 1 (seconds 0.05))
|
|
(ja-no-eval :group!
|
|
eichar-attack-from-stance-ja
|
|
:num!
|
|
(seek! max (-> self control unknown-surface01 align-speed))
|
|
:frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(when (and (= (-> self fact eco-type) (pickup-type eco-red)) (>= (-> self fact eco-level) 1.0))
|
|
(effect-control-method-10 (-> self skel effect) 'group-red-eco-spinkick (ja-frame-num 0) 74)
|
|
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 153 (seconds 0.1))
|
|
(level-hint-spawn (text-id misty-eco-red-first-use) "sksp0072" (the-as entity #f) *entity-pool* (game-task none)))
|
|
(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-jump (-> *TARGET-bank* jump-height-min) (-> *TARGET-bank* jump-height-max) (the-as surface #f)))
|
|
(suspend)
|
|
(ja :num! (seek! max (-> self control unknown-surface01 align-speed))))
|
|
(go target-stance))
|
|
:post target-post)
|
|
|
|
(defstate target-running-attack (target)
|
|
:event
|
|
(behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('touched)
|
|
(cond
|
|
(((method-of-type touching-shapes-entry prims-touching?)
|
|
(the-as touching-shapes-entry (-> block param 0))
|
|
(-> self control)
|
|
(the-as uint 224))
|
|
(let ((gp-1 (target-send-attack proc
|
|
(the-as uint (-> self control unknown-symbol30))
|
|
(the-as touching-shapes-entry (-> block param 0))
|
|
(-> self control unknown-dword50)
|
|
(-> self control unknown-dword51))))
|
|
(when gp-1
|
|
(set! (-> self control unknown-uint20) (the-as uint (current-time)))
|
|
(let ((v1-9 (if (and (nonzero? proc) (type-type? (-> proc type) process-drawable)) proc)))
|
|
(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)) (the-as collide-shape s5-1))))
|
|
(if (and v1-11
|
|
(or (logtest? (-> v1-11 root-prim prim-core collide-as) (collide-kind enemy))
|
|
(logtest? (-> v1-11 root-prim prim-core action) (collide-action attackable))))
|
|
(set! (-> self control unknown-uint31) (the-as uint 1))))))
|
|
(when (or (= gp-1 'die) (= gp-1 'push))
|
|
(let ((v0-2 (the-as object (current-time)))) (set! (-> self control unknown-int21) (the-as int v0-2)) v0-2)))))
|
|
(else (target-dangerous-event-handler proc argc message block))))
|
|
(else (target-dangerous-event-handler proc argc message block))))
|
|
:enter
|
|
(behavior ()
|
|
(if (or (and (= (-> self fact eco-type) (pickup-type eco-yellow)) (>= (-> self fact eco-level) 1.0))
|
|
(not (time-elapsed? (-> self control unknown-dword82) (seconds 1.5))))
|
|
(go target-yellow-blast))
|
|
(set-time! (-> self state-time))
|
|
(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) *run-attack-mods*)
|
|
(set! (-> *run-attack-mods* turnv) 655360.0)
|
|
(set! (-> *run-attack-mods* turnvv) 655360.0)
|
|
(target-start-attack)
|
|
(target-danger-set! 'punch #f)
|
|
(if (or (< (fabs (-> self control unknown-float62)) 0.3) (< 0.3 (fabs (-> self control unknown-float61))))
|
|
(set! (-> self control unknown-float81) 1.0)))
|
|
: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-time! (-> self control unknown-dword31))
|
|
(target-exit))
|
|
:trans
|
|
(behavior ()
|
|
(when (!= (-> self state-time) (current-time))
|
|
(if (and (or (smack-surface? #t)
|
|
(and (>= (-> self control unknown-float63) 0.7) (not (logtest? (-> self control status) (cshape-moving-flags t-act)))))
|
|
(begin
|
|
(set! (-> self control unknown-int21) (the-as int (current-time)))
|
|
(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 (- (current-time) (the-as int (-> self control unknown-uint20)))) (the-as uint 12)))
|
|
(!= (-> self control unknown-uint31) 1))
|
|
(target-shoved (-> *TARGET-bank* smack-surface-dist)
|
|
(-> *TARGET-bank* smack-surface-height)
|
|
(the-as process #f)
|
|
target-hit))
|
|
(if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) x)
|
|
(and (< 4096.0 (-> self control unknown-float01))
|
|
(or (time-elapsed? (-> self state-time) (seconds 0.1))
|
|
(not (logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons square))))
|
|
(not (logtest? (-> self state-flags) (state-flags prevent-jump prevent-attack)))
|
|
(not (logtest? (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump)))))
|
|
(go target-attack-uppercut (-> *TARGET-bank* attack-jump-height-min) (-> *TARGET-bank* attack-jump-height-max)))
|
|
(if (and (logtest? (-> self water flags) (water-flags wt09)) (zero? (mod (- (current-time) (-> self state-time)) 21)))
|
|
(create-splash (-> self water)
|
|
(the-as float 0.6)
|
|
(vector<-cspace! (new 'stack-no-clear 'vector) (joint-node eichar-lod0-jg mouth))
|
|
0
|
|
(-> self control transv)))
|
|
(when (and (= (-> self fact eco-type) (pickup-type eco-red)) (>= (-> self fact eco-level) 1.0))
|
|
(effect-control-method-10 (-> self skel effect) 'group-red-eco-spinkick (ja-frame-num 0) 23)
|
|
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 153 (seconds 0.1))
|
|
(level-hint-spawn (text-id misty-eco-red-first-use) "sksp0072" (the-as entity #f) *entity-pool* (game-task none)))))
|
|
:code
|
|
(behavior ()
|
|
(if (logtest? (-> self water flags) (water-flags wt09)) (sound-play "swim-stroke"))
|
|
(ja-channel-push! 1 (seconds 0.02))
|
|
(ja :group! eichar-attack-punch-ja :num! min)
|
|
(set! (-> self control dynam gravity-max) 368640.0)
|
|
(set! (-> self control dynam gravity-length) 368640.0)
|
|
(let ((f28-0 0.0)
|
|
(f30-0 1.0)
|
|
(gp-2 0))
|
|
(until (ja-done? 0)
|
|
(compute-alignment! (-> self align))
|
|
(when (not (ja-min? 0))
|
|
(cond
|
|
((and (>= (ja-aframe-num 0) 20.0)
|
|
(and (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf)))
|
|
(time-elapsed? (-> self control unknown-dword11) (-> *TARGET-bank* ground-timeout))
|
|
(>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
|
|
(let ((v1-39 (ja-group)))
|
|
(or (not (or (= v1-39 eichar-attack-punch-ja) (= v1-39 eichar-attack-punch-end-ja) (= v1-39 eichar-attack-punch-alt-end-ja)))
|
|
(< 4096.0 (target-height-above-ground)))))
|
|
(>= (the-as uint (- (current-time) (the-as int (-> self control unknown-uint20)))) (the-as uint 12))))
|
|
(go target-falling #f))
|
|
((and (nonzero? (-> self control unknown-uint30))
|
|
(>= (the-as uint (- (current-time) (the-as int (-> self control unknown-uint30)))) (the-as uint 12)))
|
|
(set-forward-vel (the-as float 0.0)))
|
|
((and (not (cpad-hold? (-> self control unknown-cpad-info00 number) square))
|
|
(time-elapsed? (-> self state-time) (seconds 0.05)))
|
|
(if (= (-> self control ground-pat material) (pat-material ice))
|
|
(set-forward-vel (fmax 32768.0 (* 0.8 (-> self control unknown-float01))))
|
|
(set-forward-vel (* 0.8 (-> self control unknown-float01)))))
|
|
((ja-done? 0) (set-forward-vel f28-0))
|
|
(else
|
|
(set! f28-0 (* (target-align-vel-z-adjust (-> self align delta trans z)) (-> *display* frames-per-second) f30-0))
|
|
(set-forward-vel f28-0))))
|
|
(let ((s5-1 (new-stack-vector0)))
|
|
(vector-matrix*! s5-1 (-> self control transv) (-> self control unknown-matrix00))
|
|
(set! (-> s5-1 y) 0.0)
|
|
(vector-matrix*! (-> self control unknown-vector120) s5-1 (-> self control unknown-matrix01)))
|
|
(suspend)
|
|
(ja :num! (seek! max (-> self control unknown-surface01 align-speed)))
|
|
(if (time-elapsed? (-> self state-time) (seconds 0.1)) (set! (-> *run-attack-mods* turnvv) 0.0))
|
|
(if (< 2 gp-2) (set! f30-0 (* f30-0 (fmin 1.0 (-> self control unknown-float140)))))
|
|
(+! gp-2 1)))
|
|
(if (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf)))
|
|
(time-elapsed? (-> self control unknown-dword11) (-> *TARGET-bank* ground-timeout))
|
|
(>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
|
|
(let ((v1-121 (ja-group)))
|
|
(or (not (or (= v1-121 eichar-attack-punch-ja) (= v1-121 eichar-attack-punch-end-ja) (= v1-121 eichar-attack-punch-alt-end-ja)))
|
|
(< 4096.0 (target-height-above-ground)))))
|
|
(go target-falling #f))
|
|
(go target-stance))
|
|
:post target-post)
|
|
|
|
(defstate target-attack-air (target)
|
|
:event
|
|
(behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(let ((v0-0 (target-bonk-event-handler proc argc message block)))
|
|
(cond
|
|
(v0-0 (empty) v0-0)
|
|
(else (target-dangerous-event-handler proc argc message block)))))
|
|
:enter
|
|
(behavior ((arg0 symbol))
|
|
(set-time! (-> self state-time))
|
|
(logclear! (-> self control status) (cshape-moving-flags onsurf onground tsurf))
|
|
(target-start-attack)
|
|
(target-danger-set! 'spin-air #f)
|
|
(set! (-> self control unknown-surface00) *jump-attack-mods*)
|
|
(let ((f0-1 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
|
|
(cond
|
|
((or (>= 0.0 f0-1) (= arg0 'flop))
|
|
(let ((gp-1 (new-stack-vector0)))
|
|
(let ((f0-3 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
|
|
0.0
|
|
(vector-! gp-1 (-> self control transv) (vector-float*! gp-1 (-> self control dynam gravity-normal) f0-3)))
|
|
(let* ((f0-4 (vector-length gp-1))
|
|
(f1-2 f0-4)
|
|
(f2-0 33775.48))
|
|
(vector+! (-> self control transv)
|
|
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f2-0)
|
|
(vector-float*! gp-1 gp-1 (/ f0-4 f1-2))))))
|
|
(else
|
|
(let* ((f1-5 (/ f0-1 (* (-> self control dynam gravity-length) (seconds-per-frame))))
|
|
(f30-0 (* 0.5 f1-5 (seconds-per-frame) f0-1)))
|
|
(if (ja-group? eichar-attack-uppercut-ja)
|
|
(set! f30-0
|
|
(fmax 0.0
|
|
(- (-> *TARGET-bank* attack-jump-height-max)
|
|
(vector-dot (-> self control dynam gravity-normal)
|
|
(vector-! (new 'stack-no-clear 'vector) (-> self control trans) (-> self control unknown-vector52)))))))
|
|
(let ((gp-2 (new-stack-vector0)))
|
|
(let ((f0-8 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
|
|
0.0
|
|
(vector-! gp-2 (-> self control transv) (vector-float*! gp-2 (-> self control dynam gravity-normal) f0-8)))
|
|
(let* ((f0-9 (vector-length gp-2))
|
|
(f1-11 f0-9)
|
|
(f2-7 (+ 1024.0 (sqrtf (* 245760.0 (+ 2048.0 f30-0))))))
|
|
(vector+! (-> self control transv)
|
|
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f2-7)
|
|
(vector-float*! gp-2 gp-2 (/ f0-9 f1-11)))))))))
|
|
(set! (-> self control dynam gravity-length) 122880.0)
|
|
(set! (-> self control unknown-vector52 quad) (-> self control trans quad)))
|
|
: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-attack exit)))
|
|
:trans
|
|
(behavior ()
|
|
(when (logtest? (-> self control status) (cshape-moving-flags onsurf))
|
|
(set-quaternion! (-> self control) (-> self control dir-targ))
|
|
(go target-hit-ground #f))
|
|
(if (time-elapsed? (-> self state-time) (seconds 0.5))
|
|
(seek! (-> self control dynam gravity-length)
|
|
(-> self control unknown-dynamics00 gravity-length)
|
|
(* 245760.0 (seconds-per-frame))))
|
|
(when (and (time-elapsed? (-> self state-time) (seconds 0.05))
|
|
(< (vector-dot (-> self control dynam gravity-normal) (-> self control unknown-vector10))
|
|
(vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
|
|
(set! (-> self control dynam gravity-max) (-> self control unknown-dynamics00 gravity-max))
|
|
(set! (-> self control dynam gravity-length) (-> self control unknown-dynamics00 gravity-length)))
|
|
(when (and (= (-> self fact eco-type) (pickup-type eco-red)) (>= (-> self fact eco-level) 1.0))
|
|
(effect-control-method-10 (-> self skel effect) 'group-red-eco-spinkick (ja-frame-num 0) 70)
|
|
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 153 (seconds 0.1))
|
|
(level-hint-spawn (text-id misty-eco-red-first-use) "sksp0072" (the-as entity #f) *entity-pool* (game-task none))))
|
|
:code
|
|
(behavior ((arg0 symbol))
|
|
(ja-channel-push! 1 (seconds 0.075))
|
|
(ja-no-eval :group! eichar-attack-from-jump-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(compute-alignment! (-> self align))
|
|
(align! (-> self align) (align-opts adjust-quat) (the-as float 1.0) (the-as float 1.0) (the-as float 1.0))
|
|
(suspend)
|
|
(ja :num! (seek!)))
|
|
(ja :group! eichar-attack-from-jump-loop-ja :num! min)
|
|
(let ((f30-0 393216.0))
|
|
(let ((f0-8 (target-height-above-ground))
|
|
(f1-1 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
|
|
(while (not (or (and (< (fabs (/ f0-8 (* 0.0033333334 f1-1))) 150.0) (< f1-1 0.0))
|
|
(time-elapsed? (-> self state-time) (seconds 1.7))))
|
|
(quaternion-rotate-y! (-> self control unknown-quaternion00)
|
|
(-> self control unknown-quaternion00)
|
|
(* f30-0 (seconds-per-frame)))
|
|
(suspend)
|
|
(ja :num! (loop!))
|
|
(set! f0-8 (target-height-above-ground))
|
|
(set! f1-1 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))))
|
|
(ja-no-eval :group! eichar-attack-from-jump-end-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(cond
|
|
((< (ja-aframe-num 0) 32.0)
|
|
(quaternion-rotate-y! (-> self control unknown-quaternion00)
|
|
(-> self control unknown-quaternion00)
|
|
(* f30-0 (seconds-per-frame))))
|
|
(else
|
|
(let ((f0-22 (deg-diff (quaternion-y-angle (-> self control unknown-quaternion00)) (quaternion-y-angle (-> self control dir-targ)))))
|
|
(quaternion-rotate-y! (-> self control unknown-quaternion00)
|
|
(-> self control unknown-quaternion00)
|
|
(* 0.2 (fabs f0-22))))))
|
|
(suspend)
|
|
(ja :num! (seek!))))
|
|
(go target-falling #f))
|
|
:post target-post)
|
|
|
|
(defstate target-attack-uppercut (target)
|
|
:event target-dangerous-event-handler
|
|
:enter
|
|
(behavior ((arg0 float) (arg1 float))
|
|
(set-time! (-> self state-time))
|
|
(target-start-attack)
|
|
(target-danger-set! 'uppercut #f)
|
|
(set! (-> self control unknown-surface00) *turn-around-mods*))
|
|
:exit target-exit
|
|
:code
|
|
(behavior ((arg0 float) (arg1 float))
|
|
(let ((s3-0 (ja-group? eichar-duck-stance-ja)))
|
|
(ja-no-eval :group!
|
|
eichar-attack-uppercut-ja
|
|
:num!
|
|
(seek! (ja-aframe (the-as float 7.0) 0))
|
|
:frame-num
|
|
(the-as float (if s3-0 (ja-aframe (the-as float 5.0) 0) 0.0))))
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! (ja-aframe (the-as float 7.0) 0))))
|
|
(go target-attack-uppercut-jump arg0 arg1))
|
|
:post target-post)
|
|
|
|
(defstate target-attack-uppercut-jump (target)
|
|
:event target-dangerous-event-handler
|
|
:enter
|
|
(behavior ((arg0 float) (arg1 float))
|
|
(if (and (= (-> self control ground-pat material) (pat-material ice)) (< 32768.0 (-> self control unknown-float01)))
|
|
(set-forward-vel (the-as float 32768.0)))
|
|
(set-time! (-> self state-time))
|
|
(init-var-jump arg0 arg1 (the-as vector #t) (the-as vector #f) (-> self control transv))
|
|
(logclear! (-> self control status) (cshape-moving-flags onsurf onground tsurf))
|
|
(set! (-> self control unknown-surface00) *uppercut-jump-mods*)
|
|
(target-start-attack)
|
|
(target-danger-set! 'uppercut #f))
|
|
:exit target-exit
|
|
:trans
|
|
(behavior ()
|
|
(if (logtest? (-> self control status) (cshape-moving-flags onsurf)) (go target-hit-ground #f))
|
|
(when (and (cpad-pressed? (-> self control unknown-cpad-info00 number) square)
|
|
(< (vector-dot (-> self control dynam gravity-normal) (-> self control transv)) 22118.4)
|
|
(and (< -61440.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
|
|
(time-elapsed? (-> self control unknown-dword36) (the-as time-frame (-> *TARGET-bank* stuck-timeout)))
|
|
(not (logtest? (-> self state-flags) (state-flags prevent-attack)))
|
|
(not (logtest? (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump surf08)))))
|
|
(set-quaternion! (-> self control) (-> self control dir-targ))
|
|
(build-conversions (-> self control transv))
|
|
(go target-flop
|
|
(the-as float 65502.96)
|
|
(the-as float -163840.0)
|
|
(the-as float (if (= (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) stick0-speed) 0.0) 0.0 68812.8))))
|
|
(if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) circle)
|
|
(can-feet?)
|
|
(ja-group? eichar-attack-uppercut-ja)
|
|
(>= (ja-aframe-num 0) 12.0))
|
|
(go target-attack-air 'uppercut))
|
|
(mod-var-jump #t #t (cpad-hold? (-> self control unknown-cpad-info00 number) x) (-> self control transv))
|
|
(when (and (= (-> self fact eco-type) (pickup-type eco-red)) (>= (-> self fact eco-level) 1.0))
|
|
(effect-control-method-10 (-> self skel effect) 'group-red-eco-spinkick (ja-frame-num 0) 23)
|
|
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 153 (seconds 0.1)))
|
|
(if (and (= (-> self control unknown-symbol30) 'uppercut)
|
|
(< (vector-dot (-> self control dynam gravity-normal) (-> self control transv)) -8192.0))
|
|
(target-danger-set! 'harmless #f))
|
|
(slide-down-test))
|
|
:code
|
|
(behavior ((arg0 float) (arg1 float))
|
|
(compute-alignment! (-> self align))
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! max 0.9))
|
|
(compute-alignment! (-> self align))
|
|
(let* ((gp-0 (-> self align))
|
|
(s5-0 (method-of-object gp-0 align!))
|
|
(a1-2 (cond
|
|
((>= 30.0 (ja-aframe-num 0)) 18)
|
|
((>= 43.0 (ja-aframe-num 0)) (set! (-> self control unknown-surface00) *double-jump-mods*) 2)
|
|
(else 0))))
|
|
(s5-0 gp-0 (the-as align-opts a1-2) (the-as float 1.0) (the-as float 0.95) (the-as float 1.0))))
|
|
(go target-falling #f))
|
|
:post target-post)
|
|
|
|
(defstate target-flop (target)
|
|
:event
|
|
(behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(let ((v0-0 (target-bonk-event-handler proc argc message block)))
|
|
(cond
|
|
(v0-0 (empty) v0-0)
|
|
((let ((v1-0 message)) (= v1-0 'swim))
|
|
(cond
|
|
((< 6144.0 (target-height-above-ground))
|
|
(effect-control-method-10 (-> self skel effect) 'swim-flop (the-as float -1.0) -1)
|
|
(let ((t9-3 enter-state))
|
|
(set! (-> self next-state) target-swim-down)
|
|
((the-as (function object :behavior target) t9-3))))
|
|
(else
|
|
(let ((t9-4 enter-state)
|
|
(a0-4 'swim))
|
|
(set! (-> self next-state) target-flop-hit-ground)
|
|
((the-as (function symbol object :behavior target) t9-4) a0-4)))))
|
|
(else (target-dangerous-event-handler proc argc message block)))))
|
|
:enter
|
|
(behavior ((arg0 float) (arg1 float) (arg2 float))
|
|
(if (and (= (-> self fact eco-type) (pickup-type eco-yellow)) (>= (-> self fact eco-level) 1.0))
|
|
(go target-yellow-jump-blast))
|
|
(if (= arg2 0.0) (set-forward-vel arg2) (set-forward-vel (-> self control unknown-float01)))
|
|
(set-time! (-> self state-time))
|
|
(logclear! (-> self control status) (cshape-moving-flags onsurf onground tsurf))
|
|
(set! (-> self control unknown-surface00) *flop-mods*)
|
|
(set! (-> self control unknown-uint20) (the-as uint 0))
|
|
(set! (-> self control dynam gravity-max) 245760.0)
|
|
(set! (-> self control dynam gravity-length) 245760.0)
|
|
(let ((gp-1 (new-stack-vector0)))
|
|
(let ((f0-6 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
|
|
0.0
|
|
(vector-! gp-1 (-> self control transv) (vector-float*! gp-1 (-> self control dynam gravity-normal) f0-6)))
|
|
(let* ((f0-7 (vector-length gp-1))
|
|
(f1-3 f0-7)
|
|
(f2-0 29491.2))
|
|
(vector+! (-> self control transv)
|
|
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f2-0)
|
|
(vector-float*! gp-1 gp-1 (/ f0-7 f1-3))))))
|
|
: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)))
|
|
:trans
|
|
(behavior ()
|
|
(delete-back-vel)
|
|
(let ((gp-1 (logtest? (-> self control status) (cshape-moving-flags onsurf))))
|
|
(when (and (not gp-1) (let ((v1-6 (ja-group))) (or (= v1-6 eichar-flop-down-loop-ja) (= v1-6 eichar-moving-flop-down-ja))))
|
|
;; og:preserve-this changed for high fps. This fixes the invisible wall when flopping
|
|
(when (and (or (< (target-move-dist (the time-frame (* (-> *display* time-adjust-ratio) (seconds 0.1))))
|
|
(* (-> *display* time-adjust-ratio) 1638.4))
|
|
(and (logtest? (-> self control status) (cshape-moving-flags twall)) (< 0.7 (-> self control poly-angle))))
|
|
(not (logtest? (-> self control status) (cshape-moving-flags t-act)))
|
|
(>= (-> self control unknown-uint20) (the-as uint 2)))
|
|
(set-time! (-> self control unknown-dword36))
|
|
(set! gp-1 'stuck)))
|
|
(when gp-1
|
|
(logior! (-> self control status) (cshape-moving-flags onsurf))
|
|
(when (and (= (-> self fact eco-type) (pickup-type eco-red)) (>= (-> self fact eco-level) 1.0))
|
|
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 255 (seconds 0.5))
|
|
(effect-control-method-10 (-> self skel effect) 'group-red-eco-strike-ground (ja-frame-num 0) 0)
|
|
(let ((s5-1 (process-spawn touch-tracker :init touch-tracker-init (-> self control trans) 4096.0 30 :to self)))
|
|
(send-event (ppointer->process s5-1) 'event 'attack 'flop)
|
|
(send-event (ppointer->process s5-1)
|
|
'function
|
|
(lambda ((arg0 target))
|
|
(let ((f0-3 (seek (-> arg0 control root-prim local-sphere w)
|
|
(the-as float 28672.0)
|
|
(* 286720.0 DISPLAY_FPS_RATIO 0.016666668) ;; og:preserve-this changed for high fps
|
|
)))
|
|
(set! (-> arg0 control root-prim local-sphere w) f0-3)
|
|
f0-3)))))
|
|
(go target-flop-hit-ground gp-1)))
|
|
(when (and (= (-> self fact eco-type) (pickup-type eco-red)) (>= (-> self fact eco-level) 1.0))
|
|
(effect-control-method-10 (-> self skel effect)
|
|
'group-red-eco-spinkick
|
|
(ja-frame-num 0)
|
|
(if (rand-vu-percent? (the-as float 0.5)) 23 17))
|
|
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 153 (seconds 0.1)))
|
|
(when (and (not (-> self control unknown-symbol30)) (ja-group? eichar-flop-down-ja) (>= (ja-aframe-num 0) 8.0))
|
|
(target-start-attack)
|
|
(target-danger-set! 'flop #f)))
|
|
:code
|
|
(behavior ((arg0 float) (arg1 float) (arg2 float))
|
|
(ja-channel-set! 2)
|
|
(ja-no-eval :group! eichar-flop-down-ja :num! (seek!) :frame-num 0.0)
|
|
(ja :chan 1 :group! eichar-moving-flop-down-ja :num! (chan 0) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
(ja :chan 1
|
|
:num! (seek!)
|
|
:frame-interp
|
|
(lerp-scale (the-as float 0.0)
|
|
(the-as float 1.0)
|
|
(-> self control unknown-float01)
|
|
(the-as float 0.0)
|
|
(the-as float 40960.0))))
|
|
(set! (-> self control dynam gravity-length) (-> self control unknown-dynamics00 gravity-length))
|
|
(set! (-> self control dynam gravity quad) (-> self control unknown-dynamics00 gravity quad))
|
|
(target-danger-set! 'flop-down #f)
|
|
(ja :group! eichar-flop-down-loop-ja :num! min)
|
|
(ja :chan 1 :group! eichar-moving-flop-down-loop-ja :num! min)
|
|
(let ((f30-0 1.0))
|
|
(let ((gp-3 (new-stack-vector0)))
|
|
(let ((f0-18 (vector-dot (-> self control dynam gravity-normal) (-> self control unknown-vector120))))
|
|
0.0
|
|
(vector-! gp-3 (-> self control unknown-vector120) (vector-float*! gp-3 (-> self control dynam gravity-normal) f0-18)))
|
|
(let* ((f0-19 (vector-length gp-3))
|
|
(f1-1 f0-19)
|
|
(f2-0 -368640.0))
|
|
(vector+! (-> self control unknown-vector120)
|
|
(vector-float*! (-> self control unknown-vector120) (-> self control dynam gravity-normal) f2-0)
|
|
(vector-float*! gp-3 gp-3 (/ f0-19 f1-1)))))
|
|
(let ((gp-4 (new-stack-vector0)))
|
|
(let ((f0-22 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
|
|
0.0
|
|
(vector-! gp-4 (-> self control transv) (vector-float*! gp-4 (-> self control dynam gravity-normal) f0-22)))
|
|
(let* ((f0-23 (vector-length gp-4))
|
|
(f1-3 f0-23)
|
|
(f2-2 (* -368640.0 f30-0)))
|
|
(vector+! (-> self control transv)
|
|
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f2-2)
|
|
(vector-float*! gp-4 gp-4 (/ f0-23 f1-3)))))
|
|
(suspend)
|
|
(loop
|
|
(+! (-> self control unknown-uint20) 1)
|
|
(ja :num! (+!))
|
|
(ja :chan 1
|
|
:num!
|
|
(chan 0)
|
|
:frame-interp
|
|
(lerp-scale (the-as float 0.0)
|
|
(the-as float 1.0)
|
|
(-> self control unknown-float01)
|
|
(the-as float 0.0)
|
|
(the-as float 40960.0)))
|
|
(set! f30-0 (* f30-0 (fmin 1.0 (-> self control unknown-float140))))
|
|
(let ((gp-6 (new-stack-vector0))
|
|
(f28-0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
|
|
0.0
|
|
(vector-! gp-6 (-> self control transv) (vector-float*! gp-6 (-> self control dynam gravity-normal) f28-0))
|
|
(let* ((f1-5 (vector-length gp-6))
|
|
(f0-34 f1-5))
|
|
(if (< (-> self control unknown-surface01 transv-max) f1-5) (set! f1-5 (-> self control unknown-surface01 transv-max)))
|
|
(vector+! (-> self control transv)
|
|
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f28-0)
|
|
(vector-float*! gp-6 gp-6 (/ f1-5 f0-34)))))
|
|
(if (time-elapsed? (-> self state-time) (-> *TARGET-bank* fall-timeout)) (go target-falling #f))
|
|
(if (and (= *cheat-mode* 'debug) (cpad-hold? (-> self control unknown-cpad-info00 number) r2) (not *pause-lock*))
|
|
(go target-falling #f))
|
|
(suspend))))
|
|
:post target-post)
|
|
|
|
(defstate target-flop-hit-ground (target)
|
|
:event
|
|
(behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('swim) #f)
|
|
(else (target-standard-event-handler proc argc message block))))
|
|
:enter
|
|
(behavior ((arg0 symbol))
|
|
(let ((f0-1 (vector-dot (-> self control dynam gravity-normal)
|
|
(vector-! (new 'stack-no-clear 'vector) (-> self control unknown-vector111) (-> self control trans)))))
|
|
(if (< (-> *TARGET-bank* fall-far) f0-1) (go target-hit-ground-hard f0-1)))
|
|
(target-land-effect)
|
|
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 255 (seconds 0.1))
|
|
(set-time! (-> self state-time))
|
|
(set! (-> self control unknown-uint20) (the-as uint arg0))
|
|
(set-forward-vel (the-as float 0.0))
|
|
(set! (-> self control unknown-surface00) *flop-land-mods*)
|
|
(logclear! (-> *flop-land-mods* flags) (surface-flags allow-edge-grab))
|
|
(logior! (-> self state-flags) (state-flags flop-hit-ground)))
|
|
:exit target-exit
|
|
:trans
|
|
(behavior ()
|
|
(when (!= (-> self control unknown-spoolanim00) 'stuck)
|
|
(if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) circle) (can-feet?)) (go target-attack-air 'flop)))
|
|
(when (and (and (= (-> self fact eco-type) (pickup-type eco-red)) (>= (-> self fact eco-level) 1.0))
|
|
(not (time-elapsed? (-> self state-time) (seconds 0.25))))
|
|
(effect-control-method-10 (-> self skel effect)
|
|
'group-red-eco-spinkick
|
|
(ja-frame-num 0)
|
|
(if (rand-vu-percent? (the-as float 0.5)) 23 17))
|
|
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 153 (seconds 0.1)))
|
|
(let ((v1-33 (ja-group)))
|
|
(if (and (or (= v1-33 eichar-flop-down-land-ja) (= v1-33 eichar-moving-flop-down-land-ja)) (>= (ja-aframe-num 0) 28.0))
|
|
(logior! (-> *flop-land-mods* flags) (surface-flags allow-edge-grab))))
|
|
(slide-down-test))
|
|
:code
|
|
(behavior ((arg0 symbol))
|
|
(target-hit-ground-anim arg0)
|
|
(go target-falling #f))
|
|
:post target-post)
|
|
|
|
(defstate target-wheel (target)
|
|
:event
|
|
(behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(if (= message 'touched) (send-event proc 'roll))
|
|
(target-standard-event-handler proc argc message block))
|
|
:enter
|
|
(behavior ()
|
|
(set-time! (-> self state-time))
|
|
(set! (-> self control unknown-surface00) *wheel-mods*)
|
|
(+! (-> self control unknown-int50) 1)
|
|
(rot->dir-targ! (-> self control))
|
|
(set-forward-vel (+ (-> *TARGET-bank* wheel-speed-min)
|
|
(* (-> *TARGET-bank* wheel-speed-inc) (the float (+ (-> self control unknown-int50) -1)))))
|
|
(if (or (< (fabs (-> self control unknown-float62)) 0.3) (< 0.3 (fabs (-> self control unknown-float61))))
|
|
(set! (-> self control unknown-float81) 1.0))
|
|
(set! (-> self control unknown-uint20) (the-as uint 0))
|
|
(set! (-> self control unknown-int21) 0)
|
|
0)
|
|
:exit
|
|
(behavior ()
|
|
(when (!= (-> self next-state name) 'target-wheel)
|
|
(set! (-> self control unknown-int50) 0)
|
|
(set-time! (-> self control unknown-dword30)))
|
|
(target-exit))
|
|
:code
|
|
(behavior ()
|
|
(let ((gp-0 0))
|
|
0
|
|
(let ((s5-0 0)
|
|
(f30-0 1.0))
|
|
(ja-channel-push! 1 (seconds 0.04))
|
|
(ja :group! eichar-duck-roll-ja :num! min)
|
|
(until (ja-done? 0)
|
|
(if (cpad-pressed? (-> self control unknown-cpad-info00 number) x) (set! gp-0 (the-as int (current-time))))
|
|
(when (and (or (smack-surface? #f) (>= (-> self control unknown-float63) 0.7))
|
|
(>= (the-as uint (- (current-time) (the-as int (-> self control unknown-uint20)))) (the-as uint 3))
|
|
(time-elapsed? (-> self state-time) 1))
|
|
(if (>= 6.0 (ja-aframe-num 0))
|
|
(target-shoved (-> *TARGET-bank* smack-surface-dist)
|
|
(-> *TARGET-bank* smack-surface-height)
|
|
(the-as process #f)
|
|
target-hit))
|
|
(if (zero? s5-0) (set! s5-0 (the-as int (current-time)))))
|
|
(if (cpad-pressed? (-> self control unknown-cpad-info00 number) square) (current-time))
|
|
(compute-alignment! (-> self align))
|
|
(cond
|
|
((nonzero? s5-0))
|
|
(else
|
|
(align! (-> self align) (align-opts adjust-xz-vel) (the-as float 1.0) (the-as float 1.0) f30-0)
|
|
(let ((s4-1 (new-stack-vector0)))
|
|
(vector-matrix*! s4-1 (-> self control transv) (-> self control unknown-matrix00))
|
|
(set! (-> s4-1 y) 0.0)
|
|
(vector-matrix*! (-> self control unknown-vector120) s4-1 (-> self control unknown-matrix01)))))
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
(set! f30-0 (* f30-0 (fmin 1.0 (-> self control unknown-float140))))))
|
|
(if (and (or (not (time-elapsed? (the-as time-frame gp-0) (-> *TARGET-bank* wheel-jump-pre-window)))
|
|
(cpad-pressed? (-> self control unknown-cpad-info00 number) x))
|
|
(can-jump? 'target-wheel-flip))
|
|
(go target-wheel-flip (-> *TARGET-bank* wheel-flip-height) (-> *TARGET-bank* wheel-flip-dist))))
|
|
(set-time! (-> self state-hook-time))
|
|
(set! (-> self state-hook)
|
|
(lambda :behavior target ()
|
|
(cond
|
|
((time-elapsed? (-> self state-hook-time) (-> *TARGET-bank* wheel-jump-post-window))
|
|
(set! (-> self state-hook) (the-as (function none :behavior target) nothing)))
|
|
(else
|
|
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control 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? 'target-wheel-flip))
|
|
(go target-wheel-flip (-> *TARGET-bank* wheel-flip-height) (-> *TARGET-bank* wheel-flip-dist)))))
|
|
(none)))
|
|
(go target-duck-stance))
|
|
:post target-post)
|
|
|
|
(defstate target-wheel-flip (target)
|
|
:event target-standard-event-handler
|
|
:enter
|
|
(behavior ((arg0 float) (arg1 float))
|
|
(set! (-> self control unknown-surface00) *wheel-flip-mods*))
|
|
:exit target-exit
|
|
:trans
|
|
(behavior ()
|
|
(if (and (or (smack-surface? #f) (< (target-move-dist (-> *TARGET-bank* stuck-time)) (-> *TARGET-bank* stuck-distance)))
|
|
(!= (-> self state-time) (current-time)))
|
|
(target-shoved (-> *TARGET-bank* smack-surface-dist)
|
|
(-> *TARGET-bank* smack-surface-height)
|
|
(the-as process #f)
|
|
target-hit))
|
|
(if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) circle)
|
|
(can-feet?)
|
|
(and (ja-group? eichar-jump-loop-ja) (= (-> self skel root-channel 0) (-> self skel channel))))
|
|
(go target-attack-air #f)))
|
|
:code
|
|
(behavior ((arg0 float) (arg1 float))
|
|
(ja-channel-push! 1 (seconds 0.04))
|
|
(ja :group! eichar-wheel-flip-ja :num! min)
|
|
(let ((f30-0 1.0))
|
|
(until (or (ja-max? 0) (and (>= (ja-aframe-num 0) 4.0) (logtest? (-> self control status) (cshape-moving-flags onsurf))))
|
|
(when (and (>= (ja-aframe-num 0) 3.0) (not (-> self control unknown-symbol30)))
|
|
(set! (-> self event-hook) target-dangerous-event-handler)
|
|
(target-start-attack)
|
|
(target-danger-set! 'flip #f))
|
|
(compute-alignment! (-> self align))
|
|
(if (not (ja-max? 0))
|
|
(align! (-> self align)
|
|
(align-opts adjust-y-vel adjust-xz-vel)
|
|
(the-as float 1.0)
|
|
(/ arg0 (-> *TARGET-bank* wheel-flip-art-height))
|
|
(* f30-0 (/ arg1 (-> *TARGET-bank* wheel-flip-art-dist))))
|
|
(align! (-> self align)
|
|
(align-opts adjust-xz-vel)
|
|
(the-as float 1.0)
|
|
(the-as float 1.0)
|
|
(* f30-0 (/ arg1 (-> *TARGET-bank* wheel-flip-art-dist)))))
|
|
(let ((s4-1 (new-stack-vector0)))
|
|
(vector-matrix*! s4-1 (-> self control transv) (-> self control unknown-matrix00))
|
|
(set! (-> s4-1 y) 0.0)
|
|
(vector-matrix*! (-> self control unknown-vector120) s4-1 (-> self control unknown-matrix01)))
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
(set! f30-0 (* f30-0 (fmin 1.0 (-> self control unknown-float140))))))
|
|
(set-time! (-> self state-time))
|
|
(while (not (logtest? (-> self control status) (cshape-moving-flags onsurf)))
|
|
(when (time-elapsed? (-> self state-time) (seconds 0.01))
|
|
(when (not (ja-group? eichar-jump-loop-ja))
|
|
(ja-channel-push! 1 (seconds 0.1))
|
|
(ja :group! eichar-jump-loop-ja :num! min)))
|
|
(let ((gp-2 (new-stack-vector0))
|
|
(f30-1 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
|
|
0.0
|
|
(vector-! gp-2 (-> self control transv) (vector-float*! gp-2 (-> self control dynam gravity-normal) f30-1))
|
|
(let* ((f1-6 (vector-length gp-2))
|
|
(f0-21 f1-6)
|
|
(f1-7 (* 0.9 f1-6)))
|
|
(vector+! (-> self control transv)
|
|
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f30-1)
|
|
(vector-float*! gp-2 gp-2 (/ f1-7 f0-21)))))
|
|
(suspend)
|
|
(if (ja-group? eichar-jump-loop-ja) (ja :num! (loop!)) (ja :num-func num-func-identity :frame-num max)))
|
|
(target-land-effect)
|
|
(set-time! (-> self state-hook-time))
|
|
(set! (-> self state-hook)
|
|
(lambda :behavior target ()
|
|
(cond
|
|
((time-elapsed? (-> self state-hook-time) (seconds 0.1))
|
|
(set! (-> self state-hook) (the-as (function none :behavior target) nothing)))
|
|
(else
|
|
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control 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-high-jump (-> *TARGET-bank* flip-jump-height-min) (-> *TARGET-bank* flip-jump-height-max) 'flip))))
|
|
(none)))
|
|
(if (ja-group? eichar-jump-loop-ja) (go target-hit-ground #f) (go target-stance)))
|
|
:post target-post)
|