mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-05-07 17:43:51 +00:00
feat(extract): emit WOM and WOB side-files (M2/WMO → open formats)
Extends asset_extract with two more open-format emitters: --emit-wom foo.m2 (+ foo00.skin) → foo.wom --emit-wob foo.wmo (+ foo_NNN.wmo groups) → foo.wob --emit-open now also turns these on Originals are preserved so private servers still load .m2/.wmo through the manifest path; the wowee runtime/editor pick up the .wom/.wob next to them via the existing open-format search rules. Implementation: - New WoweeModelLoader::fromM2Bytes(m2Data, skinData) shares the conversion body with fromM2(path, am) via a static helper (convertM2ToWom). Lets the extractor convert without standing up an AssetManager. - fromM2(path, am) moved to a separate translation unit (wowee_model_fromm2.cpp) so asset_extract doesn't have to link the AssetManager dependency. - WoweeBuildingLoader::fromWMO already takes a WMOModel directly, so emitWobFromWmo just needs to read root + group files and call save(). - Group sub-files (<base>_NNN.wmo) are skipped during the walk since they're merged into the root WMO.
This commit is contained in:
parent
5ed2008621
commit
e6ace7cce5
9 changed files with 167 additions and 26 deletions
|
|
@ -979,10 +979,11 @@ bool Extractor::run(const Options& opts) {
|
|||
// Open-format emission: walk the extracted tree and write
|
||||
// wowee-format side-files (PNG / JSON DBC) next to each .blp/.dbc.
|
||||
// Originals are left untouched so private servers continue to work.
|
||||
if (opts.emitPng || opts.emitJsonDbc) {
|
||||
if (opts.emitPng || opts.emitJsonDbc || opts.emitWom || opts.emitWob) {
|
||||
std::cout << "Emitting wowee open-format side-files...\n";
|
||||
OpenFormatStats ofs;
|
||||
emitOpenFormats(effectiveOutputDir, opts.emitPng, opts.emitJsonDbc, ofs);
|
||||
emitOpenFormats(effectiveOutputDir, opts.emitPng, opts.emitJsonDbc,
|
||||
opts.emitWom, opts.emitWob, ofs);
|
||||
if (opts.emitPng) {
|
||||
std::cout << " PNG (BLP→PNG) : " << ofs.pngOk << " ok";
|
||||
if (ofs.pngFail) std::cout << ", " << ofs.pngFail << " failed";
|
||||
|
|
@ -993,6 +994,16 @@ bool Extractor::run(const Options& opts) {
|
|||
if (ofs.jsonDbcFail) std::cout << ", " << ofs.jsonDbcFail << " failed";
|
||||
std::cout << "\n";
|
||||
}
|
||||
if (opts.emitWom) {
|
||||
std::cout << " WOM (M2→WOM) : " << ofs.womOk << " ok";
|
||||
if (ofs.womFail) std::cout << ", " << ofs.womFail << " failed";
|
||||
std::cout << "\n";
|
||||
}
|
||||
if (opts.emitWob) {
|
||||
std::cout << " WOB (WMO→WOB) : " << ofs.wobOk << " ok";
|
||||
if (ofs.wobFail) std::cout << ", " << ofs.wobFail << " failed";
|
||||
std::cout << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
// Cache WoW.exe for Warden MEM_CHECK responses
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue