mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 00:57:44 -04:00
[decomp] make defpart
and defpartgroup
work in jak 2 (#1947)
This commit is contained in:
parent
1d1ea907c9
commit
af5009a29e
|
@ -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<T, Size>& other) const { return !((*this) == other); }
|
||||
bool operator!=(const T other) const { return !((*this) == other); }
|
||||
|
||||
const T length() const { return std::sqrt(squared_length()); }
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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<goos::Object> 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<goos::Object> 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"));
|
||||
|
|
|
@ -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<LinkedWord> 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<PartField> fields;
|
||||
};
|
||||
|
|
|
@ -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<float*>(&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<float*>(&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<float*>(&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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"],
|
||||
|
||||
////////////////////////////
|
||||
|
|
|
@ -26,7 +26,8 @@ goos::Object decompile_at_label_with_hint(const LabelInfo& hint,
|
|||
const std::vector<DecompilerLabel>& labels,
|
||||
const std::vector<std::vector<LinkedWord>>& 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<DecompilerLabel>& labels,
|
||||
const std::vector<std::vector<LinkedWord>>& 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<std::vector<LinkedWord>>& 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<std::vector<LinkedWord>>& 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<LinkedWord>& words,
|
|||
int field_location,
|
||||
const TypeSystem& ts,
|
||||
const std::vector<std::vector<LinkedWord>>& 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<LinkedWord>& words,
|
||||
|
@ -543,9 +548,10 @@ goos::Object ocean_mid_masks_decompile(const std::vector<LinkedWord>& words,
|
|||
int field_location,
|
||||
const TypeSystem& ts,
|
||||
const std::vector<std::vector<LinkedWord>>& 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<LinkedWord>& words,
|
||||
|
@ -554,9 +560,10 @@ goos::Object sp_field_init_spec_decompile(const std::vector<LinkedWord>& words,
|
|||
int field_location,
|
||||
const TypeSystem& ts,
|
||||
const std::vector<std::vector<LinkedWord>>& 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<LinkedWord>& words,
|
||||
|
@ -565,9 +572,10 @@ goos::Object nav_mesh_vertex_arr_decompile(const std::vector<LinkedWord>& words,
|
|||
int field_location,
|
||||
const TypeSystem& ts,
|
||||
const std::vector<std::vector<LinkedWord>>& 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<LinkedWord>& words,
|
||||
|
@ -576,9 +584,10 @@ goos::Object nav_mesh_poly_arr_decompile(const std::vector<LinkedWord>& words,
|
|||
int field_location,
|
||||
const TypeSystem& ts,
|
||||
const std::vector<std::vector<LinkedWord>>& 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<LinkedWord>& words,
|
||||
|
@ -587,9 +596,10 @@ goos::Object nav_mesh_poly_arr_jak2_decompile(const std::vector<LinkedWord>& wor
|
|||
int field_location,
|
||||
const TypeSystem& ts,
|
||||
const std::vector<std::vector<LinkedWord>>& 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<std::vector<LinkedWord>>& 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<LinkedWord>& words,
|
||||
|
@ -610,9 +621,10 @@ goos::Object xz_height_map_data_arr_decompile(const std::vector<LinkedWord>& wor
|
|||
int field_location,
|
||||
const TypeSystem& ts,
|
||||
const std::vector<std::vector<LinkedWord>>& 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<LinkedWord>& words,
|
||||
|
@ -621,9 +633,10 @@ goos::Object nav_mesh_route_arr_decompile(const std::vector<LinkedWord>& words,
|
|||
int field_location,
|
||||
const TypeSystem& ts,
|
||||
const std::vector<std::vector<LinkedWord>>& 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<LinkedWord>& words,
|
||||
|
@ -632,9 +645,10 @@ goos::Object sp_launch_grp_launcher_decompile(const std::vector<LinkedWord>& wor
|
|||
int field_location,
|
||||
const TypeSystem& ts,
|
||||
const std::vector<std::vector<LinkedWord>>& 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<LinkedWord>& words,
|
||||
const std::vector<DecompilerLabel>& labels,
|
||||
|
@ -642,9 +656,10 @@ goos::Object probe_dir_decompile(const std::vector<LinkedWord>& words,
|
|||
int field_location,
|
||||
const TypeSystem& ts,
|
||||
const std::vector<std::vector<LinkedWord>>& 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<DecompilerLabel>& labels,
|
||||
const std::vector<std::vector<LinkedWord>>& 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<std::vector<LinkedWord>>& 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<std::vector<LinkedWord>>& words,
|
||||
const TypeSystem& ts,
|
||||
const LinkedObjectFile* file,
|
||||
const std::optional<TypeSpec>& content_type_override) {
|
||||
const std::optional<TypeSpec>& 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<DecompilerLabel>& labels,
|
||||
const std::vector<std::vector<LinkedWord>>& 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<std::vector<LinkedWord>>& 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 {
|
||||
|
|
|
@ -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<std::vector<LinkedWord>>& 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<DecompilerLabel>& labels,
|
||||
const std::vector<std::vector<LinkedWord>>& words,
|
||||
DecompilerTypeSystem& dts,
|
||||
const LinkedObjectFile* file);
|
||||
const LinkedObjectFile* file,
|
||||
GameVersion version);
|
||||
goos::Object decompile_at_label_guess_type(const DecompilerLabel& label,
|
||||
const std::vector<DecompilerLabel>& labels,
|
||||
const std::vector<std::vector<LinkedWord>>& 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<DecompilerLabel>& labels,
|
||||
const std::vector<std::vector<LinkedWord>>& 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<DecompilerLabel>& labels,
|
||||
const std::vector<std::vector<LinkedWord>>& 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<DecompilerLabel>& labels,
|
||||
const std::vector<std::vector<LinkedWord>>& words,
|
||||
const TypeSystem& ts,
|
||||
const LinkedObjectFile* file,
|
||||
const std::optional<TypeSpec>& content_type_override);
|
||||
const std::optional<TypeSpec>& content_type_override,
|
||||
GameVersion version);
|
||||
goos::Object decompile_value(const TypeSpec& type,
|
||||
const std::vector<u8>& bytes,
|
||||
const TypeSystem& ts);
|
||||
|
|
|
@ -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<GameVersion, const SparticleFieldDecomp*> field_kinds = {
|
||||
{GameVersion::Jak1, field_kind_jak1},
|
||||
{GameVersion::Jak2, field_kind_jak2}};
|
||||
|
||||
std::string make_flags_str(const std::vector<std::string>& flags) {
|
||||
if (flags.empty()) {
|
||||
return "";
|
||||
|
@ -536,8 +692,9 @@ goos::Object decompile_sparticle_field_init(const TypeSpec& type,
|
|||
const std::vector<DecompilerLabel>& labels,
|
||||
const std::vector<std::vector<LinkedWord>>& 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<StructureType*>(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<LinkedWord>&
|
|||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -13,9 +13,11 @@ goos::Object decompile_sparticle_field_init(const TypeSpec& type,
|
|||
const std::vector<DecompilerLabel>& labels,
|
||||
const std::vector<std::vector<LinkedWord>>& 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<DecompilerLabel>& labels,
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -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
|
||||
|
||||
|
|
|
@ -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))
|
||||
)
|
||||
)
|
||||
|
|
36
test/decompiler/reference/jak1/engine/game/collectables-part_REF.gc
generated
vendored
36
test/decompiler/reference/jak1/engine/game/collectables-part_REF.gc
generated
vendored
|
@ -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))
|
||||
|
|
10
test/decompiler/reference/jak1/engine/game/crates_REF.gc
generated
vendored
10
test/decompiler/reference/jak1/engine/game/crates_REF.gc
generated
vendored
|
@ -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))
|
||||
)
|
||||
|
|
4
test/decompiler/reference/jak1/engine/game/powerups_REF.gc
generated
vendored
4
test/decompiler/reference/jak1/engine/game/powerups_REF.gc
generated
vendored
|
@ -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)))
|
||||
)
|
||||
|
|
6
test/decompiler/reference/jak1/engine/game/projectiles_REF.gc
generated
vendored
6
test/decompiler/reference/jak1/engine/game/projectiles_REF.gc
generated
vendored
|
@ -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)
|
||||
|
|
4
test/decompiler/reference/jak1/engine/gfx/water/water_REF.gc
generated
vendored
4
test/decompiler/reference/jak1/engine/gfx/water/water_REF.gc
generated
vendored
|
@ -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)
|
||||
|
|
192
test/decompiler/reference/jak1/engine/target/target-part_REF.gc
generated
vendored
192
test/decompiler/reference/jak1/engine/target/target-part_REF.gc
generated
vendored
|
@ -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))
|
||||
)
|
||||
|
|
2
test/decompiler/reference/jak1/levels/beach/beach-obs_REF.gc
generated
vendored
2
test/decompiler/reference/jak1/levels/beach/beach-obs_REF.gc
generated
vendored
|
@ -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)
|
||||
|
|
4
test/decompiler/reference/jak1/levels/beach/beach-rocks_REF.gc
generated
vendored
4
test/decompiler/reference/jak1/levels/beach/beach-rocks_REF.gc
generated
vendored
|
@ -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)
|
||||
|
|
4
test/decompiler/reference/jak1/levels/citadel/citadel-part_REF.gc
generated
vendored
4
test/decompiler/reference/jak1/levels/citadel/citadel-part_REF.gc
generated
vendored
|
@ -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)
|
||||
|
|
4
test/decompiler/reference/jak1/levels/common/dark-eco-pool_REF.gc
generated
vendored
4
test/decompiler/reference/jak1/levels/common/dark-eco-pool_REF.gc
generated
vendored
|
@ -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)
|
||||
|
|
4
test/decompiler/reference/jak1/levels/common/sharkey_REF.gc
generated
vendored
4
test/decompiler/reference/jak1/levels/common/sharkey_REF.gc
generated
vendored
|
@ -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)
|
||||
|
|
2
test/decompiler/reference/jak1/levels/finalboss/green-eco-lurker_REF.gc
generated
vendored
2
test/decompiler/reference/jak1/levels/finalboss/green-eco-lurker_REF.gc
generated
vendored
|
@ -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)
|
||||
|
|
26
test/decompiler/reference/jak1/levels/finalboss/robotboss-part_REF.gc
generated
vendored
26
test/decompiler/reference/jak1/levels/finalboss/robotboss-part_REF.gc
generated
vendored
|
@ -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))
|
||||
|
|
16
test/decompiler/reference/jak1/levels/finalboss/sage-finalboss-part_REF.gc
generated
vendored
16
test/decompiler/reference/jak1/levels/finalboss/sage-finalboss-part_REF.gc
generated
vendored
|
@ -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))
|
||||
|
|
4
test/decompiler/reference/jak1/levels/firecanyon/firecanyon-obs_REF.gc
generated
vendored
4
test/decompiler/reference/jak1/levels/firecanyon/firecanyon-obs_REF.gc
generated
vendored
|
@ -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)
|
||||
|
|
4
test/decompiler/reference/jak1/levels/flut_common/flut-part_REF.gc
generated
vendored
4
test/decompiler/reference/jak1/levels/flut_common/flut-part_REF.gc
generated
vendored
|
@ -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))
|
||||
)
|
||||
|
|
2
test/decompiler/reference/jak1/levels/jungle/darkvine_REF.gc
generated
vendored
2
test/decompiler/reference/jak1/levels/jungle/darkvine_REF.gc
generated
vendored
|
@ -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))
|
||||
|
|
12
test/decompiler/reference/jak1/levels/jungle/fisher_REF.gc
generated
vendored
12
test/decompiler/reference/jak1/levels/jungle/fisher_REF.gc
generated
vendored
|
@ -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))
|
||||
|
|
2
test/decompiler/reference/jak1/levels/jungleb/jungleb-obs_REF.gc
generated
vendored
2
test/decompiler/reference/jak1/levels/jungleb/jungleb-obs_REF.gc
generated
vendored
|
@ -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))
|
||||
)
|
||||
|
|
2
test/decompiler/reference/jak1/levels/lavatube/lavatube-obs_REF.gc
generated
vendored
2
test/decompiler/reference/jak1/levels/lavatube/lavatube-obs_REF.gc
generated
vendored
|
@ -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))
|
||||
)
|
||||
|
|
6
test/decompiler/reference/jak1/levels/maincave/dark-crystal_REF.gc
generated
vendored
6
test/decompiler/reference/jak1/levels/maincave/dark-crystal_REF.gc
generated
vendored
|
@ -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)
|
||||
|
|
8
test/decompiler/reference/jak1/levels/maincave/mother-spider-egg_REF.gc
generated
vendored
8
test/decompiler/reference/jak1/levels/maincave/mother-spider-egg_REF.gc
generated
vendored
|
@ -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)))
|
||||
|
|
6
test/decompiler/reference/jak1/levels/maincave/mother-spider-proj_REF.gc
generated
vendored
6
test/decompiler/reference/jak1/levels/maincave/mother-spider-proj_REF.gc
generated
vendored
|
@ -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))
|
||||
|
|
6
test/decompiler/reference/jak1/levels/misty/balloonlurker_REF.gc
generated
vendored
6
test/decompiler/reference/jak1/levels/misty/balloonlurker_REF.gc
generated
vendored
|
@ -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)
|
||||
|
|
4
test/decompiler/reference/jak1/levels/misty/misty-conveyor_REF.gc
generated
vendored
4
test/decompiler/reference/jak1/levels/misty/misty-conveyor_REF.gc
generated
vendored
|
@ -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)))
|
||||
|
|
8
test/decompiler/reference/jak1/levels/misty/misty-obs_REF.gc
generated
vendored
8
test/decompiler/reference/jak1/levels/misty/misty-obs_REF.gc
generated
vendored
|
@ -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)
|
||||
|
|
8
test/decompiler/reference/jak1/levels/misty/quicksandlurker_REF.gc
generated
vendored
8
test/decompiler/reference/jak1/levels/misty/quicksandlurker_REF.gc
generated
vendored
|
@ -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)
|
||||
|
|
12
test/decompiler/reference/jak1/levels/misty/sidekick-human_REF.gc
generated
vendored
12
test/decompiler/reference/jak1/levels/misty/sidekick-human_REF.gc
generated
vendored
|
@ -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))
|
||||
|
|
4
test/decompiler/reference/jak1/levels/ogre/ogre-obs_REF.gc
generated
vendored
4
test/decompiler/reference/jak1/levels/ogre/ogre-obs_REF.gc
generated
vendored
|
@ -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)
|
||||
|
|
22
test/decompiler/reference/jak1/levels/ogre/ogre-part_REF.gc
generated
vendored
22
test/decompiler/reference/jak1/levels/ogre/ogre-part_REF.gc
generated
vendored
|
@ -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)
|
||||
|
|
4
test/decompiler/reference/jak1/levels/racer_common/racer-part_REF.gc
generated
vendored
4
test/decompiler/reference/jak1/levels/racer_common/racer-part_REF.gc
generated
vendored
|
@ -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)
|
||||
|
|
2
test/decompiler/reference/jak1/levels/rolling/rolling-lightning-mole_REF.gc
generated
vendored
2
test/decompiler/reference/jak1/levels/rolling/rolling-lightning-mole_REF.gc
generated
vendored
|
@ -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))
|
||||
)
|
||||
|
|
2
test/decompiler/reference/jak1/levels/rolling/rolling-obs_REF.gc
generated
vendored
2
test/decompiler/reference/jak1/levels/rolling/rolling-obs_REF.gc
generated
vendored
|
@ -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))
|
||||
|
|
20
test/decompiler/reference/jak1/levels/rolling/rolling-race-ring_REF.gc
generated
vendored
20
test/decompiler/reference/jak1/levels/rolling/rolling-race-ring_REF.gc
generated
vendored
|
@ -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)))
|
||||
)
|
||||
|
|
4
test/decompiler/reference/jak1/levels/snow/ice-cube_REF.gc
generated
vendored
4
test/decompiler/reference/jak1/levels/snow/ice-cube_REF.gc
generated
vendored
|
@ -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))
|
||||
)
|
||||
|
|
2
test/decompiler/reference/jak1/levels/snow/snow-obs_REF.gc
generated
vendored
2
test/decompiler/reference/jak1/levels/snow/snow-obs_REF.gc
generated
vendored
|
@ -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))
|
||||
)
|
||||
|
|
10
test/decompiler/reference/jak1/levels/snow/snow-ram-boss_REF.gc
generated
vendored
10
test/decompiler/reference/jak1/levels/snow/snow-ram-boss_REF.gc
generated
vendored
|
@ -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))
|
||||
)
|
||||
|
|
2
test/decompiler/reference/jak1/levels/sunken/sun-exit-chamber_REF.gc
generated
vendored
2
test/decompiler/reference/jak1/levels/sunken/sun-exit-chamber_REF.gc
generated
vendored
|
@ -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)))
|
||||
|
|
2
test/decompiler/reference/jak1/levels/swamp/kermit_REF.gc
generated
vendored
2
test/decompiler/reference/jak1/levels/swamp/kermit_REF.gc
generated
vendored
|
@ -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))
|
||||
)
|
||||
|
|
6
test/decompiler/reference/jak1/levels/swamp/swamp-obs_REF.gc
generated
vendored
6
test/decompiler/reference/jak1/levels/swamp/swamp-obs_REF.gc
generated
vendored
|
@ -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)
|
||||
|
|
6
test/decompiler/reference/jak1/levels/swamp/swamp-rat-nest_REF.gc
generated
vendored
6
test/decompiler/reference/jak1/levels/swamp/swamp-rat-nest_REF.gc
generated
vendored
|
@ -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))
|
||||
|
|
6
test/decompiler/reference/jak1/levels/training/training-obs_REF.gc
generated
vendored
6
test/decompiler/reference/jak1/levels/training/training-obs_REF.gc
generated
vendored
|
@ -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))
|
||||
)
|
||||
|
|
6
test/decompiler/reference/jak1/levels/village1/sequence-a-village1_REF.gc
generated
vendored
6
test/decompiler/reference/jak1/levels/village1/sequence-a-village1_REF.gc
generated
vendored
|
@ -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))
|
||||
|
|
4
test/decompiler/reference/jak1/levels/village2/assistant-village2_REF.gc
generated
vendored
4
test/decompiler/reference/jak1/levels/village2/assistant-village2_REF.gc
generated
vendored
|
@ -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))
|
||||
|
|
2
test/decompiler/reference/jak1/levels/village2/swamp-blimp_REF.gc
generated
vendored
2
test/decompiler/reference/jak1/levels/village2/swamp-blimp_REF.gc
generated
vendored
|
@ -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)
|
||||
|
|
4
test/decompiler/reference/jak1/levels/village2/village2-obs_REF.gc
generated
vendored
4
test/decompiler/reference/jak1/levels/village2/village2-obs_REF.gc
generated
vendored
|
@ -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)
|
||||
|
|
4
test/decompiler/reference/jak1/levels/village2/village2-part_REF.gc
generated
vendored
4
test/decompiler/reference/jak1/levels/village2/village2-part_REF.gc
generated
vendored
|
@ -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)
|
||||
|
|
177
test/decompiler/reference/jak2/decompiler-macros.gc
generated
vendored
177
test/decompiler/reference/jak2/decompiler-macros.gc
generated
vendored
|
@ -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))
|
||||
)
|
||||
|
|
2137
test/decompiler/reference/jak2/engine/debug/debug-part_REF.gc
generated
vendored
Normal file
2137
test/decompiler/reference/jak2/engine/debug/debug-part_REF.gc
generated
vendored
Normal file
File diff suppressed because it is too large
Load diff
230
test/decompiler/reference/jak2/engine/target/board/board-part_REF.gc
generated
vendored
Normal file
230
test/decompiler/reference/jak2/engine/target/board/board-part_REF.gc
generated
vendored
Normal file
|
@ -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))
|
||||
)
|
||||
)
|
|
@ -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"
|
||||
|
|
Loading…
Reference in a new issue