diff --git a/decompiler/IR2/FormExpressionAnalysis.cpp b/decompiler/IR2/FormExpressionAnalysis.cpp index 0a98b07948..d65f80958d 100644 --- a/decompiler/IR2/FormExpressionAnalysis.cpp +++ b/decompiler/IR2/FormExpressionAnalysis.cpp @@ -2028,6 +2028,26 @@ void SetFormFormElement::push_to_stack(const Env& env, FormPool& pool, FormStack fmt::print("invalid bf set: {}\n", src_as_bf_set->to_string(env)); } + const std::pair in_place_ops[] = { + {FixedOperatorKind::ADDITION, FixedOperatorKind::ADDITION_IN_PLACE}, + {FixedOperatorKind::ADDITION_PTR, FixedOperatorKind::ADDITION_PTR_IN_PLACE}}; + + auto src_as_generic = m_src->try_as_element(); + if (src_as_generic) { + for (auto& op_pair : in_place_ops) { + if (src_as_generic->op().is_fixed(op_pair.first)) { + auto dst_form = m_dst->to_form(env); + auto add_form_0 = src_as_generic->elts().at(0)->to_form(env); + + if (dst_form == add_form_0) { + src_as_generic->op() = GenericOperator::make_fixed(op_pair.second); + stack.push_form_element(src_as_generic, true); + return; + } + } + } + } + stack.push_form_element(this, true); } diff --git a/decompiler/analysis/insert_lets.cpp b/decompiler/analysis/insert_lets.cpp index 7ab2b4d838..0b72781275 100644 --- a/decompiler/analysis/insert_lets.cpp +++ b/decompiler/analysis/insert_lets.cpp @@ -368,6 +368,97 @@ Form* strip_truthy(Form* in) { return in; } +FormElement* rewrite_set_vector(LetElement* in, const Env& env, FormPool& pool) { + if (in->entries().size() != 1) { + return nullptr; + } + + auto in_vec = env.get_variable_name(in->entries().at(0).dest); + + auto& body_elts = in->body()->elts(); + if (body_elts.size() != 4) { + return nullptr; + } + + std::vector sources; + for (int i = 0; i < 4; i++) { + auto elt_as_form_form = dynamic_cast(body_elts.at(i)); + if (!elt_as_form_form) { + return nullptr; + } + auto dst = elt_as_form_form->dst(); + sources.push_back(elt_as_form_form->src()); + Matcher dst_matcher = Matcher::deref(Matcher::any_reg(0), false, + {DerefTokenMatcher::string(std::string(1, "xyzw"[i]))}); + auto mr = match(dst_matcher, dst); + if (!mr.matched) { + return nullptr; + } + if (in_vec != env.get_variable_name(*mr.maps.regs.at(0))) { + return nullptr; + } + } + + std::vector args; + args.push_back(in->entries().at(0).src); + for (auto& src : sources) { + args.push_back(src); + } + + auto op = GenericOperator::make_function( + pool.alloc_single_element_form(nullptr, "set-vector!")); + return pool.alloc_element(op, args); +} + +FormElement* rewrite_set_vector_2(LetElement* in, const Env& env, FormPool& pool) { + if (in->entries().size() != 1) { + return nullptr; + } + + auto in_vec = env.get_variable_name(in->entries().at(0).dest); + auto src_as_deref = in->entries().at(0).src->try_as_element(); + if (!src_as_deref) { + return nullptr; + } + + auto& body_elts = in->body()->elts(); + if (body_elts.size() != 4) { + return nullptr; + } + + std::vector sources; + for (int i = 0; i < 4; i++) { + auto elt_as_form_form = dynamic_cast(body_elts.at(i)); + if (!elt_as_form_form) { + return nullptr; + } + auto dst = elt_as_form_form->dst(); + sources.push_back(elt_as_form_form->src()); + Matcher dst_matcher = Matcher::deref( + Matcher::any_reg(0), false, + {DerefTokenMatcher::integer(0), DerefTokenMatcher::string(std::string(1, "xyzw"[i]))}); + auto mr = match(dst_matcher, dst); + if (!mr.matched) { + return nullptr; + } + if (in_vec != env.get_variable_name(*mr.maps.regs.at(0))) { + return nullptr; + } + } + + src_as_deref->tokens().push_back(DerefToken::make_int_constant(0)); + + std::vector args; + args.push_back(in->entries().at(0).src); + for (auto& src : sources) { + args.push_back(src); + } + + auto op = GenericOperator::make_function( + pool.alloc_single_element_form(nullptr, "set-vector!")); + return pool.alloc_element(op, args); +} + ShortCircuitElement* get_or(Form* in) { // strip off truthy in = strip_truthy(in); @@ -564,6 +655,16 @@ FormElement* rewrite_let(LetElement* in, const Env& env, FormPool& pool) { return as_case_with_else; } + auto as_set_vector = rewrite_set_vector(in, env, pool); + if (as_set_vector) { + return as_set_vector; + } + + auto as_set_vector2 = rewrite_set_vector_2(in, env, pool); + if (as_set_vector2) { + return as_set_vector2; + } + // nothing matched. return nullptr; } diff --git a/goal_src/engine/ambient/mood-tables.gc b/goal_src/engine/ambient/mood-tables.gc index 04be588f1e..d7dc822e07 100644 --- a/goal_src/engine/ambient/mood-tables.gc +++ b/goal_src/engine/ambient/mood-tables.gc @@ -15,12 +15,7 @@ (set! (-> v1-0 direction z) 0.612) (set! (-> v1-0 direction w) 0.0) ) - (let ((v1-1 (-> arg0 dir0 color))) - (set! (-> v1-1 x) 0.8) - (set! (-> v1-1 y) 0.775) - (set! (-> v1-1 z) 0.7) - (set! (-> v1-1 w) 1.0) - ) + (set-vector! (-> arg0 dir0 color) 0.8 0.775 0.7 1.0) (set! (-> arg0 dir0 levels x) arg2) (let ((v1-2 (-> arg0 dir1))) (set! (-> v1-2 direction x) 0.612) @@ -28,12 +23,7 @@ (set! (-> v1-2 direction z) -0.612) (set! (-> v1-2 direction w) 0.0) ) - (let ((v1-3 (-> arg0 dir1 color))) - (set! (-> v1-3 x) 0.8) - (set! (-> v1-3 y) 0.775) - (set! (-> v1-3 z) 0.7) - (set! (-> v1-3 w) 1.0) - ) + (set-vector! (-> arg0 dir1 color) 0.8 0.775 0.7 1.0) (set! (-> arg0 dir1 levels x) arg3) (vector-matrix*! (the-as vector (-> arg0 dir0)) @@ -52,12 +42,7 @@ (set! (-> v1-4 direction z) 0.0) (set! (-> v1-4 direction w) 0.0) ) - (let ((v1-5 (-> arg0 dir2 color))) - (set! (-> v1-5 x) 0.8) - (set! (-> v1-5 y) 0.775) - (set! (-> v1-5 z) 0.7) - (set! (-> v1-5 w) 1.0) - ) + (set-vector! (-> arg0 dir2 color) 0.8 0.775 0.7 1.0) (let ((f0-26 arg4)) (set! (-> arg0 dir2 levels x) f0-26) f0-26 @@ -76,12 +61,7 @@ (set! (-> v1-0 direction z) 0.0) (set! (-> v1-0 direction w) 0.0) ) - (let ((v1-1 (-> s5-0 dir2 color))) - (set! (-> v1-1 x) 0.75) - (set! (-> v1-1 y) 0.375) - (set! (-> v1-1 z) 0.0) - (set! (-> v1-1 w) 1.0) - ) + (set-vector! (-> s5-0 dir2 color) 0.75 0.375 0.0 1.0) ) (make-light-kit (-> arg0 light-group 3) 53703.11 0.9 0.9 0.5) (make-light-kit (-> arg0 light-group 4) 54613.332 0.9 0.9 0.4) @@ -96,18 +76,8 @@ (defun make-misty-light-kit ((arg0 mood-context)) (let ((gp-0 (-> arg0 light-group 1))) (make-light-kit gp-0 24576.0 1.0 0.4 1.0) - (let ((v1-0 (-> gp-0 dir0 color))) - (set! (-> v1-0 x) 0.75) - (set! (-> v1-0 y) 0.3) - (set! (-> v1-0 z) 0.0) - (set! (-> v1-0 w) 1.0) - ) - (let ((v0-1 (-> gp-0 dir2 color))) - (set! (-> v0-1 x) 0.75) - (set! (-> v0-1 y) 0.3) - (set! (-> v0-1 z) 0.0) - (set! (-> v0-1 w) 1.0) - ) + (set-vector! (-> gp-0 dir0 color) 0.75 0.3 0.0 1.0) + (set-vector! (-> gp-0 dir2 color) 0.75 0.3 0.0 1.0) ) (none) ) @@ -122,12 +92,7 @@ (set! (-> a0-1 direction z) 0.0) (set! (-> a0-1 direction w) 1.0) ) - (let ((a0-2 (-> v1-0 dir0 color))) - (set! (-> a0-2 x) 0.375) - (set! (-> a0-2 y) 0.25) - (set! (-> a0-2 z) 0.25) - (set! (-> a0-2 w) 1.0) - ) + (set-vector! (-> v1-0 dir0 color) 0.375 0.25 0.25 1.0) (set! (-> v1-0 dir0 levels x) 1.0) (let ((a0-3 (-> v1-0 dir1))) (set! (-> a0-3 direction x) -0.6119) @@ -135,12 +100,7 @@ (set! (-> a0-3 direction z) -0.6119) (set! (-> a0-3 direction w) 1.0) ) - (let ((a0-4 (-> v1-0 dir1 color))) - (set! (-> a0-4 x) 0.25) - (set! (-> a0-4 y) 0.75) - (set! (-> a0-4 z) 1.0) - (set! (-> a0-4 w) 1.0) - ) + (set-vector! (-> v1-0 dir1 color) 0.25 0.75 1.0 1.0) (set! (-> v1-0 dir1 levels x) 0.666) (let ((a0-5 (-> v1-0 dir2))) (set! (-> a0-5 direction x) 0.9961) @@ -148,12 +108,7 @@ (set! (-> a0-5 direction z) -0.0871) (set! (-> a0-5 direction w) 1.0) ) - (let ((a0-6 (-> v1-0 dir2 color))) - (set! (-> a0-6 x) 0.0) - (set! (-> a0-6 y) 0.25) - (set! (-> a0-6 z) 1.0) - (set! (-> a0-6 w) 1.0) - ) + (set-vector! (-> v1-0 dir2 color) 0.0 0.25 1.0 1.0) (set! (-> v1-0 dir2 levels x) 1.0) ) (let ((v1-2 (-> arg0 light-group 2))) @@ -163,12 +118,7 @@ (set! (-> a0-7 direction z) 0.836) (set! (-> a0-7 direction w) 1.0) ) - (let ((a0-8 (-> v1-2 dir0 color))) - (set! (-> a0-8 x) 0.8) - (set! (-> a0-8 y) 0.8) - (set! (-> a0-8 z) 0.8) - (set! (-> a0-8 w) 1.0) - ) + (set-vector! (-> v1-2 dir0 color) 0.8 0.8 0.8 1.0) (set! (-> v1-2 dir0 levels x) 0.7) (let ((a0-9 (-> v1-2 dir1))) (set! (-> a0-9 direction x) -0.2959) @@ -176,31 +126,16 @@ (set! (-> a0-9 direction z) -0.8133) (set! (-> a0-9 direction w) 1.0) ) - (let ((a0-10 (-> v1-2 dir1 color))) - (set! (-> a0-10 x) 0.8) - (set! (-> a0-10 y) 0.8) - (set! (-> a0-10 z) 0.8) - (set! (-> a0-10 w) 1.0) - ) + (set-vector! (-> v1-2 dir1 color) 0.8 0.8 0.8 1.0) (set! (-> v1-2 dir1 levels x) 0.7) ) (let ((s5-0 (-> arg0 light-group 3))) (make-light-kit s5-0 5461.3335 1.0 0.8 0.2) - (let ((v1-4 (-> s5-0 dir0 color))) - (set! (-> v1-4 x) 0.675) - (set! (-> v1-4 y) 0.45) - (set! (-> v1-4 z) 0.15) - (set! (-> v1-4 w) 1.0) - ) + (set-vector! (-> s5-0 dir0 color) 0.675 0.45 0.15 1.0) ) (let ((s5-1 (-> arg0 light-group 4))) (make-light-kit s5-1 57344.0 1.0 0.8 0.2) - (let ((v1-5 (-> s5-1 dir0 color))) - (set! (-> v1-5 x) 0.675) - (set! (-> v1-5 y) 0.45) - (set! (-> v1-5 z) 0.15) - (set! (-> v1-5 w) 1.0) - ) + (set-vector! (-> s5-1 dir0 color) 0.675 0.45 0.15 1.0) ) (let ((v1-6 (-> arg0 light-group 5))) (let ((a0-13 (-> v1-6 dir0))) @@ -209,28 +144,13 @@ (set! (-> a0-13 direction z) 0.0) (set! (-> a0-13 direction w) 0.0) ) - (let ((a0-14 (-> v1-6 dir0 color))) - (set! (-> a0-14 x) 2.0) - (set! (-> a0-14 y) 1.0) - (set! (-> a0-14 z) 0.0) - (set! (-> a0-14 w) 1.0) - ) + (set-vector! (-> v1-6 dir0 color) 2.0 1.0 0.0 1.0) (set! (-> v1-6 dir1 levels x) 0.0) (set! (-> v1-6 dir2 levels x) 0.0) ) (let ((v1-8 (-> arg0 light-group 6))) - (let ((a0-15 (-> v1-8 dir0 color))) - (set! (-> a0-15 x) 1.0) - (set! (-> a0-15 y) 0.5) - (set! (-> a0-15 z) 0.0) - (set! (-> a0-15 w) 1.0) - ) - (let ((a0-16 (-> v1-8 dir1 color))) - (set! (-> a0-16 x) 0.6) - (set! (-> a0-16 y) 0.58125) - (set! (-> a0-16 z) 0.525) - (set! (-> a0-16 w) 1.0) - ) + (set-vector! (-> v1-8 dir0 color) 1.0 0.5 0.0 1.0) + (set-vector! (-> v1-8 dir1 color) 0.6 0.58125 0.525 1.0) (set! (-> v1-8 dir1 levels x) 0.0) (set! (-> v1-8 dir2 levels x) 0.0) ) @@ -248,12 +168,7 @@ (set! (-> v1-0 direction z) 0.0) (set! (-> v1-0 direction w) 1.0) ) - (let ((v1-1 (-> s5-0 dir0 color))) - (set! (-> v1-1 x) 1.0) - (set! (-> v1-1 y) 0.9) - (set! (-> v1-1 z) 0.0) - (set! (-> v1-1 w) 1.0) - ) + (set-vector! (-> s5-0 dir0 color) 1.0 0.9 0.0 1.0) ) (let ((s5-1 (-> arg0 light-group 2))) (make-light-kit s5-1 0.0 1.0 0.0 0.0) @@ -263,12 +178,7 @@ (set! (-> v1-2 direction z) 0.0) (set! (-> v1-2 direction w) 1.0) ) - (let ((v1-3 (-> s5-1 dir0 color))) - (set! (-> v1-3 x) 1.0) - (set! (-> v1-3 y) 0.9) - (set! (-> v1-3 z) 0.0) - (set! (-> v1-3 w) 1.0) - ) + (set-vector! (-> s5-1 dir0 color) 1.0 0.9 0.0 1.0) ) (let ((s5-2 (-> arg0 light-group 3))) (make-light-kit s5-2 0.0 1.0 0.0 0.0) @@ -278,12 +188,7 @@ (set! (-> v1-4 direction z) 0.0) (set! (-> v1-4 direction w) 1.0) ) - (let ((v1-5 (-> s5-2 dir0 color))) - (set! (-> v1-5 x) 1.0) - (set! (-> v1-5 y) 0.9) - (set! (-> v1-5 z) 0.0) - (set! (-> v1-5 w) 1.0) - ) + (set-vector! (-> s5-2 dir0 color) 1.0 0.9 0.0 1.0) ) (let ((s5-3 (-> arg0 light-group 4))) (make-light-kit s5-3 0.0 1.0 0.0 0.0) @@ -293,12 +198,7 @@ (set! (-> v1-6 direction z) 0.0) (set! (-> v1-6 direction w) 1.0) ) - (let ((v1-7 (-> s5-3 dir0 color))) - (set! (-> v1-7 x) 1.0) - (set! (-> v1-7 y) 0.9) - (set! (-> v1-7 z) 0.0) - (set! (-> v1-7 w) 1.0) - ) + (set-vector! (-> s5-3 dir0 color) 1.0 0.9 0.0 1.0) ) (let ((s5-4 (-> arg0 light-group 5))) (make-light-kit s5-4 0.0 1.0 0.0 0.0) @@ -308,12 +208,7 @@ (set! (-> v1-8 direction z) 0.0) (set! (-> v1-8 direction w) 1.0) ) - (let ((v1-9 (-> s5-4 dir0 color))) - (set! (-> v1-9 x) 1.0) - (set! (-> v1-9 y) 0.9) - (set! (-> v1-9 z) 0.0) - (set! (-> v1-9 w) 1.0) - ) + (set-vector! (-> s5-4 dir0 color) 1.0 0.9 0.0 1.0) ) (let ((gp-1 (-> arg0 light-group 6))) (make-light-kit gp-1 0.0 1.0 0.0 0.0) @@ -323,12 +218,7 @@ (set! (-> v1-10 direction z) 0.0) (set! (-> v1-10 direction w) 1.0) ) - (let ((v0-6 (-> gp-1 dir0 color))) - (set! (-> v0-6 x) 1.0) - (set! (-> v0-6 y) 0.9) - (set! (-> v0-6 z) 0.0) - (set! (-> v0-6 w) 1.0) - ) + (set-vector! (-> gp-1 dir0 color) 1.0 0.9 0.0 1.0) ) (none) ) @@ -343,12 +233,7 @@ (set! (-> a1-0 direction z) 0.2929) (set! (-> a1-0 direction w) 1.0) ) - (let ((a1-1 (-> v1-0 dir0 color))) - (set! (-> a1-1 x) 0.5) - (set! (-> a1-1 y) 1.0) - (set! (-> a1-1 z) 1.0) - (set! (-> a1-1 w) 1.0) - ) + (set-vector! (-> v1-0 dir0 color) 0.5 1.0 1.0 1.0) (set! (-> v1-0 dir0 levels x) 1.0) (let ((a1-2 (-> v1-0 dir2))) (set! (-> a1-2 direction x) 0.0) @@ -356,12 +241,7 @@ (set! (-> a1-2 direction z) 0.0) (set! (-> a1-2 direction w) 1.0) ) - (let ((v1-1 (-> v1-0 dir2 color))) - (set! (-> v1-1 x) 0.625) - (set! (-> v1-1 y) 0.375) - (set! (-> v1-1 z) 0.1) - (set! (-> v1-1 w) 1.0) - ) + (set-vector! (-> v1-0 dir2 color) 0.625 0.375 0.1 1.0) ) (let ((v1-2 (-> arg0 light-group 2))) (let ((a0-1 (-> v1-2 dir0))) @@ -370,12 +250,7 @@ (set! (-> a0-1 direction z) 0.2929) (set! (-> a0-1 direction w) 1.0) ) - (let ((a0-2 (-> v1-2 dir0 color))) - (set! (-> a0-2 x) 0.25) - (set! (-> a0-2 y) 0.5) - (set! (-> a0-2 z) 0.5) - (set! (-> a0-2 w) 1.0) - ) + (set-vector! (-> v1-2 dir0 color) 0.25 0.5 0.5 1.0) (set! (-> v1-2 dir0 levels x) 1.0) (let ((a0-3 (-> v1-2 dir2))) (set! (-> a0-3 direction x) 0.0) @@ -383,12 +258,7 @@ (set! (-> a0-3 direction z) 0.0) (set! (-> a0-3 direction w) 1.0) ) - (let ((v0-0 (-> v1-2 dir2 color))) - (set! (-> v0-0 x) 0.625) - (set! (-> v0-0 y) 0.375) - (set! (-> v0-0 z) 0.1) - (set! (-> v0-0 w) 1.0) - ) + (set-vector! (-> v1-2 dir2 color) 0.625 0.375 0.1 1.0) ) (none) ) diff --git a/goal_src/engine/anim/aligner.gc b/goal_src/engine/anim/aligner.gc index acbb227088..aca99d537f 100644 --- a/goal_src/engine/anim/aligner.gc +++ b/goal_src/engine/anim/aligner.gc @@ -12,150 +12,151 @@ (defmethod TODO-RENAME-9 align-control ((obj align-control)) (local-vars (a0-9 symbol) (s7-0 none) (ra-0 int)) (with-pp - (let ((s5-0 (-> obj process skel active-channels))) - (dotimes (s4-0 s5-0) - (let* ((a0-3 (-> obj process skel channel s4-0)) - (v1-5 (-> a0-3 frame-group)) - (a0-4 (-> a0-3 command)) - (a1-0 'stack) - (a2-0 (= a0-4 a1-0)) + (let ((s5-0 (-> obj process skel active-channels))) + (dotimes (s4-0 s5-0) + (let* ((a0-3 (-> obj process skel channel s4-0)) + (v1-5 (-> a0-3 frame-group)) + (a0-4 (-> a0-3 command)) + (a1-0 'stack) + (a2-0 (= a0-4 a1-0)) + ) + (cond + ((or a2-0 (begin + (set! a1-0 'stack1) + (= a0-4 a1-0) + ) + ) + ) + (else + ; TODO - support decompiling the return-from-thread + ; TODO - properly decompile the `go`to + ; (when (!= (-> v1-5 type) art-joint-anim) + ; (let + ; ((t9-0 (the-as (function object object object object) enter-state)) + ; (a0-7 "align joint-anim") + ; ) + ; (set! (-> pp next-state) process-drawable-art-error) + ; (t9-0 a0-7 (the-as none a1-0) a2-0) + ; ) + ; (.lw ra-0 return-from-thread s7-0) + ; (.jr ra-0) + ; (nop!) + ; 0 + ; ) + 0 + ) ) + ) + ) + ) + (let* ((a0-8 (-> obj process skel root-channel 0)) + (v1-16 (-> a0-8 frame-group)) + (f0-0 (-> a0-8 frame-num)) + ) + (= (-> a0-8 num-func) num-func-loop!) (cond - ((or a2-0 (begin - (set! a1-0 'stack1) - (= a0-4 a1-0) - ) + ((or (not v1-16) (!= (-> obj frame-group) v1-16)) + (set! a0-9 #t) + ) + ((= (-> a0-8 num-func) num-func-loop!) + (set! a0-9 (< (* (-> a0-8 param 0) (- f0-0 (-> obj frame-num))) 0.0)) + ) + (else + (set! a0-9 (= f0-0 0.0)) ) ) - (else - ; TODO - support decompiling the return-from-thread - ; TODO - properly decompile the `go`to - ; (when (!= (-> v1-5 type) art-joint-anim) - ; (let - ; ((t9-0 (the-as (function object object object object) enter-state)) - ; (a0-7 "align joint-anim") - ; ) - ; (set! (-> pp next-state) process-drawable-art-error) - ; (t9-0 a0-7 (the-as none a1-0) a2-0) - ; ) - ; (.lw ra-0 return-from-thread s7-0) - ; (.jr ra-0) - ; (nop!) - ; 0 - ; ) - 0 + (if a0-9 + (set! (-> obj flags) (logior (-> obj flags) 1)) + (set! (-> obj flags) (logand -2 (the-as int (-> obj flags)))) + ) + (set! (-> obj frame-group) v1-16) + (set! (-> obj frame-num) f0-0) + ) + (mem-copy! + (the-as pointer (-> obj transform 1)) + (the-as pointer (-> obj transform)) + 48 + ) + (quaternion-copy! + (the-as quaternion (-> obj transform 1 rot)) + (-> obj align quat) + ) + (set! (-> obj transform 1 scale quad) (-> obj align scale quad)) + (let* ((a2-5 (-> obj matrix 1)) + (a3-0 (-> obj matrix)) + (v1-19 (-> a3-0 0 vector 0 quad)) + (a0-18 (-> a3-0 0 vector 1 quad)) + (a1-12 (-> a3-0 0 vector 2 quad)) + (a3-1 (-> a3-0 0 vector 3 quad)) + ) + (set! (-> a2-5 vector 0 quad) v1-19) + (set! (-> a2-5 vector 1 quad) a0-18) + (set! (-> a2-5 vector 2 quad) a1-12) + (set! (-> a2-5 vector 3 quad) a3-1) + ) + (let ((s5-1 (-> obj process node-list data 1))) + (cspace<-matrix-no-push-joint! s5-1 (the-as matrix (-> obj process skel))) + (let* ((v1-23 (-> obj matrix)) + (a3-2 (-> s5-1 bone transform)) + (a0-21 (-> a3-2 vector 0 quad)) + (a1-14 (-> a3-2 vector 1 quad)) + (a2-6 (-> a3-2 vector 2 quad)) + (a3-3 (-> a3-2 vector 3 quad)) + ) + (set! (-> v1-23 0 vector 0 quad) a0-21) + (set! (-> v1-23 0 vector 1 quad) a1-14) + (set! (-> v1-23 0 vector 2 quad) a2-6) + (set! (-> v1-23 0 vector 3 quad) a3-3) + ) + (vector*! + (the-as vector (-> obj transform)) + (-> s5-1 bone position) + (-> obj process root scale) + ) + ) + (vector-! + (the-as vector (-> obj delta)) + (the-as vector (-> obj transform)) + (the-as vector (-> obj transform 1)) + ) + (set-vector! + (-> obj align scale) + (vector-length (the-as vector (-> obj matrix))) + (vector-length (-> obj matrix 0 vector 1)) + (vector-length (-> obj matrix 0 vector 2)) + 1.0 + ) + (vector-! + (-> obj delta scale) + (-> obj align scale) + (-> obj transform 1 scale) + ) + (let + ((a2-8 + (matrix-inv-scale! (new 'stack-no-clear 'matrix) (-> obj align scale)) + ) + ) + (quaternion-normalize! + (matrix->quaternion + (-> obj align quat) + (matrix*! a2-8 (the-as matrix (-> obj matrix)) a2-8) ) ) ) - ) - ) - (let* ((a0-8 (-> obj process skel root-channel 0)) - (v1-16 (-> a0-8 frame-group)) - (f0-0 (-> a0-8 frame-num)) - ) - (= (-> a0-8 num-func) num-func-loop!) - (cond - ((or (not v1-16) (!= (-> obj frame-group) v1-16)) - (set! a0-9 #t) - ) - ((= (-> a0-8 num-func) num-func-loop!) - (set! a0-9 (< (* (-> a0-8 param 0) (- f0-0 (-> obj frame-num))) 0.0)) - ) - (else - (set! a0-9 (= f0-0 0.0)) - ) - ) - (if a0-9 - (set! (-> obj flags) (logior (-> obj flags) 1)) - (set! (-> obj flags) (logand -2 (the-as int (-> obj flags)))) - ) - (set! (-> obj frame-group) v1-16) - (set! (-> obj frame-num) f0-0) - ) - (mem-copy! - (the-as pointer (-> obj transform 1)) - (the-as pointer (-> obj transform)) - 48 - ) - (quaternion-copy! - (the-as quaternion (-> obj transform 1 rot)) - (-> obj align quat) - ) - (set! (-> obj transform 1 scale quad) (-> obj align scale quad)) - (let* ((a2-5 (-> obj matrix 1)) - (a3-0 (-> obj matrix)) - (v1-19 (-> a3-0 0 vector 0 quad)) - (a0-18 (-> a3-0 0 vector 1 quad)) - (a1-12 (-> a3-0 0 vector 2 quad)) - (a3-1 (-> a3-0 0 vector 3 quad)) - ) - (set! (-> a2-5 vector 0 quad) v1-19) - (set! (-> a2-5 vector 1 quad) a0-18) - (set! (-> a2-5 vector 2 quad) a1-12) - (set! (-> a2-5 vector 3 quad) a3-1) - ) - (let ((s5-1 (-> obj process node-list data 1))) - (cspace<-matrix-no-push-joint! s5-1 (the-as matrix (-> obj process skel))) - (let* ((v1-23 (-> obj matrix)) - (a3-2 (-> s5-1 bone transform)) - (a0-21 (-> a3-2 vector 0 quad)) - (a1-14 (-> a3-2 vector 1 quad)) - (a2-6 (-> a3-2 vector 2 quad)) - (a3-3 (-> a3-2 vector 3 quad)) + (let + ((a1-24 + (quaternion-inverse! + (new 'stack-no-clear 'quaternion) + (the-as quaternion (-> obj transform 1 rot)) ) - (set! (-> v1-23 0 vector 0 quad) a0-21) - (set! (-> v1-23 0 vector 1 quad) a1-14) - (set! (-> v1-23 0 vector 2 quad) a2-6) - (set! (-> v1-23 0 vector 3 quad) a3-3) - ) - (vector*! - (the-as vector (-> obj transform)) - (-> s5-1 bone position) - (-> obj process root scale) - ) - ) - (vector-! - (the-as vector (-> obj delta)) - (the-as vector (-> obj transform)) - (the-as vector (-> obj transform 1)) - ) - (let ((s5-2 (-> obj align scale))) - (set! (-> s5-2 x) (vector-length (the-as vector (-> obj matrix)))) - (set! (-> s5-2 y) (vector-length (-> obj matrix 0 vector 1))) - (set! (-> s5-2 z) (vector-length (-> obj matrix 0 vector 2))) - (set! (-> s5-2 w) 1.0) - ) - (vector-! - (-> obj delta scale) - (-> obj align scale) - (-> obj transform 1 scale) - ) - (let - ((a2-8 - (matrix-inv-scale! (new 'stack-no-clear 'matrix) (-> obj align scale)) - ) - ) - (quaternion-normalize! - (matrix->quaternion - (-> obj align quat) - (matrix*! a2-8 (the-as matrix (-> obj matrix)) a2-8) - ) - ) - ) - (let - ((a1-24 - (quaternion-inverse! - (new 'stack-no-clear 'quaternion) - (the-as quaternion (-> obj transform 1 rot)) + ) + ) + (quaternion-normalize! + (quaternion*! (-> obj delta quat) a1-24 (-> obj align quat)) ) ) - ) - (quaternion-normalize! - (quaternion*! (-> obj delta quat) a1-24 (-> obj align quat)) - ) + (-> obj delta) ) - (-> obj delta) - ) ) ;; definition for method 12 of type align-control diff --git a/goal_src/engine/debug/debug-sphere.gc b/goal_src/engine/debug/debug-sphere.gc index 7c42b88064..96b42fdba7 100644 --- a/goal_src/engine/debug/debug-sphere.gc +++ b/goal_src/engine/debug/debug-sphere.gc @@ -23,12 +23,7 @@ (f30-0 1.0) (s4-0 0) ) - (let ((v1-0 s5-0)) - (set! (-> v1-0 x) 0.0) - (set! (-> v1-0 y) 0.0) - (set! (-> v1-0 z) 0.0) - (set! (-> v1-0 w) 1.0) - ) + (set-vector! s5-0 0.0 0.0 0.0 1.0) (dotimes (s3-0 10) (let ((f28-0 (* f30-0 (sin (* 3276.8 (the float s3-0))))) (f26-0 (* f30-0 (sin (* 3276.8 (the float (+ s3-0 1)))))) diff --git a/goal_src/engine/geometry/geometry.gc b/goal_src/engine/geometry/geometry.gc index cc1613eaac..d27fcee95a 100644 --- a/goal_src/engine/geometry/geometry.gc +++ b/goal_src/engine/geometry/geometry.gc @@ -917,18 +917,8 @@ (s5-0 (new-stack-vector0)) (gp-0 (new-stack-vector0)) ) - (let ((v1-3 s4-0)) - (set! (-> v1-3 x) 0.0) - (set! (-> v1-3 y) 0.0) - (set! (-> v1-3 z) 0.0) - (set! (-> v1-3 w) 1.0) - ) - (let ((v1-4 a1-2)) - (set! (-> v1-4 x) 100.0) - (set! (-> v1-4 y) 0.0) - (set! (-> v1-4 z) 0.0) - (set! (-> v1-4 w) 10000.0) - ) + (set-vector! s4-0 0.0 0.0 0.0 1.0) + (set-vector! a1-2 100.0 0.0 0.0 10000.0) (let ((a2-1 (circle-circle-xz-intersect s4-0 a1-2 s5-0 gp-0))) (format #t "res = ~d~%" a2-1) ) diff --git a/goal_src/engine/gfx/mood-h.gc b/goal_src/engine/gfx/mood-h.gc index 9d6104c914..bc687b332a 100644 --- a/goal_src/engine/gfx/mood-h.gc +++ b/goal_src/engine/gfx/mood-h.gc @@ -94,54 +94,14 @@ (defmethod new mood-context ((allocation symbol) (type-to-make type)) (let ((v0-0 (object-new allocation type-to-make (the-as int (-> type-to-make size))))) - (let ((v1-2 (-> v0-0 times))) - (set! (-> v1-2 0 x) 1.0) - (set! (-> v1-2 0 y) 1.0) - (set! (-> v1-2 0 z) 1.0) - (set! (-> v1-2 0 w) 0.0) - ) - (let ((v1-3 (-> v0-0 times 1))) - (set! (-> v1-3 x) 1.0) - (set! (-> v1-3 y) 1.0) - (set! (-> v1-3 z) 1.0) - (set! (-> v1-3 w) 0.0) - ) - (let ((v1-4 (-> v0-0 times 2))) - (set! (-> v1-4 x) 1.0) - (set! (-> v1-4 y) 1.0) - (set! (-> v1-4 z) 1.0) - (set! (-> v1-4 w) 0.0) - ) - (let ((v1-5 (-> v0-0 times 3))) - (set! (-> v1-5 x) 1.0) - (set! (-> v1-5 y) 1.0) - (set! (-> v1-5 z) 1.0) - (set! (-> v1-5 w) 0.0) - ) - (let ((v1-6 (-> v0-0 times 4))) - (set! (-> v1-6 x) 1.0) - (set! (-> v1-6 y) 1.0) - (set! (-> v1-6 z) 1.0) - (set! (-> v1-6 w) 0.0) - ) - (let ((v1-7 (-> v0-0 times 5))) - (set! (-> v1-7 x) 1.0) - (set! (-> v1-7 y) 1.0) - (set! (-> v1-7 z) 1.0) - (set! (-> v1-7 w) 0.0) - ) - (let ((v1-8 (-> v0-0 times 6))) - (set! (-> v1-8 x) 1.0) - (set! (-> v1-8 y) 1.0) - (set! (-> v1-8 z) 1.0) - (set! (-> v1-8 w) 0.0) - ) - (let ((v1-9 (-> v0-0 times 7))) - (set! (-> v1-9 x) 1.0) - (set! (-> v1-9 y) 1.0) - (set! (-> v1-9 z) 1.0) - (set! (-> v1-9 w) 0.0) - ) + (set-vector! (-> v0-0 times 0) 1.0 1.0 1.0 0.0) + (set-vector! (-> v0-0 times 1) 1.0 1.0 1.0 0.0) + (set-vector! (-> v0-0 times 2) 1.0 1.0 1.0 0.0) + (set-vector! (-> v0-0 times 3) 1.0 1.0 1.0 0.0) + (set-vector! (-> v0-0 times 4) 1.0 1.0 1.0 0.0) + (set-vector! (-> v0-0 times 5) 1.0 1.0 1.0 0.0) + (set-vector! (-> v0-0 times 6) 1.0 1.0 1.0 0.0) + (set-vector! (-> v0-0 times 7) 1.0 1.0 1.0 0.0) v0-0 ) ) diff --git a/goal_src/engine/math/matrix.gc b/goal_src/engine/math/matrix.gc index 469e2d7378..75bb41f644 100644 --- a/goal_src/engine/math/matrix.gc +++ b/goal_src/engine/math/matrix.gc @@ -247,18 +247,11 @@ "Set dst to be ([src 1.0] * mat).xyz. Doesn't touch the w of dst. dst and vec can be the same memory" (let ((temp-vec3 (new-stack-vector0))) - ;; create a temporary vec with [x, y, z, 1.0] - (let ((v1-0 temp-vec3)) - (set! (-> v1-0 data 0) (-> vec data 0)) - (set! (-> v1-0 data 1) (-> vec data 1)) - (set! (-> v1-0 data 2) (-> vec data 2)) - (set! (-> v1-0 data 3) 1.0) - ) + (set-vector! temp-vec3 (-> vec x) (-> vec y) (-> vec z) 1.0) (vector-matrix*! temp-vec3 temp-vec3 mat) - ;; only write back x,y,z - (set! (-> dst data 0) (-> temp-vec3 data 0)) - (set! (-> dst data 1) (-> temp-vec3 data 1)) - (set! (-> dst data 2) (-> temp-vec3 data 2)) + (set! (-> dst x) (-> temp-vec3 x)) + (set! (-> dst y) (-> temp-vec3 y)) + (set! (-> dst z) (-> temp-vec3 z)) ) dst ) @@ -267,16 +260,11 @@ "Set dst to vec rotated by the rotation in the homogeneous transform mat. mat should not have a scale/shear (the upper 3x3 should be a pure rotation)." (let ((temp-vec3 (new-stack-vector0))) - (let ((v1-0 temp-vec3)) - (set! (-> v1-0 data 0) (-> vec data 0)) - (set! (-> v1-0 data 1) (-> vec data 1)) - (set! (-> v1-0 data 2) (-> vec data 2)) - (set! (-> v1-0 data 3) 1.0) - ) + (set-vector! temp-vec3 (-> vec x) (-> vec y) (-> vec z) 1.0) (vector-rotate*! temp-vec3 temp-vec3 mat) - (set! (-> dst data 0) (-> temp-vec3 data 0)) - (set! (-> dst data 1) (-> temp-vec3 data 1)) - (set! (-> dst data 2) (-> temp-vec3 data 2)) + (set! (-> dst x) (-> temp-vec3 x)) + (set! (-> dst y) (-> temp-vec3 y)) + (set! (-> dst z) (-> temp-vec3 z)) ) dst ) @@ -787,12 +775,13 @@ ;; the vector-sincos! lets us take the sine and cosine of 4 floats at a time. ;; it uses vector operations and reuses the taylor series coefficients to do this quickly - (let ((v1-0 sincos-input)) - (set! (-> v1-0 data 0) (-> rots-deg data 0)) - (set! (-> v1-0 data 1) (- (-> rots-deg data 1) (-> rots-deg data 2))) - (set! (-> v1-0 data 2) (-> rots-deg data 2)) - (set! (-> v1-0 data 3) 1.0) - ) + (set-vector! + sincos-input + (-> rots-deg x) + (- (-> rots-deg y) (-> rots-deg z)) + (-> rots-deg z) + 1.0 + ) (vector-sincos! sin-vec cos-vec sincos-input) (let ((cos-y (-> cos-vec data 1)) (sin-y (-> sin-vec data 1)) diff --git a/goal_src/engine/math/quaternion.gc b/goal_src/engine/math/quaternion.gc index a7cb848d34..c4b8fc2bb3 100644 --- a/goal_src/engine/math/quaternion.gc +++ b/goal_src/engine/math/quaternion.gc @@ -1033,16 +1033,11 @@ (let ((gp-0 (new 'stack-no-clear 'matrix)) (s5-0 (new 'stack-no-clear 'vector)) ) - (quaternion->matrix gp-0 arg0) - (let ((v1-1 s5-0)) - (set! (-> v1-1 data 0) 0.0) - (set! (-> v1-1 data 1) 0.0) - (set! (-> v1-1 data 2) 1.0) - (set! (-> v1-1 data 3) 1.0) + (quaternion->matrix gp-0 arg0) + (set-vector! s5-0 0.0 0.0 1.0 1.0) + (vector-matrix*! s5-0 s5-0 gp-0) + (vector-y-angle s5-0) ) - (vector-matrix*! s5-0 s5-0 gp-0) - (vector-y-angle s5-0) - ) ) (defun-debug quaternion-validate ((arg0 quaternion)) diff --git a/goal_src/engine/math/vector.gc b/goal_src/engine/math/vector.gc index 8af926b6bb..a222ac787b 100644 --- a/goal_src/engine/math/vector.gc +++ b/goal_src/engine/math/vector.gc @@ -1270,11 +1270,11 @@ (defun rand-vu-sphere-point! ((arg0 vector) (arg1 float)) "Get a random point on the sphere at the origin with radius arg1. The point is on the surface of the sphere." - (let ((s4-0 arg0)) - (set! (-> s4-0 data 0) (rand-vu-float-range -1.0 1.0)) - (set! (-> s4-0 data 1) (rand-vu-float-range -1.0 1.0)) - (set! (-> s4-0 data 2) (rand-vu-float-range -1.0 1.0)) - (set! (-> s4-0 data 3) 1.0) - ) + (set-vector! arg0 + (rand-vu-float-range -1.0 1.0) + (rand-vu-float-range -1.0 1.0) + (rand-vu-float-range -1.0 1.0) + 1.0 + ) (vector-normalize! arg0 (rand-vu-float-range 0.0 arg1)) ) diff --git a/goal_src/engine/sparticle/sparticle-h.gc b/goal_src/engine/sparticle/sparticle-h.gc index e140822f03..c3147920e2 100644 --- a/goal_src/engine/sparticle/sparticle-h.gc +++ b/goal_src/engine/sparticle/sparticle-h.gc @@ -7,11 +7,12 @@ (define *sp-frame-time* (new 'global 'vector)) -(let ((v1-1 *sp-frame-time*)) - (set! (-> v1-1 x) 0.00000000000000000000000000000000000001175495) - (set! (-> v1-1 y) 5.0) - (set! (-> v1-1 z) 1.0) - (set! (-> v1-1 w) 1.0) +(set-vector! + *sp-frame-time* + 0.00000000000000000000000000000000000001175495 + 5.0 + 1.0 + 1.0 ) (define *sp-60-hz* #t) diff --git a/goal_src/engine/target/joint-mod-h.gc b/goal_src/engine/target/joint-mod-h.gc index 2a2f2c1bd1..2f0e4fcd4f 100644 --- a/goal_src/engine/target/joint-mod-h.gc +++ b/goal_src/engine/target/joint-mod-h.gc @@ -82,12 +82,7 @@ (set! (-> obj joint) (-> (-> proc node-list) data joint-idx)) (set-mode! obj mode) ;; set defaults. - (let ((twist-max (-> obj twist-max))) - (set! (-> twist-max x) 8192.0) - (set! (-> twist-max y) 11832.889) - (set! (-> twist-max z) 0.0) - (set! (-> twist-max w) 1.0) - ) + (set-vector! (-> obj twist-max) 8192.0 11832.889 0.0 1.0) (set! (-> obj up) (the-as uint 1)) (set! (-> obj nose) (the-as uint 2)) (set! (-> obj ear) (the-as uint 0)) @@ -140,12 +135,7 @@ (set! (-> joint param2) #f) (vector-reset! (-> obj trans)) (quaternion-identity! (-> obj quat)) - (let ((v1-2 (-> obj scale))) - (set! (-> v1-2 x) 1.0) - (set! (-> v1-2 y) 1.0) - (set! (-> v1-2 z) 1.0) - (set! (-> v1-2 w) 1.0) - ) + (set-vector! (-> obj scale) 1.0 1.0 1.0 1.0) (set! (-> obj max-dist) (the-as float #f)) ) (((joint-mod-handler-mode joint-set*)) @@ -154,12 +144,7 @@ (set! (-> joint param2) #f) (vector-reset! (-> obj trans)) (quaternion-identity! (-> obj quat)) - (let ((v1-4 (-> obj scale))) - (set! (-> v1-4 x) 1.0) - (set! (-> v1-4 y) 1.0) - (set! (-> v1-4 z) 1.0) - (set! (-> v1-4 w) 1.0) - ) + (set-vector! (-> obj scale) 1.0 1.0 1.0 1.0) (set! (-> obj max-dist) (the-as float #f)) ) ) @@ -676,14 +661,9 @@ ) (vector*! (-> arg1 scale) (-> arg1 scale) (-> s5-0 scale)) (cspace<-parented-transformq-joint! arg0 arg1) - (when (-> s5-0 max-dist) - (let ((v1-4 (-> arg0 bone scale))) - (set! (-> v1-4 x) 1.0) - (set! (-> v1-4 y) 1.0) - (set! (-> v1-4 z) 1.0) - (set! (-> v1-4 w) 1.0) + (if (-> s5-0 max-dist) + (set-vector! (-> arg0 bone scale) 1.0 1.0 1.0 1.0) ) - ) ) (none) ) @@ -757,12 +737,7 @@ (set! (-> v0-0 wheel-radius) arg2) (set! (-> v0-0 wheel-axis) arg3) (set! (-> v0-0 angle) 0.0) - (let ((v1-2 (-> v0-0 last-position))) - (set! (-> v1-2 x) 0.0) - (set! (-> v1-2 y) 0.0) - (set! (-> v1-2 z) 0.0) - (set! (-> v1-2 w) 1.0) - ) + (set-vector! (-> v0-0 last-position) 0.0 0.0 0.0 1.0) (let ((v1-5 (-> (-> arg0 node-list) data arg1))) (set! (-> v1-5 param0) joint-mod-wheel-callback) (set! (-> v1-5 param1) v0-0) diff --git a/test/decompiler/reference/decompiler-macros.gc b/test/decompiler/reference/decompiler-macros.gc index 09e598077b..258c10976d 100644 --- a/test/decompiler/reference/decompiler-macros.gc +++ b/test/decompiler/reference/decompiler-macros.gc @@ -197,3 +197,12 @@ ) ) +(defmacro set-vector! (v xv yv zv wv) + "Set all fields in a vector" + (with-gensyms (vec) + `(let ((vec ,v)) + (set! (-> vec x) ,xv) + (set! (-> vec y) ,yv) + (set! (-> vec z) ,zv) + (set! (-> vec w) ,wv))) + ) \ No newline at end of file diff --git a/test/decompiler/reference/engine/ambient/mood-tables_REF.gc b/test/decompiler/reference/engine/ambient/mood-tables_REF.gc index ccefd2ae8a..5761ebe06c 100644 --- a/test/decompiler/reference/engine/ambient/mood-tables_REF.gc +++ b/test/decompiler/reference/engine/ambient/mood-tables_REF.gc @@ -13,12 +13,7 @@ (set! (-> v1-0 direction z) 0.612) (set! (-> v1-0 direction w) 0.0) ) - (let ((v1-1 (-> arg0 dir0 color))) - (set! (-> v1-1 x) 0.8) - (set! (-> v1-1 y) 0.775) - (set! (-> v1-1 z) 0.7) - (set! (-> v1-1 w) 1.0) - ) + (set-vector! (-> arg0 dir0 color) 0.8 0.775 0.7 1.0) (set! (-> arg0 dir0 levels x) arg2) (let ((v1-2 (-> arg0 dir1))) (set! (-> v1-2 direction x) 0.612) @@ -26,12 +21,7 @@ (set! (-> v1-2 direction z) -0.612) (set! (-> v1-2 direction w) 0.0) ) - (let ((v1-3 (-> arg0 dir1 color))) - (set! (-> v1-3 x) 0.8) - (set! (-> v1-3 y) 0.775) - (set! (-> v1-3 z) 0.7) - (set! (-> v1-3 w) 1.0) - ) + (set-vector! (-> arg0 dir1 color) 0.8 0.775 0.7 1.0) (set! (-> arg0 dir1 levels x) arg3) (vector-matrix*! (the-as vector (-> arg0 dir0)) @@ -50,12 +40,7 @@ (set! (-> v1-4 direction z) 0.0) (set! (-> v1-4 direction w) 0.0) ) - (let ((v1-5 (-> arg0 dir2 color))) - (set! (-> v1-5 x) 0.8) - (set! (-> v1-5 y) 0.775) - (set! (-> v1-5 z) 0.7) - (set! (-> v1-5 w) 1.0) - ) + (set-vector! (-> arg0 dir2 color) 0.8 0.775 0.7 1.0) (let ((f0-26 arg4)) (set! (-> arg0 dir2 levels x) f0-26) f0-26 @@ -74,12 +59,7 @@ (set! (-> v1-0 direction z) 0.0) (set! (-> v1-0 direction w) 0.0) ) - (let ((v1-1 (-> s5-0 dir2 color))) - (set! (-> v1-1 x) 0.75) - (set! (-> v1-1 y) 0.375) - (set! (-> v1-1 z) 0.0) - (set! (-> v1-1 w) 1.0) - ) + (set-vector! (-> s5-0 dir2 color) 0.75 0.375 0.0 1.0) ) (make-light-kit (-> arg0 light-group 3) 53703.11 0.9 0.9 0.5) (make-light-kit (-> arg0 light-group 4) 54613.332 0.9 0.9 0.4) @@ -94,18 +74,8 @@ (defun make-misty-light-kit ((arg0 mood-context)) (let ((gp-0 (-> arg0 light-group 1))) (make-light-kit gp-0 24576.0 1.0 0.4 1.0) - (let ((v1-0 (-> gp-0 dir0 color))) - (set! (-> v1-0 x) 0.75) - (set! (-> v1-0 y) 0.3) - (set! (-> v1-0 z) 0.0) - (set! (-> v1-0 w) 1.0) - ) - (let ((v0-1 (-> gp-0 dir2 color))) - (set! (-> v0-1 x) 0.75) - (set! (-> v0-1 y) 0.3) - (set! (-> v0-1 z) 0.0) - (set! (-> v0-1 w) 1.0) - ) + (set-vector! (-> gp-0 dir0 color) 0.75 0.3 0.0 1.0) + (set-vector! (-> gp-0 dir2 color) 0.75 0.3 0.0 1.0) ) (none) ) @@ -120,12 +90,7 @@ (set! (-> a0-1 direction z) 0.0) (set! (-> a0-1 direction w) 1.0) ) - (let ((a0-2 (-> v1-0 dir0 color))) - (set! (-> a0-2 x) 0.375) - (set! (-> a0-2 y) 0.25) - (set! (-> a0-2 z) 0.25) - (set! (-> a0-2 w) 1.0) - ) + (set-vector! (-> v1-0 dir0 color) 0.375 0.25 0.25 1.0) (set! (-> v1-0 dir0 levels x) 1.0) (let ((a0-3 (-> v1-0 dir1))) (set! (-> a0-3 direction x) -0.6119) @@ -133,12 +98,7 @@ (set! (-> a0-3 direction z) -0.6119) (set! (-> a0-3 direction w) 1.0) ) - (let ((a0-4 (-> v1-0 dir1 color))) - (set! (-> a0-4 x) 0.25) - (set! (-> a0-4 y) 0.75) - (set! (-> a0-4 z) 1.0) - (set! (-> a0-4 w) 1.0) - ) + (set-vector! (-> v1-0 dir1 color) 0.25 0.75 1.0 1.0) (set! (-> v1-0 dir1 levels x) 0.666) (let ((a0-5 (-> v1-0 dir2))) (set! (-> a0-5 direction x) 0.9961) @@ -146,12 +106,7 @@ (set! (-> a0-5 direction z) -0.0871) (set! (-> a0-5 direction w) 1.0) ) - (let ((a0-6 (-> v1-0 dir2 color))) - (set! (-> a0-6 x) 0.0) - (set! (-> a0-6 y) 0.25) - (set! (-> a0-6 z) 1.0) - (set! (-> a0-6 w) 1.0) - ) + (set-vector! (-> v1-0 dir2 color) 0.0 0.25 1.0 1.0) (set! (-> v1-0 dir2 levels x) 1.0) ) (let ((v1-2 (-> arg0 light-group 2))) @@ -161,12 +116,7 @@ (set! (-> a0-7 direction z) 0.836) (set! (-> a0-7 direction w) 1.0) ) - (let ((a0-8 (-> v1-2 dir0 color))) - (set! (-> a0-8 x) 0.8) - (set! (-> a0-8 y) 0.8) - (set! (-> a0-8 z) 0.8) - (set! (-> a0-8 w) 1.0) - ) + (set-vector! (-> v1-2 dir0 color) 0.8 0.8 0.8 1.0) (set! (-> v1-2 dir0 levels x) 0.7) (let ((a0-9 (-> v1-2 dir1))) (set! (-> a0-9 direction x) -0.2959) @@ -174,31 +124,16 @@ (set! (-> a0-9 direction z) -0.8133) (set! (-> a0-9 direction w) 1.0) ) - (let ((a0-10 (-> v1-2 dir1 color))) - (set! (-> a0-10 x) 0.8) - (set! (-> a0-10 y) 0.8) - (set! (-> a0-10 z) 0.8) - (set! (-> a0-10 w) 1.0) - ) + (set-vector! (-> v1-2 dir1 color) 0.8 0.8 0.8 1.0) (set! (-> v1-2 dir1 levels x) 0.7) ) (let ((s5-0 (-> arg0 light-group 3))) (make-light-kit s5-0 5461.3335 1.0 0.8 0.2) - (let ((v1-4 (-> s5-0 dir0 color))) - (set! (-> v1-4 x) 0.675) - (set! (-> v1-4 y) 0.45) - (set! (-> v1-4 z) 0.15) - (set! (-> v1-4 w) 1.0) - ) + (set-vector! (-> s5-0 dir0 color) 0.675 0.45 0.15 1.0) ) (let ((s5-1 (-> arg0 light-group 4))) (make-light-kit s5-1 57344.0 1.0 0.8 0.2) - (let ((v1-5 (-> s5-1 dir0 color))) - (set! (-> v1-5 x) 0.675) - (set! (-> v1-5 y) 0.45) - (set! (-> v1-5 z) 0.15) - (set! (-> v1-5 w) 1.0) - ) + (set-vector! (-> s5-1 dir0 color) 0.675 0.45 0.15 1.0) ) (let ((v1-6 (-> arg0 light-group 5))) (let ((a0-13 (-> v1-6 dir0))) @@ -207,28 +142,13 @@ (set! (-> a0-13 direction z) 0.0) (set! (-> a0-13 direction w) 0.0) ) - (let ((a0-14 (-> v1-6 dir0 color))) - (set! (-> a0-14 x) 2.0) - (set! (-> a0-14 y) 1.0) - (set! (-> a0-14 z) 0.0) - (set! (-> a0-14 w) 1.0) - ) + (set-vector! (-> v1-6 dir0 color) 2.0 1.0 0.0 1.0) (set! (-> v1-6 dir1 levels x) 0.0) (set! (-> v1-6 dir2 levels x) 0.0) ) (let ((v1-8 (-> arg0 light-group 6))) - (let ((a0-15 (-> v1-8 dir0 color))) - (set! (-> a0-15 x) 1.0) - (set! (-> a0-15 y) 0.5) - (set! (-> a0-15 z) 0.0) - (set! (-> a0-15 w) 1.0) - ) - (let ((a0-16 (-> v1-8 dir1 color))) - (set! (-> a0-16 x) 0.6) - (set! (-> a0-16 y) 0.58125) - (set! (-> a0-16 z) 0.525) - (set! (-> a0-16 w) 1.0) - ) + (set-vector! (-> v1-8 dir0 color) 1.0 0.5 0.0 1.0) + (set-vector! (-> v1-8 dir1 color) 0.6 0.58125 0.525 1.0) (set! (-> v1-8 dir1 levels x) 0.0) (set! (-> v1-8 dir2 levels x) 0.0) ) @@ -246,12 +166,7 @@ (set! (-> v1-0 direction z) 0.0) (set! (-> v1-0 direction w) 1.0) ) - (let ((v1-1 (-> s5-0 dir0 color))) - (set! (-> v1-1 x) 1.0) - (set! (-> v1-1 y) 0.9) - (set! (-> v1-1 z) 0.0) - (set! (-> v1-1 w) 1.0) - ) + (set-vector! (-> s5-0 dir0 color) 1.0 0.9 0.0 1.0) ) (let ((s5-1 (-> arg0 light-group 2))) (make-light-kit s5-1 0.0 1.0 0.0 0.0) @@ -261,12 +176,7 @@ (set! (-> v1-2 direction z) 0.0) (set! (-> v1-2 direction w) 1.0) ) - (let ((v1-3 (-> s5-1 dir0 color))) - (set! (-> v1-3 x) 1.0) - (set! (-> v1-3 y) 0.9) - (set! (-> v1-3 z) 0.0) - (set! (-> v1-3 w) 1.0) - ) + (set-vector! (-> s5-1 dir0 color) 1.0 0.9 0.0 1.0) ) (let ((s5-2 (-> arg0 light-group 3))) (make-light-kit s5-2 0.0 1.0 0.0 0.0) @@ -276,12 +186,7 @@ (set! (-> v1-4 direction z) 0.0) (set! (-> v1-4 direction w) 1.0) ) - (let ((v1-5 (-> s5-2 dir0 color))) - (set! (-> v1-5 x) 1.0) - (set! (-> v1-5 y) 0.9) - (set! (-> v1-5 z) 0.0) - (set! (-> v1-5 w) 1.0) - ) + (set-vector! (-> s5-2 dir0 color) 1.0 0.9 0.0 1.0) ) (let ((s5-3 (-> arg0 light-group 4))) (make-light-kit s5-3 0.0 1.0 0.0 0.0) @@ -291,12 +196,7 @@ (set! (-> v1-6 direction z) 0.0) (set! (-> v1-6 direction w) 1.0) ) - (let ((v1-7 (-> s5-3 dir0 color))) - (set! (-> v1-7 x) 1.0) - (set! (-> v1-7 y) 0.9) - (set! (-> v1-7 z) 0.0) - (set! (-> v1-7 w) 1.0) - ) + (set-vector! (-> s5-3 dir0 color) 1.0 0.9 0.0 1.0) ) (let ((s5-4 (-> arg0 light-group 5))) (make-light-kit s5-4 0.0 1.0 0.0 0.0) @@ -306,12 +206,7 @@ (set! (-> v1-8 direction z) 0.0) (set! (-> v1-8 direction w) 1.0) ) - (let ((v1-9 (-> s5-4 dir0 color))) - (set! (-> v1-9 x) 1.0) - (set! (-> v1-9 y) 0.9) - (set! (-> v1-9 z) 0.0) - (set! (-> v1-9 w) 1.0) - ) + (set-vector! (-> s5-4 dir0 color) 1.0 0.9 0.0 1.0) ) (let ((gp-1 (-> arg0 light-group 6))) (make-light-kit gp-1 0.0 1.0 0.0 0.0) @@ -321,12 +216,7 @@ (set! (-> v1-10 direction z) 0.0) (set! (-> v1-10 direction w) 1.0) ) - (let ((v0-6 (-> gp-1 dir0 color))) - (set! (-> v0-6 x) 1.0) - (set! (-> v0-6 y) 0.9) - (set! (-> v0-6 z) 0.0) - (set! (-> v0-6 w) 1.0) - ) + (set-vector! (-> gp-1 dir0 color) 1.0 0.9 0.0 1.0) ) (none) ) @@ -341,12 +231,7 @@ (set! (-> a1-0 direction z) 0.2929) (set! (-> a1-0 direction w) 1.0) ) - (let ((a1-1 (-> v1-0 dir0 color))) - (set! (-> a1-1 x) 0.5) - (set! (-> a1-1 y) 1.0) - (set! (-> a1-1 z) 1.0) - (set! (-> a1-1 w) 1.0) - ) + (set-vector! (-> v1-0 dir0 color) 0.5 1.0 1.0 1.0) (set! (-> v1-0 dir0 levels x) 1.0) (let ((a1-2 (-> v1-0 dir2))) (set! (-> a1-2 direction x) 0.0) @@ -354,12 +239,7 @@ (set! (-> a1-2 direction z) 0.0) (set! (-> a1-2 direction w) 1.0) ) - (let ((v1-1 (-> v1-0 dir2 color))) - (set! (-> v1-1 x) 0.625) - (set! (-> v1-1 y) 0.375) - (set! (-> v1-1 z) 0.1) - (set! (-> v1-1 w) 1.0) - ) + (set-vector! (-> v1-0 dir2 color) 0.625 0.375 0.1 1.0) ) (let ((v1-2 (-> arg0 light-group 2))) (let ((a0-1 (-> v1-2 dir0))) @@ -368,12 +248,7 @@ (set! (-> a0-1 direction z) 0.2929) (set! (-> a0-1 direction w) 1.0) ) - (let ((a0-2 (-> v1-2 dir0 color))) - (set! (-> a0-2 x) 0.25) - (set! (-> a0-2 y) 0.5) - (set! (-> a0-2 z) 0.5) - (set! (-> a0-2 w) 1.0) - ) + (set-vector! (-> v1-2 dir0 color) 0.25 0.5 0.5 1.0) (set! (-> v1-2 dir0 levels x) 1.0) (let ((a0-3 (-> v1-2 dir2))) (set! (-> a0-3 direction x) 0.0) @@ -381,12 +256,7 @@ (set! (-> a0-3 direction z) 0.0) (set! (-> a0-3 direction w) 1.0) ) - (let ((v0-0 (-> v1-2 dir2 color))) - (set! (-> v0-0 x) 0.625) - (set! (-> v0-0 y) 0.375) - (set! (-> v0-0 z) 0.1) - (set! (-> v0-0 w) 1.0) - ) + (set-vector! (-> v1-2 dir2 color) 0.625 0.375 0.1 1.0) ) (none) ) diff --git a/test/decompiler/reference/engine/anim/aligner_REF.gc b/test/decompiler/reference/engine/anim/aligner_REF.gc index 0f90cf76b0..d6ba1d44c5 100644 --- a/test/decompiler/reference/engine/anim/aligner_REF.gc +++ b/test/decompiler/reference/engine/anim/aligner_REF.gc @@ -112,11 +112,12 @@ (the-as vector (-> obj transform)) (the-as vector (-> obj transform 1)) ) - (let ((s5-2 (-> obj align scale))) - (set! (-> s5-2 x) (vector-length (the-as vector (-> obj matrix)))) - (set! (-> s5-2 y) (vector-length (-> obj matrix 0 vector 1))) - (set! (-> s5-2 z) (vector-length (-> obj matrix 0 vector 2))) - (set! (-> s5-2 w) 1.0) + (set-vector! + (-> obj align scale) + (vector-length (the-as vector (-> obj matrix))) + (vector-length (-> obj matrix 0 vector 1)) + (vector-length (-> obj matrix 0 vector 2)) + 1.0 ) (vector-! (-> obj delta scale) diff --git a/test/decompiler/reference/engine/camera/camera-h_REF.gc b/test/decompiler/reference/engine/camera/camera-h_REF.gc index 8420b4c816..d5967ae39d 100644 --- a/test/decompiler/reference/engine/camera/camera-h_REF.gc +++ b/test/decompiler/reference/engine/camera/camera-h_REF.gc @@ -276,7 +276,7 @@ (f0-5 (* (-> obj max-partial) (fabs f1-2))) ) (let ((f1-3 (* f1-2 (* (-> obj accel) (-> *display* time-adjust-ratio))))) - (set! (-> obj vel) (+ (-> obj vel) f1-3)) + (+! (-> obj vel) f1-3) ) (let ((f1-6 (fabs (-> obj vel))) (f0-6 (fmin f0-5 (-> obj max-vel))) @@ -287,7 +287,7 @@ ) ) (let ((f0-10 (* (-> obj vel) (-> *display* time-adjust-ratio)))) - (set! (-> obj value) (+ (-> obj value) f0-10)) + (+! (-> obj value) f0-10) ) 0 (none) diff --git a/test/decompiler/reference/engine/camera/math-camera_REF.gc b/test/decompiler/reference/engine/camera/math-camera_REF.gc index 023baf301b..54401693c7 100644 --- a/test/decompiler/reference/engine/camera/math-camera_REF.gc +++ b/test/decompiler/reference/engine/camera/math-camera_REF.gc @@ -241,23 +241,20 @@ (set! (-> sprite-row-0 vector 0 z) 0.0) (set! (-> sprite-row-0 vector 0 w) 0.0) ) - (let ((sprite-row-1 (-> math-cam sprite-2d vector 1))) - (set! (-> sprite-row-1 x) 0.0) - (set! (-> sprite-row-1 y) (- (* (/ persp-yy persp-xx) persp-x))) - (set! (-> sprite-row-1 z) 0.0) - (set! (-> sprite-row-1 w) 0.0) + (set-vector! + (-> math-cam sprite-2d vector 1) + 0.0 + (- (* (/ persp-yy persp-xx) persp-x)) + 0.0 + 0.0 ) - (let ((sprite-row-2 (-> math-cam sprite-2d vector 2))) - (set! (-> sprite-row-2 x) 0.0) - (set! (-> sprite-row-2 y) 0.0) - (set! (-> sprite-row-2 z) (- persp-x)) - (set! (-> sprite-row-2 w) 0.0) - ) - (let ((sprite-row-3 (-> math-cam sprite-2d vector 3))) - (set! (-> sprite-row-3 x) 0.0) - (set! (-> sprite-row-3 y) 0.0) - (set! (-> sprite-row-3 z) (* 500000000.0 persp-x)) - (set! (-> sprite-row-3 w) (* (* 60.0 persp-x) (-> math-cam pfog0))) + (set-vector! (-> math-cam sprite-2d vector 2) 0.0 0.0 (- persp-x) 0.0) + (set-vector! + (-> math-cam sprite-2d vector 3) + 0.0 + 0.0 + (* 500000000.0 persp-x) + (* (* 60.0 persp-x) (-> math-cam pfog0)) ) ) (set! (-> math-cam sprite-2d-hvdf quad) (-> math-cam hvdf-off quad)) @@ -624,12 +621,7 @@ (let ((s2-0 (new 'stack 'vector4s-3))) (matrix*! s5-0 arg0 (-> *math-camera* camera-temp)) (matrix-3x3-inverse-transpose! gp-0 arg0) - (let ((v1-3 s3-0)) - (set! (-> v1-3 x) 0.4) - (set! (-> v1-3 y) 0.4) - (set! (-> v1-3 z) 0.4) - (set! (-> v1-3 w) 1.0) - ) + (set-vector! s3-0 0.4 0.4 0.4 1.0) (let ((v1-4 (-> s4-0 data))) (set! (-> v1-4 0) 1.0) (set! (-> v1-4 1) 1.0) diff --git a/test/decompiler/reference/engine/collide/collide-frag_REF.gc b/test/decompiler/reference/engine/collide/collide-frag_REF.gc index 12cdb3891b..c7a281be76 100644 --- a/test/decompiler/reference/engine/collide/collide-frag_REF.gc +++ b/test/decompiler/reference/engine/collide/collide-frag_REF.gc @@ -77,39 +77,21 @@ (s4-0 (-> obj mesh)) ) (set! (-> arg0 data s5-0 name) (symbol->string 'collide-fragment)) - (set! (-> arg0 data s5-0 count) (+ (-> arg0 data s5-0 count) 1)) + (+! (-> arg0 data s5-0 count) 1) (let ((v1-11 (+ (asize-of obj) (asize-of s4-0)))) - (set! (-> arg0 data s5-0 used) (+ (-> arg0 data s5-0 used) v1-11)) - (set! - (-> arg0 data s5-0 total) - (+ (-> arg0 data s5-0 total) (logand -16 (+ v1-11 15))) - ) + (+! (-> arg0 data s5-0 used) v1-11) + (+! (-> arg0 data s5-0 total) (logand -16 (+ v1-11 15))) ) (set! (-> arg0 data (+ s5-0 1) name) "collision-poly") - (set! - (-> arg0 data (+ s5-0 1) count) - (+ (-> arg0 data (+ s5-0 1) count) (the-as int (-> s4-0 poly-count))) - ) + (+! (-> arg0 data (+ s5-0 1) count) (the-as int (-> s4-0 poly-count))) (let ((v1-22 (+ (-> s4-0 strip-data-len) (-> s4-0 poly-count)))) - (set! - (-> arg0 data (+ s5-0 1) used) - (+ (-> arg0 data (+ s5-0 1) used) (the-as int v1-22)) - ) - (set! - (-> arg0 data (+ s5-0 1) total) - (+ (-> arg0 data (+ s5-0 1) total) (the-as int v1-22)) - ) + (+! (-> arg0 data (+ s5-0 1) used) (the-as int v1-22)) + (+! (-> arg0 data (+ s5-0 1) total) (the-as int v1-22)) ) (set! (-> arg0 data (+ s5-0 2) name) "collision-vertex") - (set! - (-> arg0 data (+ s5-0 2) count) - (+ (-> arg0 data (+ s5-0 2) count) (the-as int (-> s4-0 vertex-count))) - ) + (+! (-> arg0 data (+ s5-0 2) count) (the-as int (-> s4-0 vertex-count))) (let ((v1-31 (* (-> s4-0 vertex-data-qwc) 16))) - (set! - (-> arg0 data (+ s5-0 2) used) - (+ (-> arg0 data (+ s5-0 2) used) (the-as int v1-31)) - ) + (+! (-> arg0 data (+ s5-0 2) used) (the-as int v1-31)) (let ((v0-2 (+ (-> arg0 data (+ s5-0 2) total) (the-as int v1-31)))) (set! (-> arg0 data (+ s5-0 2) total) v0-2) (the-as collide-fragment v0-2) @@ -195,13 +177,10 @@ ) (set! (-> arg0 length) (max 1 (-> arg0 length))) (set! (-> arg0 data 0 name) (symbol->string 'drawable-group)) - (set! (-> arg0 data 0 count) (+ (-> arg0 data 0 count) 1)) + (+! (-> arg0 data 0 count) 1) (let ((v1-7 32)) - (set! (-> arg0 data 0 used) (+ (-> arg0 data 0 used) v1-7)) - (set! - (-> arg0 data 0 total) - (+ (-> arg0 data 0 total) (logand -16 (+ v1-7 15))) - ) + (+! (-> arg0 data 0 used) v1-7) + (+! (-> arg0 data 0 total) (logand -16 (+ v1-7 15))) ) (dotimes (s3-0 (-> obj length)) (mem-usage (-> obj data s3-0) arg0 arg1) diff --git a/test/decompiler/reference/engine/data/res_REF.gc b/test/decompiler/reference/engine/data/res_REF.gc index 013febf6a1..e94dd06198 100644 --- a/test/decompiler/reference/engine/data/res_REF.gc +++ b/test/decompiler/reference/engine/data/res_REF.gc @@ -898,7 +898,7 @@ ) (else (set! (-> obj tag (-> obj length)) s4-1) - (set! (-> obj length) (+ (-> obj length) 1)) + (+! (-> obj length) 1) (sort! obj) ) ) @@ -1040,19 +1040,10 @@ ) (set! (-> block length) (max (-> block length) (+ mem-use-id 1))) (set! (-> block data mem-use-id name) mem-use-name) - (set! - (-> block data mem-use-id count) - (+ (-> block data mem-use-id count) 1) - ) + (+! (-> block data mem-use-id count) 1) (let ((obj-size (asize-of obj))) - (set! - (-> block data mem-use-id used) - (+ (-> block data mem-use-id used) obj-size) - ) - (set! - (-> block data mem-use-id total) - (+ (-> block data mem-use-id total) (logand -16 (+ obj-size 15))) - ) + (+! (-> block data mem-use-id used) obj-size) + (+! (-> block data mem-use-id total) (logand -16 (+ obj-size 15))) ) (dotimes (tag-idx (-> obj length)) (when (zero? (-> obj tag tag-idx inlined?)) @@ -1077,19 +1068,10 @@ ((string) (set! (-> block length) (max (-> block length) (+ mem-use-id 1))) (set! (-> block data mem-use-id name) mem-use-name) - (set! - (-> block data mem-use-id count) - (+ (-> block data mem-use-id count) 1) - ) + (+! (-> block data mem-use-id count) 1) (let ((v1-47 (asize-of tag-data))) - (set! - (-> block data mem-use-id used) - (+ (-> block data mem-use-id used) v1-47) - ) - (set! - (-> block data mem-use-id total) - (+ (-> block data mem-use-id total) (logand -16 (+ v1-47 15))) - ) + (+! (-> block data mem-use-id used) v1-47) + (+! (-> block data mem-use-id total) (logand -16 (+ v1-47 15))) ) ) ((nav-mesh collide-mesh) @@ -1098,19 +1080,10 @@ ((array) (set! (-> block length) (max (-> block length) (+ mem-use-id 1))) (set! (-> block data mem-use-id name) mem-use-name) - (set! - (-> block data mem-use-id count) - (+ (-> block data mem-use-id count) 1) - ) + (+! (-> block data mem-use-id count) 1) (let ((v1-63 (asize-of (the-as (array object) tag-data)))) - (set! - (-> block data mem-use-id used) - (+ (-> block data mem-use-id used) v1-63) - ) - (set! - (-> block data mem-use-id total) - (+ (-> block data mem-use-id total) (logand -16 (+ v1-63 15))) - ) + (+! (-> block data mem-use-id used) v1-63) + (+! (-> block data mem-use-id total) (logand -16 (+ v1-63 15))) ) (set! sv-16 0) (while (< sv-16 (-> (the-as array tag-data) length)) @@ -1123,19 +1096,10 @@ (else (set! (-> block length) (max (-> block length) (+ mem-use-id 1))) (set! (-> block data mem-use-id name) mem-use-name) - (set! - (-> block data mem-use-id count) - (+ (-> block data mem-use-id count) 1) - ) + (+! (-> block data mem-use-id count) 1) (let ((v1-88 (asize-of tag-data))) - (set! - (-> block data mem-use-id used) - (+ (-> block data mem-use-id used) v1-88) - ) - (set! - (-> block data mem-use-id total) - (+ (-> block data mem-use-id total) (logand -16 (+ v1-88 15))) - ) + (+! (-> block data mem-use-id used) v1-88) + (+! (-> block data mem-use-id total) (logand -16 (+ v1-88 15))) ) ) ) diff --git a/test/decompiler/reference/engine/debug/debug-sphere_REF.gc b/test/decompiler/reference/engine/debug/debug-sphere_REF.gc index af8c199c63..5e8f91b99d 100644 --- a/test/decompiler/reference/engine/debug/debug-sphere_REF.gc +++ b/test/decompiler/reference/engine/debug/debug-sphere_REF.gc @@ -26,12 +26,7 @@ (f30-0 1.0) (s4-0 0) ) - (let ((v1-0 s5-0)) - (set! (-> v1-0 x) 0.0) - (set! (-> v1-0 y) 0.0) - (set! (-> v1-0 z) 0.0) - (set! (-> v1-0 w) 1.0) - ) + (set-vector! s5-0 0.0 0.0 0.0 1.0) (dotimes (s3-0 10) (let ((f28-0 (* f30-0 (sin (* 3276.8 (the float s3-0))))) (f26-0 (* f30-0 (sin (* 3276.8 (the float (+ s3-0 1)))))) diff --git a/test/decompiler/reference/engine/debug/menu_REF.gc b/test/decompiler/reference/engine/debug/menu_REF.gc index 0f21cc7dcf..bce6ed296c 100644 --- a/test/decompiler/reference/engine/debug/menu_REF.gc +++ b/test/decompiler/reference/engine/debug/menu_REF.gc @@ -1090,17 +1090,11 @@ ) (set! (-> v1-2 color) (cond ((> (-> arg0 hilite-timer) 0) - (set! - (-> arg0 hilite-timer) - (+ (-> arg0 hilite-timer) -1) - ) + (+! (-> arg0 hilite-timer) -1) 10 ) ((< (-> arg0 hilite-timer) 0) - (set! - (-> arg0 hilite-timer) - (+ (-> arg0 hilite-timer) 1) - ) + (+! (-> arg0 hilite-timer) 1) 14 ) ((nonzero? arg3) @@ -1200,7 +1194,7 @@ debug-menu-item-render ((arg0 debug-menu-item) (arg1 int) (arg2 int) (arg3 int) (arg4 symbol)) (when (> (-> arg0 refresh-delay) 0) - (set! (-> arg0 refresh-ctr) (+ (-> arg0 refresh-ctr) -1)) + (+! (-> arg0 refresh-ctr) -1) (when (<= (-> arg0 refresh-ctr) 0) (set! (-> arg0 refresh-ctr) (-> arg0 refresh-delay)) (debug-menu-item-send-msg arg0 3) @@ -1506,7 +1500,7 @@ (defun debug-menu-context-close-submenu ((arg0 debug-menu-context)) (debug-menu-context-send-msg arg0 2 3) (if (< 1 (-> arg0 sel-length)) - (set! (-> arg0 sel-length) (+ (-> arg0 sel-length) -1)) + (+! (-> arg0 sel-length) -1) ) arg0 ) @@ -1672,7 +1666,7 @@ (cond ((<= (-> arg0 inc-delay-ctr) 0) (if (> (-> arg0 inc-delay) 0) - (set! (-> arg0 inc-delay) (+ (-> arg0 inc-delay) -1)) + (+! (-> arg0 inc-delay) -1) ) (when (zero? (-> arg0 inc-delay)) (cond @@ -1695,7 +1689,7 @@ ) ) (else - (set! (-> arg0 step-delay-ctr) (+ (-> arg0 step-delay-ctr) -1)) + (+! (-> arg0 step-delay-ctr) -1) ) ) ) @@ -1770,7 +1764,7 @@ ) ) (else - (set! (-> arg0 inc-delay-ctr) (+ (-> arg0 inc-delay-ctr) -1)) + (+! (-> arg0 inc-delay-ctr) -1) ) ) ) diff --git a/test/decompiler/reference/engine/debug/stats-h_REF.gc b/test/decompiler/reference/engine/debug/stats-h_REF.gc index acc3b408e0..2914affca2 100644 --- a/test/decompiler/reference/engine/debug/stats-h_REF.gc +++ b/test/decompiler/reference/engine/debug/stats-h_REF.gc @@ -126,9 +126,9 @@ perf-stat ((obj perf-stat) (arg0 uint) (arg1 uint) (arg2 uint)) (when (nonzero? (-> obj ctrl)) - (set! (-> obj to-vu0-waits) (+ (-> obj to-vu0-waits) arg0)) - (set! (-> obj to-spr-waits) (+ (-> obj to-spr-waits) arg1)) - (set! (-> obj from-spr-waits) (+ (-> obj from-spr-waits) arg2)) + (+! (-> obj to-vu0-waits) arg0) + (+! (-> obj to-spr-waits) arg1) + (+! (-> obj from-spr-waits) arg2) ) 0 (none) diff --git a/test/decompiler/reference/engine/engine/connect_REF.gc b/test/decompiler/reference/engine/engine/connect_REF.gc index fdb021f4ba..3693568ff6 100644 --- a/test/decompiler/reference/engine/engine/connect_REF.gc +++ b/test/decompiler/reference/engine/engine/connect_REF.gc @@ -425,7 +425,7 @@ ) (set! (-> con prev1) (-> proc connection-list)) (set! (-> proc connection-list next1) con) - (set! (-> obj length) (+ (-> obj length) 1)) + (+! (-> obj length) 1) con ) ) @@ -444,7 +444,7 @@ (set! (-> obj next0 prev0) obj) (set! (-> obj prev0) (-> v1-1 dead-list)) (set! (-> v1-1 dead-list next0) obj) - (set! (-> v1-1 length) (+ (-> v1-1 length) -1)) + (+! (-> v1-1 length) -1) ) obj ) diff --git a/test/decompiler/reference/engine/game/task/hint-control_REF.gc b/test/decompiler/reference/engine/game/task/hint-control_REF.gc index 20ed15f73f..4b50de8235 100644 --- a/test/decompiler/reference/engine/game/task/hint-control_REF.gc +++ b/test/decompiler/reference/engine/game/task/hint-control_REF.gc @@ -406,7 +406,7 @@ (= (-> gp-1 num-attempts-before-playing) 1) (< (the-as int a0-24) 30) ) - (set! (-> gp-1 start-time) (+ (-> gp-1 start-time) a0-24)) + (+! (-> gp-1 start-time) a0-24) ) (cond ((and diff --git a/test/decompiler/reference/engine/geometry/geometry_REF.gc b/test/decompiler/reference/engine/geometry/geometry_REF.gc index c7712f0bac..e961719902 100644 --- a/test/decompiler/reference/engine/geometry/geometry_REF.gc +++ b/test/decompiler/reference/engine/geometry/geometry_REF.gc @@ -1001,18 +1001,8 @@ (s5-0 (new-stack-vector0)) (gp-0 (new-stack-vector0)) ) - (let ((v1-3 s4-0)) - (set! (-> v1-3 x) 0.0) - (set! (-> v1-3 y) 0.0) - (set! (-> v1-3 z) 0.0) - (set! (-> v1-3 w) 1.0) - ) - (let ((v1-4 a1-2)) - (set! (-> v1-4 x) 100.0) - (set! (-> v1-4 y) 0.0) - (set! (-> v1-4 z) 0.0) - (set! (-> v1-4 w) 10000.0) - ) + (set-vector! s4-0 0.0 0.0 0.0 1.0) + (set-vector! a1-2 100.0 0.0 0.0 10000.0) (let ((a2-1 (circle-circle-xz-intersect s4-0 a1-2 s5-0 gp-0))) (format #t "res = ~d~%" a2-1) ) diff --git a/test/decompiler/reference/engine/geometry/vol-h_REF.gc b/test/decompiler/reference/engine/geometry/vol-h_REF.gc index 99b83cdc3b..50bdc5584c 100644 --- a/test/decompiler/reference/engine/geometry/vol-h_REF.gc +++ b/test/decompiler/reference/engine/geometry/vol-h_REF.gc @@ -128,10 +128,7 @@ (set! (-> a0-8 num-planes) (the-as int (-> s2-0 elt-count))) (set! (-> a0-8 plane) (the-as uint v1-12)) ) - (set! - (-> (the-as vol-control gp-0) pos-vol-count) - (+ (-> (the-as vol-control gp-0) pos-vol-count) 1) - ) + (+! (-> (the-as vol-control gp-0) pos-vol-count) 1) (+! s3-0 1) (set! s2-0 (-> s5-1 tag s3-0)) ) @@ -168,10 +165,7 @@ (set! (-> a0-19 num-planes) (the-as int (-> s2-1 elt-count))) (set! (-> a0-19 plane) (the-as uint v1-31)) ) - (set! - (-> (the-as vol-control gp-0) neg-vol-count) - (+ (-> (the-as vol-control gp-0) neg-vol-count) 1) - ) + (+! (-> (the-as vol-control gp-0) neg-vol-count) 1) (+! s3-1 1) (set! s2-1 (-> s5-2 tag s3-1)) ) diff --git a/test/decompiler/reference/engine/gfx/hw/display_REF.gc b/test/decompiler/reference/engine/gfx/hw/display_REF.gc index 0c095fd9ac..36bee4dc29 100644 --- a/test/decompiler/reference/engine/gfx/hw/display_REF.gc +++ b/test/decompiler/reference/engine/gfx/hw/display_REF.gc @@ -281,7 +281,7 @@ (defmethod add-frame profile-bar ((obj profile-bar) (name symbol) (color rgba)) (when *debug-segment* (let ((new-frame (-> obj data (-> obj profile-frame-count)))) - (set! (-> obj profile-frame-count) (+ (-> obj profile-frame-count) 1)) + (+! (-> obj profile-frame-count) 1) (set! (-> new-frame name) name) (set! (-> new-frame time-stamp) @@ -306,7 +306,7 @@ profile-bar ((obj profile-bar) (name symbol) (color rgba)) (let ((new-frame (-> obj data (-> obj profile-frame-count)))) - (set! (-> obj profile-frame-count) (+ (-> obj profile-frame-count) 1)) + (+! (-> obj profile-frame-count) 1) (set! (-> new-frame name) name) (set! (-> new-frame time-stamp) (the-as uint *ticks-per-frame*)) (set! (-> new-frame color) color) diff --git a/test/decompiler/reference/engine/gfx/hw/gs_REF.gc b/test/decompiler/reference/engine/gfx/hw/gs_REF.gc index 484fe36639..d9e6fb4988 100644 --- a/test/decompiler/reference/engine/gfx/hw/gs_REF.gc +++ b/test/decompiler/reference/engine/gfx/hw/gs_REF.gc @@ -944,7 +944,7 @@ ) ) (set! (-> (&-> packet args (-> packet reg-count)) 0) (the-as uint reg-val)) - (set! (-> packet reg-count) (+ (-> packet reg-count) 1)) + (+! (-> packet reg-count) 1) (none) ) diff --git a/test/decompiler/reference/engine/gfx/lights_REF.gc b/test/decompiler/reference/engine/gfx/lights_REF.gc index 33018a8ae9..f4df4966f6 100644 --- a/test/decompiler/reference/engine/gfx/lights_REF.gc +++ b/test/decompiler/reference/engine/gfx/lights_REF.gc @@ -49,47 +49,12 @@ ;; definition for function vu-lights-default! (defun vu-lights-default! ((arg0 vu-lights)) - (let ((v1-0 (-> arg0 ambient))) - (set! (-> v1-0 x) 0.3) - (set! (-> v1-0 y) 0.3) - (set! (-> v1-0 z) 0.3) - (set! (-> v1-0 w) 1.0) - ) - (let ((v1-1 (-> arg0 color))) - (set! (-> v1-1 0 x) 1.0) - (set! (-> v1-1 0 y) 1.0) - (set! (-> v1-1 0 z) 1.0) - (set! (-> v1-1 0 w) 1.0) - ) - (let ((v1-2 (-> arg0 color 1))) - (set! (-> v1-2 x) 0.2) - (set! (-> v1-2 y) 0.2) - (set! (-> v1-2 z) 0.2) - (set! (-> v1-2 w) 1.0) - ) - (let ((v1-3 (-> arg0 color 2))) - (set! (-> v1-3 x) 0.0) - (set! (-> v1-3 y) 0.0) - (set! (-> v1-3 z) 0.0) - (set! (-> v1-3 w) 1.0) - ) - (let ((v1-4 (-> arg0 direction))) - (set! (-> v1-4 0 x) 1.0) - (set! (-> v1-4 0 y) 0.0) - (set! (-> v1-4 0 z) 0.0) - (set! (-> v1-4 0 w) 1.0) - ) - (let ((v1-5 (-> arg0 direction 1))) - (set! (-> v1-5 x) 0.0) - (set! (-> v1-5 y) 1.0) - (set! (-> v1-5 z) 0.0) - (set! (-> v1-5 w) 1.0) - ) - (let ((v1-6 (-> arg0 direction 2))) - (set! (-> v1-6 x) 0.0) - (set! (-> v1-6 y) 0.0) - (set! (-> v1-6 z) 1.0) - (set! (-> v1-6 w) 1.0) - ) + (set-vector! (-> arg0 ambient) 0.3 0.3 0.3 1.0) + (set-vector! (-> arg0 color 0) 1.0 1.0 1.0 1.0) + (set-vector! (-> arg0 color 1) 0.2 0.2 0.2 1.0) + (set-vector! (-> arg0 color 2) 0.0 0.0 0.0 1.0) + (set-vector! (-> arg0 direction 0) 1.0 0.0 0.0 1.0) + (set-vector! (-> arg0 direction 1) 0.0 1.0 0.0 1.0) + (set-vector! (-> arg0 direction 2) 0.0 0.0 1.0 1.0) arg0 ) diff --git a/test/decompiler/reference/engine/gfx/mood-h_REF.gc b/test/decompiler/reference/engine/gfx/mood-h_REF.gc index 79605a47be..024d16ed30 100644 --- a/test/decompiler/reference/engine/gfx/mood-h_REF.gc +++ b/test/decompiler/reference/engine/gfx/mood-h_REF.gc @@ -205,54 +205,14 @@ (object-new allocation type-to-make (the-as int (-> type-to-make size))) ) ) - (let ((v1-2 (-> v0-0 times))) - (set! (-> v1-2 0 x) 1.0) - (set! (-> v1-2 0 y) 1.0) - (set! (-> v1-2 0 z) 1.0) - (set! (-> v1-2 0 w) 0.0) - ) - (let ((v1-3 (-> v0-0 times 1))) - (set! (-> v1-3 x) 1.0) - (set! (-> v1-3 y) 1.0) - (set! (-> v1-3 z) 1.0) - (set! (-> v1-3 w) 0.0) - ) - (let ((v1-4 (-> v0-0 times 2))) - (set! (-> v1-4 x) 1.0) - (set! (-> v1-4 y) 1.0) - (set! (-> v1-4 z) 1.0) - (set! (-> v1-4 w) 0.0) - ) - (let ((v1-5 (-> v0-0 times 3))) - (set! (-> v1-5 x) 1.0) - (set! (-> v1-5 y) 1.0) - (set! (-> v1-5 z) 1.0) - (set! (-> v1-5 w) 0.0) - ) - (let ((v1-6 (-> v0-0 times 4))) - (set! (-> v1-6 x) 1.0) - (set! (-> v1-6 y) 1.0) - (set! (-> v1-6 z) 1.0) - (set! (-> v1-6 w) 0.0) - ) - (let ((v1-7 (-> v0-0 times 5))) - (set! (-> v1-7 x) 1.0) - (set! (-> v1-7 y) 1.0) - (set! (-> v1-7 z) 1.0) - (set! (-> v1-7 w) 0.0) - ) - (let ((v1-8 (-> v0-0 times 6))) - (set! (-> v1-8 x) 1.0) - (set! (-> v1-8 y) 1.0) - (set! (-> v1-8 z) 1.0) - (set! (-> v1-8 w) 0.0) - ) - (let ((v1-9 (-> v0-0 times 7))) - (set! (-> v1-9 x) 1.0) - (set! (-> v1-9 y) 1.0) - (set! (-> v1-9 z) 1.0) - (set! (-> v1-9 w) 0.0) - ) + (set-vector! (-> v0-0 times 0) 1.0 1.0 1.0 0.0) + (set-vector! (-> v0-0 times 1) 1.0 1.0 1.0 0.0) + (set-vector! (-> v0-0 times 2) 1.0 1.0 1.0 0.0) + (set-vector! (-> v0-0 times 3) 1.0 1.0 1.0 0.0) + (set-vector! (-> v0-0 times 4) 1.0 1.0 1.0 0.0) + (set-vector! (-> v0-0 times 5) 1.0 1.0 1.0 0.0) + (set-vector! (-> v0-0 times 6) 1.0 1.0 1.0 0.0) + (set-vector! (-> v0-0 times 7) 1.0 1.0 1.0 0.0) v0-0 ) ) diff --git a/test/decompiler/reference/engine/gfx/ripple_REF.gc b/test/decompiler/reference/engine/gfx/ripple_REF.gc index 131f285846..99e4b2e3d2 100644 --- a/test/decompiler/reference/engine/gfx/ripple_REF.gc +++ b/test/decompiler/reference/engine/gfx/ripple_REF.gc @@ -57,7 +57,7 @@ (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)) + (+! (-> *ripple-globals* count) 1) ) ) ) @@ -76,7 +76,7 @@ (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)))) + (+! (-> a1-4 offs) (* f0-1 (-> a1-4 delta))) (set! (-> a1-4 offs) (the float (logand (the int (-> a1-4 offs)) #xffff))) ) ) diff --git a/test/decompiler/reference/engine/gfx/shrub/shrub-work_REF.gc b/test/decompiler/reference/engine/gfx/shrub/shrub-work_REF.gc index 18926272f7..73dc04868c 100644 --- a/test/decompiler/reference/engine/gfx/shrub/shrub-work_REF.gc +++ b/test/decompiler/reference/engine/gfx/shrub/shrub-work_REF.gc @@ -660,7 +660,7 @@ (set! (-> v1-1 vector 2 quad) t2-4) (set! (-> v1-1 vector 3 quad) t3-1) ) - (set! (-> arg0 base) (&+ (-> arg0 base) 64)) + (&+! (-> arg0 base) 64) (let* ((v1-4 arg0) (t0-4 (the-as object (-> v1-4 base))) ) @@ -787,7 +787,3 @@ ) arg0 ) - - - - diff --git a/test/decompiler/reference/engine/gfx/sparticle/sparticle-h_REF.gc b/test/decompiler/reference/engine/gfx/sparticle/sparticle-h_REF.gc index 54e30dfcfa..26d6d05f11 100644 --- a/test/decompiler/reference/engine/gfx/sparticle/sparticle-h_REF.gc +++ b/test/decompiler/reference/engine/gfx/sparticle/sparticle-h_REF.gc @@ -5,11 +5,12 @@ (define *sp-frame-time* (new 'global 'vector)) ;; failed to figure out what this is: -(let ((v1-1 *sp-frame-time*)) - (set! (-> v1-1 x) 0.00000000000000000000000000000000000001175495) - (set! (-> v1-1 y) 5.0) - (set! (-> v1-1 z) 1.0) - (set! (-> v1-1 w) 1.0) +(set-vector! + *sp-frame-time* + 0.00000000000000000000000000000000000001175495 + 5.0 + 1.0 + 1.0 ) ;; definition for symbol *sp-60-hz*, type symbol diff --git a/test/decompiler/reference/engine/gfx/texture_REF.gc b/test/decompiler/reference/engine/gfx/texture_REF.gc index d452b79a17..9be03dab00 100644 --- a/test/decompiler/reference/engine/gfx/texture_REF.gc +++ b/test/decompiler/reference/engine/gfx/texture_REF.gc @@ -33,18 +33,15 @@ ((obj texture-page) (arg0 memory-usage-block) (arg1 int)) (set! (-> arg0 length) (max 80 (-> arg0 length))) (set! (-> arg0 data 79 name) "texture") - (set! (-> arg0 data 79 count) (+ (-> arg0 data 79 count) (-> obj length))) + (+! (-> arg0 data 79 count) (-> obj length)) (let ((v1-7 (- (asize-of obj) (the-as int (* (-> obj size) 4))))) (dotimes (a0-6 (-> obj length)) (if (-> obj data a0-6) (+! v1-7 64) ) ) - (set! (-> arg0 data 79 used) (+ (-> arg0 data 79 used) v1-7)) - (set! - (-> arg0 data 79 total) - (+ (-> arg0 data 79 total) (logand -16 (+ v1-7 15))) - ) + (+! (-> arg0 data 79 used) v1-7) + (+! (-> arg0 data 79 total) (logand -16 (+ v1-7 15))) ) obj ) @@ -693,7 +690,7 @@ texture-pool ((obj texture-pool) (word-count int)) (let ((v0-0 (-> obj cur))) - (set! (-> obj cur) (+ (-> obj cur) word-count)) + (+! (-> obj cur) word-count) v0-0 ) ) @@ -1701,17 +1698,14 @@ (when tfrag-page (set! (-> level upload-size 0) 0) (if (< distance 81920.0) - (set! + (+! (-> level upload-size 0) - (+ - (-> level upload-size 0) - (upload-vram-pages - obj - (-> obj segment-near) - tfrag-page - 2 - (the-as bucket-id tfrag-bucket) - ) + (upload-vram-pages + obj + (-> obj segment-near) + tfrag-page + 2 + (the-as bucket-id tfrag-bucket) ) ) ) @@ -1719,32 +1713,26 @@ ((= distance 4095996000.0) ) ((< 102400.0 distance) - (set! + (+! (-> level upload-size 0) - (+ - (-> level upload-size 0) - (upload-vram-pages - obj - (-> obj segment-common) - tfrag-page - 0 - (the-as bucket-id tfrag-bucket) - ) + (upload-vram-pages + obj + (-> obj segment-common) + tfrag-page + 0 + (the-as bucket-id tfrag-bucket) ) ) ) (else - (set! + (+! (-> level upload-size 0) - (+ - (-> level upload-size 0) - (upload-vram-pages - obj - (-> obj segment-common) - tfrag-page - -2 - (the-as bucket-id tfrag-bucket) - ) + (upload-vram-pages + obj + (-> obj segment-common) + tfrag-page + -2 + (the-as bucket-id tfrag-bucket) ) ) ) @@ -2911,10 +2899,7 @@ (-> v1-2 loaded-texture-page (-> v1-2 loaded-texture-page-count)) obj ) - (set! - (-> v1-2 loaded-texture-page-count) - (+ (-> v1-2 loaded-texture-page-count) 1) - ) + (+! (-> v1-2 loaded-texture-page-count) 1) ) ) (set! (-> obj segment 1 dest) (-> obj segment 0 size)) diff --git a/test/decompiler/reference/engine/gfx/tie/prototype_REF.gc b/test/decompiler/reference/engine/gfx/tie/prototype_REF.gc index ce162db556..8b56f3443c 100644 --- a/test/decompiler/reference/engine/gfx/tie/prototype_REF.gc +++ b/test/decompiler/reference/engine/gfx/tie/prototype_REF.gc @@ -57,13 +57,10 @@ ((obj prototype-array-tie) (arg0 memory-usage-block) (arg1 int)) (set! (-> arg0 length) (max 1 (-> arg0 length))) (set! (-> arg0 data 0 name) (symbol->string 'drawable-group)) - (set! (-> arg0 data 0 count) (+ (-> arg0 data 0 count) 1)) + (+! (-> arg0 data 0 count) 1) (let ((v1-8 (asize-of obj))) - (set! (-> arg0 data 0 used) (+ (-> arg0 data 0 used) v1-8)) - (set! - (-> arg0 data 0 total) - (+ (-> arg0 data 0 total) (logand -16 (+ v1-8 15))) - ) + (+! (-> arg0 data 0 used) v1-8) + (+! (-> arg0 data 0 total) (logand -16 (+ v1-8 15))) ) (dotimes (s3-0 (-> obj length)) (mem-usage (-> obj array-data s3-0) arg0 arg1) @@ -85,25 +82,19 @@ ) (set! (-> arg0 length) (max 81 (-> arg0 length))) (set! (-> arg0 data 80 name) "string") - (set! (-> arg0 data 80 count) (+ (-> arg0 data 80 count) 1)) + (+! (-> arg0 data 80 count) 1) (let ((v1-13 ((method-of-type string asize-of) (the-as string (-> obj name))))) - (set! (-> arg0 data 80 used) (+ (-> arg0 data 80 used) v1-13)) - (set! - (-> arg0 data 80 total) - (+ (-> arg0 data 80 total) (logand -16 (+ v1-13 15))) - ) + (+! (-> arg0 data 80 used) v1-13) + (+! (-> arg0 data 80 total) (logand -16 (+ v1-13 15))) ) (when (nonzero? (-> obj tie-colors)) (set! (-> arg0 length) (max 17 (-> arg0 length))) (set! (-> arg0 data 16 name) "tie-pal") - (set! (-> arg0 data 16 count) (+ (-> arg0 data 16 count) 1)) + (+! (-> arg0 data 16 count) 1) (let ((v1-25 (asize-of (-> obj tie-colors)))) - (set! (-> arg0 data 16 used) (+ (-> arg0 data 16 used) v1-25)) - (set! - (-> arg0 data 16 total) - (+ (-> arg0 data 16 total) (logand -16 (+ v1-25 15))) - ) + (+! (-> arg0 data 16 used) v1-25) + (+! (-> arg0 data 16 total) (logand -16 (+ v1-25 15))) ) ) (if (nonzero? (-> obj collide-frag)) @@ -119,13 +110,10 @@ ((obj prototype-inline-array-shrub) (arg0 memory-usage-block) (arg1 int)) (set! (-> arg0 length) (max 1 (-> arg0 length))) (set! (-> arg0 data 0 name) (symbol->string 'drawable-group)) - (set! (-> arg0 data 0 count) (+ (-> arg0 data 0 count) 1)) + (+! (-> arg0 data 0 count) 1) (let ((v1-8 (asize-of obj))) - (set! (-> arg0 data 0 used) (+ (-> arg0 data 0 used) v1-8)) - (set! - (-> arg0 data 0 total) - (+ (-> arg0 data 0 total) (logand -16 (+ v1-8 15))) - ) + (+! (-> arg0 data 0 used) v1-8) + (+! (-> arg0 data 0 total) (logand -16 (+ v1-8 15))) ) (dotimes (s3-0 (-> obj length)) (mem-usage (-> obj data s3-0) arg0 arg1) @@ -140,13 +128,10 @@ ((obj prototype-bucket-shrub) (arg0 memory-usage-block) (arg1 int)) (set! (-> arg0 length) (max 25 (-> arg0 length))) (set! (-> arg0 data 24 name) "prototype-bucket-shrub") - (set! (-> arg0 data 24 count) (+ (-> arg0 data 24 count) 1)) + (+! (-> arg0 data 24 count) 1) (let ((v1-5 112)) - (set! (-> arg0 data 24 used) (+ (-> arg0 data 24 used) v1-5)) - (set! - (-> arg0 data 24 total) - (+ (-> arg0 data 24 total) (logand -16 (+ v1-5 15))) - ) + (+! (-> arg0 data 24 used) v1-5) + (+! (-> arg0 data 24 total) (logand -16 (+ v1-5 15))) ) (dotimes (s3-0 4) (let ((a0-5 (-> obj geometry s3-0))) @@ -157,14 +142,11 @@ ) (set! (-> arg0 length) (max 81 (-> arg0 length))) (set! (-> arg0 data 80 name) "string") - (set! (-> arg0 data 80 count) (+ (-> arg0 data 80 count) 1)) + (+! (-> arg0 data 80 count) 1) (let ((v1-22 ((method-of-type string asize-of) (the-as string (-> obj name))))) - (set! (-> arg0 data 80 used) (+ (-> arg0 data 80 used) v1-22)) - (set! - (-> arg0 data 80 total) - (+ (-> arg0 data 80 total) (logand -16 (+ v1-22 15))) - ) + (+! (-> arg0 data 80 used) v1-22) + (+! (-> arg0 data 80 total) (logand -16 (+ v1-22 15))) ) obj ) diff --git a/test/decompiler/reference/engine/gfx/wind_REF.gc b/test/decompiler/reference/engine/gfx/wind_REF.gc index aa18c88467..ee0a149cf2 100644 --- a/test/decompiler/reference/engine/gfx/wind_REF.gc +++ b/test/decompiler/reference/engine/gfx/wind_REF.gc @@ -14,7 +14,7 @@ (set! (-> arg0 wind-normal x) (cos f30-1)) (set! (-> arg0 wind-normal z) (sin f30-1)) ) - (set! (-> arg0 wind-time) (+ (-> arg0 wind-time) 1)) + (+! (-> arg0 wind-time) 1) (let* ((s4-0 (logand (-> arg0 wind-time) 63)) (f0-4 (rand-vu-float-range 0.0 100.0)) (v1-5 (/ (-> arg0 wind-time) (the-as uint 120))) diff --git a/test/decompiler/reference/engine/math/matrix_REF.gc b/test/decompiler/reference/engine/math/matrix_REF.gc index 041359c519..c83c5de3e4 100644 --- a/test/decompiler/reference/engine/math/matrix_REF.gc +++ b/test/decompiler/reference/engine/math/matrix_REF.gc @@ -222,12 +222,7 @@ ;; Used lq/sq (defun vector3s-matrix*! ((dst vector3s) (vec vector3s) (mat matrix)) (let ((temp-vec3 (new-stack-vector0))) - (let ((v1-0 temp-vec3)) - (set! (-> v1-0 x) (-> vec x)) - (set! (-> v1-0 y) (-> vec y)) - (set! (-> v1-0 z) (-> vec z)) - (set! (-> v1-0 w) 1.0) - ) + (set-vector! temp-vec3 (-> vec x) (-> vec y) (-> vec z) 1.0) (vector-matrix*! temp-vec3 temp-vec3 mat) (set! (-> dst x) (-> temp-vec3 x)) (set! (-> dst y) (-> temp-vec3 y)) @@ -240,12 +235,7 @@ ;; Used lq/sq (defun vector3s-rotate*! ((dst vector3s) (vec vector3s) (mat matrix)) (let ((temp-vec3 (new-stack-vector0))) - (let ((v1-0 temp-vec3)) - (set! (-> v1-0 x) (-> vec x)) - (set! (-> v1-0 y) (-> vec y)) - (set! (-> v1-0 z) (-> vec z)) - (set! (-> v1-0 w) 1.0) - ) + (set-vector! temp-vec3 (-> vec x) (-> vec y) (-> vec z) 1.0) (vector-rotate*! temp-vec3 temp-vec3 mat) (set! (-> dst x) (-> temp-vec3 x)) (set! (-> dst y) (-> temp-vec3 y)) @@ -733,11 +723,12 @@ (sin-vec (new 'stack-no-clear 'vector)) (cos-vec (new 'stack-no-clear 'vector)) ) - (let ((v1-0 sincos-input)) - (set! (-> v1-0 x) (-> rots-deg x)) - (set! (-> v1-0 y) (- (-> rots-deg y) (-> rots-deg z))) - (set! (-> v1-0 z) (-> rots-deg z)) - (set! (-> v1-0 w) 1.0) + (set-vector! + sincos-input + (-> rots-deg x) + (- (-> rots-deg y) (-> rots-deg z)) + (-> rots-deg z) + 1.0 ) (vector-sincos! sin-vec cos-vec sincos-input) (let ((cos-y (-> cos-vec y)) diff --git a/test/decompiler/reference/engine/math/quaternion_REF.gc b/test/decompiler/reference/engine/math/quaternion_REF.gc index 217a8fe76a..4f5f004d95 100644 --- a/test/decompiler/reference/engine/math/quaternion_REF.gc +++ b/test/decompiler/reference/engine/math/quaternion_REF.gc @@ -1090,12 +1090,7 @@ (s5-0 (new 'stack-no-clear 'vector)) ) (quaternion->matrix gp-0 arg0) - (let ((v1-1 s5-0)) - (set! (-> v1-1 x) 0.0) - (set! (-> v1-1 y) 0.0) - (set! (-> v1-1 z) 1.0) - (set! (-> v1-1 w) 1.0) - ) + (set-vector! s5-0 0.0 0.0 1.0 1.0) (vector-matrix*! s5-0 s5-0 gp-0) (vector-y-angle s5-0) ) diff --git a/test/decompiler/reference/engine/math/vector_REF.gc b/test/decompiler/reference/engine/math/vector_REF.gc index 67b29f663b..2c2fb4729c 100644 --- a/test/decompiler/reference/engine/math/vector_REF.gc +++ b/test/decompiler/reference/engine/math/vector_REF.gc @@ -319,13 +319,13 @@ ) (cond ((>= max-step step-len) - (set! (-> vec x) (+ (-> vec x) x-step)) - (set! (-> vec z) (+ (-> vec z) z-step)) + (+! (-> vec x) x-step) + (+! (-> vec z) z-step) ) (else (let ((f2-6 (/ max-step step-len))) - (set! (-> vec x) (+ (-> vec x) (* f2-6 x-step))) - (set! (-> vec z) (+ (-> vec z) (* f2-6 z-step))) + (+! (-> vec x) (* f2-6 x-step)) + (+! (-> vec z) (* f2-6 z-step)) ) ) ) @@ -349,13 +349,13 @@ ) (cond ((>= max-step step-len) - (set! (-> vec y) (+ (-> vec y) y-step)) - (set! (-> vec z) (+ (-> vec z) z-step)) + (+! (-> vec y) y-step) + (+! (-> vec z) z-step) ) (else (let ((step-scale (/ max-step step-len))) - (set! (-> vec y) (+ (-> vec y) (* step-scale y-step))) - (set! (-> vec z) (+ (-> vec z) (* step-scale z-step))) + (+! (-> vec y) (* step-scale y-step)) + (+! (-> vec z) (* step-scale z-step)) ) ) ) @@ -385,15 +385,15 @@ ) (cond ((>= max-step step-len) - (set! (-> vec x) (+ (-> vec x) x-step)) - (set! (-> vec y) (+ (-> vec y) y-step)) - (set! (-> vec z) (+ (-> vec z) z-step)) + (+! (-> vec x) x-step) + (+! (-> vec y) y-step) + (+! (-> vec z) z-step) ) (else (let ((step-scale (/ max-step step-len))) - (set! (-> vec x) (+ (-> vec x) (* step-scale x-step))) - (set! (-> vec y) (+ (-> vec y) (* step-scale y-step))) - (set! (-> vec z) (+ (-> vec z) (* step-scale z-step))) + (+! (-> vec x) (* step-scale x-step)) + (+! (-> vec y) (* step-scale y-step)) + (+! (-> vec z) (* step-scale z-step)) ) ) ) @@ -1185,11 +1185,12 @@ ;; definition for function rand-vu-sphere-point! (defun rand-vu-sphere-point! ((arg0 vector) (arg1 float)) - (let ((s4-0 arg0)) - (set! (-> s4-0 x) (rand-vu-float-range -1.0 1.0)) - (set! (-> s4-0 y) (rand-vu-float-range -1.0 1.0)) - (set! (-> s4-0 z) (rand-vu-float-range -1.0 1.0)) - (set! (-> s4-0 w) 1.0) + (set-vector! + arg0 + (rand-vu-float-range -1.0 1.0) + (rand-vu-float-range -1.0 1.0) + (rand-vu-float-range -1.0 1.0) + 1.0 ) (vector-normalize! arg0 (rand-vu-float-range 0.0 arg1)) ) diff --git a/test/decompiler/reference/engine/physics/trajectory_REF.gc b/test/decompiler/reference/engine/physics/trajectory_REF.gc index e415e84c51..2f7776369b 100644 --- a/test/decompiler/reference/engine/physics/trajectory_REF.gc +++ b/test/decompiler/reference/engine/physics/trajectory_REF.gc @@ -5,10 +5,10 @@ ;; Used lq/sq (defmethod TODO-RENAME-9 trajectory ((obj trajectory) (arg0 float) (arg1 vector)) (set! (-> arg1 quad) (-> obj initial-position quad)) - (set! (-> arg1 x) (+ (-> arg1 x) (* arg0 (-> obj initial-velocity x)))) - (set! (-> arg1 y) (+ (-> arg1 y) (* arg0 (-> obj initial-velocity y)))) - (set! (-> arg1 z) (+ (-> arg1 z) (* arg0 (-> obj initial-velocity z)))) - (set! (-> arg1 y) (+ (-> arg1 y) (* (* (* 0.5 arg0) arg0) (-> obj gravity)))) + (+! (-> arg1 x) (* arg0 (-> obj initial-velocity x))) + (+! (-> arg1 y) (* arg0 (-> obj initial-velocity y))) + (+! (-> arg1 z) (* arg0 (-> obj initial-velocity z))) + (+! (-> arg1 y) (* (* (* 0.5 arg0) arg0) (-> obj gravity))) arg1 ) @@ -19,7 +19,7 @@ trajectory ((obj trajectory) (arg0 float) (arg1 vector)) (set! (-> arg1 quad) (-> obj initial-velocity quad)) - (set! (-> arg1 y) (+ (-> arg1 y) (* arg0 (-> obj gravity)))) + (+! (-> arg1 y) (* arg0 (-> obj gravity))) arg1 ) diff --git a/test/decompiler/reference/engine/ps2/rpc-h_REF.gc b/test/decompiler/reference/engine/ps2/rpc-h_REF.gc index 37db005a76..08d17e558d 100644 --- a/test/decompiler/reference/engine/ps2/rpc-h_REF.gc +++ b/test/decompiler/reference/engine/ps2/rpc-h_REF.gc @@ -223,7 +223,7 @@ (set! v1-0 (-> obj current)) ) (let ((v0-2 (&+ (-> v1-0 base) (* (-> v1-0 elt-used) (-> v1-0 elt-size))))) - (set! (-> v1-0 elt-used) (+ (-> v1-0 elt-used) 1)) + (+! (-> v1-0 elt-used) 1) v0-2 ) ) @@ -232,7 +232,7 @@ ;; definition for method 11 of type rpc-buffer-pair (defmethod decrement-elt-used rpc-buffer-pair ((obj rpc-buffer-pair)) (if (> (-> obj current elt-used) 0) - (set! (-> obj current elt-used) (+ (-> obj current elt-used) -1)) + (+! (-> obj current elt-used) -1) ) 0 ) diff --git a/test/decompiler/reference/engine/ps2/timer_REF.gc b/test/decompiler/reference/engine/ps2/timer_REF.gc index 9c154536a7..986da8e977 100644 --- a/test/decompiler/reference/engine/ps2/timer_REF.gc +++ b/test/decompiler/reference/engine/ps2/timer_REF.gc @@ -100,12 +100,9 @@ (set! (-> arg0 begin-level) 0) 0 (.mfc0 a1-0 Count) - (set! + (+! (-> arg0 prev-time-elapsed) - (+ - (-> arg0 prev-time-elapsed) - (the-as uint (- a1-0 (the-as int (-> arg0 start-time)))) - ) + (the-as uint (- a1-0 (the-as int (-> arg0 start-time)))) ) ) (the-as uint 0) @@ -120,7 +117,7 @@ (.mfc0 v1-3 Count) (set! (-> arg0 start-time) (the-as uint v1-3)) ) - (set! (-> arg0 begin-level) (+ (-> arg0 begin-level) 1)) + (+! (-> arg0 begin-level) 1) 0 ) @@ -129,16 +126,13 @@ ;; WARN: Unsupported inline assembly instruction kind - [mfc0 a1, Count] (defun stopwatch-end ((arg0 stopwatch)) (local-vars (a1-0 int)) - (set! (-> arg0 begin-level) (+ (-> arg0 begin-level) -1)) + (+! (-> arg0 begin-level) -1) (when (zero? (-> arg0 begin-level)) 0 (.mfc0 a1-0 Count) - (set! + (+! (-> arg0 prev-time-elapsed) - (+ - (-> arg0 prev-time-elapsed) - (the-as uint (- a1-0 (the-as int (-> arg0 start-time)))) - ) + (the-as uint (- a1-0 (the-as int (-> arg0 start-time)))) ) ) (the-as uint 0) diff --git a/test/decompiler/reference/engine/target/joint-mod-h_REF.gc b/test/decompiler/reference/engine/target/joint-mod-h_REF.gc index c2353db5ad..60a5d302e9 100644 --- a/test/decompiler/reference/engine/target/joint-mod-h_REF.gc +++ b/test/decompiler/reference/engine/target/joint-mod-h_REF.gc @@ -89,12 +89,7 @@ (set! (-> obj process) proc) (set! (-> obj joint) (-> proc node-list data joint-idx)) (set-mode! obj mode) - (let ((twist-max (-> obj twist-max))) - (set! (-> twist-max x) 8192.0) - (set! (-> twist-max y) 11832.889) - (set! (-> twist-max z) 0.0) - (set! (-> twist-max w) 1.0) - ) + (set-vector! (-> obj twist-max) 8192.0 11832.889 0.0 1.0) (set! (-> obj up) (the-as uint 1)) (set! (-> obj nose) (the-as uint 2)) (set! (-> obj ear) (the-as uint 0)) @@ -150,12 +145,7 @@ (set! (-> joint param2) #f) (vector-reset! (-> obj trans)) (quaternion-identity! (-> obj quat)) - (let ((v1-2 (-> obj scale))) - (set! (-> v1-2 x) 1.0) - (set! (-> v1-2 y) 1.0) - (set! (-> v1-2 z) 1.0) - (set! (-> v1-2 w) 1.0) - ) + (set-vector! (-> obj scale) 1.0 1.0 1.0 1.0) (set! (-> obj max-dist) (the-as meters #f)) ) (((joint-mod-handler-mode joint-set*)) @@ -164,12 +154,7 @@ (set! (-> joint param2) #f) (vector-reset! (-> obj trans)) (quaternion-identity! (-> obj quat)) - (let ((v1-4 (-> obj scale))) - (set! (-> v1-4 x) 1.0) - (set! (-> v1-4 y) 1.0) - (set! (-> v1-4 z) 1.0) - (set! (-> v1-4 w) 1.0) - ) + (set-vector! (-> obj scale) 1.0 1.0 1.0 1.0) (set! (-> obj max-dist) (the-as meters #f)) ) ) @@ -724,13 +709,8 @@ ) (vector*! (-> arg1 scale) (-> arg1 scale) (-> s5-0 scale)) (cspace<-parented-transformq-joint! arg0 arg1) - (when (-> s5-0 max-dist) - (let ((v1-4 (-> arg0 bone scale))) - (set! (-> v1-4 x) 1.0) - (set! (-> v1-4 y) 1.0) - (set! (-> v1-4 z) 1.0) - (set! (-> v1-4 w) 1.0) - ) + (if (-> s5-0 max-dist) + (set-vector! (-> arg0 bone scale) 1.0 1.0 1.0 1.0) ) ) 0 @@ -797,7 +777,7 @@ (f2-1 (* 6.28318 (-> s4-0 wheel-radius))) (f0-4 (* (* f1-0 (/ 1.0 f2-1)) f0-3)) ) - (set! (-> s4-0 angle) (+ (-> s4-0 angle) f0-4)) + (+! (-> s4-0 angle) f0-4) ) ) (quaternion-vector-angle! @@ -830,12 +810,7 @@ (set! (-> v0-0 wheel-radius) arg2) (set! (-> v0-0 wheel-axis) arg3) (set! (-> v0-0 angle) 0.0) - (let ((v1-2 (-> v0-0 last-position))) - (set! (-> v1-2 x) 0.0) - (set! (-> v1-2 y) 0.0) - (set! (-> v1-2 z) 0.0) - (set! (-> v1-2 w) 1.0) - ) + (set-vector! (-> v0-0 last-position) 0.0 0.0 0.0 1.0) (let ((v1-5 (-> arg0 node-list data arg1))) (set! (-> v1-5 param0) joint-mod-wheel-callback) (set! (-> v1-5 param1) v0-0) diff --git a/test/decompiler/reference/engine/ui/credits_REF.gc b/test/decompiler/reference/engine/ui/credits_REF.gc index 43286e566f..af1256340f 100644 --- a/test/decompiler/reference/engine/ui/credits_REF.gc +++ b/test/decompiler/reference/engine/ui/credits_REF.gc @@ -140,12 +140,9 @@ (print-game-text s3-0 gp-0 #f (the int f30-1) 22) ) ) - (set! + (+! (-> gp-0 origin y) - (+ - (-> gp-0 origin y) - (the float (-> *title-credits-spacing* (+ s5-1 s4-1))) - ) + (the float (-> *title-credits-spacing* (+ s5-1 s4-1))) ) ) ) @@ -206,7 +203,7 @@ (set! v1-13 25) ) ) - (set! (-> s5-0 origin y) (+ (-> s5-0 origin y) (the float v1-13))) + (+! (-> s5-0 origin y) (the float v1-13)) (+! gp-0 1) ) #f diff --git a/test/decompiler/reference/engine/util/sync-info_REF.gc b/test/decompiler/reference/engine/util/sync-info_REF.gc index a546f28ea3..96ac1d5079 100644 --- a/test/decompiler/reference/engine/util/sync-info_REF.gc +++ b/test/decompiler/reference/engine/util/sync-info_REF.gc @@ -400,17 +400,14 @@ ) ) ) - (set! (-> obj vel) (+ (-> obj vel) f0-3)) + (+! (-> obj vel) f0-3) ) (set! (-> obj vel) (fmin (-> obj max-vel) (fmax (- (-> obj max-vel)) (-> obj vel))) ) (set! (-> obj vel) (* (-> obj vel) (-> obj damping))) - (set! - (-> obj value) - (+ (-> obj value) (* (-> obj vel) (-> *display* time-adjust-ratio))) - ) + (+! (-> obj value) (* (-> obj vel) (-> *display* time-adjust-ratio))) (-> obj value) ) diff --git a/test/decompiler/reference/kernel/gkernel_REF.gc b/test/decompiler/reference/kernel/gkernel_REF.gc index 5c97fd1cb3..9f6d723562 100644 --- a/test/decompiler/reference/kernel/gkernel_REF.gc +++ b/test/decompiler/reference/kernel/gkernel_REF.gc @@ -1058,7 +1058,7 @@ (shrink-heap obj s3-0) (relocate s3-0 (- s2-0)) (set! (-> obj first-gap) (find-gap obj s4-1)) - (set! (-> obj compact-count) (+ (-> obj compact-count) 1)) + (+! (-> obj compact-count) 1) ) ) ) diff --git a/test/decompiler/test_FormExpressionBuild2.cpp b/test/decompiler/test_FormExpressionBuild2.cpp index e3baaa022d..2d1713e641 100644 --- a/test/decompiler/test_FormExpressionBuild2.cpp +++ b/test/decompiler/test_FormExpressionBuild2.cpp @@ -1484,12 +1484,7 @@ TEST_F(FormRegressionTest, VectorNewInlineProp) { std::string expected = "(begin\n" " (let ((s5-0 (new-stack-vector0)))\n" - " (let ((v1-0 s5-0))\n" - " (set! (-> v1-0 x) (-> arg1 x))\n" - " (set! (-> v1-0 y) (-> arg1 y))\n" - " (set! (-> v1-0 z) (-> arg1 z))\n" - " (set! (-> v1-0 w) 0.0)\n" - " )\n" + " (set-vector! s5-0 (-> arg1 x) (-> arg1 y) (-> arg1 z) 0.0)\n" " (vector-matrix*! s5-0 s5-0 arg2)\n" " (set! (-> arg0 x) (-> s5-0 x))\n" " (set! (-> arg0 y) (-> s5-0 y))\n" diff --git a/test/decompiler/test_gkernel_decomp.cpp b/test/decompiler/test_gkernel_decomp.cpp index 69141cc049..526c5cbe29 100644 --- a/test/decompiler/test_gkernel_decomp.cpp +++ b/test/decompiler/test_gkernel_decomp.cpp @@ -2613,7 +2613,7 @@ TEST_F(FormRegressionTest, ExprMethod16DeadPoolHeap) { " (shrink-heap arg0 s3-0)\n" " (relocate s3-0 (- s2-0))\n" " (set! (-> arg0 first-gap) (find-gap arg0 s4-1))\n" - " (set! (-> arg0 compact-count) (+ (-> arg0 compact-count) 1))\n" + " (+! (-> arg0 compact-count) 1)\n" " )\n" " )\n" " )\n"