decomp: support part-tracker-spawn in jak2, part group constants (#4082)

This commit is contained in:
Hat Kid
2025-11-20 16:22:29 +01:00
committed by GitHub
parent c9d1460819
commit 0385c76811
786 changed files with 9899 additions and 13868 deletions
+28
View File
@@ -1125,6 +1125,34 @@ void ObjectFileDB::dump_art_info(const fs::path& output_dir) {
lg::info("Written art group info: in {:.2f} ms", timer.getMs());
}
void ObjectFileDB::dump_part_group_table(
const fs::path& output_dir,
const std::unordered_map<u32, std::string>& part_group_table) {
lg::info("Writing part group table...");
Timer timer;
if (!part_group_table.empty()) {
file_util::create_dir_if_needed(output_dir / "import");
}
auto ptable_fpath = output_dir / "import" / "part-groups.gc";
std::string result;
for (const auto& [id, name] : part_group_table) {
result += fmt::format("(defconstant {} (-> *part-group-id-table* {}))", name, id);
result += "\n";
}
file_util::write_text_file(ptable_fpath, result);
auto ptable_dump_fpath = output_dir / "dump" / "part-groups.min.json";
nlohmann::json json = part_group_table;
file_util::create_dir_if_needed_for_file(ptable_dump_fpath);
file_util::write_text_file(ptable_dump_fpath, json.dump(-1));
lg::info("Written part group table in {:.2f} ms", timer.getMs());
}
void ObjectFileDB::dump_raw_objects(const fs::path& output_dir) {
for_each_obj([&](ObjectFileData& data) {
auto dest = output_dir / data.to_unique_name();
+4 -2
View File
@@ -190,6 +190,8 @@ class ObjectFileDB {
void extract_art_info();
void dump_art_info(const fs::path& output_dir);
void dump_raw_objects(const fs::path& output_dir);
void dump_part_group_table(const fs::path& output_dir,
const std::unordered_map<u32, std::string>& part_group_table);
void write_object_file_words(const fs::path& output_dir, bool dump_data, bool dump_code);
void write_disassembly(const fs::path& output_dir,
bool disassemble_data,
@@ -199,12 +201,12 @@ class ObjectFileDB {
void process_object_file_data(
ObjectFileData& data,
const fs::path& output_dir,
const Config& config,
Config& config,
const std::unordered_set<std::string>& skip_functions,
const std::unordered_map<std::string, std::unordered_set<std::string>>& skip_states);
void analyze_functions_ir2(
const fs::path& output_dir,
const Config& config,
Config& config,
const std::optional<std::function<void(std::string)>> prefile_callback,
const std::optional<std::function<void()>> postfile_callback,
const std::unordered_set<std::string>& skip_functions,
+4 -3
View File
@@ -38,7 +38,7 @@ namespace decompiler {
void ObjectFileDB::process_object_file_data(
ObjectFileData& data,
const fs::path& output_dir,
const Config& config,
Config& config,
const std::unordered_set<std::string>& skip_functions,
const std::unordered_map<std::string, std::unordered_set<std::string>>& skip_states) {
Timer file_timer;
@@ -50,7 +50,8 @@ void ObjectFileDB::process_object_file_data(
if (data.linked_data.functions_by_seg.size() == 3) {
enum { DEFPART, DEFSTATE, DEFSKELGROUP } step = DEFPART;
try {
run_defpartgroup(data.linked_data.functions_by_seg.at(TOP_LEVEL_SEGMENT).front());
run_defpartgroup(data.linked_data.functions_by_seg.at(TOP_LEVEL_SEGMENT).front(),
config.part_group_table);
step = DEFSTATE;
run_defstate(data.linked_data.functions_by_seg.at(TOP_LEVEL_SEGMENT).front(), skip_states);
step = DEFSKELGROUP;
@@ -126,7 +127,7 @@ void ObjectFileDB::process_object_file_data(
*/
void ObjectFileDB::analyze_functions_ir2(
const fs::path& output_dir,
const Config& config,
Config& config,
const std::optional<std::function<void(std::string)>> prefile_callback,
const std::optional<std::function<void()>> postfile_callback,
const std::unordered_set<std::string>& skip_functions,