diff --git a/decompiler/IR2/AtomicOp.cpp b/decompiler/IR2/AtomicOp.cpp index caccad8be3..43674b72bb 100644 --- a/decompiler/IR2/AtomicOp.cpp +++ b/decompiler/IR2/AtomicOp.cpp @@ -353,6 +353,8 @@ std::string get_simple_expression_op_name(SimpleExpression::Kind kind) { return "pcypld"; case SimpleExpression::Kind::VECTOR_PLUS: return "vector+!2"; + case SimpleExpression::Kind::VECTOR_XYZ_PRODUCT: + return "vector-xyz-product!"; case SimpleExpression::Kind::VECTOR_MINUS: return "vector-!2"; case SimpleExpression::Kind::VECTOR_FLOAT_PRODUCT: @@ -427,6 +429,7 @@ int get_simple_expression_arg_count(SimpleExpression::Kind kind) { case SimpleExpression::Kind::VECTOR_MINUS: case SimpleExpression::Kind::VECTOR_FLOAT_PRODUCT: case SimpleExpression::Kind::VECTOR_CROSS: + case SimpleExpression::Kind::VECTOR_XYZ_PRODUCT: return 3; case SimpleExpression::Kind::SUBU_L32_S7: return 1; diff --git a/decompiler/IR2/AtomicOp.h b/decompiler/IR2/AtomicOp.h index 93d5b5bd8c..5d610d115b 100644 --- a/decompiler/IR2/AtomicOp.h +++ b/decompiler/IR2/AtomicOp.h @@ -256,6 +256,7 @@ class SimpleExpression { VECTOR_PLUS, VECTOR_MINUS, VECTOR_FLOAT_PRODUCT, + VECTOR_XYZ_PRODUCT, // vector*!, elementwise xyz, jak3 only VECTOR_CROSS, SUBU_L32_S7, // use SUBU X, src0, s7 to check if lower 32-bits are s7. VECTOR_3_DOT, diff --git a/decompiler/IR2/AtomicOpTypeAnalysis.cpp b/decompiler/IR2/AtomicOpTypeAnalysis.cpp index 5b7de34ccf..927a91fd22 100644 --- a/decompiler/IR2/AtomicOpTypeAnalysis.cpp +++ b/decompiler/IR2/AtomicOpTypeAnalysis.cpp @@ -238,6 +238,7 @@ TP_Type SimpleExpression::get_type(const TypeState& input, case Kind::VECTOR_PLUS: case Kind::VECTOR_MINUS: case Kind::VECTOR_CROSS: + case Kind::VECTOR_XYZ_PRODUCT: return TP_Type::make_from_ts("vector"); case Kind::VECTOR_FLOAT_PRODUCT: return TP_Type::make_from_ts("vector"); diff --git a/decompiler/IR2/Form.cpp b/decompiler/IR2/Form.cpp index 49b90c5ca6..82b0b06427 100644 --- a/decompiler/IR2/Form.cpp +++ b/decompiler/IR2/Form.cpp @@ -1858,6 +1858,8 @@ std::string fixed_operator_to_string(FixedOperatorKind kind) { return "vector-!"; case FixedOperatorKind::VECTOR_PLUS: return "vector+!"; + case FixedOperatorKind::VECTOR_XYZ_PRODUCT: + return "vector*!"; case FixedOperatorKind::VECTOR_CROSS: return "vector-cross!"; case FixedOperatorKind::VECTOR_FLOAT_PRODUCT: diff --git a/decompiler/IR2/FormExpressionAnalysis.cpp b/decompiler/IR2/FormExpressionAnalysis.cpp index e16f9c9c91..d9cc82f9d2 100644 --- a/decompiler/IR2/FormExpressionAnalysis.cpp +++ b/decompiler/IR2/FormExpressionAnalysis.cpp @@ -2527,6 +2527,10 @@ void SimpleExpressionElement::update_from_stack(const Env& env, update_from_stack_vector_plus_minus_cross(FixedOperatorKind::VECTOR_CROSS, env, pool, stack, result, allow_side_effects); break; + case SimpleExpression::Kind::VECTOR_XYZ_PRODUCT: + update_from_stack_vector_plus_minus_cross(FixedOperatorKind::VECTOR_XYZ_PRODUCT, env, pool, + stack, result, allow_side_effects); + break; case SimpleExpression::Kind::VECTOR_FLOAT_PRODUCT: update_from_stack_vector_float_product(env, pool, stack, result, allow_side_effects); break; diff --git a/decompiler/IR2/IR2_common.h b/decompiler/IR2/IR2_common.h index 464ddfee51..2c01d37acd 100644 --- a/decompiler/IR2/IR2_common.h +++ b/decompiler/IR2/IR2_common.h @@ -162,6 +162,7 @@ enum class FixedOperatorKind { VECTOR_MINUS, VECTOR_CROSS, VECTOR_FLOAT_PRODUCT, + VECTOR_XYZ_PRODUCT, L32_NOT_FALSE_CBOOL, VECTOR_3_DOT, PROCESS_TO_PPOINTER, diff --git a/decompiler/analysis/atomic_op_builder.cpp b/decompiler/analysis/atomic_op_builder.cpp index b4a87ad536..d5d357d7da 100644 --- a/decompiler/analysis/atomic_op_builder.cpp +++ b/decompiler/analysis/atomic_op_builder.cpp @@ -1689,6 +1689,62 @@ std::unique_ptr convert_vector_plus(const Instruction& i0, idx); } +std::unique_ptr convert_vector_xyz_product(const Instruction& i0, + const Instruction& i1, + const Instruction& i2, + const Instruction& i3, + const Instruction& i4, + int idx) { + /* + lqc2 vf4, 0(a1) + lqc2 vf5, 0(a2) + vaddx.w vf6, vf0, vf0 + vmul.xyz vf6, vf4, vf5 + sqc2 vf6, 0(a0) + */ + + // lqc2 vf4, 0(a1) (src1) + if (i0.kind != InstructionKind::LQC2 || i0.get_dst(0).get_reg() != make_vf(4) || + !i0.get_src(0).is_imm(0)) { + return nullptr; + } + Register src1 = i0.get_src(1).get_reg(); + + // lqc2 vf5, 0(a2) (src2) + if (i1.kind != InstructionKind::LQC2 || i1.get_dst(0).get_reg() != make_vf(5) || + !i1.get_src(0).is_imm(0)) { + return nullptr; + } + Register src2 = i1.get_src(1).get_reg(); + + // vaddx.w vf6, vf0, vf0 + if (i2.kind != InstructionKind::VADD_BC || i2.get_dst(0).get_reg() != make_vf(6) || + i2.get_src(0).get_reg() != make_vf(0) || i2.get_src(1).get_reg() != make_vf(0) || + i2.cop2_dest != 1 || i2.cop2_bc != 0) { + return nullptr; + } + + // vmul.xyz vf6, vf4, vf5 + if (i3.kind != InstructionKind::VMUL || i3.get_dst(0).get_reg() != make_vf(6) || + i3.get_src(0).get_reg() != make_vf(4) || i3.get_src(1).get_reg() != make_vf(5) || + i3.cop2_dest != 14) { + return nullptr; + } + + // sqc2 vf6, 0(a0) (dst) + if (i4.kind != InstructionKind::SQC2 || i4.get_src(0).get_reg() != make_vf(6) || + !i4.get_src(1).is_imm(0)) { + return nullptr; + } + Register dst = i4.get_src(2).get_reg(); + + return std::make_unique( + make_dst_var(dst, idx), + SimpleExpression(SimpleExpression::Kind::VECTOR_XYZ_PRODUCT, make_src_atom(dst, idx), + make_src_atom(src1, idx), make_src_atom(src2, idx)), + idx); +} + std::unique_ptr convert_vector_minus(const Instruction& i0, const Instruction& i1, const Instruction& i2, @@ -1819,6 +1875,11 @@ std::unique_ptr convert_5(const Instruction& i0, return as_vector_plus; } + auto as_vector_xyz = convert_vector_xyz_product(i0, i1, i2, i3, i4, idx); + if (as_vector_xyz) { + return as_vector_xyz; + } + auto as_vector_minus = convert_vector_minus(i0, i1, i2, i3, i4, idx); if (as_vector_minus) { return as_vector_minus; diff --git a/decompiler/config/jak3/ntsc_v1/type_casts.jsonc b/decompiler/config/jak3/ntsc_v1/type_casts.jsonc index ab158e4a66..f1ee060121 100644 --- a/decompiler/config/jak3/ntsc_v1/type_casts.jsonc +++ b/decompiler/config/jak3/ntsc_v1/type_casts.jsonc @@ -4918,14 +4918,8 @@ [96, "s5", "collide-shape-moving"] ], "(anon-function 74 target-flut)": [ - [6, "gp", "target"], - [10, "gp", "target"], - [16, "gp", "target"], - [24, "gp", "target"], - [33, "gp", "target"], - [42, "a0", "target"], - [49, "gp", "target"], - [56, "gp", "target"] + [[0, 56], "gp", "target"], + [42, "a0", "target"] ], "(anon-function 21 target-flut)": [[58, "v1", "art-joint-anim"]], "(code target-flut-death)": [ diff --git a/decompiler/config/jak3/ntsc_v1/var_names.jsonc b/decompiler/config/jak3/ntsc_v1/var_names.jsonc index 4ff26b14e0..6814b04651 100644 --- a/decompiler/config/jak3/ntsc_v1/var_names.jsonc +++ b/decompiler/config/jak3/ntsc_v1/var_names.jsonc @@ -173,6 +173,18 @@ "(method 9 process-tree)": { "args": ["this", "active-tree", "name", "stack-pointer"] }, + "(method 9 align-control)": { + "vars": { + "s5-0":"num-chans", + "s4-0":"chan-idx", + "a0-4":"chan", + "v1-7":"frame-group", + "a0-9":"root-chan", + "v1-18":"root-frame-group", + "f0-0":"root-frame-num", + "a0-10":"disable?" + } + }, "(method 9 process)": { "args": ["this", "active-tree", "name", "stack-pointer"] }, diff --git a/decompiler/types2/ForwardProp.cpp b/decompiler/types2/ForwardProp.cpp index f2c324eb34..bb0ec3cd20 100644 --- a/decompiler/types2/ForwardProp.cpp +++ b/decompiler/types2/ForwardProp.cpp @@ -1616,6 +1616,7 @@ void types2_for_expr(types2::Type& type_out, case SimpleExpression::Kind::VECTOR_CROSS: case SimpleExpression::Kind::VECTOR_MINUS: case SimpleExpression::Kind::VECTOR_PLUS: + case SimpleExpression::Kind::VECTOR_XYZ_PRODUCT: types2_for_vector_in_and_out(type_out, expr, input_types, dts, extras); break; case SimpleExpression::Kind::VECTOR_FLOAT_PRODUCT: diff --git a/goal_src/jak2/engine/anim/aligner.gc b/goal_src/jak2/engine/anim/aligner.gc index 111177c67c..12d8494378 100644 --- a/goal_src/jak2/engine/anim/aligner.gc +++ b/goal_src/jak2/engine/anim/aligner.gc @@ -13,121 +13,107 @@ ;; 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") - ;; og:preserve-this - (abandon-thread) - 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") + ;; 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)) - (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.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 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) ) ;; WARN: Return type mismatch (inline-array transform) vs transform. @@ -143,10 +129,10 @@ (defmethod align! ((this align-control) (options align-opts) (x float) (y float) (z float)) "As long as [[align-flags::0]] is not set call [[process-drawable::16]] on the process being controlled -using the arguments passed to construct a [[vector]] - <`x`, `y`, `z`, 1.0> + using the arguments passed to construct a [[vector]] - <`x`, `y`, `z`, 1.0> -@returns the `root` of the [[process-drawable]] after the method returns -@see [[process-drawable::16]]" + @returns the `root` of the [[process-drawable]] after the method returns + @see [[process-drawable::16]]" (when (not (logtest? (-> this flags) (align-flags disabled))) (let* ((process (-> this process)) (method-call (method-of-object process apply-alignment)) diff --git a/goal_src/jak2/engine/anim/joint-mod-h.gc b/goal_src/jak2/engine/anim/joint-mod-h.gc index 36e26f022c..1a9f4d7773 100644 --- a/goal_src/jak2/engine/anim/joint-mod-h.gc +++ b/goal_src/jak2/engine/anim/joint-mod-h.gc @@ -60,6 +60,8 @@ ;; DECOMP BEGINS (deftype joint-mod (basic) + "Utility to modify a joint transform from code, rather than just getting it from animation. +This is used to make jak look toward an enemy, for example." ((mode joint-mod-mode) (process process-drawable) (joint cspace) @@ -119,13 +121,15 @@ ) -(defun-debug joint-mod-debug-draw ((arg0 joint-mod)) - (add-debug-matrix #t (bucket-id debug-no-zbuf1) (-> arg0 joint bone transform) (meters 2)) +(defun-debug joint-mod-debug-draw ((jmod joint-mod)) + "Debug draw the bone transform for the associated bone of a joint-mod" + (add-debug-matrix #t (bucket-id debug-no-zbuf1) (-> jmod joint bone transform) (meters 2)) 0 (none) ) (defmethod reset-blend! ((this joint-mod)) + "Set the blend to 0." (set! (-> this blend) 0.0) this ) @@ -196,6 +200,7 @@ ) (deftype joint-mod-set-local (basic) + "Override the trans, quat, and scale of the joint transform. The component to override is selected by the flag." ((transform transformq :inline) (set-rotation symbol) (set-scale symbol) @@ -209,6 +214,7 @@ (defun joint-mod-set-local-callback ((arg0 cspace) (arg1 transformq)) + "Callback for joint-mod-rotate-local. See comment on that type." (let ((v1-0 (the-as joint-mod-set-local (-> arg0 param1)))) (cond ((-> v1-0 enable) @@ -256,6 +262,8 @@ ) (deftype joint-mod-add-local (basic) + "Add to the trans, rotate the quat, and multiply the scale of the joint transform. The components can be selected by the flag. +Unlike jak 2, this actually multiplies the scale, instead of adding." ((transform transformq :inline) (add-rotation symbol) (add-scale symbol) @@ -269,6 +277,7 @@ (defun joint-mod-add-local-callback ((arg0 cspace) (arg1 transformq)) + "Callback for joint-mod-add-local. See comment on that type." (let ((s4-0 (the-as joint-mod-add-local (-> arg0 param1)))) (when (-> s4-0 enable) (if (-> s4-0 add-translation) @@ -311,6 +320,8 @@ ) (deftype joint-mod-set-world (basic) + "Directly overwrite the _bone_ transform (ignoring the parent entirely). +This does not pay attention to the flags." ((transform transformq :inline) (node-index int32) (enable symbol) @@ -323,6 +334,7 @@ ;; WARN: Return type mismatch object vs none. (defun joint-mod-set-world-callback ((arg0 cspace) (arg1 transformq)) + "Callback for joint-mod-set-world. See comment on that type." (let ((v1-0 (the-as joint-mod-set-world (-> arg0 param1)))) (if (-> v1-0 enable) (cspace<-transformq! arg0 (-> v1-0 transform)) @@ -348,6 +360,8 @@ ) (deftype joint-mod-blend-local (basic) + "Blend the _joint_ transform between this transform and the animated one. +Then, apply the normal parented transform." ((transform transformq :inline) (blend-transform transformq :inline) (node-index int32) @@ -361,6 +375,7 @@ (defun joint-mod-blend-local-callback ((arg0 cspace) (arg1 transformq)) + "Callback for joint-mod-blend-local. See comment on that type." (let ((gp-0 (the-as joint-mod-blend-local (-> arg0 param1)))) (cond ((-> gp-0 enable) @@ -399,6 +414,7 @@ ) (deftype joint-mod-spinner (basic) + "Control a joint by just spinning it around an axis." ((spin-axis vector :inline) (angle float) (spin-rate float) @@ -410,29 +426,30 @@ ) -(defun joint-mod-spinner-callback ((arg0 cspace) (arg1 transformq)) - (let ((gp-0 (the-as joint-mod-spinner (-> arg0 param1)))) +(defun joint-mod-spinner-callback ((bone-cspace cspace) (joint-transform transformq)) + "cspace callback for joint-mod-spinner. Update the cspace's bone from the parent transformq, plus the rotation from this spinner." + (let ((gp-0 (the-as joint-mod-spinner (-> bone-cspace param1)))) (when (-> gp-0 enable) (let ((f30-0 (the float (sar (shl (the int (+ (-> gp-0 angle) (* (-> gp-0 spin-rate) (seconds-per-frame)))) 48) 48)) ) ) - (quaternion-vector-angle! (-> arg1 quat) (-> gp-0 spin-axis) f30-0) + (quaternion-vector-angle! (-> joint-transform quat) (-> gp-0 spin-axis) f30-0) (set! (-> gp-0 angle) f30-0) ) ) ) - (cspace<-parented-transformq-joint! arg0 arg1) + (cspace<-parented-transformq-joint! bone-cspace joint-transform) (none) ) -(defmethod new joint-mod-spinner ((allocation symbol) (type-to-make type) (arg0 process-drawable) (arg1 int) (arg2 vector) (arg3 float)) +(defmethod new joint-mod-spinner ((allocation symbol) (type-to-make type) (proc process-drawable) (bone-idx int) (axis vector) (rate float)) (let ((v0-0 (object-new allocation type-to-make (the-as int (-> type-to-make size))))) - (set! (-> v0-0 spin-axis quad) (-> arg2 quad)) - (set! (-> v0-0 spin-rate) arg3) + (set! (-> v0-0 spin-axis quad) (-> axis quad)) + (set! (-> v0-0 spin-rate) rate) (set! (-> v0-0 enable) #t) (set! (-> v0-0 angle) 0.0) - (let ((a0-3 (-> arg0 node-list data arg1))) + (let ((a0-3 (-> proc node-list data bone-idx))) (set! (-> a0-3 param0) joint-mod-spinner-callback) (set! (-> a0-3 param1) v0-0) ) @@ -441,6 +458,7 @@ ) (deftype joint-mod-blend-world (basic) + "Blend the _bone_ transform between this one and the animated one." ((transform transformq :inline) (blend-transform transformq :inline) (blend-flags joint-mod-blend-flags) @@ -456,80 +474,66 @@ ;; WARN: Return type mismatch object vs none. (defun joint-mod-blend-world-callback ((arg0 cspace) (arg1 transformq)) - (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 (-> arg0 param1)))) - (cond - ((-> gp-0 enable) - (let ((f30-0 (if (logtest? (-> gp-0 blend-flags) (joint-mod-blend-flags trans)) - (-> gp-0 blend) - 0.0 - ) - ) - (f28-0 (if (logtest? (-> gp-0 blend-flags) (joint-mod-blend-flags scale)) - (-> gp-0 blend) - 0.0 - ) - ) - (f26-0 (if (logtest? (-> gp-0 blend-flags) (joint-mod-blend-flags rotation)) - (-> gp-0 blend) - 0.0 - ) - ) - (s0-0 (new 'stack-no-clear 'matrix)) - (s2-0 (new 'stack-no-clear 'matrix)) - (s3-0 (new 'stack-no-clear 'quaternion)) - ) - (let ((s1-0 (new 'stack-no-clear 'vector))) - (if (= (-> arg0 parent bone scale w) 0.0) - (matrix<-transformq! s0-0 arg1) - (matrix<-parented-transformq! s0-0 arg1 (-> arg0 parent bone scale)) - ) - (matrix*! s2-0 s0-0 (-> arg0 parent bone transform)) - (set-vector! - s1-0 - (vector-length (the-as vector (-> s2-0 vector))) - (vector-length (-> s2-0 vector 1)) - (vector-length (-> s2-0 vector 2)) - 1.0 - ) - (let ((v1-19 (-> gp-0 blend-transform scale))) - (let ((a0-11 (-> arg1 scale))) - (.lvf vf4 (&-> s1-0 quad)) - (.lvf vf5 (&-> a0-11 quad)) - ) - (.add.x.vf.w vf6 vf0 vf0) - (.mul.vf.xyz vf6 vf4 vf5) - (.svf (&-> v1-19 quad) vf6) - ) + "Callback for joint-mod-blend-local. See comment on that type." + (let ((gp-0 (the-as joint-mod-blend-world (-> arg0 param1)))) + (cond + ((-> gp-0 enable) + (let ((f30-0 (if (logtest? (-> gp-0 blend-flags) (joint-mod-blend-flags trans)) + (-> gp-0 blend) + 0.0 + ) + ) + (f28-0 (if (logtest? (-> gp-0 blend-flags) (joint-mod-blend-flags scale)) + (-> gp-0 blend) + 0.0 + ) + ) + (f26-0 (if (logtest? (-> gp-0 blend-flags) (joint-mod-blend-flags rotation)) + (-> gp-0 blend) + 0.0 + ) + ) + (s0-0 (new 'stack-no-clear 'matrix)) + (s2-0 (new 'stack-no-clear 'matrix)) + (s3-0 (new 'stack-no-clear 'quaternion)) ) - (vector-lerp! - (the-as vector (-> gp-0 blend-transform)) - (-> s2-0 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) f28-0) - (quaternion-slerp! - (-> gp-0 blend-transform quat) - (matrix->quaternion s3-0 s2-0) - (-> gp-0 transform quat) - f26-0 + (let ((s1-0 (new 'stack-no-clear 'vector))) + (if (= (-> arg0 parent bone scale w) 0.0) + (matrix<-transformq! s0-0 arg1) + (matrix<-parented-transformq! s0-0 arg1 (-> arg0 parent bone scale)) + ) + (matrix*! s2-0 s0-0 (-> arg0 parent bone transform)) + (set-vector! + s1-0 + (vector-length (the-as vector (-> s2-0 vector))) + (vector-length (-> s2-0 vector 1)) + (vector-length (-> s2-0 vector 2)) + 1.0 ) + (vector*! (-> gp-0 blend-transform scale) s1-0 (-> arg1 scale)) + ) + (vector-lerp! + (the-as vector (-> gp-0 blend-transform)) + (-> s2-0 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) f28-0) + (quaternion-slerp! + (-> gp-0 blend-transform quat) + (matrix->quaternion s3-0 s2-0) + (-> gp-0 transform quat) + f26-0 ) - (cspace<-transformq! arg0 (-> gp-0 blend-transform)) ) - (else - (cspace<-parented-transformq-joint! arg0 arg1) - ) + (cspace<-transformq! arg0 (-> gp-0 blend-transform)) + ) + (else + (cspace<-parented-transformq-joint! arg0 arg1) ) ) - (none) ) + (none) ) (defmethod new joint-mod-blend-world ((allocation symbol) (type-to-make type) (arg0 process-drawable) (arg1 int) (arg2 symbol) (arg3 float)) @@ -559,6 +563,7 @@ (defun joint-mod-rotate-local-callback ((arg0 cspace) (arg1 transformq)) + "Apply an additional rotation to the transform (left side quaternion multiplication" (let ((v1-0 (the-as joint-mod-rotate-local (-> arg0 param1)))) (new 'stack-no-clear 'vector) (if (-> v1-0 enable) diff --git a/goal_src/jak2/engine/anim/joint-mod.gc b/goal_src/jak2/engine/anim/joint-mod.gc index adbde517a7..464ba76cfd 100644 --- a/goal_src/jak2/engine/anim/joint-mod.gc +++ b/goal_src/jak2/engine/anim/joint-mod.gc @@ -303,10 +303,10 @@ ) ) -(defmethod new joint-mod-ik ((allocation symbol) (type-to-make type) (arg0 process-drawable) (arg1 int) (arg2 float)) +(defmethod new joint-mod-ik ((allocation symbol) (type-to-make type) (proc process-drawable) (joint-id int) (hand-dist float)) (let ((v0-0 (object-new allocation type-to-make (the-as int (-> type-to-make size))))) - (set! (-> v0-0 process) arg0) - (set! (-> v0-0 hand-dist) arg2) + (set! (-> v0-0 process) proc) + (set! (-> v0-0 hand-dist) hand-dist) (set! (-> v0-0 elbow-pole-vector-axis) (the-as uint 0)) (logclear! (-> v0-0 flags) (joint-mod-ik-flags elbow-trans-neg)) (set! (-> v0-0 elbow-rotation-axis) (the-as uint 2)) @@ -314,10 +314,10 @@ (set! (-> v0-0 callback) #f) (set! (-> v0-0 blend) 0.0) (logclear! (-> v0-0 flags) (joint-mod-ik-flags enable)) - (let ((a0-5 (-> arg0 node-list data arg1))) + (let ((a0-5 (-> proc node-list data joint-id))) (set! (-> a0-5 param0) joint-mod-ik-callback) (set! (-> a0-5 param1) v0-0) - (set! (-> a0-5 param2) (the-as basic arg1)) + (set! (-> a0-5 param2) (the-as basic joint-id)) ) v0-0 ) @@ -329,8 +329,8 @@ (none) ) -(defmethod enable-set! ((this joint-mod-ik) (arg0 symbol)) - (if arg0 +(defmethod enable-set! ((this joint-mod-ik) (enable symbol)) + (if enable (logior! (-> this flags) (joint-mod-ik-flags enable)) (logclear! (-> this flags) (joint-mod-ik-flags enable)) ) @@ -348,103 +348,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) ) @@ -452,55 +401,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 vector 1)) - (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 vector 1)) + (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)) @@ -703,40 +686,40 @@ (none) ) -(defmethod twist-set! ((this joint-mod) (arg0 float) (arg1 float) (arg2 float)) - (if arg0 - (set! (-> this twist x) arg0) +(defmethod twist-set! ((this joint-mod) (x float) (y float) (z float)) + (if x + (set! (-> this twist x) x) ) - (if arg1 - (set! (-> this twist y) arg1) + (if y + (set! (-> this twist y) y) ) - (if arg2 - (set! (-> this twist z) arg2) + (if z + (set! (-> this twist z) z) ) (-> this twist) ) -(defmethod trs-set! ((this joint-mod) (arg0 vector) (arg1 quaternion) (arg2 vector)) - (if arg0 - (set! (-> this trans quad) (-> arg0 quad)) +(defmethod trs-set! ((this joint-mod) (trans vector) (quat quaternion) (scale vector)) + (if trans + (set! (-> this trans quad) (-> trans quad)) ) - (if arg1 - (quaternion-copy! (-> this quat) arg1) + (if quat + (quaternion-copy! (-> this quat) quat) ) - (if arg2 - (set! (-> this scale quad) (-> arg2 quad)) + (if scale + (set! (-> this scale quad) (-> scale quad)) ) 0 (none) ) -(defmethod target-set! ((this joint-mod) (arg0 vector)) +(defmethod target-set! ((this joint-mod) (pos vector)) (if (= (-> this mode) (joint-mod-mode reset)) (mode-set! this (joint-mod-mode look-at)) ) - (let ((f0-0 (vector-vector-distance (-> this process root trans) arg0))) + (let ((f0-0 (vector-vector-distance (-> this process root trans) pos))) (set! (-> this shutting-down?) #f) - (set! (-> this target quad) (-> arg0 quad)) + (set! (-> this target quad) (-> pos quad)) (if (< f0-0 (-> this max-dist)) (set! (-> this blend) 1.0) (set! (-> this blend) 0.0) @@ -1225,112 +1208,78 @@ ) (defbehavior joint-mod-rotate-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)))) - (let ((s3-0 (new 'static 'inline-array quaternion 3 - (new 'static 'quaternion :x 1.0 :w 1.0) - (new 'static 'quaternion :y 1.0 :w 1.0) - (new 'static 'quaternion :z 1.0 :w 1.0) - ) + (let ((s5-0 (the-as joint-mod (-> arg0 param1)))) + (let ((s3-0 (new 'static 'inline-array quaternion 3 + (new 'static 'quaternion :x 1.0 :w 1.0) + (new 'static 'quaternion :y 1.0 :w 1.0) + (new 'static 'quaternion :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)) - (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)) @@ -1434,40 +1383,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)) diff --git a/goal_src/jak2/levels/palace/cable/palcab-obs.gc b/goal_src/jak2/levels/palace/cable/palcab-obs.gc index d4824d4643..581d1f0aba 100644 --- a/goal_src/jak2/levels/palace/cable/palcab-obs.gc +++ b/goal_src/jak2/levels/palace/cable/palcab-obs.gc @@ -116,75 +116,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.w vf6 vf0 vf0) - (.mul.vf.xyz vf6 vf4 vf5) - (.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) ) ) diff --git a/goal_src/jak3/engine/anim/aligner.gc b/goal_src/jak3/engine/anim/aligner.gc index fc6751bd29..cb96fe6adc 100644 --- a/goal_src/jak3/engine/anim/aligner.gc +++ b/goal_src/jak3/engine/anim/aligner.gc @@ -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. diff --git a/goal_src/jak3/engine/anim/joint-mod-h.gc b/goal_src/jak3/engine/anim/joint-mod-h.gc index 077817132e..e5a1f120f6 100644 --- a/goal_src/jak3/engine/anim/joint-mod-h.gc +++ b/goal_src/jak3/engine/anim/joint-mod-h.gc @@ -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)) diff --git a/goal_src/jak3/engine/anim/joint-mod.gc b/goal_src/jak3/engine/anim/joint-mod.gc index 3d40b4dd1c..5157f4e217 100644 --- a/goal_src/jak3/engine/anim/joint-mod.gc +++ b/goal_src/jak3/engine/anim/joint-mod.gc @@ -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)) diff --git a/goal_src/jak3/engine/physics/ragdoll.gc b/goal_src/jak3/engine/physics/ragdoll.gc index e24fa2bd65..aadb897650 100644 --- a/goal_src/jak3/engine/physics/ragdoll.gc +++ b/goal_src/jak3/engine/physics/ragdoll.gc @@ -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)) ) diff --git a/goal_src/jak3/engine/process-drawable/process-drawable.gc b/goal_src/jak3/engine/process-drawable/process-drawable.gc index 59aa0f6101..27565abb8f 100644 --- a/goal_src/jak3/engine/process-drawable/process-drawable.gc +++ b/goal_src/jak3/engine/process-drawable/process-drawable.gc @@ -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)) diff --git a/goal_src/jak3/engine/target/flut/target-flut.gc b/goal_src/jak3/engine/target/flut/target-flut.gc index 258d16b434..96b18abbbe 100644 --- a/goal_src/jak3/engine/target/flut/target-flut.gc +++ b/goal_src/jak3/engine/target/flut/target-flut.gc @@ -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)) diff --git a/goal_src/jak3/levels/temple/temple-mood.gc b/goal_src/jak3/levels/temple/temple-mood.gc index 1add65e047..eb209bb72c 100644 --- a/goal_src/jak3/levels/temple/temple-mood.gc +++ b/goal_src/jak3/levels/temple/temple-mood.gc @@ -177,66 +177,43 @@ ;; WARN: Return type mismatch float vs none. (defun update-templed-lights ((arg0 mood-context)) - (rlet ((vf0 :class vf) - (vf4 :class vf) - (vf5 :class vf) - (vf6 :class vf) - ) - (init-vf0-vector) - (let ((v1-0 (-> arg0 current-fog))) - (set-vector! (-> v1-0 fog-color) 0.0 44.7999 57.5999 1.0) - (set-vector! (-> v1-0 fog-dists) 131072.0 1843200.0 255.0 128.0) - (set-vector! (-> v1-0 erase-color) 0.0 0.0 0.0 128.0) - ) - (let ((s5-0 (-> arg0 light-group 1))) - (mem-copy! (the-as pointer s5-0) (the-as pointer (-> *level* level-default mood-context light-group)) 192) - (set! (-> s5-0 ambi extra x) 0.8) - ) - (let ((s5-1 (-> arg0 light-group 2))) - (let ((s4-0 (new 'static 'vector :x 1.0 :y 0.65 :z 0.4 :w 1.0))) - (mem-copy! (the-as pointer s5-1) (the-as pointer (-> *level* level-default mood-context light-group)) 192) - (let ((a1-11 (-> s5-1 dir0 color))) - (let ((v1-6 (-> s5-1 dir0 color)) - (a0-6 s4-0) - ) - (.lvf vf4 (&-> v1-6 quad)) - (.lvf vf5 (&-> a0-6 quad)) - ) - (.add.x.vf.w vf6 vf0 vf0) - (.mul.vf.xyz vf6 vf4 vf5) - (.svf (&-> a1-11 quad) vf6) - ) - (let ((a0-7 (-> s5-1 dir1 color))) - (.lvf vf4 (&-> (-> s5-1 dir1 color) quad)) - (.lvf vf5 (&-> s4-0 quad)) - (.add.x.vf.w vf6 vf0 vf0) - (.mul.vf.xyz vf6 vf4 vf5) - (.svf (&-> a0-7 quad) vf6) - ) - ) - (set! (-> s5-1 ambi extra x) 0.8) - ) - (let ((v1-10 (-> arg0 light-group 3))) - (vector-float*! (the-as vector (-> v1-10 ambi color)) (the-as vector (-> arg0 times)) 0.55) - (vector+! - (the-as vector (-> v1-10 ambi color)) - (the-as vector (-> v1-10 ambi color)) - (new 'static 'vector :x 0.4253 :y 0.39 :z 0.45 :w 1.0) - ) - (set! (-> v1-10 dir0 color quad) (-> arg0 times 0 quad)) - (let ((a0-12 (-> v1-10 dir0))) - (set! (-> a0-12 direction x) 0.0) - (set! (-> a0-12 direction y) 1.0) - (set! (-> a0-12 direction z) 0.0) - (set! (-> a0-12 direction w) 0.0) - ) - (set! (-> v1-10 ambi extra x) 0.8) - (set! (-> v1-10 dir0 extra x) 0.8) - (set! (-> v1-10 dir1 extra x) 0.0) - (set! (-> v1-10 dir2 extra x) 0.0) - ) - (none) + (let ((v1-0 (-> arg0 current-fog))) + (set-vector! (-> v1-0 fog-color) 0.0 44.7999 57.5999 1.0) + (set-vector! (-> v1-0 fog-dists) 131072.0 1843200.0 255.0 128.0) + (set-vector! (-> v1-0 erase-color) 0.0 0.0 0.0 128.0) ) + (let ((s5-0 (-> arg0 light-group 1))) + (mem-copy! (the-as pointer s5-0) (the-as pointer (-> *level* level-default mood-context light-group)) 192) + (set! (-> s5-0 ambi extra x) 0.8) + ) + (let ((s5-1 (-> arg0 light-group 2))) + (let ((s4-0 (new 'static 'vector :x 1.0 :y 0.65 :z 0.4 :w 1.0))) + (mem-copy! (the-as pointer s5-1) (the-as pointer (-> *level* level-default mood-context light-group)) 192) + (vector*! (the-as vector (-> s5-1 dir0 color)) (the-as vector (-> s5-1 dir0 color)) s4-0) + (vector*! (the-as vector (-> s5-1 dir1 color)) (the-as vector (-> s5-1 dir1 color)) s4-0) + ) + (set! (-> s5-1 ambi extra x) 0.8) + ) + (let ((v1-10 (-> arg0 light-group 3))) + (vector-float*! (the-as vector (-> v1-10 ambi color)) (the-as vector (-> arg0 times)) 0.55) + (vector+! + (the-as vector (-> v1-10 ambi color)) + (the-as vector (-> v1-10 ambi color)) + (new 'static 'vector :x 0.4253 :y 0.39 :z 0.45 :w 1.0) + ) + (set! (-> v1-10 dir0 color quad) (-> arg0 times 0 quad)) + (let ((a0-13 (-> v1-10 dir0))) + (set! (-> a0-13 direction x) 0.0) + (set! (-> a0-13 direction y) 1.0) + (set! (-> a0-13 direction z) 0.0) + (set! (-> a0-13 direction w) 0.0) + ) + (set! (-> v1-10 ambi extra x) 0.8) + (set! (-> v1-10 dir0 extra x) 0.8) + (set! (-> v1-10 dir1 extra x) 0.0) + (set! (-> v1-10 dir2 extra x) 0.0) + ) + (none) ) (defun init-mood-templed ((arg0 mood-context)) diff --git a/goal_src/jak3/levels/temple/templex-mood.gc b/goal_src/jak3/levels/temple/templex-mood.gc index df3346ccf4..ec161d4fa2 100644 --- a/goal_src/jak3/levels/temple/templex-mood.gc +++ b/goal_src/jak3/levels/temple/templex-mood.gc @@ -16,66 +16,43 @@ ;; WARN: Return type mismatch float vs none. (defun update-templex-lights ((arg0 mood-context)) - (rlet ((vf0 :class vf) - (vf4 :class vf) - (vf5 :class vf) - (vf6 :class vf) - ) - (init-vf0-vector) - (let ((v1-0 (-> arg0 current-fog))) - (set-vector! (-> v1-0 fog-color) 0.0 44.7999 57.5999 1.0) - (set-vector! (-> v1-0 fog-dists) 131072.0 1843200.0 255.0 128.0) - (set-vector! (-> v1-0 erase-color) 0.0 0.0 0.0 128.0) - ) - (let ((s5-0 (-> arg0 light-group 1))) - (mem-copy! (the-as pointer s5-0) (the-as pointer (-> *level* level-default mood-context light-group)) 192) - (set! (-> s5-0 ambi extra x) 0.8) - ) - (let ((s5-1 (-> arg0 light-group 2))) - (let ((s4-0 (new 'static 'vector :x 1.0 :y 0.65 :z 0.4 :w 1.0))) - (mem-copy! (the-as pointer s5-1) (the-as pointer (-> *level* level-default mood-context light-group)) 192) - (let ((a1-11 (-> s5-1 dir0 color))) - (let ((v1-6 (-> s5-1 dir0 color)) - (a0-6 s4-0) - ) - (.lvf vf4 (&-> v1-6 quad)) - (.lvf vf5 (&-> a0-6 quad)) - ) - (.add.x.vf.w vf6 vf0 vf0) - (.mul.vf.xyz vf6 vf4 vf5) - (.svf (&-> a1-11 quad) vf6) - ) - (let ((a0-7 (-> s5-1 dir1 color))) - (.lvf vf4 (&-> (-> s5-1 dir1 color) quad)) - (.lvf vf5 (&-> s4-0 quad)) - (.add.x.vf.w vf6 vf0 vf0) - (.mul.vf.xyz vf6 vf4 vf5) - (.svf (&-> a0-7 quad) vf6) - ) - ) - (set! (-> s5-1 ambi extra x) 0.8) - ) - (let ((v1-10 (-> arg0 light-group 3))) - (vector-float*! (the-as vector (-> v1-10 ambi color)) (the-as vector (-> arg0 times)) 0.55) - (vector+! - (the-as vector (-> v1-10 ambi color)) - (the-as vector (-> v1-10 ambi color)) - (new 'static 'vector :x 0.4253 :y 0.39 :z 0.45 :w 1.0) - ) - (set! (-> v1-10 dir0 color quad) (-> arg0 times 0 quad)) - (let ((a0-12 (-> v1-10 dir0))) - (set! (-> a0-12 direction x) 0.0) - (set! (-> a0-12 direction y) 1.0) - (set! (-> a0-12 direction z) 0.0) - (set! (-> a0-12 direction w) 0.0) - ) - (set! (-> v1-10 ambi extra x) 0.8) - (set! (-> v1-10 dir0 extra x) 0.8) - (set! (-> v1-10 dir1 extra x) 0.0) - (set! (-> v1-10 dir2 extra x) 0.0) - ) - (none) + (let ((v1-0 (-> arg0 current-fog))) + (set-vector! (-> v1-0 fog-color) 0.0 44.7999 57.5999 1.0) + (set-vector! (-> v1-0 fog-dists) 131072.0 1843200.0 255.0 128.0) + (set-vector! (-> v1-0 erase-color) 0.0 0.0 0.0 128.0) ) + (let ((s5-0 (-> arg0 light-group 1))) + (mem-copy! (the-as pointer s5-0) (the-as pointer (-> *level* level-default mood-context light-group)) 192) + (set! (-> s5-0 ambi extra x) 0.8) + ) + (let ((s5-1 (-> arg0 light-group 2))) + (let ((s4-0 (new 'static 'vector :x 1.0 :y 0.65 :z 0.4 :w 1.0))) + (mem-copy! (the-as pointer s5-1) (the-as pointer (-> *level* level-default mood-context light-group)) 192) + (vector*! (the-as vector (-> s5-1 dir0 color)) (the-as vector (-> s5-1 dir0 color)) s4-0) + (vector*! (the-as vector (-> s5-1 dir1 color)) (the-as vector (-> s5-1 dir1 color)) s4-0) + ) + (set! (-> s5-1 ambi extra x) 0.8) + ) + (let ((v1-10 (-> arg0 light-group 3))) + (vector-float*! (the-as vector (-> v1-10 ambi color)) (the-as vector (-> arg0 times)) 0.55) + (vector+! + (the-as vector (-> v1-10 ambi color)) + (the-as vector (-> v1-10 ambi color)) + (new 'static 'vector :x 0.4253 :y 0.39 :z 0.45 :w 1.0) + ) + (set! (-> v1-10 dir0 color quad) (-> arg0 times 0 quad)) + (let ((a0-13 (-> v1-10 dir0))) + (set! (-> a0-13 direction x) 0.0) + (set! (-> a0-13 direction y) 1.0) + (set! (-> a0-13 direction z) 0.0) + (set! (-> a0-13 direction w) 0.0) + ) + (set! (-> v1-10 ambi extra x) 0.8) + (set! (-> v1-10 dir0 extra x) 0.8) + (set! (-> v1-10 dir1 extra x) 0.0) + (set! (-> v1-10 dir2 extra x) 0.0) + ) + (none) ) (defbehavior update-mood-templex time-of-day-proc ((arg0 mood-context) (arg1 float) (arg2 int)) diff --git a/test/decompiler/reference/jak1/engine/math/vector_REF.gc b/test/decompiler/reference/jak1/engine/math/vector_REF.gc index 037bca7a87..f5383c9291 100644 --- a/test/decompiler/reference/jak1/engine/math/vector_REF.gc +++ b/test/decompiler/reference/jak1/engine/math/vector_REF.gc @@ -25,19 +25,7 @@ ;; definition for function vector*! (defun vector*! ((arg0 vector) (arg1 vector) (arg2 vector)) - (rlet ((vf0 :class vf) - (vf4 :class vf) - (vf5 :class vf) - (vf6 :class vf) - ) - (init-vf0-vector) - (.lvf vf4 (&-> arg1 quad)) - (.lvf vf5 (&-> arg2 quad)) - (.add.x.vf vf6 vf0 vf0 :mask #b1000) - (.mul.vf vf6 vf4 vf5 :mask #b111) - (.svf (&-> arg0 quad) vf6) - arg0 - ) + (vector*! arg0 arg1 arg2) ) ;; definition for function vector+*! diff --git a/test/decompiler/reference/jak2/engine/anim/aligner_REF.gc b/test/decompiler/reference/jak2/engine/anim/aligner_REF.gc index 50b4aaf3e1..6fda6f9ee3 100644 --- a/test/decompiler/reference/jak2/engine/anim/aligner_REF.gc +++ b/test/decompiler/reference/jak2/engine/anim/aligner_REF.gc @@ -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 diff --git a/test/decompiler/reference/jak2/engine/anim/joint-mod-h_REF.gc b/test/decompiler/reference/jak2/engine/anim/joint-mod-h_REF.gc index b774843ee7..b12a9fedc9 100644 --- a/test/decompiler/reference/jak2/engine/anim/joint-mod-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/anim/joint-mod-h_REF.gc @@ -637,80 +637,65 @@ Then, apply the normal parented transform." ;; WARN: Return type mismatch object vs none. (defun joint-mod-blend-world-callback ((arg0 cspace) (arg1 transformq)) "Callback for joint-mod-blend-local. 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 (-> arg0 param1)))) - (cond - ((-> gp-0 enable) - (let ((f30-0 (if (logtest? (-> gp-0 blend-flags) (joint-mod-blend-flags trans)) - (-> gp-0 blend) - 0.0 - ) - ) - (f28-0 (if (logtest? (-> gp-0 blend-flags) (joint-mod-blend-flags scale)) - (-> gp-0 blend) - 0.0 - ) - ) - (f26-0 (if (logtest? (-> gp-0 blend-flags) (joint-mod-blend-flags rotation)) - (-> gp-0 blend) - 0.0 - ) - ) - (s0-0 (new 'stack-no-clear 'matrix)) - (s2-0 (new 'stack-no-clear 'matrix)) - (s3-0 (new 'stack-no-clear 'quaternion)) - ) - (let ((s1-0 (new 'stack-no-clear 'vector))) - (if (= (-> arg0 parent bone scale w) 0.0) - (matrix<-transformq! s0-0 arg1) - (matrix<-parented-transformq! s0-0 arg1 (-> arg0 parent bone scale)) - ) - (matrix*! s2-0 s0-0 (-> arg0 parent bone transform)) - (set-vector! - s1-0 - (vector-length (the-as vector (-> s2-0 vector))) - (vector-length (-> s2-0 vector 1)) - (vector-length (-> s2-0 vector 2)) - 1.0 - ) - (let ((v1-19 (-> gp-0 blend-transform scale))) - (let ((a0-11 (-> arg1 scale))) - (.lvf vf4 (&-> s1-0 quad)) - (.lvf vf5 (&-> a0-11 quad)) - ) - (.add.x.vf vf6 vf0 vf0 :mask #b1000) - (.mul.vf vf6 vf4 vf5 :mask #b111) - (.svf (&-> v1-19 quad) vf6) - ) + (let ((gp-0 (the-as joint-mod-blend-world (-> arg0 param1)))) + (cond + ((-> gp-0 enable) + (let ((f30-0 (if (logtest? (-> gp-0 blend-flags) (joint-mod-blend-flags trans)) + (-> gp-0 blend) + 0.0 + ) + ) + (f28-0 (if (logtest? (-> gp-0 blend-flags) (joint-mod-blend-flags scale)) + (-> gp-0 blend) + 0.0 + ) + ) + (f26-0 (if (logtest? (-> gp-0 blend-flags) (joint-mod-blend-flags rotation)) + (-> gp-0 blend) + 0.0 + ) + ) + (s0-0 (new 'stack-no-clear 'matrix)) + (s2-0 (new 'stack-no-clear 'matrix)) + (s3-0 (new 'stack-no-clear 'quaternion)) ) - (vector-lerp! - (the-as vector (-> gp-0 blend-transform)) - (-> s2-0 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) f28-0) - (quaternion-slerp! - (-> gp-0 blend-transform quat) - (matrix->quaternion s3-0 s2-0) - (-> gp-0 transform quat) - f26-0 + (let ((s1-0 (new 'stack-no-clear 'vector))) + (if (= (-> arg0 parent bone scale w) 0.0) + (matrix<-transformq! s0-0 arg1) + (matrix<-parented-transformq! s0-0 arg1 (-> arg0 parent bone scale)) + ) + (matrix*! s2-0 s0-0 (-> arg0 parent bone transform)) + (set-vector! + s1-0 + (vector-length (the-as vector (-> s2-0 vector))) + (vector-length (-> s2-0 vector 1)) + (vector-length (-> s2-0 vector 2)) + 1.0 ) + (vector*! (-> gp-0 blend-transform scale) s1-0 (-> arg1 scale)) + ) + (vector-lerp! + (the-as vector (-> gp-0 blend-transform)) + (-> s2-0 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) f28-0) + (quaternion-slerp! + (-> gp-0 blend-transform quat) + (matrix->quaternion s3-0 s2-0) + (-> gp-0 transform quat) + f26-0 ) - (cspace<-transformq! arg0 (-> gp-0 blend-transform)) ) - (else - (cspace<-parented-transformq-joint! arg0 arg1) - ) + (cspace<-transformq! arg0 (-> gp-0 blend-transform)) + ) + (else + (cspace<-parented-transformq-joint! arg0 arg1) ) ) - (none) ) + (none) ) ;; definition for method 0 of type joint-mod-blend-world diff --git a/test/decompiler/reference/jak2/engine/anim/joint-mod_REF.gc b/test/decompiler/reference/jak2/engine/anim/joint-mod_REF.gc index d1156cf0f4..a8e3747929 100644 --- a/test/decompiler/reference/jak2/engine/anim/joint-mod_REF.gc +++ b/test/decompiler/reference/jak2/engine/anim/joint-mod_REF.gc @@ -337,103 +337,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 vf6 vf0 vf0 :mask #b1000) - (.mul.vf vf6 vf4 vf5 :mask #b111) - (.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) ) @@ -441,55 +390,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 vector 1)) - (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 vector 1)) + (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) ) ;; definition for function joint-mod-gun-look-at-handler @@ -819,181 +802,164 @@ ;; ERROR: Unsupported inline assembly instruction kind - [madd.s f0, f2, f5] (defbehavior joint-mod-look-at-handler process ((arg0 cspace) (arg1 transformq)) (local-vars (f0-1 float) (sv-80 symbol) (sv-144 vector) (sv-160 vector) (sv-176 float)) - (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 ((s1-0 (vector-normalize-copy! - (new 'stack-no-clear 'vector) - (-> gp-0 process node-list data 0 bone transform vector 1) - 1.0 - ) - ) - (s2-0 (matrix->trans (-> arg0 bone transform) (new 'stack-no-clear 'vector))) - (s3-0 (vector-normalize! (-> arg0 bone transform vector (-> gp-0 nose)) 1.0)) - (s0-0 (vector-normalize! (-> arg0 bone transform vector (-> gp-0 ear)) 1.0)) - ) - (set! sv-144 (vector-normalize! - (vector-cross! - (new 'stack-no-clear 'vector) - (-> arg0 bone transform vector (-> gp-0 up)) - (-> arg0 bone transform vector (-> gp-0 nose)) - ) - 1.0 - ) - ) - (let ((s2-1 (vector-normalize! (vector-! (new 'stack-no-clear 'vector) (-> gp-0 target) s2-0) 1.0))) - (set! sv-160 (-> gp-0 process node-list data (-> gp-0 base-joint) bone transform vector (-> gp-0 base-nose))) - (set! sv-80 (the-as symbol #f)) - (let ((f0-0 (-> sv-144 x)) - (f1-0 (-> sv-144 y)) - (f2-0 (-> sv-144 z)) - (f3-0 (-> s0-0 x)) - (f4-0 (-> s0-0 y)) - (f5-0 (-> s0-0 z)) - ) - (.mula.s f0-0 f3-0) - (.madda.s f1-0 f4-0) - (.madd.s f0-1 f2-0 f5-0) - ) - (if (< f0-1 0.0) - (set! sv-80 #t) - ) - (let* ((f30-0 (vector-y-angle s3-0)) - (a0-18 (vector-flatten! (new-stack-vector0) s2-1 s1-0)) - (f0-3 (vector-y-angle a0-18)) - (f30-1 (deg-diff f30-0 f0-3)) - (f0-4 (if (= (-> gp-0 base-joint) (+ (-> arg0 joint number) 1)) - 0.0 - (deg-diff (vector-y-angle s3-0) (vector-y-angle sv-160)) - ) - ) - ) - (if (< (-> gp-0 ignore-angle) (fabs f30-1)) - (set! f30-1 0.0) - ) - (let ((f30-2 - (fmax - (fmin (* f30-1 (-> gp-0 blend) (-> gp-0 flex-blend)) (+ (-> gp-0 twist-max y) (* f0-4 (-> gp-0 flex-blend)))) - (+ (- (-> gp-0 twist-max y)) (* f0-4 (-> gp-0 flex-blend))) - ) - ) - ) - (when (and (-> gp-0 shutting-down?) (< (fabs (- (-> gp-0 twist y) f30-2)) 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)) - ) - ) - (let ((s1-2 deg-seek) - (s0-2 (-> gp-0 twist y)) - ) - (set! sv-176 f30-2) - (let ((a2-3 (* (fabs (deg-diff f30-2 (-> gp-0 twist y))) (-> gp-0 twist-speed-y) (-> self clock time-adjust-ratio))) - ) - (set! (-> gp-0 twist y) (s1-2 s0-2 sv-176 a2-3)) + (let ((gp-0 (the-as joint-mod (-> arg0 param1)))) + (cspace<-parented-transformq-joint! arg0 arg1) + (let ((s1-0 (vector-normalize-copy! + (new 'stack-no-clear 'vector) + (-> gp-0 process node-list data 0 bone transform vector 1) + 1.0 ) ) - ) - ) - 0.0 - (let ((f0-25 (if sv-80 - (- (-> gp-0 twist y)) - (-> gp-0 twist y) - ) + (s2-0 (matrix->trans (-> arg0 bone transform) (new 'stack-no-clear 'vector))) + (s3-0 (vector-normalize! (-> arg0 bone transform vector (-> gp-0 nose)) 1.0)) + (s0-0 (vector-normalize! (-> arg0 bone transform vector (-> gp-0 ear)) 1.0)) + ) + (set! sv-144 (vector-normalize! + (vector-cross! + (new 'stack-no-clear 'vector) + (-> arg0 bone transform vector (-> gp-0 up)) + (-> arg0 bone transform vector (-> gp-0 nose)) ) - (v1-49 (-> gp-0 up)) - ) - (cond - ((zero? v1-49) - (quaternion-rotate-x! (-> arg1 quat) (-> arg1 quat) f0-25) - ) - ((= v1-49 1) - (quaternion-rotate-local-y! (-> arg1 quat) (-> arg1 quat) f0-25) - ) - (else - (quaternion-rotate-z! (-> arg1 quat) (-> arg1 quat) f0-25) - ) - ) - ) - (let* ((s1-3 - (vector-normalize-copy! - (new 'stack-no-clear 'vector) - (the-as vector (-> gp-0 process node-list data 0 bone transform)) 1.0 ) - ) - (f30-3 (vector-x-angle s3-0)) - (s2-2 (vector-flatten! (new-stack-vector0) s2-1 s1-3)) - (f0-26 (vector-x-angle s2-2)) - (f0-32 - (fmax - (fmin (* (- (deg-diff f30-3 f0-26)) (-> gp-0 blend) (-> gp-0 flex-blend)) (-> gp-0 twist-max x)) - (- (-> gp-0 twist-max x)) + ) + (let ((s2-1 (vector-normalize! (vector-! (new 'stack-no-clear 'vector) (-> gp-0 target) s2-0) 1.0))) + (set! sv-160 (-> gp-0 process node-list data (-> gp-0 base-joint) bone transform vector (-> gp-0 base-nose))) + (set! sv-80 (the-as symbol #f)) + (let ((f0-0 (-> sv-144 x)) + (f1-0 (-> sv-144 y)) + (f2-0 (-> sv-144 z)) + (f3-0 (-> s0-0 x)) + (f4-0 (-> s0-0 y)) + (f5-0 (-> s0-0 z)) + ) + (.mula.s f0-0 f3-0) + (.madda.s f1-0 f4-0) + (.madd.s f0-1 f2-0 f5-0) + ) + (if (< f0-1 0.0) + (set! sv-80 #t) + ) + (let* ((f30-0 (vector-y-angle s3-0)) + (a0-18 (vector-flatten! (new-stack-vector0) s2-1 s1-0)) + (f0-3 (vector-y-angle a0-18)) + (f30-1 (deg-diff f30-0 f0-3)) + (f0-4 (if (= (-> gp-0 base-joint) (+ (-> arg0 joint number) 1)) + 0.0 + (deg-diff (vector-y-angle s3-0) (vector-y-angle sv-160)) + ) ) - ) - ) - (if (< (vector-dot s2-2 s3-0) 0.1) - (set! f0-32 0.0) - ) - (set! (-> gp-0 twist x) - (deg-seek - (-> gp-0 twist x) - f0-32 - (* (fabs (deg-diff f0-32 (-> gp-0 twist x))) (-> gp-0 twist-speed-x) (-> self clock time-adjust-ratio)) + ) + (if (< (-> gp-0 ignore-angle) (fabs f30-1)) + (set! f30-1 0.0) + ) + (let ((f30-2 + (fmax + (fmin (* f30-1 (-> gp-0 blend) (-> gp-0 flex-blend)) (+ (-> gp-0 twist-max y) (* f0-4 (-> gp-0 flex-blend)))) + (+ (- (-> gp-0 twist-max y)) (* f0-4 (-> gp-0 flex-blend))) ) ) - ) - ) - ) - (let ((v1-60 (-> gp-0 ear))) - (cond - ((zero? v1-60) - (quaternion-rotate-x! (-> arg1 quat) (-> arg1 quat) (-> gp-0 twist x)) - ) - ((= v1-60 1) - (quaternion-rotate-local-y! (-> arg1 quat) (-> arg1 quat) (-> gp-0 twist x)) - ) - (else - (quaternion-rotate-z! (-> arg1 quat) (-> arg1 quat) (-> gp-0 twist x)) - ) - ) - ) - (vector+! (-> arg1 trans) (-> arg1 trans) (-> gp-0 trans)) - (quaternion-normalize! (quaternion*! (-> arg1 quat) (-> arg1 quat) (-> gp-0 quat))) - (let ((a1-36 (-> arg1 scale))) - (let ((v1-63 (-> arg1 scale)) - (a0-46 (-> gp-0 scale)) + ) + (when (and (-> gp-0 shutting-down?) (< (fabs (- (-> gp-0 twist y) f30-2)) 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)) + ) + ) + (let ((s1-2 deg-seek) + (s0-2 (-> gp-0 twist y)) + ) + (set! sv-176 f30-2) + (let ((a2-3 (* (fabs (deg-diff f30-2 (-> gp-0 twist y))) (-> gp-0 twist-speed-y) (-> self clock time-adjust-ratio))) + ) + (set! (-> gp-0 twist y) (s1-2 s0-2 sv-176 a2-3)) + ) ) - (.lvf vf4 (&-> v1-63 quad)) - (.lvf vf5 (&-> a0-46 quad)) - ) - (.add.x.vf vf6 vf0 vf0 :mask #b1000) - (.mul.vf vf6 vf4 vf5 :mask #b111) - (.svf (&-> a1-36 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) ) ) + 0.0 + (let ((f0-25 (if sv-80 + (- (-> gp-0 twist y)) + (-> gp-0 twist y) + ) + ) + (v1-49 (-> gp-0 up)) + ) + (cond + ((zero? v1-49) + (quaternion-rotate-x! (-> arg1 quat) (-> arg1 quat) f0-25) + ) + ((= v1-49 1) + (quaternion-rotate-local-y! (-> arg1 quat) (-> arg1 quat) f0-25) + ) + (else + (quaternion-rotate-z! (-> arg1 quat) (-> arg1 quat) f0-25) + ) + ) + ) + (let* ((s1-3 + (vector-normalize-copy! + (new 'stack-no-clear 'vector) + (the-as vector (-> gp-0 process node-list data 0 bone transform)) + 1.0 + ) + ) + (f30-3 (vector-x-angle s3-0)) + (s2-2 (vector-flatten! (new-stack-vector0) s2-1 s1-3)) + (f0-26 (vector-x-angle s2-2)) + (f0-32 + (fmax + (fmin (* (- (deg-diff f30-3 f0-26)) (-> gp-0 blend) (-> gp-0 flex-blend)) (-> gp-0 twist-max x)) + (- (-> gp-0 twist-max x)) + ) + ) + ) + (if (< (vector-dot s2-2 s3-0) 0.1) + (set! f0-32 0.0) + ) + (set! (-> gp-0 twist x) + (deg-seek + (-> gp-0 twist x) + f0-32 + (* (fabs (deg-diff f0-32 (-> gp-0 twist x))) (-> gp-0 twist-speed-x) (-> self clock time-adjust-ratio)) + ) + ) + ) + ) ) - 0 - (none) + (let ((v1-60 (-> gp-0 ear))) + (cond + ((zero? v1-60) + (quaternion-rotate-x! (-> arg1 quat) (-> arg1 quat) (-> gp-0 twist x)) + ) + ((= v1-60 1) + (quaternion-rotate-local-y! (-> arg1 quat) (-> arg1 quat) (-> gp-0 twist x)) + ) + (else + (quaternion-rotate-z! (-> arg1 quat) (-> arg1 quat) (-> gp-0 twist x)) + ) + ) + ) + (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) ) ;; definition for function joint-mod-polar-look-at-guts @@ -1242,114 +1208,80 @@ ;; definition for function joint-mod-rotate-handler ;; WARN: Return type mismatch int vs none. (defbehavior joint-mod-rotate-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)))) - (let ((s3-0 (new 'static 'inline-array quaternion 3 - (new 'static 'quaternion :x 1.0 :w 1.0) - (new 'static 'quaternion :y 1.0 :w 1.0) - (new 'static 'quaternion :z 1.0 :w 1.0) - ) + (let ((s5-0 (the-as joint-mod (-> arg0 param1)))) + (let ((s3-0 (new 'static 'inline-array quaternion 3 + (new 'static 'quaternion :x 1.0 :w 1.0) + (new 'static 'quaternion :y 1.0 :w 1.0) + (new 'static 'quaternion :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 vf6 vf0 vf0 :mask #b1000) - (.mul.vf vf6 vf4 vf5 :mask #b111) - (.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) ) ;; definition for function joint-mod-scale-handler ;; WARN: Return type mismatch int vs none. (defbehavior joint-mod-scale-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)))) - (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 vf6 vf0 vf0 :mask #b1000) - (.mul.vf vf6 vf4 vf5 :mask #b111) - (.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) ) ;; definition for function joint-mod-joint-set-handler @@ -1461,40 +1393,23 @@ ;; definition for function joint-mod-joint-set*-handler ;; WARN: Return type mismatch int vs none. (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 vf6 vf0 vf0 :mask #b1000) - (.mul.vf vf6 vf4 vf5 :mask #b111) - (.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) ) ;; definition for function joint-mod-joint-set*-world-handler diff --git a/test/decompiler/reference/jak2/engine/math/vector_REF.gc b/test/decompiler/reference/jak2/engine/math/vector_REF.gc index e6fdc097b9..799e13cbec 100644 --- a/test/decompiler/reference/jak2/engine/math/vector_REF.gc +++ b/test/decompiler/reference/jak2/engine/math/vector_REF.gc @@ -49,19 +49,7 @@ ;; definition for function vector*! (defun vector*! ((arg0 vector) (arg1 vector) (arg2 vector)) "Elementwise product. Set w = 1." - (rlet ((vf0 :class vf) - (vf4 :class vf) - (vf5 :class vf) - (vf6 :class vf) - ) - (init-vf0-vector) - (.lvf vf4 (&-> arg1 quad)) - (.lvf vf5 (&-> arg2 quad)) - (.add.x.vf vf6 vf0 vf0 :mask #b1000) - (.mul.vf vf6 vf4 vf5 :mask #b111) - (.svf (&-> arg0 quad) vf6) - arg0 - ) + (vector*! arg0 arg1 arg2) ) ;; definition for function vector+*! diff --git a/test/decompiler/reference/jak2/levels/palace/cable/palcab-obs_REF.gc b/test/decompiler/reference/jak2/levels/palace/cable/palcab-obs_REF.gc index 5df5b4b0e7..04b152698f 100644 --- a/test/decompiler/reference/jak2/levels/palace/cable/palcab-obs_REF.gc +++ b/test/decompiler/reference/jak2/levels/palace/cable/palcab-obs_REF.gc @@ -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) ) ) diff --git a/test/decompiler/reference/jak3/engine/anim/aligner_REF.gc b/test/decompiler/reference/jak3/engine/anim/aligner_REF.gc index 928ed37eaa..df32b6a580 100644 --- a/test/decompiler/reference/jak3/engine/anim/aligner_REF.gc +++ b/test/decompiler/reference/jak3/engine/anim/aligner_REF.gc @@ -6,123 +6,106 @@ ;; 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") - (.lw ra-0 return-from-thread s7-0) - (.jr ra-0) - (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") + (.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 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 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) ) ;; definition for method 12 of type align-control diff --git a/test/decompiler/reference/jak3/engine/anim/joint-mod-h_REF.gc b/test/decompiler/reference/jak3/engine/anim/joint-mod-h_REF.gc index 37eeb4946d..2616f89ff8 100644 --- a/test/decompiler/reference/jak3/engine/anim/joint-mod-h_REF.gc +++ b/test/decompiler/reference/jak3/engine/anim/joint-mod-h_REF.gc @@ -486,37 +486,20 @@ Unlike jak 2, this actually multiplies the scale, instead of adding." ;; definition for function joint-mod-add-local-callback (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 vf6 vf0 vf0 :mask #b1000) - (.mul.vf vf6 vf4 vf5 :mask #b111) - (.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) ) ;; definition for method 9 of type joint-mod-add-local @@ -746,71 +729,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 vf6 vf0 vf0 :mask #b1000) - (.mul.vf vf6 vf4 vf5 :mask #b111) - (.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) ) ;; definition for method 9 of type joint-mod-blend-world diff --git a/test/decompiler/reference/jak3/engine/anim/joint-mod_REF.gc b/test/decompiler/reference/jak3/engine/anim/joint-mod_REF.gc index 441aabd7bf..cff091295f 100644 --- a/test/decompiler/reference/jak3/engine/anim/joint-mod_REF.gc +++ b/test/decompiler/reference/jak3/engine/anim/joint-mod_REF.gc @@ -290,103 +290,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 vf6 vf0 vf0 :mask #b1000) - (.mul.vf vf6 vf4 vf5 :mask #b111) - (.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) ) @@ -394,55 +343,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) ) ;; definition for function joint-mod-gun-look-at-handler @@ -768,138 +751,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 vf6 vf0 vf0 :mask #b1000) - (.mul.vf vf6 vf4 vf5 :mask #b111) - (.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) ) ;; definition for function joint-mod-world-look-at-handler @@ -1016,115 +982,81 @@ ;; WARN: Return type mismatch int vs none. (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 vf6 vf0 vf0 :mask #b1000) - (.mul.vf vf6 vf4 vf5 :mask #b111) - (.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) ) ;; definition for function joint-mod-scale-handler ;; WARN: Return type mismatch int vs 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 vf6 vf0 vf0 :mask #b1000) - (.mul.vf vf6 vf4 vf5 :mask #b111) - (.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) ) ;; definition for function joint-mod-joint-set-handler @@ -1237,40 +1169,23 @@ ;; definition for function joint-mod-joint-set*-handler ;; WARN: Return type mismatch int vs none. (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 vf6 vf0 vf0 :mask #b1000) - (.mul.vf vf6 vf4 vf5 :mask #b111) - (.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) ) ;; definition for function joint-mod-joint-set*-world-handler diff --git a/test/decompiler/reference/jak3/engine/math/vector_REF.gc b/test/decompiler/reference/jak3/engine/math/vector_REF.gc index 63e3372a55..b5712a0471 100644 --- a/test/decompiler/reference/jak3/engine/math/vector_REF.gc +++ b/test/decompiler/reference/jak3/engine/math/vector_REF.gc @@ -49,19 +49,7 @@ ;; definition for function vector*! (defun vector*! ((arg0 vector) (arg1 vector) (arg2 vector)) "Elementwise product. Set w = 1." - (rlet ((vf0 :class vf) - (vf4 :class vf) - (vf5 :class vf) - (vf6 :class vf) - ) - (init-vf0-vector) - (.lvf vf4 (&-> arg1 quad)) - (.lvf vf5 (&-> arg2 quad)) - (.add.x.vf vf6 vf0 vf0 :mask #b1000) - (.mul.vf vf6 vf4 vf5 :mask #b111) - (.svf (&-> arg0 quad) vf6) - arg0 - ) + (vector*! arg0 arg1 arg2) ) ;; definition for function vector+*! diff --git a/test/decompiler/reference/jak3/engine/physics/ragdoll_REF.gc b/test/decompiler/reference/jak3/engine/physics/ragdoll_REF.gc index 7cfba1fd7c..3aa4186748 100644 --- a/test/decompiler/reference/jak3/engine/physics/ragdoll_REF.gc +++ b/test/decompiler/reference/jak3/engine/physics/ragdoll_REF.gc @@ -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 diff --git a/test/decompiler/reference/jak3/engine/process-drawable/process-drawable_REF.gc b/test/decompiler/reference/jak3/engine/process-drawable/process-drawable_REF.gc index bb7a93f233..388543057c 100644 --- a/test/decompiler/reference/jak3/engine/process-drawable/process-drawable_REF.gc +++ b/test/decompiler/reference/jak3/engine/process-drawable/process-drawable_REF.gc @@ -1080,53 +1080,36 @@ ;; INFO: Used lq/sq (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 vf6 vf0 vf0 :mask #b1000) - (.mul.vf vf6 vf4 vf5 :mask #b111) - (.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* ) ) ) diff --git a/test/decompiler/reference/jak3/engine/target/flut/target-flut_REF.gc b/test/decompiler/reference/jak3/engine/target/flut/target-flut_REF.gc index 84536871e3..06b9d2e5de 100644 --- a/test/decompiler/reference/jak3/engine/target/flut/target-flut_REF.gc +++ b/test/decompiler/reference/jak3/engine/target/flut/target-flut_REF.gc @@ -1257,49 +1257,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 vf6 vf0 vf0 :mask #b1000) - (.mul.vf vf6 vf4 vf5 :mask #b111) - (.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 ) ) ) diff --git a/test/decompiler/reference/jak3/levels/temple/temple-mood_REF.gc b/test/decompiler/reference/jak3/levels/temple/temple-mood_REF.gc index d1232ee639..a7e9f51e63 100644 --- a/test/decompiler/reference/jak3/levels/temple/temple-mood_REF.gc +++ b/test/decompiler/reference/jak3/levels/temple/temple-mood_REF.gc @@ -204,66 +204,43 @@ ;; INFO: Used lq/sq ;; WARN: Return type mismatch float vs none. (defun update-templed-lights ((arg0 mood-context)) - (rlet ((vf0 :class vf) - (vf4 :class vf) - (vf5 :class vf) - (vf6 :class vf) - ) - (init-vf0-vector) - (let ((v1-0 (-> arg0 current-fog))) - (set-vector! (-> v1-0 fog-color) 0.0 44.7999 57.5999 1.0) - (set-vector! (-> v1-0 fog-dists) 131072.0 1843200.0 255.0 128.0) - (set-vector! (-> v1-0 erase-color) 0.0 0.0 0.0 128.0) - ) - (let ((s5-0 (-> arg0 light-group 1))) - (mem-copy! (the-as pointer s5-0) (the-as pointer (-> *level* level-default mood-context light-group)) 192) - (set! (-> s5-0 ambi extra x) 0.8) - ) - (let ((s5-1 (-> arg0 light-group 2))) - (let ((s4-0 (new 'static 'vector :x 1.0 :y 0.65 :z 0.4 :w 1.0))) - (mem-copy! (the-as pointer s5-1) (the-as pointer (-> *level* level-default mood-context light-group)) 192) - (let ((a1-11 (-> s5-1 dir0 color))) - (let ((v1-6 (-> s5-1 dir0 color)) - (a0-6 s4-0) - ) - (.lvf vf4 (&-> v1-6 quad)) - (.lvf vf5 (&-> a0-6 quad)) - ) - (.add.x.vf vf6 vf0 vf0 :mask #b1000) - (.mul.vf vf6 vf4 vf5 :mask #b111) - (.svf (&-> a1-11 quad) vf6) - ) - (let ((a0-7 (-> s5-1 dir1 color))) - (.lvf vf4 (&-> (-> s5-1 dir1 color) quad)) - (.lvf vf5 (&-> s4-0 quad)) - (.add.x.vf vf6 vf0 vf0 :mask #b1000) - (.mul.vf vf6 vf4 vf5 :mask #b111) - (.svf (&-> a0-7 quad) vf6) - ) - ) - (set! (-> s5-1 ambi extra x) 0.8) - ) - (let ((v1-10 (-> arg0 light-group 3))) - (vector-float*! (the-as vector (-> v1-10 ambi color)) (the-as vector (-> arg0 times)) 0.55) - (vector+! - (the-as vector (-> v1-10 ambi color)) - (the-as vector (-> v1-10 ambi color)) - (new 'static 'vector :x 0.4253 :y 0.39 :z 0.45 :w 1.0) - ) - (set! (-> v1-10 dir0 color quad) (-> arg0 times 0 quad)) - (let ((a0-12 (-> v1-10 dir0))) - (set! (-> a0-12 direction x) 0.0) - (set! (-> a0-12 direction y) 1.0) - (set! (-> a0-12 direction z) 0.0) - (set! (-> a0-12 direction w) 0.0) - ) - (set! (-> v1-10 ambi extra x) 0.8) - (set! (-> v1-10 dir0 extra x) 0.8) - (set! (-> v1-10 dir1 extra x) 0.0) - (set! (-> v1-10 dir2 extra x) 0.0) - ) - (none) + (let ((v1-0 (-> arg0 current-fog))) + (set-vector! (-> v1-0 fog-color) 0.0 44.7999 57.5999 1.0) + (set-vector! (-> v1-0 fog-dists) 131072.0 1843200.0 255.0 128.0) + (set-vector! (-> v1-0 erase-color) 0.0 0.0 0.0 128.0) ) + (let ((s5-0 (-> arg0 light-group 1))) + (mem-copy! (the-as pointer s5-0) (the-as pointer (-> *level* level-default mood-context light-group)) 192) + (set! (-> s5-0 ambi extra x) 0.8) + ) + (let ((s5-1 (-> arg0 light-group 2))) + (let ((s4-0 (new 'static 'vector :x 1.0 :y 0.65 :z 0.4 :w 1.0))) + (mem-copy! (the-as pointer s5-1) (the-as pointer (-> *level* level-default mood-context light-group)) 192) + (vector*! (the-as vector (-> s5-1 dir0 color)) (the-as vector (-> s5-1 dir0 color)) s4-0) + (vector*! (the-as vector (-> s5-1 dir1 color)) (the-as vector (-> s5-1 dir1 color)) s4-0) + ) + (set! (-> s5-1 ambi extra x) 0.8) + ) + (let ((v1-10 (-> arg0 light-group 3))) + (vector-float*! (the-as vector (-> v1-10 ambi color)) (the-as vector (-> arg0 times)) 0.55) + (vector+! + (the-as vector (-> v1-10 ambi color)) + (the-as vector (-> v1-10 ambi color)) + (new 'static 'vector :x 0.4253 :y 0.39 :z 0.45 :w 1.0) + ) + (set! (-> v1-10 dir0 color quad) (-> arg0 times 0 quad)) + (let ((a0-13 (-> v1-10 dir0))) + (set! (-> a0-13 direction x) 0.0) + (set! (-> a0-13 direction y) 1.0) + (set! (-> a0-13 direction z) 0.0) + (set! (-> a0-13 direction w) 0.0) + ) + (set! (-> v1-10 ambi extra x) 0.8) + (set! (-> v1-10 dir0 extra x) 0.8) + (set! (-> v1-10 dir1 extra x) 0.0) + (set! (-> v1-10 dir2 extra x) 0.0) + ) + (none) ) ;; definition for function init-mood-templed @@ -299,7 +276,3 @@ 0 (none) ) - - - - diff --git a/test/decompiler/reference/jak3/levels/temple/templex-mood_REF.gc b/test/decompiler/reference/jak3/levels/temple/templex-mood_REF.gc index e01003943b..485167f611 100644 --- a/test/decompiler/reference/jak3/levels/temple/templex-mood_REF.gc +++ b/test/decompiler/reference/jak3/levels/temple/templex-mood_REF.gc @@ -25,66 +25,43 @@ ;; INFO: Used lq/sq ;; WARN: Return type mismatch float vs none. (defun update-templex-lights ((arg0 mood-context)) - (rlet ((vf0 :class vf) - (vf4 :class vf) - (vf5 :class vf) - (vf6 :class vf) - ) - (init-vf0-vector) - (let ((v1-0 (-> arg0 current-fog))) - (set-vector! (-> v1-0 fog-color) 0.0 44.7999 57.5999 1.0) - (set-vector! (-> v1-0 fog-dists) 131072.0 1843200.0 255.0 128.0) - (set-vector! (-> v1-0 erase-color) 0.0 0.0 0.0 128.0) - ) - (let ((s5-0 (-> arg0 light-group 1))) - (mem-copy! (the-as pointer s5-0) (the-as pointer (-> *level* level-default mood-context light-group)) 192) - (set! (-> s5-0 ambi extra x) 0.8) - ) - (let ((s5-1 (-> arg0 light-group 2))) - (let ((s4-0 (new 'static 'vector :x 1.0 :y 0.65 :z 0.4 :w 1.0))) - (mem-copy! (the-as pointer s5-1) (the-as pointer (-> *level* level-default mood-context light-group)) 192) - (let ((a1-11 (-> s5-1 dir0 color))) - (let ((v1-6 (-> s5-1 dir0 color)) - (a0-6 s4-0) - ) - (.lvf vf4 (&-> v1-6 quad)) - (.lvf vf5 (&-> a0-6 quad)) - ) - (.add.x.vf vf6 vf0 vf0 :mask #b1000) - (.mul.vf vf6 vf4 vf5 :mask #b111) - (.svf (&-> a1-11 quad) vf6) - ) - (let ((a0-7 (-> s5-1 dir1 color))) - (.lvf vf4 (&-> (-> s5-1 dir1 color) quad)) - (.lvf vf5 (&-> s4-0 quad)) - (.add.x.vf vf6 vf0 vf0 :mask #b1000) - (.mul.vf vf6 vf4 vf5 :mask #b111) - (.svf (&-> a0-7 quad) vf6) - ) - ) - (set! (-> s5-1 ambi extra x) 0.8) - ) - (let ((v1-10 (-> arg0 light-group 3))) - (vector-float*! (the-as vector (-> v1-10 ambi color)) (the-as vector (-> arg0 times)) 0.55) - (vector+! - (the-as vector (-> v1-10 ambi color)) - (the-as vector (-> v1-10 ambi color)) - (new 'static 'vector :x 0.4253 :y 0.39 :z 0.45 :w 1.0) - ) - (set! (-> v1-10 dir0 color quad) (-> arg0 times 0 quad)) - (let ((a0-12 (-> v1-10 dir0))) - (set! (-> a0-12 direction x) 0.0) - (set! (-> a0-12 direction y) 1.0) - (set! (-> a0-12 direction z) 0.0) - (set! (-> a0-12 direction w) 0.0) - ) - (set! (-> v1-10 ambi extra x) 0.8) - (set! (-> v1-10 dir0 extra x) 0.8) - (set! (-> v1-10 dir1 extra x) 0.0) - (set! (-> v1-10 dir2 extra x) 0.0) - ) - (none) + (let ((v1-0 (-> arg0 current-fog))) + (set-vector! (-> v1-0 fog-color) 0.0 44.7999 57.5999 1.0) + (set-vector! (-> v1-0 fog-dists) 131072.0 1843200.0 255.0 128.0) + (set-vector! (-> v1-0 erase-color) 0.0 0.0 0.0 128.0) ) + (let ((s5-0 (-> arg0 light-group 1))) + (mem-copy! (the-as pointer s5-0) (the-as pointer (-> *level* level-default mood-context light-group)) 192) + (set! (-> s5-0 ambi extra x) 0.8) + ) + (let ((s5-1 (-> arg0 light-group 2))) + (let ((s4-0 (new 'static 'vector :x 1.0 :y 0.65 :z 0.4 :w 1.0))) + (mem-copy! (the-as pointer s5-1) (the-as pointer (-> *level* level-default mood-context light-group)) 192) + (vector*! (the-as vector (-> s5-1 dir0 color)) (the-as vector (-> s5-1 dir0 color)) s4-0) + (vector*! (the-as vector (-> s5-1 dir1 color)) (the-as vector (-> s5-1 dir1 color)) s4-0) + ) + (set! (-> s5-1 ambi extra x) 0.8) + ) + (let ((v1-10 (-> arg0 light-group 3))) + (vector-float*! (the-as vector (-> v1-10 ambi color)) (the-as vector (-> arg0 times)) 0.55) + (vector+! + (the-as vector (-> v1-10 ambi color)) + (the-as vector (-> v1-10 ambi color)) + (new 'static 'vector :x 0.4253 :y 0.39 :z 0.45 :w 1.0) + ) + (set! (-> v1-10 dir0 color quad) (-> arg0 times 0 quad)) + (let ((a0-13 (-> v1-10 dir0))) + (set! (-> a0-13 direction x) 0.0) + (set! (-> a0-13 direction y) 1.0) + (set! (-> a0-13 direction z) 0.0) + (set! (-> a0-13 direction w) 0.0) + ) + (set! (-> v1-10 ambi extra x) 0.8) + (set! (-> v1-10 dir0 extra x) 0.8) + (set! (-> v1-10 dir1 extra x) 0.0) + (set! (-> v1-10 dir2 extra x) 0.0) + ) + (none) ) ;; definition for function update-mood-templex @@ -104,7 +81,3 @@ 0 (none) ) - - - -