decompiler: better automatic detection of art groups and joint-node-index macro detection (#3061)

This commit is contained in:
Hat Kid
2023-10-06 16:42:16 +02:00
committed by GitHub
parent 2d480a6df6
commit 3c27b3942b
353 changed files with 26060 additions and 3814 deletions
+22 -4
View File
@@ -548,14 +548,32 @@ void ObjectFileDB::ir2_type_analysis_pass(int seg, const Config& config, ObjectF
func.ir2.env.set_stack_structure_hints(
try_lookup(config.stack_structure_hints_by_function, func_name));
if (config.art_groups_by_function.find(func_name) != config.art_groups_by_function.end()) {
func.ir2.env.set_art_group(config.art_groups_by_function.at(func_name));
} else if (config.art_groups_by_file.find(obj_name) != config.art_groups_by_file.end()) {
func.ir2.env.set_art_group(config.art_groups_by_file.at(obj_name));
if (func.guessed_name.kind == FunctionName::FunctionKind::V_STATE) {
if (config.art_group_type_remap.find(func.guessed_name.type_name) !=
config.art_group_type_remap.end()) {
func.ir2.env.set_art_group(config.art_group_type_remap.at(func.guessed_name.type_name));
} else {
func.ir2.env.set_art_group(func.guessed_name.type_name + "-ag");
}
} else if (func.guessed_name.kind == FunctionName::FunctionKind::NV_STATE ||
func.type.try_get_tag("behavior").has_value()) {
std::string type = func.type.get_tag("behavior");
if (config.art_group_type_remap.find(type) != config.art_group_type_remap.end()) {
func.ir2.env.set_art_group(config.art_group_type_remap.at(type));
} else {
func.ir2.env.set_art_group(type + "-ag");
}
} else {
func.ir2.env.set_art_group(obj_name + "-ag");
}
func.ir2.env.set_jg(func.ir2.env.art_group());
if (config.joint_node_hacks.find(func.ir2.env.art_group()) !=
config.joint_node_hacks.end()) {
func.ir2.env.set_jg(config.joint_node_hacks.at(func.ir2.env.art_group()));
}
constexpr bool kForceNewTypes = false;
if (config.game_version == GameVersion::Jak2 || kForceNewTypes) {
// use new types for jak 2 always