diff --git a/DataSpec/DNAMP1/ANCS.cpp b/DataSpec/DNAMP1/ANCS.cpp index 6db96b211..a0d51c72b 100644 --- a/DataSpec/DNAMP1/ANCS.cpp +++ b/DataSpec/DNAMP1/ANCS.cpp @@ -1018,7 +1018,12 @@ bool ANCS::Cook(const hecl::ProjectPath& outPath, const hecl::ProjectPath& inPat for (const DNAANCS::Actor::Subtype& sub : actor.subtypes) { if (sub.name == ch.name) { hecl::SystemStringConv chSysName(ch.name); - ch.cskr = inPath.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.CSKR")), chSysName, sub.cskrId)); + if (!sub.cskrId.empty()) { + hecl::SystemStringConv cskrSysName(sub.cskrId); + ch.cskr = inPath.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.CSKR")), chSysName, cskrSysName)); + } else { + ch.cskr = inPath.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}.CSKR")), chSysName)); + } /* Add subtype AABBs */ ch.animAABBs.reserve(actor.actions.size()); @@ -1040,8 +1045,14 @@ bool ANCS::Cook(const hecl::ProjectPath& outPath, const hecl::ProjectPath& inPat if (search != sub.overlayMeshes.cend()) { hecl::SystemStringConv overlaySys(search->name); ch.cmdlIce = search->mesh; - ch.cskrIce = inPath.ensureAuxInfo( - fmt::format(fmt(_SYS_STR("{}.{}_{}.CSKR")), chSysName, overlaySys, search->cskrId)); + if (!search->cskrId.empty()) { + hecl::SystemStringConv cskrSys(search->cskrId); + ch.cskrIce = inPath.ensureAuxInfo( + fmt::format(fmt(_SYS_STR("{}.{}_{}.CSKR")), chSysName, overlaySys, cskrSys)); + } else { + ch.cskrIce = inPath.ensureAuxInfo( + fmt::format(fmt(_SYS_STR("{}.{}.CSKR")), chSysName, overlaySys)); + } } } @@ -1060,7 +1071,13 @@ bool ANCS::Cook(const hecl::ProjectPath& outPath, const hecl::ProjectPath& inPat hecl::SystemStringConv sysStr(prim.animName); for (const DNAANCS::Action& act : actor.actions) { if (act.name == prim.animName) { - hecl::ProjectPath pathOut = inPath.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.ANIM")), sysStr, act.animId)); + hecl::ProjectPath pathOut; + if (!act.animId.empty()) { + hecl::SystemStringConv idSys(act.animId); + pathOut = inPath.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.ANIM")), sysStr, idSys)); + } else { + inPath.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}.ANIM")), sysStr)); + } prim.animId = pathOut; break; } @@ -1073,7 +1090,13 @@ bool ANCS::Cook(const hecl::ProjectPath& outPath, const hecl::ProjectPath& inPat ancs.animationSet.animResources.reserve(actor.actions.size()); for (const DNAANCS::Action& act : actor.actions) { hecl::SystemStringConv sysStr(act.name); - hecl::ProjectPath pathOut = inPath.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.ANIM")), sysStr, act.animId)); + hecl::ProjectPath pathOut; + if (!act.animId.empty()) { + hecl::SystemStringConv animIdSys(act.animId); + pathOut = inPath.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.ANIM")), sysStr, animIdSys)); + } else { + pathOut = inPath.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}.ANIM")), sysStr)); + } ancs.animationSet.animResources.emplace_back(); ancs.animationSet.animResources.back().animId = pathOut; diff --git a/DataSpec/SpecBase.cpp b/DataSpec/SpecBase.cpp index cc7e54981..c0eae2a3e 100644 --- a/DataSpec/SpecBase.cpp +++ b/DataSpec/SpecBase.cpp @@ -307,7 +307,12 @@ void SpecBase::flattenDependenciesBlend(const hecl::ProjectPath& in, std::vector } hecl::SystemStringConv chSysName(sub.name); - pathsOut.push_back(asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.CSKR")), chSysName, sub.cskrId))); + if (sub.cskrId != "") { + hecl::SystemStringConv cskrSysName(sub.cskrId); + pathsOut.push_back(asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.CSKR")), chSysName, cskrSysName))); + } else { + pathsOut.push_back(asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}.CSKR")), chSysName))); + } const auto& arm = actor.armatures[sub.armature]; if (hecl::IsPathBlend(arm.path)) @@ -995,16 +1000,26 @@ bool SpecBase::addFileToIndex(const hecl::ProjectPath& path, athena::io::YAMLDoc for (const auto& sub : subtypeNames) { hecl::SystemStringConv subName(sub.first); - hecl::SystemStringConv cskrId(sub.second); - hecl::ProjectPath subPath = asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.CSKR")), subName, cskrId)); + hecl::ProjectPath subPath; + if (!sub.second.empty()) { + hecl::SystemStringConv cskrId(sub.second); + subPath = asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.CSKR")), subName, cskrId)); + } else { + subPath = asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}.CSKR")), subName)); + } insertPathTag(cacheWriter, buildTagFromPath(subPath), subPath); std::vector> overlayNames = ds.getSubtypeOverlayNames(sub.first); for (const auto& overlay : overlayNames) { hecl::SystemStringConv overlaySys(overlay.first); hecl::SystemStringConv overlayCskrId(overlay.second); - hecl::ProjectPath subPath = asGlob.ensureAuxInfo( - fmt::format(fmt(_SYS_STR("{}.{}_{}.CSKR")), subName, overlaySys, overlayCskrId)); + if (!overlay.second.empty()) { + subPath = + asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}.{}_{}.CSKR")), subName, overlaySys, overlayCskrId)); + } else { + subPath = + asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}.{}.CSKR")), subName, overlaySys)); + } insertPathTag(cacheWriter, buildTagFromPath(subPath), subPath); } } @@ -1013,15 +1028,26 @@ bool SpecBase::addFileToIndex(const hecl::ProjectPath& path, athena::io::YAMLDoc for (const auto& attachment : attachmentNames) { hecl::SystemStringConv attachmentSys(attachment.first); hecl::SystemStringConv attachmentCskrId(attachment.second); - hecl::ProjectPath subPath = - asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("ATTACH.{}_{}.CSKR")), attachmentSys, attachmentCskrId)); + hecl::ProjectPath subPath; + if (!attachment.second.empty()) { + subPath = + asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("ATTACH.{}_{}.CSKR")), attachmentSys, attachmentCskrId)); + } else { + subPath = + asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("ATTACH.{}.CSKR")), attachmentSys)); + } insertPathTag(cacheWriter, buildTagFromPath(subPath), subPath); } for (const auto& act : actionNames) { hecl::SystemStringConv sysStr(act.first); hecl::SystemStringConv animId(act.second); - hecl::ProjectPath subPath = asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.ANIM")), sysStr, animId)); + hecl::ProjectPath subPath; + if (!act.second.empty()) { + subPath = asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}_{}.ANIM")), sysStr, animId)); + } else { + subPath = asGlob.ensureAuxInfo(fmt::format(fmt(_SYS_STR("{}.ANIM")), sysStr)); + } insertPathTag(cacheWriter, buildTagFromPath(subPath), subPath); } }