[decomp] detect vector-! inlined. (#633)

* fix flipped order

* format

* parser hack

* actually flip

* detect
This commit is contained in:
water111 2021-06-26 22:52:52 -04:00 committed by GitHub
parent 10b00e57ae
commit b19a2c82f0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
23 changed files with 1353 additions and 1063 deletions

View file

@ -242,7 +242,8 @@ FormElement* StoreOp::get_vf_store_as_form(FormPool& pool, const Env& env) const
}
assert(!rd.addr_of); // we'll change this to true because .svf uses an address.
auto addr = pool.alloc_single_element_form<DerefElement>(nullptr, source, true, tokens);
return pool.alloc_element<VectorFloatLoadStoreElement>(m_value.var().reg(), addr, false);
return pool.alloc_element<VectorFloatLoadStoreElement>(m_value.var().reg(), addr, false,
m_my_idx);
} else {
// try again with no deref.
rd_in.deref = {};
@ -260,7 +261,8 @@ FormElement* StoreOp::get_vf_store_as_form(FormPool& pool, const Env& env) const
// some sketchy type stuff going on.
addr = pool.alloc_single_element_form<CastElement>(
nullptr, TypeSpec("pointer", {TypeSpec("uint128")}), addr);
return pool.alloc_element<VectorFloatLoadStoreElement>(m_value.var().reg(), addr, false);
return pool.alloc_element<VectorFloatLoadStoreElement>(m_value.var().reg(), addr, false,
m_my_idx);
}
}
}
@ -704,13 +706,13 @@ FormElement* LoadVarOp::get_as_form(FormPool& pool, const Env& env) const {
if (src_as_deref) {
assert(!src_as_deref->is_addr_of());
src_as_deref->set_addr_of(true);
return pool.alloc_element<VectorFloatLoadStoreElement>(m_dst.reg(), src, true);
return pool.alloc_element<VectorFloatLoadStoreElement>(m_dst.reg(), src, true, m_my_idx);
}
auto src_as_unrecognized = dynamic_cast<LoadSourceElement*>(src->try_as_single_element());
if (src_as_unrecognized) {
return pool.alloc_element<VectorFloatLoadStoreElement>(m_dst.reg(),
src_as_unrecognized->location(), true);
return pool.alloc_element<VectorFloatLoadStoreElement>(
m_dst.reg(), src_as_unrecognized->location(), true, m_my_idx);
}
throw std::runtime_error("VF unknown load");

View file

@ -2325,8 +2325,9 @@ void StackStructureDefElement::get_modified_regs(RegSet&) const {}
VectorFloatLoadStoreElement::VectorFloatLoadStoreElement(Register vf_reg,
Form* location,
bool is_load)
: m_vf_reg(vf_reg), m_location(location), m_is_load(is_load) {
bool is_load,
int my_idx)
: m_vf_reg(vf_reg), m_location(location), m_is_load(is_load), m_my_idx(my_idx) {
location->parent_element = this;
}

View file

@ -1349,7 +1349,7 @@ class StackStructureDefElement : public FormElement {
class VectorFloatLoadStoreElement : public FormElement {
public:
VectorFloatLoadStoreElement(Register vf_reg, Form* location, bool is_load);
VectorFloatLoadStoreElement(Register vf_reg, Form* location, bool is_load, int my_idx);
goos::Object to_form_internal(const Env& env) const override;
void apply(const std::function<void(FormElement*)>& f) override;
void apply_form(const std::function<void(Form*)>& f) override;
@ -1359,11 +1359,16 @@ class VectorFloatLoadStoreElement : public FormElement {
void collect_vf_regs(RegSet& regs) const;
bool is_load() const { return m_is_load; }
Register vf_reg() const { return m_vf_reg; }
const std::optional<TypeSpec>& addr_type() const { return m_addr_type; }
Form* location() const { return m_location; }
int my_idx() const { return m_my_idx; }
private:
Register m_vf_reg;
Form* m_location = nullptr;
bool m_is_load = false;
std::optional<TypeSpec> m_addr_type;
int m_my_idx = -1;
};
class StackSpillStoreElement : public FormElement {

View file

@ -181,15 +181,14 @@ void pop_helper(const std::vector<RegisterAccess>& vars,
submit_reg_to_var.push_back(var_idx);
submit_regs.push_back(var.reg());
} else {
/*
auto var_id = env.get_program_var_id(var);
fmt::print(
"Unsafe to pop {}: used {} times, def {} times, expected use {} ({} {} rd: {}) ({} "
"{})\n",
var.to_string(env), use_def.use_count(), use_def.def_count(), times,
var.reg().to_string(), var.idx(), var.mode() == AccessMode::READ,
var_id.reg.to_string(), var_id.id);
*/
// auto var_id = env.get_program_var_id(var);
// fmt::print(
// "Unsafe to pop {}: used {} times, def {} times, expected use {} ({} {} rd:
// {}) ({} "
// "{})\n",
// var.to_string(env), use_def.use_count(), use_def.def_count(), times,
// var.reg().to_string(), var.idx(), var.mode() == AccessMode::READ,
// var_id.reg.to_string(), var_id.id);
// if (var.to_string(env) == "a3-0") {
// for (auto& use : use_def.uses) {
@ -2955,6 +2954,15 @@ FormElement* ConditionElement::make_generic(const Env& env,
casted);
}
case IR2_Condition::Kind::LESS_THAN_ZERO_UNSIGNED: {
auto casted = make_casts_if_needed(source_forms, types, TypeSpec("uint"), pool, env);
auto zero = pool.alloc_single_element_form<SimpleAtomElement>(
nullptr, SimpleAtom::make_int_constant(0));
casted.push_back(zero);
return pool.alloc_element<GenericElement>(GenericOperator::make_fixed(FixedOperatorKind::LT),
casted);
}
case IR2_Condition::Kind::GEQ_ZERO_SIGNED: {
return make_geq_zero_signed_check_generic(env, pool, source_forms, types);
}
@ -3732,6 +3740,317 @@ void StackSpillStoreElement::push_to_stack(const Env& env, FormPool& pool, FormS
stack.push_form_element(pool.alloc_element<SetFormFormElement>(dst, src), true);
}
namespace {
/*!
* Is the given form an assembly form to load data from a vector to the given vf register?
*/
Form* is_load_store_vector_to_reg(const Register& reg,
FormElement* form,
bool is_load,
int* idx_out) {
auto as_vf_op = dynamic_cast<VectorFloatLoadStoreElement*>(form);
if (!as_vf_op) {
return nullptr;
}
if (as_vf_op->is_load() != is_load) {
return nullptr;
}
if (as_vf_op->vf_reg() != reg) {
return nullptr;
}
// check that we actually got a real vector type, not some other thing that happens to have a
// quad.
auto& addr_type = as_vf_op->addr_type();
if (!addr_type || addr_type != TypeSpec("vector")) {
return nullptr;
}
// make sure we load from the right spot, and extract the base.
auto loc = as_vf_op->location();
auto matcher = Matcher::deref(Matcher::any(0), true, {DerefTokenMatcher::string("quad")});
auto mr = match(matcher, loc);
if (!mr.matched) {
return nullptr;
}
// output the index of the actual store op, for reguse purposes.
if (idx_out) {
*idx_out = as_vf_op->my_idx();
}
// got it!
return mr.maps.forms.at(0);
}
/*!
* try to convert to an assembly op, return nullptr if we can't.
*/
const AsmOp* get_asm_op(FormElement* form) {
auto as_asm = dynamic_cast<OpenGoalAsmOpElement*>(form);
if (as_asm) {
return as_asm->op();
}
auto two = dynamic_cast<AsmOpElement*>(form);
if (two) {
return two->op();
}
return nullptr;
}
/*!
* Is this vmove.w vfX, vf0? This is a common trick to set the w field.
*/
bool is_set_w_1(const Register& reg, FormElement* form, const Env&) {
auto as_asm = get_asm_op(form);
if (!as_asm) {
return false;
}
auto instr = as_asm->instruction();
if (instr.kind != InstructionKind::VMOVE) {
return false;
}
if (instr.cop2_dest != 1) {
return false;
}
if (!instr.get_src(0).is_reg(Register(Reg::VF, 0))) {
return false;
}
if (!instr.get_dst(0).is_reg(reg)) {
return false;
}
return true;
}
/*!
* Is this a COP2 op in the form vblah.mask vfX, vfY, vfZ?
*/
bool is_vf_3op_dst(InstructionKind kind,
u8 dest_mask,
const Register& dst,
const Register& src0,
const Register& src1,
FormElement* form) {
auto as_asm = get_asm_op(form);
if (!as_asm) {
return false;
}
auto instr = as_asm->instruction();
if (instr.kind != kind) {
return false;
}
if (instr.cop2_dest != dest_mask) {
return false;
}
if (!instr.get_src(0).is_reg(src0)) {
return false;
}
if (!instr.get_src(1).is_reg(src1)) {
return false;
}
if (!instr.get_dst(0).is_reg(dst)) {
return false;
}
return true;
}
/*!
* Make a vf register.
*/
Register vfr(int idx) {
return Register(Reg::VF, idx);
}
/*!
* Try to pop a variable from the stack again. If we are detecting a macro that flips argument
* evaluation order, we can use this to fix it up and remove temporaries.
* If the previous pop succeeded, this does nothing.
*/
Form* repop_arg(Form* in, FormStack& stack, const Env& env, FormPool& pool) {
auto as_atom = form_as_atom(in);
if (as_atom && as_atom->is_var()) {
return pop_to_forms({as_atom->var()}, env, pool, stack, true).at(0);
}
return in;
}
/*!
* Imagine:
* x = foo
* { // some macro/inlined thing
* read from x
* return x;
* }
*
* and you want to transform it to
* x = some_macro(foo, blah, ...)
*
* this will get you foo (and pop it from the stack), assuming the stack is sitting right after the
* point where the inline thing evaluated foo.
*
* For later book-keeping of reg use, if it gets you something new, it will set found_orig_out,
* and also give you the regaccess for the x of the x = foo.
*
* If you use this, you are responsible for adding code that sets x again.
*/
Form* repop_passthrough_arg(Form* in,
FormStack& stack,
RegisterAccess* orig_out,
bool* found_orig_out) {
*found_orig_out = false;
auto as_atom = form_as_atom(in);
if (as_atom && as_atom->is_var()) {
// get the last active thing on the stack and see if its what we want.
auto last_in_stack = stack.active_back();
if (!last_in_stack) {
return in;
}
if (!last_in_stack->destination) {
return in;
}
if (last_in_stack->destination->reg() != as_atom->var().reg()) {
return in;
}
// the x regaccess
*orig_out = *last_in_stack->destination;
auto val = last_in_stack->source;
*found_orig_out = true;
stack.pop_active_back();
return val;
}
return in;
}
/*!
* Try to convert a form to a regaccess.
*/
std::optional<RegisterAccess> form_as_ra(Form* form) {
auto as_atom = form_as_atom(form);
if (as_atom && as_atom->is_var()) {
return as_atom->var();
}
return {};
}
/*!
* Handle an inlined call to vector-!
*/
bool try_vector_sub_inline(const Env& env, FormPool& pool, FormStack& stack) {
// we are looking for 5 ops, none are sets
auto elts = stack.try_getting_active_stack_entries({false, false, false, false, false});
if (!elts) {
return false;
}
// check first: (.lvf vf4 (&-> arg1 quad))
auto first = is_load_store_vector_to_reg(Register(Reg::VF, 4), elts->at(0).elt, true, nullptr);
if (!first) {
return false;
}
// second (.lvf vf5 (&-> a0-1 quad))
auto second = is_load_store_vector_to_reg(Register(Reg::VF, 5), elts->at(1).elt, true, nullptr);
if (!second) {
return false;
}
// third (.vmove.w vf6 vf0)
if (!is_set_w_1(Register(Reg::VF, 6), elts->at(2).elt, env)) {
return false;
}
// 4th (.vsub.xyz vf6 vf4 vf5)
if (!is_vf_3op_dst(InstructionKind::VSUB, 14, vfr(6), vfr(4), vfr(5), elts->at(3).elt)) {
return false;
}
// 5th (and remember the index)
int store_idx = -1;
auto store =
is_load_store_vector_to_reg(Register(Reg::VF, 6), elts->at(4).elt, false, &store_idx);
if (!store) {
return false;
}
// the store here _should_ have failed propagation and just given us a variable.
// if this is causing issues, we can run this check before propagating, as well call this from
// the function that attempts the pop.
auto store_var = form_as_ra(store);
if (!store_var) {
env.func->warnings.general_warning("Almost found vector sub, but couldn't get store var.");
return false;
}
// remove these from the stack.
stack.pop(5);
// ignore the store as a use. This will allow the entire vector-! expression to be expression
// propagated, if it is appropriate.
if (store_var) {
auto menv = const_cast<Env*>(&env);
menv->disable_use(*store_var);
}
// repop the arguments in the opposite order. this can eliminate temporaries as this will
// use the opposite order of the original attempt.
second = repop_arg(second, stack, env, pool);
first = repop_arg(first, stack, env, pool);
// now try to see if we can pop the first arg (destination vector).
bool got_orig = false;
RegisterAccess orig;
store = repop_passthrough_arg(store, stack, &orig, &got_orig);
// create the actual vector-! form
Form* new_thing = pool.alloc_single_element_form<GenericElement>(
nullptr,
GenericOperator::make_function(
pool.alloc_single_element_form<ConstantTokenElement>(nullptr, "vector-!")),
std::vector<Form*>{store, first, second});
if (got_orig) {
// we got a value for the destination. because we used the special repop passthrough,
// we're responsible for inserting a set to set the var that we "stole" from.
// We do this through push_value_to_reg, so it can be propagated if needed, but only if
// somebody will actually read the output.
// to tell, we look at the live out of the store op and the end - the earlier one would of
// course be live out always because the store will read it again.
auto& op_info = env.reg_use().op.at(store_idx);
if (op_info.live.find(orig.reg()) == op_info.live.end()) {
// nobody reads it, don't bother.
stack.push_form_element(new_thing->elts().at(0), true);
} else {
stack.push_value_to_reg(orig, new_thing, true, TypeSpec("vector"));
}
} else {
stack.push_form_element(new_thing->elts().at(0), true);
}
return false;
}
} // namespace
void VectorFloatLoadStoreElement::push_to_stack(const Env& env, FormPool& pool, FormStack& stack) {
mark_popped();
@ -3740,11 +4059,16 @@ void VectorFloatLoadStoreElement::push_to_stack(const Env& env, FormPool& pool,
auto root = loc_as_deref->base();
auto atom = form_as_atom(root);
if (atom && atom->get_kind() == SimpleAtom::Kind::VARIABLE) {
m_addr_type = env.get_variable_type(atom->var(), true);
loc_as_deref->set_base(pop_to_forms({atom->var()}, env, pool, stack, true).at(0));
}
}
stack.push_form_element(this, true);
// don't find vector-! inside of vector-!.
if (!m_is_load && env.func->guessed_name.to_string() != "vector-!") {
try_vector_sub_inline(env, pool, stack);
}
}
void MethodOfTypeElement::update_from_stack(const Env& env,

View file

@ -64,6 +64,8 @@ class FormStack {
std::string print(const Env& env) const;
};
// requires consecutive active entries to succeed (can't skip over inactives).
// it's safe to use pop with the same size or smaller to remove the entries you expect.
std::optional<std::vector<StackEntry>> try_getting_active_stack_entries(
const std::vector<bool>& is_set) const {
if (is_set.size() > m_stack.size()) {
@ -101,6 +103,29 @@ class FormStack {
}
}
// get the back, skipping inactives
const StackEntry* active_back() const {
for (size_t i = m_stack.size(); i-- > 0;) {
auto& e = m_stack.at(i);
if (e.active) {
return &e;
}
}
return nullptr;
}
// pop the back, skipping inactives
void pop_active_back() {
for (size_t i = m_stack.size(); i-- > 0;) {
auto& e = m_stack.at(i);
if (e.active) {
m_stack.erase(m_stack.begin() + i);
return;
}
}
assert(false);
}
private:
std::vector<StackEntry> m_stack;
bool m_is_root_stack = false;

View file

@ -1818,7 +1818,7 @@
;; - Types
(deftype transformq (transform)
((quat quaternion :inline :offset 16)
((quat quaternion :inline :offset 16 :score 100)
)
:method-count-assert 9
:size-assert #x30
@ -1826,7 +1826,7 @@
)
(deftype trsq (trs)
((quat quaternion :inline :offset 32)
((quat quaternion :inline :offset 32 :score 100)
)
:method-count-assert 9
:size-assert #x40

View file

@ -113,7 +113,7 @@
(let ((v1-1 (-> gp-0 trans)))
(set! (-> v1-1 quad) (-> (the-as transform (-> arg0 extra)) scale quad))
)
(quaternion-copy! (the-as quaternion (-> gp-0 rot)) (-> arg0 quat))
(quaternion-copy! (-> gp-0 quat) (-> arg0 quat))
(vector-identity! (-> gp-0 scale))
(let ((a1-2 (new 'stack-no-clear 'event-message-block)))
(set! (-> a1-2 from) pp)

View file

@ -220,12 +220,8 @@
(init-vf0-vector)
(cond
(arg0
(let ((v1-0 (-> obj target)))
(set! (-> v1-0 quad) (-> arg0 quad))
)
(let ((v1-1 (-> obj value)))
(set! (-> v1-1 quad) (-> arg0 quad))
)
(set! (-> obj target quad) (-> arg0 quad))
(set! (-> obj value quad) (-> arg0 quad))
)
(else
(.svf (&-> (-> obj target) quad) vf0)
@ -236,6 +232,8 @@
(set! (-> obj accel) arg1)
(set! (-> obj max-vel) arg2)
(set! (-> obj max-partial) arg3)
(let ((v0-0 0))
)
(none)
)
)
@ -262,33 +260,13 @@
(.lvf vf4 (&-> v1-0 quad))
)
(.lvf vf5 (&-> arg0 quad))
(.add.vf vf6 vf4 vf5 :mask #b111)
(.add.vf vf6 vf4 vf5 :mask #b111) ;; todo add
(.svf (&-> a0-1 quad) vf6)
)
(let ((a1-1 gp-0))
(let ((v1-1 gp-0)
(a0-2 (-> obj value))
)
(.lvf vf4 (&-> v1-1 quad))
(.lvf vf5 (&-> a0-2 quad))
)
(.mov.vf vf6 vf0 :mask #b1000)
(.sub.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a1-1 quad) vf6)
)
(vector-! gp-0 gp-0 (-> obj value))
)
(else
(let ((a1-2 gp-0))
(let ((v1-2 (-> obj target))
(a0-3 (-> obj value))
)
(.lvf vf4 (&-> v1-2 quad))
(.lvf vf5 (&-> a0-3 quad))
)
(.mov.vf vf6 vf0 :mask #b1000)
(.sub.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a1-2 quad) vf6)
)
(vector-! gp-0 (-> obj target) (-> obj value))
)
)
(let ((f30-1 (* (-> obj max-partial) (vector-length gp-0))))
@ -359,6 +337,8 @@
(.svf (&-> v1-8 quad) vf6)
)
)
(let ((v0-2 0))
)
(none)
)
)

View file

@ -470,7 +470,7 @@
;; reset transformation to the origin.
(set! (-> obj trans w) 1.0)
(quaternion-identity! (the-as quaternion (-> obj rot)))
(quaternion-identity! (-> obj quat))
(vector-identity! (-> obj scale))
;; add us to right list.

View file

@ -5,3 +5,224 @@
;; name in dgo: ripple
;; dgos: GAME, ENGINE
(define-extern ripple-execute-init (function none))
(define-extern ripple-create-wave-table (function ripple-wave-set int))
(define-extern ripple-apply-wave-table (function merc-effect symbol))
(deftype ripple-request (structure)
((waveform ripple-wave :offset-assert 0)
(effect merc-effect :offset-assert 4)
)
:pack-me
:method-count-assert 9
:size-assert #x8
:flag-assert #x900000008
)
(deftype ripple-globals (structure)
((count int32 :offset-assert 0)
(requests ripple-request 16 :inline :offset-assert 4)
)
:method-count-assert 9
:size-assert #x84
:flag-assert #x900000084
)
(define *ripple-globals* (new 'global 'ripple-globals))
(defun ripple-make-request ((arg0 ripple-wave) (arg1 merc-effect))
(let ((v1-1 (-> *ripple-globals* count))
(a2-1 (-> *ripple-globals* requests))
(a3-0 0)
)
(when (< v1-1 16)
(dotimes (t0-1 v1-1)
(if (= arg1 (-> a2-1 t0-1 effect))
(set! a3-0 1)
)
)
(when (zero? a3-0)
(set! (-> a2-1 v1-1 effect) arg1)
(set! (-> a2-1 v1-1 waveform) arg0)
(set! (-> *ripple-globals* count) (+ (-> *ripple-globals* count) 1))
)
)
)
(none)
)
(defun ripple-update-waveform-offs ((arg0 ripple-wave-set))
(let ((f0-1 (the float (- (-> *display* integral-frame-counter) (-> arg0 frame-save)))))
(when (!= f0-1 0.0)
(dotimes (v1-4 (-> arg0 count))
(let ((a1-4 (-> arg0 wave v1-4)))
(set! (-> a1-4 offs) (+ (-> a1-4 offs) (* f0-1 (-> a1-4 delta))))
(set! (-> a1-4 offs) (the float (logand (the int (-> a1-4 offs)) #xffff)))
)
)
(set! (-> arg0 frame-save) (-> *display* integral-frame-counter))
)
)
(none)
)
;; definition for function ripple-execute-init
;; ERROR: function was not converted to expressions. Cannot decompile.
;; definition for function ripple-create-wave-table
;; ERROR: function was not converted to expressions. Cannot decompile.
;; definition for function ripple-apply-wave-table
;; ERROR: function was not converted to expressions. Cannot decompile.
(defun ripple-execute ()
(when (-> *ripple-globals* count)
(ripple-execute-init)
(let ((gp-0 0)
(s5-0 (-> *ripple-globals* count))
(s4-0 (-> *ripple-globals* requests))
)
(while (!= gp-0 s5-0)
(when (-> s4-0 gp-0 waveform)
(let ((s3-0 gp-0)
(s2-0 (-> s4-0 gp-0 waveform))
)
(ripple-create-wave-table (the-as ripple-wave-set s2-0))
(while (!= s3-0 s5-0)
(when (= s2-0 (-> s4-0 s3-0 waveform))
(ripple-apply-wave-table (-> s4-0 s3-0 effect))
(set! (-> s4-0 s3-0 waveform) #f)
)
(+! s3-0 1)
)
)
)
(+! gp-0 1)
)
)
(set! (-> *ripple-globals* count) 0)
)
(none)
)
;; definition for function ripple-matrix-scale
;; ERROR: function was not converted to expressions. Cannot decompile.
(defun-debug ripple-add-debug-sphere ((arg0 process-drawable) (arg1 vector) (arg2 float) (arg3 float))
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(let ((f30-0 (- (quaternion-y-angle (-> arg0 root quat))))
(s5-0 (new-stack-vector0))
)
(let ((f28-0 (+ (-> arg1 x) (* arg2 (-> arg1 z))))
(f26-0 (+ (-> arg1 y) (* arg3 (-> arg1 z))))
)
(set! (-> s5-0 x) (- (* f28-0 (cos f30-0)) (* f26-0 (sin f30-0))))
(set! (-> s5-0 y) 0.0)
(set! (-> s5-0 z) (+ (* f26-0 (cos f30-0)) (* f28-0 (sin f30-0))))
)
(set! (-> s5-0 w) 0.0)
(let ((a0-6 s5-0))
(let ((v1-1 s5-0)
(a1-2 (-> arg0 root trans))
)
(.mov.vf vf6 vf0 :mask #b1000)
(.lvf vf4 (&-> v1-1 quad))
(.lvf vf5 (&-> a1-2 quad))
)
(.add.vf vf6 vf4 vf5 :mask #b111) ;; todo vector+!
(.svf (&-> a0-6 quad) vf6)
)
(add-debug-sphere
#t
(bucket-id debug-draw0)
s5-0
2048.0
(new 'static 'rgba :r #xff :g #xff :a #x80)
)
)
(none)
)
)
(defun ripple-slow-add-sine-waves ((arg0 ripple-wave-set) (arg1 float) (arg2 float))
(let ((f30-0 0.0))
(dotimes (s3-0 (-> arg0 count))
(let* ((v1-3 (-> arg0 wave s3-0))
(f0-2 (+ (+ (-> v1-3 offs) (* arg1 (-> v1-3 xmul)))
(* arg2 (-> v1-3 zmul))
)
)
)
(+! f30-0 (* (-> v1-3 scale) (cos f0-2)))
)
)
(fmax -127.0 (fmin 127.0 f30-0))
)
)
;; definition for function ripple-find-height
(defun ripple-find-height ((arg0 process-drawable) (arg1 basic) (arg2 vector))
(local-vars (sv-16 float) (sv-32 float))
(let* ((f30-0 (-> arg0 root trans y))
(v1-1 (-> arg0 draw))
(a1-5 (-> v1-1 lod-set lod (-> v1-1 cur-lod) geo effect))
)
(if (or (zero? (logand (-> a1-5 0 effect-bits) 4)) (not (-> v1-1 ripple)))
(return f30-0)
)
(let* ((a1-6 (-> a1-5 0 extra-info))
(s4-0
(the-as
mei-ripple
(+ (the-as uint a1-6) (the-as uint (* (-> a1-6 ripple-offset) 16)))
)
)
(gp-0 (-> v1-1 ripple))
(s5-0 (-> gp-0 waveform))
)
(if (not (-> gp-0 waveform))
(return f30-0)
)
(if (not (-> s5-0 converted))
(return f30-0)
)
(let* ((f28-0 (- (-> arg2 x) (-> arg0 root trans x)))
(f26-0 (- (-> arg2 z) (-> arg0 root trans z)))
(f22-0 (+ (quaternion-y-angle (-> arg0 root quat)) (-> s4-0 angle)))
(f24-0 (cos f22-0))
(f1-3 (sin f22-0))
(f0-4 (- (* f28-0 f24-0) (* f26-0 f1-3)))
(f1-5 (+ (* f26-0 f24-0) (* f28-0 f1-3)))
(f2-3 (/ 1.0 (-> s4-0 grid-size)))
(f28-1 (* f2-3 (- f0-4 (-> s4-0 x-base))))
(f26-1 (* f2-3 (- f1-5 (-> s4-0 z-base))))
)
(ripple-update-waveform-offs s5-0)
(let* ((f22-1 (the float (the int f28-1)))
(f24-1 (the float (the int f26-1)))
(f20-0 (ripple-slow-add-sine-waves s5-0 f22-1 f24-1))
)
(set! sv-16 (ripple-slow-add-sine-waves s5-0 (+ 1.0 f22-1) f24-1))
(set! sv-32 (ripple-slow-add-sine-waves s5-0 f22-1 (+ 1.0 f24-1)))
(let*
((f1-6 (ripple-slow-add-sine-waves s5-0 (+ 1.0 f22-1) (+ 1.0 f24-1)))
(f0-22 (+ f20-0 (* (- f28-1 f22-1) (- sv-16 f20-0))))
(f1-9 (+ sv-32 (* (- f28-1 f22-1) (- f1-6 sv-32))))
(f1-12 (+ f0-22 (* (- f26-1 f24-1) (- f1-9 f0-22))))
(f0-23 (-> gp-0 faded-scale))
)
(if (< f0-23 0.0)
(set! f0-23 (-> gp-0 global-scale))
)
(+ f30-0 (* (* 0.0078125 f1-12) f0-23))
)
)
)
)
)
)

View file

@ -65,30 +65,13 @@
(defmethod global-y-angle-to-point trsqv ((obj trsqv) (arg0 vector))
"Get the angle from the position of this trsqv to the point arg0."
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(vector-y-angle
(vector-! (new 'stack-no-clear 'vector) arg0 (-> obj trans))
)
)
(vector-y-angle (vector-! (new 'stack-no-clear 'vector) arg0 (-> obj trans)))
)
(defmethod relative-y-angle-to-point trsqv ((obj trsqv) (arg0 vector))
"Get the y angle between here and arg0, starting at whatever angle we're currently at."
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(deg-diff
(y-angle obj)
(vector-y-angle (vector-! (new 'stack-no-clear 'vector) arg0 (-> obj trans)))
)
)
(deg-diff
(y-angle obj)
(vector-y-angle (vector-! (new 'stack-no-clear 'vector) arg0 (-> obj trans)))
)
)

View file

@ -34,43 +34,21 @@
;; definition for method 11 of type trajectory
;; INFO: Return type mismatch int vs none.
;; Used lq/sq
(defmethod
TODO-RENAME-11
trajectory
((obj trajectory) (arg0 vector) (arg1 vector) (arg2 float) (arg3 float))
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(let ((v1-0 (-> obj initial-position)))
(set! (-> v1-0 quad) (-> arg0 quad))
)
(set! (-> obj gravity) arg3)
(set! (-> obj time) arg2)
(let ((f0-3 (/ (vector-vector-xz-distance arg1 arg0) arg2)))
(let ((a1-2 (-> obj initial-velocity)))
(let ((v1-1 arg1)
(a0-4 arg0)
)
(.lvf vf4 (&-> v1-1 quad))
(.lvf vf5 (&-> a0-4 quad))
)
(.mov.vf vf6 vf0 :mask #b1000)
(.sub.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a1-2 quad) vf6)
)
(defmethod TODO-RENAME-11 trajectory ((obj trajectory) (arg0 vector) (arg1 vector) (arg2 float) (arg3 float))
(set! (-> obj initial-position quad) (-> arg0 quad))
(set! (-> obj gravity) arg3)
(set! (-> obj time) arg2)
(let ((f0-3 (/ (vector-vector-xz-distance arg1 arg0) arg2)))
(vector-! (-> obj initial-velocity) arg1 arg0)
(vector-xz-normalize! (-> obj initial-velocity) f0-3)
)
(set!
(-> obj initial-velocity y)
(- (/ (- (-> arg1 y) (-> arg0 y)) arg2) (* (* 0.5 arg2) (-> obj gravity)))
)
(let ((v0-2 0))
)
(none)
(set!
(-> obj initial-velocity y)
(- (/ (- (-> arg1 y) (-> arg0 y)) arg2) (* (* 0.5 arg2) (-> obj gravity)))
)
(let ((v0-2 0))
)
(none)
)
;; definition for method 12 of type trajectory

View file

@ -337,268 +337,279 @@
(defun joint-mod-look-at-handler ((csp cspace) (xform transformq))
"Update bone transforms for look-at"
(local-vars
(v0-20 quaternion)
(f1-12 float)
(sv-48 vector)
(sv-52 vector)
(sv-56 vector)
)
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(let ((gp-0 (the-as joint-mod (-> csp param1))))
(cspace<-parented-transformq-joint! csp xform)
(set! sv-48 (vector-normalize-copy!
(new 'stack-no-clear 'vector)
(-> gp-0 process node-list data 0 bone transform vector 1)
1.0
)
)
(set! sv-52 (vector-normalize! (-> (-> csp bone) transform vector (-> gp-0 nose)) 1.0))
(let ((t9-3 vector-normalize!)
(a0-5 (new 'stack-no-clear 'vector))
)
(let ((v1-6 (-> gp-0 target))
(a1-5 (-> csp bone transform vector 3))
)
(.lvf vf4 (&-> v1-6 quad))
(.lvf vf5 (&-> a1-5 quad))
(local-vars (f1-12 float) (sv-48 vector) (sv-52 vector) (sv-56 vector))
(let ((gp-0 (the-as joint-mod (-> csp param1))))
(cspace<-parented-transformq-joint! csp xform)
(set!
sv-48
(vector-normalize-copy!
(new 'stack-no-clear 'vector)
(-> gp-0 process node-list data 0 bone transform vector 1)
1.0
)
)
(set!
sv-52
(vector-normalize! (-> csp bone transform vector (-> gp-0 nose)) 1.0)
)
(set!
sv-56
(vector-normalize!
(vector-!
(new 'stack-no-clear 'vector)
(-> gp-0 target)
(-> csp bone position)
)
1.0
)
)
(let* ((f30-0 (vector-y-angle sv-52))
(a0-8 (vector-flatten! (new-stack-vector0) sv-56 sv-48))
(f0-0 (vector-y-angle a0-8))
(f0-1 (deg-diff f30-0 f0-0))
)
(if (< (-> gp-0 ignore-angle) (fabs f0-1))
(set! f0-1 0.0)
)
(.mov.vf vf6 vf0 :mask #b1000)
(.sub.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a0-5 quad) vf6)
(set! sv-56 (t9-3 a0-5 1.0))
(let
((f30-1
(fmax
(fmin
(* (* f0-1 (-> gp-0 blend)) (-> gp-0 flex-blend))
(-> gp-0 twist-max y)
)
(- (-> gp-0 twist-max y))
)
)
)
(if (and (-> gp-0 shutting-down?) (= (-> gp-0 twist y) f30-1))
(set-mode! gp-0 (joint-mod-handler-mode reset))
)
(set!
(-> gp-0 twist y)
(deg-seek
(-> gp-0 twist y)
f30-1
(* 0.1 (fabs (deg-diff f30-1 (-> gp-0 twist y))))
)
)
)
)
(let ((v1-15 (-> gp-0 up)))
(cond
((zero? v1-15)
(quaternion-rotate-x! (-> xform quat) (-> xform quat) (-> gp-0 twist y))
)
((= v1-15 1)
(quaternion-rotate-local-y!
(-> xform quat)
(-> xform quat)
(-> gp-0 twist y)
)
)
(else
(quaternion-rotate-z! (-> xform quat) (-> xform quat) (-> gp-0 twist y))
)
)
)
(let*
((s3-1
(vector-normalize-copy!
(new 'stack-no-clear 'vector)
(the-as vector (-> gp-0 process node-list data 0 bone transform))
1.0
)
)
(f30-2 (vector-x-angle sv-52))
(s3-2 (vector-flatten! (new-stack-vector0) sv-56 s3-1))
(f0-15 (vector-x-angle s3-2))
(f0-21
(fmax
(fmin
(* (* (- (deg-diff f30-2 f0-15)) (-> gp-0 blend)) (-> gp-0 flex-blend))
(-> gp-0 twist-max x)
)
(- (-> gp-0 twist-max x))
)
)
)
(let* ((v1-22 sv-52))
(set! f1-12 (vector-dot s3-2 v1-22))
)
(if (< f1-12 0.1)
(set! f0-21 0.0)
)
(set!
(-> gp-0 twist x)
(deg-seek
(-> gp-0 twist x)
f0-21
(* 0.1 (fabs (deg-diff f0-21 (-> gp-0 twist x))))
)
)
)
(let ((v1-27 (-> gp-0 ear)))
(cond
((zero? v1-27)
(quaternion-rotate-x! (-> xform quat) (-> xform quat) (-> gp-0 twist x))
)
((= v1-27 1)
(quaternion-rotate-local-y! (-> xform quat) (-> xform quat) (-> gp-0 twist x))
)
(else
(quaternion-rotate-z! (-> xform quat) (-> xform quat) (-> gp-0 twist x))
)
)
)
(cspace<-parented-transformq-joint! csp xform)
(if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0))
(add-debug-text-sphere
*display-target-marks*
(bucket-id debug-draw1)
(-> gp-0 target)
819.2
"look"
(new 'static 'rgba :r #xff :g #xff :a #x80)
)
)
)
(none)
)
(defun joint-mod-world-look-at-handler ((arg0 cspace) (arg1 transformq))
(local-vars (f1-14 float) (sv-48 vector) (sv-52 vector) (sv-56 vector))
(let ((gp-0 (the-as joint-mod (-> arg0 param1))))
(let ((s5-0 (-> arg0 bone transform)))
(cspace<-parented-transformq-joint! arg0 arg1)
(set!
sv-48
(vector-normalize-copy!
(new 'stack-no-clear 'vector)
(-> gp-0 process node-list data 0 bone transform vector 1)
1.0
)
)
(set! sv-52 (vector-normalize! (-> s5-0 vector (-> gp-0 nose)) 1.0))
(set!
sv-56
(vector-normalize!
(vector-!
(new 'stack-no-clear 'vector)
(-> gp-0 target)
(-> s5-0 vector 3)
)
1.0
)
)
(let* ((f30-0 (vector-y-angle sv-52))
(t9-5 vector-flatten!)
(a0-7 (new-stack-vector0))
(a0-8 (t9-5 a0-7 sv-56 sv-48))
(f0-0 (vector-y-angle a0-8))
(a0-6 (vector-flatten! (new-stack-vector0) sv-56 sv-48))
(f0-0 (vector-y-angle a0-6))
(f0-1 (deg-diff f30-0 f0-0))
)
(if (< (-> gp-0 ignore-angle) (fabs f0-1))
(set! f0-1 0.0)
)
(let ((f30-1
(fmax (fmin (* (* f0-1 (-> gp-0 blend)) (-> gp-0 flex-blend)) (-> gp-0 twist-max y))
(- (-> gp-0 twist-max y))
)
(let
((f0-5
(fmax
(fmin
(* (* f0-1 (-> gp-0 blend)) (-> gp-0 flex-blend))
(-> gp-0 twist-max y)
)
)
(if (and (-> gp-0 shutting-down?) (= (-> gp-0 twist y) f30-1))
(set-mode! gp-0 (joint-mod-handler-mode reset))
)
(set! (-> gp-0 twist y)
(deg-seek (-> gp-0 twist y) f30-1 (* 0.1 (fabs (deg-diff f30-1 (-> gp-0 twist y)))))
)
)
)
(let ((v1-15 (-> gp-0 up)))
(cond
((zero? v1-15)
(quaternion-rotate-x! (the-as quaternion (-> xform rot)) (the-as quaternion (-> xform rot)) (-> gp-0 twist y))
)
((= v1-15 1)
(quaternion-rotate-local-y! (the-as quaternion (-> xform rot)) (the-as quaternion (-> xform rot)) (-> gp-0 twist y))
)
(else
(quaternion-rotate-z! (the-as quaternion (-> xform rot)) (the-as quaternion (-> xform rot)) (-> gp-0 twist y))
)
)
)
(let* ((s3-1
(vector-normalize-copy!
(new 'stack-no-clear 'vector)
(the-as vector (-> gp-0 process node-list data 0 bone transform))
1.0
(- (-> gp-0 twist-max y))
)
)
(f30-2 (vector-x-angle sv-52))
(t9-16 vector-flatten!)
(a0-19 (new-stack-vector0))
(s3-2 (t9-16 a0-19 sv-56 s3-1))
(f0-15 (vector-x-angle s3-2))
(f0-21
(fmax (fmin (* (* (- (deg-diff f30-2 f0-15)) (-> gp-0 blend)) (-> gp-0 flex-blend)) (-> gp-0 twist-max x))
(- (-> gp-0 twist-max x))
)
)
)
(let* ((v1-22 sv-52))
(set! f1-12 (vector-dot s3-2 v1-22))
)
(if (< f1-12 0.1)
(set! f0-21 0.0)
(set!
(-> gp-0 twist y)
(deg-seek
(-> gp-0 twist y)
f0-5
(fmax 1.0 (* 0.1 (fabs (deg-diff f0-5 (-> gp-0 twist y)))))
)
(set! (-> gp-0 twist x)
(deg-seek (-> gp-0 twist x) f0-21 (* 0.1 (fabs (deg-diff f0-21 (-> gp-0 twist x)))))
)
)
)
(when (!= (-> gp-0 twist y) 0.0)
(let
((a2-3 (matrix-rotate-y! (new 'stack-no-clear 'matrix) (-> gp-0 twist y)))
(s4-2 (-> s5-0 vector 3 quad))
)
(matrix*! s5-0 s5-0 a2-3)
(set! (-> s5-0 vector 3 quad) s4-2)
)
)
(let*
((s4-3
(vector-normalize-copy!
(new 'stack-no-clear 'vector)
(the-as vector (-> gp-0 process node-list data 0 bone transform))
1.0
)
)
(f30-2 (vector-x-angle sv-52))
(s4-4 (vector-flatten! (new-stack-vector0) sv-56 s4-3))
(f0-14 (vector-x-angle s4-4))
(f0-20
(fmax
(fmin
(* (* (- (deg-diff f30-2 f0-14)) (-> gp-0 blend)) (-> gp-0 flex-blend))
(-> gp-0 twist-max x)
)
)
(let ((v1-27 (-> gp-0 ear)))
(cond
((zero? v1-27)
(set! v0-20
(quaternion-rotate-x! (the-as quaternion (-> xform rot)) (the-as quaternion (-> xform rot)) (-> gp-0 twist x))
)
)
((= v1-27 1)
(set! v0-20
(quaternion-rotate-local-y! (the-as quaternion (-> xform rot)) (the-as quaternion (-> xform rot)) (-> gp-0 twist x)))
)
(else
(set! v0-20
(quaternion-rotate-z! (the-as quaternion (-> xform rot)) (the-as quaternion (-> xform rot)) (-> gp-0 twist x))
)
(- (-> gp-0 twist-max x))
)
)
)
(let* ((v1-14 sv-52))
(set! f1-14 (vector-dot s4-4 v1-14))
)
)
(cspace<-parented-transformq-joint! csp xform)
(if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0))
(add-debug-text-sphere
*display-target-marks*
(bucket-id debug-draw1)
(-> gp-0 target)
819.2
"look"
(new 'static 'rgba :r #xff :g #xff :a #x80)
)
(if (< f1-14 0.1)
(set! f0-20 0.0)
)
(set!
(-> gp-0 twist x)
(deg-seek
(-> gp-0 twist x)
f0-20
(fmax 1.0 (* 0.1 (fabs (deg-diff f0-20 (-> gp-0 twist x)))))
)
)
(none)
)
)
(defun joint-mod-world-look-at-handler ((arg0 cspace) (arg1 transformq))
(local-vars (f1-14 float) (sv-48 vector) (sv-52 vector) (sv-56 vector))
(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))))
(let ((s5-0 (-> arg0 bone transform)))
(cspace<-parented-transformq-joint! arg0 arg1)
(set! sv-48 (vector-normalize-copy!
(new 'stack-no-clear 'vector)
(-> gp-0 process node-list data 0 bone transform vector 1)
1.0
)
)
(set! sv-52 (vector-normalize! (-> s5-0 vector (-> gp-0 nose)) 1.0))
(let ((t9-3 vector-normalize!)
(a0-3 (new 'stack-no-clear 'vector))
)
(let ((v1-7 (-> gp-0 target))
(a1-3 (-> s5-0 vector 3))
)
(.lvf vf4 (&-> v1-7 quad))
(.lvf vf5 (&-> a1-3 quad))
)
(.mov.vf vf6 vf0 :mask #b1000)
(.sub.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a0-3 quad) vf6)
(set! sv-56 (t9-3 a0-3 1.0))
)
(let* ((f30-0 (vector-y-angle sv-52))
(t9-5 vector-flatten!)
(a0-5 (new-stack-vector0))
(a0-6 (t9-5 a0-5 sv-56 sv-48))
(f0-0 (vector-y-angle a0-6))
(f0-1 (deg-diff f30-0 f0-0))
)
(if (< (-> gp-0 ignore-angle) (fabs f0-1))
(set! f0-1 0.0)
)
(let ((f0-5
(fmax (fmin (* (* f0-1 (-> gp-0 blend)) (-> gp-0 flex-blend)) (-> gp-0 twist-max y))
(- (-> gp-0 twist-max y))
)
(when (!= (-> gp-0 twist x) 0.0)
(let* ((v1-20 (-> gp-0 ear))
(a1-17 ((cond
((zero? v1-20)
matrix-rotate-x!
)
((= v1-20 1)
matrix-rotate-y!
)
(else
matrix-rotate-z!
)
)
(new 'stack-no-clear 'matrix) (-> gp-0 twist x)
)
)
)
(set! (-> gp-0 twist y)
(deg-seek (-> gp-0 twist y) f0-5 (fmax 1.0 (* 0.1 (fabs (deg-diff f0-5 (-> gp-0 twist y))))))
)
)
)
(when (!= (-> gp-0 twist y) 0.0)
(let ((a2-3 (matrix-rotate-y! (new 'stack-no-clear 'matrix) (-> gp-0 twist y)))
(s4-2 (-> s5-0 vector 3 quad))
)
(matrix*! s5-0 s5-0 a2-3)
(set! (-> s5-0 vector 3 quad) s4-2)
)
)
(let* ((s4-3 (vector-normalize-copy!
(new 'stack-no-clear 'vector)
(the-as vector (-> gp-0 process node-list data 0 bone transform))
1.0
)
)
(f30-2 (vector-x-angle sv-52))
(t9-14 vector-flatten!)
(a0-14 (new-stack-vector0))
(s4-4 (t9-14 a0-14 sv-56 s4-3))
(f0-14 (vector-x-angle s4-4))
(f0-20 (fmax (fmin (* (* (- (deg-diff f30-2 f0-14)) (-> gp-0 blend)) (-> gp-0 flex-blend)) (-> gp-0 twist-max x))
(- (-> gp-0 twist-max x))
)
)
)
(let* ((v1-14 sv-52))
(set! f1-14 (vector-dot s4-4 v1-14))
)
(if (< f1-14 0.1)
(set! f0-20 0.0)
)
(let ((v0-17 (the-as object
(deg-seek (-> gp-0 twist x) f0-20
(fmax 1.0 (* 0.1 (fabs (deg-diff f0-20 (-> gp-0 twist x)))))
)
)
)
)
(set! (-> gp-0 twist x) (the-as float v0-17))
(when (!= (-> gp-0 twist x) 0.0)
(let* ((v1-20 (-> gp-0 ear))
(a1-17 ((cond
((zero? v1-20)
matrix-rotate-x!
)
((= v1-20 1)
matrix-rotate-y!
)
(else
matrix-rotate-z!
)
)
(new 'stack-no-clear 'matrix) (-> gp-0 twist x)
)
)
)
(set! v0-17 (matrix*! s5-0 a1-17 s5-0))
)
)
)
(matrix*! s5-0 a1-17 s5-0)
)
)
(if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0))
(add-debug-text-sphere
*display-target-marks*
(bucket-id debug-draw1)
(-> gp-0 target)
819.2
"look"
(new 'static 'rgba :r #xff :g #xff :a #x80)
)
)
)
(none)
(if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0))
(add-debug-text-sphere
*display-target-marks*
(bucket-id debug-draw1)
(-> gp-0 target)
819.2
"look"
(new 'static 'rgba :r #xff :g #xff :a #x80)
)
)
)
(let ((v0-22 0))
)
(none)
)
(defun joint-mod-rotate-handler ((arg0 cspace) (arg1 transformq))
@ -620,13 +631,7 @@
)
)
)
(quaternion-normalize!
(quaternion*!
(the-as quaternion (-> arg1 rot))
a1-2
(the-as quaternion (-> arg1 rot))
)
)
(quaternion-normalize! (quaternion*! (-> arg1 quat) a1-2 (-> arg1 quat)))
)
(let* ((v1-6 (-> s3-0 (-> s4-0 up)))
(a1-4 (quaternion-axis-angle!
@ -638,13 +643,7 @@
)
)
)
(quaternion-normalize!
(quaternion*!
(the-as quaternion (-> arg1 rot))
a1-4
(the-as quaternion (-> arg1 rot))
)
)
(quaternion-normalize! (quaternion*! (-> arg1 quat) a1-4 (-> arg1 quat)))
)
(let* ((v1-10 (-> s3-0 (-> s4-0 nose)))
(a1-6 (quaternion-axis-angle!
@ -656,13 +655,7 @@
)
)
)
(quaternion-normalize!
(quaternion*!
(the-as quaternion (-> arg1 rot))
a1-6
(the-as quaternion (-> arg1 rot))
)
)
(quaternion-normalize! (quaternion*! (-> arg1 quat) a1-6 (-> arg1 quat)))
)
)
(cspace<-parented-transformq-joint! arg0 arg1)
@ -671,18 +664,17 @@
(defun joint-mod-joint-set-handler ((arg0 cspace) (arg1 transformq))
(let ((s4-0 (the-as joint-mod (-> arg0 param1))))
(let ((v1-0 (-> arg1 trans)))
(set! (-> v1-0 quad) (-> s4-0 trans quad))
)
(quaternion-copy! (the-as quaternion (-> arg1 rot)) (-> s4-0 quat))
(let ((v1-1 (-> arg1 scale)))
(set! (-> v1-1 quad) (-> s4-0 scale quad))
)
(set! (-> arg1 trans quad) (-> s4-0 trans quad))
(quaternion-copy! (-> arg1 quat) (-> s4-0 quat))
(set! (-> arg1 scale quad) (-> s4-0 scale quad))
)
(cspace<-parented-transformq-joint! arg0 arg1)
(let ((v0-2 0))
)
(none)
)
;; todo vector+!
(defun joint-mod-joint-set*-handler ((arg0 cspace) (arg1 transformq))
(rlet ((vf0 :class vf)
(vf4 :class vf)
@ -751,58 +743,40 @@
)
)
;; todo needs better vector-dot stuff
(defun joint-mod-wheel-callback ((arg0 cspace) (arg1 transformq))
(local-vars (f0-3 float))
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(let ((s4-0 (the-as joint-mod-wheel (-> arg0 param1))))
(let ((v1-1 (-> s4-0 process root))
(s1-0 (new-stack-vector0))
(s3-0 (new-stack-vector0))
(s2-0 (new-stack-vector0))
)
(let ((f0-0 0.0))
(let ((s4-0 (the-as joint-mod-wheel (-> arg0 param1))))
(let ((v1-1 (-> s4-0 process root))
(s1-0 (new-stack-vector0))
(s3-0 (new-stack-vector0))
(s2-0 (new-stack-vector0))
)
(let ((f0-1 0.0))
)
(vector-z-quaternion! s2-0 (the-as quaternion (-> v1-1 rot)))
(vector<-cspace! s1-0 arg0)
(let ((a1-3 s3-0))
(let ((v1-2 s1-0)
(a0-3 (-> s4-0 last-position))
)
(.lvf vf4 (&-> v1-2 quad))
(.lvf vf5 (&-> a0-3 quad))
)
(.mov.vf vf6 vf0 :mask #b1000)
(.sub.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a1-3 quad) vf6)
)
(let ((v1-3 (-> s4-0 last-position)))
(set! (-> v1-3 quad) (-> s1-0 quad))
)
(set! f0-3 (vector-dot s2-0 s3-0))
(let ((f0-0 0.0))
)
(let* ((f0-4 f0-3)
(f1-1 65536.0)
(f2-2 (* 6.28318 (-> s4-0 wheel-radius)))
(f0-5 (* (* f1-1 (/ 1.0 f2-2)) f0-4))
)
(set! (-> s4-0 angle) (+ (-> s4-0 angle) f0-5))
(let ((f0-1 0.0))
)
(quaternion-vector-angle!
(the-as quaternion (-> arg1 rot))
(-> *joint-axis-vectors* (-> s4-0 wheel-axis))
(-> s4-0 angle)
)
(vector-z-quaternion! s2-0 (-> v1-1 quat))
(vector<-cspace! s1-0 arg0)
(vector-! s3-0 s1-0 (-> s4-0 last-position))
(set! (-> s4-0 last-position quad) (-> s1-0 quad))
(set! f0-3 (vector-dot s2-0 s3-0))
)
(cspace<-parented-transformq-joint! arg0 arg1)
(none)
(let* ((f0-4 f0-3)
(f1-1 65536.0)
(f2-2 (* 6.28318 (-> s4-0 wheel-radius)))
(f0-5 (* (* f1-1 (/ 1.0 f2-2)) f0-4))
)
(set! (-> s4-0 angle) (+ (-> s4-0 angle) f0-5))
)
(quaternion-vector-angle!
(-> arg1 quat)
(-> *joint-axis-vectors* (-> s4-0 wheel-axis))
(-> s4-0 angle)
)
)
(cspace<-parented-transformq-joint! arg0 arg1)
(none)
)
(defmethod new joint-mod-wheel ((allocation symbol) (type-to-make type) (arg0 process-drawable) (arg1 int) (arg2 float) (arg3 int))
@ -845,21 +819,15 @@
(let ((v1-0 (the-as joint-mod-set-local (-> arg0 param1))))
(cond
((-> v1-0 enable)
(when (not (-> v1-0 set-translation))
(let ((a2-3 (-> v1-0 transform)))
(set! (-> a2-3 trans quad) (-> arg1 trans quad))
(if (not (-> v1-0 set-translation))
(set! (-> v1-0 transform trans quad) (-> arg1 trans quad))
)
)
(when (not (-> v1-0 set-rotation))
(let ((a2-6 (-> v1-0 transform rot)))
(set! (-> a2-6 quad) (-> arg1 rot quad))
(if (not (-> v1-0 set-rotation))
(set! (-> v1-0 transform quat vec quad) (-> arg1 quat vec quad))
)
)
(when (not (-> v1-0 set-scale))
(let ((a2-9 (-> v1-0 transform scale)))
(set! (-> a2-9 quad) (-> arg1 scale quad))
(if (not (-> v1-0 set-scale))
(set! (-> v1-0 transform scale quad) (-> arg1 scale quad))
)
)
(cspace<-parented-transformq-joint! arg0 (-> v1-0 transform))
)
(else
@ -876,16 +844,10 @@
(set! (-> v0-0 set-rotation) arg3)
(set! (-> v0-0 set-scale) arg4)
(set! (-> v0-0 enable) #t)
(let ((v1-3 (-> v0-0 transform)))
(set! (-> v1-3 trans quad) (-> *null-vector* quad))
)
(let ((v1-4 (-> v0-0 transform rot)))
(set! (-> v1-4 quad) (-> *null-vector* quad))
)
(let ((v1-5 (-> v0-0 transform scale)))
(set! (-> v1-5 quad) (-> *identity-vector* quad))
)
(let ((v1-8 (-> (-> arg0 node-list) data arg1)))
(set! (-> v0-0 transform trans quad) (-> *null-vector* quad))
(set! (-> v0-0 transform quat vec quad) (-> *null-vector* quad))
(set! (-> v0-0 transform scale quad) (-> *identity-vector* quad))
(let ((v1-8 (-> arg0 node-list data arg1)))
(set! (-> v1-8 param0) joint-mod-set-local-callback)
(set! (-> v1-8 param1) v0-0)
)
@ -920,16 +882,10 @@
(let ((v0-0 (object-new allocation type-to-make (the-as int (-> type-to-make size)))))
(set! (-> v0-0 node-index) arg1)
(set! (-> v0-0 enable) arg2)
(let ((v1-2 (-> v0-0 transform)))
(set! (-> v1-2 trans quad) (-> *null-vector* quad))
)
(let ((v1-3 (-> v0-0 transform rot)))
(set! (-> v1-3 quad) (-> *null-vector* quad))
)
(let ((v1-4 (-> v0-0 transform scale)))
(set! (-> v1-4 quad) (-> *identity-vector* quad))
)
(let ((v1-7 (-> (-> arg0 node-list) data arg1)))
(set! (-> v0-0 transform trans quad) (-> *null-vector* quad))
(set! (-> v0-0 transform quat vec quad) (-> *null-vector* quad))
(set! (-> v0-0 transform scale quad) (-> *identity-vector* quad))
(let ((v1-7 (-> arg0 node-list data arg1)))
(set! (-> v1-7 param0) joint-mod-set-world-callback)
(set! (-> v1-7 param1) v0-0)
)
@ -969,9 +925,9 @@
(-> gp-0 blend)
)
(quaternion-slerp!
(the-as quaternion (-> gp-0 blend-transform rot))
(the-as quaternion (-> arg1 rot))
(the-as quaternion (-> gp-0 transform rot))
(-> gp-0 blend-transform quat)
(-> arg1 quat)
(-> gp-0 transform quat)
(-> gp-0 blend)
)
(cspace<-parented-transformq-joint! arg0 (-> gp-0 blend-transform))
@ -989,16 +945,10 @@
(set! (-> v0-0 node-index) arg1)
(set! (-> v0-0 enable) arg2)
(set! (-> v0-0 blend) 0.0)
(let ((v1-2 (-> v0-0 transform)))
(set! (-> v1-2 trans quad) (-> *null-vector* quad))
)
(let ((v1-3 (-> v0-0 transform rot)))
(set! (-> v1-3 quad) (-> *null-vector* quad))
)
(let ((v1-4 (-> v0-0 transform scale)))
(set! (-> v1-4 quad) (-> *identity-vector* quad))
)
(let ((v1-7 (-> (-> arg0 node-list) data arg1)))
(set! (-> v0-0 transform trans quad) (-> *null-vector* quad))
(set! (-> v0-0 transform quat vec quad) (-> *null-vector* quad))
(set! (-> v0-0 transform scale quad) (-> *identity-vector* quad))
(let ((v1-7 (-> arg0 node-list data arg1)))
(set! (-> v1-7 param0) joint-mod-blend-local-callback)
(set! (-> v1-7 param1) v0-0)
)
@ -1034,11 +984,7 @@
(if (< f30-0 -32768.0)
(set! f30-0 (+ 65536.0 f30-0))
)
(quaternion-vector-angle!
(the-as quaternion (-> arg1 rot))
(-> gp-0 spin-axis)
f30-0
)
(quaternion-vector-angle! (-> arg1 quat) (-> gp-0 spin-axis) f30-0)
(set! (-> gp-0 angle) f30-0)
)
)

View file

@ -580,122 +580,102 @@
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(let ((s5-0 (new 'stack-no-clear 'vector)))
(cond
(arg0
(let ((a0-1 s5-0))
(let ((v1-0 (-> obj target)))
(.mov.vf vf6 vf0 :mask #b1000)
(.lvf vf4 (&-> v1-0 quad))
)
(.lvf vf5 (&-> arg0 quad))
(.add.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a0-1 quad) vf6)
)
(let ((a1-1 s5-0))
(let ((v1-1 s5-0)
(a0-2 (-> obj value))
(init-vf0-vector)
(let ((s5-0 (new 'stack-no-clear 'vector)))
(cond
(arg0
(let ((a0-1 s5-0))
(let ((v1-0 (-> obj target)))
(.mov.vf vf6 vf0 :mask #b1000)
(.lvf vf4 (&-> v1-0 quad))
)
(.lvf vf4 (&-> v1-1 quad))
(.lvf vf5 (&-> a0-2 quad))
)
(.mov.vf vf6 vf0 :mask #b1000)
(.sub.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a1-1 quad) vf6)
)
)
(else
(let ((a1-2 s5-0))
(let ((v1-2 (-> obj target))
(a0-3 (-> obj value))
)
(.lvf vf4 (&-> v1-2 quad))
(.lvf vf5 (&-> a0-3 quad))
)
(.mov.vf vf6 vf0 :mask #b1000)
(.sub.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a1-2 quad) vf6)
)
)
)
(let ((v1-3 s5-0))
(let ((a0-4 s5-0)
(f0-1 (* (-> obj accel) (-> *display* time-adjust-ratio)))
(.lvf vf5 (&-> arg0 quad))
(.add.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a0-1 quad) vf6)
)
(.lvf vf1 (&-> a0-4 quad))
(let ((a0-5 f0-1))
(.mov vf2 a0-5)
)
)
(.add.x.vf vf1 vf0 vf0 :mask #b1000)
(.mul.x.vf vf1 vf1 vf2 :mask #b111)
(.svf (&-> v1-3 quad) vf1)
)
(let ((a1-4 (-> obj vel)))
(let ((v1-4 (-> obj vel))
(a0-6 s5-0)
)
(.mov.vf vf6 vf0 :mask #b1000)
(.lvf vf4 (&-> v1-4 quad))
(.lvf vf5 (&-> a0-6 quad))
)
(.add.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a1-4 quad) vf6)
)
(let ((f0-2 (vector-length (-> obj vel))))
(when (< (-> obj max-vel) f0-2)
(let ((v1-6 (-> obj vel)))
(let ((a0-8 (-> obj vel))
(f0-3 (/ (-> obj max-vel) f0-2))
)
(.lvf vf1 (&-> a0-8 quad))
(let ((a0-9 f0-3))
(.mov vf2 a0-9)
(vector-! s5-0 s5-0 (-> obj value))
)
(else
(vector-! s5-0 (-> obj target) (-> obj value))
)
)
(.add.x.vf vf1 vf0 vf0 :mask #b1000)
(.mul.x.vf vf1 vf1 vf2 :mask #b111)
(.svf (&-> v1-6 quad) vf1)
)
(let ((v1-3 s5-0))
(let ((a0-4 s5-0)
(f0-1 (* (-> obj accel) (-> *display* time-adjust-ratio)))
)
(.lvf vf1 (&-> a0-4 quad))
(let ((a0-5 f0-1))
(.mov vf2 a0-5)
)
)
(.add.x.vf vf1 vf0 vf0 :mask #b1000)
(.mul.x.vf vf1 vf1 vf2 :mask #b111)
(.svf (&-> v1-3 quad) vf1)
)
(let ((a1-4 (-> obj vel)))
(let ((v1-4 (-> obj vel))
(a0-6 s5-0)
)
(.mov.vf vf6 vf0 :mask #b1000)
(.lvf vf4 (&-> v1-4 quad))
(.lvf vf5 (&-> a0-6 quad))
)
(.add.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a1-4 quad) vf6)
)
(let ((f0-2 (vector-length (-> obj vel))))
(when (< (-> obj max-vel) f0-2)
(let ((v1-6 (-> obj vel)))
(let ((a0-8 (-> obj vel))
(f0-3 (/ (-> obj max-vel) f0-2))
)
(.lvf vf1 (&-> a0-8 quad))
(let ((a0-9 f0-3))
(.mov vf2 a0-9)
)
)
(.add.x.vf vf1 vf0 vf0 :mask #b1000)
(.mul.x.vf vf1 vf1 vf2 :mask #b111)
(.svf (&-> v1-6 quad) vf1)
)
)
)
(let ((v1-7 (-> obj vel)))
(let ((a0-10 (-> obj vel))
(f0-4 (-> obj damping))
)
(.lvf vf1 (&-> a0-10 quad))
(let ((a0-11 f0-4))
(.mov vf2 a0-11)
)
)
(.add.x.vf vf1 vf0 vf0 :mask #b1000)
(.mul.x.vf vf1 vf1 vf2 :mask #b111)
(.svf (&-> v1-7 quad) vf1)
)
(let ((v1-8 s5-0))
(let ((a0-12 (-> obj vel))
(f0-5 (-> *display* time-adjust-ratio))
)
(.lvf vf1 (&-> a0-12 quad))
(let ((a0-13 f0-5))
(.mov vf2 a0-13)
)
)
(.add.x.vf vf1 vf0 vf0 :mask #b1000)
(.mul.x.vf vf1 vf1 vf2 :mask #b111)
(.svf (&-> v1-8 quad) vf1)
)
(let ((a0-14 (-> obj value)))
(let ((v1-9 (-> obj value)))
(.mov.vf vf6 vf0 :mask #b1000)
(.lvf vf4 (&-> v1-9 quad))
)
(.lvf vf5 (&-> s5-0 quad))
(.add.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a0-14 quad) vf6)
)
)
)
(let ((v1-7 (-> obj vel)))
(let ((a0-10 (-> obj vel))
(f0-4 (-> obj damping))
)
(.lvf vf1 (&-> a0-10 quad))
(let ((a0-11 f0-4))
(.mov vf2 a0-11)
)
)
(.add.x.vf vf1 vf0 vf0 :mask #b1000)
(.mul.x.vf vf1 vf1 vf2 :mask #b111)
(.svf (&-> v1-7 quad) vf1)
)
(let ((v1-8 s5-0))
(let ((a0-12 (-> obj vel))
(f0-5 (-> *display* time-adjust-ratio))
)
(.lvf vf1 (&-> a0-12 quad))
(let ((a0-13 f0-5))
(.mov vf2 a0-13)
)
)
(.add.x.vf vf1 vf0 vf0 :mask #b1000)
(.mul.x.vf vf1 vf1 vf2 :mask #b111)
(.svf (&-> v1-8 quad) vf1)
)
(let ((a0-14 (-> obj value)))
(let ((v1-9 (-> obj value)))
(.mov.vf vf6 vf0 :mask #b1000)
(.lvf vf4 (&-> v1-9 quad))
)
(.lvf vf5 (&-> s5-0 quad))
(.add.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a0-14 quad) vf6)
)
(-> obj value)
)
(-> obj value)
)
)

View file

@ -104,7 +104,7 @@
(-> gp-0 trans quad)
(-> (the-as transform (-> arg0 extra)) scale quad)
)
(quaternion-copy! (the-as quaternion (-> gp-0 rot)) (-> arg0 quat))
(quaternion-copy! (-> gp-0 quat) (-> arg0 quat))
(vector-identity! (-> gp-0 scale))
(let ((a1-2 (new 'stack-no-clear 'event-message-block)))
(set! (-> a1-2 from) pp)
@ -123,4 +123,4 @@
;; failed to figure out what this is:
(none)
)
)

View file

@ -394,30 +394,10 @@
(.add.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a0-1 quad) vf6)
)
(let ((a1-1 gp-0))
(let ((v1-1 gp-0)
(a0-2 (-> obj value))
)
(.lvf vf4 (&-> v1-1 quad))
(.lvf vf5 (&-> a0-2 quad))
)
(.mov.vf vf6 vf0 :mask #b1000)
(.sub.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a1-1 quad) vf6)
)
(vector-! gp-0 gp-0 (-> obj value))
)
(else
(let ((a1-2 gp-0))
(let ((v1-2 (-> obj target))
(a0-3 (-> obj value))
)
(.lvf vf4 (&-> v1-2 quad))
(.lvf vf5 (&-> a0-3 quad))
)
(.mov.vf vf6 vf0 :mask #b1000)
(.sub.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a1-2 quad) vf6)
)
(vector-! gp-0 (-> obj target) (-> obj value))
)
)
(let ((f30-1 (* (-> obj max-partial) (vector-length gp-0))))

View file

@ -441,9 +441,9 @@
(defmethod inspect collide-shape ((obj collide-shape))
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Ttrans: ~`vector`P~%" (-> obj trans))
(format #t "~Trot: ~`vector`P~%" (-> obj rot))
(format #t "~Trot: ~`vector`P~%" (-> obj quat))
(format #t "~Tscale: ~`vector`P~%" (-> obj scale))
(format #t "~Tquat: #<quaternion @ #x~X>~%" (-> obj rot))
(format #t "~Tquat: #<quaternion @ #x~X>~%" (-> obj quat))
(format
#t
"~Tpause-adjust-distance: (meters ~m)~%"
@ -518,9 +518,9 @@
(defmethod inspect collide-shape-moving ((obj collide-shape-moving))
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Ttrans: ~`vector`P~%" (-> obj trans))
(format #t "~Trot: ~`vector`P~%" (-> obj rot))
(format #t "~Trot: ~`vector`P~%" (-> obj quat))
(format #t "~Tscale: ~`vector`P~%" (-> obj scale))
(format #t "~Tquat: #<quaternion @ #x~X>~%" (-> obj rot))
(format #t "~Tquat: #<quaternion @ #x~X>~%" (-> obj quat))
(format
#t
"~Tpause-adjust-distance: (meters ~m)~%"
@ -733,7 +733,7 @@
)
)
(set! (-> obj trans w) 1.0)
(quaternion-identity! (the-as quaternion (-> obj rot)))
(quaternion-identity! (-> obj quat))
(vector-identity! (-> obj scale))
(cond
((= collide-list-kind (collide-list-enum hit-by-player))

View file

@ -147,7 +147,7 @@
(vf6 :class vf)
)
(init-vf0-vector)
(let ((f30-0 (- (quaternion-y-angle (the-as quaternion (-> arg0 root rot)))))
(let ((f30-0 (- (quaternion-y-angle (-> arg0 root quat))))
(s5-0 (new-stack-vector0))
)
(let ((f28-0 (+ (-> arg1 x) (* arg2 (-> arg1 z))))
@ -230,12 +230,7 @@
)
(let* ((f28-0 (- (-> arg2 x) (-> arg0 root trans x)))
(f26-0 (- (-> arg2 z) (-> arg0 root trans z)))
(f22-0
(+
(quaternion-y-angle (the-as quaternion (-> arg0 root rot)))
(-> s4-0 angle)
)
)
(f22-0 (+ (quaternion-y-angle (-> arg0 root quat)) (-> s4-0 angle)))
(f24-0 (cos f22-0))
(f1-3 (sin f22-0))
(f0-4 (- (* f28-0 f24-0) (* f26-0 f1-3)))

View file

@ -14,9 +14,9 @@
(defmethod inspect transformq ((obj transformq))
(format #t "[~8x] ~A~%" obj 'transformq)
(format #t "~Ttrans: ~`vector`P~%" (-> obj trans))
(format #t "~Trot: ~`vector`P~%" (-> obj rot))
(format #t "~Trot: ~`vector`P~%" (-> obj quat))
(format #t "~Tscale: ~`vector`P~%" (-> obj scale))
(format #t "~Tquat: #<quaternion @ #x~X>~%" (-> obj rot))
(format #t "~Tquat: #<quaternion @ #x~X>~%" (-> obj quat))
obj
)
@ -33,9 +33,9 @@
(defmethod inspect trsq ((obj trsq))
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Ttrans: ~`vector`P~%" (-> obj trans))
(format #t "~Trot: ~`vector`P~%" (-> obj rot))
(format #t "~Trot: ~`vector`P~%" (-> obj quat))
(format #t "~Tscale: ~`vector`P~%" (-> obj scale))
(format #t "~Tquat: #<quaternion @ #x~X>~%" (-> obj rot))
(format #t "~Tquat: #<quaternion @ #x~X>~%" (-> obj quat))
obj
)
@ -80,9 +80,9 @@
(defmethod inspect trsqv ((obj trsqv))
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Ttrans: ~`vector`P~%" (-> obj trans))
(format #t "~Trot: ~`vector`P~%" (-> obj rot))
(format #t "~Trot: ~`vector`P~%" (-> obj quat))
(format #t "~Tscale: ~`vector`P~%" (-> obj scale))
(format #t "~Tquat: #<quaternion @ #x~X>~%" (-> obj rot))
(format #t "~Tquat: #<quaternion @ #x~X>~%" (-> obj quat))
(format
#t
"~Tpause-adjust-distance: (meters ~m)~%"
@ -100,49 +100,14 @@
;; definition for method 23 of type trsqv
(defmethod global-y-angle-to-point trsqv ((obj trsqv) (arg0 vector))
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(let ((t9-0 vector-y-angle)
(v1-0 (new 'stack-no-clear 'vector))
)
(let ((a0-1 (-> obj trans)))
(.lvf vf4 (&-> arg0 quad))
(.lvf vf5 (&-> a0-1 quad))
)
(.mov.vf vf6 vf0 :mask #b1000)
(.sub.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> v1-0 quad) vf6)
(t9-0 v1-0)
)
)
(vector-y-angle (vector-! (new 'stack-no-clear 'vector) arg0 (-> obj trans)))
)
;; definition for method 24 of type trsqv
(defmethod relative-y-angle-to-point trsqv ((obj trsqv) (arg0 vector))
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(let ((gp-0 deg-diff)
(s3-0 (y-angle obj))
(t9-1 vector-y-angle)
(a0-2 (new 'stack-no-clear 'vector))
)
(let ((v1-1 (-> obj trans)))
(.lvf vf4 (&-> arg0 quad))
(.lvf vf5 (&-> v1-1 quad))
)
(.mov.vf vf6 vf0 :mask #b1000)
(.sub.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a0-2 quad) vf6)
(gp-0 s3-0 (t9-1 a0-2))
)
(deg-diff
(y-angle obj)
(vector-y-angle (vector-! (new 'stack-no-clear 'vector) arg0 (-> obj trans)))
)
)

View file

@ -30,37 +30,20 @@
TODO-RENAME-11
trajectory
((obj trajectory) (arg0 vector) (arg1 vector) (arg2 float) (arg3 float))
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(set! (-> obj initial-position quad) (-> arg0 quad))
(set! (-> obj gravity) arg3)
(set! (-> obj time) arg2)
(let ((f0-3 (/ (vector-vector-xz-distance arg1 arg0) arg2)))
(let ((a1-2 (-> obj initial-velocity)))
(let ((v1-1 arg1)
(a0-4 arg0)
)
(.lvf vf4 (&-> v1-1 quad))
(.lvf vf5 (&-> a0-4 quad))
)
(.mov.vf vf6 vf0 :mask #b1000)
(.sub.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a1-2 quad) vf6)
)
(vector-xz-normalize! (-> obj initial-velocity) f0-3)
)
(set!
(-> obj initial-velocity y)
(- (/ (- (-> arg1 y) (-> arg0 y)) arg2) (* (* 0.5 arg2) (-> obj gravity)))
)
(let ((v0-2 0))
)
(none)
(set! (-> obj initial-position quad) (-> arg0 quad))
(set! (-> obj gravity) arg3)
(set! (-> obj time) arg2)
(let ((f0-3 (/ (vector-vector-xz-distance arg1 arg0) arg2)))
(vector-! (-> obj initial-velocity) arg1 arg0)
(vector-xz-normalize! (-> obj initial-velocity) f0-3)
)
(set!
(-> obj initial-velocity y)
(- (/ (- (-> arg1 y) (-> arg0 y)) arg2) (* (* 0.5 arg2) (-> obj gravity)))
)
(let ((v0-2 0))
)
(none)
)
;; definition for method 12 of type trajectory

View file

@ -380,174 +380,148 @@
;; Used lq/sq
(defun joint-mod-look-at-handler ((csp cspace) (xform transformq))
(local-vars (f1-12 float) (sv-48 vector) (sv-52 vector) (sv-56 vector))
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(let ((gp-0 (the-as joint-mod (-> csp param1))))
(cspace<-parented-transformq-joint! csp xform)
(set!
sv-48
(vector-normalize-copy!
(let ((gp-0 (the-as joint-mod (-> csp param1))))
(cspace<-parented-transformq-joint! csp xform)
(set!
sv-48
(vector-normalize-copy!
(new 'stack-no-clear 'vector)
(-> gp-0 process node-list data 0 bone transform vector 1)
1.0
)
)
(set!
sv-52
(vector-normalize! (-> csp bone transform vector (-> gp-0 nose)) 1.0)
)
(set!
sv-56
(vector-normalize!
(vector-!
(new 'stack-no-clear 'vector)
(-> gp-0 process node-list data 0 bone transform vector 1)
1.0
(-> gp-0 target)
(-> csp bone position)
)
1.0
)
(set!
sv-52
(vector-normalize! (-> csp bone transform vector (-> gp-0 nose)) 1.0)
)
(let ((t9-3 vector-normalize!)
(a0-5 (new 'stack-no-clear 'vector))
)
(let* ((f30-0 (vector-y-angle sv-52))
(a0-8 (vector-flatten! (new-stack-vector0) sv-56 sv-48))
(f0-0 (vector-y-angle a0-8))
(f0-1 (deg-diff f30-0 f0-0))
)
(let ((v1-6 (-> gp-0 target))
(a1-5 (-> csp bone position))
)
(.lvf vf4 (&-> v1-6 quad))
(.lvf vf5 (&-> a1-5 quad))
)
(.mov.vf vf6 vf0 :mask #b1000)
(.sub.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a0-5 quad) vf6)
(set! sv-56 (t9-3 a0-5 1.0))
(if (< (-> gp-0 ignore-angle) (fabs f0-1))
(set! f0-1 0.0)
)
(let* ((f30-0 (vector-y-angle sv-52))
(a0-8 (vector-flatten! (new-stack-vector0) sv-56 sv-48))
(f0-0 (vector-y-angle a0-8))
(f0-1 (deg-diff f30-0 f0-0))
)
(if (< (-> gp-0 ignore-angle) (fabs f0-1))
(set! f0-1 0.0)
)
(let
((f30-1
(fmax
(fmin
(* (* f0-1 (-> gp-0 blend)) (-> gp-0 flex-blend))
(-> gp-0 twist-max y)
)
(- (-> gp-0 twist-max y))
)
)
)
(if (and (-> gp-0 shutting-down?) (= (-> gp-0 twist y) f30-1))
(set-mode! gp-0 (joint-mod-handler-mode reset))
)
(set!
(-> gp-0 twist y)
(deg-seek
(-> gp-0 twist y)
f30-1
(* 0.1 (fabs (deg-diff f30-1 (-> gp-0 twist y))))
)
)
)
)
(let ((v1-15 (-> gp-0 up)))
(cond
((zero? v1-15)
(quaternion-rotate-x!
(the-as quaternion (-> xform rot))
(the-as quaternion (-> xform rot))
(-> gp-0 twist y)
)
)
((= v1-15 1)
(quaternion-rotate-local-y!
(the-as quaternion (-> xform rot))
(the-as quaternion (-> xform rot))
(-> gp-0 twist y)
)
)
(else
(quaternion-rotate-z!
(the-as quaternion (-> xform rot))
(the-as quaternion (-> xform rot))
(-> gp-0 twist y)
)
)
)
)
(let*
((s3-1
(vector-normalize-copy!
(new 'stack-no-clear 'vector)
(the-as vector (-> gp-0 process node-list data 0 bone transform))
1.0
)
)
(f30-2 (vector-x-angle sv-52))
(s3-2 (vector-flatten! (new-stack-vector0) sv-56 s3-1))
(f0-15 (vector-x-angle s3-2))
(f0-21
(let
((f30-1
(fmax
(fmin
(* (* (- (deg-diff f30-2 f0-15)) (-> gp-0 blend)) (-> gp-0 flex-blend))
(-> gp-0 twist-max x)
(* (* f0-1 (-> gp-0 blend)) (-> gp-0 flex-blend))
(-> gp-0 twist-max y)
)
(- (-> gp-0 twist-max x))
(- (-> gp-0 twist-max y))
)
)
)
(let* ((v1-22 sv-52))
(set! f1-12 (vector-dot s3-2 v1-22))
)
(if (< f1-12 0.1)
(set! f0-21 0.0)
(if (and (-> gp-0 shutting-down?) (= (-> gp-0 twist y) f30-1))
(set-mode! gp-0 (joint-mod-handler-mode reset))
)
(set!
(-> gp-0 twist x)
(-> gp-0 twist y)
(deg-seek
(-> gp-0 twist y)
f30-1
(* 0.1 (fabs (deg-diff f30-1 (-> gp-0 twist y))))
)
)
)
)
(let ((v1-15 (-> gp-0 up)))
(cond
((zero? v1-15)
(quaternion-rotate-x! (-> xform quat) (-> xform quat) (-> gp-0 twist y))
)
((= v1-15 1)
(quaternion-rotate-local-y!
(-> xform quat)
(-> xform quat)
(-> gp-0 twist y)
)
)
(else
(quaternion-rotate-z! (-> xform quat) (-> xform quat) (-> gp-0 twist y))
)
)
)
(let*
((s3-1
(vector-normalize-copy!
(new 'stack-no-clear 'vector)
(the-as vector (-> gp-0 process node-list data 0 bone transform))
1.0
)
)
(f30-2 (vector-x-angle sv-52))
(s3-2 (vector-flatten! (new-stack-vector0) sv-56 s3-1))
(f0-15 (vector-x-angle s3-2))
(f0-21
(fmax
(fmin
(* (* (- (deg-diff f30-2 f0-15)) (-> gp-0 blend)) (-> gp-0 flex-blend))
(-> gp-0 twist-max x)
)
(- (-> gp-0 twist-max x))
)
)
)
(let* ((v1-22 sv-52))
(set! f1-12 (vector-dot s3-2 v1-22))
)
(if (< f1-12 0.1)
(set! f0-21 0.0)
)
(set!
(-> gp-0 twist x)
(deg-seek
(-> gp-0 twist x)
f0-21
(* 0.1 (fabs (deg-diff f0-21 (-> gp-0 twist x))))
)
)
)
(let ((v1-27 (-> gp-0 ear)))
(cond
((zero? v1-27)
(quaternion-rotate-x! (-> xform quat) (-> xform quat) (-> gp-0 twist x))
)
((= v1-27 1)
(quaternion-rotate-local-y!
(-> xform quat)
(-> xform quat)
(-> gp-0 twist x)
f0-21
(* 0.1 (fabs (deg-diff f0-21 (-> gp-0 twist x))))
)
)
)
(let ((v1-27 (-> gp-0 ear)))
(cond
((zero? v1-27)
(quaternion-rotate-x!
(the-as quaternion (-> xform rot))
(the-as quaternion (-> xform rot))
(-> gp-0 twist x)
)
)
((= v1-27 1)
(quaternion-rotate-local-y!
(the-as quaternion (-> xform rot))
(the-as quaternion (-> xform rot))
(-> gp-0 twist x)
)
)
(else
(quaternion-rotate-z!
(the-as quaternion (-> xform rot))
(the-as quaternion (-> xform rot))
(-> gp-0 twist x)
)
)
)
)
(cspace<-parented-transformq-joint! csp xform)
(if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0))
(add-debug-text-sphere
*display-target-marks*
(bucket-id debug-draw1)
(-> gp-0 target)
819.2
"look"
(new 'static 'rgba :r #xff :g #xff :a #x80)
(else
(quaternion-rotate-z! (-> xform quat) (-> xform quat) (-> gp-0 twist x))
)
)
)
(let ((v0-26 0))
(cspace<-parented-transformq-joint! csp xform)
(if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0))
(add-debug-text-sphere
*display-target-marks*
(bucket-id debug-draw1)
(-> gp-0 target)
819.2
"look"
(new 'static 'rgba :r #xff :g #xff :a #x80)
)
)
(none)
)
(let ((v0-26 0))
)
(none)
)
;; definition for function joint-mod-world-look-at-handler
@ -558,153 +532,138 @@
;; Used lq/sq
(defun joint-mod-world-look-at-handler ((arg0 cspace) (arg1 transformq))
(local-vars (f1-14 float) (sv-48 vector) (sv-52 vector) (sv-56 vector))
(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))))
(let ((s5-0 (-> arg0 bone transform)))
(cspace<-parented-transformq-joint! arg0 arg1)
(set!
sv-48
(vector-normalize-copy!
(let ((gp-0 (the-as joint-mod (-> arg0 param1))))
(let ((s5-0 (-> arg0 bone transform)))
(cspace<-parented-transformq-joint! arg0 arg1)
(set!
sv-48
(vector-normalize-copy!
(new 'stack-no-clear 'vector)
(-> gp-0 process node-list data 0 bone transform vector 1)
1.0
)
)
(set! sv-52 (vector-normalize! (-> s5-0 vector (-> gp-0 nose)) 1.0))
(set!
sv-56
(vector-normalize!
(vector-!
(new 'stack-no-clear 'vector)
(-> gp-0 process node-list data 0 bone transform vector 1)
1.0
(-> gp-0 target)
(-> s5-0 vector 3)
)
1.0
)
(set! sv-52 (vector-normalize! (-> s5-0 vector (-> gp-0 nose)) 1.0))
(let ((t9-3 vector-normalize!)
(a0-3 (new 'stack-no-clear 'vector))
)
(let* ((f30-0 (vector-y-angle sv-52))
(a0-6 (vector-flatten! (new-stack-vector0) sv-56 sv-48))
(f0-0 (vector-y-angle a0-6))
(f0-1 (deg-diff f30-0 f0-0))
)
(let ((v1-7 (-> gp-0 target))
(a1-3 (-> s5-0 vector 3))
)
(.lvf vf4 (&-> v1-7 quad))
(.lvf vf5 (&-> a1-3 quad))
)
(.mov.vf vf6 vf0 :mask #b1000)
(.sub.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a0-3 quad) vf6)
(set! sv-56 (t9-3 a0-3 1.0))
(if (< (-> gp-0 ignore-angle) (fabs f0-1))
(set! f0-1 0.0)
)
(let* ((f30-0 (vector-y-angle sv-52))
(a0-6 (vector-flatten! (new-stack-vector0) sv-56 sv-48))
(f0-0 (vector-y-angle a0-6))
(f0-1 (deg-diff f30-0 f0-0))
)
(if (< (-> gp-0 ignore-angle) (fabs f0-1))
(set! f0-1 0.0)
)
(let
((f0-5
(fmax
(fmin
(* (* f0-1 (-> gp-0 blend)) (-> gp-0 flex-blend))
(-> gp-0 twist-max y)
)
(- (-> gp-0 twist-max y))
)
)
)
(set!
(-> gp-0 twist y)
(deg-seek
(-> gp-0 twist y)
f0-5
(fmax 1.0 (* 0.1 (fabs (deg-diff f0-5 (-> gp-0 twist y)))))
)
)
)
)
(when (!= (-> gp-0 twist y) 0.0)
(let
((a2-3
(matrix-rotate-y! (new 'stack-no-clear 'matrix) (-> gp-0 twist y))
)
(s4-2 (-> s5-0 vector 3 quad))
)
(matrix*! s5-0 s5-0 a2-3)
(set! (-> s5-0 vector 3 quad) s4-2)
)
)
(let*
((s4-3
(vector-normalize-copy!
(new 'stack-no-clear 'vector)
(the-as vector (-> gp-0 process node-list data 0 bone transform))
1.0
)
)
(f30-2 (vector-x-angle sv-52))
(s4-4 (vector-flatten! (new-stack-vector0) sv-56 s4-3))
(f0-14 (vector-x-angle s4-4))
(f0-20
(let
((f0-5
(fmax
(fmin
(*
(* (- (deg-diff f30-2 f0-14)) (-> gp-0 blend))
(-> gp-0 flex-blend)
)
(-> gp-0 twist-max x)
(* (* f0-1 (-> gp-0 blend)) (-> gp-0 flex-blend))
(-> gp-0 twist-max y)
)
(- (-> gp-0 twist-max x))
(- (-> gp-0 twist-max y))
)
)
)
(let* ((v1-14 sv-52))
(set! f1-14 (vector-dot s4-4 v1-14))
)
(if (< f1-14 0.1)
(set! f0-20 0.0)
)
(set!
(-> gp-0 twist x)
(-> gp-0 twist y)
(deg-seek
(-> gp-0 twist x)
f0-20
(fmax 1.0 (* 0.1 (fabs (deg-diff f0-20 (-> gp-0 twist x)))))
(-> gp-0 twist y)
f0-5
(fmax 1.0 (* 0.1 (fabs (deg-diff f0-5 (-> gp-0 twist y)))))
)
)
)
(when (!= (-> gp-0 twist x) 0.0)
(let* ((v1-20 (-> gp-0 ear))
(a1-17 ((cond
((zero? v1-20)
matrix-rotate-x!
)
((= v1-20 1)
matrix-rotate-y!
)
(else
matrix-rotate-z!
)
)
(new 'stack-no-clear 'matrix) (-> gp-0 twist x)
)
)
)
(matrix*! s5-0 a1-17 s5-0)
)
(when (!= (-> gp-0 twist y) 0.0)
(let
((a2-3 (matrix-rotate-y! (new 'stack-no-clear 'matrix) (-> gp-0 twist y)))
(s4-2 (-> s5-0 vector 3 quad))
)
(matrix*! s5-0 s5-0 a2-3)
(set! (-> s5-0 vector 3 quad) s4-2)
)
)
(let*
((s4-3
(vector-normalize-copy!
(new 'stack-no-clear 'vector)
(the-as vector (-> gp-0 process node-list data 0 bone transform))
1.0
)
)
(f30-2 (vector-x-angle sv-52))
(s4-4 (vector-flatten! (new-stack-vector0) sv-56 s4-3))
(f0-14 (vector-x-angle s4-4))
(f0-20
(fmax
(fmin
(* (* (- (deg-diff f30-2 f0-14)) (-> gp-0 blend)) (-> gp-0 flex-blend))
(-> gp-0 twist-max x)
)
(- (-> gp-0 twist-max x))
)
)
)
(let* ((v1-14 sv-52))
(set! f1-14 (vector-dot s4-4 v1-14))
)
(if (< f1-14 0.1)
(set! f0-20 0.0)
)
(set!
(-> gp-0 twist x)
(deg-seek
(-> gp-0 twist x)
f0-20
(fmax 1.0 (* 0.1 (fabs (deg-diff f0-20 (-> gp-0 twist x)))))
)
)
)
(if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0))
(add-debug-text-sphere
*display-target-marks*
(bucket-id debug-draw1)
(-> gp-0 target)
819.2
"look"
(new 'static 'rgba :r #xff :g #xff :a #x80)
(when (!= (-> gp-0 twist x) 0.0)
(let* ((v1-20 (-> gp-0 ear))
(a1-17 ((cond
((zero? v1-20)
matrix-rotate-x!
)
((= v1-20 1)
matrix-rotate-y!
)
(else
matrix-rotate-z!
)
)
(new 'stack-no-clear 'matrix) (-> gp-0 twist x)
)
)
)
(matrix*! s5-0 a1-17 s5-0)
)
)
)
(let ((v0-22 0))
(if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0))
(add-debug-text-sphere
*display-target-marks*
(bucket-id debug-draw1)
(-> gp-0 target)
819.2
"look"
(new 'static 'rgba :r #xff :g #xff :a #x80)
)
)
(none)
)
(let ((v0-22 0))
)
(none)
)
;; definition for function joint-mod-rotate-handler
@ -730,13 +689,7 @@
)
)
)
(quaternion-normalize!
(quaternion*!
(the-as quaternion (-> arg1 rot))
a1-2
(the-as quaternion (-> arg1 rot))
)
)
(quaternion-normalize! (quaternion*! (-> arg1 quat) a1-2 (-> arg1 quat)))
)
(let* ((v1-6 (-> s3-0 (-> s4-0 up)))
(a1-4
@ -749,13 +702,7 @@
)
)
)
(quaternion-normalize!
(quaternion*!
(the-as quaternion (-> arg1 rot))
a1-4
(the-as quaternion (-> arg1 rot))
)
)
(quaternion-normalize! (quaternion*! (-> arg1 quat) a1-4 (-> arg1 quat)))
)
(let* ((v1-10 (-> s3-0 (-> s4-0 nose)))
(a1-6
@ -768,13 +715,7 @@
)
)
)
(quaternion-normalize!
(quaternion*!
(the-as quaternion (-> arg1 rot))
a1-6
(the-as quaternion (-> arg1 rot))
)
)
(quaternion-normalize! (quaternion*! (-> arg1 quat) a1-6 (-> arg1 quat)))
)
)
(cspace<-parented-transformq-joint! arg0 arg1)
@ -789,7 +730,7 @@
(defun joint-mod-joint-set-handler ((arg0 cspace) (arg1 transformq))
(let ((s4-0 (the-as joint-mod (-> arg0 param1))))
(set! (-> arg1 trans quad) (-> s4-0 trans quad))
(quaternion-copy! (the-as quaternion (-> arg1 rot)) (-> s4-0 quat))
(quaternion-copy! (-> arg1 quat) (-> s4-0 quat))
(set! (-> arg1 scale quad) (-> s4-0 scale quad))
)
(cspace<-parented-transformq-joint! arg0 arg1)
@ -820,11 +761,7 @@
(.svf (&-> a1-1 quad) vf6)
)
(quaternion-normalize!
(quaternion*!
(the-as quaternion (-> arg1 rot))
(the-as quaternion (-> arg1 rot))
(-> s5-0 quat)
)
(quaternion*! (-> arg1 quat) (-> arg1 quat) (-> s5-0 quat))
)
(vector*! (-> arg1 scale) (-> arg1 scale) (-> s5-0 scale))
(cspace<-parented-transformq-joint! arg0 arg1)
@ -890,54 +827,37 @@
;; Used lq/sq
(defun joint-mod-wheel-callback ((arg0 cspace) (arg1 transformq))
(local-vars (f0-3 float))
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
(let ((s4-0 (the-as joint-mod-wheel (-> arg0 param1))))
(let ((v1-1 (-> s4-0 process root))
(s1-0 (new-stack-vector0))
(s3-0 (new-stack-vector0))
(s2-0 (new-stack-vector0))
)
(init-vf0-vector)
(let ((s4-0 (the-as joint-mod-wheel (-> arg0 param1))))
(let ((v1-1 (-> s4-0 process root))
(s1-0 (new-stack-vector0))
(s3-0 (new-stack-vector0))
(s2-0 (new-stack-vector0))
)
(let ((f0-0 0.0))
)
(let ((f0-1 0.0))
)
(vector-z-quaternion! s2-0 (the-as quaternion (-> v1-1 rot)))
(vector<-cspace! s1-0 arg0)
(let ((a1-3 s3-0))
(let ((v1-2 s1-0)
(a0-3 (-> s4-0 last-position))
)
(.lvf vf4 (&-> v1-2 quad))
(.lvf vf5 (&-> a0-3 quad))
)
(.mov.vf vf6 vf0 :mask #b1000)
(.sub.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a1-3 quad) vf6)
)
(set! (-> s4-0 last-position quad) (-> s1-0 quad))
(set! f0-3 (vector-dot s2-0 s3-0))
(let ((f0-0 0.0))
)
(let* ((f0-4 f0-3)
(f1-1 65536.0)
(f2-2 (* 6.28318 (-> s4-0 wheel-radius)))
(f0-5 (* (* f1-1 (/ 1.0 f2-2)) f0-4))
)
(set! (-> s4-0 angle) (+ (-> s4-0 angle) f0-5))
)
(quaternion-vector-angle!
(the-as quaternion (-> arg1 rot))
(-> *joint-axis-vectors* (-> s4-0 wheel-axis))
(-> s4-0 angle)
(let ((f0-1 0.0))
)
(vector-z-quaternion! s2-0 (-> v1-1 quat))
(vector<-cspace! s1-0 arg0)
(vector-! s3-0 s1-0 (-> s4-0 last-position))
(set! (-> s4-0 last-position quad) (-> s1-0 quad))
(set! f0-3 (vector-dot s2-0 s3-0))
)
(let* ((f0-4 f0-3)
(f1-1 65536.0)
(f2-2 (* 6.28318 (-> s4-0 wheel-radius)))
(f0-5 (* (* f1-1 (/ 1.0 f2-2)) f0-4))
)
(set! (-> s4-0 angle) (+ (-> s4-0 angle) f0-5))
)
(quaternion-vector-angle!
(-> arg1 quat)
(-> *joint-axis-vectors* (-> s4-0 wheel-axis))
(-> s4-0 angle)
)
(cspace<-parented-transformq-joint! arg0 arg1)
(none)
)
(cspace<-parented-transformq-joint! arg0 arg1)
(none)
)
;; definition for method 0 of type joint-mod-wheel
@ -1011,7 +931,7 @@
(set! (-> v1-0 transform trans quad) (-> arg1 trans quad))
)
(if (not (-> v1-0 set-rotation))
(set! (-> v1-0 transform rot quad) (-> arg1 rot quad))
(set! (-> v1-0 transform quat vec quad) (-> arg1 quat vec quad))
)
(if (not (-> v1-0 set-scale))
(set! (-> v1-0 transform scale quad) (-> arg1 scale quad))
@ -1049,7 +969,7 @@
(set! (-> v0-0 set-scale) arg4)
(set! (-> v0-0 enable) #t)
(set! (-> v0-0 transform trans quad) (-> *null-vector* quad))
(set! (-> v0-0 transform rot quad) (-> *null-vector* quad))
(set! (-> v0-0 transform quat vec quad) (-> *null-vector* quad))
(set! (-> v0-0 transform scale quad) (-> *identity-vector* quad))
(let ((v1-8 (-> arg0 node-list data arg1)))
(set! (-> v1-8 param0) joint-mod-set-local-callback)
@ -1112,7 +1032,7 @@
(set! (-> v0-0 node-index) arg1)
(set! (-> v0-0 enable) arg2)
(set! (-> v0-0 transform trans quad) (-> *null-vector* quad))
(set! (-> v0-0 transform rot quad) (-> *null-vector* quad))
(set! (-> v0-0 transform quat vec quad) (-> *null-vector* quad))
(set! (-> v0-0 transform scale quad) (-> *identity-vector* quad))
(let ((v1-7 (-> arg0 node-list data arg1)))
(set! (-> v1-7 param0) joint-mod-set-world-callback)
@ -1171,9 +1091,9 @@
(-> gp-0 blend)
)
(quaternion-slerp!
(the-as quaternion (-> gp-0 blend-transform rot))
(the-as quaternion (-> arg1 rot))
(the-as quaternion (-> gp-0 transform rot))
(-> gp-0 blend-transform quat)
(-> arg1 quat)
(-> gp-0 transform quat)
(-> gp-0 blend)
)
(cspace<-parented-transformq-joint! arg0 (-> gp-0 blend-transform))
@ -1206,7 +1126,7 @@
(set! (-> v0-0 enable) arg2)
(set! (-> v0-0 blend) 0.0)
(set! (-> v0-0 transform trans quad) (-> *null-vector* quad))
(set! (-> v0-0 transform rot quad) (-> *null-vector* quad))
(set! (-> v0-0 transform quat vec quad) (-> *null-vector* quad))
(set! (-> v0-0 transform scale quad) (-> *identity-vector* quad))
(let ((v1-7 (-> arg0 node-list data arg1)))
(set! (-> v1-7 param0) joint-mod-blend-local-callback)
@ -1259,11 +1179,7 @@
(if (< f30-0 -32768.0)
(set! f30-0 (+ 65536.0 f30-0))
)
(quaternion-vector-angle!
(the-as quaternion (-> arg1 rot))
(-> gp-0 spin-axis)
f30-0
)
(quaternion-vector-angle! (-> arg1 quat) (-> gp-0 spin-axis) f30-0)
(set! (-> gp-0 angle) f30-0)
)
)

View file

@ -584,30 +584,10 @@
(.add.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a0-1 quad) vf6)
)
(let ((a1-1 s5-0))
(let ((v1-1 s5-0)
(a0-2 (-> obj value))
)
(.lvf vf4 (&-> v1-1 quad))
(.lvf vf5 (&-> a0-2 quad))
)
(.mov.vf vf6 vf0 :mask #b1000)
(.sub.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a1-1 quad) vf6)
)
(vector-! s5-0 s5-0 (-> obj value))
)
(else
(let ((a1-2 s5-0))
(let ((v1-2 (-> obj target))
(a0-3 (-> obj value))
)
(.lvf vf4 (&-> v1-2 quad))
(.lvf vf5 (&-> a0-3 quad))
)
(.mov.vf vf6 vf0 :mask #b1000)
(.sub.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a1-2 quad) vf6)
)
(vector-! s5-0 (-> obj target) (-> obj value))
)
)
(let ((v1-3 s5-0))

View file

@ -1502,4 +1502,30 @@ TEST_F(FormRegressionTest, VectorNewInlineProp) {
" arg0\n"
" )";
test_with_stack_structures(func, type, expected, R"([[16, "vector"]])");
}
TEST_F(FormRegressionTest, Method23Trsqv) {
std::string func =
"sll r0, r0, 0\n"
" daddiu sp, sp, -32\n"
" sd ra, 0(sp)\n"
" lw t9, vector-y-angle(s7)\n"
" daddiu v1, sp, 16\n"
" daddiu a0, a0, 12\n"
" lqc2 vf4, 0(a1)\n"
" lqc2 vf5, 0(a0)\n"
" vmove.w vf6, vf0\n"
" vsub.xyz vf6, vf4, vf5\n"
" sqc2 vf6, 0(v1)\n"
" or a0, v1, r0\n"
" jalr ra, t9\n"
" sll v0, ra, 0\n"
" ld ra, 0(sp)\n"
" jr ra\n"
" daddiu sp, sp, 32\n";
std::string type = "(function trsqv vector float)";
std::string expected =
"(vector-y-angle (vector-! (new 'stack-no-clear 'vector) arg1 (-> arg0 trans)))";
test_with_stack_structures(func, type, expected, R"([[16, "vector"]])");
}