mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 11:26:18 -04:00
[decomp] detect vector-! inlined. (#633)
* fix flipped order * format * parser hack * actually flip * detect
This commit is contained in:
parent
10b00e57ae
commit
b19a2c82f0
|
@ -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");
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
)
|
||||
)
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
|
|
@ -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)))
|
||||
)
|
||||
)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
)
|
||||
)
|
||||
|
|
|
@ -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)
|
||||
)
|
||||
)
|
||||
|
|
|
@ -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)
|
||||
|
||||
)
|
||||
)
|
|
@ -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))))
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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)))
|
||||
|
|
|
@ -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)))
|
||||
)
|
||||
)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
)
|
||||
)
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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"]])");
|
||||
}
|
Loading…
Reference in a new issue