metaforce/DataSpec/DNACommon/ATBL.cpp

54 lines
1.4 KiB
C++
Raw Normal View History

2016-09-18 23:47:48 +00:00
#include "ATBL.hpp"
2018-12-08 05:30:43 +00:00
namespace DataSpec::DNAAudio {
bool ATBL::Extract(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath) {
uint32_t idxCount = rs.readUint32Big();
athena::io::YAMLDocWriter w("ATBL");
for (uint32_t i = 0; i < idxCount; ++i) {
uint16_t idx = rs.readUint16Big();
if (idx == 0xffff)
continue;
2019-07-20 04:27:21 +00:00
w.writeUint16(fmt::format(fmt("0x{:04X}"), i).c_str(), idx);
2018-12-08 05:30:43 +00:00
}
athena::io::FileWriter fw(outPath.getAbsolutePath());
w.finish(&fw);
return true;
2016-09-18 23:47:48 +00:00
}
2018-12-08 05:30:43 +00:00
bool ATBL::Cook(const hecl::ProjectPath& inPath, const hecl::ProjectPath& outPath) {
athena::io::FileReader r(inPath.getAbsolutePath());
if (r.hasError())
return false;
athena::io::YAMLDocReader dr;
if (!dr.parse(&r))
return false;
unsigned long maxI = 0;
for (const auto& pair : dr.getRootNode()->m_mapChildren) {
unsigned long i = strtoul(pair.first.c_str(), nullptr, 0);
maxI = std::max(maxI, i);
}
std::vector<uint16_t> vecOut;
vecOut.resize(maxI + 1, 0xffff);
2016-09-18 23:47:48 +00:00
2018-12-08 05:30:43 +00:00
for (const auto& pair : dr.getRootNode()->m_mapChildren) {
unsigned long i = strtoul(pair.first.c_str(), nullptr, 0);
vecOut[i] = hecl::SBig(uint16_t(strtoul(pair.second->m_scalarString.c_str(), nullptr, 0)));
}
athena::io::FileWriter w(outPath.getAbsolutePath());
if (w.hasError())
return false;
w.writeUint32Big(uint32_t(vecOut.size()));
w.writeBytes(vecOut.data(), vecOut.size() * 2);
return true;
2016-09-18 23:47:48 +00:00
}
2018-12-08 05:30:43 +00:00
} // namespace DataSpec::DNAAudio