jak-project/goal_src/levels/jungle/junglesnake.gc
water111 e84b5a2346
[collision] implement most of background collision, spawn target! (#1076)
* fill collide cache with bounding box working

* yprobe fully working for background at least

* target

* final cleanup, add a bit more foreground mesh stuff that is untested

* warnings, merge issues

* tests

* revert debug changes, format'

* rendering perf
2022-01-15 16:52:47 -05:00

928 lines
34 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: junglesnake.gc
;; name in dgo: junglesnake
;; dgos: JUN, JUNGLE, L1
;; DECOMP BEGINS
(defskelgroup *junglesnake-sg* junglesnake
0
2
((1 (meters 999999)))
:bounds (static-spherem 0 14 0 18)
:longest-edge (meters 2.5)
)
(set! (-> *part-group-id-table* 173)
(new 'static 'sparticle-launch-group
:length 1
:duration #xbb8
:linger-duration #x5dc
:flags (sp-group-flag use-local-clock)
:name "group-junglesnake-dropping-down"
:launcher
(new 'static 'inline-array sparticle-group-item 1 (sp-item 799 :period 300 :length 150))
:bounds
(new 'static 'sphere :y -49152.0 :w 57344.0)
)
)
(set! (-> *part-id-table* 799) (new 'static 'sparticle-launcher
:init-specs
(new 'static 'inline-array sp-field-init-spec 20
(sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2))
(sp-flt spt-num 1.0)
(sp-rnd-flt spt-x (meters -9.0) (meters 18.0) 1.0)
(sp-flt spt-y (meters -6.0))
(sp-rnd-flt spt-z -36864.0 73728.0 1.0)
(sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.5) 1.0)
(sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
(sp-copy-from-other spt-scale-y -4)
(sp-rnd-flt spt-r 32.0 40.0 1.0)
(sp-rnd-flt spt-g 32.0 40.0 1.0)
(sp-rnd-flt spt-b 32.0 40.0 1.0)
(sp-flt spt-a 128.0)
(sp-rnd-flt spt-vel-y (meters 0.0) (meters -0.04) 1.0)
(sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0)
(sp-rnd-flt spt-accel-y -6.826667 -0.68266666 1.0)
(sp-int spt-timer 390)
(sp-cpuinfo-flags bit2)
(sp-flt spt-userdata 0.0)
(sp-func spt-func 'check-water-level-drop)
(sp-end)
)
)
)
(deftype junglesnake-twist-joint (structure)
((joint-index int32 :offset-assert 0)
(ry float :offset-assert 4)
(drag-delta-ry float :offset-assert 8)
)
:allow-misaligned
:method-count-assert 9
:size-assert #xc
:flag-assert #x90000000c
)
(deftype junglesnake-tilt-joint (structure)
((joint-index int32 :offset-assert 0)
(flip-it symbol :offset-assert 4)
)
:allow-misaligned
:method-count-assert 9
:size-assert #x8
:flag-assert #x900000008
)
(deftype junglesnake (process-drawable)
((root-override collide-shape :offset 112)
(state-time2 int64 :offset-assert 176)
(hit-player symbol :offset 184)
(is-lethal? symbol :offset-assert 188)
(refractory-delay int32 :offset-assert 192)
(ry float :offset-assert 196)
(des-ry float :offset-assert 200)
(tilt float :offset-assert 204)
(des-tilt float :offset-assert 208)
(track-player-ry symbol :offset-assert 212)
(track-player-tilt symbol :offset-assert 216)
(twist-joints junglesnake-twist-joint 24 :inline :offset 220)
(tilt-joints junglesnake-tilt-joint 3 :inline :offset 604)
)
:heap-base #x220
:method-count-assert 25
:size-assert #x28c
:flag-assert #x190220028c
(:methods
(dummy-20 (_type_) symbol 20)
(dummy-21 (_type_) symbol 21)
(dummy-22 (_type_ float) symbol 22)
(dummy-23 (_type_) none 23)
(dummy-24 (_type_) none 24)
)
(:states
junglesnake-attack
junglesnake-die
junglesnake-give-up
junglesnake-sleeping
junglesnake-tracking
junglesnake-wake
)
)
;; WARN: disable def twice: 39. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare.
(defbehavior junglesnake-default-event-handler junglesnake ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
(case arg2
(('touch)
(when (and *target* ((method-of-type touching-shapes-entry prims-touching?)
(the-as touching-shapes-entry (-> arg3 param 0))
(the-as collide-shape-moving (-> self root-override))
(the-as uint 1)
)
)
(cond
((and (-> self is-lethal?) (zero? (logand (-> *target* state-flags) #x80f8)))
(let ((a1-2 (new 'stack-no-clear 'event-message-block)))
(set! (-> a1-2 from) self)
(set! (-> a1-2 num-params) 2)
(set! (-> a1-2 message) 'attack)
(set! (-> a1-2 param 0) (-> arg3 param 0))
(set! (-> a1-2 param 1) (the-as uint (new 'static 'attack-info)))
(when (send-event-function arg0 a1-2)
(let ((v0-1 (the-as object #t)))
(set! (-> self hit-player) (the-as symbol v0-1))
v0-1
)
)
)
)
(else
(do-push-aways! (-> self root-override))
(let ((a1-3 (new 'stack-no-clear 'event-message-block)))
(set! (-> a1-3 from) self)
(set! (-> a1-3 num-params) 2)
(set! (-> a1-3 message) 'shove)
(set! (-> a1-3 param 0) (-> arg3 param 0))
(let ((v1-17 (new 'static 'attack-info :mask #xc0)))
(set! (-> v1-17 shove-back) 8192.0)
(set! (-> v1-17 shove-up) 2048.0)
(set! (-> a1-3 param 1) (the-as uint v1-17))
)
(send-event-function arg0 a1-3)
)
)
)
)
)
(('attack)
(go junglesnake-die)
)
)
)
junglesnake-default-event-handler
(defmethod dummy-20 junglesnake ((obj junglesnake))
(when (and *target* (-> obj track-player-ry))
(let ((v1-3 (target-pos 0)))
(set! (-> obj des-ry)
(atan (- (-> v1-3 x) (-> obj root-override trans x)) (- (-> v1-3 z) (-> obj root-override trans z)))
)
)
)
(let ((f0-7 (deg-diff (-> obj ry) (-> obj des-ry))))
(+! (-> obj ry) (seek-with-smooth 0.0 f0-7 (* 655360.0 (-> *display* seconds-per-frame)) 0.125 0.001))
)
(let ((f30-1 (-> obj ry)))
(dotimes (s5-0 24)
(let ((s4-0 (-> obj twist-joints s5-0)))
(let ((f28-0 (-> s4-0 drag-delta-ry)))
(cond
((= f28-0 0.0)
(set! (-> s4-0 ry) f30-1)
)
(else
(let ((f26-0 (-> s4-0 ry)))
(let ((f0-14 (deg-diff f30-1 (-> s4-0 ry))))
(if (< f28-0 (fabs f0-14))
(set! f26-0 (if (>= f0-14 0.0)
(+ f30-1 f28-0)
(- f30-1 f28-0)
)
)
)
)
(let ((f0-16 (deg-diff (-> s4-0 ry) f26-0)))
(+! (-> s4-0 ry) (seek-with-smooth 0.0 f0-16 (* 327680.0 (-> *display* seconds-per-frame)) 0.25 0.001))
)
)
)
)
)
(set! f30-1 (-> s4-0 ry))
)
)
)
#f
)
(defun junglesnake-joint-callback ((arg0 junglesnake))
(let ((s5-0 arg0))
(let ((s4-0 (new 'stack-no-clear 'matrix))
(s3-0 (new 'stack-no-clear 'matrix))
(s2-0 (new 'stack-no-clear 'matrix))
)
(let ((s1-0 (new 'stack-no-clear 'vector)))
(set-vector!
s1-0
(-> arg0 root-override trans x)
(-> arg0 root-override trans y)
(-> arg0 root-override trans z)
1.0
)
(matrix-translate! s2-0 s1-0)
(vector-negate! s1-0 s1-0)
(matrix-translate! s3-0 s1-0)
)
(dotimes (s1-1 24)
(let ((s0-0 (-> s5-0 twist-joints s1-1)))
(matrix-rotate-y! s4-0 (-> s0-0 ry))
(let ((s0-1 (-> arg0 node-list data (-> s0-0 joint-index) bone transform)))
(matrix*! s0-1 s0-1 s3-0)
(matrix*! s0-1 s0-1 s4-0)
(matrix*! s0-1 s0-1 s2-0)
)
)
)
)
(dotimes (s4-1 9)
(let ((s3-1 (-> arg0 node-list data (+ s4-1 11) bone transform)))
(let ((a0-14 (-> arg0 node-list data (+ s4-1 12) bone transform))
(a1-7 (new 'stack-no-clear 'vector))
)
(vector-! a1-7 (-> a0-14 vector 3) (-> s3-1 vector 3))
(vector-normalize-copy! (-> s3-1 vector 1) a1-7 1.0)
)
(set! (-> s3-1 vector 1 w) 0.0)
(vector-normalize! (vector-cross! (-> s3-1 vector 2) (the-as vector (-> s3-1 vector)) (-> s3-1 vector 1)) 1.0)
(vector-normalize! (vector-cross! (the-as vector (-> s3-1 vector)) (-> s3-1 vector 1) (-> s3-1 vector 2)) 1.0)
)
)
(cond
((and (-> s5-0 track-player-tilt) *target*)
(let ((s2-1 (-> arg0 node-list data 25 bone transform))
(s4-2 (new 'stack-no-clear 'vector))
)
(vector-normalize-copy! s4-2 (-> s2-1 vector 1) 1.0)
(set! (-> s4-2 w) 1.0)
(let ((s1-2 (new 'stack-no-clear 'vector)))
(vector-! s1-2 (target-pos 0) (-> s2-1 vector 3))
(set! (-> s1-2 y) (+ 9011.2 (-> s1-2 y)))
(vector-normalize! s1-2 1.0)
(let ((s0-2 (new 'stack-no-clear 'vector))
(s3-4 (new 'stack-no-clear 'vector))
)
(vector-normalize-copy! s0-2 (-> s2-1 vector 2) 1.0)
(vector-flatten! s3-4 s1-2 s0-2)
(vector-normalize! s3-4 1.0)
(let ((f30-0 (acos (vector-dot s4-2 s3-4))))
(if (< (-> s4-2 y) (-> s3-4 y))
(set! f30-0 (- f30-0))
)
(cond
((< 7281.778 f30-0)
(set! f30-0 7281.778)
)
((< f30-0 -11650.845)
(set! f30-0 -11650.845)
)
)
(let ((f0-16 (fabs (deg-diff (-> s5-0 ry) (-> s5-0 des-ry)))))
(if (>= f0-16 24576.0)
(set! f30-0 (* 0.00012207031 (- 32768.0 f0-16) f30-0))
)
)
(set! (-> s5-0 des-tilt) f30-0)
)
)
)
)
)
(else
(set! (-> s5-0 des-tilt) 0.0)
)
)
(let* ((f30-1 (-> s5-0 tilt))
(f0-21 (deg-diff f30-1 (-> s5-0 des-tilt)))
(f28-0 (+ f30-1 (seek-with-smooth 0.0 f0-21 (* 65536.0 (-> *display* seconds-per-frame)) 0.2 0.001)))
)
(set! (-> s5-0 tilt) f28-0)
(let ((f30-2 (cos f28-0))
(f28-1 (sin f28-0))
(s4-3 (new 'stack-no-clear 'matrix))
(s3-5 (new 'stack-no-clear 'matrix))
)
(matrix-identity! s4-3)
(set! (-> s4-3 vector 0 x) f30-2)
(set! (-> s4-3 vector 0 y) f28-1)
(set! (-> s4-3 vector 1 x) (- f28-1))
(set! (-> s4-3 vector 1 y) f30-2)
(let* ((a2-9 s3-5)
(a3-1 s4-3)
(v1-47 (-> a3-1 vector 0 quad))
(a0-36 (-> a3-1 vector 1 quad))
(a1-20 (-> a3-1 vector 2 quad))
(a3-2 (-> a3-1 vector 3 quad))
)
(set! (-> a2-9 vector 0 quad) v1-47)
(set! (-> a2-9 vector 1 quad) a0-36)
(set! (-> a2-9 vector 2 quad) a1-20)
(set! (-> a2-9 vector 3 quad) a3-2)
)
(set! (-> s3-5 vector 0 y) (- (-> s3-5 vector 0 y)))
(set! (-> s3-5 vector 1 x) (- (-> s3-5 vector 1 x)))
(dotimes (s2-2 3)
(let* ((v1-50 (-> s5-0 tilt-joints s2-2))
(a2-10 (-> arg0 node-list data (-> v1-50 joint-index) bone transform))
)
(if (-> v1-50 flip-it)
(matrix*! a2-10 s3-5 a2-10)
(matrix*! a2-10 s4-3 a2-10)
)
)
)
)
)
)
0
(none)
)
(defstate junglesnake-sleeping (junglesnake)
:event
junglesnake-default-event-handler
:enter
(behavior ()
(set! (-> self skel postbind-function) #f)
(set! (-> self track-player-ry) #f)
(set! (-> self track-player-tilt) #f)
(set! (-> self des-ry) (-> self ry))
(set! (-> self des-tilt) (-> self tilt))
(logior! (-> self draw status) (draw-status drwf01))
(none)
)
:trans
(behavior ()
(when *target*
(let* ((a0-1 (target-pos 0))
(f0-1 (- (-> a0-1 y) (-> self root-override trans y)))
)
(if (and (>= 40960.0 f0-1) (>= 143360.0 (vector-vector-xz-distance a0-1 (-> self root-override trans))))
(go junglesnake-wake)
)
)
)
(none)
)
:code
(behavior ()
(logior! (-> self mask) (process-mask sleep-code))
(suspend)
0
(none)
)
)
(defstate junglesnake-wake (junglesnake)
:event
junglesnake-default-event-handler
:enter
(behavior ()
(logclear! (-> self draw status) (draw-status drwf01))
(set! (-> self track-player-ry) #f)
(set! (-> self track-player-tilt) #f)
(set! (-> self skel postbind-function) junglesnake-joint-callback)
(set! (-> self refractory-delay) 0)
0
(none)
)
:trans
(behavior ()
(dummy-20 self)
(when *target*
(if *target*
(look-at-enemy!
(-> *target* neck)
(the-as vector (-> (the-as collide-shape-prim-group (-> self root-override root-prim)) prims 0 prim-core))
'attacking
self
)
)
)
(none)
)
:code
(behavior ()
(let ((a0-0 (-> self skel root-channel 0)))
(set! (-> a0-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 5)))
(set! (-> a0-0 param 0)
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1))
)
(set! (-> a0-0 param 1) 0.85)
(set! (-> a0-0 frame-num) 0.5)
(joint-control-channel-group! a0-0 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!)
)
(until (ja-done? 0)
(suspend)
(let ((a0-1 (-> self skel root-channel 0)))
(set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1)))
(set! (-> a0-1 param 1) 0.85)
(joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!)
)
)
(go junglesnake-tracking)
(none)
)
:post
(the-as (function none :behavior junglesnake) transform-post)
)
(defstate junglesnake-tracking (junglesnake)
:event
junglesnake-default-event-handler
:enter
(behavior ()
(set! (-> self state-time) (-> *display* base-frame-counter))
(set! (-> self track-player-ry) #t)
(set! (-> self track-player-tilt) #t)
(none)
)
:trans
(behavior ()
(if (and (and *target* (>= 24576.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans))))
(>= (- (-> *display* base-frame-counter) (-> self state-time)) (-> self refractory-delay))
(zero? (logand (-> *target* state-flags) #x80f8))
)
(go junglesnake-attack)
)
(when *target*
(let ((a0-8 (target-pos 0)))
(if (or (>= (- (-> a0-8 y) (-> self root-override trans y)) 57344.0)
(>= (vector-vector-xz-distance a0-8 (-> self root-override trans)) 163840.0)
)
(go junglesnake-give-up)
)
)
)
(dummy-20 self)
(when *target*
(if *target*
(look-at-enemy!
(-> *target* neck)
(the-as vector (-> (the-as collide-shape-prim-group (-> self root-override root-prim)) prims 0 prim-core))
'attacking
self
)
)
)
(none)
)
:code
(behavior ()
(cond
((= (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
(-> self draw art-group data 2)
)
(while (not (ja-done? 0))
(suspend)
(let ((a0-4 (-> self skel root-channel 0)))
(set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1)))
(set! (-> a0-4 param 1) 1.0)
(joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-seek!)
)
)
)
(else
(ja-channel-push! 1 45)
)
)
(while #t
(let ((a0-7 (-> self skel root-channel 0)))
(set! (-> a0-7 frame-group) (the-as art-joint-anim (-> self draw art-group data 2)))
(set! (-> a0-7 param 0)
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 2)) data 0 length) -1))
)
(set! (-> a0-7 param 1) 1.0)
(set! (-> a0-7 frame-num) 0.0)
(joint-control-channel-group! a0-7 (the-as art-joint-anim (-> self draw art-group data 2)) num-func-seek!)
)
(until (ja-done? 0)
(suspend)
(let ((a0-8 (-> self skel root-channel 0)))
(set! (-> a0-8 param 0) (the float (+ (-> a0-8 frame-group data 0 length) -1)))
(set! (-> a0-8 param 1) 1.0)
(joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!)
)
)
)
(none)
)
:post
(the-as (function none :behavior junglesnake) transform-post)
)
(defstate junglesnake-attack (junglesnake)
:event
junglesnake-default-event-handler
:enter
(behavior ()
(set! (-> self hit-player) #f)
(none)
)
:exit
(behavior ()
(dummy-24 self)
(none)
)
:trans
(behavior ()
(dummy-20 self)
(when *target*
(if *target*
(look-at-enemy!
(-> *target* neck)
(the-as vector (-> (the-as collide-shape-prim-group (-> self root-override root-prim)) prims 0 prim-core))
'attacking
self
)
)
)
(none)
)
:code
(behavior ()
(set! (-> self track-player-ry) #t)
(set! (-> self track-player-tilt) #t)
(ja-channel-push! 2 45)
(dummy-23 self)
(let ((f30-0 (lerp-scale 0.0 1.0 (vector-vector-distance (target-pos 0) (-> self root-override trans)) 0.0 24576.0))
)
(let ((a0-5 (-> self skel root-channel 0)))
(set! (-> a0-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 3)))
(set! (-> a0-5 param 0)
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) data 0 length) -1))
)
(set! (-> a0-5 param 1) 1.25)
(set! (-> a0-5 frame-num) 0.0)
(joint-control-channel-group! a0-5 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!)
)
(let ((a0-6 (-> self skel root-channel 1)))
(set! (-> a0-6 frame-interp) f30-0)
(set! (-> a0-6 frame-group) (the-as art-joint-anim (-> self draw art-group data 4)))
(set! (-> a0-6 param 0) 0.0)
(set! (-> a0-6 frame-num) 0.0)
(joint-control-channel-group! a0-6 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-chan)
)
(until (ja-done? 0)
(suspend)
(set! f30-0
(seek
f30-0
(lerp-scale 0.0 1.0 (vector-vector-distance (target-pos 0) (-> self root-override trans)) 0.0 24576.0)
(* 2.0 (-> *display* seconds-per-frame))
)
)
(let ((a0-11 (-> self skel root-channel 0)))
(set! (-> a0-11 param 0) (the float (+ (-> a0-11 frame-group data 0 length) -1)))
(set! (-> a0-11 param 1) 1.25)
(joint-control-channel-group-eval! a0-11 (the-as art-joint-anim #f) num-func-seek!)
)
(let ((a0-12 (-> self skel root-channel 1)))
(set! (-> a0-12 frame-interp) f30-0)
(set! (-> a0-12 param 0) 0.0)
(joint-control-channel-group-eval! a0-12 (the-as art-joint-anim #f) num-func-chan)
)
(let ((f0-12 (ja-aframe-num 0)))
(cond
((and (>= f0-12 22.0) (< f0-12 44.0))
(if (not (-> self is-lethal?))
(dummy-23 self)
)
)
(else
(if (-> self is-lethal?)
(dummy-24 self)
)
)
)
)
)
)
(if (-> self hit-player)
(set! (-> self refractory-delay) (rand-vu-int-range 300 600))
(set! (-> self refractory-delay) (rand-vu-int-range 150 300))
)
(go junglesnake-tracking)
(none)
)
:post
(the-as (function none :behavior junglesnake) transform-post)
)
(defstate junglesnake-give-up (junglesnake)
:event
junglesnake-default-event-handler
:enter
(behavior ()
(set! (-> self state-time) (-> *display* base-frame-counter))
(set! (-> self track-player-ry) #f)
(set! (-> self track-player-tilt) #f)
(set! (-> self des-ry) (-> self ry))
(set! (-> self des-tilt) (-> self tilt))
(none)
)
:trans
(behavior ()
(dummy-20 self)
(none)
)
:code
(behavior ()
(ja-channel-push! 1 30)
(let ((gp-0 (new 'stack-no-clear 'vector)))
(let ((s5-0 (new 'stack-no-clear 'vector)))
(set! (-> gp-0 quad) (-> self root-override trans quad))
(set! (-> s5-0 quad) (-> gp-0 quad))
(set! (-> s5-0 y) (+ 131072.0 (-> s5-0 y)))
(let ((a0-6 (-> self skel root-channel 0)))
(set! (-> a0-6 frame-group) (the-as art-joint-anim (-> self draw art-group data 7)))
(set! (-> a0-6 param 0)
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 7)) data 0 length) -1))
)
(set! (-> a0-6 param 1) 0.5)
(set! (-> a0-6 frame-num) 0.0)
(joint-control-channel-group! a0-6 (the-as art-joint-anim (-> self draw art-group data 7)) num-func-seek!)
)
(until (ja-done? 0)
(let* ((f0-6 (ja-frame-num 0))
(v1-18 (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
)
(f0-7 (/ f0-6 (the float (+ (-> v1-18 data 0 length) -1))))
(s4-0 (new 'stack-no-clear 'vector))
)
(set-vector! (-> self root-override scale) 1.0 (- 1.0 f0-7) 1.0 1.0)
(vector-lerp! s4-0 gp-0 s5-0 f0-7)
(move-to-point! (-> self root-override) s4-0)
)
(suspend)
(let ((a0-10 (-> self skel root-channel 0)))
(set! (-> a0-10 param 0) (the float (+ (-> a0-10 frame-group data 0 length) -1)))
(set! (-> a0-10 param 1) 0.5)
(joint-control-channel-group-eval! a0-10 (the-as art-joint-anim #f) num-func-seek!)
)
)
)
(move-to-point! (-> self root-override) gp-0)
)
(set-vector! (-> self root-override scale) 1.0 1.0 1.0 1.0)
(go junglesnake-sleeping)
(none)
)
:post
(the-as (function none :behavior junglesnake) transform-post)
)
(defstate junglesnake-die (junglesnake)
:event
(the-as
(function process int symbol event-message-block object :behavior junglesnake)
process-drawable-death-event-handler
)
:code
(behavior ()
(logclear! (-> self mask) (process-mask actor-pause))
(clear-collide-with-as (-> self root-override))
(ja-channel-push! 1 45)
(let ((a0-3 (-> self skel root-channel 0)))
(set! (-> a0-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 6)))
(set! (-> a0-3 param 0)
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1))
)
(set! (-> a0-3 param 1) 1.0)
(set! (-> a0-3 frame-num) 0.0)
(joint-control-channel-group! a0-3 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!)
)
(until (ja-done? 0)
(suspend)
(let ((a0-4 (-> self skel root-channel 0)))
(set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1)))
(set! (-> a0-4 param 1) 1.0)
(joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-seek!)
)
)
(dummy-18 self)
(none)
)
:post
(the-as (function none :behavior junglesnake) ja-post)
)
(defmethod dummy-23 junglesnake ((obj junglesnake))
(when (not (-> obj is-lethal?))
(set! (-> obj is-lethal?) #t)
(let ((v1-5 (-> (the-as collide-shape-prim-group (-> obj root-override root-prim)) prims 0)))
(logclear! (-> v1-5 prim-core action) (collide-action solid))
)
)
0
(none)
)
(defmethod dummy-24 junglesnake ((obj junglesnake))
(when (-> obj is-lethal?)
(set! (-> obj is-lethal?) #f)
(let ((v1-4 (-> (the-as collide-shape-prim-group (-> obj root-override root-prim)) prims 0)))
(logior! (-> v1-4 prim-core action) (collide-action solid))
)
(do-push-aways! (-> obj root-override))
)
0
(none)
)
(define *junglesnake-twist-max-deltas* (new 'static 'array float 28
0.0
0.0
0.0
0.0
0.0
0.0
546.13336
1092.2667
1638.4
2184.5334
2730.6667
3276.8
3822.9333
4369.067
4915.2
5461.3335
6007.467
6553.6
7099.7334
7645.8667
8192.0
8738.134
9284.267
9830.4
10376.533
0.0
0.0
0.0
)
)
(defmethod dummy-22 junglesnake ((obj junglesnake) (arg0 float))
(let ((f0-0 0.0))
(dotimes (v1-0 24)
(let ((a2-2 (-> obj twist-joints v1-0)))
(set! (-> a2-2 ry) arg0)
(set! (-> a2-2 joint-index) (- 26 v1-0))
(let ((f1-1 (-> *junglesnake-twist-max-deltas* v1-0)))
(set! (-> a2-2 drag-delta-ry) (- f1-1 f0-0))
(set! f0-0 f1-1)
)
)
)
)
#f
)
(defmethod dummy-21 junglesnake ((obj junglesnake))
(dotimes (v1-0 3)
(let ((a1-2 (-> obj tilt-joints v1-0)))
(set! (-> a1-2 joint-index) (+ v1-0 23))
(set! (-> a1-2 flip-it) #f)
)
)
(let ((v1-3 (the-as object (&-> obj stack 524))))
(set! (-> (the-as junglesnake-tilt-joint v1-3) flip-it) #t)
)
(let ((v1-4 (the-as object (&-> obj stack 476)))
(v0-0 #t)
)
(set! (-> (the-as junglesnake-twist-joint v1-4) ry) (the-as float v0-0))
v0-0
)
)
(defmethod init-from-entity! junglesnake ((obj junglesnake) (arg0 entity-actor))
(set! (-> obj mask) (logior (process-mask enemy) (-> obj mask)))
(let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player))))
(let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 9) 0)))
(set! (-> s3-0 prim-core collide-as) (collide-kind enemy))
(set! (-> s3-0 collide-with) (collide-kind target))
(set! (-> s3-0 prim-core action) (collide-action solid))
(set-vector! (-> s3-0 local-sphere) 0.0 16384.0 0.0 30720.0)
(set-root-prim! s4-0 s3-0)
(let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1))))
(set! (-> s2-0 prim-core collide-as) (collide-kind enemy))
(set! (-> s2-0 collide-with) (collide-kind target))
(set! (-> s2-0 prim-core action) (collide-action solid))
(set! (-> s2-0 prim-core offense) (collide-offense touch))
(set! (-> s2-0 transform-index) 25)
(set-vector! (-> s2-0 local-sphere) 0.0 2048.0 0.0 4096.0)
(append-prim s3-0 s2-0)
)
(let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0))))
(set! (-> s2-1 prim-core collide-as) (collide-kind enemy))
(set! (-> s2-1 collide-with) (collide-kind target))
(set! (-> s2-1 prim-core action) (collide-action solid))
(set! (-> s2-1 prim-core offense) (collide-offense touch))
(set! (-> s2-1 transform-index) 21)
(set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 3276.8)
(append-prim s3-0 s2-1)
)
(let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0))))
(set! (-> s2-2 prim-core collide-as) (collide-kind enemy))
(set! (-> s2-2 collide-with) (collide-kind target))
(set! (-> s2-2 prim-core action) (collide-action solid))
(set! (-> s2-2 prim-core offense) (collide-offense touch))
(set! (-> s2-2 transform-index) 20)
(set-vector! (-> s2-2 local-sphere) 0.0 0.0 0.0 3276.8)
(append-prim s3-0 s2-2)
)
(let ((s2-3 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0))))
(set! (-> s2-3 prim-core collide-as) (collide-kind enemy))
(set! (-> s2-3 collide-with) (collide-kind target))
(set! (-> s2-3 prim-core action) (collide-action solid))
(set! (-> s2-3 prim-core offense) (collide-offense touch))
(set! (-> s2-3 transform-index) 19)
(set-vector! (-> s2-3 local-sphere) 0.0 0.0 0.0 3276.8)
(append-prim s3-0 s2-3)
)
(let ((s2-4 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0))))
(set! (-> s2-4 prim-core collide-as) (collide-kind enemy))
(set! (-> s2-4 collide-with) (collide-kind target))
(set! (-> s2-4 prim-core action) (collide-action solid))
(set! (-> s2-4 prim-core offense) (collide-offense touch))
(set! (-> s2-4 transform-index) 18)
(set-vector! (-> s2-4 local-sphere) 0.0 0.0 0.0 3276.8)
(append-prim s3-0 s2-4)
)
(let ((s2-5 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0))))
(set! (-> s2-5 prim-core collide-as) (collide-kind enemy))
(set! (-> s2-5 collide-with) (collide-kind target))
(set! (-> s2-5 prim-core action) (collide-action solid))
(set! (-> s2-5 prim-core offense) (collide-offense touch))
(set! (-> s2-5 transform-index) 17)
(set-vector! (-> s2-5 local-sphere) 0.0 0.0 0.0 3276.8)
(append-prim s3-0 s2-5)
)
(let ((s2-6 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0))))
(set! (-> s2-6 prim-core collide-as) (collide-kind enemy))
(set! (-> s2-6 collide-with) (collide-kind target))
(set! (-> s2-6 prim-core action) (collide-action solid))
(set! (-> s2-6 prim-core offense) (collide-offense touch))
(set! (-> s2-6 transform-index) 16)
(set-vector! (-> s2-6 local-sphere) 0.0 0.0 0.0 3276.8)
(append-prim s3-0 s2-6)
)
(let ((s2-7 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0))))
(set! (-> s2-7 prim-core collide-as) (collide-kind enemy))
(set! (-> s2-7 collide-with) (collide-kind target))
(set! (-> s2-7 prim-core action) (collide-action solid))
(set! (-> s2-7 prim-core offense) (collide-offense touch))
(set! (-> s2-7 transform-index) 15)
(set-vector! (-> s2-7 local-sphere) 0.0 0.0 0.0 3276.8)
(append-prim s3-0 s2-7)
)
(let ((s2-8 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0))))
(set! (-> s2-8 prim-core collide-as) (collide-kind enemy))
(set! (-> s2-8 collide-with) (collide-kind target))
(set! (-> s2-8 prim-core action) (collide-action solid))
(set! (-> s2-8 prim-core offense) (collide-offense touch))
(set! (-> s2-8 transform-index) 14)
(set-vector! (-> s2-8 local-sphere) 0.0 0.0 0.0 3276.8)
(append-prim s3-0 s2-8)
)
)
(set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w)))
(backup-collide-with-as s4-0)
(set! (-> obj root-override) s4-0)
)
(process-drawable-from-entity! obj arg0)
(initialize-skeleton obj *junglesnake-sg* '())
(set! (-> obj fact)
(new 'process 'fact-info-enemy obj (pickup-type eco-pill-random) (-> *FACT-bank* default-pill-inc))
)
(set! (-> obj part) (create-launch-control (-> *part-group-id-table* 173) obj))
(set! (-> obj is-lethal?) #f)
(set! (-> obj ry) (y-angle (-> obj root-override)))
(set! (-> obj des-ry) (-> obj ry))
(set! (-> obj tilt) 0.0)
(set! (-> obj des-tilt) (-> obj tilt))
(set! (-> obj track-player-ry) #f)
(set! (-> obj track-player-tilt) #f)
(quaternion-identity! (-> obj root-override quat))
(dummy-22 obj (-> obj ry))
(dummy-21 obj)
(logior! (-> obj skel status) 1)
(go junglesnake-sleeping)
(none)
)