jak-project/goal_src/levels/maincave/mother-spider-proj.gc
ManDude 25b0e1be7d
[decomp] collectables + works ingame! (#971)
* decomp: `collectables`

* fix types

* `powerups` and fixes

* fixes

* Merge branch 'pr/929' into d/temp/collectables

* fix collide stuff

* update things...

* update

* update

* temp bump global heap mem

* fix `defstate` hooks wrong/unnecessary sets & collide stuff for collectables

* dumb mistakes :)

* stub out broken process-drawable stuff

* update refs

* add `:no-inspect` key and save some memory & remove birth logs

* Update kmachine.h

* clang

* add citadel

* fix no-inspect key

* fix tests!!

* fix stupid mistake in `collide-shape-prim-sphere` alloc

* comment annoying print

* feedback

* fix edge-case probably

* remove `:no-inspect`s
2021-11-23 18:25:57 -05:00

586 lines
16 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
)
(set!
(-> *part-group-id-table* 326)
(new 'static 'sparticle-launch-group
:length 48
:duration #x12c
:linger-duration #x5dc
:name "group-mother-spider-proj-fly"
:launcher
(new 'static 'inline-array sparticle-group-item 48
(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))
)
:bounds (new 'static 'sphere :w 12288.0)
)
)
(set!
(-> *part-id-table* 718)
(new 'static 'sparticle-launcher
:init-specs
(new 'static 'inline-array sp-field-init-spec 9
(sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2))
(sp-flt spt-num 1.0)
(sp-flt spt-scale-x (meters 0.01))
(sp-copy-from-other spt-scale-y -4)
(sp-flt spt-a 0.0)
(sp-int spt-timer 1200)
(sp-cpuinfo-flags bit3)
(sp-func spt-func 'sparticle-track-root-prim)
(sp-end)
)
)
)
(set!
(-> *part-id-table* 716)
(new 'static 'sparticle-launcher
:init-specs
(new 'static 'inline-array sp-field-init-spec 22
(sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2))
(sp-flt spt-num 1.0)
(sp-flt spt-scale-x (meters 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 96.0 64.0 1.0)
(sp-rnd-flt spt-g 64.0 32.0 1.0)
(sp-rnd-flt spt-b 96.0 64.0 1.0)
(sp-flt spt-a 128.0)
(sp-flt spt-scalevel-x (meters -0.006666667))
(sp-copy-from-other spt-scalevel-y -4)
(sp-flt spt-fade-r -1.0666667)
(sp-flt spt-fade-g -1.0666667)
(sp-flt spt-fade-b 0.0)
(sp-int spt-timer 150)
(sp-cpuinfo-flags bit2)
(sp-int spt-next-time 81)
(sp-launcher-by-id spt-next-launcher 720)
(sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0)
(sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
(sp-flt spt-conerot-radius (meters 0.1))
(sp-end)
)
)
)
(set!
(-> *part-id-table* 720)
(new 'static 'sparticle-launcher
:init-specs
(new 'static 'inline-array sp-field-init-spec 4
(sp-flt spt-fade-r 0.0)
(sp-flt spt-fade-g 0.0)
(sp-flt spt-fade-b 0.0)
(sp-end)
)
)
)
(set!
(-> *part-id-table* 717)
(new 'static 'sparticle-launcher
:init-specs
(new 'static 'inline-array sp-field-init-spec 25
(sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2))
(sp-rnd-flt spt-num 1.0 5.0 1.0)
(sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.1) 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 96.0 64.0 1.0)
(sp-rnd-flt spt-g 64.0 32.0 1.0)
(sp-rnd-flt spt-b 96.0 64.0 1.0)
(sp-flt spt-a 128.0)
(sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.0033333334) 1.0)
(sp-flt spt-scalevel-x (meters -0.0026666666))
(sp-copy-from-other spt-scalevel-y -4)
(sp-flt spt-fade-r -1.0666667)
(sp-flt spt-fade-g -1.0666667)
(sp-flt spt-fade-b 0.0)
(sp-flt spt-accel-y -2.7306666)
(sp-flt spt-friction 0.97)
(sp-int-plain-rnd spt-timer 30 119 1)
(sp-cpuinfo-flags bit2)
(sp-int spt-next-time 60)
(sp-launcher-by-id spt-next-launcher 720)
(sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0)
(sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
(sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 0.4) 1.0)
(sp-end)
)
)
)
(set!
(-> *part-group-id-table* 327)
(new 'static 'sparticle-launch-group
:length 3
:duration #x5
:linger-duration #x5dc
:flags (sp-group-flag use-local-clock)
:name "group-mother-spider-proj-hit"
:launcher
(new 'static 'inline-array sparticle-group-item 3
(sp-item 722)
(sp-item 723)
(sp-item 724)
)
:bounds (new 'static 'sphere :w 32768.0)
)
)
(set!
(-> *part-id-table* 722)
(new 'static 'sparticle-launcher
:init-specs
(new 'static 'inline-array sp-field-init-spec 24
(sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2))
(sp-flt spt-num 64.0)
(sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.2) 1.0)
(sp-copy-from-other spt-scale-y -4)
(sp-rnd-flt spt-r 192.0 32.0 1.0)
(sp-rnd-flt spt-g 64.0 32.0 1.0)
(sp-rnd-flt spt-b 96.0 64.0 1.0)
(sp-flt spt-a 128.0)
(sp-rnd-flt spt-vel-y (meters 0.10666667) (meters 0.10666667) 1.0)
(sp-flt spt-scalevel-x (meters -0.006666667))
(sp-copy-from-other spt-scalevel-y -4)
(sp-flt spt-fade-r -0.7111111)
(sp-flt spt-fade-g -0.7111111)
(sp-flt spt-fade-b 0.0)
(sp-flt spt-accel-y -0.68266666)
(sp-rnd-flt spt-friction 0.85 0.05 1.0)
(sp-int-plain-rnd spt-timer 30 119 1)
(sp-cpuinfo-flags bit2)
(sp-int spt-next-time 90)
(sp-launcher-by-id spt-next-launcher 720)
(sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0)
(sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
(sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 0.4) 1.0)
(sp-end)
)
)
)
(set!
(-> *part-id-table* 724)
(new 'static 'sparticle-launcher
:init-specs
(new 'static 'inline-array sp-field-init-spec 21
(sp-tex spt-texture (new 'static 'texture-id :page #x2))
(sp-flt spt-num 6.0)
(sp-rnd-flt spt-scale-x (meters 3.0) (meters 3.0) 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 96.0 64.0 1.0)
(sp-rnd-flt spt-g 64.0 32.0 1.0)
(sp-rnd-flt spt-b 96.0 64.0 1.0)
(sp-rnd-flt spt-a 32.0 32.0 1.0)
(sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0)
(sp-flt spt-fade-r -0.35555556)
(sp-flt spt-fade-g -0.35555556)
(sp-flt spt-fade-b 0.0)
(sp-flt spt-fade-a -0.30476192)
(sp-rnd-flt spt-accel-y -0.68266666 0.68266666 1.0)
(sp-int spt-timer 210)
(sp-cpuinfo-flags bit2)
(sp-int spt-next-time 60)
(sp-launcher-by-id spt-next-launcher 720)
(sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 180.0) 1.0)
(sp-end)
)
)
)
(set!
(-> *part-id-table* 723)
(new 'static 'sparticle-launcher
:init-specs
(new 'static 'inline-array sp-field-init-spec 13
(sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2))
(sp-flt spt-num 1.0)
(sp-rnd-flt spt-scale-x (meters 6.0) (meters 1.0) 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 128.0 32.0 1.0)
(sp-rnd-flt spt-g 64.0 32.0 1.0)
(sp-rnd-flt spt-b 128.0 32.0 1.0)
(sp-flt spt-a 96.0)
(sp-flt spt-fade-a -4.8)
(sp-int spt-timer 15)
(sp-cpuinfo-flags bit2)
(sp-end)
)
)
)
(set!
(-> *part-group-id-table* 328)
(new 'static 'sparticle-launch-group
:length 1
:duration #x5
:linger-duration #x5dc
:flags (sp-group-flag use-local-clock)
:name "group-mother-spider-proj-die"
:launcher
(new 'static 'inline-array sparticle-group-item 1 (sp-item 722))
:bounds (new 'static 'sphere :w 32768.0)
)
)
(defmethod dummy-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) (the-as uint 32))
(-> 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
(the-as uint 1)
(the-as process #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) 4)
(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 'vector)))
(matrix-from-two-vectors-max-angle-partial!
(the-as matrix s3-2)
s5-0
s4-0
(* (-> arg0 max-turn) (-> *display* seconds-per-frame))
(-> arg0 tween)
)
(vector-matrix*! s5-0 s5-0 (the-as matrix s3-2))
)
(vector-normalize! s5-0 1.0)
(vector-float*! (-> arg0 root-override transv) s5-0 (-> arg0 max-speed))
)
)
0
(none)
)
(defmethod dummy-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) (the-as uint 1024))
(set! (-> s4-0 collide-with) (the-as uint 2973))
(set! (-> s4-0 prim-core action) (the-as uint 1))
(set! (-> s4-0 prim-core offense) 3)
(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))
(set! (-> obj mask) (logior (process-mask projectile) (-> obj mask)))
0
(none)
)
(defmethod dummy-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) (the-as uint 1200))
(set! (-> obj target quad) (-> (target-pos 0) quad))
(set! (-> obj target y) (+ 4915.2 (-> obj target y)))
(set! (-> obj target-base quad) (-> obj target quad))
(set!
(-> obj sound-id)
(sound-play-by-name
(static-sound-name "mother-track")
(new-sound-id)
1024
0
0
1
#t
)
)
(sound-play-by-name
(static-sound-name "mother-fire")
(new-sound-id)
1024
0
0
1
#t
)
(none)
)
(defmethod dummy-28 mother-spider-proj ((obj mother-spider-proj))
(when (and *target* (zero? (logand (-> *target* state-flags) #x80f8)))
(let ((gp-0 (-> obj target)))
(set! (-> gp-0 quad) (-> (target-pos 0) quad))
(set! (-> gp-0 y) (+ 4915.2 (-> gp-0 y)))
(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 ()
(let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000)))
(when gp-0
(let ((t9-1 (method-of-type part-tracker activate)))
(t9-1
(the-as part-tracker gp-0)
*entity-pool*
'part-tracker
(the-as pointer #x70004000)
)
)
(run-now-in-process
gp-0
part-tracker-init
(-> *part-group-id-table* 327)
-1
#f
#f
#f
(-> self root-override trans)
)
(-> gp-0 ppointer)
)
)
(if (nonzero? (-> self sound-id))
(sound-stop (-> self sound-id))
)
(sound-play-by-name
(static-sound-name "mother-hit")
(new-sound-id)
1024
0
0
1
#t
)
(suspend)
(go-virtual projectile-die)
(none)
)
)
(defstate projectile-dissipate (mother-spider-proj)
:virtual #t
:code
(behavior ()
(let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000)))
(when gp-0
(let ((t9-1 (method-of-type part-tracker activate)))
(t9-1
(the-as part-tracker gp-0)
*entity-pool*
'part-tracker
(the-as pointer #x70004000)
)
)
(run-now-in-process
gp-0
part-tracker-init
(-> *part-group-id-table* 328)
-1
#f
#f
#f
(-> self root-override trans)
)
(-> gp-0 ppointer)
)
)
(if (nonzero? (-> self sound-id))
(sound-stop (-> self sound-id))
)
(suspend)
(go-virtual projectile-die)
(none)
)
)