mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 21:27:52 -04:00
413 lines
13 KiB
Common Lisp
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)
|
|
)
|
|
)
|