mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 21:27:52 -04:00
9676100039
* put some duplicated code in a func * make jak 2 text "work" * group up all subtitles c++ code into one folder * compact single-line subtitles * fix a couple compiler crashes * Update game_subtitle_en.gd * `rolling` and `sunken` * `swamp` * `ogre` * `village3` * `maincave` * `snow` * `lavatube` * `citadel` * Update .gitignore * clang * fix encoding and decoding for quote * properly fix quotes * subtitle deserialize: sort by kind, ID and name * sub editor: fix line speaker not being converted * cleanup game text ids 1 * update text ids 2 * update source * update refs
2860 lines
104 KiB
Common Lisp
2860 lines
104 KiB
Common Lisp
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; name: target2.gc
|
|
;; name in dgo: target2
|
|
;; dgos: GAME, ENGINE
|
|
|
|
(declare-type first-person-hud process)
|
|
|
|
|
|
|
|
;; DECOMP BEGINS
|
|
|
|
(defstate target-load-wait (target)
|
|
:event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
(case arg2
|
|
(('loading)
|
|
(set! (-> self state-time) (-> *display* base-frame-counter))
|
|
#f
|
|
)
|
|
(else
|
|
(target-standard-event-handler arg0 arg1 arg2 arg3)
|
|
)
|
|
)
|
|
)
|
|
:exit target-exit
|
|
:code (behavior ()
|
|
(set! (-> self control unknown-surface00) *walk-no-turn-mods*)
|
|
(set! (-> self state-time) (-> *display* base-frame-counter))
|
|
(while (< (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.05))
|
|
(ja-channel-push! 1 (seconds 0.1))
|
|
(ja-no-eval :group! eichar-trip-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(compute-alignment! (-> self align))
|
|
(align! (-> self align) (align-opts adjust-xz-vel) (the-as float 1.0) (the-as float 1.0) (the-as float 1.0))
|
|
(send-event *camera* 'joystick 0.0 0.0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
(let ((gp-0 (-> *display* base-frame-counter)))
|
|
(until (>= (- (-> *display* base-frame-counter) gp-0) (seconds 0.3))
|
|
(suspend)
|
|
(ja :num! (seek! (ja-aframe (the-as float 19.0) 0) 0.05))
|
|
(suspend)
|
|
)
|
|
)
|
|
(ja-channel-push! 1 (seconds 0.3))
|
|
(ja-no-eval :group! eichar-painful-land-ja :num! (seek!) :frame-num (ja-aframe (the-as float 40.0) 0))
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
(ja-no-eval :group! eichar-painful-land-end-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
(go target-stance)
|
|
(none)
|
|
)
|
|
:post target-no-stick-post
|
|
)
|
|
|
|
(defstate target-stance-ambient (target)
|
|
:event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
(case arg2
|
|
(('movie)
|
|
(go target-stance)
|
|
)
|
|
(else
|
|
(target-standard-event-handler arg0 arg1 arg2 arg3)
|
|
)
|
|
)
|
|
)
|
|
:enter (behavior ()
|
|
(set! (-> self neck flex-blend) 0.0)
|
|
((-> target-stance enter))
|
|
(let ((v1-2 (rand-vu-int-count 4)))
|
|
(cond
|
|
((zero? v1-2)
|
|
(set! (-> self control unknown-uint20)
|
|
(the-as uint (new 'static 'spool-anim :name "eichar-ambient-1" :index #xe7 :parts 1 :command-list '()))
|
|
)
|
|
)
|
|
((= v1-2 1)
|
|
(set! (-> self control unknown-uint20)
|
|
(the-as uint (new 'static 'spool-anim :name "eichar-ambient-2" :index #xe8 :parts 1 :command-list '()))
|
|
)
|
|
)
|
|
((= v1-2 2)
|
|
(set! (-> self control unknown-uint20)
|
|
(the-as uint (new 'static 'spool-anim :name "eichar-ambient-3" :index #xe9 :parts 1 :command-list '()))
|
|
)
|
|
)
|
|
(else
|
|
(set! (-> self control unknown-uint20)
|
|
(the-as uint (new 'static 'spool-anim :name "eichar-ambient-4" :index #xea :parts 1 :command-list '()))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> self state-time) (-> *display* base-frame-counter))
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(let ((a0-0 (-> self control unknown-spoolanim00)))
|
|
(when a0-0
|
|
(ja-abort-spooled-anim a0-0 (the-as art-joint-anim #f) -1)
|
|
(ja-channel-set! 1)
|
|
(ja :group! eichar-stance-loop-ja :num! min)
|
|
)
|
|
)
|
|
((-> target-stance exit))
|
|
(target-exit)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(spool-push *art-control* (-> self control unknown-spoolanim00 name) 0 self (the-as float -99.0))
|
|
(if (or (cpad-hold? (-> self control unknown-cpad-info00 number) start l1 r1 triangle circle x square)
|
|
*progress-process*
|
|
)
|
|
(go target-stance)
|
|
)
|
|
(none)
|
|
)
|
|
:code (behavior ()
|
|
(while (let ((v1-13 (file-status *art-control* (-> self control unknown-spoolanim00 name) 0)))
|
|
(not (or (= v1-13 'locked) (= v1-13 'active)))
|
|
)
|
|
(suspend)
|
|
(ja :num! (loop!))
|
|
(ja :chan 1 :num! (chan 0))
|
|
(ja :chan 2 :num! (chan 0))
|
|
)
|
|
(ja-play-spooled-anim
|
|
(-> self control unknown-spoolanim00)
|
|
(the-as art-joint-anim eichar-stance-loop-ja)
|
|
(the-as art-joint-anim eichar-stance-loop-ja)
|
|
(the-as (function process-drawable symbol) (lambda () (!= (-> *cpad-list* cpads 0 stick0-speed) 0.0)))
|
|
)
|
|
(set! (-> self control unknown-uint20) (the-as uint #f))
|
|
(go target-stance)
|
|
(none)
|
|
)
|
|
:post target-post
|
|
)
|
|
|
|
(deftype first-person-hud (process)
|
|
((max-nb-of-particles int32 :offset-assert 112)
|
|
(nb-of-particles int32 :offset-assert 116)
|
|
(particles hud-particle 3 :offset-assert 120)
|
|
(in-out-position int32 :offset-assert 132)
|
|
(sides-x-scale float :offset-assert 136)
|
|
(sides-y-scale float :offset-assert 140)
|
|
(x-offset int32 :offset-assert 144)
|
|
)
|
|
:heap-base #x30
|
|
:method-count-assert 15
|
|
:size-assert #x94
|
|
:flag-assert #xf00300094
|
|
(:methods
|
|
(dumb-15 (_type_) none 14)
|
|
)
|
|
(:states
|
|
hud-coming-in
|
|
hud-going-out
|
|
hud-normal
|
|
hud-waiting
|
|
)
|
|
)
|
|
|
|
|
|
(define *fp-hud-stack* (malloc 'global #x3800))
|
|
|
|
(defmethod deactivate first-person-hud ((obj first-person-hud))
|
|
(dotimes (s5-0 (-> obj nb-of-particles))
|
|
(kill-and-free-particles (-> obj particles s5-0 part))
|
|
(set! (-> obj particles s5-0 part matrix) -1)
|
|
)
|
|
(enable-hud)
|
|
(set! (-> *target* fp-hud) (the-as handle #f))
|
|
((the-as (function process none) (find-parent-method first-person-hud 10)) obj)
|
|
(none)
|
|
)
|
|
|
|
(defbehavior first-person-hud-init-by-other first-person-hud ()
|
|
(logclear! (-> self mask) (process-mask pause))
|
|
(set! (-> self nb-of-particles) 0)
|
|
(set! (-> self max-nb-of-particles) 3)
|
|
(set! (-> self in-out-position) 4096)
|
|
(when (< (-> self nb-of-particles) (-> self max-nb-of-particles))
|
|
(let ((gp-0 (-> self nb-of-particles)))
|
|
(set! (-> self particles gp-0) (new 'static 'hud-particle))
|
|
(set! (-> self particles gp-0 part) (create-launch-control (-> *part-group-id-table* 611) self))
|
|
(set! (-> self particles gp-0 init-pos x) -320.0)
|
|
(set! (-> self particles gp-0 init-pos y) 254.0)
|
|
(set! (-> self particles gp-0 init-pos z) 15.0)
|
|
(set! (-> self particles gp-0 part matrix) -1)
|
|
)
|
|
(+! (-> self nb-of-particles) 1)
|
|
)
|
|
(when (< (-> self nb-of-particles) (-> self max-nb-of-particles))
|
|
(let ((gp-1 (-> self nb-of-particles)))
|
|
(set! (-> self particles gp-1) (new 'static 'hud-particle))
|
|
(set! (-> self particles gp-1 part) (create-launch-control (-> *part-group-id-table* 612) self))
|
|
(set! (-> self particles gp-1 init-pos x) -320.0)
|
|
(set! (-> self particles gp-1 init-pos y) 192.0)
|
|
(set! (-> self particles gp-1 init-pos z) 15.0)
|
|
(set! (-> self particles gp-1 part matrix) -1)
|
|
)
|
|
(+! (-> self nb-of-particles) 1)
|
|
)
|
|
(when (< (-> self nb-of-particles) (-> self max-nb-of-particles))
|
|
(let ((gp-2 (-> self nb-of-particles)))
|
|
(set! (-> self particles gp-2) (new 'static 'hud-particle))
|
|
(set! (-> self particles gp-2 part) (create-launch-control (-> *part-group-id-table* 613) self))
|
|
(set! (-> self particles gp-2 init-pos x) 256.0)
|
|
(set! (-> self particles gp-2 init-pos y) 244.0)
|
|
(set! (-> self particles gp-2 init-pos z) 15.0)
|
|
(set! (-> self particles gp-2 part matrix) -1)
|
|
)
|
|
(+! (-> self nb-of-particles) 1)
|
|
)
|
|
(case (get-aspect-ratio)
|
|
(('aspect4x3)
|
|
(set! (-> self sides-x-scale) (if (= (-> *pc-settings* aspect-custom-x) 16) 5.0 3.5))
|
|
(set! (-> self sides-y-scale) 13.0)
|
|
(set! (-> self x-offset) 0)
|
|
0
|
|
)
|
|
(('aspect16x9)
|
|
(set! (-> self sides-x-scale) 2.8)
|
|
(set! (-> self sides-y-scale) 9.75)
|
|
(set! (-> self x-offset) 12)
|
|
)
|
|
)
|
|
(set! (-> self event-hook) (-> hud-waiting event))
|
|
(go hud-waiting)
|
|
(none)
|
|
)
|
|
|
|
(defmethod relocate first-person-hud ((obj first-person-hud) (arg0 int))
|
|
(dotimes (v1-0 (-> obj nb-of-particles))
|
|
(when (-> obj particles v1-0 part)
|
|
(if (nonzero? (-> obj particles v1-0 part))
|
|
(&+! (-> obj particles v1-0 part) arg0)
|
|
)
|
|
)
|
|
)
|
|
(the-as first-person-hud ((method-of-type process relocate) obj arg0))
|
|
)
|
|
|
|
(defmethod dumb-15 first-person-hud ((obj first-person-hud))
|
|
(dotimes (s5-0 (-> obj nb-of-particles))
|
|
(set! (-> obj particles s5-0 pos x) (+ -256.0 (-> obj particles s5-0 init-pos x)))
|
|
(set! (-> obj particles s5-0 pos y)
|
|
(* 0.5 (- (* (-> obj particles s5-0 init-pos y) (-> *video-parms* relative-y-scale))
|
|
(the float (-> *video-parms* screen-sy))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> obj particles s5-0 pos z) (-> obj particles s5-0 init-pos z))
|
|
(if (> (-> obj particles s5-0 part matrix) 0)
|
|
(set-vector!
|
|
(sprite-get-user-hvdf (-> obj particles s5-0 part matrix))
|
|
(the float (+ (the int (-> obj particles s5-0 pos x)) 2048))
|
|
(the float (+ (the int (-> obj particles s5-0 pos y)) 2048))
|
|
(- (-> *math-camera* hvdf-off z) (* 1024.0 (-> obj particles s5-0 pos z)))
|
|
(-> *math-camera* hvdf-off w)
|
|
)
|
|
)
|
|
(spawn (-> obj particles s5-0 part) *null-vector*)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defstate hud-waiting (first-person-hud)
|
|
:event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
(case arg2
|
|
(('go-away)
|
|
(go hud-going-out)
|
|
)
|
|
)
|
|
)
|
|
:enter (behavior ()
|
|
(disable-hud (the-as int (-> *hud-parts* power)))
|
|
(none)
|
|
)
|
|
:code (behavior ()
|
|
(loop
|
|
(dotimes (gp-0 (-> self nb-of-particles))
|
|
(if (= (-> self particles gp-0 part matrix) -1)
|
|
(set! (-> self particles gp-0 part matrix) (sprite-allocate-user-hvdf))
|
|
)
|
|
)
|
|
(set-setting! 'common-page 'set 0.0 1)
|
|
(suspend)
|
|
(go hud-coming-in)
|
|
(suspend)
|
|
)
|
|
(none)
|
|
)
|
|
)
|
|
|
|
(defstate hud-coming-in (first-person-hud)
|
|
:event (-> hud-waiting event)
|
|
:code (behavior ()
|
|
(loop
|
|
(seekl! (-> self in-out-position) 0 (the int (* 350.0 (-> *display* time-adjust-ratio))))
|
|
(if (zero? (-> self in-out-position))
|
|
(go hud-normal)
|
|
)
|
|
(suspend)
|
|
)
|
|
(none)
|
|
)
|
|
:post (behavior ()
|
|
(dumb-15 self)
|
|
(none)
|
|
)
|
|
)
|
|
|
|
(defstate hud-normal (first-person-hud)
|
|
:event (-> hud-waiting event)
|
|
:code (behavior ()
|
|
(loop
|
|
(if (or (not *progress-process*)
|
|
(= (-> *progress-process* 0 next-state name) 'progress-going-out)
|
|
(= (-> *progress-process* 0 next-state name) 'progress-gone)
|
|
)
|
|
(seekl! (-> self in-out-position) 0 (the int (* 150.0 (-> *display* time-adjust-ratio))))
|
|
(seekl! (-> self in-out-position) 4096 (the int (* 200.0 (-> *display* time-adjust-ratio))))
|
|
)
|
|
(suspend)
|
|
)
|
|
(none)
|
|
)
|
|
)
|
|
|
|
(defstate hud-going-out (first-person-hud)
|
|
:code (behavior ()
|
|
(loop
|
|
(seekl! (-> self in-out-position) 4096 (the int (* 350.0 (-> *display* time-adjust-ratio))))
|
|
(if (= (-> self in-out-position) 4096)
|
|
(deactivate self)
|
|
)
|
|
(suspend)
|
|
)
|
|
(none)
|
|
)
|
|
:post (behavior ()
|
|
(dumb-15 self)
|
|
(none)
|
|
)
|
|
)
|
|
|
|
(defun part-first-person-hud-left-func ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix))
|
|
(let ((s5-0 (handle->process (-> *target* fp-hud))))
|
|
(when s5-0
|
|
(let ((f30-0 (* 0.00024414062 (the float (-> (the-as first-person-hud s5-0) in-out-position)))))
|
|
(if (or (-> *setting-control* current movie) (movie?))
|
|
(set! f30-0 1.0)
|
|
)
|
|
(if (< 0.25 f30-0)
|
|
(set! f30-0 1.0)
|
|
(* 4.0 f30-0)
|
|
)
|
|
(set! (-> (the-as first-person-hud s5-0) particles 0 init-pos x)
|
|
(the float (- 59 (-> (the-as first-person-hud s5-0) x-offset)))
|
|
)
|
|
(set! (-> arg2 vector 0 w) (* 4096.0 (+ (-> (the-as first-person-hud s5-0) sides-x-scale) (* 10.0 f30-0))))
|
|
(set! (-> arg2 vector 1 w) (* 4096.0 (+ (-> (the-as first-person-hud s5-0) sides-y-scale) (* 10.0 f30-0))))
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defun part-first-person-hud-right-func ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix))
|
|
(let ((s5-0 (handle->process (-> *target* fp-hud))))
|
|
(when s5-0
|
|
(let ((f30-0 (* 0.00024414062 (the float (-> (the-as first-person-hud s5-0) in-out-position)))))
|
|
(if (or (-> *setting-control* current movie) (movie?))
|
|
(set! f30-0 1.0)
|
|
)
|
|
(if (< 0.25 f30-0)
|
|
(set! f30-0 1.0)
|
|
(* 4.0 f30-0)
|
|
)
|
|
(set! (-> (the-as first-person-hud s5-0) particles 1 init-pos x)
|
|
(the float (+ (-> (the-as first-person-hud s5-0) x-offset) 452))
|
|
)
|
|
(set! (-> arg2 vector 0 w) (* 4096.0 (+ (-> (the-as first-person-hud s5-0) sides-x-scale) (* 10.0 f30-0))))
|
|
(set! (-> arg2 vector 1 w) (* 4096.0 (+ (-> (the-as first-person-hud s5-0) sides-y-scale) (* 10.0 f30-0))))
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defun part-first-person-hud-selector-func ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix))
|
|
(let ((v1-2 (handle->process (-> *target* fp-hud))))
|
|
(when v1-2
|
|
(let ((f30-0 (* 0.00024414062 (the float (-> (the-as first-person-hud v1-2) in-out-position)))))
|
|
(if (or (-> *setting-control* current movie) (movie?))
|
|
(set! f30-0 1.0)
|
|
)
|
|
(if (< 0.5 f30-0)
|
|
(set! f30-0 1.0)
|
|
(* 2.0 f30-0)
|
|
)
|
|
(set! (-> arg2 vector 2 w) (- 64.0 (* 64.0 f30-0)))
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; ERROR: function was not converted to expressions. Cannot decompile.
|
|
|
|
(defstate target-stance-look-around (target)
|
|
:event target-standard-event-handler
|
|
:enter (-> target-stance enter)
|
|
:exit (-> target-stance exit)
|
|
:trans (-> target-stance trans)
|
|
:code (behavior ()
|
|
(while (let ((a1-0 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-0 from) self)
|
|
(set! (-> a1-0 num-params) 0)
|
|
(set! (-> a1-0 message) 'dist-from-interp-src)
|
|
(and (< (send-event-function *camera* a1-0) 4915.2)
|
|
(< (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.07))
|
|
(zero? (ja-group-size))
|
|
)
|
|
)
|
|
(suspend)
|
|
)
|
|
(let ((v1-8 target-stance))
|
|
(set! (-> self next-state) v1-8)
|
|
(set! (-> self state) v1-8)
|
|
)
|
|
((the-as (function none :behavior target) (-> target-stance code)))
|
|
(none)
|
|
)
|
|
:post target-post
|
|
)
|
|
|
|
(defstate target-look-around (target)
|
|
:event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
(cond
|
|
((and (= arg2 'query) (= (-> arg3 param 0) 'mode))
|
|
(-> self state name)
|
|
)
|
|
((let ((v1-4 arg2))
|
|
(= v1-4 'end-mode)
|
|
)
|
|
(go target-stance-look-around)
|
|
)
|
|
((-> self control unknown-symbol30)
|
|
(target-dangerous-event-handler arg0 arg1 arg2 arg3)
|
|
)
|
|
(else
|
|
(target-standard-event-handler arg0 arg1 arg2 arg3)
|
|
)
|
|
)
|
|
)
|
|
:enter (behavior ()
|
|
(set! (-> self cam-user-mode) 'look-around)
|
|
(set! (-> self control unknown-surface00) *duck-mods*)
|
|
(logior! (-> self state-flags) (state-flags first-person-mode))
|
|
(send-event *camera* 'blend-from-as-fixed)
|
|
(send-event *camera* 'no-intro)
|
|
(camera-change-to (the-as string 'cam-eye) 60 #f)
|
|
(let ((a0-5 (handle->process (-> self fp-hud))))
|
|
(if a0-5
|
|
(deactivate a0-5)
|
|
)
|
|
)
|
|
(set! (-> self fp-hud)
|
|
(ppointer->handle (process-spawn first-person-hud :to *dproc* :stack (&+ *fp-hud-stack* #x3800)))
|
|
)
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(let ((a0-1 (handle->process (-> self fp-hud))))
|
|
(if a0-1
|
|
(send-event a0-1 'go-away)
|
|
)
|
|
)
|
|
(set! (-> self cam-user-mode) 'normal)
|
|
(target-exit)
|
|
(when (send-event *camera* 'query-state cam-eye)
|
|
(send-event *camera* 'no-intro)
|
|
(send-event *camera* 'force-blend (seconds 0.2))
|
|
(send-event *camera* 'clear-entity)
|
|
(camera-change-to (the-as string 'base) 60 #f)
|
|
)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(local-vars (sv-48 vector))
|
|
(rlet ((vf0 :class vf)
|
|
(vf4 :class vf)
|
|
(vf5 :class vf)
|
|
(vf6 :class vf)
|
|
)
|
|
(init-vf0-vector)
|
|
(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 r2 circle square)
|
|
)
|
|
(and (= (-> self fact-info-target eco-type) (pickup-type eco-yellow))
|
|
(>= (-> self fact-info-target eco-level) 1.0)
|
|
)
|
|
(>= (- (-> *display* base-frame-counter) (-> self control unknown-dword82)) (seconds 0.5))
|
|
(not *pause-lock*)
|
|
)
|
|
(let ((gp-1 (vector-float*!
|
|
(new-stack-vector0)
|
|
(-> *math-camera* inv-camera-rot vector 2)
|
|
(the-as float (-> *TARGET-bank* yellow-projectile-speed))
|
|
)
|
|
)
|
|
(s5-1 (vector-float*! (new-stack-vector0) (-> *math-camera* inv-camera-rot vector 2) 8192.0))
|
|
)
|
|
(vector+float*! s5-1 s5-1 (-> *math-camera* inv-camera-rot vector 1) (the-as float -2048.0))
|
|
(let ((s4-0 (get-process *default-dead-pool* projectile-yellow #x4000)))
|
|
(when s4-0
|
|
(let ((t9-2 (method-of-type projectile-yellow activate)))
|
|
(t9-2 (the-as projectile-yellow s4-0) self 'projectile-yellow (the-as pointer #x70004000))
|
|
)
|
|
(let ((s3-0 run-function-in-process)
|
|
(s2-0 s4-0)
|
|
(s1-0 projectile-init-by-other)
|
|
(s0-0 (-> self entity))
|
|
)
|
|
(set! sv-48 s5-1)
|
|
(let ((v0-3 (camera-pos)))
|
|
(.mov.vf vf6 vf0 :mask #b1000)
|
|
(.lvf vf4 (&-> v0-3 quad))
|
|
)
|
|
(.lvf vf5 (&-> s5-1 quad))
|
|
(.add.vf vf6 vf4 vf5 :mask #b111)
|
|
(.svf (&-> sv-48 quad) vf6)
|
|
(let ((t1-0 (if (>= (-> self fact-info-target eco-level) (-> *FACT-bank* eco-level-max))
|
|
56
|
|
40
|
|
)
|
|
)
|
|
(t2-0 #f)
|
|
)
|
|
((the-as (function object object object object object object object none) s3-0)
|
|
s2-0
|
|
s1-0
|
|
s0-0
|
|
sv-48
|
|
gp-1
|
|
t1-0
|
|
t2-0
|
|
)
|
|
)
|
|
)
|
|
(-> s4-0 ppointer)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> self control unknown-dword82) (-> *display* base-frame-counter))
|
|
)
|
|
(when (cpad-pressed? (-> self control unknown-cpad-info00 number) triangle)
|
|
(logclear!
|
|
(-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0)
|
|
(pad-buttons triangle)
|
|
)
|
|
(logclear!
|
|
(-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 0)
|
|
(pad-buttons triangle)
|
|
)
|
|
(set! (-> self cam-user-mode) 'normal)
|
|
)
|
|
(none)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(while (let ((f30-0 8192.0))
|
|
(< f30-0 (send-event *camera* 'dist-from-interp-dest))
|
|
)
|
|
(if (!= (-> self cam-user-mode) 'look-around)
|
|
(go target-stance)
|
|
)
|
|
(suspend)
|
|
)
|
|
(ja-channel-set! 0)
|
|
(set! (-> self control transv quad) (the-as uint128 0))
|
|
(loop
|
|
(if (!= (-> self cam-user-mode) 'look-around)
|
|
(go target-stance-look-around)
|
|
)
|
|
(suspend)
|
|
)
|
|
(none)
|
|
)
|
|
:post target-no-move-post
|
|
)
|
|
|
|
(defstate target-billy-game (target)
|
|
:event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
(cond
|
|
((and (= arg2 'query) (= (-> arg3 param 0) 'mode))
|
|
(-> self state name)
|
|
)
|
|
((let ((v1-4 arg2))
|
|
(= v1-4 'end-mode)
|
|
)
|
|
(go target-stance)
|
|
)
|
|
(else
|
|
(target-standard-event-handler arg0 arg1 arg2 arg3)
|
|
)
|
|
)
|
|
)
|
|
:enter (behavior ()
|
|
(set! (-> self neck flex-blend) 0.0)
|
|
(set! (-> self control unknown-surface00) *duck-mods*)
|
|
(logior! (-> self state-flags) (state-flags first-person-mode))
|
|
(send-event *camera* 'blend-from-as-fixed)
|
|
(send-event *camera* 'clear-entity)
|
|
(send-event *camera* 'no-intro)
|
|
(camera-change-to (the-as string 'cam-billy) 0 #f)
|
|
(let ((a0-6 (handle->process (-> self fp-hud))))
|
|
(if a0-6
|
|
(deactivate a0-6)
|
|
)
|
|
)
|
|
(set! (-> self fp-hud)
|
|
(ppointer->handle (process-spawn first-person-hud :to *dproc* :stack (&+ *fp-hud-stack* #x3800)))
|
|
)
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(let ((a0-1 (handle->process (-> self fp-hud))))
|
|
(if a0-1
|
|
(send-event a0-1 'go-away)
|
|
)
|
|
)
|
|
(when (send-event *camera* 'query-state cam-billy)
|
|
(send-event *camera* 'no-intro)
|
|
(send-event *camera* 'force-blend 0)
|
|
(camera-change-to (the-as string 'base) 0 #f)
|
|
)
|
|
(target-exit)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(local-vars (sv-48 vector))
|
|
(rlet ((vf0 :class vf)
|
|
(vf4 :class vf)
|
|
(vf5 :class vf)
|
|
(vf6 :class vf)
|
|
)
|
|
(init-vf0-vector)
|
|
(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 r2 circle square)
|
|
)
|
|
(>= (- (-> *display* base-frame-counter) (-> self control unknown-dword82)) (seconds 0.45))
|
|
(and (= (-> self fact-info-target eco-type) (pickup-type eco-yellow))
|
|
(>= (-> self fact-info-target eco-level) 1.0)
|
|
)
|
|
(not *pause-lock*)
|
|
)
|
|
(let ((gp-1 (vector-float*!
|
|
(new-stack-vector0)
|
|
(-> *math-camera* inv-camera-rot vector 2)
|
|
(the-as float (-> *TARGET-bank* yellow-projectile-speed))
|
|
)
|
|
)
|
|
(s5-1 (vector-float*! (new-stack-vector0) (-> *math-camera* inv-camera-rot vector 2) 8192.0))
|
|
)
|
|
(vector+float*! s5-1 s5-1 (-> *math-camera* inv-camera-rot vector 1) (the-as float -2048.0))
|
|
(let ((s4-0 (get-process *default-dead-pool* projectile-yellow #x4000)))
|
|
(when s4-0
|
|
(let ((t9-2 (method-of-type projectile-yellow activate)))
|
|
(t9-2 (the-as projectile-yellow s4-0) self 'projectile-yellow (the-as pointer #x70004000))
|
|
)
|
|
(let ((s3-0 run-function-in-process)
|
|
(s2-0 s4-0)
|
|
(s1-0 projectile-init-by-other)
|
|
(s0-0 (-> self entity))
|
|
)
|
|
(set! sv-48 s5-1)
|
|
(let ((v0-4 (camera-pos)))
|
|
(.mov.vf vf6 vf0 :mask #b1000)
|
|
(.lvf vf4 (&-> v0-4 quad))
|
|
)
|
|
(.lvf vf5 (&-> s5-1 quad))
|
|
(.add.vf vf6 vf4 vf5 :mask #b111)
|
|
(.svf (&-> sv-48 quad) vf6)
|
|
(let ((t1-0 (if (>= (-> self fact-info-target eco-level) (-> *FACT-bank* eco-level-max))
|
|
120
|
|
104
|
|
)
|
|
)
|
|
(t2-0 #f)
|
|
)
|
|
((the-as (function object object object object object object object none) s3-0)
|
|
s2-0
|
|
s1-0
|
|
s0-0
|
|
sv-48
|
|
gp-1
|
|
t1-0
|
|
t2-0
|
|
)
|
|
)
|
|
)
|
|
(-> s4-0 ppointer)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> self control unknown-dword82) (-> *display* base-frame-counter))
|
|
)
|
|
(none)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(ja-channel-set! 0)
|
|
(set! (-> self control transv quad) (the-as uint128 0))
|
|
(anim-loop)
|
|
(none)
|
|
)
|
|
:post target-no-move-post
|
|
)
|
|
|
|
(defstate target-grab (target)
|
|
:event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
(cond
|
|
((and (= arg2 'query) (= (-> arg3 param 0) 'mode))
|
|
(-> self state name)
|
|
)
|
|
(else
|
|
(case arg2
|
|
(('end-mode)
|
|
(go target-stance)
|
|
)
|
|
(('play-anim)
|
|
(let ((v0-0 (the-as object (-> arg3 param 0))))
|
|
(set! (-> self control unknown-uint20) (the-as uint v0-0))
|
|
v0-0
|
|
)
|
|
)
|
|
(('clone-anim)
|
|
(go target-clone-anim (process->handle (the-as process (-> arg3 param 0))))
|
|
)
|
|
(('change-mode)
|
|
(case (-> arg3 param 0)
|
|
(('final-door)
|
|
(go
|
|
target-final-door
|
|
(the-as basic (process->handle (the-as process (-> arg3 param 1))))
|
|
(process->handle (the-as process (-> arg3 param 2)))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(target-generic-event-handler arg0 arg1 arg2 arg3)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
:enter (behavior ()
|
|
(set! (-> self control unknown-surface00) *grab-mods*)
|
|
(set! (-> self neck flex-blend) 0.0)
|
|
(logior! (-> self state-flags) (state-flags invulnerable grabbed))
|
|
(set! (-> self control unknown-uint20) (the-as uint 'stance))
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(logclear! (-> self state-flags) (state-flags invulnerable))
|
|
(target-exit)
|
|
(none)
|
|
)
|
|
:code (behavior ()
|
|
(set-forward-vel (the-as float 0.0))
|
|
(let ((gp-0 0))
|
|
(while (zero? (logand (-> self control status) (cshape-moving-flags onsurf)))
|
|
(target-falling-anim-trans)
|
|
(+! gp-0 (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter)))
|
|
(suspend)
|
|
)
|
|
(if (or (> gp-0 0) (let ((v1-11 (ja-group)))
|
|
(or (= v1-11 eichar-jump-ja)
|
|
(= v1-11 eichar-jump-loop-ja)
|
|
(= v1-11 eichar-launch-jump-ja)
|
|
(= v1-11 eichar-launch-jump-loop-ja)
|
|
(= v1-11 eichar-duck-high-jump-ja)
|
|
)
|
|
)
|
|
)
|
|
(target-hit-ground-anim #f)
|
|
)
|
|
)
|
|
(-> self control unknown-spoolanim00)
|
|
(loop
|
|
(let ((gp-1 (-> self control unknown-spoolanim00)))
|
|
(case gp-1
|
|
(('stance)
|
|
(cond
|
|
((or (and (ja-group? eichar-walk-ja) (< 0.5 (-> self skel root-channel 6 frame-interp)))
|
|
(let ((v1-32 (ja-group)))
|
|
(or (= v1-32 eichar-run-squash-ja)
|
|
(= v1-32 eichar-run-squash-weak-ja)
|
|
(= v1-32 eichar-attack-from-stance-run-end-ja)
|
|
(= v1-32 eichar-attack-from-stance-run-alt-end-ja)
|
|
)
|
|
)
|
|
)
|
|
(ja-channel-push! 1 (seconds 0.15))
|
|
(ja-no-eval :group! eichar-run-to-stance-loop-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
(ja-no-eval :group! eichar-run-to-stance-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
(ja-channel-push! 1 (seconds 0.15))
|
|
)
|
|
((let ((v1-87 (ja-group)))
|
|
(and (or (= v1-87 eichar-jump-short-land-ja) (= v1-87 eichar-jump-land-ja)) (not (ja-max? 0)))
|
|
)
|
|
(ja-no-eval :num! (seek!))
|
|
(while (not (ja-done? 0))
|
|
(suspend)
|
|
(ja-eval)
|
|
)
|
|
(ja-channel-push! 1 (seconds 0.075))
|
|
)
|
|
((not (and (ja-group? eichar-stance-loop-ja) (= (ja-group-size) 1)))
|
|
(ja-channel-push! 1 (seconds 0.075))
|
|
)
|
|
)
|
|
(loop
|
|
(ja-no-eval :group! eichar-stance-loop-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(if (!= gp-1 (-> self control unknown-spoolanim00))
|
|
(goto cfg-94)
|
|
)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
)
|
|
(('shock-in)
|
|
(ja-channel-push! 1 (seconds 0.2))
|
|
(ja-no-eval :group! eichar-shocked-ja :num! (seek! (ja-aframe (the-as float 18.0) 0)) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(if (!= gp-1 (-> self control unknown-spoolanim00))
|
|
(goto cfg-94)
|
|
)
|
|
(suspend)
|
|
(ja :num! (seek! (ja-aframe (the-as float 18.0) 0)))
|
|
)
|
|
(loop
|
|
(if (!= gp-1 (-> self control unknown-spoolanim00))
|
|
(goto cfg-94)
|
|
)
|
|
(suspend)
|
|
)
|
|
)
|
|
(('shock-out)
|
|
(if (not (ja-group? eichar-shocked-ja))
|
|
(ja-channel-push! 1 (seconds 0.2))
|
|
)
|
|
(ja-no-eval :group! eichar-shocked-ja :num! (seek!) :frame-num (ja-aframe (the-as float 18.0) 0))
|
|
(until (ja-done? 0)
|
|
(if (!= gp-1 (-> self control unknown-spoolanim00))
|
|
(goto cfg-94)
|
|
)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
(set! (-> self control unknown-uint20) (the-as uint 'stance))
|
|
)
|
|
)
|
|
)
|
|
(label cfg-94)
|
|
)
|
|
(none)
|
|
)
|
|
:post (behavior ()
|
|
(if (logtest? (-> self control status) (cshape-moving-flags onsurf))
|
|
(set! (-> self control transv quad) (the-as uint128 0))
|
|
)
|
|
(target-no-stick-post)
|
|
(none)
|
|
)
|
|
)
|
|
|
|
(defstate target-pole-cycle (target)
|
|
:event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
(if (and (= arg2 'query) (= (-> arg3 param 0) 'mode))
|
|
(-> self state name)
|
|
(target-standard-event-handler arg0 arg1 arg2 arg3)
|
|
)
|
|
)
|
|
:enter (behavior ((arg0 handle))
|
|
(set! (-> self control unknown-handle10) arg0)
|
|
(set! (-> self state-time) (-> *display* base-frame-counter))
|
|
(set! (-> self control unknown-surface00) *pole-mods*)
|
|
(logior! (-> self control root-prim prim-core action) (collide-action ca-8))
|
|
(target-collide-set! 'pole (the-as float 0.0))
|
|
(set! (-> self control unknown-vector102 quad) (-> self control transv quad))
|
|
(set! (-> self control transv quad) (the-as uint128 0))
|
|
(send-event *camera* 'ease-in)
|
|
(set! (-> self control unknown-int21) (the-as int #f))
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(target-collide-set! 'normal (the-as float 0.0))
|
|
(logclear! (-> self control root-prim prim-core action) (collide-action ca-8))
|
|
(set! (-> self control unknown-handle10) (the-as handle #f))
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(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)
|
|
)
|
|
(zero? (logand (-> self state-flags) (state-flags prevent-jump)))
|
|
(>= (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.1))
|
|
)
|
|
(set! (-> self control transv quad) (the-as uint128 0))
|
|
(cond
|
|
((< 44.0 (ja-aframe-num 0))
|
|
(set-forward-vel (the-as float -49152.0))
|
|
(let ((gp-0 (new-stack-vector0)))
|
|
(let ((f0-2 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
|
|
0.0
|
|
(vector-! gp-0 (-> self control transv) (vector-float*! gp-0 (-> self control dynam gravity-normal) f0-2))
|
|
)
|
|
(let* ((f0-3 (vector-length gp-0))
|
|
(f1-1 f0-3)
|
|
(f2-0 -81920.0)
|
|
)
|
|
(vector+!
|
|
(-> self control transv)
|
|
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f2-0)
|
|
(vector-float*! gp-0 gp-0 (/ f0-3 f1-1))
|
|
)
|
|
)
|
|
)
|
|
(logclear! (-> self control status) (cshape-moving-flags onsurf onground tsurf))
|
|
(go target-falling 'target-pole-cycle)
|
|
)
|
|
((>= (ja-aframe-num 0) 14.0)
|
|
(remove-exit)
|
|
(go target-pole-flip-up 28672.0 28672.0 (* 1024.0 (- 26.0 (ja-aframe-num 0))))
|
|
)
|
|
(else
|
|
(remove-exit)
|
|
(go target-pole-flip-forward (the-as float 14336.0) (the-as float 14336.0) (the-as float 57344.0))
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:code (behavior ((arg0 handle))
|
|
(target-compute-pole)
|
|
(set! (-> self control unknown-uint20)
|
|
(the-as uint (vector-dot
|
|
(-> self control unknown-vector100)
|
|
(vector-normalize! (-> self control unknown-vector102) (the-as float 1.0))
|
|
)
|
|
)
|
|
)
|
|
(cond
|
|
((ja-group? (-> self draw art-group data 83))
|
|
(while (not (-> self control unknown-int21))
|
|
(ja :num! (seek!))
|
|
(suspend)
|
|
)
|
|
(ja :num-func num-func-identity :frame-num (ja-aframe (the-as float 37.0) 0))
|
|
)
|
|
(else
|
|
(while (not (-> self control unknown-int21))
|
|
(suspend)
|
|
)
|
|
(suspend)
|
|
(ja-channel-push! 1 (seconds 0.15))
|
|
)
|
|
)
|
|
(ja-no-eval :group! (-> self draw art-group data 80) :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
(loop
|
|
(set! (-> self anim-seed) (the-as uint (if (rand-vu-percent? (the-as float 0.1))
|
|
0
|
|
1
|
|
)
|
|
)
|
|
)
|
|
(ja-no-eval :group! (-> self draw art-group data 80) :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:post target-no-move-post
|
|
)
|
|
|
|
(defstate target-pole-flip-up (target)
|
|
:event target-standard-event-handler
|
|
:exit (-> target-pole-cycle exit)
|
|
:code (behavior ((arg0 object) (arg1 object) (arg2 float))
|
|
(ja-no-eval :group! (-> self draw art-group data 81)
|
|
:num! (seek!)
|
|
:frame-num (ja-aframe (+ 1.0 (fmin 17.0 (ja-aframe-num 0))) 0)
|
|
)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
(set-forward-vel arg2)
|
|
(go target-pole-flip-up-jump (the-as float arg0) (the-as float arg1))
|
|
(none)
|
|
)
|
|
:post target-no-move-post
|
|
)
|
|
|
|
(defstate target-pole-flip-up-jump (target)
|
|
:event target-standard-event-handler
|
|
:enter (-> target-jump-forward enter)
|
|
:exit target-exit
|
|
:trans (behavior ()
|
|
((-> target-jump-forward trans))
|
|
(vector-flatten! (-> self control transv) (-> self control transv) (-> self control unknown-vector100))
|
|
(none)
|
|
)
|
|
:code (behavior ((arg0 float) (arg1 float))
|
|
(sound-play "jump")
|
|
(send-event *camera* 'damp-up)
|
|
(ja :group! (-> self draw art-group data 83) :num! min)
|
|
(let ((f0-1 (target-height-above-ground))
|
|
(f1-1 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
|
|
)
|
|
(while (not (and (< (fabs (/ f0-1 (* 0.0033333334 f1-1))) 40.0) (and (< f1-1 0.0) (ja-min? 0))))
|
|
(suspend)
|
|
(ja :num! (loop!))
|
|
(set! f0-1 (target-height-above-ground))
|
|
(set! f1-1 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
|
|
)
|
|
)
|
|
(ja-channel-push! 1 (seconds 0.25))
|
|
(ja-no-eval :group! eichar-jump-loop-ja :num! (loop!) :frame-num 0.0)
|
|
(loop
|
|
(suspend)
|
|
(ja :group! eichar-jump-loop-ja :num! (loop!))
|
|
)
|
|
(none)
|
|
)
|
|
:post target-post
|
|
)
|
|
|
|
(defstate target-pole-flip-forward (target)
|
|
:event target-standard-event-handler
|
|
:exit (-> target-pole-cycle exit)
|
|
:code (behavior ((arg0 float) (arg1 float) (arg2 float))
|
|
(ja-no-eval :group! (-> self draw art-group data 82)
|
|
:num! (seek! (ja-aframe (the-as float 16.0) 0))
|
|
:frame-num (ja-aframe (+ 1.0 (ja-aframe-num 0)) 0)
|
|
)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! (ja-aframe (the-as float 16.0) 0)))
|
|
)
|
|
(set-forward-vel arg2)
|
|
(go target-pole-flip-forward-jump arg0 arg1)
|
|
(none)
|
|
)
|
|
:post target-no-move-post
|
|
)
|
|
|
|
(defstate target-pole-flip-forward-jump (target)
|
|
:event target-standard-event-handler
|
|
:enter (behavior ((arg0 float) (arg1 float))
|
|
((-> target-jump enter) arg0 arg1 (the-as surface #f))
|
|
(set! (-> self control unknown-surface00) *forward-pole-jump-mods*)
|
|
(none)
|
|
)
|
|
:exit target-exit
|
|
:trans (behavior ()
|
|
((-> target-jump-forward trans))
|
|
(vector-flatten! (-> self control transv) (-> self control transv) (-> self control unknown-vector100))
|
|
(none)
|
|
)
|
|
:code (behavior ((arg0 float) (arg1 float))
|
|
(sound-play "jump")
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
((the-as (function none :behavior target) (-> target-pole-flip-up-jump code)))
|
|
(none)
|
|
)
|
|
:post target-post
|
|
)
|
|
|
|
(defstate target-edge-grab (target)
|
|
:event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
(case arg2
|
|
(('end-mode)
|
|
(go target-falling 'target-edge-grab)
|
|
)
|
|
(else
|
|
(target-standard-event-handler arg0 arg1 arg2 arg3)
|
|
)
|
|
)
|
|
)
|
|
:enter (behavior ()
|
|
(set! (-> self state-time) (-> *display* base-frame-counter))
|
|
(set! (-> self control unknown-surface00) *edge-grab-mods*)
|
|
(set! (-> self control unknown-dword41) (-> *display* base-frame-counter))
|
|
(logior! (-> self control root-prim prim-core action) (collide-action ca-3 ca-7))
|
|
(set! (-> self control unknown-vector102 quad) (-> self control transv quad))
|
|
(set! (-> self control transv quad) (the-as uint128 0))
|
|
(send-event *camera* 'ease-in)
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(when (logtest? (-> self control root-prim prim-core action) (collide-action ca-7))
|
|
(logclear! (-> self control root-prim prim-core action) (collide-action ca-3 ca-7))
|
|
(send-event *camera* 'damp-up)
|
|
)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(when (and (>= (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.2))
|
|
(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)
|
|
)
|
|
(zero? (logand (-> self state-flags) (state-flags prevent-jump)))
|
|
)
|
|
(cond
|
|
((or (< -0.2 (local-pad-angle))
|
|
(= (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) stick0-speed) 0.0)
|
|
)
|
|
(let ((a1-2 (new 'stack-no-clear 'collide-using-spheres-params)))
|
|
(set! (-> a1-2 spheres) (-> *collide-edge-work* world-player-leap-up-spheres))
|
|
(set! (-> a1-2 num-spheres) (the-as uint 6))
|
|
(set! (-> a1-2 collide-with) (-> self control root-prim collide-with))
|
|
(set! (-> a1-2 proc) #f)
|
|
(set! (-> a1-2 ignore-pat) (new 'static 'pat-surface :noentity #x1))
|
|
(set! (-> a1-2 solid-only) #t)
|
|
(when (not (fill-and-probe-using-spheres *collide-cache* a1-2))
|
|
(remove-exit)
|
|
(go
|
|
target-edge-grab-jump
|
|
(-> *TARGET-bank* edge-grab-jump-height-min)
|
|
(-> *TARGET-bank* edge-grab-jump-height-max)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(remove-exit)
|
|
(go target-edge-grab-off)
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:code (behavior ()
|
|
(target-compute-edge)
|
|
(set! (-> self control unknown-uint20)
|
|
(the-as uint (vector-dot
|
|
(-> self control unknown-vector100)
|
|
(vector-normalize! (-> self control unknown-vector102) (the-as float 1.0))
|
|
)
|
|
)
|
|
)
|
|
(while (< 0.0 (-> self control unknown-float110))
|
|
(when (not (ja-group? eichar-jump-loop-ja))
|
|
(ja-channel-push! 1 (seconds 0.15))
|
|
(ja :group! eichar-jump-loop-ja :num! min)
|
|
)
|
|
(suspend)
|
|
)
|
|
(ja-channel-push! 1 (seconds 0.15))
|
|
(cond
|
|
((< (the-as float (-> self control unknown-uint20)) -0.3)
|
|
(ja :group! eichar-edge-grab-swing-right-ja :num! min)
|
|
)
|
|
((< 0.3 (the-as float (-> self control unknown-uint20)))
|
|
(ja :group! eichar-edge-grab-swing-left-ja :num! min)
|
|
)
|
|
(else
|
|
(ja :group! eichar-falling-to-edge-grab-ja :num! min)
|
|
)
|
|
)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
(ja-channel-set! 1)
|
|
(loop
|
|
(ja-no-eval :group! eichar-edge-grab-stance0-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
(+! (-> self anim-seed) 1)
|
|
(ja-no-eval :group! eichar-edge-grab-stance1-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:post target-no-move-post
|
|
)
|
|
|
|
(defstate target-edge-grab-jump (target)
|
|
:event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
(case arg2
|
|
(('end-mode)
|
|
(go target-falling 'target-edge-grab)
|
|
)
|
|
(else
|
|
(target-standard-event-handler arg0 arg1 arg2 arg3)
|
|
)
|
|
)
|
|
)
|
|
:exit (-> target-edge-grab exit)
|
|
:code (behavior ((arg0 float) (arg1 float))
|
|
(ja-channel-set! 1)
|
|
(set-quaternion! (-> self control) (-> self control dir-targ))
|
|
(logclear! (-> self control root-prim prim-core action) (collide-action ca-3 ca-7))
|
|
(set! (-> self control transv quad) (the-as uint128 0))
|
|
(let ((s4-0 (new 'stack-no-clear 'vector)))
|
|
(ja-no-eval :group! eichar-edge-grab-to-jump-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(target-compute-edge-rider)
|
|
(compute-alignment! (-> self align))
|
|
(when (zero? (logand (-> self align flags) (align-flags disabled)))
|
|
(vector-matrix*! s4-0 (the-as vector (-> self align delta)) (-> self control unknown-matrix01))
|
|
(move-by-vector! (-> self control) s4-0)
|
|
)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
(set! (-> self control transv quad) (the-as uint128 0))
|
|
(set! (-> self control unknown-dword70) 0)
|
|
(set-forward-vel (the-as float 16384.0))
|
|
(send-event *camera* 'damp-up)
|
|
(go target-jump-forward arg0 arg1)
|
|
(none)
|
|
)
|
|
:post target-no-move-post
|
|
)
|
|
|
|
(defstate target-edge-grab-off (target)
|
|
:event target-standard-event-handler
|
|
:exit (-> target-edge-grab exit)
|
|
:code (behavior ()
|
|
(ja-channel-set! 1)
|
|
(set-quaternion! (-> self control) (-> self control dir-targ))
|
|
(send-event *camera* 'damp-up)
|
|
(let ((gp-0 (new 'stack-no-clear 'vector)))
|
|
(ja-no-eval :group! eichar-edge-grab-off-ja :num! (seek! (ja-aframe (the-as float 191.0) 0)) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(compute-alignment! (-> self align))
|
|
(when (zero? (logand (-> self align flags) (align-flags disabled)))
|
|
(vector-matrix*! gp-0 (the-as vector (-> self align delta)) (-> self control unknown-matrix01))
|
|
(move-by-vector! (-> self control) gp-0)
|
|
)
|
|
(suspend)
|
|
(ja :num! (seek! (ja-aframe (the-as float 191.0) 0)))
|
|
)
|
|
)
|
|
(set! (-> self control transv quad) (the-as uint128 0))
|
|
(logclear! (-> self control root-prim prim-core action) (collide-action ca-3 ca-7))
|
|
(vector-float*! (-> self control transv) (-> self control unknown-vector101) -40960.0)
|
|
(when (and (< (- (-> *display* base-frame-counter) (-> self control rider-time)) (seconds 0.2))
|
|
(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))
|
|
)
|
|
(go target-falling 'target-edge-grab)
|
|
(none)
|
|
)
|
|
:post target-no-move-post
|
|
)
|
|
|
|
(defstate target-yellow-blast (target)
|
|
:event (-> target-running-attack event)
|
|
:enter (behavior ()
|
|
(set! (-> self state-time) (-> *display* base-frame-counter))
|
|
(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! 'spin #f)
|
|
(set! (-> self control unknown-uint20) (the-as uint 0))
|
|
(set! (-> self control unknown-int21) 0)
|
|
(set! (-> self control unknown-uint31) (the-as uint 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-0 f0-5)
|
|
)
|
|
(if (< 0.0 f30-0)
|
|
(set! f30-0 0.0)
|
|
)
|
|
(vector+!
|
|
(-> self control transv)
|
|
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f30-0)
|
|
(vector-float*! gp-0 gp-0 (/ f0-5 f1-0))
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(set! (-> *run-attack-mods* turnv) 0.0)
|
|
(set! (-> *run-attack-mods* turnvv) 0.0)
|
|
(set! (-> self control unknown-dword31) (-> *display* base-frame-counter))
|
|
(target-exit)
|
|
(none)
|
|
)
|
|
:code (behavior ()
|
|
(let ((gp-0 (the-as handle #f)))
|
|
(ja-channel-push! 1 (seconds 0.075))
|
|
(level-hint-spawn
|
|
(game-text-id swamp-eco-yellow-first-use)
|
|
"sksp0145"
|
|
(the-as entity #f)
|
|
*entity-pool*
|
|
(game-task none)
|
|
)
|
|
(case (-> (level-get-target-inside *level*) name)
|
|
(('maincave)
|
|
(level-hint-spawn
|
|
(game-text-id cave-gnawers-look-around)
|
|
"sksp0328"
|
|
(the-as entity #f)
|
|
*entity-pool*
|
|
(game-task none)
|
|
)
|
|
)
|
|
)
|
|
(ja-no-eval :group! eichar-yellow-running-blast-ja
|
|
:num! (seek! (ja-aframe (the-as float 9.0) 0))
|
|
:frame-num 0.0
|
|
)
|
|
(until (ja-done? 0)
|
|
(if (>= (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.1))
|
|
(set! (-> *run-attack-mods* turnvv) 0.0)
|
|
)
|
|
(suspend)
|
|
(ja :num! (seek! (ja-aframe (the-as float 9.0) 0)))
|
|
)
|
|
(let ((s5-2 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self control quat))))
|
|
(set! (-> s5-2 y) 0.0)
|
|
(vector-normalize! s5-2 (-> *TARGET-bank* yellow-projectile-speed))
|
|
(when (and (= (-> self fact-info-target eco-type) (pickup-type eco-yellow))
|
|
(>= (-> self fact-info-target eco-level) 1.0)
|
|
)
|
|
(let ((gp-1 (get-process *default-dead-pool* projectile-yellow #x4000)))
|
|
(set! gp-0 (ppointer->handle
|
|
(when gp-1
|
|
(let ((t9-12 (method-of-type projectile-yellow activate)))
|
|
(t9-12 (the-as projectile-yellow gp-1) self 'projectile-yellow (the-as pointer #x70004000))
|
|
)
|
|
(run-now-in-process
|
|
gp-1
|
|
projectile-init-by-other
|
|
(-> self entity)
|
|
(vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 23))
|
|
s5-2
|
|
(if (>= (-> self fact-info-target eco-level) (-> *FACT-bank* eco-level-max))
|
|
25
|
|
9
|
|
)
|
|
#f
|
|
)
|
|
(-> gp-1 ppointer)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> self control unknown-dword82) (-> *display* base-frame-counter))
|
|
)
|
|
)
|
|
(ja-no-eval :group! eichar-yellow-running-blast-ja :num! (seek!) :frame-num (ja-aframe (the-as float 9.0) 0))
|
|
(until (ja-done? 0)
|
|
(if (or (< (the-as uint (- (-> *display* base-frame-counter) (the-as int (-> self control unknown-uint30))))
|
|
(the-as uint 30)
|
|
)
|
|
(= (-> self control unknown-uint31) 1)
|
|
)
|
|
(send-event (handle->process gp-0) 'die)
|
|
)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
(if (logtest? (-> self control status) (cshape-moving-flags onsurf))
|
|
(go target-stance)
|
|
(go target-falling #f)
|
|
)
|
|
(none)
|
|
)
|
|
:post target-post
|
|
)
|
|
|
|
(define *yellow-jump-mods* (new 'static 'surface
|
|
:name 'run
|
|
:tiltv 65536.0
|
|
:tiltvv 131072.0
|
|
:transv-max 40960.0
|
|
:target-speed 40960.0
|
|
:fric 0.1
|
|
:nonlin-fric-dist 1.0
|
|
:slip-factor 1.0
|
|
:slide-factor 1.0
|
|
:slope-up-factor 1.0
|
|
:slope-down-factor 1.0
|
|
:slope-slip-angle 1.0
|
|
:impact-fric 1.0
|
|
:bend-factor 1.0
|
|
:bend-speed 1.0
|
|
:alignv 1.0
|
|
:slope-up-traction 1.0
|
|
:align-speed 1.0
|
|
:mode 'air
|
|
:flags (surface-flags jump)
|
|
)
|
|
)
|
|
|
|
(defstate target-yellow-jump-blast (target)
|
|
:event target-standard-event-handler
|
|
:enter (behavior ()
|
|
(set! (-> self control unknown-surface00) *yellow-jump-mods*)
|
|
(let ((gp-0 (new-stack-vector0)))
|
|
(let ((f0-1 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
|
|
0.0
|
|
(vector-! gp-0 (-> self control transv) (vector-float*! gp-0 (-> self control dynam gravity-normal) f0-1))
|
|
)
|
|
(let* ((f0-2 (vector-length gp-0))
|
|
(f1-1 f0-2)
|
|
(f2-0 46917.434)
|
|
)
|
|
(vector+!
|
|
(-> self control transv)
|
|
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f2-0)
|
|
(vector-float*! gp-0 gp-0 (/ f0-2 f1-1))
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(rot->dir-targ! (-> self control))
|
|
(set! (-> self control unknown-dword31) (-> *display* base-frame-counter))
|
|
(target-exit)
|
|
(none)
|
|
)
|
|
:code (behavior ()
|
|
(ja-channel-push! 1 (seconds 0.075))
|
|
(ja-no-eval :group! eichar-yellow-jumping-blast-ja
|
|
:num! (seek! (ja-aframe (the-as float 15.0) 0))
|
|
:frame-num 0.0
|
|
)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! (ja-aframe (the-as float 15.0) 0)))
|
|
)
|
|
(suspend)
|
|
(let ((gp-2 (new-stack-vector0)))
|
|
(let ((f0-6 (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-6))
|
|
)
|
|
(let* ((f0-7 (vector-length gp-2))
|
|
(f1-1 f0-7)
|
|
(f2-0 46917.434)
|
|
)
|
|
(vector+!
|
|
(-> self control transv)
|
|
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f2-0)
|
|
(vector-float*! gp-2 gp-2 (/ f0-7 f1-1))
|
|
)
|
|
)
|
|
)
|
|
(ja :num! (seek!))
|
|
(process-spawn
|
|
projectile-yellow
|
|
:init projectile-init-by-other
|
|
(-> self entity)
|
|
(-> self control unknown-vector90)
|
|
(vector-float*!
|
|
(new 'stack-no-clear 'vector)
|
|
(vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self control quat))
|
|
(the-as float (-> *TARGET-bank* yellow-projectile-speed))
|
|
)
|
|
(if (>= (-> self fact-info-target eco-level) (-> *FACT-bank* eco-level-max))
|
|
16
|
|
0
|
|
)
|
|
#f
|
|
:to self
|
|
)
|
|
(set! (-> self control unknown-dword82) (-> *display* base-frame-counter))
|
|
(let ((gp-4 (-> *display* base-frame-counter)))
|
|
(until (>= (- (-> *display* base-frame-counter) gp-4) (seconds 0.1))
|
|
(suspend)
|
|
)
|
|
)
|
|
(ja-no-eval :group! eichar-yellow-jumping-blast-ja :num! (seek!) :frame-num (ja-frame-num 0))
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
(if (logtest? (-> self control status) (cshape-moving-flags onsurf))
|
|
(go target-stance)
|
|
(go target-falling #f)
|
|
)
|
|
(none)
|
|
)
|
|
:post target-no-stick-post
|
|
)
|
|
|
|
(defstate target-eco-powerup (target)
|
|
:event target-standard-event-handler
|
|
:exit target-exit
|
|
:trans (behavior ()
|
|
(slide-down-test)
|
|
(none)
|
|
)
|
|
:code (behavior ((arg0 object) (arg1 float))
|
|
(set! (-> self neck flex-blend) 0.0)
|
|
(set! (-> self state-time) (-> *display* base-frame-counter))
|
|
(if (= arg1 (-> *FACT-bank* eco-full-inc))
|
|
(set! (-> self control unknown-surface00) *double-jump-mods*)
|
|
(set! (-> self control unknown-surface00) *walk-mods*)
|
|
)
|
|
(ja-channel-push! 1 (seconds 0.05))
|
|
(ja-no-eval :group! eichar-powerup-ja
|
|
:num! (seek! max (the-as float (if (= arg1 (-> *FACT-bank* eco-full-inc))
|
|
2.0
|
|
3.0
|
|
)
|
|
)
|
|
)
|
|
:frame-num (ja-aframe
|
|
(the-as float (if (= arg1 (-> *FACT-bank* eco-full-inc))
|
|
0.0
|
|
6.0
|
|
)
|
|
)
|
|
0
|
|
)
|
|
)
|
|
(until (ja-done? 0)
|
|
(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)
|
|
)
|
|
(zero? (logand (-> self water flags) (water-flags wt09)))
|
|
(zero? (logand (-> 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 (and (cpad-pressed? (-> self control unknown-cpad-info00 number) circle) (can-feet?))
|
|
(go target-attack-air #f)
|
|
)
|
|
(when (can-hands? #f)
|
|
(if (and (= (-> self fact-info-target eco-type) (pickup-type eco-yellow))
|
|
(>= (-> self fact-info-target eco-level) 1.0)
|
|
)
|
|
(go target-yellow-jump-blast)
|
|
(go target-running-attack)
|
|
)
|
|
)
|
|
(compute-alignment! (-> self align))
|
|
(align!
|
|
(-> self align)
|
|
(align-opts adjust-y-vel)
|
|
(the-as float 1.0)
|
|
(the-as float (if (= arg1 (-> *FACT-bank* eco-full-inc))
|
|
2.0
|
|
1.0
|
|
)
|
|
)
|
|
(the-as float 1.0)
|
|
)
|
|
(suspend)
|
|
(ja :num! (seek! max (the-as float (if (= arg1 (-> *FACT-bank* eco-full-inc))
|
|
2.0
|
|
3.0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(go target-falling 'target-eco-powerup)
|
|
(none)
|
|
)
|
|
:post target-post
|
|
)
|
|
|
|
(defstate target-wade-stance (target)
|
|
:event target-standard-event-handler
|
|
:enter (behavior ()
|
|
(set! (-> self state-time) (-> *display* base-frame-counter))
|
|
(set! (-> self control unknown-surface00) *wade-mods*)
|
|
(set-zero! (-> self water bob))
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(target-state-hook-exit)
|
|
(target-exit)
|
|
(let ((v1-1 (-> self skel effect)))
|
|
(set! (-> v1-1 channel-offset) 0)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
((-> self state-hook))
|
|
(when (and (zero? (logand (-> self water flags) (water-flags wt10)))
|
|
(>= (- (-> *display* base-frame-counter) (-> self water wade-time)) (seconds 0.05))
|
|
)
|
|
(if (logtest? (-> self water flags) (water-flags wt11))
|
|
(go target-swim-stance)
|
|
(go target-stance)
|
|
)
|
|
)
|
|
(if (and (cpad-hold? (-> self control unknown-cpad-info00 number) l1 r1) (can-duck?))
|
|
(go target-duck-stance)
|
|
)
|
|
(if (!= (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) stick0-speed) 0.0)
|
|
(go target-wade-walk)
|
|
)
|
|
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 0)
|
|
(-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 1)
|
|
)
|
|
(-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 2)
|
|
)
|
|
(pad-buttons x)
|
|
)
|
|
(can-jump? #f)
|
|
)
|
|
(go target-jump (-> *TARGET-bank* jump-height-min) (-> *TARGET-bank* jump-height-max) (the-as surface #f))
|
|
)
|
|
(when (and (cpad-pressed? (-> self control unknown-cpad-info00 number) circle) (can-feet?))
|
|
(sound-play "swim-stroke")
|
|
(dummy-13 (-> self water) (the-as float 1.4) (-> self control trans) 0 (-> self control transv))
|
|
(go target-attack)
|
|
)
|
|
(if (can-hands? #t)
|
|
(go target-running-attack)
|
|
)
|
|
(none)
|
|
)
|
|
:code (-> target-stance code)
|
|
:post target-post
|
|
)
|
|
|
|
(defstate target-wade-walk (target)
|
|
:event target-standard-event-handler
|
|
:enter (-> target-wade-stance enter)
|
|
:exit (-> target-wade-stance exit)
|
|
:trans (behavior ()
|
|
((-> self state-hook))
|
|
(when (and (zero? (logand (-> self water flags) (water-flags wt10)))
|
|
(>= (- (-> *display* base-frame-counter) (-> self water wade-time)) (seconds 0.1))
|
|
)
|
|
(if (logtest? (-> self water flags) (water-flags wt11))
|
|
(go target-swim-stance)
|
|
(go target-stance)
|
|
)
|
|
)
|
|
(if (= (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) stick0-speed) 0.0)
|
|
(go target-wade-stance)
|
|
)
|
|
(if (and (cpad-hold? (-> self control unknown-cpad-info00 number) l1 r1) (can-duck?))
|
|
(go target-duck-walk)
|
|
)
|
|
(if (and (logtest? (logior (logior (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 0)
|
|
(-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 1)
|
|
)
|
|
(-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 2)
|
|
)
|
|
(pad-buttons x)
|
|
)
|
|
(can-jump? #f)
|
|
)
|
|
(go target-jump (-> *TARGET-bank* jump-height-min) (-> *TARGET-bank* jump-height-max) (the-as surface #f))
|
|
)
|
|
(when (and (cpad-pressed? (-> self control unknown-cpad-info00 number) circle) (can-feet?))
|
|
(sound-play "swim-stroke")
|
|
(dummy-13 (-> self water) (the-as float 1.4) (-> self control trans) 0 (-> self control transv))
|
|
(go target-attack)
|
|
)
|
|
(if (can-hands? #t)
|
|
(go target-running-attack)
|
|
)
|
|
(none)
|
|
)
|
|
:code (behavior ()
|
|
(let ((gp-0 105)
|
|
(f30-0 0.0)
|
|
)
|
|
(let ((v1-2 (ja-group)))
|
|
(cond
|
|
((or (= v1-2 eichar-walk-ja) (= v1-2 eichar-run-ja))
|
|
(set! gp-0 15)
|
|
(set! f30-0 (ja-frame-num 0))
|
|
)
|
|
((let ((v1-9 (ja-group)))
|
|
(or (= v1-9 eichar-jump-ja) (= v1-9 eichar-jump-loop-ja))
|
|
)
|
|
(set! gp-0 30)
|
|
)
|
|
((ja-group? eichar-swim-walk-ja)
|
|
(set! gp-0 120)
|
|
)
|
|
)
|
|
)
|
|
(cond
|
|
((and (= (ja-group-size) 6) (ja-group? eichar-wade-shallow-walk-ja))
|
|
)
|
|
(else
|
|
(ja-channel-push! 6 (the-as time-frame gp-0))
|
|
(ja :group! eichar-wade-shallow-walk-ja
|
|
:num! (identity f30-0)
|
|
:dist (-> *TARGET-bank* wade-shallow-walk-cycle-dist)
|
|
)
|
|
(ja :chan 1
|
|
:group! eichar-wade-deep-walk-ja
|
|
:num! (identity f30-0)
|
|
:dist (-> *TARGET-bank* wade-deep-walk-cycle-dist)
|
|
)
|
|
(ja :chan 2
|
|
:group! eichar-walk-ja
|
|
:num! (identity f30-0)
|
|
:frame-interp 0.0
|
|
:dist (-> *TARGET-bank* walk-cycle-dist)
|
|
)
|
|
(ja :chan 3
|
|
:group! eichar-walk-down-ja
|
|
:num! (identity f30-0)
|
|
:frame-interp 0.0
|
|
:dist (-> *TARGET-bank* walk-down-cycle-dist)
|
|
)
|
|
(ja :chan 4
|
|
:group! eichar-walk-left-ja
|
|
:num! (identity f30-0)
|
|
:frame-interp 0.0
|
|
:dist (-> *TARGET-bank* walk-side-cycle-dist)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> self skel root-channel 2 command) 'push)
|
|
(set! (-> self skel root-channel 5 command) 'stack)
|
|
(let ((f30-1 0.0)
|
|
(f28-0 0.0)
|
|
(f26-0 (lerp-scale
|
|
(the-as float 1.0)
|
|
(the-as float 0.0)
|
|
(-> self control unknown-float01)
|
|
(the-as float 16384.0)
|
|
(the-as float 32768.0)
|
|
)
|
|
)
|
|
(gp-6 0)
|
|
)
|
|
(loop
|
|
(let ((f0-10 (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)))))
|
|
)
|
|
(let ((f1-4 (fabs (- f0-10 f30-1))))
|
|
(set! f30-1 (seek f30-1 f0-10 (fmax 0.05 (fmin 0.2 (* 0.25 f1-4)))))
|
|
)
|
|
(let ((f0-14 (fabs (- f24-0 f28-0))))
|
|
(set! f28-0 (seek f28-0 f24-0 (fmax 0.05 (fmin 0.2 (* 0.25 f0-14)))))
|
|
)
|
|
)
|
|
(ja :chan 3 :group! eichar-walk-down-ja :dist (-> *TARGET-bank* walk-down-cycle-dist))
|
|
(if (>= f30-1 0.0)
|
|
(ja :chan 3 :group! eichar-walk-up-ja :frame-interp (fabs f30-1) :dist (-> *TARGET-bank* walk-up-cycle-dist))
|
|
(ja :chan 3
|
|
:group! eichar-walk-down-ja
|
|
:frame-interp (fabs f30-1)
|
|
:dist (-> *TARGET-bank* walk-down-cycle-dist)
|
|
)
|
|
)
|
|
(if (>= f28-0 0.0)
|
|
(ja :chan 4
|
|
:group! eichar-walk-right-ja
|
|
:frame-interp (fabs f28-0)
|
|
:dist (-> *TARGET-bank* walk-side-cycle-dist)
|
|
)
|
|
(ja :chan 4
|
|
:group! eichar-walk-left-ja
|
|
:frame-interp (fabs f28-0)
|
|
:dist (-> *TARGET-bank* walk-side-cycle-dist)
|
|
)
|
|
)
|
|
(let* ((f0-30 (- (-> self water height) (-> self control trans y)))
|
|
(f24-1 (lerp-scale
|
|
(the-as float 0.0)
|
|
(the-as float 1.0)
|
|
f0-30
|
|
(lerp (-> self water wade-height) (-> self water swim-height) (the-as float 0.25))
|
|
(lerp (-> self water wade-height) (-> self water swim-height) (the-as float 0.75))
|
|
)
|
|
)
|
|
)
|
|
(let ((v1-108 (-> self skel effect)))
|
|
(set! (-> v1-108 channel-offset) (if (< 0.5 f24-1)
|
|
1
|
|
0
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(set! f26-0 (seek
|
|
f26-0
|
|
(lerp-scale
|
|
(the-as float 1.0)
|
|
(the-as float 0.0)
|
|
(-> self control unknown-float01)
|
|
(the-as float 16384.0)
|
|
(the-as float 32768.0)
|
|
)
|
|
(* 4.0 (-> *display* seconds-per-frame))
|
|
)
|
|
)
|
|
(set! (-> self skel root-channel 1 frame-interp) f24-1)
|
|
(ja :num! (loop! (/ (-> self control unknown-float01)
|
|
(* 60.0 (/ (current-cycle-distance (-> self skel)) (-> *TARGET-bank* run-cycle-length)))
|
|
)
|
|
)
|
|
)
|
|
(ja :chan 5 :frame-interp (lerp f26-0 (the-as float 0.0) f24-1))
|
|
)
|
|
(ja :chan 1 :num! (chan 0))
|
|
(ja :chan 2 :num! (chan 0))
|
|
(ja :chan 3 :num! (chan 0))
|
|
(ja :chan 4 :num! (chan 0))
|
|
(when (and (>= (- (-> *display* base-frame-counter) (the-as time-frame gp-6)) (seconds 0.2))
|
|
(< (- (-> self water height) (-> self control trans y)) 4096.0)
|
|
)
|
|
(case (the int (ja-aframe-num 0))
|
|
((15 16 17 18)
|
|
(dummy-13
|
|
(-> self water)
|
|
(the-as float 0.2)
|
|
(vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 75))
|
|
0
|
|
(vector-float*! (new 'stack-no-clear 'vector) (-> self control transv) 2.5)
|
|
)
|
|
(set! gp-6 (the-as int (-> *display* base-frame-counter)))
|
|
)
|
|
((46 47 48 49)
|
|
(dummy-13
|
|
(-> self water)
|
|
(the-as float 0.2)
|
|
(vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 71))
|
|
0
|
|
(vector-float*! (new 'stack-no-clear 'vector) (-> self control transv) 2.5)
|
|
)
|
|
(set! gp-6 (the-as int (-> *display* base-frame-counter)))
|
|
)
|
|
)
|
|
)
|
|
(suspend)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:post target-post
|
|
)
|
|
|
|
(defbehavior target-swim-tilt target ((arg0 float) (arg1 float) (arg2 float) (arg3 float))
|
|
(let ((gp-0 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self control unknown-quaternion00))))
|
|
(let ((v1-2 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self control dir-targ)))
|
|
(f0-1
|
|
(fmin 1.0 (* arg0 (/ (-> self control unknown-float01) (-> self control unknown-surface01 target-speed))))
|
|
)
|
|
)
|
|
(seek!
|
|
(-> self control unknown-float130)
|
|
(fmax (fmin (* (+ f0-1 arg2) (fmax 0.5 (+ 0.5 (vector-dot gp-0 v1-2)))) arg3) (- arg3))
|
|
(* arg1 (-> *display* seconds-per-frame))
|
|
)
|
|
)
|
|
(let ((a2-2 (vector-y-quaternion! (new 'stack-no-clear 'vector) (-> self control unknown-quaternion00))))
|
|
(forward-up-nopitch->quaternion (-> self control unknown-quaternion01) gp-0 a2-2)
|
|
)
|
|
)
|
|
(quaternion-rotate-x!
|
|
(-> self control unknown-quaternion01)
|
|
(-> self control unknown-quaternion01)
|
|
(the-as float (if (>= (-> self control unknown-float130) 0.0)
|
|
16384.0
|
|
-16384.0
|
|
)
|
|
)
|
|
)
|
|
(set! (-> self control unknown-float00) (fabs (-> self control unknown-float130)))
|
|
(if (= (-> self next-state name) 'target-swim-down)
|
|
(seek! (-> self control unknown-float131) (the-as float -6144.0) (* 4096.0 (-> *display* seconds-per-frame)))
|
|
(seek! (-> self control unknown-float131) (the-as float 0.0) (* 2048.0 (-> *display* seconds-per-frame)))
|
|
)
|
|
(let ((f0-20 (-> self control unknown-float131)))
|
|
(set! (-> self control unknown-vector11 y) f0-20)
|
|
f0-20
|
|
)
|
|
)
|
|
|
|
(defstate target-swim-stance (target)
|
|
:event target-standard-event-handler
|
|
:enter (behavior ()
|
|
(set! (-> self state-time) (-> *display* base-frame-counter))
|
|
(set! (-> self control unknown-surface00) *swim-mods*)
|
|
(logior! (-> self water flags) (water-flags wt04))
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(target-state-hook-exit)
|
|
(set! (-> self control unknown-surface00 target-speed) 28672.0)
|
|
(target-exit)
|
|
(when (not (or (= (-> self next-state name) 'target-swim-stance)
|
|
(= (-> self next-state name) 'target-swim-walk)
|
|
(= (-> self next-state name) 'target-swim-down)
|
|
(= (-> self next-state name) 'target-swim-up)
|
|
)
|
|
)
|
|
(quaternion-identity! (-> self control unknown-quaternion01))
|
|
(set! (-> self control unknown-float00) 0.0)
|
|
)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
((-> self state-hook))
|
|
(if (and (logtest? (-> self control status) (cshape-moving-flags onsurf))
|
|
(zero? (logand (-> self control status) (cshape-moving-flags on-water)))
|
|
)
|
|
(set-zero! (-> self water bob))
|
|
)
|
|
(when (and (zero? (logand (-> self water flags) (water-flags wt11)))
|
|
(>= (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.1))
|
|
)
|
|
(if (logtest? (-> self water flags) (water-flags wt10))
|
|
(go target-wade-stance)
|
|
(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)
|
|
(>= (- (-> *display* base-frame-counter) (-> self water enter-swim-time)) (seconds 0.1))
|
|
)
|
|
(go target-swim-jump (-> *TARGET-bank* swim-jump-height-min) (-> *TARGET-bank* swim-jump-height-max))
|
|
)
|
|
(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)
|
|
)
|
|
(< (-> *TARGET-bank* min-dive-depth) (target-height-above-ground))
|
|
)
|
|
(go target-swim-down)
|
|
)
|
|
(if (and (!= (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) stick0-speed) 0.0)
|
|
(let ((gp-0 (ja-group)))
|
|
(ja-aframe-num 0)
|
|
(if (or (and (= gp-0 eichar-swim-up-ja) #t) (and (= gp-0 eichar-swim-down-to-up-ja) #t))
|
|
#f
|
|
#t
|
|
)
|
|
)
|
|
)
|
|
(go target-swim-walk)
|
|
)
|
|
(target-swim-tilt (the-as float 0.0) (the-as float 2.0) (the-as float 0.0) (the-as float 1.0))
|
|
(none)
|
|
)
|
|
:code (behavior ()
|
|
(let ((v1-2 (ja-group)))
|
|
(cond
|
|
((or (= v1-2 eichar-swim-up-ja) (= v1-2 eichar-swim-down-to-up-ja))
|
|
(ja-channel-push! 1 (seconds 0.075))
|
|
(ja-no-eval :group! eichar-swim-up-to-stance-ja
|
|
:num! (seek!
|
|
max
|
|
(the-as float (if (= (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) stick0-speed) 0.0)
|
|
1.0
|
|
2.0
|
|
)
|
|
)
|
|
)
|
|
:frame-num 0.0
|
|
)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(let ((a0-9 (-> self skel root-channel 0)))
|
|
(set! (-> a0-9 param 0) (the float (+ (-> a0-9 frame-group data 0 length) -1)))
|
|
(let ((v1-41 (if (= (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) stick0-speed) 0.0)
|
|
1.0
|
|
2.0
|
|
)
|
|
)
|
|
)
|
|
(set! (-> a0-9 param 1) (the-as float v1-41))
|
|
)
|
|
(joint-control-channel-group-eval! a0-9 (the-as art-joint-anim #f) num-func-seek!)
|
|
)
|
|
)
|
|
)
|
|
((ja-group? eichar-swim-walk-ja)
|
|
(ja-channel-push! 1 (seconds 0.83))
|
|
)
|
|
(else
|
|
(ja-channel-push! 1 (seconds 0.15))
|
|
)
|
|
)
|
|
)
|
|
(loop
|
|
(ja :group! eichar-swim-stance-ja :num! min)
|
|
(until (and (ja-done? 0) (= (-> self skel root-channel 0) (-> self skel channel)))
|
|
(suspend)
|
|
(if (= (-> self skel root-channel 0) (-> self skel channel))
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:post target-swim-post
|
|
)
|
|
|
|
(defstate target-swim-walk (target)
|
|
:event target-standard-event-handler
|
|
:enter (behavior ()
|
|
((-> target-swim-stance enter))
|
|
(die-on-next-update! (-> self water bob))
|
|
(set! (-> self control unknown-uint20) (the-as uint (-> *display* base-frame-counter)))
|
|
(none)
|
|
)
|
|
:exit (-> target-swim-stance exit)
|
|
:trans (behavior ()
|
|
((-> self state-hook))
|
|
(if (and (logtest? (-> self control status) (cshape-moving-flags onsurf))
|
|
(zero? (logand (-> self control status) (cshape-moving-flags on-water)))
|
|
)
|
|
(set-zero! (-> self water bob))
|
|
)
|
|
(when (and (zero? (logand (-> self water flags) (water-flags wt11)))
|
|
(>= (- (-> *display* base-frame-counter) (-> self water swim-time)) (seconds 0.1))
|
|
)
|
|
(if (logtest? (-> self water flags) (water-flags wt10))
|
|
(go target-wade-stance)
|
|
(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)
|
|
(>= (- (-> *display* base-frame-counter) (-> self water enter-swim-time)) (seconds 0.1))
|
|
)
|
|
(go target-swim-jump (-> *TARGET-bank* swim-jump-height-min) (-> *TARGET-bank* swim-jump-height-max))
|
|
)
|
|
(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)
|
|
)
|
|
(< (-> *TARGET-bank* min-dive-depth) (target-height-above-ground))
|
|
)
|
|
(go target-swim-down)
|
|
)
|
|
(cond
|
|
((= (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) stick0-speed) 0.0)
|
|
(if (>= (the-as uint (- (-> *display* base-frame-counter) (the-as int (-> self control unknown-uint20))))
|
|
(the-as uint 15)
|
|
)
|
|
(go target-swim-stance)
|
|
)
|
|
)
|
|
(else
|
|
(set! (-> self control unknown-uint20) (the-as uint (-> *display* base-frame-counter)))
|
|
)
|
|
)
|
|
(target-swim-tilt (the-as float 0.0) (the-as float 2.0) (the-as float 0.0) (the-as float 1.0))
|
|
(none)
|
|
)
|
|
:code (behavior ()
|
|
(let ((v1-2 (ja-group)))
|
|
(cond
|
|
((or (= v1-2 eichar-swim-up-ja) (= v1-2 eichar-swim-down-to-up-ja) (= v1-2 eichar-swim-up-to-stance-ja))
|
|
(ja-channel-push! 1 (seconds 0.3))
|
|
)
|
|
((ja-group? eichar-swim-up-to-stance-ja)
|
|
(ja-channel-push! 1 (seconds 0.15))
|
|
(ja-no-eval :group! eichar-swim-walk-ja :num! (seek!) :frame-num (ja-aframe (the-as float 19.0) 0))
|
|
(until (ja-done? 0)
|
|
(compute-alignment! (-> self align))
|
|
(if (zero? (logand (-> self align flags) (align-flags disabled)))
|
|
(set! (-> self control unknown-surface00 target-speed)
|
|
(* (-> self align delta trans z) (-> self control unknown-surface01 alignv) (-> *display* frames-per-second))
|
|
)
|
|
)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
(else
|
|
(ja-channel-push! 1 (seconds 0.15))
|
|
)
|
|
)
|
|
)
|
|
(loop
|
|
(ja-no-eval :group! eichar-swim-walk-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(compute-alignment! (-> self align))
|
|
(if (zero? (logand (-> self align flags) (align-flags disabled)))
|
|
(set! (-> self control unknown-surface00 target-speed)
|
|
(* (-> self align delta trans z) (-> self control unknown-surface01 alignv) (-> *display* frames-per-second))
|
|
)
|
|
)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:post target-swim-post
|
|
)
|
|
|
|
(defstate target-swim-down (target)
|
|
:event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
(case arg2
|
|
(('attack 'attack-invinc)
|
|
(let ((v1-2 (the-as attack-info (-> arg3 param 1))))
|
|
(when (or (zero? (logand (-> v1-2 mask) (attack-mask mode))) (= (-> v1-2 mode) 'generic) (= (-> v1-2 mode) 'drown))
|
|
(set! (-> v1-2 mode) 'damage)
|
|
(if (and (= (-> self game mode) 'play) (>= 1.0 (-> self fact-info-target health)))
|
|
(set! (-> v1-2 mode) 'drown-death)
|
|
)
|
|
(logior! (-> v1-2 mask) (attack-mask mode))
|
|
(set! (-> self control unknown-uint20) (the-as uint #t))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(target-standard-event-handler arg0 arg1 arg2 arg3)
|
|
)
|
|
:enter (behavior ()
|
|
(set! (-> self state-time) (-> *display* base-frame-counter))
|
|
(logclear! (-> self water flags) (water-flags wt04))
|
|
(set! (-> self control unknown-surface00) *dive-mods*)
|
|
(set! (-> self control dynam gravity-max) 16384.0)
|
|
(set! (-> self control dynam gravity-length) 16384.0)
|
|
(set! (-> self water swim-time) (-> *display* base-frame-counter))
|
|
(set! (-> self control unknown-uint20) (the-as uint #f))
|
|
(if (= (-> self next-state name) 'target-swim-down)
|
|
(set! (-> self control unknown-float130) 0.0)
|
|
)
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(set! (-> self control dynam gravity-max) (-> self control unknown-dynamics00 gravity-max))
|
|
(set! (-> self control dynam gravity-length) (-> self control unknown-dynamics00 gravity-length))
|
|
(target-exit)
|
|
(when (not (or (= (-> self next-state name) 'target-swim-stance)
|
|
(= (-> self next-state name) 'target-swim-walk)
|
|
(= (-> self next-state name) 'target-swim-down)
|
|
(= (-> self next-state name) 'target-swim-up)
|
|
)
|
|
)
|
|
(quaternion-identity! (-> self control unknown-quaternion01))
|
|
(set! (-> self control unknown-float00) 0.0)
|
|
)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(if (>= (- (-> *display* base-frame-counter) (-> self water swim-time)) (seconds 0.5))
|
|
(go target-stance)
|
|
)
|
|
(cond
|
|
((>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (seconds 0.1))
|
|
(set! (-> self control unknown-surface00) *dive-mods*)
|
|
(if (= (-> self next-state name) 'target-swim-down)
|
|
(target-swim-tilt (the-as float -0.9) (the-as float 1.0) (the-as float 0.0) (the-as float 0.5))
|
|
)
|
|
)
|
|
(else
|
|
(set! (-> self control unknown-surface00) *dive-bottom-mods*)
|
|
(if (or (= (-> self next-state name) 'target-swim-down) (= (-> self next-state name) 'target-swim-stance))
|
|
(target-swim-tilt (the-as float 0.0) (the-as float 2.0) (the-as float -1.0) (the-as float 1.0))
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:code (behavior ()
|
|
(let ((gp-0 60)
|
|
(s5-0 3000)
|
|
(f30-0 0.0)
|
|
)
|
|
(let ((v1-2 (ja-group)))
|
|
(set! f30-0
|
|
(cond
|
|
((or (= v1-2 eichar-swim-stance-ja)
|
|
(= v1-2 eichar-swim-walk-ja)
|
|
(= v1-2 eichar-swim-up-to-stance-ja)
|
|
(= v1-2 eichar-swim-up-ja)
|
|
(= v1-2 eichar-swim-down-to-up-ja)
|
|
)
|
|
(ja-channel-push! 1 (seconds 0.075))
|
|
(ja-no-eval :group! eichar-swim-walk-to-down-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(compute-alignment! (-> self align))
|
|
(align!
|
|
(-> self align)
|
|
(align-opts adjust-y-vel adjust-xz-vel)
|
|
(the-as float 1.0)
|
|
(the-as float 1.0)
|
|
(the-as float 1.0)
|
|
)
|
|
(if (= (ja-aframe-num 0) 73.0)
|
|
(dummy-13 (-> self water) (the-as float 0.7) (-> self control trans) 1 *null-vector*)
|
|
)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
(ja :group! eichar-swim-down-ja :num! min)
|
|
f30-0
|
|
)
|
|
(else
|
|
(case (ja-group)
|
|
((eichar-flop-down-ja eichar-moving-flop-down-ja eichar-flop-down-loop-ja eichar-moving-flop-down-loop-ja)
|
|
(ja-channel-push! 1 (seconds 0.075))
|
|
(set! gp-0 120)
|
|
(ja :group! eichar-swim-down-ja :num! (identity (ja-aframe (the-as float 124.0) 0)))
|
|
-16384.0
|
|
)
|
|
(else
|
|
(ja-channel-push! 1 (seconds 0.075))
|
|
(ja :group! eichar-swim-down-ja :num! min)
|
|
f30-0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(loop
|
|
(if (and (or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0)
|
|
(pad-buttons square)
|
|
)
|
|
)
|
|
(-> self control unknown-spoolanim00)
|
|
)
|
|
(>= (- (-> *display* base-frame-counter) (-> self state-time)) gp-0)
|
|
)
|
|
(go target-swim-up)
|
|
)
|
|
(if (or (>= (- (-> *display* base-frame-counter) (-> self state-time)) s5-0)
|
|
(and (logtest? (-> self control status) (cshape-moving-flags onsurf))
|
|
(and (< (-> self water swim-depth) 8192.0)
|
|
(>= (- (-> *display* base-frame-counter) (-> self state-time)) gp-0)
|
|
)
|
|
)
|
|
)
|
|
(go target-swim-up)
|
|
)
|
|
(let ((s4-3 (new-stack-vector0))
|
|
(f24-0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
|
|
)
|
|
0.0
|
|
(vector-! s4-3 (-> self control transv) (vector-float*! s4-3 (-> self control dynam gravity-normal) f24-0))
|
|
(let* ((f28-0 (vector-length s4-3))
|
|
(f26-0 f28-0)
|
|
(f24-1 (+ f24-0 f30-0))
|
|
)
|
|
(set! f30-0 (seek f30-0 (the-as float 0.0) (* 32768.0 (-> *display* seconds-per-frame))))
|
|
(vector+!
|
|
(-> self control transv)
|
|
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f24-1)
|
|
(vector-float*! s4-3 s4-3 (/ f28-0 f26-0))
|
|
)
|
|
)
|
|
)
|
|
(suspend)
|
|
(ja :num! (loop! (lerp-scale
|
|
(the-as float 0.4)
|
|
(the-as float 1.0)
|
|
(vector-length (-> self control transv))
|
|
(the-as float 0.0)
|
|
(the-as float 16384.0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:post target-swim-post
|
|
)
|
|
|
|
(defstate target-swim-up (target)
|
|
:event (-> target-swim-down event)
|
|
:enter (-> target-swim-down enter)
|
|
:exit (-> target-swim-down exit)
|
|
:trans (behavior ()
|
|
(if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) x)
|
|
(zero? (logand (-> self state-flags) (state-flags prevent-jump)))
|
|
(zero? (logand (-> self water flags) (water-flags wt13 wt14)))
|
|
)
|
|
(go
|
|
target-swim-jump-jump
|
|
(-> *TARGET-bank* swim-jump-height-min)
|
|
(-> *TARGET-bank* swim-jump-height-max)
|
|
(the-as surface #f)
|
|
)
|
|
)
|
|
(if (and (>= (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 10))
|
|
(< (target-move-dist (-> *TARGET-bank* stuck-time)) (-> *TARGET-bank* stuck-distance))
|
|
)
|
|
(send-event self 'attack #f (static-attack-info ((mode 'drown-death))))
|
|
)
|
|
((-> target-swim-down trans))
|
|
(none)
|
|
)
|
|
:code (behavior ()
|
|
(ja-channel-push! 1 (seconds 0.1))
|
|
(let ((f30-0 1.0))
|
|
(let ((gp-0 #t))
|
|
(ja-no-eval :group! eichar-swim-down-to-up-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(target-swim-tilt
|
|
(the-as float (if (< 8192.0 (-> self water swim-depth))
|
|
0.5
|
|
0.0
|
|
)
|
|
)
|
|
(the-as float 1.0)
|
|
(the-as float 0.0)
|
|
(the-as float 0.1)
|
|
)
|
|
(if (and (zero? (logand (-> self water flags) (water-flags wt12)))
|
|
(or (>= (ja-aframe-num 0) 222.0)
|
|
(and (!= (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) stick0-speed) 0.0)
|
|
(>= (ja-aframe-num 0) 200.0)
|
|
)
|
|
)
|
|
)
|
|
(goto cfg-37)
|
|
)
|
|
(compute-alignment! (-> self align))
|
|
(when (zero? (logand (-> self water flags) (water-flags wt12)))
|
|
(logior! (-> self water flags) (water-flags wt04))
|
|
(set! gp-0 #f)
|
|
)
|
|
(if gp-0
|
|
(align! (-> self align) (align-opts adjust-y-vel) (the-as float 1.0) (the-as float 1.0) (the-as float 1.0))
|
|
)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
(ja :group! eichar-swim-up-ja :num! min)
|
|
(loop
|
|
(target-swim-tilt
|
|
(the-as float (if (< 8192.0 (-> self water swim-depth))
|
|
0.3
|
|
0.0
|
|
)
|
|
)
|
|
(the-as float 1.0)
|
|
(the-as float 0.0)
|
|
(the-as float 0.1)
|
|
)
|
|
(if (zero? (logand (-> self water flags) (water-flags wt12)))
|
|
(goto cfg-37)
|
|
)
|
|
(if (cpad-pressed? (-> self control unknown-cpad-info00 number) x)
|
|
(set! f30-0 2.0)
|
|
)
|
|
(compute-alignment! (-> self align))
|
|
(when (logtest? (-> self water flags) (water-flags wt12))
|
|
(align! (-> self align) (align-opts adjust-y-vel) (the-as float 1.0) (the-as float 1.0) (the-as float 1.0))
|
|
(set! (-> self control transv y) (+ 8192.0 (* 8192.0 f30-0)))
|
|
)
|
|
(suspend)
|
|
(ja :num! (loop! f30-0))
|
|
(set! f30-0 (seek f30-0 (the-as float 1.0) (-> *display* seconds-per-frame)))
|
|
)
|
|
)
|
|
(label cfg-37)
|
|
(logior! (-> self water flags) (water-flags wt04))
|
|
(set! (-> self water swim-time) (-> *display* base-frame-counter))
|
|
(start-bobbing! (-> self water) (the-as float -4096.0) 600 1500)
|
|
(set! (-> self water bob start-time) (+ (-> *display* base-frame-counter) (seconds -0.05)))
|
|
(go target-swim-stance)
|
|
(none)
|
|
)
|
|
:post target-swim-post
|
|
)
|
|
|
|
(defstate target-swim-jump-jump (target)
|
|
:event (-> target-jump event)
|
|
:enter (-> target-jump enter)
|
|
:exit target-exit
|
|
:trans (behavior ()
|
|
(cond
|
|
((< (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.5))
|
|
(set! (-> self water flags) (logior (water-flags wt16) (-> self water flags)))
|
|
(logclear! (-> self control status) (cshape-moving-flags onsurf onground tsurf))
|
|
)
|
|
(else
|
|
(set! (-> self trans-hook) (-> target-jump trans))
|
|
)
|
|
)
|
|
((-> target-jump trans))
|
|
(none)
|
|
)
|
|
:code (-> target-jump code)
|
|
:post target-post
|
|
)
|
|
|
|
(defstate target-swim-jump (target)
|
|
:event target-standard-event-handler
|
|
:enter (-> target-swim-stance enter)
|
|
:exit (behavior ()
|
|
((-> target-swim-stance exit))
|
|
(die-on-next-update! (-> self water bob))
|
|
(set! (-> self water align-offset) 0.0)
|
|
(set! (-> self water flags) (logior (water-flags wt16) (-> self water flags)))
|
|
(none)
|
|
)
|
|
:code (behavior ((arg0 float) (arg1 float))
|
|
(die-on-next-update! (-> self water bob))
|
|
(ja-channel-push! 1 (seconds 0.05))
|
|
(ja :group! eichar-swim-jump-ja :num! min)
|
|
(until (and (ja-done? 0) (= (-> self skel root-channel 0) (-> self skel channel)))
|
|
(compute-alignment! (-> self align))
|
|
(if (zero? (logand (-> self align flags) (align-flags disabled)))
|
|
(+! (-> self water align-offset) (* 0.6 (-> self align delta trans y)))
|
|
)
|
|
(suspend)
|
|
(if (= (-> self skel root-channel 0) (-> self skel channel))
|
|
(ja :num! (seek! max 2.0))
|
|
)
|
|
)
|
|
(let ((f30-0 (fmax 0.0 (- (-> self water bob-offset)))))
|
|
(let ((s4-1 (new-stack-vector0)))
|
|
(let ((f0-8 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
|
|
0.0
|
|
(vector-! s4-1 (-> self control transv) (vector-float*! s4-1 (-> self control dynam gravity-normal) f0-8))
|
|
)
|
|
(let* ((f0-9 (vector-length s4-1))
|
|
(f1-5 f0-9)
|
|
(f2-1 0.4096)
|
|
)
|
|
(vector+!
|
|
(-> self control transv)
|
|
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f2-1)
|
|
(vector-float*! s4-1 s4-1 (/ f0-9 f1-5))
|
|
)
|
|
)
|
|
)
|
|
(go target-swim-jump-jump (+ f30-0 arg0) (+ f30-0 arg1) (the-as surface #f))
|
|
)
|
|
(none)
|
|
)
|
|
:post target-swim-post
|
|
)
|
|
|
|
(defstate target-hit-ground-hard (target)
|
|
:event target-standard-event-handler
|
|
:enter (behavior ((arg0 float))
|
|
(set! (-> self control unknown-dword31) 0)
|
|
(set! (-> self control unknown-dword33) 0)
|
|
(set-forward-vel (the-as float 0.0))
|
|
(set! (-> self control unknown-surface00) *walk-mods*)
|
|
(none)
|
|
)
|
|
:code (behavior ((arg0 float))
|
|
(when (!= arg0 0.0)
|
|
(let ((f0-5 (the float (the int (+ 1.0 (/ (- arg0 (-> *TARGET-bank* fall-far)) (-> *TARGET-bank* fall-far-inc))))))
|
|
)
|
|
(pickup-collectable!
|
|
(-> self fact-info-target)
|
|
(pickup-type eco-green)
|
|
(* (-> *FACT-bank* health-single-inc) (- (fmax 0.0 f0-5)))
|
|
(the-as handle #f)
|
|
)
|
|
)
|
|
(if (zero? (logand (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons l3)))
|
|
(target-timed-invulnerable (-> *TARGET-bank* hit-invulnerable-timeout) self)
|
|
)
|
|
)
|
|
(cond
|
|
((and (= (-> self game mode) 'play) (>= 0.0 (-> self fact-info-target health)))
|
|
(set! (-> self attack-info attacker) (the-as handle #f))
|
|
(go target-death 'target-hit-ground-hard)
|
|
)
|
|
(else
|
|
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 255 (seconds 0.1))
|
|
(ja-channel-push! 1 1)
|
|
(ja :group! eichar-painful-land-ja :num! min)
|
|
(until (and (ja-done? 0) (= (-> self skel root-channel 0) (-> self skel channel)))
|
|
(suspend)
|
|
(if (= (-> self skel root-channel 0) (-> self skel channel))
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
(ja :group! eichar-painful-land-end-ja :num! min)
|
|
(until (and (ja-done? 0) (= (-> self skel root-channel 0) (-> self skel channel)))
|
|
(suspend)
|
|
(if (= (-> self skel root-channel 0) (-> self skel channel))
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
(go target-stance)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:post target-no-stick-post
|
|
)
|
|
|
|
(defstate target-launch (target)
|
|
:event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
(if (and (= arg2 'query) (= (-> arg3 param 0) 'mode))
|
|
'target-launch
|
|
(target-standard-event-handler arg0 arg1 arg2 arg3)
|
|
)
|
|
)
|
|
:code (behavior ((arg0 float) (arg1 symbol) (arg2 vector) (arg3 int))
|
|
(set! (-> self state-time) (-> *display* base-frame-counter))
|
|
(set! (-> self control unknown-surface00) *turn-around-mods*)
|
|
(ja-channel-push! 1 (seconds 0.15))
|
|
(set-forward-vel (the-as float 0.0))
|
|
(ja-no-eval :group! eichar-duck-stance-ja :num! (seek! (ja-aframe (the-as float 15.0) 0) 3.0) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! (ja-aframe (the-as float 15.0) 0) 3.0))
|
|
)
|
|
(if arg1
|
|
(send-event *camera* 'change-state arg1 (seconds 0.6))
|
|
)
|
|
(if (nonzero? arg3)
|
|
(process-spawn-function
|
|
process
|
|
(lambda :behavior process
|
|
((arg0 vector) (arg1 time-frame) (arg2 float))
|
|
(local-vars (sv-32 time-frame) (sv-40 vector) (sv-44 symbol))
|
|
(set! sv-32 (-> *display* base-frame-counter))
|
|
(let ((v1-2 (new-stack-vector0)))
|
|
(set! (-> v1-2 quad) (-> arg0 quad))
|
|
(set! sv-40 v1-2)
|
|
)
|
|
(set! sv-44 #t)
|
|
(until (>= (- (-> *display* base-frame-counter) sv-32) arg1)
|
|
(let ((s4-0 (ppointer->process (-> self parent))))
|
|
(cond
|
|
((and sv-44
|
|
(< (- (-> (the-as target s4-0) control trans y) (-> (the-as target s4-0) control unknown-vector52 y)) arg2)
|
|
)
|
|
(vector-xz-normalize! (-> (the-as target s4-0) control transv) (the-as float 0.0))
|
|
;; PAL patch here
|
|
(when (< (vector-vector-xz-distance (-> (the-as target s4-0) control trans) sv-40) 20480.0)
|
|
(let ((v1-16 (vector-! (new-stack-vector0) (-> (the-as target s4-0) control trans) sv-40)))
|
|
(set! (-> (the-as target s4-0) control trans x) (+ (-> sv-40 x) (fmax -2867.2 (fmin 2867.2 (-> v1-16 x)))))
|
|
(set! (-> (the-as target s4-0) control trans z) (+ (-> sv-40 z) (fmax -2867.2 (fmin 2867.2 (-> v1-16 z)))))
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(if sv-44
|
|
(set! sv-32 (-> *display* base-frame-counter))
|
|
)
|
|
(set! sv-44 (the-as symbol #f))
|
|
(when (or (= (-> (the-as target s4-0) next-state name) 'target-duck-high-jump-jump)
|
|
(= (-> (the-as target s4-0) next-state name) 'target-falling)
|
|
)
|
|
(let ((v1-30 (-> (the-as target s4-0) control trans))
|
|
(s3-0 (-> (the-as target s4-0) control transv))
|
|
)
|
|
(set! (-> s3-0 x) (- (-> sv-40 x) (-> v1-30 x)))
|
|
(set! (-> s3-0 z) (- (-> sv-40 z) (-> v1-30 z)))
|
|
(let ((f30-0 (vector-xz-length s3-0)))
|
|
(if (< 122880.0 f30-0)
|
|
(vector-xz-normalize! s3-0 (the-as float 122880.0))
|
|
)
|
|
(if (< 4096.0 f30-0)
|
|
(forward-up-nopitch->quaternion
|
|
(-> (the-as target s4-0) control dir-targ)
|
|
(vector-normalize-copy! (new 'stack-no-clear 'vector) s3-0 (the-as float 1.0))
|
|
(vector-y-quaternion! (new 'stack-no-clear 'vector) (-> (the-as target s4-0) control quat))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(suspend)
|
|
0
|
|
)
|
|
#f
|
|
)
|
|
arg2
|
|
arg3
|
|
143360.0
|
|
:to self
|
|
)
|
|
)
|
|
;; PAL patch (sound plays elsewhere)
|
|
;(sound-play "launch-fire")
|
|
(go target-high-jump arg0 arg0 'launch)
|
|
(none)
|
|
)
|
|
:post target-no-stick-post
|
|
)
|
|
|
|
(defstate target-periscope (target)
|
|
:event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
(case arg2
|
|
(('change-mode)
|
|
#f
|
|
)
|
|
(('end-mode)
|
|
(when (-> self control unknown-spoolanim00)
|
|
(set! (-> self control unknown-uint20) (the-as uint #f))
|
|
#t
|
|
)
|
|
)
|
|
(else
|
|
(target-generic-event-handler arg0 arg1 arg2 arg3)
|
|
)
|
|
)
|
|
)
|
|
:exit (behavior ()
|
|
(target-exit)
|
|
(set! (-> self cam-user-mode) 'normal)
|
|
;; PAL patch here
|
|
(logclear! (-> self state-flags) (state-flags invulnerable grabbed))
|
|
(none)
|
|
)
|
|
:code (behavior ((arg0 handle))
|
|
(set! (-> self neck flex-blend) 0.0)
|
|
(target-exit)
|
|
(logior! (-> self state-flags) (state-flags invulnerable do-not-notice))
|
|
(let ((v1-4 (handle->process arg0)))
|
|
(if v1-4
|
|
(quaterion<-rotate-y-vector (-> self control dir-targ) (vector-!
|
|
(new 'stack-no-clear 'vector)
|
|
(-> (the-as process-drawable v1-4) root trans)
|
|
(-> self control trans)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> self control unknown-uint20) (the-as uint #t))
|
|
(ja-channel-push! 1 (seconds 0.1))
|
|
(ja-no-eval :group! eichar-periscope-grab-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
(send-event (handle->process arg0) 'change-mode)
|
|
(while (-> self control unknown-spoolanim00)
|
|
(suspend)
|
|
)
|
|
(ja-no-eval :group! eichar-periscope-grab-ja :num! (seek! 0.0 2.0) :frame-num max)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! 0.0 2.0))
|
|
)
|
|
(go target-stance)
|
|
(none)
|
|
)
|
|
:post target-no-stick-post
|
|
)
|
|
|
|
(defstate target-play-anim (target)
|
|
:event target-generic-event-handler
|
|
:enter (behavior ((arg0 string) (arg1 handle))
|
|
(set! (-> self control unknown-handle10) arg1)
|
|
(move-to-ground
|
|
(-> self control)
|
|
(the-as float 40960.0)
|
|
(the-as float 40960.0)
|
|
#f
|
|
(-> self control root-prim collide-with)
|
|
)
|
|
(logior! (-> self state-flags) (state-flags grabbed))
|
|
(set! (-> self neck flex-blend) 0.0)
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(send-event (handle->process (-> self control unknown-handle10)) 'end-mode)
|
|
(target-exit)
|
|
(none)
|
|
)
|
|
:code (behavior ((arg0 string) (arg1 handle))
|
|
(let ((gp-0 (the-as art-joint-anim (lookup-art (-> self draw art-group) arg0 art-joint-anim))))
|
|
(when gp-0
|
|
(send-event (ppointer->process (-> self sidekick)) 'matrix 'play-anim)
|
|
(ja-channel-set! 1)
|
|
(ja-no-eval :group! gp-0 :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
(send-event (ppointer->process (-> self sidekick)) 'matrix 'normal)
|
|
)
|
|
)
|
|
(go target-stance)
|
|
(none)
|
|
)
|
|
:post target-no-stick-post
|
|
)
|
|
|
|
(defstate target-clone-anim (target)
|
|
:event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
(if (and (= arg2 'trans) (= (-> arg3 param 0) 'restore))
|
|
(set! (-> self control unknown-uint20) (the-as uint #f))
|
|
)
|
|
((-> target-grab event) arg0 arg1 arg2 arg3)
|
|
)
|
|
:enter (behavior ((arg0 handle))
|
|
(set! (-> self control unknown-handle10) arg0)
|
|
(set! (-> self control unknown-vector102 quad) (-> self control trans quad))
|
|
(set! (-> self control unknown-uint20) (the-as uint #t))
|
|
(quaternion-copy! (the-as quaternion (-> self control unknown-vector103)) (-> self control quat))
|
|
(logior! (-> self state-flags) (state-flags grabbed))
|
|
(vector-reset! (-> self control transv))
|
|
(set! (-> self neck flex-blend) 0.0)
|
|
(send-event (ppointer->process (-> self sidekick)) 'shadow #t)
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(send-event (ppointer->process (-> self sidekick)) 'matrix 'normal)
|
|
(send-event (ppointer->process (-> self sidekick)) 'shadow #t)
|
|
(let ((gp-0 (-> self node-list data 3))
|
|
(a1-2 (&-> (-> self control) unknown-qword00))
|
|
)
|
|
(cond
|
|
((not (-> self control unknown-spoolanim00))
|
|
)
|
|
((zero? (logand (-> self draw status) (draw-status hidden)))
|
|
(move-to-point! (-> self control) (the-as vector a1-2))
|
|
(matrix->quaternion (-> self control unknown-quaternion00) (-> gp-0 bone transform))
|
|
(quaternion-copy! (-> self control quat) (-> self control unknown-quaternion00))
|
|
(move-to-ground
|
|
(-> self control)
|
|
(the-as float 4096.0)
|
|
(the-as float 40960.0)
|
|
#t
|
|
(-> self control root-prim collide-with)
|
|
)
|
|
(when (logtest? (-> self control status) (cshape-moving-flags on-water))
|
|
(let ((a1-6 (new-stack-vector0)))
|
|
(set! (-> a1-6 x) (-> self control trans x))
|
|
(set! (-> a1-6 y) (-> self water height))
|
|
(set! (-> a1-6 z) (-> self control trans z))
|
|
(set! (-> a1-6 w) 1.0)
|
|
(move-to-point! (-> self control) a1-6)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(format 0 "ERROR: <ASG>: camera used backup position~%")
|
|
(move-to-point! (-> self control) (-> self control unknown-vector102))
|
|
(quaternion-copy! (-> self control quat) (the-as quaternion (-> self control unknown-vector103)))
|
|
)
|
|
)
|
|
)
|
|
(rot->dir-targ! (-> self control))
|
|
(logior! (-> self control status) (cshape-moving-flags onsurf onground tsurf))
|
|
(set! (-> self control unknown-dword11) (-> *display* base-frame-counter))
|
|
(ja-channel-set! 0)
|
|
(ja-post)
|
|
(target-exit)
|
|
(none)
|
|
)
|
|
:code (behavior ((arg0 handle))
|
|
(clone-anim arg0 (the-as int (-> self draw origin-joint-index)) #t "")
|
|
(go target-stance)
|
|
(none)
|
|
)
|
|
:post target-no-ja-move-post
|
|
)
|
|
|
|
|
|
|
|
|