From af5009a29e7d1c4d0085c3997f7022d39abea6e9 Mon Sep 17 00:00:00 2001 From: ManDude <7569514+ManDude@users.noreply.github.com> Date: Sun, 9 Oct 2022 17:53:44 +0100 Subject: [PATCH] [decomp] make `defpart` and `defpartgroup` work in jak 2 (#1947) --- common/math/Vector.h | 10 + common/util/print_float.cpp | 8 + common/util/print_float.h | 1 + decompiler/IR2/Form.cpp | 35 +- decompiler/IR2/Form.h | 15 + decompiler/analysis/find_defpartgroup.cpp | 38 +- decompiler/config/jak2/all-types.gc | 14 - decompiler/config/jak2_ntsc_v1.jsonc | 2 +- decompiler/util/data_decompile.cpp | 156 +- decompiler/util/data_decompile.h | 17 +- decompiler/util/sparticle_decompile.cpp | 174 +- decompiler/util/sparticle_decompile.h | 6 +- goal_src/jak2/engine/debug/debug-part.gc | 2015 ++++++++++++++++ .../sprite/particles/sparticle-launcher-h.gc | 168 ++ .../jak2/engine/target/board/board-part.gc | 215 ++ .../jak1/engine/game/collectables-part_REF.gc | 36 +- .../reference/jak1/engine/game/crates_REF.gc | 10 +- .../jak1/engine/game/powerups_REF.gc | 4 +- .../jak1/engine/game/projectiles_REF.gc | 6 +- .../jak1/engine/gfx/water/water_REF.gc | 4 +- .../jak1/engine/target/target-part_REF.gc | 192 +- .../jak1/levels/beach/beach-obs_REF.gc | 2 +- .../jak1/levels/beach/beach-rocks_REF.gc | 4 +- .../jak1/levels/citadel/citadel-part_REF.gc | 4 +- .../jak1/levels/common/dark-eco-pool_REF.gc | 4 +- .../jak1/levels/common/sharkey_REF.gc | 4 +- .../levels/finalboss/green-eco-lurker_REF.gc | 2 +- .../levels/finalboss/robotboss-part_REF.gc | 26 +- .../finalboss/sage-finalboss-part_REF.gc | 16 +- .../levels/firecanyon/firecanyon-obs_REF.gc | 4 +- .../jak1/levels/flut_common/flut-part_REF.gc | 4 +- .../jak1/levels/jungle/darkvine_REF.gc | 2 +- .../jak1/levels/jungle/fisher_REF.gc | 12 +- .../jak1/levels/jungleb/jungleb-obs_REF.gc | 2 +- .../jak1/levels/lavatube/lavatube-obs_REF.gc | 2 +- .../jak1/levels/maincave/dark-crystal_REF.gc | 6 +- .../levels/maincave/mother-spider-egg_REF.gc | 8 +- .../levels/maincave/mother-spider-proj_REF.gc | 6 +- .../jak1/levels/misty/balloonlurker_REF.gc | 6 +- .../jak1/levels/misty/misty-conveyor_REF.gc | 4 +- .../jak1/levels/misty/misty-obs_REF.gc | 8 +- .../jak1/levels/misty/quicksandlurker_REF.gc | 8 +- .../jak1/levels/misty/sidekick-human_REF.gc | 12 +- .../jak1/levels/ogre/ogre-obs_REF.gc | 4 +- .../jak1/levels/ogre/ogre-part_REF.gc | 22 +- .../levels/racer_common/racer-part_REF.gc | 4 +- .../rolling/rolling-lightning-mole_REF.gc | 2 +- .../jak1/levels/rolling/rolling-obs_REF.gc | 2 +- .../levels/rolling/rolling-race-ring_REF.gc | 20 +- .../jak1/levels/snow/ice-cube_REF.gc | 4 +- .../jak1/levels/snow/snow-obs_REF.gc | 2 +- .../jak1/levels/snow/snow-ram-boss_REF.gc | 10 +- .../levels/sunken/sun-exit-chamber_REF.gc | 2 +- .../reference/jak1/levels/swamp/kermit_REF.gc | 2 +- .../jak1/levels/swamp/swamp-obs_REF.gc | 6 +- .../jak1/levels/swamp/swamp-rat-nest_REF.gc | 6 +- .../jak1/levels/training/training-obs_REF.gc | 6 +- .../village1/sequence-a-village1_REF.gc | 6 +- .../levels/village2/assistant-village2_REF.gc | 4 +- .../jak1/levels/village2/swamp-blimp_REF.gc | 2 +- .../jak1/levels/village2/village2-obs_REF.gc | 4 +- .../jak1/levels/village2/village2-part_REF.gc | 4 +- .../reference/jak2/decompiler-macros.gc | 177 ++ .../jak2/engine/debug/debug-part_REF.gc | 2137 +++++++++++++++++ .../engine/target/board/board-part_REF.gc | 230 ++ test/decompiler/test_DataParser.cpp | 15 +- 66 files changed, 5567 insertions(+), 376 deletions(-) create mode 100644 test/decompiler/reference/jak2/engine/debug/debug-part_REF.gc create mode 100644 test/decompiler/reference/jak2/engine/target/board/board-part_REF.gc diff --git a/common/math/Vector.h b/common/math/Vector.h index 01bd3c21b2..203274f9bf 100644 --- a/common/math/Vector.h +++ b/common/math/Vector.h @@ -77,7 +77,17 @@ class Vector { return true; } + bool operator==(const T other) const { + for (int i = 0; i < Size; i++) { + if (m_data[i] != other) { + return false; + } + } + return true; + } + bool operator!=(const Vector& other) const { return !((*this) == other); } + bool operator!=(const T other) const { return !((*this) == other); } const T length() const { return std::sqrt(squared_length()); } diff --git a/common/util/print_float.cpp b/common/util/print_float.cpp index 1f4c605c0d..3a96697a57 100644 --- a/common/util/print_float.cpp +++ b/common/util/print_float.cpp @@ -29,6 +29,14 @@ std::string meters_to_string(float value, bool append_trailing_decimal) { return float_to_string(value / METER_LENGTH, append_trailing_decimal); } +/*! + * Wrapper around float_to_string, for printing degrees. Unlike float_to_string, it does not append + * decimals by default. + */ +std::string degrees_to_string(float value, bool append_trailing_decimal) { + return float_to_string(value / DEGREES_LENGTH, append_trailing_decimal); +} + /*! * Convert a fixed point value to a float. Fixed point values usually end up with strange numbers * that were definitely not what was written when we do a naive conversion. This function diff --git a/common/util/print_float.h b/common/util/print_float.h index e502d90fb1..5dc47d44cf 100644 --- a/common/util/print_float.h +++ b/common/util/print_float.h @@ -8,5 +8,6 @@ float fixed_point_to_float(s64 value, s64 scale); std::string fixed_point_to_string(s64 value, s64 scale, bool append_trailing_decimal = false); std::string float_to_string(float value, bool append_trailing_decimal = true); std::string meters_to_string(float value, bool append_trailing_decimal = false); +std::string degrees_to_string(float value, bool append_trailing_decimal = false); std::string seconds_to_string(s64 value, bool append_trailing_decimal = false); int float_to_cstr(float value, char* buffer, bool append_trailing_decimal = true); diff --git a/decompiler/IR2/Form.cpp b/decompiler/IR2/Form.cpp index 0999f35df0..b6884aa6e4 100644 --- a/decompiler/IR2/Form.cpp +++ b/decompiler/IR2/Form.cpp @@ -2481,11 +2481,12 @@ void DecompiledDataElement::get_modified_regs(RegSet&) const {} void DecompiledDataElement::do_decomp(const Env& env, const LinkedObjectFile* file) { if (m_label_info) { - m_description = decompile_at_label_with_hint(*m_label_info, m_label, env.file->labels, - env.file->words_by_seg, *env.dts, file); + m_description = + decompile_at_label_with_hint(*m_label_info, m_label, env.file->labels, + env.file->words_by_seg, *env.dts, file, env.version); } else { m_description = decompile_at_label_guess_type(m_label, env.file->labels, env.file->words_by_seg, - env.dts->ts, file); + env.dts->ts, file, env.version); } m_decompiled = true; } @@ -3095,11 +3096,13 @@ goos::Object DefpartgroupElement::to_form_internal(const Env& env) const { forms.push_back(pretty_print::to_symbol(fmt::format("defpartgroup {}", name()))); forms.push_back(pretty_print::to_symbol(fmt::format(":id {}", m_group_id))); if (m_static_info.duration != 3000) { - forms.push_back(pretty_print::to_symbol(fmt::format(":duration {}", m_static_info.duration))); + forms.push_back(pretty_print::to_symbol( + fmt::format(":duration (seconds {})", seconds_to_string(m_static_info.duration)))); } if (m_static_info.linger != 1500) { - forms.push_back( - pretty_print::to_symbol(fmt::format(":linger-duration {}", m_static_info.linger))); + // 5 seconds is default + forms.push_back(pretty_print::to_symbol( + fmt::format(":linger-duration (seconds {})", seconds_to_string(m_static_info.linger)))); } if (m_static_info.flags != 0) { auto things = decompile_bitfield_enum_from_int(TypeSpec("sp-group-flag"), env.dts->ts, @@ -3118,6 +3121,21 @@ goos::Object DefpartgroupElement::to_form_internal(const Env& env) const { meters_to_string(m_static_info.bounds.y()), meters_to_string(m_static_info.bounds.z()), meters_to_string(m_static_info.bounds.w())))); + if (env.version != GameVersion::Jak1) { + // jak 2 stuff. + if (m_static_info.rot != 0) { + forms.push_back(pretty_print::to_symbol(fmt::format( + ":rotate ((degrees {}) (degrees {}) (degrees {}))", + meters_to_string(m_static_info.rot.x()), meters_to_string(m_static_info.rot.y()), + meters_to_string(m_static_info.rot.z())))); + } + if (m_static_info.scale != 1) { + forms.push_back(pretty_print::to_symbol(fmt::format( + ":scale ({} {} {})", float_to_string(m_static_info.rot.x()), + float_to_string(m_static_info.rot.y()), float_to_string(m_static_info.rot.z())))); + } + } + std::vector item_forms; for (const auto& e : m_static_info.elts) { s32 launcher = e.part_id; @@ -3204,12 +3222,11 @@ goos::Object DefpartElement::to_form_internal(const Env& env) const { std::vector item_forms; for (const auto& e : m_static_info.fields) { - if (e.field_id == 67) { + if (e.is_sp_end(env.version)) { // sp-end break; } - ASSERT(env.version == GameVersion::Jak1); // need to update enums - item_forms.push_back(decompile_sparticle_field_init(e, env.dts->ts)); + item_forms.push_back(decompile_sparticle_field_init(e, env.dts->ts, env.version)); } if (!item_forms.empty()) { forms.push_back(pretty_print::to_symbol(":init-specs")); diff --git a/decompiler/IR2/Form.h b/decompiler/IR2/Form.h index 44a1e343f3..a56c208bed 100644 --- a/decompiler/IR2/Form.h +++ b/decompiler/IR2/Form.h @@ -1721,6 +1721,9 @@ class DefpartgroupElement : public FormElement { u16 flags; std::string name; math::Vector4f bounds; + // added in jak 2 + math::Vector3f rot; + math::Vector3f scale; struct PartGroupItem { u32 part_id; @@ -1763,6 +1766,18 @@ class DefpartElement : public FormElement { u16 flags; std::vector data; goos::Object sound_spec; + + bool is_sp_end(GameVersion version) const { + switch (version) { + case GameVersion::Jak1: + return field_id == 67; + case GameVersion::Jak2: + return field_id == 72; + default: + ASSERT_MSG(false, fmt::format("unknown version {} for is_sp_end")); + return false; + } + } }; std::vector fields; }; diff --git a/decompiler/analysis/find_defpartgroup.cpp b/decompiler/analysis/find_defpartgroup.cpp index 034d16cd2b..b15ac17cb2 100644 --- a/decompiler/analysis/find_defpartgroup.cpp +++ b/decompiler/analysis/find_defpartgroup.cpp @@ -1,5 +1,6 @@ #include "find_defpartgroup.h" #include "common/goos/PrettyPrinter.h" +#include "common/util/BitUtils.h" #include "decompiler/IR2/Form.h" #include "decompiler/IR2/GenericElementMatcher.h" #include "decompiler/ObjectFile/LinkedObjectFile.h" @@ -39,24 +40,24 @@ L81: L82: */ - int start_word_idx = (lab.offset / 4) - 1; + int word_idx = (lab.offset / 4) - 1; auto& words = env.file->words_by_seg.at(lab.target_segment); - auto& first_word = words.at(start_word_idx); + auto& first_word = words.at(word_idx++); if (first_word.kind() != LinkedWord::TYPE_PTR || first_word.symbol_name() != "sparticle-launch-group") { env.func->warnings.error_and_throw( "Reference to sparticle-launch-group bad: invalid type pointer"); } - auto& word_1 = words.at(start_word_idx + 1); + auto& word_1 = words.at(word_idx++); s16 len = word_1.data & 0xffff; group.duration = (word_1.data >> 16) & 0xffff; - auto& word_2 = words.at(start_word_idx + 2); + auto& word_2 = words.at(word_idx++); group.linger = word_2.data & 0xffff; group.flags = (word_2.data >> 16) & 0xffff; - auto& string_word = words.at(start_word_idx + 3); + auto& string_word = words.at(word_idx++); if (string_word.kind() != LinkedWord::PTR) { env.func->warnings.error_and_throw( "Reference to sparticle-launch-group bad: invalid name label"); @@ -64,7 +65,7 @@ L82: group.name = env.file->get_goal_string_by_label( env.file->get_label_by_name(env.file->get_label_name(string_word.label_id()))); - auto& array_word = words.at(start_word_idx + 4); + auto& array_word = words.at(word_idx++); if (array_word.kind() != LinkedWord::PTR) { env.func->warnings.error_and_throw( "Reference to sparticle-launch-group bad: invalid array label"); @@ -87,13 +88,34 @@ L82: item.binding = array_words.at(item_idx + 6).data; } + if (env.version != GameVersion::Jak1) { + // added fields in jak 2 + for (int i = 0; i < 3; i++) { + auto& word = words.at(word_idx++); + if (word.kind() != LinkedWord::PLAIN_DATA) { + env.func->warnings.error_and_throw("Reference to sparticle-launch-group bad: invalid rot"); + } + group.rot[i] = *reinterpret_cast(&word.data); + } + for (int i = 0; i < 3; i++) { + auto& word = words.at(word_idx++); + if (word.kind() != LinkedWord::PLAIN_DATA) { + env.func->warnings.error_and_throw( + "Reference to sparticle-launch-group bad: invalid scale"); + } + group.scale[i] = *reinterpret_cast(&word.data); + } + } + + word_idx = align4(word_idx); for (int i = 0; i < 4; i++) { - auto& word = words.at(start_word_idx + 8 + i); + auto& word = words.at(word_idx + i); if (word.kind() != LinkedWord::PLAIN_DATA) { env.func->warnings.error_and_throw("Reference to sparticle-launch-group bad: invalid bounds"); } group.bounds[i] = *reinterpret_cast(&word.data); } + word_idx += 4; } void read_static_part_data(DecompiledDataElement* src, @@ -159,7 +181,7 @@ L80: auto& fld = car(cur_field); item.sound_spec = cdr(cdr(cdr(cdr(&fld))))->as_pair()->car; } - if (item.field_id == 67) { + if (item.is_sp_end(env.version)) { // sp-end break; } diff --git a/decompiler/config/jak2/all-types.gc b/decompiler/config/jak2/all-types.gc index ed856b5f20..7e72ddef27 100644 --- a/decompiler/config/jak2/all-types.gc +++ b/decompiler/config/jak2/all-types.gc @@ -24157,20 +24157,6 @@ ;; sparticle-launcher ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| -(deftype sparticle-launcher (basic) - () - :method-count-assert 11 - :size-assert #x10 - :flag-assert #xb00000010 - ;; Failed to read fields. - (:methods - (sparticle-launcher-method-9 () none 9) - (sparticle-launcher-method-10 () none 10) - ) - ) -|# - (deftype sp-queued-launch-particles (structure) ((sp-system sparticle-system :offset-assert 0) ;; guessed by decompiler (sp-launcher sparticle-launcher :offset-assert 4) ;; guessed by decompiler diff --git a/decompiler/config/jak2_ntsc_v1.jsonc b/decompiler/config/jak2_ntsc_v1.jsonc index 711a924837..97951c7b49 100644 --- a/decompiler/config/jak2_ntsc_v1.jsonc +++ b/decompiler/config/jak2_ntsc_v1.jsonc @@ -7,7 +7,7 @@ // if you want to filter to only some object names. // it will make the decompiler much faster. - "allowed_objects": ["mood"], + "allowed_objects": [], "banned_objects": ["effect-control", "target-util", "ctywide-scenes"], //////////////////////////// diff --git a/decompiler/util/data_decompile.cpp b/decompiler/util/data_decompile.cpp index 938d523eea..81d0b1a730 100644 --- a/decompiler/util/data_decompile.cpp +++ b/decompiler/util/data_decompile.cpp @@ -26,7 +26,8 @@ goos::Object decompile_at_label_with_hint(const LabelInfo& hint, const std::vector& labels, const std::vector>& words, DecompilerTypeSystem& dts, - const LinkedObjectFile* file) { + const LinkedObjectFile* file, + GameVersion version) { const auto& type = hint.result_type; if (!hint.array_size.has_value()) { // if we don't have an array size, treat it as just a normal type. @@ -34,7 +35,7 @@ goos::Object decompile_at_label_with_hint(const LabelInfo& hint, throw std::runtime_error(fmt::format( "Label {} was marked as a value, but is being decompiled as a reference.", hint.name)); } - return decompile_at_label(type, label, labels, words, dts.ts, file); + return decompile_at_label(type, label, labels, words, dts.ts, file, version); } if (type.base_type() == "pointer") { @@ -95,8 +96,8 @@ goos::Object decompile_at_label_with_hint(const LabelInfo& hint, fake_label.target_segment = label.target_segment; fake_label.offset = label.offset + field_type_info->get_offset() + stride * elt; fake_label.name = fmt::format("fake-label-{}-elt-{}", type.get_single_arg().print(), elt); - array_def.push_back( - decompile_at_label(type.get_single_arg(), fake_label, labels, words, dts.ts, file)); + array_def.push_back(decompile_at_label(type.get_single_arg(), fake_label, labels, words, + dts.ts, file, version)); } return pretty_print::build_list(array_def); } @@ -151,12 +152,13 @@ goos::Object decompile_at_label_guess_type(const DecompilerLabel& label, const std::vector& labels, const std::vector>& words, const TypeSystem& ts, - const LinkedObjectFile* file) { + const LinkedObjectFile* file, + GameVersion version) { auto guessed_type = get_type_of_label(label, words); if (!guessed_type.has_value()) { throw std::runtime_error("Could not guess the type of " + label.name); } - return decompile_at_label(*guessed_type, label, labels, words, ts, file); + return decompile_at_label(*guessed_type, label, labels, words, ts, file, version); } goos::Object decompile_function_at_label(const DecompilerLabel& label, @@ -187,6 +189,7 @@ goos::Object decompile_at_label(const TypeSpec& type, const std::vector>& words, const TypeSystem& ts, const LinkedObjectFile* file, + GameVersion version, bool in_static_pair) { if (type == TypeSpec("string")) { return decompile_string_at_label(label, words); @@ -201,15 +204,15 @@ goos::Object decompile_at_label(const TypeSpec& type, if (type.has_single_arg()) { content_type_spec = type.get_single_arg(); } - return decompile_boxed_array(label, labels, words, ts, file, content_type_spec); + return decompile_boxed_array(label, labels, words, ts, file, content_type_spec, version); } if (ts.tc(TypeSpec("structure"), type)) { - return decompile_structure(type, label, labels, words, ts, file, true); + return decompile_structure(type, label, labels, words, ts, file, true, version); } if (type == TypeSpec("pair")) { - return decompile_pair(label, labels, words, ts, true, file); + return decompile_pair(label, labels, words, ts, true, file, version); } throw std::runtime_error("Unimplemented decompile_at_label for " + type.print()); @@ -439,7 +442,8 @@ goos::Object decomp_ref_to_inline_array_guess_size( const std::vector>& all_words, const LinkedObjectFile* file, const TypeSpec& array_elt_type, - int stride) { + int stride, + GameVersion version) { // lg::print("Decomp decomp_ref_to_inline_array_guess_size {}\n", array_elt_type.print()); // verify the stride matches the type system @@ -511,7 +515,7 @@ goos::Object decomp_ref_to_inline_array_guess_size( fake_label.target_segment = my_seg; // same segment fake_label.offset = start_label.offset + elt * stride; array_def.push_back( - decompile_at_label(array_elt_type, fake_label, labels, all_words, ts, file)); + decompile_at_label(array_elt_type, fake_label, labels, all_words, ts, file, version)); } // build into a list. @@ -532,9 +536,10 @@ goos::Object ocean_near_indices_decompile(const std::vector& words, int field_location, const TypeSystem& ts, const std::vector>& all_words, - const LinkedObjectFile* file) { + const LinkedObjectFile* file, + GameVersion version) { return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, all_words, - file, TypeSpec("ocean-near-index"), 32); + file, TypeSpec("ocean-near-index"), 32, version); } goos::Object ocean_mid_masks_decompile(const std::vector& words, @@ -543,9 +548,10 @@ goos::Object ocean_mid_masks_decompile(const std::vector& words, int field_location, const TypeSystem& ts, const std::vector>& all_words, - const LinkedObjectFile* file) { + const LinkedObjectFile* file, + GameVersion version) { return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, all_words, - file, TypeSpec("ocean-mid-mask"), 8); + file, TypeSpec("ocean-mid-mask"), 8, version); } goos::Object sp_field_init_spec_decompile(const std::vector& words, @@ -554,9 +560,10 @@ goos::Object sp_field_init_spec_decompile(const std::vector& words, int field_location, const TypeSystem& ts, const std::vector>& all_words, - const LinkedObjectFile* file) { + const LinkedObjectFile* file, + GameVersion version) { return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, all_words, - file, TypeSpec("sp-field-init-spec"), 16); + file, TypeSpec("sp-field-init-spec"), 16, version); } goos::Object nav_mesh_vertex_arr_decompile(const std::vector& words, @@ -565,9 +572,10 @@ goos::Object nav_mesh_vertex_arr_decompile(const std::vector& words, int field_location, const TypeSystem& ts, const std::vector>& all_words, - const LinkedObjectFile* file) { + const LinkedObjectFile* file, + GameVersion version) { return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, all_words, - file, TypeSpec("nav-vertex"), 16); + file, TypeSpec("nav-vertex"), 16, version); } goos::Object nav_mesh_poly_arr_decompile(const std::vector& words, @@ -576,9 +584,10 @@ goos::Object nav_mesh_poly_arr_decompile(const std::vector& words, int field_location, const TypeSystem& ts, const std::vector>& all_words, - const LinkedObjectFile* file) { + const LinkedObjectFile* file, + GameVersion version) { return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, all_words, - file, TypeSpec("nav-poly"), 8); + file, TypeSpec("nav-poly"), 8, version); } goos::Object nav_mesh_poly_arr_jak2_decompile(const std::vector& words, @@ -587,9 +596,10 @@ goos::Object nav_mesh_poly_arr_jak2_decompile(const std::vector& wor int field_location, const TypeSystem& ts, const std::vector>& all_words, - const LinkedObjectFile* file) { + const LinkedObjectFile* file, + GameVersion version) { return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, all_words, - file, TypeSpec("nav-poly"), 64); + file, TypeSpec("nav-poly"), 64, version); } goos::Object nav_mesh_nav_control_arr_decompile( @@ -599,9 +609,10 @@ goos::Object nav_mesh_nav_control_arr_decompile( int field_location, const TypeSystem& ts, const std::vector>& all_words, - const LinkedObjectFile* file) { + const LinkedObjectFile* file, + GameVersion version) { return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, all_words, - file, TypeSpec("nav-control"), 288); + file, TypeSpec("nav-control"), 288, version); } goos::Object xz_height_map_data_arr_decompile(const std::vector& words, @@ -610,9 +621,10 @@ goos::Object xz_height_map_data_arr_decompile(const std::vector& wor int field_location, const TypeSystem& ts, const std::vector>& all_words, - const LinkedObjectFile* file) { + const LinkedObjectFile* file, + GameVersion version) { return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, all_words, - file, TypeSpec("vector4b"), 4); + file, TypeSpec("vector4b"), 4, version); } goos::Object nav_mesh_route_arr_decompile(const std::vector& words, @@ -621,9 +633,10 @@ goos::Object nav_mesh_route_arr_decompile(const std::vector& words, int field_location, const TypeSystem& ts, const std::vector>& all_words, - const LinkedObjectFile* file) { + const LinkedObjectFile* file, + GameVersion version) { return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, all_words, - file, TypeSpec("vector4ub"), 4); + file, TypeSpec("vector4ub"), 4, version); } goos::Object sp_launch_grp_launcher_decompile(const std::vector& words, @@ -632,9 +645,10 @@ goos::Object sp_launch_grp_launcher_decompile(const std::vector& wor int field_location, const TypeSystem& ts, const std::vector>& all_words, - const LinkedObjectFile* file) { + const LinkedObjectFile* file, + GameVersion version) { return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, all_words, - file, TypeSpec("sparticle-group-item"), 32); + file, TypeSpec("sparticle-group-item"), 32, version); } goos::Object probe_dir_decompile(const std::vector& words, const std::vector& labels, @@ -642,9 +656,10 @@ goos::Object probe_dir_decompile(const std::vector& words, int field_location, const TypeSystem& ts, const std::vector>& all_words, - const LinkedObjectFile* file) { + const LinkedObjectFile* file, + GameVersion version) { return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, all_words, - file, TypeSpec("vector"), 16); + file, TypeSpec("vector"), 16, version); } goos::Object decompile_sound_spec(const TypeSpec& type, @@ -652,7 +667,8 @@ goos::Object decompile_sound_spec(const TypeSpec& type, const std::vector& labels, const std::vector>& words, const TypeSystem& ts, - const LinkedObjectFile* file) { + const LinkedObjectFile* file, + GameVersion version) { // auto normal = decompile_structure(type, label, labels, words, ts, file, false); // lg::print("Doing: {}\n", normal.print()); auto uncast_type_info = ts.lookup_type(type); @@ -673,7 +689,7 @@ goos::Object decompile_sound_spec(const TypeSpec& type, for (int i = 0; i < word_count - 1; ++i) { if (i == word_count - 2 && !obj_words.at(i).data) { // just some default initialized sound spec, don't attempt anything fancy. - return decompile_structure(type, label, labels, words, ts, file, false); + return decompile_structure(type, label, labels, words, ts, file, false, version); } if (obj_words.at(i).data) break; @@ -801,14 +817,15 @@ goos::Object decompile_structure(const TypeSpec& type, const std::vector>& words, const TypeSystem& ts, const LinkedObjectFile* file, - bool use_fancy_macros) { + bool use_fancy_macros, + GameVersion version) { // some structures we want to decompile to fancy macros instead of a raw static definiton // temp hack!! if (use_fancy_macros && file) { if (file->version == GameVersion::Jak1) { if (type == TypeSpec("sp-field-init-spec")) { ASSERT(file->version == GameVersion::Jak1); // need to update enums - return decompile_sparticle_field_init(type, label, labels, words, ts, file); + return decompile_sparticle_field_init(type, label, labels, words, ts, file, version); } if (type == TypeSpec("sparticle-group-item")) { ASSERT(file->version == GameVersion::Jak1); // need to update enums @@ -816,7 +833,7 @@ goos::Object decompile_structure(const TypeSpec& type, } } if (type == TypeSpec("sound-spec")) { - return decompile_sound_spec(type, label, labels, words, ts, file); + return decompile_sound_spec(type, label, labels, words, ts, file, version); } } @@ -851,7 +868,7 @@ goos::Object decompile_structure(const TypeSpec& type, // try again with the right type. this resets back to decompile_at_label because we may // want to get the specific function/string/etc implementations. - return decompile_at_label(actual_type, label, labels, words, ts, file); + return decompile_at_label(actual_type, label, labels, words, ts, file, version); } else { throw std::runtime_error( fmt::format("Basic has the wrong type pointer, got {} expected {} at label {}:{}", @@ -1012,49 +1029,49 @@ goos::Object decompile_structure(const TypeSpec& type, // first, get the label: field_defs_out.emplace_back( field.name(), ocean_near_indices_decompile(obj_words, labels, label.target_segment, - field_start, ts, words, file)); + field_start, ts, words, file, version)); } else if (field.name() == "data" && type.print() == "ocean-mid-masks") { field_defs_out.emplace_back( field.name(), ocean_mid_masks_decompile(obj_words, labels, label.target_segment, - field_start, ts, words, file)); + field_start, ts, words, file, version)); } else if (field.name() == "init-specs" && type.print() == "sparticle-launcher") { field_defs_out.emplace_back( field.name(), sp_field_init_spec_decompile(obj_words, labels, label.target_segment, - field_start, ts, words, file)); + field_start, ts, words, file, version)); } else if (field.name() == "vertex" && type.print() == "nav-mesh" && file->version == GameVersion::Jak1) { field_defs_out.emplace_back( field.name(), nav_mesh_vertex_arr_decompile(obj_words, labels, label.target_segment, - field_start, ts, words, file)); + field_start, ts, words, file, version)); } else if (field.name() == "poly" && type.print() == "nav-mesh" && file->version == GameVersion::Jak1) { field_defs_out.emplace_back( field.name(), nav_mesh_poly_arr_decompile(obj_words, labels, label.target_segment, - field_start, ts, words, file)); + field_start, ts, words, file, version)); } else if (field.name() == "poly-array" && type.print() == "nav-mesh" && file->version == GameVersion::Jak2) { field_defs_out.emplace_back(field.name(), nav_mesh_poly_arr_jak2_decompile( obj_words, labels, label.target_segment, - field_start, ts, words, file)); + field_start, ts, words, file, version)); } else if (field.name() == "nav-control-array" && type.print() == "nav-mesh" && file->version == GameVersion::Jak2) { field_defs_out.emplace_back(field.name(), nav_mesh_nav_control_arr_decompile( obj_words, labels, label.target_segment, - field_start, ts, words, file)); + field_start, ts, words, file, version)); } else if (field.name() == "data" && type.print() == "xz-height-map" && file->version == GameVersion::Jak2) { field_defs_out.emplace_back(field.name(), xz_height_map_data_arr_decompile( obj_words, labels, label.target_segment, - field_start, ts, words, file)); + field_start, ts, words, file, version)); } else if (field.name() == "route" && type.print() == "nav-mesh" && file->version == GameVersion::Jak1) { field_defs_out.emplace_back( field.name(), nav_mesh_route_arr_decompile(obj_words, labels, label.target_segment, - field_start, ts, words, file)); + field_start, ts, words, file, version)); } else if (field.name() == "launcher" && type.print() == "sparticle-launch-group") { field_defs_out.emplace_back(field.name(), sp_launch_grp_launcher_decompile( obj_words, labels, label.target_segment, - field_start, ts, words, file)); + field_start, ts, words, file, version)); } else if (field.name() == "col-mesh-indexes" && type.print() == "ropebridge-tuning") { field_defs_out.emplace_back( field.name(), decomp_ref_to_integer_array_guess_size( @@ -1063,7 +1080,7 @@ goos::Object decompile_structure(const TypeSpec& type, } else if (field.name() == "probe-dirs" && type.print() == "lightning-probe-vars") { field_defs_out.emplace_back(field.name(), probe_dir_decompile(obj_words, labels, label.target_segment, - field_start, ts, words, file)); + field_start, ts, words, file, version)); } else { if (field.type().base_type() == "pointer") { if (obj_words.at(field_start / 4).kind() != LinkedWord::SYM_PTR) { @@ -1100,7 +1117,8 @@ goos::Object decompile_structure(const TypeSpec& type, fake_label.offset = offset_location + field.offset() + field_type_info->get_offset(); fake_label.name = fmt::format("fake-label-{}-{}", actual_type.print(), field.name()); field_defs_out.emplace_back( - field.name(), decompile_at_label(field.type(), fake_label, labels, words, ts, file)); + field.name(), + decompile_at_label(field.type(), fake_label, labels, words, ts, file, version)); } else if (!field.is_dynamic() && field.is_array() && field.is_inline()) { // it's an inline array. let's figure out the len and stride auto len = field.array_size(); @@ -1121,7 +1139,7 @@ goos::Object decompile_structure(const TypeSpec& type, fake_label.name = fmt::format("fake-label-{}-{}-elt-{}", actual_type.print(), field.name(), elt); array_def.push_back( - decompile_at_label(field.type(), fake_label, labels, words, ts, file)); + decompile_at_label(field.type(), fake_label, labels, words, ts, file, version)); } field_defs_out.emplace_back(field.name(), pretty_print::build_list(array_def)); } else if (!field.is_dynamic() && field.is_array() && !field.is_inline()) { @@ -1149,7 +1167,7 @@ goos::Object decompile_structure(const TypeSpec& type, if (word.kind() == LinkedWord::PTR) { array_def.push_back(decompile_at_label(field.type(), labels.at(word.label_id()), labels, - words, ts, file)); + words, ts, file, version)); } else if (word.kind() == LinkedWord::PLAIN_DATA && word.data == 0) { // do nothing, the default is zero? array_def.push_back(pretty_print::to_symbol("0")); @@ -1185,7 +1203,7 @@ goos::Object decompile_structure(const TypeSpec& type, } field_defs_out.emplace_back( field.name(), decompile_at_label(field.type(), labels.at(word.label_id()), labels, - words, ts, file)); + words, ts, file, version)); } else if (word.kind() == LinkedWord::PLAIN_DATA && word.data == 0) { // do nothing, the default is zero? field_defs_out.emplace_back(field.name(), pretty_print::to_symbol("0")); @@ -1419,7 +1437,8 @@ goos::Object decompile_boxed_array(const DecompilerLabel& label, const std::vector>& words, const TypeSystem& ts, const LinkedObjectFile* file, - const std::optional& content_type_override) { + const std::optional& content_type_override, + GameVersion version) { TypeSpec content_type; auto type_ptr_word_idx = (label.offset / 4) - 1; if ((label.offset % 8) == 4) { @@ -1476,11 +1495,11 @@ goos::Object decompile_boxed_array(const DecompilerLabel& label, result.push_back(pretty_print::to_symbol("0")); } else if (word.kind() == LinkedWord::PTR) { if (content_type == TypeSpec("object")) { - result.push_back( - decompile_at_label_guess_type(labels.at(word.label_id()), labels, words, ts, file)); + result.push_back(decompile_at_label_guess_type(labels.at(word.label_id()), labels, words, + ts, file, version)); } else { result.push_back(decompile_at_label(content_type, labels.at(word.label_id()), labels, - words, ts, file)); + words, ts, file, version)); } } else if (word.kind() == LinkedWord::SYM_PTR) { result.push_back(pretty_print::to_symbol(fmt::format("'{}", word.symbol_name()))); @@ -1508,7 +1527,7 @@ goos::Object decompile_boxed_array(const DecompilerLabel& label, auto segment = labels.at(word.label_id()).target_segment; result.push_back(decomp_ref_to_inline_array_guess_size( words.at(segment), labels, segment, (first_elt_word_idx + elt) * 4, ts, words, file, - content_type.get_single_arg(), ts.get_deref_info(content_type).stride)); + content_type.get_single_arg(), ts.get_deref_info(content_type).stride, version)); } return pretty_print::build_list(result); @@ -1541,7 +1560,8 @@ goos::Object decompile_pair_elt(const LinkedWord& word, const std::vector& labels, const std::vector>& words, const TypeSystem& ts, - const LinkedObjectFile* file) { + const LinkedObjectFile* file, + GameVersion version) { if (word.kind() == LinkedWord::PTR) { auto& label = labels.at(word.label_id()); auto guessed_type = get_type_of_label(label, words); @@ -1550,10 +1570,10 @@ goos::Object decompile_pair_elt(const LinkedWord& word, } if (guessed_type == TypeSpec("pair")) { - return decompile_pair(label, labels, words, ts, false, file); + return decompile_pair(label, labels, words, ts, false, file, version); } - return decompile_at_label(*guessed_type, label, labels, words, ts, file, true); + return decompile_at_label(*guessed_type, label, labels, words, ts, file, version, true); } else if (word.kind() == LinkedWord::PLAIN_DATA && word.data == 0) { // do nothing, the default is zero? return pretty_print::to_symbol("0"); @@ -1578,7 +1598,8 @@ goos::Object decompile_pair(const DecompilerLabel& label, const std::vector>& words, const TypeSystem& ts, bool add_quote, - const LinkedObjectFile* file) { + const LinkedObjectFile* file, + GameVersion version) { if ((label.offset % 8) != 2) { if ((label.offset % 4) != 0) { throw std::runtime_error( @@ -1607,7 +1628,7 @@ goos::Object decompile_pair(const DecompilerLabel& label, if ((to_print.offset % 8) == 2) { // continue auto car_word = words.at(to_print.target_segment).at((to_print.offset - 2) / 4); - list_tokens.push_back(decompile_pair_elt(car_word, labels, words, ts, file)); + list_tokens.push_back(decompile_pair_elt(car_word, labels, words, ts, file, version)); auto cdr_word = words.at(to_print.target_segment).at((to_print.offset + 2) / 4); // if empty @@ -1625,7 +1646,7 @@ goos::Object decompile_pair(const DecompilerLabel& label, } // improper list_tokens.push_back(pretty_print::to_symbol(".")); - list_tokens.push_back(decompile_pair_elt(cdr_word, labels, words, ts, file)); + list_tokens.push_back(decompile_pair_elt(cdr_word, labels, words, ts, file, version)); if (add_quote) { return pretty_print::build_list("quote", pretty_print::build_list(list_tokens)); } else { @@ -1638,8 +1659,9 @@ goos::Object decompile_pair(const DecompilerLabel& label, } else { // improper list_tokens.push_back(pretty_print::to_symbol(".")); - list_tokens.push_back(decompile_pair_elt( - words.at(to_print.target_segment).at(to_print.offset / 4), labels, words, ts, file)); + list_tokens.push_back( + decompile_pair_elt(words.at(to_print.target_segment).at(to_print.offset / 4), labels, + words, ts, file, version)); if (add_quote) { return pretty_print::build_list("quote", pretty_print::build_list(list_tokens)); } else { diff --git a/decompiler/util/data_decompile.h b/decompiler/util/data_decompile.h index 2337a4b6cc..13a7883543 100644 --- a/decompiler/util/data_decompile.h +++ b/decompiler/util/data_decompile.h @@ -5,6 +5,7 @@ #include "common/goos/Object.h" #include "common/type_system/TypeSpec.h" #include "common/type_system/TypeSystem.h" +#include "common/versions.h" #include "decompiler/Disasm/DecompilerLabel.h" #include "decompiler/IR2/LabelDB.h" @@ -25,37 +26,43 @@ goos::Object decompile_at_label(const TypeSpec& type, const std::vector>& words, const TypeSystem& ts, const LinkedObjectFile* file, + GameVersion version, bool in_static_pair = false); goos::Object decompile_at_label_with_hint(const LabelInfo& hint, const DecompilerLabel& label, const std::vector& labels, const std::vector>& words, DecompilerTypeSystem& dts, - const LinkedObjectFile* file); + const LinkedObjectFile* file, + GameVersion version); goos::Object decompile_at_label_guess_type(const DecompilerLabel& label, const std::vector& labels, const std::vector>& words, const TypeSystem& ts, - const LinkedObjectFile* file); + const LinkedObjectFile* file, + GameVersion version); goos::Object decompile_structure(const TypeSpec& actual_type, const DecompilerLabel& label, const std::vector& labels, const std::vector>& words, const TypeSystem& ts, const LinkedObjectFile* file, - bool use_fancy_macros); + bool use_fancy_macros, + GameVersion version); goos::Object decompile_pair(const DecompilerLabel& label, const std::vector& labels, const std::vector>& words, const TypeSystem& ts, bool add_quote, - const LinkedObjectFile* file); + const LinkedObjectFile* file, + GameVersion version); goos::Object decompile_boxed_array(const DecompilerLabel& label, const std::vector& labels, const std::vector>& words, const TypeSystem& ts, const LinkedObjectFile* file, - const std::optional& content_type_override); + const std::optional& content_type_override, + GameVersion version); goos::Object decompile_value(const TypeSpec& type, const std::vector& bytes, const TypeSystem& ts); diff --git a/decompiler/util/sparticle_decompile.cpp b/decompiler/util/sparticle_decompile.cpp index c1747c338c..85fcb6b258 100644 --- a/decompiler/util/sparticle_decompile.cpp +++ b/decompiler/util/sparticle_decompile.cpp @@ -80,6 +80,83 @@ enum class FieldId { SPT_END = 67, }; +// jak2 version +enum class FieldId2 { + MISC_FIELDS_START = 0, + SPT_TEXTURE = 1, + SPT_ANIM = 2, + SPT_ANIM_SPEED = 3, + SPT_BIRTH_FUNC = 4, + SPT_JOINT_REFPOINT = 5, + SPT_NUM = 6, + SPT_SOUND = 7, + MISC_FIELDS_END = 8, + SPRITE_FIELDS_START = 9, + SPT_X = 10, + SPT_Y = 11, + SPT_Z = 12, + SPT_SCALE_X = 13, + SPT_ROT_X = 14, + SPT_ROT_Y = 15, + SPT_ROT_Z = 16, + SPT_SCALE_Y = 17, + SPT_R = 18, + SPT_G = 19, + SPT_B = 20, + SPT_A = 21, + SPRITE_FIELDS_END = 22, + CPU_FIELDS_START = 23, + SPT_OMEGA = 24, + SPT_VEL_X = 25, + SPT_VEL_Y = 26, + SPT_VEL_Z = 27, + SPT_SCALEVEL_X = 28, + SPT_ROTVEL_X = 29, + SPT_ROTVEL_Y = 30, + SPT_ROTVEL_Z = 31, + SPT_SCALEVEL_Y = 32, + SPT_FADE_R = 33, + SPT_FADE_G = 34, + SPT_FADE_B = 35, + SPT_FADE_A = 36, + SPT_ACCEL_X = 37, + SPT_ACCEL_Y = 38, + SPT_ACCEL_Z = 39, + SPT_DUMMY = 40, + SPT_QUAT_X = 41, + SPT_QUAT_Y = 42, + SPT_QUAT_Z = 43, + SPT_QUAD_W = 44, + SPT_FRICTION = 45, + SPT_TIMER = 46, + SPT_FLAGS = 47, + SPT_USERDATA = 48, + SPT_FUNC = 49, + SPT_NEXT_TIME = 50, + SPT_NEXT_LAUNCHER = 51, + CPU_FIELDS_END = 52, + LAUNCH_FIELDS_START = 53, + SPT_LAUNCHROT_X = 54, + SPT_LAUNCHROT_Y = 55, + SPT_LAUNCHROT_Z = 56, + SPT_LAUNCHROT_W = 57, + SPT_CONEROT_X = 58, + SPT_CONEROT_Y = 59, + SPT_CONEROT_Z = 60, + SPT_CONEROT_W = 61, + SPT_ROTATE_X = 62, + SPT_ROTATE_Y = 63, + SPT_ROTATE_Z = 64, + SPT_CONEROT_RADIUS = 65, + SPT_MAT_SCALE_X = 66, + SPT_MAT_SCALE_Y = 67, + SPT_MAT_SCALE_Z = 68, + LAUNCH_FIELDS_END = 69, + SPT_SCALE = 70, + SPT_SCALEVEL = 71, + SPT_END = 72, +}; + // flag vals: // 0: timer, flags, end // 1: texture, float, random-rangef @@ -115,7 +192,7 @@ struct SparticleFieldDecomp { FieldKind kind = FieldKind::INVALID; }; -const SparticleFieldDecomp field_kinds[68] = { +const SparticleFieldDecomp field_kind_jak1[68] = { {false}, // MISC_FIELDS_START = 0 {true, FieldKind::TEXTURE_ID}, // SPT_TEXTURE = 1 {false}, // SPT_ANIM = 2 @@ -183,10 +260,89 @@ const SparticleFieldDecomp field_kinds[68] = { {false}, // LAUNCH_FIELDS_END = 64 {false}, // SPT_SCALE = 65 {false}, // SPT_SCALEVEL = 66 - {true, FieldKind::END_FLAG}, // SPT_END = 67 - + {true, FieldKind::END_FLAG} // SPT_END = 67 }; +const SparticleFieldDecomp field_kind_jak2[73] = { + {false}, // MISC_FIELDS_START = 0 + {true, FieldKind::TEXTURE_ID}, // SPT_TEXTURE = 1 + {false}, // SPT_ANIM = 2 + {false}, // SPT_ANIM_SPEED = 3 + {true, FieldKind::FUNCTION}, // SPT_BIRTH_FUNC = 4 + {false}, // SPT_JOINT/REFPOINT = 5 + {true, FieldKind::FLOAT_WITH_RAND}, // SPT_NUM = 6 + {true, FieldKind::SOUND_SPEC}, // SPT_SOUND = 7 + {false}, // MISC_FIELDS_END = 8 + {false}, // SPRITE_FIELDS_START = 9 + {true, FieldKind::METER_WITH_RAND}, // SPT_X = 10 + {true, FieldKind::METER_WITH_RAND}, // SPT_Y = 11 + {true, FieldKind::METER_WITH_RAND}, // SPT_Z = 12 + {true, FieldKind::METER_WITH_RAND}, // SPT_SCALE_X = 13 + {true, FieldKind::ROT_X}, // SPT_ROT_X = 14 + {true, FieldKind::DEGREES_WITH_RAND}, // SPT_ROT_Y = 15 + {true, FieldKind::DEGREES_WITH_RAND}, // SPT_ROT_Z = 16 + {true, FieldKind::METER_WITH_RAND}, // SPT_SCALE_Y = 17 + {true, FieldKind::FLOAT_WITH_RAND}, // SPT_R = 18 + {true, FieldKind::FLOAT_WITH_RAND}, // SPT_G = 19 + {true, FieldKind::FLOAT_WITH_RAND}, // SPT_B = 20 + {true, FieldKind::FLOAT_WITH_RAND}, // SPT_A = 21 + {false}, // SPRITE_FIELDS_END = 22 + {false}, // CPU_FIELDS_START = 23 + {true, FieldKind::FLOAT_WITH_RAND}, // SPT_OMEGA = 24 + {true, FieldKind::METER_WITH_RAND}, // SPT_VEL_X = 25 (likely m/s) + {true, FieldKind::METER_WITH_RAND}, // SPT_VEL_Y = 26 + {true, FieldKind::METER_WITH_RAND}, // SPT_VEL_Z = 27 + {true, FieldKind::METER_WITH_RAND}, // SPT_SCALEVEL_X = 28 + {true, FieldKind::DEGREES_WITH_RAND}, // SPT_ROTVEL_X = 29 + {true, FieldKind::DEGREES_WITH_RAND}, // SPT_ROTVEL_Y = 30 + {true, FieldKind::DEGREES_WITH_RAND}, // SPT_ROTVEL_Z = 31 + {true, FieldKind::METER_WITH_RAND}, // SPT_SCALEVEL_Y = 32 + {true, FieldKind::FLOAT_WITH_RAND}, // SPT_FADE_R = 33 + {true, FieldKind::FLOAT_WITH_RAND}, // SPT_FADE_G = 34 + {true, FieldKind::FLOAT_WITH_RAND}, // SPT_FADE_B = 35 + {true, FieldKind::FLOAT_WITH_RAND}, // SPT_FADE_A = 36 + {true, FieldKind::FLOAT_WITH_RAND}, // SPT_ACCEL_X = 37 + {true, FieldKind::FLOAT_WITH_RAND}, // SPT_ACCEL_Y = 38 + {true, FieldKind::FLOAT_WITH_RAND}, // SPT_ACCEL_Z = 39 + {false}, // SPT_DUMMY = 40 + {false}, // SPT_QUAT_X = 41 + {false}, // SPT_QUAT_Y = 42 + {false}, // SPT_QUAT_Z = 43 + {false}, // SPT_QUAD_W = 44 + {true, FieldKind::FLOAT_WITH_RAND}, // SPT_FRICTION = 45 + {true, FieldKind::PLAIN_INT_WITH_RANDS}, // SPT_TIMER = 46 + {true, FieldKind::CPUINFO_FLAGS}, // SPT_FLAGS = 47 + {true, FieldKind::USERDATA}, // SPT_USERDATA = 48 + {true, FieldKind::FUNCTION}, // SPT_FUNC = 49 + {true, FieldKind::PLAIN_INT_WITH_RANDS}, // SPT_NEXT_TIME = 50 + {true, FieldKind::LAUNCHER_BY_ID}, // SPT_NEXT_LAUNCHER = 51 + {false}, // CPU_FIELDS_END = 52 + {false}, // LAUNCH_FIELDS_START = 53 + {true, FieldKind::DEGREES_WITH_RAND}, // SPT_LAUNCHROT_X = 54 + {true, FieldKind::DEGREES_WITH_RAND}, // SPT_LAUNCHROT_Y = 55 + {true, FieldKind::DEGREES_WITH_RAND}, // SPT_LAUNCHROT_Z = 56 + {true, FieldKind::DEGREES_WITH_RAND}, // SPT_LAUNCHROT_W = 57 + {true, FieldKind::DEGREES_WITH_RAND}, // SPT_CONEROT_X = 58 + {true, FieldKind::DEGREES_WITH_RAND}, // SPT_CONEROT_Y = 59 + {true, FieldKind::DEGREES_WITH_RAND}, // SPT_CONEROT_Z = 60 + {false}, // SPT_CONEROT_W = 61 + {true, FieldKind::DEGREES_WITH_RAND}, // SPT_ROTATE_X = 62 + {true, FieldKind::DEGREES_WITH_RAND}, // SPT_ROTATE_Y = 63 + {true, FieldKind::DEGREES_WITH_RAND}, // SPT_ROTATE_Z = 64 + {true, FieldKind::METER_WITH_RAND}, // SPT_CONEROT_RADIUS = 65 + {true, FieldKind::METER_WITH_RAND}, // SPT_MAT_SCALE_X = 66 + {true, FieldKind::METER_WITH_RAND}, // SPT_MAT_SCALE_X = 67 + {true, FieldKind::METER_WITH_RAND}, // SPT_MAT_SCALE_X = 68 + {false}, // LAUNCH_FIELDS_END = 69 + {false}, // SPT_SCALE = 70 + {false}, // SPT_SCALEVEL = 71 + {true, FieldKind::END_FLAG} // SPT_END = 72 +}; + +const std::unordered_map field_kinds = { + {GameVersion::Jak1, field_kind_jak1}, + {GameVersion::Jak2, field_kind_jak2}}; + std::string make_flags_str(const std::vector& flags) { if (flags.empty()) { return ""; @@ -536,8 +692,9 @@ goos::Object decompile_sparticle_field_init(const TypeSpec& type, const std::vector& labels, const std::vector>& words, const TypeSystem& ts, - const LinkedObjectFile* file) { - auto normal = decompile_structure(type, label, labels, words, ts, file, false); + const LinkedObjectFile* file, + GameVersion version) { + auto normal = decompile_structure(type, label, labels, words, ts, file, false, version); // lg::print("Doing: {}\n", normal.print()); auto uncast_type_info = ts.lookup_type(type); auto type_info = dynamic_cast(uncast_type_info); @@ -560,7 +717,7 @@ goos::Object decompile_sparticle_field_init(const TypeSpec& type, ASSERT(field_id <= (u32)FieldId::SPT_END); auto field_name = decompile_int_enum_from_int(TypeSpec("sp-field-id"), ts, field_id); - const auto& field_info = field_kinds[field_id]; + const auto& field_info = field_kinds.at(version)[field_id]; if (!field_info.known) { throw std::runtime_error("Unknown sparticle field: " + field_name); } @@ -635,13 +792,14 @@ goos::Object decompile_sparticle_userdata_ASSERT(const std::vector& } goos::Object decompile_sparticle_field_init(const DefpartElement::StaticInfo::PartField& field, - const TypeSystem& ts) { + const TypeSystem& ts, + GameVersion version) { auto field_id = field.field_id; auto flags = field.flags; ASSERT(field_id <= (u32)FieldId::SPT_END); auto field_name = decompile_int_enum_from_int(TypeSpec("sp-field-id"), ts, field_id); - const auto& field_info = field_kinds[field_id]; + const auto& field_info = field_kinds.at(version)[field_id]; if (!field_info.known) { throw std::runtime_error("Unknown sparticle field: " + field_name); } diff --git a/decompiler/util/sparticle_decompile.h b/decompiler/util/sparticle_decompile.h index 1d3f9866fd..cc0ee53337 100644 --- a/decompiler/util/sparticle_decompile.h +++ b/decompiler/util/sparticle_decompile.h @@ -13,9 +13,11 @@ goos::Object decompile_sparticle_field_init(const TypeSpec& type, const std::vector& labels, const std::vector>& words, const TypeSystem& ts, - const LinkedObjectFile* file); + const LinkedObjectFile* file, + GameVersion version); goos::Object decompile_sparticle_field_init(const DefpartElement::StaticInfo::PartField& field, - const TypeSystem& ts); + const TypeSystem& ts, + GameVersion version); goos::Object decompile_sparticle_group_item(const TypeSpec& type, const DecompilerLabel& label, const std::vector& labels, diff --git a/goal_src/jak2/engine/debug/debug-part.gc b/goal_src/jak2/engine/debug/debug-part.gc index c1dabd88ac..5c6b549917 100644 --- a/goal_src/jak2/engine/debug/debug-part.gc +++ b/goal_src/jak2/engine/debug/debug-part.gc @@ -7,3 +7,2018 @@ ;; DECOMP BEGINS +;; this file is debug only +(declare-file (debug)) +(when *debug-segment* +(defpart 335 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x47 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 5) (meters 2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 0.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 20) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + ) + ) + +(defpartgroup group-red-eco-strike-ground + :id 96 + :duration (seconds 0.035) + :linger-duration (seconds 1.5) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 336) (sp-item 337)) + ) + +(defpart 336 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 24.0) + (sp-flt spt-y (meters 1)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 32.0) + (sp-rnd-flt spt-a 8.0 56.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.13333334) (meters 0.16666667) 1.0) + (sp-flt spt-scalevel-x (meters 0.013333334)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -1.4222223) + (sp-flt spt-fade-a -0.35555556) + (sp-flt spt-accel-y 0.34133333) + (sp-flt spt-friction 0.7) + (sp-int spt-timer 180) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 90) + (sp-launcher-by-id spt-next-launcher 338) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +(defpart 337 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 32.0) + (sp-flt spt-y (meters 1)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.5) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-rnd-flt spt-a 64.0 8.0 1.0) + (sp-flt spt-vel-y (meters 0.3)) + (sp-flt spt-scalevel-x (meters 0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -2.8444445) + (sp-flt spt-fade-a -0.82222223) + (sp-flt spt-friction 0.7) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 45) + (sp-launcher-by-id spt-next-launcher 338) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +(defpartgroup group-red-eco-spinkick + :id 97 + :duration (seconds 0.035) + :linger-duration (seconds 1.5) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 339) (sp-item 340) (sp-item 341 :flags (bit6))) + ) + +(defpart 339 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 1) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 32.0) + (sp-rnd-flt spt-a 8.0 56.0 1.0) + (sp-flt spt-scalevel-x (meters 0.013333334)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -1.4222223) + (sp-flt spt-fade-a -0.35555556) + (sp-flt spt-accel-y 0.34133333) + (sp-int spt-timer 180) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 90) + (sp-launcher-by-id spt-next-launcher 338) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0) (meters 0.5) 1.0) + ) + ) + +(defpart 338 + :init-specs ((sp-flt spt-fade-r -0.7111111) (sp-flt spt-fade-g 0.7111111) (sp-flt spt-fade-b 0.35555556)) + ) + +(defpart 340 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 0.66) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.5) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-rnd-flt spt-a 64.0 8.0 1.0) + (sp-flt spt-scalevel-x (meters 0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -2.8444445) + (sp-flt spt-fade-a -0.82222223) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 45) + (sp-launcher-by-id spt-next-launcher 338) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0) (meters 0.1) 1.0) + ) + ) + +(defpart 341 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 4) (meters 2) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 96.0) + (sp-flt spt-a 64.0) + (sp-flt spt-fade-a -4.0) + (sp-flt spt-accel-y 0.34133333) + (sp-int spt-timer 10) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + ) + ) + +(defpartgroup group-eco-blue + :id 98 + :bounds (static-bspherem 0 0 0 1) + :parts ((sp-item 348 :flags (launch-asap) :binding 342) + (sp-item 342 :fade-after (meters 40) :flags (start-dead launch-asap) :binding 343) + (sp-item 342 :fade-after (meters 60) :flags (start-dead launch-asap) :binding 343) + (sp-item 342 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 343) + (sp-item 342 :fade-after (meters 100) :flags (start-dead launch-asap) :binding 343) + (sp-item 342 :fade-after (meters 130) :flags (start-dead launch-asap) :binding 343) + (sp-item 342 :flags (start-dead launch-asap) :binding 343) + (sp-item 343 :flags (start-dead launch-asap) :binding 344) + (sp-item 343 :flags (start-dead launch-asap) :binding 345) + (sp-item 343 :flags (start-dead launch-asap) :binding 346) + (sp-item 343 :flags (start-dead launch-asap) :binding 344) + (sp-item 343 :flags (start-dead launch-asap) :binding 345) + (sp-item 343 :flags (start-dead launch-asap) :binding 346) + (sp-item 344 :fade-after (meters 60) :flags (start-dead) :binding 347) + (sp-item 345 :fade-after (meters 70) :flags (start-dead) :binding 347) + (sp-item 346 :fade-after (meters 80) :flags (start-dead) :binding 347) + (sp-item 344 :fade-after (meters 90) :flags (start-dead) :binding 347) + (sp-item 345 :fade-after (meters 100) :flags (start-dead) :binding 347) + (sp-item 346 :fade-after (meters 100) :flags (start-dead) :binding 347) + (sp-item 347 :flags (start-dead)) + ) + ) + +(defpart 348 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 4)) + (sp-flt spt-scale-x (meters 0.01)) + (sp-copy-from-other spt-scale-y -4) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root-prim) + ) + ) + +(defpart 342 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 6.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-z (meters 0.3) (meters 0.15) 1.0) + (sp-rnd-flt spt-scale-x (meters 2) (meters 1) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 32.0 1.0) + (sp-rnd-flt spt-g 32.0 96.0 1.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-flt spt-a 32.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.0148148155) (meters 0.0044444446) 1.0) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.1) 1 36.40889) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + (sp-func spt-func 'eco-fadeout) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 349) + ) + ) + +(defpart 349 + :init-specs ((sp-flt spt-fade-a -0.21333334) (sp-int spt-timer 150)) + ) + +(defpart 343 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-z (meters 0.2) (meters 0.1) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.8) (meters 0.4) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 96.0) + (sp-flt spt-g 96.0) + (sp-flt spt-b 192.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.017777778) (meters 0.0148148155) 1.0) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0)) + (sp-rnd-flt spt-rotvel-z (degrees 269.52002) (degrees 208.99998) 1.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + (sp-func spt-func 'eco-fadeout) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 350) + ) + ) + +(defpart 350 + :init-specs ((sp-flt spt-fade-a -0.16) (sp-int spt-timer 150)) + ) + +(defpart 344 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-rnd-flt spt-num 0.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 1) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.15) (meters 0.1) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 128.0 64.0 1.0) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +(defpart 345 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-rnd-flt spt-num 0.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 1) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.15) (meters 0.1) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 128.0 64.0 1.0) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +(defpart 346 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-rnd-flt spt-num 0.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 1) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.15) (meters 0.1) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 128.0 64.0 1.0) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +(defpart 347 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-rnd-flt spt-num 0.2 0.2 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.5) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 32.0) + (sp-flt spt-g 32.0) + (sp-flt spt-b 192.0) + (sp-rnd-flt spt-a 96.0 64.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + ) + ) + +(defpartgroup group-eco-blue-collect + :id 99 + :duration (seconds 0.5) + :linger-duration (seconds 2) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 356 :flags (launch-asap) :binding 352) + (sp-item 352 :flags (start-dead launch-asap) :binding 353) + (sp-item 352 :flags (start-dead launch-asap) :binding 354) + (sp-item 352 :flags (start-dead launch-asap) :binding 353) + (sp-item 352 :flags (start-dead launch-asap) :binding 354) + (sp-item 352 :flags (start-dead launch-asap) :binding 355) + (sp-item 353 :fade-after (meters 40) :flags (start-dead)) + (sp-item 353 :fade-after (meters 40) :flags (start-dead)) + (sp-item 353 :fade-after (meters 40) :flags (start-dead)) + (sp-item 353 :fade-after (meters 40) :flags (start-dead)) + (sp-item 354 :fade-after (meters 40) :flags (start-dead)) + (sp-item 354 :fade-after (meters 40) :flags (start-dead)) + (sp-item 354 :fade-after (meters 40) :flags (start-dead)) + (sp-item 354 :fade-after (meters 40) :flags (start-dead)) + (sp-item 355 :fade-after (meters 40) :flags (start-dead)) + (sp-item 355 :fade-after (meters 40) :flags (start-dead)) + (sp-item 355 :fade-after (meters 40) :flags (start-dead)) + (sp-item 355 :fade-after (meters 40) :flags (start-dead)) + ) + ) + +(defpart 356 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 4)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 96.0) + (sp-flt spt-g 96.0) + (sp-flt spt-b 192.0) + (sp-flt spt-a 64.0) + (sp-flt spt-fade-a -3.2) + (sp-int spt-timer 150) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'part-tracker-track-root) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 277) + ) + ) + +(defpart 352 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 5.0) + (sp-rnd-flt spt-y (meters -4) (meters 16) 1.0) + (sp-flt spt-z (meters 0.08)) + (sp-rnd-flt spt-scale-x (meters 0.75) (meters 0.5) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 127.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters -0.017777778) (meters 0.00048828125) 145.63556) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0.08)) + (sp-flt spt-accel-z -21.845333) + (sp-int spt-timer 150) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + ) + ) + +(defpart 353 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 1) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.15) (meters 0.1) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 128.0 64.0 1.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +(defpart 354 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 1) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.15) (meters 0.1) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 128.0 64.0 1.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +(defpart 355 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 1) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.15) (meters 0.1) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 128.0 64.0 1.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +(defpartgroup group-part-vent-blue-active + :id 100 + :bounds (static-bspherem 0 5 0 5) + :parts ((sp-item 360 :fade-after (meters 140) :falloff-to (meters 140) :binding 357) + (sp-item 360 :fade-after (meters 140) :falloff-to (meters 140) :binding 358) + (sp-item 360 :fade-after (meters 140) :falloff-to (meters 140) :binding 359) + (sp-item 361) + (sp-item 362 :fade-after (meters 120) :falloff-to (meters 120)) + (sp-item 363 :fade-after (meters 120) :falloff-to (meters 120)) + (sp-item 364 :fade-after (meters 120) :falloff-to (meters 120)) + (sp-item 359 :fade-after (meters 30) :falloff-to (meters 30) :flags (start-dead)) + (sp-item 358 :fade-after (meters 60) :falloff-to (meters 60) :flags (start-dead)) + (sp-item 357 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 359 :fade-after (meters 90) :falloff-to (meters 90) :flags (start-dead)) + (sp-item 358 :fade-after (meters 100) :falloff-to (meters 100) :flags (start-dead)) + (sp-item 357 :fade-after (meters 110) :falloff-to (meters 110) :flags (start-dead)) + (sp-item 359 :fade-after (meters 120) :falloff-to (meters 120) :flags (start-dead)) + (sp-item 358 :fade-after (meters 120) :falloff-to (meters 120) :flags (start-dead)) + ) + ) + +(defpartgroup group-part-vent-blue-inactive + :id 101 + :bounds (static-bspherem 0 5 0 5) + :parts ((sp-item 360 :fade-after (meters 100)) (sp-item 361)) + ) + +(defpart 361 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x26 :page #xc)) + (sp-rnd-flt spt-num 0.1 1.0 1.0) + (sp-rnd-flt spt-x (meters -0.75) (meters 1.5) 1.0) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-z (meters -0.75) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 1.4) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 32.0) + (sp-flt spt-g 32.0) + (sp-flt spt-b 192.0) + (sp-flt spt-a 64.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-flt spt-fade-a -0.2) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + ) + ) + +(defpart 360 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-rnd-flt spt-num 0.05 0.1 1.0) + (sp-rnd-flt spt-x (meters -0.75) (meters 1.5) 1.0) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-z (meters -0.75) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 0.4) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 192.0) + (sp-flt spt-a 96.0) + (sp-rnd-flt spt-vel-y (meters 0.01) (meters 0.01) 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + ) + ) + +(defpart 357 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +(defpart 358 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +(defpart 359 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +(defpart 362 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-rnd-flt spt-num 0.1 0.5 1.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1) 1.0) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-z (meters -0.5) (meters 1) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 1.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 10.0) (degrees 160.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 91) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +(defpart 363 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-rnd-flt spt-num 0.2 0.4 1.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1) 1.0) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-z (meters -0.5) (meters 1) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 1.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 10.0) (degrees 160.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 91) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +(defpart 364 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-rnd-flt spt-num 0.3 0.1 1.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1) 1.0) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-z (meters -0.5) (meters 1) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 1.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 10.0) (degrees 160.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 91) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +(defpart 351 + :init-specs ((sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-fade-r -1.0) + (sp-flt spt-fade-g -1.0) + (sp-flt spt-fade-a -2.0) + ) + ) + +(defpartgroup group-eco-red + :id 102 + :bounds (static-bspherem 0 0 0 1) + :parts ((sp-item 369 :flags (launch-asap) :binding 365) + (sp-item 365 :flags (start-dead launch-asap) :binding 366) + (sp-item 365 :flags (start-dead launch-asap) :binding 366) + (sp-item 365 :flags (start-dead launch-asap) :binding 366) + (sp-item 365 :flags (start-dead launch-asap) :binding 366) + (sp-item 365 :flags (start-dead launch-asap) :binding 366) + (sp-item 365 :flags (start-dead launch-asap) :binding 366) + (sp-item 366 :flags (start-dead launch-asap) :binding 367) + (sp-item 366 :flags (start-dead launch-asap) :binding 367) + (sp-item 366 :flags (start-dead launch-asap) :binding 367) + (sp-item 367 :fade-after (meters 100) :flags (start-dead launch-asap) :binding 368) + (sp-item 367 :fade-after (meters 100) :flags (start-dead launch-asap) :binding 368) + (sp-item 367 :fade-after (meters 100) :flags (start-dead launch-asap) :binding 368) + (sp-item 368 :fade-after (meters 90) :falloff-to (meters 110) :flags (start-dead)) + (sp-item 368 :fade-after (meters 90) :falloff-to (meters 110) :flags (start-dead)) + (sp-item 368 :fade-after (meters 90) :falloff-to (meters 110) :flags (start-dead)) + ) + ) + +(defpart 369 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 4)) + (sp-flt spt-scale-x (meters 0.01)) + (sp-copy-from-other spt-scale-y -4) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root-prim) + ) + ) + +(defpart 365 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 6.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-z (meters 0.15) (meters 0.2) 1.0) + (sp-rnd-flt spt-scale-x (meters 2) (meters 2) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 24.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.0148148155) (meters 0.0044444446) 1.0) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.1) 1 36.40889) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + (sp-func spt-func 'eco-fadeout) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 370) + ) + ) + +(defpart 370 + :init-specs ((sp-flt spt-fade-a -0.16) (sp-int spt-timer 150)) + ) + +(defpart 366 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-z (meters 0.25) (meters 0.1) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 0.4) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-a 32.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.017777778) (meters 0.0148148155) 1.0) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0)) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + (sp-func spt-func 'eco-fadeout) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 371) + ) + ) + +(defpart 371 + :init-specs ((sp-flt spt-fade-a -0.21333334) (sp-int spt-timer 150)) + ) + +(defpart 367 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-z (meters 0.07) (meters 0.03) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 0.6) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-a 32.0) + (sp-flt spt-vel-x (meters 0.11259259)) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + (sp-func spt-func 'eco-fadeout) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 371) + ) + ) + +(defpart 368 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 0.1 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.2) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 100.0 28.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters -0.00038095238)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.4) + (sp-flt spt-fade-a -0.01904762) + (sp-rnd-flt spt-accel-y 0.40960002 0.6144 1.0) + (sp-int-plain-rnd spt-timer 30 149 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 240) + (sp-launcher-by-id spt-next-launcher 372) + ) + ) + +(defpart 372 + :init-specs ((sp-flt spt-fade-g 0.0)) + ) + +(defpartgroup group-eco-red-collect + :id 103 + :duration (seconds 0.5) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 12) + :parts ((sp-item 375 :flags (launch-asap) :binding 373) + (sp-item 373 :flags (start-dead launch-asap) :binding 374) + (sp-item 373 :flags (start-dead launch-asap) :binding 374) + (sp-item 373 :flags (start-dead launch-asap) :binding 374) + (sp-item 373 :flags (start-dead launch-asap) :binding 374) + (sp-item 373 :flags (start-dead launch-asap) :binding 374) + (sp-item 374 :fade-after (meters 40) :flags (start-dead)) + (sp-item 374 :fade-after (meters 40) :flags (start-dead)) + (sp-item 374 :fade-after (meters 40) :flags (start-dead)) + (sp-item 374 :fade-after (meters 40) :flags (start-dead)) + (sp-item 374 :fade-after (meters 40) :flags (start-dead)) + ) + ) + +(defpart 375 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 4)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -3.2) + (sp-int spt-timer 150) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'part-tracker-track-root) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 277) + ) + ) + +(defpart 373 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 5.0) + (sp-rnd-flt spt-y (meters -4) (meters 16) 1.0) + (sp-flt spt-z (meters 0.08)) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 127.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters -0.017777778) (meters 0.00048828125) 145.63556) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0.08)) + (sp-flt spt-accel-z -21.845333) + (sp-int spt-timer 150) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + ) + ) + +(defpart 374 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 100.0 28.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.006666667) 1.0) + (sp-flt spt-scalevel-x (meters -0.005555555)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -2.0) + (sp-flt spt-fade-a -0.22857143) + (sp-rnd-flt spt-accel-y 0.40960002 0.6144 1.0) + (sp-int spt-timer 54) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 240) + (sp-launcher-by-id spt-next-launcher 376) + ) + ) + +(defpartgroup group-part-vent-red-active + :id 104 + :bounds (static-bspherem 0 3 0 5) + :parts ((sp-item 380 :fade-after (meters 30) :period 330 :length 5 :binding 377) + (sp-item 380 :fade-after (meters 60) :period 736 :length 5 :binding 377) + (sp-item 380 :fade-after (meters 90) :period 936 :length 5 :binding 377) + (sp-item 380 :fade-after (meters 130) :period 528 :length 5 :binding 377) + (sp-item 380 :fade-after (meters 170) :period 801 :length 5 :binding 377) + (sp-item 377 :flags (start-dead launch-asap) :binding 378) + (sp-item 377 :flags (start-dead launch-asap) :binding 378) + (sp-item 377 :flags (start-dead launch-asap) :binding 378) + (sp-item 377 :flags (start-dead launch-asap) :binding 378) + (sp-item 377 :flags (start-dead launch-asap) :binding 378) + (sp-item 377 :flags (start-dead launch-asap) :binding 378) + (sp-item 377 :flags (start-dead launch-asap) :binding 378) + (sp-item 377 :flags (start-dead launch-asap) :binding 378) + (sp-item 378 :flags (start-dead launch-asap) :binding 379) + (sp-item 378 :flags (start-dead launch-asap) :binding 379) + (sp-item 378 :flags (start-dead launch-asap) :binding 379) + (sp-item 378 :flags (start-dead launch-asap) :binding 379) + (sp-item 378 :flags (start-dead launch-asap) :binding 379) + (sp-item 378 :flags (start-dead launch-asap) :binding 379) + (sp-item 378 :flags (start-dead launch-asap) :binding 379) + (sp-item 378 :flags (start-dead launch-asap) :binding 379) + (sp-item 379 :fade-after (meters 90) :falloff-to (meters 50) :flags (start-dead)) + (sp-item 379 :fade-after (meters 90) :falloff-to (meters 60) :flags (start-dead)) + (sp-item 379 :fade-after (meters 90) :falloff-to (meters 70) :flags (start-dead)) + (sp-item 379 :fade-after (meters 90) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 379 :fade-after (meters 90) :falloff-to (meters 90) :flags (start-dead)) + (sp-item 379 :fade-after (meters 90) :falloff-to (meters 100) :flags (start-dead)) + (sp-item 379 :fade-after (meters 90) :falloff-to (meters 100) :flags (start-dead)) + (sp-item 379 :fade-after (meters 90) :falloff-to (meters 100) :flags (start-dead)) + (sp-item 381 :fade-after (meters 140) :falloff-to (meters 140)) + (sp-item 382) + ) + ) + +(defpartgroup group-part-vent-red-inactive + :id 105 + :bounds (static-bspherem 0 3 0 5) + :parts ((sp-item 381 :fade-after (meters 140) :falloff-to (meters 140)) (sp-item 382)) + ) + +(defpart 382 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 0.6 0.6 1.0) + (sp-rnd-flt spt-x (meters -0.75) (meters 1.5) 1.0) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-z (meters -0.75) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.9) (meters 1.9) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 32.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.1) 1 36.40889) + (sp-flt spt-fade-a -0.10666667) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + ) + ) + +(defpart 381 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-rnd-flt spt-num 0.1 0.3 1.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1) 1.0) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-z (meters -0.5) (meters 1) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 0.4) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 64.0) + (sp-rnd-flt spt-vel-y (meters 0.01) (meters 0.01) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.1) (degrees 0.1) 1.0) + (sp-flt spt-fade-a -0.21333334) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + ) + ) + +(defpart 380 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 1.5) 1.0) + (sp-flt spt-scale-x (meters 0.01)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-a 1.0) + (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.0033333334) 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 5.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +(defpart 377 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-flt spt-z (meters 0.5)) + (sp-flt spt-scale-x (meters 1)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.017777778) (meters 0.017777778) 1.0) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.1) 1 36.40889) + (sp-flt spt-fade-a -0.28444445) + (sp-int spt-timer 450) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + ) + ) + +(defpart 378 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-z (meters 0.25) (meters 0.1) 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.5) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-a 32.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.017777778) (meters 0.0148148155) 1.0) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0)) + (sp-int spt-timer 450) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + ) + ) + +(defpart 379 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 0.1 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 100.0 28.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.006666667) 1.0) + (sp-flt spt-scalevel-x (meters -0.0023809525)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.4) + (sp-flt spt-fade-a -0.07619048) + (sp-rnd-flt spt-accel-y 0.40960002 0.6144 1.0) + (sp-int-plain-rnd spt-timer 30 149 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 240) + (sp-launcher-by-id spt-next-launcher 376) + ) + ) + +(defpart 376 + :init-specs ((sp-flt spt-fade-g 0.0)) + ) + +(defpartgroup group-part-vent-yellow-active + :id 106 + :bounds (static-bspherem 0 3 0 5) + :parts ((sp-item 386 :fade-after (meters 40) :period 330 :length 5 :binding 383) + (sp-item 386 :fade-after (meters 60) :period 736 :length 5 :binding 383) + (sp-item 386 :fade-after (meters 80) :period 936 :length 5 :binding 383) + (sp-item 386 :fade-after (meters 100) :period 528 :length 5 :binding 383) + (sp-item 386 :fade-after (meters 130) :period 801 :length 5 :binding 383) + (sp-item 383 :flags (start-dead launch-asap) :binding 384) + (sp-item 383 :flags (start-dead launch-asap) :binding 384) + (sp-item 383 :flags (start-dead launch-asap) :binding 384) + (sp-item 383 :flags (start-dead launch-asap) :binding 384) + (sp-item 383 :flags (start-dead launch-asap) :binding 384) + (sp-item 383 :flags (start-dead launch-asap) :binding 384) + (sp-item 383 :flags (start-dead launch-asap) :binding 384) + (sp-item 383 :flags (start-dead launch-asap) :binding 384) + (sp-item 384 :flags (start-dead launch-asap) :binding 385) + (sp-item 384 :flags (start-dead launch-asap) :binding 385) + (sp-item 384 :flags (start-dead launch-asap) :binding 385) + (sp-item 384 :flags (start-dead launch-asap) :binding 385) + (sp-item 384 :flags (start-dead launch-asap) :binding 385) + (sp-item 384 :flags (start-dead launch-asap) :binding 385) + (sp-item 384 :flags (start-dead launch-asap) :binding 385) + (sp-item 384 :flags (start-dead launch-asap) :binding 385) + (sp-item 385 :fade-after (meters 90) :falloff-to (meters 60) :flags (start-dead)) + (sp-item 385 :fade-after (meters 90) :falloff-to (meters 70) :flags (start-dead)) + (sp-item 385 :fade-after (meters 90) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 385 :fade-after (meters 90) :falloff-to (meters 90) :flags (start-dead)) + (sp-item 385 :fade-after (meters 90) :falloff-to (meters 100) :flags (start-dead)) + (sp-item 385 :fade-after (meters 90) :falloff-to (meters 100) :flags (start-dead)) + (sp-item 385 :fade-after (meters 90) :falloff-to (meters 100) :flags (start-dead)) + (sp-item 385 :fade-after (meters 90) :falloff-to (meters 100) :flags (start-dead)) + (sp-item 387 :fade-after (meters 140) :falloff-to (meters 140)) + (sp-item 388) + ) + ) + +(defpartgroup group-part-vent-yellow-inactive + :id 107 + :bounds (static-bspherem 0 3 0 5) + :parts ((sp-item 387 :fade-after (meters 140) :falloff-to (meters 140)) (sp-item 388)) + ) + +(defpart 388 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 0.6 0.6 1.0) + (sp-rnd-flt spt-x (meters -0.75) (meters 1.5) 1.0) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-z (meters -0.75) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.9) (meters 1.9) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 92.0 32.0 1.0) + (sp-rnd-flt spt-g 32.0 92.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 32.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.1) 1 36.40889) + (sp-flt spt-fade-a -0.10666667) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + ) + ) + +(defpart 387 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-rnd-flt spt-num 0.1 0.3 1.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1) 1.0) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-z (meters -0.5) (meters 1) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 0.4) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 64.0) + (sp-rnd-flt spt-vel-y (meters 0.01) (meters 0.01) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.1) (degrees 0.1) 1.0) + (sp-flt spt-fade-a -0.21333334) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + ) + ) + +(defpart 386 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 1.5) 1.0) + (sp-flt spt-scale-x (meters 0.01)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-a 1.0) + (sp-rnd-flt spt-vel-y (meters 0.013333334) (meters 0.013333334) 1.0) + (sp-int spt-timer 375) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 5.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +(defpart 383 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 16) 1.0) + (sp-flt spt-y (meters 0)) + (sp-rnd-flt spt-z (meters 0.2) (meters 0.2) 1.0) + (sp-flt spt-scale-x (meters 1)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-flt spt-vel-x (meters 0.10666667)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667) + (sp-flt spt-fade-a -0.34133333) + (sp-int spt-timer 375) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + ) + ) + +(defpart 384 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-flt spt-z (meters 0.2)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-flt spt-vel-x (meters 0.11259259)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667) + (sp-flt spt-fade-a -0.34133333) + (sp-int spt-timer 375) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + ) + ) + +(defpart 385 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-rnd-flt spt-num 0.5 2.0 1.0) + (sp-flt spt-y (meters -0.05)) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.1) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 100.0 28.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0023333333) (meters 0.0016666667) 1.0) + (sp-flt spt-scalevel-x (meters -0.0016666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.4) + (sp-flt spt-fade-a -0.024242423) + (sp-rnd-flt spt-accel-y -0.40960002 -1.2288 1.0) + (sp-flt spt-friction 0.93) + (sp-int-plain-rnd spt-timer 30 209 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 90) + (sp-launcher-by-id spt-next-launcher 389) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 0.05)) + ) + ) + +(defpart 389 + :init-specs ((sp-flt spt-fade-r 0.0)) + ) + +(defpartgroup group-eco-yellow + :id 108 + :bounds (static-bspherem 0 0 0 1) + :parts ((sp-item 394 :flags (launch-asap) :binding 390) + (sp-item 390 :flags (start-dead launch-asap) :binding 391) + (sp-item 390 :flags (start-dead launch-asap) :binding 391) + (sp-item 390 :flags (start-dead launch-asap) :binding 391) + (sp-item 390 :flags (start-dead launch-asap) :binding 391) + (sp-item 390 :flags (start-dead launch-asap) :binding 391) + (sp-item 390 :flags (start-dead launch-asap) :binding 391) + (sp-item 391 :flags (start-dead launch-asap) :binding 392) + (sp-item 391 :flags (start-dead launch-asap) :binding 392) + (sp-item 391 :flags (start-dead launch-asap) :binding 392) + (sp-item 391 :flags (start-dead launch-asap) :binding 392) + (sp-item 392 :fade-after (meters 100) :flags (start-dead launch-asap) :binding 393) + (sp-item 392 :fade-after (meters 100) :flags (start-dead launch-asap) :binding 393) + (sp-item 392 :fade-after (meters 100) :flags (start-dead launch-asap) :binding 393) + (sp-item 392 :fade-after (meters 100) :flags (start-dead launch-asap) :binding 393) + (sp-item 393 :fade-after (meters 90) :falloff-to (meters 110) :flags (start-dead)) + (sp-item 393 :fade-after (meters 90) :falloff-to (meters 110) :flags (start-dead)) + (sp-item 393 :fade-after (meters 90) :falloff-to (meters 110) :flags (start-dead)) + (sp-item 393 :fade-after (meters 90) :falloff-to (meters 110) :flags (start-dead)) + ) + ) + +(defpart 394 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 4)) + (sp-flt spt-scale-x (meters 0.01)) + (sp-copy-from-other spt-scale-y -4) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root-prim) + ) + ) + +(defpart 390 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 5.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-z (meters 0.15) (meters 0.2) 1.0) + (sp-rnd-flt spt-scale-x (meters 2) (meters 2) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 192.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 16.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.0148148155) (meters 0.0044444446) 1.0) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.1) 1 36.40889) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + (sp-func spt-func 'eco-fadeout) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 395) + ) + ) + +(defpart 395 + :init-specs ((sp-flt spt-fade-a -0.10666667) (sp-int spt-timer 150)) + ) + +(defpart 391 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-z (meters 0.75) (meters 0.1) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-a 32.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.017777778) (meters 0.0148148155) 1.0) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0)) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + (sp-func spt-func 'eco-fadeout) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 396) + ) + ) + +(defpart 396 + :init-specs ((sp-flt spt-fade-a -0.16) (sp-int spt-timer 150)) + ) + +(defpart 392 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-z (meters 0.12) (meters 0.03) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-a 32.0) + (sp-flt spt-vel-x (meters 0.11259259)) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + (sp-func spt-func 'eco-fadeout) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 396) + ) + ) + +(defpart 393 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-rnd-flt spt-num 0.1 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.1) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 100.0 28.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters -0.0006190476)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.4) + (sp-flt spt-fade-a -0.01904762) + (sp-rnd-flt spt-accel-y -0.40960002 -0.6144 1.0) + (sp-int-plain-rnd spt-timer 30 299 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 240) + (sp-launcher-by-id spt-next-launcher 397) + ) + ) + +(defpart 397 + :init-specs ((sp-flt spt-fade-g 0.0)) + ) + +(defpartgroup group-eco-yellow-collect + :id 109 + :duration (seconds 0.5) + :linger-duration (seconds 2) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 400 :flags (launch-asap) :binding 398) + (sp-item 398 :flags (start-dead launch-asap) :binding 399) + (sp-item 398 :flags (start-dead launch-asap) :binding 399) + (sp-item 398 :flags (start-dead launch-asap) :binding 399) + (sp-item 398 :flags (start-dead launch-asap) :binding 399) + (sp-item 398 :flags (start-dead launch-asap) :binding 399) + (sp-item 399 :fade-after (meters 40) :flags (start-dead)) + (sp-item 399 :fade-after (meters 40) :flags (start-dead)) + (sp-item 399 :fade-after (meters 40) :flags (start-dead)) + (sp-item 399 :fade-after (meters 40) :flags (start-dead)) + (sp-item 399 :fade-after (meters 40) :flags (start-dead)) + ) + ) + +(defpart 400 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 4)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 192.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 64.0) + (sp-flt spt-fade-a -3.2) + (sp-int spt-timer 150) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'part-tracker-track-root) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 277) + ) + ) + +(defpart 398 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 5.0) + (sp-rnd-flt spt-y (meters -4) (meters 16) 1.0) + (sp-flt spt-z (meters 0.08)) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 127.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters -0.017777778) (meters 0.00048828125) 145.63556) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0.08)) + (sp-flt spt-accel-z -21.845333) + (sp-int spt-timer 150) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + ) + ) + +(defpart 399 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.1) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 100.0 28.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters -0.0006190476)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.4) + (sp-flt spt-fade-a -0.01904762) + (sp-rnd-flt spt-accel-y -0.40960002 -0.6144 1.0) + (sp-int-plain-rnd spt-timer 30 299 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 240) + (sp-launcher-by-id spt-next-launcher 397) + ) + ) + +(defpartgroup group-part-vent-green-active + :id 110 + :bounds (static-bspherem 0 5 0 5) + :parts ((sp-item 403 :fade-after (meters 80) :falloff-to (meters 80) :period 48 :length 5 :binding 401) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 404 :fade-after (meters 100)) + (sp-item 405) + ) + ) + +(defpart 405 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 0.6 0.6 1.0) + (sp-rnd-flt spt-x (meters -0.75) (meters 1.5) 1.0) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-z (meters -0.75) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.9) (meters 1.9) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 64.0 1.0) + (sp-rnd-flt spt-g 92.0 32.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 32.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.1) 1 36.40889) + (sp-flt spt-fade-a -0.10666667) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + ) + ) + +(defpart 404 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-rnd-flt spt-num 0.1 0.3 1.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1) 1.0) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-z (meters -0.5) (meters 1) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 0.4) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 64.0) + (sp-rnd-flt spt-vel-y (meters 0.01) (meters 0.01) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.1) (degrees 0.1) 1.0) + (sp-flt spt-fade-a -0.21333334) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + ) + ) + +(defpart 403 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters -1) (meters 2) 1.0) + (sp-flt spt-scale-x (meters 0.01)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.0033333334) 1.0) + (sp-int spt-timer 750) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +(defpart 401 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-z (meters 0.2) (meters 0.6) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.3) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 127.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.053333335) (meters 0.053333335) 1.0) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0)) + (sp-flt spt-fade-r -0.2) + (sp-int-plain-rnd spt-timer 600 149 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + (sp-int-plain-rnd spt-next-time 450 149 1) + (sp-launcher-by-id spt-next-launcher 406) + ) + ) + +(defpart 406 + :init-specs ((sp-flt spt-fade-r 0.0) (sp-flt spt-fade-a -0.8466667) (sp-int spt-timer 150)) + ) + +(defpart 402 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.2)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 96.0) + (sp-flt spt-scalevel-x (meters -0.0006060606)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -2.8333333) + (sp-flt spt-accel-y -0.81920004) + (sp-int-plain-rnd spt-timer 30 299 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 90) + (sp-launcher-by-id spt-next-launcher 286) + ) + ) + +(defpartgroup group-fuel-cell-starburst + :id 111 + :bounds (static-bspherem 0 0.5 0 1.5) + :parts ((sp-item 407 :fade-after (meters 35)) + (sp-item 408 :fade-after (meters 20)) + (sp-item 409 :flags (bit1 launch-asap)) + (sp-item 410 :flags (bit1 launch-asap)) + ) + ) + +(defpart 407 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.1) (meters 0.8) 1.0) + (sp-rnd-int spt-r 0 1 255.0) + (sp-rnd-int spt-g 0 1 255.0) + (sp-rnd-int spt-b 0 1 255.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-scalevel-y (meters 0.009765625)) + (sp-flt spt-fade-a 0.35555556) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root-prim) + (sp-int spt-next-time 90) + (sp-launcher-by-id spt-next-launcher 411) + ) + ) + +(defpart 411 + :init-specs ((sp-flt spt-fade-a -0.53333336)) + ) + +(defpart 408 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 0.06) + (sp-rnd-flt spt-scale-x (meters 2) (meters 0.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 0.2)) + (sp-rnd-int spt-r 0 1 255.0) + (sp-rnd-int spt-g 0 1 255.0) + (sp-rnd-int spt-b 0 1 255.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-fade-a 0.32) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root-prim) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 411) + ) + ) + +(defpart 409 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 3.5)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 3)) + (sp-flt spt-r 192.0) + (sp-flt spt-g 192.0) + (sp-rnd-flt spt-b 0.0 128.0 1.0) + (sp-flt spt-a 64.0) + (sp-flt spt-rotvel-z (degrees -0.4)) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root-prim) + ) + ) + +(defpart 410 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 4)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 3.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 64.0) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root-prim) + ) + ) + +;; ERROR: function has no type analysis. Cannot decompile. + +(defpart 412 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.1) (meters 0.8) 1.0) + (sp-flt spt-r 192.0) + (sp-flt spt-g 192.0) + (sp-rnd-flt spt-b 0.0 128.0 1.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-scalevel-y (meters 0.009765625)) + (sp-flt spt-fade-a 0.35555556) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 90) + (sp-launcher-by-id spt-next-launcher 413) + ) + ) + +(defpart 413 + :init-specs ((sp-flt spt-fade-a -0.53333336)) + ) + +(defpart 414 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 0.06) + (sp-rnd-flt spt-scale-x (meters 2) (meters 0.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 0.2)) + (sp-flt spt-r 192.0) + (sp-flt spt-g 192.0) + (sp-rnd-flt spt-b 0.0 128.0 1.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-fade-a 0.32) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 413) + ) + ) + +(defpart 415 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 2.5)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 2)) + (sp-flt spt-r 192.0) + (sp-flt spt-g 192.0) + (sp-rnd-flt spt-b 0.0 128.0 1.0) + (sp-flt spt-a 32.0) + (sp-flt spt-rotvel-z (degrees -0.4)) + (sp-int spt-timer 3600) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-track-root-money) + ) + ) + +(defpart 416 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 3)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 2.5)) + (sp-flt spt-r 192.0) + (sp-flt spt-g 192.0) + (sp-rnd-flt spt-b 0.0 128.0 1.0) + (sp-flt spt-a 32.0) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-int spt-timer 3600) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-track-root-money) + ) + ) + +(defpartgroup group-money-starburst :id 112 :bounds (static-bspherem 0 0.5 0 1.5) :parts ((sp-item 417))) + +(defpartgroup group-buzzer-effect + :id 113 + :bounds (static-bspherem 0 0 0 1) + :parts ((sp-item 418 :flags (is-3d)) (sp-item 419 :flags (is-3d))) + ) + +(defpart 418 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-flt spt-num 2.0) + (sp-rnd-flt spt-scale-x (meters 1.3) (meters 0.2) 1.0) + (sp-rnd-flt spt-rot-x 0.0 12743.111 1.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 32.0) + (sp-flt spt-fade-a -1.0) + (sp-int spt-timer 10) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-12 sp-cpuinfo-flag-14) + (sp-rnd-flt spt-launchrot-x (degrees -180.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-launchrot-y (degrees -180.0) (degrees 360.0) 1.0) + ) + ) + +(defpart 419 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-flt spt-num 2.0) + (sp-rnd-flt spt-scale-x (meters 1.3) (meters 0.2) 1.0) + (sp-rnd-flt spt-rot-x 20024.889 12743.111 1.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 32.0) + (sp-flt spt-fade-a -1.0) + (sp-int spt-timer 10) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-12 sp-cpuinfo-flag-14) + (sp-rnd-flt spt-launchrot-x (degrees -180.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-launchrot-y (degrees -180.0) (degrees 360.0) 1.0) + ) + ) + +(defpartgroup group-blue-collect + :id 114 + :duration (seconds 0.017) + :linger-duration (seconds 4) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 12) + :parts ((sp-item 420) (sp-item 421) (sp-item 422)) + ) + +(defpart 420 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-scale-x (meters 6) (meters 1) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.5) (meters 1) 1.0) + (sp-rnd-flt spt-r 32.0 32.0 1.0) + (sp-rnd-flt spt-g 60.0 20.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-flt spt-scalevel-y (meters 0.009765625)) + (sp-flt spt-fade-a 2.1333334) + (sp-int spt-timer 450) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root) + (sp-int-plain-rnd spt-next-time 5 19 1) + (sp-launcher-by-id spt-next-launcher 307) + ) + ) + +(defpart 421 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 6.0) + (sp-rnd-flt spt-scale-x (meters 8) (meters 2) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 0.5)) + (sp-rnd-flt spt-r 32.0 32.0 1.0) + (sp-rnd-flt spt-g 60.0 20.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-flt spt-fade-a 2.1333334) + (sp-int spt-timer 450) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root) + (sp-int-plain-rnd spt-next-time 5 19 1) + (sp-launcher-by-id spt-next-launcher 307) + ) + ) + +(defpart 422 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 6)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 32.0 32.0 1.0) + (sp-rnd-flt spt-g 60.0 20.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-flt spt-scalevel-x (meters 0.1)) + (sp-flt spt-rotvel-z (degrees -0.8)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.42666668) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root) + (sp-int spt-next-time 60) + (sp-launcher-by-id spt-next-launcher 310) + ) + ) + +(defpartgroup group-yellow-collect + :id 115 + :duration (seconds 0.017) + :linger-duration (seconds 4) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 423) (sp-item 424) (sp-item 425)) + ) + +(defpart 423 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-scale-x (meters 6) (meters 1) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.5) (meters 1) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 192.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-flt spt-scalevel-y (meters 0.009765625)) + (sp-flt spt-fade-a 2.1333334) + (sp-int spt-timer 450) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root) + (sp-int-plain-rnd spt-next-time 5 19 1) + (sp-launcher-by-id spt-next-launcher 307) + ) + ) + +(defpart 424 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 6.0) + (sp-rnd-flt spt-scale-x (meters 8) (meters 2) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 0.5)) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 192.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-flt spt-fade-a 2.1333334) + (sp-int spt-timer 450) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root) + (sp-int-plain-rnd spt-next-time 5 19 1) + (sp-launcher-by-id spt-next-launcher 307) + ) + ) + +(defpart 425 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 6)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 192.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-flt spt-scalevel-x (meters 0.1)) + (sp-flt spt-rotvel-z (degrees -0.8)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.42666668) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root) + (sp-int spt-next-time 60) + (sp-launcher-by-id spt-next-launcher 310) + ) + ) + +(defpart 310 + :init-specs ((sp-flt spt-scalevel-x (meters -0.025)) (sp-copy-from-other spt-scalevel-y -4)) + ) + +(defpartgroup group-red-collect + :id 116 + :duration (seconds 0.017) + :linger-duration (seconds 4) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 12) + :parts ((sp-item 426) (sp-item 427) (sp-item 428)) + ) + +(defpart 426 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-scale-x (meters 6) (meters 1) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.5) (meters 1) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-flt spt-scalevel-y (meters 0.009765625)) + (sp-flt spt-fade-a 2.1333334) + (sp-int spt-timer 450) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root) + (sp-int-plain-rnd spt-next-time 5 19 1) + (sp-launcher-by-id spt-next-launcher 307) + ) + ) + +(defpart 427 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 6.0) + (sp-rnd-flt spt-scale-x (meters 8) (meters 2) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 0.5)) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-flt spt-fade-a 2.1333334) + (sp-int spt-timer 450) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root) + (sp-int-plain-rnd spt-next-time 5 19 1) + (sp-launcher-by-id spt-next-launcher 307) + ) + ) + +(defpart 428 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 6)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-flt spt-scalevel-x (meters 0.1)) + (sp-flt spt-rotvel-z (degrees -0.8)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.42666668) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root) + (sp-int spt-next-time 60) + (sp-launcher-by-id spt-next-launcher 310) + ) + ) + +) diff --git a/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher-h.gc b/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher-h.gc index 1257ff51e3..80c323e4d2 100644 --- a/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher-h.gc +++ b/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher-h.gc @@ -137,6 +137,174 @@ (declare-type sparticle-cpuinfo structure) +(defmacro sp-item (launcher + &key (fade-after 0.0) + &key (falloff-to 0.0) + &key (flags ()) + &key (period 0) + &key (length 0) + &key (offset 0) + &key (hour-mask 0) + &key (binding 0) + ) + `(new 'static 'sparticle-group-item + :launcher ,launcher + :fade-after ,fade-after + :falloff-to ,falloff-to + :flags (sp-group-item-flag ,@flags) + :period ,period + :length ,length + :offset ,offset + :hour-mask ,hour-mask + :binding ,binding + ) + ) + +(defmacro defpartgroup (name &key id &key parts &key (duration 3000) &key (linger-duration 1500) &key (flags ()) &key bounds + &key (rotate (0.0 0.0 0.0)) &key (scale (1.0 1.0 1.0))) + "define a new part group. defines a constant with the name of the group with the ID as its value" + `(begin + (defconstant ,name ,id) + (set! (-> *part-group-id-table* ,id) + (new 'static 'sparticle-launch-group + :duration ,duration + :linger-duration ,linger-duration + :flags (sp-group-flag ,@flags) + :bounds ,bounds + :name ,(symbol->string name) + :length ,(length parts) + :launcher (new 'static 'inline-array sparticle-group-item ,(length parts) ,@parts) + :rotate-x ,(car rotate) + :rotate-y ,(cadr rotate) + :rotate-z ,(caddr rotate) + :scale-x ,(car scale) + :scale-y ,(cadr scale) + :scale-z ,(caddr scale) + ) + ) + ) + ) + +(defmacro defpart (id &key (init-specs ())) + "define a new sparticle-launcher" + `(set! (-> *part-id-table* ,id) + (new 'static 'sparticle-launcher + :init-specs (new 'static 'inline-array sp-field-init-spec ,(1+ (length init-specs)) + ,@init-specs + (sp-end) + ))) + ) + +(defmacro sp-tex (field-name tex-id) + `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-name) :tex ,tex-id) + ) + +(defmacro sp-rnd-flt (field-name val range mult) + `(new 'static 'sp-field-init-spec + :field (sp-field-id ,field-name) + :initial-valuef ,val + :random-rangef ,range + :random-multf ,mult + :flags (sp-flag float-with-rand) + ) + ) + +(defmacro sp-flt (field-name val) + `(new 'static 'sp-field-init-spec + :field (sp-field-id ,field-name) + :initial-valuef ,val + :random-rangef 0.0 + :random-multf 1.0 + :flags (sp-flag float-with-rand) + ) + ) + +(defmacro sp-int (field-name val) + `(new 'static 'sp-field-init-spec + :field (sp-field-id ,field-name) + :initial-value ,val + :random-range 0 + :random-mult 1 + ) + ) + +(defmacro sp-int-plain-rnd (field-name val range mult) + "For when we use plain integer, but set the randoms." + `(new 'static 'sp-field-init-spec + :field (sp-field-id ,field-name) + :initial-value ,val + :random-range ,range + :random-mult ,mult + ) + ) + +(defmacro sp-rnd-int (field-name val range mult) + `(new 'static 'sp-field-init-spec + :field (sp-field-id ,field-name) + :initial-value ,val + :random-range ,range + :random-multf ,mult + :flags (sp-flag int-with-rand) + ) + ) + + +(defmacro sp-rnd-int-flt (field-name val range mult) + `(new 'static 'sp-field-init-spec + :field (sp-field-id ,field-name) + :initial-valuef ,val + :random-range ,range + :random-multf ,mult + :flags (sp-flag int-with-rand) + ) + ) + +(defmacro sp-cpuinfo-flags (&rest flags) + `(new 'static 'sp-field-init-spec + :field (sp-field-id spt-flags) + :initial-value (sp-cpuinfo-flag ,@flags) + :random-mult 1 + ) + ) + +(defmacro sp-launcher-by-id (field-name val) + `(new 'static 'sp-field-init-spec + :field (sp-field-id ,field-name) + :initial-value ,val + :flags (sp-flag part-by-id) + ) + ) + +(defmacro sp-func (field-name val) + `(new 'static 'sp-field-init-spec + :field (sp-field-id ,field-name) + :sym ,val + :flags (sp-flag from-pointer) + ) + ) + +(defmacro sp-sound (sound) + `(new 'static 'sp-field-init-spec + :field (sp-field-id spt-sound) + :sound ,sound + :flags (sp-flag plain-v2) + ) + ) + +(defmacro sp-end () + `(new 'static 'sp-field-init-spec + :field (sp-field-id spt-end) + ) + ) + +(defmacro sp-copy-from-other (field-name offset) + `(new 'static 'sp-field-init-spec + :field (sp-field-id ,field-name) + :initial-value ,offset + :random-mult 1 + :flags (sp-flag copy-from-other-field) + ) + ) ;; DECOMP BEGINS diff --git a/goal_src/jak2/engine/target/board/board-part.gc b/goal_src/jak2/engine/target/board/board-part.gc index 75bd146ca1..37f56d67e7 100644 --- a/goal_src/jak2/engine/target/board/board-part.gc +++ b/goal_src/jak2/engine/target/board/board-part.gc @@ -7,3 +7,218 @@ ;; DECOMP BEGINS +(defpartgroup group-board-land-straight + :id 119 + :duration (seconds 0.035) + :linger-duration (seconds 1.5) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 209)) + ) + +(defpartgroup group-board-quick-jump + :id 120 + :duration (seconds 0.035) + :linger-duration (seconds 1.5) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 209)) + ) + +(defpart 431 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 2.5)) + (sp-int spt-rot-x 4) + (sp-flt spt-scale-y (meters 0.05)) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-flt spt-omega 8.192) + (sp-rnd-flt spt-vel-y (meters 0.033333335) (meters 0.033333335) 1.0) + (sp-rnd-flt spt-fade-g -0.85 -1.7 1.0) + (sp-flt spt-fade-b -8.0) + (sp-rnd-flt spt-fade-a -0.16 -0.16 1.0) + (sp-rnd-flt spt-accel-y -6.826667 -2.7306666 1.0) + (sp-flt spt-friction 0.95) + (sp-int-plain-rnd spt-timer 50 149 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-rnd-flt spt-conerot-x (degrees 45.0) (degrees 90.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +(defpartgroup group-target-board + :id 118 + :bounds (static-bspherem 0 0 0 15) + :parts ((sp-item 432) (sp-item 433 :flags (is-3d)) (sp-item 434)) + ) + +(defpart 432 + :init-specs ((sp-flt spt-num 3.0) + (sp-flt spt-y (meters 0.25)) + (sp-int spt-rot-x 7) + (sp-flt spt-r 2048.0) + (sp-flt spt-g 1638.4) + (sp-flt spt-b 1843.2) + (sp-flt spt-fade-b -0.08533333) + (sp-int spt-timer 40) + (sp-cpuinfo-flags distort) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0) (meters 0.5) 1.0) + ) + ) + +(defpart 433 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-target-orient) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.25)) + (sp-rnd-flt spt-scale-x (meters 4) (meters 2) 1.0) + (sp-flt spt-rot-x 0.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 128.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 8.0 8.0 1.0) + (sp-rnd-flt spt-scalevel-x (meters -0.02) (meters -0.006666667) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.1) + (sp-int spt-timer 160) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + ) + ) + +(defpart 434 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 2.5)) + (sp-int spt-rot-x 4) + (sp-flt spt-scale-y (meters 0.05)) + (sp-rnd-flt spt-r 128.0 64.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-flt spt-omega 10.24) + (sp-rnd-flt spt-vel-y (meters 0.033333335) (meters 0.033333335) 1.0) + (sp-flt spt-fade-r -3.0) + (sp-flt spt-fade-g -3.0) + (sp-rnd-flt spt-fade-a -0.21333334 -0.21333334 1.0) + (sp-rnd-flt spt-accel-y -1.3653333 -1.3653333 1.0) + (sp-flt spt-friction 0.95) + (sp-int-plain-rnd spt-timer 50 149 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-12) + (sp-func spt-func 'sparticle-motion-blur) + (sp-rnd-flt spt-conerot-x (degrees 80.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0) (meters 0.5) 1.0) + ) + ) + +(defpart 435 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 0.0) + (sp-flt spt-y (meters 0)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 32.0) + (sp-rnd-flt spt-a 8.0 56.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.13333334) (meters 0.16666667) 1.0) + (sp-flt spt-scalevel-x (meters 0.013333334)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -1.4222223) + (sp-flt spt-fade-a -0.35555556) + (sp-flt spt-accel-y 0.34133333) + (sp-flt spt-friction 0.7) + (sp-int spt-timer 180) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +(defpartgroup group-board-spin-attack + :id 117 + :duration (seconds 50) + :flags (use-local-clock unk-6) + :bounds (static-bspherem 0 0 0 2) + :rotate ((degrees 4) (degrees 8) (degrees 4)) + :parts ((sp-item 436 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 437 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 438 :flags (launch-asap bit6)) + ) + ) + +(defpart 438 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 3) (meters 0.5) 1.0) + (sp-flt spt-rot-x 2048.0) + (sp-rnd-flt spt-scale-y (meters 4) (meters 0.5) 1.0) + (sp-flt spt-r 0.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 64.0) + (sp-flt spt-fade-a -0.4) + (sp-int spt-timer 80) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 12288.0) + (sp-func spt-func 'sparticle-track-root) + ) + ) + +(defpart 437 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 0)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 12)) + (sp-flt spt-rot-x 0.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 9)) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 128.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 128.0) + (sp-flt spt-scalevel-x (meters -0.086666666)) + (sp-flt spt-scalevel-y (meters -0.09)) + (sp-int spt-timer 50) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 436 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2c :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 0)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 1.4)) + (sp-flt spt-rot-x 0.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 0.9)) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 128.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 255.0) + (sp-flt spt-scalevel-x (meters 0.3)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -3.1875) + (sp-int spt-timer 20) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) diff --git a/test/decompiler/reference/jak1/engine/game/collectables-part_REF.gc b/test/decompiler/reference/jak1/engine/game/collectables-part_REF.gc index ad86fdc381..4a626bf691 100644 --- a/test/decompiler/reference/jak1/engine/game/collectables-part_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/collectables-part_REF.gc @@ -256,8 +256,8 @@ ;; failed to figure out what this is: (defpartgroup group-eco-blue-collect :id 43 - :duration 150 - :linger-duration 600 + :duration (seconds 0.5) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 11 :flags (launch-asap) :binding 12) (sp-item 12 :flags (start-dead launch-asap) :binding 13) @@ -737,8 +737,8 @@ ;; failed to figure out what this is: (defpartgroup group-eco-red-collect :id 49 - :duration 150 - :linger-duration 600 + :duration (seconds 0.5) + :linger-duration (seconds 2) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 12) :parts ((sp-item 168 :flags (launch-asap) :binding 169) @@ -1330,8 +1330,8 @@ ;; failed to figure out what this is: (defpartgroup group-eco-yellow-collect :id 57 - :duration 150 - :linger-duration 600 + :duration (seconds 0.5) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 199 :flags (launch-asap) :binding 200) (sp-item 200 :flags (start-dead launch-asap) :binding 201) @@ -1675,8 +1675,8 @@ ;; failed to figure out what this is: (defpartgroup group-eco-green-pill-collect :id 60 - :duration 150 - :linger-duration 600 + :duration (seconds 0.5) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 216 :flags (launch-asap) :binding 217) (sp-item 217 :flags (start-dead launch-asap) :binding 218) @@ -1695,8 +1695,8 @@ ;; failed to figure out what this is: (defpartgroup group-eco-green-collect :id 61 - :duration 150 - :linger-duration 600 + :duration (seconds 0.5) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 216 :flags (launch-asap) :binding 219) (sp-item 219 :flags (start-dead launch-asap) :binding 218) @@ -2228,8 +2228,8 @@ ;; failed to figure out what this is: (defpartgroup group-green-collect :id 66 - :duration 5 - :linger-duration 1200 + :duration (seconds 0.017) + :linger-duration (seconds 4) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 12) :parts ((sp-item 241) (sp-item 242) (sp-item 243)) @@ -2308,8 +2308,8 @@ ;; failed to figure out what this is: (defpartgroup group-blue-collect :id 67 - :duration 5 - :linger-duration 1200 + :duration (seconds 0.017) + :linger-duration (seconds 4) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 12) :parts ((sp-item 246) (sp-item 247) (sp-item 248)) @@ -2388,8 +2388,8 @@ ;; failed to figure out what this is: (defpartgroup group-yellow-collect :id 68 - :duration 5 - :linger-duration 1200 + :duration (seconds 0.017) + :linger-duration (seconds 4) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 8) :parts ((sp-item 249) (sp-item 250) (sp-item 251)) @@ -2478,8 +2478,8 @@ ;; failed to figure out what this is: (defpartgroup group-red-collect :id 69 - :duration 5 - :linger-duration 1200 + :duration (seconds 0.017) + :linger-duration (seconds 4) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 12) :parts ((sp-item 252) (sp-item 253) (sp-item 254)) diff --git a/test/decompiler/reference/jak1/engine/game/crates_REF.gc b/test/decompiler/reference/jak1/engine/game/crates_REF.gc index 366eccce74..fcdfb56195 100644 --- a/test/decompiler/reference/jak1/engine/game/crates_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/crates_REF.gc @@ -274,7 +274,7 @@ ;; failed to figure out what this is: (defpartgroup group-crate-explode :id 71 - :duration 5 + :duration (seconds 0.017) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 12) :parts ((sp-item 281) (sp-item 283) (sp-item 285) (sp-item 286) (sp-item 288)) @@ -283,7 +283,7 @@ ;; failed to figure out what this is: (defpartgroup group-crate-steel-explode :id 72 - :duration 5 + :duration (seconds 0.017) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 12) :parts ((sp-item 281) (sp-item 283) (sp-item 285) (sp-item 288) (sp-item 288) (sp-item 288)) @@ -292,7 +292,7 @@ ;; failed to figure out what this is: (defpartgroup group-dark-eco-box-explosion :id 73 - :duration 600 + :duration (seconds 2) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 12) :parts ((sp-item 295 :fade-after (meters 100) :period 600 :length 5 :binding 296) @@ -1296,8 +1296,8 @@ ;; failed to figure out what this is: (defpartgroup group-buzzer-crate :id 74 - :duration 5 - :linger-duration 450 + :duration (seconds 0.017) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 302)) ) diff --git a/test/decompiler/reference/jak1/engine/game/powerups_REF.gc b/test/decompiler/reference/jak1/engine/game/powerups_REF.gc index 3c2a0fb7a3..b489fa5e17 100644 --- a/test/decompiler/reference/jak1/engine/game/powerups_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/powerups_REF.gc @@ -172,8 +172,8 @@ ;; failed to figure out what this is: (defpartgroup group-blue-hit-ground-effect :id 70 - :duration 5 - :linger-duration 450 + :duration (seconds 0.017) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 261) (sp-item 262) (sp-item 263 :flags (is-3d)) (sp-item 264) (sp-item 265 :flags (is-3d))) ) diff --git a/test/decompiler/reference/jak1/engine/game/projectiles_REF.gc b/test/decompiler/reference/jak1/engine/game/projectiles_REF.gc index 9c555c4bb5..715a0a832d 100644 --- a/test/decompiler/reference/jak1/engine/game/projectiles_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/projectiles_REF.gc @@ -193,7 +193,7 @@ ;; failed to figure out what this is: (defpartgroup group-yellow-eco-fireball :id 102 - :duration 300 + :duration (seconds 1) :bounds (static-bspherem 0 0 0 3) :parts ((sp-item 349 :flags (launch-asap) :binding 350) (sp-item 350 :flags (start-dead launch-asap) :binding 351) @@ -340,7 +340,7 @@ ;; failed to figure out what this is: (defpartgroup group-part-yellow-eco-fireball-launcher :id 103 - :duration 600 + :duration (seconds 2) :bounds (static-bspherem 0 0 0 6) :parts ((sp-item 355 :flags (launch-asap)) (sp-item 356 :flags (bit1) :period 630 :length 15) @@ -519,7 +519,7 @@ ;; failed to figure out what this is: (defpartgroup group-part-yellow-eco-fireball-hit :id 104 - :duration 600 + :duration (seconds 2) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 6) :parts ((sp-item 2059 :period 600 :length 5) diff --git a/test/decompiler/reference/jak1/engine/gfx/water/water_REF.gc b/test/decompiler/reference/jak1/engine/gfx/water/water_REF.gc index 5a8da87f97..7a1b584ec3 100644 --- a/test/decompiler/reference/jak1/engine/gfx/water/water_REF.gc +++ b/test/decompiler/reference/jak1/engine/gfx/water/water_REF.gc @@ -273,7 +273,7 @@ ;; failed to figure out what this is: (defpartgroup group-part-water-splash :id 40 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 -12 0 14) :parts ((sp-item 124 :flags (is-3d) :period 900 :length 63) @@ -312,7 +312,7 @@ ;; failed to figure out what this is: (defpartgroup group-part-water-splash-small :id 41 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 -12 0 14) :parts ((sp-item 124 :flags (is-3d) :period 900 :length 63) diff --git a/test/decompiler/reference/jak1/engine/target/target-part_REF.gc b/test/decompiler/reference/jak1/engine/target/target-part_REF.gc index d6e4027984..72051c2c6b 100644 --- a/test/decompiler/reference/jak1/engine/target/target-part_REF.gc +++ b/test/decompiler/reference/jak1/engine/target/target-part_REF.gc @@ -193,7 +193,7 @@ ;; failed to figure out what this is: (defpartgroup group-target-hit :id 1 - :duration 5 + :duration (seconds 0.017) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 12) :parts ((sp-item 56) (sp-item 57)) @@ -247,8 +247,8 @@ ;; failed to figure out what this is: (defpartgroup group-red-eco-strike-ground :id 2 - :duration 10 - :linger-duration 450 + :duration (seconds 0.035) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 59) (sp-item 60)) ) @@ -310,8 +310,8 @@ ;; failed to figure out what this is: (defpartgroup group-red-eco-spinkick :id 3 - :duration 10 - :linger-duration 450 + :duration (seconds 0.035) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 62) (sp-item 63) (sp-item 64)) ) @@ -391,8 +391,8 @@ ;; failed to figure out what this is: (defpartgroup group-spin-hit :id 4 - :duration 10 - :linger-duration 450 + :duration (seconds 0.035) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 65) (sp-item 66)) ) @@ -400,8 +400,8 @@ ;; failed to figure out what this is: (defpartgroup group-punch-hit :id 5 - :duration 10 - :linger-duration 450 + :duration (seconds 0.035) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 65) (sp-item 66)) ) @@ -456,8 +456,8 @@ ;; failed to figure out what this is: (defpartgroup group-smack-surface :id 6 - :duration 10 - :linger-duration 450 + :duration (seconds 0.035) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 68) (sp-item 69) @@ -578,8 +578,8 @@ ;; failed to figure out what this is: (defpartgroup group-land-poof-sand :id 8 - :duration 5 - :linger-duration 450 + :duration (seconds 0.017) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 73) (sp-item 74) (sp-item 75)) ) @@ -661,8 +661,8 @@ ;; failed to figure out what this is: (defpartgroup group-land-poof-dirt :id 575 - :duration 5 - :linger-duration 450 + :duration (seconds 0.017) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 2371) (sp-item 2372) (sp-item 2370)) ) @@ -744,8 +744,8 @@ ;; failed to figure out what this is: (defpartgroup group-land-poof-snow :id 9 - :duration 5 - :linger-duration 450 + :duration (seconds 0.017) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 76) (sp-item 77) (sp-item 78)) ) @@ -827,8 +827,8 @@ ;; failed to figure out what this is: (defpartgroup group-land-poof-ice :id 580 - :duration 5 - :linger-duration 450 + :duration (seconds 0.017) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 76) (sp-item 77) (sp-item 78)) ) @@ -836,8 +836,8 @@ ;; failed to figure out what this is: (defpartgroup group-land-poof-grass :id 10 - :duration 5 - :linger-duration 450 + :duration (seconds 0.017) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 79) (sp-item 80) (sp-item 81)) ) @@ -920,8 +920,8 @@ ;; failed to figure out what this is: (defpartgroup group-land-poof-wood :id 11 - :duration 5 - :linger-duration 450 + :duration (seconds 0.017) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 82) (sp-item 83)) ) @@ -979,8 +979,8 @@ ;; failed to figure out what this is: (defpartgroup group-land-poof-crwood :id 12 - :duration 5 - :linger-duration 750 + :duration (seconds 0.017) + :linger-duration (seconds 2.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 82) (sp-item 83) (sp-item 84) (sp-item 84)) ) @@ -988,8 +988,8 @@ ;; failed to figure out what this is: (defpartgroup group-land-poof-stone :id 13 - :duration 5 - :linger-duration 450 + :duration (seconds 0.017) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 85) (sp-item 86)) ) @@ -1047,8 +1047,8 @@ ;; failed to figure out what this is: (defpartgroup group-land-poof-pcmetal :id 581 - :duration 5 - :linger-duration 450 + :duration (seconds 0.017) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 2373) (sp-item 2374)) ) @@ -1104,8 +1104,8 @@ ;; failed to figure out what this is: (defpartgroup group-run-poof-stone :id 14 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 87)) ) @@ -1113,8 +1113,8 @@ ;; failed to figure out what this is: (defpartgroup group-just-poof-stone :id 15 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 87)) ) @@ -1142,8 +1142,8 @@ ;; failed to figure out what this is: (defpartgroup group-run-poof-snow :id 582 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 2375) (sp-item 2376 :flags (is-3d))) ) @@ -1151,8 +1151,8 @@ ;; failed to figure out what this is: (defpartgroup group-just-poof-snow :id 583 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 2375)) ) @@ -1160,8 +1160,8 @@ ;; failed to figure out what this is: (defpartgroup group-just-footprint-snow :id 584 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 2376 :flags (is-3d))) ) @@ -1207,8 +1207,8 @@ ;; failed to figure out what this is: (defpartgroup group-run-poof-ice :id 585 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 2375)) ) @@ -1216,8 +1216,8 @@ ;; failed to figure out what this is: (defpartgroup group-just-poof-ice :id 586 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 2375)) ) @@ -1225,8 +1225,8 @@ ;; failed to figure out what this is: (defpartgroup group-run-poof-crwood :id 16 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 89) (sp-item 89) (sp-item 84)) ) @@ -1234,8 +1234,8 @@ ;; failed to figure out what this is: (defpartgroup group-just-poof-crwood :id 17 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 88)) ) @@ -1279,8 +1279,8 @@ ;; failed to figure out what this is: (defpartgroup group-run-poof-wood :id 18 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 89)) ) @@ -1288,8 +1288,8 @@ ;; failed to figure out what this is: (defpartgroup group-just-poof-wood :id 19 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 89)) ) @@ -1317,8 +1317,8 @@ ;; failed to figure out what this is: (defpartgroup group-run-poof-pcmetal :id 587 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 2377)) ) @@ -1326,8 +1326,8 @@ ;; failed to figure out what this is: (defpartgroup group-just-poof-pcmetal :id 588 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 2377)) ) @@ -1355,8 +1355,8 @@ ;; failed to figure out what this is: (defpartgroup group-run-poof-grass :id 20 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 92) (sp-item 93 :flags (is-3d))) ) @@ -1364,8 +1364,8 @@ ;; failed to figure out what this is: (defpartgroup group-just-poof-grass :id 21 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 92)) ) @@ -1373,8 +1373,8 @@ ;; failed to figure out what this is: (defpartgroup group-just-footprint-grass :id 22 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 93 :flags (is-3d))) ) @@ -1420,8 +1420,8 @@ ;; failed to figure out what this is: (defpartgroup group-run-poof-sand :id 23 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 88) (sp-item 94 :flags (is-3d))) ) @@ -1429,8 +1429,8 @@ ;; failed to figure out what this is: (defpartgroup group-just-poof-sand :id 24 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 88)) ) @@ -1438,8 +1438,8 @@ ;; failed to figure out what this is: (defpartgroup group-just-footprint-sand :id 25 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 94 :flags (is-3d))) ) @@ -1485,8 +1485,8 @@ ;; failed to figure out what this is: (defpartgroup group-run-poof-dirt :id 576 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 2378)) ) @@ -1494,8 +1494,8 @@ ;; failed to figure out what this is: (defpartgroup group-just-poof-dirt :id 577 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 2378)) ) @@ -1503,8 +1503,8 @@ ;; failed to figure out what this is: (defpartgroup group-just-footprint-dirt :id 578 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 2379 :flags (is-3d))) ) @@ -1655,8 +1655,8 @@ ;; failed to figure out what this is: (defpartgroup group-slide-poof-sand :id 26 - :duration 5 - :linger-duration 450 + :duration (seconds 0.017) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 100) (sp-item 101)) ) @@ -1713,8 +1713,8 @@ ;; failed to figure out what this is: (defpartgroup group-slide-poof-dirt :id 579 - :duration 5 - :linger-duration 450 + :duration (seconds 0.017) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 2380) (sp-item 2381)) ) @@ -1771,8 +1771,8 @@ ;; failed to figure out what this is: (defpartgroup group-slide-poof-grass :id 27 - :duration 5 - :linger-duration 450 + :duration (seconds 0.017) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 102) (sp-item 103)) ) @@ -1830,8 +1830,8 @@ ;; failed to figure out what this is: (defpartgroup group-slide-poof-stone :id 28 - :duration 5 - :linger-duration 450 + :duration (seconds 0.017) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 104)) ) @@ -1864,8 +1864,8 @@ ;; failed to figure out what this is: (defpartgroup group-slide-poof-pcmetal :id 589 - :duration 5 - :linger-duration 450 + :duration (seconds 0.017) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 2382)) ) @@ -1898,8 +1898,8 @@ ;; failed to figure out what this is: (defpartgroup group-slide-poof-snow :id 590 - :duration 5 - :linger-duration 450 + :duration (seconds 0.017) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 2383)) ) @@ -1932,8 +1932,8 @@ ;; failed to figure out what this is: (defpartgroup group-slide-poof-ice :id 591 - :duration 5 - :linger-duration 450 + :duration (seconds 0.017) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 2383)) ) @@ -1941,8 +1941,8 @@ ;; failed to figure out what this is: (defpartgroup group-slide-poof-wood :id 29 - :duration 5 - :linger-duration 450 + :duration (seconds 0.017) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 105)) ) @@ -1975,8 +1975,8 @@ ;; failed to figure out what this is: (defpartgroup group-slide-poof-crwood :id 30 - :duration 5 - :linger-duration 750 + :duration (seconds 0.017) + :linger-duration (seconds 2.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 105)) ) @@ -2065,7 +2065,7 @@ ;; failed to figure out what this is: (defpartgroup group-dark-eco-death :id 31 - :duration 600 + :duration (seconds 2) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 12) :parts ((sp-item 295 :fade-after (meters 100) :period 600 :length 5 :binding 296) @@ -2110,8 +2110,8 @@ ;; failed to figure out what this is: (defpartgroup group-lava-death :id 32 - :duration 75 - :linger-duration 600 + :duration (seconds 0.25) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 2003) (sp-item 2004) (sp-item 2005) (sp-item 2006)) ) @@ -2119,8 +2119,8 @@ ;; failed to figure out what this is: (defpartgroup group-burn-death :id 708 - :duration 150 - :linger-duration 600 + :duration (seconds 0.5) + :linger-duration (seconds 2) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 2003)) ) diff --git a/test/decompiler/reference/jak1/levels/beach/beach-obs_REF.gc b/test/decompiler/reference/jak1/levels/beach/beach-obs_REF.gc index e2272a93af..5207545e12 100644 --- a/test/decompiler/reference/jak1/levels/beach/beach-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/beach/beach-obs_REF.gc @@ -458,7 +458,7 @@ ;; failed to figure out what this is: (defpartgroup group-beach-harvester-rock-explosion :id 156 - :duration 600 + :duration (seconds 2) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 8) :parts ((sp-item 543 :period 1500 :length 5) diff --git a/test/decompiler/reference/jak1/levels/beach/beach-rocks_REF.gc b/test/decompiler/reference/jak1/levels/beach/beach-rocks_REF.gc index 755000612c..1708393607 100644 --- a/test/decompiler/reference/jak1/levels/beach/beach-rocks_REF.gc +++ b/test/decompiler/reference/jak1/levels/beach/beach-rocks_REF.gc @@ -13,7 +13,7 @@ ;; failed to figure out what this is: (defpartgroup group-beach-rocks-start :id 553 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2340 :period 75 :length 10) @@ -146,7 +146,7 @@ ;; failed to figure out what this is: (defpartgroup group-beach-rocks-land :id 555 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2342 :period 900 :length 40) diff --git a/test/decompiler/reference/jak1/levels/citadel/citadel-part_REF.gc b/test/decompiler/reference/jak1/levels/citadel/citadel-part_REF.gc index 2cd9576e5a..22e1bc83ae 100644 --- a/test/decompiler/reference/jak1/levels/citadel/citadel-part_REF.gc +++ b/test/decompiler/reference/jak1/levels/citadel/citadel-part_REF.gc @@ -414,8 +414,8 @@ ;; failed to figure out what this is: (defpartgroup group-citb-generator-break :id 598 - :duration 600 - :linger-duration 600 + :duration (seconds 2) + :linger-duration (seconds 2) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 6) :parts ((sp-item 2423 :period 600 :length 5) diff --git a/test/decompiler/reference/jak1/levels/common/dark-eco-pool_REF.gc b/test/decompiler/reference/jak1/levels/common/dark-eco-pool_REF.gc index 9b6712a26e..390ac93a87 100644 --- a/test/decompiler/reference/jak1/levels/common/dark-eco-pool_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/dark-eco-pool_REF.gc @@ -185,8 +185,8 @@ ;; failed to figure out what this is: (defpartgroup group-dark-eco-pool-nasty :id 445 - :duration 600 - :linger-duration 600 + :duration (seconds 2) + :linger-duration (seconds 2) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 12) :parts ((sp-item 2056 :fade-after (meters 100) :period 600 :length 5) diff --git a/test/decompiler/reference/jak1/levels/common/sharkey_REF.gc b/test/decompiler/reference/jak1/levels/common/sharkey_REF.gc index ba6a2ed6ef..5f854327e3 100644 --- a/test/decompiler/reference/jak1/levels/common/sharkey_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/sharkey_REF.gc @@ -6,8 +6,8 @@ ;; failed to figure out what this is: (defpartgroup group-sharkey-splash :id 106 - :duration 120 - :linger-duration 780 + :duration (seconds 0.4) + :linger-duration (seconds 2.6) :flags (use-local-clock) :bounds (static-bspherem 0 -12 0 14) :parts ((sp-item 124 :flags (is-3d) :period 900 :length 63) diff --git a/test/decompiler/reference/jak1/levels/finalboss/green-eco-lurker_REF.gc b/test/decompiler/reference/jak1/levels/finalboss/green-eco-lurker_REF.gc index 7ee6dddc9a..e71ed56c87 100644 --- a/test/decompiler/reference/jak1/levels/finalboss/green-eco-lurker_REF.gc +++ b/test/decompiler/reference/jak1/levels/finalboss/green-eco-lurker_REF.gc @@ -128,7 +128,7 @@ ;; failed to figure out what this is: (defpartgroup group-green-eco-lurker-death :id 643 - :duration 600 + :duration (seconds 2) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 12) :parts ((sp-item 2585 :fade-after (meters 100) :period 600 :length 5 :binding 2583) diff --git a/test/decompiler/reference/jak1/levels/finalboss/robotboss-part_REF.gc b/test/decompiler/reference/jak1/levels/finalboss/robotboss-part_REF.gc index 6328ac4d86..2eda1d430d 100644 --- a/test/decompiler/reference/jak1/levels/finalboss/robotboss-part_REF.gc +++ b/test/decompiler/reference/jak1/levels/finalboss/robotboss-part_REF.gc @@ -592,7 +592,7 @@ ;; failed to figure out what this is: (defpartgroup group-robotboss-darkecobomb-glow :id 639 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2753) @@ -694,7 +694,7 @@ ;; failed to figure out what this is: (defpartgroup group-robotboss-darkecobomb-tick :id 663 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2756) (sp-item 2757) (sp-item 2758) (sp-item 2759)) @@ -1123,7 +1123,7 @@ ;; failed to figure out what this is: (defpartgroup group-robotboss-greenshot :id 664 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2769 :binding 2766) @@ -1293,7 +1293,7 @@ ;; failed to figure out what this is: (defpartgroup group-robotboss-redshot-charge :id 646 - :duration 900 + :duration (seconds 3) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2699) (sp-item 2700) (sp-item 2701)) ) @@ -1472,7 +1472,7 @@ ;; failed to figure out what this is: (defpartgroup group-robotboss-redshot-body :id 665 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2709) (sp-item 2710) (sp-item 2711)) @@ -1539,7 +1539,7 @@ ;; failed to figure out what this is: (defpartgroup group-robotboss-redshot-warning :id 647 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2712) (sp-item 2713) (sp-item 2714 :period 45 :length 5)) @@ -1644,7 +1644,7 @@ ;; failed to figure out what this is: (defpartgroup group-robotboss-redshot-test :id 679 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2772)) @@ -1996,7 +1996,7 @@ ;; failed to figure out what this is: (defpartgroup group-robotboss-yellowshot-charge :id 651 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2811) (sp-item 2812) (sp-item 2813)) @@ -2074,7 +2074,7 @@ ;; failed to figure out what this is: (defpartgroup group-robotboss-yellowshot :id 652 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2815) (sp-item 2816) (sp-item 2817) (sp-item 2818) (sp-item 2819)) @@ -3222,7 +3222,7 @@ ;; failed to figure out what this is: (defpartgroup group-robotboss-blue-claw-glow :id 674 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2324)) @@ -3231,7 +3231,7 @@ ;; failed to figure out what this is: (defpartgroup group-robotboss-green-claw-glow :id 675 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2324)) @@ -3240,7 +3240,7 @@ ;; failed to figure out what this is: (defpartgroup group-robotboss-red-claw-glow :id 676 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2324)) @@ -3249,7 +3249,7 @@ ;; failed to figure out what this is: (defpartgroup group-robotboss-yellow-claw-glow :id 677 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2324)) diff --git a/test/decompiler/reference/jak1/levels/finalboss/sage-finalboss-part_REF.gc b/test/decompiler/reference/jak1/levels/finalboss/sage-finalboss-part_REF.gc index d7349af379..653d7dbd2a 100644 --- a/test/decompiler/reference/jak1/levels/finalboss/sage-finalboss-part_REF.gc +++ b/test/decompiler/reference/jak1/levels/finalboss/sage-finalboss-part_REF.gc @@ -135,7 +135,7 @@ ;; failed to figure out what this is: (defpartgroup group-target-white-eco-ground :id 699 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2921) @@ -294,7 +294,7 @@ ;; failed to figure out what this is: (defpartgroup group-target-white-eco-joints :id 700 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2929) (sp-item 2930)) @@ -430,7 +430,7 @@ ;; failed to figure out what this is: (defpartgroup group-target-white-eco-hand-glow :id 701 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2892)) @@ -463,7 +463,7 @@ ;; failed to figure out what this is: (defpartgroup group-target-white-eco-hand-shot :id 702 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2893) (sp-item 2935)) @@ -514,7 +514,7 @@ ;; failed to figure out what this is: (defpartgroup group-robotboss-joints :id 703 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2936 :period 36 :length 5) @@ -601,7 +601,7 @@ ;; failed to figure out what this is: (defpartgroup group-robotboss-explode :id 696 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2939 :period 1200 :length 20 :binding 2938) @@ -832,7 +832,7 @@ ;; failed to figure out what this is: (defpartgroup group-robotboss-splash :id 704 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2949) (sp-item 2950)) @@ -897,7 +897,7 @@ ;; failed to figure out what this is: (defpartgroup group-bigdoor-open :id 698 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2952 :flags (is-3d)) diff --git a/test/decompiler/reference/jak1/levels/firecanyon/firecanyon-obs_REF.gc b/test/decompiler/reference/jak1/levels/firecanyon/firecanyon-obs_REF.gc index 110bfa711c..76bd9f6ecb 100644 --- a/test/decompiler/reference/jak1/levels/firecanyon/firecanyon-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/firecanyon/firecanyon-obs_REF.gc @@ -29,7 +29,7 @@ ;; failed to figure out what this is: (defpartgroup group-balloon :id 227 - :duration 5 + :duration (seconds 0.017) :bounds (static-bspherem 0 0 0 15) :parts ((sp-item 1006) (sp-item 1007) (sp-item 1008)) ) @@ -429,7 +429,7 @@ ;; failed to figure out what this is: (defpartgroup group-dark-cluster-explosion :id 228 - :duration 600 + :duration (seconds 2) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 12) :parts ((sp-item 2100 :period 600 :length 5) diff --git a/test/decompiler/reference/jak1/levels/flut_common/flut-part_REF.gc b/test/decompiler/reference/jak1/levels/flut_common/flut-part_REF.gc index b8e8b5baa1..bd28547286 100644 --- a/test/decompiler/reference/jak1/levels/flut_common/flut-part_REF.gc +++ b/test/decompiler/reference/jak1/levels/flut_common/flut-part_REF.gc @@ -71,8 +71,8 @@ ;; failed to figure out what this is: (defpartgroup group-flut-attack-strike-ground :id 121 - :duration 10 - :linger-duration 450 + :duration (seconds 0.035) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 749) (sp-item 750)) ) diff --git a/test/decompiler/reference/jak1/levels/jungle/darkvine_REF.gc b/test/decompiler/reference/jak1/levels/jungle/darkvine_REF.gc index a27326e29a..500926b6a0 100644 --- a/test/decompiler/reference/jak1/levels/jungle/darkvine_REF.gc +++ b/test/decompiler/reference/jak1/levels/jungle/darkvine_REF.gc @@ -64,7 +64,7 @@ ;; failed to figure out what this is: (defpartgroup group-darkvine-puffs :id 175 - :duration 150 + :duration (seconds 0.5) :flags (use-local-clock) :bounds (static-bspherem 0 2 0 3) :parts ((sp-item 800) (sp-item 801) (sp-item 802)) diff --git a/test/decompiler/reference/jak1/levels/jungle/fisher_REF.gc b/test/decompiler/reference/jak1/levels/jungle/fisher_REF.gc index 15bf462658..6c42b520ad 100644 --- a/test/decompiler/reference/jak1/levels/jungle/fisher_REF.gc +++ b/test/decompiler/reference/jak1/levels/jungle/fisher_REF.gc @@ -37,8 +37,8 @@ ;; failed to figure out what this is: (defpartgroup group-bad-fish :id 177 - :duration 5 - :linger-duration 450 + :duration (seconds 0.017) + :linger-duration (seconds 1.5) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 828) (sp-item 2013)) @@ -92,8 +92,8 @@ ;; failed to figure out what this is: (defpartgroup group-normal-fish :id 178 - :duration 5 - :linger-duration 450 + :duration (seconds 0.017) + :linger-duration (seconds 1.5) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 2001)) @@ -121,8 +121,8 @@ ;; failed to figure out what this is: (defpartgroup group-fish-collect :id 179 - :duration 5 - :linger-duration 1200 + :duration (seconds 0.017) + :linger-duration (seconds 4) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 8) :parts ((sp-item 830) (sp-item 831)) diff --git a/test/decompiler/reference/jak1/levels/jungleb/jungleb-obs_REF.gc b/test/decompiler/reference/jak1/levels/jungleb/jungleb-obs_REF.gc index 22e186ec17..c10b0f1bb0 100644 --- a/test/decompiler/reference/jak1/levels/jungleb/jungleb-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/jungleb/jungleb-obs_REF.gc @@ -51,7 +51,7 @@ ;; failed to figure out what this is: (defpartgroup group-jungle-blue-eco-room-activate :id 190 - :duration 900 + :duration (seconds 3) :bounds (static-bspherem 0 -6 0 8) :parts ((sp-item 903) (sp-item 903) (sp-item 904 :flags (bit1) :period 1200 :length 15)) ) diff --git a/test/decompiler/reference/jak1/levels/lavatube/lavatube-obs_REF.gc b/test/decompiler/reference/jak1/levels/lavatube/lavatube-obs_REF.gc index 6e55b7599f..8fc991d8ac 100644 --- a/test/decompiler/reference/jak1/levels/lavatube/lavatube-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/lavatube/lavatube-obs_REF.gc @@ -1283,7 +1283,7 @@ ;; failed to figure out what this is: (defpartgroup group-lavaballoon :id 543 - :duration 5 + :duration (seconds 0.017) :bounds (static-bspherem 0 0 0 15) :parts ((sp-item 1987) (sp-item 1988) (sp-item 1989)) ) diff --git a/test/decompiler/reference/jak1/levels/maincave/dark-crystal_REF.gc b/test/decompiler/reference/jak1/levels/maincave/dark-crystal_REF.gc index 9bfd424253..3bcd3eef35 100644 --- a/test/decompiler/reference/jak1/levels/maincave/dark-crystal_REF.gc +++ b/test/decompiler/reference/jak1/levels/maincave/dark-crystal_REF.gc @@ -86,7 +86,7 @@ ;; failed to figure out what this is: (defpartgroup group-dark-crystal-gnd-explode :id 322 - :duration 75 + :duration (seconds 0.25) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 16) :parts ((sp-item 2153 :fade-after (meters 100) :period 600 :length 5 :binding 296) @@ -278,8 +278,8 @@ ;; failed to figure out what this is: (defpartgroup group-dark-crystal-water-explode :id 323 - :duration 75 - :linger-duration 12000 + :duration (seconds 0.25) + :linger-duration (seconds 40) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 16) :parts ((sp-item 2159 :period 600 :length 5) diff --git a/test/decompiler/reference/jak1/levels/maincave/mother-spider-egg_REF.gc b/test/decompiler/reference/jak1/levels/maincave/mother-spider-egg_REF.gc index 395eea89e9..154aba5395 100644 --- a/test/decompiler/reference/jak1/levels/maincave/mother-spider-egg_REF.gc +++ b/test/decompiler/reference/jak1/levels/maincave/mother-spider-egg_REF.gc @@ -72,8 +72,8 @@ ;; failed to figure out what this is: (defpartgroup group-spider-egg-hatches :id 324 - :duration 5 - :linger-duration 900 + :duration (seconds 0.017) + :linger-duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 8) :parts ((sp-item 2018 :fade-after (meters 50) :falloff-to (meters 50)) @@ -146,8 +146,8 @@ ;; failed to figure out what this is: (defpartgroup group-spider-egg-explodes :id 325 - :duration 5 - :linger-duration 375 + :duration (seconds 0.017) + :linger-duration (seconds 1.25) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 8) :parts ((sp-item 2074 :fade-after (meters 50) :falloff-to (meters 50))) diff --git a/test/decompiler/reference/jak1/levels/maincave/mother-spider-proj_REF.gc b/test/decompiler/reference/jak1/levels/maincave/mother-spider-proj_REF.gc index 5fa579f1fc..3dcc5dc1b4 100644 --- a/test/decompiler/reference/jak1/levels/maincave/mother-spider-proj_REF.gc +++ b/test/decompiler/reference/jak1/levels/maincave/mother-spider-proj_REF.gc @@ -24,7 +24,7 @@ ;; failed to figure out what this is: (defpartgroup group-mother-spider-proj-fly :id 326 - :duration 300 + :duration (seconds 1) :bounds (static-bspherem 0 0 0 3) :parts ((sp-item 718 :flags (launch-asap) :binding 716) (sp-item 716 :flags (start-dead) :binding 717) @@ -153,7 +153,7 @@ ;; failed to figure out what this is: (defpartgroup group-mother-spider-proj-hit :id 327 - :duration 5 + :duration (seconds 0.017) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 8) :parts ((sp-item 722) (sp-item 723) (sp-item 724)) @@ -232,7 +232,7 @@ ;; failed to figure out what this is: (defpartgroup group-mother-spider-proj-die :id 328 - :duration 5 + :duration (seconds 0.017) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 8) :parts ((sp-item 722)) diff --git a/test/decompiler/reference/jak1/levels/misty/balloonlurker_REF.gc b/test/decompiler/reference/jak1/levels/misty/balloonlurker_REF.gc index 1bb6efdb54..0635101083 100644 --- a/test/decompiler/reference/jak1/levels/misty/balloonlurker_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/balloonlurker_REF.gc @@ -6,8 +6,8 @@ ;; failed to figure out what this is: (defpartgroup group-balloonlurker-pilot-death :id 203 - :duration 5 - :linger-duration 600 + :duration (seconds 0.017) + :linger-duration (seconds 2) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 12) :parts ((sp-item 2015)) @@ -34,7 +34,7 @@ ;; failed to figure out what this is: (defpartgroup group-balloonlurker-mine-explosion :id 204 - :duration 600 + :duration (seconds 2) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 16) :parts ((sp-item 964 :period 1200 :length 30) diff --git a/test/decompiler/reference/jak1/levels/misty/misty-conveyor_REF.gc b/test/decompiler/reference/jak1/levels/misty/misty-conveyor_REF.gc index 26b0492c85..ad0d9af80a 100644 --- a/test/decompiler/reference/jak1/levels/misty/misty-conveyor_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/misty-conveyor_REF.gc @@ -8,8 +8,8 @@ ;; failed to figure out what this is: (defpartgroup group-keg-bounce :id 197 - :duration 10 - :linger-duration 600 + :duration (seconds 0.035) + :linger-duration (seconds 2) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 12) :parts ((sp-item 2014 :fade-after (meters 100) :falloff-to (meters 100))) diff --git a/test/decompiler/reference/jak1/levels/misty/misty-obs_REF.gc b/test/decompiler/reference/jak1/levels/misty/misty-obs_REF.gc index 7b0aa84451..a5eb12541a 100644 --- a/test/decompiler/reference/jak1/levels/misty/misty-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/misty-obs_REF.gc @@ -158,7 +158,7 @@ ;; failed to figure out what this is: (defpartgroup group-misty-bone-01 :id 192 - :duration 600 + :duration (seconds 2) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 24) :parts ((sp-item 914 :period 780 :length 15) @@ -404,7 +404,7 @@ ;; failed to figure out what this is: (defpartgroup group-misty-bone-03 :id 193 - :duration 600 + :duration (seconds 2) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 24) :parts ((sp-item 914 :period 780 :length 15) @@ -586,7 +586,7 @@ ;; failed to figure out what this is: (defpartgroup group-misty-bone-02 :id 194 - :duration 600 + :duration (seconds 2) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 24) :parts ((sp-item 914 :period 780 :length 15) @@ -768,7 +768,7 @@ ;; failed to figure out what this is: (defpartgroup group-misty-bone-07 :id 195 - :duration 600 + :duration (seconds 2) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 24) :parts ((sp-item 914 :period 780 :length 15) diff --git a/test/decompiler/reference/jak1/levels/misty/quicksandlurker_REF.gc b/test/decompiler/reference/jak1/levels/misty/quicksandlurker_REF.gc index ff544708e6..c718c63f9e 100644 --- a/test/decompiler/reference/jak1/levels/misty/quicksandlurker_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/quicksandlurker_REF.gc @@ -134,7 +134,7 @@ ;; failed to figure out what this is: (defpartgroup group-quicksandlurker-pre-missile :id 199 - :duration 5 + :duration (seconds 0.017) :bounds (static-bspherem 0 0 0 3) :parts ((sp-item 2483)) ) @@ -170,7 +170,7 @@ ;; failed to figure out what this is: (defpartgroup group-quicksandlurker-missile-impact :id 200 - :duration 10 + :duration (seconds 0.035) :bounds (static-bspherem 0 0 0 3) :parts ((sp-item 2484) (sp-item 2485) (sp-item 2486)) ) @@ -248,7 +248,7 @@ ;; failed to figure out what this is: (defpartgroup group-quicksandlurker-hide :id 201 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 -12 0 14) :parts ((sp-item 124 :flags (is-3d) :period 900 :length 63) @@ -273,7 +273,7 @@ ;; failed to figure out what this is: (defpartgroup group-quicksandlurker-popup :id 202 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 -12 0 14) :parts ((sp-item 124 :flags (is-3d) :period 900 :length 63) diff --git a/test/decompiler/reference/jak1/levels/misty/sidekick-human_REF.gc b/test/decompiler/reference/jak1/levels/misty/sidekick-human_REF.gc index 54b6076315..44d17bda32 100644 --- a/test/decompiler/reference/jak1/levels/misty/sidekick-human_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/sidekick-human_REF.gc @@ -180,7 +180,7 @@ ;; failed to figure out what this is: (defpartgroup group-evilsib-appear :id 557 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2345 :period 1500 :length 20 :offset 1500) @@ -849,7 +849,7 @@ ;; failed to figure out what this is: (defpartgroup group-sequenceC-glowing-can :id 560 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2298)) @@ -880,7 +880,7 @@ ;; failed to figure out what this is: (defpartgroup group-sequenceC-exploding-can :id 561 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2785 :period 1800 :length 5) @@ -1070,7 +1070,7 @@ ;; failed to figure out what this is: (defpartgroup group-sequenceC-dark-splash :id 562 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 295 :fade-after (meters 100) :period 600 :length 5 :binding 296) @@ -1115,8 +1115,8 @@ ;; failed to figure out what this is: (defpartgroup group-sequenceC-blow-dust :id 681 - :duration 5 - :linger-duration 900 + :duration (seconds 0.017) + :linger-duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2790)) diff --git a/test/decompiler/reference/jak1/levels/ogre/ogre-obs_REF.gc b/test/decompiler/reference/jak1/levels/ogre/ogre-obs_REF.gc index 6aa3bc939a..b028c75d5c 100644 --- a/test/decompiler/reference/jak1/levels/ogre/ogre-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/ogre/ogre-obs_REF.gc @@ -172,7 +172,7 @@ ;; failed to figure out what this is: (defpartgroup group-tntbarrel-explosion :id 474 - :duration 600 + :duration (seconds 2) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 12) :parts ((sp-item 2079 :period 600 :length 5) @@ -1566,7 +1566,7 @@ ;; failed to figure out what this is: (defpartgroup group-shortcut-boulder-explosion :id 475 - :duration 300 + :duration (seconds 1) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 8) :parts ((sp-item 2149 :period 1500 :length 5) diff --git a/test/decompiler/reference/jak1/levels/ogre/ogre-part_REF.gc b/test/decompiler/reference/jak1/levels/ogre/ogre-part_REF.gc index 6f8042e6e7..09871083f1 100644 --- a/test/decompiler/reference/jak1/levels/ogre/ogre-part_REF.gc +++ b/test/decompiler/reference/jak1/levels/ogre/ogre-part_REF.gc @@ -4,8 +4,8 @@ ;; failed to figure out what this is: (defpartgroup group-ogreboss-column-break :id 464 - :duration 1500 - :linger-duration 3000 + :duration (seconds 5) + :linger-duration (seconds 10) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 12) :parts ((sp-item 2193 :period 1500 :length 5) @@ -144,8 +144,8 @@ ;; failed to figure out what this is: (defpartgroup group-ogreboss-lava-splash :id 465 - :duration 150 - :linger-duration 600 + :duration (seconds 0.5) + :linger-duration (seconds 2) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 12) :parts ((sp-item 2023)) @@ -174,8 +174,8 @@ ;; failed to figure out what this is: (defpartgroup group-ogre-bridge-splash :id 466 - :duration 75 - :linger-duration 600 + :duration (seconds 0.25) + :linger-duration (seconds 2) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 12) :parts ((sp-item 2108) (sp-item 2109) (sp-item 2110) (sp-item 2111)) @@ -297,8 +297,8 @@ ;; failed to figure out what this is: (defpartgroup group-ogreboss-boulder-grow :id 468 - :duration 150 - :linger-duration 600 + :duration (seconds 0.5) + :linger-duration (seconds 2) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 12) :parts ((sp-item 2201) (sp-item 2202) (sp-item 2203) (sp-item 2204)) @@ -459,8 +459,8 @@ ;; failed to figure out what this is: (defpartgroup group-ogreboss-pre-missile :id 470 - :duration 150 - :linger-duration 600 + :duration (seconds 0.5) + :linger-duration (seconds 2) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 3) :parts ((sp-item 2079 :period 600 :length 5) @@ -506,7 +506,7 @@ ;; failed to figure out what this is: (defpartgroup group-ogreboss-missile-impact :id 471 - :duration 300 + :duration (seconds 1) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 16) :parts ((sp-item 2079 :period 600 :length 5) diff --git a/test/decompiler/reference/jak1/levels/racer_common/racer-part_REF.gc b/test/decompiler/reference/jak1/levels/racer_common/racer-part_REF.gc index 1eab334a4f..31e55fa18a 100644 --- a/test/decompiler/reference/jak1/levels/racer_common/racer-part_REF.gc +++ b/test/decompiler/reference/jak1/levels/racer_common/racer-part_REF.gc @@ -1000,8 +1000,8 @@ ;; failed to figure out what this is: (defpartgroup group-racer-explode :id 116 - :duration 300 - :linger-duration 3000 + :duration (seconds 1) + :linger-duration (seconds 10) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 8) :parts ((sp-item 2279 :period 600 :length 5) diff --git a/test/decompiler/reference/jak1/levels/rolling/rolling-lightning-mole_REF.gc b/test/decompiler/reference/jak1/levels/rolling/rolling-lightning-mole_REF.gc index c1346e5edf..de95a4b493 100644 --- a/test/decompiler/reference/jak1/levels/rolling/rolling-lightning-mole_REF.gc +++ b/test/decompiler/reference/jak1/levels/rolling/rolling-lightning-mole_REF.gc @@ -1103,7 +1103,7 @@ ;; failed to figure out what this is: (defpartgroup group-peeper :id 456 - :duration 5 + :duration (seconds 0.017) :bounds (static-bspherem 0 0 0 15) :parts ((sp-item 1768) (sp-item 1769 :period 120 :length 30) (sp-item 1770 :period 120 :length 60)) ) diff --git a/test/decompiler/reference/jak1/levels/rolling/rolling-obs_REF.gc b/test/decompiler/reference/jak1/levels/rolling/rolling-obs_REF.gc index 5aa2303f2a..3d4dbc1757 100644 --- a/test/decompiler/reference/jak1/levels/rolling/rolling-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/rolling/rolling-obs_REF.gc @@ -517,7 +517,7 @@ ;; failed to figure out what this is: (defpartgroup group-dark-plant :id 455 - :duration 42 + :duration (seconds 0.14) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 15) :parts ((sp-item 1764) (sp-item 2356)) diff --git a/test/decompiler/reference/jak1/levels/rolling/rolling-race-ring_REF.gc b/test/decompiler/reference/jak1/levels/rolling/rolling-race-ring_REF.gc index 9fee54e139..74570d1323 100644 --- a/test/decompiler/reference/jak1/levels/rolling/rolling-race-ring_REF.gc +++ b/test/decompiler/reference/jak1/levels/rolling/rolling-race-ring_REF.gc @@ -46,7 +46,7 @@ ;; failed to figure out what this is: (defpartgroup group-rolling-ring :id 457 - :linger-duration 0 + :linger-duration (seconds 0) :bounds (static-bspherem 0 0 0 8) :parts ((sp-item 1773 :fade-after (meters 100) :falloff-to (meters 100)) (sp-item 1774 :fade-after (meters 80)) @@ -137,8 +137,8 @@ ;; failed to figure out what this is: (defpartgroup group-rolling-spawn-ring :id 458 - :duration 5 - :linger-duration 141 + :duration (seconds 0.017) + :linger-duration (seconds 0.47) :bounds (static-bspherem 0 0 0 8) :parts ((sp-item 1777 :fade-after (meters 100) :falloff-to (meters 100)) (sp-item 1778 :flags (is-3d)) @@ -249,8 +249,8 @@ ;; failed to figure out what this is: (defpartgroup group-rolling-explode-ring :id 459 - :duration 5 - :linger-duration 150 + :duration (seconds 0.017) + :linger-duration (seconds 0.5) :bounds (static-bspherem 0 0 0 8) :parts ((sp-item 1783 :fade-after (meters 100) :falloff-to (meters 100)) (sp-item 1784 :flags (is-3d))) ) @@ -320,7 +320,7 @@ ;; failed to figure out what this is: (defpartgroup group-rolling-ring-blue :id 460 - :linger-duration 0 + :linger-duration (seconds 0) :bounds (static-bspherem 0 0 0 8) :parts ((sp-item 1785 :fade-after (meters 100) :falloff-to (meters 100)) (sp-item 1786 :fade-after (meters 80)) @@ -411,8 +411,8 @@ ;; failed to figure out what this is: (defpartgroup group-rolling-spawn-ring-blue :id 461 - :duration 5 - :linger-duration 141 + :duration (seconds 0.017) + :linger-duration (seconds 0.47) :bounds (static-bspherem 0 0 0 8) :parts ((sp-item 1789 :fade-after (meters 100) :falloff-to (meters 100)) (sp-item 1790 :flags (is-3d)) @@ -523,8 +523,8 @@ ;; failed to figure out what this is: (defpartgroup group-rolling-explode-ring-blue :id 462 - :duration 5 - :linger-duration 150 + :duration (seconds 0.017) + :linger-duration (seconds 0.5) :bounds (static-bspherem 0 0 0 8) :parts ((sp-item 1795 :fade-after (meters 100) :falloff-to (meters 100)) (sp-item 1796 :flags (is-3d))) ) diff --git a/test/decompiler/reference/jak1/levels/snow/ice-cube_REF.gc b/test/decompiler/reference/jak1/levels/snow/ice-cube_REF.gc index 92f80a00b9..fbfb02cc1a 100644 --- a/test/decompiler/reference/jak1/levels/snow/ice-cube_REF.gc +++ b/test/decompiler/reference/jak1/levels/snow/ice-cube_REF.gc @@ -235,8 +235,8 @@ ;; failed to figure out what this is: (defpartgroup group-ice-cube-foot-puff :id 567 - :duration 5 - :linger-duration 450 + :duration (seconds 0.017) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 2325) (sp-item 2326) (sp-item 2327)) ) diff --git a/test/decompiler/reference/jak1/levels/snow/snow-obs_REF.gc b/test/decompiler/reference/jak1/levels/snow/snow-obs_REF.gc index 8a254f5e1a..01fd9e4f09 100644 --- a/test/decompiler/reference/jak1/levels/snow/snow-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/snow/snow-obs_REF.gc @@ -171,7 +171,7 @@ ;; failed to figure out what this is: (defpartgroup group-snow-yellow-eco-room-activate :id 511 - :duration 900 + :duration (seconds 3) :bounds (static-bspherem 0 -6 0 8) :parts ((sp-item 1994) (sp-item 1994) (sp-item 1995 :flags (bit1) :period 1200 :length 15)) ) diff --git a/test/decompiler/reference/jak1/levels/snow/snow-ram-boss_REF.gc b/test/decompiler/reference/jak1/levels/snow/snow-ram-boss_REF.gc index e70768aee4..cc337c5f48 100644 --- a/test/decompiler/reference/jak1/levels/snow/snow-ram-boss_REF.gc +++ b/test/decompiler/reference/jak1/levels/snow/snow-ram-boss_REF.gc @@ -291,7 +291,7 @@ ;; failed to figure out what this is: (defpartgroup group-ram-boss-proj-fly :id 522 - :duration 300 + :duration (seconds 1) :bounds (static-bspherem 0 0 0 3) :parts ((sp-item 1910 :flags (launch-asap) :binding 1908) (sp-item 1908 :flags (start-dead) :binding 1909) @@ -420,7 +420,7 @@ ;; failed to figure out what this is: (defpartgroup group-ram-boss-proj-hit :id 523 - :duration 5 + :duration (seconds 0.017) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 8) :parts ((sp-item 1914) (sp-item 1915) (sp-item 1916)) @@ -497,7 +497,7 @@ ;; failed to figure out what this is: (defpartgroup group-ram-boss-proj-die :id 524 - :duration 5 + :duration (seconds 0.017) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 8) :parts ((sp-item 1914)) @@ -849,8 +849,8 @@ ;; failed to figure out what this is: (defpartgroup group-ram-boss-foot-puff :id 574 - :duration 5 - :linger-duration 450 + :duration (seconds 0.017) + :linger-duration (seconds 1.5) :bounds (static-bspherem 0 0 0 2) :parts ((sp-item 2367) (sp-item 2368) (sp-item 2369)) ) diff --git a/test/decompiler/reference/jak1/levels/sunken/sun-exit-chamber_REF.gc b/test/decompiler/reference/jak1/levels/sunken/sun-exit-chamber_REF.gc index d495d959ff..01e3256ba3 100644 --- a/test/decompiler/reference/jak1/levels/sunken/sun-exit-chamber_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/sun-exit-chamber_REF.gc @@ -170,7 +170,7 @@ ;; failed to figure out what this is: (defpartgroup group-exit-chamber-ripples :id 620 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2512 :flags (is-3d))) diff --git a/test/decompiler/reference/jak1/levels/swamp/kermit_REF.gc b/test/decompiler/reference/jak1/levels/swamp/kermit_REF.gc index 8f2377ac83..470c97cf9f 100644 --- a/test/decompiler/reference/jak1/levels/swamp/kermit_REF.gc +++ b/test/decompiler/reference/jak1/levels/swamp/kermit_REF.gc @@ -327,7 +327,7 @@ ;; failed to figure out what this is: (defpartgroup group-kermit-pulse-impact :id 301 - :duration 5 + :duration (seconds 0.017) :bounds (static-bspherem 0 0 0 3) :parts ((sp-item 1371) (sp-item 1372)) ) diff --git a/test/decompiler/reference/jak1/levels/swamp/swamp-obs_REF.gc b/test/decompiler/reference/jak1/levels/swamp/swamp-obs_REF.gc index de1da7506d..7b0384f376 100644 --- a/test/decompiler/reference/jak1/levels/swamp/swamp-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/swamp/swamp-obs_REF.gc @@ -10,7 +10,7 @@ ;; failed to figure out what this is: (defpartgroup group-swamp-spike-up :id 289 - :duration 5 + :duration (seconds 0.017) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 8) :parts ((sp-item 1325 :fade-after (meters 120) :falloff-to (meters 120)) @@ -106,7 +106,7 @@ ;; failed to figure out what this is: (defpartgroup group-swamp-spike-down :id 290 - :duration 5 + :duration (seconds 0.017) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 8) :parts ((sp-item 1325 :fade-after (meters 120) :falloff-to (meters 120)) @@ -578,7 +578,7 @@ ;; failed to figure out what this is: (defpartgroup group-swamp-rock-explosion :id 291 - :duration 300 + :duration (seconds 1) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 8) :parts ((sp-item 1330 :period 1500 :length 5) diff --git a/test/decompiler/reference/jak1/levels/swamp/swamp-rat-nest_REF.gc b/test/decompiler/reference/jak1/levels/swamp/swamp-rat-nest_REF.gc index 3df39f4bc1..b401f7565e 100644 --- a/test/decompiler/reference/jak1/levels/swamp/swamp-rat-nest_REF.gc +++ b/test/decompiler/reference/jak1/levels/swamp/swamp-rat-nest_REF.gc @@ -6,7 +6,7 @@ ;; failed to figure out what this is: (defpartgroup group-swamp-rat-nest-a-explosion :id 292 - :duration 5 + :duration (seconds 0.017) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 6) :parts ((sp-item 1334) (sp-item 1335) (sp-item 1336) (sp-item 1337) (sp-item 1338) (sp-item 1339)) @@ -15,7 +15,7 @@ ;; failed to figure out what this is: (defpartgroup group-swamp-rat-nest-b-explosion :id 293 - :duration 5 + :duration (seconds 0.017) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 6) :parts ((sp-item 1342) (sp-item 1339) (sp-item 1337) (sp-item 1334)) @@ -24,7 +24,7 @@ ;; failed to figure out what this is: (defpartgroup group-swamp-rat-nest-c-explosion :id 294 - :duration 5 + :duration (seconds 0.017) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 6) :parts ((sp-item 1335) (sp-item 1339) (sp-item 1337) (sp-item 1334)) diff --git a/test/decompiler/reference/jak1/levels/training/training-obs_REF.gc b/test/decompiler/reference/jak1/levels/training/training-obs_REF.gc index daaed30370..92f0623d94 100644 --- a/test/decompiler/reference/jak1/levels/training/training-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/training/training-obs_REF.gc @@ -472,7 +472,7 @@ ;; failed to figure out what this is: (defpartgroup group-scarecrow-explode :id 143 - :duration 15 + :duration (seconds 0.05) :bounds (static-bspherem 0 0 0 1) :parts ((sp-item 2912) (sp-item 2913) (sp-item 2914) (sp-item 2915) (sp-item 2916)) ) @@ -630,7 +630,7 @@ ;; failed to figure out what this is: (defpartgroup group-scarecrow-joint-explode :id 144 - :duration 15 + :duration (seconds 0.05) :bounds (static-bspherem 0 0 0 1) :parts ((sp-item 2912)) ) @@ -638,7 +638,7 @@ ;; failed to figure out what this is: (defpartgroup group-scarecrow-hit :id 145 - :duration 15 + :duration (seconds 0.05) :bounds (static-bspherem 0 0 0 1) :parts ((sp-item 2913)) ) diff --git a/test/decompiler/reference/jak1/levels/village1/sequence-a-village1_REF.gc b/test/decompiler/reference/jak1/levels/village1/sequence-a-village1_REF.gc index 922033e99f..bab28cefe9 100644 --- a/test/decompiler/reference/jak1/levels/village1/sequence-a-village1_REF.gc +++ b/test/decompiler/reference/jak1/levels/village1/sequence-a-village1_REF.gc @@ -4,7 +4,7 @@ ;; failed to figure out what this is: (defpartgroup group-sequenceAV-splash :id 686 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2854 :period 900 :length 600)) @@ -37,8 +37,8 @@ ;; failed to figure out what this is: (defpartgroup group-sequenceAV-spit :id 687 - :duration 5 - :linger-duration 900 + :duration (seconds 0.017) + :linger-duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2855)) diff --git a/test/decompiler/reference/jak1/levels/village2/assistant-village2_REF.gc b/test/decompiler/reference/jak1/levels/village2/assistant-village2_REF.gc index 37c811b448..5347fc100d 100644 --- a/test/decompiler/reference/jak1/levels/village2/assistant-village2_REF.gc +++ b/test/decompiler/reference/jak1/levels/village2/assistant-village2_REF.gc @@ -1035,7 +1035,7 @@ ;; failed to figure out what this is: (defpartgroup group-levitator-on-big :id 660 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2751 :fade-after (meters 100) :falloff-to (meters 100) :binding 2750) @@ -1183,7 +1183,7 @@ ;; failed to figure out what this is: (defpartgroup group-levitator-on-small :id 661 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2679)) diff --git a/test/decompiler/reference/jak1/levels/village2/swamp-blimp_REF.gc b/test/decompiler/reference/jak1/levels/village2/swamp-blimp_REF.gc index b3b7daef91..58382d7868 100644 --- a/test/decompiler/reference/jak1/levels/village2/swamp-blimp_REF.gc +++ b/test/decompiler/reference/jak1/levels/village2/swamp-blimp_REF.gc @@ -42,7 +42,7 @@ ;; failed to figure out what this is: (defpartgroup group-tetherrock-explode :id 285 - :duration 150 + :duration (seconds 0.5) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 16) :parts ((sp-item 2065 :period 600 :length 5) diff --git a/test/decompiler/reference/jak1/levels/village2/village2-obs_REF.gc b/test/decompiler/reference/jak1/levels/village2/village2-obs_REF.gc index 531fb3037b..af6b15fb18 100644 --- a/test/decompiler/reference/jak1/levels/village2/village2-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/village2/village2-obs_REF.gc @@ -1212,7 +1212,7 @@ ;; failed to figure out what this is: (defpartgroup group-ogreboulder-hit-wall :id 551 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2287 :period 900 :length 40)) @@ -1240,7 +1240,7 @@ ;; failed to figure out what this is: (defpartgroup group-ogreboulder-splash :id 552 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 64) :parts ((sp-item 2288 :period 900 :length 20) diff --git a/test/decompiler/reference/jak1/levels/village2/village2-part_REF.gc b/test/decompiler/reference/jak1/levels/village2/village2-part_REF.gc index 1973c09dbe..ed8e9a66c1 100644 --- a/test/decompiler/reference/jak1/levels/village2/village2-part_REF.gc +++ b/test/decompiler/reference/jak1/levels/village2/village2-part_REF.gc @@ -621,7 +621,7 @@ ;; failed to figure out what this is: (defpartgroup group-village2-fireboulder :id 271 - :duration 18000 + :duration (seconds 60) :bounds (static-bspherem 0 4 0 10.5) :parts ((sp-item 1153 :fade-after (meters 200) :falloff-to (meters 240)) (sp-item 1154 :fade-after (meters 100) :falloff-to (meters 120) :period 300 :length 60) @@ -1970,7 +1970,7 @@ ;; failed to figure out what this is: (defpartgroup group-village2-fireboulder-hover :id 678 - :duration 900 + :duration (seconds 3) :flags (use-local-clock) :bounds (static-bspherem 0 0 0 16) :parts ((sp-item 2792 :fade-after (meters 100) :falloff-to (meters 100) :binding 2791) diff --git a/test/decompiler/reference/jak2/decompiler-macros.gc b/test/decompiler/reference/jak2/decompiler-macros.gc index fa0dd1b001..5fa7634c95 100644 --- a/test/decompiler/reference/jak2/decompiler-macros.gc +++ b/test/decompiler/reference/jak2/decompiler-macros.gc @@ -966,3 +966,180 @@ :mask (sound-mask ,@snd-mask) )) ) + +(defmacro sp-item (launcher + &key (fade-after 0.0) + &key (falloff-to 0.0) + &key (flags ()) + &key (period 0) + &key (length 0) + &key (offset 0) + &key (hour-mask 0) + &key (binding 0) + ) + `(new 'static 'sparticle-group-item + :launcher ,launcher + :fade-after ,fade-after + :falloff-to ,falloff-to + :flags (sp-group-item-flag ,@flags) + :period ,period + :length ,length + :offset ,offset + :hour-mask ,hour-mask + :binding ,binding + ) + ) + +(defmacro defpartgroup (name &key id &key parts &key (duration 3000) &key (linger-duration 1500) &key (flags ()) &key bounds + &key (rotate (0.0 0.0 0.0)) &key (scale (1.0 1.0 1.0))) + "define a new part group. defines a constant with the name of the group with the ID as its value" + `(begin + (defconstant ,name ,id) + (set! (-> *part-group-id-table* ,id) + (new 'static 'sparticle-launch-group + :duration ,duration + :linger-duration ,linger-duration + :flags (sp-group-flag ,@flags) + :bounds ,bounds + :name ,(symbol->string name) + :length ,(length parts) + :launcher (new 'static 'inline-array sparticle-group-item ,(length parts) ,@parts) + :rotate-x ,(car rotate) + :rotate-y ,(cadr rotate) + :rotate-z ,(caddr rotate) + :scale-x ,(car scale) + :scale-y ,(cadr scale) + :scale-z ,(caddr scale) + ) + ) + ) + ) + +(defmacro defpart (id &key (init-specs ())) + "define a new sparticle-launcher" + `(set! (-> *part-id-table* ,id) + (new 'static 'sparticle-launcher + :init-specs (new 'static 'inline-array sp-field-init-spec ,(1+ (length init-specs)) + ,@init-specs + (sp-end) + ))) + ) + +(defmacro sp-tex (field-name tex-id) + `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-name) :tex ,tex-id) + ) + +(defmacro sp-rnd-flt (field-name val range mult) + `(new 'static 'sp-field-init-spec + :field (sp-field-id ,field-name) + :initial-valuef ,val + :random-rangef ,range + :random-multf ,mult + :flags (sp-flag float-with-rand) + ) + ) + +(defmacro sp-flt (field-name val) + `(new 'static 'sp-field-init-spec + :field (sp-field-id ,field-name) + :initial-valuef ,val + :random-rangef 0.0 + :random-multf 1.0 + :flags (sp-flag float-with-rand) + ) + ) + +(defmacro sp-int (field-name val) + `(new 'static 'sp-field-init-spec + :field (sp-field-id ,field-name) + :initial-value ,val + :random-range 0 + :random-mult 1 + ) + ) + +(defmacro sp-int-plain-rnd (field-name val range mult) + "For when we use plain integer, but set the randoms." + `(new 'static 'sp-field-init-spec + :field (sp-field-id ,field-name) + :initial-value ,val + :random-range ,range + :random-mult ,mult + ) + ) + +(defmacro sp-rnd-int (field-name val range mult) + `(new 'static 'sp-field-init-spec + :field (sp-field-id ,field-name) + :initial-value ,val + :random-range ,range + :random-multf ,mult + :flags (sp-flag int-with-rand) + ) + ) + + +(defmacro sp-rnd-int-flt (field-name val range mult) + `(new 'static 'sp-field-init-spec + :field (sp-field-id ,field-name) + :initial-valuef ,val + :random-range ,range + :random-multf ,mult + :flags (sp-flag int-with-rand) + ) + ) + +(defmacro sp-cpuinfo-flags (&rest flags) + `(new 'static 'sp-field-init-spec + :field (sp-field-id spt-flags) + :initial-value (sp-cpuinfo-flag ,@flags) + :random-mult 1 + ) + ) + +(defmacro sp-launcher-by-id (field-name val) + `(new 'static 'sp-field-init-spec + :field (sp-field-id ,field-name) + :initial-value ,val + :flags (sp-flag part-by-id) + ) + ) + +(defmacro sp-func (field-name val) + `(new 'static 'sp-field-init-spec + :field (sp-field-id ,field-name) + :sym ,val + :flags (sp-flag from-pointer) + ) + ) + +(defmacro sp-sound (sound) + `(new 'static 'sp-field-init-spec + :field (sp-field-id spt-sound) + :sound ,sound + :flags (sp-flag plain-v2) + ) + ) + +(defmacro sp-end () + `(new 'static 'sp-field-init-spec + :field (sp-field-id spt-end) + ) + ) + +(defmacro sp-copy-from-other (field-name offset) + `(new 'static 'sp-field-init-spec + :field (sp-field-id ,field-name) + :initial-value ,offset + :random-mult 1 + :flags (sp-flag copy-from-other-field) + ) + ) + +(defmacro static-spherem (x y z r) + "actually makes a vector. use bspherem for sphere." + `(new 'static 'vector :x (meters ,x) :y (meters ,y) :z (meters ,z) :w (meters ,r)) + ) +(defmacro static-bspherem (x y z r) + `(new 'static 'sphere :x (meters ,x) :y (meters ,y) :z (meters ,z) :w (meters ,r)) + ) diff --git a/test/decompiler/reference/jak2/engine/debug/debug-part_REF.gc b/test/decompiler/reference/jak2/engine/debug/debug-part_REF.gc new file mode 100644 index 0000000000..2b39f9bf68 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/debug/debug-part_REF.gc @@ -0,0 +1,2137 @@ +;;-*-Lisp-*- +(in-package goal) + +;; this file is debug only +(declare-file (debug)) +(when *debug-segment* +;; failed to figure out what this is: +(defpart 335 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x47 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 5) (meters 2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 0.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 20) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-red-eco-strike-ground + :id 96 + :duration (seconds 0.035) + :linger-duration (seconds 1.5) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 336) (sp-item 337)) + ) + +;; failed to figure out what this is: +(defpart 336 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 24.0) + (sp-flt spt-y (meters 1)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 32.0) + (sp-rnd-flt spt-a 8.0 56.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.13333334) (meters 0.16666667) 1.0) + (sp-flt spt-scalevel-x (meters 0.013333334)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -1.4222223) + (sp-flt spt-fade-a -0.35555556) + (sp-flt spt-accel-y 0.34133333) + (sp-flt spt-friction 0.7) + (sp-int spt-timer 180) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 90) + (sp-launcher-by-id spt-next-launcher 338) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 337 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 32.0) + (sp-flt spt-y (meters 1)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.5) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-rnd-flt spt-a 64.0 8.0 1.0) + (sp-flt spt-vel-y (meters 0.3)) + (sp-flt spt-scalevel-x (meters 0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -2.8444445) + (sp-flt spt-fade-a -0.82222223) + (sp-flt spt-friction 0.7) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 45) + (sp-launcher-by-id spt-next-launcher 338) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-red-eco-spinkick + :id 97 + :duration (seconds 0.035) + :linger-duration (seconds 1.5) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 339) (sp-item 340) (sp-item 341 :flags (bit6))) + ) + +;; failed to figure out what this is: +(defpart 339 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 1) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 32.0) + (sp-rnd-flt spt-a 8.0 56.0 1.0) + (sp-flt spt-scalevel-x (meters 0.013333334)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -1.4222223) + (sp-flt spt-fade-a -0.35555556) + (sp-flt spt-accel-y 0.34133333) + (sp-int spt-timer 180) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 90) + (sp-launcher-by-id spt-next-launcher 338) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0) (meters 0.5) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 338 + :init-specs ((sp-flt spt-fade-r -0.7111111) (sp-flt spt-fade-g 0.7111111) (sp-flt spt-fade-b 0.35555556)) + ) + +;; failed to figure out what this is: +(defpart 340 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 0.66) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.5) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-rnd-flt spt-a 64.0 8.0 1.0) + (sp-flt spt-scalevel-x (meters 0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -2.8444445) + (sp-flt spt-fade-a -0.82222223) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 45) + (sp-launcher-by-id spt-next-launcher 338) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0) (meters 0.1) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 341 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 4) (meters 2) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 96.0) + (sp-flt spt-a 64.0) + (sp-flt spt-fade-a -4.0) + (sp-flt spt-accel-y 0.34133333) + (sp-int spt-timer 10) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-eco-blue + :id 98 + :bounds (static-bspherem 0 0 0 1) + :parts ((sp-item 348 :flags (launch-asap) :binding 342) + (sp-item 342 :fade-after (meters 40) :flags (start-dead launch-asap) :binding 343) + (sp-item 342 :fade-after (meters 60) :flags (start-dead launch-asap) :binding 343) + (sp-item 342 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 343) + (sp-item 342 :fade-after (meters 100) :flags (start-dead launch-asap) :binding 343) + (sp-item 342 :fade-after (meters 130) :flags (start-dead launch-asap) :binding 343) + (sp-item 342 :flags (start-dead launch-asap) :binding 343) + (sp-item 343 :flags (start-dead launch-asap) :binding 344) + (sp-item 343 :flags (start-dead launch-asap) :binding 345) + (sp-item 343 :flags (start-dead launch-asap) :binding 346) + (sp-item 343 :flags (start-dead launch-asap) :binding 344) + (sp-item 343 :flags (start-dead launch-asap) :binding 345) + (sp-item 343 :flags (start-dead launch-asap) :binding 346) + (sp-item 344 :fade-after (meters 60) :flags (start-dead) :binding 347) + (sp-item 345 :fade-after (meters 70) :flags (start-dead) :binding 347) + (sp-item 346 :fade-after (meters 80) :flags (start-dead) :binding 347) + (sp-item 344 :fade-after (meters 90) :flags (start-dead) :binding 347) + (sp-item 345 :fade-after (meters 100) :flags (start-dead) :binding 347) + (sp-item 346 :fade-after (meters 100) :flags (start-dead) :binding 347) + (sp-item 347 :flags (start-dead)) + ) + ) + +;; failed to figure out what this is: +(defpart 348 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 4)) + (sp-flt spt-scale-x (meters 0.01)) + (sp-copy-from-other spt-scale-y -4) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root-prim) + ) + ) + +;; failed to figure out what this is: +(defpart 342 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 6.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-z (meters 0.3) (meters 0.15) 1.0) + (sp-rnd-flt spt-scale-x (meters 2) (meters 1) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 32.0 1.0) + (sp-rnd-flt spt-g 32.0 96.0 1.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-flt spt-a 32.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.0148148155) (meters 0.0044444446) 1.0) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.1) 1 36.40889) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + (sp-func spt-func 'eco-fadeout) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 349) + ) + ) + +;; failed to figure out what this is: +(defpart 349 + :init-specs ((sp-flt spt-fade-a -0.21333334) (sp-int spt-timer 150)) + ) + +;; failed to figure out what this is: +(defpart 343 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-z (meters 0.2) (meters 0.1) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.8) (meters 0.4) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 96.0) + (sp-flt spt-g 96.0) + (sp-flt spt-b 192.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.017777778) (meters 0.0148148155) 1.0) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0)) + (sp-rnd-flt spt-rotvel-z (degrees 269.52002) (degrees 208.99998) 1.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + (sp-func spt-func 'eco-fadeout) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 350) + ) + ) + +;; failed to figure out what this is: +(defpart 350 + :init-specs ((sp-flt spt-fade-a -0.16) (sp-int spt-timer 150)) + ) + +;; failed to figure out what this is: +(defpart 344 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-rnd-flt spt-num 0.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 1) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.15) (meters 0.1) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 128.0 64.0 1.0) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +;; failed to figure out what this is: +(defpart 345 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-rnd-flt spt-num 0.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 1) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.15) (meters 0.1) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 128.0 64.0 1.0) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +;; failed to figure out what this is: +(defpart 346 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-rnd-flt spt-num 0.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 1) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.15) (meters 0.1) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 128.0 64.0 1.0) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +;; failed to figure out what this is: +(defpart 347 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-rnd-flt spt-num 0.2 0.2 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.5) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 32.0) + (sp-flt spt-g 32.0) + (sp-flt spt-b 192.0) + (sp-rnd-flt spt-a 96.0 64.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-eco-blue-collect + :id 99 + :duration (seconds 0.5) + :linger-duration (seconds 2) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 356 :flags (launch-asap) :binding 352) + (sp-item 352 :flags (start-dead launch-asap) :binding 353) + (sp-item 352 :flags (start-dead launch-asap) :binding 354) + (sp-item 352 :flags (start-dead launch-asap) :binding 353) + (sp-item 352 :flags (start-dead launch-asap) :binding 354) + (sp-item 352 :flags (start-dead launch-asap) :binding 355) + (sp-item 353 :fade-after (meters 40) :flags (start-dead)) + (sp-item 353 :fade-after (meters 40) :flags (start-dead)) + (sp-item 353 :fade-after (meters 40) :flags (start-dead)) + (sp-item 353 :fade-after (meters 40) :flags (start-dead)) + (sp-item 354 :fade-after (meters 40) :flags (start-dead)) + (sp-item 354 :fade-after (meters 40) :flags (start-dead)) + (sp-item 354 :fade-after (meters 40) :flags (start-dead)) + (sp-item 354 :fade-after (meters 40) :flags (start-dead)) + (sp-item 355 :fade-after (meters 40) :flags (start-dead)) + (sp-item 355 :fade-after (meters 40) :flags (start-dead)) + (sp-item 355 :fade-after (meters 40) :flags (start-dead)) + (sp-item 355 :fade-after (meters 40) :flags (start-dead)) + ) + ) + +;; failed to figure out what this is: +(defpart 356 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 4)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 96.0) + (sp-flt spt-g 96.0) + (sp-flt spt-b 192.0) + (sp-flt spt-a 64.0) + (sp-flt spt-fade-a -3.2) + (sp-int spt-timer 150) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'part-tracker-track-root) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 277) + ) + ) + +;; failed to figure out what this is: +(defpart 352 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 5.0) + (sp-rnd-flt spt-y (meters -4) (meters 16) 1.0) + (sp-flt spt-z (meters 0.08)) + (sp-rnd-flt spt-scale-x (meters 0.75) (meters 0.5) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 127.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters -0.017777778) (meters 0.00048828125) 145.63556) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0.08)) + (sp-flt spt-accel-z -21.845333) + (sp-int spt-timer 150) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + ) + ) + +;; failed to figure out what this is: +(defpart 353 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 1) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.15) (meters 0.1) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 128.0 64.0 1.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +;; failed to figure out what this is: +(defpart 354 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 1) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.15) (meters 0.1) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 128.0 64.0 1.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +;; failed to figure out what this is: +(defpart 355 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 1) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.15) (meters 0.1) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 128.0 64.0 1.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-part-vent-blue-active + :id 100 + :bounds (static-bspherem 0 5 0 5) + :parts ((sp-item 360 :fade-after (meters 140) :falloff-to (meters 140) :binding 357) + (sp-item 360 :fade-after (meters 140) :falloff-to (meters 140) :binding 358) + (sp-item 360 :fade-after (meters 140) :falloff-to (meters 140) :binding 359) + (sp-item 361) + (sp-item 362 :fade-after (meters 120) :falloff-to (meters 120)) + (sp-item 363 :fade-after (meters 120) :falloff-to (meters 120)) + (sp-item 364 :fade-after (meters 120) :falloff-to (meters 120)) + (sp-item 359 :fade-after (meters 30) :falloff-to (meters 30) :flags (start-dead)) + (sp-item 358 :fade-after (meters 60) :falloff-to (meters 60) :flags (start-dead)) + (sp-item 357 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 359 :fade-after (meters 90) :falloff-to (meters 90) :flags (start-dead)) + (sp-item 358 :fade-after (meters 100) :falloff-to (meters 100) :flags (start-dead)) + (sp-item 357 :fade-after (meters 110) :falloff-to (meters 110) :flags (start-dead)) + (sp-item 359 :fade-after (meters 120) :falloff-to (meters 120) :flags (start-dead)) + (sp-item 358 :fade-after (meters 120) :falloff-to (meters 120) :flags (start-dead)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-part-vent-blue-inactive + :id 101 + :bounds (static-bspherem 0 5 0 5) + :parts ((sp-item 360 :fade-after (meters 100)) (sp-item 361)) + ) + +;; failed to figure out what this is: +(defpart 361 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x26 :page #xc)) + (sp-rnd-flt spt-num 0.1 1.0 1.0) + (sp-rnd-flt spt-x (meters -0.75) (meters 1.5) 1.0) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-z (meters -0.75) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 1.4) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 32.0) + (sp-flt spt-g 32.0) + (sp-flt spt-b 192.0) + (sp-flt spt-a 64.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-flt spt-fade-a -0.2) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + ) + ) + +;; failed to figure out what this is: +(defpart 360 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-rnd-flt spt-num 0.05 0.1 1.0) + (sp-rnd-flt spt-x (meters -0.75) (meters 1.5) 1.0) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-z (meters -0.75) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 0.4) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 192.0) + (sp-flt spt-a 96.0) + (sp-rnd-flt spt-vel-y (meters 0.01) (meters 0.01) 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + ) + ) + +;; failed to figure out what this is: +(defpart 357 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +;; failed to figure out what this is: +(defpart 358 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +;; failed to figure out what this is: +(defpart 359 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +;; failed to figure out what this is: +(defpart 362 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-rnd-flt spt-num 0.1 0.5 1.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1) 1.0) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-z (meters -0.5) (meters 1) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 1.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 10.0) (degrees 160.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 91) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +;; failed to figure out what this is: +(defpart 363 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-rnd-flt spt-num 0.2 0.4 1.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1) 1.0) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-z (meters -0.5) (meters 1) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 1.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 10.0) (degrees 160.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 91) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +;; failed to figure out what this is: +(defpart 364 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-rnd-flt spt-num 0.3 0.1 1.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1) 1.0) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-z (meters -0.5) (meters 1) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 1.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 10.0) (degrees 160.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 91) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 351) + ) + ) + +;; failed to figure out what this is: +(defpart 351 + :init-specs ((sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-fade-r -1.0) + (sp-flt spt-fade-g -1.0) + (sp-flt spt-fade-a -2.0) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-eco-red + :id 102 + :bounds (static-bspherem 0 0 0 1) + :parts ((sp-item 369 :flags (launch-asap) :binding 365) + (sp-item 365 :flags (start-dead launch-asap) :binding 366) + (sp-item 365 :flags (start-dead launch-asap) :binding 366) + (sp-item 365 :flags (start-dead launch-asap) :binding 366) + (sp-item 365 :flags (start-dead launch-asap) :binding 366) + (sp-item 365 :flags (start-dead launch-asap) :binding 366) + (sp-item 365 :flags (start-dead launch-asap) :binding 366) + (sp-item 366 :flags (start-dead launch-asap) :binding 367) + (sp-item 366 :flags (start-dead launch-asap) :binding 367) + (sp-item 366 :flags (start-dead launch-asap) :binding 367) + (sp-item 367 :fade-after (meters 100) :flags (start-dead launch-asap) :binding 368) + (sp-item 367 :fade-after (meters 100) :flags (start-dead launch-asap) :binding 368) + (sp-item 367 :fade-after (meters 100) :flags (start-dead launch-asap) :binding 368) + (sp-item 368 :fade-after (meters 90) :falloff-to (meters 110) :flags (start-dead)) + (sp-item 368 :fade-after (meters 90) :falloff-to (meters 110) :flags (start-dead)) + (sp-item 368 :fade-after (meters 90) :falloff-to (meters 110) :flags (start-dead)) + ) + ) + +;; failed to figure out what this is: +(defpart 369 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 4)) + (sp-flt spt-scale-x (meters 0.01)) + (sp-copy-from-other spt-scale-y -4) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root-prim) + ) + ) + +;; failed to figure out what this is: +(defpart 365 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 6.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-z (meters 0.15) (meters 0.2) 1.0) + (sp-rnd-flt spt-scale-x (meters 2) (meters 2) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 24.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.0148148155) (meters 0.0044444446) 1.0) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.1) 1 36.40889) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + (sp-func spt-func 'eco-fadeout) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 370) + ) + ) + +;; failed to figure out what this is: +(defpart 370 + :init-specs ((sp-flt spt-fade-a -0.16) (sp-int spt-timer 150)) + ) + +;; failed to figure out what this is: +(defpart 366 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-z (meters 0.25) (meters 0.1) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 0.4) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-a 32.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.017777778) (meters 0.0148148155) 1.0) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0)) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + (sp-func spt-func 'eco-fadeout) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 371) + ) + ) + +;; failed to figure out what this is: +(defpart 371 + :init-specs ((sp-flt spt-fade-a -0.21333334) (sp-int spt-timer 150)) + ) + +;; failed to figure out what this is: +(defpart 367 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-z (meters 0.07) (meters 0.03) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 0.6) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-a 32.0) + (sp-flt spt-vel-x (meters 0.11259259)) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + (sp-func spt-func 'eco-fadeout) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 371) + ) + ) + +;; failed to figure out what this is: +(defpart 368 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 0.1 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.2) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 100.0 28.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters -0.00038095238)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.4) + (sp-flt spt-fade-a -0.01904762) + (sp-rnd-flt spt-accel-y 0.40960002 0.6144 1.0) + (sp-int-plain-rnd spt-timer 30 149 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 240) + (sp-launcher-by-id spt-next-launcher 372) + ) + ) + +;; failed to figure out what this is: +(defpart 372 + :init-specs ((sp-flt spt-fade-g 0.0)) + ) + +;; failed to figure out what this is: +(defpartgroup group-eco-red-collect + :id 103 + :duration (seconds 0.5) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 12) + :parts ((sp-item 375 :flags (launch-asap) :binding 373) + (sp-item 373 :flags (start-dead launch-asap) :binding 374) + (sp-item 373 :flags (start-dead launch-asap) :binding 374) + (sp-item 373 :flags (start-dead launch-asap) :binding 374) + (sp-item 373 :flags (start-dead launch-asap) :binding 374) + (sp-item 373 :flags (start-dead launch-asap) :binding 374) + (sp-item 374 :fade-after (meters 40) :flags (start-dead)) + (sp-item 374 :fade-after (meters 40) :flags (start-dead)) + (sp-item 374 :fade-after (meters 40) :flags (start-dead)) + (sp-item 374 :fade-after (meters 40) :flags (start-dead)) + (sp-item 374 :fade-after (meters 40) :flags (start-dead)) + ) + ) + +;; failed to figure out what this is: +(defpart 375 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 4)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -3.2) + (sp-int spt-timer 150) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'part-tracker-track-root) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 277) + ) + ) + +;; failed to figure out what this is: +(defpart 373 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 5.0) + (sp-rnd-flt spt-y (meters -4) (meters 16) 1.0) + (sp-flt spt-z (meters 0.08)) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 127.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters -0.017777778) (meters 0.00048828125) 145.63556) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0.08)) + (sp-flt spt-accel-z -21.845333) + (sp-int spt-timer 150) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + ) + ) + +;; failed to figure out what this is: +(defpart 374 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 100.0 28.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.006666667) 1.0) + (sp-flt spt-scalevel-x (meters -0.005555555)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -2.0) + (sp-flt spt-fade-a -0.22857143) + (sp-rnd-flt spt-accel-y 0.40960002 0.6144 1.0) + (sp-int spt-timer 54) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 240) + (sp-launcher-by-id spt-next-launcher 376) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-part-vent-red-active + :id 104 + :bounds (static-bspherem 0 3 0 5) + :parts ((sp-item 380 :fade-after (meters 30) :period 330 :length 5 :binding 377) + (sp-item 380 :fade-after (meters 60) :period 736 :length 5 :binding 377) + (sp-item 380 :fade-after (meters 90) :period 936 :length 5 :binding 377) + (sp-item 380 :fade-after (meters 130) :period 528 :length 5 :binding 377) + (sp-item 380 :fade-after (meters 170) :period 801 :length 5 :binding 377) + (sp-item 377 :flags (start-dead launch-asap) :binding 378) + (sp-item 377 :flags (start-dead launch-asap) :binding 378) + (sp-item 377 :flags (start-dead launch-asap) :binding 378) + (sp-item 377 :flags (start-dead launch-asap) :binding 378) + (sp-item 377 :flags (start-dead launch-asap) :binding 378) + (sp-item 377 :flags (start-dead launch-asap) :binding 378) + (sp-item 377 :flags (start-dead launch-asap) :binding 378) + (sp-item 377 :flags (start-dead launch-asap) :binding 378) + (sp-item 378 :flags (start-dead launch-asap) :binding 379) + (sp-item 378 :flags (start-dead launch-asap) :binding 379) + (sp-item 378 :flags (start-dead launch-asap) :binding 379) + (sp-item 378 :flags (start-dead launch-asap) :binding 379) + (sp-item 378 :flags (start-dead launch-asap) :binding 379) + (sp-item 378 :flags (start-dead launch-asap) :binding 379) + (sp-item 378 :flags (start-dead launch-asap) :binding 379) + (sp-item 378 :flags (start-dead launch-asap) :binding 379) + (sp-item 379 :fade-after (meters 90) :falloff-to (meters 50) :flags (start-dead)) + (sp-item 379 :fade-after (meters 90) :falloff-to (meters 60) :flags (start-dead)) + (sp-item 379 :fade-after (meters 90) :falloff-to (meters 70) :flags (start-dead)) + (sp-item 379 :fade-after (meters 90) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 379 :fade-after (meters 90) :falloff-to (meters 90) :flags (start-dead)) + (sp-item 379 :fade-after (meters 90) :falloff-to (meters 100) :flags (start-dead)) + (sp-item 379 :fade-after (meters 90) :falloff-to (meters 100) :flags (start-dead)) + (sp-item 379 :fade-after (meters 90) :falloff-to (meters 100) :flags (start-dead)) + (sp-item 381 :fade-after (meters 140) :falloff-to (meters 140)) + (sp-item 382) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-part-vent-red-inactive + :id 105 + :bounds (static-bspherem 0 3 0 5) + :parts ((sp-item 381 :fade-after (meters 140) :falloff-to (meters 140)) (sp-item 382)) + ) + +;; failed to figure out what this is: +(defpart 382 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 0.6 0.6 1.0) + (sp-rnd-flt spt-x (meters -0.75) (meters 1.5) 1.0) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-z (meters -0.75) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.9) (meters 1.9) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 32.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.1) 1 36.40889) + (sp-flt spt-fade-a -0.10666667) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + ) + ) + +;; failed to figure out what this is: +(defpart 381 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-rnd-flt spt-num 0.1 0.3 1.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1) 1.0) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-z (meters -0.5) (meters 1) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 0.4) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 64.0) + (sp-rnd-flt spt-vel-y (meters 0.01) (meters 0.01) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.1) (degrees 0.1) 1.0) + (sp-flt spt-fade-a -0.21333334) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + ) + ) + +;; failed to figure out what this is: +(defpart 380 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 1.5) 1.0) + (sp-flt spt-scale-x (meters 0.01)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-a 1.0) + (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.0033333334) 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 5.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 377 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-flt spt-z (meters 0.5)) + (sp-flt spt-scale-x (meters 1)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.017777778) (meters 0.017777778) 1.0) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.1) 1 36.40889) + (sp-flt spt-fade-a -0.28444445) + (sp-int spt-timer 450) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + ) + ) + +;; failed to figure out what this is: +(defpart 378 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-z (meters 0.25) (meters 0.1) 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.5) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-a 32.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.017777778) (meters 0.0148148155) 1.0) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0)) + (sp-int spt-timer 450) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + ) + ) + +;; failed to figure out what this is: +(defpart 379 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 0.1 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 100.0 28.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.006666667) 1.0) + (sp-flt spt-scalevel-x (meters -0.0023809525)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.4) + (sp-flt spt-fade-a -0.07619048) + (sp-rnd-flt spt-accel-y 0.40960002 0.6144 1.0) + (sp-int-plain-rnd spt-timer 30 149 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 240) + (sp-launcher-by-id spt-next-launcher 376) + ) + ) + +;; failed to figure out what this is: +(defpart 376 + :init-specs ((sp-flt spt-fade-g 0.0)) + ) + +;; failed to figure out what this is: +(defpartgroup group-part-vent-yellow-active + :id 106 + :bounds (static-bspherem 0 3 0 5) + :parts ((sp-item 386 :fade-after (meters 40) :period 330 :length 5 :binding 383) + (sp-item 386 :fade-after (meters 60) :period 736 :length 5 :binding 383) + (sp-item 386 :fade-after (meters 80) :period 936 :length 5 :binding 383) + (sp-item 386 :fade-after (meters 100) :period 528 :length 5 :binding 383) + (sp-item 386 :fade-after (meters 130) :period 801 :length 5 :binding 383) + (sp-item 383 :flags (start-dead launch-asap) :binding 384) + (sp-item 383 :flags (start-dead launch-asap) :binding 384) + (sp-item 383 :flags (start-dead launch-asap) :binding 384) + (sp-item 383 :flags (start-dead launch-asap) :binding 384) + (sp-item 383 :flags (start-dead launch-asap) :binding 384) + (sp-item 383 :flags (start-dead launch-asap) :binding 384) + (sp-item 383 :flags (start-dead launch-asap) :binding 384) + (sp-item 383 :flags (start-dead launch-asap) :binding 384) + (sp-item 384 :flags (start-dead launch-asap) :binding 385) + (sp-item 384 :flags (start-dead launch-asap) :binding 385) + (sp-item 384 :flags (start-dead launch-asap) :binding 385) + (sp-item 384 :flags (start-dead launch-asap) :binding 385) + (sp-item 384 :flags (start-dead launch-asap) :binding 385) + (sp-item 384 :flags (start-dead launch-asap) :binding 385) + (sp-item 384 :flags (start-dead launch-asap) :binding 385) + (sp-item 384 :flags (start-dead launch-asap) :binding 385) + (sp-item 385 :fade-after (meters 90) :falloff-to (meters 60) :flags (start-dead)) + (sp-item 385 :fade-after (meters 90) :falloff-to (meters 70) :flags (start-dead)) + (sp-item 385 :fade-after (meters 90) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 385 :fade-after (meters 90) :falloff-to (meters 90) :flags (start-dead)) + (sp-item 385 :fade-after (meters 90) :falloff-to (meters 100) :flags (start-dead)) + (sp-item 385 :fade-after (meters 90) :falloff-to (meters 100) :flags (start-dead)) + (sp-item 385 :fade-after (meters 90) :falloff-to (meters 100) :flags (start-dead)) + (sp-item 385 :fade-after (meters 90) :falloff-to (meters 100) :flags (start-dead)) + (sp-item 387 :fade-after (meters 140) :falloff-to (meters 140)) + (sp-item 388) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-part-vent-yellow-inactive + :id 107 + :bounds (static-bspherem 0 3 0 5) + :parts ((sp-item 387 :fade-after (meters 140) :falloff-to (meters 140)) (sp-item 388)) + ) + +;; failed to figure out what this is: +(defpart 388 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 0.6 0.6 1.0) + (sp-rnd-flt spt-x (meters -0.75) (meters 1.5) 1.0) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-z (meters -0.75) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.9) (meters 1.9) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 92.0 32.0 1.0) + (sp-rnd-flt spt-g 32.0 92.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 32.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.1) 1 36.40889) + (sp-flt spt-fade-a -0.10666667) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + ) + ) + +;; failed to figure out what this is: +(defpart 387 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-rnd-flt spt-num 0.1 0.3 1.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1) 1.0) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-z (meters -0.5) (meters 1) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 0.4) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 64.0) + (sp-rnd-flt spt-vel-y (meters 0.01) (meters 0.01) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.1) (degrees 0.1) 1.0) + (sp-flt spt-fade-a -0.21333334) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + ) + ) + +;; failed to figure out what this is: +(defpart 386 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 1.5) 1.0) + (sp-flt spt-scale-x (meters 0.01)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-a 1.0) + (sp-rnd-flt spt-vel-y (meters 0.013333334) (meters 0.013333334) 1.0) + (sp-int spt-timer 375) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 5.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 383 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 16) 1.0) + (sp-flt spt-y (meters 0)) + (sp-rnd-flt spt-z (meters 0.2) (meters 0.2) 1.0) + (sp-flt spt-scale-x (meters 1)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-flt spt-vel-x (meters 0.10666667)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667) + (sp-flt spt-fade-a -0.34133333) + (sp-int spt-timer 375) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + ) + ) + +;; failed to figure out what this is: +(defpart 384 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-flt spt-z (meters 0.2)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-flt spt-vel-x (meters 0.11259259)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667) + (sp-flt spt-fade-a -0.34133333) + (sp-int spt-timer 375) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + ) + ) + +;; failed to figure out what this is: +(defpart 385 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-rnd-flt spt-num 0.5 2.0 1.0) + (sp-flt spt-y (meters -0.05)) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.1) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 100.0 28.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0023333333) (meters 0.0016666667) 1.0) + (sp-flt spt-scalevel-x (meters -0.0016666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.4) + (sp-flt spt-fade-a -0.024242423) + (sp-rnd-flt spt-accel-y -0.40960002 -1.2288 1.0) + (sp-flt spt-friction 0.93) + (sp-int-plain-rnd spt-timer 30 209 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 90) + (sp-launcher-by-id spt-next-launcher 389) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 0.05)) + ) + ) + +;; failed to figure out what this is: +(defpart 389 + :init-specs ((sp-flt spt-fade-r 0.0)) + ) + +;; failed to figure out what this is: +(defpartgroup group-eco-yellow + :id 108 + :bounds (static-bspherem 0 0 0 1) + :parts ((sp-item 394 :flags (launch-asap) :binding 390) + (sp-item 390 :flags (start-dead launch-asap) :binding 391) + (sp-item 390 :flags (start-dead launch-asap) :binding 391) + (sp-item 390 :flags (start-dead launch-asap) :binding 391) + (sp-item 390 :flags (start-dead launch-asap) :binding 391) + (sp-item 390 :flags (start-dead launch-asap) :binding 391) + (sp-item 390 :flags (start-dead launch-asap) :binding 391) + (sp-item 391 :flags (start-dead launch-asap) :binding 392) + (sp-item 391 :flags (start-dead launch-asap) :binding 392) + (sp-item 391 :flags (start-dead launch-asap) :binding 392) + (sp-item 391 :flags (start-dead launch-asap) :binding 392) + (sp-item 392 :fade-after (meters 100) :flags (start-dead launch-asap) :binding 393) + (sp-item 392 :fade-after (meters 100) :flags (start-dead launch-asap) :binding 393) + (sp-item 392 :fade-after (meters 100) :flags (start-dead launch-asap) :binding 393) + (sp-item 392 :fade-after (meters 100) :flags (start-dead launch-asap) :binding 393) + (sp-item 393 :fade-after (meters 90) :falloff-to (meters 110) :flags (start-dead)) + (sp-item 393 :fade-after (meters 90) :falloff-to (meters 110) :flags (start-dead)) + (sp-item 393 :fade-after (meters 90) :falloff-to (meters 110) :flags (start-dead)) + (sp-item 393 :fade-after (meters 90) :falloff-to (meters 110) :flags (start-dead)) + ) + ) + +;; failed to figure out what this is: +(defpart 394 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 4)) + (sp-flt spt-scale-x (meters 0.01)) + (sp-copy-from-other spt-scale-y -4) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root-prim) + ) + ) + +;; failed to figure out what this is: +(defpart 390 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 5.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-z (meters 0.15) (meters 0.2) 1.0) + (sp-rnd-flt spt-scale-x (meters 2) (meters 2) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 192.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 16.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.0148148155) (meters 0.0044444446) 1.0) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.1) 1 36.40889) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + (sp-func spt-func 'eco-fadeout) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 395) + ) + ) + +;; failed to figure out what this is: +(defpart 395 + :init-specs ((sp-flt spt-fade-a -0.10666667) (sp-int spt-timer 150)) + ) + +;; failed to figure out what this is: +(defpart 391 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-z (meters 0.75) (meters 0.1) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-a 32.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.017777778) (meters 0.0148148155) 1.0) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0)) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + (sp-func spt-func 'eco-fadeout) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 396) + ) + ) + +;; failed to figure out what this is: +(defpart 396 + :init-specs ((sp-flt spt-fade-a -0.16) (sp-int spt-timer 150)) + ) + +;; failed to figure out what this is: +(defpart 392 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-z (meters 0.12) (meters 0.03) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-a 32.0) + (sp-flt spt-vel-x (meters 0.11259259)) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + (sp-func spt-func 'eco-fadeout) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 396) + ) + ) + +;; failed to figure out what this is: +(defpart 393 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-rnd-flt spt-num 0.1 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.1) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 100.0 28.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters -0.0006190476)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.4) + (sp-flt spt-fade-a -0.01904762) + (sp-rnd-flt spt-accel-y -0.40960002 -0.6144 1.0) + (sp-int-plain-rnd spt-timer 30 299 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 240) + (sp-launcher-by-id spt-next-launcher 397) + ) + ) + +;; failed to figure out what this is: +(defpart 397 + :init-specs ((sp-flt spt-fade-g 0.0)) + ) + +;; failed to figure out what this is: +(defpartgroup group-eco-yellow-collect + :id 109 + :duration (seconds 0.5) + :linger-duration (seconds 2) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 400 :flags (launch-asap) :binding 398) + (sp-item 398 :flags (start-dead launch-asap) :binding 399) + (sp-item 398 :flags (start-dead launch-asap) :binding 399) + (sp-item 398 :flags (start-dead launch-asap) :binding 399) + (sp-item 398 :flags (start-dead launch-asap) :binding 399) + (sp-item 398 :flags (start-dead launch-asap) :binding 399) + (sp-item 399 :fade-after (meters 40) :flags (start-dead)) + (sp-item 399 :fade-after (meters 40) :flags (start-dead)) + (sp-item 399 :fade-after (meters 40) :flags (start-dead)) + (sp-item 399 :fade-after (meters 40) :flags (start-dead)) + (sp-item 399 :fade-after (meters 40) :flags (start-dead)) + ) + ) + +;; failed to figure out what this is: +(defpart 400 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 4)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 192.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 64.0) + (sp-flt spt-fade-a -3.2) + (sp-int spt-timer 150) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'part-tracker-track-root) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 277) + ) + ) + +;; failed to figure out what this is: +(defpart 398 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 5.0) + (sp-rnd-flt spt-y (meters -4) (meters 16) 1.0) + (sp-flt spt-z (meters 0.08)) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 127.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters -0.017777778) (meters 0.00048828125) 145.63556) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0.08)) + (sp-flt spt-accel-z -21.845333) + (sp-int spt-timer 150) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + ) + ) + +;; failed to figure out what this is: +(defpart 399 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.1) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 100.0 28.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters -0.0006190476)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.4) + (sp-flt spt-fade-a -0.01904762) + (sp-rnd-flt spt-accel-y -0.40960002 -0.6144 1.0) + (sp-int-plain-rnd spt-timer 30 299 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 240) + (sp-launcher-by-id spt-next-launcher 397) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-part-vent-green-active + :id 110 + :bounds (static-bspherem 0 5 0 5) + :parts ((sp-item 403 :fade-after (meters 80) :falloff-to (meters 80) :period 48 :length 5 :binding 401) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 401 :fade-after (meters 80) :flags (start-dead launch-asap) :binding 402) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 402 :fade-after (meters 80) :falloff-to (meters 80) :flags (start-dead)) + (sp-item 404 :fade-after (meters 100)) + (sp-item 405) + ) + ) + +;; failed to figure out what this is: +(defpart 405 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 0.6 0.6 1.0) + (sp-rnd-flt spt-x (meters -0.75) (meters 1.5) 1.0) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-z (meters -0.75) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.9) (meters 1.9) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 64.0 1.0) + (sp-rnd-flt spt-g 92.0 32.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 32.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.1) 1 36.40889) + (sp-flt spt-fade-a -0.10666667) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + ) + ) + +;; failed to figure out what this is: +(defpart 404 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-rnd-flt spt-num 0.1 0.3 1.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1) 1.0) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-z (meters -0.5) (meters 1) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 0.4) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 64.0) + (sp-rnd-flt spt-vel-y (meters 0.01) (meters 0.01) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.1) (degrees 0.1) 1.0) + (sp-flt spt-fade-a -0.21333334) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + ) + ) + +;; failed to figure out what this is: +(defpart 403 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters -1) (meters 2) 1.0) + (sp-flt spt-scale-x (meters 0.01)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.0033333334) 1.0) + (sp-int spt-timer 750) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 401 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 0) (meters 16) 1.0) + (sp-rnd-flt spt-z (meters 0.2) (meters 0.6) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.3) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 127.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.053333335) (meters 0.053333335) 1.0) + (sp-flt spt-vel-y (meters 0)) + (sp-flt spt-vel-z (meters 0)) + (sp-flt spt-fade-r -0.2) + (sp-int-plain-rnd spt-timer 600 149 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 ready-to-launch sp-cpuinfo-flag-14) + (sp-int-plain-rnd spt-next-time 450 149 1) + (sp-launcher-by-id spt-next-launcher 406) + ) + ) + +;; failed to figure out what this is: +(defpart 406 + :init-specs ((sp-flt spt-fade-r 0.0) (sp-flt spt-fade-a -0.8466667) (sp-int spt-timer 150)) + ) + +;; failed to figure out what this is: +(defpart 402 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.2)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 96.0) + (sp-flt spt-scalevel-x (meters -0.0006060606)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -2.8333333) + (sp-flt spt-accel-y -0.81920004) + (sp-int-plain-rnd spt-timer 30 299 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-int spt-next-time 90) + (sp-launcher-by-id spt-next-launcher 286) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-fuel-cell-starburst + :id 111 + :bounds (static-bspherem 0 0.5 0 1.5) + :parts ((sp-item 407 :fade-after (meters 35)) + (sp-item 408 :fade-after (meters 20)) + (sp-item 409 :flags (bit1 launch-asap)) + (sp-item 410 :flags (bit1 launch-asap)) + ) + ) + +;; failed to figure out what this is: +(defpart 407 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.1) (meters 0.8) 1.0) + (sp-rnd-int spt-r 0 1 255.0) + (sp-rnd-int spt-g 0 1 255.0) + (sp-rnd-int spt-b 0 1 255.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-scalevel-y (meters 0.009765625)) + (sp-flt spt-fade-a 0.35555556) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root-prim) + (sp-int spt-next-time 90) + (sp-launcher-by-id spt-next-launcher 411) + ) + ) + +;; failed to figure out what this is: +(defpart 411 + :init-specs ((sp-flt spt-fade-a -0.53333336)) + ) + +;; failed to figure out what this is: +(defpart 408 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 0.06) + (sp-rnd-flt spt-scale-x (meters 2) (meters 0.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 0.2)) + (sp-rnd-int spt-r 0 1 255.0) + (sp-rnd-int spt-g 0 1 255.0) + (sp-rnd-int spt-b 0 1 255.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-fade-a 0.32) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root-prim) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 411) + ) + ) + +;; failed to figure out what this is: +(defpart 409 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 3.5)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 3)) + (sp-flt spt-r 192.0) + (sp-flt spt-g 192.0) + (sp-rnd-flt spt-b 0.0 128.0 1.0) + (sp-flt spt-a 64.0) + (sp-flt spt-rotvel-z (degrees -0.4)) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root-prim) + ) + ) + +;; failed to figure out what this is: +(defpart 410 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 4)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 3.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 64.0) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root-prim) + ) + ) + +;; definition for function sparticle-track-root-money +;; ERROR: function has no type analysis. Cannot decompile. + +;; failed to figure out what this is: +(defpart 412 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.1) (meters 0.8) 1.0) + (sp-flt spt-r 192.0) + (sp-flt spt-g 192.0) + (sp-rnd-flt spt-b 0.0 128.0 1.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-scalevel-y (meters 0.009765625)) + (sp-flt spt-fade-a 0.35555556) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 90) + (sp-launcher-by-id spt-next-launcher 413) + ) + ) + +;; failed to figure out what this is: +(defpart 413 + :init-specs ((sp-flt spt-fade-a -0.53333336)) + ) + +;; failed to figure out what this is: +(defpart 414 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 0.06) + (sp-rnd-flt spt-scale-x (meters 2) (meters 0.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 0.2)) + (sp-flt spt-r 192.0) + (sp-flt spt-g 192.0) + (sp-rnd-flt spt-b 0.0 128.0 1.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-fade-a 0.32) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 413) + ) + ) + +;; failed to figure out what this is: +(defpart 415 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 2.5)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 2)) + (sp-flt spt-r 192.0) + (sp-flt spt-g 192.0) + (sp-rnd-flt spt-b 0.0 128.0 1.0) + (sp-flt spt-a 32.0) + (sp-flt spt-rotvel-z (degrees -0.4)) + (sp-int spt-timer 3600) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-track-root-money) + ) + ) + +;; failed to figure out what this is: +(defpart 416 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 3)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 2.5)) + (sp-flt spt-r 192.0) + (sp-flt spt-g 192.0) + (sp-rnd-flt spt-b 0.0 128.0 1.0) + (sp-flt spt-a 32.0) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-int spt-timer 3600) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-track-root-money) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-money-starburst :id 112 :bounds (static-bspherem 0 0.5 0 1.5) :parts ((sp-item 417))) + +;; failed to figure out what this is: +(defpartgroup group-buzzer-effect + :id 113 + :bounds (static-bspherem 0 0 0 1) + :parts ((sp-item 418 :flags (is-3d)) (sp-item 419 :flags (is-3d))) + ) + +;; failed to figure out what this is: +(defpart 418 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-flt spt-num 2.0) + (sp-rnd-flt spt-scale-x (meters 1.3) (meters 0.2) 1.0) + (sp-rnd-flt spt-rot-x 0.0 12743.111 1.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 32.0) + (sp-flt spt-fade-a -1.0) + (sp-int spt-timer 10) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-12 sp-cpuinfo-flag-14) + (sp-rnd-flt spt-launchrot-x (degrees -180.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-launchrot-y (degrees -180.0) (degrees 360.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 419 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9b :page #xb)) + (sp-flt spt-num 2.0) + (sp-rnd-flt spt-scale-x (meters 1.3) (meters 0.2) 1.0) + (sp-rnd-flt spt-rot-x 20024.889 12743.111 1.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 32.0) + (sp-flt spt-fade-a -1.0) + (sp-int spt-timer 10) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-12 sp-cpuinfo-flag-14) + (sp-rnd-flt spt-launchrot-x (degrees -180.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-launchrot-y (degrees -180.0) (degrees 360.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-blue-collect + :id 114 + :duration (seconds 0.017) + :linger-duration (seconds 4) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 12) + :parts ((sp-item 420) (sp-item 421) (sp-item 422)) + ) + +;; failed to figure out what this is: +(defpart 420 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-scale-x (meters 6) (meters 1) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.5) (meters 1) 1.0) + (sp-rnd-flt spt-r 32.0 32.0 1.0) + (sp-rnd-flt spt-g 60.0 20.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-flt spt-scalevel-y (meters 0.009765625)) + (sp-flt spt-fade-a 2.1333334) + (sp-int spt-timer 450) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root) + (sp-int-plain-rnd spt-next-time 5 19 1) + (sp-launcher-by-id spt-next-launcher 307) + ) + ) + +;; failed to figure out what this is: +(defpart 421 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 6.0) + (sp-rnd-flt spt-scale-x (meters 8) (meters 2) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 0.5)) + (sp-rnd-flt spt-r 32.0 32.0 1.0) + (sp-rnd-flt spt-g 60.0 20.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-flt spt-fade-a 2.1333334) + (sp-int spt-timer 450) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root) + (sp-int-plain-rnd spt-next-time 5 19 1) + (sp-launcher-by-id spt-next-launcher 307) + ) + ) + +;; failed to figure out what this is: +(defpart 422 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 6)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 32.0 32.0 1.0) + (sp-rnd-flt spt-g 60.0 20.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-flt spt-scalevel-x (meters 0.1)) + (sp-flt spt-rotvel-z (degrees -0.8)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.42666668) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root) + (sp-int spt-next-time 60) + (sp-launcher-by-id spt-next-launcher 310) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-yellow-collect + :id 115 + :duration (seconds 0.017) + :linger-duration (seconds 4) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 423) (sp-item 424) (sp-item 425)) + ) + +;; failed to figure out what this is: +(defpart 423 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-scale-x (meters 6) (meters 1) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.5) (meters 1) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 192.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-flt spt-scalevel-y (meters 0.009765625)) + (sp-flt spt-fade-a 2.1333334) + (sp-int spt-timer 450) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root) + (sp-int-plain-rnd spt-next-time 5 19 1) + (sp-launcher-by-id spt-next-launcher 307) + ) + ) + +;; failed to figure out what this is: +(defpart 424 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 6.0) + (sp-rnd-flt spt-scale-x (meters 8) (meters 2) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 0.5)) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 192.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-flt spt-fade-a 2.1333334) + (sp-int spt-timer 450) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root) + (sp-int-plain-rnd spt-next-time 5 19 1) + (sp-launcher-by-id spt-next-launcher 307) + ) + ) + +;; failed to figure out what this is: +(defpart 425 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 6)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 192.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-flt spt-scalevel-x (meters 0.1)) + (sp-flt spt-rotvel-z (degrees -0.8)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.42666668) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root) + (sp-int spt-next-time 60) + (sp-launcher-by-id spt-next-launcher 310) + ) + ) + +;; failed to figure out what this is: +(defpart 310 + :init-specs ((sp-flt spt-scalevel-x (meters -0.025)) (sp-copy-from-other spt-scalevel-y -4)) + ) + +;; failed to figure out what this is: +(defpartgroup group-red-collect + :id 116 + :duration (seconds 0.017) + :linger-duration (seconds 4) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 12) + :parts ((sp-item 426) (sp-item 427) (sp-item 428)) + ) + +;; failed to figure out what this is: +(defpart 426 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-scale-x (meters 6) (meters 1) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.5) (meters 1) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-flt spt-scalevel-y (meters 0.009765625)) + (sp-flt spt-fade-a 2.1333334) + (sp-int spt-timer 450) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root) + (sp-int-plain-rnd spt-next-time 5 19 1) + (sp-launcher-by-id spt-next-launcher 307) + ) + ) + +;; failed to figure out what this is: +(defpart 427 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 6.0) + (sp-rnd-flt spt-scale-x (meters 8) (meters 2) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 0.5)) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-flt spt-fade-a 2.1333334) + (sp-int spt-timer 450) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root) + (sp-int-plain-rnd spt-next-time 5 19 1) + (sp-launcher-by-id spt-next-launcher 307) + ) + ) + +;; failed to figure out what this is: +(defpart 428 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 6)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-flt spt-scalevel-x (meters 0.1)) + (sp-flt spt-rotvel-z (degrees -0.8)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.42666668) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root) + (sp-int spt-next-time 60) + (sp-launcher-by-id spt-next-launcher 310) + ) + ) + +) + + + diff --git a/test/decompiler/reference/jak2/engine/target/board/board-part_REF.gc b/test/decompiler/reference/jak2/engine/target/board/board-part_REF.gc new file mode 100644 index 0000000000..627dcdd930 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/target/board/board-part_REF.gc @@ -0,0 +1,230 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(defpartgroup group-board-land-straight + :id 119 + :duration (seconds 0.035) + :linger-duration (seconds 1.5) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 209)) + ) + +;; failed to figure out what this is: +(defpartgroup group-board-quick-jump + :id 120 + :duration (seconds 0.035) + :linger-duration (seconds 1.5) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 209)) + ) + +;; failed to figure out what this is: +(defpart 431 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 2.5)) + (sp-int spt-rot-x 4) + (sp-flt spt-scale-y (meters 0.05)) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-flt spt-omega 8.192) + (sp-rnd-flt spt-vel-y (meters 0.033333335) (meters 0.033333335) 1.0) + (sp-rnd-flt spt-fade-g -0.85 -1.7 1.0) + (sp-flt spt-fade-b -8.0) + (sp-rnd-flt spt-fade-a -0.16 -0.16 1.0) + (sp-rnd-flt spt-accel-y -6.826667 -2.7306666 1.0) + (sp-flt spt-friction 0.95) + (sp-int-plain-rnd spt-timer 50 149 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-rnd-flt spt-conerot-x (degrees 45.0) (degrees 90.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-target-board + :id 118 + :bounds (static-bspherem 0 0 0 15) + :parts ((sp-item 432) (sp-item 433 :flags (is-3d)) (sp-item 434)) + ) + +;; failed to figure out what this is: +(defpart 432 + :init-specs ((sp-flt spt-num 3.0) + (sp-flt spt-y (meters 0.25)) + (sp-int spt-rot-x 7) + (sp-flt spt-r 2048.0) + (sp-flt spt-g 1638.4) + (sp-flt spt-b 1843.2) + (sp-flt spt-fade-b -0.08533333) + (sp-int spt-timer 40) + (sp-cpuinfo-flags distort) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0) (meters 0.5) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 433 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-target-orient) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.25)) + (sp-rnd-flt spt-scale-x (meters 4) (meters 2) 1.0) + (sp-flt spt-rot-x 0.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 128.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 8.0 8.0 1.0) + (sp-rnd-flt spt-scalevel-x (meters -0.02) (meters -0.006666667) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.1) + (sp-int spt-timer 160) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + ) + ) + +;; failed to figure out what this is: +(defpart 434 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 2.5)) + (sp-int spt-rot-x 4) + (sp-flt spt-scale-y (meters 0.05)) + (sp-rnd-flt spt-r 128.0 64.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-flt spt-omega 10.24) + (sp-rnd-flt spt-vel-y (meters 0.033333335) (meters 0.033333335) 1.0) + (sp-flt spt-fade-r -3.0) + (sp-flt spt-fade-g -3.0) + (sp-rnd-flt spt-fade-a -0.21333334 -0.21333334 1.0) + (sp-rnd-flt spt-accel-y -1.3653333 -1.3653333 1.0) + (sp-flt spt-friction 0.95) + (sp-int-plain-rnd spt-timer 50 149 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-12) + (sp-func spt-func 'sparticle-motion-blur) + (sp-rnd-flt spt-conerot-x (degrees 80.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0) (meters 0.5) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 435 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 0.0) + (sp-flt spt-y (meters 0)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 32.0) + (sp-rnd-flt spt-a 8.0 56.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.13333334) (meters 0.16666667) 1.0) + (sp-flt spt-scalevel-x (meters 0.013333334)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -1.4222223) + (sp-flt spt-fade-a -0.35555556) + (sp-flt spt-accel-y 0.34133333) + (sp-flt spt-friction 0.7) + (sp-int spt-timer 180) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-board-spin-attack + :id 117 + :duration (seconds 50) + :flags (use-local-clock unk-6) + :bounds (static-bspherem 0 0 0 2) + :rotate ((degrees 4) (degrees 8) (degrees 4)) + :parts ((sp-item 436 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 437 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 438 :flags (launch-asap bit6)) + ) + ) + +;; failed to figure out what this is: +(defpart 438 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 3) (meters 0.5) 1.0) + (sp-flt spt-rot-x 2048.0) + (sp-rnd-flt spt-scale-y (meters 4) (meters 0.5) 1.0) + (sp-flt spt-r 0.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 64.0) + (sp-flt spt-fade-a -0.4) + (sp-int spt-timer 80) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 12288.0) + (sp-func spt-func 'sparticle-track-root) + ) + ) + +;; failed to figure out what this is: +(defpart 437 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 0)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 12)) + (sp-flt spt-rot-x 0.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 9)) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 128.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 128.0) + (sp-flt spt-scalevel-x (meters -0.086666666)) + (sp-flt spt-scalevel-y (meters -0.09)) + (sp-int spt-timer 50) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 436 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2c :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 0)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 1.4)) + (sp-flt spt-rot-x 0.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 0.9)) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 128.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 255.0) + (sp-flt spt-scalevel-x (meters 0.3)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -3.1875) + (sp-int spt-timer 20) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-track-root) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) diff --git a/test/decompiler/test_DataParser.cpp b/test/decompiler/test_DataParser.cpp index 0a9d10073b..cd73380de0 100644 --- a/test/decompiler/test_DataParser.cpp +++ b/test/decompiler/test_DataParser.cpp @@ -127,7 +127,7 @@ TEST_F(DataDecompTest, String) { " .word 0x0\n"; auto parsed = parse_data(input); auto decomp = decompile_at_label_guess_type(parsed.label("L62"), parsed.labels, {parsed.words}, - dts->ts, nullptr); + dts->ts, nullptr, GameVersion::Jak1); EXPECT_EQ(decomp.print(), "\"finalboss-fight\""); } @@ -148,8 +148,9 @@ TEST_F(DataDecompTest, SimpleStructure) { " .word 0x79637473\n" " .word 0x6c63\n"; auto parsed = parse_data(input); - auto decomp = decompile_at_label(TypeSpec("vif-disasm-element"), parsed.label("L217"), - parsed.labels, {parsed.words}, dts->ts, nullptr); + auto decomp = + decompile_at_label(TypeSpec("vif-disasm-element"), parsed.label("L217"), parsed.labels, + {parsed.words}, dts->ts, nullptr, GameVersion::Jak1); check_forms_equal(decomp.print(), "(new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 stcycl) :print " "#x2 :string1 \"stcycl\")"); @@ -210,7 +211,7 @@ TEST_F(DataDecompTest, VifDisasmArray) { " .word 0x0"; auto parsed = parse_data(input); auto decomp = decompile_at_label_guess_type(parsed.label("L148"), parsed.labels, {parsed.words}, - dts->ts, nullptr); + dts->ts, nullptr, GameVersion::Jak1); check_forms_equal(decomp.print(), "(new 'static 'boxed-array :type vif-disasm-element\n" " (new 'static 'vif-disasm-element :mask #x7f :string1 \"nop\")\n" @@ -286,7 +287,7 @@ TEST_F(DataDecompTest, ContinuePoint) { " .word 0x747261"; auto parsed = parse_data(input); auto decomp = decompile_at_label_guess_type(parsed.label("L63"), parsed.labels, {parsed.words}, - dts->ts, nullptr); + dts->ts, nullptr, GameVersion::Jak1); check_forms_equal(decomp.print(), "(new 'static 'continue-point\n" " :name \"finalboss-start\"\n" @@ -344,7 +345,7 @@ TEST_F(DataDecompTest, FloatArray) { info.array_size = 7; info.is_value = false; auto decomp = decompile_at_label_with_hint(info, parsed.label("L63"), parsed.labels, - {parsed.words}, *dts, nullptr); + {parsed.words}, *dts, nullptr, GameVersion::Jak1); check_forms_equal(decomp.print(), "(new 'static 'array float 7\n" "1.0 0.0 1.0 0.0 1.0 0.0 1.0)"); @@ -382,7 +383,7 @@ TEST_F(DataDecompTest, KernelContext) { " .symbol #t\n"; auto parsed = parse_data(input); auto decomp = decompile_at_label_guess_type(parsed.label("L345"), parsed.labels, {parsed.words}, - dts->ts, nullptr); + dts->ts, nullptr, GameVersion::Jak1); check_forms_equal(decomp.print(), "(new 'static 'kernel-context\n" " :prevent-from-run (process-mask execute sleep)\n"