mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 21:27:52 -04:00
7a8aa71204
Currently only tracks enemy kills, and how they were killed. There is currently no menu for this, but I've already added most of the text for it. Also did a bunch of misc decompilation fixes and renamed some methods. Fixes #3277 Fixes #3278
696 lines
24 KiB
Common Lisp
696 lines
24 KiB
Common Lisp
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; name: tomb-baby-spider.gc
|
|
;; name in dgo: tomb-baby-spider
|
|
;; dgos: DG1, D3A, TOA
|
|
|
|
;; DECOMP BEGINS
|
|
|
|
(deftype tomb-baby-spider (nav-enemy)
|
|
()
|
|
(:state-methods
|
|
attack
|
|
attack-stop
|
|
)
|
|
)
|
|
|
|
|
|
(defskelgroup skel-tomb-baby-spider tomb-baby-spider tomb-baby-spider-lod0-jg tomb-baby-spider-idle-ja
|
|
((tomb-baby-spider-lod0-mg (meters 20)) (tomb-baby-spider-lod1-mg (meters 999999)))
|
|
:bounds (static-spherem 0 0 0 5.5)
|
|
:shadow tomb-baby-spider-shadow-mg
|
|
)
|
|
|
|
(define *tomb-baby-spider-nav-enemy-info*
|
|
(new 'static 'nav-enemy-info
|
|
:use-die-falling #f
|
|
:use-victory #f
|
|
:use-jump-blocked #f
|
|
:debug-draw-neck #f
|
|
:jump-debug-draw #f
|
|
:move-to-ground #t
|
|
:hover-if-no-ground #f
|
|
:idle-anim-script (new 'static 'array idle-control-frame 4
|
|
(new 'static 'idle-control-frame :command (ic-cmd push) :param0 #x1e)
|
|
(new 'static 'idle-control-frame :command (ic-cmd play) :anim #x4 :param0 #x64 :param1 #x64)
|
|
(new 'static 'idle-control-frame)
|
|
(new 'static 'idle-control-frame)
|
|
)
|
|
:idle-anim 4
|
|
:notice-anim 5
|
|
:hostile-anim 8
|
|
:hit-anim 4
|
|
:knocked-anim 14
|
|
:knocked-land-anim 15
|
|
:die-anim 13
|
|
:die-falling-anim 13
|
|
:victory-anim 4
|
|
:jump-wind-up-anim 4
|
|
:jump-in-air-anim 4
|
|
:jump-land-anim 4
|
|
:neck-joint -1
|
|
:look-at-joint 3
|
|
:bullseye-joint 3
|
|
:sound-die (static-sound-name "bspider-die")
|
|
:notice-distance (meters 40)
|
|
:notice-distance-delta (meters 10)
|
|
:proximity-notice-distance (meters 2)
|
|
:default-hit-points 1
|
|
:gnd-collide-with (collide-spec backgnd)
|
|
:overlaps-others-collide-with-filter (collide-spec jak bot player-list)
|
|
:penetrate-knocked (penetrate
|
|
generic-attack
|
|
flop
|
|
punch
|
|
spin
|
|
roll
|
|
uppercut
|
|
bonk
|
|
tube
|
|
vehicle
|
|
flut-attack
|
|
board
|
|
mech-punch
|
|
mech-bonk
|
|
dark-skin
|
|
dark-punch
|
|
dark-bomb
|
|
dark-giant
|
|
shield
|
|
explode
|
|
jak-yellow-shot
|
|
jak-red-shot
|
|
jak-blue-shot
|
|
jak-dark-shot
|
|
enemy-yellow-shot
|
|
enemy-dark-shot
|
|
eco-yellow
|
|
knocked
|
|
)
|
|
:movement-gravity (meters -100)
|
|
:friction 0.8
|
|
:attack-shove-back (meters 6)
|
|
:attack-shove-up (meters 3)
|
|
:attack-mode 'generic
|
|
:attack-damage 2
|
|
:recover-gnd-collide-with (collide-spec backgnd crate obstacle hit-by-others-list pusher)
|
|
:jump-height-min (meters 3)
|
|
:jump-height-factor 0.5
|
|
:knocked-seek-ry-clamp 2730.6667
|
|
:knocked-soft-vxz-lo 80281.6
|
|
:knocked-soft-vxz-hi 87654.4
|
|
:knocked-soft-vy-lo 67993.6
|
|
:knocked-soft-vy-hi 112230.4
|
|
:knocked-medium-vxz-lo 147456.0
|
|
:knocked-medium-vxz-hi 196608.0
|
|
:knocked-medium-vy-lo 135168.0
|
|
:knocked-medium-vy-hi 151552.0
|
|
:knocked-hard-vxz-lo 55705.6
|
|
:knocked-hard-vxz-hi 71270.4
|
|
:knocked-hard-vy-lo 88473.6
|
|
:knocked-hard-vy-hi 132710.4
|
|
:knocked-huge-vxz-lo 164659.2
|
|
:knocked-huge-vxz-hi 249036.8
|
|
:knocked-huge-vy-lo 183500.8
|
|
:knocked-huge-vy-hi 217907.2
|
|
:knocked-yellow-vxz-lo 40960.0
|
|
:knocked-yellow-vxz-hi 49152.0
|
|
:knocked-yellow-vy-lo 57344.0
|
|
:knocked-yellow-vy-hi 81920.0
|
|
:knocked-red-vxz-lo 55705.6
|
|
:knocked-red-vxz-hi 71270.4
|
|
:knocked-red-vy-lo 88473.6
|
|
:knocked-red-vy-hi 132710.4
|
|
:knocked-blue-vxz-lo 40960.0
|
|
:knocked-blue-vxz-hi 49152.0
|
|
:knocked-blue-vy-lo 24576.0
|
|
:knocked-blue-vy-hi 81920.0
|
|
:shadow-size (meters 2)
|
|
:shadow-max-y (meters 1)
|
|
:shadow-min-y (meters -1)
|
|
:shadow-locus-dist (meters 150)
|
|
:gem-joint -1
|
|
:gem-offset (new 'static 'sphere :r 163840.0)
|
|
:callback-info #f
|
|
:use-momentum #f
|
|
:use-frustration #f
|
|
:use-stop-chase #f
|
|
:use-circling #f
|
|
:use-pacing #f
|
|
:walk-anim 5
|
|
:turn-anim 5
|
|
:run-anim 8
|
|
:taunt-anim -1
|
|
:run-travel-speed (meters 6)
|
|
:run-acceleration (meters 4)
|
|
:run-turning-acceleration (meters 18)
|
|
:walk-travel-speed (meters 4)
|
|
:walk-acceleration (meters 1)
|
|
:walk-turning-acceleration (meters 8)
|
|
:maximum-rotation-rate (degrees 180)
|
|
:notice-nav-radius (meters 2)
|
|
:frustration-distance (meters 6)
|
|
:frustration-time (seconds 4)
|
|
:blocked-time (seconds 0.3)
|
|
:circle-dist-lo 20480.0
|
|
:circle-dist-hi 61440.0
|
|
:nav-mesh #f
|
|
)
|
|
)
|
|
|
|
(set! (-> *tomb-baby-spider-nav-enemy-info* fact-defaults) *fact-info-enemy-defaults*)
|
|
|
|
(defstate active (tomb-baby-spider)
|
|
:virtual #t
|
|
:code (behavior ()
|
|
(ja-channel-push! 1 (seconds 0.2))
|
|
(let ((f30-0 (rnd-float-range self 0.9 1.1)))
|
|
(until #f
|
|
(ja-no-eval :group! (-> self draw art-group data (-> self enemy-info walk-anim))
|
|
:num! (seek! max f30-0)
|
|
:frame-num 0.0
|
|
)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! max f30-0))
|
|
)
|
|
(when (rnd-go-idle? self 0.2)
|
|
(ja-no-eval :num! (loop!))
|
|
(ja-channel-push! 1 (seconds 0.2))
|
|
(let ((v1-37 self))
|
|
(set! (-> v1-37 enemy-flags) (the-as enemy-flag (logclear (-> v1-37 enemy-flags) (enemy-flag enemy-flag36))))
|
|
(set! (-> v1-37 nav callback-info) *nav-enemy-null-callback-info*)
|
|
)
|
|
0
|
|
(nav-enemy-method-167 self)
|
|
(ja-no-eval :group! (-> self draw art-group data (-> self enemy-info idle-anim))
|
|
:num! (seek! max f30-0)
|
|
:frame-num 0.0
|
|
)
|
|
(until (ja-done? 0)
|
|
(ja-blend-eval)
|
|
(suspend)
|
|
(ja :num! (seek! max f30-0))
|
|
)
|
|
(until (not (rnd-go-idle? self 0.2))
|
|
(ja-no-eval :group! (-> self draw art-group data (-> self enemy-info idle-anim))
|
|
:num! (seek! max f30-0)
|
|
:frame-num 0.0
|
|
)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! max f30-0))
|
|
)
|
|
)
|
|
(let ((v1-101 self))
|
|
(if (not (logtest? (enemy-flag enemy-flag36) (-> v1-101 enemy-flags)))
|
|
(set! (-> v1-101 enemy-flags) (the-as enemy-flag (logior (enemy-flag enemy-flag38) (-> v1-101 enemy-flags))))
|
|
)
|
|
(set! (-> v1-101 enemy-flags) (the-as enemy-flag (logior (enemy-flag enemy-flag36) (-> v1-101 enemy-flags))))
|
|
(set! (-> v1-101 nav callback-info) (-> v1-101 enemy-info callback-info))
|
|
)
|
|
0
|
|
(nav-enemy-method-165 self)
|
|
(ja-no-eval :num! (loop!))
|
|
(ja-channel-push! 1 (seconds 0.05))
|
|
(ja-no-eval :group! (-> self draw art-group data (-> self enemy-info walk-anim))
|
|
:num! (seek! max f30-0)
|
|
:frame-num 0.0
|
|
)
|
|
(until (ja-done? 0)
|
|
(ja-blend-eval)
|
|
(suspend)
|
|
(ja :num! (seek! max f30-0))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
#f
|
|
)
|
|
)
|
|
|
|
(defstate notice (tomb-baby-spider)
|
|
:virtual #t
|
|
:code (behavior ()
|
|
(ja-channel-push! 1 (seconds 0.2))
|
|
(let ((f30-0 (rnd-float-range self 0.8 1.2)))
|
|
(let ((gp-0 (new 'stack-no-clear 'vector)))
|
|
(let ((a0-3 (handle->process (-> self focus handle))))
|
|
(cond
|
|
(a0-3
|
|
(set! (-> gp-0 quad) (-> (get-trans (the-as process-focusable a0-3) 0) quad))
|
|
)
|
|
(else
|
|
(let ((a1-4 (-> self nav state)))
|
|
(set! (-> gp-0 quad) (-> a1-4 target-post quad))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(ja-no-eval :group! tomb-baby-spider-notice-spin-ja :num! (seek! max f30-0) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(seek-to-point-toward-point! (-> self root) gp-0 (* 1.8 (-> self nav max-rotation-rate)) (seconds 0.02))
|
|
(suspend)
|
|
(ja :num! (seek! max f30-0))
|
|
)
|
|
)
|
|
(ja-no-eval :group! tomb-baby-spider-notice-land-ja :num! (seek! max f30-0) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! max f30-0))
|
|
)
|
|
)
|
|
(react-to-focus self)
|
|
)
|
|
)
|
|
|
|
(defstate attack (tomb-baby-spider)
|
|
:virtual #t
|
|
:event enemy-event-handler
|
|
:enter (behavior ()
|
|
(nav-enemy-method-166 self)
|
|
(logior! (-> self enemy-flags) (enemy-flag lock-focus))
|
|
(logior! (-> self focus-status) (focus-status dangerous))
|
|
(let ((v1-9 (-> (the-as collide-shape-prim-group (-> self root root-prim)) child 1)))
|
|
(set! (-> v1-9 local-sphere w) 4915.2)
|
|
)
|
|
(set! (-> self root penetrate-using) (penetrate generic-attack lunge))
|
|
(enemy-method-49 self)
|
|
(let* ((v1-14 *game-info*)
|
|
(v0-2 (+ (-> v1-14 attack-id) 1))
|
|
)
|
|
(set! (-> v1-14 attack-id) v0-2)
|
|
(set! (-> self attack-id) v0-2)
|
|
)
|
|
)
|
|
:exit (behavior ()
|
|
(let ((v1-3 (-> (the-as collide-shape-prim-group (-> self root root-prim)) child 1)))
|
|
(set! (-> v1-3 local-sphere w) 819.2)
|
|
)
|
|
(logclear! (-> self enemy-flags) (enemy-flag lock-focus))
|
|
(if (logtest? (-> self enemy-flags) (enemy-flag dangerous-backup))
|
|
(logior! (-> self focus-status) (focus-status dangerous))
|
|
(logclear! (-> self focus-status) (focus-status dangerous))
|
|
)
|
|
(nav-enemy-method-165 self)
|
|
)
|
|
:trans (behavior ()
|
|
(enemy-method-49 self)
|
|
(if (logtest? (-> self enemy-flags) (enemy-flag victory))
|
|
(logclear! (-> self enemy-flags) (enemy-flag victory))
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(let ((v1-0 (-> self nav)))
|
|
(set! (-> v1-0 target-speed) (* 2.8 (-> self enemy-info run-travel-speed)))
|
|
)
|
|
0
|
|
(let ((v1-2 (-> self nav)))
|
|
(set! (-> v1-2 acceleration) (* 2.4 (-> self enemy-info run-acceleration)))
|
|
)
|
|
0
|
|
(ja-channel-push! 1 (seconds 0.1))
|
|
(ja-no-eval :group! tomb-baby-spider-attack0-start-ja :num! (seek! max 0.8) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! max 0.8))
|
|
)
|
|
(go-virtual attack-stop)
|
|
)
|
|
:post nav-enemy-chase-post
|
|
)
|
|
|
|
(defstate attack-stop (tomb-baby-spider)
|
|
:virtual #t
|
|
:event enemy-event-handler
|
|
:enter (behavior ()
|
|
(let ((v1-0 (-> self nav)))
|
|
(set! (-> v1-0 target-speed) 0.0)
|
|
)
|
|
0
|
|
(let ((v1-2 self))
|
|
(set! (-> v1-2 enemy-flags) (the-as enemy-flag (logclear (-> v1-2 enemy-flags) (enemy-flag enemy-flag37))))
|
|
)
|
|
0
|
|
)
|
|
:exit (behavior ()
|
|
(let ((v1-0 self))
|
|
(set! (-> v1-0 enemy-flags) (the-as enemy-flag (logior (enemy-flag enemy-flag37) (-> v1-0 enemy-flags))))
|
|
)
|
|
0
|
|
)
|
|
:code (behavior ()
|
|
(ja-no-eval :group! tomb-baby-spider-attack0-stop-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
(when (not (enemy-method-96 self 6371.5557 #t))
|
|
(let ((v1-27 self))
|
|
(set! (-> v1-27 enemy-flags) (the-as enemy-flag (logior (enemy-flag enemy-flag37) (-> v1-27 enemy-flags))))
|
|
)
|
|
0
|
|
(let ((t9-4 vector-normalize!)
|
|
(a0-7 (new 'stack-no-clear 'vector))
|
|
(a2-3 (-> self nav state))
|
|
(v1-30 (new 'stack-no-clear 'vector))
|
|
)
|
|
(set! (-> v1-30 quad) (-> a2-3 target-post quad))
|
|
(let* ((s5-0 (t9-4 (vector-! a0-7 v1-30 (-> self root trans)) 1.0))
|
|
(f30-0 (deg-diff (quaternion-y-angle (-> self root quat)) (vector-y-angle s5-0)))
|
|
)
|
|
(ja-no-eval :num! (loop!))
|
|
(cond
|
|
((< 0.0 f30-0)
|
|
(ja-channel-push! 1 (seconds 0.1))
|
|
(ja :group! tomb-baby-spider-turn-left-ja :num! min)
|
|
)
|
|
(else
|
|
(ja-channel-push! 1 (seconds 0.1))
|
|
(ja :group! tomb-baby-spider-turn-right-ja :num! min)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(until (enemy-method-96 self 910.2222 #t)
|
|
(ja-blend-eval)
|
|
(suspend)
|
|
(ja :num! (loop!))
|
|
)
|
|
(let ((v1-53 self))
|
|
(set! (-> v1-53 enemy-flags) (the-as enemy-flag (logclear (-> v1-53 enemy-flags) (enemy-flag enemy-flag37))))
|
|
)
|
|
0
|
|
)
|
|
(ja-channel-push! 1 (seconds 0.2))
|
|
(let ((gp-3 (current-time))
|
|
(s5-1 (the int (* 300.0 (rand-vu-float-range 0.6 1.2))))
|
|
(f30-2 1.0)
|
|
)
|
|
(ja-no-eval :group! (-> self draw art-group data (-> self enemy-info idle-anim))
|
|
:num! (loop! f30-2)
|
|
:frame-num 0.0
|
|
)
|
|
(until (time-elapsed? gp-3 s5-1)
|
|
(suspend)
|
|
(ja :num! (loop! f30-2))
|
|
)
|
|
)
|
|
(let ((gp-4 (-> self focus aware)))
|
|
(if (or (not (get-enemy-target self)) (!= gp-4 3))
|
|
(go-stare self)
|
|
)
|
|
)
|
|
(go-virtual hostile)
|
|
)
|
|
:post nav-enemy-face-focus-post
|
|
)
|
|
|
|
(defstate hostile (tomb-baby-spider)
|
|
:virtual #t
|
|
:trans (behavior ()
|
|
(let ((t9-0 (-> (method-of-type nav-enemy hostile) trans)))
|
|
(if t9-0
|
|
(t9-0)
|
|
)
|
|
)
|
|
(let ((a0-1 (get-enemy-target self)))
|
|
(when a0-1
|
|
(let ((a0-2 (get-trans a0-1 0)))
|
|
(if (and (< (vector-vector-distance a0-2 (-> self root trans)) 20480.0) (enemy-method-96 self 1274.3112 #t))
|
|
(go-virtual attack)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defmethod enemy-method-77 ((this tomb-baby-spider) (arg0 enemy-knocked-info))
|
|
(let* ((a2-0 (the-as collide-shape-prim-group (-> this root root-prim)))
|
|
(v1-2 (-> a2-0 child 3))
|
|
)
|
|
(dotimes (a3-0 3)
|
|
(set! (-> a2-0 child a3-0 local-sphere w) 819.2)
|
|
)
|
|
(set! (-> v1-2 prim-core action) (collide-action solid))
|
|
(set! (-> v1-2 prim-core collide-as) (collide-spec enemy))
|
|
(set! (-> v1-2 prim-core collide-with)
|
|
(collide-spec backgnd jak bot crate obstacle player-list blocking-plane pusher)
|
|
)
|
|
)
|
|
(case (-> this incoming knocked-type)
|
|
(((knocked-type knocked-type-6))
|
|
(let ((v1-6 (-> this skel root-channel 0)))
|
|
(set! (-> v1-6 frame-group) (the-as art-joint-anim (-> this draw art-group data 20)))
|
|
(set! (-> v1-6 param 0)
|
|
(the float (+ (-> (the-as art-joint-anim (-> this draw art-group data 20)) frames num-frames) -1))
|
|
)
|
|
(set! (-> v1-6 param 1) (-> arg0 anim-speed))
|
|
(set! (-> v1-6 frame-num) 0.0)
|
|
(joint-control-channel-group! v1-6 (the-as art-joint-anim (-> this draw art-group data 20)) num-func-seek!)
|
|
)
|
|
#t
|
|
)
|
|
(((knocked-type knocked-type-2) (knocked-type knocked-type-5))
|
|
(let ((v1-11 (-> this skel root-channel 0)))
|
|
(set! (-> v1-11 frame-group) (the-as art-joint-anim (-> this draw art-group data 17)))
|
|
(set! (-> v1-11 param 0)
|
|
(the float (+ (-> (the-as art-joint-anim (-> this draw art-group data 17)) frames num-frames) -1))
|
|
)
|
|
(set! (-> v1-11 param 1) (-> arg0 anim-speed))
|
|
(set! (-> v1-11 frame-num) 0.0)
|
|
(joint-control-channel-group! v1-11 (the-as art-joint-anim (-> this draw art-group data 17)) num-func-seek!)
|
|
)
|
|
#t
|
|
)
|
|
(else
|
|
((method-of-type nav-enemy enemy-method-77) this arg0)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defmethod enemy-method-78 ((this tomb-baby-spider) (arg0 enemy-knocked-info))
|
|
(case (-> this incoming knocked-type)
|
|
(((knocked-type knocked-type-6))
|
|
(let ((v1-3 (-> this skel root-channel 0)))
|
|
(set! (-> v1-3 frame-group) (the-as art-joint-anim (-> this draw art-group data 22)))
|
|
(set! (-> v1-3 param 0)
|
|
(the float (+ (-> (the-as art-joint-anim (-> this draw art-group data 22)) frames num-frames) -1))
|
|
)
|
|
(set! (-> v1-3 param 1) (-> arg0 anim-speed))
|
|
(set! (-> v1-3 frame-num) 0.0)
|
|
(joint-control-channel-group! v1-3 (the-as art-joint-anim (-> this draw art-group data 22)) num-func-seek!)
|
|
)
|
|
#t
|
|
)
|
|
(((knocked-type knocked-type-2) (knocked-type knocked-type-5))
|
|
(let ((v1-8 (-> this skel root-channel 0)))
|
|
(set! (-> v1-8 frame-group) (the-as art-joint-anim (-> this draw art-group data 18)))
|
|
(set! (-> v1-8 param 0)
|
|
(the float (+ (-> (the-as art-joint-anim (-> this draw art-group data 18)) frames num-frames) -1))
|
|
)
|
|
(set! (-> v1-8 param 1) (-> arg0 anim-speed))
|
|
(set! (-> v1-8 frame-num) 0.0)
|
|
(joint-control-channel-group! v1-8 (the-as art-joint-anim (-> this draw art-group data 18)) num-func-seek!)
|
|
)
|
|
#t
|
|
)
|
|
(else
|
|
((method-of-type nav-enemy enemy-method-78) this arg0)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defmethod enemy-method-79 ((this tomb-baby-spider) (arg0 int) (arg1 enemy-knocked-info))
|
|
(case arg0
|
|
((3)
|
|
(let ((s4-0 (ja-done? 0)))
|
|
(let ((a0-3 (-> this skel root-channel 0)))
|
|
(set! (-> a0-3 param 0) (the float (+ (-> a0-3 frame-group frames num-frames) -1)))
|
|
(set! (-> a0-3 param 1) (-> arg1 anim-speed))
|
|
(joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!)
|
|
)
|
|
(when s4-0
|
|
(case (-> this incoming knocked-type)
|
|
(((knocked-type knocked-type-6))
|
|
)
|
|
(((knocked-type knocked-type-2) (knocked-type knocked-type-5))
|
|
(let ((a0-7 (-> this skel root-channel 0)))
|
|
(set! (-> a0-7 frame-group) (the-as art-joint-anim (-> this draw art-group data 19)))
|
|
(set! (-> a0-7 param 0)
|
|
(the float (+ (-> (the-as art-joint-anim (-> this draw art-group data 19)) frames num-frames) -1))
|
|
)
|
|
(set! (-> a0-7 param 1) (-> arg1 anim-speed))
|
|
(set! (-> a0-7 frame-num) 0.0)
|
|
(joint-control-channel-group! a0-7 (the-as art-joint-anim (-> this draw art-group data 19)) num-func-seek!)
|
|
)
|
|
)
|
|
(else
|
|
(let ((a0-8 (-> this skel root-channel 0)))
|
|
(set! (-> a0-8 frame-group) (the-as art-joint-anim (-> this draw art-group data 16)))
|
|
(set! (-> a0-8 param 0)
|
|
(the float (+ (-> (the-as art-joint-anim (-> this draw art-group data 16)) frames num-frames) -1))
|
|
)
|
|
(set! (-> a0-8 param 1) (-> arg1 anim-speed))
|
|
(set! (-> a0-8 frame-num) 0.0)
|
|
(joint-control-channel-group! a0-8 (the-as art-joint-anim (-> this draw art-group data 16)) num-func-seek!)
|
|
)
|
|
)
|
|
)
|
|
(vector-reset! (-> this root transv))
|
|
#t
|
|
)
|
|
)
|
|
)
|
|
((4)
|
|
(let ((s4-1 (ja-done? 0)))
|
|
(let ((a0-11 (-> this skel root-channel 0)))
|
|
(set! (-> a0-11 param 0) (the float (+ (-> a0-11 frame-group frames num-frames) -1)))
|
|
(set! (-> a0-11 param 1) (-> arg1 anim-speed))
|
|
(joint-control-channel-group-eval! a0-11 (the-as art-joint-anim #f) num-func-seek!)
|
|
)
|
|
(when s4-1
|
|
(let ((v1-50 (-> this root root-prim)))
|
|
(set! (-> (the-as collide-shape-prim-group v1-50) child 0 local-sphere w) 1638.4)
|
|
(set! (-> (the-as collide-shape-prim-group v1-50) child 1 local-sphere w) 1638.4)
|
|
(set! (-> (the-as collide-shape-prim-group v1-50) child 2 local-sphere w) 3276.8)
|
|
(set! (-> (the-as collide-shape-prim-group v1-50) child 3 prim-core action) (collide-action))
|
|
(set! (-> (the-as collide-shape-prim-group v1-50) child 3 prim-core collide-with) (collide-spec))
|
|
)
|
|
0
|
|
)
|
|
s4-1
|
|
)
|
|
)
|
|
(else
|
|
((method-of-type nav-enemy enemy-method-79) this arg0 arg1)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defmethod enemy-method-104 ((this tomb-baby-spider) (arg0 process) (arg1 touching-shapes-entry) (arg2 uint))
|
|
(let* ((s1-0 arg0)
|
|
(s2-0 (if (type? s1-0 process-focusable)
|
|
s1-0
|
|
)
|
|
)
|
|
(s1-1 *target*)
|
|
(v1-0 (if (type? s1-1 process-focusable)
|
|
s1-1
|
|
)
|
|
)
|
|
(f0-0 1.0)
|
|
)
|
|
(if (and (= s2-0 v1-0) (focus-test? v1-0 indax))
|
|
(set! f0-0 0.6)
|
|
)
|
|
(when (send-event
|
|
arg0
|
|
'attack
|
|
arg1
|
|
(static-attack-info ((id arg2)
|
|
(shove-back (* f0-0 (-> this enemy-info attack-shove-back)))
|
|
(shove-up (* f0-0 (-> this enemy-info attack-shove-up)))
|
|
(mode (-> this enemy-info attack-mode))
|
|
(damage (the float (-> this enemy-info attack-damage)))
|
|
(knock (knocked-type knocked-type-8))
|
|
)
|
|
)
|
|
)
|
|
(enemy-method-105 this arg0)
|
|
#t
|
|
)
|
|
)
|
|
)
|
|
|
|
(defmethod init-enemy-collision! ((this tomb-baby-spider))
|
|
"Initializes the [[collide-shape-moving]] and any ancillary tasks to make the enemy collide properly"
|
|
(let ((s5-0 (new 'process 'collide-shape-moving this (collide-list-enum usually-hit-by-player))))
|
|
(set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
|
|
(set! (-> s5-0 reaction) cshape-reaction-default)
|
|
(set! (-> s5-0 no-reaction)
|
|
(the-as (function collide-shape-moving collide-query vector vector object) nothing)
|
|
)
|
|
(let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 5) 0)))
|
|
(set! (-> s5-0 total-prims) (the-as uint 6))
|
|
(set! (-> s4-0 prim-core collide-as) (collide-spec enemy))
|
|
(set! (-> s4-0 prim-core collide-with)
|
|
(collide-spec backgnd jak bot crate obstacle hit-by-others-list player-list)
|
|
)
|
|
(set! (-> s4-0 prim-core action) (collide-action solid deadly no-standon))
|
|
(set! (-> s4-0 transform-index) 3)
|
|
(set-vector! (-> s4-0 local-sphere) 0.0 409.6 0.0 7782.4)
|
|
(set! (-> s5-0 root-prim) s4-0)
|
|
)
|
|
(let ((v1-13 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0))))
|
|
(set! (-> v1-13 prim-core collide-as) (collide-spec enemy))
|
|
(set! (-> v1-13 prim-core collide-with)
|
|
(collide-spec backgnd jak bot crate obstacle hit-by-others-list player-list)
|
|
)
|
|
(set! (-> v1-13 prim-core action) (collide-action solid no-standon))
|
|
(set! (-> v1-13 transform-index) 3)
|
|
(set-vector! (-> v1-13 local-sphere) 0.0 0.0 0.0 1638.4)
|
|
)
|
|
(let ((v1-15 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0))))
|
|
(set! (-> v1-15 prim-core collide-as) (collide-spec enemy))
|
|
(set! (-> v1-15 prim-core collide-with)
|
|
(collide-spec backgnd jak bot crate obstacle hit-by-others-list player-list)
|
|
)
|
|
(set! (-> v1-15 prim-core action) (collide-action solid deadly no-standon))
|
|
(set! (-> v1-15 transform-index) 24)
|
|
(set-vector! (-> v1-15 local-sphere) 0.0 0.0 0.0 1638.4)
|
|
)
|
|
(let ((v1-17 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0))))
|
|
(set! (-> v1-17 prim-core collide-as) (collide-spec enemy))
|
|
(set! (-> v1-17 prim-core collide-with)
|
|
(collide-spec backgnd jak bot crate obstacle hit-by-others-list player-list)
|
|
)
|
|
(set! (-> v1-17 prim-core action) (collide-action solid no-standon))
|
|
(set! (-> v1-17 transform-index) 4)
|
|
(set-vector! (-> v1-17 local-sphere) 0.0 0.0 0.0 3276.8)
|
|
)
|
|
(set-vector!
|
|
(-> (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)) local-sphere)
|
|
0.0
|
|
2867.2
|
|
0.0
|
|
3276.8
|
|
)
|
|
(let ((v1-21 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0))))
|
|
(set! (-> v1-21 prim-core collide-as) (collide-spec enemy))
|
|
(set! (-> v1-21 prim-core collide-with)
|
|
(collide-spec backgnd jak bot crate obstacle hit-by-others-list player-list)
|
|
)
|
|
(set! (-> v1-21 prim-core action) (collide-action solid no-standon))
|
|
(set! (-> v1-21 transform-index) 5)
|
|
(set-vector! (-> v1-21 local-sphere) 0.0 4096.0 -1228.8 1638.4)
|
|
)
|
|
(set! (-> s5-0 nav-radius) 3686.4)
|
|
(let ((v1-23 (-> s5-0 root-prim)))
|
|
(set! (-> s5-0 backup-collide-as) (-> v1-23 prim-core collide-as))
|
|
(set! (-> s5-0 backup-collide-with) (-> v1-23 prim-core collide-with))
|
|
)
|
|
(set! (-> s5-0 max-iteration-count) (the-as uint 3))
|
|
(set! (-> this root) s5-0)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defmethod init-enemy! ((this tomb-baby-spider))
|
|
"Common method called to initialize the enemy, typically sets up default field values and calls ancillary helper methods"
|
|
(initialize-skeleton
|
|
this
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-tomb-baby-spider" (the-as (pointer uint32) #f)))
|
|
(the-as pair 0)
|
|
)
|
|
(init-enemy-behaviour-and-stats! this *tomb-baby-spider-nav-enemy-info*)
|
|
(none)
|
|
)
|
|
|
|
(deftype dig-spider (tomb-baby-spider)
|
|
()
|
|
)
|