mirror of
https://github.com/open-goal/jak-project
synced 2026-05-28 08:25:56 -04:00
[decompiler] Detect vector*! (#3846)
Detect use of `vector*!`, which is inlined in jak 2 and jak 3. --------- Co-authored-by: water111 <awaterford1111445@gmail.com>
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -1689,6 +1689,62 @@ std::unique_ptr<AtomicOp> convert_vector_plus(const Instruction& i0,
|
||||
idx);
|
||||
}
|
||||
|
||||
std::unique_ptr<AtomicOp> 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<SetVarOp>(
|
||||
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<AtomicOp> convert_vector_minus(const Instruction& i0,
|
||||
const Instruction& i1,
|
||||
const Instruction& i2,
|
||||
@@ -1819,6 +1875,11 @@ std::unique_ptr<AtomicOp> 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;
|
||||
|
||||
@@ -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)": [
|
||||
|
||||
@@ -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"]
|
||||
},
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -538,183 +538,123 @@
|
||||
)
|
||||
|
||||
(defun ragdoll-joint-callback ((arg0 cspace) (arg1 transformq) (arg2 process-drawable) (arg3 ragdoll-proc))
|
||||
(local-vars (sv-240 int) (sv-256 quaternion) (sv-272 vector) (sv-288 matrix))
|
||||
(rlet ((vf0 :class vf)
|
||||
(vf4 :class vf)
|
||||
(vf5 :class vf)
|
||||
(vf6 :class vf)
|
||||
)
|
||||
(init-vf0-vector)
|
||||
(when *debug-segment*
|
||||
(let ((s2-0 (-> *display* frames (-> *display* on-screen) profile-array data 0))
|
||||
(v1-7 'ragdoll-callback)
|
||||
(s1-0 *color-white*)
|
||||
)
|
||||
(when (and *dproc* *debug-segment*)
|
||||
(let ((s0-0 (-> s2-0 data (-> s2-0 count))))
|
||||
(set! sv-240 (-> s2-0 base-time))
|
||||
(set! (-> s0-0 name) v1-7)
|
||||
(set! (-> s0-0 start-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint sv-240))))
|
||||
(set! (-> s0-0 depth) (the-as uint (-> s2-0 depth)))
|
||||
(set! (-> s0-0 color) s1-0)
|
||||
(set! (-> s2-0 segment (-> s2-0 depth)) s0-0)
|
||||
)
|
||||
(set! (-> s2-0 count) (min 1023 (+ (-> s2-0 count) 1)))
|
||||
(+! (-> s2-0 depth) 1)
|
||||
(set! (-> s2-0 max-depth) (max (-> s2-0 max-depth) (-> s2-0 depth)))
|
||||
(local-vars (a2-10 matrix) (sv-240 int) (sv-256 quaternion) (sv-272 vector) (sv-288 matrix))
|
||||
(when *debug-segment*
|
||||
(let ((s2-0 (-> *display* frames (-> *display* on-screen) profile-array data 0))
|
||||
(v1-7 'ragdoll-callback)
|
||||
(s1-0 *color-white*)
|
||||
)
|
||||
(when (and *dproc* *debug-segment*)
|
||||
(let ((s0-0 (-> s2-0 data (-> s2-0 count))))
|
||||
(set! sv-240 (-> s2-0 base-time))
|
||||
(set! (-> s0-0 name) v1-7)
|
||||
(set! (-> s0-0 start-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint sv-240))))
|
||||
(set! (-> s0-0 depth) (the-as uint (-> s2-0 depth)))
|
||||
(set! (-> s0-0 color) s1-0)
|
||||
(set! (-> s2-0 segment (-> s2-0 depth)) s0-0)
|
||||
)
|
||||
(set! (-> s2-0 count) (min 1023 (+ (-> s2-0 count) 1)))
|
||||
(+! (-> s2-0 depth) 1)
|
||||
(set! (-> s2-0 max-depth) (max (-> s2-0 max-depth) (-> s2-0 depth)))
|
||||
)
|
||||
0
|
||||
)
|
||||
(when arg3
|
||||
(let ((s3-1 (-> arg3 ragdoll)))
|
||||
(when (and s3-1
|
||||
(and (< 0.0 (-> s3-1 flex-blend)) (!= (-> s3-1 ragdoll-joint-remap (+ (-> arg0 joint number) 1)) 255))
|
||||
)
|
||||
(let ((s1-1 (-> s3-1 ragdoll-joints (-> s3-1 ragdoll-joint-remap (+ (-> arg0 joint number) 1)))))
|
||||
(when s1-1
|
||||
(if (and (-> s1-1 old-param0) (!= (-> s1-1 old-param0) ragdoll-other-joint-callback))
|
||||
((the-as (function cspace transformq none) (-> s1-1 old-param0)) arg0 arg1)
|
||||
(cspace<-parented-transformq-joint! arg0 arg1)
|
||||
)
|
||||
(let ((s2-1 (new 'stack-no-clear 'matrix)))
|
||||
(set! sv-256
|
||||
(quaternion-vector-angle! (new 'stack-no-clear 'quaternion) (-> s1-1 geo-tform) (-> s1-1 geo-tform w))
|
||||
)
|
||||
(quaternion-normalize! (quaternion*! sv-256 (-> s1-1 quat) sv-256))
|
||||
(quaternion->matrix s2-1 sv-256)
|
||||
(when (logtest? (-> s3-1 ragdoll-flags) (ragdoll-flag rf10))
|
||||
(let ((v1-40 (&+ s1-1 188)))
|
||||
(when (and (!= v1-40 (-> s3-1 ragdoll-joints (-> s3-1 num-joints))) (= (-> v1-40 parent-joint) -1))
|
||||
(let ((s0-3 (vector-! (new 'stack-no-clear 'vector) (-> v1-40 position) (-> s1-1 position))))
|
||||
(set! sv-272 (new 'stack-no-clear 'vector))
|
||||
(set! sv-288 (new 'stack-no-clear 'matrix))
|
||||
(vector-flatten! sv-272 s0-3 (-> s2-1 rvec))
|
||||
(vector-normalize! sv-272 1.0)
|
||||
(matrix-from-two-vectors! sv-288 (-> s2-1 uvec) sv-272)
|
||||
(matrix*! s2-1 s2-1 sv-288)
|
||||
(vector-flatten! sv-272 s0-3 (-> s2-1 fvec))
|
||||
)
|
||||
0
|
||||
)
|
||||
(when arg3
|
||||
(let ((s3-1 (-> arg3 ragdoll)))
|
||||
(when (and s3-1
|
||||
(and (< 0.0 (-> s3-1 flex-blend)) (!= (-> s3-1 ragdoll-joint-remap (+ (-> arg0 joint number) 1)) 255))
|
||||
)
|
||||
(let ((s1-1 (-> s3-1 ragdoll-joints (-> s3-1 ragdoll-joint-remap (+ (-> arg0 joint number) 1)))))
|
||||
(when s1-1
|
||||
(if (and (-> s1-1 old-param0) (!= (-> s1-1 old-param0) ragdoll-other-joint-callback))
|
||||
((the-as (function cspace transformq none) (-> s1-1 old-param0)) arg0 arg1)
|
||||
(cspace<-parented-transformq-joint! arg0 arg1)
|
||||
)
|
||||
(let ((s2-1 (new 'stack-no-clear 'matrix)))
|
||||
(set! sv-256
|
||||
(quaternion-vector-angle! (new 'stack-no-clear 'quaternion) (-> s1-1 geo-tform) (-> s1-1 geo-tform w))
|
||||
)
|
||||
(quaternion-normalize! (quaternion*! sv-256 (-> s1-1 quat) sv-256))
|
||||
(quaternion->matrix s2-1 sv-256)
|
||||
(when (logtest? (-> s3-1 ragdoll-flags) (ragdoll-flag rf10))
|
||||
(let ((v1-40 (&+ s1-1 188)))
|
||||
(when (and (!= v1-40 (-> s3-1 ragdoll-joints (-> s3-1 num-joints))) (= (-> v1-40 parent-joint) -1))
|
||||
(let ((s0-3 (vector-! (new 'stack-no-clear 'vector) (-> v1-40 position) (-> s1-1 position))))
|
||||
(set! sv-272 (new 'stack-no-clear 'vector))
|
||||
(set! sv-288 (new 'stack-no-clear 'matrix))
|
||||
(vector-flatten! sv-272 s0-3 (-> s2-1 rvec))
|
||||
(vector-normalize! sv-272 1.0)
|
||||
(matrix-from-two-vectors! sv-288 (-> s2-1 uvec) sv-272)
|
||||
(matrix*! s2-1 s2-1 sv-288)
|
||||
(vector-flatten! sv-272 s0-3 (-> s2-1 fvec))
|
||||
)
|
||||
(vector-normalize! sv-272 1.0)
|
||||
(matrix-from-two-vectors! sv-288 (-> s2-1 uvec) sv-272)
|
||||
(matrix*! s2-1 s2-1 sv-288)
|
||||
)
|
||||
)
|
||||
(set! (-> s2-1 trans quad) (-> s1-1 position quad))
|
||||
(set! (-> s2-1 trans w) 1.0)
|
||||
(if (logtest? (-> s3-1 ragdoll-flags) (ragdoll-flag mirror))
|
||||
(matrix*! s2-1 s2-1 (-> s3-1 mirror))
|
||||
)
|
||||
(cond
|
||||
((>= (-> s3-1 flex-blend) 1.0)
|
||||
(let ((a2-10 (-> arg0 bone transform))
|
||||
(v1-51 (-> s2-1 rvec quad))
|
||||
(a0-45 (-> s2-1 uvec quad))
|
||||
(a1-20 (-> s2-1 fvec quad))
|
||||
(a3-1 (-> s2-1 trans quad))
|
||||
)
|
||||
(set! (-> a2-10 rvec quad) v1-51)
|
||||
(set! (-> a2-10 uvec quad) a0-45)
|
||||
(set! (-> a2-10 fvec quad) a1-20)
|
||||
(set! (-> a2-10 trans quad) a3-1)
|
||||
)
|
||||
)
|
||||
(else
|
||||
(let ((s1-3 (vector-lerp!
|
||||
(new 'stack-no-clear 'vector)
|
||||
(matrix->trans (-> arg0 bone transform) (new 'stack-no-clear 'vector))
|
||||
(-> s2-1 trans)
|
||||
(-> s3-1 flex-blend)
|
||||
)
|
||||
)
|
||||
)
|
||||
(vector-copy! (-> s2-1 trans) (-> s1-1 position))
|
||||
(set! (-> s2-1 trans w) 1.0)
|
||||
(if (logtest? (-> s3-1 ragdoll-flags) (ragdoll-flag mirror))
|
||||
(matrix*! s2-1 s2-1 (-> s3-1 mirror))
|
||||
)
|
||||
(set! a2-10
|
||||
(cond
|
||||
((>= (-> s3-1 flex-blend) 1.0)
|
||||
(matrix-copy! (-> arg0 bone transform) s2-1)
|
||||
)
|
||||
(else
|
||||
(let ((s1-3 (vector-lerp!
|
||||
(new 'stack-no-clear 'vector)
|
||||
(matrix->trans (-> arg0 bone transform) (new 'stack-no-clear 'vector))
|
||||
(-> s2-1 trans)
|
||||
(-> s3-1 flex-blend)
|
||||
)
|
||||
)
|
||||
)
|
||||
(ragdoll-matrix-interp (-> arg0 bone transform) (-> arg0 bone transform) s2-1 (-> s3-1 flex-blend))
|
||||
(vector-copy! (-> arg0 bone transform trans) s1-3)
|
||||
)
|
||||
(ragdoll-matrix-interp (-> arg0 bone transform) (-> arg0 bone transform) s2-1 (-> s3-1 flex-blend))
|
||||
(set! (-> arg0 bone transform trans quad) (-> s1-3 quad))
|
||||
(set! (-> arg0 bone transform trans w) 1.0)
|
||||
a2-10
|
||||
)
|
||||
)
|
||||
(set! (-> arg0 bone transform trans w) 1.0)
|
||||
)
|
||||
)
|
||||
)
|
||||
(let ((v1-60 (new 'stack-no-clear 'vector)))
|
||||
(let ((a0-50 v1-60))
|
||||
(let ((a1-24 (-> s3-1 scale))
|
||||
(a2-14 (-> arg2 root scale))
|
||||
)
|
||||
(.lvf vf4 (&-> a1-24 quad))
|
||||
(.lvf vf5 (&-> a2-14 quad))
|
||||
)
|
||||
(.add.x.vf.w vf6 vf0 vf0)
|
||||
(.mul.vf.xyz vf6 vf4 vf5)
|
||||
(.svf (&-> a0-50 quad) vf6)
|
||||
)
|
||||
(let ((a1-25 v1-60))
|
||||
(let ((a0-51 v1-60)
|
||||
(a2-15 (-> arg1 scale))
|
||||
)
|
||||
(.lvf vf4 (&-> a0-51 quad))
|
||||
(.lvf vf5 (&-> a2-15 quad))
|
||||
)
|
||||
(.add.x.vf.w vf6 vf0 vf0)
|
||||
(.mul.vf.xyz vf6 vf4 vf5)
|
||||
(.svf (&-> a1-25 quad) vf6)
|
||||
)
|
||||
(let ((a0-53 (-> arg0 bone transform)))
|
||||
(let ((a1-27 (-> arg0 bone transform))
|
||||
(a2-16 v1-60)
|
||||
)
|
||||
(.lvf vf4 (&-> a1-27 rvec quad))
|
||||
(.lvf vf5 (&-> a2-16 quad))
|
||||
)
|
||||
(.add.x.vf.w vf6 vf0 vf0)
|
||||
(.mul.vf.xyz vf6 vf4 vf5)
|
||||
(.svf (&-> a0-53 rvec quad) vf6)
|
||||
)
|
||||
(let ((a0-55 (-> arg0 bone transform uvec)))
|
||||
(let ((a1-29 (-> arg0 bone transform uvec))
|
||||
(a2-17 v1-60)
|
||||
)
|
||||
(.lvf vf4 (&-> a1-29 quad))
|
||||
(.lvf vf5 (&-> a2-17 quad))
|
||||
)
|
||||
(.add.x.vf.w vf6 vf0 vf0)
|
||||
(.mul.vf.xyz vf6 vf4 vf5)
|
||||
(.svf (&-> a0-55 quad) vf6)
|
||||
)
|
||||
(let ((a0-57 (-> arg0 bone transform fvec)))
|
||||
(.lvf vf4 (&-> (-> arg0 bone transform fvec) quad))
|
||||
(.lvf vf5 (&-> v1-60 quad))
|
||||
(.add.x.vf.w vf6 vf0 vf0)
|
||||
(.mul.vf.xyz vf6 vf4 vf5)
|
||||
(.svf (&-> a0-57 quad) vf6)
|
||||
)
|
||||
)
|
||||
(set! (-> arg0 bone transform rvec w) 0.0)
|
||||
(set! (-> arg0 bone transform uvec w) 0.0)
|
||||
(set! (-> arg0 bone transform fvec w) 0.0)
|
||||
)
|
||||
(let ((v1-60 (new 'stack-no-clear 'vector)))
|
||||
(vector*! v1-60 (-> s3-1 scale) (-> arg2 root scale))
|
||||
(vector*! v1-60 v1-60 (-> arg1 scale))
|
||||
(vector*! (the-as vector (-> arg0 bone transform)) (the-as vector (-> arg0 bone transform)) v1-60)
|
||||
(vector*! (-> arg0 bone transform uvec) (-> arg0 bone transform uvec) v1-60)
|
||||
(vector*! (-> arg0 bone transform fvec) (-> arg0 bone transform fvec) v1-60)
|
||||
)
|
||||
(set! (-> arg0 bone transform rvec w) 0.0)
|
||||
(set! (-> arg0 bone transform uvec w) 0.0)
|
||||
(set! (-> arg0 bone transform fvec w) 0.0)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(when *debug-segment*
|
||||
(let ((gp-1 (-> *display* frames (-> *display* on-screen) profile-array data 0)))
|
||||
(when (and *dproc* *debug-segment*)
|
||||
(let* ((v1-75 (+ (-> gp-1 depth) -1))
|
||||
(s5-1 (-> gp-1 segment v1-75))
|
||||
(s4-1 (-> gp-1 base-time))
|
||||
)
|
||||
(when (>= v1-75 0)
|
||||
(set! (-> s5-1 end-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s4-1))))
|
||||
(+! (-> gp-1 depth) -1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
0
|
||||
)
|
||||
(none)
|
||||
)
|
||||
(when *debug-segment*
|
||||
(let ((gp-1 (-> *display* frames (-> *display* on-screen) profile-array data 0)))
|
||||
(when (and *dproc* *debug-segment*)
|
||||
(let* ((v1-75 (+ (-> gp-1 depth) -1))
|
||||
(s5-1 (-> gp-1 segment v1-75))
|
||||
(s4-1 (-> gp-1 base-time))
|
||||
)
|
||||
(when (>= v1-75 0)
|
||||
(set! (-> s5-1 end-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s4-1))))
|
||||
(+! (-> gp-1 depth) -1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
0
|
||||
)
|
||||
(none)
|
||||
)
|
||||
|
||||
(defbehavior ragdoll-other-joint-callback ragdoll-proc ((arg0 cspace) (arg1 transformq))
|
||||
@@ -863,7 +803,7 @@
|
||||
)
|
||||
(vector-! (-> s1-0 velocity) sv-144 (-> s1-0 position))
|
||||
(vector-float*! (-> s1-0 velocity) (-> s1-0 velocity) (/ 1.0 (-> pp clock time-adjust-ratio)))
|
||||
(set! (-> s1-0 position quad) (-> sv-144 quad))
|
||||
(vector-copy! (-> s1-0 position) sv-144)
|
||||
)
|
||||
(else
|
||||
(vector<-cspace! (-> s1-0 position) (-> arg0 node-list data (-> s1-0 joint-index)))
|
||||
@@ -891,7 +831,7 @@
|
||||
(vector<-cspace! s0-0 (-> arg0 node-list data (-> this ragdoll-joints (+ s2-1 -1) joint-index)))
|
||||
)
|
||||
(else
|
||||
(set! (-> s0-0 quad) (-> arg0 root trans quad))
|
||||
(vector-copy! s0-0 (-> arg0 root trans))
|
||||
)
|
||||
)
|
||||
(if (logtest? (-> this ragdoll-flags) (ragdoll-flag mirror))
|
||||
@@ -990,7 +930,7 @@
|
||||
(let ((s4-1 (new 'stack-no-clear 'matrix)))
|
||||
(matrix-axis-angle! s4-1 (-> this orient-tform) (- (-> this orient-tform w)))
|
||||
(matrix*! s4-1 s4-1 arg2)
|
||||
(set! (-> s4-1 trans quad) (-> arg2 trans quad))
|
||||
(vector-copy! (-> s4-1 trans) (-> arg2 trans))
|
||||
(add-debug-matrix #t (bucket-id debug-no-zbuf1) s4-1 (meters 2))
|
||||
)
|
||||
)
|
||||
@@ -1009,7 +949,7 @@
|
||||
(quaternion->matrix arg3 (-> s2-0 quat))
|
||||
(matrix-axis-angle! s3-0 (-> arg1 pre-tform) (- (-> arg1 pre-tform w)))
|
||||
(matrix*! arg3 s3-0 arg3)
|
||||
(set! (-> arg3 trans quad) (-> s2-0 position quad))
|
||||
(vector-copy! (-> arg3 trans) (-> s2-0 position))
|
||||
)
|
||||
(else
|
||||
(matrix-axis-angle! s3-0 (-> arg1 pre-tform) (- (-> arg1 pre-tform w)))
|
||||
@@ -1023,15 +963,15 @@
|
||||
(let ((s3-1 (new 'stack-no-clear 'matrix))
|
||||
(s5-1 (new 'stack-no-clear 'vector))
|
||||
)
|
||||
(set! (-> s5-1 quad) (-> arg3 trans quad))
|
||||
(vector-copy! s5-1 (-> arg3 trans))
|
||||
(matrix-axis-angle! s3-1 (-> arg1 pre-tform) (- (-> arg1 pre-tform w)))
|
||||
(matrix*! arg3 s3-1 arg3)
|
||||
(set! (-> arg3 trans quad) (-> s5-1 quad))
|
||||
(vector-copy! (-> arg3 trans) s5-1)
|
||||
)
|
||||
)
|
||||
(else
|
||||
(quaternion->matrix arg3 (-> arg0 root quat))
|
||||
(set! (-> arg3 trans quad) (-> arg0 root trans quad))
|
||||
(vector-copy! (-> arg3 trans) (-> arg0 root trans))
|
||||
)
|
||||
)
|
||||
0
|
||||
@@ -1344,7 +1284,7 @@
|
||||
(.svf (&-> v1-176 quad) vf1)
|
||||
)
|
||||
)
|
||||
(set! (-> s0-1 position quad) (-> sv-560 quad))
|
||||
(vector-copy! (-> s0-1 position) sv-560)
|
||||
(cond
|
||||
((or (> s1-1 0) (!= (-> s0-1 parent-joint) -1))
|
||||
(vector-! (-> s3-1 uvec) sv-560 (-> s2-1 trans))
|
||||
@@ -1392,11 +1332,11 @@
|
||||
(.mul.x.vf acc vf2 vf3)
|
||||
(.add.mul.w.vf.xyz vf4 vf1 vf0 acc)
|
||||
(.svf (&-> sv-544 quad) vf4)
|
||||
(set! (-> s0-1 old-x quad) (-> s3-1 rvec quad))
|
||||
(vector-copy! (-> s0-1 old-x) (-> s3-1 rvec))
|
||||
)
|
||||
(else
|
||||
(set! (-> s3-1 rvec quad) (-> sv-528 quad))
|
||||
(set! (-> s0-1 old-x quad) (-> s3-1 rvec quad))
|
||||
(vector-copy! (-> s3-1 rvec) sv-528)
|
||||
(vector-copy! (-> s0-1 old-x) (-> s3-1 rvec))
|
||||
)
|
||||
)
|
||||
(vector-cross! (-> s3-1 fvec) (-> s3-1 rvec) (-> s3-1 uvec))
|
||||
@@ -1411,27 +1351,16 @@
|
||||
(quaternion->matrix s3-1 (-> s0-1 quat))
|
||||
)
|
||||
)
|
||||
(set! (-> s3-1 trans quad) (-> sv-560 quad))
|
||||
(vector-copy! (-> s3-1 trans) sv-560)
|
||||
(set! (-> s3-1 rvec w) 0.0)
|
||||
(set! (-> s3-1 uvec w) 0.0)
|
||||
(set! (-> s3-1 fvec w) 0.0)
|
||||
(if (and (zero? s1-1) (< (-> s0-1 parent-joint) 0) (logtest? (-> this ragdoll-flags) (ragdoll-flag rf7)))
|
||||
(set! (-> arg0 root trans quad) (-> s3-1 trans quad))
|
||||
(vector-copy! (-> arg0 root trans) (-> s3-1 trans))
|
||||
)
|
||||
(ragdoll-method-13 this arg1 s0-1 s3-1 s2-1)
|
||||
)
|
||||
(let* ((a2-19 s2-1)
|
||||
(a3-10 s3-1)
|
||||
(v1-216 (-> a3-10 rvec quad))
|
||||
(a0-119 (-> a3-10 uvec quad))
|
||||
(a1-47 (-> a3-10 fvec quad))
|
||||
(a3-11 (-> a3-10 trans quad))
|
||||
)
|
||||
(set! (-> a2-19 rvec quad) v1-216)
|
||||
(set! (-> a2-19 uvec quad) a0-119)
|
||||
(set! (-> a2-19 fvec quad) a1-47)
|
||||
(set! (-> a2-19 trans quad) a3-11)
|
||||
)
|
||||
(matrix-copy! s2-1 s3-1)
|
||||
)
|
||||
)
|
||||
(if (and (< (min (the-as int (-> this num-joints)) (max 2 (the int (* 0.9 (the float (-> this num-joints))))))
|
||||
@@ -1479,8 +1408,8 @@
|
||||
(set! (-> s2-0 joint-type) (-> v1-15 joint-type))
|
||||
(set! (-> s2-0 joint-index) (-> v1-15 joint-index))
|
||||
(set! (-> s2-0 parent-joint) (-> v1-15 parent-joint))
|
||||
(set! (-> s2-0 pre-tform quad) (-> v1-15 pre-tform quad))
|
||||
(set! (-> s2-0 geo-tform quad) (-> v1-15 geo-tform quad))
|
||||
(vector-copy! (-> s2-0 pre-tform) (-> v1-15 pre-tform))
|
||||
(vector-copy! (-> s2-0 geo-tform) (-> v1-15 geo-tform))
|
||||
(set! (-> s2-0 axial-slop) (-> v1-15 axial-slop))
|
||||
(set! (-> s2-0 max-angle) (-> v1-15 max-angle))
|
||||
(set! (-> s2-0 coll-rad) (-> v1-15 coll-rad))
|
||||
@@ -1509,11 +1438,11 @@
|
||||
)
|
||||
0
|
||||
)
|
||||
(set! (-> this orient-tform quad) (-> setup orient-tform quad))
|
||||
(set! (-> this scale quad) (-> setup scale quad))
|
||||
(vector-copy! (-> this orient-tform) (-> setup orient-tform))
|
||||
(vector-copy! (-> this scale) (-> setup scale))
|
||||
(set! (-> this bg-collide-with) (the-as uint (-> setup bg-collide-with)))
|
||||
(set-vector! (-> this gravity) 0.0 -1.0 0.0 1.0)
|
||||
(set! (-> this gravity-target quad) (-> this gravity quad))
|
||||
(vector-copy! (-> this gravity-target) (-> this gravity))
|
||||
(set! (-> this stretch-vel) 0.7)
|
||||
(set! (-> this stretch-vel-parallel) 0.8)
|
||||
(set! (-> this compress-vel) 0.85)
|
||||
@@ -1584,7 +1513,7 @@
|
||||
)
|
||||
)
|
||||
((= proc *target*)
|
||||
(set! (-> s4-0 quad) (-> (the-as process-drawable proc) root trans quad))
|
||||
(vector-copy! s4-0 (-> (the-as process-drawable proc) root trans))
|
||||
(vector-! s5-0 (-> s2-0 root trans) (-> (the-as process-drawable proc) root trans))
|
||||
(set! s3-0 #t)
|
||||
)
|
||||
@@ -1600,12 +1529,12 @@
|
||||
(the-as touching-shapes-entry a3-1)
|
||||
)
|
||||
)
|
||||
(set! (-> s4-0 quad) (-> s5-0 quad))
|
||||
(vector-copy! s4-0 s5-0)
|
||||
(vector-! s5-0 (-> s2-0 root trans) s5-0)
|
||||
(set! s3-0 #t)
|
||||
)
|
||||
(when (logtest? (attack-mask attacker-velocity) (-> (the-as attack-info gp-0) mask))
|
||||
(set! (-> s5-0 quad) (-> (the-as attack-info gp-0) attacker-velocity quad))
|
||||
(vector-copy! s5-0 (-> (the-as attack-info gp-0) attacker-velocity))
|
||||
(when (not s3-0)
|
||||
(vector-! s4-0 (-> self ragdoll ragdoll-joints 0 position) s5-0)
|
||||
(set! s3-0 #t)
|
||||
@@ -1620,7 +1549,7 @@
|
||||
(set! (-> s5-0 y) 0.0)
|
||||
(vector-normalize! s5-0 409.6)
|
||||
(+! (-> s5-0 y) 1024.0)
|
||||
(set! (-> self ragdoll ragdoll-joints 0 velocity quad) (-> s5-0 quad))
|
||||
(vector-copy! (-> self ragdoll ragdoll-joints 0 velocity) s5-0)
|
||||
(if (logtest? (-> (the-as attack-info gp-0) mask) (attack-mask id))
|
||||
(set! (-> self last-attack-id) (-> (the-as attack-info gp-0) id))
|
||||
)
|
||||
|
||||
@@ -541,7 +541,7 @@
|
||||
((-> jcontrol postbind-function) this joints jcontrol)
|
||||
)
|
||||
(let ((a1-5 (new 'stack-no-clear 'vector)))
|
||||
(set! (-> a1-5 quad) (-> this bounds quad))
|
||||
(vector-copy! a1-5 (-> this bounds))
|
||||
(set! (-> a1-5 w) 1.0)
|
||||
(vector-norm-matrix*!
|
||||
(-> this origin)
|
||||
@@ -819,7 +819,7 @@
|
||||
(set! (-> v1-35 origin-joint-index) (the-as uint (-> skelgroup origin-joint-index)))
|
||||
(set! (-> v1-35 shadow-joint-index) (the-as uint (-> skelgroup shadow-joint-index)))
|
||||
)
|
||||
(set! (-> s2-0 bounds quad) (-> skelgroup bounds quad))
|
||||
(vector-copy! (-> s2-0 bounds) (-> skelgroup bounds))
|
||||
(let ((v1-37 (-> skelgroup shadow)))
|
||||
(when (and (> v1-37 0) (< v1-37 sv-20))
|
||||
(let ((s0-0 (-> s1-0 data v1-37)))
|
||||
@@ -923,19 +923,17 @@
|
||||
)
|
||||
)
|
||||
(else
|
||||
(set! (-> s3-0 skeleton bones 0 transform trans quad) (-> (the-as vector (get-property-struct
|
||||
(-> s3-0 jgeo extra)
|
||||
'trans-offset
|
||||
'interp
|
||||
-1000000000.0
|
||||
*null-vector*
|
||||
(the-as (pointer res-tag) #f)
|
||||
*res-static-buf*
|
||||
)
|
||||
)
|
||||
quad
|
||||
)
|
||||
)
|
||||
(vector-copy! (-> s3-0 skeleton bones 0 transform trans) (the-as vector (get-property-struct
|
||||
(-> s3-0 jgeo extra)
|
||||
'trans-offset
|
||||
'interp
|
||||
-1000000000.0
|
||||
*null-vector*
|
||||
(the-as (pointer res-tag) #f)
|
||||
*res-static-buf*
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -1118,53 +1116,36 @@
|
||||
|
||||
(defbehavior ja-linear-vel process-drawable ((chan int))
|
||||
(local-vars (s4-1 vector) (sv-16 res-tag))
|
||||
(rlet ((vf0 :class vf)
|
||||
(vf4 :class vf)
|
||||
(vf5 :class vf)
|
||||
(vf6 :class vf)
|
||||
(let* ((s4-0 (-> self skel root-channel chan))
|
||||
(v1-2 (-> s4-0 frame-group))
|
||||
)
|
||||
(init-vf0-vector)
|
||||
(let* ((s4-0 (-> self skel root-channel chan))
|
||||
(v1-2 (-> s4-0 frame-group))
|
||||
)
|
||||
(cond
|
||||
((-> v1-2 extra)
|
||||
(set! sv-16 (new 'static 'res-tag))
|
||||
(let ((gp-0 (res-lump-data (-> v1-2 extra) 'linear-vel pointer :tag-ptr (& sv-16))))
|
||||
(cond
|
||||
(gp-0
|
||||
(let* ((s5-0 (the int (the float (the int (-> s4-0 frame-num)))))
|
||||
(f0-5 (-> s4-0 frame-num))
|
||||
(f28-0 (- f0-5 (the float (the int f0-5))))
|
||||
)
|
||||
(set! s4-1 (new 'static 'vector))
|
||||
(let ((f30-0 (ja-rate 0)))
|
||||
(vector-lerp! s4-1 (the-as vector (&+ gp-0 (* s5-0 16))) (the-as vector (&+ gp-0 (* (+ s5-0 1) 16))) f28-0)
|
||||
(let ((a0-7 s4-1))
|
||||
(let ((v1-9 s4-1)
|
||||
(a1-3 (-> self root scale))
|
||||
)
|
||||
(.lvf vf4 (&-> v1-9 quad))
|
||||
(.lvf vf5 (&-> a1-3 quad))
|
||||
)
|
||||
(.add.x.vf.w vf6 vf0 vf0)
|
||||
(.mul.vf.xyz vf6 vf4 vf5)
|
||||
(.svf (&-> a0-7 quad) vf6)
|
||||
)
|
||||
(vector-float*! s4-1 s4-1 f30-0)
|
||||
)
|
||||
(cond
|
||||
((-> v1-2 extra)
|
||||
(set! sv-16 (new 'static 'res-tag))
|
||||
(let ((gp-0 (res-lump-data (-> v1-2 extra) 'linear-vel pointer :tag-ptr (& sv-16))))
|
||||
(cond
|
||||
(gp-0
|
||||
(let* ((s5-0 (the int (the float (the int (-> s4-0 frame-num)))))
|
||||
(f0-5 (-> s4-0 frame-num))
|
||||
(f28-0 (- f0-5 (the float (the int f0-5))))
|
||||
)
|
||||
(set! s4-1 (new 'static 'vector))
|
||||
(let ((f30-0 (ja-rate 0)))
|
||||
(vector-lerp! s4-1 (the-as vector (&+ gp-0 (* s5-0 16))) (the-as vector (&+ gp-0 (* (+ s5-0 1) 16))) f28-0)
|
||||
(vector*! s4-1 s4-1 (-> self root scale))
|
||||
(vector-float*! s4-1 s4-1 f30-0)
|
||||
)
|
||||
)
|
||||
(else
|
||||
(set! s4-1 *null-vector*)
|
||||
)
|
||||
)
|
||||
(else
|
||||
(set! s4-1 *null-vector*)
|
||||
)
|
||||
)
|
||||
s4-1
|
||||
)
|
||||
(else
|
||||
*null-vector*
|
||||
)
|
||||
s4-1
|
||||
)
|
||||
(else
|
||||
*null-vector*
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -2079,8 +2060,8 @@
|
||||
(set! v1-0 (-> self entity))
|
||||
)
|
||||
(if arg1
|
||||
(set! (-> gp-0 quad) (-> arg1 quad))
|
||||
(set! (-> gp-0 quad) (-> v1-0 extra trans quad))
|
||||
(vector-copy! gp-0 arg1)
|
||||
(vector-copy! gp-0 (-> v1-0 extra trans))
|
||||
)
|
||||
(let ((s5-0 (-> v1-0 extra perm task))
|
||||
(s4-0 (new 'static 'fact-info))
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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))
|
||||
|
||||
+1
-13
@@ -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+*!
|
||||
|
||||
+92
-109
@@ -7,122 +7,105 @@
|
||||
;; ERROR: Unsupported inline assembly instruction kind - [jr ra]
|
||||
(defmethod compute-alignment! ((this align-control))
|
||||
(local-vars (a0-10 symbol) (s7-0 none) (ra-0 int))
|
||||
(rlet ((vf0 :class vf)
|
||||
(vf4 :class vf)
|
||||
(vf5 :class vf)
|
||||
(vf6 :class vf)
|
||||
)
|
||||
(init-vf0-vector)
|
||||
(update-anim-data (-> this process skel))
|
||||
(let ((s5-0 (-> this process skel active-channels)))
|
||||
(dotimes (s4-0 (the-as int s5-0))
|
||||
(let* ((a0-4 (-> this process skel channel s4-0))
|
||||
(v1-7 (-> a0-4 frame-group))
|
||||
)
|
||||
(case (-> a0-4 command)
|
||||
(((joint-control-command stack) (joint-control-command stack1))
|
||||
(update-anim-data (-> this process skel))
|
||||
(let ((s5-0 (-> this process skel active-channels)))
|
||||
(dotimes (s4-0 (the-as int s5-0))
|
||||
(let* ((a0-4 (-> this process skel channel s4-0))
|
||||
(v1-7 (-> a0-4 frame-group))
|
||||
)
|
||||
(else
|
||||
(when (!= (-> v1-7 type) art-joint-anim)
|
||||
(go process-drawable-art-error "align joint-anim")
|
||||
(.lw ra-0 return-from-thread s7-0)
|
||||
(.jr ra-0)
|
||||
(nop!)
|
||||
0
|
||||
)
|
||||
(case (-> a0-4 command)
|
||||
(((joint-control-command stack) (joint-control-command stack1))
|
||||
)
|
||||
(else
|
||||
(when (!= (-> v1-7 type) art-joint-anim)
|
||||
(go process-drawable-art-error "align joint-anim")
|
||||
(.lw ra-0 return-from-thread s7-0)
|
||||
(.jr ra-0)
|
||||
(nop!)
|
||||
0
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(let* ((a0-9 (-> this process skel root-channel 0))
|
||||
(v1-18 (-> a0-9 frame-group))
|
||||
(f0-0 (-> a0-9 frame-num))
|
||||
)
|
||||
(= (-> a0-9 num-func) num-func-loop!)
|
||||
(cond
|
||||
((or (not v1-18) (!= (-> this frame-group) v1-18))
|
||||
(set! a0-10 #t)
|
||||
)
|
||||
((= (-> a0-9 num-func) num-func-loop!)
|
||||
(set! a0-10 (< (* (-> a0-9 param 0) (- f0-0 (-> this frame-num))) 0.0))
|
||||
)
|
||||
(else
|
||||
(set! a0-10 (= f0-0 0.0))
|
||||
)
|
||||
)
|
||||
(if a0-10
|
||||
(logior! (-> this flags) (align-flags disabled))
|
||||
(logclear! (-> this flags) (align-flags disabled))
|
||||
)
|
||||
(set! (-> this frame-group) v1-18)
|
||||
(set! (-> this frame-num) f0-0)
|
||||
)
|
||||
(mem-copy! (the-as pointer (-> this transform 1)) (the-as pointer (-> this transform)) 48)
|
||||
(quaternion-copy! (the-as quaternion (-> this transform 1 rot)) (-> this align quat))
|
||||
(set! (-> this transform 1 scale quad) (-> this align scale quad))
|
||||
(let* ((a2-5 (-> this matrix 1))
|
||||
(a3-0 (-> this matrix))
|
||||
(v1-21 (-> a3-0 0 quad 0))
|
||||
(a0-19 (-> a3-0 0 quad 1))
|
||||
(a1-13 (-> a3-0 0 quad 2))
|
||||
(a3-1 (-> a3-0 0 trans quad))
|
||||
)
|
||||
(set! (-> a2-5 quad 0) v1-21)
|
||||
(set! (-> a2-5 quad 1) a0-19)
|
||||
(set! (-> a2-5 quad 2) a1-13)
|
||||
(set! (-> a2-5 trans quad) a3-1)
|
||||
)
|
||||
(let ((s5-1 (-> this process node-list data 1)))
|
||||
(cspace<-matrix-no-push-joint! s5-1 (-> this process skel))
|
||||
(let* ((v1-25 (-> this matrix))
|
||||
(a3-2 (-> s5-1 bone transform))
|
||||
(a0-22 (-> a3-2 quad 0))
|
||||
(a1-15 (-> a3-2 quad 1))
|
||||
(a2-6 (-> a3-2 quad 2))
|
||||
(a3-3 (-> a3-2 trans quad))
|
||||
)
|
||||
(set! (-> v1-25 0 quad 0) a0-22)
|
||||
(set! (-> v1-25 0 quad 1) a1-15)
|
||||
(set! (-> v1-25 0 quad 2) a2-6)
|
||||
(set! (-> v1-25 0 trans quad) a3-3)
|
||||
)
|
||||
(let ((v1-26 (-> this transform)))
|
||||
(let ((a0-24 (-> s5-1 bone transform trans))
|
||||
(a1-18 (-> this process root scale))
|
||||
)
|
||||
(.lvf vf4 (&-> a0-24 quad))
|
||||
(.lvf vf5 (&-> a1-18 quad))
|
||||
)
|
||||
(.add.x.vf vf6 vf0 vf0 :mask #b1000)
|
||||
(.mul.vf vf6 vf4 vf5 :mask #b111)
|
||||
(.svf (&-> v1-26 0 trans quad) vf6)
|
||||
)
|
||||
)
|
||||
(vector-!
|
||||
(the-as vector (-> this delta))
|
||||
(the-as vector (-> this transform))
|
||||
(the-as vector (-> this transform 1))
|
||||
)
|
||||
(set-vector!
|
||||
(-> this align scale)
|
||||
(vector-length (the-as vector (-> this matrix)))
|
||||
(vector-length (-> this matrix 0 vector 1))
|
||||
(vector-length (-> this matrix 0 vector 2))
|
||||
1.0
|
||||
)
|
||||
(vector-! (-> this delta scale) (-> this align scale) (-> this transform 1 scale))
|
||||
(let ((a2-7 (matrix-inv-scale! (new 'stack-no-clear 'matrix) (-> this align scale))))
|
||||
(quaternion-normalize!
|
||||
(matrix->quaternion (-> this align quat) (matrix*! a2-7 (the-as matrix (-> this matrix)) a2-7))
|
||||
)
|
||||
)
|
||||
(let ((a1-27 (quaternion-inverse! (new 'stack-no-clear 'quaternion) (the-as quaternion (-> this transform 1 rot))))
|
||||
)
|
||||
(quaternion-normalize! (quaternion*! (-> this delta quat) a1-27 (-> this align quat)))
|
||||
)
|
||||
(-> this delta)
|
||||
)
|
||||
(let* ((a0-9 (-> this process skel root-channel 0))
|
||||
(v1-18 (-> a0-9 frame-group))
|
||||
(f0-0 (-> a0-9 frame-num))
|
||||
)
|
||||
(= (-> a0-9 num-func) num-func-loop!)
|
||||
(cond
|
||||
((or (not v1-18) (!= (-> this frame-group) v1-18))
|
||||
(set! a0-10 #t)
|
||||
)
|
||||
((= (-> a0-9 num-func) num-func-loop!)
|
||||
(set! a0-10 (< (* (-> a0-9 param 0) (- f0-0 (-> this frame-num))) 0.0))
|
||||
)
|
||||
(else
|
||||
(set! a0-10 (= f0-0 0.0))
|
||||
)
|
||||
)
|
||||
(if a0-10
|
||||
(logior! (-> this flags) (align-flags disabled))
|
||||
(logclear! (-> this flags) (align-flags disabled))
|
||||
)
|
||||
(set! (-> this frame-group) v1-18)
|
||||
(set! (-> this frame-num) f0-0)
|
||||
)
|
||||
(mem-copy! (the-as pointer (-> this transform 1)) (the-as pointer (-> this transform)) 48)
|
||||
(quaternion-copy! (the-as quaternion (-> this transform 1 rot)) (-> this align quat))
|
||||
(set! (-> this transform 1 scale quad) (-> this align scale quad))
|
||||
(let* ((a2-5 (-> this matrix 1))
|
||||
(a3-0 (-> this matrix))
|
||||
(v1-21 (-> a3-0 0 quad 0))
|
||||
(a0-19 (-> a3-0 0 quad 1))
|
||||
(a1-13 (-> a3-0 0 quad 2))
|
||||
(a3-1 (-> a3-0 0 trans quad))
|
||||
)
|
||||
(set! (-> a2-5 quad 0) v1-21)
|
||||
(set! (-> a2-5 quad 1) a0-19)
|
||||
(set! (-> a2-5 quad 2) a1-13)
|
||||
(set! (-> a2-5 trans quad) a3-1)
|
||||
)
|
||||
(let ((s5-1 (-> this process node-list data 1)))
|
||||
(cspace<-matrix-no-push-joint! s5-1 (-> this process skel))
|
||||
(let* ((v1-25 (-> this matrix))
|
||||
(a3-2 (-> s5-1 bone transform))
|
||||
(a0-22 (-> a3-2 quad 0))
|
||||
(a1-15 (-> a3-2 quad 1))
|
||||
(a2-6 (-> a3-2 quad 2))
|
||||
(a3-3 (-> a3-2 trans quad))
|
||||
)
|
||||
(set! (-> v1-25 0 quad 0) a0-22)
|
||||
(set! (-> v1-25 0 quad 1) a1-15)
|
||||
(set! (-> v1-25 0 quad 2) a2-6)
|
||||
(set! (-> v1-25 0 trans quad) a3-3)
|
||||
)
|
||||
(vector*! (the-as vector (-> this transform)) (-> s5-1 bone transform trans) (-> this process root scale))
|
||||
)
|
||||
(vector-!
|
||||
(the-as vector (-> this delta))
|
||||
(the-as vector (-> this transform))
|
||||
(the-as vector (-> this transform 1))
|
||||
)
|
||||
(set-vector!
|
||||
(-> this align scale)
|
||||
(vector-length (the-as vector (-> this matrix)))
|
||||
(vector-length (-> this matrix 0 vector 1))
|
||||
(vector-length (-> this matrix 0 vector 2))
|
||||
1.0
|
||||
)
|
||||
(vector-! (-> this delta scale) (-> this align scale) (-> this transform 1 scale))
|
||||
(let ((a2-7 (matrix-inv-scale! (new 'stack-no-clear 'matrix) (-> this align scale))))
|
||||
(quaternion-normalize!
|
||||
(matrix->quaternion (-> this align quat) (matrix*! a2-7 (the-as matrix (-> this matrix)) a2-7))
|
||||
)
|
||||
)
|
||||
(let ((a1-27 (quaternion-inverse! (new 'stack-no-clear 'quaternion) (the-as quaternion (-> this transform 1 rot))))
|
||||
)
|
||||
(quaternion-normalize! (quaternion*! (-> this delta quat) a1-27 (-> this align quat)))
|
||||
)
|
||||
(-> this delta)
|
||||
)
|
||||
|
||||
;; definition for method 12 of type align-control
|
||||
|
||||
+52
-67
@@ -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
|
||||
|
||||
+338
-423
@@ -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
|
||||
|
||||
+1
-13
@@ -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+*!
|
||||
|
||||
+44
-61
@@ -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)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
+93
-110
@@ -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
|
||||
|
||||
+54
-88
@@ -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
|
||||
|
||||
+304
-389
@@ -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
|
||||
|
||||
+1
-13
@@ -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+*!
|
||||
|
||||
+96
-149
@@ -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
|
||||
|
||||
+24
-41
@@ -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*
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
+31
-41
@@ -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
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
+36
-63
@@ -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)
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+36
-63
@@ -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)
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user