[decompiler] Detect vector*! (#3846)

Detect use of `vector*!`, which is inlined in jak 2 and jak 3.

---------

Co-authored-by: water111 <awaterford1111445@gmail.com>
This commit is contained in:
water111
2025-01-20 12:21:28 -05:00
committed by GitHub
parent 3ee2b4423c
commit 98d6618a8b
37 changed files with 2449 additions and 3185 deletions
+3
View File
@@ -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;
+1
View File
@@ -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,
+1
View File
@@ -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");
+2
View File
@@ -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;
+1
View File
@@ -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,
+61
View File
@@ -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"]
},
+1
View File
@@ -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:
+97 -111
View File
@@ -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))
+82 -77
View File
@@ -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)
+217 -285
View File
@@ -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))
+44 -61
View File
@@ -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)
)
)
+95 -112
View File
@@ -10,125 +10,108 @@
;; ERROR: Unsupported inline assembly instruction kind - [lw ra, return-from-thread(s7)]
;; ERROR: Unsupported inline assembly instruction kind - [jr ra]
(defmethod compute-alignment! ((this align-control))
(local-vars (a0-10 symbol) (s7-0 none) (ra-0 int))
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(update-anim-data (-> this process skel))
(let ((s5-0 (-> this process skel active-channels)))
(dotimes (s4-0 (the-as int s5-0))
(let* ((a0-4 (-> this process skel channel s4-0))
(v1-7 (-> a0-4 frame-group))
)
(case (-> a0-4 command)
(((joint-control-command stack) (joint-control-command stack1))
(local-vars (disable? symbol) (s7-0 none) (ra-0 int))
(update-anim-data (-> this process skel))
(let ((num-chans (-> this process skel active-channels)))
(dotimes (chan-idx (the-as int num-chans))
(let* ((chan (-> this process skel channel chan-idx))
(frame-group (-> chan frame-group))
)
(else
(when (!= (-> v1-7 type) art-joint-anim)
(go process-drawable-art-error "align joint-anim")
;; og:preserve-this
;; (.lw ra-0 return-from-thread s7-0)
;; (.jr ra-0)
(abandon-thread)
(nop!)
0
)
(case (-> chan command)
(((joint-control-command stack) (joint-control-command stack1))
)
(else
(when (!= (-> frame-group type) art-joint-anim)
(go process-drawable-art-error "align joint-anim")
;; og:preserve-this
(abandon-thread)
;; (.lw ra-0 return-from-thread s7-0)
;; (.jr ra-0)
;; (nop!)
0
)
)
)
)
)
(let* ((a0-9 (-> this process skel root-channel 0))
(v1-18 (-> a0-9 frame-group))
(f0-0 (-> a0-9 frame-num))
)
(= (-> a0-9 num-func) num-func-loop!)
(cond
((or (not v1-18) (!= (-> this frame-group) v1-18))
(set! a0-10 #t)
)
((= (-> a0-9 num-func) num-func-loop!)
(set! a0-10 (< (* (-> a0-9 param 0) (- f0-0 (-> this frame-num))) 0.0))
)
(else
(set! a0-10 (= f0-0 0.0))
)
)
(if a0-10
(logior! (-> this flags) (align-flags disabled))
(logclear! (-> this flags) (align-flags disabled))
)
(set! (-> this frame-group) v1-18)
(set! (-> this frame-num) f0-0)
)
(mem-copy! (the-as pointer (-> this transform 1)) (the-as pointer (-> this transform)) 48)
(quaternion-copy! (the-as quaternion (-> this transform 1 rot)) (-> this align quat))
(vector-copy! (-> this transform 1 scale) (-> this align scale))
(let* ((a2-5 (-> this matrix 1))
(a3-0 (-> this matrix))
(v1-21 (-> a3-0 0 rvec quad))
(a0-19 (-> a3-0 0 uvec quad))
(a1-13 (-> a3-0 0 fvec quad))
(a3-1 (-> a3-0 0 trans quad))
)
(set! (-> a2-5 rvec quad) v1-21)
(set! (-> a2-5 uvec quad) a0-19)
(set! (-> a2-5 fvec quad) a1-13)
(set! (-> a2-5 trans quad) a3-1)
)
(let ((s5-1 (-> this process node-list data 1)))
(cspace<-matrix-no-push-joint! s5-1 (-> this process skel))
(let* ((v1-25 (-> this matrix))
(a3-2 (-> s5-1 bone transform))
(a0-22 (-> a3-2 rvec quad))
(a1-15 (-> a3-2 uvec quad))
(a2-6 (-> a3-2 fvec quad))
(a3-3 (-> a3-2 trans quad))
)
(set! (-> v1-25 0 rvec quad) a0-22)
(set! (-> v1-25 0 uvec quad) a1-15)
(set! (-> v1-25 0 fvec quad) a2-6)
(set! (-> v1-25 0 trans quad) a3-3)
)
(let ((v1-26 (-> this transform)))
(let ((a0-24 (-> s5-1 bone transform trans))
(a1-18 (-> this process root scale))
)
(.lvf vf4 (&-> a0-24 quad))
(.lvf vf5 (&-> a1-18 quad))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> v1-26 0 trans quad) vf6)
)
)
(vector-!
(the-as vector (-> this delta))
(the-as vector (-> this transform))
(the-as vector (-> this transform 1))
)
(set-vector!
(-> this align scale)
(vector-length (the-as vector (-> this matrix)))
(vector-length (-> this matrix 0 uvec))
(vector-length (-> this matrix 0 fvec))
1.0
)
(vector-! (-> this delta scale) (-> this align scale) (-> this transform 1 scale))
(let ((a2-7 (matrix-inv-scale! (new 'stack-no-clear 'matrix) (-> this align scale))))
(quaternion-normalize!
(matrix->quaternion (-> this align quat) (matrix*! a2-7 (the-as matrix (-> this matrix)) a2-7))
)
)
(let ((a1-27 (quaternion-inverse! (new 'stack-no-clear 'quaternion) (the-as quaternion (-> this transform 1 rot))))
)
(quaternion-normalize! (quaternion*! (-> this delta quat) a1-27 (-> this align quat)))
)
(-> this delta)
)
(let* ((root-chan (-> this process skel root-channel 0))
(root-frame-group (-> root-chan frame-group))
(root-frame-num (-> root-chan frame-num))
)
(= (-> root-chan num-func) num-func-loop!)
(cond
((or (not root-frame-group) (!= (-> this frame-group) root-frame-group))
(set! disable? #t)
)
((= (-> root-chan num-func) num-func-loop!)
(set! disable? (< (* (-> root-chan param 0) (- root-frame-num (-> this frame-num))) 0.0))
)
(else
(set! disable? (= root-frame-num 0.0))
)
)
(if disable?
(logior! (-> this flags) (align-flags disabled))
(logclear! (-> this flags) (align-flags disabled))
)
(set! (-> this frame-group) root-frame-group)
(set! (-> this frame-num) root-frame-num)
)
(mem-copy! (the-as pointer (-> this transform 1)) (the-as pointer (-> this transform)) 48)
(quaternion-copy! (the-as quaternion (-> this transform 1 rot)) (-> this align quat))
(vector-copy! (-> this transform 1 scale) (-> this align scale))
(let* ((a2-5 (-> this matrix 1))
(a3-0 (-> this matrix))
(v1-21 (-> a3-0 0 rvec quad))
(a0-19 (-> a3-0 0 uvec quad))
(a1-13 (-> a3-0 0 fvec quad))
(a3-1 (-> a3-0 0 trans quad))
)
(set! (-> a2-5 rvec quad) v1-21)
(set! (-> a2-5 uvec quad) a0-19)
(set! (-> a2-5 fvec quad) a1-13)
(set! (-> a2-5 trans quad) a3-1)
)
(let ((s5-1 (-> this process node-list data 1)))
(cspace<-matrix-no-push-joint! s5-1 (-> this process skel))
(let* ((v1-25 (-> this matrix))
(a3-2 (-> s5-1 bone transform))
(a0-22 (-> a3-2 rvec quad))
(a1-15 (-> a3-2 uvec quad))
(a2-6 (-> a3-2 fvec quad))
(a3-3 (-> a3-2 trans quad))
)
(set! (-> v1-25 0 rvec quad) a0-22)
(set! (-> v1-25 0 uvec quad) a1-15)
(set! (-> v1-25 0 fvec quad) a2-6)
(set! (-> v1-25 0 trans quad) a3-3)
)
(vector*! (the-as vector (-> this transform)) (-> s5-1 bone transform trans) (-> this process root scale))
)
(vector-!
(the-as vector (-> this delta))
(the-as vector (-> this transform))
(the-as vector (-> this transform 1))
)
(set-vector!
(-> this align scale)
(vector-length (the-as vector (-> this matrix)))
(vector-length (-> this matrix 0 uvec))
(vector-length (-> this matrix 0 fvec))
1.0
)
(vector-! (-> this delta scale) (-> this align scale) (-> this transform 1 scale))
(let ((a2-7 (matrix-inv-scale! (new 'stack-no-clear 'matrix) (-> this align scale))))
(quaternion-normalize!
(matrix->quaternion (-> this align quat) (matrix*! a2-7 (the-as matrix (-> this matrix)) a2-7))
)
)
(let ((a1-27 (quaternion-inverse! (new 'stack-no-clear 'quaternion) (the-as quaternion (-> this transform 1 rot))))
)
(quaternion-normalize! (quaternion*! (-> this delta quat) a1-27 (-> this align quat)))
)
(-> this delta)
)
;; WARN: Return type mismatch (inline-array transform) vs transform.
+54 -88
View File
@@ -373,37 +373,20 @@ Unlike jak 2, this actually multiplies the scale, instead of adding."
(defun joint-mod-add-local-callback ((bone-cspace cspace) (joint-transform transformq))
"Callback for joint-mod-add-local. See comment on that type."
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(let ((s4-0 (the-as joint-mod-add-local (-> bone-cspace param1))))
(if (logtest? (-> s4-0 flags) (joint-mod-base-flags trans))
(vector+! (-> joint-transform trans) (-> joint-transform trans) (the-as vector (-> s4-0 transform)))
)
(when (logtest? (-> s4-0 flags) (joint-mod-base-flags quat))
(quaternion*! (-> joint-transform quat) (-> joint-transform quat) (-> s4-0 transform quat))
(quaternion-normalize! (-> joint-transform quat))
)
(when (logtest? (-> s4-0 flags) (joint-mod-base-flags scale))
(let ((a0-4 (-> joint-transform scale)))
(let ((v1-11 (-> joint-transform scale))
(a1-4 (-> s4-0 transform scale))
)
(.lvf vf4 (&-> v1-11 quad))
(.lvf vf5 (&-> a1-4 quad))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> a0-4 quad) vf6)
)
(let ((s4-0 (the-as joint-mod-add-local (-> bone-cspace param1))))
(if (logtest? (-> s4-0 flags) (joint-mod-base-flags trans))
(vector+! (-> joint-transform trans) (-> joint-transform trans) (the-as vector (-> s4-0 transform)))
)
(when (logtest? (-> s4-0 flags) (joint-mod-base-flags quat))
(quaternion*! (-> joint-transform quat) (-> joint-transform quat) (-> s4-0 transform quat))
(quaternion-normalize! (-> joint-transform quat))
)
(cspace<-parented-transformq-joint! bone-cspace joint-transform)
(none)
(if (logtest? (-> s4-0 flags) (joint-mod-base-flags scale))
(vector*! (-> joint-transform scale) (-> joint-transform scale) (-> s4-0 transform scale))
)
)
(cspace<-parented-transformq-joint! bone-cspace joint-transform)
(none)
)
(defmethod init ((this joint-mod-add-local) (arg0 process-drawable) (arg1 uint) (arg2 joint-mod-base-flags))
@@ -552,71 +535,54 @@ Then, apply the normal parented transform."
;; WARN: Return type mismatch matrix vs none.
(defun joint-mod-blend-world-callback ((bone-cspace cspace) (joint-transform transformq))
"Callback for joint-mod-blend-world. See comment on that type."
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(let ((gp-0 (the-as joint-mod-blend-world (-> bone-cspace param1))))
(let ((f30-0 (if (logtest? (-> gp-0 flags) (joint-mod-base-flags trans))
(-> gp-0 blend)
0.0
)
)
(f28-0 (if (logtest? (-> gp-0 flags) (joint-mod-base-flags quat))
(-> gp-0 blend)
0.0
)
)
(f26-0 (if (logtest? (-> gp-0 flags) (joint-mod-base-flags scale))
(-> gp-0 blend)
0.0
)
)
(s3-0 (new 'stack-no-clear 'joint-mod-blend-world-work))
)
(if (= (-> bone-cspace parent bone scale w) 0.0)
(matrix<-transformq! (-> s3-0 mat1) joint-transform)
(matrix<-parented-transformq! (-> s3-0 mat1) joint-transform (-> bone-cspace parent bone scale))
)
(matrix*! (-> s3-0 mat2) (-> s3-0 mat1) (-> bone-cspace parent bone transform))
(set-vector!
(-> s3-0 vec)
(vector-length (the-as vector (-> s3-0 mat2)))
(vector-length (-> s3-0 mat2 uvec))
(vector-length (-> s3-0 mat2 fvec))
1.0
(let ((gp-0 (the-as joint-mod-blend-world (-> bone-cspace param1))))
(let ((f30-0 (if (logtest? (-> gp-0 flags) (joint-mod-base-flags trans))
(-> gp-0 blend)
0.0
)
)
(f28-0 (if (logtest? (-> gp-0 flags) (joint-mod-base-flags quat))
(-> gp-0 blend)
0.0
)
)
(f26-0 (if (logtest? (-> gp-0 flags) (joint-mod-base-flags scale))
(-> gp-0 blend)
0.0
)
)
(s3-0 (new 'stack-no-clear 'joint-mod-blend-world-work))
)
(let ((a0-11 (-> gp-0 blend-transform scale)))
(let ((v1-18 (-> s3-0 vec))
(a1-4 (-> joint-transform scale))
)
(.lvf vf4 (&-> v1-18 quad))
(.lvf vf5 (&-> a1-4 quad))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> a0-11 quad) vf6)
)
(vector-lerp!
(the-as vector (-> gp-0 blend-transform))
(-> s3-0 mat2 trans)
(the-as vector (-> gp-0 transform))
f30-0
)
(vector-lerp! (-> gp-0 blend-transform scale) (-> gp-0 blend-transform scale) (-> gp-0 transform scale) f26-0)
(quaternion-slerp!
(-> gp-0 blend-transform quat)
(matrix->quat (-> s3-0 mat2) (-> s3-0 quat))
(-> gp-0 transform quat)
f28-0
(if (= (-> bone-cspace parent bone scale w) 0.0)
(matrix<-transformq! (-> s3-0 mat1) joint-transform)
(matrix<-parented-transformq! (-> s3-0 mat1) joint-transform (-> bone-cspace parent bone scale))
)
(matrix*! (-> s3-0 mat2) (-> s3-0 mat1) (-> bone-cspace parent bone transform))
(set-vector!
(-> s3-0 vec)
(vector-length (the-as vector (-> s3-0 mat2)))
(vector-length (-> s3-0 mat2 uvec))
(vector-length (-> s3-0 mat2 fvec))
1.0
)
(vector*! (-> gp-0 blend-transform scale) (-> s3-0 vec) (-> joint-transform scale))
(vector-lerp!
(the-as vector (-> gp-0 blend-transform))
(-> s3-0 mat2 trans)
(the-as vector (-> gp-0 transform))
f30-0
)
(vector-lerp! (-> gp-0 blend-transform scale) (-> gp-0 blend-transform scale) (-> gp-0 transform scale) f26-0)
(quaternion-slerp!
(-> gp-0 blend-transform quat)
(matrix->quat (-> s3-0 mat2) (-> s3-0 quat))
(-> gp-0 transform quat)
f28-0
)
(cspace<-transformq! bone-cspace (-> gp-0 blend-transform))
)
(none)
(cspace<-transformq! bone-cspace (-> gp-0 blend-transform))
)
(none)
)
(defmethod init ((this joint-mod-blend-world) (arg0 process-drawable) (arg1 uint) (arg2 joint-mod-base-flags))
+304 -389
View File
@@ -295,103 +295,52 @@
(sv-168 vector)
(sv-172 symbol)
)
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(set! sv-16 (the-as joint-mod (-> arg0 param1)))
(let ((a0-1 (-> arg1 scale)))
(let ((v1-1 (-> arg1 scale))
(a2-1 (-> sv-16 scale))
)
(.lvf vf4 (&-> v1-1 quad))
(.lvf vf5 (&-> a2-1 quad))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> a0-1 quad) vf6)
)
(cspace<-parented-transformq-joint! arg0 arg1)
(let ((s5-0 (-> arg0 bone transform)))
(let ((s4-0 (matrix->quat s5-0 (new 'stack-no-clear 'quaternion))))
(set! sv-64 (matrix->trans s5-0 (new 'stack-no-clear 'vector)))
(quaternion-rotate-y! s4-0 s4-0 (-> sv-16 twist z))
(set! sv-96 (quaternion-copy! (new 'stack-no-clear 'quaternion) s4-0))
(when (!= (-> sv-16 flex-blend) 0.0)
(set! sv-160 (vector-y-quaternion! (new 'stack-no-clear 'vector) sv-96))
(set! sv-164 (vector-z-quaternion! (new 'stack-no-clear 'vector) sv-96))
(set! sv-168 (vector-normalize! (vector-! (new 'stack-no-clear 'vector) (-> sv-16 target) sv-64) 1.0))
(set! sv-172 (the-as symbol #f))
(let* ((f30-0 (vector-y-angle sv-164))
(a0-13 (vector-flatten! (new 'stack-no-clear 'vector) sv-168 sv-160))
(f0-2 (vector-y-angle a0-13))
(f0-3 (deg-diff f30-0 f0-2))
(f30-1 (* f0-3 (-> sv-16 blend)))
)
(let ((f28-0 (fmax (fmin f30-1 (-> sv-16 twist-max y)) (- (-> sv-16 twist-max y)))))
(if (or (!= f30-1 f28-0) (= (-> sv-16 blend) 0.0))
(logclear! (-> sv-16 track-mode) (track-mode lock-on))
)
(cond
((or (< (-> sv-16 ignore-angle) (fabs f0-3))
(< (-> sv-16 twist-max w) (vector-vector-distance (-> sv-16 target) sv-64))
)
(set! f30-1 0.0)
(set! f28-0 0.0)
(set! sv-172 #t)
)
((< 5461.3335 (fabs (deg-diff f30-1 f28-0)))
(set! (-> sv-16 blend) 0.0001)
)
((< 182.04445 (fabs (deg-diff f30-1 f28-0)))
(logclear! (-> sv-16 track-mode) (track-mode track-x))
)
(set! sv-16 (the-as joint-mod (-> arg0 param1)))
(vector*! (-> arg1 scale) (-> arg1 scale) (-> sv-16 scale))
(cspace<-parented-transformq-joint! arg0 arg1)
(let ((s5-0 (-> arg0 bone transform)))
(let ((s4-0 (matrix->quat s5-0 (new 'stack-no-clear 'quaternion))))
(set! sv-64 (matrix->trans s5-0 (new 'stack-no-clear 'vector)))
(quaternion-rotate-y! s4-0 s4-0 (-> sv-16 twist z))
(set! sv-96 (quaternion-copy! (new 'stack-no-clear 'quaternion) s4-0))
(when (!= (-> sv-16 flex-blend) 0.0)
(set! sv-160 (vector-y-quaternion! (new 'stack-no-clear 'vector) sv-96))
(set! sv-164 (vector-z-quaternion! (new 'stack-no-clear 'vector) sv-96))
(set! sv-168 (vector-normalize! (vector-! (new 'stack-no-clear 'vector) (-> sv-16 target) sv-64) 1.0))
(set! sv-172 (the-as symbol #f))
(let* ((f30-0 (vector-y-angle sv-164))
(a0-14 (vector-flatten! (new 'stack-no-clear 'vector) sv-168 sv-160))
(f0-2 (vector-y-angle a0-14))
(f0-3 (deg-diff f30-0 f0-2))
(f30-1 (* f0-3 (-> sv-16 blend)))
)
(let ((f28-0 (fmax (fmin f30-1 (-> sv-16 twist-max y)) (- (-> sv-16 twist-max y)))))
(if (or (!= f30-1 f28-0) (= (-> sv-16 blend) 0.0))
(logclear! (-> sv-16 track-mode) (track-mode lock-on))
)
(if (or (and (logtest? (-> sv-16 track-mode) (track-mode track-y)) (= f30-1 f28-0))
(< (-> sv-16 twist-max y) (fabs (-> sv-16 twist y)))
)
(set! (-> sv-16 twist y)
(deg-seek (-> sv-16 twist y) f28-0 (* (fabs (deg-diff f28-0 (-> sv-16 twist y)))
(if (logtest? (-> sv-16 track-mode) (track-mode lock-on))
1.0
(-> sv-16 twist-speed-y)
)
(-> self clock time-adjust-ratio)
)
)
)
)
(cond
((or (< (-> sv-16 ignore-angle) (fabs f0-3))
(< (-> sv-16 twist-max w) (vector-vector-distance (-> sv-16 target) sv-64))
)
(set! f30-1 0.0)
(set! f28-0 0.0)
(set! sv-172 #t)
)
((< 5461.3335 (fabs (deg-diff f30-1 f28-0)))
(set! (-> sv-16 blend) 0.0001)
)
((< 182.04445 (fabs (deg-diff f30-1 f28-0)))
(logclear! (-> sv-16 track-mode) (track-mode track-x))
)
)
(if (and (< (fabs (deg-diff f30-1 (-> sv-16 twist y))) 728.1778) (and (not sv-172) (!= (-> sv-16 blend) 0.0)))
(logior! (-> sv-16 track-mode) (track-mode lock-on))
)
)
(quaternion-rotate-local-y! sv-96 sv-96 (-> sv-16 twist y))
(let* ((s3-1 (vector-x-quaternion! (new 'stack-no-clear 'vector) sv-96))
(f30-2 (vector-x-angle sv-164))
(s3-2 (vector-flatten! (new 'stack-no-clear 'vector) sv-168 s3-1))
(f0-24 (vector-x-angle s3-2))
(f30-3 (fmax
(fmin (* (- (deg-diff f30-2 f0-24)) (-> sv-16 blend)) (-> sv-16 twist-max x))
(- (-> sv-16 twist-max x))
)
)
)
(if (or (< (vector-dot s3-2 sv-164) 0.1)
(< (-> sv-16 twist-max z) (vector-vector-distance (-> sv-16 target) sv-64))
(if (or (and (logtest? (-> sv-16 track-mode) (track-mode track-y)) (= f30-1 f28-0))
(< (-> sv-16 twist-max y) (fabs (-> sv-16 twist y)))
)
(set! f30-3 0.0)
)
(if (or (logtest? (-> sv-16 track-mode) (track-mode track-x))
(< (-> sv-16 twist-max x) (fabs (-> sv-16 twist x)))
)
(set! (-> sv-16 twist x)
(deg-seek (-> sv-16 twist x) f30-3 (* (fabs (deg-diff f30-3 (-> sv-16 twist x)))
(set! (-> sv-16 twist y)
(deg-seek (-> sv-16 twist y) f28-0 (* (fabs (deg-diff f28-0 (-> sv-16 twist y)))
(if (logtest? (-> sv-16 track-mode) (track-mode lock-on))
1.0
(-> sv-16 twist-speed-x)
(-> sv-16 twist-speed-y)
)
(-> self clock time-adjust-ratio)
)
@@ -399,55 +348,89 @@
)
)
)
(quaternion-rotate-x! sv-96 sv-96 (-> sv-16 twist x))
(quaternion-normalize! (quaternion*! sv-96 sv-96 (-> sv-16 quat)))
(if (and (< (fabs (deg-diff f30-1 (-> sv-16 twist y))) 728.1778) (and (not sv-172) (!= (-> sv-16 blend) 0.0)))
(logior! (-> sv-16 track-mode) (track-mode lock-on))
)
)
(let ((a1-27 (quaternion-slerp! (new 'stack-no-clear 'quaternion) s4-0 sv-96 (-> sv-16 flex-blend))))
(matrix<-quat s5-0 a1-27)
(quaternion-rotate-local-y! sv-96 sv-96 (-> sv-16 twist y))
(let* ((s3-1 (vector-x-quaternion! (new 'stack-no-clear 'vector) sv-96))
(f30-2 (vector-x-angle sv-164))
(s3-2 (vector-flatten! (new 'stack-no-clear 'vector) sv-168 s3-1))
(f0-24 (vector-x-angle s3-2))
(f30-3 (fmax
(fmin (* (- (deg-diff f30-2 f0-24)) (-> sv-16 blend)) (-> sv-16 twist-max x))
(- (-> sv-16 twist-max x))
)
)
)
(if (or (< (vector-dot s3-2 sv-164) 0.1)
(< (-> sv-16 twist-max z) (vector-vector-distance (-> sv-16 target) sv-64))
)
(set! f30-3 0.0)
)
(if (or (logtest? (-> sv-16 track-mode) (track-mode track-x))
(< (-> sv-16 twist-max x) (fabs (-> sv-16 twist x)))
)
(set! (-> sv-16 twist x)
(deg-seek (-> sv-16 twist x) f30-3 (* (fabs (deg-diff f30-3 (-> sv-16 twist x)))
(if (logtest? (-> sv-16 track-mode) (track-mode lock-on))
1.0
(-> sv-16 twist-speed-x)
)
(-> self clock time-adjust-ratio)
)
)
)
)
)
(quaternion-rotate-x! sv-96 sv-96 (-> sv-16 twist x))
(quaternion-normalize! (quaternion*! sv-96 sv-96 (-> sv-16 quat)))
)
(let ((f30-4 (-> sv-16 trans x))
(s4-1 (-> s5-0 uvec))
(v1-97 (vector<-matrix! (new 'stack-no-clear 'vector) s5-0))
)
(let ((f0-43 (- f30-4 (-> v1-97 y))))
(if (< 614.4 (fabs f0-43))
(+! (-> sv-16 trans z) (* 8.0 f0-43))
)
)
(+! (-> sv-16 trans z) (* -260.0 (seconds-per-frame) (-> sv-16 trans y)))
(let ((f0-48 (-> sv-16 trans y)))
(+! (-> sv-16 trans y) (* (-> sv-16 trans z) (seconds-per-frame)))
(set! (-> sv-16 trans y) (* 0.95 (-> sv-16 trans y)))
(when (< (* f0-48 (-> sv-16 trans y)) 0.0)
(set! (-> sv-16 trans y) 0.0)
(set! (-> sv-16 trans z) 0.0)
)
)
(cond
((< 409.6 (-> sv-16 trans y))
(set! (-> sv-16 trans y) 409.6)
(set! (-> sv-16 trans z) 0.0)
)
((< (-> sv-16 trans y) -409.6)
(set! (-> sv-16 trans y) -409.6)
(set! (-> sv-16 trans z) 0.0)
)
)
(set! (-> sv-16 trans x) (-> v1-97 y))
(let ((f0-60 (* (-> sv-16 trans y) (-> sv-16 flex-blend))))
(if (!= f0-60 0.0)
(vector+float*! (-> s5-0 trans) v1-97 s4-1 f0-60)
)
)
(let ((a1-27 (quaternion-slerp! (new 'stack-no-clear 'quaternion) s4-0 sv-96 (-> sv-16 flex-blend))))
(matrix<-quat s5-0 a1-27)
)
)
(if (-> sv-16 parented-scale?)
(set-vector! (-> arg0 bone scale) 1.0 1.0 1.0 1.0)
(let ((f30-4 (-> sv-16 trans x))
(s4-1 (-> s5-0 uvec))
(v1-97 (vector<-matrix! (new 'stack-no-clear 'vector) s5-0))
)
(let ((f0-43 (- f30-4 (-> v1-97 y))))
(if (< 614.4 (fabs f0-43))
(+! (-> sv-16 trans z) (* 8.0 f0-43))
)
)
0
(none)
(+! (-> sv-16 trans z) (* -260.0 (seconds-per-frame) (-> sv-16 trans y)))
(let ((f0-48 (-> sv-16 trans y)))
(+! (-> sv-16 trans y) (* (-> sv-16 trans z) (seconds-per-frame)))
(set! (-> sv-16 trans y) (* 0.95 (-> sv-16 trans y)))
(when (< (* f0-48 (-> sv-16 trans y)) 0.0)
(set! (-> sv-16 trans y) 0.0)
(set! (-> sv-16 trans z) 0.0)
)
)
(cond
((< 409.6 (-> sv-16 trans y))
(set! (-> sv-16 trans y) 409.6)
(set! (-> sv-16 trans z) 0.0)
)
((< (-> sv-16 trans y) -409.6)
(set! (-> sv-16 trans y) -409.6)
(set! (-> sv-16 trans z) 0.0)
)
)
(set! (-> sv-16 trans x) (-> v1-97 y))
(let ((f0-60 (* (-> sv-16 trans y) (-> sv-16 flex-blend))))
(if (!= f0-60 0.0)
(vector+float*! (-> s5-0 trans) v1-97 s4-1 f0-60)
)
)
)
)
(if (-> sv-16 parented-scale?)
(set-vector! (-> arg0 bone scale) 1.0 1.0 1.0 1.0)
)
0
(none)
)
(defbehavior joint-mod-gun-look-at-handler process ((arg0 cspace) (arg1 transformq))
@@ -752,138 +735,121 @@
(sv-160 (pointer uint128))
(sv-164 symbol)
)
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(let ((gp-0 (the-as joint-mod (-> arg0 param1))))
(cspace<-parented-transformq-joint! arg0 arg1)
(let ((s3-0 (-> arg0 bone transform)))
(set! sv-144 (new 'stack-no-clear 'matrix))
(set! sv-148 (new 'stack-no-clear 'quaternion))
(set! sv-152 (new 'stack-no-clear 'vector))
(set! sv-156 (new 'stack-no-clear 'vector))
(set! sv-160
(&-> (-> gp-0 process node-list data (-> gp-0 base-joint) bone) transform quad (-> gp-0 base-nose))
)
(set! sv-164
(< (vector-dot (-> s3-0 rvec) (vector-cross! (new 'stack-no-clear 'vector) (-> s3-0 uvec) (-> s3-0 fvec)))
0.0
)
)
(vector-normalize-copy! (-> sv-144 rvec) (the-as vector (&-> s3-0 quad (-> gp-0 ear))) (if sv-164
-1.0
1.0
)
)
(vector-normalize-copy! (-> sv-144 uvec) (the-as vector (&-> s3-0 quad (-> gp-0 up))) 1.0)
(vector-normalize-copy! (-> sv-144 fvec) (the-as vector (&-> s3-0 quad (-> gp-0 nose))) 1.0)
)
(vector-reset! (-> sv-144 trans))
(matrix->quaternion sv-148 sv-144)
(vector-normalize! (vector-! sv-152 (-> gp-0 target) (-> arg0 bone transform trans)) 1.0)
(vector-inv-orient-by-quat! sv-156 sv-152 sv-148)
(let ((f30-0 (vector-y-angle sv-156))
(f0-2 (if (= (-> gp-0 base-joint) (+ (-> arg0 joint number) 1))
0.0
(deg-diff (vector-y-angle (-> sv-144 fvec)) (vector-y-angle (the-as vector sv-160)))
)
)
(let ((gp-0 (the-as joint-mod (-> arg0 param1))))
(cspace<-parented-transformq-joint! arg0 arg1)
(let ((s3-0 (-> arg0 bone transform)))
(set! sv-144 (new 'stack-no-clear 'matrix))
(set! sv-148 (new 'stack-no-clear 'quaternion))
(set! sv-152 (new 'stack-no-clear 'vector))
(set! sv-156 (new 'stack-no-clear 'vector))
(set! sv-160
(&-> (-> gp-0 process node-list data (-> gp-0 base-joint) bone) transform quad (-> gp-0 base-nose))
)
(if (< (-> gp-0 ignore-angle) (fabs f30-0))
(set! f30-0 0.0)
(set! sv-164
(< (vector-dot (-> s3-0 rvec) (vector-cross! (new 'stack-no-clear 'vector) (-> s3-0 uvec) (-> s3-0 fvec)))
0.0
)
)
(let ((f30-1
(fmax
(fmin (* f30-0 (-> gp-0 blend) (-> gp-0 flex-blend)) (+ (-> gp-0 twist-max y) (* f0-2 (-> gp-0 flex-blend))))
(+ (- (-> gp-0 twist-max y)) (* f0-2 (-> gp-0 flex-blend)))
)
)
)
(when (and (-> gp-0 shutting-down?) (< (fabs (- (-> gp-0 twist y) f30-1)) 18.204445))
(if (and (= (-> gp-0 scale x) 1.0) (= (-> gp-0 scale y) 1.0) (= (-> gp-0 scale z) 1.0))
(mode-set! gp-0 (joint-mod-mode reset))
(mode-set! gp-0 (joint-mod-mode rotate2))
)
)
(set! (-> gp-0 twist y)
(deg-seek
(-> gp-0 twist y)
f30-1
(* (fabs (deg-diff f30-1 (-> gp-0 twist y))) (-> gp-0 twist-speed-y) (-> self clock time-adjust-ratio))
)
)
)
)
(let ((f0-21 (if sv-164
(- (-> gp-0 twist y))
(-> gp-0 twist y)
)
)
(a1-18 (new-stack-vector0))
)
(set! (-> a1-18 data (-> gp-0 up)) 1.0)
(let ((a2-7 (quaternion-vector-angle! (new-stack-quaternion0) a1-18 f0-21)))
(quaternion-normalize! (quaternion*! (-> arg1 quat) (-> arg1 quat) a2-7))
)
)
(let ((f0-27
(fmax
(fmin (* (- (vector-x-angle sv-156)) (-> gp-0 blend) (-> gp-0 flex-blend)) (-> gp-0 twist-max x))
(- (-> gp-0 twist-max x))
)
)
)
(if (< (vector-dot sv-156 *z-vector*) 0.1)
(set! f0-27 0.0)
)
(set! (-> gp-0 twist x)
(deg-seek
(-> gp-0 twist x)
f0-27
(* (fabs (deg-diff f0-27 (-> gp-0 twist x))) (-> gp-0 twist-speed-x) (-> self clock time-adjust-ratio))
)
)
)
(let ((a1-22 (new-stack-vector0)))
(set! (-> a1-22 data (-> gp-0 ear)) 1.0)
(let ((a2-10 (quaternion-vector-angle! (new-stack-quaternion0) a1-22 (-> gp-0 twist x))))
(quaternion-normalize! (quaternion*! (-> arg1 quat) (-> arg1 quat) a2-10))
)
)
(vector+! (-> arg1 trans) (-> arg1 trans) (-> gp-0 trans))
(quaternion-normalize! (quaternion*! (-> arg1 quat) (-> arg1 quat) (-> gp-0 quat)))
(let ((a1-27 (-> arg1 scale)))
(let ((v1-71 (-> arg1 scale))
(a0-36 (-> gp-0 scale))
)
(.lvf vf4 (&-> v1-71 quad))
(.lvf vf5 (&-> a0-36 quad))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> a1-27 quad) vf6)
)
(cspace<-parented-transformq-joint! arg0 arg1)
(if (-> gp-0 parented-scale?)
(set-vector! (-> arg0 bone scale) 1.0 1.0 1.0 1.0)
)
(if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0))
(add-debug-text-sphere
*display-target-marks*
(bucket-id debug-no-zbuf1)
(-> gp-0 target)
(meters 0.2)
"look"
(new 'static 'rgba :r #xff :g #xff :a #x80)
)
)
(vector-normalize-copy! (-> sv-144 rvec) (the-as vector (&-> s3-0 quad (-> gp-0 ear))) (if sv-164
-1.0
1.0
)
)
(vector-normalize-copy! (-> sv-144 uvec) (the-as vector (&-> s3-0 quad (-> gp-0 up))) 1.0)
(vector-normalize-copy! (-> sv-144 fvec) (the-as vector (&-> s3-0 quad (-> gp-0 nose))) 1.0)
)
0
(none)
(vector-reset! (-> sv-144 trans))
(matrix->quaternion sv-148 sv-144)
(vector-normalize! (vector-! sv-152 (-> gp-0 target) (-> arg0 bone transform trans)) 1.0)
(vector-inv-orient-by-quat! sv-156 sv-152 sv-148)
(let ((f30-0 (vector-y-angle sv-156))
(f0-2 (if (= (-> gp-0 base-joint) (+ (-> arg0 joint number) 1))
0.0
(deg-diff (vector-y-angle (-> sv-144 fvec)) (vector-y-angle (the-as vector sv-160)))
)
)
)
(if (< (-> gp-0 ignore-angle) (fabs f30-0))
(set! f30-0 0.0)
)
(let ((f30-1
(fmax
(fmin (* f30-0 (-> gp-0 blend) (-> gp-0 flex-blend)) (+ (-> gp-0 twist-max y) (* f0-2 (-> gp-0 flex-blend))))
(+ (- (-> gp-0 twist-max y)) (* f0-2 (-> gp-0 flex-blend)))
)
)
)
(when (and (-> gp-0 shutting-down?) (< (fabs (- (-> gp-0 twist y) f30-1)) 18.204445))
(if (and (= (-> gp-0 scale x) 1.0) (= (-> gp-0 scale y) 1.0) (= (-> gp-0 scale z) 1.0))
(mode-set! gp-0 (joint-mod-mode reset))
(mode-set! gp-0 (joint-mod-mode rotate2))
)
)
(set! (-> gp-0 twist y)
(deg-seek
(-> gp-0 twist y)
f30-1
(* (fabs (deg-diff f30-1 (-> gp-0 twist y))) (-> gp-0 twist-speed-y) (-> self clock time-adjust-ratio))
)
)
)
)
(let ((f0-21 (if sv-164
(- (-> gp-0 twist y))
(-> gp-0 twist y)
)
)
(a1-18 (new-stack-vector0))
)
(set! (-> a1-18 data (-> gp-0 up)) 1.0)
(let ((a2-7 (quaternion-vector-angle! (new-stack-quaternion0) a1-18 f0-21)))
(quaternion-normalize! (quaternion*! (-> arg1 quat) (-> arg1 quat) a2-7))
)
)
(let ((f0-27
(fmax
(fmin (* (- (vector-x-angle sv-156)) (-> gp-0 blend) (-> gp-0 flex-blend)) (-> gp-0 twist-max x))
(- (-> gp-0 twist-max x))
)
)
)
(if (< (vector-dot sv-156 *z-vector*) 0.1)
(set! f0-27 0.0)
)
(set! (-> gp-0 twist x)
(deg-seek
(-> gp-0 twist x)
f0-27
(* (fabs (deg-diff f0-27 (-> gp-0 twist x))) (-> gp-0 twist-speed-x) (-> self clock time-adjust-ratio))
)
)
)
(let ((a1-22 (new-stack-vector0)))
(set! (-> a1-22 data (-> gp-0 ear)) 1.0)
(let ((a2-10 (quaternion-vector-angle! (new-stack-quaternion0) a1-22 (-> gp-0 twist x))))
(quaternion-normalize! (quaternion*! (-> arg1 quat) (-> arg1 quat) a2-10))
)
)
(vector+! (-> arg1 trans) (-> arg1 trans) (-> gp-0 trans))
(quaternion-normalize! (quaternion*! (-> arg1 quat) (-> arg1 quat) (-> gp-0 quat)))
(vector*! (-> arg1 scale) (-> arg1 scale) (-> gp-0 scale))
(cspace<-parented-transformq-joint! arg0 arg1)
(if (-> gp-0 parented-scale?)
(set-vector! (-> arg0 bone scale) 1.0 1.0 1.0 1.0)
)
(if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0))
(add-debug-text-sphere
*display-target-marks*
(bucket-id debug-no-zbuf1)
(-> gp-0 target)
(meters 0.2)
"look"
(new 'static 'rgba :r #xff :g #xff :a #x80)
)
)
)
0
(none)
)
(defbehavior joint-mod-world-look-at-handler process ((arg0 cspace) (arg1 transformq))
@@ -995,113 +961,79 @@
(defbehavior joint-mod-rotate-handler process ((arg0 cspace) (arg1 transformq))
"Callback for rotate joint mod."
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(let ((s5-0 (the-as joint-mod (-> arg0 param1))))
(let ((s3-0 (new 'static 'inline-array vector 3
(new 'static 'vector :x 1.0 :w 1.0)
(new 'static 'vector :y 1.0 :w 1.0)
(new 'static 'vector :z 1.0 :w 1.0)
)
(let ((s5-0 (the-as joint-mod (-> arg0 param1))))
(let ((s3-0 (new 'static 'inline-array vector 3
(new 'static 'vector :x 1.0 :w 1.0)
(new 'static 'vector :y 1.0 :w 1.0)
(new 'static 'vector :z 1.0 :w 1.0)
)
)
(if (not (logtest? (-> s5-0 track-mode) (track-mode no-trans)))
(vector+! (-> arg1 trans) (-> arg1 trans) (-> s5-0 trans))
)
(when (not (logtest? (-> s5-0 track-mode) (track-mode no-rotate)))
(let* ((v1-9 (-> s3-0 (-> s5-0 ear)))
(a1-4 (quaternion-axis-angle!
(new 'stack-no-clear 'quaternion)
(-> v1-9 x)
(-> v1-9 y)
(-> v1-9 z)
(* (-> s5-0 twist x) (-> s5-0 blend) (-> s5-0 flex-blend))
)
)
)
(quaternion-normalize! (quaternion*! (-> arg1 quat) a1-4 (-> arg1 quat)))
)
(let* ((v1-13 (-> s3-0 (-> s5-0 up)))
(a1-6 (quaternion-axis-angle!
(new 'stack-no-clear 'quaternion)
(-> v1-13 x)
(-> v1-13 y)
(-> v1-13 z)
(* (-> s5-0 twist y) (-> s5-0 blend) (-> s5-0 flex-blend))
)
)
)
(quaternion-normalize! (quaternion*! (-> arg1 quat) a1-6 (-> arg1 quat)))
)
(let* ((v1-17 (-> s3-0 (-> s5-0 nose)))
(a1-8 (quaternion-axis-angle!
(new 'stack-no-clear 'quaternion)
(-> v1-17 x)
(-> v1-17 y)
(-> v1-17 z)
(* (-> s5-0 twist z) (-> s5-0 blend) (-> s5-0 flex-blend))
)
)
)
(quaternion-normalize! (quaternion*! (-> arg1 quat) a1-8 (-> arg1 quat)))
)
)
)
(when (not (logtest? (-> s5-0 track-mode) (track-mode no-scale)))
(let ((a1-9 (-> arg1 scale)))
(let ((v1-22 (-> arg1 scale))
(a0-11 (-> s5-0 scale))
)
(.lvf vf4 (&-> v1-22 quad))
(.lvf vf5 (&-> a0-11 quad))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> a1-9 quad) vf6)
)
(if (not (logtest? (-> s5-0 track-mode) (track-mode no-trans)))
(vector+! (-> arg1 trans) (-> arg1 trans) (-> s5-0 trans))
)
(when (not (logtest? (-> s5-0 track-mode) (track-mode no-rotate)))
(let* ((v1-9 (-> s3-0 (-> s5-0 ear)))
(a1-4 (quaternion-axis-angle!
(new 'stack-no-clear 'quaternion)
(-> v1-9 x)
(-> v1-9 y)
(-> v1-9 z)
(* (-> s5-0 twist x) (-> s5-0 blend) (-> s5-0 flex-blend))
)
)
)
(quaternion-normalize! (quaternion*! (-> arg1 quat) a1-4 (-> arg1 quat)))
)
(let* ((v1-13 (-> s3-0 (-> s5-0 up)))
(a1-6 (quaternion-axis-angle!
(new 'stack-no-clear 'quaternion)
(-> v1-13 x)
(-> v1-13 y)
(-> v1-13 z)
(* (-> s5-0 twist y) (-> s5-0 blend) (-> s5-0 flex-blend))
)
)
)
(quaternion-normalize! (quaternion*! (-> arg1 quat) a1-6 (-> arg1 quat)))
)
(let* ((v1-17 (-> s3-0 (-> s5-0 nose)))
(a1-8 (quaternion-axis-angle!
(new 'stack-no-clear 'quaternion)
(-> v1-17 x)
(-> v1-17 y)
(-> v1-17 z)
(* (-> s5-0 twist z) (-> s5-0 blend) (-> s5-0 flex-blend))
)
)
)
(quaternion-normalize! (quaternion*! (-> arg1 quat) a1-8 (-> arg1 quat)))
)
)
(cspace<-parented-transformq-joint! arg0 arg1)
(if (-> s5-0 parented-scale?)
(set-vector! (-> arg0 bone scale) 1.0 1.0 1.0 1.0)
)
)
0
(none)
(if (not (logtest? (-> s5-0 track-mode) (track-mode no-scale)))
(vector*! (-> arg1 scale) (-> arg1 scale) (-> s5-0 scale))
)
(cspace<-parented-transformq-joint! arg0 arg1)
(if (-> s5-0 parented-scale?)
(set-vector! (-> arg0 bone scale) 1.0 1.0 1.0 1.0)
)
)
0
(none)
)
(defbehavior joint-mod-scale-handler process ((arg0 cspace) (arg1 transformq))
"Callback for scale joint mod."
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(let ((s5-0 (the-as joint-mod (-> arg0 param1))))
(let ((a2-0 (-> arg1 scale)))
(let ((v1-0 (-> arg1 scale))
(a0-1 (-> s5-0 scale))
)
(.lvf vf4 (&-> v1-0 quad))
(.lvf vf5 (&-> a0-1 quad))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> a2-0 quad) vf6)
(let ((s5-0 (the-as joint-mod (-> arg0 param1))))
(vector*! (-> arg1 scale) (-> arg1 scale) (-> s5-0 scale))
(cspace<-parented-transformq-joint! arg0 arg1)
(if (-> s5-0 parented-scale?)
(set-vector! (-> arg0 bone scale) 1.0 1.0 1.0 1.0)
)
(cspace<-parented-transformq-joint! arg0 arg1)
(if (-> s5-0 parented-scale?)
(set-vector! (-> arg0 bone scale) 1.0 1.0 1.0 1.0)
)
)
0
(none)
)
0
(none)
)
(defbehavior joint-mod-joint-set-handler process ((arg0 cspace) (arg1 transformq))
@@ -1206,40 +1138,23 @@
)
(defbehavior joint-mod-joint-set*-handler process ((arg0 cspace) (arg1 transformq))
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(let ((s5-0 (the-as joint-mod (-> arg0 param1))))
(if (not (logtest? (-> s5-0 track-mode) (track-mode no-trans)))
(vector+! (-> arg1 trans) (-> arg1 trans) (-> s5-0 trans))
)
(if (not (logtest? (-> s5-0 track-mode) (track-mode no-rotate)))
(quaternion-normalize! (quaternion*! (-> arg1 quat) (-> arg1 quat) (-> s5-0 quat)))
)
(when (not (logtest? (-> s5-0 track-mode) (track-mode no-scale)))
(let ((a1-4 (-> arg1 scale)))
(let ((v1-11 (-> arg1 scale))
(a0-4 (-> s5-0 scale))
)
(.lvf vf4 (&-> v1-11 quad))
(.lvf vf5 (&-> a0-4 quad))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> a1-4 quad) vf6)
)
(let ((s5-0 (the-as joint-mod (-> arg0 param1))))
(if (not (logtest? (-> s5-0 track-mode) (track-mode no-trans)))
(vector+! (-> arg1 trans) (-> arg1 trans) (-> s5-0 trans))
)
(if (not (logtest? (-> s5-0 track-mode) (track-mode no-rotate)))
(quaternion-normalize! (quaternion*! (-> arg1 quat) (-> arg1 quat) (-> s5-0 quat)))
)
(if (not (logtest? (-> s5-0 track-mode) (track-mode no-scale)))
(vector*! (-> arg1 scale) (-> arg1 scale) (-> s5-0 scale))
)
(cspace<-parented-transformq-joint! arg0 arg1)
(if (-> s5-0 parented-scale?)
(set-vector! (-> arg0 bone scale) 1.0 1.0 1.0 1.0)
)
(cspace<-parented-transformq-joint! arg0 arg1)
(if (-> s5-0 parented-scale?)
(set-vector! (-> arg0 bone scale) 1.0 1.0 1.0 1.0)
)
)
0
(none)
)
0
(none)
)
(defbehavior joint-mod-joint-set*-world-handler process ((arg0 cspace) (arg1 transformq))
+122 -193
View File
@@ -538,183 +538,123 @@
)
(defun ragdoll-joint-callback ((arg0 cspace) (arg1 transformq) (arg2 process-drawable) (arg3 ragdoll-proc))
(local-vars (sv-240 int) (sv-256 quaternion) (sv-272 vector) (sv-288 matrix))
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(when *debug-segment*
(let ((s2-0 (-> *display* frames (-> *display* on-screen) profile-array data 0))
(v1-7 'ragdoll-callback)
(s1-0 *color-white*)
)
(when (and *dproc* *debug-segment*)
(let ((s0-0 (-> s2-0 data (-> s2-0 count))))
(set! sv-240 (-> s2-0 base-time))
(set! (-> s0-0 name) v1-7)
(set! (-> s0-0 start-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint sv-240))))
(set! (-> s0-0 depth) (the-as uint (-> s2-0 depth)))
(set! (-> s0-0 color) s1-0)
(set! (-> s2-0 segment (-> s2-0 depth)) s0-0)
)
(set! (-> s2-0 count) (min 1023 (+ (-> s2-0 count) 1)))
(+! (-> s2-0 depth) 1)
(set! (-> s2-0 max-depth) (max (-> s2-0 max-depth) (-> s2-0 depth)))
(local-vars (a2-10 matrix) (sv-240 int) (sv-256 quaternion) (sv-272 vector) (sv-288 matrix))
(when *debug-segment*
(let ((s2-0 (-> *display* frames (-> *display* on-screen) profile-array data 0))
(v1-7 'ragdoll-callback)
(s1-0 *color-white*)
)
(when (and *dproc* *debug-segment*)
(let ((s0-0 (-> s2-0 data (-> s2-0 count))))
(set! sv-240 (-> s2-0 base-time))
(set! (-> s0-0 name) v1-7)
(set! (-> s0-0 start-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint sv-240))))
(set! (-> s0-0 depth) (the-as uint (-> s2-0 depth)))
(set! (-> s0-0 color) s1-0)
(set! (-> s2-0 segment (-> s2-0 depth)) s0-0)
)
(set! (-> s2-0 count) (min 1023 (+ (-> s2-0 count) 1)))
(+! (-> s2-0 depth) 1)
(set! (-> s2-0 max-depth) (max (-> s2-0 max-depth) (-> s2-0 depth)))
)
0
)
(when arg3
(let ((s3-1 (-> arg3 ragdoll)))
(when (and s3-1
(and (< 0.0 (-> s3-1 flex-blend)) (!= (-> s3-1 ragdoll-joint-remap (+ (-> arg0 joint number) 1)) 255))
)
(let ((s1-1 (-> s3-1 ragdoll-joints (-> s3-1 ragdoll-joint-remap (+ (-> arg0 joint number) 1)))))
(when s1-1
(if (and (-> s1-1 old-param0) (!= (-> s1-1 old-param0) ragdoll-other-joint-callback))
((the-as (function cspace transformq none) (-> s1-1 old-param0)) arg0 arg1)
(cspace<-parented-transformq-joint! arg0 arg1)
)
(let ((s2-1 (new 'stack-no-clear 'matrix)))
(set! sv-256
(quaternion-vector-angle! (new 'stack-no-clear 'quaternion) (-> s1-1 geo-tform) (-> s1-1 geo-tform w))
)
(quaternion-normalize! (quaternion*! sv-256 (-> s1-1 quat) sv-256))
(quaternion->matrix s2-1 sv-256)
(when (logtest? (-> s3-1 ragdoll-flags) (ragdoll-flag rf10))
(let ((v1-40 (&+ s1-1 188)))
(when (and (!= v1-40 (-> s3-1 ragdoll-joints (-> s3-1 num-joints))) (= (-> v1-40 parent-joint) -1))
(let ((s0-3 (vector-! (new 'stack-no-clear 'vector) (-> v1-40 position) (-> s1-1 position))))
(set! sv-272 (new 'stack-no-clear 'vector))
(set! sv-288 (new 'stack-no-clear 'matrix))
(vector-flatten! sv-272 s0-3 (-> s2-1 rvec))
(vector-normalize! sv-272 1.0)
(matrix-from-two-vectors! sv-288 (-> s2-1 uvec) sv-272)
(matrix*! s2-1 s2-1 sv-288)
(vector-flatten! sv-272 s0-3 (-> s2-1 fvec))
)
0
)
(when arg3
(let ((s3-1 (-> arg3 ragdoll)))
(when (and s3-1
(and (< 0.0 (-> s3-1 flex-blend)) (!= (-> s3-1 ragdoll-joint-remap (+ (-> arg0 joint number) 1)) 255))
)
(let ((s1-1 (-> s3-1 ragdoll-joints (-> s3-1 ragdoll-joint-remap (+ (-> arg0 joint number) 1)))))
(when s1-1
(if (and (-> s1-1 old-param0) (!= (-> s1-1 old-param0) ragdoll-other-joint-callback))
((the-as (function cspace transformq none) (-> s1-1 old-param0)) arg0 arg1)
(cspace<-parented-transformq-joint! arg0 arg1)
)
(let ((s2-1 (new 'stack-no-clear 'matrix)))
(set! sv-256
(quaternion-vector-angle! (new 'stack-no-clear 'quaternion) (-> s1-1 geo-tform) (-> s1-1 geo-tform w))
)
(quaternion-normalize! (quaternion*! sv-256 (-> s1-1 quat) sv-256))
(quaternion->matrix s2-1 sv-256)
(when (logtest? (-> s3-1 ragdoll-flags) (ragdoll-flag rf10))
(let ((v1-40 (&+ s1-1 188)))
(when (and (!= v1-40 (-> s3-1 ragdoll-joints (-> s3-1 num-joints))) (= (-> v1-40 parent-joint) -1))
(let ((s0-3 (vector-! (new 'stack-no-clear 'vector) (-> v1-40 position) (-> s1-1 position))))
(set! sv-272 (new 'stack-no-clear 'vector))
(set! sv-288 (new 'stack-no-clear 'matrix))
(vector-flatten! sv-272 s0-3 (-> s2-1 rvec))
(vector-normalize! sv-272 1.0)
(matrix-from-two-vectors! sv-288 (-> s2-1 uvec) sv-272)
(matrix*! s2-1 s2-1 sv-288)
(vector-flatten! sv-272 s0-3 (-> s2-1 fvec))
)
(vector-normalize! sv-272 1.0)
(matrix-from-two-vectors! sv-288 (-> s2-1 uvec) sv-272)
(matrix*! s2-1 s2-1 sv-288)
)
)
(set! (-> s2-1 trans quad) (-> s1-1 position quad))
(set! (-> s2-1 trans w) 1.0)
(if (logtest? (-> s3-1 ragdoll-flags) (ragdoll-flag mirror))
(matrix*! s2-1 s2-1 (-> s3-1 mirror))
)
(cond
((>= (-> s3-1 flex-blend) 1.0)
(let ((a2-10 (-> arg0 bone transform))
(v1-51 (-> s2-1 rvec quad))
(a0-45 (-> s2-1 uvec quad))
(a1-20 (-> s2-1 fvec quad))
(a3-1 (-> s2-1 trans quad))
)
(set! (-> a2-10 rvec quad) v1-51)
(set! (-> a2-10 uvec quad) a0-45)
(set! (-> a2-10 fvec quad) a1-20)
(set! (-> a2-10 trans quad) a3-1)
)
)
(else
(let ((s1-3 (vector-lerp!
(new 'stack-no-clear 'vector)
(matrix->trans (-> arg0 bone transform) (new 'stack-no-clear 'vector))
(-> s2-1 trans)
(-> s3-1 flex-blend)
)
)
)
(vector-copy! (-> s2-1 trans) (-> s1-1 position))
(set! (-> s2-1 trans w) 1.0)
(if (logtest? (-> s3-1 ragdoll-flags) (ragdoll-flag mirror))
(matrix*! s2-1 s2-1 (-> s3-1 mirror))
)
(set! a2-10
(cond
((>= (-> s3-1 flex-blend) 1.0)
(matrix-copy! (-> arg0 bone transform) s2-1)
)
(else
(let ((s1-3 (vector-lerp!
(new 'stack-no-clear 'vector)
(matrix->trans (-> arg0 bone transform) (new 'stack-no-clear 'vector))
(-> s2-1 trans)
(-> s3-1 flex-blend)
)
)
)
(ragdoll-matrix-interp (-> arg0 bone transform) (-> arg0 bone transform) s2-1 (-> s3-1 flex-blend))
(vector-copy! (-> arg0 bone transform trans) s1-3)
)
(ragdoll-matrix-interp (-> arg0 bone transform) (-> arg0 bone transform) s2-1 (-> s3-1 flex-blend))
(set! (-> arg0 bone transform trans quad) (-> s1-3 quad))
(set! (-> arg0 bone transform trans w) 1.0)
a2-10
)
)
(set! (-> arg0 bone transform trans w) 1.0)
)
)
)
(let ((v1-60 (new 'stack-no-clear 'vector)))
(let ((a0-50 v1-60))
(let ((a1-24 (-> s3-1 scale))
(a2-14 (-> arg2 root scale))
)
(.lvf vf4 (&-> a1-24 quad))
(.lvf vf5 (&-> a2-14 quad))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> a0-50 quad) vf6)
)
(let ((a1-25 v1-60))
(let ((a0-51 v1-60)
(a2-15 (-> arg1 scale))
)
(.lvf vf4 (&-> a0-51 quad))
(.lvf vf5 (&-> a2-15 quad))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> a1-25 quad) vf6)
)
(let ((a0-53 (-> arg0 bone transform)))
(let ((a1-27 (-> arg0 bone transform))
(a2-16 v1-60)
)
(.lvf vf4 (&-> a1-27 rvec quad))
(.lvf vf5 (&-> a2-16 quad))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> a0-53 rvec quad) vf6)
)
(let ((a0-55 (-> arg0 bone transform uvec)))
(let ((a1-29 (-> arg0 bone transform uvec))
(a2-17 v1-60)
)
(.lvf vf4 (&-> a1-29 quad))
(.lvf vf5 (&-> a2-17 quad))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> a0-55 quad) vf6)
)
(let ((a0-57 (-> arg0 bone transform fvec)))
(.lvf vf4 (&-> (-> arg0 bone transform fvec) quad))
(.lvf vf5 (&-> v1-60 quad))
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> a0-57 quad) vf6)
)
)
(set! (-> arg0 bone transform rvec w) 0.0)
(set! (-> arg0 bone transform uvec w) 0.0)
(set! (-> arg0 bone transform fvec w) 0.0)
)
(let ((v1-60 (new 'stack-no-clear 'vector)))
(vector*! v1-60 (-> s3-1 scale) (-> arg2 root scale))
(vector*! v1-60 v1-60 (-> arg1 scale))
(vector*! (the-as vector (-> arg0 bone transform)) (the-as vector (-> arg0 bone transform)) v1-60)
(vector*! (-> arg0 bone transform uvec) (-> arg0 bone transform uvec) v1-60)
(vector*! (-> arg0 bone transform fvec) (-> arg0 bone transform fvec) v1-60)
)
(set! (-> arg0 bone transform rvec w) 0.0)
(set! (-> arg0 bone transform uvec w) 0.0)
(set! (-> arg0 bone transform fvec w) 0.0)
)
)
)
)
(when *debug-segment*
(let ((gp-1 (-> *display* frames (-> *display* on-screen) profile-array data 0)))
(when (and *dproc* *debug-segment*)
(let* ((v1-75 (+ (-> gp-1 depth) -1))
(s5-1 (-> gp-1 segment v1-75))
(s4-1 (-> gp-1 base-time))
)
(when (>= v1-75 0)
(set! (-> s5-1 end-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s4-1))))
(+! (-> gp-1 depth) -1)
)
)
)
)
0
)
(none)
)
(when *debug-segment*
(let ((gp-1 (-> *display* frames (-> *display* on-screen) profile-array data 0)))
(when (and *dproc* *debug-segment*)
(let* ((v1-75 (+ (-> gp-1 depth) -1))
(s5-1 (-> gp-1 segment v1-75))
(s4-1 (-> gp-1 base-time))
)
(when (>= v1-75 0)
(set! (-> s5-1 end-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s4-1))))
(+! (-> gp-1 depth) -1)
)
)
)
)
0
)
(none)
)
(defbehavior ragdoll-other-joint-callback ragdoll-proc ((arg0 cspace) (arg1 transformq))
@@ -863,7 +803,7 @@
)
(vector-! (-> s1-0 velocity) sv-144 (-> s1-0 position))
(vector-float*! (-> s1-0 velocity) (-> s1-0 velocity) (/ 1.0 (-> pp clock time-adjust-ratio)))
(set! (-> s1-0 position quad) (-> sv-144 quad))
(vector-copy! (-> s1-0 position) sv-144)
)
(else
(vector<-cspace! (-> s1-0 position) (-> arg0 node-list data (-> s1-0 joint-index)))
@@ -891,7 +831,7 @@
(vector<-cspace! s0-0 (-> arg0 node-list data (-> this ragdoll-joints (+ s2-1 -1) joint-index)))
)
(else
(set! (-> s0-0 quad) (-> arg0 root trans quad))
(vector-copy! s0-0 (-> arg0 root trans))
)
)
(if (logtest? (-> this ragdoll-flags) (ragdoll-flag mirror))
@@ -990,7 +930,7 @@
(let ((s4-1 (new 'stack-no-clear 'matrix)))
(matrix-axis-angle! s4-1 (-> this orient-tform) (- (-> this orient-tform w)))
(matrix*! s4-1 s4-1 arg2)
(set! (-> s4-1 trans quad) (-> arg2 trans quad))
(vector-copy! (-> s4-1 trans) (-> arg2 trans))
(add-debug-matrix #t (bucket-id debug-no-zbuf1) s4-1 (meters 2))
)
)
@@ -1009,7 +949,7 @@
(quaternion->matrix arg3 (-> s2-0 quat))
(matrix-axis-angle! s3-0 (-> arg1 pre-tform) (- (-> arg1 pre-tform w)))
(matrix*! arg3 s3-0 arg3)
(set! (-> arg3 trans quad) (-> s2-0 position quad))
(vector-copy! (-> arg3 trans) (-> s2-0 position))
)
(else
(matrix-axis-angle! s3-0 (-> arg1 pre-tform) (- (-> arg1 pre-tform w)))
@@ -1023,15 +963,15 @@
(let ((s3-1 (new 'stack-no-clear 'matrix))
(s5-1 (new 'stack-no-clear 'vector))
)
(set! (-> s5-1 quad) (-> arg3 trans quad))
(vector-copy! s5-1 (-> arg3 trans))
(matrix-axis-angle! s3-1 (-> arg1 pre-tform) (- (-> arg1 pre-tform w)))
(matrix*! arg3 s3-1 arg3)
(set! (-> arg3 trans quad) (-> s5-1 quad))
(vector-copy! (-> arg3 trans) s5-1)
)
)
(else
(quaternion->matrix arg3 (-> arg0 root quat))
(set! (-> arg3 trans quad) (-> arg0 root trans quad))
(vector-copy! (-> arg3 trans) (-> arg0 root trans))
)
)
0
@@ -1344,7 +1284,7 @@
(.svf (&-> v1-176 quad) vf1)
)
)
(set! (-> s0-1 position quad) (-> sv-560 quad))
(vector-copy! (-> s0-1 position) sv-560)
(cond
((or (> s1-1 0) (!= (-> s0-1 parent-joint) -1))
(vector-! (-> s3-1 uvec) sv-560 (-> s2-1 trans))
@@ -1392,11 +1332,11 @@
(.mul.x.vf acc vf2 vf3)
(.add.mul.w.vf.xyz vf4 vf1 vf0 acc)
(.svf (&-> sv-544 quad) vf4)
(set! (-> s0-1 old-x quad) (-> s3-1 rvec quad))
(vector-copy! (-> s0-1 old-x) (-> s3-1 rvec))
)
(else
(set! (-> s3-1 rvec quad) (-> sv-528 quad))
(set! (-> s0-1 old-x quad) (-> s3-1 rvec quad))
(vector-copy! (-> s3-1 rvec) sv-528)
(vector-copy! (-> s0-1 old-x) (-> s3-1 rvec))
)
)
(vector-cross! (-> s3-1 fvec) (-> s3-1 rvec) (-> s3-1 uvec))
@@ -1411,27 +1351,16 @@
(quaternion->matrix s3-1 (-> s0-1 quat))
)
)
(set! (-> s3-1 trans quad) (-> sv-560 quad))
(vector-copy! (-> s3-1 trans) sv-560)
(set! (-> s3-1 rvec w) 0.0)
(set! (-> s3-1 uvec w) 0.0)
(set! (-> s3-1 fvec w) 0.0)
(if (and (zero? s1-1) (< (-> s0-1 parent-joint) 0) (logtest? (-> this ragdoll-flags) (ragdoll-flag rf7)))
(set! (-> arg0 root trans quad) (-> s3-1 trans quad))
(vector-copy! (-> arg0 root trans) (-> s3-1 trans))
)
(ragdoll-method-13 this arg1 s0-1 s3-1 s2-1)
)
(let* ((a2-19 s2-1)
(a3-10 s3-1)
(v1-216 (-> a3-10 rvec quad))
(a0-119 (-> a3-10 uvec quad))
(a1-47 (-> a3-10 fvec quad))
(a3-11 (-> a3-10 trans quad))
)
(set! (-> a2-19 rvec quad) v1-216)
(set! (-> a2-19 uvec quad) a0-119)
(set! (-> a2-19 fvec quad) a1-47)
(set! (-> a2-19 trans quad) a3-11)
)
(matrix-copy! s2-1 s3-1)
)
)
(if (and (< (min (the-as int (-> this num-joints)) (max 2 (the int (* 0.9 (the float (-> this num-joints))))))
@@ -1479,8 +1408,8 @@
(set! (-> s2-0 joint-type) (-> v1-15 joint-type))
(set! (-> s2-0 joint-index) (-> v1-15 joint-index))
(set! (-> s2-0 parent-joint) (-> v1-15 parent-joint))
(set! (-> s2-0 pre-tform quad) (-> v1-15 pre-tform quad))
(set! (-> s2-0 geo-tform quad) (-> v1-15 geo-tform quad))
(vector-copy! (-> s2-0 pre-tform) (-> v1-15 pre-tform))
(vector-copy! (-> s2-0 geo-tform) (-> v1-15 geo-tform))
(set! (-> s2-0 axial-slop) (-> v1-15 axial-slop))
(set! (-> s2-0 max-angle) (-> v1-15 max-angle))
(set! (-> s2-0 coll-rad) (-> v1-15 coll-rad))
@@ -1509,11 +1438,11 @@
)
0
)
(set! (-> this orient-tform quad) (-> setup orient-tform quad))
(set! (-> this scale quad) (-> setup scale quad))
(vector-copy! (-> this orient-tform) (-> setup orient-tform))
(vector-copy! (-> this scale) (-> setup scale))
(set! (-> this bg-collide-with) (the-as uint (-> setup bg-collide-with)))
(set-vector! (-> this gravity) 0.0 -1.0 0.0 1.0)
(set! (-> this gravity-target quad) (-> this gravity quad))
(vector-copy! (-> this gravity-target) (-> this gravity))
(set! (-> this stretch-vel) 0.7)
(set! (-> this stretch-vel-parallel) 0.8)
(set! (-> this compress-vel) 0.85)
@@ -1584,7 +1513,7 @@
)
)
((= proc *target*)
(set! (-> s4-0 quad) (-> (the-as process-drawable proc) root trans quad))
(vector-copy! s4-0 (-> (the-as process-drawable proc) root trans))
(vector-! s5-0 (-> s2-0 root trans) (-> (the-as process-drawable proc) root trans))
(set! s3-0 #t)
)
@@ -1600,12 +1529,12 @@
(the-as touching-shapes-entry a3-1)
)
)
(set! (-> s4-0 quad) (-> s5-0 quad))
(vector-copy! s4-0 s5-0)
(vector-! s5-0 (-> s2-0 root trans) s5-0)
(set! s3-0 #t)
)
(when (logtest? (attack-mask attacker-velocity) (-> (the-as attack-info gp-0) mask))
(set! (-> s5-0 quad) (-> (the-as attack-info gp-0) attacker-velocity quad))
(vector-copy! s5-0 (-> (the-as attack-info gp-0) attacker-velocity))
(when (not s3-0)
(vector-! s4-0 (-> self ragdoll ragdoll-joints 0 position) s5-0)
(set! s3-0 #t)
@@ -1620,7 +1549,7 @@
(set! (-> s5-0 y) 0.0)
(vector-normalize! s5-0 409.6)
(+! (-> s5-0 y) 1024.0)
(set! (-> self ragdoll ragdoll-joints 0 velocity quad) (-> s5-0 quad))
(vector-copy! (-> self ragdoll ragdoll-joints 0 velocity) s5-0)
(if (logtest? (-> (the-as attack-info gp-0) mask) (attack-mask id))
(set! (-> self last-attack-id) (-> (the-as attack-info gp-0) id))
)
@@ -541,7 +541,7 @@
((-> jcontrol postbind-function) this joints jcontrol)
)
(let ((a1-5 (new 'stack-no-clear 'vector)))
(set! (-> a1-5 quad) (-> this bounds quad))
(vector-copy! a1-5 (-> this bounds))
(set! (-> a1-5 w) 1.0)
(vector-norm-matrix*!
(-> this origin)
@@ -819,7 +819,7 @@
(set! (-> v1-35 origin-joint-index) (the-as uint (-> skelgroup origin-joint-index)))
(set! (-> v1-35 shadow-joint-index) (the-as uint (-> skelgroup shadow-joint-index)))
)
(set! (-> s2-0 bounds quad) (-> skelgroup bounds quad))
(vector-copy! (-> s2-0 bounds) (-> skelgroup bounds))
(let ((v1-37 (-> skelgroup shadow)))
(when (and (> v1-37 0) (< v1-37 sv-20))
(let ((s0-0 (-> s1-0 data v1-37)))
@@ -923,19 +923,17 @@
)
)
(else
(set! (-> s3-0 skeleton bones 0 transform trans quad) (-> (the-as vector (get-property-struct
(-> s3-0 jgeo extra)
'trans-offset
'interp
-1000000000.0
*null-vector*
(the-as (pointer res-tag) #f)
*res-static-buf*
)
)
quad
)
)
(vector-copy! (-> s3-0 skeleton bones 0 transform trans) (the-as vector (get-property-struct
(-> s3-0 jgeo extra)
'trans-offset
'interp
-1000000000.0
*null-vector*
(the-as (pointer res-tag) #f)
*res-static-buf*
)
)
)
)
)
)
@@ -1118,53 +1116,36 @@
(defbehavior ja-linear-vel process-drawable ((chan int))
(local-vars (s4-1 vector) (sv-16 res-tag))
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
(let* ((s4-0 (-> self skel root-channel chan))
(v1-2 (-> s4-0 frame-group))
)
(init-vf0-vector)
(let* ((s4-0 (-> self skel root-channel chan))
(v1-2 (-> s4-0 frame-group))
)
(cond
((-> v1-2 extra)
(set! sv-16 (new 'static 'res-tag))
(let ((gp-0 (res-lump-data (-> v1-2 extra) 'linear-vel pointer :tag-ptr (& sv-16))))
(cond
(gp-0
(let* ((s5-0 (the int (the float (the int (-> s4-0 frame-num)))))
(f0-5 (-> s4-0 frame-num))
(f28-0 (- f0-5 (the float (the int f0-5))))
)
(set! s4-1 (new 'static 'vector))
(let ((f30-0 (ja-rate 0)))
(vector-lerp! s4-1 (the-as vector (&+ gp-0 (* s5-0 16))) (the-as vector (&+ gp-0 (* (+ s5-0 1) 16))) f28-0)
(let ((a0-7 s4-1))
(let ((v1-9 s4-1)
(a1-3 (-> self root scale))
)
(.lvf vf4 (&-> v1-9 quad))
(.lvf vf5 (&-> a1-3 quad))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> a0-7 quad) vf6)
)
(vector-float*! s4-1 s4-1 f30-0)
)
(cond
((-> v1-2 extra)
(set! sv-16 (new 'static 'res-tag))
(let ((gp-0 (res-lump-data (-> v1-2 extra) 'linear-vel pointer :tag-ptr (& sv-16))))
(cond
(gp-0
(let* ((s5-0 (the int (the float (the int (-> s4-0 frame-num)))))
(f0-5 (-> s4-0 frame-num))
(f28-0 (- f0-5 (the float (the int f0-5))))
)
(set! s4-1 (new 'static 'vector))
(let ((f30-0 (ja-rate 0)))
(vector-lerp! s4-1 (the-as vector (&+ gp-0 (* s5-0 16))) (the-as vector (&+ gp-0 (* (+ s5-0 1) 16))) f28-0)
(vector*! s4-1 s4-1 (-> self root scale))
(vector-float*! s4-1 s4-1 f30-0)
)
)
(else
(set! s4-1 *null-vector*)
)
)
(else
(set! s4-1 *null-vector*)
)
)
s4-1
)
(else
*null-vector*
)
s4-1
)
(else
*null-vector*
)
)
)
@@ -2079,8 +2060,8 @@
(set! v1-0 (-> self entity))
)
(if arg1
(set! (-> gp-0 quad) (-> arg1 quad))
(set! (-> gp-0 quad) (-> v1-0 extra trans quad))
(vector-copy! gp-0 arg1)
(vector-copy! gp-0 (-> v1-0 extra trans))
)
(let ((s5-0 (-> v1-0 extra perm task))
(s4-0 (new 'static 'fact-info))
+32 -42
View File
@@ -1215,49 +1215,39 @@
'trans-hook
(lambda :behavior target
()
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
(let* ((v1-0 (-> self parent))
(gp-0 (if v1-0
(the-as target (-> v1-0 0 self))
)
)
)
(init-vf0-vector)
(let ((gp-0 (ppointer->process (-> self parent))))
(vector-copy! (-> self control trans) (-> (the-as target gp-0) flut flut-trans))
(let ((v1-5 (-> (the-as target gp-0) flut flut-quat quad)))
(set! (-> self control quat quad) v1-5)
)
(vector-copy! (-> self control scale) (-> (the-as target gp-0) flut flut-scale))
(set! (-> self control ground-pat material)
(the-as int (-> (the-as target gp-0) control ground-pat material))
)
(set! (-> self draw light-index) (-> (the-as target gp-0) draw light-index))
(let ((t9-0 flut-color-from-index)
(v1-14 (-> self parent))
)
(t9-0 (-> (the-as target (if v1-14
(the-as target (-> v1-14 0 self))
)
)
flut
color-index
)
)
)
(let ((v1-18 (-> self draw color-mult)))
(let ((a0-19 (-> self draw color-mult))
(a1-1 (-> (the-as target gp-0) draw color-mult))
)
(.lvf vf4 (&-> a0-19 quad))
(.lvf vf5 (&-> a1-1 quad))
(vector-copy! (-> self control trans) (-> gp-0 flut flut-trans))
(let ((v1-5 (-> gp-0 flut flut-quat quad)))
(set! (-> self control quat quad) v1-5)
)
(vector-copy! (-> self control scale) (-> gp-0 flut flut-scale))
(set! (-> self control ground-pat material) (the-as int (-> gp-0 control ground-pat material)))
(set! (-> self draw light-index) (-> gp-0 draw light-index))
(let ((t9-0 flut-color-from-index)
(v1-14 (-> self parent))
)
(.add.x.vf.w vf6 vf0 vf0)
(.mul.vf.xyz vf6 vf4 vf5)
(.svf (&-> v1-18 quad) vf6)
)
(let ((v0-1 (-> (the-as target gp-0) draw color-emissive quad)))
(set! (-> self draw color-emissive quad) v0-1)
v0-1
)
(t9-0 (-> (the-as target (if v1-14
(the-as target (-> v1-14 0 self))
)
)
flut
color-index
)
)
)
(vector*!
(the-as vector (-> self draw color-mult))
(the-as vector (-> self draw color-mult))
(the-as vector (-> gp-0 draw color-mult))
)
(let ((v0-1 (-> gp-0 draw color-emissive quad)))
(set! (-> self draw color-emissive quad) v0-1)
v0-1
)
)
)
@@ -2774,7 +2764,7 @@
)
(when gp-0
(quaternion-copy! (-> gp-0 root quat) (-> (the-as target self) control quat-for-control))
(set! (-> gp-0 root trans quad) (-> (the-as target self) control trans quad))
(vector-copy! (-> gp-0 root trans) (-> (the-as target self) control trans))
(let ((s5-1 (the-as target self)))
;; og:preserve-this
(set! self (the target gp-0))
+36 -59
View File
@@ -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))
+36 -59
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -159,75 +159,58 @@
:code sleep-code
:post (behavior ()
(local-vars (sv-112 vector) (sv-128 vector) (sv-144 lightning-control))
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(let ((v1-0 (-> self root))
(f30-0 4369.067)
(f28-0 (* (-> self rotate-speed) (seconds-per-frame)))
(gp-0 (new 'stack-no-clear 'vector))
)
(set! (-> gp-0 x) 1.0)
(set! (-> gp-0 y) 1.0)
(set! (-> gp-0 z) 0.4)
(set! (-> gp-0 w) 1.0)
(quaternion-rotate-local-z! (-> v1-0 quat) (-> v1-0 quat) f28-0)
(dotimes (s5-0 3)
(let ((s4-0 (-> self poles s5-0)))
(dotimes (s3-0 6)
(let ((s2-0 (new 'stack-no-clear 'vector))
(s0-0 (-> s4-0 rings s3-0))
(s1-0 (quaternion-rotate-local-z!
(new 'stack-no-clear 'quaternion)
(-> self root quat)
(+ (-> s4-0 z-rotate) (/ f28-0 5))
)
(let ((v1-0 (-> self root))
(f30-0 4369.067)
(f28-0 (* (-> self rotate-speed) (seconds-per-frame)))
(gp-0 (new 'stack-no-clear 'vector))
)
(set! (-> gp-0 x) 1.0)
(set! (-> gp-0 y) 1.0)
(set! (-> gp-0 z) 0.4)
(set! (-> gp-0 w) 1.0)
(quaternion-rotate-local-z! (-> v1-0 quat) (-> v1-0 quat) f28-0)
(dotimes (s5-0 3)
(let ((s4-0 (-> self poles s5-0)))
(dotimes (s3-0 6)
(let ((s2-0 (new 'stack-no-clear 'vector))
(s0-0 (-> s4-0 rings s3-0))
(s1-0 (quaternion-rotate-local-z!
(new 'stack-no-clear 'quaternion)
(-> self root quat)
(+ (-> s4-0 z-rotate) (/ f28-0 5))
)
)
(set-vector! s2-0 0.0 (-> s0-0 dist) 0.0 1.0)
(vector-orient-by-quat! s2-0 s2-0 s1-0)
(vector+! s2-0 s2-0 (-> self root trans))
(set! sv-112 (new 'stack-no-clear 'vector))
(set! sv-128 (new 'stack-no-clear 'vector))
(set! sv-144 (-> s0-0 lightning))
(set-vector! sv-112 (-> s0-0 radius) 0.0 0.0 0.0)
(quaternion-rotate-local-z! s1-0 s1-0 (-> s0-0 local-z-rotate))
(dotimes (s0-1 16)
(vector-orient-by-quat! sv-128 sv-112 s1-0)
(let ((a1-7 sv-128))
(let ((v1-14 sv-128)
(a0-14 gp-0)
)
(.lvf vf4 (&-> v1-14 quad))
(.lvf vf5 (&-> a0-14 quad))
)
(.add.x.vf vf6 vf0 vf0 :mask #b1000)
(.mul.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a1-7 quad) vf6)
)
(set-point! sv-144 s0-1 (vector+! (new 'stack-no-clear 'vector) s2-0 sv-128))
(quaternion-rotate-local-y! s1-0 s1-0 f30-0)
)
)
(set-vector! s2-0 0.0 (-> s0-0 dist) 0.0 1.0)
(vector-orient-by-quat! s2-0 s2-0 s1-0)
(vector+! s2-0 s2-0 (-> self root trans))
(set! sv-112 (new 'stack-no-clear 'vector))
(set! sv-128 (new 'stack-no-clear 'vector))
(set! sv-144 (-> s0-0 lightning))
(set-vector! sv-112 (-> s0-0 radius) 0.0 0.0 0.0)
(quaternion-rotate-local-z! s1-0 s1-0 (-> s0-0 local-z-rotate))
(dotimes (s0-1 16)
(vector-orient-by-quat! sv-128 sv-112 s1-0)
(vector*! sv-128 sv-128 gp-0)
(set-point! sv-144 s0-1 (vector+! (new 'stack-no-clear 'vector) s2-0 sv-128))
(quaternion-rotate-local-y! s1-0 s1-0 f30-0)
)
)
)
)
)
(when (time-elapsed? (-> self state-time) (-> self sound-timer))
(sound-play "cab-fan-blade")
(sound-stop (-> self sound-id))
(sound-play "pal-fan-buzz" :id (-> self sound-id))
(set! (-> self sound-timer)
(the-as time-frame (the int (* 300.0 (/ 21845.334 (fabs (-> self rotate-speed))))))
)
(set-time! (-> self state-time))
)
(update! (-> self sound))
(rider-post)
)
(when (time-elapsed? (-> self state-time) (-> self sound-timer))
(sound-play "cab-fan-blade")
(sound-stop (-> self sound-id))
(sound-play "pal-fan-buzz" :id (-> self sound-id))
(set! (-> self sound-timer)
(the-as time-frame (the int (* 300.0 (/ 21845.334 (fabs (-> self rotate-speed))))))
)
(set-time! (-> self state-time))
)
(update! (-> self sound))
(rider-post)
)
)
+93 -110
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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)
)