mirror of
https://github.com/open-goal/jak-project
synced 2026-08-08 10:34:30 -04:00
637990314b
Closes #736 --------- Co-authored-by: Hat Kid <6624576+Hat-Kid@users.noreply.github.com>
2219 lines
74 KiB
Common Lisp
Vendored
Generated
2219 lines
74 KiB
Common Lisp
Vendored
Generated
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; definition of type tpl-gate
|
|
(deftype tpl-gate (process-drawable)
|
|
((alt-actor entity-actor)
|
|
(extra-id uint32)
|
|
(perm uint32)
|
|
)
|
|
(:state-methods
|
|
idle
|
|
open
|
|
close
|
|
closed
|
|
opened
|
|
die
|
|
)
|
|
)
|
|
|
|
;; definition for method 3 of type tpl-gate
|
|
(defmethod inspect ((this tpl-gate))
|
|
(when (not this)
|
|
(set! this this)
|
|
(goto cfg-4)
|
|
)
|
|
(let ((t9-0 (method-of-type process-drawable inspect)))
|
|
(t9-0 this)
|
|
)
|
|
(format #t "~2Talt-actor: ~A~%" (-> this alt-actor))
|
|
(format #t "~2Textra-id: ~D~%" (-> this extra-id))
|
|
(format #t "~2Tperm: ~D~%" (-> this perm))
|
|
(label cfg-4)
|
|
this
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defskelgroup skel-tpl-gate tpl-gate tpl-gate-lod0-jg tpl-gate-idle-ja
|
|
((tpl-gate-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 0 0 15)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate idle (tpl-gate)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('open)
|
|
(go-virtual open)
|
|
)
|
|
(('close)
|
|
(go-virtual close)
|
|
)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(until #f
|
|
(ja-no-eval :group! (ja-group) :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
#f
|
|
)
|
|
:post (behavior ()
|
|
(transform-post)
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate open (tpl-gate)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('trigger)
|
|
(when (= (-> self extra-id) 1)
|
|
)
|
|
(go-virtual close)
|
|
)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(sound-play "gate-lower")
|
|
(ja-no-eval :group! tpl-gate-open-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(transform-post)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
(until #f
|
|
(suspend)
|
|
)
|
|
#f
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate close (tpl-gate)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('open)
|
|
(go-virtual open)
|
|
)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(process-entity-status! self (entity-perm-status bit-13) #t)
|
|
(when (= (-> self extra-id) 1)
|
|
(until (process-grab? *target* #f)
|
|
(suspend)
|
|
)
|
|
(set-setting! 'entity-name "camera-356" 0.0 0)
|
|
(suspend-for (seconds 1)
|
|
)
|
|
)
|
|
(sound-play "gate-raise")
|
|
(ja-no-eval :group! tpl-gate-close-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(transform-post)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
(suspend-for (seconds 0.1)
|
|
)
|
|
(let ((a1-6 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-6 from) (process->ppointer self))
|
|
(set! (-> a1-6 num-params) 0)
|
|
(set! (-> a1-6 message) 'trigger)
|
|
(let ((t9-9 send-event-function)
|
|
(v1-42 (-> self alt-actor))
|
|
)
|
|
(t9-9
|
|
(if v1-42
|
|
(-> v1-42 extra process)
|
|
)
|
|
a1-6
|
|
)
|
|
)
|
|
)
|
|
(when (= (-> self extra-id) 1)
|
|
(suspend-for (seconds 0.5)
|
|
)
|
|
(remove-setting! 'entity-name)
|
|
(suspend-for (seconds 2.5)
|
|
)
|
|
(until (process-release? *target*)
|
|
(suspend)
|
|
)
|
|
(task-close! "temple-oracle-pre-pole-room")
|
|
)
|
|
(until #f
|
|
(suspend)
|
|
)
|
|
#f
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate closed (tpl-gate)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('open)
|
|
(go-virtual open)
|
|
)
|
|
(('trigger)
|
|
(when (= (-> self extra-id) 1)
|
|
)
|
|
(go-virtual close)
|
|
)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(ja-channel-push! 1 0)
|
|
(ja :group! (get-art-by-name (-> self draw art-group) "close" art-joint-anim) :num! max)
|
|
(transform-post)
|
|
(until #f
|
|
(suspend)
|
|
)
|
|
#f
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate opened (tpl-gate)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('trigger)
|
|
(when (= (-> self extra-id) 1)
|
|
)
|
|
(go-virtual close)
|
|
)
|
|
(('close)
|
|
(go-virtual close)
|
|
)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(ja-channel-push! 1 0)
|
|
(ja :group! (get-art-by-name (-> self draw art-group) "open" art-joint-anim) :num! max)
|
|
(transform-post)
|
|
(until #f
|
|
(suspend)
|
|
)
|
|
#f
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate die (tpl-gate)
|
|
:virtual #t
|
|
:code (behavior ()
|
|
(suspend)
|
|
0
|
|
)
|
|
)
|
|
|
|
;; definition for method 11 of type tpl-gate
|
|
(defmethod init-from-entity! ((this tpl-gate) (arg0 entity-actor))
|
|
"Set up a newly created process from the entity that created it."
|
|
(let ((s4-0 (new 'process 'collide-shape this (collide-list-enum usually-hit-by-player))))
|
|
(let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0))))
|
|
(set! (-> s3-0 prim-core collide-as) (collide-spec obstacle camera-blocker pusher))
|
|
(set! (-> s3-0 prim-core collide-with) (collide-spec jak bot player-list))
|
|
(set! (-> s3-0 prim-core action) (collide-action solid rideable))
|
|
(set! (-> s3-0 transform-index) 3)
|
|
(set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 61440.0)
|
|
(set! (-> s4-0 total-prims) (the-as uint 1))
|
|
(set! (-> s4-0 root-prim) s3-0)
|
|
)
|
|
(pusher-init s4-0)
|
|
(set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w)))
|
|
(let ((v1-12 (-> s4-0 root-prim)))
|
|
(set! (-> s4-0 backup-collide-as) (-> v1-12 prim-core collide-as))
|
|
(set! (-> s4-0 backup-collide-with) (-> v1-12 prim-core collide-with))
|
|
)
|
|
(set! (-> this root) s4-0)
|
|
)
|
|
(set! (-> this entity) arg0)
|
|
(process-drawable-from-entity! this arg0)
|
|
(initialize-skeleton
|
|
this
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-tpl-gate" (the-as (pointer level) #f)))
|
|
(the-as pair 0)
|
|
)
|
|
(logclear! (-> this mask) (process-mask actor-pause))
|
|
(set! (-> this alt-actor) (entity-actor-lookup arg0 'alt-actor 0))
|
|
(set! (-> this extra-id) (res-lump-value (-> this entity) 'extra-id uint :time -1000000000.0))
|
|
(set! (-> this draw light-index) (the-as uint 6))
|
|
(cond
|
|
((task-node-closed? (game-task-node temple-oracle-pole-half))
|
|
(process-entity-status! this (entity-perm-status dead) #t)
|
|
(go (method-of-object this die))
|
|
)
|
|
((and (not (task-node-closed? (game-task-node temple-oracle-pole-half)))
|
|
(-> this entity)
|
|
(logtest? (-> this entity extra perm status) (entity-perm-status bit-13))
|
|
)
|
|
(go (method-of-object this closed))
|
|
)
|
|
(else
|
|
(go (method-of-object this opened))
|
|
)
|
|
)
|
|
)
|
|
|
|
;; definition of type tpl-watcher-manager
|
|
(deftype tpl-watcher-manager (process)
|
|
((actor-group (pointer actor-group))
|
|
(actor-group-count int32)
|
|
(within-outer-ring symbol)
|
|
(within-inner-ring symbol)
|
|
(ouched symbol)
|
|
(bound-cam string)
|
|
(trans vector :inline)
|
|
(state-time time-frame)
|
|
(jak-in-hint-region symbol)
|
|
(watchers-vulnerable symbol)
|
|
)
|
|
(:state-methods
|
|
idle
|
|
waiting
|
|
until-watchers-dead
|
|
)
|
|
)
|
|
|
|
;; definition for method 3 of type tpl-watcher-manager
|
|
(defmethod inspect ((this tpl-watcher-manager))
|
|
(when (not this)
|
|
(set! this this)
|
|
(goto cfg-7)
|
|
)
|
|
(let ((t9-0 (method-of-type process inspect)))
|
|
(t9-0 this)
|
|
)
|
|
(format #t "~2Tactor-group: #x~X~%" (-> this actor-group))
|
|
(dotimes (s5-0 (-> this actor-group-count))
|
|
(format #t "~T [~D]~2Tactor-group: ~`actor-group`P~%" s5-0 (-> this actor-group s5-0))
|
|
)
|
|
(format #t "~2Tactor-group-count: ~D~%" (-> this actor-group-count))
|
|
(format #t "~2Twithin-outer-ring: ~A~%" (-> this within-outer-ring))
|
|
(format #t "~2Twithin-inner-ring: ~A~%" (-> this within-inner-ring))
|
|
(format #t "~2Touched: ~A~%" (-> this ouched))
|
|
(format #t "~2Tbound-cam: ~A~%" (-> this bound-cam))
|
|
(format #t "~2Ttrans: #<vector @ #x~X>~%" (-> this trans))
|
|
(format #t "~2Tstate-time: ~D~%" (-> this state-time))
|
|
(format #t "~2Tjak-in-hint-region: ~A~%" (-> this jak-in-hint-region))
|
|
(format #t "~2Twatchers-vulnerable: ~A~%" (-> this watchers-vulnerable))
|
|
(label cfg-7)
|
|
this
|
|
)
|
|
|
|
;; definition for function shoot-at-jak
|
|
(defbehavior shoot-at-jak tpl-watcher-manager ()
|
|
(when (not (-> *setting-control* user-current freeze-screen))
|
|
(let ((gp-0 -1))
|
|
(let ((f30-0 17592186000000.0)
|
|
(s4-0 (the-as object #f))
|
|
)
|
|
(dotimes (s5-0 (length (-> self actor-group 0)))
|
|
(let* ((f28-0 (vector-vector-distance-squared (-> self actor-group 0 data s5-0 actor trans) (target-pos 0)))
|
|
(v1-10 (-> self actor-group 0 data s5-0 actor))
|
|
(s3-1 (if v1-10
|
|
(-> v1-10 extra process)
|
|
)
|
|
)
|
|
)
|
|
(when s3-1
|
|
(set! s4-0 (or s4-0 (send-event s3-1 'is-shooting?)))
|
|
(let ((a1-2 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-2 from) (process->ppointer self))
|
|
(set! (-> a1-2 num-params) 0)
|
|
(set! (-> a1-2 message) 'can-shoot?)
|
|
(when (and (send-event-function s3-1 a1-2)
|
|
(not (focus-test? (the-as process-focusable s3-1) dead))
|
|
(not (logtest? (-> self actor-group 0 data s5-0 actor extra perm status) (entity-perm-status bit-9 bit-10)))
|
|
(< f28-0 f30-0)
|
|
)
|
|
(set! f30-0 f28-0)
|
|
(set! gp-0 s5-0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when (< -1 gp-0)
|
|
(let ((a1-3 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-3 from) (process->ppointer self))
|
|
(set! (-> a1-3 num-params) 0)
|
|
(set! (-> a1-3 message) 'fire)
|
|
(let ((t9-5 send-event-function)
|
|
(v1-41 (-> self actor-group 0 data gp-0 actor))
|
|
)
|
|
(t9-5
|
|
(if v1-41
|
|
(-> v1-41 extra process)
|
|
)
|
|
a1-3
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; definition for function tpl-watcher-manager-ehandler
|
|
(defbehavior tpl-watcher-manager-ehandler tpl-watcher-manager ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
(local-vars (v0-1 object))
|
|
(case arg2
|
|
(('trigger-on)
|
|
(task-node-close! (game-task-node temple-oracle-introduction) 'event)
|
|
(set! v0-1 #t)
|
|
(set! (-> self within-outer-ring) (the-as symbol v0-1))
|
|
v0-1
|
|
)
|
|
(('trigger-off)
|
|
(set! (-> self within-outer-ring) #f)
|
|
#f
|
|
)
|
|
(('inside-enter)
|
|
(set! v0-1 #t)
|
|
(set! (-> self within-inner-ring) (the-as symbol v0-1))
|
|
v0-1
|
|
)
|
|
(('inside-exit)
|
|
(set! (-> self within-inner-ring) #f)
|
|
#f
|
|
)
|
|
(('ouch)
|
|
(set! (-> self ouched) #t)
|
|
(shoot-at-jak)
|
|
)
|
|
(('watchers-vulnerable)
|
|
(-> self watchers-vulnerable)
|
|
)
|
|
(('confirm-shot)
|
|
(or (-> self within-outer-ring) (-> self ouched))
|
|
)
|
|
(('seize-camera)
|
|
(when (not (-> self jak-in-hint-region))
|
|
(set! (-> self jak-in-hint-region) #t)
|
|
(let ((v1-8 (-> self entity extra perm)))
|
|
(logior! (-> v1-8 status) (entity-perm-status bit-5))
|
|
(+! (-> v1-8 user-uint64) 1)
|
|
(logior! (-> v1-8 status) (entity-perm-status bit-14))
|
|
)
|
|
)
|
|
(set! (-> self bound-cam) (the-as string (-> arg3 param 0)))
|
|
(set! (-> self ouched) #t)
|
|
(go-virtual until-watchers-dead)
|
|
)
|
|
(('wandered-away)
|
|
(remove-setting! 'entity-name)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; definition for function watcher-man-trans
|
|
;; WARN: Return type mismatch symbol vs none.
|
|
(defbehavior watcher-man-trans tpl-watcher-manager ()
|
|
(set! (-> self watchers-vulnerable)
|
|
(< (if *target*
|
|
(vector-vector-distance (-> self trans) (-> *target* control trans))
|
|
4096000.0
|
|
)
|
|
313384.97
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate idle (tpl-watcher-manager)
|
|
:virtual #t
|
|
:event tpl-watcher-manager-ehandler
|
|
:trans watcher-man-trans
|
|
:code sleep-code
|
|
:post (behavior ()
|
|
(when (and *target*
|
|
(-> self within-outer-ring)
|
|
(not (-> self within-inner-ring))
|
|
(not (logtest? (target-flags invisible) (-> *target* target-flags)))
|
|
)
|
|
(shoot-at-jak)
|
|
(go-virtual waiting)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate waiting (tpl-watcher-manager)
|
|
:virtual #t
|
|
:event tpl-watcher-manager-ehandler
|
|
:trans watcher-man-trans
|
|
:code (behavior ()
|
|
(suspend-for (seconds 1)
|
|
)
|
|
(while (and *target* (focus-test? *target* dead))
|
|
(suspend)
|
|
)
|
|
(go-virtual idle)
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate until-watchers-dead (tpl-watcher-manager)
|
|
:virtual #t
|
|
:event tpl-watcher-manager-ehandler
|
|
:enter (behavior ()
|
|
(set-time! (-> self state-time))
|
|
)
|
|
:trans watcher-man-trans
|
|
:code (behavior ()
|
|
(when (not (-> *setting-control* user-current freeze-screen))
|
|
(set-setting! 'entity-name (-> self bound-cam) 0.0 0)
|
|
(suspend)
|
|
(while (not (process-grab? *target* #f))
|
|
(suspend)
|
|
)
|
|
(process-entity-status! self (entity-perm-status no-kill) #t)
|
|
(suspend-for (seconds 2.5)
|
|
)
|
|
(while (not (process-release? *target*))
|
|
(suspend)
|
|
)
|
|
(process-entity-status! self (entity-perm-status no-kill) #f)
|
|
)
|
|
(let ((gp-1 #t))
|
|
(while gp-1
|
|
(suspend)
|
|
(when (and *target* (not (logtest? (-> *target* focus-status) (focus-status dead))))
|
|
(set! gp-1 #f)
|
|
(dotimes (s5-0 (length (-> self actor-group 0)))
|
|
(let* ((v1-20 (-> self actor-group 0 data s5-0 actor))
|
|
(a0-9 (if v1-20
|
|
(-> v1-20 extra process)
|
|
)
|
|
)
|
|
)
|
|
(if (and a0-9
|
|
(not (focus-test? (the-as process-focusable a0-9) dead))
|
|
(not (logtest? (-> self actor-group 0 data s5-0 actor extra perm status) (entity-perm-status bit-9 bit-10)))
|
|
)
|
|
(set! gp-1 #t)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(until (time-elapsed? (-> self state-time) (seconds 1))
|
|
(suspend)
|
|
)
|
|
(task-close! "temple-oracle-watchers-complete")
|
|
(remove-setting! 'entity-name)
|
|
)
|
|
:post (behavior ()
|
|
(let ((a0-0 (-> self entity extra perm)))
|
|
(when (< (the-as uint 4) (-> a0-0 user-uint64))
|
|
(let ((gp-0
|
|
(new 'stack 'font-context *font-default-matrix* 90 300 0.0 (font-color default) (font-flags shadow kerning))
|
|
)
|
|
)
|
|
(set-width! gp-0 340)
|
|
(set-height! gp-0 60)
|
|
(set-scale! gp-0 0.6)
|
|
(set! (-> gp-0 flags) (font-flags shadow kerning middle middle-vert large))
|
|
(print-game-text
|
|
(lookup-text!
|
|
*common-text*
|
|
(if (or (not (focus-test? *target* gun)) (!= (-> *game-info* gun-type) 27))
|
|
(text-id use-the-wave-concussor)
|
|
(text-id hold-to-charge-and-then-release-to-fire-blast)
|
|
)
|
|
#f
|
|
)
|
|
gp-0
|
|
#f
|
|
44
|
|
(bucket-id hud-draw-hud-alpha)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if (and *target*
|
|
(-> self within-outer-ring)
|
|
(not (-> self within-inner-ring))
|
|
(not (logtest? (target-flags invisible) (-> *target* target-flags)))
|
|
)
|
|
(shoot-at-jak)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; definition for method 11 of type tpl-watcher-manager
|
|
;; INFO: Used lq/sq
|
|
(defmethod init-from-entity! ((this tpl-watcher-manager) (arg0 entity-actor))
|
|
"Set up a newly created process from the entity that created it."
|
|
(set! (-> this within-outer-ring) #f)
|
|
(set! (-> this within-inner-ring) #f)
|
|
(set! (-> this ouched) #f)
|
|
(vector-copy! (-> this trans) (-> arg0 trans))
|
|
(logclear! (-> this mask) (process-mask actor-pause))
|
|
(let* ((sv-16 (new 'static 'res-tag))
|
|
(v1-4 (res-lump-data arg0 'actor-groups (pointer actor-group) :tag-ptr (& sv-16)))
|
|
)
|
|
(cond
|
|
((and v1-4 (nonzero? (-> sv-16 elt-count)))
|
|
(set! (-> this actor-group-count) (the-as int (-> sv-16 elt-count)))
|
|
(set! (-> this actor-group) v1-4)
|
|
)
|
|
(else
|
|
(set! (-> this actor-group-count) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
(set! (-> this entity) arg0)
|
|
(set! (-> this jak-in-hint-region) #f)
|
|
(set! (-> this watchers-vulnerable) #t)
|
|
(go (method-of-object this idle))
|
|
)
|
|
|
|
;; definition for function has-jak-visibility?
|
|
;; WARN: Return type mismatch object vs symbol.
|
|
(defbehavior has-jak-visibility? tpl-watcher ((arg0 object) (arg1 process-drawable))
|
|
(the-as
|
|
symbol
|
|
(and (-> arg1 draw) (not (-> arg1 skel)) (not (logtest? (target-flags invisible) (-> *target* target-flags))))
|
|
)
|
|
)
|
|
|
|
;; definition of type tpl-watcher
|
|
(deftype tpl-watcher (process-focusable)
|
|
((manager tpl-watcher-manager)
|
|
(bob-clock time-frame)
|
|
(period-a int32)
|
|
(period-b int32)
|
|
(laser-sight sparticle-launch-control)
|
|
(laser-charge-fx sparticle-launch-control)
|
|
(los los-control :inline)
|
|
)
|
|
(:state-methods
|
|
idle
|
|
firing
|
|
die
|
|
standing-down
|
|
)
|
|
(:methods
|
|
(init-collision! (_type_) none)
|
|
)
|
|
)
|
|
|
|
;; definition for method 3 of type tpl-watcher
|
|
(defmethod inspect ((this tpl-watcher))
|
|
(when (not this)
|
|
(set! this this)
|
|
(goto cfg-4)
|
|
)
|
|
(let ((t9-0 (method-of-type process-focusable inspect)))
|
|
(t9-0 this)
|
|
)
|
|
(format #t "~2Tmanager: ~A~%" (-> this manager))
|
|
(format #t "~2Tbob-clock: ~D~%" (-> this bob-clock))
|
|
(format #t "~2Tperiod-a: ~D~%" (-> this period-a))
|
|
(format #t "~2Tperiod-b: ~D~%" (-> this period-b))
|
|
(format #t "~2Tlaser-sight: ~A~%" (-> this laser-sight))
|
|
(format #t "~2Tlaser-charge-fx: ~A~%" (-> this laser-charge-fx))
|
|
(format #t "~2Tlos: #<los-control @ #x~X>~%" (-> this los))
|
|
(label cfg-4)
|
|
this
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defskelgroup skel-tpl-watcher tpl-watcher tpl-watcher-lod0-jg tpl-watcher-idle-ja
|
|
((tpl-watcher-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 0 0 2)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defskelgroup skel-tpl-watcher-explode tpl-watcher tpl-watcher-explode-lod0-jg tpl-watcher-explode-idle-ja
|
|
((tpl-watcher-explode-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 0 0 35)
|
|
)
|
|
|
|
;; definition for symbol *tpl-watcher-exploder-params*, type joint-exploder-static-params
|
|
(define *tpl-watcher-exploder-params*
|
|
(new 'static 'joint-exploder-static-params
|
|
:joints (new 'static 'boxed-array :type joint-exploder-static-joint-params
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 3 :parent-joint-index 3)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 4 :parent-joint-index 3)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 5 :parent-joint-index 3)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 6 :parent-joint-index 3)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 7 :parent-joint-index 3)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 8 :parent-joint-index 3)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 9 :parent-joint-index 3)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 10 :parent-joint-index 3)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 11 :parent-joint-index 3)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 12 :parent-joint-index 3)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 13 :parent-joint-index 3)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 14 :parent-joint-index 3)
|
|
)
|
|
:collide-spec (collide-spec backgnd)
|
|
)
|
|
)
|
|
|
|
;; definition for function watcher-bob-trans
|
|
;; INFO: Used lq/sq
|
|
(defbehavior watcher-bob-trans tpl-watcher ()
|
|
(+! (-> self bob-clock) (- (current-time) (-> self clock old-frame-counter)))
|
|
(let ((gp-0 (new-stack-vector0)))
|
|
(let ((f28-0 65536.0))
|
|
(set! (-> gp-0 y)
|
|
(* 2048.0
|
|
(+ (sin (* (/ (the float (mod (-> self bob-clock) (-> self period-a))) (the float (-> self period-a))) f28-0))
|
|
(cos (* (/ (the float (mod (-> self bob-clock) (-> self period-b))) (the float (-> self period-b))) f28-0))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(vector+! (-> self root trans) (-> self entity trans) gp-0)
|
|
)
|
|
(spawn
|
|
(-> self part)
|
|
(vector+! (new 'stack-no-clear 'vector) (-> self root trans) (new 'static 'vector :y 3276.8 :w 1.0))
|
|
)
|
|
(spawn-from-cspace (-> self laser-sight) (joint-node tpl-watcher-lod0-jg gun))
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 20 of type tpl-watcher
|
|
;; WARN: Return type mismatch int vs search-info-flag.
|
|
(defmethod get-search-info-flag ((this tpl-watcher))
|
|
"Get search-info-flag for this process."
|
|
(with-pp
|
|
(let ((a1-0 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-0 from) (process->ppointer pp))
|
|
(set! (-> a1-0 num-params) 0)
|
|
(set! (-> a1-0 message) 'watchers-vulnerable)
|
|
(let ((t9-0 send-event-function)
|
|
(v1-2 (-> this manager))
|
|
)
|
|
(the-as search-info-flag (if (not (t9-0
|
|
(if v1-2
|
|
(-> v1-2 child 3)
|
|
)
|
|
a1-0
|
|
)
|
|
)
|
|
1
|
|
(the-as int (call-parent-method this))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate idle (tpl-watcher)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('fire)
|
|
(go-virtual firing)
|
|
)
|
|
(('attack)
|
|
(let ((v1-3 (the-as attack-info (-> block param 1))))
|
|
(when (and (or (>= (-> v1-3 damage) 1.0) (>= (penetrate-using->damage (-> v1-3 penetrate-using)) 1.0))
|
|
(and (not (focus-test? *target* dead)) (let ((a1-1 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-1 from) (process->ppointer self))
|
|
(set! (-> a1-1 num-params) 0)
|
|
(set! (-> a1-1 message) 'watchers-vulnerable)
|
|
(let ((t9-2 send-event-function)
|
|
(v1-12 (-> self manager))
|
|
)
|
|
(t9-2
|
|
(if v1-12
|
|
(-> v1-12 child 3)
|
|
)
|
|
a1-1
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(logior! (-> self focus-status) (focus-status dead))
|
|
(go-virtual die)
|
|
)
|
|
)
|
|
)
|
|
(('can-shoot?)
|
|
(should-check-los? (-> self los) 0)
|
|
)
|
|
(('prevent-bounce?)
|
|
#t
|
|
)
|
|
(('is-shooting?)
|
|
#f
|
|
)
|
|
)
|
|
)
|
|
:trans watcher-bob-trans
|
|
:code sleep-code
|
|
:post (behavior ()
|
|
(let ((a1-1 (the-as target (as-type *target* process-focusable))))
|
|
(if a1-1
|
|
(los-control-method-9 (-> self los) a1-1 (the-as vector #f) 819.2 4096.0)
|
|
)
|
|
)
|
|
(transform-post)
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(set! (-> *lightning-spec-id-table* 26) (new 'static 'lightning-spec
|
|
:name "lightning-blast"
|
|
:flags (lightning-spec-flags lsf0)
|
|
:start-color (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80)
|
|
:end-color (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80)
|
|
:fade-to-color (new 'static 'rgba :r #xbf :b #x8f :a #x5)
|
|
:fade-start-factor 0.2
|
|
:fade-time 30.0
|
|
:texture (new 'static 'texture-id :index #x3f :page #x4)
|
|
:reduction 0.42
|
|
:num-points 16
|
|
:box-size 16384.0
|
|
:merge-factor 0.5
|
|
:merge-count 2
|
|
:radius 2048.0
|
|
:duration 150.0
|
|
:sound (static-sound-spec "shock" :group 0)
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate firing (tpl-watcher)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('attack)
|
|
(let ((v1-1 (the-as attack-info (-> block param 1))))
|
|
(if (or (>= (-> v1-1 damage) 1.0) (>= (penetrate-using->damage (-> v1-1 penetrate-using)) 1.0))
|
|
(go-virtual die)
|
|
)
|
|
)
|
|
)
|
|
(('prevent-bounce?)
|
|
#t
|
|
)
|
|
(('can-shoot?)
|
|
(should-check-los? (-> self los) 0)
|
|
)
|
|
(('is-shooting?)
|
|
#t
|
|
)
|
|
)
|
|
)
|
|
:enter (behavior ()
|
|
(set-time! (-> self state-time))
|
|
)
|
|
:trans (behavior ()
|
|
(spawn
|
|
(-> self part)
|
|
(vector+! (new 'stack-no-clear 'vector) (-> self root trans) (new 'static 'vector :y 3276.8 :w 1.0))
|
|
)
|
|
(spawn-from-mat (-> self laser-charge-fx) (-> self node-list data 4 bone transform))
|
|
)
|
|
:code (behavior ()
|
|
(local-vars (v1-32 time-frame) (a1-12 process-drawable))
|
|
(rlet ((acc :class vf)
|
|
(Q :class vf)
|
|
(vf0 :class vf)
|
|
(vf1 :class vf)
|
|
(vf2 :class vf)
|
|
(vf3 :class vf)
|
|
)
|
|
(init-vf0-vector)
|
|
(let ((s5-0 (-> self root quat))
|
|
(gp-0 (new-sound-id))
|
|
)
|
|
(sound-play "wtcher-turn" :id gp-0)
|
|
(let ((s4-0 (current-time)))
|
|
(until (>= v1-32 (if (-> a1-12 nav)
|
|
75
|
|
450
|
|
)
|
|
)
|
|
(let* ((s3-0 (get-trans *target* 3))
|
|
(f0-0 (if *target*
|
|
(vector-vector-xz-distance (-> self root trans) (-> *target* control trans))
|
|
4096000.0
|
|
)
|
|
)
|
|
(v1-10 (vector-! (new 'stack-no-clear 'vector) s3-0 (-> self root trans)))
|
|
(f30-0 (/ f0-0 (meters 10)))
|
|
(s2-0 vector-xz-normalize!)
|
|
(a0-7 v1-10)
|
|
)
|
|
(vector-copy! a0-7 v1-10)
|
|
(set! (-> a0-7 y) 0.0)
|
|
(let* ((a1-7 (s2-0 (vector-normalize! a0-7 1.0) 1.0))
|
|
(a2-2 (vector-lerp-clamp! (new 'stack-no-clear 'vector) a1-7 *up-vector* f30-0))
|
|
)
|
|
(let ((f0-2 1.0))
|
|
(.lvf vf1 (&-> a2-2 quad))
|
|
(.mul.vf.xyz vf2 vf1 vf1)
|
|
(let ((v1-13 f0-2))
|
|
(.mov vf3 v1-13)
|
|
)
|
|
)
|
|
(.mul.x.vf.w acc vf0 vf2)
|
|
(.add.mul.y.vf.w acc vf0 vf2 acc)
|
|
(.add.mul.z.vf.w vf2 vf0 vf2 acc)
|
|
(.isqrt.vf Q vf3 vf2 :fsf #b0 :ftf #b11)
|
|
(.wait.vf)
|
|
(.mul.vf.xyz vf1 vf1 Q)
|
|
(.nop.vf)
|
|
(.nop.vf)
|
|
(.nop.vf)
|
|
(.svf (&-> a2-2 quad) vf1)
|
|
(let ((t9-7 quaternion-look-at!)
|
|
(a0-10 (new 'stack-no-clear 'quaternion))
|
|
(a1-9 (vector-! (new 'stack-no-clear 'vector) s3-0 (-> self node-list data 4 bone transform trans)))
|
|
)
|
|
(let ((f0-3 1.0))
|
|
(.lvf vf1 (&-> a1-9 quad))
|
|
(.mul.vf.xyz vf2 vf1 vf1)
|
|
(let ((v1-18 f0-3))
|
|
(.mov vf3 v1-18)
|
|
)
|
|
)
|
|
(.mul.x.vf.w acc vf0 vf2)
|
|
(.add.mul.y.vf.w acc vf0 vf2 acc)
|
|
(.add.mul.z.vf.w vf2 vf0 vf2 acc)
|
|
(.isqrt.vf Q vf3 vf2 :fsf #b0 :ftf #b11)
|
|
(.wait.vf)
|
|
(.mul.vf.xyz vf1 vf1 Q)
|
|
(.nop.vf)
|
|
(.nop.vf)
|
|
(.nop.vf)
|
|
(.svf (&-> a1-9 quad) vf1)
|
|
(let ((a2-3 (t9-7 a0-10 a1-9 a2-2)))
|
|
(if (not (time-elapsed? (-> self state-time) (seconds 0.25)))
|
|
(quaternion-slerp!
|
|
(-> self root quat)
|
|
s5-0
|
|
a2-3
|
|
(* 0.013333334 (the float (- (current-time) (-> self state-time))))
|
|
)
|
|
(quaternion-copy! (-> self root quat) a2-3)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(suspend)
|
|
(set! v1-32 (- (current-time) s4-0))
|
|
(let ((a0-14 (-> self manager)))
|
|
(set! a1-12 (if a0-14
|
|
(the-as process-drawable (-> a0-14 child 3))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(sound-stop gp-0)
|
|
)
|
|
(let ((a1-13 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-13 from) (process->ppointer self))
|
|
(set! (-> a1-13 num-params) 0)
|
|
(set! (-> a1-13 message) 'confirm-shot)
|
|
(let ((t9-11 send-event-function)
|
|
(v1-37 (-> self manager))
|
|
)
|
|
(when (t9-11
|
|
(if v1-37
|
|
(-> v1-37 child 3)
|
|
)
|
|
a1-13
|
|
)
|
|
((lambda :behavior tpl-watcher
|
|
()
|
|
(process-spawn
|
|
lightning-tracker
|
|
:init lightning-tracker-init
|
|
(-> *lightning-spec-id-table* 26)
|
|
150
|
|
#f
|
|
(the-as symbol #f)
|
|
(-> self node-list data 4 bone transform trans)
|
|
(get-trans *target* 3)
|
|
:name "lightning-tracker"
|
|
:to *entity-pool*
|
|
:unk 0
|
|
)
|
|
(send-event
|
|
*target*
|
|
'attack-invinc
|
|
#f
|
|
(static-attack-info
|
|
:mask (vehicle-impulse-factor)
|
|
((id (new-attack-id)) (damage 250.0) (vehicle-damage-factor 1.0) (vehicle-impulse-factor 1.0) (mode 'shock))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(sound-play "wtcher-fire")
|
|
(suspend-for (seconds 1)
|
|
'()
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(go-virtual standing-down)
|
|
)
|
|
)
|
|
:post ja-post
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate die (tpl-watcher)
|
|
:virtual #t
|
|
:enter (behavior ()
|
|
(logior! (-> self focus-status) (focus-status dead))
|
|
)
|
|
:code (behavior ()
|
|
(cond
|
|
((logtest? (-> group-tpl-watcher-explosion flags) (sp-group-flag sp13))
|
|
(vector-copy! (-> *launch-matrix* trans) (-> self root trans))
|
|
(part-tracker-spawn part-tracker-subsampler :to *entity-pool* :group group-tpl-watcher-explosion)
|
|
)
|
|
(else
|
|
(vector-copy! (-> *launch-matrix* trans) (-> self root trans))
|
|
(part-tracker-spawn part-tracker :to *entity-pool* :group group-tpl-watcher-explosion)
|
|
)
|
|
)
|
|
(let ((v1-33 (-> self root root-prim)))
|
|
(set! (-> v1-33 prim-core collide-as) (collide-spec))
|
|
(set! (-> v1-33 prim-core collide-with) (collide-spec))
|
|
)
|
|
0
|
|
(logior! (-> self draw status) (draw-control-status no-draw))
|
|
(set! (-> self root root-prim local-sphere w) 245760.0)
|
|
((lambda () (with-pp
|
|
(let ((gp-0 (new 'stack 'joint-exploder-tuning (the-as uint 0))))
|
|
(set-vector! (-> gp-0 fountain-rand-transv-lo) -24576.0 12288.0 -24576.0 1.0)
|
|
(set-vector! (-> gp-0 fountain-rand-transv-hi) 24576.0 98304.0 24576.0 1.0)
|
|
(process-spawn
|
|
joint-exploder
|
|
(art-group-get-by-name *level* "skel-tpl-watcher-explode" (the-as (pointer level) #f))
|
|
6
|
|
gp-0
|
|
*tpl-watcher-exploder-params*
|
|
:name "joint-exploder"
|
|
:to pp
|
|
:unk 0
|
|
)
|
|
)
|
|
#f
|
|
)
|
|
)
|
|
)
|
|
(sound-play "wtcher-xplo")
|
|
(let ((a1-7 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-7 from) (process->ppointer self))
|
|
(set! (-> a1-7 num-params) 0)
|
|
(set! (-> a1-7 message) 'ouch)
|
|
(let ((t9-9 send-event-function)
|
|
(v1-45 (-> self manager))
|
|
)
|
|
(t9-9
|
|
(if v1-45
|
|
(-> v1-45 child 3)
|
|
)
|
|
a1-7
|
|
)
|
|
)
|
|
)
|
|
(suspend-for (seconds 4)
|
|
)
|
|
(while (-> self child)
|
|
(suspend)
|
|
)
|
|
(cleanup-for-death self)
|
|
)
|
|
:post ja-post
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate standing-down (tpl-watcher)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('fire)
|
|
(go-virtual firing)
|
|
)
|
|
(('attack)
|
|
(let ((v1-3 (the-as attack-info (-> block param 1))))
|
|
(if (or (>= (-> v1-3 damage) 1.0) (>= (penetrate-using->damage (-> v1-3 penetrate-using)) 1.0))
|
|
(go-virtual die)
|
|
)
|
|
)
|
|
)
|
|
(('prevent-bounce?)
|
|
#t
|
|
)
|
|
)
|
|
)
|
|
:enter (behavior ()
|
|
(set-time! (-> self state-time))
|
|
)
|
|
:code (behavior ()
|
|
(let ((gp-0 (-> self root quat))
|
|
(s5-0 (-> self entity quat))
|
|
)
|
|
(suspend-for (seconds 1.5)
|
|
(quaternion-slerp!
|
|
(-> self root quat)
|
|
gp-0
|
|
s5-0
|
|
(* 0.0022222223 (the float (- (current-time) (-> self state-time))))
|
|
)
|
|
)
|
|
)
|
|
(go-virtual idle)
|
|
)
|
|
:post ja-post
|
|
)
|
|
|
|
;; definition for method 32 of type tpl-watcher
|
|
;; WARN: Return type mismatch collide-shape-moving vs none.
|
|
(defmethod init-collision! ((this tpl-watcher))
|
|
(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)
|
|
)
|
|
(set! (-> s5-0 penetrated-by)
|
|
(penetrate dark-punch explode jak-yellow-shot jak-red-shot jak-blue-shot jak-dark-shot)
|
|
)
|
|
(let ((v1-7 (new 'process 'collide-shape-prim-sphere s5-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 player-list))
|
|
(set! (-> v1-7 prim-core action) (collide-action solid))
|
|
(set! (-> v1-7 transform-index) 3)
|
|
(set-vector! (-> v1-7 local-sphere) 0.0 0.0 819.2 6553.6)
|
|
(set! (-> s5-0 total-prims) (the-as uint 1))
|
|
(set! (-> s5-0 root-prim) v1-7)
|
|
)
|
|
(set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
|
|
(let ((v1-10 (-> s5-0 root-prim)))
|
|
(set! (-> s5-0 backup-collide-as) (-> v1-10 prim-core collide-as))
|
|
(set! (-> s5-0 backup-collide-with) (-> v1-10 prim-core collide-with))
|
|
)
|
|
(set! (-> this root) s5-0)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 7 of type tpl-watcher
|
|
;; WARN: Return type mismatch process-drawable vs tpl-watcher.
|
|
(defmethod relocate ((this tpl-watcher) (offset int))
|
|
(if (nonzero? (-> this laser-sight))
|
|
(&+! (-> this laser-sight) offset)
|
|
)
|
|
(if (nonzero? (-> this laser-charge-fx))
|
|
(&+! (-> this laser-charge-fx) offset)
|
|
)
|
|
(the-as tpl-watcher ((method-of-type process-drawable relocate) this offset))
|
|
)
|
|
|
|
;; definition for method 10 of type tpl-watcher
|
|
(defmethod deactivate ((this tpl-watcher))
|
|
"Make a process dead, clean it up, remove it from the active pool, and return to dead pool."
|
|
(if (nonzero? (-> this laser-sight))
|
|
(kill-particles (-> this laser-sight))
|
|
)
|
|
(if (nonzero? (-> this laser-charge-fx))
|
|
(kill-particles (-> this laser-charge-fx))
|
|
)
|
|
((method-of-type process-drawable deactivate) this)
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 11 of type tpl-watcher
|
|
;; INFO: Used lq/sq
|
|
(defmethod init-from-entity! ((this tpl-watcher) (arg0 entity-actor))
|
|
"Set up a newly created process from the entity that created it."
|
|
(stack-size-set! (-> this main-thread) 384)
|
|
(init-collision! this)
|
|
(process-drawable-from-entity! this arg0)
|
|
(logior! (-> this mask) (process-mask enemy))
|
|
(initialize-skeleton
|
|
this
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-tpl-watcher" (the-as (pointer level) #f)))
|
|
(the-as pair 0)
|
|
)
|
|
(logclear! (-> this mask) (process-mask actor-pause))
|
|
(let* ((sv-16 (new 'static 'res-tag))
|
|
(v1-12 (res-lump-data arg0 'actor-groups (pointer actor-group) :tag-ptr (& sv-16)))
|
|
)
|
|
(if (and v1-12 (> (-> sv-16 elt-count) 0))
|
|
(set! (-> this manager) (the-as tpl-watcher-manager (-> v1-12 0 data 0 actor)))
|
|
(set! (-> this manager) #f)
|
|
)
|
|
)
|
|
(set! (-> this draw light-index) (the-as uint 10))
|
|
(set! (-> this bob-clock) (rand-vu-int-range 0 (seconds 19)))
|
|
(set! (-> this period-a) (rand-vu-int-range 1200 3900))
|
|
(set! (-> this period-b) (rand-vu-int-range 2700 5700))
|
|
(set! (-> this part) (create-launch-control group-tpl-watcher-exhaust-distort this))
|
|
(set! (-> this laser-sight) (create-launch-control group-tpl-watcher-laser-glow this))
|
|
(init-los! (-> this los) this (seconds 0.1) 327680.0 (collide-spec backgnd))
|
|
(set! (-> this laser-charge-fx) (create-launch-control group-tpl-watcher-laser-charge this))
|
|
(let* ((s5-1 (-> this laser-charge-fx))
|
|
(s4-1 (method-of-object s5-1 set-local-space-info))
|
|
(s3-1 (add-connection *part-local-space-engine* this local-space-proc-joint 4 0 0))
|
|
)
|
|
(let ((v1-32 (process->handle this)))
|
|
(if (= v1-32 #f)
|
|
(set! v1-32 (process->handle this))
|
|
)
|
|
(set! (-> (the-as particle-local-space-info s3-1) hand) (the-as handle v1-32))
|
|
)
|
|
(matrix-identity! (-> (the-as particle-local-space-info s3-1) mat-new))
|
|
(matrix-identity! (-> (the-as particle-local-space-info s3-1) mat-prev))
|
|
(set! (-> (the-as particle-local-space-info s3-1) flags) (part-local-space-flags))
|
|
(s4-1 s5-1 (the-as particle-local-space-info s3-1))
|
|
)
|
|
(go (method-of-object this idle))
|
|
)
|
|
|
|
;; definition of type tpl-door-switch
|
|
(deftype tpl-door-switch (process-drawable)
|
|
()
|
|
(:state-methods
|
|
idle
|
|
down
|
|
)
|
|
)
|
|
|
|
;; definition for method 3 of type tpl-door-switch
|
|
(defmethod inspect ((this tpl-door-switch))
|
|
(when (not this)
|
|
(set! this this)
|
|
(goto cfg-4)
|
|
)
|
|
(let ((t9-0 (method-of-type process-drawable inspect)))
|
|
(t9-0 this)
|
|
)
|
|
(label cfg-4)
|
|
this
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defskelgroup skel-tpl-door-switch tpl-door-switch tpl-door-switch-lod0-jg tpl-door-switch-idle-ja
|
|
((tpl-door-switch-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 0 0 6)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate idle (tpl-door-switch)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('attack)
|
|
(let ((v1-1 (the-as object (-> block param 1))))
|
|
(when (and (logtest? (penetrate flop dark-bomb) (-> (the-as attack-info v1-1) penetrate-using))
|
|
(< (if *target*
|
|
(vector-vector-xz-distance (-> self root trans) (-> *target* control trans))
|
|
4096000.0
|
|
)
|
|
24576.0
|
|
)
|
|
)
|
|
(go-virtual down)
|
|
#f
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
:enter (behavior ()
|
|
(setup-masks (-> self draw) 3 0)
|
|
)
|
|
:code sleep-code
|
|
:post ja-post
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate down (tpl-door-switch)
|
|
:virtual #t
|
|
:enter (behavior ()
|
|
(sound-play "jak-btn-press")
|
|
(setup-masks (-> self draw) 0 2)
|
|
)
|
|
:code (behavior ()
|
|
(sound-play "stone-lower")
|
|
(ja-no-eval :group! tpl-door-switch-press-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
(process-entity-status! self (entity-perm-status subtask-complete) #t)
|
|
(send-event *target* 'change-mode 'normal self)
|
|
(let* ((sv-96 (new 'static 'res-tag))
|
|
(gp-1 (res-lump-data (-> self entity) 'actor-groups (pointer actor-group) :tag-ptr (& sv-96)))
|
|
)
|
|
(cond
|
|
((and gp-1 (< (the-as uint 1) (-> sv-96 elt-count)))
|
|
(let ((s5-1 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> s5-1 from) (process->ppointer self))
|
|
(set! (-> s5-1 num-params) 1)
|
|
(set! (-> s5-1 message) 'seize-camera)
|
|
(set! (-> s5-1 param 0) (res-lump-struct (-> self entity) 'cutaway-camera uint))
|
|
(let ((t9-9 send-event-function)
|
|
(v1-39 (-> gp-1 1 data 0 actor))
|
|
)
|
|
(t9-9
|
|
(if v1-39
|
|
(-> v1-39 extra process)
|
|
)
|
|
s5-1
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(format 0 "ERROR: ~s: entity missing actor-group!~%" (-> self name))
|
|
)
|
|
)
|
|
(suspend)
|
|
(while (< (if *target*
|
|
(vector-vector-xz-distance (-> self root trans) (-> *target* control trans))
|
|
4096000.0
|
|
)
|
|
98304.0
|
|
)
|
|
(suspend)
|
|
)
|
|
(let ((a1-10 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-10 from) (process->ppointer self))
|
|
(set! (-> a1-10 num-params) 0)
|
|
(set! (-> a1-10 message) 'wandered-away)
|
|
(let ((t9-12 send-event-function)
|
|
(v1-54 (-> gp-1 1 data 0 actor))
|
|
)
|
|
(t9-12
|
|
(if v1-54
|
|
(-> v1-54 extra process)
|
|
)
|
|
a1-10
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(sleep-code)
|
|
)
|
|
:post transform-post
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate already-down (tpl-watcher)
|
|
:enter (behavior ()
|
|
(setup-masks (-> self draw) 0 2)
|
|
)
|
|
:code (behavior ()
|
|
(ja :group! tpl-watcher-idle-ja :num! (identity (the float (ja-num-frames 0))))
|
|
(transform-post)
|
|
(sleep-code)
|
|
)
|
|
:post ja-post
|
|
)
|
|
|
|
;; definition for method 11 of type tpl-door-switch
|
|
(defmethod init-from-entity! ((this tpl-door-switch) (arg0 entity-actor))
|
|
"Set up a newly created process from the entity that created it."
|
|
(let ((s4-0 (new 'process 'collide-shape-moving this (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)
|
|
)
|
|
(let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 3) 0)))
|
|
(set! (-> s4-0 total-prims) (the-as uint 4))
|
|
(set! (-> s3-0 prim-core collide-as) (collide-spec obstacle))
|
|
(set! (-> s3-0 prim-core collide-with) (collide-spec jak bot player-list))
|
|
(set! (-> s3-0 prim-core action) (collide-action solid))
|
|
(set! (-> s3-0 transform-index) 3)
|
|
(set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 24576.0)
|
|
(set! (-> s4-0 root-prim) s3-0)
|
|
)
|
|
(let ((v1-13 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 2) (the-as uint 0))))
|
|
(set! (-> v1-13 prim-core collide-as) (collide-spec obstacle))
|
|
(set! (-> v1-13 prim-core collide-with) (collide-spec jak bot player-list))
|
|
(set! (-> v1-13 prim-core action) (collide-action solid))
|
|
(set! (-> v1-13 transform-index) 6)
|
|
(set-vector! (-> v1-13 local-sphere) 0.0 0.0 0.0 24576.0)
|
|
)
|
|
(let ((v1-15 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 1) (the-as uint 0))))
|
|
(set! (-> v1-15 prim-core collide-as) (collide-spec obstacle))
|
|
(set! (-> v1-15 prim-core collide-with) (collide-spec jak bot player-list))
|
|
(set! (-> v1-15 prim-core action) (collide-action solid))
|
|
(set! (-> v1-15 transform-index) 5)
|
|
(set-vector! (-> v1-15 local-sphere) 0.0 0.0 0.0 16384.0)
|
|
)
|
|
(let ((v1-17 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0))))
|
|
(set! (-> v1-17 prim-core collide-as) (collide-spec obstacle))
|
|
(set! (-> v1-17 prim-core collide-with) (collide-spec jak bot player-list))
|
|
(set! (-> v1-17 prim-core action) (collide-action solid))
|
|
(set! (-> v1-17 transform-index) 4)
|
|
(set-vector! (-> v1-17 local-sphere) 0.0 0.0 0.0 8192.0)
|
|
)
|
|
(set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w)))
|
|
(let ((v1-20 (-> s4-0 root-prim)))
|
|
(set! (-> s4-0 backup-collide-as) (-> v1-20 prim-core collide-as))
|
|
(set! (-> s4-0 backup-collide-with) (-> v1-20 prim-core collide-with))
|
|
)
|
|
(set! (-> this root) s4-0)
|
|
)
|
|
(process-drawable-from-entity! this arg0)
|
|
(initialize-skeleton
|
|
this
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-tpl-door-switch" (the-as (pointer level) #f)))
|
|
(the-as pair 0)
|
|
)
|
|
(set! (-> this entity) arg0)
|
|
(if (task-closed? "temple-oracle-watchers-complete")
|
|
(go already-down)
|
|
(go (method-of-object this idle))
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defskelgroup skel-tpl-door-a tpl-door-a tpl-door-a-lod0-jg tpl-door-a-idle-ja
|
|
((tpl-door-a-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 5 0 8)
|
|
)
|
|
|
|
;; definition of type tpl-door-a
|
|
(deftype tpl-door-a (com-airlock)
|
|
()
|
|
)
|
|
|
|
;; definition for method 3 of type tpl-door-a
|
|
(defmethod inspect ((this tpl-door-a))
|
|
(when (not this)
|
|
(set! this this)
|
|
(goto cfg-4)
|
|
)
|
|
(let ((t9-0 (method-of-type com-airlock inspect)))
|
|
(t9-0 this)
|
|
)
|
|
(label cfg-4)
|
|
this
|
|
)
|
|
|
|
;; definition for method 11 of type tpl-door-a
|
|
(defmethod init-from-entity! ((this tpl-door-a) (arg0 entity-actor))
|
|
"Set up a newly created process from the entity that created it."
|
|
(let ((a0-2 (res-lump-struct arg0 'task-name structure)))
|
|
(when (and a0-2 (task-closed? (the-as string a0-2)))
|
|
(cleanup-for-death this)
|
|
(deactivate this)
|
|
)
|
|
)
|
|
(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)
|
|
)
|
|
(set! (-> s5-0 penetrated-by) (penetrate))
|
|
(let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 2) 0)))
|
|
(set! (-> s5-0 total-prims) (the-as uint 3))
|
|
(set! (-> s4-0 prim-core collide-as) (collide-spec obstacle))
|
|
(set! (-> s4-0 prim-core collide-with) (collide-spec jak bot player-list))
|
|
(set! (-> s4-0 prim-core action) (collide-action solid))
|
|
(set-vector! (-> s4-0 local-sphere) 0.0 20480.0 0.0 32768.0)
|
|
(set! (-> s5-0 root-prim) s4-0)
|
|
)
|
|
(let ((v1-19 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0))))
|
|
(set! (-> v1-19 prim-core collide-as) (collide-spec obstacle))
|
|
(set! (-> v1-19 prim-core collide-with) (collide-spec jak bot player-list))
|
|
(set! (-> v1-19 prim-core action) (collide-action solid))
|
|
(set! (-> v1-19 transform-index) 4)
|
|
(set-vector! (-> v1-19 local-sphere) 0.0 20480.0 0.0 32768.0)
|
|
)
|
|
(let ((v1-21 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 1) (the-as uint 0))))
|
|
(set! (-> v1-21 prim-core collide-as) (collide-spec obstacle))
|
|
(set! (-> v1-21 prim-core collide-with) (collide-spec jak bot player-list))
|
|
(set! (-> v1-21 prim-core action) (collide-action solid))
|
|
(set! (-> v1-21 transform-index) 5)
|
|
(set-vector! (-> v1-21 local-sphere) 0.0 20480.0 0.0 32768.0)
|
|
)
|
|
(set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
|
|
(let ((v1-24 (-> s5-0 root-prim)))
|
|
(set! (-> s5-0 backup-collide-as) (-> v1-24 prim-core collide-as))
|
|
(set! (-> s5-0 backup-collide-with) (-> v1-24 prim-core collide-with))
|
|
)
|
|
(set! (-> this root) s5-0)
|
|
)
|
|
(initialize-skeleton
|
|
this
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-tpl-door-a" (the-as (pointer level) #f)))
|
|
(the-as pair 0)
|
|
)
|
|
(init-airlock! this)
|
|
(set! (-> this lock-frame) 0.0)
|
|
(set! (-> this open-frame) 0.0)
|
|
(set! (-> this sound-open-loop) (static-sound-spec "tpl-a-door-open" :group 0))
|
|
(set! (-> this sound-open-stop) (static-sound-spec "tpl-a-door-hit" :group 0))
|
|
(set! (-> this sound-close-loop) (static-sound-spec "tpl-a-door-cls" :group 0))
|
|
(set! (-> this sound-close-stop) (static-sound-spec "tpl-a-cls-hit" :group 0))
|
|
(set! (-> this sound-behind?) #t)
|
|
(set! (-> this close-speed-multiplier) 6.0)
|
|
(go (method-of-object this close) #t)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defskelgroup skel-tpl-door-b tpl-door-b tpl-door-b-lod0-jg tpl-door-b-idle-ja
|
|
((tpl-door-b-lod0-mg (meters 20)) (tpl-door-b-lod1-mg (meters 999999)))
|
|
:bounds (static-spherem 0 5 0 8)
|
|
)
|
|
|
|
;; definition of type tpl-door-b
|
|
(deftype tpl-door-b (com-airlock)
|
|
()
|
|
)
|
|
|
|
;; definition for method 3 of type tpl-door-b
|
|
(defmethod inspect ((this tpl-door-b))
|
|
(when (not this)
|
|
(set! this this)
|
|
(goto cfg-4)
|
|
)
|
|
(let ((t9-0 (method-of-type com-airlock inspect)))
|
|
(t9-0 this)
|
|
)
|
|
(label cfg-4)
|
|
this
|
|
)
|
|
|
|
;; definition for method 11 of type tpl-door-b
|
|
(defmethod init-from-entity! ((this tpl-door-b) (arg0 entity-actor))
|
|
"Set up a newly created process from the entity that created it."
|
|
(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)
|
|
)
|
|
(set! (-> s5-0 penetrated-by) (penetrate))
|
|
(let ((v1-6 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0))))
|
|
(set! (-> v1-6 prim-core collide-as) (collide-spec obstacle))
|
|
(set! (-> v1-6 prim-core collide-with) (collide-spec jak bot player-list))
|
|
(set! (-> v1-6 prim-core action) (collide-action solid))
|
|
(set! (-> v1-6 transform-index) 3)
|
|
(set-vector! (-> v1-6 local-sphere) 0.0 20480.0 0.0 32768.0)
|
|
(set! (-> s5-0 total-prims) (the-as uint 1))
|
|
(set! (-> s5-0 root-prim) v1-6)
|
|
)
|
|
(set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
|
|
(let ((v1-9 (-> s5-0 root-prim)))
|
|
(set! (-> s5-0 backup-collide-as) (-> v1-9 prim-core collide-as))
|
|
(set! (-> s5-0 backup-collide-with) (-> v1-9 prim-core collide-with))
|
|
)
|
|
(set! (-> this root) s5-0)
|
|
)
|
|
(initialize-skeleton
|
|
this
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-tpl-door-b" (the-as (pointer level) #f)))
|
|
(the-as pair 0)
|
|
)
|
|
(init-airlock! this)
|
|
(set! (-> this lock-frame) 0.0)
|
|
(set! (-> this open-frame) 0.0)
|
|
(set! (-> this sound-open-loop) (static-sound-spec "tpl-a-door-open" :group 0))
|
|
(set! (-> this sound-open-stop) (static-sound-spec "tpl-a-door-hit" :group 0))
|
|
(set! (-> this sound-close-loop) (static-sound-spec "tpl-a-door-cls" :group 0))
|
|
(set! (-> this sound-close-stop) (static-sound-spec "tpl-a-cls-hit" :group 0))
|
|
(set! (-> this sound-behind?) #t)
|
|
(set! (-> this close-speed-multiplier) 1.0)
|
|
(go (method-of-object this close) #t)
|
|
)
|
|
|
|
;; definition of type tpl-spinning-plat
|
|
(deftype tpl-spinning-plat (process-drawable)
|
|
((root collide-shape :override)
|
|
(last-ridden time-frame)
|
|
(basal-trans vector :inline)
|
|
(no-collision-timer time-frame)
|
|
(attack-id int32)
|
|
(my-sound sound-id)
|
|
(pitch-mod-hack float)
|
|
)
|
|
(:state-methods
|
|
desync
|
|
flip
|
|
wait
|
|
underfoot
|
|
)
|
|
(:methods
|
|
(tpl-spinning-plat-method-24 (_type_) none)
|
|
)
|
|
)
|
|
|
|
;; definition for method 3 of type tpl-spinning-plat
|
|
(defmethod inspect ((this tpl-spinning-plat))
|
|
(when (not this)
|
|
(set! this this)
|
|
(goto cfg-4)
|
|
)
|
|
(let ((t9-0 (method-of-type process-drawable inspect)))
|
|
(t9-0 this)
|
|
)
|
|
(format #t "~2Tlast-ridden: ~D~%" (-> this last-ridden))
|
|
(format #t "~2Tbasal-trans: #<vector @ #x~X>~%" (-> this basal-trans))
|
|
(format #t "~2Tno-collision-timer: ~D~%" (-> this no-collision-timer))
|
|
(format #t "~2Tattack-id: ~D~%" (-> this attack-id))
|
|
(format #t "~2Tmy-sound: ~D~%" (-> this my-sound))
|
|
(format #t "~2Tpitch-mod-hack: ~f~%" (-> this pitch-mod-hack))
|
|
(label cfg-4)
|
|
this
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defskelgroup skel-tpl-spinning-plat tpl-spinning-plat tpl-spinning-plat-lod0-jg tpl-spinning-plat-idle-ja
|
|
((tpl-spinning-plat-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 0 0 5)
|
|
)
|
|
|
|
;; definition for method 24 of type tpl-spinning-plat
|
|
;; WARN: Return type mismatch collide-shape-moving vs none.
|
|
(defmethod tpl-spinning-plat-method-24 ((this tpl-spinning-plat))
|
|
(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) projectile-bounce-reaction)
|
|
(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 2) 0)))
|
|
(set! (-> s5-0 total-prims) (the-as uint 3))
|
|
(set! (-> s4-0 prim-core collide-as) (collide-spec obstacle pusher))
|
|
(set! (-> s4-0 prim-core collide-with) (collide-spec jak player-list))
|
|
(set! (-> s4-0 prim-core action) (collide-action solid rideable))
|
|
(set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 20480.0)
|
|
(set! (-> s5-0 root-prim) s4-0)
|
|
)
|
|
(pusher-init s5-0)
|
|
(let ((v1-14 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 1))))
|
|
(set! (-> v1-14 prim-core collide-as) (collide-spec obstacle pusher))
|
|
(set! (-> v1-14 prim-core collide-with) (collide-spec jak player-list))
|
|
(set! (-> v1-14 prim-core action) (collide-action solid rideable))
|
|
(set! (-> v1-14 transform-index) 3)
|
|
(set-vector! (-> v1-14 local-sphere) 0.0 0.0 0.0 20480.0)
|
|
)
|
|
(let ((v1-16 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 2))))
|
|
(set! (-> v1-16 prim-core collide-as) (collide-spec obstacle))
|
|
(set! (-> v1-16 prim-core collide-with) (collide-spec jak player-list))
|
|
(set! (-> v1-16 prim-core action) (collide-action solid))
|
|
(set! (-> v1-16 transform-index) 3)
|
|
(set-vector! (-> v1-16 local-sphere) 0.0 0.0 0.0 18432.0)
|
|
)
|
|
(set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
|
|
(let ((v1-19 (-> s5-0 root-prim)))
|
|
(set! (-> s5-0 backup-collide-as) (-> v1-19 prim-core collide-as))
|
|
(set! (-> s5-0 backup-collide-with) (-> v1-19 prim-core collide-with))
|
|
)
|
|
(set! (-> this root) s5-0)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate flip (tpl-spinning-plat)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('touch)
|
|
(let ((gp-0 (as-type proc process-focusable)))
|
|
(when (and gp-0 ((method-of-type touching-shapes-entry prims-touching?)
|
|
(the-as touching-shapes-entry (-> block param 0))
|
|
(-> self root)
|
|
(the-as uint 2)
|
|
)
|
|
)
|
|
(when (time-elapsed? (-> self no-collision-timer) (-> *TARGET-bank* hit-invulnerable-timeout))
|
|
(let ((s4-2
|
|
(vector-! (new 'stack-no-clear 'vector) (-> (the-as process-focusable gp-0) root trans) (-> self root trans))
|
|
)
|
|
)
|
|
(set! (-> s4-2 y) 0.0)
|
|
(vector-xz-normalize! s4-2 1.0)
|
|
(when (send-event
|
|
gp-0
|
|
'attack
|
|
(-> block param 0)
|
|
(static-attack-info
|
|
:mask (vehicle-impulse-factor)
|
|
((id (the-as uint (-> self attack-id)))
|
|
(damage 0.0)
|
|
(vehicle-damage-factor 1.0)
|
|
(vehicle-impulse-factor 1.0)
|
|
(vector s4-2)
|
|
(shove-back (meters 10))
|
|
(shove-up (meters 10))
|
|
(control (if (focus-test? (the-as process-focusable gp-0) board)
|
|
1.0
|
|
0.0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(let ((v0-0 (current-time)))
|
|
(set! (-> self no-collision-timer) v0-0)
|
|
v0-0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
:enter (behavior ()
|
|
(set! (-> self no-collision-timer) 0)
|
|
0
|
|
)
|
|
:trans (behavior ()
|
|
(let ((v1-3 (-> (the-as collide-shape-prim-group (-> self root root-prim)) child 1)))
|
|
(cond
|
|
((-> *setting-control* user-current freeze-screen)
|
|
(set! (-> v1-3 prim-core collide-as) (collide-spec))
|
|
(set! (-> v1-3 prim-core collide-with) (collide-spec))
|
|
0
|
|
)
|
|
(else
|
|
(set! (-> v1-3 prim-core collide-as) (collide-spec obstacle))
|
|
(set! (-> v1-3 prim-core collide-with) (collide-spec jak player-list))
|
|
)
|
|
)
|
|
)
|
|
(rider-trans)
|
|
(cond
|
|
((< 0.0 (-> *setting-control* user-current slow-time))
|
|
(when *sound-player-enable*
|
|
(let ((gp-0 (the-as sound-rpc-set-param (get-sound-buffer-entry))))
|
|
(set! (-> gp-0 command) (sound-command set-param))
|
|
(set! (-> gp-0 id) (-> self my-sound))
|
|
(set! (-> gp-0 params pitch-mod)
|
|
(the int (* 1524.0 (lerp (-> self pitch-mod-hack) -0.6 (-> *setting-control* user-current slow-time))))
|
|
)
|
|
(set! (-> gp-0 params mask) (the-as uint 2))
|
|
(-> gp-0 id)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
'()
|
|
)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(set! (-> self pitch-mod-hack) (rand-vu-float-range -0.15 0.15))
|
|
(when (not (-> *setting-control* user-current freeze-screen))
|
|
(sound-stop (-> self my-sound))
|
|
(suspend)
|
|
0
|
|
)
|
|
(when *sound-player-enable*
|
|
(let ((v1-6 (the-as sound-rpc-set-param (get-sound-buffer-entry))))
|
|
(set! (-> v1-6 command) (sound-command set-param))
|
|
(set! (-> v1-6 id) (-> self my-sound))
|
|
(set! (-> v1-6 params mask) (the-as uint 0))
|
|
(-> v1-6 id)
|
|
)
|
|
)
|
|
(sound-play-by-name
|
|
(static-sound-name "coin-flip")
|
|
(-> self my-sound)
|
|
1024
|
|
(the int (* 1524.0 (lerp-scale (-> self pitch-mod-hack) -15.25 (-> self clock clock-ratio) 1.0 0.05)))
|
|
0
|
|
(sound-group)
|
|
#t
|
|
)
|
|
(let ((gp-2 (vector-! (new 'stack-no-clear 'vector) (target-pos 0) (-> self root trans)))
|
|
(s5-1 (new 'stack-no-clear 'quaternion))
|
|
)
|
|
(set! (-> gp-2 y) 0.0)
|
|
(vector-normalize! gp-2 -1.0)
|
|
(vector-rotate90-around-y! gp-2 gp-2)
|
|
(vector-orient-by-quat! gp-2 gp-2 (quaternion-inverse! (new 'stack-no-clear 'quaternion) (-> self root quat)))
|
|
(quaternion-set! s5-1 (-> gp-2 x) (-> gp-2 y) (-> gp-2 z) 0.0)
|
|
(quaternion-normalize! (-> self root quat))
|
|
(let ((gp-3 (quaternion-copy! (new 'stack-no-clear 'quaternion) (-> self root quat)))
|
|
(s5-2 (quaternion*! (new 'stack-no-clear 'quaternion) (-> self root quat) s5-1))
|
|
)
|
|
(quaternion-normalize! s5-2)
|
|
(set-time! (-> self state-time))
|
|
(let ((f30-1 (lerp-scale 45.0 9.0 (-> self clock clock-ratio) 1.0 0.05)))
|
|
(suspend-for (the int f30-1)
|
|
(quaternion-slerp!
|
|
(-> self root quat)
|
|
gp-3
|
|
s5-2
|
|
(/ (the float (- (current-time) (-> self state-time))) f30-1)
|
|
)
|
|
(quaternion-normalize! (-> self root quat))
|
|
)
|
|
)
|
|
(quaternion-copy! (-> self root quat) s5-2)
|
|
)
|
|
)
|
|
(if (-> *setting-control* user-current freeze-screen)
|
|
(go-virtual wait)
|
|
(go-virtual flip)
|
|
)
|
|
)
|
|
:post pusher-post
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate desync (tpl-spinning-plat)
|
|
:virtual #t
|
|
:trans rider-trans
|
|
:code (behavior ()
|
|
(let ((f30-0 (res-lump-float (-> self entity) 'tpl-platform-predelay)))
|
|
(suspend-for (the int (* 300.0 f30-0))
|
|
'()
|
|
)
|
|
)
|
|
(go-virtual flip)
|
|
)
|
|
:post pusher-post
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate wait (tpl-spinning-plat)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('ridden)
|
|
(set! (-> self last-ridden) (-> *display* real-clock frame-counter))
|
|
(go-virtual underfoot)
|
|
)
|
|
)
|
|
)
|
|
:trans rider-trans
|
|
:code (behavior ()
|
|
(local-vars (v1-10 symbol))
|
|
(set-time! (-> self state-time))
|
|
(let ((gp-0 (the int (* 300.0 (res-lump-float (-> self entity) 'tpl-platform-predelay)))))
|
|
(mod (current-time) 84)
|
|
(until v1-10
|
|
(suspend)
|
|
(let ((v1-9 (mod (current-time) 84)))
|
|
(set! v1-10 (and (>= v1-9 gp-0)
|
|
(< (- (the-as time-frame v1-9) (- (current-time) (-> self clock old-frame-counter))) gp-0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(go-virtual flip)
|
|
)
|
|
:post pusher-post
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate underfoot (tpl-spinning-plat)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('ridden)
|
|
(let ((v0-0 (-> *display* real-clock frame-counter)))
|
|
(set! (-> self last-ridden) v0-0)
|
|
v0-0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
:trans rider-trans
|
|
:code (behavior ()
|
|
(set-time! (-> self state-time))
|
|
(set! (-> self state-time) (-> *display* real-clock frame-counter))
|
|
(suspend-for (seconds 0.25)
|
|
'()
|
|
)
|
|
(while (< (+ (-> *display* real-clock frame-counter) (seconds -1)) (-> self last-ridden))
|
|
(suspend)
|
|
)
|
|
(go-virtual flip)
|
|
)
|
|
:post pusher-post
|
|
)
|
|
|
|
;; definition for method 11 of type tpl-spinning-plat
|
|
;; INFO: Used lq/sq
|
|
(defmethod init-from-entity! ((this tpl-spinning-plat) (arg0 entity-actor))
|
|
"Set up a newly created process from the entity that created it."
|
|
(tpl-spinning-plat-method-24 this)
|
|
(process-drawable-from-entity! this arg0)
|
|
(initialize-skeleton
|
|
this
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-tpl-spinning-plat" (the-as (pointer level) #f)))
|
|
(the-as pair 0)
|
|
)
|
|
(logclear! (-> this mask) (process-mask actor-pause))
|
|
(vector-copy! (-> this basal-trans) (-> this root trans))
|
|
(let* ((v1-8 *game-info*)
|
|
(a0-10 (+ (-> v1-8 attack-id) 1))
|
|
)
|
|
(set! (-> v1-8 attack-id) a0-10)
|
|
(set! (-> this attack-id) (the-as int a0-10))
|
|
)
|
|
(set! (-> this my-sound) (new-sound-id))
|
|
(go (method-of-object this desync))
|
|
)
|
|
|
|
;; definition of type tpl-oracle-eye
|
|
(deftype tpl-oracle-eye (process-drawable)
|
|
((leye-sparta sparticle-launch-control)
|
|
(reye-sparta sparticle-launch-control)
|
|
)
|
|
(:state-methods
|
|
open
|
|
)
|
|
)
|
|
|
|
;; definition for method 3 of type tpl-oracle-eye
|
|
(defmethod inspect ((this tpl-oracle-eye))
|
|
(when (not this)
|
|
(set! this this)
|
|
(goto cfg-4)
|
|
)
|
|
(let ((t9-0 (method-of-type process-drawable inspect)))
|
|
(t9-0 this)
|
|
)
|
|
(format #t "~2Tleye-sparta: ~A~%" (-> this leye-sparta))
|
|
(format #t "~2Treye-sparta: ~A~%" (-> this reye-sparta))
|
|
(label cfg-4)
|
|
this
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defskelgroup skel-tpl-oracle-eye tpl-oracle-eye tpl-oracle-eye-lod0-jg tpl-oracle-eye-idle-ja
|
|
((tpl-oracle-eye-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 0 0 4)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate open (tpl-oracle-eye)
|
|
:virtual #t
|
|
:trans (behavior ()
|
|
(if (nonzero? (-> self leye-sparta))
|
|
(spawn-from-cspace (-> self leye-sparta) (joint-node tpl-oracle-eye-lod0-jg lefteyeglow))
|
|
)
|
|
(if (nonzero? (-> self reye-sparta))
|
|
(spawn-from-cspace (-> self reye-sparta) (joint-node tpl-oracle-eye-lod0-jg righteyeglow))
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(until #f
|
|
(ja-no-eval :group! (ja-group) :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
#f
|
|
)
|
|
:post ja-post
|
|
)
|
|
|
|
;; definition for method 11 of type tpl-oracle-eye
|
|
(defmethod init-from-entity! ((this tpl-oracle-eye) (arg0 entity-actor))
|
|
"Set up a newly created process from the entity that created it."
|
|
(set! (-> this root) (new 'process 'trsqv))
|
|
(process-drawable-from-entity! this arg0)
|
|
(initialize-skeleton
|
|
this
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-tpl-oracle-eye" (the-as (pointer level) #f)))
|
|
(the-as pair 0)
|
|
)
|
|
(set! (-> this leye-sparta) (create-launch-control group-temple-oracle-eye-glow this))
|
|
(set! (-> this reye-sparta) (create-launch-control group-temple-oracle-eye-glow this))
|
|
(go (method-of-object this open))
|
|
)
|
|
|
|
;; definition for method 7 of type tpl-oracle-eye
|
|
;; WARN: Return type mismatch process-drawable vs tpl-oracle-eye.
|
|
(defmethod relocate ((this tpl-oracle-eye) (offset int))
|
|
(if (nonzero? (-> this leye-sparta))
|
|
(&+! (-> this leye-sparta) offset)
|
|
)
|
|
(if (nonzero? (-> this reye-sparta))
|
|
(&+! (-> this reye-sparta) offset)
|
|
)
|
|
(the-as tpl-oracle-eye ((method-of-type process-drawable relocate) this offset))
|
|
)
|
|
|
|
;; definition for method 10 of type tpl-oracle-eye
|
|
(defmethod deactivate ((this tpl-oracle-eye))
|
|
"Make a process dead, clean it up, remove it from the active pool, and return to dead pool."
|
|
(let ((a0-1 (-> this leye-sparta)))
|
|
(if (nonzero? a0-1)
|
|
(kill-particles a0-1)
|
|
)
|
|
)
|
|
(let ((a0-2 (-> this reye-sparta)))
|
|
(if (nonzero? a0-2)
|
|
(kill-particles a0-2)
|
|
)
|
|
)
|
|
((method-of-type process-drawable deactivate) this)
|
|
(none)
|
|
)
|
|
|
|
;; definition of type tpl-banner-b
|
|
(deftype tpl-banner-b (process-drawable)
|
|
()
|
|
(:state-methods
|
|
idle
|
|
)
|
|
)
|
|
|
|
;; definition for method 3 of type tpl-banner-b
|
|
(defmethod inspect ((this tpl-banner-b))
|
|
(when (not this)
|
|
(set! this this)
|
|
(goto cfg-4)
|
|
)
|
|
(let ((t9-0 (method-of-type process-drawable inspect)))
|
|
(t9-0 this)
|
|
)
|
|
(label cfg-4)
|
|
this
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defskelgroup skel-tpl-banner-b tpl-banner-b tpl-banner-b-lod0-jg tpl-banner-b-idle-ja
|
|
((tpl-banner-b-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 -4 0 6)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate idle (tpl-banner-b)
|
|
:virtual #t
|
|
:code (behavior ()
|
|
(until #f
|
|
(ja-no-eval :group! (ja-group) :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
#f
|
|
)
|
|
:post ja-post
|
|
)
|
|
|
|
;; definition for method 11 of type tpl-banner-b
|
|
(defmethod init-from-entity! ((this tpl-banner-b) (arg0 entity-actor))
|
|
"Set up a newly created process from the entity that created it."
|
|
(set! (-> this root) (new 'process 'trsqv))
|
|
(process-drawable-from-entity! this arg0)
|
|
(initialize-skeleton
|
|
this
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-tpl-banner-b" (the-as (pointer level) #f)))
|
|
(the-as pair 0)
|
|
)
|
|
(go (method-of-object this idle))
|
|
)
|
|
|
|
;; definition of type tpl-elevator
|
|
(deftype tpl-elevator (elevator)
|
|
()
|
|
)
|
|
|
|
;; definition for method 3 of type tpl-elevator
|
|
(defmethod inspect ((this tpl-elevator))
|
|
(when (not this)
|
|
(set! this this)
|
|
(goto cfg-4)
|
|
)
|
|
(let ((t9-0 (method-of-type elevator inspect)))
|
|
(t9-0 this)
|
|
)
|
|
(label cfg-4)
|
|
this
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defskelgroup skel-tpl-elevator tpl-elevator tpl-elevator-lod0-jg tpl-elevator-idle-ja
|
|
((tpl-elevator-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 0 0 11)
|
|
:origin-joint-index 3
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate running (tpl-elevator)
|
|
:virtual #t
|
|
:enter (behavior ()
|
|
(setup-masks (-> self draw) 3 0)
|
|
(call-parent-state-handler enter)
|
|
)
|
|
:exit (behavior ()
|
|
(setup-masks (-> self draw) 1 2)
|
|
(let ((t9-2 (-> (find-parent-state) exit)))
|
|
(if t9-2
|
|
(t9-2)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; definition for method 31 of type tpl-elevator
|
|
(defmethod get-art-group ((this tpl-elevator))
|
|
(art-group-get-by-name *level* "skel-tpl-elevator" (the-as (pointer level) #f))
|
|
)
|
|
|
|
;; definition for method 32 of type tpl-elevator
|
|
;; WARN: Return type mismatch collide-shape-moving vs none.
|
|
(defmethod init-collision! ((this tpl-elevator))
|
|
(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 2) 0)))
|
|
(set! (-> s5-0 total-prims) (the-as uint 3))
|
|
(set! (-> s4-0 prim-core collide-as) (collide-spec pusher))
|
|
(set! (-> s4-0 prim-core collide-with) (collide-spec jak player-list))
|
|
(set! (-> s4-0 prim-core action) (collide-action solid rideable))
|
|
(set! (-> s4-0 transform-index) 3)
|
|
(set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 45056.0)
|
|
(set! (-> s5-0 root-prim) s4-0)
|
|
)
|
|
(pusher-init s5-0)
|
|
(let ((v1-15 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0))))
|
|
(set! (-> v1-15 prim-core collide-as) (collide-spec pusher))
|
|
(set! (-> v1-15 prim-core collide-with) (collide-spec jak bot player-list))
|
|
(set! (-> v1-15 prim-core action) (collide-action solid rideable))
|
|
(set! (-> v1-15 transform-index) 3)
|
|
(set-vector! (-> v1-15 local-sphere) 0.0 0.0 0.0 45056.0)
|
|
)
|
|
(let ((v1-18 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 1) (the-as uint (shl #xfe00 16)))))
|
|
(set! (-> v1-18 prim-core action) (collide-action solid))
|
|
(set! (-> v1-18 transform-index) 3)
|
|
(set-vector! (-> v1-18 local-sphere) 0.0 0.0 0.0 45056.0)
|
|
)
|
|
(set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
|
|
(let ((v1-21 (-> s5-0 root-prim)))
|
|
(set! (-> s5-0 backup-collide-as) (-> v1-21 prim-core collide-as))
|
|
(set! (-> s5-0 backup-collide-with) (-> v1-21 prim-core collide-with))
|
|
)
|
|
(set! (-> this root) s5-0)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 34 of type tpl-elevator
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defmethod base-plat-method-34 ((this tpl-elevator))
|
|
(setup-masks (-> this draw) 1 2)
|
|
(set! (-> this bounce-scale) 0.0)
|
|
(set! (-> this sound-running-loop) (static-sound-spec "tpl-elevator" :group 0))
|
|
(set! (-> this draw light-index) (the-as uint 4))
|
|
(none)
|
|
)
|
|
|
|
;; definition of type tpl-banner
|
|
(deftype tpl-banner (process-drawable)
|
|
((sound-id sound-id)
|
|
)
|
|
(:state-methods
|
|
idle
|
|
)
|
|
)
|
|
|
|
;; definition for method 3 of type tpl-banner
|
|
(defmethod inspect ((this tpl-banner))
|
|
(when (not this)
|
|
(set! this this)
|
|
(goto cfg-4)
|
|
)
|
|
(let ((t9-0 (method-of-type process-drawable inspect)))
|
|
(t9-0 this)
|
|
)
|
|
(format #t "~2Tsound-id: ~D~%" (-> this sound-id))
|
|
(label cfg-4)
|
|
this
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defskelgroup skel-tpl-banner tpl-banner tpl-banner-lod0-jg tpl-banner-idle-ja
|
|
((tpl-banner-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 -4.5 0 6)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate idle (tpl-banner)
|
|
:virtual #t
|
|
:code (behavior ()
|
|
(until #f
|
|
(if (nonzero? (-> self sound))
|
|
(update! (-> self sound))
|
|
)
|
|
(ja-no-eval :group! (ja-group) :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
#f
|
|
)
|
|
:post ja-post
|
|
)
|
|
|
|
;; definition for method 11 of type tpl-banner
|
|
(defmethod init-from-entity! ((this tpl-banner) (arg0 entity-actor))
|
|
"Set up a newly created process from the entity that created it."
|
|
(set! (-> this root) (new 'process 'trsqv))
|
|
(process-drawable-from-entity! this arg0)
|
|
(initialize-skeleton
|
|
this
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-tpl-banner" (the-as (pointer level) #f)))
|
|
(the-as pair 0)
|
|
)
|
|
(set! (-> this sound-id) (new-sound-id))
|
|
(logclear! (-> this mask) (process-mask actor-pause))
|
|
(go (method-of-object this idle))
|
|
)
|
|
|
|
;; definition for method 10 of type tpl-banner
|
|
(defmethod deactivate ((this tpl-banner))
|
|
"Make a process dead, clean it up, remove it from the active pool, and return to dead pool."
|
|
(if (-> this sound-id)
|
|
(sound-stop (-> this sound-id))
|
|
)
|
|
((method-of-type process-focusable deactivate) (the-as process-focusable this))
|
|
(none)
|
|
)
|
|
|
|
|
|
|
|
|