jak-project/goal_src/jak1/levels/maincave/mother-spider-proj.gc

413 lines
13 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: mother-spider-proj.gc
;; name in dgo: mother-spider-proj
;; dgos: L1, MAI, MAINCAVE
;; DECOMP BEGINS
(deftype mother-spider-proj (projectile)
((parent-process (pointer projectile) :offset 12)
(facing-dir vector :inline :offset-assert 416)
)
:heap-base #x140
:method-count-assert 29
:size-assert #x1b0
:flag-assert #x1d014001b0
)
(defpartgroup group-mother-spider-proj-fly
:id 326
:duration (seconds 1)
:bounds (static-bspherem 0 0 0 3)
:parts ((sp-item 718 :flags (launch-asap) :binding 716)
(sp-item 716 :flags (start-dead) :binding 717)
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
(sp-item 717 :flags (start-dead launch-asap))
)
)
(defpart 718
:init-specs ((:texture (new 'static 'texture-id :index #x12 :page #x2))
(:num 1.0)
(:scale-x (meters 0.01))
(:scale-y :copy scale-x)
(:a 0.0)
(:timer (seconds 4))
(:flags (bit3))
(:func 'sparticle-track-root-prim)
)
)
(defpart 716
:init-specs ((:texture (new 'static 'texture-id :index #xf :page #x2))
(:num 1.0)
(:scale-x (meters 1))
(:rot-z (degrees 0) (degrees 360))
(:scale-y :copy scale-x)
(:r 96.0 64.0)
(:g 64.0 32.0)
(:b 96.0 64.0)
(:a 128.0)
(:scalevel-x (meters -0.006666667))
(:scalevel-y :copy scalevel-x)
(:fade-r -1.0666667)
(:fade-g -1.0666667)
(:fade-b 0.0)
(:timer (seconds 0.5))
(:flags (bit2))
(:next-time (seconds 0.27))
(:next-launcher 720)
(:conerot-x (degrees 0) (degrees 360))
(:conerot-y (degrees 0) (degrees 360))
(:conerot-radius (meters 0.1))
)
)
(defpart 720
:init-specs ((:fade-r 0.0) (:fade-g 0.0) (:fade-b 0.0))
)
(defpart 717
:init-specs ((:texture (new 'static 'texture-id :index #xf :page #x2))
(:num 1.0 5.0)
(:scale-x (meters 0.2) (meters 0.1))
(:rot-z (degrees 0) (degrees 360))
(:scale-y :copy scale-x)
(:r 96.0 64.0)
(:g 64.0 32.0)
(:b 96.0 64.0)
(:a 128.0)
(:vel-y (meters 0.006666667) (meters 0.0033333334))
(:scalevel-x (meters -0.0026666666))
(:scalevel-y :copy scalevel-x)
(:fade-r -1.0666667)
(:fade-g -1.0666667)
(:fade-b 0.0)
(:accel-y (meters -0.00066666666))
(:friction 0.97)
(:timer (seconds 0.1) (seconds 0.397))
(:flags (bit2))
(:next-time (seconds 0.2))
(:next-launcher 720)
(:conerot-x (degrees 0) (degrees 360))
(:conerot-y (degrees 0) (degrees 360))
(:conerot-radius (meters 0) (meters 0.4))
)
)
(defpartgroup group-mother-spider-proj-hit
:id 327
:duration (seconds 0.017)
:flags (use-local-clock)
:bounds (static-bspherem 0 0 0 8)
:parts ((sp-item 722) (sp-item 723) (sp-item 724))
)
(defpart 722
:init-specs ((:texture (new 'static 'texture-id :index #xf :page #x2))
(:num 64.0)
(:scale-x (meters 0.5) (meters 0.2))
(:scale-y :copy scale-x)
(:r 192.0 32.0)
(:g 64.0 32.0)
(:b 96.0 64.0)
(:a 128.0)
(:vel-y (meters 0.10666667) (meters 0.10666667))
(:scalevel-x (meters -0.006666667))
(:scalevel-y :copy scalevel-x)
(:fade-r -0.7111111)
(:fade-g -0.7111111)
(:fade-b 0.0)
(:accel-y (meters -0.00016666666))
(:friction 0.85 0.05)
(:timer (seconds 0.1) (seconds 0.397))
(:flags (bit2))
(:next-time (seconds 0.3))
(:next-launcher 720)
(:conerot-x (degrees 0) (degrees 360))
(:conerot-y (degrees 0) (degrees 360))
(:conerot-radius (meters 0) (meters 0.4))
)
)
(defpart 724
:init-specs ((:texture (new 'static 'texture-id :page #x2))
(:num 6.0)
(:scale-x (meters 3) (meters 3))
(:rot-z (degrees 0) (degrees 360))
(:scale-y :copy scale-x)
(:r 96.0 64.0)
(:g 64.0 32.0)
(:b 96.0 64.0)
(:a 32.0 32.0)
(:rotvel-z (degrees -0.2) (degrees 0.4))
(:fade-r -0.35555556)
(:fade-g -0.35555556)
(:fade-b 0.0)
(:fade-a -0.30476192)
(:accel-y (meters -0.00016666666) (meters 0.00016666666))
(:timer (seconds 0.7))
(:flags (bit2))
(:next-time (seconds 0.2))
(:next-launcher 720)
(:rotate-y (degrees 0) (degrees 180))
)
)
(defpart 723
:init-specs ((:texture (new 'static 'texture-id :index #xf :page #x2))
(:num 1.0)
(:scale-x (meters 6) (meters 1))
(:rot-z (degrees 0) (degrees 360))
(:scale-y :copy scale-x)
(:r 128.0 32.0)
(:g 64.0 32.0)
(:b 128.0 32.0)
(:a 96.0)
(:fade-a -4.8)
(:timer (seconds 0.05))
(:flags (bit2))
)
)
(defpartgroup group-mother-spider-proj-die
:id 328
:duration (seconds 0.017)
:flags (use-local-clock)
:bounds (static-bspherem 0 0 0 8)
:parts ((sp-item 722))
)
(defmethod projectile-method-24 mother-spider-proj ((obj mother-spider-proj))
(with-pp
(spawn (-> obj part) (the-as vector (-> obj root-override root-prim prim-core)))
(let ((s5-0 (the-as sound-rpc-set-param (get-sound-buffer-entry))))
(set! (-> s5-0 command) (sound-command set-param))
(set! (-> s5-0 id) (-> obj sound-id))
(let ((a1-1 (-> obj root-override trans)))
(let ((s4-0 pp))
(when (= a1-1 #t)
(if (and s4-0 (type-type? (-> s4-0 type) process-drawable) (nonzero? (-> (the-as process-drawable s4-0) root)))
(set! a1-1 (-> (the-as process-drawable s4-0) root trans))
(set! a1-1 (the-as vector #f))
)
)
)
(sound-trans-convert (-> s5-0 parms trans) a1-1)
)
(set! (-> s5-0 parms mask) (sound-mask trans))
(-> s5-0 id)
)
(let ((f0-5 (* 5120.0 (+ 0.9 (* 0.1 (cos (* 873.81335 (the float (mod (-> *display* base-frame-counter) 75)))))))))
(find-ground-and-draw-shadow
(-> obj root-override trans)
(the-as vector #f)
f0-5
(collide-kind background)
(the-as process-drawable #f)
0.0
81920.0
)
)
(none)
)
)
(defun mother-spider-proj-update-velocity ((arg0 mother-spider-proj))
(when (>= (vector-vector-xz-distance (-> arg0 parent-process 0 root-override trans) (-> arg0 target))
(vector-vector-xz-distance (-> arg0 parent-process 0 root-override trans) (-> arg0 root-override trans))
)
(let ((s3-1 (vector-! (new 'stack-no-clear 'vector) (-> arg0 target) (-> arg0 root-override trans)))
(s4-0 (new 'stack-no-clear 'vector))
(s5-0 (vector-normalize-copy! (new 'stack-no-clear 'vector) (-> arg0 root-override transv) 1.0))
)
(if (logtest? (-> arg0 root-override status) (cshape-moving-flags tsurf))
(vector-flatten! s3-1 s3-1 (-> arg0 root-override local-normal))
)
(vector-normalize-copy! s4-0 s3-1 1.0)
(let ((s3-2 (new 'stack-no-clear 'matrix)))
(matrix-from-two-vectors-max-angle-partial!
s3-2
s5-0
s4-0
(* (-> arg0 max-turn) (-> *display* seconds-per-frame))
(-> arg0 tween)
)
(vector-matrix*! s5-0 s5-0 s3-2)
)
(vector-normalize! s5-0 1.0)
(vector-float*! (-> arg0 root-override transv) s5-0 (-> arg0 max-speed))
)
)
0
(none)
)
(defmethod projectile-method-26 mother-spider-proj ((obj mother-spider-proj))
(let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player))))
(set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
(set! (-> s5-0 reaction) projectile-collision-reaction)
(set! (-> s5-0 no-reaction)
(the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing)
)
(let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0))))
(set! (-> s4-0 prim-core collide-as) (collide-kind projectile))
(set! (-> s4-0 collide-with)
(collide-kind background cak-2 cak-3 target crate enemy wall-object ground-object)
)
(set! (-> s4-0 prim-core action) (collide-action solid))
(set! (-> s4-0 prim-core offense) (collide-offense strong-attack))
(set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 1228.8)
(set-root-prim! s5-0 s4-0)
)
(set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
(backup-collide-with-as s5-0)
(set! (-> s5-0 max-iteration-count) (the-as uint 2))
(set! (-> s5-0 event-self) 'touched)
(set! (-> obj root-override) s5-0)
)
(logclear! (-> obj mask) (process-mask enemy))
(logclear! (-> obj mask) (process-mask crate))
(logclear! (-> obj mask) (process-mask attackable))
(logior! (-> obj mask) (process-mask projectile))
0
(none)
)
(defmethod projectile-method-27 mother-spider-proj ((obj mother-spider-proj))
(set! (-> obj part) (create-launch-control (-> *part-group-id-table* 326) obj))
(set! (-> obj max-speed) 32768.0)
(set! (-> obj update-velocity) mother-spider-proj-update-velocity)
(set! (-> obj max-turn) 5916.4443)
(set! (-> obj tween) 0.02)
(set! (-> obj attack-mode) 'mother-spider-proj)
(set! (-> obj timeout) (seconds 4))
(set! (-> obj target quad) (-> (target-pos 0) quad))
(+! (-> obj target y) 4915.2)
(set! (-> obj target-base quad) (-> obj target quad))
(set! (-> obj sound-id) (sound-play "mother-track"))
(sound-play "mother-fire")
(none)
)
(defmethod projectile-method-28 mother-spider-proj ((obj mother-spider-proj))
(when (and *target*
(not (logtest? (-> *target* state-flags)
(state-flags being-attacked invulnerable timed-invulnerable invuln-powerup do-not-notice dying)
)
)
)
(let ((gp-0 (-> obj target)))
(set! (-> gp-0 quad) (-> (target-pos 0) quad))
(+! (-> gp-0 y) 4915.2)
(let ((f0-2 (vector-vector-distance gp-0 (-> obj root-override trans)))
(a2-0 (new 'stack-no-clear 'vector))
)
(if (>= 0.0 f0-2)
(set! f0-2 409.6)
)
(set! (-> a2-0 quad) (-> *target* control transv quad))
(set! (-> a2-0 y) 0.0)
(let ((f0-3 (/ f0-2 (* 32768.0 (-> *display* seconds-per-frame)))))
(vector+float*! gp-0 gp-0 a2-0 (* f0-3 (-> *display* seconds-per-frame)))
)
)
)
)
(none)
)
(defstate projectile-impact (mother-spider-proj)
:virtual #t
:code (behavior ()
(process-spawn
part-tracker
:init part-tracker-init
(-> *part-group-id-table* 327)
-1
#f
#f
#f
(-> self root-override trans)
:to *entity-pool*
)
(if (nonzero? (-> self sound-id))
(sound-stop (-> self sound-id))
)
(sound-play "mother-hit")
(suspend)
(go-virtual projectile-die)
(none)
)
)
(defstate projectile-dissipate (mother-spider-proj)
:virtual #t
:code (behavior ()
(process-spawn
part-tracker
:init part-tracker-init
(-> *part-group-id-table* 328)
-1
#f
#f
#f
(-> self root-override trans)
:to *entity-pool*
)
(if (nonzero? (-> self sound-id))
(sound-stop (-> self sound-id))
)
(suspend)
(go-virtual projectile-die)
(none)
)
)