mirror of
https://github.com/open-goal/jak-project
synced 2026-05-30 08:56:59 -04:00
d37e6c548e
* started process on `camera` * the bulk of `camera` is finished, with the exception of a few * decomp: Confirmed function ret value * decomp: `cam-combiner` dead code issue * stash * decomp: finish `cam-combiner` * decomp: finish `cam-start` * decomp: mostly finish `cam-update`, just needs polish now * `cam-standard-event-handler` still causing issues * `cam-combiner` issues with top-level `s6` usage * decomp: update reference tests * decomp: finalize `cam-start` * decomp: `cam-update` cleaned up everything except the array of planes issue * label correction * still blocked in cam-combiner over casting issues * decomp: resolve issues in `cam-start` * decomp: finalize `cam-update` * stash * decomp: finalize `cam-combiner` * decomp: finalize `camera` * decomp: address feedback
381 lines
9.9 KiB
Common Lisp
Vendored
381 lines
9.9 KiB
Common Lisp
Vendored
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; definition for method 10 of type cylinder
|
|
(defmethod
|
|
ray-capsule-intersect
|
|
cylinder
|
|
((obj cylinder) (probe-origin vector) (probe-dir vector))
|
|
(let ((t2-0 (new 'stack-no-clear 'vector))
|
|
(end-pt (new 'stack-no-clear 'vector))
|
|
)
|
|
0.0
|
|
0.0
|
|
(let
|
|
((result
|
|
(ray-cylinder-intersect
|
|
probe-origin
|
|
probe-dir
|
|
(-> obj origin)
|
|
(-> obj axis)
|
|
(-> obj radius)
|
|
(-> obj length)
|
|
t2-0
|
|
)
|
|
)
|
|
)
|
|
(let
|
|
((u-origin-sph
|
|
(ray-sphere-intersect
|
|
probe-origin
|
|
probe-dir
|
|
(-> obj origin)
|
|
(-> obj radius)
|
|
)
|
|
)
|
|
)
|
|
(if (and (>= u-origin-sph 0.0) (or (< result 0.0) (< u-origin-sph result)))
|
|
(set! result u-origin-sph)
|
|
)
|
|
)
|
|
(vector+float*! end-pt (-> obj origin) (-> obj axis) (-> obj length))
|
|
(let
|
|
((u-end-sphere
|
|
(ray-sphere-intersect probe-origin probe-dir end-pt (-> obj radius))
|
|
)
|
|
)
|
|
(if (and (>= u-end-sphere 0.0) (or (< result 0.0) (< u-end-sphere result)))
|
|
(set! result u-end-sphere)
|
|
)
|
|
)
|
|
result
|
|
)
|
|
)
|
|
)
|
|
|
|
;; definition of type cylinder-verts
|
|
(deftype cylinder-verts (structure)
|
|
((vert vector 24 :inline :offset-assert 0)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #x180
|
|
:flag-assert #x900000180
|
|
)
|
|
|
|
;; definition for method 3 of type cylinder-verts
|
|
(defmethod inspect cylinder-verts ((obj cylinder-verts))
|
|
(format #t "[~8x] ~A~%" obj 'cylinder-verts)
|
|
(format #t "~Tvert[24] @ #x~X~%" (-> obj vert))
|
|
obj
|
|
)
|
|
|
|
;; definition for method 9 of type cylinder
|
|
;; INFO: Return type mismatch int vs none.
|
|
;; Used lq/sq
|
|
(defmethod debug-draw cylinder ((obj cylinder) (arg0 vector))
|
|
(local-vars
|
|
(sv-896 matrix)
|
|
(sv-912 int)
|
|
(sv-928 (function vector vector vector float vector))
|
|
(sv-944 vector)
|
|
(sv-960 vector)
|
|
(sv-976 vector)
|
|
(sv-992 (function vector vector vector float vector))
|
|
(sv-1008 vector)
|
|
(sv-1024 vector)
|
|
(sv-1040 vector)
|
|
(sv-1056 (function vector vector vector float vector))
|
|
(sv-1072 vector)
|
|
(sv-1088 vector)
|
|
(sv-1104 vector)
|
|
(sv-1120 (function vector vector vector float vector))
|
|
(sv-1136 vector)
|
|
(sv-1152 vector)
|
|
(sv-1168 vector)
|
|
)
|
|
(rlet ((vf0 :class vf)
|
|
(vf4 :class vf)
|
|
(vf5 :class vf)
|
|
(vf6 :class vf)
|
|
)
|
|
(init-vf0-vector)
|
|
(let ((s1-0 (new 'stack-no-clear 'vector))
|
|
(s0-0 (new 'stack-no-clear 'vector))
|
|
)
|
|
(if (< 0.999 (fabs (-> obj axis y)))
|
|
(vector-cross! s1-0 (-> obj axis) (new 'static 'vector :z 1.0))
|
|
(vector-cross! s1-0 (-> obj axis) (new 'static 'vector :y 1.0))
|
|
)
|
|
(vector-normalize! s1-0 (-> obj radius))
|
|
(vector-float*! s0-0 (-> obj axis) (* 0.125 (-> obj length)))
|
|
(let ((s5-0 (new 'stack-no-clear 'cylinder-verts))
|
|
(s4-0 (new 'stack-no-clear 'cylinder-verts))
|
|
(s3-0 (new 'stack-no-clear 'matrix))
|
|
)
|
|
(matrix-axis-angle! s3-0 (-> obj axis) 4096.0)
|
|
(set! sv-896 (new 'stack-no-clear 'matrix))
|
|
(vector-matrix*! (the-as vector sv-896) (-> obj origin) s3-0)
|
|
(let ((v1-5 (-> s3-0 vector 3)))
|
|
(.lvf vf4 (&-> (-> obj origin) quad))
|
|
(.lvf vf5 (&-> sv-896 vector 0 quad))
|
|
(.mov.vf vf6 vf0 :mask #b1000)
|
|
(.sub.vf vf6 vf4 vf5 :mask #b111)
|
|
(.svf (&-> v1-5 quad) vf6)
|
|
)
|
|
(set! sv-912 0)
|
|
(while (< sv-912 8)
|
|
(vector+! (-> s5-0 vert (+ sv-912 8)) (-> obj origin) s1-0)
|
|
(vector+float*!
|
|
(-> s5-0 vert (+ sv-912 8))
|
|
(-> s5-0 vert (+ sv-912 8))
|
|
s0-0
|
|
(the float sv-912)
|
|
)
|
|
(set! sv-912 (+ sv-912 1))
|
|
)
|
|
(dotimes (s0-1 8)
|
|
(set! sv-928 vector+float*!)
|
|
(set! sv-944 (-> s5-0 vert s0-1))
|
|
(set! sv-960 (-> obj origin))
|
|
(set! sv-976 s1-0)
|
|
(let ((a3-1 (cos (* 2048.0 (the float (- 7 s0-1))))))
|
|
(sv-928 sv-944 sv-960 sv-976 a3-1)
|
|
)
|
|
(set! sv-992 vector+float*!)
|
|
(set! sv-1008 (-> s5-0 vert s0-1))
|
|
(set! sv-1024 (-> s5-0 vert s0-1))
|
|
(set! sv-1040 (-> obj axis))
|
|
(let
|
|
((a3-2 (* (- (-> obj radius)) (sin (* 2048.0 (the float (- 7 s0-1)))))))
|
|
(sv-992 sv-1008 sv-1024 sv-1040 a3-2)
|
|
)
|
|
(set! sv-1056 vector+float*!)
|
|
(set! sv-1072 (-> s5-0 vert (+ s0-1 16)))
|
|
(set! sv-1088 (-> obj origin))
|
|
(set! sv-1104 s1-0)
|
|
(let ((a3-3 (cos (* 2048.0 (the float s0-1)))))
|
|
(sv-1056 sv-1072 sv-1088 sv-1104 a3-3)
|
|
)
|
|
(set! sv-1120 vector+float*!)
|
|
(set! sv-1136 (-> s5-0 vert (+ s0-1 16)))
|
|
(set! sv-1152 (-> s5-0 vert (+ s0-1 16)))
|
|
(set! sv-1168 (-> obj axis))
|
|
(let
|
|
((a3-4
|
|
(+
|
|
(-> obj length)
|
|
(* (-> obj radius) (sin (* 2048.0 (the float s0-1))))
|
|
)
|
|
)
|
|
)
|
|
(sv-1120 sv-1136 sv-1152 sv-1168 a3-4)
|
|
)
|
|
)
|
|
(dotimes (s2-1 16)
|
|
(dotimes (s1-1 24)
|
|
(vector-matrix*! (-> s4-0 vert s1-1) (-> s5-0 vert s1-1) s3-0)
|
|
(camera-line (-> s5-0 vert s1-1) (-> s4-0 vert s1-1) arg0)
|
|
(if (nonzero? s1-1)
|
|
(camera-line (-> s5-0 vert s1-1) (-> s5-0 vert (+ s1-1 -1)) arg0)
|
|
)
|
|
)
|
|
(let ((v1-77 s5-0))
|
|
(set! s5-0 s4-0)
|
|
(set! s4-0 v1-77)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
)
|
|
|
|
;; definition for function ray-arbitrary-circle-intersect
|
|
(defun
|
|
ray-arbitrary-circle-intersect
|
|
((probe-origin vector)
|
|
(probe-dir vector)
|
|
(circle-origin vector)
|
|
(circle-normal vector)
|
|
(radius float)
|
|
)
|
|
(let*
|
|
((v1-1 (vector-! (new 'stack-no-clear 'vector) circle-origin probe-origin))
|
|
(f0-2
|
|
(/ (vector-dot v1-1 circle-normal) (vector-dot probe-dir circle-normal))
|
|
)
|
|
)
|
|
(cond
|
|
((or (< 1.0 f0-2) (< f0-2 0.0))
|
|
-100000000.0
|
|
)
|
|
((let ((a0-7 (new 'stack-no-clear 'vector)))
|
|
(vector-float*! a0-7 probe-dir f0-2)
|
|
(vector-! a0-7 a0-7 v1-1)
|
|
(< (vector-dot a0-7 a0-7) (* radius radius))
|
|
)
|
|
f0-2
|
|
)
|
|
(else
|
|
-100000000.0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; definition for method 10 of type cylinder-flat
|
|
;; Used lq/sq
|
|
(defmethod
|
|
ray-flat-cyl-intersect
|
|
cylinder-flat
|
|
((obj cylinder-flat) (probe-origin vector) (probe-dir vector))
|
|
(let ((gp-0 (new 'stack-no-clear 'vector))
|
|
(end-pt (new 'stack-no-clear 'vector))
|
|
)
|
|
0.0
|
|
0.0
|
|
(let
|
|
((result
|
|
(ray-cylinder-intersect
|
|
probe-origin
|
|
probe-dir
|
|
(-> obj origin)
|
|
(-> obj axis)
|
|
(-> obj radius)
|
|
(-> obj length)
|
|
gp-0
|
|
)
|
|
)
|
|
)
|
|
(let
|
|
((u-origin-circle
|
|
(ray-arbitrary-circle-intersect
|
|
probe-origin
|
|
probe-dir
|
|
(-> obj origin)
|
|
(-> obj axis)
|
|
(-> obj radius)
|
|
)
|
|
)
|
|
)
|
|
(when
|
|
(and
|
|
(>= u-origin-circle 0.0)
|
|
(or (< result 0.0) (< u-origin-circle result))
|
|
)
|
|
(set! result u-origin-circle)
|
|
(set! (-> gp-0 quad) (-> obj origin quad))
|
|
)
|
|
)
|
|
(vector+float*! end-pt (-> obj origin) (-> obj axis) (-> obj length))
|
|
(let
|
|
((u-end-circle
|
|
(ray-arbitrary-circle-intersect
|
|
probe-origin
|
|
probe-dir
|
|
end-pt
|
|
(-> obj axis)
|
|
(-> obj radius)
|
|
)
|
|
)
|
|
)
|
|
(when
|
|
(and (>= u-end-circle 0.0) (or (< result 0.0) (< u-end-circle result)))
|
|
(set! result u-end-circle)
|
|
(set! (-> gp-0 quad) (-> end-pt quad))
|
|
)
|
|
)
|
|
result
|
|
)
|
|
)
|
|
)
|
|
|
|
;; definition of type cylinder-flat-verts
|
|
(deftype cylinder-flat-verts (structure)
|
|
((vert vector 10 :inline :offset-assert 0)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #xa0
|
|
:flag-assert #x9000000a0
|
|
)
|
|
|
|
;; definition for method 3 of type cylinder-flat-verts
|
|
(defmethod inspect cylinder-flat-verts ((obj cylinder-flat-verts))
|
|
(format #t "[~8x] ~A~%" obj 'cylinder-flat-verts)
|
|
(format #t "~Tvert[10] @ #x~X~%" (-> obj vert))
|
|
obj
|
|
)
|
|
|
|
;; definition for method 9 of type cylinder-flat
|
|
;; INFO: Return type mismatch int vs none.
|
|
;; Used lq/sq
|
|
(defmethod debug-draw cylinder-flat ((obj cylinder-flat) (arg0 vector))
|
|
(local-vars (sv-448 vector) (sv-464 int))
|
|
(rlet ((vf0 :class vf)
|
|
(vf4 :class vf)
|
|
(vf5 :class vf)
|
|
(vf6 :class vf)
|
|
)
|
|
(init-vf0-vector)
|
|
(let ((s1-0 (new 'stack-no-clear 'vector))
|
|
(s0-0 (new 'stack-no-clear 'vector))
|
|
)
|
|
(if (< 0.999 (fabs (-> obj axis y)))
|
|
(vector-cross! s1-0 (-> obj axis) (new 'static 'vector :z 1.0))
|
|
(vector-cross! s1-0 (-> obj axis) (new 'static 'vector :y 1.0))
|
|
)
|
|
(vector-normalize! s1-0 (-> obj radius))
|
|
(vector-float*! s0-0 (-> obj axis) (* 0.14285715 (-> obj length)))
|
|
(let ((s5-0 (new 'stack-no-clear 'cylinder-flat-verts))
|
|
(s4-0 (new 'stack-no-clear 'cylinder-flat-verts))
|
|
(s3-0 (new 'stack-no-clear 'matrix))
|
|
)
|
|
(matrix-axis-angle! s3-0 (-> obj axis) 4096.0)
|
|
(set! sv-448 (new 'stack-no-clear 'vector))
|
|
(vector-matrix*! sv-448 (-> obj origin) s3-0)
|
|
(let ((v1-5 (-> s3-0 vector 3)))
|
|
(.lvf vf4 (&-> (-> obj origin) quad))
|
|
(.lvf vf5 (&-> sv-448 quad))
|
|
(.mov.vf vf6 vf0 :mask #b1000)
|
|
(.sub.vf vf6 vf4 vf5 :mask #b111)
|
|
(.svf (&-> v1-5 quad) vf6)
|
|
)
|
|
(set! sv-464 0)
|
|
(while (< sv-464 8)
|
|
(vector+! (-> s5-0 vert (+ sv-464 1)) (-> obj origin) s1-0)
|
|
(vector+float*!
|
|
(-> s5-0 vert (+ sv-464 1))
|
|
(-> s5-0 vert (+ sv-464 1))
|
|
s0-0
|
|
(the float sv-464)
|
|
)
|
|
(set! sv-464 (+ sv-464 1))
|
|
)
|
|
(set! (-> s5-0 vert 0 quad) (-> obj origin quad))
|
|
(vector+float*!
|
|
(-> s5-0 vert 9)
|
|
(-> obj origin)
|
|
(-> obj axis)
|
|
(-> obj length)
|
|
)
|
|
(dotimes (s2-1 16)
|
|
(dotimes (s1-1 10)
|
|
(vector-matrix*! (-> s4-0 vert s1-1) (-> s5-0 vert s1-1) s3-0)
|
|
(camera-line (-> s5-0 vert s1-1) (-> s4-0 vert s1-1) arg0)
|
|
(if (nonzero? s1-1)
|
|
(camera-line (-> s5-0 vert s1-1) (-> s5-0 vert (+ s1-1 -1)) arg0)
|
|
)
|
|
)
|
|
(let ((v1-43 s5-0))
|
|
(set! s5-0 s4-0)
|
|
(set! s4-0 v1-43)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
)
|