Files
Hat Kid c12a5d777c decomp3: decompile remaining mission code (#3515)
This should make all missions playable with the exception of the end of
`precursor-destroy-ship` because `precurd` asserts on level extraction.

- `trail`
- `trail-graph`
- `wastrail-graph`
- `cty-protect`
- `protect-gunship`
- `protect-path`
- `protect-script`
- `assault-cams`
- `assault-enemies`
- `assault-path`
- `assault-script`
- `assault-shared`
- `assault-task`
- `hover-nav-precura`
- `precura-mood`
- `precura-obs`
- `precura-obs2`
- `precura-part`
- `precurc-mood`
- `precurc-obs`
- `precurc-part`
- `precurd-obs`
- `precurd-part`
- `precurd-scenes`
2024-05-16 16:21:44 +02:00

195 lines
6.4 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: combx-obs.gc
;; name in dgo: combx-obs
;; dgos: COMBX
;; DECOMP BEGINS
(deftype combx-elevator (process-drawable)
((root collide-shape :override)
)
(:state-methods
idle
)
(:methods
(init-collision! (_type_) none)
(setup-skel-and-draw-masks (_type_) none)
)
)
(defstate idle (combx-elevator)
: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
)
(defskelgroup skel-combx-elevator tpl-elevator tpl-elevator-lod0-jg tpl-elevator-idle-ja
((tpl-elevator-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 0 11)
)
;; WARN: Return type mismatch collide-shape-moving vs none.
(defmethod init-collision! ((this combx-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)
)
(defmethod setup-skel-and-draw-masks ((this combx-elevator))
(initialize-skeleton
this
(the-as skeleton-group (art-group-get-by-name *level* "skel-combx-elevator" (the-as (pointer level) #f)))
(the-as pair 0)
)
(setup-masks (-> this draw) 1 2)
(update-transforms (-> this root))
0
(none)
)
(defmethod init-from-entity! ((this combx-elevator) (arg0 entity-actor))
(init-collision! this)
(process-drawable-from-entity! this arg0)
(setup-skel-and-draw-masks this)
(set! (-> this draw light-index) (the-as uint 1))
(go (method-of-object this idle))
)
(deftype combx-states (structure)
()
)
(defun init-mood-combx ((arg0 mood-context))
(let ((v1-0 (-> arg0 light-group 1)))
(let ((a0-1 (-> v1-0 dir0)))
(set! (-> a0-1 direction x) 0.0)
(set! (-> a0-1 direction y) 1.0)
(set! (-> a0-1 direction z) 0.0)
(set! (-> a0-1 direction w) 0.0)
)
(set-vector! (-> v1-0 dir0 color) 0.667 0.667 0.667 1.0)
(set-vector! (-> v1-0 ambi color) 0.333 0.333 0.333 1.0)
(set! (-> v1-0 dir0 extra x) 0.75)
(set! (-> v1-0 dir1 extra x) 0.0)
(set! (-> v1-0 dir2 extra x) 0.0)
(set! (-> v1-0 ambi extra x) 0.25)
)
)
(defbehavior update-mood-combx time-of-day-proc ((arg0 mood-context) (arg1 float) (arg2 int))
(update-mood-interior arg0 #f)
(let* ((s5-0 (camera-pos))
(f0-1 (fmin
(vector-vector-distance s5-0 (new 'static 'vector :x 368640.0 :z 40960.0 :w 1.0))
(vector-vector-distance s5-0 (new 'static 'vector :x 14274560.0 :y -167936.0 :z 614400.0 :w 1.0))
)
)
)
(when (< f0-1 716800.0)
(let ((f30-1 (fmax 0.0 (fmin 1.0 (* 0.000009765625 (- 819200.0 f0-1)))))
(a1-4 (-> arg0 current-fog))
(s5-1 (-> arg0 current-fog fog-dists))
)
(vector4-lerp!
(the-as vector a1-4)
(the-as vector a1-4)
(new 'static 'vector :x 30.0 :y 80.0 :z 150.0 :w 128.0)
f30-1
)
(vector4-lerp! s5-1 s5-1 (new 'static 'vector :x 262144.0 :y 937984.0 :z 255.0 :w 200.0) f30-1)
)
)
)
(cond
((< (the-as uint 8) (the-as uint (-> *time-of-day-context* mode)))
(palette-select-special arg0)
)
(else
(-> arg0 state)
(let* ((s5-2 (-> *display* part-clock frame-counter))
(f0-6 (* 1310.72 (the float (mod s5-2 25))))
(f30-2 (sin f0-6))
(f0-8 (* 109.22667 (the float (mod s5-2 600))))
(s5-3 (/ (mod s5-2 125) 25))
)
(set! (-> arg0 times 0 w) 1.0)
(set! (-> arg0 times 1 w) f30-2)
(set! (-> arg0 times 2 w) (+ 0.85 (* 0.15 (cos f0-8))))
(set! (-> arg0 times 3 w) (if (zero? s5-3)
f30-2
0.0
)
)
(set! (-> arg0 times 4 w) (if (= s5-3 1)
f30-2
0.0
)
)
(set! (-> arg0 times 5 w) (if (= s5-3 2)
f30-2
0.0
)
)
(set! (-> arg0 times 6 w) (if (= s5-3 3)
f30-2
0.0
)
)
(set! (-> arg0 times 7 w) (if (= s5-3 4)
f30-2
0.0
)
)
)
)
)
0
(none)
)