[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:
water111
2025-01-20 12:21:28 -05:00
committed by GitHub
parent 3ee2b4423c
commit 98d6618a8b
37 changed files with 2449 additions and 3185 deletions
+122 -193
View File
@@ -538,183 +538,123 @@
)
(defun ragdoll-joint-callback ((arg0 cspace) (arg1 transformq) (arg2 process-drawable) (arg3 ragdoll-proc))
(local-vars (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)))
(local-vars (a2-10 matrix) (sv-240 int) (sv-256 quaternion) (sv-272 vector) (sv-288 matrix))
(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)
)
)
(set! (-> s2-1 trans quad) (-> s1-1 position quad))
(set! (-> s2-1 trans w) 1.0)
(if (logtest? (-> s3-1 ragdoll-flags) (ragdoll-flag mirror))
(matrix*! s2-1 s2-1 (-> s3-1 mirror))
)
(cond
((>= (-> s3-1 flex-blend) 1.0)
(let ((a2-10 (-> arg0 bone transform))
(v1-51 (-> s2-1 rvec quad))
(a0-45 (-> s2-1 uvec quad))
(a1-20 (-> s2-1 fvec quad))
(a3-1 (-> s2-1 trans quad))
)
(set! (-> a2-10 rvec quad) v1-51)
(set! (-> a2-10 uvec quad) a0-45)
(set! (-> a2-10 fvec quad) a1-20)
(set! (-> a2-10 trans quad) a3-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)
)
(ragdoll-matrix-interp (-> arg0 bone transform) (-> arg0 bone transform) s2-1 (-> s3-1 flex-blend))
(set! (-> arg0 bone transform trans quad) (-> s1-3 quad))
(set! (-> arg0 bone transform trans w) 1.0)
a2-10
)
)
(set! (-> arg0 bone transform trans w) 1.0)
)
)
)
(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.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.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.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.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.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.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.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.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.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.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)
)
(defbehavior ragdoll-other-joint-callback ragdoll-proc ((arg0 cspace) (arg1 transformq))
@@ -863,7 +803,7 @@
)
(vector-! (-> s1-0 velocity) sv-144 (-> s1-0 position))
(vector-float*! (-> s1-0 velocity) (-> s1-0 velocity) (/ 1.0 (-> pp clock time-adjust-ratio)))
(set! (-> s1-0 position quad) (-> sv-144 quad))
(vector-copy! (-> s1-0 position) sv-144)
)
(else
(vector<-cspace! (-> s1-0 position) (-> arg0 node-list data (-> s1-0 joint-index)))
@@ -891,7 +831,7 @@
(vector<-cspace! s0-0 (-> arg0 node-list data (-> this ragdoll-joints (+ s2-1 -1) joint-index)))
)
(else
(set! (-> s0-0 quad) (-> arg0 root trans quad))
(vector-copy! s0-0 (-> arg0 root trans))
)
)
(if (logtest? (-> this ragdoll-flags) (ragdoll-flag mirror))
@@ -990,7 +930,7 @@
(let ((s4-1 (new 'stack-no-clear 'matrix)))
(matrix-axis-angle! s4-1 (-> this orient-tform) (- (-> this orient-tform w)))
(matrix*! s4-1 s4-1 arg2)
(set! (-> s4-1 trans quad) (-> arg2 trans quad))
(vector-copy! (-> s4-1 trans) (-> arg2 trans))
(add-debug-matrix #t (bucket-id debug-no-zbuf1) s4-1 (meters 2))
)
)
@@ -1009,7 +949,7 @@
(quaternion->matrix arg3 (-> s2-0 quat))
(matrix-axis-angle! s3-0 (-> arg1 pre-tform) (- (-> arg1 pre-tform w)))
(matrix*! arg3 s3-0 arg3)
(set! (-> arg3 trans quad) (-> s2-0 position quad))
(vector-copy! (-> arg3 trans) (-> s2-0 position))
)
(else
(matrix-axis-angle! s3-0 (-> arg1 pre-tform) (- (-> arg1 pre-tform w)))
@@ -1023,15 +963,15 @@
(let ((s3-1 (new 'stack-no-clear 'matrix))
(s5-1 (new 'stack-no-clear 'vector))
)
(set! (-> s5-1 quad) (-> arg3 trans quad))
(vector-copy! s5-1 (-> arg3 trans))
(matrix-axis-angle! s3-1 (-> arg1 pre-tform) (- (-> arg1 pre-tform w)))
(matrix*! arg3 s3-1 arg3)
(set! (-> arg3 trans quad) (-> s5-1 quad))
(vector-copy! (-> arg3 trans) s5-1)
)
)
(else
(quaternion->matrix arg3 (-> arg0 root quat))
(set! (-> arg3 trans quad) (-> arg0 root trans quad))
(vector-copy! (-> arg3 trans) (-> arg0 root trans))
)
)
0
@@ -1344,7 +1284,7 @@
(.svf (&-> v1-176 quad) vf1)
)
)
(set! (-> s0-1 position quad) (-> sv-560 quad))
(vector-copy! (-> s0-1 position) sv-560)
(cond
((or (> s1-1 0) (!= (-> s0-1 parent-joint) -1))
(vector-! (-> s3-1 uvec) sv-560 (-> s2-1 trans))
@@ -1392,11 +1332,11 @@
(.mul.x.vf acc vf2 vf3)
(.add.mul.w.vf.xyz vf4 vf1 vf0 acc)
(.svf (&-> sv-544 quad) vf4)
(set! (-> s0-1 old-x quad) (-> s3-1 rvec quad))
(vector-copy! (-> s0-1 old-x) (-> s3-1 rvec))
)
(else
(set! (-> s3-1 rvec quad) (-> sv-528 quad))
(set! (-> s0-1 old-x quad) (-> s3-1 rvec quad))
(vector-copy! (-> s3-1 rvec) sv-528)
(vector-copy! (-> s0-1 old-x) (-> s3-1 rvec))
)
)
(vector-cross! (-> s3-1 fvec) (-> s3-1 rvec) (-> s3-1 uvec))
@@ -1411,27 +1351,16 @@
(quaternion->matrix s3-1 (-> s0-1 quat))
)
)
(set! (-> s3-1 trans quad) (-> sv-560 quad))
(vector-copy! (-> s3-1 trans) sv-560)
(set! (-> s3-1 rvec w) 0.0)
(set! (-> s3-1 uvec w) 0.0)
(set! (-> s3-1 fvec w) 0.0)
(if (and (zero? s1-1) (< (-> s0-1 parent-joint) 0) (logtest? (-> this ragdoll-flags) (ragdoll-flag rf7)))
(set! (-> arg0 root trans quad) (-> s3-1 trans quad))
(vector-copy! (-> arg0 root trans) (-> s3-1 trans))
)
(ragdoll-method-13 this arg1 s0-1 s3-1 s2-1)
)
(let* ((a2-19 s2-1)
(a3-10 s3-1)
(v1-216 (-> a3-10 rvec quad))
(a0-119 (-> a3-10 uvec quad))
(a1-47 (-> a3-10 fvec quad))
(a3-11 (-> a3-10 trans quad))
)
(set! (-> a2-19 rvec quad) v1-216)
(set! (-> a2-19 uvec quad) a0-119)
(set! (-> a2-19 fvec quad) a1-47)
(set! (-> a2-19 trans quad) a3-11)
)
(matrix-copy! s2-1 s3-1)
)
)
(if (and (< (min (the-as int (-> this num-joints)) (max 2 (the int (* 0.9 (the float (-> this num-joints))))))
@@ -1479,8 +1408,8 @@
(set! (-> s2-0 joint-type) (-> v1-15 joint-type))
(set! (-> s2-0 joint-index) (-> v1-15 joint-index))
(set! (-> s2-0 parent-joint) (-> v1-15 parent-joint))
(set! (-> s2-0 pre-tform quad) (-> v1-15 pre-tform quad))
(set! (-> s2-0 geo-tform quad) (-> v1-15 geo-tform quad))
(vector-copy! (-> s2-0 pre-tform) (-> v1-15 pre-tform))
(vector-copy! (-> s2-0 geo-tform) (-> v1-15 geo-tform))
(set! (-> s2-0 axial-slop) (-> v1-15 axial-slop))
(set! (-> s2-0 max-angle) (-> v1-15 max-angle))
(set! (-> s2-0 coll-rad) (-> v1-15 coll-rad))
@@ -1509,11 +1438,11 @@
)
0
)
(set! (-> this orient-tform quad) (-> setup orient-tform quad))
(set! (-> this scale quad) (-> setup scale quad))
(vector-copy! (-> this orient-tform) (-> setup orient-tform))
(vector-copy! (-> this scale) (-> setup scale))
(set! (-> this bg-collide-with) (the-as uint (-> setup bg-collide-with)))
(set-vector! (-> this gravity) 0.0 -1.0 0.0 1.0)
(set! (-> this gravity-target quad) (-> this gravity quad))
(vector-copy! (-> this gravity-target) (-> this gravity))
(set! (-> this stretch-vel) 0.7)
(set! (-> this stretch-vel-parallel) 0.8)
(set! (-> this compress-vel) 0.85)
@@ -1584,7 +1513,7 @@
)
)
((= proc *target*)
(set! (-> s4-0 quad) (-> (the-as process-drawable proc) root trans quad))
(vector-copy! s4-0 (-> (the-as process-drawable proc) root trans))
(vector-! s5-0 (-> s2-0 root trans) (-> (the-as process-drawable proc) root trans))
(set! s3-0 #t)
)
@@ -1600,12 +1529,12 @@
(the-as touching-shapes-entry a3-1)
)
)
(set! (-> s4-0 quad) (-> s5-0 quad))
(vector-copy! s4-0 s5-0)
(vector-! s5-0 (-> s2-0 root trans) s5-0)
(set! s3-0 #t)
)
(when (logtest? (attack-mask attacker-velocity) (-> (the-as attack-info gp-0) mask))
(set! (-> s5-0 quad) (-> (the-as attack-info gp-0) attacker-velocity quad))
(vector-copy! s5-0 (-> (the-as attack-info gp-0) attacker-velocity))
(when (not s3-0)
(vector-! s4-0 (-> self ragdoll ragdoll-joints 0 position) s5-0)
(set! s3-0 #t)
@@ -1620,7 +1549,7 @@
(set! (-> s5-0 y) 0.0)
(vector-normalize! s5-0 409.6)
(+! (-> s5-0 y) 1024.0)
(set! (-> self ragdoll ragdoll-joints 0 velocity quad) (-> s5-0 quad))
(vector-copy! (-> self ragdoll ragdoll-joints 0 velocity) s5-0)
(if (logtest? (-> (the-as attack-info gp-0) mask) (attack-mask id))
(set! (-> self last-attack-id) (-> (the-as attack-info gp-0) id))
)