diff --git a/decompiler/ObjectFile/ObjectFileDB.h b/decompiler/ObjectFile/ObjectFileDB.h index b9441f0220..948492b807 100644 --- a/decompiler/ObjectFile/ObjectFileDB.h +++ b/decompiler/ObjectFile/ObjectFileDB.h @@ -82,12 +82,14 @@ struct LetRewriteStats { int call_parent_state_handler = 0; int suspend_for = 0; int font_method = 0; + int light_trail_tracker_spawn = 0; int total() const { return dotimes + countdown + abs + abs2 + unused + ja + case_no_else + case_with_else + set_vector + set_vector2 + send_event + font_context_meth + proc_new + attack_info + vector_dot + rand_float_gen + set_let + with_dma_buf_add_bucket + dma_buffer_add_gs_set + - launch_particles + call_parent_state_handler + suspend_for + font_method; + launch_particles + call_parent_state_handler + suspend_for + font_method + + light_trail_tracker_spawn; } std::string print() const { @@ -117,6 +119,7 @@ struct LetRewriteStats { out += fmt::format(" call_parent_state_handler: {}\n", call_parent_state_handler); out += fmt::format(" suspend_for: {}\n", suspend_for); out += fmt::format(" font_method: {}\n", font_method); + out += fmt::format(" light_trail_tracker_spawn: {}\n", light_trail_tracker_spawn); return out; } @@ -143,6 +146,7 @@ struct LetRewriteStats { result.launch_particles = launch_particles + other.launch_particles; result.call_parent_state_handler = call_parent_state_handler + other.call_parent_state_handler; result.suspend_for = suspend_for + other.suspend_for; + result.light_trail_tracker_spawn = light_trail_tracker_spawn + other.light_trail_tracker_spawn; return result; } @@ -168,6 +172,7 @@ struct LetRewriteStats { launch_particles += other.launch_particles; call_parent_state_handler += other.call_parent_state_handler; suspend_for += other.suspend_for; + light_trail_tracker_spawn += other.light_trail_tracker_spawn; return *this; } }; diff --git a/decompiler/analysis/insert_lets.cpp b/decompiler/analysis/insert_lets.cpp index 97e0813360..db32dcbf20 100644 --- a/decompiler/analysis/insert_lets.cpp +++ b/decompiler/analysis/insert_lets.cpp @@ -1810,6 +1810,308 @@ FormElement* rewrite_part_tracker_new_jak2(const std::string& type, ->try_as_single_element(); } +FormElement* rewrite_light_trail_tracker_spawn(LetElement* in, const Env& env, FormPool& pool) { + // (let ((s5-0 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) + // (set! (-> s5-0 tracked-obj) (process->handle this)) + // (set! (-> s5-0 appearance) *blue-shot-trail*) + // (set! (-> s5-0 max-num-crumbs) (the int (* 0.2 (the float (-> s5-0 appearance max-age))))) + // (set! (-> s5-0 track-immediately?) #t) + // (let* ((v1-30 (estimate-light-trail-mem-usage + // (the-as uint (-> s5-0 max-num-crumbs)) + // (the-as uint (= (-> s5-0 appearance lie-mode) (lie-mode use-two-strips))))) + // (s4-0 (get-process *default-dead-pool* light-trail-tracker-blue-3 (+ v1-30 8192) 1))) + // (when s4-0 + // (let ((t9-4 (method-of-type process activate))) + // (t9-4 s4-0 this "light-trail" (the-as pointer #x70004000))) + // (run-now-in-process s4-0 light-trail-tracker-init-by-other s5-0) + // (-> s4-0 ppointer)))) + // -> + // (light-trail-tracker-spawn light-trail-tracker-blue-3 :to this + // :params ((tracked-obj (process->handle this)) + // (appearance *blue-shot-trail*) + // (max-num-crumbs (the int (* 0.2 (the float (-> *blue-shot-trail* max-age))))) + // (track-immediately? #t))) + if (env.version < GameVersion::Jak3) { + return nullptr; + } + + if (in->entries().size() != 1) { + return nullptr; + } + + auto params_var = in->entries().at(0).dest; + const auto& params_reg = params_var.reg(); + auto params_src = in->entries().at(0).src->try_as_element(); + if (!params_src) { + return nullptr; + } + const auto& params_type = params_src->entry().ref_type; + if (!env.dts->ts.tc(TypeSpec("light-trail-tracker-spawn-params"), params_type)) { + return nullptr; + } + if (params_src->entry().hint.container_type != StackStructureHint::ContainerType::NONE) { + return nullptr; + } + + auto body = in->body(); + if (body->size() < 2) { + return nullptr; + } + + // grab all the field setters + std::vector> fields; + std::unordered_map field_values; + for (size_t idx = 0; idx + 1 < body->size(); ++idx) { + auto set_mr = match(Matcher::set(Matcher::deref(Matcher::reg(params_reg), false, + {DerefTokenMatcher::any_string(0)}), + Matcher::any(1)), + body->at(idx)); + if (!set_mr.matched) { + return nullptr; + } + const auto& field_name = set_mr.maps.strings.at(0); + auto field_val = set_mr.maps.forms.at(1); + fields.emplace_back(field_name, field_val); + field_values[field_name] = field_val; + } + + // (let ((v1-30 (estimate...))) (let ((s4-0 (get-process...))) (when s4-0 ...))) + auto mem_let = dynamic_cast(body->at(body->size() - 1)); + if (!mem_let || mem_let->entries().size() != 1 || mem_let->body()->size() != 1) { + return nullptr; + } + + // (v1-30 (estimate-light-trail-mem-usage ...)) + auto mem_var = mem_let->entries().at(0).dest; + auto est = mem_let->entries().at(0).src->try_as_element(); + if (!est || est->op().kind() != GenericOperator::Kind::FUNCTION_EXPR || !est->op().func() || + !est->op().func()->to_form(env).is_symbol("estimate-light-trail-mem-usage")) { + return nullptr; + } + + auto proc_let = dynamic_cast(mem_let->body()->at(0)); + if (!proc_let || proc_let->entries().size() != 1 || proc_let->body()->size() != 1) { + return nullptr; + } + + // (s4-0 (get-process *default-dead-pool* light-trail-tracker-blue-3 (+ v1-30 8192) 1)) + auto proc_var = proc_let->entries().at(0).dest; + const auto& proc_reg = proc_var.reg(); + auto gp_mr = match(Matcher::func("get-process", {Matcher::any(0), Matcher::any_symbol(1), + Matcher::any(2), Matcher::any_integer(3)}), + proc_let->entries().at(0).src); + if (!gp_mr.matched) { + return nullptr; + } + const auto& proc_type = gp_mr.maps.strings.at(1); + if (!env.dts->ts.tc(TypeSpec("light-trail-tracker"), TypeSpec(proc_type))) { + return nullptr; + } + auto from_form = gp_mr.maps.forms.at(0); + auto unk = gp_mr.maps.ints.at(3); + // stack size is always (+ 8192) + if (!match(Matcher::op(GenericOpMatcher::or_match( + {GenericOpMatcher::fixed(FixedOperatorKind::ADDITION), + GenericOpMatcher::fixed(FixedOperatorKind::ADDITION_PTR)}), + {Matcher::reg(mem_var.reg()), Matcher::integer(8192)}), + gp_mr.maps.forms.at(2)) + .matched) { + return nullptr; + } + + // check the when + auto cast_type = TypeSpec("pointer", {TypeSpec(proc_type)}); + auto when_matcher = Matcher::if_no_else( + Matcher::op(GenericOpMatcher::condition(IR2_Condition::Kind::TRUTHY), + {Matcher::reg(proc_reg)}), + Matcher::begin({Matcher::any(0), + Matcher::func_with_rest(Matcher::constant_token("run-now-in-process"), + {Matcher::reg(proc_reg), Matcher::any(1)}), + Matcher::any(2)})); + + auto mr_with_shell = rewrite_shelled_return_form( + when_matcher, proc_let->body()->at(0), env, pool, + [&](FormElement* s_in, const MatchResult& /*mr*/, const Env& env_, FormPool& pool_) -> Form* { + auto as_when = dynamic_cast(s_in); + if (!as_when) { + return nullptr; + } + const auto& when_body = as_when->entries.front().body->elts(); + if (when_body.size() != 3) { + return nullptr; + } + + // (let ((t9-4 (method-of-type process activate))) + // (t9-4 s4-0 this "light-trail" (the-as pointer #x70004000))) + auto activate_let = dynamic_cast(when_body.at(0)); + if (!activate_let || activate_let->entries().size() != 1 || + activate_let->body()->size() != 1) { + return nullptr; + } + if (!match(Matcher::op_fixed( + FixedOperatorKind::METHOD_OF_TYPE, + {Matcher::symbol("process"), Matcher::constant_token("activate")}), + activate_let->entries().at(0).src) + .matched) { + return nullptr; + } + auto act_fn_reg = activate_let->entries().at(0).dest; + auto act_call_mr = match( + Matcher::func(Matcher::reg(act_fn_reg.reg()), {Matcher::reg(proc_reg), Matcher::any(0), + Matcher::any(1), Matcher::any(2)}), + activate_let->body()->at(0)); + if (!act_call_mr.matched) { + return nullptr; + } + auto to_form = act_call_mr.maps.forms.at(0); + auto name_form = act_call_mr.maps.forms.at(1); + auto stack_form = act_call_mr.maps.forms.at(2); + + // (run-now-in-process s4-0 light-trail-tracker-init-by-other s5-0) + auto run_gen = dynamic_cast(when_body.at(1)); + if (!run_gen || !run_gen->op().func() || + !run_gen->op().func()->to_form(env_).is_symbol("run-now-in-process")) { + return nullptr; + } + if (run_gen->elts().size() != 3) { + return nullptr; + } + auto init_form = run_gen->elts().at(1); + if (!match(Matcher::reg(params_reg), run_gen->elts().at(2)).matched) { + return nullptr; + } + + // (-> s4-0 ppointer) + auto pptr_matcher = + Matcher::deref(Matcher::reg(proc_reg), false, {DerefTokenMatcher::string("ppointer")}); + auto pptr_let = dynamic_cast(when_body.at(2)); + if (pptr_let) { + auto new_pptr = rewrite_empty_let(pptr_let, env, pool); + if (!new_pptr || !match(pptr_matcher, new_pptr).matched) { + return nullptr; + } + } else if (!match(pptr_matcher, when_body.at(2)).matched) { + return nullptr; + } + + auto is_simple_base = [](Form* f) { + auto single = f->try_as_single_element(); + if (!single) { + return false; + } + return dynamic_cast(single) || dynamic_cast(single) || + dynamic_cast(single) || + dynamic_cast(single); + }; + + // dry run to check we can substitute all the derefs + for (auto& field : fields) { + Form* fval = field.second; + RegAccessSet uses; + fval->collect_vars(uses, true); + int var_uses = 0; + for (const auto& u : uses) { + if (u.reg() == params_reg) { + var_uses++; + } + } + if (var_uses == 0) { + continue; + } + int subst_derefs = 0; + bool bad = false; + fval->apply_form([&](Form* f) { + for (auto* e : f->elts()) { + auto deref = dynamic_cast(e); + if (!deref || !match(Matcher::reg(params_reg), deref->base()).matched) { + continue; + } + subst_derefs++; + if (deref->tokens().empty() || + deref->tokens().at(0).kind() != DerefToken::Kind::FIELD_NAME) { + bad = true; + continue; + } + auto it = field_values.find(deref->tokens().at(0).field_name()); + if (it == field_values.end() || !is_simple_base(it->second)) { + bad = true; + } + } + }); + if (bad || subst_derefs != var_uses) { + return nullptr; + } + } + + // do the inlining + for (auto& field : fields) { + Form* fval = field.second; + fval->apply_form([&](Form* f) { + for (auto*& e : f->elts()) { + auto deref = dynamic_cast(e); + if (!deref || !match(Matcher::reg(params_reg), deref->base()).matched) { + continue; + } + auto repl_base = field_values.at(deref->tokens().at(0).field_name()); + std::vector rest(deref->tokens().begin() + 1, deref->tokens().end()); + if (rest.empty()) { + e = repl_base->try_as_single_element(); + } else { + e = pool_.alloc_element(repl_base, deref->is_addr_of(), rest); + } + } + }); + } + + std::vector args; + args.push_back(pool_.form(proc_type)); + if (!init_form->to_form(env_).is_symbol("light-trail-tracker-init-by-other")) { + ja_push_form_to_args(pool_, args, init_form, "init"); + } + if (params_type != TypeSpec("light-trail-tracker-spawn-params")) { + args.push_back(pool_.form(":params-type")); + args.push_back(pool_.form(params_type.base_type())); + } + if (!from_form->to_form(env_).is_symbol("*default-dead-pool*")) { + ja_push_form_to_args(pool_, args, from_form, "from"); + } + ja_push_form_to_args(pool_, args, to_form, "to"); + auto name_str = dynamic_cast(name_form->try_as_single_element()); + if (!name_str || name_str->value() != "light-trail") { + ja_push_form_to_args(pool_, args, name_form, "name"); + } + if (stack_form->to_string(env_) != "(the-as pointer #x70004000)") { + ja_push_form_to_args(pool_, args, stack_form, "stack"); + } + if (unk != 1) { + args.push_back(pool_.form(":unk")); + args.push_back(pool_.form(fmt::format("{}", unk))); + } + + std::vector param_pairs; + for (auto& [fname, fval] : fields) { + param_pairs.push_back(pool_.form( + GenericOperator::make_function(pool_.form(fname)), fval)); + } + args.push_back(pool_.form(":param-list")); + auto params_head = GenericOperator::make_function(param_pairs.at(0)); + std::vector params_rest(param_pairs.begin() + 1, param_pairs.end()); + args.push_back(pool_.form(params_head, params_rest)); + + return pool_.form( + GenericOperator::make_function( + pool_.form("light-trail-tracker-spawn")), + args); + }, + &cast_type); + + if (!std::get<0>(mr_with_shell).matched) { + return nullptr; + } + + return std::get<1>(mr_with_shell)->try_as_single_element(); +} + FormElement* rewrite_call_parent_state_handler(LetElement* in, const Env& env, FormPool& pool) { // (let ((t9-3 (-> (find-parent-state) code))) // (if t9-3 @@ -2501,6 +2803,12 @@ FormElement* rewrite_let(LetElement* in, const Env& env, FormPool& pool, LetRewr return as_abs; } + auto as_light_trail_tracker_spawn = rewrite_light_trail_tracker_spawn(in, env, pool); + if (as_light_trail_tracker_spawn) { + stats.light_trail_tracker_spawn++; + return as_light_trail_tracker_spawn; + } + auto as_proc_new = rewrite_proc_new(in, env, pool); if (as_proc_new) { stats.proc_new++; diff --git a/decompiler/config/jak3/ntsc_v1/type_casts.jsonc b/decompiler/config/jak3/ntsc_v1/type_casts.jsonc index f9ccac2666..d845e6a9a7 100644 --- a/decompiler/config/jak3/ntsc_v1/type_casts.jsonc +++ b/decompiler/config/jak3/ntsc_v1/type_casts.jsonc @@ -2346,7 +2346,7 @@ [213, "s0", "continue-point"], [222, "s0", "continue-point"] ], - "master-choose-entity": [[162, "s0", "(pointer camera-slave)"]], + "master-choose-entity": [["_stack_", 96, "res-tag"], [162, "s0", "(pointer camera-slave)"]], "bones-mtx-calc-execute": [ [[126, 154], "a0", "pris-mtx"], [[126, 154], "a1", "pris-mtx"], diff --git a/goal_src/jak3/engine/camera/cam-master.gc b/goal_src/jak3/engine/camera/cam-master.gc index 56fc984d49..fa2982220c 100644 --- a/goal_src/jak3/engine/camera/cam-master.gc +++ b/goal_src/jak3/engine/camera/cam-master.gc @@ -359,7 +359,6 @@ ) (defbehavior master-choose-entity camera-master ((arg0 cam-setting-data)) - (local-vars (r0-0 uint128) (v1-44 uint128)) (let ((s5-0 (entity-by-name (-> arg0 entity-name)))) (set! (-> arg0 real-entity-name) #f) (when s5-0 @@ -376,8 +375,8 @@ (format 0 "ERROR : camera entity '~S' didn't produce a state~%" (res-lump-struct s5-0 'name structure)) ) ) - (let* ((sv-96 0) - (s4-1 (res-lump-data s5-0 'alternates pointer :tag-ptr (the-as (pointer res-tag) (& sv-96)))) + (let* ((sv-96 (new 'static 'res-tag)) + (s4-1 (res-lump-data s5-0 'alternates pointer :tag-ptr (& sv-96))) ) (when s4-1 (let ((s3-1 (process-spawn @@ -395,79 +394,71 @@ (setup-slave-for-hopefull (the-as camera-slave (ppointer->process s3-1))) (format 0 "ERROR : primary region activate failed~%") ) - (let ((s2-1 0)) - (while (begin - (let ((v1-43 (the-as uint128 sv-96))) - (.pcpyud v1-44 v1-43 r0-0) - ) - (< s2-1 (shr (* (the-as int v1-44) 2) 49)) - ) - (let ((sv-128 (entity-by-name (the-as string (-> (the-as (pointer uint32) (&+ s4-1 (* s2-1 4)))))))) - (cond - (sv-128 - (let ((s1-2 (cam-state-from-entity sv-128))) - (cond - (s1-2 - (let* ((sv-112 (get-process *camera-dead-pool* camera-slave #x4000 1)) - (s0-0 (when sv-112 - ((method-of-type camera-slave activate) - (the-as camera-slave sv-112) - *camera* - "camera-slave" - (the-as pointer #x70004000) - ) - (run-now-in-process sv-112 cam-slave-init s1-2 sv-128) - (-> sv-112 ppointer) - ) + (dotimes (s2-1 (the-as int (-> sv-96 elt-count))) + (let ((sv-128 (entity-by-name (the-as string (-> (the-as (pointer uint32) (&+ s4-1 (* s2-1 4)))))))) + (cond + (sv-128 + (let ((s1-2 (cam-state-from-entity sv-128))) + (cond + (s1-2 + (let* ((sv-112 (get-process *camera-dead-pool* camera-slave #x4000 1)) + (s0-0 (when sv-112 + ((method-of-type camera-slave activate) + (the-as camera-slave sv-112) + *camera* + "camera-slave" + (the-as pointer #x70004000) + ) + (run-now-in-process sv-112 cam-slave-init s1-2 sv-128) + (-> sv-112 ppointer) ) - ) - (cond - (s0-0 - (setup-slave-for-hopefull (the-as camera-slave (ppointer->process s0-0))) - (cond - ((master-is-hopeful-better? - (the-as camera-slave (ppointer->process s3-1)) - (the-as camera-slave (ppointer->process s0-0)) ) - (if s3-1 - (deactivate (-> s3-1 0)) - ) - (set! s3-1 (the-as (pointer camera-slave) s0-0)) - (set! (-> arg0 real-entity-name) (the-as string (-> (the-as (pointer uint32) (&+ s4-1 (* s2-1 4)))))) - (set! (-> arg0 cam-mode) (the-as symbol s1-2)) + ) + (cond + (s0-0 + (setup-slave-for-hopefull (the-as camera-slave (ppointer->process s0-0))) + (cond + ((master-is-hopeful-better? + (the-as camera-slave (ppointer->process s3-1)) + (the-as camera-slave (ppointer->process s0-0)) ) - (else - (deactivate (-> s0-0 0)) - ) + (if s3-1 + (deactivate (-> s3-1 0)) + ) + (set! s3-1 (the-as (pointer camera-slave) s0-0)) + (set! (-> arg0 real-entity-name) (the-as string (-> (the-as (pointer uint32) (&+ s4-1 (* s2-1 4)))))) + (set! (-> arg0 cam-mode) (the-as symbol s1-2)) + ) + (else + (deactivate (-> s0-0 0)) ) ) - (else - (format 0 "ERROR : alternate region activate failed~%") - ) + ) + (else + (format 0 "ERROR : alternate region activate failed~%") ) ) ) - (else - (format - 0 - "ERROR : alternate camera region '~S' didn't produce a state~%" - (res-lump-struct sv-128 'name structure) - ) + ) + (else + (format + 0 + "ERROR : alternate camera region '~S' didn't produce a state~%" + (res-lump-struct sv-128 'name structure) ) ) ) ) - (else - (format - 0 - "ERROR : alternate '~S' not found for '~S'~%" - (-> (the-as (pointer uint32) (&+ s4-1 (* s2-1 4)))) - (res-lump-struct s5-0 'name structure) - ) + ) + (else + (format + 0 + "ERROR : alternate '~S' not found for '~S'~%" + (-> (the-as (pointer uint32) (&+ s4-1 (* s2-1 4)))) + (res-lump-struct s5-0 'name structure) ) ) ) - (+! s2-1 1) ) ) (if s3-1 diff --git a/goal_src/jak3/engine/common-obs/water.gc b/goal_src/jak3/engine/common-obs/water.gc index dee53ceb34..22c8b1f063 100644 --- a/goal_src/jak3/engine/common-obs/water.gc +++ b/goal_src/jak3/engine/common-obs/water.gc @@ -183,34 +183,21 @@ (set! (-> *water-wake-trail* frame-stagger) (the-as uint 1)) (defmethod water-control-method-17 ((this water-control)) - (when (and (not (handle->process (-> this ripple))) - (>= (+ (current-time) (seconds -0.1)) (-> this enter-water-time)) - ) - (let ((s5-0 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> s5-0 tracked-obj) (process->handle (-> this process))) - (set! (-> s5-0 appearance) *water-wake-trail*) - (set! (-> s5-0 max-num-crumbs) (the int (* 0.25 (the float (-> s5-0 appearance max-age))))) - (let* ((v1-18 - (estimate-light-trail-mem-usage - (the-as uint (-> s5-0 max-num-crumbs)) - (the-as uint (= (-> s5-0 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s4-0 (get-process *default-dead-pool* light-trail-tracker-water (+ v1-18 8192) 1)) - ) - (set! (-> this ripple) - (ppointer->handle (when s4-0 - (let ((t9-2 (method-of-type process activate))) - (t9-2 s4-0 (-> this process) "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s4-0 light-trail-tracker-init-by-other s5-0) - (-> s4-0 ppointer) - ) + (if (and (not (handle->process (-> this ripple))) + (>= (+ (current-time) (seconds -0.1)) (-> this enter-water-time)) + ) + (set! (-> this ripple) + (ppointer->handle (light-trail-tracker-spawn + light-trail-tracker-water + :to (-> this process) + :param-list ((tracked-obj (process->handle (-> this process))) + (appearance *water-wake-trail*) + (max-num-crumbs (the int (* 0.25 (the float (-> *water-wake-trail* max-age))))) + ) ) - ) - ) + ) + ) ) - ) 0 (none) ) diff --git a/goal_src/jak3/engine/gfx/sprite/particles/light-trails-h.gc b/goal_src/jak3/engine/gfx/sprite/particles/light-trails-h.gc index 718b04a98a..493b2d1620 100644 --- a/goal_src/jak3/engine/gfx/sprite/particles/light-trails-h.gc +++ b/goal_src/jak3/engine/gfx/sprite/particles/light-trails-h.gc @@ -20,6 +20,29 @@ (reset 2) ) +(defmacro light-trail-tracker-spawn (type + &key (init light-trail-tracker-init-by-other) + &key (params-type light-trail-tracker-spawn-params) + &key (from *default-dead-pool*) + &key (to self) + &key (name "light-trail") + &key (stack *scratch-memory-top*) + &key (unk 1) + &key (param-list ())) + "Specialized `process-spawn` macro for [[light-trail-tracker]]s. + Returns a pointer to the new process, or `#f` (or is it 0?) if something goes wrong." + (with-gensyms (params mem proc) + `(let ((,params (new 'stack-no-clear ',params-type))) + ,@(apply (lambda (x) `(set! (-> ,params ,(car x)) ,(cadr x))) param-list) + (let* ((,mem (estimate-light-trail-mem-usage + (the uint (-> ,params max-num-crumbs)) + (the uint (= (-> ,params appearance lie-mode) (lie-mode use-two-strips))))) + (,proc (get-process ,from ,type (+ ,mem 8192) ,unk))) + (when ,proc + ((method-of-type process activate) ,proc ,to ,name ,stack) + (run-now-in-process ,proc ,init ,params) + (-> ,proc ppointer)))))) + ;; DECOMP BEGINS (deftype color-array (inline-array-class) diff --git a/goal_src/jak3/engine/target/gun/gun-blue-shot.gc b/goal_src/jak3/engine/target/gun/gun-blue-shot.gc index 522f9a30f5..ff0dc9b5c7 100644 --- a/goal_src/jak3/engine/target/gun/gun-blue-shot.gc +++ b/goal_src/jak3/engine/target/gun/gun-blue-shot.gc @@ -385,26 +385,14 @@ ) (set! (-> this random-travel-distance) (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-17))))) ) - (let ((s5-0 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> s5-0 tracked-obj) (process->handle this)) - (set! (-> s5-0 appearance) *blue-shot-trail*) - (set! (-> s5-0 max-num-crumbs) (the int (* 0.2 (the float (-> s5-0 appearance max-age))))) - (set! (-> s5-0 track-immediately?) #t) - (let* ((v1-30 (estimate-light-trail-mem-usage - (the-as uint (-> s5-0 max-num-crumbs)) - (the-as uint (= (-> s5-0 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s4-0 (get-process *default-dead-pool* light-trail-tracker-blue-3 (+ v1-30 8192) 1)) - ) - (when s4-0 - (let ((t9-4 (method-of-type process activate))) - (t9-4 s4-0 this "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s4-0 light-trail-tracker-init-by-other s5-0) - (-> s4-0 ppointer) - ) - ) + (light-trail-tracker-spawn + light-trail-tracker-blue-3 + :to this + :param-list ((tracked-obj (process->handle this)) + (appearance *blue-shot-trail*) + (max-num-crumbs (the int (* 0.2 (the float (-> *blue-shot-trail* max-age))))) + (track-immediately? #t) + ) ) 0 (none) diff --git a/goal_src/jak3/engine/target/gun/gun-red-shot.gc b/goal_src/jak3/engine/target/gun/gun-red-shot.gc index c7c8e02552..1dcdfab6db 100644 --- a/goal_src/jak3/engine/target/gun/gun-red-shot.gc +++ b/goal_src/jak3/engine/target/gun/gun-red-shot.gc @@ -143,26 +143,14 @@ (vector-copy! (-> this root scale) v1-15) ) (set! (-> this immediate-detonation?) #f) - (let ((s5-2 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> s5-2 tracked-obj) (process->handle this)) - (set! (-> s5-2 appearance) *red-shot-3-trail*) - (set! (-> s5-2 max-num-crumbs) (the int (* 0.5 (the float (-> s5-2 appearance max-age))))) - (set! (-> s5-2 track-immediately?) #t) - (let* ((v1-28 (estimate-light-trail-mem-usage - (the-as uint (-> s5-2 max-num-crumbs)) - (the-as uint (= (-> s5-2 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s4-2 (get-process *default-dead-pool* light-trail-tracker-projectile (+ v1-28 8192) 1)) - ) - (when s4-2 - (let ((t9-9 (method-of-type process activate))) - (t9-9 s4-2 this "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s4-2 light-trail-tracker-init-by-other s5-2) - (-> s4-2 ppointer) - ) - ) + (light-trail-tracker-spawn + light-trail-tracker-projectile + :to this + :param-list ((tracked-obj (process->handle this)) + (appearance *red-shot-3-trail*) + (max-num-crumbs (the int (* 0.5 (the float (-> *red-shot-3-trail* max-age))))) + (track-immediately? #t) + ) ) 0 (none) diff --git a/goal_src/jak3/engine/target/gun/gun-yellow-shot.gc b/goal_src/jak3/engine/target/gun/gun-yellow-shot.gc index 654ad53679..9c4d83a30e 100644 --- a/goal_src/jak3/engine/target/gun/gun-yellow-shot.gc +++ b/goal_src/jak3/engine/target/gun/gun-yellow-shot.gc @@ -1631,26 +1631,14 @@ ) (set! (-> this muzzle-flash-part) (-> *part-id-table* 274)) (sound-play "yellow2-shot" :pitch 1) - (let ((s5-1 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> s5-1 tracked-obj) (process->handle this)) - (set! (-> s5-1 appearance) *yellow-shot-2-trail*) - (set! (-> s5-1 max-num-crumbs) (the int (* 0.25 (the float (-> s5-1 appearance max-age))))) - (set! (-> s5-1 track-immediately?) #t) - (let* ((v1-34 (estimate-light-trail-mem-usage - (the-as uint (-> s5-1 max-num-crumbs)) - (the-as uint (= (-> s5-1 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (gp-1 (get-process *default-dead-pool* light-trail-tracker-projectile (+ v1-34 8192) 1)) - ) - (when gp-1 - (let ((t9-9 (method-of-type process activate))) - (t9-9 gp-1 *target* "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process gp-1 light-trail-tracker-init-by-other s5-1) - (-> gp-1 ppointer) - ) - ) + (light-trail-tracker-spawn + light-trail-tracker-projectile + :to *target* + :param-list ((tracked-obj (process->handle this)) + (appearance *yellow-shot-2-trail*) + (max-num-crumbs (the int (* 0.25 (the float (-> *yellow-shot-2-trail* max-age))))) + (track-immediately? #t) + ) ) (none) ) diff --git a/goal_src/jak3/levels/city/port/attack/h-torpedo.gc b/goal_src/jak3/levels/city/port/attack/h-torpedo.gc index 98bbf2a621..37b0c46f8e 100644 --- a/goal_src/jak3/levels/city/port/attack/h-torpedo.gc +++ b/goal_src/jak3/levels/city/port/attack/h-torpedo.gc @@ -1507,26 +1507,14 @@ (set! (-> (the-as particle-local-space-info s3-0) flags) (part-local-space-flags)) (s4-1 s5-1 (the-as particle-local-space-info s3-0)) ) - (let ((s5-2 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> s5-2 tracked-obj) (process->handle this)) - (set! (-> s5-2 appearance) *torpedo-wake-trail*) - (set! (-> s5-2 max-num-crumbs) (the int (* 0.5 (the float (-> s5-2 appearance max-age))))) - (set! (-> s5-2 track-immediately?) #t) - (let* ((v1-34 (estimate-light-trail-mem-usage - (the-as uint (-> s5-2 max-num-crumbs)) - (the-as uint (= (-> s5-2 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s4-2 (get-process *default-dead-pool* light-trail-tracker-torpedo (+ v1-34 8192) 1)) - ) - (when s4-2 - (let ((t9-15 (method-of-type process activate))) - (t9-15 s4-2 this "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s4-2 light-trail-tracker-init-by-other s5-2) - (-> s4-2 ppointer) - ) - ) + (light-trail-tracker-spawn + light-trail-tracker-torpedo + :to this + :param-list ((tracked-obj (process->handle this)) + (appearance *torpedo-wake-trail*) + (max-num-crumbs (the int (* 0.5 (the float (-> *torpedo-wake-trail* max-age))))) + (track-immediately? #t) + ) ) (none) ) diff --git a/goal_src/jak3/levels/desert/hover/des-beast-2.gc b/goal_src/jak3/levels/desert/hover/des-beast-2.gc index 8eb1678c0c..0c73ecdd68 100644 --- a/goal_src/jak3/levels/desert/hover/des-beast-2.gc +++ b/goal_src/jak3/levels/desert/hover/des-beast-2.gc @@ -420,26 +420,14 @@ (set! (-> this desired-target) (-> *vehicle-info* handle-by-vehicle-type 14)) (set! (-> this blast-damage) (the-as basic #t)) (set! (-> this vehicle-damage-factor) 0.333) - (let ((s5-1 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> s5-1 tracked-obj) (process->handle this)) - (set! (-> s5-1 appearance) *beast-grenade-trail*) - (set! (-> s5-1 max-num-crumbs) (the int (* 0.5 (the float (-> s5-1 appearance max-age))))) - (set! (-> s5-1 track-immediately?) #t) - (let* ((v1-28 (estimate-light-trail-mem-usage - (the-as uint (-> s5-1 max-num-crumbs)) - (the-as uint (= (-> s5-1 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s4-1 (get-process *default-dead-pool* light-trail-tracker-projectile (+ v1-28 8192) 1)) - ) - (when s4-1 - (let ((t9-6 (method-of-type process activate))) - (t9-6 s4-1 *entity-pool* "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s4-1 light-trail-tracker-init-by-other s5-1) - (-> s4-1 ppointer) - ) - ) + (light-trail-tracker-spawn + light-trail-tracker-projectile + :to *entity-pool* + :param-list ((tracked-obj (process->handle this)) + (appearance *beast-grenade-trail*) + (max-num-crumbs (the int (* 0.5 (the float (-> *beast-grenade-trail* max-age))))) + (track-immediately? #t) + ) ) (set-vector! (-> this root scale) 16.0 16.0 16.0 1.0) (set! (-> this minimap) (add-icon! *minimap* this (the-as uint 135) (the-as int #f) (the-as vector #t) 0)) diff --git a/goal_src/jak3/levels/desert/hover/des-beast.gc b/goal_src/jak3/levels/desert/hover/des-beast.gc index 4d473b9f1a..7133fd8cb1 100644 --- a/goal_src/jak3/levels/desert/hover/des-beast.gc +++ b/goal_src/jak3/levels/desert/hover/des-beast.gc @@ -937,26 +937,14 @@ (set! (-> this blast-radius) 40960.0) (set! (-> this max-speed) 90112.0) (set! (-> this timeout) (seconds 4)) - (let ((s5-1 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> s5-1 tracked-obj) (process->handle this)) - (set! (-> s5-1 appearance) *beast-grenade-trail*) - (set! (-> s5-1 max-num-crumbs) (the int (* 0.5 (the float (-> s5-1 appearance max-age))))) - (set! (-> s5-1 track-immediately?) #t) - (let* ((v1-22 (estimate-light-trail-mem-usage - (the-as uint (-> s5-1 max-num-crumbs)) - (the-as uint (= (-> s5-1 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s4-1 (get-process *default-dead-pool* light-trail-tracker-projectile (+ v1-22 8192) 1)) - ) - (when s4-1 - (let ((t9-6 (method-of-type process activate))) - (t9-6 s4-1 this "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s4-1 light-trail-tracker-init-by-other s5-1) - (-> s4-1 ppointer) - ) - ) + (light-trail-tracker-spawn + light-trail-tracker-projectile + :to this + :param-list ((tracked-obj (process->handle this)) + (appearance *beast-grenade-trail*) + (max-num-crumbs (the int (* 0.5 (the float (-> *beast-grenade-trail* max-age))))) + (track-immediately? #t) + ) ) (let ((v1-26 (new 'stack-no-clear 'vector))) (set! (-> v1-26 x) 8.0) diff --git a/goal_src/jak3/levels/desert/hover/mh-flyer.gc b/goal_src/jak3/levels/desert/hover/mh-flyer.gc index 7ba17ecd6d..707f9b017c 100644 --- a/goal_src/jak3/levels/desert/hover/mh-flyer.gc +++ b/goal_src/jak3/levels/desert/hover/mh-flyer.gc @@ -443,26 +443,14 @@ ) ) ) - (let ((s5-5 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> s5-5 tracked-obj) (process->handle this)) - (set! (-> s5-5 appearance) *mh-flyer-missile-trail*) - (set! (-> s5-5 max-num-crumbs) (the int (* 0.5 (the float (-> s5-5 appearance max-age))))) - (set! (-> s5-5 track-immediately?) #t) - (let* ((v0-8 (estimate-light-trail-mem-usage - (the-as uint (-> s5-5 max-num-crumbs)) - (the-as uint (= (-> s5-5 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s4-2 (get-process *default-dead-pool* light-trail-tracker-projectile (+ v0-8 8192) 1)) - ) - (when s4-2 - (let ((t9-10 (method-of-type process activate))) - (t9-10 s4-2 *entity-pool* "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s4-2 light-trail-tracker-init-by-other s5-5) - (-> s4-2 ppointer) - ) - ) + (light-trail-tracker-spawn + light-trail-tracker-projectile + :to *entity-pool* + :param-list ((tracked-obj (process->handle this)) + (appearance *mh-flyer-missile-trail*) + (max-num-crumbs (the int (* 0.5 (the float (-> *mh-flyer-missile-trail* max-age))))) + (track-immediately? #t) + ) ) (set! (-> this minimap) (add-icon! *minimap* this (the-as uint 135) (the-as int #f) (the-as vector #t) 0)) (quaternion-copy! (-> this turn-quat) *unity-quaternion*) diff --git a/goal_src/jak3/levels/desert/wvehicle/wcar-projectiles.gc b/goal_src/jak3/levels/desert/wvehicle/wcar-projectiles.gc index 9aa7a4c129..edec98a462 100644 --- a/goal_src/jak3/levels/desert/wvehicle/wcar-projectiles.gc +++ b/goal_src/jak3/levels/desert/wvehicle/wcar-projectiles.gc @@ -472,31 +472,18 @@ (set! (-> v1-13 w) 1.0) (vector-copy! (-> this root scale) v1-13) ) - (let ((s5-1 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> s5-1 tracked-obj) (process->handle this)) - (set! (-> s5-1 appearance) *toad-grenade-trail*) - (set! (-> s5-1 max-num-crumbs) (the int (* 0.5 (the float (-> s5-1 appearance max-age))))) - (set! (-> s5-1 track-immediately?) #t) - (let* ((v1-26 - (estimate-light-trail-mem-usage - (the-as uint (-> s5-1 max-num-crumbs)) - (the-as uint (= (-> s5-1 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s4-1 (get-process *default-dead-pool* light-trail-tracker-projectile (+ v1-26 8192) 1)) - ) - (set! (-> this trail-tracker) - (ppointer->handle (when s4-1 - (let ((t9-6 (method-of-type process activate))) - (t9-6 s4-1 this "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s4-1 light-trail-tracker-init-by-other s5-1) - (-> s4-1 ppointer) - ) - ) - ) - ) - ) + (set! (-> this trail-tracker) + (ppointer->handle (light-trail-tracker-spawn + light-trail-tracker-projectile + :to this + :param-list ((tracked-obj (process->handle this)) + (appearance *toad-grenade-trail*) + (max-num-crumbs (the int (* 0.5 (the float (-> *toad-grenade-trail* max-age))))) + (track-immediately? #t) + ) + ) + ) + ) 0 (none) ) diff --git a/goal_src/jak3/levels/factory/factory-manager.gc b/goal_src/jak3/levels/factory/factory-manager.gc index 811e73c27f..5613e4d82b 100644 --- a/goal_src/jak3/levels/factory/factory-manager.gc +++ b/goal_src/jak3/levels/factory/factory-manager.gc @@ -963,31 +963,18 @@ (set! (-> self draw light-index) (the-as uint 10)) (logclear! (-> self mask) (process-mask actor-pause)) (process-entity-status! self (entity-perm-status no-kill) #t) - (let ((gp-1 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> gp-1 tracked-obj) (process->handle self)) - (set! (-> gp-1 appearance) *factory-fighter-trail*) - (set! (-> gp-1 max-num-crumbs) (the int (* 0.25 (the float (-> gp-1 appearance max-age))))) - (set! (-> gp-1 track-immediately?) #t) - (let* ((v1-38 - (estimate-light-trail-mem-usage - (the-as uint (-> gp-1 max-num-crumbs)) - (the-as uint (= (-> gp-1 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s5-1 (get-process *default-dead-pool* light-trail-tracker-vehicle (+ v1-38 8192) 1)) - ) - (set! (-> self light-trail) - (ppointer->handle (when s5-1 - (let ((t9-13 (method-of-type process activate))) - (t9-13 s5-1 self "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s5-1 light-trail-tracker-init-by-other gp-1) - (-> s5-1 ppointer) - ) - ) - ) - ) - ) + (set! (-> self light-trail) + (ppointer->handle (light-trail-tracker-spawn + light-trail-tracker-vehicle + :to self + :param-list ((tracked-obj (process->handle self)) + (appearance *factory-fighter-trail*) + (max-num-crumbs (the int (* 0.25 (the float (-> *factory-fighter-trail* max-age))))) + (track-immediately? #t) + ) + ) + ) + ) (go-virtual idle) ) diff --git a/goal_src/jak3/levels/wascity/dm-flyer.gc b/goal_src/jak3/levels/wascity/dm-flyer.gc index 81e89eaa27..19013f10ea 100644 --- a/goal_src/jak3/levels/wascity/dm-flyer.gc +++ b/goal_src/jak3/levels/wascity/dm-flyer.gc @@ -542,26 +542,14 @@ ) ) ) - (let ((s5-5 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> s5-5 tracked-obj) (process->handle this)) - (set! (-> s5-5 appearance) *dm-flyer-missile-trail*) - (set! (-> s5-5 max-num-crumbs) (the int (* 0.5 (the float (-> s5-5 appearance max-age))))) - (set! (-> s5-5 track-immediately?) #t) - (let* ((v0-12 (estimate-light-trail-mem-usage - (the-as uint (-> s5-5 max-num-crumbs)) - (the-as uint (= (-> s5-5 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s4-2 (get-process *default-dead-pool* light-trail-tracker-projectile (+ v0-12 8192) 1)) - ) - (when s4-2 - (let ((t9-14 (method-of-type process activate))) - (t9-14 s4-2 *entity-pool* "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s4-2 light-trail-tracker-init-by-other s5-5) - (-> s4-2 ppointer) - ) - ) + (light-trail-tracker-spawn + light-trail-tracker-projectile + :to *entity-pool* + :param-list ((tracked-obj (process->handle this)) + (appearance *dm-flyer-missile-trail*) + (max-num-crumbs (the int (* 0.5 (the float (-> *dm-flyer-missile-trail* max-age))))) + (track-immediately? #t) + ) ) (set! (-> this minimap) (add-icon! *minimap* this (the-as uint 135) (the-as int #f) (the-as vector #t) 0)) (quaternion-copy! (-> this turn-quat) *unity-quaternion*) diff --git a/goal_src/jak3/levels/wascity/maker-projectile.gc b/goal_src/jak3/levels/wascity/maker-projectile.gc index 8b59b52afe..36f058d8b2 100644 --- a/goal_src/jak3/levels/wascity/maker-projectile.gc +++ b/goal_src/jak3/levels/wascity/maker-projectile.gc @@ -861,26 +861,14 @@ (set! (-> this max-speed) 450560.0) (set! (-> this timeout) (seconds 12)) (set! (-> this gravity) 40960.0) - (let ((s5-2 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> s5-2 tracked-obj) (process->handle this)) - (set! (-> s5-2 appearance) *maker-grenade-trail*) - (set! (-> s5-2 max-num-crumbs) (the int (* 0.5 (the float (-> s5-2 appearance max-age))))) - (set! (-> s5-2 track-immediately?) #t) - (let* ((v1-32 (estimate-light-trail-mem-usage - (the-as uint (-> s5-2 max-num-crumbs)) - (the-as uint (= (-> s5-2 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s4-1 (get-process *default-dead-pool* light-trail-tracker-projectile (+ v1-32 8192) 1)) - ) - (when s4-1 - (let ((t9-11 (method-of-type process activate))) - (t9-11 s4-1 this "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s4-1 light-trail-tracker-init-by-other s5-2) - (-> s4-1 ppointer) - ) - ) + (light-trail-tracker-spawn + light-trail-tracker-projectile + :to this + :param-list ((tracked-obj (process->handle this)) + (appearance *maker-grenade-trail*) + (max-num-crumbs (the int (* 0.5 (the float (-> *maker-grenade-trail* max-age))))) + (track-immediately? #t) + ) ) (set-vector! (-> this root scale) 16.0 16.0 16.0 1.0) (set! (-> this minimap) #f) diff --git a/goal_src/jak3/levels/wascity/wasdef-manager.gc b/goal_src/jak3/levels/wascity/wasdef-manager.gc index 7985dfde83..8bf6d693ac 100644 --- a/goal_src/jak3/levels/wascity/wasdef-manager.gc +++ b/goal_src/jak3/levels/wascity/wasdef-manager.gc @@ -2172,16 +2172,17 @@ (set! *maker-num-alive* (+ *maker-num-alive* 1)) (set! *maker-num-visible* (+ *maker-num-visible* 1)) (if (-> self draw shadow) - (set! (-> self draw shadow-ctrl) (new - 'process - 'shadow-control - -81920.0 - 163840.0 - 573440.0 - (the-as vector #f) - (shadow-flags shdf00 shdf04) - 4096000.0 - ) + (set! (-> self draw shadow-ctrl) + (new + 'process + 'shadow-control + -81920.0 + 163840.0 + 573440.0 + (the-as vector #f) + (shadow-flags shdf00 shdf04) + 4096000.0 + ) ) (set! (-> self draw shadow-ctrl) *enemy-dummy-shadow-control*) ) @@ -2269,31 +2270,18 @@ (set! (-> self draw lod-set lod 0 dist) 14336000.0) (logclear! (-> self mask) (process-mask actor-pause)) (logior! (-> self mask) (process-mask no-kill)) - (let ((gp-1 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> gp-1 tracked-obj) (process->handle self)) - (set! (-> gp-1 appearance) *maker-entry-trail*) - (set! (-> gp-1 max-num-crumbs) (the int (* 0.5 (the float (-> gp-1 appearance max-age))))) - (set! (-> gp-1 track-immediately?) #t) - (let* ((v1-104 - (estimate-light-trail-mem-usage - (the-as uint (-> gp-1 max-num-crumbs)) - (the-as uint (= (-> gp-1 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s5-1 (get-process *default-dead-pool* light-trail-tracker-projectile (+ v1-104 8192) 1)) - ) - (set! (-> self trail-handle) - (ppointer->handle (when s5-1 - (let ((t9-22 (method-of-type process activate))) - (t9-22 s5-1 self "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s5-1 light-trail-tracker-init-by-other gp-1) - (-> s5-1 ppointer) - ) - ) - ) - ) - ) + (set! (-> self trail-handle) + (ppointer->handle (light-trail-tracker-spawn + light-trail-tracker-projectile + :to self + :param-list ((tracked-obj (process->handle self)) + (appearance *maker-entry-trail*) + (max-num-crumbs (the int (* 0.5 (the float (-> *maker-entry-trail* max-age))))) + (track-immediately? #t) + ) + ) + ) + ) (go-virtual flying) ) diff --git a/test/decompiler/reference/jak3/decompiler-macros.gc b/test/decompiler/reference/jak3/decompiler-macros.gc index a913e937f9..bc8fd7dee7 100644 --- a/test/decompiler/reference/jak3/decompiler-macros.gc +++ b/test/decompiler/reference/jak3/decompiler-macros.gc @@ -1762,5 +1762,28 @@ `(* ,x ,x) ) +(defmacro light-trail-tracker-spawn (type + &key (init light-trail-tracker-init-by-other) + &key (params-type light-trail-tracker-spawn-params) + &key (from *default-dead-pool*) + &key (to self) + &key (name "light-trail") + &key (stack *scratch-memory-top*) + &key (unk 1) + &key (param-list ())) + "Specialized `process-spawn` macro for [[light-trail-tracker]]s. + Returns a pointer to the new process, or `#f` (or is it 0?) if something goes wrong." + (with-gensyms (params mem proc) + `(let ((,params (new 'stack-no-clear ',params-type))) + ,@(apply (lambda (x) `(set! (-> ,params ,(car x)) ,(cadr x))) param-list) + (let* ((,mem (estimate-light-trail-mem-usage + (the uint (-> ,params max-num-crumbs)) + (the uint (= (-> ,params appearance lie-mode) (lie-mode use-two-strips))))) + (,proc (get-process ,from ,type (+ ,mem 8192) ,unk))) + (when ,proc + ((method-of-type process activate) ,proc ,to ,name ,stack) + (run-now-in-process ,proc ,init ,params) + (-> ,proc ppointer)))))) + (import "goal_src/jak3/engine/data/tpages.gc") (import "goal_src/jak3/engine/data/textures.gc") \ No newline at end of file diff --git a/test/decompiler/reference/jak3/engine/camera/cam-master_REF.gc b/test/decompiler/reference/jak3/engine/camera/cam-master_REF.gc index c1fe396b78..cbe01f4d21 100644 --- a/test/decompiler/reference/jak3/engine/camera/cam-master_REF.gc +++ b/test/decompiler/reference/jak3/engine/camera/cam-master_REF.gc @@ -364,7 +364,6 @@ ;; definition for function master-choose-entity ;; INFO: Used lq/sq (defbehavior master-choose-entity camera-master ((arg0 cam-setting-data)) - (local-vars (r0-0 uint128) (v1-44 uint128)) (let ((s5-0 (entity-by-name (-> arg0 entity-name)))) (set! (-> arg0 real-entity-name) #f) (when s5-0 @@ -381,8 +380,8 @@ (format 0 "ERROR : camera entity '~S' didn't produce a state~%" (res-lump-struct s5-0 'name structure)) ) ) - (let* ((sv-96 0) - (s4-1 (res-lump-data s5-0 'alternates pointer :tag-ptr (the-as (pointer res-tag) (& sv-96)))) + (let* ((sv-96 (new 'static 'res-tag)) + (s4-1 (res-lump-data s5-0 'alternates pointer :tag-ptr (& sv-96))) ) (when s4-1 (let ((s3-1 (process-spawn @@ -400,79 +399,71 @@ (setup-slave-for-hopefull (the-as camera-slave (ppointer->process s3-1))) (format 0 "ERROR : primary region activate failed~%") ) - (let ((s2-1 0)) - (while (begin - (let ((v1-43 (the-as uint128 sv-96))) - (.pcpyud v1-44 v1-43 r0-0) - ) - (< s2-1 (shr (* (the-as int v1-44) 2) 49)) - ) - (let ((sv-128 (entity-by-name (the-as string (-> (the-as (pointer uint32) (&+ s4-1 (* s2-1 4)))))))) - (cond - (sv-128 - (let ((s1-2 (cam-state-from-entity sv-128))) - (cond - (s1-2 - (let* ((sv-112 (get-process *camera-dead-pool* camera-slave #x4000 1)) - (s0-0 (when sv-112 - ((method-of-type camera-slave activate) - (the-as camera-slave sv-112) - *camera* - "camera-slave" - (the-as pointer #x70004000) - ) - (run-now-in-process sv-112 cam-slave-init s1-2 sv-128) - (-> sv-112 ppointer) - ) + (dotimes (s2-1 (the-as int (-> sv-96 elt-count))) + (let ((sv-128 (entity-by-name (the-as string (-> (the-as (pointer uint32) (&+ s4-1 (* s2-1 4)))))))) + (cond + (sv-128 + (let ((s1-2 (cam-state-from-entity sv-128))) + (cond + (s1-2 + (let* ((sv-112 (get-process *camera-dead-pool* camera-slave #x4000 1)) + (s0-0 (when sv-112 + ((method-of-type camera-slave activate) + (the-as camera-slave sv-112) + *camera* + "camera-slave" + (the-as pointer #x70004000) + ) + (run-now-in-process sv-112 cam-slave-init s1-2 sv-128) + (-> sv-112 ppointer) ) - ) - (cond - (s0-0 - (setup-slave-for-hopefull (the-as camera-slave (ppointer->process s0-0))) - (cond - ((master-is-hopeful-better? - (the-as camera-slave (ppointer->process s3-1)) - (the-as camera-slave (ppointer->process s0-0)) ) - (if s3-1 - (deactivate (-> s3-1 0)) - ) - (set! s3-1 (the-as (pointer camera-slave) s0-0)) - (set! (-> arg0 real-entity-name) (the-as string (-> (the-as (pointer uint32) (&+ s4-1 (* s2-1 4)))))) - (set! (-> arg0 cam-mode) (the-as symbol s1-2)) + ) + (cond + (s0-0 + (setup-slave-for-hopefull (the-as camera-slave (ppointer->process s0-0))) + (cond + ((master-is-hopeful-better? + (the-as camera-slave (ppointer->process s3-1)) + (the-as camera-slave (ppointer->process s0-0)) ) - (else - (deactivate (-> s0-0 0)) - ) + (if s3-1 + (deactivate (-> s3-1 0)) + ) + (set! s3-1 (the-as (pointer camera-slave) s0-0)) + (set! (-> arg0 real-entity-name) (the-as string (-> (the-as (pointer uint32) (&+ s4-1 (* s2-1 4)))))) + (set! (-> arg0 cam-mode) (the-as symbol s1-2)) + ) + (else + (deactivate (-> s0-0 0)) ) ) - (else - (format 0 "ERROR : alternate region activate failed~%") - ) + ) + (else + (format 0 "ERROR : alternate region activate failed~%") ) ) ) - (else - (format - 0 - "ERROR : alternate camera region '~S' didn't produce a state~%" - (res-lump-struct sv-128 'name structure) - ) + ) + (else + (format + 0 + "ERROR : alternate camera region '~S' didn't produce a state~%" + (res-lump-struct sv-128 'name structure) ) ) ) ) - (else - (format - 0 - "ERROR : alternate '~S' not found for '~S'~%" - (-> (the-as (pointer uint32) (&+ s4-1 (* s2-1 4)))) - (res-lump-struct s5-0 'name structure) - ) + ) + (else + (format + 0 + "ERROR : alternate '~S' not found for '~S'~%" + (-> (the-as (pointer uint32) (&+ s4-1 (* s2-1 4)))) + (res-lump-struct s5-0 'name structure) ) ) ) - (+! s2-1 1) ) ) (if s3-1 diff --git a/test/decompiler/reference/jak3/engine/common-obs/water_REF.gc b/test/decompiler/reference/jak3/engine/common-obs/water_REF.gc index 76acfcbac0..06bd22a83c 100644 --- a/test/decompiler/reference/jak3/engine/common-obs/water_REF.gc +++ b/test/decompiler/reference/jak3/engine/common-obs/water_REF.gc @@ -231,34 +231,21 @@ ;; definition for method 17 of type water-control ;; WARN: Return type mismatch int vs none. (defmethod water-control-method-17 ((this water-control)) - (when (and (not (handle->process (-> this ripple))) - (>= (+ (current-time) (seconds -0.1)) (-> this enter-water-time)) - ) - (let ((s5-0 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> s5-0 tracked-obj) (process->handle (-> this process))) - (set! (-> s5-0 appearance) *water-wake-trail*) - (set! (-> s5-0 max-num-crumbs) (the int (* 0.25 (the float (-> s5-0 appearance max-age))))) - (let* ((v1-18 - (estimate-light-trail-mem-usage - (the-as uint (-> s5-0 max-num-crumbs)) - (the-as uint (= (-> s5-0 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s4-0 (get-process *default-dead-pool* light-trail-tracker-water (+ v1-18 8192) 1)) - ) - (set! (-> this ripple) - (ppointer->handle (when s4-0 - (let ((t9-2 (method-of-type process activate))) - (t9-2 s4-0 (-> this process) "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s4-0 light-trail-tracker-init-by-other s5-0) - (-> s4-0 ppointer) - ) + (if (and (not (handle->process (-> this ripple))) + (>= (+ (current-time) (seconds -0.1)) (-> this enter-water-time)) + ) + (set! (-> this ripple) + (ppointer->handle (light-trail-tracker-spawn + light-trail-tracker-water + :to (-> this process) + :param-list ((tracked-obj (process->handle (-> this process))) + (appearance *water-wake-trail*) + (max-num-crumbs (the int (* 0.25 (the float (-> *water-wake-trail* max-age))))) + ) ) - ) - ) + ) + ) ) - ) 0 (none) ) diff --git a/test/decompiler/reference/jak3/engine/target/gun/gun-blue-shot_REF.gc b/test/decompiler/reference/jak3/engine/target/gun/gun-blue-shot_REF.gc index 3a77f2ee7d..e364075a46 100644 --- a/test/decompiler/reference/jak3/engine/target/gun/gun-blue-shot_REF.gc +++ b/test/decompiler/reference/jak3/engine/target/gun/gun-blue-shot_REF.gc @@ -442,26 +442,14 @@ ) (set! (-> this random-travel-distance) (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-17))))) ) - (let ((s5-0 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> s5-0 tracked-obj) (process->handle this)) - (set! (-> s5-0 appearance) *blue-shot-trail*) - (set! (-> s5-0 max-num-crumbs) (the int (* 0.2 (the float (-> s5-0 appearance max-age))))) - (set! (-> s5-0 track-immediately?) #t) - (let* ((v1-30 (estimate-light-trail-mem-usage - (the-as uint (-> s5-0 max-num-crumbs)) - (the-as uint (= (-> s5-0 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s4-0 (get-process *default-dead-pool* light-trail-tracker-blue-3 (+ v1-30 8192) 1)) - ) - (when s4-0 - (let ((t9-4 (method-of-type process activate))) - (t9-4 s4-0 this "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s4-0 light-trail-tracker-init-by-other s5-0) - (-> s4-0 ppointer) - ) - ) + (light-trail-tracker-spawn + light-trail-tracker-blue-3 + :to this + :param-list ((tracked-obj (process->handle this)) + (appearance *blue-shot-trail*) + (max-num-crumbs (the int (* 0.2 (the float (-> *blue-shot-trail* max-age))))) + (track-immediately? #t) + ) ) 0 (none) diff --git a/test/decompiler/reference/jak3/engine/target/gun/gun-red-shot_REF.gc b/test/decompiler/reference/jak3/engine/target/gun/gun-red-shot_REF.gc index 84d8950f76..d6b189f677 100644 --- a/test/decompiler/reference/jak3/engine/target/gun/gun-red-shot_REF.gc +++ b/test/decompiler/reference/jak3/engine/target/gun/gun-red-shot_REF.gc @@ -180,26 +180,14 @@ (vector-copy! (-> this root scale) v1-15) ) (set! (-> this immediate-detonation?) #f) - (let ((s5-2 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> s5-2 tracked-obj) (process->handle this)) - (set! (-> s5-2 appearance) *red-shot-3-trail*) - (set! (-> s5-2 max-num-crumbs) (the int (* 0.5 (the float (-> s5-2 appearance max-age))))) - (set! (-> s5-2 track-immediately?) #t) - (let* ((v1-28 (estimate-light-trail-mem-usage - (the-as uint (-> s5-2 max-num-crumbs)) - (the-as uint (= (-> s5-2 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s4-2 (get-process *default-dead-pool* light-trail-tracker-projectile (+ v1-28 8192) 1)) - ) - (when s4-2 - (let ((t9-9 (method-of-type process activate))) - (t9-9 s4-2 this "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s4-2 light-trail-tracker-init-by-other s5-2) - (-> s4-2 ppointer) - ) - ) + (light-trail-tracker-spawn + light-trail-tracker-projectile + :to this + :param-list ((tracked-obj (process->handle this)) + (appearance *red-shot-3-trail*) + (max-num-crumbs (the int (* 0.5 (the float (-> *red-shot-3-trail* max-age))))) + (track-immediately? #t) + ) ) 0 (none) diff --git a/test/decompiler/reference/jak3/engine/target/gun/gun-yellow-shot_REF.gc b/test/decompiler/reference/jak3/engine/target/gun/gun-yellow-shot_REF.gc index e150e212c7..d77a7ff7f3 100644 --- a/test/decompiler/reference/jak3/engine/target/gun/gun-yellow-shot_REF.gc +++ b/test/decompiler/reference/jak3/engine/target/gun/gun-yellow-shot_REF.gc @@ -1862,26 +1862,14 @@ ) (set! (-> this muzzle-flash-part) (-> *part-id-table* 274)) (sound-play "yellow2-shot" :pitch 1) - (let ((s5-1 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> s5-1 tracked-obj) (process->handle this)) - (set! (-> s5-1 appearance) *yellow-shot-2-trail*) - (set! (-> s5-1 max-num-crumbs) (the int (* 0.25 (the float (-> s5-1 appearance max-age))))) - (set! (-> s5-1 track-immediately?) #t) - (let* ((v1-34 (estimate-light-trail-mem-usage - (the-as uint (-> s5-1 max-num-crumbs)) - (the-as uint (= (-> s5-1 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (gp-1 (get-process *default-dead-pool* light-trail-tracker-projectile (+ v1-34 8192) 1)) - ) - (when gp-1 - (let ((t9-9 (method-of-type process activate))) - (t9-9 gp-1 *target* "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process gp-1 light-trail-tracker-init-by-other s5-1) - (-> gp-1 ppointer) - ) - ) + (light-trail-tracker-spawn + light-trail-tracker-projectile + :to *target* + :param-list ((tracked-obj (process->handle this)) + (appearance *yellow-shot-2-trail*) + (max-num-crumbs (the int (* 0.25 (the float (-> *yellow-shot-2-trail* max-age))))) + (track-immediately? #t) + ) ) (none) ) diff --git a/test/decompiler/reference/jak3/levels/city/port/attack/h-torpedo_REF.gc b/test/decompiler/reference/jak3/levels/city/port/attack/h-torpedo_REF.gc index 8afdec4057..1a26351633 100644 --- a/test/decompiler/reference/jak3/levels/city/port/attack/h-torpedo_REF.gc +++ b/test/decompiler/reference/jak3/levels/city/port/attack/h-torpedo_REF.gc @@ -1664,26 +1664,14 @@ (set! (-> (the-as particle-local-space-info s3-0) flags) (part-local-space-flags)) (s4-1 s5-1 (the-as particle-local-space-info s3-0)) ) - (let ((s5-2 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> s5-2 tracked-obj) (process->handle this)) - (set! (-> s5-2 appearance) *torpedo-wake-trail*) - (set! (-> s5-2 max-num-crumbs) (the int (* 0.5 (the float (-> s5-2 appearance max-age))))) - (set! (-> s5-2 track-immediately?) #t) - (let* ((v1-34 (estimate-light-trail-mem-usage - (the-as uint (-> s5-2 max-num-crumbs)) - (the-as uint (= (-> s5-2 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s4-2 (get-process *default-dead-pool* light-trail-tracker-torpedo (+ v1-34 8192) 1)) - ) - (when s4-2 - (let ((t9-15 (method-of-type process activate))) - (t9-15 s4-2 this "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s4-2 light-trail-tracker-init-by-other s5-2) - (-> s4-2 ppointer) - ) - ) + (light-trail-tracker-spawn + light-trail-tracker-torpedo + :to this + :param-list ((tracked-obj (process->handle this)) + (appearance *torpedo-wake-trail*) + (max-num-crumbs (the int (* 0.5 (the float (-> *torpedo-wake-trail* max-age))))) + (track-immediately? #t) + ) ) (none) ) diff --git a/test/decompiler/reference/jak3/levels/desert/hover/des-beast-2_REF.gc b/test/decompiler/reference/jak3/levels/desert/hover/des-beast-2_REF.gc index 74366ff1d0..86e101ce06 100644 --- a/test/decompiler/reference/jak3/levels/desert/hover/des-beast-2_REF.gc +++ b/test/decompiler/reference/jak3/levels/desert/hover/des-beast-2_REF.gc @@ -464,26 +464,14 @@ (set! (-> this desired-target) (-> *vehicle-info* handle-by-vehicle-type 14)) (set! (-> this blast-damage) (the-as basic #t)) (set! (-> this vehicle-damage-factor) 0.333) - (let ((s5-1 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> s5-1 tracked-obj) (process->handle this)) - (set! (-> s5-1 appearance) *beast-grenade-trail*) - (set! (-> s5-1 max-num-crumbs) (the int (* 0.5 (the float (-> s5-1 appearance max-age))))) - (set! (-> s5-1 track-immediately?) #t) - (let* ((v1-28 (estimate-light-trail-mem-usage - (the-as uint (-> s5-1 max-num-crumbs)) - (the-as uint (= (-> s5-1 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s4-1 (get-process *default-dead-pool* light-trail-tracker-projectile (+ v1-28 8192) 1)) - ) - (when s4-1 - (let ((t9-6 (method-of-type process activate))) - (t9-6 s4-1 *entity-pool* "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s4-1 light-trail-tracker-init-by-other s5-1) - (-> s4-1 ppointer) - ) - ) + (light-trail-tracker-spawn + light-trail-tracker-projectile + :to *entity-pool* + :param-list ((tracked-obj (process->handle this)) + (appearance *beast-grenade-trail*) + (max-num-crumbs (the int (* 0.5 (the float (-> *beast-grenade-trail* max-age))))) + (track-immediately? #t) + ) ) (set-vector! (-> this root scale) 16.0 16.0 16.0 1.0) (set! (-> this minimap) (add-icon! *minimap* this (the-as uint 135) (the-as int #f) (the-as vector #t) 0)) diff --git a/test/decompiler/reference/jak3/levels/desert/hover/des-beast_REF.gc b/test/decompiler/reference/jak3/levels/desert/hover/des-beast_REF.gc index 09de2f9fcb..bbfb3a76c3 100644 --- a/test/decompiler/reference/jak3/levels/desert/hover/des-beast_REF.gc +++ b/test/decompiler/reference/jak3/levels/desert/hover/des-beast_REF.gc @@ -1031,26 +1031,14 @@ (set! (-> this blast-radius) 40960.0) (set! (-> this max-speed) 90112.0) (set! (-> this timeout) (seconds 4)) - (let ((s5-1 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> s5-1 tracked-obj) (process->handle this)) - (set! (-> s5-1 appearance) *beast-grenade-trail*) - (set! (-> s5-1 max-num-crumbs) (the int (* 0.5 (the float (-> s5-1 appearance max-age))))) - (set! (-> s5-1 track-immediately?) #t) - (let* ((v1-22 (estimate-light-trail-mem-usage - (the-as uint (-> s5-1 max-num-crumbs)) - (the-as uint (= (-> s5-1 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s4-1 (get-process *default-dead-pool* light-trail-tracker-projectile (+ v1-22 8192) 1)) - ) - (when s4-1 - (let ((t9-6 (method-of-type process activate))) - (t9-6 s4-1 this "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s4-1 light-trail-tracker-init-by-other s5-1) - (-> s4-1 ppointer) - ) - ) + (light-trail-tracker-spawn + light-trail-tracker-projectile + :to this + :param-list ((tracked-obj (process->handle this)) + (appearance *beast-grenade-trail*) + (max-num-crumbs (the int (* 0.5 (the float (-> *beast-grenade-trail* max-age))))) + (track-immediately? #t) + ) ) (let ((v1-26 (new 'stack-no-clear 'vector))) (set! (-> v1-26 x) 8.0) diff --git a/test/decompiler/reference/jak3/levels/desert/hover/mh-flyer_REF.gc b/test/decompiler/reference/jak3/levels/desert/hover/mh-flyer_REF.gc index 7b90d98beb..bb15dabbb2 100644 --- a/test/decompiler/reference/jak3/levels/desert/hover/mh-flyer_REF.gc +++ b/test/decompiler/reference/jak3/levels/desert/hover/mh-flyer_REF.gc @@ -508,26 +508,14 @@ ) ) ) - (let ((s5-5 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> s5-5 tracked-obj) (process->handle this)) - (set! (-> s5-5 appearance) *mh-flyer-missile-trail*) - (set! (-> s5-5 max-num-crumbs) (the int (* 0.5 (the float (-> s5-5 appearance max-age))))) - (set! (-> s5-5 track-immediately?) #t) - (let* ((v0-8 (estimate-light-trail-mem-usage - (the-as uint (-> s5-5 max-num-crumbs)) - (the-as uint (= (-> s5-5 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s4-2 (get-process *default-dead-pool* light-trail-tracker-projectile (+ v0-8 8192) 1)) - ) - (when s4-2 - (let ((t9-10 (method-of-type process activate))) - (t9-10 s4-2 *entity-pool* "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s4-2 light-trail-tracker-init-by-other s5-5) - (-> s4-2 ppointer) - ) - ) + (light-trail-tracker-spawn + light-trail-tracker-projectile + :to *entity-pool* + :param-list ((tracked-obj (process->handle this)) + (appearance *mh-flyer-missile-trail*) + (max-num-crumbs (the int (* 0.5 (the float (-> *mh-flyer-missile-trail* max-age))))) + (track-immediately? #t) + ) ) (set! (-> this minimap) (add-icon! *minimap* this (the-as uint 135) (the-as int #f) (the-as vector #t) 0)) (quaternion-copy! (-> this turn-quat) *unity-quaternion*) diff --git a/test/decompiler/reference/jak3/levels/desert/wvehicle/wcar-projectiles_REF.gc b/test/decompiler/reference/jak3/levels/desert/wvehicle/wcar-projectiles_REF.gc index e3c58c469d..18919196ca 100644 --- a/test/decompiler/reference/jak3/levels/desert/wvehicle/wcar-projectiles_REF.gc +++ b/test/decompiler/reference/jak3/levels/desert/wvehicle/wcar-projectiles_REF.gc @@ -565,31 +565,18 @@ (set! (-> v1-13 w) 1.0) (vector-copy! (-> this root scale) v1-13) ) - (let ((s5-1 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> s5-1 tracked-obj) (process->handle this)) - (set! (-> s5-1 appearance) *toad-grenade-trail*) - (set! (-> s5-1 max-num-crumbs) (the int (* 0.5 (the float (-> s5-1 appearance max-age))))) - (set! (-> s5-1 track-immediately?) #t) - (let* ((v1-26 - (estimate-light-trail-mem-usage - (the-as uint (-> s5-1 max-num-crumbs)) - (the-as uint (= (-> s5-1 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s4-1 (get-process *default-dead-pool* light-trail-tracker-projectile (+ v1-26 8192) 1)) - ) - (set! (-> this trail-tracker) - (ppointer->handle (when s4-1 - (let ((t9-6 (method-of-type process activate))) - (t9-6 s4-1 this "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s4-1 light-trail-tracker-init-by-other s5-1) - (-> s4-1 ppointer) - ) - ) - ) - ) - ) + (set! (-> this trail-tracker) + (ppointer->handle (light-trail-tracker-spawn + light-trail-tracker-projectile + :to this + :param-list ((tracked-obj (process->handle this)) + (appearance *toad-grenade-trail*) + (max-num-crumbs (the int (* 0.5 (the float (-> *toad-grenade-trail* max-age))))) + (track-immediately? #t) + ) + ) + ) + ) 0 (none) ) diff --git a/test/decompiler/reference/jak3/levels/factory/factory-manager_REF.gc b/test/decompiler/reference/jak3/levels/factory/factory-manager_REF.gc index aaef3cce72..03b549f2da 100644 --- a/test/decompiler/reference/jak3/levels/factory/factory-manager_REF.gc +++ b/test/decompiler/reference/jak3/levels/factory/factory-manager_REF.gc @@ -1083,31 +1083,18 @@ (set! (-> self draw light-index) (the-as uint 10)) (logclear! (-> self mask) (process-mask actor-pause)) (process-entity-status! self (entity-perm-status no-kill) #t) - (let ((gp-1 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> gp-1 tracked-obj) (process->handle self)) - (set! (-> gp-1 appearance) *factory-fighter-trail*) - (set! (-> gp-1 max-num-crumbs) (the int (* 0.25 (the float (-> gp-1 appearance max-age))))) - (set! (-> gp-1 track-immediately?) #t) - (let* ((v1-38 - (estimate-light-trail-mem-usage - (the-as uint (-> gp-1 max-num-crumbs)) - (the-as uint (= (-> gp-1 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s5-1 (get-process *default-dead-pool* light-trail-tracker-vehicle (+ v1-38 8192) 1)) - ) - (set! (-> self light-trail) - (ppointer->handle (when s5-1 - (let ((t9-13 (method-of-type process activate))) - (t9-13 s5-1 self "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s5-1 light-trail-tracker-init-by-other gp-1) - (-> s5-1 ppointer) - ) - ) - ) - ) - ) + (set! (-> self light-trail) + (ppointer->handle (light-trail-tracker-spawn + light-trail-tracker-vehicle + :to self + :param-list ((tracked-obj (process->handle self)) + (appearance *factory-fighter-trail*) + (max-num-crumbs (the int (* 0.25 (the float (-> *factory-fighter-trail* max-age))))) + (track-immediately? #t) + ) + ) + ) + ) (go-virtual idle) ) diff --git a/test/decompiler/reference/jak3/levels/wascity/dm-flyer_REF.gc b/test/decompiler/reference/jak3/levels/wascity/dm-flyer_REF.gc index 066214cec5..1154d2a684 100644 --- a/test/decompiler/reference/jak3/levels/wascity/dm-flyer_REF.gc +++ b/test/decompiler/reference/jak3/levels/wascity/dm-flyer_REF.gc @@ -610,26 +610,14 @@ ) ) ) - (let ((s5-5 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> s5-5 tracked-obj) (process->handle this)) - (set! (-> s5-5 appearance) *dm-flyer-missile-trail*) - (set! (-> s5-5 max-num-crumbs) (the int (* 0.5 (the float (-> s5-5 appearance max-age))))) - (set! (-> s5-5 track-immediately?) #t) - (let* ((v0-12 (estimate-light-trail-mem-usage - (the-as uint (-> s5-5 max-num-crumbs)) - (the-as uint (= (-> s5-5 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s4-2 (get-process *default-dead-pool* light-trail-tracker-projectile (+ v0-12 8192) 1)) - ) - (when s4-2 - (let ((t9-14 (method-of-type process activate))) - (t9-14 s4-2 *entity-pool* "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s4-2 light-trail-tracker-init-by-other s5-5) - (-> s4-2 ppointer) - ) - ) + (light-trail-tracker-spawn + light-trail-tracker-projectile + :to *entity-pool* + :param-list ((tracked-obj (process->handle this)) + (appearance *dm-flyer-missile-trail*) + (max-num-crumbs (the int (* 0.5 (the float (-> *dm-flyer-missile-trail* max-age))))) + (track-immediately? #t) + ) ) (set! (-> this minimap) (add-icon! *minimap* this (the-as uint 135) (the-as int #f) (the-as vector #t) 0)) (quaternion-copy! (-> this turn-quat) *unity-quaternion*) diff --git a/test/decompiler/reference/jak3/levels/wascity/maker-projectile_REF.gc b/test/decompiler/reference/jak3/levels/wascity/maker-projectile_REF.gc index f502c5c77a..82307fbf2e 100644 --- a/test/decompiler/reference/jak3/levels/wascity/maker-projectile_REF.gc +++ b/test/decompiler/reference/jak3/levels/wascity/maker-projectile_REF.gc @@ -935,26 +935,14 @@ (set! (-> this max-speed) 450560.0) (set! (-> this timeout) (seconds 12)) (set! (-> this gravity) 40960.0) - (let ((s5-2 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> s5-2 tracked-obj) (process->handle this)) - (set! (-> s5-2 appearance) *maker-grenade-trail*) - (set! (-> s5-2 max-num-crumbs) (the int (* 0.5 (the float (-> s5-2 appearance max-age))))) - (set! (-> s5-2 track-immediately?) #t) - (let* ((v1-32 (estimate-light-trail-mem-usage - (the-as uint (-> s5-2 max-num-crumbs)) - (the-as uint (= (-> s5-2 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s4-1 (get-process *default-dead-pool* light-trail-tracker-projectile (+ v1-32 8192) 1)) - ) - (when s4-1 - (let ((t9-11 (method-of-type process activate))) - (t9-11 s4-1 this "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s4-1 light-trail-tracker-init-by-other s5-2) - (-> s4-1 ppointer) - ) - ) + (light-trail-tracker-spawn + light-trail-tracker-projectile + :to this + :param-list ((tracked-obj (process->handle this)) + (appearance *maker-grenade-trail*) + (max-num-crumbs (the int (* 0.5 (the float (-> *maker-grenade-trail* max-age))))) + (track-immediately? #t) + ) ) (set-vector! (-> this root scale) 16.0 16.0 16.0 1.0) (set! (-> this minimap) #f) diff --git a/test/decompiler/reference/jak3/levels/wascity/wasdef-manager_REF.gc b/test/decompiler/reference/jak3/levels/wascity/wasdef-manager_REF.gc index ac017c6292..6c78c00fcf 100644 --- a/test/decompiler/reference/jak3/levels/wascity/wasdef-manager_REF.gc +++ b/test/decompiler/reference/jak3/levels/wascity/wasdef-manager_REF.gc @@ -2375,16 +2375,17 @@ (set! *maker-num-alive* (+ *maker-num-alive* 1)) (set! *maker-num-visible* (+ *maker-num-visible* 1)) (if (-> self draw shadow) - (set! (-> self draw shadow-ctrl) (new - 'process - 'shadow-control - -81920.0 - 163840.0 - 573440.0 - (the-as vector #f) - (shadow-flags shdf00 shdf04) - 4096000.0 - ) + (set! (-> self draw shadow-ctrl) + (new + 'process + 'shadow-control + -81920.0 + 163840.0 + 573440.0 + (the-as vector #f) + (shadow-flags shdf00 shdf04) + 4096000.0 + ) ) (set! (-> self draw shadow-ctrl) *enemy-dummy-shadow-control*) ) @@ -2471,31 +2472,18 @@ (set! (-> self draw lod-set lod 0 dist) 14336000.0) (logclear! (-> self mask) (process-mask actor-pause)) (logior! (-> self mask) (process-mask no-kill)) - (let ((gp-1 (new 'stack-no-clear 'light-trail-tracker-spawn-params))) - (set! (-> gp-1 tracked-obj) (process->handle self)) - (set! (-> gp-1 appearance) *maker-entry-trail*) - (set! (-> gp-1 max-num-crumbs) (the int (* 0.5 (the float (-> gp-1 appearance max-age))))) - (set! (-> gp-1 track-immediately?) #t) - (let* ((v1-104 - (estimate-light-trail-mem-usage - (the-as uint (-> gp-1 max-num-crumbs)) - (the-as uint (= (-> gp-1 appearance lie-mode) (lie-mode use-two-strips))) - ) - ) - (s5-1 (get-process *default-dead-pool* light-trail-tracker-projectile (+ v1-104 8192) 1)) - ) - (set! (-> self trail-handle) - (ppointer->handle (when s5-1 - (let ((t9-22 (method-of-type process activate))) - (t9-22 s5-1 self "light-trail" (the-as pointer #x70004000)) - ) - (run-now-in-process s5-1 light-trail-tracker-init-by-other gp-1) - (-> s5-1 ppointer) - ) - ) - ) - ) - ) + (set! (-> self trail-handle) + (ppointer->handle (light-trail-tracker-spawn + light-trail-tracker-projectile + :to self + :param-list ((tracked-obj (process->handle self)) + (appearance *maker-entry-trail*) + (max-num-crumbs (the int (* 0.5 (the float (-> *maker-entry-trail* max-age))))) + (track-immediately? #t) + ) + ) + ) + ) (go-virtual flying) )