[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
+44 -61
View File
@@ -159,75 +159,58 @@
:code sleep-code
:post (behavior ()
(local-vars (sv-112 vector) (sv-128 vector) (sv-144 lightning-control))
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(let ((v1-0 (-> self root))
(f30-0 4369.067)
(f28-0 (* (-> self rotate-speed) (seconds-per-frame)))
(gp-0 (new 'stack-no-clear 'vector))
)
(set! (-> gp-0 x) 1.0)
(set! (-> gp-0 y) 1.0)
(set! (-> gp-0 z) 0.4)
(set! (-> gp-0 w) 1.0)
(quaternion-rotate-local-z! (-> v1-0 quat) (-> v1-0 quat) f28-0)
(dotimes (s5-0 3)
(let ((s4-0 (-> self poles s5-0)))
(dotimes (s3-0 6)
(let ((s2-0 (new 'stack-no-clear 'vector))
(s0-0 (-> s4-0 rings s3-0))
(s1-0 (quaternion-rotate-local-z!
(new 'stack-no-clear 'quaternion)
(-> self root quat)
(+ (-> s4-0 z-rotate) (/ f28-0 5))
)
(let ((v1-0 (-> self root))
(f30-0 4369.067)
(f28-0 (* (-> self rotate-speed) (seconds-per-frame)))
(gp-0 (new 'stack-no-clear 'vector))
)
(set! (-> gp-0 x) 1.0)
(set! (-> gp-0 y) 1.0)
(set! (-> gp-0 z) 0.4)
(set! (-> gp-0 w) 1.0)
(quaternion-rotate-local-z! (-> v1-0 quat) (-> v1-0 quat) f28-0)
(dotimes (s5-0 3)
(let ((s4-0 (-> self poles s5-0)))
(dotimes (s3-0 6)
(let ((s2-0 (new 'stack-no-clear 'vector))
(s0-0 (-> s4-0 rings s3-0))
(s1-0 (quaternion-rotate-local-z!
(new 'stack-no-clear 'quaternion)
(-> self root quat)
(+ (-> s4-0 z-rotate) (/ f28-0 5))
)
)
(set-vector! s2-0 0.0 (-> s0-0 dist) 0.0 1.0)
(vector-orient-by-quat! s2-0 s2-0 s1-0)
(vector+! s2-0 s2-0 (-> self root trans))
(set! sv-112 (new 'stack-no-clear 'vector))
(set! sv-128 (new 'stack-no-clear 'vector))
(set! sv-144 (-> s0-0 lightning))
(set-vector! sv-112 (-> s0-0 radius) 0.0 0.0 0.0)
(quaternion-rotate-local-z! s1-0 s1-0 (-> s0-0 local-z-rotate))
(dotimes (s0-1 16)
(vector-orient-by-quat! sv-128 sv-112 s1-0)
(let ((a1-7 sv-128))
(let ((v1-14 sv-128)
(a0-14 gp-0)
)
(.lvf vf4 (&-> v1-14 quad))
(.lvf vf5 (&-> a0-14 quad))
)
(.add.x.vf vf6 vf0 vf0 :mask #b1000)
(.mul.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a1-7 quad) vf6)
)
(set-point! sv-144 s0-1 (vector+! (new 'stack-no-clear 'vector) s2-0 sv-128))
(quaternion-rotate-local-y! s1-0 s1-0 f30-0)
)
)
(set-vector! s2-0 0.0 (-> s0-0 dist) 0.0 1.0)
(vector-orient-by-quat! s2-0 s2-0 s1-0)
(vector+! s2-0 s2-0 (-> self root trans))
(set! sv-112 (new 'stack-no-clear 'vector))
(set! sv-128 (new 'stack-no-clear 'vector))
(set! sv-144 (-> s0-0 lightning))
(set-vector! sv-112 (-> s0-0 radius) 0.0 0.0 0.0)
(quaternion-rotate-local-z! s1-0 s1-0 (-> s0-0 local-z-rotate))
(dotimes (s0-1 16)
(vector-orient-by-quat! sv-128 sv-112 s1-0)
(vector*! sv-128 sv-128 gp-0)
(set-point! sv-144 s0-1 (vector+! (new 'stack-no-clear 'vector) s2-0 sv-128))
(quaternion-rotate-local-y! s1-0 s1-0 f30-0)
)
)
)
)
)
(when (time-elapsed? (-> self state-time) (-> self sound-timer))
(sound-play "cab-fan-blade")
(sound-stop (-> self sound-id))
(sound-play "pal-fan-buzz" :id (-> self sound-id))
(set! (-> self sound-timer)
(the-as time-frame (the int (* 300.0 (/ 21845.334 (fabs (-> self rotate-speed))))))
)
(set-time! (-> self state-time))
)
(update! (-> self sound))
(rider-post)
)
(when (time-elapsed? (-> self state-time) (-> self sound-timer))
(sound-play "cab-fan-blade")
(sound-stop (-> self sound-id))
(sound-play "pal-fan-buzz" :id (-> self sound-id))
(set! (-> self sound-timer)
(the-as time-frame (the int (* 300.0 (/ 21845.334 (fabs (-> self rotate-speed))))))
)
(set-time! (-> self state-time))
)
(update! (-> self sound))
(rider-post)
)
)