mirror of
https://github.com/open-goal/jak-project
synced 2026-08-21 06:38:33 -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:
+92
-109
@@ -7,122 +7,105 @@
|
||||
;; ERROR: Unsupported inline assembly instruction kind - [jr ra]
|
||||
(defmethod compute-alignment! ((this align-control))
|
||||
(local-vars (a0-10 symbol) (s7-0 none) (ra-0 int))
|
||||
(rlet ((vf0 :class vf)
|
||||
(vf4 :class vf)
|
||||
(vf5 :class vf)
|
||||
(vf6 :class vf)
|
||||
)
|
||||
(init-vf0-vector)
|
||||
(update-anim-data (-> this process skel))
|
||||
(let ((s5-0 (-> this process skel active-channels)))
|
||||
(dotimes (s4-0 (the-as int s5-0))
|
||||
(let* ((a0-4 (-> this process skel channel s4-0))
|
||||
(v1-7 (-> a0-4 frame-group))
|
||||
)
|
||||
(case (-> a0-4 command)
|
||||
(((joint-control-command stack) (joint-control-command stack1))
|
||||
(update-anim-data (-> this process skel))
|
||||
(let ((s5-0 (-> this process skel active-channels)))
|
||||
(dotimes (s4-0 (the-as int s5-0))
|
||||
(let* ((a0-4 (-> this process skel channel s4-0))
|
||||
(v1-7 (-> a0-4 frame-group))
|
||||
)
|
||||
(else
|
||||
(when (!= (-> v1-7 type) art-joint-anim)
|
||||
(go process-drawable-art-error "align joint-anim")
|
||||
(.lw ra-0 return-from-thread s7-0)
|
||||
(.jr ra-0)
|
||||
(nop!)
|
||||
0
|
||||
)
|
||||
(case (-> a0-4 command)
|
||||
(((joint-control-command stack) (joint-control-command stack1))
|
||||
)
|
||||
(else
|
||||
(when (!= (-> v1-7 type) art-joint-anim)
|
||||
(go process-drawable-art-error "align joint-anim")
|
||||
(.lw ra-0 return-from-thread s7-0)
|
||||
(.jr ra-0)
|
||||
(nop!)
|
||||
0
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(let* ((a0-9 (-> this process skel root-channel 0))
|
||||
(v1-18 (-> a0-9 frame-group))
|
||||
(f0-0 (-> a0-9 frame-num))
|
||||
)
|
||||
(= (-> a0-9 num-func) num-func-loop!)
|
||||
(cond
|
||||
((or (not v1-18) (!= (-> this frame-group) v1-18))
|
||||
(set! a0-10 #t)
|
||||
)
|
||||
((= (-> a0-9 num-func) num-func-loop!)
|
||||
(set! a0-10 (< (* (-> a0-9 param 0) (- f0-0 (-> this frame-num))) 0.0))
|
||||
)
|
||||
(else
|
||||
(set! a0-10 (= f0-0 0.0))
|
||||
)
|
||||
)
|
||||
(if a0-10
|
||||
(logior! (-> this flags) (align-flags disabled))
|
||||
(logclear! (-> this flags) (align-flags disabled))
|
||||
)
|
||||
(set! (-> this frame-group) v1-18)
|
||||
(set! (-> this frame-num) f0-0)
|
||||
)
|
||||
(mem-copy! (the-as pointer (-> this transform 1)) (the-as pointer (-> this transform)) 48)
|
||||
(quaternion-copy! (the-as quaternion (-> this transform 1 rot)) (-> this align quat))
|
||||
(set! (-> this transform 1 scale quad) (-> this align scale quad))
|
||||
(let* ((a2-5 (-> this matrix 1))
|
||||
(a3-0 (-> this matrix))
|
||||
(v1-21 (-> a3-0 0 quad 0))
|
||||
(a0-19 (-> a3-0 0 quad 1))
|
||||
(a1-13 (-> a3-0 0 quad 2))
|
||||
(a3-1 (-> a3-0 0 trans quad))
|
||||
)
|
||||
(set! (-> a2-5 quad 0) v1-21)
|
||||
(set! (-> a2-5 quad 1) a0-19)
|
||||
(set! (-> a2-5 quad 2) a1-13)
|
||||
(set! (-> a2-5 trans quad) a3-1)
|
||||
)
|
||||
(let ((s5-1 (-> this process node-list data 1)))
|
||||
(cspace<-matrix-no-push-joint! s5-1 (-> this process skel))
|
||||
(let* ((v1-25 (-> this matrix))
|
||||
(a3-2 (-> s5-1 bone transform))
|
||||
(a0-22 (-> a3-2 quad 0))
|
||||
(a1-15 (-> a3-2 quad 1))
|
||||
(a2-6 (-> a3-2 quad 2))
|
||||
(a3-3 (-> a3-2 trans quad))
|
||||
)
|
||||
(set! (-> v1-25 0 quad 0) a0-22)
|
||||
(set! (-> v1-25 0 quad 1) a1-15)
|
||||
(set! (-> v1-25 0 quad 2) a2-6)
|
||||
(set! (-> v1-25 0 trans quad) a3-3)
|
||||
)
|
||||
(let ((v1-26 (-> this transform)))
|
||||
(let ((a0-24 (-> s5-1 bone transform trans))
|
||||
(a1-18 (-> this process root scale))
|
||||
)
|
||||
(.lvf vf4 (&-> a0-24 quad))
|
||||
(.lvf vf5 (&-> a1-18 quad))
|
||||
)
|
||||
(.add.x.vf vf6 vf0 vf0 :mask #b1000)
|
||||
(.mul.vf vf6 vf4 vf5 :mask #b111)
|
||||
(.svf (&-> v1-26 0 trans quad) vf6)
|
||||
)
|
||||
)
|
||||
(vector-!
|
||||
(the-as vector (-> this delta))
|
||||
(the-as vector (-> this transform))
|
||||
(the-as vector (-> this transform 1))
|
||||
)
|
||||
(set-vector!
|
||||
(-> this align scale)
|
||||
(vector-length (the-as vector (-> this matrix)))
|
||||
(vector-length (-> this matrix 0 vector 1))
|
||||
(vector-length (-> this matrix 0 vector 2))
|
||||
1.0
|
||||
)
|
||||
(vector-! (-> this delta scale) (-> this align scale) (-> this transform 1 scale))
|
||||
(let ((a2-7 (matrix-inv-scale! (new 'stack-no-clear 'matrix) (-> this align scale))))
|
||||
(quaternion-normalize!
|
||||
(matrix->quaternion (-> this align quat) (matrix*! a2-7 (the-as matrix (-> this matrix)) a2-7))
|
||||
)
|
||||
)
|
||||
(let ((a1-27 (quaternion-inverse! (new 'stack-no-clear 'quaternion) (the-as quaternion (-> this transform 1 rot))))
|
||||
)
|
||||
(quaternion-normalize! (quaternion*! (-> this delta quat) a1-27 (-> this align quat)))
|
||||
)
|
||||
(-> this delta)
|
||||
)
|
||||
(let* ((a0-9 (-> this process skel root-channel 0))
|
||||
(v1-18 (-> a0-9 frame-group))
|
||||
(f0-0 (-> a0-9 frame-num))
|
||||
)
|
||||
(= (-> a0-9 num-func) num-func-loop!)
|
||||
(cond
|
||||
((or (not v1-18) (!= (-> this frame-group) v1-18))
|
||||
(set! a0-10 #t)
|
||||
)
|
||||
((= (-> a0-9 num-func) num-func-loop!)
|
||||
(set! a0-10 (< (* (-> a0-9 param 0) (- f0-0 (-> this frame-num))) 0.0))
|
||||
)
|
||||
(else
|
||||
(set! a0-10 (= f0-0 0.0))
|
||||
)
|
||||
)
|
||||
(if a0-10
|
||||
(logior! (-> this flags) (align-flags disabled))
|
||||
(logclear! (-> this flags) (align-flags disabled))
|
||||
)
|
||||
(set! (-> this frame-group) v1-18)
|
||||
(set! (-> this frame-num) f0-0)
|
||||
)
|
||||
(mem-copy! (the-as pointer (-> this transform 1)) (the-as pointer (-> this transform)) 48)
|
||||
(quaternion-copy! (the-as quaternion (-> this transform 1 rot)) (-> this align quat))
|
||||
(set! (-> this transform 1 scale quad) (-> this align scale quad))
|
||||
(let* ((a2-5 (-> this matrix 1))
|
||||
(a3-0 (-> this matrix))
|
||||
(v1-21 (-> a3-0 0 quad 0))
|
||||
(a0-19 (-> a3-0 0 quad 1))
|
||||
(a1-13 (-> a3-0 0 quad 2))
|
||||
(a3-1 (-> a3-0 0 trans quad))
|
||||
)
|
||||
(set! (-> a2-5 quad 0) v1-21)
|
||||
(set! (-> a2-5 quad 1) a0-19)
|
||||
(set! (-> a2-5 quad 2) a1-13)
|
||||
(set! (-> a2-5 trans quad) a3-1)
|
||||
)
|
||||
(let ((s5-1 (-> this process node-list data 1)))
|
||||
(cspace<-matrix-no-push-joint! s5-1 (-> this process skel))
|
||||
(let* ((v1-25 (-> this matrix))
|
||||
(a3-2 (-> s5-1 bone transform))
|
||||
(a0-22 (-> a3-2 quad 0))
|
||||
(a1-15 (-> a3-2 quad 1))
|
||||
(a2-6 (-> a3-2 quad 2))
|
||||
(a3-3 (-> a3-2 trans quad))
|
||||
)
|
||||
(set! (-> v1-25 0 quad 0) a0-22)
|
||||
(set! (-> v1-25 0 quad 1) a1-15)
|
||||
(set! (-> v1-25 0 quad 2) a2-6)
|
||||
(set! (-> v1-25 0 trans quad) a3-3)
|
||||
)
|
||||
(vector*! (the-as vector (-> this transform)) (-> s5-1 bone transform trans) (-> this process root scale))
|
||||
)
|
||||
(vector-!
|
||||
(the-as vector (-> this delta))
|
||||
(the-as vector (-> this transform))
|
||||
(the-as vector (-> this transform 1))
|
||||
)
|
||||
(set-vector!
|
||||
(-> this align scale)
|
||||
(vector-length (the-as vector (-> this matrix)))
|
||||
(vector-length (-> this matrix 0 vector 1))
|
||||
(vector-length (-> this matrix 0 vector 2))
|
||||
1.0
|
||||
)
|
||||
(vector-! (-> this delta scale) (-> this align scale) (-> this transform 1 scale))
|
||||
(let ((a2-7 (matrix-inv-scale! (new 'stack-no-clear 'matrix) (-> this align scale))))
|
||||
(quaternion-normalize!
|
||||
(matrix->quaternion (-> this align quat) (matrix*! a2-7 (the-as matrix (-> this matrix)) a2-7))
|
||||
)
|
||||
)
|
||||
(let ((a1-27 (quaternion-inverse! (new 'stack-no-clear 'quaternion) (the-as quaternion (-> this transform 1 rot))))
|
||||
)
|
||||
(quaternion-normalize! (quaternion*! (-> this delta quat) a1-27 (-> this align quat)))
|
||||
)
|
||||
(-> this delta)
|
||||
)
|
||||
|
||||
;; definition for method 12 of type align-control
|
||||
|
||||
Reference in New Issue
Block a user