mirror of
https://github.com/open-goal/jak-project
synced 2026-08-07 02:06:59 -04:00
[decompiler] Detect vector*! (#3846)
Detect use of `vector*!`, which is inlined in jak 2 and jak 3. --------- Co-authored-by: water111 <awaterford1111445@gmail.com>
This commit is contained in:
+96
-149
@@ -556,175 +556,122 @@
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
(defun ragdoll-joint-callback ((arg0 cspace) (arg1 transformq) (arg2 process-drawable) (arg3 ragdoll-proc))
|
||||
(local-vars (a2-10 matrix) (sv-240 int) (sv-256 quaternion) (sv-272 vector) (sv-288 matrix))
|
||||
(rlet ((vf0 :class vf)
|
||||
(vf4 :class vf)
|
||||
(vf5 :class vf)
|
||||
(vf6 :class vf)
|
||||
)
|
||||
(init-vf0-vector)
|
||||
(when *debug-segment*
|
||||
(let ((s2-0 (-> *display* frames (-> *display* on-screen) profile-array data 0))
|
||||
(v1-7 'ragdoll-callback)
|
||||
(s1-0 *color-white*)
|
||||
)
|
||||
(when (and *dproc* *debug-segment*)
|
||||
(let ((s0-0 (-> s2-0 data (-> s2-0 count))))
|
||||
(set! sv-240 (-> s2-0 base-time))
|
||||
(set! (-> s0-0 name) v1-7)
|
||||
(set! (-> s0-0 start-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint sv-240))))
|
||||
(set! (-> s0-0 depth) (the-as uint (-> s2-0 depth)))
|
||||
(set! (-> s0-0 color) s1-0)
|
||||
(set! (-> s2-0 segment (-> s2-0 depth)) s0-0)
|
||||
)
|
||||
(set! (-> s2-0 count) (min 1023 (+ (-> s2-0 count) 1)))
|
||||
(+! (-> s2-0 depth) 1)
|
||||
(set! (-> s2-0 max-depth) (max (-> s2-0 max-depth) (-> s2-0 depth)))
|
||||
(when *debug-segment*
|
||||
(let ((s2-0 (-> *display* frames (-> *display* on-screen) profile-array data 0))
|
||||
(v1-7 'ragdoll-callback)
|
||||
(s1-0 *color-white*)
|
||||
)
|
||||
(when (and *dproc* *debug-segment*)
|
||||
(let ((s0-0 (-> s2-0 data (-> s2-0 count))))
|
||||
(set! sv-240 (-> s2-0 base-time))
|
||||
(set! (-> s0-0 name) v1-7)
|
||||
(set! (-> s0-0 start-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint sv-240))))
|
||||
(set! (-> s0-0 depth) (the-as uint (-> s2-0 depth)))
|
||||
(set! (-> s0-0 color) s1-0)
|
||||
(set! (-> s2-0 segment (-> s2-0 depth)) s0-0)
|
||||
)
|
||||
(set! (-> s2-0 count) (min 1023 (+ (-> s2-0 count) 1)))
|
||||
(+! (-> s2-0 depth) 1)
|
||||
(set! (-> s2-0 max-depth) (max (-> s2-0 max-depth) (-> s2-0 depth)))
|
||||
)
|
||||
0
|
||||
)
|
||||
(when arg3
|
||||
(let ((s3-1 (-> arg3 ragdoll)))
|
||||
(when (and s3-1
|
||||
(and (< 0.0 (-> s3-1 flex-blend)) (!= (-> s3-1 ragdoll-joint-remap (+ (-> arg0 joint number) 1)) 255))
|
||||
)
|
||||
(let ((s1-1 (-> s3-1 ragdoll-joints (-> s3-1 ragdoll-joint-remap (+ (-> arg0 joint number) 1)))))
|
||||
(when s1-1
|
||||
(if (and (-> s1-1 old-param0) (!= (-> s1-1 old-param0) ragdoll-other-joint-callback))
|
||||
((the-as (function cspace transformq none) (-> s1-1 old-param0)) arg0 arg1)
|
||||
(cspace<-parented-transformq-joint! arg0 arg1)
|
||||
)
|
||||
(let ((s2-1 (new 'stack-no-clear 'matrix)))
|
||||
(set! sv-256
|
||||
(quaternion-vector-angle! (new 'stack-no-clear 'quaternion) (-> s1-1 geo-tform) (-> s1-1 geo-tform w))
|
||||
)
|
||||
(quaternion-normalize! (quaternion*! sv-256 (-> s1-1 quat) sv-256))
|
||||
(quaternion->matrix s2-1 sv-256)
|
||||
(when (logtest? (-> s3-1 ragdoll-flags) (ragdoll-flag rf10))
|
||||
(let ((v1-40 (&+ s1-1 188)))
|
||||
(when (and (!= v1-40 (-> s3-1 ragdoll-joints (-> s3-1 num-joints))) (= (-> v1-40 parent-joint) -1))
|
||||
(let ((s0-3 (vector-! (new 'stack-no-clear 'vector) (-> v1-40 position) (-> s1-1 position))))
|
||||
(set! sv-272 (new 'stack-no-clear 'vector))
|
||||
(set! sv-288 (new 'stack-no-clear 'matrix))
|
||||
(vector-flatten! sv-272 s0-3 (-> s2-1 rvec))
|
||||
(vector-normalize! sv-272 1.0)
|
||||
(matrix-from-two-vectors! sv-288 (-> s2-1 uvec) sv-272)
|
||||
(matrix*! s2-1 s2-1 sv-288)
|
||||
(vector-flatten! sv-272 s0-3 (-> s2-1 fvec))
|
||||
)
|
||||
0
|
||||
)
|
||||
(when arg3
|
||||
(let ((s3-1 (-> arg3 ragdoll)))
|
||||
(when (and s3-1
|
||||
(and (< 0.0 (-> s3-1 flex-blend)) (!= (-> s3-1 ragdoll-joint-remap (+ (-> arg0 joint number) 1)) 255))
|
||||
)
|
||||
(let ((s1-1 (-> s3-1 ragdoll-joints (-> s3-1 ragdoll-joint-remap (+ (-> arg0 joint number) 1)))))
|
||||
(when s1-1
|
||||
(if (and (-> s1-1 old-param0) (!= (-> s1-1 old-param0) ragdoll-other-joint-callback))
|
||||
((the-as (function cspace transformq none) (-> s1-1 old-param0)) arg0 arg1)
|
||||
(cspace<-parented-transformq-joint! arg0 arg1)
|
||||
)
|
||||
(let ((s2-1 (new 'stack-no-clear 'matrix)))
|
||||
(set! sv-256
|
||||
(quaternion-vector-angle! (new 'stack-no-clear 'quaternion) (-> s1-1 geo-tform) (-> s1-1 geo-tform w))
|
||||
)
|
||||
(quaternion-normalize! (quaternion*! sv-256 (-> s1-1 quat) sv-256))
|
||||
(quaternion->matrix s2-1 sv-256)
|
||||
(when (logtest? (-> s3-1 ragdoll-flags) (ragdoll-flag rf10))
|
||||
(let ((v1-40 (&+ s1-1 188)))
|
||||
(when (and (!= v1-40 (-> s3-1 ragdoll-joints (-> s3-1 num-joints))) (= (-> v1-40 parent-joint) -1))
|
||||
(let ((s0-3 (vector-! (new 'stack-no-clear 'vector) (-> v1-40 position) (-> s1-1 position))))
|
||||
(set! sv-272 (new 'stack-no-clear 'vector))
|
||||
(set! sv-288 (new 'stack-no-clear 'matrix))
|
||||
(vector-flatten! sv-272 s0-3 (-> s2-1 rvec))
|
||||
(vector-normalize! sv-272 1.0)
|
||||
(matrix-from-two-vectors! sv-288 (-> s2-1 uvec) sv-272)
|
||||
(matrix*! s2-1 s2-1 sv-288)
|
||||
(vector-flatten! sv-272 s0-3 (-> s2-1 fvec))
|
||||
)
|
||||
(vector-normalize! sv-272 1.0)
|
||||
(matrix-from-two-vectors! sv-288 (-> s2-1 uvec) sv-272)
|
||||
(matrix*! s2-1 s2-1 sv-288)
|
||||
)
|
||||
)
|
||||
(vector-copy! (-> s2-1 trans) (-> s1-1 position))
|
||||
(set! (-> s2-1 trans w) 1.0)
|
||||
(if (logtest? (-> s3-1 ragdoll-flags) (ragdoll-flag mirror))
|
||||
(matrix*! s2-1 s2-1 (-> s3-1 mirror))
|
||||
)
|
||||
(set! a2-10
|
||||
(cond
|
||||
((>= (-> s3-1 flex-blend) 1.0)
|
||||
(matrix-copy! (-> arg0 bone transform) s2-1)
|
||||
)
|
||||
(else
|
||||
(let ((s1-3 (vector-lerp!
|
||||
(new 'stack-no-clear 'vector)
|
||||
(matrix->trans (-> arg0 bone transform) (new 'stack-no-clear 'vector))
|
||||
(-> s2-1 trans)
|
||||
(-> s3-1 flex-blend)
|
||||
)
|
||||
)
|
||||
(vector-copy! (-> s2-1 trans) (-> s1-1 position))
|
||||
(set! (-> s2-1 trans w) 1.0)
|
||||
(if (logtest? (-> s3-1 ragdoll-flags) (ragdoll-flag mirror))
|
||||
(matrix*! s2-1 s2-1 (-> s3-1 mirror))
|
||||
)
|
||||
(set! a2-10
|
||||
(cond
|
||||
((>= (-> s3-1 flex-blend) 1.0)
|
||||
(matrix-copy! (-> arg0 bone transform) s2-1)
|
||||
)
|
||||
(else
|
||||
(let ((s1-3 (vector-lerp!
|
||||
(new 'stack-no-clear 'vector)
|
||||
(matrix->trans (-> arg0 bone transform) (new 'stack-no-clear 'vector))
|
||||
(-> s2-1 trans)
|
||||
(-> s3-1 flex-blend)
|
||||
)
|
||||
)
|
||||
(ragdoll-matrix-interp (-> arg0 bone transform) (-> arg0 bone transform) s2-1 (-> s3-1 flex-blend))
|
||||
(vector-copy! (-> arg0 bone transform trans) s1-3)
|
||||
)
|
||||
(set! (-> arg0 bone transform trans w) 1.0)
|
||||
a2-10
|
||||
)
|
||||
)
|
||||
(ragdoll-matrix-interp (-> arg0 bone transform) (-> arg0 bone transform) s2-1 (-> s3-1 flex-blend))
|
||||
(vector-copy! (-> arg0 bone transform trans) s1-3)
|
||||
)
|
||||
(set! (-> arg0 bone transform trans w) 1.0)
|
||||
a2-10
|
||||
)
|
||||
)
|
||||
)
|
||||
(let ((v1-60 (new 'stack-no-clear 'vector)))
|
||||
(let ((a0-50 v1-60))
|
||||
(let ((a1-24 (-> s3-1 scale))
|
||||
(a2-14 (-> arg2 root scale))
|
||||
)
|
||||
(.lvf vf4 (&-> a1-24 quad))
|
||||
(.lvf vf5 (&-> a2-14 quad))
|
||||
)
|
||||
(.add.x.vf vf6 vf0 vf0 :mask #b1000)
|
||||
(.mul.vf vf6 vf4 vf5 :mask #b111)
|
||||
(.svf (&-> a0-50 quad) vf6)
|
||||
)
|
||||
(let ((a1-25 v1-60))
|
||||
(let ((a0-51 v1-60)
|
||||
(a2-15 (-> arg1 scale))
|
||||
)
|
||||
(.lvf vf4 (&-> a0-51 quad))
|
||||
(.lvf vf5 (&-> a2-15 quad))
|
||||
)
|
||||
(.add.x.vf vf6 vf0 vf0 :mask #b1000)
|
||||
(.mul.vf vf6 vf4 vf5 :mask #b111)
|
||||
(.svf (&-> a1-25 quad) vf6)
|
||||
)
|
||||
(let ((a0-53 (-> arg0 bone transform)))
|
||||
(let ((a1-27 (-> arg0 bone transform))
|
||||
(a2-16 v1-60)
|
||||
)
|
||||
(.lvf vf4 (&-> a1-27 rvec quad))
|
||||
(.lvf vf5 (&-> a2-16 quad))
|
||||
)
|
||||
(.add.x.vf vf6 vf0 vf0 :mask #b1000)
|
||||
(.mul.vf vf6 vf4 vf5 :mask #b111)
|
||||
(.svf (&-> a0-53 rvec quad) vf6)
|
||||
)
|
||||
(let ((a0-55 (-> arg0 bone transform uvec)))
|
||||
(let ((a1-29 (-> arg0 bone transform uvec))
|
||||
(a2-17 v1-60)
|
||||
)
|
||||
(.lvf vf4 (&-> a1-29 quad))
|
||||
(.lvf vf5 (&-> a2-17 quad))
|
||||
)
|
||||
(.add.x.vf vf6 vf0 vf0 :mask #b1000)
|
||||
(.mul.vf vf6 vf4 vf5 :mask #b111)
|
||||
(.svf (&-> a0-55 quad) vf6)
|
||||
)
|
||||
(let ((a0-57 (-> arg0 bone transform fvec)))
|
||||
(.lvf vf4 (&-> (-> arg0 bone transform fvec) quad))
|
||||
(.lvf vf5 (&-> v1-60 quad))
|
||||
(.add.x.vf vf6 vf0 vf0 :mask #b1000)
|
||||
(.mul.vf vf6 vf4 vf5 :mask #b111)
|
||||
(.svf (&-> a0-57 quad) vf6)
|
||||
)
|
||||
)
|
||||
(set! (-> arg0 bone transform rvec w) 0.0)
|
||||
(set! (-> arg0 bone transform uvec w) 0.0)
|
||||
(set! (-> arg0 bone transform fvec w) 0.0)
|
||||
)
|
||||
(let ((v1-60 (new 'stack-no-clear 'vector)))
|
||||
(vector*! v1-60 (-> s3-1 scale) (-> arg2 root scale))
|
||||
(vector*! v1-60 v1-60 (-> arg1 scale))
|
||||
(vector*! (the-as vector (-> arg0 bone transform)) (the-as vector (-> arg0 bone transform)) v1-60)
|
||||
(vector*! (-> arg0 bone transform uvec) (-> arg0 bone transform uvec) v1-60)
|
||||
(vector*! (-> arg0 bone transform fvec) (-> arg0 bone transform fvec) v1-60)
|
||||
)
|
||||
(set! (-> arg0 bone transform rvec w) 0.0)
|
||||
(set! (-> arg0 bone transform uvec w) 0.0)
|
||||
(set! (-> arg0 bone transform fvec w) 0.0)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(when *debug-segment*
|
||||
(let ((gp-1 (-> *display* frames (-> *display* on-screen) profile-array data 0)))
|
||||
(when (and *dproc* *debug-segment*)
|
||||
(let* ((v1-75 (+ (-> gp-1 depth) -1))
|
||||
(s5-1 (-> gp-1 segment v1-75))
|
||||
(s4-1 (-> gp-1 base-time))
|
||||
)
|
||||
(when (>= v1-75 0)
|
||||
(set! (-> s5-1 end-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s4-1))))
|
||||
(+! (-> gp-1 depth) -1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
0
|
||||
)
|
||||
(none)
|
||||
)
|
||||
(when *debug-segment*
|
||||
(let ((gp-1 (-> *display* frames (-> *display* on-screen) profile-array data 0)))
|
||||
(when (and *dproc* *debug-segment*)
|
||||
(let* ((v1-75 (+ (-> gp-1 depth) -1))
|
||||
(s5-1 (-> gp-1 segment v1-75))
|
||||
(s4-1 (-> gp-1 base-time))
|
||||
)
|
||||
(when (>= v1-75 0)
|
||||
(set! (-> s5-1 end-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s4-1))))
|
||||
(+! (-> gp-1 depth) -1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
0
|
||||
)
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition for function ragdoll-other-joint-callback
|
||||
|
||||
Reference in New Issue
Block a user