Sorted techset match-ups, slightly more sane techset matching, still not perfect though! (mp_convoy won't work unless the createart.gsc is smashed)

This commit is contained in:
rackover 2021-04-21 23:41:06 +02:00
parent 3e9b05d8ce
commit ee5f6a70c0

View File

@ -30,19 +30,22 @@ namespace Assets
}; };
std::map<std::string, std::string> techSetCorrespondance = { std::map<std::string, std::string> techSetCorrespondance = {
{"effect_zfeather_outdoor", "effect_zfeather_blend"}, {"effect", "effect_blend"},
{"effect", "effect_blend"}, {"effect", "effect_blend"},
{"effect_nofog", "effect_blend_nofog"}, {"effect_nofog", "effect_blend_nofog"},
{"effect_zfeather", "effect_zfeather_blend"},
{"wc_unlit_add", "wc_unlit_add_lin"}, {"wc_unlit_add", "wc_unlit_add_lin"},
{"wc_unlit_multiply", "wc_unlit_multiply_lin"}, {"wc_unlit_multiply", "wc_unlit_multiply_lin"},
{"wc_unlit_falloff_add", "wc_unlit_falloff_add_lin_ua"}, {"wc_unlit_falloff_add", "wc_unlit_falloff_add_lin_ua"},
{"mc_unlit_replace", "mc_unlit_replace_lin"},
{"mc_unlit_nofog", "mc_unlit_blend_nofog_ua"},
{"wc_unlit", "wc_unlit_add"}, {"wc_unlit", "wc_unlit_add"},
{"wc_unlit_multiply_lin", "wc_unlit_multiply_lin"}, {"wc_unlit_multiply_lin", "wc_unlit_multiply_lin"},
{"wc_unlit_blend", "wc_unlit_blend_lin"}, {"wc_unlit_blend", "wc_unlit_blend_lin"},
{"mc_unlit", "mc_unlit_replace_lin"}, {"wc_unlit_replace", "wc_unlit_replace_lin"},
{"effect_zfeather", "effect_zfeather_blend"}/*,
{"mc_unlit_replace", "mc_unlit_replace_lin"},
{"mc_unlit_nofog", "mc_unlit_blend_nofog_ua"},
{"mc_unlit", "mc_unlit_blend_lin"}/*,
{"", ""}, {"", ""},
{"", ""}, {"", ""},
{"", ""}, {"", ""},
@ -236,26 +239,27 @@ namespace Assets
std::string techName = asset->techniqueSet->name; std::string techName = asset->techniqueSet->name;
if (techSetCorrespondance.find(techName) != techSetCorrespondance.end()) { if (techSetCorrespondance.find(techName) != techSetCorrespondance.end()) {
auto iw4TechSetName = techSetCorrespondance[techName]; auto iw4TechSetName = techSetCorrespondance[techName];
Game::XAssetEntry* entry = Game::DB_FindXAssetEntry(Game::XAssetType::ASSET_TYPE_TECHNIQUE_SET, iw4TechSetName.data()); Game::XAssetEntry* iw4TechSet = Game::DB_FindXAssetEntry(Game::XAssetType::ASSET_TYPE_TECHNIQUE_SET, iw4TechSetName.data());
if (entry) { if (iw4TechSet) {
Game::DB_EnumXAssetEntries(Game::XAssetType::ASSET_TYPE_MATERIAL, [asset](Game::XAssetEntry* entry) Game::DB_EnumXAssetEntries(Game::XAssetType::ASSET_TYPE_MATERIAL, [asset, iw4TechSet](Game::XAssetEntry* entry)
{ {
if (!replacementFound) if (!replacementFound)
{ {
Game::XAssetHeader header = entry->asset.header; Game::XAssetHeader header = entry->asset.header;
if (header.material->techniqueSet == asset->techniqueSet) if (header.material->techniqueSet == iw4TechSet->asset.header.techniqueSet)
{ {
Components::Logger::Print("Material %s with techset %s has been mapped (last chance!) to %s\n", asset->info.name, asset->techniqueSet->name, header.material->techniqueSet->name); Components::Logger::Print("Material %s with techset %s has been mapped to %s (last chance!)\n", asset->info.name, asset->techniqueSet->name, header.material->techniqueSet->name);
asset->info.sortKey = header.material->info.sortKey; asset->info.sortKey = header.material->info.sortKey;
asset->techniqueSet = iw4TechSet->asset.header.techniqueSet;
replacementFound = true; replacementFound = true;
} }
} }
}, false, false); }, false, false);
if (!replacementFound) { if (!replacementFound) {
Components::Logger::Print("Could not find any loaded material with techset %s, so I cannot set the sortkey for material %s\n", asset->techniqueSet->name, asset->info.name); Components::Logger::Print("Could not find any loaded material with techset %s (in replacement of %s), so I cannot set the sortkey for material %s\n", iw4TechSetName.data(), asset->techniqueSet->name, asset->info.name);
} }
} }
else { else {
@ -263,7 +267,7 @@ namespace Assets
} }
} }
else { else {
Components::Logger::Print("Could not match iw3 techset %s with any of the techsets I know! This is a critical error, there's a good chance the map will not be playable.\n", asset->techniqueSet->name); Components::Logger::Print("Could not match iw3 techset %s with any of the techsets I know! This is a critical error, there's a good chance the map will not be playable.\n", techName.c_str());
} }
} }