diff --git a/src/common/buffer.cpp b/src/common/buffer.cpp index 5324438..6a2a226 100644 --- a/src/common/buffer.cpp +++ b/src/common/buffer.cpp @@ -107,7 +107,7 @@ std::string buffer::read_string(uint32_t blocksize) const std::wstring buffer::read_wstring(uint32_t blocksize) const { std::vector data(blocksize); - _read(data.data(), data.size()); + _read(data.data(), data.size() * sizeof(wchar_t)); return (const wchar_t *)data.data(); } diff --git a/src/mmp_extractor/mmp.cpp b/src/mmp_extractor/mmp.cpp index 52a6c52..8c8d522 100644 --- a/src/mmp_extractor/mmp.cpp +++ b/src/mmp_extractor/mmp.cpp @@ -120,7 +120,7 @@ void mmp::load(const buffer &b) void mmp::load(const std::string &fn) { filename = fn; - buffer b(read_file(filename, true)); + buffer b(read_file(filename)); load(b); } @@ -175,6 +175,8 @@ void mmp::process() texmap = decltype(texmap)(h.width, h.length); texmap_colored = decltype(texmap_colored)(h.width, h.length); colormap = decltype(colormap)(h.width, h.length); + shadowmap = decltype(shadowmap)(h.width, h.length); + normalmap = decltype(normalmap)(h.width, h.length); h_min = std::numeric_limits::max(); h_max = std::numeric_limits::min(); @@ -208,6 +210,8 @@ void mmp::process() texmap_colored(y_rev, x1) = textures_map_colored[t]; colormap(y_rev, x1) = data.Colormap[p]; + shadowmap(y_rev, x1) = *(uint32_t*)&data.Shadowmap[p]; + normalmap(y_rev, x1) = *(uint32_t*)&data.Normalmap[p]; auto length = data.Heightmap[p]; h_min = std::min(h_min, length); @@ -331,3 +335,15 @@ void mmp::writeColorMap() auto fn = filename + ".colormap.bmp"; write_mat_bmp(fn, colormap); } + +void mmp::writeShadowMap() +{ + auto fn = filename + ".shadowmap.bmp"; + write_mat_bmp(fn, shadowmap); +} + +void mmp::writeNormalMap() +{ + auto fn = filename + ".normalmap.bmp"; + write_mat_bmp(fn, normalmap); +} diff --git a/src/mmp_extractor/mmp.h b/src/mmp_extractor/mmp.h index fe34280..793fff3 100644 --- a/src/mmp_extractor/mmp.h +++ b/src/mmp_extractor/mmp.h @@ -131,7 +131,7 @@ struct segment mini_lod mlod; Height Heightmap[size]; info Infomap[size]; - color Colormap[size]; + color Colormap[size]; // diffuse color of material shadow Shadowmap[size]; normal Normalmap[size]; }; @@ -185,6 +185,8 @@ struct mmp mat texmap; mat texmap_colored; mat colormap; + mat shadowmap; + mat normalmap; void load(const buffer &b); void load(const std::string &filename); @@ -200,4 +202,6 @@ struct mmp void writeTextureAlphaMaps(); void writeTextureMapColored(); void writeColorMap(); + void writeShadowMap(); + void writeNormalMap(); }; diff --git a/src/mmp_extractor/mmp_extractor.cpp b/src/mmp_extractor/mmp_extractor.cpp index b4cc3fa..a5e9587 100644 --- a/src/mmp_extractor/mmp_extractor.cpp +++ b/src/mmp_extractor/mmp_extractor.cpp @@ -48,10 +48,12 @@ try //m.writeTexturesList(); m.writeHeightMap(); //m.writeHeightMapSegmented(); - /*m.writeTextureMap(); + m.writeTextureMap(); m.writeTextureAlphaMaps(); m.writeTextureMapColored(); - m.writeColorMap();*/ + m.writeColorMap(); + m.writeShadowMap(); + m.writeNormalMap(); }; path p = argv[1];