[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
+95 -112
View File
@@ -10,125 +10,108 @@
;; ERROR: Unsupported inline assembly instruction kind - [lw ra, return-from-thread(s7)]
;; 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))
(local-vars (disable? symbol) (s7-0 none) (ra-0 int))
(update-anim-data (-> this process skel))
(let ((num-chans (-> this process skel active-channels)))
(dotimes (chan-idx (the-as int num-chans))
(let* ((chan (-> this process skel channel chan-idx))
(frame-group (-> chan frame-group))
)
(else
(when (!= (-> v1-7 type) art-joint-anim)
(go process-drawable-art-error "align joint-anim")
;; og:preserve-this
;; (.lw ra-0 return-from-thread s7-0)
;; (.jr ra-0)
(abandon-thread)
(nop!)
0
)
(case (-> chan command)
(((joint-control-command stack) (joint-control-command stack1))
)
(else
(when (!= (-> frame-group type) art-joint-anim)
(go process-drawable-art-error "align joint-anim")
;; og:preserve-this
(abandon-thread)
;; (.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))
(vector-copy! (-> this transform 1 scale) (-> this align scale))
(let* ((a2-5 (-> this matrix 1))
(a3-0 (-> this matrix))
(v1-21 (-> a3-0 0 rvec quad))
(a0-19 (-> a3-0 0 uvec quad))
(a1-13 (-> a3-0 0 fvec quad))
(a3-1 (-> a3-0 0 trans quad))
)
(set! (-> a2-5 rvec quad) v1-21)
(set! (-> a2-5 uvec quad) a0-19)
(set! (-> a2-5 fvec quad) 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 rvec quad))
(a1-15 (-> a3-2 uvec quad))
(a2-6 (-> a3-2 fvec quad))
(a3-3 (-> a3-2 trans quad))
)
(set! (-> v1-25 0 rvec quad) a0-22)
(set! (-> v1-25 0 uvec quad) a1-15)
(set! (-> v1-25 0 fvec quad) 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.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.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 uvec))
(vector-length (-> this matrix 0 fvec))
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* ((root-chan (-> this process skel root-channel 0))
(root-frame-group (-> root-chan frame-group))
(root-frame-num (-> root-chan frame-num))
)
(= (-> root-chan num-func) num-func-loop!)
(cond
((or (not root-frame-group) (!= (-> this frame-group) root-frame-group))
(set! disable? #t)
)
((= (-> root-chan num-func) num-func-loop!)
(set! disable? (< (* (-> root-chan param 0) (- root-frame-num (-> this frame-num))) 0.0))
)
(else
(set! disable? (= root-frame-num 0.0))
)
)
(if disable?
(logior! (-> this flags) (align-flags disabled))
(logclear! (-> this flags) (align-flags disabled))
)
(set! (-> this frame-group) root-frame-group)
(set! (-> this frame-num) root-frame-num)
)
(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))
(vector-copy! (-> this transform 1 scale) (-> this align scale))
(let* ((a2-5 (-> this matrix 1))
(a3-0 (-> this matrix))
(v1-21 (-> a3-0 0 rvec quad))
(a0-19 (-> a3-0 0 uvec quad))
(a1-13 (-> a3-0 0 fvec quad))
(a3-1 (-> a3-0 0 trans quad))
)
(set! (-> a2-5 rvec quad) v1-21)
(set! (-> a2-5 uvec quad) a0-19)
(set! (-> a2-5 fvec quad) 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 rvec quad))
(a1-15 (-> a3-2 uvec quad))
(a2-6 (-> a3-2 fvec quad))
(a3-3 (-> a3-2 trans quad))
)
(set! (-> v1-25 0 rvec quad) a0-22)
(set! (-> v1-25 0 uvec quad) a1-15)
(set! (-> v1-25 0 fvec quad) 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 uvec))
(vector-length (-> this matrix 0 fvec))
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)
)
;; WARN: Return type mismatch (inline-array transform) vs transform.
+54 -88
View File
@@ -373,37 +373,20 @@ Unlike jak 2, this actually multiplies the scale, instead of adding."
(defun joint-mod-add-local-callback ((bone-cspace cspace) (joint-transform transformq))
"Callback for joint-mod-add-local. See comment on that type."
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(let ((s4-0 (the-as joint-mod-add-local (-> bone-cspace param1))))
(if (logtest? (-> s4-0 flags) (joint-mod-base-flags trans))
(vector+! (-> joint-transform trans) (-> joint-transform trans) (the-as vector (-> s4-0 transform)))
)
(when (logtest? (-> s4-0 flags) (joint-mod-base-flags quat))
(quaternion*! (-> joint-transform quat) (-> joint-transform quat) (-> s4-0 transform quat))
(quaternion-normalize! (-> joint-transform quat))
)
(when (logtest? (-> s4-0 flags) (joint-mod-base-flags scale))
(let ((a0-4 (-> joint-transform scale)))
(let ((v1-11 (-> joint-transform scale))
(a1-4 (-> s4-0 transform scale))
)
(.lvf vf4 (&-> v1-11 quad))
(.lvf vf5 (&-> a1-4 quad))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> a0-4 quad) vf6)
)
(let ((s4-0 (the-as joint-mod-add-local (-> bone-cspace param1))))
(if (logtest? (-> s4-0 flags) (joint-mod-base-flags trans))
(vector+! (-> joint-transform trans) (-> joint-transform trans) (the-as vector (-> s4-0 transform)))
)
(when (logtest? (-> s4-0 flags) (joint-mod-base-flags quat))
(quaternion*! (-> joint-transform quat) (-> joint-transform quat) (-> s4-0 transform quat))
(quaternion-normalize! (-> joint-transform quat))
)
(cspace<-parented-transformq-joint! bone-cspace joint-transform)
(none)
(if (logtest? (-> s4-0 flags) (joint-mod-base-flags scale))
(vector*! (-> joint-transform scale) (-> joint-transform scale) (-> s4-0 transform scale))
)
)
(cspace<-parented-transformq-joint! bone-cspace joint-transform)
(none)
)
(defmethod init ((this joint-mod-add-local) (arg0 process-drawable) (arg1 uint) (arg2 joint-mod-base-flags))
@@ -552,71 +535,54 @@ Then, apply the normal parented transform."
;; WARN: Return type mismatch matrix vs none.
(defun joint-mod-blend-world-callback ((bone-cspace cspace) (joint-transform transformq))
"Callback for joint-mod-blend-world. See comment on that type."
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(let ((gp-0 (the-as joint-mod-blend-world (-> bone-cspace param1))))
(let ((f30-0 (if (logtest? (-> gp-0 flags) (joint-mod-base-flags trans))
(-> gp-0 blend)
0.0
)
)
(f28-0 (if (logtest? (-> gp-0 flags) (joint-mod-base-flags quat))
(-> gp-0 blend)
0.0
)
)
(f26-0 (if (logtest? (-> gp-0 flags) (joint-mod-base-flags scale))
(-> gp-0 blend)
0.0
)
)
(s3-0 (new 'stack-no-clear 'joint-mod-blend-world-work))
)
(if (= (-> bone-cspace parent bone scale w) 0.0)
(matrix<-transformq! (-> s3-0 mat1) joint-transform)
(matrix<-parented-transformq! (-> s3-0 mat1) joint-transform (-> bone-cspace parent bone scale))
)
(matrix*! (-> s3-0 mat2) (-> s3-0 mat1) (-> bone-cspace parent bone transform))
(set-vector!
(-> s3-0 vec)
(vector-length (the-as vector (-> s3-0 mat2)))
(vector-length (-> s3-0 mat2 uvec))
(vector-length (-> s3-0 mat2 fvec))
1.0
(let ((gp-0 (the-as joint-mod-blend-world (-> bone-cspace param1))))
(let ((f30-0 (if (logtest? (-> gp-0 flags) (joint-mod-base-flags trans))
(-> gp-0 blend)
0.0
)
)
(f28-0 (if (logtest? (-> gp-0 flags) (joint-mod-base-flags quat))
(-> gp-0 blend)
0.0
)
)
(f26-0 (if (logtest? (-> gp-0 flags) (joint-mod-base-flags scale))
(-> gp-0 blend)
0.0
)
)
(s3-0 (new 'stack-no-clear 'joint-mod-blend-world-work))
)
(let ((a0-11 (-> gp-0 blend-transform scale)))
(let ((v1-18 (-> s3-0 vec))
(a1-4 (-> joint-transform scale))
)
(.lvf vf4 (&-> v1-18 quad))
(.lvf vf5 (&-> a1-4 quad))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> a0-11 quad) vf6)
)
(vector-lerp!
(the-as vector (-> gp-0 blend-transform))
(-> s3-0 mat2 trans)
(the-as vector (-> gp-0 transform))
f30-0
)
(vector-lerp! (-> gp-0 blend-transform scale) (-> gp-0 blend-transform scale) (-> gp-0 transform scale) f26-0)
(quaternion-slerp!
(-> gp-0 blend-transform quat)
(matrix->quat (-> s3-0 mat2) (-> s3-0 quat))
(-> gp-0 transform quat)
f28-0
(if (= (-> bone-cspace parent bone scale w) 0.0)
(matrix<-transformq! (-> s3-0 mat1) joint-transform)
(matrix<-parented-transformq! (-> s3-0 mat1) joint-transform (-> bone-cspace parent bone scale))
)
(matrix*! (-> s3-0 mat2) (-> s3-0 mat1) (-> bone-cspace parent bone transform))
(set-vector!
(-> s3-0 vec)
(vector-length (the-as vector (-> s3-0 mat2)))
(vector-length (-> s3-0 mat2 uvec))
(vector-length (-> s3-0 mat2 fvec))
1.0
)
(vector*! (-> gp-0 blend-transform scale) (-> s3-0 vec) (-> joint-transform scale))
(vector-lerp!
(the-as vector (-> gp-0 blend-transform))
(-> s3-0 mat2 trans)
(the-as vector (-> gp-0 transform))
f30-0
)
(vector-lerp! (-> gp-0 blend-transform scale) (-> gp-0 blend-transform scale) (-> gp-0 transform scale) f26-0)
(quaternion-slerp!
(-> gp-0 blend-transform quat)
(matrix->quat (-> s3-0 mat2) (-> s3-0 quat))
(-> gp-0 transform quat)
f28-0
)
(cspace<-transformq! bone-cspace (-> gp-0 blend-transform))
)
(none)
(cspace<-transformq! bone-cspace (-> gp-0 blend-transform))
)
(none)
)
(defmethod init ((this joint-mod-blend-world) (arg0 process-drawable) (arg1 uint) (arg2 joint-mod-base-flags))
+304 -389
View File
@@ -295,103 +295,52 @@
(sv-168 vector)
(sv-172 symbol)
)
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(set! sv-16 (the-as joint-mod (-> arg0 param1)))
(let ((a0-1 (-> arg1 scale)))
(let ((v1-1 (-> arg1 scale))
(a2-1 (-> sv-16 scale))
)
(.lvf vf4 (&-> v1-1 quad))
(.lvf vf5 (&-> a2-1 quad))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> a0-1 quad) vf6)
)
(cspace<-parented-transformq-joint! arg0 arg1)
(let ((s5-0 (-> arg0 bone transform)))
(let ((s4-0 (matrix->quat s5-0 (new 'stack-no-clear 'quaternion))))
(set! sv-64 (matrix->trans s5-0 (new 'stack-no-clear 'vector)))
(quaternion-rotate-y! s4-0 s4-0 (-> sv-16 twist z))
(set! sv-96 (quaternion-copy! (new 'stack-no-clear 'quaternion) s4-0))
(when (!= (-> sv-16 flex-blend) 0.0)
(set! sv-160 (vector-y-quaternion! (new 'stack-no-clear 'vector) sv-96))
(set! sv-164 (vector-z-quaternion! (new 'stack-no-clear 'vector) sv-96))
(set! sv-168 (vector-normalize! (vector-! (new 'stack-no-clear 'vector) (-> sv-16 target) sv-64) 1.0))
(set! sv-172 (the-as symbol #f))
(let* ((f30-0 (vector-y-angle sv-164))
(a0-13 (vector-flatten! (new 'stack-no-clear 'vector) sv-168 sv-160))
(f0-2 (vector-y-angle a0-13))
(f0-3 (deg-diff f30-0 f0-2))
(f30-1 (* f0-3 (-> sv-16 blend)))
)
(let ((f28-0 (fmax (fmin f30-1 (-> sv-16 twist-max y)) (- (-> sv-16 twist-max y)))))
(if (or (!= f30-1 f28-0) (= (-> sv-16 blend) 0.0))
(logclear! (-> sv-16 track-mode) (track-mode lock-on))
)
(cond
((or (< (-> sv-16 ignore-angle) (fabs f0-3))
(< (-> sv-16 twist-max w) (vector-vector-distance (-> sv-16 target) sv-64))
)
(set! f30-1 0.0)
(set! f28-0 0.0)
(set! sv-172 #t)
)
((< 5461.3335 (fabs (deg-diff f30-1 f28-0)))
(set! (-> sv-16 blend) 0.0001)
)
((< 182.04445 (fabs (deg-diff f30-1 f28-0)))
(logclear! (-> sv-16 track-mode) (track-mode track-x))
)
(set! sv-16 (the-as joint-mod (-> arg0 param1)))
(vector*! (-> arg1 scale) (-> arg1 scale) (-> sv-16 scale))
(cspace<-parented-transformq-joint! arg0 arg1)
(let ((s5-0 (-> arg0 bone transform)))
(let ((s4-0 (matrix->quat s5-0 (new 'stack-no-clear 'quaternion))))
(set! sv-64 (matrix->trans s5-0 (new 'stack-no-clear 'vector)))
(quaternion-rotate-y! s4-0 s4-0 (-> sv-16 twist z))
(set! sv-96 (quaternion-copy! (new 'stack-no-clear 'quaternion) s4-0))
(when (!= (-> sv-16 flex-blend) 0.0)
(set! sv-160 (vector-y-quaternion! (new 'stack-no-clear 'vector) sv-96))
(set! sv-164 (vector-z-quaternion! (new 'stack-no-clear 'vector) sv-96))
(set! sv-168 (vector-normalize! (vector-! (new 'stack-no-clear 'vector) (-> sv-16 target) sv-64) 1.0))
(set! sv-172 (the-as symbol #f))
(let* ((f30-0 (vector-y-angle sv-164))
(a0-14 (vector-flatten! (new 'stack-no-clear 'vector) sv-168 sv-160))
(f0-2 (vector-y-angle a0-14))
(f0-3 (deg-diff f30-0 f0-2))
(f30-1 (* f0-3 (-> sv-16 blend)))
)
(let ((f28-0 (fmax (fmin f30-1 (-> sv-16 twist-max y)) (- (-> sv-16 twist-max y)))))
(if (or (!= f30-1 f28-0) (= (-> sv-16 blend) 0.0))
(logclear! (-> sv-16 track-mode) (track-mode lock-on))
)
(if (or (and (logtest? (-> sv-16 track-mode) (track-mode track-y)) (= f30-1 f28-0))
(< (-> sv-16 twist-max y) (fabs (-> sv-16 twist y)))
)
(set! (-> sv-16 twist y)
(deg-seek (-> sv-16 twist y) f28-0 (* (fabs (deg-diff f28-0 (-> sv-16 twist y)))
(if (logtest? (-> sv-16 track-mode) (track-mode lock-on))
1.0
(-> sv-16 twist-speed-y)
)
(-> self clock time-adjust-ratio)
)
)
)
)
(cond
((or (< (-> sv-16 ignore-angle) (fabs f0-3))
(< (-> sv-16 twist-max w) (vector-vector-distance (-> sv-16 target) sv-64))
)
(set! f30-1 0.0)
(set! f28-0 0.0)
(set! sv-172 #t)
)
((< 5461.3335 (fabs (deg-diff f30-1 f28-0)))
(set! (-> sv-16 blend) 0.0001)
)
((< 182.04445 (fabs (deg-diff f30-1 f28-0)))
(logclear! (-> sv-16 track-mode) (track-mode track-x))
)
)
(if (and (< (fabs (deg-diff f30-1 (-> sv-16 twist y))) 728.1778) (and (not sv-172) (!= (-> sv-16 blend) 0.0)))
(logior! (-> sv-16 track-mode) (track-mode lock-on))
)
)
(quaternion-rotate-local-y! sv-96 sv-96 (-> sv-16 twist y))
(let* ((s3-1 (vector-x-quaternion! (new 'stack-no-clear 'vector) sv-96))
(f30-2 (vector-x-angle sv-164))
(s3-2 (vector-flatten! (new 'stack-no-clear 'vector) sv-168 s3-1))
(f0-24 (vector-x-angle s3-2))
(f30-3 (fmax
(fmin (* (- (deg-diff f30-2 f0-24)) (-> sv-16 blend)) (-> sv-16 twist-max x))
(- (-> sv-16 twist-max x))
)
)
)
(if (or (< (vector-dot s3-2 sv-164) 0.1)
(< (-> sv-16 twist-max z) (vector-vector-distance (-> sv-16 target) sv-64))
(if (or (and (logtest? (-> sv-16 track-mode) (track-mode track-y)) (= f30-1 f28-0))
(< (-> sv-16 twist-max y) (fabs (-> sv-16 twist y)))
)
(set! f30-3 0.0)
)
(if (or (logtest? (-> sv-16 track-mode) (track-mode track-x))
(< (-> sv-16 twist-max x) (fabs (-> sv-16 twist x)))
)
(set! (-> sv-16 twist x)
(deg-seek (-> sv-16 twist x) f30-3 (* (fabs (deg-diff f30-3 (-> sv-16 twist x)))
(set! (-> sv-16 twist y)
(deg-seek (-> sv-16 twist y) f28-0 (* (fabs (deg-diff f28-0 (-> sv-16 twist y)))
(if (logtest? (-> sv-16 track-mode) (track-mode lock-on))
1.0
(-> sv-16 twist-speed-x)
(-> sv-16 twist-speed-y)
)
(-> self clock time-adjust-ratio)
)
@@ -399,55 +348,89 @@
)
)
)
(quaternion-rotate-x! sv-96 sv-96 (-> sv-16 twist x))
(quaternion-normalize! (quaternion*! sv-96 sv-96 (-> sv-16 quat)))
(if (and (< (fabs (deg-diff f30-1 (-> sv-16 twist y))) 728.1778) (and (not sv-172) (!= (-> sv-16 blend) 0.0)))
(logior! (-> sv-16 track-mode) (track-mode lock-on))
)
)
(let ((a1-27 (quaternion-slerp! (new 'stack-no-clear 'quaternion) s4-0 sv-96 (-> sv-16 flex-blend))))
(matrix<-quat s5-0 a1-27)
(quaternion-rotate-local-y! sv-96 sv-96 (-> sv-16 twist y))
(let* ((s3-1 (vector-x-quaternion! (new 'stack-no-clear 'vector) sv-96))
(f30-2 (vector-x-angle sv-164))
(s3-2 (vector-flatten! (new 'stack-no-clear 'vector) sv-168 s3-1))
(f0-24 (vector-x-angle s3-2))
(f30-3 (fmax
(fmin (* (- (deg-diff f30-2 f0-24)) (-> sv-16 blend)) (-> sv-16 twist-max x))
(- (-> sv-16 twist-max x))
)
)
)
(if (or (< (vector-dot s3-2 sv-164) 0.1)
(< (-> sv-16 twist-max z) (vector-vector-distance (-> sv-16 target) sv-64))
)
(set! f30-3 0.0)
)
(if (or (logtest? (-> sv-16 track-mode) (track-mode track-x))
(< (-> sv-16 twist-max x) (fabs (-> sv-16 twist x)))
)
(set! (-> sv-16 twist x)
(deg-seek (-> sv-16 twist x) f30-3 (* (fabs (deg-diff f30-3 (-> sv-16 twist x)))
(if (logtest? (-> sv-16 track-mode) (track-mode lock-on))
1.0
(-> sv-16 twist-speed-x)
)
(-> self clock time-adjust-ratio)
)
)
)
)
)
(quaternion-rotate-x! sv-96 sv-96 (-> sv-16 twist x))
(quaternion-normalize! (quaternion*! sv-96 sv-96 (-> sv-16 quat)))
)
(let ((f30-4 (-> sv-16 trans x))
(s4-1 (-> s5-0 uvec))
(v1-97 (vector<-matrix! (new 'stack-no-clear 'vector) s5-0))
)
(let ((f0-43 (- f30-4 (-> v1-97 y))))
(if (< 614.4 (fabs f0-43))
(+! (-> sv-16 trans z) (* 8.0 f0-43))
)
)
(+! (-> sv-16 trans z) (* -260.0 (seconds-per-frame) (-> sv-16 trans y)))
(let ((f0-48 (-> sv-16 trans y)))
(+! (-> sv-16 trans y) (* (-> sv-16 trans z) (seconds-per-frame)))
(set! (-> sv-16 trans y) (* 0.95 (-> sv-16 trans y)))
(when (< (* f0-48 (-> sv-16 trans y)) 0.0)
(set! (-> sv-16 trans y) 0.0)
(set! (-> sv-16 trans z) 0.0)
)
)
(cond
((< 409.6 (-> sv-16 trans y))
(set! (-> sv-16 trans y) 409.6)
(set! (-> sv-16 trans z) 0.0)
)
((< (-> sv-16 trans y) -409.6)
(set! (-> sv-16 trans y) -409.6)
(set! (-> sv-16 trans z) 0.0)
)
)
(set! (-> sv-16 trans x) (-> v1-97 y))
(let ((f0-60 (* (-> sv-16 trans y) (-> sv-16 flex-blend))))
(if (!= f0-60 0.0)
(vector+float*! (-> s5-0 trans) v1-97 s4-1 f0-60)
)
)
(let ((a1-27 (quaternion-slerp! (new 'stack-no-clear 'quaternion) s4-0 sv-96 (-> sv-16 flex-blend))))
(matrix<-quat s5-0 a1-27)
)
)
(if (-> sv-16 parented-scale?)
(set-vector! (-> arg0 bone scale) 1.0 1.0 1.0 1.0)
(let ((f30-4 (-> sv-16 trans x))
(s4-1 (-> s5-0 uvec))
(v1-97 (vector<-matrix! (new 'stack-no-clear 'vector) s5-0))
)
(let ((f0-43 (- f30-4 (-> v1-97 y))))
(if (< 614.4 (fabs f0-43))
(+! (-> sv-16 trans z) (* 8.0 f0-43))
)
)
0
(none)
(+! (-> sv-16 trans z) (* -260.0 (seconds-per-frame) (-> sv-16 trans y)))
(let ((f0-48 (-> sv-16 trans y)))
(+! (-> sv-16 trans y) (* (-> sv-16 trans z) (seconds-per-frame)))
(set! (-> sv-16 trans y) (* 0.95 (-> sv-16 trans y)))
(when (< (* f0-48 (-> sv-16 trans y)) 0.0)
(set! (-> sv-16 trans y) 0.0)
(set! (-> sv-16 trans z) 0.0)
)
)
(cond
((< 409.6 (-> sv-16 trans y))
(set! (-> sv-16 trans y) 409.6)
(set! (-> sv-16 trans z) 0.0)
)
((< (-> sv-16 trans y) -409.6)
(set! (-> sv-16 trans y) -409.6)
(set! (-> sv-16 trans z) 0.0)
)
)
(set! (-> sv-16 trans x) (-> v1-97 y))
(let ((f0-60 (* (-> sv-16 trans y) (-> sv-16 flex-blend))))
(if (!= f0-60 0.0)
(vector+float*! (-> s5-0 trans) v1-97 s4-1 f0-60)
)
)
)
)
(if (-> sv-16 parented-scale?)
(set-vector! (-> arg0 bone scale) 1.0 1.0 1.0 1.0)
)
0
(none)
)
(defbehavior joint-mod-gun-look-at-handler process ((arg0 cspace) (arg1 transformq))
@@ -752,138 +735,121 @@
(sv-160 (pointer uint128))
(sv-164 symbol)
)
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(let ((gp-0 (the-as joint-mod (-> arg0 param1))))
(cspace<-parented-transformq-joint! arg0 arg1)
(let ((s3-0 (-> arg0 bone transform)))
(set! sv-144 (new 'stack-no-clear 'matrix))
(set! sv-148 (new 'stack-no-clear 'quaternion))
(set! sv-152 (new 'stack-no-clear 'vector))
(set! sv-156 (new 'stack-no-clear 'vector))
(set! sv-160
(&-> (-> gp-0 process node-list data (-> gp-0 base-joint) bone) transform quad (-> gp-0 base-nose))
)
(set! sv-164
(< (vector-dot (-> s3-0 rvec) (vector-cross! (new 'stack-no-clear 'vector) (-> s3-0 uvec) (-> s3-0 fvec)))
0.0
)
)
(vector-normalize-copy! (-> sv-144 rvec) (the-as vector (&-> s3-0 quad (-> gp-0 ear))) (if sv-164
-1.0
1.0
)
)
(vector-normalize-copy! (-> sv-144 uvec) (the-as vector (&-> s3-0 quad (-> gp-0 up))) 1.0)
(vector-normalize-copy! (-> sv-144 fvec) (the-as vector (&-> s3-0 quad (-> gp-0 nose))) 1.0)
)
(vector-reset! (-> sv-144 trans))
(matrix->quaternion sv-148 sv-144)
(vector-normalize! (vector-! sv-152 (-> gp-0 target) (-> arg0 bone transform trans)) 1.0)
(vector-inv-orient-by-quat! sv-156 sv-152 sv-148)
(let ((f30-0 (vector-y-angle sv-156))
(f0-2 (if (= (-> gp-0 base-joint) (+ (-> arg0 joint number) 1))
0.0
(deg-diff (vector-y-angle (-> sv-144 fvec)) (vector-y-angle (the-as vector sv-160)))
)
)
(let ((gp-0 (the-as joint-mod (-> arg0 param1))))
(cspace<-parented-transformq-joint! arg0 arg1)
(let ((s3-0 (-> arg0 bone transform)))
(set! sv-144 (new 'stack-no-clear 'matrix))
(set! sv-148 (new 'stack-no-clear 'quaternion))
(set! sv-152 (new 'stack-no-clear 'vector))
(set! sv-156 (new 'stack-no-clear 'vector))
(set! sv-160
(&-> (-> gp-0 process node-list data (-> gp-0 base-joint) bone) transform quad (-> gp-0 base-nose))
)
(if (< (-> gp-0 ignore-angle) (fabs f30-0))
(set! f30-0 0.0)
(set! sv-164
(< (vector-dot (-> s3-0 rvec) (vector-cross! (new 'stack-no-clear 'vector) (-> s3-0 uvec) (-> s3-0 fvec)))
0.0
)
)
(let ((f30-1
(fmax
(fmin (* f30-0 (-> gp-0 blend) (-> gp-0 flex-blend)) (+ (-> gp-0 twist-max y) (* f0-2 (-> gp-0 flex-blend))))
(+ (- (-> gp-0 twist-max y)) (* f0-2 (-> gp-0 flex-blend)))
)
)
)
(when (and (-> gp-0 shutting-down?) (< (fabs (- (-> gp-0 twist y) f30-1)) 18.204445))
(if (and (= (-> gp-0 scale x) 1.0) (= (-> gp-0 scale y) 1.0) (= (-> gp-0 scale z) 1.0))
(mode-set! gp-0 (joint-mod-mode reset))
(mode-set! gp-0 (joint-mod-mode rotate2))
)
)
(set! (-> gp-0 twist y)
(deg-seek
(-> gp-0 twist y)
f30-1
(* (fabs (deg-diff f30-1 (-> gp-0 twist y))) (-> gp-0 twist-speed-y) (-> self clock time-adjust-ratio))
)
)
)
)
(let ((f0-21 (if sv-164
(- (-> gp-0 twist y))
(-> gp-0 twist y)
)
)
(a1-18 (new-stack-vector0))
)
(set! (-> a1-18 data (-> gp-0 up)) 1.0)
(let ((a2-7 (quaternion-vector-angle! (new-stack-quaternion0) a1-18 f0-21)))
(quaternion-normalize! (quaternion*! (-> arg1 quat) (-> arg1 quat) a2-7))
)
)
(let ((f0-27
(fmax
(fmin (* (- (vector-x-angle sv-156)) (-> gp-0 blend) (-> gp-0 flex-blend)) (-> gp-0 twist-max x))
(- (-> gp-0 twist-max x))
)
)
)
(if (< (vector-dot sv-156 *z-vector*) 0.1)
(set! f0-27 0.0)
)
(set! (-> gp-0 twist x)
(deg-seek
(-> gp-0 twist x)
f0-27
(* (fabs (deg-diff f0-27 (-> gp-0 twist x))) (-> gp-0 twist-speed-x) (-> self clock time-adjust-ratio))
)
)
)
(let ((a1-22 (new-stack-vector0)))
(set! (-> a1-22 data (-> gp-0 ear)) 1.0)
(let ((a2-10 (quaternion-vector-angle! (new-stack-quaternion0) a1-22 (-> gp-0 twist x))))
(quaternion-normalize! (quaternion*! (-> arg1 quat) (-> arg1 quat) a2-10))
)
)
(vector+! (-> arg1 trans) (-> arg1 trans) (-> gp-0 trans))
(quaternion-normalize! (quaternion*! (-> arg1 quat) (-> arg1 quat) (-> gp-0 quat)))
(let ((a1-27 (-> arg1 scale)))
(let ((v1-71 (-> arg1 scale))
(a0-36 (-> gp-0 scale))
)
(.lvf vf4 (&-> v1-71 quad))
(.lvf vf5 (&-> a0-36 quad))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> a1-27 quad) vf6)
)
(cspace<-parented-transformq-joint! arg0 arg1)
(if (-> gp-0 parented-scale?)
(set-vector! (-> arg0 bone scale) 1.0 1.0 1.0 1.0)
)
(if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0))
(add-debug-text-sphere
*display-target-marks*
(bucket-id debug-no-zbuf1)
(-> gp-0 target)
(meters 0.2)
"look"
(new 'static 'rgba :r #xff :g #xff :a #x80)
)
)
(vector-normalize-copy! (-> sv-144 rvec) (the-as vector (&-> s3-0 quad (-> gp-0 ear))) (if sv-164
-1.0
1.0
)
)
(vector-normalize-copy! (-> sv-144 uvec) (the-as vector (&-> s3-0 quad (-> gp-0 up))) 1.0)
(vector-normalize-copy! (-> sv-144 fvec) (the-as vector (&-> s3-0 quad (-> gp-0 nose))) 1.0)
)
0
(none)
(vector-reset! (-> sv-144 trans))
(matrix->quaternion sv-148 sv-144)
(vector-normalize! (vector-! sv-152 (-> gp-0 target) (-> arg0 bone transform trans)) 1.0)
(vector-inv-orient-by-quat! sv-156 sv-152 sv-148)
(let ((f30-0 (vector-y-angle sv-156))
(f0-2 (if (= (-> gp-0 base-joint) (+ (-> arg0 joint number) 1))
0.0
(deg-diff (vector-y-angle (-> sv-144 fvec)) (vector-y-angle (the-as vector sv-160)))
)
)
)
(if (< (-> gp-0 ignore-angle) (fabs f30-0))
(set! f30-0 0.0)
)
(let ((f30-1
(fmax
(fmin (* f30-0 (-> gp-0 blend) (-> gp-0 flex-blend)) (+ (-> gp-0 twist-max y) (* f0-2 (-> gp-0 flex-blend))))
(+ (- (-> gp-0 twist-max y)) (* f0-2 (-> gp-0 flex-blend)))
)
)
)
(when (and (-> gp-0 shutting-down?) (< (fabs (- (-> gp-0 twist y) f30-1)) 18.204445))
(if (and (= (-> gp-0 scale x) 1.0) (= (-> gp-0 scale y) 1.0) (= (-> gp-0 scale z) 1.0))
(mode-set! gp-0 (joint-mod-mode reset))
(mode-set! gp-0 (joint-mod-mode rotate2))
)
)
(set! (-> gp-0 twist y)
(deg-seek
(-> gp-0 twist y)
f30-1
(* (fabs (deg-diff f30-1 (-> gp-0 twist y))) (-> gp-0 twist-speed-y) (-> self clock time-adjust-ratio))
)
)
)
)
(let ((f0-21 (if sv-164
(- (-> gp-0 twist y))
(-> gp-0 twist y)
)
)
(a1-18 (new-stack-vector0))
)
(set! (-> a1-18 data (-> gp-0 up)) 1.0)
(let ((a2-7 (quaternion-vector-angle! (new-stack-quaternion0) a1-18 f0-21)))
(quaternion-normalize! (quaternion*! (-> arg1 quat) (-> arg1 quat) a2-7))
)
)
(let ((f0-27
(fmax
(fmin (* (- (vector-x-angle sv-156)) (-> gp-0 blend) (-> gp-0 flex-blend)) (-> gp-0 twist-max x))
(- (-> gp-0 twist-max x))
)
)
)
(if (< (vector-dot sv-156 *z-vector*) 0.1)
(set! f0-27 0.0)
)
(set! (-> gp-0 twist x)
(deg-seek
(-> gp-0 twist x)
f0-27
(* (fabs (deg-diff f0-27 (-> gp-0 twist x))) (-> gp-0 twist-speed-x) (-> self clock time-adjust-ratio))
)
)
)
(let ((a1-22 (new-stack-vector0)))
(set! (-> a1-22 data (-> gp-0 ear)) 1.0)
(let ((a2-10 (quaternion-vector-angle! (new-stack-quaternion0) a1-22 (-> gp-0 twist x))))
(quaternion-normalize! (quaternion*! (-> arg1 quat) (-> arg1 quat) a2-10))
)
)
(vector+! (-> arg1 trans) (-> arg1 trans) (-> gp-0 trans))
(quaternion-normalize! (quaternion*! (-> arg1 quat) (-> arg1 quat) (-> gp-0 quat)))
(vector*! (-> arg1 scale) (-> arg1 scale) (-> gp-0 scale))
(cspace<-parented-transformq-joint! arg0 arg1)
(if (-> gp-0 parented-scale?)
(set-vector! (-> arg0 bone scale) 1.0 1.0 1.0 1.0)
)
(if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0))
(add-debug-text-sphere
*display-target-marks*
(bucket-id debug-no-zbuf1)
(-> gp-0 target)
(meters 0.2)
"look"
(new 'static 'rgba :r #xff :g #xff :a #x80)
)
)
)
0
(none)
)
(defbehavior joint-mod-world-look-at-handler process ((arg0 cspace) (arg1 transformq))
@@ -995,113 +961,79 @@
(defbehavior joint-mod-rotate-handler process ((arg0 cspace) (arg1 transformq))
"Callback for rotate joint mod."
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(let ((s5-0 (the-as joint-mod (-> arg0 param1))))
(let ((s3-0 (new 'static 'inline-array vector 3
(new 'static 'vector :x 1.0 :w 1.0)
(new 'static 'vector :y 1.0 :w 1.0)
(new 'static 'vector :z 1.0 :w 1.0)
)
(let ((s5-0 (the-as joint-mod (-> arg0 param1))))
(let ((s3-0 (new 'static 'inline-array vector 3
(new 'static 'vector :x 1.0 :w 1.0)
(new 'static 'vector :y 1.0 :w 1.0)
(new 'static 'vector :z 1.0 :w 1.0)
)
)
(if (not (logtest? (-> s5-0 track-mode) (track-mode no-trans)))
(vector+! (-> arg1 trans) (-> arg1 trans) (-> s5-0 trans))
)
(when (not (logtest? (-> s5-0 track-mode) (track-mode no-rotate)))
(let* ((v1-9 (-> s3-0 (-> s5-0 ear)))
(a1-4 (quaternion-axis-angle!
(new 'stack-no-clear 'quaternion)
(-> v1-9 x)
(-> v1-9 y)
(-> v1-9 z)
(* (-> s5-0 twist x) (-> s5-0 blend) (-> s5-0 flex-blend))
)
)
)
(quaternion-normalize! (quaternion*! (-> arg1 quat) a1-4 (-> arg1 quat)))
)
(let* ((v1-13 (-> s3-0 (-> s5-0 up)))
(a1-6 (quaternion-axis-angle!
(new 'stack-no-clear 'quaternion)
(-> v1-13 x)
(-> v1-13 y)
(-> v1-13 z)
(* (-> s5-0 twist y) (-> s5-0 blend) (-> s5-0 flex-blend))
)
)
)
(quaternion-normalize! (quaternion*! (-> arg1 quat) a1-6 (-> arg1 quat)))
)
(let* ((v1-17 (-> s3-0 (-> s5-0 nose)))
(a1-8 (quaternion-axis-angle!
(new 'stack-no-clear 'quaternion)
(-> v1-17 x)
(-> v1-17 y)
(-> v1-17 z)
(* (-> s5-0 twist z) (-> s5-0 blend) (-> s5-0 flex-blend))
)
)
)
(quaternion-normalize! (quaternion*! (-> arg1 quat) a1-8 (-> arg1 quat)))
)
)
)
(when (not (logtest? (-> s5-0 track-mode) (track-mode no-scale)))
(let ((a1-9 (-> arg1 scale)))
(let ((v1-22 (-> arg1 scale))
(a0-11 (-> s5-0 scale))
)
(.lvf vf4 (&-> v1-22 quad))
(.lvf vf5 (&-> a0-11 quad))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> a1-9 quad) vf6)
)
(if (not (logtest? (-> s5-0 track-mode) (track-mode no-trans)))
(vector+! (-> arg1 trans) (-> arg1 trans) (-> s5-0 trans))
)
(when (not (logtest? (-> s5-0 track-mode) (track-mode no-rotate)))
(let* ((v1-9 (-> s3-0 (-> s5-0 ear)))
(a1-4 (quaternion-axis-angle!
(new 'stack-no-clear 'quaternion)
(-> v1-9 x)
(-> v1-9 y)
(-> v1-9 z)
(* (-> s5-0 twist x) (-> s5-0 blend) (-> s5-0 flex-blend))
)
)
)
(quaternion-normalize! (quaternion*! (-> arg1 quat) a1-4 (-> arg1 quat)))
)
(let* ((v1-13 (-> s3-0 (-> s5-0 up)))
(a1-6 (quaternion-axis-angle!
(new 'stack-no-clear 'quaternion)
(-> v1-13 x)
(-> v1-13 y)
(-> v1-13 z)
(* (-> s5-0 twist y) (-> s5-0 blend) (-> s5-0 flex-blend))
)
)
)
(quaternion-normalize! (quaternion*! (-> arg1 quat) a1-6 (-> arg1 quat)))
)
(let* ((v1-17 (-> s3-0 (-> s5-0 nose)))
(a1-8 (quaternion-axis-angle!
(new 'stack-no-clear 'quaternion)
(-> v1-17 x)
(-> v1-17 y)
(-> v1-17 z)
(* (-> s5-0 twist z) (-> s5-0 blend) (-> s5-0 flex-blend))
)
)
)
(quaternion-normalize! (quaternion*! (-> arg1 quat) a1-8 (-> arg1 quat)))
)
)
(cspace<-parented-transformq-joint! arg0 arg1)
(if (-> s5-0 parented-scale?)
(set-vector! (-> arg0 bone scale) 1.0 1.0 1.0 1.0)
)
)
0
(none)
(if (not (logtest? (-> s5-0 track-mode) (track-mode no-scale)))
(vector*! (-> arg1 scale) (-> arg1 scale) (-> s5-0 scale))
)
(cspace<-parented-transformq-joint! arg0 arg1)
(if (-> s5-0 parented-scale?)
(set-vector! (-> arg0 bone scale) 1.0 1.0 1.0 1.0)
)
)
0
(none)
)
(defbehavior joint-mod-scale-handler process ((arg0 cspace) (arg1 transformq))
"Callback for scale joint mod."
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(let ((s5-0 (the-as joint-mod (-> arg0 param1))))
(let ((a2-0 (-> arg1 scale)))
(let ((v1-0 (-> arg1 scale))
(a0-1 (-> s5-0 scale))
)
(.lvf vf4 (&-> v1-0 quad))
(.lvf vf5 (&-> a0-1 quad))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> a2-0 quad) vf6)
(let ((s5-0 (the-as joint-mod (-> arg0 param1))))
(vector*! (-> arg1 scale) (-> arg1 scale) (-> s5-0 scale))
(cspace<-parented-transformq-joint! arg0 arg1)
(if (-> s5-0 parented-scale?)
(set-vector! (-> arg0 bone scale) 1.0 1.0 1.0 1.0)
)
(cspace<-parented-transformq-joint! arg0 arg1)
(if (-> s5-0 parented-scale?)
(set-vector! (-> arg0 bone scale) 1.0 1.0 1.0 1.0)
)
)
0
(none)
)
0
(none)
)
(defbehavior joint-mod-joint-set-handler process ((arg0 cspace) (arg1 transformq))
@@ -1206,40 +1138,23 @@
)
(defbehavior joint-mod-joint-set*-handler process ((arg0 cspace) (arg1 transformq))
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(let ((s5-0 (the-as joint-mod (-> arg0 param1))))
(if (not (logtest? (-> s5-0 track-mode) (track-mode no-trans)))
(vector+! (-> arg1 trans) (-> arg1 trans) (-> s5-0 trans))
)
(if (not (logtest? (-> s5-0 track-mode) (track-mode no-rotate)))
(quaternion-normalize! (quaternion*! (-> arg1 quat) (-> arg1 quat) (-> s5-0 quat)))
)
(when (not (logtest? (-> s5-0 track-mode) (track-mode no-scale)))
(let ((a1-4 (-> arg1 scale)))
(let ((v1-11 (-> arg1 scale))
(a0-4 (-> s5-0 scale))
)
(.lvf vf4 (&-> v1-11 quad))
(.lvf vf5 (&-> a0-4 quad))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> a1-4 quad) vf6)
)
(let ((s5-0 (the-as joint-mod (-> arg0 param1))))
(if (not (logtest? (-> s5-0 track-mode) (track-mode no-trans)))
(vector+! (-> arg1 trans) (-> arg1 trans) (-> s5-0 trans))
)
(if (not (logtest? (-> s5-0 track-mode) (track-mode no-rotate)))
(quaternion-normalize! (quaternion*! (-> arg1 quat) (-> arg1 quat) (-> s5-0 quat)))
)
(if (not (logtest? (-> s5-0 track-mode) (track-mode no-scale)))
(vector*! (-> arg1 scale) (-> arg1 scale) (-> s5-0 scale))
)
(cspace<-parented-transformq-joint! arg0 arg1)
(if (-> s5-0 parented-scale?)
(set-vector! (-> arg0 bone scale) 1.0 1.0 1.0 1.0)
)
(cspace<-parented-transformq-joint! arg0 arg1)
(if (-> s5-0 parented-scale?)
(set-vector! (-> arg0 bone scale) 1.0 1.0 1.0 1.0)
)
)
0
(none)
)
0
(none)
)
(defbehavior joint-mod-joint-set*-world-handler process ((arg0 cspace) (arg1 transformq))
+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))
)
@@ -541,7 +541,7 @@
((-> jcontrol postbind-function) this joints jcontrol)
)
(let ((a1-5 (new 'stack-no-clear 'vector)))
(set! (-> a1-5 quad) (-> this bounds quad))
(vector-copy! a1-5 (-> this bounds))
(set! (-> a1-5 w) 1.0)
(vector-norm-matrix*!
(-> this origin)
@@ -819,7 +819,7 @@
(set! (-> v1-35 origin-joint-index) (the-as uint (-> skelgroup origin-joint-index)))
(set! (-> v1-35 shadow-joint-index) (the-as uint (-> skelgroup shadow-joint-index)))
)
(set! (-> s2-0 bounds quad) (-> skelgroup bounds quad))
(vector-copy! (-> s2-0 bounds) (-> skelgroup bounds))
(let ((v1-37 (-> skelgroup shadow)))
(when (and (> v1-37 0) (< v1-37 sv-20))
(let ((s0-0 (-> s1-0 data v1-37)))
@@ -923,19 +923,17 @@
)
)
(else
(set! (-> s3-0 skeleton bones 0 transform trans quad) (-> (the-as vector (get-property-struct
(-> s3-0 jgeo extra)
'trans-offset
'interp
-1000000000.0
*null-vector*
(the-as (pointer res-tag) #f)
*res-static-buf*
)
)
quad
)
)
(vector-copy! (-> s3-0 skeleton bones 0 transform trans) (the-as vector (get-property-struct
(-> s3-0 jgeo extra)
'trans-offset
'interp
-1000000000.0
*null-vector*
(the-as (pointer res-tag) #f)
*res-static-buf*
)
)
)
)
)
)
@@ -1118,53 +1116,36 @@
(defbehavior ja-linear-vel process-drawable ((chan int))
(local-vars (s4-1 vector) (sv-16 res-tag))
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
(let* ((s4-0 (-> self skel root-channel chan))
(v1-2 (-> s4-0 frame-group))
)
(init-vf0-vector)
(let* ((s4-0 (-> self skel root-channel chan))
(v1-2 (-> s4-0 frame-group))
)
(cond
((-> v1-2 extra)
(set! sv-16 (new 'static 'res-tag))
(let ((gp-0 (res-lump-data (-> v1-2 extra) 'linear-vel pointer :tag-ptr (& sv-16))))
(cond
(gp-0
(let* ((s5-0 (the int (the float (the int (-> s4-0 frame-num)))))
(f0-5 (-> s4-0 frame-num))
(f28-0 (- f0-5 (the float (the int f0-5))))
)
(set! s4-1 (new 'static 'vector))
(let ((f30-0 (ja-rate 0)))
(vector-lerp! s4-1 (the-as vector (&+ gp-0 (* s5-0 16))) (the-as vector (&+ gp-0 (* (+ s5-0 1) 16))) f28-0)
(let ((a0-7 s4-1))
(let ((v1-9 s4-1)
(a1-3 (-> self root scale))
)
(.lvf vf4 (&-> v1-9 quad))
(.lvf vf5 (&-> a1-3 quad))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> a0-7 quad) vf6)
)
(vector-float*! s4-1 s4-1 f30-0)
)
(cond
((-> v1-2 extra)
(set! sv-16 (new 'static 'res-tag))
(let ((gp-0 (res-lump-data (-> v1-2 extra) 'linear-vel pointer :tag-ptr (& sv-16))))
(cond
(gp-0
(let* ((s5-0 (the int (the float (the int (-> s4-0 frame-num)))))
(f0-5 (-> s4-0 frame-num))
(f28-0 (- f0-5 (the float (the int f0-5))))
)
(set! s4-1 (new 'static 'vector))
(let ((f30-0 (ja-rate 0)))
(vector-lerp! s4-1 (the-as vector (&+ gp-0 (* s5-0 16))) (the-as vector (&+ gp-0 (* (+ s5-0 1) 16))) f28-0)
(vector*! s4-1 s4-1 (-> self root scale))
(vector-float*! s4-1 s4-1 f30-0)
)
)
(else
(set! s4-1 *null-vector*)
)
)
(else
(set! s4-1 *null-vector*)
)
)
s4-1
)
(else
*null-vector*
)
s4-1
)
(else
*null-vector*
)
)
)
@@ -2079,8 +2060,8 @@
(set! v1-0 (-> self entity))
)
(if arg1
(set! (-> gp-0 quad) (-> arg1 quad))
(set! (-> gp-0 quad) (-> v1-0 extra trans quad))
(vector-copy! gp-0 arg1)
(vector-copy! gp-0 (-> v1-0 extra trans))
)
(let ((s5-0 (-> v1-0 extra perm task))
(s4-0 (new 'static 'fact-info))
+32 -42
View File
@@ -1215,49 +1215,39 @@
'trans-hook
(lambda :behavior target
()
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
(let* ((v1-0 (-> self parent))
(gp-0 (if v1-0
(the-as target (-> v1-0 0 self))
)
)
)
(init-vf0-vector)
(let ((gp-0 (ppointer->process (-> self parent))))
(vector-copy! (-> self control trans) (-> (the-as target gp-0) flut flut-trans))
(let ((v1-5 (-> (the-as target gp-0) flut flut-quat quad)))
(set! (-> self control quat quad) v1-5)
)
(vector-copy! (-> self control scale) (-> (the-as target gp-0) flut flut-scale))
(set! (-> self control ground-pat material)
(the-as int (-> (the-as target gp-0) control ground-pat material))
)
(set! (-> self draw light-index) (-> (the-as target gp-0) draw light-index))
(let ((t9-0 flut-color-from-index)
(v1-14 (-> self parent))
)
(t9-0 (-> (the-as target (if v1-14
(the-as target (-> v1-14 0 self))
)
)
flut
color-index
)
)
)
(let ((v1-18 (-> self draw color-mult)))
(let ((a0-19 (-> self draw color-mult))
(a1-1 (-> (the-as target gp-0) draw color-mult))
)
(.lvf vf4 (&-> a0-19 quad))
(.lvf vf5 (&-> a1-1 quad))
(vector-copy! (-> self control trans) (-> gp-0 flut flut-trans))
(let ((v1-5 (-> gp-0 flut flut-quat quad)))
(set! (-> self control quat quad) v1-5)
)
(vector-copy! (-> self control scale) (-> gp-0 flut flut-scale))
(set! (-> self control ground-pat material) (the-as int (-> gp-0 control ground-pat material)))
(set! (-> self draw light-index) (-> gp-0 draw light-index))
(let ((t9-0 flut-color-from-index)
(v1-14 (-> self parent))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> v1-18 quad) vf6)
)
(let ((v0-1 (-> (the-as target gp-0) draw color-emissive quad)))
(set! (-> self draw color-emissive quad) v0-1)
v0-1
)
(t9-0 (-> (the-as target (if v1-14
(the-as target (-> v1-14 0 self))
)
)
flut
color-index
)
)
)
(vector*!
(the-as vector (-> self draw color-mult))
(the-as vector (-> self draw color-mult))
(the-as vector (-> gp-0 draw color-mult))
)
(let ((v0-1 (-> gp-0 draw color-emissive quad)))
(set! (-> self draw color-emissive quad) v0-1)
v0-1
)
)
)
@@ -2774,7 +2764,7 @@
)
(when gp-0
(quaternion-copy! (-> gp-0 root quat) (-> (the-as target self) control quat-for-control))
(set! (-> gp-0 root trans quad) (-> (the-as target self) control trans quad))
(vector-copy! (-> gp-0 root trans) (-> (the-as target self) control trans))
(let ((s5-1 (the-as target self)))
;; og:preserve-this
(set! self (the target gp-0))