mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 21:27:52 -04:00
1d868a2bd9
Full list: - `atoll-obs` - `atoll-tank` - `juicer` - `sniper` - `transport` - `yakow` - `kid-h` - `kid-states` - `kid-task` - `kid3-course` - `kid` - `kor-h` - `kor-states` - `kor-task` - `kor3-course` - `kor` - `spyder` - `spydroid` - `widow-baron` - `widow-extras` - `widow-more-extras` - `widow2` - `widow` - `flying-spider` - `mammoth` - `mantis` - `nest-obs` - `hal-task` - `hal` - `hal3-course` Manual patches: - `widow`: `handle->process` stack var - `nestb-scenes`: Commented out `nav-network` stuff, was causing crashes in `nest` Also fixes `ginsu` crash (`blade-part` had the wrong type)
2235 lines
79 KiB
Common Lisp
2235 lines
79 KiB
Common Lisp
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; name: widow.gc
|
|
;; name in dgo: widow
|
|
;; dgos: TOA
|
|
|
|
;; DECOMP BEGINS
|
|
|
|
;; WARN: Return type mismatch joint-control-channel vs none.
|
|
(defbehavior widow-common widow ()
|
|
(update! (-> self theta) 0.0)
|
|
(widow-rand-vector-method-10 (-> self rand-vec))
|
|
(widow-oscillator-method-10 (-> self noise-osc) (-> self rand-vec value))
|
|
(widow-oscillator-method-10 (-> self osc) (the-as vector #f))
|
|
(widow-float-seeker-method-11 (-> self left-cover-angle) 0.0)
|
|
(widow-float-seeker-method-11 (-> self right-cover-angle) 0.0)
|
|
(quaternion-axis-angle!
|
|
(-> self left-cover-jm quat)
|
|
1.0
|
|
0.0
|
|
0.0
|
|
(* -16384.0 (-> self left-cover-angle value))
|
|
)
|
|
(quaternion-axis-angle!
|
|
(-> self right-cover-jm quat)
|
|
1.0
|
|
0.0
|
|
0.0
|
|
(* -16384.0 (-> self right-cover-angle value))
|
|
)
|
|
(update! (-> self drill-speed) 0.0)
|
|
(+! (-> self drill-angle) (* 3495.2534 (-> self drill-speed value)))
|
|
(quaternion-axis-angle! (-> self left-drill-jm quat) 0.0 1.0 0.0 (-> self drill-angle))
|
|
(quaternion-axis-angle! (-> self right-drill-jm quat) 0.0 1.0 0.0 (-> self drill-angle))
|
|
(let ((f30-0 (-> self drill-speed value)))
|
|
(let ((v1-23 (ja-group)))
|
|
(if (and (and v1-23 (= v1-23 (-> self draw art-group data 7))) (< 20.0 (ja-aframe-num 0)))
|
|
(set! f30-0 (lerp-scale 0.0 1.0 (ja-aframe-num 0) 20.0 78.0))
|
|
)
|
|
)
|
|
(let ((v1-32 (ja-group)))
|
|
(if (and (and v1-32 (= v1-32 (-> self draw art-group data 18))) (< (ja-aframe-num 0) 522.0))
|
|
(set! f30-0 (lerp-scale 1.0 0.0 (ja-aframe-num 0) 505.0 552.0))
|
|
)
|
|
)
|
|
(cond
|
|
((< 0.001 f30-0)
|
|
(sound-play-by-name
|
|
(static-sound-name "widow-drill")
|
|
(the-as sound-id (-> self drill-sound))
|
|
(the int (* 1024.0 f30-0))
|
|
(the int (* 1524.0 (* 0.5 (+ -1.0 f30-0))))
|
|
0
|
|
(sound-group sfx)
|
|
(vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 11))
|
|
)
|
|
(set! (-> self drill-sound-playing) #t)
|
|
)
|
|
((-> self drill-sound-playing)
|
|
(sound-stop (the-as sound-id (-> self drill-sound)))
|
|
(set! (-> self drill-sound-playing) #f)
|
|
)
|
|
)
|
|
)
|
|
(let ((f30-1 (-> self drill-speed value)))
|
|
(let ((v1-53 (ja-group)))
|
|
(if (and (and v1-53 (= v1-53 (-> self draw art-group data 7))) (< 77.0 (ja-aframe-num 0)))
|
|
(set! f30-1 1.0)
|
|
)
|
|
)
|
|
(cond
|
|
((< 0.001 f30-1)
|
|
(sound-play
|
|
"widow-dril-swtn"
|
|
:id (the-as sound-id (-> self drill-sweeten-sound))
|
|
:position (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 11))
|
|
)
|
|
(set! (-> self drill-sweeten-sound-playing) #t)
|
|
)
|
|
((-> self drill-sweeten-sound-playing)
|
|
(sound-stop (the-as sound-id (-> self drill-sweeten-sound)))
|
|
(set! (-> self drill-sweeten-sound-playing) #f)
|
|
)
|
|
)
|
|
)
|
|
(cond
|
|
((-> self flying)
|
|
(sound-play-by-name
|
|
(static-sound-name "widow-hover")
|
|
(the-as sound-id (-> self hover-sound))
|
|
(the int (* 1024.0 (lerp-scale 0.5 1.0 (-> self osc value y) -20480.0 -4096.0)))
|
|
0
|
|
0
|
|
(sound-group sfx)
|
|
(vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 3))
|
|
)
|
|
(set! (-> self hover-sound-playing) #t)
|
|
)
|
|
((-> self hover-sound-playing)
|
|
(sound-stop (the-as sound-id (-> self hover-sound)))
|
|
(set! (-> self hover-sound-playing) #f)
|
|
)
|
|
)
|
|
(let ((v1-81 (ja-group)))
|
|
(when (or (and v1-81 (or (= v1-81 (-> self draw art-group data 8))
|
|
(= v1-81 (-> self draw art-group data 19))
|
|
(= v1-81 (-> self draw art-group data 22))
|
|
)
|
|
)
|
|
(let ((v1-87 (ja-group)))
|
|
(and (and v1-87 (= v1-87 (-> self draw art-group data 7))) (< 77.0 (ja-aframe-num 0)))
|
|
)
|
|
)
|
|
(let ((gp-5 (new 'stack-no-clear 'vector)))
|
|
(when (nonzero? (-> self drill-spark-part))
|
|
(vector<-cspace! gp-5 (-> self node-list data 11))
|
|
(vector+float*! gp-5 gp-5 (-> self node-list data 11 bone transform vector 1) 10854.4)
|
|
(spawn (-> self drill-spark-part) gp-5)
|
|
)
|
|
(when (nonzero? (-> self drill-spark-part-alt))
|
|
(vector<-cspace! gp-5 (-> self node-list data 44))
|
|
(vector+float*! gp-5 gp-5 (-> self node-list data 44 bone transform vector 1) 10854.4)
|
|
(spawn (-> self drill-spark-part-alt) gp-5)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when (and (nonzero? (-> self extract-stone-time))
|
|
(< (- (-> self clock frame-counter) (-> self extract-stone-time)) (seconds 2))
|
|
(nonzero? (-> self extract-stone-part))
|
|
)
|
|
(let ((gp-6 (new 'stack-no-clear 'vector)))
|
|
(vector<-cspace! gp-6 (-> self node-list data 44))
|
|
(spawn (-> self extract-stone-part) gp-6)
|
|
)
|
|
)
|
|
(when (and (nonzero? (-> self insert-stone-time))
|
|
(< (- (-> self clock frame-counter) (-> self insert-stone-time)) (seconds 2))
|
|
(nonzero? (-> self insert-stone-part))
|
|
)
|
|
(let ((s5-5 (handle->process (-> self pod))))
|
|
(when s5-5
|
|
(let ((gp-7 (vector<-cspace! (new 'stack-no-clear 'vector) (-> (the-as process-focusable s5-5) node-list data 4))))
|
|
(let ((s4-5 (new 'stack-no-clear 'vector)))
|
|
(vector-matrix*!
|
|
s4-5
|
|
(new 'static 'vector :y 4096.0)
|
|
(-> (the-as process-focusable s5-5) node-list data 4 bone transform)
|
|
)
|
|
(vector+! gp-7 gp-7 s4-5)
|
|
)
|
|
(spawn (-> self insert-stone-part) gp-7)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(let ((v1-135 (ja-group)))
|
|
(when (and (and v1-135 (or (= v1-135 (-> self draw art-group data 8))
|
|
(= v1-135 (-> self draw art-group data 19))
|
|
(= v1-135 (-> self draw art-group data 22))
|
|
)
|
|
)
|
|
(zero? (-> self skel float-channels))
|
|
)
|
|
(let* ((v1-141 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-142 (the-as number (logior #x3f800000 v1-141)))
|
|
(f0-28 (+ -1.0 (the-as float v1-142)))
|
|
)
|
|
(cond
|
|
((< f0-28 0.1)
|
|
(let ((v1-148 (ja-channel-float! (the-as art-joint-anim (-> self draw art-group data 12)) 0.0 0.0 0.0)))
|
|
(when v1-148
|
|
(set! (-> self skel interp-select 0) 1016)
|
|
(set! (-> self skel interp-select 1) 0)
|
|
(set! (-> v1-148 param 0) 1.0)
|
|
(set! (-> v1-148 param 1) 0.25)
|
|
(set! (-> v1-148 param 2) 0.1)
|
|
(set! (-> v1-148 num-func) num-func-interp1-play!)
|
|
)
|
|
)
|
|
)
|
|
((< f0-28 0.2)
|
|
(let ((v1-153 (ja-channel-float! (the-as art-joint-anim (-> self draw art-group data 13)) 0.0 0.0 0.0)))
|
|
(when v1-153
|
|
(set! (-> self skel interp-select 0) 1016)
|
|
(set! (-> self skel interp-select 1) 0)
|
|
(set! (-> v1-153 param 0) 1.0)
|
|
(set! (-> v1-153 param 1) 0.25)
|
|
(set! (-> v1-153 param 2) 0.1)
|
|
(set! (-> v1-153 num-func) num-func-interp1-play!)
|
|
)
|
|
)
|
|
)
|
|
((< f0-28 0.3)
|
|
(let ((v1-158 (ja-channel-float! (the-as art-joint-anim (-> self draw art-group data 14)) 0.0 0.0 0.0)))
|
|
(when v1-158
|
|
(set! (-> self skel interp-select 0) 1016)
|
|
(set! (-> self skel interp-select 1) 0)
|
|
(set! (-> v1-158 param 0) 1.0)
|
|
(set! (-> v1-158 param 1) 0.25)
|
|
(set! (-> v1-158 param 2) 0.1)
|
|
(set! (-> v1-158 num-func) num-func-interp1-play!)
|
|
)
|
|
)
|
|
)
|
|
((< f0-28 0.4)
|
|
(let ((v1-163 (ja-channel-float! (the-as art-joint-anim (-> self draw art-group data 9)) 0.0 0.0 0.0)))
|
|
(when v1-163
|
|
(set! (-> self skel interp-select 0) (shl 2032 32))
|
|
(set! (-> self skel interp-select 1) 0)
|
|
(set! (-> v1-163 param 0) 1.0)
|
|
(set! (-> v1-163 param 1) 0.25)
|
|
(set! (-> v1-163 param 2) 0.1)
|
|
(set! (-> v1-163 num-func) num-func-interp1-play!)
|
|
)
|
|
)
|
|
)
|
|
((< f0-28 0.5)
|
|
(let ((v1-168 (ja-channel-float! (the-as art-joint-anim (-> self draw art-group data 10)) 0.0 0.0 0.0)))
|
|
(when v1-168
|
|
(set! (-> self skel interp-select 0) (shl 2032 32))
|
|
(set! (-> self skel interp-select 1) 0)
|
|
(set! (-> v1-168 param 0) 1.0)
|
|
(set! (-> v1-168 param 1) 0.25)
|
|
(set! (-> v1-168 param 2) 0.1)
|
|
(set! (-> v1-168 num-func) num-func-interp1-play!)
|
|
)
|
|
)
|
|
)
|
|
((< f0-28 0.6)
|
|
(let ((v1-172 (ja-channel-float! (the-as art-joint-anim (-> self draw art-group data 11)) 0.0 0.0 0.0)))
|
|
(when v1-172
|
|
(set! (-> self skel interp-select 0) (shl 2032 32))
|
|
(set! (-> self skel interp-select 1) 0)
|
|
(set! (-> v1-172 param 0) 1.0)
|
|
(set! (-> v1-172 param 1) 0.25)
|
|
(set! (-> v1-172 param 2) 0.1)
|
|
(set! (-> v1-172 num-func) num-func-interp1-play!)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
(defbehavior widow-calc-position widow ((arg0 vector) (arg1 float) (arg2 float) (arg3 float))
|
|
(set! (-> arg0 quad) (-> self circle-center quad))
|
|
(let ((s3-0 (+ 32768.0 arg3)))
|
|
(+! (-> arg0 x) (* arg1 (sin s3-0)))
|
|
(+! (-> arg0 y) arg2)
|
|
(+! (-> arg0 z) (* arg1 (cos s3-0)))
|
|
)
|
|
arg0
|
|
)
|
|
|
|
(defbehavior widow-calc-target-position widow ((arg0 vector))
|
|
(let ((s5-1 (vector-! (new 'stack-no-clear 'vector) (-> self circle-center) (target-pos 0))))
|
|
(set! (-> arg0 x) 184320.0)
|
|
(set! (-> arg0 y) 10240.0)
|
|
(set! (-> s5-1 y) 0.0)
|
|
(vector-normalize! s5-1 1.0)
|
|
(if (and *target* (< (cos 18204.445) (-> s5-1 z)))
|
|
(set! (-> arg0 z) (* 11.780972 (fmax -16438.613 (fmin 16438.613 (asin (-> s5-1 x))))))
|
|
(set! (-> arg0 z) 0.0)
|
|
)
|
|
)
|
|
arg0
|
|
)
|
|
|
|
(defbehavior widow-calc-root-from-osc widow ((arg0 float))
|
|
(let* ((v1-1 (vector+! (new 'stack-no-clear 'vector) (-> self osc value) (-> self noise-osc value)))
|
|
(f30-0 (* 0.08488264 (-> v1-1 z)))
|
|
)
|
|
(widow-calc-position (-> self root trans) (-> v1-1 x) (-> v1-1 y) f30-0)
|
|
(let* ((f0-4 (+ 32768.0 f30-0))
|
|
(f30-1 (* 0.5 f0-4))
|
|
)
|
|
(quaternion-set! (-> self root quat) 0.0 (sin f30-1) 0.0 (cos f30-1))
|
|
)
|
|
)
|
|
(set! (-> self tilt target) arg0)
|
|
(update! (-> self tilt) 0.0)
|
|
(let ((v1-7 (-> self tilt value)))
|
|
(when (!= v1-7 0.0)
|
|
(let ((s0-0 (* 0.5 v1-7))
|
|
(gp-1 (new 'stack-no-clear 'quaternion))
|
|
)
|
|
(quaternion-set! gp-1 (sin s0-0) 0.0 0.0 (cos s0-0))
|
|
(quaternion-normalize! (quaternion*! (-> self root quat) (-> self root quat) gp-1))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defbehavior widow-next-pod widow ()
|
|
(+! (-> self which-pod) 1)
|
|
(when (>= (-> self which-pod) 12)
|
|
(set! (-> self which-pod) 0)
|
|
0
|
|
)
|
|
(none)
|
|
)
|
|
|
|
;; WARN: Return type mismatch vector vs none.
|
|
(defbehavior widow-pod-position widow ((arg0 vector) (arg1 symbol) (arg2 float))
|
|
(let ((s4-0 71))
|
|
(when arg1
|
|
(set! (-> arg0 x) (- (-> arg0 x)))
|
|
(set! s4-0 75)
|
|
)
|
|
(vector<-cspace! arg0 (-> self node-list data s4-0))
|
|
(vector-normalize-copy! (the-as vector arg2) (-> self node-list data s4-0 bone transform vector 1) 1638.4)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
(defbehavior spydroid-setup widow ()
|
|
(set! (-> self state-time) (+ (-> self clock frame-counter) (seconds -0.247)))
|
|
(set! (-> self next-launch) -1)
|
|
(set! (-> self next-jumper) -1)
|
|
(none)
|
|
)
|
|
|
|
(defbehavior widow-bomb-setup widow ()
|
|
(set! (-> self state-time) (+ (-> self clock frame-counter) (seconds -0.247)))
|
|
(set! (-> self next-launch) -1)
|
|
(none)
|
|
)
|
|
|
|
(defbehavior spydroid-launch widow ()
|
|
(when (>= (-> self next-jumper) 0)
|
|
(if (send-event (handle->process (-> self bomb (-> self next-jumper))) 'jump 2 (-> self launch-dest))
|
|
(set! (-> self next-jumper) -1)
|
|
)
|
|
)
|
|
(cond
|
|
((>= (-> self bomb-hits) 4)
|
|
0
|
|
)
|
|
((>= (-> self next-launch) 0)
|
|
(when (and (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.25))
|
|
(let ((v1-24 (ja-group)))
|
|
(not (and v1-24 (= v1-24 (-> self draw art-group data 18))))
|
|
)
|
|
(let ((v1-29 (ja-group)))
|
|
(or (not (and v1-29 (or (= v1-29 (-> self draw art-group data 19)) (= v1-29 (-> self draw art-group data 22)))))
|
|
(< 12.0 (ja-frame-num 0))
|
|
)
|
|
)
|
|
)
|
|
(let* ((a1-3 (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 3)))
|
|
(gp-1 (< (the int (vector-dot
|
|
(vector-! (new 'stack-no-clear 'vector) (-> self launch-dest) a1-3)
|
|
(the-as vector (-> self node-list data 3 bone transform))
|
|
)
|
|
)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
(cond
|
|
(gp-1
|
|
(set! (-> self left-cover-angle target) 0.0)
|
|
(set! (-> self right-cover-angle target) 1.0)
|
|
)
|
|
(else
|
|
(set! (-> self left-cover-angle target) 1.0)
|
|
(set! (-> self right-cover-angle target) 0.0)
|
|
)
|
|
)
|
|
(when (or (and (not gp-1) (< 0.95 (-> self left-cover-angle value)))
|
|
(and gp-1 (< 0.95 (-> self right-cover-angle value)))
|
|
)
|
|
(let ((s5-0 (new 'stack-no-clear 'matrix3)))
|
|
(let ((s4-0 (new 'stack-no-clear 'vector)))
|
|
(let ((a2-1 (new 'stack-no-clear 'vector)))
|
|
(widow-pod-position s4-0 gp-1 (the-as float a2-1))
|
|
)
|
|
(set! (-> s5-0 vector 0 quad) (-> s4-0 quad))
|
|
)
|
|
(quaternion-copy! (the-as quaternion (-> s5-0 vector 1)) (-> self root quat))
|
|
(set! (-> s5-0 vector 2 x) (the-as float (-> self entity)))
|
|
(set! (-> s5-0 vector 2 y) (the-as float #t))
|
|
(set! (-> s5-0 vector 2 z) (the-as float #t))
|
|
(let ((s4-1 (get-process *default-dead-pool* spydroid #x4000)))
|
|
(set! (-> self bomb (-> self next-launch))
|
|
(ppointer->handle (when s4-1
|
|
(let ((t9-6 (method-of-type process activate)))
|
|
(t9-6 s4-1 self (symbol->string (-> spydroid symbol)) (the-as pointer #x70004000))
|
|
)
|
|
(run-now-in-process s4-1 enemy-init-by-other self s5-0)
|
|
(-> s4-1 ppointer)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when (handle->process (-> self bomb (-> self next-launch)))
|
|
(if gp-1
|
|
(process-spawn
|
|
part-tracker
|
|
:init part-tracker-init
|
|
(-> *part-group-id-table* 721)
|
|
300
|
|
#f
|
|
#f
|
|
#f
|
|
(-> self node-list data 75 bone transform)
|
|
:to *entity-pool*
|
|
)
|
|
(process-spawn
|
|
part-tracker
|
|
:init part-tracker-init
|
|
(-> *part-group-id-table* 721)
|
|
300
|
|
#f
|
|
#f
|
|
#f
|
|
(-> self node-list data 71 bone transform)
|
|
:to *entity-pool*
|
|
)
|
|
)
|
|
(set! (-> self state-time) (-> self clock frame-counter))
|
|
(let* ((s5-3 (-> self state-time))
|
|
(f30-1 75.0)
|
|
(v1-89 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-90 (the-as number (logior #x3f800000 v1-89)))
|
|
)
|
|
(set! (-> self state-time) (+ s5-3 (the int (* f30-1 (+ -1.0 (the-as float v1-90))))))
|
|
)
|
|
(widow-next-pod)
|
|
(if gp-1
|
|
(ja :group! (-> self draw art-group data 22) :num! min)
|
|
(ja :group! (-> self draw art-group data 19) :num! min)
|
|
)
|
|
(set! (-> self next-jumper) (-> self next-launch))
|
|
(set! (-> self next-launch) -1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
1
|
|
)
|
|
(else
|
|
(let ((gp-0 0))
|
|
(let ((s5-4 (new 'stack-no-clear 'array 'int32 8)))
|
|
(dotimes (v1-106 7)
|
|
(when (not (handle->process (-> self bomb v1-106)))
|
|
(set! (-> s5-4 gp-0) v1-106)
|
|
(+! gp-0 1)
|
|
)
|
|
)
|
|
(cond
|
|
((> gp-0 0)
|
|
(let* ((v1-110 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-111 (the-as number (logior #x3f800000 v1-110)))
|
|
)
|
|
(set! (-> self next-launch)
|
|
(-> s5-4 (the int (* (+ -1.0 (the-as float v1-111)) (+ -0.0001 (the float gp-0)))))
|
|
)
|
|
)
|
|
(let* ((f30-2 184320.0)
|
|
(f28-0 8192.0)
|
|
(v1-121 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-122 (the-as number (logior #x3f800000 v1-121)))
|
|
(f30-3 (+ f30-2 (* f28-0 (+ -1.0 (the-as float v1-122)))))
|
|
(f28-1 (+ -13289.244 (* 4429.748 (the float (-> self next-launch)))))
|
|
(f26-0 -728.1778)
|
|
(f24-0 1456.3556)
|
|
(v1-130 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-131 (the-as number (logior #x3f800000 v1-130)))
|
|
(f28-2 (+ f26-0 (* f24-0 (+ -1.0 (the-as float v1-131))) f28-1))
|
|
(f30-4 (- f30-3))
|
|
)
|
|
(set-vector! (-> self launch-dest) (* (sin f28-2) f30-4) 0.0 (* (cos f28-2) f30-4) 1.0)
|
|
)
|
|
(vector+! (-> self launch-dest) (-> self launch-dest) (-> self circle-center))
|
|
)
|
|
(else
|
|
(set! gp-0 0)
|
|
)
|
|
)
|
|
)
|
|
gp-0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defbehavior widow-bomb-launch widow ((arg0 symbol) (arg1 symbol) (arg2 symbol))
|
|
(cond
|
|
((>= (-> self bomb-hits) 4)
|
|
0
|
|
)
|
|
((>= (-> self next-launch) 0)
|
|
(when (and (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.25))
|
|
(let ((v1-8 (ja-group)))
|
|
(not (and v1-8 (= v1-8 (-> self draw art-group data 18))))
|
|
)
|
|
(let ((v1-13 (ja-group)))
|
|
(or (not (and v1-13 (or (= v1-13 (-> self draw art-group data 19))
|
|
(= v1-13 (-> self draw art-group data 22))
|
|
(= v1-13 (-> self draw art-group data 32))
|
|
(= v1-13 (-> self draw art-group data 33))
|
|
)
|
|
)
|
|
)
|
|
(< 12.0 (ja-frame-num 0))
|
|
)
|
|
)
|
|
)
|
|
(let* ((a1-5 (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 3)))
|
|
(s4-1 (< (the int (vector-dot
|
|
(vector-! (new 'stack-no-clear 'vector) (-> self launch-dest) a1-5)
|
|
(the-as vector (-> self node-list data 3 bone transform))
|
|
)
|
|
)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
(cond
|
|
(s4-1
|
|
(set! (-> self left-cover-angle target) 0.0)
|
|
(set! (-> self right-cover-angle target) 1.0)
|
|
)
|
|
(else
|
|
(set! (-> self left-cover-angle target) 1.0)
|
|
(set! (-> self right-cover-angle target) 0.0)
|
|
)
|
|
)
|
|
(when (or (and (not s4-1) (< 0.95 (-> self left-cover-angle value)))
|
|
(and s4-1 (< 0.95 (-> self right-cover-angle value)))
|
|
)
|
|
(let ((s3-0 (new 'stack-no-clear 'vector))
|
|
(s2-0 (new 'stack-no-clear 'array 'float 1))
|
|
)
|
|
(widow-pod-position s3-0 s4-1 (the-as float s2-0))
|
|
(set! (-> self bomb (-> self next-launch))
|
|
(ppointer->handle (process-spawn widow-bomb s3-0 (-> self launch-dest) #x43e10000 #x46c00000 s2-0 :to self))
|
|
)
|
|
)
|
|
(when (handle->process (-> self bomb (-> self next-launch)))
|
|
(if s4-1
|
|
(process-spawn
|
|
part-tracker
|
|
:init part-tracker-init
|
|
(-> *part-group-id-table* 721)
|
|
300
|
|
#f
|
|
#f
|
|
#f
|
|
(-> self node-list data 75 bone transform)
|
|
:to *entity-pool*
|
|
)
|
|
(process-spawn
|
|
part-tracker
|
|
:init part-tracker-init
|
|
(-> *part-group-id-table* 721)
|
|
300
|
|
#f
|
|
#f
|
|
#f
|
|
(-> self node-list data 71 bone transform)
|
|
:to *entity-pool*
|
|
)
|
|
)
|
|
(set! (-> self state-time) (-> self clock frame-counter))
|
|
(let* ((s3-3 (-> self state-time))
|
|
(f30-1 75.0)
|
|
(v1-68 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-69 (the-as number (logior #x3f800000 v1-68)))
|
|
)
|
|
(set! (-> self state-time) (+ s3-3 (the int (* f30-1 (+ -1.0 (the-as float v1-69))))))
|
|
)
|
|
(widow-next-pod)
|
|
(ja-channel-push! 1 (seconds 0.03))
|
|
(cond
|
|
(arg0
|
|
(if s4-1
|
|
(ja :group! (-> self draw art-group data 35) :num! min)
|
|
(ja :group! (-> self draw art-group data 34) :num! min)
|
|
)
|
|
)
|
|
(arg1
|
|
(if s4-1
|
|
(ja :group! (-> self draw art-group data 33) :num! min)
|
|
(ja :group! (-> self draw art-group data 32) :num! min)
|
|
)
|
|
)
|
|
(s4-1
|
|
(ja :group! (-> self draw art-group data 22) :num! min)
|
|
)
|
|
(else
|
|
(ja :group! (-> self draw art-group data 19) :num! min)
|
|
)
|
|
)
|
|
(set! (-> self launched-a-bomb) #t)
|
|
(set! (-> self next-launch) -1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
1
|
|
)
|
|
(else
|
|
(let ((gp-1 0))
|
|
(let ((s5-1 (if arg2
|
|
8
|
|
7
|
|
)
|
|
)
|
|
(f30-2 (if arg2
|
|
14563.556
|
|
13289.244
|
|
)
|
|
)
|
|
(s3-4 (new 'stack-no-clear 'array 'int32 8))
|
|
)
|
|
(dotimes (v1-106 s5-1)
|
|
(when (not (handle->process (-> self bomb v1-106)))
|
|
(set! (-> s3-4 gp-1) v1-106)
|
|
(+! gp-1 1)
|
|
)
|
|
)
|
|
(cond
|
|
((> gp-1 0)
|
|
(let* ((v1-110 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-111 (the-as number (logior #x3f800000 v1-110)))
|
|
)
|
|
(set! (-> self next-launch)
|
|
(-> s3-4 (the int (* (+ -1.0 (the-as float v1-111)) (+ -0.0001 (the float gp-1)))))
|
|
)
|
|
)
|
|
(let* ((f28-0 184320.0)
|
|
(f26-0 8192.0)
|
|
(v1-121 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-122 (the-as number (logior #x3f800000 v1-121)))
|
|
(f28-1 (+ f28-0 (* f26-0 (+ -1.0 (the-as float v1-122)))))
|
|
(f30-3
|
|
(+ (- f30-2) (* (the float (-> self next-launch)) (the float (/ (the int (* 2.0 f30-2)) (+ s5-1 -1)))))
|
|
)
|
|
(f30-4 (cond
|
|
((not arg2)
|
|
(let* ((f26-1 -910.2222)
|
|
(f24-0 1820.4445)
|
|
(v1-131 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-132 (the-as number (logior #x3f800000 v1-131)))
|
|
)
|
|
(+ f26-1 (* f24-0 (+ -1.0 (the-as float v1-132))) f30-3)
|
|
)
|
|
)
|
|
((< (-> self osc value z) (* 11.780972 f30-3))
|
|
(+ -728.1778 f30-3)
|
|
)
|
|
(else
|
|
(+ 728.1778 f30-3)
|
|
)
|
|
)
|
|
)
|
|
(f28-2 (- f28-1))
|
|
)
|
|
(set-vector! (-> self launch-dest) (* (sin f30-4) f28-2) 0.0 (* (cos f30-4) f28-2) 1.0)
|
|
)
|
|
(vector+! (-> self launch-dest) (-> self launch-dest) (-> self circle-center))
|
|
)
|
|
(else
|
|
(set! gp-1 0)
|
|
)
|
|
)
|
|
)
|
|
gp-1
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; WARN: Return type mismatch symbol vs none.
|
|
(defbehavior widow-give-ammo widow ()
|
|
(dotimes (gp-0 2)
|
|
(cond
|
|
((handle->process (-> self ammos gp-0))
|
|
(set! (-> self ammo-timers gp-0) (-> self clock frame-counter))
|
|
)
|
|
((>= (- (-> self clock frame-counter) (-> self ammo-timers gp-0)) (seconds 20))
|
|
(let ((s4-0 (new 'static 'fact-info))
|
|
(s5-0 (new 'stack-no-clear 'vector))
|
|
)
|
|
(set! (-> s5-0 quad) (-> self circle-center quad))
|
|
(let ((s3-0 (new 'stack-no-clear 'vector)))
|
|
(set-vector! s3-0 0.0 57001.605 -16384.0 1.0)
|
|
(if (zero? gp-0)
|
|
(set! (-> s5-0 x) (+ 192512.0 (-> s5-0 x)))
|
|
(set! (-> s5-0 x) (+ -192512.0 (-> s5-0 x)))
|
|
)
|
|
(set! (-> s4-0 options) (actor-option))
|
|
(set! (-> s4-0 pickup-type) (pickup-type ammo-red))
|
|
(set! (-> s4-0 pickup-spawn-amount) 20.0)
|
|
(set! (-> s4-0 fade-time) 0)
|
|
(set! (-> self ammos gp-0) (ppointer->handle (process-spawn
|
|
ammo-collectable
|
|
:init initialize-ammo-by-other
|
|
s5-0
|
|
s3-0
|
|
s4-0
|
|
:from *pickup-dead-pool*
|
|
:to self
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(let ((v1-32 (handle->process (-> self ammos gp-0))))
|
|
(when v1-32
|
|
(logclear! (-> (the-as collectable v1-32) flags) (collectable-flag fadeout))
|
|
(set! (-> self ammo-timers gp-0) (-> self clock frame-counter))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
(defbehavior widow-bomb-slots-full widow ()
|
|
(let ((v0-0 0))
|
|
(let ((v1-0 (new 'stack-no-clear 'array 'int32 8)))
|
|
(dotimes (a0-0 8)
|
|
(when (handle->process (-> self bomb a0-0))
|
|
(set! (-> v1-0 v0-0) a0-0)
|
|
(+! v0-0 1)
|
|
)
|
|
)
|
|
)
|
|
v0-0
|
|
)
|
|
)
|
|
|
|
;; WARN: Return type mismatch symbol vs none.
|
|
(defbehavior widow-debug widow ()
|
|
(when (and (cpad-hold? 0 r1) (cpad-hold? 0 r2) (cpad-hold? 0 l1) (cpad-hold? 0 l2))
|
|
(dotimes (gp-0 8)
|
|
(let ((a0-5 (handle->process (-> self bomb gp-0))))
|
|
(if a0-5
|
|
(deactivate a0-5)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
(if (not *debug-segment*)
|
|
(set! widow-debug (the-as (function none :behavior widow) nothing))
|
|
)
|
|
|
|
;; WARN: Return type mismatch float vs none.
|
|
(defbehavior widow-cleanup-launch-anim widow ((arg0 symbol))
|
|
(let ((v1-2 (ja-group)))
|
|
(cond
|
|
((and v1-2 (or (= v1-2 (-> self draw art-group data 18))
|
|
(= v1-2 (-> self draw art-group data 28))
|
|
(= v1-2 (-> self draw art-group data 29))
|
|
(= v1-2 (-> self draw art-group data 30))
|
|
(= v1-2 (-> self draw art-group data 31))
|
|
)
|
|
)
|
|
(ja :num! (seek!))
|
|
(when (ja-done? 0)
|
|
(let* ((v1-14 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-15 (the-as number (logior #x3f800000 v1-14)))
|
|
)
|
|
(if (or (< (+ -1.0 (the-as float v1-15)) 0.5) (not arg0))
|
|
(ja :group! (-> self draw art-group data 20) :num! min)
|
|
(ja :group! (-> self draw art-group data 21) :num! min)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
((let ((v1-30 (ja-group)))
|
|
(and v1-30 (or (= v1-30 (-> self draw art-group data 20)) (= v1-30 (-> self draw art-group data 21))))
|
|
)
|
|
(ja :num! (seek!))
|
|
(if (ja-done? 0)
|
|
(ja :group! (-> self draw art-group data 7) :num! (identity 26.0))
|
|
)
|
|
)
|
|
((let ((v1-48 (ja-group)))
|
|
(not (and v1-48 (= v1-48 (-> self draw art-group data 8))))
|
|
)
|
|
(ja :num! (seek!))
|
|
(when (ja-done? 0)
|
|
(ja :group! (-> self draw art-group data 8) :num! min)
|
|
(set! (-> self drill-speed target) 1.0)
|
|
(jump-to-target! (-> self drill-speed) 0.0)
|
|
)
|
|
)
|
|
(else
|
|
(let ((f30-0 (ja-frame-num 0)))
|
|
(ja :num! (loop!))
|
|
(cond
|
|
((and arg0 (< (ja-frame-num 0) f30-0) (let* ((v1-73 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-74 (the-as number (logior #x3f800000 v1-73)))
|
|
)
|
|
(< (+ -1.0 (the-as float v1-74)) 0.125)
|
|
)
|
|
)
|
|
(set! (-> self drill-speed target) 0.0)
|
|
(ja :group! (-> self draw art-group data 18) :num! min)
|
|
)
|
|
(else
|
|
(set! (-> self drill-speed target) 1.0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
;; WARN: Return type mismatch float vs none.
|
|
(defbehavior widow-last-bomb-anim widow ()
|
|
(let ((v1-2 (ja-group)))
|
|
(cond
|
|
((and v1-2 (or (= v1-2 (-> self draw art-group data 18))
|
|
(= v1-2 (-> self draw art-group data 28))
|
|
(= v1-2 (-> self draw art-group data 29))
|
|
(= v1-2 (-> self draw art-group data 30))
|
|
(= v1-2 (-> self draw art-group data 31))
|
|
(= v1-2 (-> self draw art-group data 32))
|
|
(= v1-2 (-> self draw art-group data 33))
|
|
)
|
|
)
|
|
(ja :num! (seek!))
|
|
(when (ja-done? 0)
|
|
(let* ((f30-0 2.999)
|
|
(v1-15 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-16 (the-as number (logior #x3f800000 v1-15)))
|
|
(v1-18 (the int (* f30-0 (+ -1.0 (the-as float v1-16)))))
|
|
)
|
|
(if (>= v1-18 (-> self previous-anim))
|
|
(+! v1-18 1)
|
|
)
|
|
(set! (-> self previous-anim) v1-18)
|
|
(cond
|
|
((zero? v1-18)
|
|
(ja :group! (-> self draw art-group data 28) :num! min)
|
|
)
|
|
((= v1-18 1)
|
|
(ja :group! (-> self draw art-group data 29) :num! min)
|
|
)
|
|
((= v1-18 2)
|
|
(ja :group! (-> self draw art-group data 30) :num! min)
|
|
)
|
|
(else
|
|
(ja :group! (-> self draw art-group data 31) :num! min)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(ja :num! (seek!))
|
|
(when (ja-done? 0)
|
|
(ja :group! (-> self draw art-group data 18) :num! min)
|
|
(set! (-> self drill-speed target) 0.0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
;; WARN: Return type mismatch number vs none.
|
|
(defbehavior widow-flying-anim widow ()
|
|
(let ((v1-2 (ja-group)))
|
|
(cond
|
|
((and v1-2 (= v1-2 (-> self draw art-group data 5)))
|
|
(ja :num! (loop!))
|
|
)
|
|
(else
|
|
(ja :num! (seek!))
|
|
(when (ja-done? 0)
|
|
(ja :group! (-> self draw art-group data 5) :num! min)
|
|
(set! (-> self drill-speed target) 0.0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
;; WARN: Return type mismatch object vs none.
|
|
(defbehavior widow-kaboom-check widow ((arg0 symbol))
|
|
(if (and arg0
|
|
(>= (-> self bomb-hits) 4)
|
|
(or (not *target*) (zero? (logand (-> *target* focus-status) (focus-status dead))))
|
|
)
|
|
(go-virtual kaboom)
|
|
)
|
|
(if (>= (-> self bomb-hits) 3)
|
|
(eval!
|
|
(new 'stack 'script-context (the-as basic (process->ppointer self)) self (the-as vector #f))
|
|
'(want-anim "tomb-boss-res")
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
(defstate beaten (widow)
|
|
:virtual #t
|
|
:enter (behavior ()
|
|
(ja-channel-set! 0)
|
|
(ja-post)
|
|
(when (-> self hover-sound-playing)
|
|
(sound-stop (the-as sound-id (-> self hover-sound)))
|
|
(set! (-> self hover-sound-playing) #f)
|
|
)
|
|
(send-event (handle->process (-> self hud)) 'hide-and-die)
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(ja-channel-push! 1 0)
|
|
(ja :group! (-> self draw art-group data 8) :num! min)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
)
|
|
|
|
(defstate kaboom (widow)
|
|
:virtual #t
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(set-setting! 'music #f 0 0)
|
|
(dotimes (gp-0 8)
|
|
(let ((a0-2 (handle->process (-> self bomb gp-0))))
|
|
(if a0-2
|
|
(send-event a0-2 'fizzle)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> self bomb-hits) 0)
|
|
(set! (-> self flying) #t)
|
|
(setup-masks (-> self draw) 64 0)
|
|
(send-event (handle->process (-> self pod)) 'finale)
|
|
(send-event (ppointer->process (-> self baron)) 'finale)
|
|
(set! (-> self osc target y) 40960.0)
|
|
(set! (-> self osc target z) 0.0)
|
|
(ja-channel-push! 1 (seconds 0.03))
|
|
(ja :group! (-> self draw art-group data 38) :num! min)
|
|
(setup-masks (-> self draw) 2 128)
|
|
(process-grab? *target* #f)
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(process-release? *target*)
|
|
(let ((v1-2 (-> self entity extra perm)))
|
|
(logior! (-> v1-2 status) (entity-perm-status bit-5))
|
|
(let ((v0-1 0))
|
|
(dotimes (a0-3 8)
|
|
(if (not (handle->process (-> self catwalk a0-3)))
|
|
(set! v0-1 (logior v0-1 (ash 1 a0-3)))
|
|
)
|
|
)
|
|
(set! (-> v1-2 user-object 1) v0-1)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(ja :num! (seek!))
|
|
(when (ja-done? 0)
|
|
(process-spawn scene-player :init scene-player-init "tomb-boss-res" #t #f)
|
|
(remove-setting! 'music)
|
|
(deactivate (-> self baron 0))
|
|
(let ((a0-8 (handle->process (-> self pod))))
|
|
(if a0-8
|
|
(deactivate a0-8)
|
|
)
|
|
)
|
|
(go-virtual beaten)
|
|
)
|
|
(widow-common)
|
|
(widow-calc-root-from-osc 0.0)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate hover-low-stage-3 (widow)
|
|
:virtual #t
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(set! (-> self osc target y) -122880.0)
|
|
(set! (-> self attack-from-high-deg) (not (-> self attack-from-high-deg)))
|
|
(set! (-> self flying) #t)
|
|
(set! (-> self old-bomb-hits) (-> self bomb-hits))
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(widow-kaboom-check #t)
|
|
(if (< (-> self osc value y) (+ 8192.0 (-> self osc target y)))
|
|
(go-virtual hover-rise-stage-3)
|
|
)
|
|
(widow-flying-anim)
|
|
(widow-common)
|
|
(widow-calc-root-from-osc 0.0)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate hover-shooting-stage-3 (widow)
|
|
:virtual #t
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(widow-shoot-gun-talker)
|
|
(ja-channel-push! 1 (seconds 0.02))
|
|
(ja :group! (-> self draw art-group data 15) :num! min)
|
|
(set! (-> self which-gun) 0)
|
|
(set! (-> self flying) #t)
|
|
(set! (-> self state-time) (-> self clock frame-counter))
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(let ((v1-2 (ja-group)))
|
|
(if (not (and v1-2 (or (= v1-2 (-> self draw art-group data 38))
|
|
(= v1-2 (-> self draw art-group data 37))
|
|
(= v1-2 (-> self draw art-group data 36))
|
|
)
|
|
)
|
|
)
|
|
(ja :group! (-> self draw art-group data 17) :num! min)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(widow-kaboom-check #t)
|
|
(if (< (-> self old-bomb-hits) (-> self bomb-hits))
|
|
(go-virtual hover-low-stage-3)
|
|
)
|
|
(let ((a0-3 (widow-calc-target-position (new 'stack-no-clear 'vector)))
|
|
(v1-5 #t)
|
|
)
|
|
(set! (-> self osc target y) (+ -6144.0 (-> a0-3 y)))
|
|
(cond
|
|
((not (-> self attack-from-high-deg))
|
|
(set! (-> self osc target z) (fmin 193019.44 (+ 21446.604 (-> a0-3 z))))
|
|
(when (< (+ 2457.6 (-> self osc value z)) (-> self osc target z))
|
|
(set! (-> self osc target z) (+ 2457.6 (-> self osc value z)))
|
|
(set! v1-5 #f)
|
|
)
|
|
)
|
|
(else
|
|
(set! (-> self osc target z)
|
|
(fmax (fmax -193019.44 (+ -21446.604 (-> a0-3 z))) (+ -2457.6 (-> self osc value z)))
|
|
)
|
|
(when (< (-> self osc target z) (+ -2457.6 (-> self osc value z)))
|
|
(set! (-> self osc target z) (+ -2457.6 (-> self osc value z)))
|
|
(set! v1-5 #f)
|
|
)
|
|
)
|
|
)
|
|
(set! v1-5 (and (< (fabs (- (-> self osc value z) (-> self osc target z))) 1024.0)
|
|
(and (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.007)) v1-5)
|
|
)
|
|
)
|
|
(if v1-5
|
|
(go-virtual hover-low-stage-3)
|
|
)
|
|
)
|
|
(ja :num! (seek!))
|
|
(let ((v1-22 (ja-group)))
|
|
(when (and (and v1-22 (= v1-22 (-> self draw art-group data 16)))
|
|
(>= (ja-frame-num 0) (the float (-> self which-gun)))
|
|
)
|
|
(let ((v1-28 (-> self which-gun)))
|
|
(cond
|
|
((zero? v1-28)
|
|
(widow-method-46 self (the-as vector #t) 84)
|
|
(set! (-> self which-gun) 2)
|
|
)
|
|
((= v1-28 2)
|
|
(widow-method-46 self (the-as vector #t) 87)
|
|
(set! (-> self which-gun) 4)
|
|
)
|
|
((= v1-28 4)
|
|
(widow-method-46 self (the-as vector #t) 82)
|
|
(set! (-> self which-gun) 6)
|
|
)
|
|
((= v1-28 6)
|
|
(widow-method-46 self (the-as vector #t) 89)
|
|
(set! (-> self which-gun) 100)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when (ja-done? 0)
|
|
(ja :group! (-> self draw art-group data 16) :num! min)
|
|
(set! (-> self which-gun) 0)
|
|
0
|
|
)
|
|
(widow-common)
|
|
(widow-calc-root-from-osc 0.0)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate hover-launch-bombs-stage-3 (widow)
|
|
:virtual #t
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(widow-launch-bombs-talker)
|
|
(set! (-> self osc target x) 135168.0)
|
|
(set! (-> self flying) #t)
|
|
(widow-bomb-setup)
|
|
(set! (-> self launched-a-bomb) #f)
|
|
(set! (-> self osc damping) 0.8)
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(set! (-> self left-cover-angle target) 0.0)
|
|
(set! (-> self right-cover-angle target) 0.0)
|
|
(set! (-> self osc damping) 0.98)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(widow-kaboom-check #t)
|
|
(if (< (-> self old-bomb-hits) (-> self bomb-hits))
|
|
(go-virtual hover-low-stage-3)
|
|
)
|
|
(widow-flying-anim)
|
|
(cond
|
|
((or (< (widow-bomb-slots-full) 2) (not (-> self launched-a-bomb)))
|
|
(widow-bomb-launch (-> self flying) #f #t)
|
|
)
|
|
((>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 2.25))
|
|
(go-virtual hover-shooting-stage-3)
|
|
)
|
|
(else
|
|
(set! (-> self left-cover-angle target) 0.0)
|
|
(set! (-> self right-cover-angle target) 0.0)
|
|
)
|
|
)
|
|
(let ((v1-15 (widow-calc-target-position (new 'stack-no-clear 'vector))))
|
|
(set! (-> self osc target y) (-> v1-15 y))
|
|
(if (-> self attack-from-high-deg)
|
|
(set! (-> self osc target z) (fmin 193019.44 (+ 42893.207 (-> v1-15 z))))
|
|
(set! (-> self osc target z) (fmax -193019.44 (+ -42893.207 (-> v1-15 z))))
|
|
)
|
|
)
|
|
(widow-common)
|
|
(widow-calc-root-from-osc 0.0)
|
|
(widow-debug)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate hover-big-blast-stage-3 (widow)
|
|
:virtual #t
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(set! (-> self state-time) 0)
|
|
(let* ((f0-1 (* 0.08488264 (-> self osc value z)))
|
|
(v1-2 (max 0 (min 8 (+ (the int (* 0.00024968927 (+ 14017.422 f0-1))) 1))))
|
|
)
|
|
(cond
|
|
((handle->process (-> self catwalk v1-2))
|
|
(set! (-> self osc target z) (* 11.780972 (+ -12014.934 (* 4004.9778 (the float (+ v1-2 -1))))))
|
|
(set! (-> self osc target y) (+ -4096.0 (-> self osc target y)))
|
|
(set! (-> self targetted-catwalk) v1-2)
|
|
(widow-stone-charge-up-talker)
|
|
(set! (-> self stop-catwalk-sound) #t)
|
|
(set! (-> self catwalk-sound)
|
|
(the-as uint (add-process *gui-control* self (gui-channel jak) (gui-action queue) "cwlkfall" -99.0 0))
|
|
)
|
|
)
|
|
(else
|
|
(set! (-> self stop-catwalk-sound) #f)
|
|
(go-virtual hover-launch-bombs-stage-3)
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(dotimes (v1-0 5)
|
|
(case (-> self lightning v1-0 state mode)
|
|
(((lightning-mode lm0) (lightning-mode lm3))
|
|
)
|
|
(else
|
|
(let ((a0-7 (-> self lightning v1-0))
|
|
(a1-2 3)
|
|
)
|
|
(let ((a2-1 (!= a1-2 (-> a0-7 state mode))))
|
|
(case a1-2
|
|
((3)
|
|
(if a2-1
|
|
(set! (-> a0-7 state counter) 0.0)
|
|
)
|
|
)
|
|
((1)
|
|
(set! (-> a0-7 state start-color) (-> a0-7 spec start-color))
|
|
(set! (-> a0-7 state end-color) (-> a0-7 spec end-color))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> a0-7 state mode) (the-as lightning-mode a1-2))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when (-> self shake-sound-playing)
|
|
(sound-stop (the-as sound-id (-> self shake-sound)))
|
|
(set! (-> self shake-sound-playing) #f)
|
|
)
|
|
(if (-> self stop-catwalk-sound)
|
|
(set-action!
|
|
*gui-control*
|
|
(gui-action stop)
|
|
(the-as sound-id (-> self catwalk-sound))
|
|
(gui-channel none)
|
|
(gui-action none)
|
|
(the-as string #f)
|
|
(the-as (function gui-connection symbol) #f)
|
|
(the-as process #f)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(local-vars (v1-39 symbol) (sv-256 baron-pod) (sv-272 symbol) (sv-288 int) (sv-304 vector) (sv-320 vector))
|
|
(rlet ((vf0 :class vf)
|
|
(vf1 :class vf)
|
|
(vf2 :class vf)
|
|
)
|
|
(init-vf0-vector)
|
|
(widow-kaboom-check #t)
|
|
(if (< (-> self old-bomb-hits) (-> self bomb-hits))
|
|
(go-virtual hover-low-stage-3)
|
|
)
|
|
(cond
|
|
((or (< 4096.0 (fabs (- (-> self osc value z) (-> self osc target z))))
|
|
(< 4096.0 (fabs (- (-> self osc value y) (-> self osc target y))))
|
|
)
|
|
)
|
|
((zero? (-> self state-time))
|
|
(set! (-> self state-time) (-> self clock frame-counter))
|
|
(sound-play "widow-charge")
|
|
)
|
|
((>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 3))
|
|
(widow-after-stone-shot-talker)
|
|
(set! (-> self stop-catwalk-sound) #f)
|
|
(set-action!
|
|
*gui-control*
|
|
(gui-action play)
|
|
(the-as sound-id (-> self catwalk-sound))
|
|
(gui-channel none)
|
|
(gui-action none)
|
|
(the-as string #f)
|
|
(the-as (function gui-connection symbol) #f)
|
|
(the-as process #f)
|
|
)
|
|
(set-falloff! *gui-control* (the-as sound-id (-> self catwalk-sound)) #t -1 200 2)
|
|
(activate! *camera-smush-control* 1228.8 75 270 1.0 0.5 (-> self clock))
|
|
(send-event (handle->process (-> self catwalk (-> self targetted-catwalk))) 'green-hit)
|
|
(go-virtual hover-launch-bombs-stage-3)
|
|
)
|
|
)
|
|
(when (and (nonzero? (-> self state-time)) (nonzero? (-> self green-charge-part)))
|
|
;; manually rewritten stack var handle->process
|
|
(if (-> self pod)
|
|
(set! sv-256 (the-as baron-pod (handle->process (-> self pod))))
|
|
)
|
|
(when sv-256
|
|
(let ((gp-1 (vector<-cspace! (new 'stack-no-clear 'vector) (-> sv-256 node-list data 4))))
|
|
(cond
|
|
((>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 2))
|
|
(when (-> self shake-sound-playing)
|
|
(sound-stop (the-as sound-id (-> self shake-sound)))
|
|
(set! (-> self shake-sound-playing) #f)
|
|
)
|
|
)
|
|
(else
|
|
(spawn (-> self green-charge-part) gp-1)
|
|
(sound-play "widow-shake" :id (the-as sound-id (-> self shake-sound)) :position gp-1)
|
|
(set! (-> self shake-sound-playing) #t)
|
|
)
|
|
)
|
|
(let ((s5-1 (new 'stack-no-clear 'vector))
|
|
(s4-0 (new 'stack-no-clear 'vector))
|
|
(s3-0 (new 'stack-no-clear 'vector))
|
|
(s2-0 (new 'stack-no-clear 'vector))
|
|
(s1-0 (new 'stack-no-clear 'vector))
|
|
(s0-0 (new 'stack-no-clear 'matrix))
|
|
)
|
|
(vector-normalize-copy! s2-0 (-> sv-256 node-list data 4 bone transform vector 1) 1.0)
|
|
(vector-float*! s5-1 s2-0 61440.0)
|
|
(vector+! s5-1 s5-1 gp-1)
|
|
(vector-! s1-0 s5-1 gp-1)
|
|
(vector-normalize! s1-0 1.0)
|
|
(matrix-axis-angle! s0-0 s1-0 13107.2)
|
|
(vector-reset! (-> s0-0 trans))
|
|
(set-vector! s4-0 (-> s1-0 z) 0.0 (- (-> s1-0 x)) 1.0)
|
|
(vector-normalize! s4-0 409.6)
|
|
(when (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 2))
|
|
(set! sv-272 (the-as symbol #f))
|
|
(set! sv-288 0)
|
|
(while (< sv-288 5)
|
|
(case (-> self lightning sv-288 state mode)
|
|
(((lightning-mode lm0) (lightning-mode lm3))
|
|
(let ((v1-78 (-> self lightning sv-288))
|
|
(a0-35 1)
|
|
)
|
|
(let ((a1-19 (!= a0-35 (-> v1-78 state mode))))
|
|
(case a0-35
|
|
((3)
|
|
(if a1-19
|
|
(set! (-> v1-78 state counter) 0.0)
|
|
)
|
|
)
|
|
((1)
|
|
(set! (-> v1-78 state start-color) (-> v1-78 spec start-color))
|
|
(set! (-> v1-78 state end-color) (-> v1-78 spec end-color))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> v1-78 state mode) (the-as lightning-mode a0-35))
|
|
)
|
|
(set! sv-272 #t)
|
|
sv-272
|
|
)
|
|
)
|
|
(vector-matrix*! s4-0 s4-0 s0-0)
|
|
(vector+! s1-0 s4-0 gp-1)
|
|
(let ((a0-38 (-> self lightning sv-288))
|
|
(v1-85 s1-0)
|
|
)
|
|
(set! (-> a0-38 state meet data 0 quad) (-> v1-85 quad))
|
|
)
|
|
(set! sv-320 s3-0)
|
|
(set! sv-304 s2-0)
|
|
(let ((f0-9 (rand-vu-float-range -8192.0 8192.0)))
|
|
(.lvf vf1 (&-> sv-304 quad))
|
|
(let ((v1-88 f0-9))
|
|
(.mov vf2 v1-88)
|
|
)
|
|
)
|
|
(.add.x.vf vf1 vf0 vf0 :mask #b1000)
|
|
(.mul.x.vf vf1 vf1 vf2 :mask #b111)
|
|
(.svf (&-> sv-320 quad) vf1)
|
|
(vector+! s3-0 s3-0 s5-1)
|
|
(let ((a0-43 (-> self lightning sv-288))
|
|
(v1-94 s3-0)
|
|
)
|
|
(set! (-> a0-43 state meet data (+ (-> a0-43 state points-to-draw) -1) quad) (-> v1-94 quad))
|
|
)
|
|
(set! sv-288 (+ sv-288 1))
|
|
)
|
|
(if sv-272
|
|
(sound-play "widow-lightning" :position gp-1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(widow-flying-anim)
|
|
(widow-common)
|
|
(widow-calc-root-from-osc 1820.4445)
|
|
(widow-debug)
|
|
(none)
|
|
)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate hover-rise-stage-3 (widow)
|
|
:virtual #t
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(set! (-> self osc target x) 135168.0)
|
|
(set! (-> self flying) #t)
|
|
(set! (-> self state-time) (-> self clock frame-counter))
|
|
(set! (-> self osc damping) 0.9)
|
|
(set! (-> self old-bomb-hits) (-> self bomb-hits))
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(widow-general-flying-talker)
|
|
(widow-kaboom-check #t)
|
|
(let ((gp-0 (widow-calc-target-position (new 'stack-no-clear 'vector))))
|
|
(set! (-> self osc target y) (-> gp-0 y))
|
|
(when (< (+ -10240.0 (-> self osc target y)) (-> self osc value y))
|
|
(if (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.007))
|
|
(go-virtual hover-big-blast-stage-3)
|
|
)
|
|
)
|
|
(if (-> self attack-from-high-deg)
|
|
(set! (-> self osc target z) (fmin 193019.44 (+ 42893.207 (-> gp-0 z))))
|
|
(set! (-> self osc target z) (fmax -193019.44 (+ -42893.207 (-> gp-0 z))))
|
|
)
|
|
)
|
|
(widow-flying-anim)
|
|
(widow-common)
|
|
(widow-calc-root-from-osc 0.0)
|
|
(widow-debug)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate hover-seek-under-stage-3 (widow)
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(set! (-> self osc target x) 135168.0)
|
|
(set! (-> self flying) #t)
|
|
(set! (-> self state-time) (-> self clock frame-counter))
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(widow-kaboom-check #f)
|
|
(let ((v1-0 (widow-calc-target-position (new 'stack-no-clear 'vector))))
|
|
(if (-> self attack-from-high-deg)
|
|
(set! (-> self osc target z) (fmin 193019.44 (+ 42893.207 (-> v1-0 z))))
|
|
(set! (-> self osc target z) (fmax -193019.44 (+ -42893.207 (-> v1-0 z))))
|
|
)
|
|
)
|
|
(if (and (< (fabs (- (-> self osc value z) (-> self osc target z))) 8192.0)
|
|
(>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.007))
|
|
)
|
|
(go-virtual hover-rise-stage-3)
|
|
)
|
|
(ja :num! (loop!))
|
|
(widow-common)
|
|
(widow-calc-root-from-osc 0.0)
|
|
(widow-debug)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate hover-jump-down-stage-3 (widow)
|
|
:virtual #t
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(widow-leave-perch-talker)
|
|
(set! (-> self state-time) (-> self clock frame-counter))
|
|
(ja-channel-push! 1 (seconds 1.5))
|
|
(ja :group! (-> self draw art-group data 5) :num! min)
|
|
(let ((gp-1 (widow-calc-target-position (new 'stack-no-clear 'vector))))
|
|
(set! (-> self theta max-vel) 91.022224)
|
|
(set! (-> self theta accel) 0.01)
|
|
(set! (-> self theta target) (* 0.08488264 (-> gp-1 z)))
|
|
(widow-calc-position gp-1 151552.0 -81920.0 (-> self theta target))
|
|
(setup-from-to-duration-and-height! (-> self traj) (-> self root trans) gp-1 450.0 49152.0)
|
|
)
|
|
(set! (-> self flying) #t)
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(let ((a1-0 (new 'stack-no-clear 'vector)))
|
|
(set-vector! a1-0 151552.0 -81920.0 (* 11.780972 (-> self theta target)) 1.0)
|
|
(widow-oscillator-method-9 (-> self osc) a1-0 81.92 1638.4 0.98)
|
|
)
|
|
(widow-oscillator-method-9 (-> self noise-osc) (the-as vector #f) 4.096 204.8 0.9)
|
|
(init (-> self rand-vec) 75 150 204.8 819.2)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(widow-kaboom-check #f)
|
|
(ja :num! (loop!))
|
|
(compute-trans-at-time
|
|
(-> self traj)
|
|
(the float (min 450 (- (-> self clock frame-counter) (-> self state-time))))
|
|
(-> self root trans)
|
|
)
|
|
(if (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 1.5))
|
|
(go hover-seek-under-stage-3)
|
|
)
|
|
(quaternion-axis-angle! (-> self root quat) 0.0 1.0 0.0 (+ 32768.0 (-> self theta value)))
|
|
(widow-common)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate big-reaction-stage-2 (widow)
|
|
:virtual #t
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(talker-spawn-func (-> *talker-speech* 302) *entity-pool* (target-pos 0) (the-as region #f))
|
|
(dotimes (gp-1 8)
|
|
(let ((a0-3 (handle->process (-> self bomb gp-1))))
|
|
(if a0-3
|
|
(send-event a0-3 'fizzle)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> self bomb-hits) 0)
|
|
(set! (-> self drill-speed target) 0.0)
|
|
(set! (-> self flying) #f)
|
|
(ja-channel-push! 1 (seconds 0.02))
|
|
(ja :group! (-> self draw art-group data 4) :num! min)
|
|
(set! (-> self extract-stone-time) (-> self clock frame-counter))
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(send-event (handle->process (-> self pod)) 'grab-done)
|
|
(send-event (ppointer->process (-> self baron)) 'grab-done)
|
|
(send-event (handle->process (-> self heart)) 'grab-done)
|
|
(let ((v1-18 (handle->process (-> self hud))))
|
|
(when v1-18
|
|
(set! (-> (the-as hud-widow v1-18) values 0 target) 3)
|
|
(set! (-> (the-as hud-widow v1-18) values 1 target) 100)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(ja :num! (seek!))
|
|
(let ((f30-0 (ja-aframe-num 0)))
|
|
(send-event (handle->process (-> self pod)) 'frame f30-0)
|
|
(send-event (ppointer->process (-> self baron)) 'frame f30-0)
|
|
(send-event (handle->process (-> self heart)) 'frame f30-0)
|
|
(if (and (zero? (-> self insert-stone-time)) (>= f30-0 827.0))
|
|
(set! (-> self insert-stone-time) (-> self clock frame-counter))
|
|
)
|
|
)
|
|
(if (ja-done? 0)
|
|
(go-virtual hover-jump-down-stage-3)
|
|
)
|
|
(widow-common)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate watch-bombs-stage-2 (widow)
|
|
:virtual #t
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(set! (-> self flying) #f)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(widow-want-stone-talker)
|
|
(let ((gp-0 (widow-bomb-slots-full)))
|
|
(cond
|
|
((>= (-> self bomb-hits) 4)
|
|
(go-virtual big-reaction-stage-2)
|
|
)
|
|
((and (zero? gp-0) (let ((v1-8 (ja-group)))
|
|
(and v1-8 (= v1-8 (-> self draw art-group data 8)))
|
|
)
|
|
)
|
|
(go-virtual launch-droids-stage-2)
|
|
)
|
|
)
|
|
(if (and (>= (-> self bomb-hits) 3) (nonzero? gp-0))
|
|
(widow-last-bomb-anim)
|
|
(widow-cleanup-launch-anim (< 3 gp-0))
|
|
)
|
|
)
|
|
(widow-give-ammo)
|
|
(widow-common)
|
|
(widow-debug)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate launch-bombs-stage-2 (widow)
|
|
:virtual #t
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(widow-launch-bombs-talker)
|
|
(widow-bomb-setup)
|
|
(set! (-> self flying) #f)
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(set! (-> self left-cover-angle target) 0.0)
|
|
(set! (-> self right-cover-angle target) 0.0)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(if (>= (-> self bomb-hits) 3)
|
|
(widow-last-bomb-anim)
|
|
(widow-cleanup-launch-anim #f)
|
|
)
|
|
(if (zero? (widow-bomb-launch (-> self flying) (>= (-> self bomb-hits) 3) #f))
|
|
(go-virtual watch-bombs-stage-2)
|
|
)
|
|
(widow-give-ammo)
|
|
(widow-common)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate back-to-perch-stage-2 (widow)
|
|
:virtual #t
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(set! (-> self state-time) (-> self clock frame-counter))
|
|
(ja-channel-push! 1 (seconds 1))
|
|
(ja :group! (-> self draw art-group data 6) :num! min)
|
|
(let ((a2-1 (new 'stack-no-clear 'vector))
|
|
(f0-1 49152.0)
|
|
)
|
|
(set! (-> a2-1 quad) (-> self circle-center quad))
|
|
(set! (-> a2-1 z) (+ -40960.0 (-> a2-1 z)))
|
|
(let ((f0-3 (- (+ f0-1 (-> a2-1 y)) (-> self root trans y))))
|
|
(setup-from-to-duration-and-height! (-> self traj) (-> self root trans) a2-1 300.0 f0-3)
|
|
)
|
|
)
|
|
(set! (-> self theta max-vel) 273.06668)
|
|
(set! (-> self theta accel) 0.05)
|
|
(set! (-> self theta target) 0.0)
|
|
(set! (-> self theta vel) (* 0.08488264 (-> self osc vel z)))
|
|
(set! (-> self theta value) (* 0.08488264 (-> self osc value z)))
|
|
(set! (-> self flying) #t)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(compute-trans-at-time
|
|
(-> self traj)
|
|
(the float (min 300 (- (-> self clock frame-counter) (-> self state-time))))
|
|
(-> self root trans)
|
|
)
|
|
(quaternion-axis-angle! (-> self root quat) 0.0 1.0 0.0 (+ 32768.0 (-> self theta value)))
|
|
(let ((v1-9 (ja-group)))
|
|
(cond
|
|
((and v1-9 (= v1-9 (-> self draw art-group data 6)))
|
|
(ja :num! (seek!))
|
|
(when (and (ja-done? 0) (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 1)))
|
|
(ja-channel-push! 1 (seconds 0.02))
|
|
(ja :group! (-> self draw art-group data 7) :num! min)
|
|
(set! (-> self flying) #f)
|
|
(when (nonzero? (-> self land-part))
|
|
(let ((gp-1 (new 'stack-no-clear 'vector)))
|
|
(vector<-cspace! gp-1 (-> self node-list data 28))
|
|
(spawn (-> self land-part) gp-1)
|
|
(vector<-cspace! gp-1 (-> self node-list data 36))
|
|
(spawn (-> self land-part) gp-1)
|
|
(vector<-cspace! gp-1 (-> self node-list data 61))
|
|
(spawn (-> self land-part) gp-1)
|
|
(vector<-cspace! gp-1 (-> self node-list data 69))
|
|
(spawn (-> self land-part) gp-1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
((let ((v1-47 (ja-group)))
|
|
(and v1-47 (= v1-47 (-> self draw art-group data 7)))
|
|
)
|
|
(ja :num! (seek!))
|
|
(when (ja-done? 0)
|
|
(set! (-> self drill-speed target) 1.0)
|
|
(jump-to-target! (-> self drill-speed) 0.0)
|
|
(go-virtual launch-bombs-stage-2)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(widow-give-ammo)
|
|
(widow-common)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate hover-low-stage-2 (widow)
|
|
:virtual #t
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(set! (-> self osc target y) -122880.0)
|
|
(let* ((v1-2 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-3 (the-as number (logior #x3f800000 v1-2)))
|
|
)
|
|
(if (< (+ -1.0 (the-as float v1-3)) 0.5)
|
|
(set! (-> self attack-from-high-deg) (not (-> self attack-from-high-deg)))
|
|
)
|
|
)
|
|
(set! (-> self flying) #t)
|
|
(set! (-> self state-time) (-> self clock frame-counter))
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(widow-general-flying-talker)
|
|
(if (>= (-> self bomb-hits) 4)
|
|
(go-virtual back-to-perch-stage-2)
|
|
)
|
|
(when (< (-> self osc value y) (+ 8192.0 (-> self osc target y)))
|
|
(cond
|
|
((zero? (widow-bomb-slots-full))
|
|
(go-virtual back-to-perch-stage-2)
|
|
)
|
|
((>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.007))
|
|
(go-virtual hover-seek-under-stage-2)
|
|
)
|
|
)
|
|
)
|
|
(let ((v1-20 (ja-group)))
|
|
(cond
|
|
((and v1-20 (= v1-20 (-> self draw art-group data 17)))
|
|
(ja :num! (seek!))
|
|
(if (ja-done? 0)
|
|
(ja :group! (-> self draw art-group data 5) :num! min)
|
|
)
|
|
)
|
|
(else
|
|
(ja :num! (loop!))
|
|
)
|
|
)
|
|
)
|
|
(widow-give-ammo)
|
|
(widow-common)
|
|
(widow-calc-root-from-osc 0.0)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate hover-shooting-stage-2 (widow)
|
|
:virtual #t
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(widow-shoot-gun-talker)
|
|
(ja-channel-push! 1 (seconds 0.02))
|
|
(ja :group! (-> self draw art-group data 15) :num! min)
|
|
(set! (-> self which-gun) 0)
|
|
(set! (-> self flying) #t)
|
|
(set! (-> self state-time) (-> self clock frame-counter))
|
|
(+! (-> self current-shoot-stage) 1)
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(ja :group! (-> self draw art-group data 17) :num! min)
|
|
(if (and (< 1 (-> self gun-hits)) (< (-> self current-shoot-stage) 10))
|
|
(talker-spawn-func (-> *talker-speech* 301) *entity-pool* (target-pos 0) (the-as region #f))
|
|
)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(if (>= (-> self bomb-hits) 4)
|
|
(go-virtual back-to-perch-stage-2)
|
|
)
|
|
(let ((a0-1 (widow-calc-target-position (new 'stack-no-clear 'vector)))
|
|
(v1-5 #t)
|
|
)
|
|
(set! (-> self osc target y) (-> a0-1 y))
|
|
(cond
|
|
((not (-> self attack-from-high-deg))
|
|
(set! (-> self osc target z) (fmin 193019.44 (+ 21446.604 (-> a0-1 z))))
|
|
(when (< (+ 2457.6 (-> self osc value z)) (-> self osc target z))
|
|
(set! (-> self osc target z) (+ 2457.6 (-> self osc value z)))
|
|
(set! v1-5 #f)
|
|
)
|
|
)
|
|
(else
|
|
(set! (-> self osc target z)
|
|
(fmax (fmax -193019.44 (+ -21446.604 (-> a0-1 z))) (+ -2457.6 (-> self osc value z)))
|
|
)
|
|
(when (< (-> self osc target z) (+ -2457.6 (-> self osc value z)))
|
|
(set! (-> self osc target z) (+ -2457.6 (-> self osc value z)))
|
|
(set! v1-5 #f)
|
|
)
|
|
)
|
|
)
|
|
(set! v1-5 (and (< (fabs (- (-> self osc value z) (-> self osc target z))) 1024.0)
|
|
(and (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.007)) v1-5)
|
|
)
|
|
)
|
|
(if v1-5
|
|
(go-virtual hover-low-stage-2)
|
|
)
|
|
)
|
|
(ja :num! (seek!))
|
|
(let ((v1-22 (ja-group)))
|
|
(when (and (and v1-22 (= v1-22 (-> self draw art-group data 16)))
|
|
(>= (ja-frame-num 0) (the float (-> self which-gun)))
|
|
)
|
|
(let ((v1-28 (-> self which-gun)))
|
|
(cond
|
|
((zero? v1-28)
|
|
(widow-method-46 self (the-as vector #t) 84)
|
|
(set! (-> self which-gun) 2)
|
|
)
|
|
((= v1-28 2)
|
|
(widow-method-46 self (the-as vector #t) 87)
|
|
(set! (-> self which-gun) 4)
|
|
)
|
|
((= v1-28 4)
|
|
(widow-method-46 self (the-as vector #t) 82)
|
|
(set! (-> self which-gun) 6)
|
|
)
|
|
((= v1-28 6)
|
|
(widow-method-46 self (the-as vector #t) 89)
|
|
(set! (-> self which-gun) 100)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when (ja-done? 0)
|
|
(ja :group! (-> self draw art-group data 16) :num! min)
|
|
(set! (-> self which-gun) 0)
|
|
0
|
|
)
|
|
(widow-give-ammo)
|
|
(widow-common)
|
|
(widow-calc-root-from-osc 0.0)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate hover-rise-stage-2 (widow)
|
|
:virtual #t
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(set! (-> self osc target x) 135168.0)
|
|
(set! (-> self flying) #t)
|
|
(set! (-> self state-time) (-> self clock frame-counter))
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(if (>= (-> self bomb-hits) 4)
|
|
(go-virtual back-to-perch-stage-2)
|
|
)
|
|
(let ((gp-0 (widow-calc-target-position (new 'stack-no-clear 'vector))))
|
|
(set! (-> self osc target y) (-> gp-0 y))
|
|
(when (and (< (+ -10240.0 (-> self osc target y)) (-> self osc value y))
|
|
(>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.007))
|
|
)
|
|
(let* ((v1-13 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-14 (the-as number (logior #x3f800000 v1-13)))
|
|
)
|
|
(if (< (+ -1.0 (the-as float v1-14)) 0.1)
|
|
(go-virtual hover-low-stage-2)
|
|
(go-virtual hover-shooting-stage-2)
|
|
)
|
|
)
|
|
)
|
|
(if (-> self attack-from-high-deg)
|
|
(set! (-> self osc target z) (fmin 193019.44 (+ 42893.207 (-> gp-0 z))))
|
|
(set! (-> self osc target z) (fmax -193019.44 (+ -42893.207 (-> gp-0 z))))
|
|
)
|
|
)
|
|
(widow-flying-anim)
|
|
(widow-give-ammo)
|
|
(widow-common)
|
|
(widow-calc-root-from-osc 0.0)
|
|
(widow-debug)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate hover-seek-under-stage-2 (widow)
|
|
:virtual #t
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(set! (-> self osc target x) 135168.0)
|
|
(set! (-> self flying) #t)
|
|
(set! (-> self state-time) (-> self clock frame-counter))
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(if (>= (-> self bomb-hits) 4)
|
|
(go-virtual back-to-perch-stage-2)
|
|
)
|
|
(widow-general-flying-talker)
|
|
(let ((v1-5 (widow-calc-target-position (new 'stack-no-clear 'vector))))
|
|
(if (-> self attack-from-high-deg)
|
|
(set! (-> self osc target z) (fmin 193019.44 (+ 42893.207 (-> v1-5 z))))
|
|
(set! (-> self osc target z) (fmax -193019.44 (+ -42893.207 (-> v1-5 z))))
|
|
)
|
|
)
|
|
(if (and (< (fabs (- (-> self osc value z) (-> self osc target z))) 8192.0)
|
|
(>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.007))
|
|
)
|
|
(go-virtual hover-rise-stage-2)
|
|
)
|
|
(widow-flying-anim)
|
|
(widow-give-ammo)
|
|
(widow-common)
|
|
(widow-calc-root-from-osc 0.0)
|
|
(widow-debug)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate hover-jump-down-stage-2 (widow)
|
|
:virtual #t
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(widow-leave-perch-talker)
|
|
(set! (-> self state-time) (-> self clock frame-counter))
|
|
(set! (-> self drill-speed target) 0.0)
|
|
(ja-channel-push! 1 (seconds 1.5))
|
|
(ja :group! (-> self draw art-group data 5) :num! min)
|
|
(let ((gp-1 (widow-calc-target-position (new 'stack-no-clear 'vector))))
|
|
(set! (-> self theta target) (* 0.08488264 (-> gp-1 z)))
|
|
(widow-calc-position gp-1 151552.0 -81920.0 (-> self theta target))
|
|
(setup-from-to-duration-and-height! (-> self traj) (-> self root trans) gp-1 450.0 49152.0)
|
|
)
|
|
(set! (-> self flying) #t)
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(let ((a1-0 (new 'stack-no-clear 'vector)))
|
|
(set-vector! a1-0 151552.0 -81920.0 (* 11.780972 (-> self theta target)) 1.0)
|
|
(widow-oscillator-method-9 (-> self osc) a1-0 81.92 1638.4 0.98)
|
|
)
|
|
(widow-oscillator-method-9 (-> self noise-osc) (the-as vector #f) 4.096 204.8 0.9)
|
|
(init (-> self rand-vec) 75 150 204.8 819.2)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(widow-flying-anim)
|
|
(compute-trans-at-time
|
|
(-> self traj)
|
|
(the float (min 450 (- (-> self clock frame-counter) (-> self state-time))))
|
|
(-> self root trans)
|
|
)
|
|
(if (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 1.5))
|
|
(go-virtual hover-seek-under-stage-2)
|
|
)
|
|
(quaternion-axis-angle! (-> self root quat) 0.0 1.0 0.0 (+ 32768.0 (-> self theta value)))
|
|
(widow-give-ammo)
|
|
(widow-common)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate launch-droids-stage-2 (widow)
|
|
:virtual #t
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(widow-launch-droids-talker)
|
|
(spydroid-setup)
|
|
(set! (-> self flying) #f)
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(set! (-> self left-cover-angle target) 0.0)
|
|
(set! (-> self right-cover-angle target) 0.0)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(widow-cleanup-launch-anim #f)
|
|
(if (>= (-> self bomb-hits) 4)
|
|
(go-virtual launch-bombs-stage-2)
|
|
)
|
|
(if (zero? (spydroid-launch))
|
|
(go-virtual hover-jump-down-stage-2)
|
|
)
|
|
(widow-give-ammo)
|
|
(widow-common)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate big-reaction-stage-1 (widow)
|
|
:virtual #t
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(dotimes (gp-0 8)
|
|
(let ((a0-1 (handle->process (-> self bomb gp-0))))
|
|
(if a0-1
|
|
(send-event a0-1 'fizzle)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> self bomb-hits) 0)
|
|
(set! (-> self drill-speed target) 0.0)
|
|
(set! (-> self flying) #f)
|
|
(ja-channel-push! 1 (seconds 0.02))
|
|
(ja :group! (-> self draw art-group data 25) :num! min)
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(let ((v1-1 (handle->process (-> self hud))))
|
|
(when v1-1
|
|
(set! (-> (the-as hud-widow v1-1) values 0 target) 2)
|
|
(set! (-> (the-as hud-widow v1-1) values 1 target) 100)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(let ((v1-2 (ja-group)))
|
|
(if (and (and v1-2 (= v1-2 (-> self draw art-group data 8))) (zero? (widow-bomb-slots-full)))
|
|
(go-virtual launch-droids-stage-2)
|
|
)
|
|
)
|
|
(ja :num! (seek!))
|
|
(when (ja-done? 0)
|
|
(ja :group! (-> self draw art-group data 8) :num! min)
|
|
(set! (-> self drill-speed target) 1.0)
|
|
)
|
|
(widow-give-ammo)
|
|
(widow-common)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate watch-bombs-stage-1 (widow)
|
|
:virtual #t
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(set! (-> self flying) #f)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(widow-want-stone-talker)
|
|
(let ((gp-0 (widow-bomb-slots-full)))
|
|
(cond
|
|
((>= (-> self bomb-hits) 4)
|
|
(go-virtual big-reaction-stage-1)
|
|
)
|
|
((and (zero? gp-0) (let ((v1-8 (ja-group)))
|
|
(and v1-8 (= v1-8 (-> self draw art-group data 8)))
|
|
)
|
|
)
|
|
(go-virtual launch-droids-stage-1)
|
|
)
|
|
)
|
|
(widow-cleanup-launch-anim (< 3 gp-0))
|
|
)
|
|
(widow-give-ammo)
|
|
(widow-common)
|
|
(widow-debug)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate launch-bombs-stage-1 (widow)
|
|
:virtual #t
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(if (and (< (-> self kicked-bombs) 2) (>= (-> self launch-stages-completed) 1))
|
|
(talker-spawn-func (-> *talker-speech* 303) *entity-pool* (target-pos 0) (the-as region #f))
|
|
(widow-launch-bombs-talker)
|
|
)
|
|
(widow-bomb-setup)
|
|
(set! (-> self flying) #f)
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(set! (-> self left-cover-angle target) 0.0)
|
|
(set! (-> self right-cover-angle target) 0.0)
|
|
(+! (-> self launch-stages-completed) 1)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(widow-cleanup-launch-anim #f)
|
|
(if (zero? (widow-bomb-launch (-> self flying) #f #f))
|
|
(go-virtual watch-bombs-stage-1)
|
|
)
|
|
(widow-give-ammo)
|
|
(widow-common)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate watch-droids-stage-1 (widow)
|
|
:virtual #t
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(set! (-> self flying) #f)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(widow-want-stone-talker)
|
|
(if (>= (-> self bomb-hits) 4)
|
|
(go-virtual big-reaction-stage-1)
|
|
)
|
|
(let ((gp-0 (widow-bomb-slots-full)))
|
|
(if (and (zero? gp-0) (let ((v1-8 (ja-group)))
|
|
(and v1-8 (= v1-8 (-> self draw art-group data 8)))
|
|
)
|
|
)
|
|
(go-virtual launch-bombs-stage-1)
|
|
)
|
|
(widow-cleanup-launch-anim (< 3 gp-0))
|
|
)
|
|
(widow-give-ammo)
|
|
(widow-common)
|
|
(widow-debug)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate launch-droids-stage-1 (widow)
|
|
:virtual #t
|
|
:event (the-as (function process int symbol event-message-block object :behavior widow) widow-handler)
|
|
:enter (behavior ()
|
|
(widow-launch-droids-talker)
|
|
(let ((gp-0 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> gp-0 from) (process->ppointer self))
|
|
(set! (-> gp-0 num-params) 0)
|
|
(set! (-> gp-0 message) 'start)
|
|
(let ((s5-0 send-event-function)
|
|
(v1-2 (entity-by-name "cave-in-master-1"))
|
|
)
|
|
(s5-0
|
|
(if v1-2
|
|
(-> v1-2 extra process)
|
|
)
|
|
gp-0
|
|
)
|
|
)
|
|
)
|
|
(spydroid-setup)
|
|
(set! (-> self drill-speed target) 1.0)
|
|
(set! (-> self flying) #f)
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(set! (-> self left-cover-angle target) 0.0)
|
|
(set! (-> self right-cover-angle target) 0.0)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(widow-cleanup-launch-anim #f)
|
|
(if (zero? (spydroid-launch))
|
|
(go-virtual watch-droids-stage-1)
|
|
)
|
|
(widow-give-ammo)
|
|
(widow-common)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
:post (the-as (function none :behavior widow) transform-post)
|
|
)
|
|
|
|
(defstate hidden (widow)
|
|
:virtual #t
|
|
:enter (behavior ()
|
|
(ja-channel-set! 0)
|
|
(ja-post)
|
|
(set! (-> self movie-handle) (the-as handle #f))
|
|
(none)
|
|
)
|
|
:exit (behavior ()
|
|
(ja-channel-push! 1 0)
|
|
(ja :group! (-> self draw art-group data 8) :num! min)
|
|
(set! (-> self hud) (ppointer->handle (process-spawn hud-widow :init hud-init-by-other :to self)))
|
|
(let ((v1-13 (handle->process (-> self hud))))
|
|
(if v1-13
|
|
(set! (-> (the-as hud-widow v1-13) values 0 target) 1)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(cond
|
|
((and (= (-> self movie-handle) #f) (not (task-node-closed? (game-task-node tomb-boss-introduction))))
|
|
(when (and *target*
|
|
(task-node-closed? (game-task-node tomb-boss-door))
|
|
(not *scene-player*)
|
|
(not *progress-process*)
|
|
)
|
|
(let ((f0-0 (vector-vector-xz-distance (-> self circle-center) (-> *target* control trans))))
|
|
(cond
|
|
((< f0-0 376832.0)
|
|
(set! (-> self movie-handle)
|
|
(ppointer->handle (process-spawn scene-player :init scene-player-init "tomb-boss-intro" #t #f))
|
|
)
|
|
)
|
|
((< f0-0 409600.0)
|
|
(eval!
|
|
(new 'stack 'script-context (the-as basic (process->ppointer self)) self (the-as vector #f))
|
|
'(want-anim "tomb-boss-intro")
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
((or (not (handle->process (-> self movie-handle)))
|
|
(task-node-closed? (game-task-node tomb-boss-introduction))
|
|
)
|
|
(set! (-> self heart) (ppointer->handle (process-spawn heart-mar (-> self root trans) :to self)))
|
|
(set-setting! 'music 'danger7 0 0)
|
|
(go-virtual launch-droids-stage-1)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior widow) sleep-code)
|
|
)
|