mirror of
https://github.com/open-goal/jak-project
synced 2026-05-23 15:02:01 -04:00
decompiler: better automatic detection of art groups and joint-node-index macro detection (#3061)
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user