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)
516 lines
19 KiB
Common Lisp
516 lines
19 KiB
Common Lisp
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; name: widow-more-extras.gc
|
|
;; name in dgo: widow-more-extras
|
|
;; dgos: TOA
|
|
|
|
;; DECOMP BEGINS
|
|
|
|
(deftype tomb-boss-debris (process-drawable)
|
|
((root-override collide-shape-moving :offset 128)
|
|
(y-velocity float :offset-assert 200)
|
|
(floor float :offset-assert 204)
|
|
(sound-floor float :offset-assert 208)
|
|
(rot quaternion :inline :offset-assert 224)
|
|
(look int32 :offset-assert 240)
|
|
)
|
|
:heap-base #x80
|
|
:method-count-assert 22
|
|
:size-assert #xf4
|
|
:flag-assert #x16008000f4
|
|
(:methods
|
|
(die () _type_ :state 20)
|
|
(idle () _type_ :state 21)
|
|
)
|
|
)
|
|
|
|
|
|
(defskelgroup skel-tomb-boss-debris-a tomb-boss-debris tomb-boss-debris-a-lod0-jg tomb-boss-debris-a-idle-ja
|
|
((tomb-boss-debris-a-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 0 0 4)
|
|
)
|
|
|
|
(defskelgroup skel-tomb-boss-debris-b tomb-boss-debris tomb-boss-debris-b-lod0-jg tomb-boss-debris-b-idle-ja
|
|
((tomb-boss-debris-b-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 0 0 4)
|
|
)
|
|
|
|
(defskelgroup skel-tomb-boss-debris-c tomb-boss-debris tomb-boss-debris-c-lod0-jg tomb-boss-debris-c-idle-ja
|
|
((tomb-boss-debris-c-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 0 0 4)
|
|
)
|
|
|
|
(defskelgroup skel-tomb-boss-debris-d tomb-boss-debris tomb-boss-debris-d-lod0-jg tomb-boss-debris-d-idle-ja
|
|
((tomb-boss-debris-d-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 0 0 4)
|
|
)
|
|
|
|
(defskelgroup skel-tomb-boss-debris-e tomb-boss-debris tomb-boss-debris-e-lod0-jg tomb-boss-debris-e-idle-ja
|
|
((tomb-boss-debris-e-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 0 0 4)
|
|
)
|
|
|
|
(defskelgroup skel-tomb-boss-debris-f tomb-boss-debris tomb-boss-debris-f-lod0-jg tomb-boss-debris-f-idle-ja
|
|
((tomb-boss-debris-f-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 0 0 4)
|
|
)
|
|
|
|
(defskelgroup skel-tomb-boss-debris-g tomb-boss-debris tomb-boss-debris-g-lod0-jg tomb-boss-debris-g-idle-ja
|
|
((tomb-boss-debris-g-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 0 0 4)
|
|
)
|
|
|
|
(defskelgroup skel-tomb-boss-debris-h tomb-boss-debris tomb-boss-debris-h-lod0-jg tomb-boss-debris-h-idle-ja
|
|
((tomb-boss-debris-h-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 0 0 4)
|
|
)
|
|
|
|
(defskelgroup skel-tomb-boss-debris-i tomb-boss-debris tomb-boss-debris-i-lod0-jg tomb-boss-debris-i-idle-ja
|
|
((tomb-boss-debris-i-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 0 0 4)
|
|
)
|
|
|
|
(defstate die (tomb-boss-debris)
|
|
:virtual #t
|
|
:enter (behavior ()
|
|
(let ((v1-1 (-> self root-override root-prim)))
|
|
(set! (-> v1-1 prim-core collide-as) (collide-spec))
|
|
(set! (-> v1-1 prim-core collide-with) (collide-spec))
|
|
)
|
|
0
|
|
(logior! (-> self draw status) (draw-control-status no-draw))
|
|
(none)
|
|
)
|
|
:code (behavior ()
|
|
(suspend)
|
|
(suspend)
|
|
0
|
|
(none)
|
|
)
|
|
)
|
|
|
|
(defstate idle (tomb-boss-debris)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block))
|
|
(case event-type
|
|
(('touched 'touch 'attack)
|
|
(let ((v1-2 (-> self look)))
|
|
(cond
|
|
((or (zero? v1-2) (= v1-2 1) (= v1-2 2))
|
|
(let ((s5-0 (get-process *default-dead-pool* part-tracker #x4000)))
|
|
(when s5-0
|
|
(let ((t9-1 (method-of-type part-tracker activate)))
|
|
(t9-1
|
|
(the-as part-tracker s5-0)
|
|
*entity-pool*
|
|
(symbol->string (-> part-tracker symbol))
|
|
(the-as pointer #x70004000)
|
|
)
|
|
)
|
|
(let ((t9-2 run-function-in-process)
|
|
(a0-8 s5-0)
|
|
(a1-7 part-tracker-init)
|
|
(a2-5 (-> *part-group-id-table* 734))
|
|
(a3-2 5)
|
|
(t0-0 #f)
|
|
(t1-0 #f)
|
|
(t2-0 #f)
|
|
(t3-0 *launch-matrix*)
|
|
)
|
|
(set! (-> t3-0 trans quad) (-> self root-override trans quad))
|
|
((the-as (function object object object object object object object object none) t9-2)
|
|
a0-8
|
|
a1-7
|
|
a2-5
|
|
a3-2
|
|
t0-0
|
|
t1-0
|
|
t2-0
|
|
t3-0
|
|
)
|
|
)
|
|
(-> s5-0 ppointer)
|
|
)
|
|
)
|
|
(send-event proc 'debris-hit 1)
|
|
)
|
|
((or (= v1-2 3) (= v1-2 4) (= v1-2 5))
|
|
(let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000)))
|
|
(when s5-1
|
|
(let ((t9-5 (method-of-type part-tracker activate)))
|
|
(t9-5
|
|
(the-as part-tracker s5-1)
|
|
*entity-pool*
|
|
(symbol->string (-> part-tracker symbol))
|
|
(the-as pointer #x70004000)
|
|
)
|
|
)
|
|
(let ((t9-6 run-function-in-process)
|
|
(a0-16 s5-1)
|
|
(a1-13 part-tracker-init)
|
|
(a2-10 (-> *part-group-id-table* 735))
|
|
(a3-4 5)
|
|
(t0-1 #f)
|
|
(t1-1 #f)
|
|
(t2-1 #f)
|
|
(t3-1 *launch-matrix*)
|
|
)
|
|
(set! (-> t3-1 trans quad) (-> self root-override trans quad))
|
|
((the-as (function object object object object object object object object none) t9-6)
|
|
a0-16
|
|
a1-13
|
|
a2-10
|
|
a3-4
|
|
t0-1
|
|
t1-1
|
|
t2-1
|
|
t3-1
|
|
)
|
|
)
|
|
(-> s5-1 ppointer)
|
|
)
|
|
)
|
|
(send-event proc 'debris-hit 2)
|
|
)
|
|
(else
|
|
(let ((s5-2 (get-process *default-dead-pool* part-tracker #x4000)))
|
|
(when s5-2
|
|
(let ((t9-9 (method-of-type part-tracker activate)))
|
|
(t9-9
|
|
(the-as part-tracker s5-2)
|
|
*entity-pool*
|
|
(symbol->string (-> part-tracker symbol))
|
|
(the-as pointer #x70004000)
|
|
)
|
|
)
|
|
(let ((t9-10 run-function-in-process)
|
|
(a0-21 s5-2)
|
|
(a1-17 part-tracker-init)
|
|
(a2-15 (-> *part-group-id-table* 736))
|
|
(a3-6 5)
|
|
(t0-2 #f)
|
|
(t1-2 #f)
|
|
(t2-2 #f)
|
|
(t3-2 *launch-matrix*)
|
|
)
|
|
(set! (-> t3-2 trans quad) (-> self root-override trans quad))
|
|
((the-as (function object object object object object object object object none) t9-10)
|
|
a0-21
|
|
a1-17
|
|
a2-15
|
|
a3-6
|
|
t0-2
|
|
t1-2
|
|
t2-2
|
|
t3-2
|
|
)
|
|
)
|
|
(-> s5-2 ppointer)
|
|
)
|
|
)
|
|
(send-event proc 'debris-hit 3)
|
|
)
|
|
)
|
|
)
|
|
(go-virtual die)
|
|
)
|
|
)
|
|
)
|
|
:enter (behavior ()
|
|
(set! (-> self sound-floor) 81920.0)
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(local-vars (sv-16 float))
|
|
(+! (-> self root-override trans y) (* (-> self y-velocity) (-> self clock time-adjust-ratio)))
|
|
(set! (-> self y-velocity)
|
|
(fmax -3686.4 (- (-> self y-velocity) (* 204.8 (-> self clock time-adjust-ratio))))
|
|
)
|
|
(if (< (-> self root-override trans y) (-> self floor))
|
|
(deactivate self)
|
|
)
|
|
(when (and (logtest? (-> self draw status) (draw-control-status on-screen))
|
|
(< (-> self root-override trans y) (+ (-> (camera-pos) y) (-> self sound-floor)))
|
|
)
|
|
(sound-play "wid-debris-fall")
|
|
(set! (-> self sound-floor) -4096000.0)
|
|
)
|
|
(quaternion-normalize! (quaternion*! (-> self root-override quat) (-> self rot) (-> self root-override quat)))
|
|
(let ((f30-1 (lerp-scale 1.0 0.0 (-> self root-override trans y) -368640.0 -442368.0)))
|
|
(when (< -442368.0 (-> self root-override trans y))
|
|
(let ((f28-0 (-> *part-id-table* 3266 init-specs 6 initial-valuef))
|
|
(f26-0 (-> *part-id-table* 3266 init-specs 6 random-rangef))
|
|
(f24-0 (-> *part-id-table* 3266 init-specs 7 initial-valuef))
|
|
(f22-0 (-> *part-id-table* 3266 init-specs 7 random-rangef))
|
|
(f20-0 (-> *part-id-table* 3266 init-specs 8 initial-valuef))
|
|
)
|
|
(set! sv-16 (-> *part-id-table* 3266 init-specs 8 random-rangef))
|
|
(set! (-> *part-id-table* 3266 init-specs 6 initial-valuef)
|
|
(* (-> *part-id-table* 3266 init-specs 6 initial-valuef) f30-1)
|
|
)
|
|
(set! (-> *part-id-table* 3266 init-specs 6 random-rangef)
|
|
(* (-> *part-id-table* 3266 init-specs 6 random-rangef) f30-1)
|
|
)
|
|
(set! (-> *part-id-table* 3266 init-specs 7 initial-valuef)
|
|
(* (-> *part-id-table* 3266 init-specs 7 initial-valuef) f30-1)
|
|
)
|
|
(set! (-> *part-id-table* 3266 init-specs 7 random-rangef)
|
|
(* (-> *part-id-table* 3266 init-specs 7 random-rangef) f30-1)
|
|
)
|
|
(set! (-> *part-id-table* 3266 init-specs 8 initial-valuef)
|
|
(* (-> *part-id-table* 3266 init-specs 8 initial-valuef) f30-1)
|
|
)
|
|
(set! (-> *part-id-table* 3266 init-specs 8 random-rangef)
|
|
(* (-> *part-id-table* 3266 init-specs 8 random-rangef) f30-1)
|
|
)
|
|
(spawn (-> self part) (-> self root-override trans))
|
|
(set! (-> *part-id-table* 3266 init-specs 6 initial-valuef) f28-0)
|
|
(set! (-> *part-id-table* 3266 init-specs 6 random-rangef) f26-0)
|
|
(set! (-> *part-id-table* 3266 init-specs 7 initial-valuef) f24-0)
|
|
(set! (-> *part-id-table* 3266 init-specs 7 random-rangef) f22-0)
|
|
(set! (-> *part-id-table* 3266 init-specs 8 initial-valuef) f20-0)
|
|
)
|
|
(set! (-> *part-id-table* 3266 init-specs 8 random-rangef) sv-16)
|
|
sv-16
|
|
)
|
|
(set-vector! (-> self draw color-mult) f30-1 f30-1 f30-1 1.0)
|
|
)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior tomb-boss-debris) sleep-code)
|
|
:post (behavior ()
|
|
(transform-post)
|
|
(let ((a1-0 (new 'stack-no-clear 'overlaps-others-params)))
|
|
(set! (-> a1-0 options) (overlaps-others-options oo0))
|
|
(set! (-> a1-0 collide-with-filter) (the-as collide-spec -1))
|
|
(set! (-> a1-0 tlist) *touching-list*)
|
|
(find-overlapping-shapes (-> self root-override) a1-0)
|
|
)
|
|
(none)
|
|
)
|
|
)
|
|
|
|
;; WARN: Return type mismatch object vs none.
|
|
(defbehavior tomb-boss-debris-init-by-other tomb-boss-debris ((arg0 vector) (arg1 int))
|
|
(let ((s4-0 (new 'process 'collide-shape-moving self (collide-list-enum usually-hit-by-player))))
|
|
(set! (-> s4-0 dynam) (copy *standard-dynamics* 'process))
|
|
(set! (-> s4-0 reaction) cshape-reaction-default)
|
|
(set! (-> s4-0 no-reaction)
|
|
(the-as (function collide-shape-moving collide-query vector vector object) nothing)
|
|
)
|
|
(set! (-> s4-0 penetrated-by) (penetrate
|
|
generic-attack
|
|
lunge
|
|
flop
|
|
punch
|
|
spin
|
|
roll
|
|
uppercut
|
|
bonk
|
|
tube
|
|
vehicle
|
|
flut-attack
|
|
board
|
|
mech-punch
|
|
dark-punch
|
|
dark-giant
|
|
)
|
|
)
|
|
(let ((v1-7 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0))))
|
|
(set! (-> v1-7 prim-core collide-as) (collide-spec enemy))
|
|
(set! (-> v1-7 prim-core collide-with) (collide-spec jak bot enemy hit-by-others-list player-list))
|
|
(set! (-> v1-7 prim-core action) (collide-action solid))
|
|
(set-vector! (-> v1-7 local-sphere) 0.0 0.0 0.0 6144.0)
|
|
(set! (-> s4-0 total-prims) (the-as uint 1))
|
|
(set! (-> s4-0 root-prim) v1-7)
|
|
)
|
|
(set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w)))
|
|
(let ((v1-10 (-> s4-0 root-prim)))
|
|
(set! (-> s4-0 backup-collide-as) (-> v1-10 prim-core collide-as))
|
|
(set! (-> s4-0 backup-collide-with) (-> v1-10 prim-core collide-with))
|
|
)
|
|
(set! (-> s4-0 event-self) 'touched)
|
|
(set! (-> self root-override) s4-0)
|
|
)
|
|
(set! (-> self root-override trans quad) (-> arg0 quad))
|
|
(let ((v1-15 arg1))
|
|
(cond
|
|
((zero? v1-15)
|
|
(initialize-skeleton
|
|
self
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-tomb-boss-debris-a" (the-as (pointer uint32) #f)))
|
|
(the-as pair 0)
|
|
)
|
|
)
|
|
((= v1-15 1)
|
|
(initialize-skeleton
|
|
self
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-tomb-boss-debris-b" (the-as (pointer uint32) #f)))
|
|
(the-as pair 0)
|
|
)
|
|
)
|
|
((= v1-15 2)
|
|
(set! (-> self root-override root-prim local-sphere w) 5120.0)
|
|
(initialize-skeleton
|
|
self
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-tomb-boss-debris-c" (the-as (pointer uint32) #f)))
|
|
(the-as pair 0)
|
|
)
|
|
)
|
|
((= v1-15 3)
|
|
(set! (-> self root-override root-prim local-sphere w) 3276.8)
|
|
(initialize-skeleton
|
|
self
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-tomb-boss-debris-d" (the-as (pointer uint32) #f)))
|
|
(the-as pair 0)
|
|
)
|
|
)
|
|
((= v1-15 4)
|
|
(set! (-> self root-override root-prim local-sphere w) 3276.8)
|
|
(initialize-skeleton
|
|
self
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-tomb-boss-debris-e" (the-as (pointer uint32) #f)))
|
|
(the-as pair 0)
|
|
)
|
|
)
|
|
((= v1-15 5)
|
|
(set! (-> self root-override root-prim local-sphere w) 4096.0)
|
|
(initialize-skeleton
|
|
self
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-tomb-boss-debris-f" (the-as (pointer uint32) #f)))
|
|
(the-as pair 0)
|
|
)
|
|
)
|
|
((= v1-15 6)
|
|
(set! (-> self root-override root-prim local-sphere w) 1638.4)
|
|
(initialize-skeleton
|
|
self
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-tomb-boss-debris-g" (the-as (pointer uint32) #f)))
|
|
(the-as pair 0)
|
|
)
|
|
)
|
|
((= v1-15 7)
|
|
(set! (-> self root-override root-prim local-sphere w) 1638.4)
|
|
(initialize-skeleton
|
|
self
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-tomb-boss-debris-h" (the-as (pointer uint32) #f)))
|
|
(the-as pair 0)
|
|
)
|
|
)
|
|
(else
|
|
(set! (-> self root-override root-prim local-sphere w) 1638.4)
|
|
(initialize-skeleton
|
|
self
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-tomb-boss-debris-i" (the-as (pointer uint32) #f)))
|
|
(the-as pair 0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> self look) arg1)
|
|
(set! (-> self y-velocity) -409.6)
|
|
(set! (-> self floor) (+ -655360.0 (-> self root-override trans y)))
|
|
(logclear! (-> self mask) (process-mask actor-pause))
|
|
(let ((f30-0 (rand-vu-float-range 0.0 65536.0))
|
|
(f28-0 (rand-vu-float-range 546.13336 1638.4))
|
|
)
|
|
(quaternion-axis-angle! (-> self rot) (sin f30-0) 0.0 (cos f30-0) f28-0)
|
|
)
|
|
(set! (-> self part) (create-launch-control (-> *part-group-id-table* 733) self))
|
|
(go-virtual idle)
|
|
(none)
|
|
)
|
|
|
|
(deftype cave-in-master (process-drawable)
|
|
((prev-points int32 100 :offset-assert 200)
|
|
)
|
|
:heap-base #x1e0
|
|
:method-count-assert 22
|
|
:size-assert #x258
|
|
:flag-assert #x1601e00258
|
|
(:methods
|
|
(idle () _type_ :state 20)
|
|
(wait () _type_ :state 21)
|
|
)
|
|
)
|
|
|
|
|
|
(defbehavior cavein-get-random-point cave-in-master ((arg0 vector))
|
|
(when (> (-> self path curve num-cverts) 0)
|
|
(let* ((s5-1 (min 100 (-> self path curve num-cverts)))
|
|
(v1-5 (rand-vu-int-count s5-1))
|
|
)
|
|
(while (> (-> self prev-points v1-5) 0)
|
|
(+! (-> self prev-points v1-5) -1)
|
|
(+! v1-5 1)
|
|
(if (>= v1-5 s5-1)
|
|
(set! v1-5 (- v1-5 s5-1))
|
|
)
|
|
)
|
|
(set! (-> self prev-points v1-5) 6)
|
|
(set! (-> arg0 quad) (-> self path curve cverts v1-5 quad))
|
|
)
|
|
)
|
|
arg0
|
|
)
|
|
|
|
(defstate idle (cave-in-master)
|
|
:virtual #t
|
|
:enter (behavior ()
|
|
(set! (-> self state-time) (-> self clock frame-counter))
|
|
(none)
|
|
)
|
|
:trans (behavior ()
|
|
(spawn (-> self part) (-> self root trans))
|
|
(when (>= (- (-> self clock frame-counter) (-> self state-time)) 0)
|
|
(let ((gp-0 (new 'stack-no-clear 'vector)))
|
|
(cavein-get-random-point gp-0)
|
|
(set! (-> gp-0 y) (+ 327680.0 (-> gp-0 y)))
|
|
(process-spawn tomb-boss-debris gp-0 (rand-vu-int-count 8) :to self)
|
|
)
|
|
(set! (-> self state-time)
|
|
(+ (-> self clock frame-counter) (the int (* 300.0 (rand-vu-float-range 0.1 0.5))))
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
:code (the-as (function none :behavior cave-in-master) sleep-code)
|
|
)
|
|
|
|
(defstate wait (cave-in-master)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block))
|
|
(case event-type
|
|
(('start)
|
|
(go-virtual idle)
|
|
)
|
|
)
|
|
)
|
|
:code (the-as (function none :behavior cave-in-master) sleep-code)
|
|
)
|
|
|
|
;; WARN: Return type mismatch object vs none.
|
|
(defmethod init-from-entity! cave-in-master ((obj cave-in-master) (arg0 entity-actor))
|
|
"Typically the method that does the initial setup on the process, potentially using the [[entity-actor]] provided as part of that.
|
|
This commonly includes things such as:
|
|
- stack size
|
|
- collision information
|
|
- loading the skeleton group / bones
|
|
- sounds"
|
|
(set! (-> obj root) (new 'process 'trsqv))
|
|
(process-drawable-from-entity! obj arg0)
|
|
(set! (-> obj path) (new 'process 'path-control obj 'path 0.0 (the-as entity #f) #f))
|
|
(if (-> obj path)
|
|
(logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text))
|
|
)
|
|
(set! (-> obj root trans y) (+ 327680.0 (-> obj root trans y)))
|
|
(logclear! (-> obj mask) (process-mask actor-pause))
|
|
(dotimes (v1-12 100)
|
|
(set! (-> obj prev-points v1-12) 0)
|
|
)
|
|
(set! (-> obj part) (create-launch-control (-> *part-group-id-table* 737) obj))
|
|
(go (method-of-object obj wait))
|
|
(none)
|
|
)
|