2022-06-30 01:22:51 -04:00
|
|
|
;;-*-Lisp-*-
|
|
|
|
(in-package goal)
|
|
|
|
|
|
|
|
;; name: strip-drop.gc
|
|
|
|
;; name in dgo: strip-drop
|
|
|
|
;; dgos: STR
|
|
|
|
|
2022-08-05 16:12:54 -04:00
|
|
|
;; DECOMP BEGINS
|
|
|
|
|
2023-01-14 11:30:58 -05:00
|
|
|
(defpartgroup group-strip-drop-splash
|
|
|
|
:id 234
|
|
|
|
:duration (seconds 2)
|
|
|
|
:flags (use-local-clock)
|
|
|
|
:bounds (static-bspherem 0 0 0 8)
|
|
|
|
:parts ((sp-item 1111 :period 900 :length 40)
|
|
|
|
(sp-item 1111 :period 900 :length 30)
|
|
|
|
(sp-item 1111 :period 900 :length 20)
|
|
|
|
(sp-item 1111 :period 900 :length 10)
|
|
|
|
(sp-item 1111 :period 900 :length 5)
|
|
|
|
(sp-item 1112 :flags (is-3d) :period 900 :length 5)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
(defpart 1112
|
|
|
|
:init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x33 :page #xc))
|
|
|
|
(sp-flt spt-num 3.0)
|
|
|
|
(sp-rnd-flt spt-y (meters 0) (meters 4) 1.0)
|
|
|
|
(sp-flt spt-scale-x (meters 40))
|
|
|
|
(sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.0) 1.0)
|
|
|
|
(sp-copy-from-other spt-scale-y -4)
|
|
|
|
(sp-flt spt-r 0.0)
|
|
|
|
(sp-flt spt-g 0.0)
|
|
|
|
(sp-flt spt-b 0.0)
|
|
|
|
(sp-flt spt-a 128.0)
|
|
|
|
(sp-rnd-flt spt-vel-y (meters 0.05) (meters 0.016666668) 1.0)
|
|
|
|
(sp-rnd-flt spt-scalevel-x (meters 0.5) (meters 0.5) 1.0)
|
|
|
|
(sp-copy-from-other spt-scalevel-y -4)
|
|
|
|
(sp-flt spt-fade-a -1.0666667)
|
|
|
|
(sp-flt spt-accel-y -6.826667)
|
|
|
|
(sp-int spt-timer 120)
|
|
|
|
(sp-cpuinfo-flags sp-cpuinfo-flag-2)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
(defpart 1111
|
|
|
|
:init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc))
|
|
|
|
(sp-flt spt-num 32.0)
|
|
|
|
(sp-flt spt-y (meters 3))
|
|
|
|
(sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.2) 1.0)
|
|
|
|
(sp-int spt-rot-x 4)
|
|
|
|
(sp-copy-from-other spt-scale-y -4)
|
|
|
|
(sp-flt spt-r 0.0)
|
|
|
|
(sp-flt spt-g 0.0)
|
|
|
|
(sp-flt spt-b 0.0)
|
|
|
|
(sp-flt spt-a 128.0)
|
|
|
|
(sp-rnd-flt spt-omega 4.096 2.048 1.0)
|
|
|
|
(sp-rnd-flt spt-vel-y (meters 0.16666667) (meters 0.33333334) 1.0)
|
|
|
|
(sp-rnd-flt spt-accel-y -20.48 -2.7306666 1.0)
|
|
|
|
(sp-flt spt-friction 0.95)
|
|
|
|
(sp-int spt-timer 1200)
|
|
|
|
(sp-cpuinfo-flags sp-cpuinfo-flag-2)
|
|
|
|
(sp-flt spt-userdata 290611.2)
|
|
|
|
(sp-func spt-func 'check-drop-level-strip-crate-drop-userdata)
|
|
|
|
(sp-int-plain-rnd spt-next-time 0 174 1)
|
|
|
|
(sp-launcher-by-id spt-next-launcher 1113)
|
|
|
|
(sp-rnd-flt spt-conerot-x (degrees 75.0) (degrees 15.0) 1.0)
|
|
|
|
(sp-rnd-flt spt-conerot-y (degrees -100.00001) (degrees 120.0) 1.0)
|
|
|
|
(sp-flt spt-conerot-radius (meters 16))
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
(defpart 1113
|
|
|
|
:init-specs ((sp-rnd-flt spt-r 64.0 64.0 1.0)
|
|
|
|
(sp-flt spt-g 0.0)
|
|
|
|
(sp-rnd-flt spt-b 128.0 128.0 1.0)
|
|
|
|
(sp-flt spt-fade-r -6.4)
|
|
|
|
(sp-flt spt-fade-b -12.8)
|
|
|
|
(sp-int-plain-rnd spt-next-time 0 224 1)
|
|
|
|
(sp-launcher-by-id spt-next-launcher 1113)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
(defpart 1114
|
|
|
|
:init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x33 :page #xc))
|
|
|
|
(sp-flt spt-num 0.3)
|
|
|
|
(sp-rnd-flt spt-scale-x (meters 3) (meters 0.5) 1.0)
|
|
|
|
(sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.0) 1.0)
|
|
|
|
(sp-copy-from-other spt-scale-y -4)
|
|
|
|
(sp-flt spt-r 0.0)
|
|
|
|
(sp-flt spt-g 0.0)
|
|
|
|
(sp-flt spt-b 0.0)
|
|
|
|
(sp-flt spt-a 0.0)
|
|
|
|
(sp-rnd-flt spt-scalevel-x (meters 0.35) (meters 0.35) 1.0)
|
|
|
|
(sp-copy-from-other spt-scalevel-y -4)
|
|
|
|
(sp-rnd-flt spt-fade-a 0.8 0.8 1.0)
|
|
|
|
(sp-int spt-timer 450)
|
|
|
|
(sp-cpuinfo-flags sp-cpuinfo-flag-2)
|
|
|
|
(sp-int spt-next-time 20)
|
|
|
|
(sp-launcher-by-id spt-next-launcher 1115)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
(defpart 1115
|
|
|
|
:init-specs ((sp-flt spt-scalevel-x (meters 0)) (sp-copy-from-other spt-scalevel-y -4) (sp-flt spt-fade-a 0.0))
|
|
|
|
)
|
|
|
|
|
|
|
|
(defpart 1116
|
|
|
|
:init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc))
|
|
|
|
(sp-rnd-flt spt-num 0.0 2.5 1.0)
|
|
|
|
(sp-rnd-flt spt-scale-x (meters 0.35) (meters 0.2) 1.0)
|
|
|
|
(sp-int spt-rot-x 4)
|
|
|
|
(sp-copy-from-other spt-scale-y -4)
|
|
|
|
(sp-flt spt-r 0.0)
|
|
|
|
(sp-flt spt-g 0.0)
|
|
|
|
(sp-flt spt-b 0.0)
|
|
|
|
(sp-rnd-flt spt-a 64.0 64.0 1.0)
|
|
|
|
(sp-flt spt-omega 8.192)
|
|
|
|
(sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.1) 1.0)
|
|
|
|
(sp-rnd-flt spt-accel-y -20.48 -2.7306666 1.0)
|
|
|
|
(sp-flt spt-friction 0.95)
|
|
|
|
(sp-int spt-timer 600)
|
|
|
|
(sp-cpuinfo-flags sp-cpuinfo-flag-2)
|
|
|
|
(sp-flt spt-userdata 290611.2)
|
|
|
|
(sp-func spt-func 'check-drop-level-strip-crate-drop-userdata-nosplat)
|
|
|
|
(sp-int-plain-rnd spt-next-time 0 99 1)
|
|
|
|
(sp-launcher-by-id spt-next-launcher 1113)
|
|
|
|
(sp-rnd-flt spt-conerot-x (degrees 30.0) (degrees 40.0) 1.0)
|
|
|
|
(sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 3600.0) 1.0)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
(defpart 1117
|
|
|
|
:init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc))
|
|
|
|
(sp-rnd-flt spt-num 0.0 2.0 1.0)
|
|
|
|
(sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.1) 1.0)
|
|
|
|
(sp-int spt-rot-x 4)
|
|
|
|
(sp-copy-from-other spt-scale-y -4)
|
|
|
|
(sp-flt spt-r 0.0)
|
|
|
|
(sp-flt spt-g 0.0)
|
|
|
|
(sp-flt spt-b 0.0)
|
|
|
|
(sp-rnd-flt spt-a 64.0 64.0 1.0)
|
|
|
|
(sp-flt spt-omega 12.288)
|
|
|
|
(sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.1) 1.0)
|
|
|
|
(sp-rnd-flt spt-accel-y -20.48 -2.7306666 1.0)
|
|
|
|
(sp-flt spt-friction 0.95)
|
|
|
|
(sp-int spt-timer 600)
|
|
|
|
(sp-cpuinfo-flags sp-cpuinfo-flag-2)
|
|
|
|
(sp-int-plain-rnd spt-next-time 0 74 1)
|
|
|
|
(sp-launcher-by-id spt-next-launcher 1113)
|
|
|
|
(sp-rnd-flt spt-conerot-x (degrees 30.0) (degrees 40.0) 1.0)
|
|
|
|
(sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 3600.0) 1.0)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
(defun check-drop-level-strip-crate-drop-userdata-nosplat ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix))
|
|
|
|
(when (< (-> arg2 vector 0 y) (-> arg1 user-float))
|
|
|
|
(let ((s3-0 (new 'stack-no-clear 'vector)))
|
|
|
|
(sp-kill-particle arg0 arg1)
|
|
|
|
(set-vector! s3-0 (-> arg2 vector 0 x) (-> arg1 user-float) (-> arg2 vector 0 z) 1.0)
|
|
|
|
(let ((t9-1 sp-launch-particles-var)
|
|
|
|
(a0-3 *sp-particle-system-2d*)
|
|
|
|
(a1-2 (-> *part-id-table* 1117))
|
|
|
|
(a2-1 *launch-matrix*)
|
|
|
|
)
|
|
|
|
(set! (-> a2-1 trans quad) (-> s3-0 quad))
|
|
|
|
(t9-1 a0-3 a1-2 a2-1 (the-as sparticle-launch-state #f) (the-as sparticle-launch-control #f) 1.0)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(sparticle-motion-blur arg0 arg1 (the-as vector arg2))
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
|
|
|
|
(defun check-drop-level-strip-crate-drop-userdata ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix))
|
|
|
|
(when (< (-> arg2 vector 0 y) (-> arg1 user-float))
|
|
|
|
(let ((s3-0 (new 'stack-no-clear 'vector)))
|
|
|
|
(sp-kill-particle arg0 arg1)
|
|
|
|
(set-vector! s3-0 (-> arg2 vector 0 x) (-> arg1 user-float) (-> arg2 vector 0 z) 1.0)
|
|
|
|
(let ((t9-1 sp-launch-particles-var)
|
|
|
|
(a0-3 *sp-particle-system-3d*)
|
|
|
|
(a1-2 (-> *part-id-table* 1114))
|
|
|
|
(a2-1 *launch-matrix*)
|
|
|
|
)
|
|
|
|
(set! (-> a2-1 trans quad) (-> s3-0 quad))
|
|
|
|
(t9-1 a0-3 a1-2 a2-1 (the-as sparticle-launch-state #f) (the-as sparticle-launch-control #f) 1.0)
|
|
|
|
)
|
|
|
|
(let ((t9-2 sp-launch-particles-var)
|
|
|
|
(a0-4 *sp-particle-system-2d*)
|
|
|
|
(a1-3 (-> *part-id-table* 1116))
|
|
|
|
(a2-2 *launch-matrix*)
|
|
|
|
)
|
|
|
|
(set! (-> a2-2 trans quad) (-> s3-0 quad))
|
|
|
|
(t9-2 a0-4 a1-3 a2-2 (the-as sparticle-launch-state #f) (the-as sparticle-launch-control #f) 1.0)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(sparticle-motion-blur arg0 arg1 (the-as vector arg2))
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
|
2023-01-15 11:33:39 -05:00
|
|
|
(defskelgroup skel-cable cable cable-lod0-jg -1
|
|
|
|
((cable-lod0-mg (meters 999999)))
|
2023-01-14 11:30:58 -05:00
|
|
|
:bounds (static-spherem 0 44 0 44)
|
|
|
|
:origin-joint-index 3
|
|
|
|
)
|
|
|
|
|
2023-01-15 11:33:39 -05:00
|
|
|
(defskelgroup skel-cranecrate cranecrate cranecrate-lod0-jg cranecrate-idle-ja
|
|
|
|
((cranecrate-lod0-mg (meters 20)) (cranecrate-lod1-mg (meters 999999)))
|
2023-01-14 11:30:58 -05:00
|
|
|
:bounds (static-spherem 0 -5 0 20)
|
|
|
|
:origin-joint-index 3
|
|
|
|
)
|
|
|
|
|
2023-01-15 11:33:39 -05:00
|
|
|
(defskelgroup skel-crane crane crane-lod0-jg crane-idle-ja
|
|
|
|
((crane-lod0-mg (meters 999999)))
|
|
|
|
:bounds (static-spherem 75 20 0 120)
|
|
|
|
)
|
2023-01-14 11:30:58 -05:00
|
|
|
|
|
|
|
(deftype strip-game-crate (process-drawable)
|
|
|
|
((local-offset vector :inline :offset-assert 208)
|
|
|
|
(swing-angle vector :inline :offset-assert 224)
|
|
|
|
)
|
|
|
|
:heap-base #x70
|
|
|
|
:method-count-assert 23
|
|
|
|
:size-assert #xf0
|
|
|
|
:flag-assert #x17007000f0
|
|
|
|
(:methods
|
|
|
|
(idle () _type_ :state 20)
|
|
|
|
(final-position () _type_ :state 21)
|
|
|
|
(strip-game-crate-method-22 (_type_ vector quaternion) none 22)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
2023-01-15 11:33:39 -05:00
|
|
|
(defskelgroup skel-strip-game-crate strip-game-crate strip-game-crate-lod0-jg strip-game-crate-idle-ja
|
|
|
|
((strip-game-crate-lod0-mg (meters 999999)))
|
2023-01-14 11:30:58 -05:00
|
|
|
:bounds (static-spherem 0 9.8 0 27)
|
|
|
|
)
|
|
|
|
|
|
|
|
(defstate idle (strip-game-crate)
|
|
|
|
:virtual #t
|
|
|
|
:event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block))
|
|
|
|
(case event-type
|
|
|
|
(('go-final)
|
|
|
|
(go-virtual final-position)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
:trans (the-as (function none :behavior strip-game-crate) rider-trans)
|
|
|
|
:code (the-as (function none :behavior strip-game-crate) sleep-code)
|
|
|
|
:post (behavior ()
|
|
|
|
(let* ((f30-1 (* 333.14133 (cos (* 66.8053 (the float (mod (-> self clock frame-counter) 981))))))
|
|
|
|
(f28-1 (* 358.62756 (cos (* 48.65331 (the float (mod (-> self clock frame-counter) 1346))))))
|
|
|
|
(f0-6 30.0)
|
|
|
|
(gp-0 (+ (-> self clock frame-counter) (seconds -15.24)))
|
|
|
|
(f26-1
|
|
|
|
(+ 637.1556 (* 637.1556 (cos (* 65536.0 (/ (the float (mod gp-0 (the int (* 300.0 f0-6)))) (* 300.0 f0-6))))))
|
|
|
|
)
|
|
|
|
(f0-15 (* 1092.2667 (cos (* 3.640889 (the float (mod gp-0 #x4650))))))
|
|
|
|
)
|
|
|
|
(set! (-> self swing-angle z) (+ f30-1 f26-1))
|
|
|
|
(set! (-> self swing-angle x) (+ f28-1 f0-15))
|
|
|
|
)
|
|
|
|
(rider-post)
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
(defstate final-position (strip-game-crate)
|
|
|
|
:virtual #t
|
|
|
|
:enter (behavior ()
|
|
|
|
(ja :group! (-> self draw art-group data 3) :num! min)
|
|
|
|
(ja-post)
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
:code (the-as (function none :behavior strip-game-crate) sleep-code)
|
|
|
|
)
|
|
|
|
|
|
|
|
;; WARN: Return type mismatch vector vs none.
|
|
|
|
(defmethod strip-game-crate-method-22 strip-game-crate ((obj strip-game-crate) (arg0 vector) (arg1 quaternion))
|
|
|
|
(set! (-> obj root trans quad) (-> arg0 quad))
|
|
|
|
(let ((s4-0 (new 'stack-no-clear 'quaternion)))
|
|
|
|
(quaternion-rotate-z! s4-0 arg1 (-> obj swing-angle z))
|
|
|
|
(quaternion-rotate-x! s4-0 s4-0 (-> obj swing-angle x))
|
|
|
|
(quaternion-copy! (-> obj root quat) s4-0)
|
|
|
|
)
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
|
|
|
|
;; WARN: Return type mismatch object vs none.
|
|
|
|
(defbehavior strip-game-crate-init-by-other strip-game-crate ((arg0 vector) (arg1 quaternion))
|
|
|
|
(let ((s4-0 (new 'process 'collide-shape self (collide-list-enum usually-hit-by-player))))
|
|
|
|
(let ((v1-2 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0))))
|
|
|
|
(set! (-> v1-2 prim-core collide-as) (collide-spec obstacle camera-blocker))
|
|
|
|
(set! (-> v1-2 prim-core collide-with) (collide-spec jak player-list))
|
|
|
|
(set! (-> v1-2 prim-core action) (collide-action solid))
|
|
|
|
(set! (-> v1-2 transform-index) 14)
|
|
|
|
(set-vector! (-> v1-2 local-sphere) 0.0 -22528.0 0.0 65536.0)
|
|
|
|
(set! (-> s4-0 total-prims) (the-as uint 1))
|
|
|
|
(set! (-> s4-0 root-prim) v1-2)
|
|
|
|
)
|
|
|
|
(set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w)))
|
|
|
|
(let ((v1-5 (-> s4-0 root-prim)))
|
|
|
|
(set! (-> s4-0 backup-collide-as) (-> v1-5 prim-core collide-as))
|
|
|
|
(set! (-> s4-0 backup-collide-with) (-> v1-5 prim-core collide-with))
|
|
|
|
)
|
|
|
|
(set! (-> self root) s4-0)
|
|
|
|
)
|
|
|
|
(set! (-> self root trans quad) (-> arg0 quad))
|
|
|
|
(quaternion-copy! (-> self root quat) arg1)
|
|
|
|
(initialize-skeleton
|
|
|
|
self
|
|
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-strip-game-crate" (the-as (pointer uint32) #f)))
|
|
|
|
(the-as pair 0)
|
|
|
|
)
|
|
|
|
(set-vector! (-> self swing-angle) 0.0 0.0 0.0 0.0)
|
|
|
|
(set-vector! (-> self local-offset) 0.0 -163840.0 0.0 1.0)
|
|
|
|
(let ((v1-16 (-> self node-list data)))
|
|
|
|
(set! (-> v1-16 0 param0) (the-as (function cspace transformq none) cspace<-transformq+rot-offset!))
|
|
|
|
(set! (-> v1-16 0 param1) (the-as basic (-> self root trans)))
|
|
|
|
(set! (-> v1-16 0 param2) (the-as basic (-> self local-offset)))
|
|
|
|
)
|
|
|
|
(logclear! (-> self mask) (process-mask actor-pause))
|
|
|
|
(if (task-complete? *game-info* (game-task strip-drop))
|
|
|
|
(go-virtual final-position)
|
|
|
|
(go-virtual idle)
|
|
|
|
)
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
|
|
|
|
(deftype crane (process-drawable)
|
|
|
|
((angle-vel float :offset-assert 200)
|
|
|
|
(angle float :offset-assert 204)
|
|
|
|
(init-quat quaternion :inline :offset-assert 208)
|
|
|
|
(final-quat quaternion :inline :offset-assert 224)
|
|
|
|
(crate (pointer strip-game-crate) :offset-assert 240)
|
|
|
|
)
|
|
|
|
:heap-base #x80
|
|
|
|
:method-count-assert 23
|
|
|
|
:size-assert #xf4
|
|
|
|
:flag-assert #x17008000f4
|
|
|
|
(:methods
|
|
|
|
(idle () _type_ :state 20)
|
|
|
|
(swinging () _type_ :state 21)
|
|
|
|
(final-position () _type_ :state 22)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
(defmethod deactivate crane ((obj crane))
|
|
|
|
(if (-> obj crate)
|
|
|
|
(deactivate (-> obj crate 0))
|
|
|
|
)
|
|
|
|
((method-of-type process-drawable deactivate) obj)
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
|
|
|
|
(defstate idle (crane)
|
|
|
|
:virtual #t
|
|
|
|
:code (behavior ()
|
|
|
|
(ja :group! (ja-group) :num! min)
|
|
|
|
(ja-post)
|
|
|
|
(go-virtual swinging)
|
|
|
|
(until #f
|
|
|
|
(suspend)
|
|
|
|
)
|
|
|
|
#f
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
(defstate swinging (crane)
|
|
|
|
:virtual #t
|
|
|
|
:event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block))
|
|
|
|
(the-as
|
|
|
|
object
|
|
|
|
(case event-type
|
|
|
|
(('notice)
|
|
|
|
(when (and *target*
|
|
|
|
(not (task-complete? *game-info* (game-task strip-drop)))
|
|
|
|
(or (demo?) (and (task-node-closed? (game-task-node strip-drop-introduction))
|
|
|
|
(not (task-node-closed? (game-task-node strip-drop-resolution)))
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(let ((gp-0 (if (demo?)
|
|
|
|
"crane-victory-demo"
|
|
|
|
"crane-victory"
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(process-spawn scene-player :init scene-player-init gp-0 #t #f)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
:enter (behavior ()
|
|
|
|
(set! (-> self angle) 0.0)
|
|
|
|
(set! (-> self angle-vel) 0.0)
|
|
|
|
(quaternion-copy! (-> self init-quat) (-> self root quat))
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
:trans (behavior ()
|
|
|
|
(if (task-complete? *game-info* (game-task strip-drop))
|
|
|
|
(go-virtual final-position)
|
|
|
|
)
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
:code (behavior ()
|
|
|
|
(until #f
|
|
|
|
(suspend)
|
|
|
|
)
|
|
|
|
#f
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
:post (behavior ()
|
|
|
|
(let* ((f0-1 (* 3.640889 (the float (mod (-> self clock frame-counter) #x4650))))
|
|
|
|
(f0-5 (+ -16384.0 (* 8192.0 (+ 1.0 (cos f0-1)))))
|
|
|
|
)
|
|
|
|
(quaternion-rotate-y! (-> self root quat) (-> self init-quat) f0-5)
|
|
|
|
)
|
|
|
|
(ja-post)
|
|
|
|
(let ((a1-2 (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 4))))
|
|
|
|
(strip-game-crate-method-22 (-> self crate 0) a1-2 (-> self root quat))
|
|
|
|
)
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
(defstate final-position (crane)
|
|
|
|
:virtual #t
|
|
|
|
:event (-> (method-of-type crane swinging) event)
|
|
|
|
:enter (behavior ()
|
|
|
|
(quaternion-copy! (-> self root quat) (-> self final-quat))
|
|
|
|
(when (-> self crate)
|
|
|
|
(send-event (ppointer->process (-> self crate)) 'go-final)
|
|
|
|
(let ((a1-3 (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 4))))
|
|
|
|
(strip-game-crate-method-22 (-> self crate 0) a1-3 (-> self root quat))
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
:code (the-as (function none :behavior crane) sleep-code)
|
|
|
|
:post (the-as (function none :behavior crane) ja-post)
|
|
|
|
)
|
|
|
|
|
|
|
|
;; WARN: Return type mismatch object vs none.
|
|
|
|
(defmethod init-from-entity! crane ((obj crane) (arg0 entity-actor))
|
2023-01-15 11:33:39 -05:00
|
|
|
"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"
|
2023-01-14 11:30:58 -05:00
|
|
|
(set! (-> obj root) (new 'process 'trsqv))
|
|
|
|
(process-drawable-from-entity! obj arg0)
|
|
|
|
(initialize-skeleton
|
|
|
|
obj
|
|
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-crane" (the-as (pointer uint32) #f)))
|
|
|
|
(the-as pair 0)
|
|
|
|
)
|
|
|
|
(quaternion-rotate-y! (-> obj root quat) (-> obj root quat) 910.2222)
|
|
|
|
(quaternion-copy! (-> obj final-quat) (-> obj root quat))
|
|
|
|
(logclear! (-> obj mask) (process-mask actor-pause))
|
|
|
|
(set! (-> obj draw light-index) (the-as uint 10))
|
|
|
|
(ja-post)
|
|
|
|
(let ((s5-2 (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data 4))))
|
|
|
|
(set! (-> obj crate) (process-spawn strip-game-crate s5-2 (-> obj root quat) :to obj))
|
|
|
|
)
|
|
|
|
(if (or (task-complete? *game-info* (game-task strip-rescue)) (demo?))
|
|
|
|
(go (method-of-object obj final-position))
|
|
|
|
(go (method-of-object obj idle))
|
|
|
|
)
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
|
|
|
|
(deftype cranecrate (process-drawable)
|
|
|
|
((root-override collide-shape :offset 128)
|
|
|
|
(unknown-pad-n12jn3123123 int32 52 :offset-assert 200)
|
|
|
|
)
|
|
|
|
:heap-base #x120
|
|
|
|
:method-count-assert 22
|
|
|
|
:size-assert #x198
|
|
|
|
:flag-assert #x1601200198
|
|
|
|
(:methods
|
|
|
|
(idle () _type_ :state 20)
|
|
|
|
(hidden () _type_ :state 21)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
(defstate idle (cranecrate)
|
|
|
|
:virtual #t
|
|
|
|
:code (behavior ()
|
|
|
|
(ja-channel-set! 1)
|
|
|
|
(ja :group! (-> self draw art-group data 3))
|
|
|
|
(dotimes (gp-0 2)
|
|
|
|
(transform-post)
|
|
|
|
(suspend)
|
|
|
|
)
|
|
|
|
(sleep-code)
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
(defstate hidden (cranecrate)
|
|
|
|
:virtual #t
|
|
|
|
:event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block))
|
|
|
|
(case event-type
|
|
|
|
(('wake-up)
|
|
|
|
(go-virtual idle)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
:code (behavior ()
|
|
|
|
(ja-channel-set! 0)
|
|
|
|
(dotimes (gp-0 2)
|
|
|
|
(transform-post)
|
|
|
|
(suspend)
|
|
|
|
)
|
|
|
|
(sleep-code)
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
;; WARN: Return type mismatch object vs none.
|
|
|
|
(defmethod init-from-entity! cranecrate ((obj cranecrate) (arg0 entity-actor))
|
2023-01-15 11:33:39 -05:00
|
|
|
"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"
|
2023-01-14 11:30:58 -05:00
|
|
|
(let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player))))
|
|
|
|
(let ((v1-2 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0))))
|
|
|
|
(set! (-> v1-2 prim-core collide-as) (collide-spec obstacle))
|
|
|
|
(set! (-> v1-2 prim-core collide-with) (collide-spec jak player-list))
|
|
|
|
(set! (-> v1-2 prim-core action) (collide-action solid))
|
|
|
|
(set! (-> v1-2 transform-index) 3)
|
|
|
|
(set-vector! (-> v1-2 local-sphere) 0.0 -20480.0 0.0 81920.0)
|
|
|
|
(set! (-> s4-0 total-prims) (the-as uint 1))
|
|
|
|
(set! (-> s4-0 root-prim) v1-2)
|
|
|
|
)
|
|
|
|
(set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w)))
|
|
|
|
(let ((v1-5 (-> s4-0 root-prim)))
|
|
|
|
(set! (-> s4-0 backup-collide-as) (-> v1-5 prim-core collide-as))
|
|
|
|
(set! (-> s4-0 backup-collide-with) (-> v1-5 prim-core collide-with))
|
|
|
|
)
|
|
|
|
(set! (-> obj root-override) s4-0)
|
|
|
|
)
|
|
|
|
(process-drawable-from-entity! obj arg0)
|
|
|
|
(initialize-skeleton
|
|
|
|
obj
|
|
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-cranecrate" (the-as (pointer uint32) #f)))
|
|
|
|
(the-as pair 0)
|
|
|
|
)
|
|
|
|
(set! (-> obj root-override trans y) (+ -163348.48 (-> obj root-override trans y)))
|
|
|
|
(when (or (demo?) (and (= *kernel-boot-message* 'kiosk) (task-node-open? (game-task-node strip-drop-resolution))))
|
|
|
|
(let ((s5-2 (new 'stack-no-clear 'task-arrow-params)))
|
|
|
|
(set! (-> s5-2 pos quad) (-> (new 'static 'vector :x 9920120.0 :y 288036.03 :z -179639.1 :w 1.0) quad))
|
|
|
|
(quaternion-copy!
|
|
|
|
(-> s5-2 quat)
|
|
|
|
(eul->quat (new 'stack-no-clear 'quaternion) (new 'static 'euler-angles :x -16384.0 :y 16384.0))
|
|
|
|
)
|
|
|
|
(set! (-> s5-2 flags) (task-arrow-flags task-arrow-flag-02))
|
|
|
|
(set! (-> s5-2 map-icon) (the-as uint 15))
|
|
|
|
(task-arrow-spawn s5-2 (the-as task-arrow obj))
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(if (task-node-closed? (game-task-node strip-drop-resolution))
|
|
|
|
(go (method-of-object obj idle))
|
|
|
|
(go (method-of-object obj hidden))
|
|
|
|
)
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
|
|
|
|
(deftype grunt-egg (process-drawable)
|
|
|
|
((idle-anim-player idle-control :inline :offset-assert 208)
|
|
|
|
(attack-id uint32 :offset-assert 224)
|
|
|
|
)
|
|
|
|
:heap-base #x70
|
|
|
|
:method-count-assert 24
|
|
|
|
:size-assert #xe4
|
|
|
|
:flag-assert #x18007000e4
|
|
|
|
(:methods
|
|
|
|
(idle () _type_ :state 20)
|
|
|
|
(die () _type_ :state 21)
|
|
|
|
(grunt-egg-method-22 (_type_) none 22)
|
|
|
|
(grunt-egg-method-23 (_type_) vector4w-2 23)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
2023-01-15 11:33:39 -05:00
|
|
|
(defskelgroup skel-grunt-egg-a grunt-egg-a grunt-egg-a-lod0-jg -1
|
|
|
|
((grunt-egg-a-lod0-mg (meters 20)) (grunt-egg-a-lod1-mg (meters 999999)))
|
2023-01-14 11:30:58 -05:00
|
|
|
:bounds (static-spherem 0 2 0 4)
|
|
|
|
)
|
|
|
|
|
2023-01-15 11:33:39 -05:00
|
|
|
(defskelgroup skel-grunt-egg-b grunt-egg-b grunt-egg-b-lod0-jg -1
|
|
|
|
((grunt-egg-b-lod0-mg (meters 20)) (grunt-egg-b-lod1-mg (meters 999999)))
|
2023-01-14 11:30:58 -05:00
|
|
|
:bounds (static-spherem 0 2.5 0 4)
|
|
|
|
)
|
|
|
|
|
2023-01-15 11:33:39 -05:00
|
|
|
(defskelgroup skel-grunt-egg-c grunt-egg-c grunt-egg-c-lod0-jg -1
|
|
|
|
((grunt-egg-c-lod0-mg (meters 20)) (grunt-egg-c-lod1-mg (meters 999999)))
|
2023-01-14 11:30:58 -05:00
|
|
|
:bounds (static-spherem 0 2.2 0 4)
|
|
|
|
)
|
|
|
|
|
2023-01-15 11:33:39 -05:00
|
|
|
(defskelgroup skel-grunt-egg-d grunt-egg-d grunt-egg-d-lod0-jg -1
|
|
|
|
((grunt-egg-d-lod0-mg (meters 20)) (grunt-egg-d-lod1-mg (meters 999999)))
|
2023-01-14 11:30:58 -05:00
|
|
|
:bounds (static-spherem 0 4 0 8)
|
|
|
|
)
|
|
|
|
|
|
|
|
(define *grunt-egg-a-script*
|
|
|
|
(new 'static 'vector4w-2 :vector (new 'static 'inline-array vector4w 2
|
|
|
|
(new 'static 'vector4w :x #x1e0002 :y #x2010301 :z #x1e0002 :w #x2010401)
|
|
|
|
(new 'static 'vector4w)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
(define *grunt-egg-b-script*
|
|
|
|
(new 'static 'vector4w-2 :vector (new 'static 'inline-array vector4w 2
|
|
|
|
(new 'static 'vector4w :x #x1e0002 :y #x2010401 :z #x1e0002 :w #x2010301)
|
|
|
|
(new 'static 'vector4w)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
(define *grunt-egg-c-script*
|
|
|
|
(new 'static 'vector4w-2 :vector (new 'static 'inline-array vector4w 2
|
|
|
|
(new 'static 'vector4w :x #x1e0002 :y #x2010301 :z #x1e0002 :w #x2010401)
|
|
|
|
(new 'static 'vector4w)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
(define *grunt-egg-d-script*
|
|
|
|
(new 'static 'vector4w-2 :vector (new 'static 'inline-array vector4w 2
|
|
|
|
(new 'static 'vector4w :x #x1e0002 :y #x2010301 :z #x1e0002 :w #x2010401)
|
|
|
|
(new 'static 'vector4w)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
(defstate idle (grunt-egg)
|
|
|
|
:virtual #t
|
|
|
|
:event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block))
|
|
|
|
(case event-type
|
|
|
|
(('touch 'attack)
|
|
|
|
(let* ((s5-0 (-> event param 0))
|
|
|
|
(s4-0 proc)
|
|
|
|
(v1-2 (if (type? s4-0 process-focusable)
|
|
|
|
(the-as process-focusable s4-0)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(when (and v1-2 ((method-of-type touching-shapes-entry prims-touching-action?)
|
|
|
|
(the-as touching-shapes-entry s5-0)
|
|
|
|
(-> v1-2 root-override)
|
|
|
|
(collide-action solid)
|
|
|
|
(collide-action)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(let ((a1-5 (new 'stack-no-clear 'event-message-block)))
|
|
|
|
(set! (-> a1-5 from) (process->ppointer self))
|
|
|
|
(set! (-> a1-5 num-params) 2)
|
|
|
|
(set! (-> a1-5 message) 'attack-or-shove)
|
|
|
|
(set! (-> a1-5 param 0) s5-0)
|
|
|
|
(let ((v1-7 (new 'static 'attack-info :mask (attack-info-mask mode shove-back shove-up id damage knock))))
|
|
|
|
(set! (-> v1-7 id) (-> self attack-id))
|
|
|
|
(set! (-> v1-7 shove-back) 12288.0)
|
|
|
|
(set! (-> v1-7 shove-up) 8192.0)
|
|
|
|
(set! (-> v1-7 mode) 'deadly)
|
|
|
|
(set! (-> v1-7 knock) (the-as uint 8))
|
|
|
|
(set! (-> v1-7 damage) 4.0)
|
|
|
|
(set! (-> a1-5 param 1) (the-as uint v1-7))
|
|
|
|
)
|
|
|
|
(send-event-function proc a1-5)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
:code (the-as (function none :behavior grunt-egg) sleep-code)
|
|
|
|
:post (behavior ()
|
|
|
|
(if (nonzero? (-> self sound))
|
|
|
|
(update! (-> self sound))
|
|
|
|
)
|
|
|
|
(idle-control-method-10 (-> self idle-anim-player) self)
|
|
|
|
(ja-post)
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
(defstate die (grunt-egg)
|
|
|
|
:virtual #t
|
|
|
|
:code (behavior ()
|
|
|
|
(cleanup-for-death self)
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
;; WARN: Return type mismatch object vs none.
|
|
|
|
(defmethod init-from-entity! grunt-egg ((obj grunt-egg) (arg0 entity-actor))
|
2023-01-15 11:33:39 -05:00
|
|
|
"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"
|
2023-01-14 11:30:58 -05:00
|
|
|
(cond
|
|
|
|
((>= (res-lump-value arg0 'extra-id int :default (the-as uint128 -1) :time -1000000000.0) 0)
|
|
|
|
(let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player))))
|
|
|
|
(let ((v1-4 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0))))
|
|
|
|
(set! (-> v1-4 prim-core collide-as) (collide-spec obstacle))
|
|
|
|
(set! (-> v1-4 prim-core collide-with) (collide-spec jak player-list))
|
|
|
|
(set! (-> v1-4 prim-core action) (collide-action solid deadly))
|
|
|
|
(set! (-> v1-4 transform-index) 0)
|
|
|
|
(set-vector! (-> v1-4 local-sphere) 0.0 -20480.0 0.0 53248.0)
|
|
|
|
(set! (-> s4-0 total-prims) (the-as uint 1))
|
|
|
|
(set! (-> s4-0 root-prim) v1-4)
|
|
|
|
)
|
|
|
|
(set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w)))
|
|
|
|
(let ((v1-7 (-> s4-0 root-prim)))
|
|
|
|
(set! (-> s4-0 backup-collide-as) (-> v1-7 prim-core collide-as))
|
|
|
|
(set! (-> s4-0 backup-collide-with) (-> v1-7 prim-core collide-with))
|
|
|
|
)
|
|
|
|
(set! (-> obj root) s4-0)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(else
|
|
|
|
(set! (-> obj root) (new 'process 'trsqv))
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(grunt-egg-method-22 obj)
|
|
|
|
(process-drawable-from-entity! obj arg0)
|
|
|
|
(let* ((v1-12 *game-info*)
|
|
|
|
(a0-14 (+ (-> v1-12 attack-id) 1))
|
|
|
|
)
|
|
|
|
(set! (-> v1-12 attack-id) a0-14)
|
|
|
|
(set! (-> obj attack-id) a0-14)
|
|
|
|
)
|
|
|
|
(let ((a1-8 (grunt-egg-method-23 obj)))
|
|
|
|
(if a1-8
|
decomp: `tomb-*` files, `target-indax`, `grunt-mech`, `breakable-wall`, `pillar-collapse`, `mechtest-obs`, `ruins-obs` (#2114)
Manual patches in:
- `tomb-boulder`: a few `ppointer->handle`s (I think) were not being
decompiled properly (all used in combination with `clone-anim-once`)
- `ruins-obs`, `pillar-collapse`: `art-joint-anim` casts
- `tomb-beetle`: commented out a call to `shadow-control-method-14` that
was crashing the game when spawning the beetles
- `grunt-mech`: commented out `(.mula.s)` instruction
Notes:
- `enemy-info`'s `idle-anim-script` is most likely a `(pointer
idle-control-frame)`, however, some `nav-enemy-info` labels set it to
`#f` (first encountered in `tomb-beetle`, but also present in `hal`,
`roboguard` and `metalkor-setup`), which crashes the decompiler. This
may become a problem in the future when we eventually get to these
files. For this PR, I made `tomb-beetle` decompile with
`idle-anim-script` set to `#f` and have not noticed any issues/crashes
with that.
- `tomb-boulder` compiles and doesn't crash, but when trying to play the
Daxter chase sequence, the boulder sometimes either spawns at the origin
or spawns in the correct place, but doesn't move.
Co-authored-by: water <awaterford111445@gmail.com>
2023-01-14 13:53:31 -05:00
|
|
|
(idle-control-method-9 (-> obj idle-anim-player) (the-as (pointer idle-control-frame) a1-8))
|
2023-01-14 11:30:58 -05:00
|
|
|
)
|
|
|
|
)
|
|
|
|
(if (>= (res-lump-value arg0 'extra-id int :default (the-as uint128 -1) :time -1000000000.0) 0)
|
|
|
|
(set! (-> obj sound)
|
|
|
|
(new 'process 'ambient-sound (static-sound-spec "grunt-eggs" :fo-min 5 :fo-max 45) (-> obj root trans))
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(if (task-complete? *game-info* (game-task strip-drop))
|
|
|
|
(go (method-of-object obj die))
|
|
|
|
(go (method-of-object obj idle))
|
|
|
|
)
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
|
|
|
|
(deftype grunt-egg-a (grunt-egg)
|
|
|
|
()
|
|
|
|
:heap-base #x70
|
|
|
|
:method-count-assert 24
|
|
|
|
:size-assert #xe4
|
|
|
|
:flag-assert #x18007000e4
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
(deftype grunt-egg-b (grunt-egg)
|
|
|
|
()
|
|
|
|
:heap-base #x70
|
|
|
|
:method-count-assert 24
|
|
|
|
:size-assert #xe4
|
|
|
|
:flag-assert #x18007000e4
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
(deftype grunt-egg-c (grunt-egg)
|
|
|
|
()
|
|
|
|
:heap-base #x70
|
|
|
|
:method-count-assert 24
|
|
|
|
:size-assert #xe4
|
|
|
|
:flag-assert #x18007000e4
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
(deftype grunt-egg-d (grunt-egg)
|
|
|
|
()
|
|
|
|
:heap-base #x70
|
|
|
|
:method-count-assert 24
|
|
|
|
:size-assert #xe4
|
|
|
|
:flag-assert #x18007000e4
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
;; WARN: Return type mismatch draw-control vs none.
|
|
|
|
(defmethod grunt-egg-method-22 grunt-egg-a ((obj grunt-egg-a))
|
|
|
|
(initialize-skeleton
|
|
|
|
obj
|
|
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-grunt-egg-a" (the-as (pointer uint32) #f)))
|
|
|
|
(the-as pair 0)
|
|
|
|
)
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
|
|
|
|
(defmethod grunt-egg-method-23 grunt-egg-a ((obj grunt-egg-a))
|
|
|
|
*grunt-egg-a-script*
|
|
|
|
)
|
|
|
|
|
|
|
|
;; WARN: Return type mismatch connection vs none.
|
|
|
|
(defmethod grunt-egg-method-22 grunt-egg-b ((obj grunt-egg-b))
|
|
|
|
(initialize-skeleton
|
|
|
|
obj
|
|
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-grunt-egg-b" (the-as (pointer uint32) #f)))
|
|
|
|
(the-as pair 0)
|
|
|
|
)
|
|
|
|
(add-connection *part-engine* obj 9 obj 1035 (new 'static 'vector :w 163840.0))
|
|
|
|
(add-connection *part-engine* obj 14 obj 1035 (new 'static 'vector :w 163840.0))
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
|
|
|
|
(defmethod grunt-egg-method-23 grunt-egg-b ((obj grunt-egg-b))
|
|
|
|
*grunt-egg-b-script*
|
|
|
|
)
|
|
|
|
|
|
|
|
;; WARN: Return type mismatch connection vs none.
|
|
|
|
(defmethod grunt-egg-method-22 grunt-egg-c ((obj grunt-egg-c))
|
|
|
|
(initialize-skeleton
|
|
|
|
obj
|
|
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-grunt-egg-c" (the-as (pointer uint32) #f)))
|
|
|
|
(the-as pair 0)
|
|
|
|
)
|
|
|
|
(add-connection *part-engine* obj 7 obj 1036 (new 'static 'vector :w 163840.0))
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
|
|
|
|
(defmethod grunt-egg-method-23 grunt-egg-c ((obj grunt-egg-c))
|
|
|
|
*grunt-egg-c-script*
|
|
|
|
)
|
|
|
|
|
|
|
|
;; WARN: Return type mismatch connection vs none.
|
|
|
|
(defmethod grunt-egg-method-22 grunt-egg-d ((obj grunt-egg-d))
|
|
|
|
(initialize-skeleton
|
|
|
|
obj
|
|
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-grunt-egg-d" (the-as (pointer uint32) #f)))
|
|
|
|
(the-as pair 0)
|
|
|
|
)
|
|
|
|
(add-connection *part-engine* obj 10 obj 1037 (new 'static 'vector :w 163840.0))
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
|
|
|
|
(defmethod grunt-egg-method-23 grunt-egg-d ((obj grunt-egg-d))
|
|
|
|
*grunt-egg-d-script*
|
|
|
|
)
|