Humungous refactor

This commit is contained in:
Jack Andersen 2016-03-04 13:04:53 -10:00
parent 552ec1db4a
commit 783fb4c4fe
330 changed files with 2943 additions and 3077 deletions

View File

@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.0) cmake_minimum_required(VERSION 3.0)
cmake_policy(SET CMP0054 NEW) cmake_policy(SET CMP0054 NEW)
project(PathShagged) project(urde)
if(MSVC) if(MSVC)
# Shaddup MSVC # Shaddup MSVC
add_definitions(-DUNICODE=1 -D_UNICODE=1 -D__SSE__=1 -D_CRT_SECURE_NO_WARNINGS=1 -DD_SCL_SECURE_NO_WARNINGS=1 /wd4267 /wd4244 /wd4305 /MP) add_definitions(-DUNICODE=1 -D_UNICODE=1 -D__SSE__=1 -D_CRT_SECURE_NO_WARNINGS=1 -DD_SCL_SECURE_NO_WARNINGS=1 /wd4267 /wd4244 /wd4305 /MP)
@ -53,7 +53,7 @@ if(USE_LD_GOLD AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_
endif() endif()
endif() endif()
set(BOO_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/hecl/extern/libBoo/include) set(BOO_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/hecl/extern/boo/include)
set(HECL_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/hecl/include set(HECL_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/hecl/include
${CMAKE_CURRENT_SOURCE_DIR}/hecl/blender) ${CMAKE_CURRENT_SOURCE_DIR}/hecl/blender)
@ -67,25 +67,25 @@ set(HECL_DATASPEC_DECLS
"/* RetroCommon specs */ "/* RetroCommon specs */
namespace DataSpec namespace DataSpec
{ {
extern HECL::Database::DataSpecEntry SpecEntMP1; extern hecl::Database::DataSpecEntry SpecEntMP1;
extern HECL::Database::DataSpecEntry SpecEntMP2; extern hecl::Database::DataSpecEntry SpecEntMP2;
extern HECL::Database::DataSpecEntry SpecEntMP3; extern hecl::Database::DataSpecEntry SpecEntMP3;
}") }")
set(HECL_DATASPEC_PUSHES set(HECL_DATASPEC_PUSHES
" /* RetroCommon */ " /* RetroCommon */
HECL::Database::DATA_SPEC_REGISTRY.push_back(&DataSpec::SpecEntMP1); hecl::Database::DATA_SPEC_REGISTRY.push_back(&DataSpec::SpecEntMP1);
HECL::Database::DATA_SPEC_REGISTRY.push_back(&DataSpec::SpecEntMP2); hecl::Database::DATA_SPEC_REGISTRY.push_back(&DataSpec::SpecEntMP2);
HECL::Database::DATA_SPEC_REGISTRY.push_back(&DataSpec::SpecEntMP3);") hecl::Database::DATA_SPEC_REGISTRY.push_back(&DataSpec::SpecEntMP3);")
add_subdirectory(hecl) add_subdirectory(hecl)
add_definitions(${BOO_SYS_DEFINES}) add_definitions(${BOO_SYS_DEFINES})
add_subdirectory(libSpecter) add_subdirectory(specter)
set(SPECTER_INCLUDE_DIR libSpecter/include libSpecter/freetype2/include) set(SPECTER_INCLUDE_DIR specter/include specter/freetype2/include)
add_subdirectory(NODLib) add_subdirectory(nod)
set(NODLIB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/NODLib/include) set(NOD_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/nod/include)
add_definitions(-DZE_ATHENA_TYPES=1) add_definitions(-DZE_ATHENA_TYPES=1)
set(MATHLIB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libSpecter/MathLib/include) set(ZEUS_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/specter/zeus/include)
include_directories(${ATHENA_INCLUDE_DIR} ${LOG_VISOR_INCLUDE_DIR} ${HECL_INCLUDE_DIR} include_directories(${ATHENA_INCLUDE_DIR} ${LOGVISOR_INCLUDE_DIR} ${HECL_INCLUDE_DIR}
${NODLIB_INCLUDE_DIR} ${MATHLIB_INCLUDE_DIR} ${BOO_INCLUDE_DIR} ${NOD_INCLUDE_DIR} ${ZEUS_INCLUDE_DIR} ${BOO_INCLUDE_DIR}
${SPECTER_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) ${SPECTER_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
add_subdirectory(DataSpec) add_subdirectory(DataSpec)
add_subdirectory(Editor) add_subdirectory(Editor)

View File

@ -10,13 +10,13 @@ namespace DataSpec
namespace Blender namespace Blender
{ {
bool BuildMasterShader(const HECL::ProjectPath& path) bool BuildMasterShader(const hecl::ProjectPath& path)
{ {
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection(); hecl::BlenderConnection& conn = hecl::BlenderConnection::SharedConnection();
if (!conn.createBlend(path, HECL::BlenderConnection::BlendType::None)) if (!conn.createBlend(path, hecl::BlenderConnection::BlendType::None))
return false; return false;
{ {
HECL::BlenderConnection::PyOutStream os = conn.beginPythonOut(true); hecl::BlenderConnection::PyOutStream os = conn.beginPythonOut(true);
os << RETRO_MASTER_SHADER; os << RETRO_MASTER_SHADER;
os << "make_master_shader_library()\n"; os << "make_master_shader_library()\n";
} }

View File

@ -1,14 +1,14 @@
#ifndef _RETRO_BLENDER_SUPPORT_HPP_ #ifndef _RETRO_BLENDER_SUPPORT_HPP_
#define _RETRO_BLENDER_SUPPORT_HPP_ #define _RETRO_BLENDER_SUPPORT_HPP_
#include <HECL/HECL.hpp> #include <hecl/hecl.hpp>
namespace DataSpec namespace DataSpec
{ {
namespace Blender namespace Blender
{ {
bool BuildMasterShader(const HECL::ProjectPath& path); bool BuildMasterShader(const hecl::ProjectPath& path);
} }
} }

View File

@ -11,7 +11,7 @@ namespace DataSpec
namespace DNAANCS namespace DNAANCS
{ {
using Actor = HECL::BlenderConnection::DataStream::Actor; using Actor = hecl::BlenderConnection::DataStream::Actor;
template <typename IDTYPE> template <typename IDTYPE>
struct CharacterResInfo struct CharacterResInfo
@ -20,7 +20,7 @@ struct CharacterResInfo
IDTYPE cmdl; IDTYPE cmdl;
IDTYPE cskr; IDTYPE cskr;
IDTYPE cinf; IDTYPE cinf;
std::vector<std::pair<HECL::FourCC, std::pair<IDTYPE, IDTYPE>>> overlays; std::vector<std::pair<hecl::FourCC, std::pair<IDTYPE, IDTYPE>>> overlays;
}; };
template <typename IDTYPE> template <typename IDTYPE>
@ -33,13 +33,13 @@ struct AnimationResInfo
}; };
template <class PAKRouter, class ANCSDNA, class MaterialSet, class SurfaceHeader, atUint32 CMDLVersion> template <class PAKRouter, class ANCSDNA, class MaterialSet, class SurfaceHeader, atUint32 CMDLVersion>
bool ReadANCSToBlender(HECL::BlenderConnection& conn, bool ReadANCSToBlender(hecl::BlenderConnection& conn,
const ANCSDNA& ancs, const ANCSDNA& ancs,
const HECL::ProjectPath& outPath, const hecl::ProjectPath& outPath,
PAKRouter& pakRouter, PAKRouter& pakRouter,
const typename PAKRouter::EntryType& entry, const typename PAKRouter::EntryType& entry,
const SpecBase& dataspec, const SpecBase& dataspec,
std::function<void(const HECL::SystemChar*)> fileChanged, std::function<void(const hecl::SystemChar*)> fileChanged,
bool force=false) bool force=false)
{ {
/* Extract character CMDL/CSKR first */ /* Extract character CMDL/CSKR first */
@ -47,17 +47,18 @@ bool ReadANCSToBlender(HECL::BlenderConnection& conn,
ancs.getCharacterResInfo(chResInfo); ancs.getCharacterResInfo(chResInfo);
for (const auto& info : chResInfo) for (const auto& info : chResInfo)
{ {
const NOD::Node* node; const nod::Node* node;
const typename PAKRouter::EntryType* cmdlE = pakRouter.lookupEntry(info.cmdl, &node, true, true); const typename PAKRouter::EntryType* cmdlE = pakRouter.lookupEntry(info.cmdl, &node, true, true);
if (cmdlE) if (cmdlE)
{ {
HECL::ProjectPath cmdlPath = pakRouter.getWorking(cmdlE); hecl::ProjectPath cmdlPath = pakRouter.getWorking(cmdlE);
if (force || cmdlPath.getPathType() == HECL::ProjectPath::Type::None) if (force || cmdlPath.getPathType() == hecl::ProjectPath::Type::None)
{ {
if (!conn.createBlend(cmdlPath, HECL::BlenderConnection::BlendType::Mesh)) if (!conn.createBlend(cmdlPath, hecl::BlenderConnection::BlendType::Mesh))
return false; return false;
HECL::SystemStringView bestNameView(pakRouter.getBestEntryName(*cmdlE)); std::string bestName = pakRouter.getBestEntryName(*cmdlE);
hecl::SystemStringView bestNameView(bestName);
fileChanged(bestNameView.sys_str().c_str()); fileChanged(bestNameView.sys_str().c_str());
typename ANCSDNA::CSKRType cskr; typename ANCSDNA::CSKRType cskr;
@ -76,13 +77,14 @@ bool ReadANCSToBlender(HECL::BlenderConnection& conn,
} }
} }
HECL::SystemStringView bestNameView(pakRouter.getBestEntryName(entry)); std::string bestName = pakRouter.getBestEntryName(entry);
hecl::SystemStringView bestNameView(bestName);
fileChanged(bestNameView.sys_str().c_str()); fileChanged(bestNameView.sys_str().c_str());
/* Establish ANCS blend */ /* Establish ANCS blend */
if (!conn.createBlend(outPath, HECL::BlenderConnection::BlendType::Actor)) if (!conn.createBlend(outPath, hecl::BlenderConnection::BlendType::Actor))
return false; return false;
HECL::BlenderConnection::PyOutStream os = conn.beginPythonOut(true); hecl::BlenderConnection::PyOutStream os = conn.beginPythonOut(true);
os.format("import bpy\n" os.format("import bpy\n"
"from mathutils import Vector\n" "from mathutils import Vector\n"
@ -125,7 +127,7 @@ bool ReadANCSToBlender(HECL::BlenderConnection& conn,
const typename PAKRouter::EntryType* cmdlE = pakRouter.lookupEntry(info.cmdl, nullptr, true, true); const typename PAKRouter::EntryType* cmdlE = pakRouter.lookupEntry(info.cmdl, nullptr, true, true);
if (cmdlE) if (cmdlE)
{ {
HECL::ProjectPath cmdlPath = pakRouter.getWorking(cmdlE); hecl::ProjectPath cmdlPath = pakRouter.getWorking(cmdlE);
os.linkBlend(cmdlPath.getAbsolutePathUTF8().c_str(), os.linkBlend(cmdlPath.getAbsolutePathUTF8().c_str(),
pakRouter.getBestEntryName(*cmdlE).c_str(), true); pakRouter.getBestEntryName(*cmdlE).c_str(), true);
@ -147,7 +149,7 @@ bool ReadANCSToBlender(HECL::BlenderConnection& conn,
const typename PAKRouter::EntryType* cmdlE = pakRouter.lookupEntry(overlay.second.first, nullptr, true, true); const typename PAKRouter::EntryType* cmdlE = pakRouter.lookupEntry(overlay.second.first, nullptr, true, true);
if (cmdlE) if (cmdlE)
{ {
HECL::ProjectPath cmdlPath = pakRouter.getWorking(cmdlE); hecl::ProjectPath cmdlPath = pakRouter.getWorking(cmdlE);
os.linkBlend(cmdlPath.getAbsolutePathUTF8().c_str(), os.linkBlend(cmdlPath.getAbsolutePathUTF8().c_str(),
pakRouter.getBestEntryName(*cmdlE).c_str(), true); pakRouter.getBestEntryName(*cmdlE).c_str(), true);

View File

@ -1,5 +1,4 @@
#define _USE_MATH_DEFINES #include "zeus/Math.hpp"
#include <math.h>
#include "ANIM.hpp" #include "ANIM.hpp"
namespace DataSpec namespace DataSpec
@ -39,50 +38,50 @@ size_t ComputeBitstreamSize(size_t keyFrameCount, const std::vector<Channel>& ch
static inline QuantizedRot QuantizeRotation(const Value& quat, atUint32 div) static inline QuantizedRot QuantizeRotation(const Value& quat, atUint32 div)
{ {
float q = M_PI / 2.0 / div; float q = M_PI / 2.0f / float(div);
return return
{ {
{ {
atInt16(asinf(quat.v4.vec[1]) / q), atInt16(std::asin(quat.v4.vec[1]) / q),
atInt16(asinf(quat.v4.vec[2]) / q), atInt16(std::asin(quat.v4.vec[2]) / q),
atInt16(asinf(quat.v4.vec[3]) / q), atInt16(std::asin(quat.v4.vec[3]) / q),
}, },
(quat.v4.vec[0] < 0) ? true : false (quat.v4.vec[0] < 0.f) ? true : false
}; };
} }
static inline Value DequantizeRotation(const QuantizedRot& v, atUint32 div) static inline Value DequantizeRotation(const QuantizedRot& v, atUint32 div)
{ {
float q = M_PI / 2.0 / div; float q = M_PI / 2.0f / float(div);
Value retval = Value retval =
{ {
0.0, 0.0f,
sinf(v.v[0] * q), std::sin(v.v[0] * q),
sinf(v.v[1] * q), std::sin(v.v[1] * q),
sinf(v.v[2] * q), std::sin(v.v[2] * q),
}; };
retval.v4.vec[0] = sqrtf(std::max((1.0 - retval.v4.vec[0] = std::sqrt(std::max((1.0f -
(retval.v4.vec[1] * retval.v4.vec[1] + (retval.v4.vec[1] * retval.v4.vec[1] +
retval.v4.vec[2] * retval.v4.vec[2] + retval.v4.vec[2] * retval.v4.vec[2] +
retval.v4.vec[3] * retval.v4.vec[3])), 0.0)); retval.v4.vec[3] * retval.v4.vec[3])), 0.0f));
retval.v4.vec[0] = v.w ? -retval.v4.vec[0] : retval.v4.vec[0]; retval.v4.vec[0] = v.w ? -retval.v4.vec[0] : retval.v4.vec[0];
return retval; return retval;
} }
static inline Value DequantizeRotation_3(const QuantizedRot& v, atUint32 div) static inline Value DequantizeRotation_3(const QuantizedRot& v, atUint32 div)
{ {
float q = 1.0 / div; float q = 1.0f / float(div);
Value retval = Value retval =
{ {
0.0, 0.0f,
v.v[0] * q, v.v[0] * q,
v.v[1] * q, v.v[1] * q,
v.v[2] * q, v.v[2] * q,
}; };
retval.v4.vec[0] = sqrtf(std::max((1.0 - retval.v4.vec[0] = std::sqrt(std::max((1.0f -
(retval.v4.vec[1] * retval.v4.vec[1] + (retval.v4.vec[1] * retval.v4.vec[1] +
retval.v4.vec[2] * retval.v4.vec[2] + retval.v4.vec[2] * retval.v4.vec[2] +
retval.v4.vec[3] * retval.v4.vec[3])), 0.0)); retval.v4.vec[3] * retval.v4.vec[3])), 0.0f));
retval.v4.vec[0] = v.w ? -retval.v4.vec[0] : retval.v4.vec[0]; retval.v4.vec[0] = v.w ? -retval.v4.vec[0] : retval.v4.vec[0];
return retval; return retval;
} }
@ -94,7 +93,7 @@ bool BitstreamReader::dequantizeBit(const atUint8* data)
/* Fill 32 bit buffer with region containing bits */ /* Fill 32 bit buffer with region containing bits */
/* Make them least significant */ /* Make them least significant */
atUint32 tempBuf = HECL::SBig(*reinterpret_cast<const atUint32*>(data + byteCur)) >> bitRem; atUint32 tempBuf = hecl::SBig(*reinterpret_cast<const atUint32*>(data + byteCur)) >> bitRem;
/* That's it */ /* That's it */
m_bitCur += 1; m_bitCur += 1;
@ -108,13 +107,13 @@ atInt16 BitstreamReader::dequantize(const atUint8* data, atUint8 q)
/* Fill 32 bit buffer with region containing bits */ /* Fill 32 bit buffer with region containing bits */
/* Make them least significant */ /* Make them least significant */
atUint32 tempBuf = HECL::SBig(*reinterpret_cast<const atUint32*>(data + byteCur)) >> bitRem; atUint32 tempBuf = hecl::SBig(*reinterpret_cast<const atUint32*>(data + byteCur)) >> bitRem;
/* If this shift underflows the value, buffer the next 32 bits */ /* If this shift underflows the value, buffer the next 32 bits */
/* And tack onto shifted buffer */ /* And tack onto shifted buffer */
if ((bitRem + q) > 32) if ((bitRem + q) > 32)
{ {
atUint32 tempBuf2 = HECL::SBig(*reinterpret_cast<const atUint32*>(data + byteCur + 4)); atUint32 tempBuf2 = hecl::SBig(*reinterpret_cast<const atUint32*>(data + byteCur + 4));
tempBuf |= (tempBuf2 << (32 - bitRem)); tempBuf |= (tempBuf2 << (32 - bitRem));
} }
@ -256,7 +255,7 @@ void BitstreamWriter::quantizeBit(atUint8* data, bool val)
/* Fill 32 bit buffer with region containing bits */ /* Fill 32 bit buffer with region containing bits */
/* Make them least significant */ /* Make them least significant */
*(atUint32*)(data + byteCur) = *(atUint32*)(data + byteCur) =
HECL::SBig(HECL::SBig(*(atUint32*)(data + byteCur)) | (val << bitRem)); hecl::SBig(hecl::SBig(*(atUint32*)(data + byteCur)) | (val << bitRem));
m_bitCur += 1; m_bitCur += 1;
} }
@ -271,14 +270,14 @@ void BitstreamWriter::quantize(atUint8* data, atUint8 q, atInt16 val)
/* Fill 32 bit buffer with region containing bits */ /* Fill 32 bit buffer with region containing bits */
/* Make them least significant */ /* Make them least significant */
*(atUint32*)(data + byteCur) = *(atUint32*)(data + byteCur) =
HECL::SBig(HECL::SBig(*(atUint32*)(data + byteCur)) | (masked << bitRem)); hecl::SBig(hecl::SBig(*(atUint32*)(data + byteCur)) | (masked << bitRem));
/* If this shift underflows the value, buffer the next 32 bits */ /* If this shift underflows the value, buffer the next 32 bits */
/* And tack onto shifted buffer */ /* And tack onto shifted buffer */
if ((bitRem + q) > 32) if ((bitRem + q) > 32)
{ {
*(atUint32*)(data + byteCur + 4) = *(atUint32*)(data + byteCur + 4) =
HECL::SBig(HECL::SBig(*(atUint32*)(data + byteCur + 4)) | (masked >> (32 - bitRem))); hecl::SBig(hecl::SBig(*(atUint32*)(data + byteCur + 4)) | (masked >> (32 - bitRem)));
} }
m_bitCur += q; m_bitCur += q;
@ -295,7 +294,7 @@ BitstreamWriter::write(const std::vector<std::vector<Value>>& chanKeys,
rotDivOut = 32767; /* Normalized range of values */ rotDivOut = 32767; /* Normalized range of values */
/* Pre-pass to calculate translation multiplier */ /* Pre-pass to calculate translation multiplier */
float maxTransDiff = 0.0; float maxTransDiff = 0.0f;
auto kit = chanKeys.begin(); auto kit = chanKeys.begin();
for (Channel& chan : channels) for (Channel& chan : channels)
{ {

View File

@ -1,18 +1,14 @@
#ifndef _DNACOMMON_BABEDEAD_HPP_ #ifndef _DNACOMMON_BABEDEAD_HPP_
#define _DNACOMMON_BABEDEAD_HPP_ #define _DNACOMMON_BABEDEAD_HPP_
#include <BlenderConnection.hpp> #include "BlenderConnection.hpp"
#include "zeus/Math.hpp"
#ifndef _USE_MATH_DEFINES
#define _USE_MATH_DEFINES 1
#endif
#include <math.h>
namespace DataSpec namespace DataSpec
{ {
template<class BabeDeadLight> template<class BabeDeadLight>
void ReadBabeDeadLightToBlender(HECL::BlenderConnection::PyOutStream& os, void ReadBabeDeadLightToBlender(hecl::BlenderConnection::PyOutStream& os,
const BabeDeadLight& light, unsigned s, unsigned l) const BabeDeadLight& light, unsigned s, unsigned l)
{ {
switch (light.lightType) switch (light.lightType)
@ -45,7 +41,7 @@ void ReadBabeDeadLightToBlender(HECL::BlenderConnection::PyOutStream& os,
"lamp_obj.rotation_mode = 'QUATERNION'\n" "lamp_obj.rotation_mode = 'QUATERNION'\n"
"lamp_obj.rotation_quaternion = Vector((0,0,-1)).rotation_difference(Vector((%f,%f,%f)))\n" "lamp_obj.rotation_quaternion = Vector((0,0,-1)).rotation_difference(Vector((%f,%f,%f)))\n"
"\n", s, l, "\n", s, l,
light.spotCutoff * M_PI / 180.f, zeus::degToRad(light.spotCutoff),
light.direction.vec[0], light.direction.vec[1], light.direction.vec[2]); light.direction.vec[0], light.direction.vec[1], light.direction.vec[2]);
break; break;
default: return; default: return;

View File

@ -5,8 +5,8 @@ namespace DataSpec
namespace DNACMDL namespace DNACMDL
{ {
void InitGeomBlenderContext(HECL::BlenderConnection::PyOutStream& os, void InitGeomBlenderContext(hecl::BlenderConnection::PyOutStream& os,
const HECL::ProjectPath& masterShaderPath) const hecl::ProjectPath& masterShaderPath)
{ {
os << "# Using 'Blender Game'\n" os << "# Using 'Blender Game'\n"
"bpy.context.scene.render.engine = 'BLENDER_GAME'\n" "bpy.context.scene.render.engine = 'BLENDER_GAME'\n"
@ -87,7 +87,7 @@ void InitGeomBlenderContext(HECL::BlenderConnection::PyOutStream& os,
"\n", masterShaderPath.getAbsolutePathUTF8().c_str()); "\n", masterShaderPath.getAbsolutePathUTF8().c_str());
} }
void FinishBlenderMesh(HECL::BlenderConnection::PyOutStream& os, void FinishBlenderMesh(hecl::BlenderConnection::PyOutStream& os,
unsigned matSetCount, int meshIdx) unsigned matSetCount, int meshIdx)
{ {
if (meshIdx < 0) if (meshIdx < 0)

View File

@ -1,9 +1,9 @@
#ifndef _DNACOMMON_CMDL_HPP_ #ifndef _DNACOMMON_CMDL_HPP_
#define _DNACOMMON_CMDL_HPP_ #define _DNACOMMON_CMDL_HPP_
#include <Athena/FileWriter.hpp> #include <athena/FileWriter.hpp>
#include <HECL/Frontend.hpp> #include <hecl/Frontend.hpp>
#include <HECL/Backend/GX.hpp> #include <hecl/Backend/GX.hpp>
#include "PAK.hpp" #include "PAK.hpp"
#include "BlenderConnection.hpp" #include "BlenderConnection.hpp"
#include "GX.hpp" #include "GX.hpp"
@ -14,7 +14,7 @@ namespace DataSpec
namespace DNACMDL namespace DNACMDL
{ {
using Mesh = HECL::BlenderConnection::DataStream::Mesh; using Mesh = hecl::BlenderConnection::DataStream::Mesh;
struct Header : BigDNA struct Header : BigDNA
{ {
@ -49,7 +49,7 @@ struct SurfaceHeader_1 : BigDNA
Value<atUint32> unk2 = 0; Value<atUint32> unk2 = 0;
Value<atUint32> aabbSz = 0; Value<atUint32> aabbSz = 0;
Value<atVec3f> reflectionNormal; Value<atVec3f> reflectionNormal;
Seek<DNA_COUNT(aabbSz), Athena::Current> seek2; Seek<DNA_COUNT(aabbSz), athena::Current> seek2;
Align<32> align; Align<32> align;
static constexpr bool UseMatrixSkinning() {return false;} static constexpr bool UseMatrixSkinning() {return false;}
@ -69,7 +69,7 @@ struct SurfaceHeader_2 : BigDNA
Value<atVec3f> reflectionNormal; Value<atVec3f> reflectionNormal;
Value<atInt16> skinMtxBankIdx; Value<atInt16> skinMtxBankIdx;
Value<atUint16> surfaceGroup; Value<atUint16> surfaceGroup;
Seek<DNA_COUNT(aabbSz), Athena::Current> seek2; Seek<DNA_COUNT(aabbSz), athena::Current> seek2;
Align<32> align; Align<32> align;
static constexpr bool UseMatrixSkinning() {return false;} static constexpr bool UseMatrixSkinning() {return false;}
@ -89,7 +89,7 @@ struct SurfaceHeader_3 : BigDNA
Value<atVec3f> reflectionNormal; Value<atVec3f> reflectionNormal;
Value<atInt16> skinMtxBankIdx; Value<atInt16> skinMtxBankIdx;
Value<atUint16> surfaceGroup; Value<atUint16> surfaceGroup;
Seek<DNA_COUNT(aabbSz), Athena::Current> seek2; Seek<DNA_COUNT(aabbSz), athena::Current> seek2;
Value<atUint8> unk3; Value<atUint8> unk3;
Align<32> align; Align<32> align;
@ -166,7 +166,7 @@ void GetVertexAttributes(const MaterialSet& matSet,
} }
template <class PAKRouter, class MaterialSet> template <class PAKRouter, class MaterialSet>
void ReadMaterialSetToBlender_1_2(HECL::BlenderConnection::PyOutStream& os, void ReadMaterialSetToBlender_1_2(hecl::BlenderConnection::PyOutStream& os,
const MaterialSet& matSet, const MaterialSet& matSet,
const PAKRouter& pakRouter, const PAKRouter& pakRouter,
const typename PAKRouter::EntryType& entry, const typename PAKRouter::EntryType& entry,
@ -177,16 +177,16 @@ void ReadMaterialSetToBlender_1_2(HECL::BlenderConnection::PyOutStream& os,
for (const UniqueID32& tex : matSet.head.textureIDs) for (const UniqueID32& tex : matSet.head.textureIDs)
{ {
std::string texName = pakRouter.getBestEntryName(tex); std::string texName = pakRouter.getBestEntryName(tex);
const NOD::Node* node; const nod::Node* node;
const typename PAKRouter::EntryType* texEntry = pakRouter.lookupEntry(tex, &node); const typename PAKRouter::EntryType* texEntry = pakRouter.lookupEntry(tex, &node);
HECL::ProjectPath txtrPath = pakRouter.getWorking(texEntry); hecl::ProjectPath txtrPath = pakRouter.getWorking(texEntry);
if (txtrPath.getPathType() == HECL::ProjectPath::Type::None) if (txtrPath.getPathType() == hecl::ProjectPath::Type::None)
{ {
PAKEntryReadStream rs = texEntry->beginReadStream(*node); PAKEntryReadStream rs = texEntry->beginReadStream(*node);
TXTR::Extract(rs, txtrPath); TXTR::Extract(rs, txtrPath);
} }
HECL::SystemString resPath = pakRouter.getResourceRelativePath(entry, tex); hecl::SystemString resPath = pakRouter.getResourceRelativePath(entry, tex);
HECL::SystemUTF8View resPathView(resPath); hecl::SystemUTF8View resPathView(resPath);
os.format("if '%s' in bpy.data.textures:\n" os.format("if '%s' in bpy.data.textures:\n"
" image = bpy.data.images['%s']\n" " image = bpy.data.images['%s']\n"
" texture = bpy.data.textures[image.name]\n" " texture = bpy.data.textures[image.name]\n"
@ -209,7 +209,7 @@ void ReadMaterialSetToBlender_1_2(HECL::BlenderConnection::PyOutStream& os,
} }
template <class PAKRouter, class MaterialSet> template <class PAKRouter, class MaterialSet>
void ReadMaterialSetToBlender_3(HECL::BlenderConnection::PyOutStream& os, void ReadMaterialSetToBlender_3(hecl::BlenderConnection::PyOutStream& os,
const MaterialSet& matSet, const MaterialSet& matSet,
const PAKRouter& pakRouter, const PAKRouter& pakRouter,
const typename PAKRouter::EntryType& entry, const typename PAKRouter::EntryType& entry,
@ -251,7 +251,7 @@ public:
} }
template<class RigPair> template<class RigPair>
void sendAdditionalVertsToBlender(HECL::BlenderConnection::PyOutStream& os, void sendAdditionalVertsToBlender(hecl::BlenderConnection::PyOutStream& os,
const RigPair& rp) const const RigPair& rp) const
{ {
atUint32 nextVert = 1; atUint32 nextVert = 1;
@ -312,7 +312,7 @@ private:
case GX::INDEX16: case GX::INDEX16:
if ((m_cur - m_dl.get() + 1) >= intptr_t(m_dlSize)) if ((m_cur - m_dl.get() + 1) >= intptr_t(m_dlSize))
return 0; return 0;
retval = HECL::SBig(*(atUint16*)m_cur); retval = hecl::SBig(*(atUint16*)m_cur);
m_cur += 2; m_cur += 2;
break; break;
default: break; default: break;
@ -346,7 +346,7 @@ public:
atUint16 readVertCount() atUint16 readVertCount()
{ {
atUint16 retval = HECL::SBig(*(atUint16*)m_cur); atUint16 retval = hecl::SBig(*(atUint16*)m_cur);
m_cur += 2; m_cur += 2;
return retval; return retval;
} }
@ -510,14 +510,14 @@ public:
} }
}; };
void InitGeomBlenderContext(HECL::BlenderConnection::PyOutStream& os, void InitGeomBlenderContext(hecl::BlenderConnection::PyOutStream& os,
const HECL::ProjectPath& masterShaderPath); const hecl::ProjectPath& masterShaderPath);
void FinishBlenderMesh(HECL::BlenderConnection::PyOutStream& os, void FinishBlenderMesh(hecl::BlenderConnection::PyOutStream& os,
unsigned matSetCount, int meshIdx); unsigned matSetCount, int meshIdx);
template <class PAKRouter, class MaterialSet, class RigPair, class SurfaceHeader> template <class PAKRouter, class MaterialSet, class RigPair, class SurfaceHeader>
atUint32 ReadGeomSectionsToBlender(HECL::BlenderConnection::PyOutStream& os, atUint32 ReadGeomSectionsToBlender(hecl::BlenderConnection::PyOutStream& os,
Athena::io::IStreamReader& reader, athena::io::IStreamReader& reader,
PAKRouter& pakRouter, PAKRouter& pakRouter,
const typename PAKRouter::EntryType& entry, const typename PAKRouter::EntryType& entry,
const RigPair& rp, const RigPair& rp,
@ -640,10 +640,10 @@ atUint32 ReadGeomSectionsToBlender(HECL::BlenderConnection::PyOutStream& os,
} }
if (s < secCount - 1) if (s < secCount - 1)
reader.seek(secStart + secSizes[s], Athena::Begin); reader.seek(secStart + secSizes[s], athena::Begin);
} }
reader.seek(afterHeaderPos, Athena::Begin); reader.seek(afterHeaderPos, athena::Begin);
visitedDLOffsets = false; visitedDLOffsets = false;
unsigned createdUVLayers = 0; unsigned createdUVLayers = 0;
@ -986,7 +986,7 @@ atUint32 ReadGeomSectionsToBlender(HECL::BlenderConnection::PyOutStream& os,
} }
if (s < secCount - 1) if (s < secCount - 1)
reader.seek(secStart + secSizes[s], Athena::Begin); reader.seek(secStart + secSizes[s], athena::Begin);
} }
/* Finish Mesh */ /* Finish Mesh */
@ -999,8 +999,8 @@ atUint32 ReadGeomSectionsToBlender(HECL::BlenderConnection::PyOutStream& os,
} }
template <class PAKRouter, class MaterialSet, class RigPair, class SurfaceHeader, atUint32 Version> template <class PAKRouter, class MaterialSet, class RigPair, class SurfaceHeader, atUint32 Version>
bool ReadCMDLToBlender(HECL::BlenderConnection& conn, bool ReadCMDLToBlender(hecl::BlenderConnection& conn,
Athena::io::IStreamReader& reader, athena::io::IStreamReader& reader,
PAKRouter& pakRouter, PAKRouter& pakRouter,
const typename PAKRouter::EntryType& entry, const typename PAKRouter::EntryType& entry,
const SpecBase& dataspec, const SpecBase& dataspec,
@ -1011,18 +1011,18 @@ bool ReadCMDLToBlender(HECL::BlenderConnection& conn,
if (head.magic != 0xDEADBABE) if (head.magic != 0xDEADBABE)
{ {
LogDNACommon.report(LogVisor::Error, "invalid CMDL magic"); LogDNACommon.report(logvisor::Error, "invalid CMDL magic");
return false; return false;
} }
if (head.version != Version) if (head.version != Version)
{ {
LogDNACommon.report(LogVisor::Error, "invalid CMDL version"); LogDNACommon.report(logvisor::Error, "invalid CMDL version");
return false; return false;
} }
/* Open Py Stream and read sections */ /* Open Py Stream and read sections */
HECL::BlenderConnection::PyOutStream os = conn.beginPythonOut(true); hecl::BlenderConnection::PyOutStream os = conn.beginPythonOut(true);
os.format("import bpy\n" os.format("import bpy\n"
"import bmesh\n" "import bmesh\n"
"\n" "\n"
@ -1046,14 +1046,14 @@ bool ReadCMDLToBlender(HECL::BlenderConnection& conn,
} }
template <class PAKRouter, class MaterialSet> template <class PAKRouter, class MaterialSet>
void NameCMDL(Athena::io::IStreamReader& reader, void NameCMDL(athena::io::IStreamReader& reader,
PAKRouter& pakRouter, PAKRouter& pakRouter,
typename PAKRouter::EntryType& entry, typename PAKRouter::EntryType& entry,
const SpecBase& dataspec) const SpecBase& dataspec)
{ {
Header head; Header head;
head.read(reader); head.read(reader);
std::string bestName = HECL::Format("CMDL_%s", entry.id.toString().c_str()); std::string bestName = hecl::Format("CMDL_%s", entry.id.toString().c_str());
/* Pre-read pass to determine maximum used vert indices */ /* Pre-read pass to determine maximum used vert indices */
atUint32 matSecCount = 0; atUint32 matSecCount = 0;
@ -1071,11 +1071,11 @@ void NameCMDL(Athena::io::IStreamReader& reader,
} }
if (s < head.secCount - 1) if (s < head.secCount - 1)
reader.seek(secStart + head.secSizes[s], Athena::Begin); reader.seek(secStart + head.secSizes[s], athena::Begin);
} }
} }
static void WriteDLVal(Athena::io::FileWriter& writer, GX::AttrType type, atUint32 val) static void WriteDLVal(athena::io::FileWriter& writer, GX::AttrType type, atUint32 val)
{ {
switch (type) switch (type)
{ {
@ -1091,7 +1091,7 @@ static void WriteDLVal(Athena::io::FileWriter& writer, GX::AttrType type, atUint
} }
template <class MaterialSet, class SurfaceHeader, atUint32 Version> template <class MaterialSet, class SurfaceHeader, atUint32 Version>
bool WriteCMDL(const HECL::ProjectPath& outPath, const HECL::ProjectPath& inPath, const Mesh& mesh) bool WriteCMDL(const hecl::ProjectPath& outPath, const hecl::ProjectPath& inPath, const Mesh& mesh)
{ {
Header head; Header head;
head.magic = 0xDEADBABE; head.magic = 0xDEADBABE;
@ -1110,23 +1110,23 @@ bool WriteCMDL(const HECL::ProjectPath& outPath, const HECL::ProjectPath& inPath
std::vector<MaterialSet> matSets; std::vector<MaterialSet> matSets;
matSets.reserve(mesh.materialSets.size()); matSets.reserve(mesh.materialSets.size());
{ {
HECL::Frontend::Frontend FE; hecl::Frontend::Frontend FE;
for (const std::vector<Mesh::Material>& mset : mesh.materialSets) for (const std::vector<Mesh::Material>& mset : mesh.materialSets)
{ {
matSets.emplace_back(); matSets.emplace_back();
MaterialSet& targetMSet = matSets.back(); MaterialSet& targetMSet = matSets.back();
std::vector<HECL::ProjectPath> texPaths; std::vector<hecl::ProjectPath> texPaths;
std::vector<HECL::Backend::GX> setBackends; std::vector<hecl::Backend::GX> setBackends;
setBackends.reserve(mset.size()); setBackends.reserve(mset.size());
size_t endOff = 0; size_t endOff = 0;
atUint32 nextGroupIdx = 0; atUint32 nextGroupIdx = 0;
for (const Mesh::Material& mat : mset) for (const Mesh::Material& mat : mset)
{ {
std::string diagName = HECL::Format("%s:%s", inPath.getLastComponentUTF8(), mat.name.c_str()); std::string diagName = hecl::Format("%s:%s", inPath.getLastComponentUTF8(), mat.name.c_str());
HECL::Frontend::IR matIR = FE.compileSource(mat.source, diagName); hecl::Frontend::IR matIR = FE.compileSource(mat.source, diagName);
setBackends.emplace_back(); setBackends.emplace_back();
HECL::Backend::GX& matGX = setBackends.back(); hecl::Backend::GX& matGX = setBackends.back();
matGX.reset(matIR, FE.getDiagnostics()); matGX.reset(matIR, FE.getDiagnostics());
atUint32 groupIdx = -1; atUint32 groupIdx = -1;
@ -1134,7 +1134,7 @@ bool WriteCMDL(const HECL::ProjectPath& outPath, const HECL::ProjectPath& inPath
{ {
for (size_t i=0 ; i<setBackends.size()-1 ; ++i) for (size_t i=0 ; i<setBackends.size()-1 ; ++i)
{ {
const HECL::Backend::GX& other = setBackends[i]; const hecl::Backend::GX& other = setBackends[i];
if (matGX == other) if (matGX == other)
{ {
groupIdx = i; groupIdx = i;
@ -1153,16 +1153,16 @@ bool WriteCMDL(const HECL::ProjectPath& outPath, const HECL::ProjectPath& inPath
targetMSet.head.addMaterialEndOff(endOff); targetMSet.head.addMaterialEndOff(endOff);
} }
for (const HECL::ProjectPath& path : texPaths) for (const hecl::ProjectPath& path : texPaths)
{ {
const HECL::SystemString& relPath = path.getRelativePath(); const hecl::SystemString& relPath = path.getRelativePath();
/* TODO: incorporate hecl hashes */ /* TODO: incorporate hecl hashes */
size_t search = relPath.find(_S("TXTR_")); size_t search = relPath.find(_S("TXTR_"));
if (search != HECL::SystemString::npos) if (search != hecl::SystemString::npos)
targetMSet.head.addTexture(relPath.c_str() + search + 5); targetMSet.head.addTexture(relPath.c_str() + search + 5);
else else
LogDNACommon.report(LogVisor::FatalError, "unable to get hash from path"); LogDNACommon.report(logvisor::Fatal, "unable to get hash from path");
} }
size_t secSz = targetMSet.binarySize(0); size_t secSz = targetMSet.binarySize(0);
@ -1220,7 +1220,7 @@ bool WriteCMDL(const HECL::ProjectPath& outPath, const HECL::ProjectPath& inPath
{ {
size_t vertSz = matSets.at(0).materials.at(surf.materialIdx).getVAFlags().vertDLSize(); size_t vertSz = matSets.at(0).materials.at(surf.materialIdx).getVAFlags().vertDLSize();
if (surf.verts.size() > 65536) if (surf.verts.size() > 65536)
LogDNACommon.report(LogVisor::FatalError, "GX DisplayList overflow"); LogDNACommon.report(logvisor::Fatal, "GX DisplayList overflow");
size_t secSz = 67 + surf.verts.size() * vertSz; size_t secSz = 67 + surf.verts.size() * vertSz;
secSz32 = ROUND_UP_32(secSz); secSz32 = ROUND_UP_32(secSz);
if (secSz32 == 0) if (secSz32 == 0)
@ -1232,7 +1232,7 @@ bool WriteCMDL(const HECL::ProjectPath& outPath, const HECL::ProjectPath& inPath
} }
/* Write sections */ /* Write sections */
Athena::io::FileWriter writer(outPath.getAbsolutePath()); athena::io::FileWriter writer(outPath.getAbsolutePath());
head.write(writer); head.write(writer);
std::vector<size_t>::const_iterator padIt = paddingSizes.cbegin(); std::vector<size_t>::const_iterator padIt = paddingSizes.cbegin();
@ -1280,12 +1280,12 @@ bool WriteCMDL(const HECL::ProjectPath& outPath, const HECL::ProjectPath& inPath
/* Surfaces */ /* Surfaces */
GX::Primitive prim; GX::Primitive prim;
if (mesh.topology == HECL::HMDLTopology::Triangles) if (mesh.topology == hecl::HMDLTopology::Triangles)
prim = GX::TRIANGLES; prim = GX::TRIANGLES;
else if (mesh.topology == HECL::HMDLTopology::TriStrips) else if (mesh.topology == hecl::HMDLTopology::TriStrips)
prim = GX::TRIANGLESTRIP; prim = GX::TRIANGLESTRIP;
else else
LogDNACommon.report(LogVisor::FatalError, "unrecognized mesh output mode"); LogDNACommon.report(logvisor::Fatal, "unrecognized mesh output mode");
for (const Mesh::Surface& surf : mesh.surfaces) for (const Mesh::Surface& surf : mesh.surfaces)
{ {
const typename MaterialSet::Material::VAFlags& vaFlags = const typename MaterialSet::Material::VAFlags& vaFlags =
@ -1335,7 +1335,7 @@ bool WriteCMDL(const HECL::ProjectPath& outPath, const HECL::ProjectPath& inPath
} }
template <class MaterialSet, class SurfaceHeader, atUint32 Version> template <class MaterialSet, class SurfaceHeader, atUint32 Version>
bool WriteHMDLCMDL(const HECL::ProjectPath& outPath, const HECL::ProjectPath& inPath, const Mesh& mesh) bool WriteHMDLCMDL(const hecl::ProjectPath& outPath, const hecl::ProjectPath& inPath, const Mesh& mesh)
{ {
Header head; Header head;
head.magic = 0xDEADBABE; head.magic = 0xDEADBABE;
@ -1354,19 +1354,19 @@ bool WriteHMDLCMDL(const HECL::ProjectPath& outPath, const HECL::ProjectPath& in
std::vector<MaterialSet> matSets; std::vector<MaterialSet> matSets;
matSets.reserve(mesh.materialSets.size()); matSets.reserve(mesh.materialSets.size());
{ {
HECL::Frontend::Frontend FE; hecl::Frontend::Frontend FE;
for (const std::vector<Mesh::Material>& mset : mesh.materialSets) for (const std::vector<Mesh::Material>& mset : mesh.materialSets)
{ {
matSets.emplace_back(); matSets.emplace_back();
MaterialSet& targetMSet = matSets.back(); MaterialSet& targetMSet = matSets.back();
std::vector<HECL::ProjectPath> texPaths; std::vector<hecl::ProjectPath> texPaths;
texPaths.reserve(mset.size()*4); texPaths.reserve(mset.size()*4);
for (const Mesh::Material& mat : mset) for (const Mesh::Material& mat : mset)
{ {
for (const HECL::ProjectPath& path : mat.texs) for (const hecl::ProjectPath& path : mat.texs)
{ {
bool found = false; bool found = false;
for (const HECL::ProjectPath& ePath : texPaths) for (const hecl::ProjectPath& ePath : texPaths)
{ {
if (path == ePath) if (path == ePath)
{ {
@ -1382,22 +1382,22 @@ bool WriteHMDLCMDL(const HECL::ProjectPath& outPath, const HECL::ProjectPath& in
size_t endOff = 0; size_t endOff = 0;
for (const Mesh::Material& mat : mset) for (const Mesh::Material& mat : mset)
{ {
std::string diagName = HECL::Format("%s:%s", inPath.getLastComponentUTF8(), mat.name.c_str()); std::string diagName = hecl::Format("%s:%s", inPath.getLastComponentUTF8(), mat.name.c_str());
targetMSet.materials.emplace_back(FE, diagName, mat, mat.iprops, texPaths); targetMSet.materials.emplace_back(FE, diagName, mat, mat.iprops, texPaths);
endOff = targetMSet.materials.back().binarySize(endOff); endOff = targetMSet.materials.back().binarySize(endOff);
targetMSet.head.addMaterialEndOff(endOff); targetMSet.head.addMaterialEndOff(endOff);
} }
for (const HECL::ProjectPath& path : texPaths) for (const hecl::ProjectPath& path : texPaths)
{ {
const HECL::SystemString& relPath = path.getRelativePath(); const hecl::SystemString& relPath = path.getRelativePath();
/* TODO: incorporate hecl hashes */ /* TODO: incorporate hecl hashes */
size_t search = relPath.find(_S("TXTR_")); size_t search = relPath.find(_S("TXTR_"));
if (search != HECL::SystemString::npos) if (search != hecl::SystemString::npos)
targetMSet.head.addTexture(relPath.c_str() + search + 5); targetMSet.head.addTexture(relPath.c_str() + search + 5);
else else
LogDNACommon.report(LogVisor::FatalError, "unable to get hash from path"); LogDNACommon.report(logvisor::Fatal, "unable to get hash from path");
} }
size_t secSz = targetMSet.binarySize(0); size_t secSz = targetMSet.binarySize(0);
@ -1407,7 +1407,7 @@ bool WriteHMDLCMDL(const HECL::ProjectPath& outPath, const HECL::ProjectPath& in
} }
} }
HECL::HMDLBuffers bufs = mesh.getHMDLBuffers(); hecl::HMDLBuffers bufs = mesh.getHMDLBuffers();
/* Metadata */ /* Metadata */
size_t secSz = bufs.m_meta.binarySize(0); size_t secSz = bufs.m_meta.binarySize(0);
@ -1445,7 +1445,7 @@ bool WriteHMDLCMDL(const HECL::ProjectPath& outPath, const HECL::ProjectPath& in
/* Surfaces */ /* Surfaces */
size_t endOff = 0; size_t endOff = 0;
for (const HECL::HMDLBuffers::Surface& surf : bufs.m_surfaces) for (const hecl::HMDLBuffers::Surface& surf : bufs.m_surfaces)
{ {
head.secSizes.push_back(64); head.secSizes.push_back(64);
paddingSizes.push_back(0); paddingSizes.push_back(0);
@ -1454,7 +1454,7 @@ bool WriteHMDLCMDL(const HECL::ProjectPath& outPath, const HECL::ProjectPath& in
} }
/* Write sections */ /* Write sections */
Athena::io::FileWriter writer(outPath.getAbsolutePath()); athena::io::FileWriter writer(outPath.getAbsolutePath());
head.write(writer); head.write(writer);
std::vector<size_t>::const_iterator padIt = paddingSizes.cbegin(); std::vector<size_t>::const_iterator padIt = paddingSizes.cbegin();
@ -1489,7 +1489,7 @@ bool WriteHMDLCMDL(const HECL::ProjectPath& outPath, const HECL::ProjectPath& in
++padIt; ++padIt;
/* Surfaces */ /* Surfaces */
for (const HECL::HMDLBuffers::Surface& surf : bufs.m_surfaces) for (const hecl::HMDLBuffers::Surface& surf : bufs.m_surfaces)
{ {
const Mesh::Surface& osurf = surf.m_origSurf; const Mesh::Surface& osurf = surf.m_origSurf;
@ -1506,7 +1506,7 @@ bool WriteHMDLCMDL(const HECL::ProjectPath& outPath, const HECL::ProjectPath& in
} }
/* Ensure final surface's alignment writes zeros */ /* Ensure final surface's alignment writes zeros */
writer.seek(-1, Athena::Current); writer.seek(-1, athena::Current);
writer.writeUByte(0); writer.writeUByte(0);
writer.close(); writer.close();
return true; return true;

View File

@ -3,7 +3,7 @@
namespace DataSpec namespace DataSpec
{ {
LogVisor::LogModule LogDNACommon("Retro::DNACommon"); logvisor::Module LogDNACommon("urde::DNACommon");
SpecBase* g_curSpec = nullptr; SpecBase* g_curSpec = nullptr;
} }

View File

@ -2,48 +2,48 @@
#define __DNA_COMMON_HPP__ #define __DNA_COMMON_HPP__
#include <stdio.h> #include <stdio.h>
#include <Athena/DNAYaml.hpp> #include <athena/DNAYaml.hpp>
#include <NOD/DiscBase.hpp> #include <nod/DiscBase.hpp>
#include "HECL/HECL.hpp" #include "hecl/hecl.hpp"
#include "HECL/Database.hpp" #include "hecl/Database.hpp"
#include "../SpecBase.hpp" #include "../SpecBase.hpp"
namespace DataSpec namespace DataSpec
{ {
extern LogVisor::LogModule LogDNACommon; extern logvisor::Module LogDNACommon;
extern SpecBase* g_curSpec; extern SpecBase* g_curSpec;
/* This comes up a great deal */ /* This comes up a great deal */
typedef Athena::io::DNA<Athena::BigEndian> BigDNA; typedef athena::io::DNA<athena::BigEndian> BigDNA;
typedef Athena::io::DNAYaml<Athena::BigEndian> BigYAML; typedef athena::io::DNAYaml<athena::BigEndian> BigYAML;
/** FourCC with DNA read/write */ /** FourCC with DNA read/write */
class DNAFourCC final : public BigYAML, public HECL::FourCC class DNAFourCC final : public BigYAML, public hecl::FourCC
{ {
public: public:
DNAFourCC() : HECL::FourCC() {} DNAFourCC() : hecl::FourCC() {}
DNAFourCC(const HECL::FourCC& other) DNAFourCC(const hecl::FourCC& other)
: HECL::FourCC() {num = other.toUint32();} : hecl::FourCC() {num = other.toUint32();}
DNAFourCC(const char* name) DNAFourCC(const char* name)
: HECL::FourCC(name) {} : hecl::FourCC(name) {}
DNAFourCC(uint32_t n) DNAFourCC(uint32_t n)
: HECL::FourCC(n) {} : hecl::FourCC(n) {}
Delete expl; Delete expl;
void read(Athena::io::IStreamReader& reader) void read(athena::io::IStreamReader& reader)
{reader.readUBytesToBuf(fcc, 4);} {reader.readUBytesToBuf(fcc, 4);}
void write(Athena::io::IStreamWriter& writer) const void write(athena::io::IStreamWriter& writer) const
{writer.writeUBytes((atUint8*)fcc, 4);} {writer.writeUBytes((atUint8*)fcc, 4);}
void read(Athena::io::YAMLDocReader& reader) void read(athena::io::YAMLDocReader& reader)
{std::string rs = reader.readString(nullptr); strncpy(fcc, rs.c_str(), 4);} {std::string rs = reader.readString(nullptr); strncpy(fcc, rs.c_str(), 4);}
void write(Athena::io::YAMLDocWriter& writer) const void write(athena::io::YAMLDocWriter& writer) const
{writer.writeString(nullptr, std::string(fcc, 4));} {writer.writeString(nullptr, std::string(fcc, 4));}
size_t binarySize(size_t __isz) const size_t binarySize(size_t __isz) const
{return __isz + 4;} {return __isz + 4;}
}; };
using FourCC = HECL::FourCC; using FourCC = hecl::FourCC;
/** PAK 32-bit Unique ID */ /** PAK 32-bit Unique ID */
class UniqueID32 : public BigYAML class UniqueID32 : public BigYAML
@ -52,18 +52,18 @@ class UniqueID32 : public BigYAML
public: public:
Delete expl; Delete expl;
operator bool() const {return m_id != 0xffffffff && m_id != 0;} operator bool() const {return m_id != 0xffffffff && m_id != 0;}
void read(Athena::io::IStreamReader& reader) void read(athena::io::IStreamReader& reader)
{m_id = reader.readUint32Big();} {m_id = reader.readUint32Big();}
void write(Athena::io::IStreamWriter& writer) const void write(athena::io::IStreamWriter& writer) const
{writer.writeUint32Big(m_id);} {writer.writeUint32Big(m_id);}
void read(Athena::io::YAMLDocReader& reader) void read(athena::io::YAMLDocReader& reader)
{m_id = reader.readUint32(nullptr);} {m_id = reader.readUint32(nullptr);}
void write(Athena::io::YAMLDocWriter& writer) const void write(athena::io::YAMLDocWriter& writer) const
{writer.writeUint32(nullptr, m_id);} {writer.writeUint32(nullptr, m_id);}
size_t binarySize(size_t __isz) const size_t binarySize(size_t __isz) const
{return __isz + 4;} {return __isz + 4;}
UniqueID32& operator=(const HECL::ProjectPath& path) UniqueID32& operator=(const hecl::ProjectPath& path)
{m_id = path.hash().val32(); return *this;} {m_id = path.hash().val32(); return *this;}
bool operator!=(const UniqueID32& other) const {return m_id != other.m_id;} bool operator!=(const UniqueID32& other) const {return m_id != other.m_id;}
@ -78,8 +78,8 @@ public:
void clear() {m_id = 0xffffffff;} void clear() {m_id = 0xffffffff;}
UniqueID32() = default; UniqueID32() = default;
UniqueID32(Athena::io::IStreamReader& reader) {read(reader);} UniqueID32(athena::io::IStreamReader& reader) {read(reader);}
UniqueID32(const HECL::ProjectPath& path) {*this = path;} UniqueID32(const hecl::ProjectPath& path) {*this = path;}
UniqueID32(const char* hexStr) UniqueID32(const char* hexStr)
{ {
char copy[9]; char copy[9];
@ -105,18 +105,18 @@ class UniqueID64 : public BigYAML
public: public:
Delete expl; Delete expl;
operator bool() const {return m_id != 0xffffffffffffffff && m_id != 0;} operator bool() const {return m_id != 0xffffffffffffffff && m_id != 0;}
void read(Athena::io::IStreamReader& reader) void read(athena::io::IStreamReader& reader)
{m_id = reader.readUint64Big();} {m_id = reader.readUint64Big();}
void write(Athena::io::IStreamWriter& writer) const void write(athena::io::IStreamWriter& writer) const
{writer.writeUint64Big(m_id);} {writer.writeUint64Big(m_id);}
void read(Athena::io::YAMLDocReader& reader) void read(athena::io::YAMLDocReader& reader)
{m_id = reader.readUint64(nullptr);} {m_id = reader.readUint64(nullptr);}
void write(Athena::io::YAMLDocWriter& writer) const void write(athena::io::YAMLDocWriter& writer) const
{writer.writeUint64(nullptr, m_id);} {writer.writeUint64(nullptr, m_id);}
size_t binarySize(size_t __isz) const size_t binarySize(size_t __isz) const
{return __isz + 8;} {return __isz + 8;}
UniqueID64& operator=(const HECL::ProjectPath& path) UniqueID64& operator=(const hecl::ProjectPath& path)
{m_id = path.hash().val64(); return *this;} {m_id = path.hash().val64(); return *this;}
bool operator!=(const UniqueID64& other) const {return m_id != other.m_id;} bool operator!=(const UniqueID64& other) const {return m_id != other.m_id;}
@ -131,8 +131,8 @@ public:
void clear() {m_id = 0xffffffffffffffff;} void clear() {m_id = 0xffffffffffffffff;}
UniqueID64() = default; UniqueID64() = default;
UniqueID64(Athena::io::IStreamReader& reader) {read(reader);} UniqueID64(athena::io::IStreamReader& reader) {read(reader);}
UniqueID64(const HECL::ProjectPath& path) {*this = path;} UniqueID64(const hecl::ProjectPath& path) {*this = path;}
UniqueID64(const char* hexStr) UniqueID64(const char* hexStr)
{ {
char copy[17]; char copy[17];
@ -174,17 +174,17 @@ public:
UniqueID128() {m_id[0]=0xffffffffffffffff; m_id[1]=0xffffffffffffffff;} UniqueID128() {m_id[0]=0xffffffffffffffff; m_id[1]=0xffffffffffffffff;}
operator bool() const operator bool() const
{return m_id[0] != 0xffffffffffffffff && m_id[0] != 0 && m_id[1] != 0xffffffffffffffff && m_id[1] != 0;} {return m_id[0] != 0xffffffffffffffff && m_id[0] != 0 && m_id[1] != 0xffffffffffffffff && m_id[1] != 0;}
void read(Athena::io::IStreamReader& reader) void read(athena::io::IStreamReader& reader)
{ {
m_id[0] = reader.readUint64Big(); m_id[0] = reader.readUint64Big();
m_id[1] = reader.readUint64Big(); m_id[1] = reader.readUint64Big();
} }
void write(Athena::io::IStreamWriter& writer) const void write(athena::io::IStreamWriter& writer) const
{ {
writer.writeUint64Big(m_id[0]); writer.writeUint64Big(m_id[0]);
writer.writeUint64Big(m_id[1]); writer.writeUint64Big(m_id[1]);
} }
void read(Athena::io::YAMLDocReader& reader) void read(athena::io::YAMLDocReader& reader)
{ {
std::string str = reader.readString(nullptr); std::string str = reader.readString(nullptr);
while (str.size() < 32) while (str.size() < 32)
@ -194,7 +194,7 @@ public:
m_id[0] = strtoull(hStr.c_str(), nullptr, 16); m_id[0] = strtoull(hStr.c_str(), nullptr, 16);
m_id[1] = strtoull(lStr.c_str(), nullptr, 16); m_id[1] = strtoull(lStr.c_str(), nullptr, 16);
} }
void write(Athena::io::YAMLDocWriter& writer) const void write(athena::io::YAMLDocWriter& writer) const
{ {
writer.writeString(nullptr, toString().c_str()); writer.writeString(nullptr, toString().c_str());
} }
@ -238,31 +238,31 @@ public:
template <class IDTYPE> template <class IDTYPE>
class PAKPath : public BigYAML class PAKPath : public BigYAML
{ {
HECL::ProjectPath m_path; hecl::ProjectPath m_path;
IDTYPE m_id; IDTYPE m_id;
public: public:
HECL::ProjectPath getPath() const hecl::ProjectPath getPath() const
{ {
if (m_path) if (m_path)
return m_path; return m_path;
if (!g_curSpec) if (!g_curSpec)
LogDNACommon.report(LogVisor::FatalError, "current DataSpec not set for PAKPath"); LogDNACommon.report(logvisor::Fatal, "current DataSpec not set for PAKPath");
if (m_id) if (m_id)
return g_curSpec->getWorking(m_id); return g_curSpec->getWorking(m_id);
return HECL::ProjectPath(); return hecl::ProjectPath();
} }
operator HECL::ProjectPath() const {return getPath();} operator hecl::ProjectPath() const {return getPath();}
operator const IDTYPE&() const {return m_id;} operator const IDTYPE&() const {return m_id;}
Delete _d; Delete _d;
void read(Athena::io::IStreamReader& reader) void read(athena::io::IStreamReader& reader)
{m_id.read(reader);} {m_id.read(reader);}
void write(Athena::io::IStreamWriter& writer) const void write(athena::io::IStreamWriter& writer) const
{m_id.write(writer);} {m_id.write(writer);}
void read(Athena::io::YAMLDocReader& reader) void read(athena::io::YAMLDocReader& reader)
{ {
if (!g_curSpec) if (!g_curSpec)
LogDNACommon.report(LogVisor::FatalError, "current DataSpec not set for PAKPath"); LogDNACommon.report(logvisor::Fatal, "current DataSpec not set for PAKPath");
std::string path = reader.readString(nullptr); std::string path = reader.readString(nullptr);
if (path.empty()) if (path.empty())
{ {
@ -273,7 +273,7 @@ public:
m_path.assign(g_curSpec->getProject(), path); m_path.assign(g_curSpec->getProject(), path);
m_id = m_path; m_id = m_path;
} }
void write(Athena::io::YAMLDocWriter& writer) const void write(athena::io::YAMLDocWriter& writer) const
{ {
if (m_path) if (m_path)
{ {
@ -295,7 +295,7 @@ class WordBitmap
std::vector<atUint32> m_words; std::vector<atUint32> m_words;
size_t m_bitCount = 0; size_t m_bitCount = 0;
public: public:
void read(Athena::io::IStreamReader& reader, size_t bitCount) void read(athena::io::IStreamReader& reader, size_t bitCount)
{ {
m_bitCount = bitCount; m_bitCount = bitCount;
size_t wordCount = (bitCount + 31) / 32; size_t wordCount = (bitCount + 31) / 32;
@ -304,7 +304,7 @@ public:
for (size_t w=0 ; w<wordCount ; ++w) for (size_t w=0 ; w<wordCount ; ++w)
m_words.push_back(reader.readUint32Big()); m_words.push_back(reader.readUint32Big());
} }
void write(Athena::io::IStreamWriter& writer) const void write(athena::io::IStreamWriter& writer) const
{ {
for (atUint32 word : m_words) for (atUint32 word : m_words)
writer.writeUint32(word); writer.writeUint32(word);
@ -356,7 +356,7 @@ public:
}; };
/** Resource cooker function */ /** Resource cooker function */
typedef std::function<bool(const HECL::ProjectPath&, const HECL::ProjectPath&)> ResCooker; typedef std::function<bool(const hecl::ProjectPath&, const hecl::ProjectPath&)> ResCooker;
} }

View File

@ -8,7 +8,7 @@ namespace DataSpec
{ {
template<class DEAFBABE> template<class DEAFBABE>
void DeafBabeSendToBlender(HECL::BlenderConnection::PyOutStream& os, const DEAFBABE& db) void DeafBabeSendToBlender(hecl::BlenderConnection::PyOutStream& os, const DEAFBABE& db)
{ {
os << "material_index = []\n" os << "material_index = []\n"
"col_bm = bmesh.new()\n"; "col_bm = bmesh.new()\n";

View File

@ -1,7 +1,7 @@
#ifndef _DNACOMMON_GX_HPP_ #ifndef _DNACOMMON_GX_HPP_
#define _DNACOMMON_GX_HPP_ #define _DNACOMMON_GX_HPP_
#include "HECL/Backend/GX.hpp" #include "hecl/Backend/GX.hpp"
using GX = HECL::Backend::GX; using GX = hecl::Backend::GX;
#endif // _DNACOMMON_GX_HPP_ #endif // _DNACOMMON_GX_HPP_

View File

@ -74,13 +74,13 @@ struct MAPA : BigDNA
}; };
void read(Athena::io::IStreamReader& __dna_reader) void read(athena::io::IStreamReader& __dna_reader)
{ {
/* magic */ /* magic */
magic = __dna_reader.readUint32Big(); magic = __dna_reader.readUint32Big();
if (magic != 0xDEADD00D) if (magic != 0xDEADD00D)
{ {
LogDNACommon.report(LogVisor::Error, "invalid MAPA magic"); LogDNACommon.report(logvisor::Error, "invalid MAPA magic");
return; return;
} }
/* version */ /* version */
@ -93,7 +93,7 @@ struct MAPA : BigDNA
header.reset(new HeaderMP3); header.reset(new HeaderMP3);
else else
{ {
LogDNACommon.report(LogVisor::Error, "invalid MAPA version"); LogDNACommon.report(logvisor::Error, "invalid MAPA version");
return; return;
} }
@ -118,7 +118,7 @@ struct MAPA : BigDNA
__dna_reader.enumerate(surfaces, header->surfaceCount()); __dna_reader.enumerate(surfaces, header->surfaceCount());
} }
void write(Athena::io::IStreamWriter& __dna_writer) const void write(athena::io::IStreamWriter& __dna_writer) const
{ {
/* magic */ /* magic */
__dna_writer.writeUint32Big(magic); __dna_writer.writeUint32Big(magic);
@ -189,9 +189,9 @@ struct MAPA : BigDNA
Value<Type> type; Value<Type> type;
Value<atUint32> unknown1; Value<atUint32> unknown1;
Value<atUint32> sclyId; Value<atUint32> sclyId;
Seek<DNA_COUNT(4), Athena::Current> seek1; Seek<DNA_COUNT(4), athena::Current> seek1;
Value<atVec4f> transformMtx[3]; Value<atVec4f> transformMtx[3];
Seek<DNA_COUNT(0x10), Athena::Current> seek2; Seek<DNA_COUNT(0x10), athena::Current> seek2;
virtual ~MappableObjectMP1_2() {} virtual ~MappableObjectMP1_2() {}
}; };
@ -202,9 +202,9 @@ struct MAPA : BigDNA
Value<atUint32> unknown1; Value<atUint32> unknown1;
Value<atUint32> sclyId; Value<atUint32> sclyId;
Buffer<DNA_COUNT(0x10)> unknownHash; Buffer<DNA_COUNT(0x10)> unknownHash;
Seek<DNA_COUNT(4), Athena::Current> seek1; Seek<DNA_COUNT(4), athena::Current> seek1;
Value<atVec4f> transformMtx[3]; Value<atVec4f> transformMtx[3];
Seek<DNA_COUNT(0x10), Athena::Current> seek2; Seek<DNA_COUNT(0x10), athena::Current> seek2;
virtual ~MappableObjectMP3() {} virtual ~MappableObjectMP3() {}
}; };
@ -252,21 +252,21 @@ struct MAPA : BigDNA
}; };
template <typename PAKRouter> template <typename PAKRouter>
bool ReadMAPAToBlender(HECL::BlenderConnection& conn, bool ReadMAPAToBlender(hecl::BlenderConnection& conn,
const MAPA& mapa, const MAPA& mapa,
const HECL::ProjectPath& outPath, const hecl::ProjectPath& outPath,
PAKRouter& pakRouter, PAKRouter& pakRouter,
const typename PAKRouter::EntryType& entry, const typename PAKRouter::EntryType& entry,
bool force) bool force)
{ {
/* Rename MAPA for consistency */ /* Rename MAPA for consistency */
HECL::ProjectPath mapaPath(outPath.getParentPath(), _S("!map.blend")); hecl::ProjectPath mapaPath(outPath.getParentPath(), _S("!map.blend"));
if (!force && mapaPath.getPathType() == HECL::ProjectPath::Type::File) if (!force && mapaPath.getPathType() == hecl::ProjectPath::Type::File)
return true; return true;
if (!conn.createBlend(mapaPath, HECL::BlenderConnection::BlendType::MapArea)) if (!conn.createBlend(mapaPath, hecl::BlenderConnection::BlendType::MapArea))
return false; return false;
HECL::BlenderConnection::PyOutStream os = conn.beginPythonOut(true); hecl::BlenderConnection::PyOutStream os = conn.beginPythonOut(true);
os << "import bpy, bmesh\n" os << "import bpy, bmesh\n"
"from mathutils import Matrix\n" "from mathutils import Matrix\n"
@ -450,8 +450,8 @@ bool ReadMAPAToBlender(HECL::BlenderConnection& conn,
"bm.free()\n"; "bm.free()\n";
/* World background */ /* World background */
HECL::ProjectPath worldBlend(outPath.getParentPath().getParentPath(), "!world.blend"); hecl::ProjectPath worldBlend(outPath.getParentPath().getParentPath(), "!world.blend");
if (worldBlend.getPathType() == HECL::ProjectPath::Type::File) if (worldBlend.getPathType() == hecl::ProjectPath::Type::File)
os.linkBackground("//../!world.blend", "World"); os.linkBackground("//../!world.blend", "World");
os.centerView(); os.centerView();

View File

@ -3,7 +3,7 @@
#include "DNACommon.hpp" #include "DNACommon.hpp"
#include "BlenderConnection.hpp" #include "BlenderConnection.hpp"
#include "CVector3f.hpp" #include "zeus/CVector3f.hpp"
namespace DataSpec namespace DataSpec
{ {
@ -11,31 +11,23 @@ namespace DNAMLVL
{ {
template <class PAKRouter, typename MLVL> template <class PAKRouter, typename MLVL>
bool ReadMLVLToBlender(HECL::BlenderConnection& conn, bool ReadMLVLToBlender(hecl::BlenderConnection& conn,
const MLVL& mlvl, const MLVL& mlvl,
const HECL::ProjectPath& outPath, const hecl::ProjectPath& outPath,
PAKRouter& pakRouter, PAKRouter& pakRouter,
const typename PAKRouter::EntryType& entry, const typename PAKRouter::EntryType& entry,
bool force, bool force,
std::function<void(const HECL::SystemChar*)> fileChanged) std::function<void(const hecl::SystemChar*)> fileChanged)
{ {
/* Rename MLVL for consistency */ /* Rename MLVL for consistency */
HECL::ProjectPath mlvlPath(outPath.getParentPath(), _S("!world.blend")); hecl::ProjectPath mlvlPath(outPath.getParentPath(), _S("!world.blend"));
if (!force && mlvlPath.getPathType() == HECL::ProjectPath::Type::File) if (!force && mlvlPath.getPathType() == hecl::ProjectPath::Type::File)
return true; return true;
/* Link Skybox CMDL */
const typename PAKRouter::EntryType* skyboxEntry = pakRouter.lookupEntry(mlvl.worldSkyboxId);
if (skyboxEntry)
{
HECL::ProjectPath skyboxPath = pakRouter.getWorking(skyboxEntry);
HECL::ProjectPath(outPath.getParentPath(), _S("!skybox.blend")).makeLinkTo(skyboxPath);
}
/* Create World Blend */ /* Create World Blend */
if (!conn.createBlend(mlvlPath, HECL::BlenderConnection::BlendType::World)) if (!conn.createBlend(mlvlPath, hecl::BlenderConnection::BlendType::World))
return false; return false;
HECL::BlenderConnection::PyOutStream os = conn.beginPythonOut(true); hecl::BlenderConnection::PyOutStream os = conn.beginPythonOut(true);
os.format("import bpy\n" os.format("import bpy\n"
"import bmesh\n" "import bmesh\n"
"from mathutils import Matrix\n" "from mathutils import Matrix\n"
@ -52,7 +44,7 @@ bool ReadMLVLToBlender(HECL::BlenderConnection& conn,
for (const auto& area : mlvl.areas) for (const auto& area : mlvl.areas)
{ {
const typename PAKRouter::EntryType* mreaEntry = pakRouter.lookupEntry(area.areaMREAId); const typename PAKRouter::EntryType* mreaEntry = pakRouter.lookupEntry(area.areaMREAId);
HECL::SystemUTF8View areaDirName(*mreaEntry->unique.m_areaName); hecl::SystemUTF8View areaDirName(*mreaEntry->unique.m_areaName);
os.AABBToBMesh(area.aabb[0], area.aabb[1]); os.AABBToBMesh(area.aabb[0], area.aabb[1]);
os.format("box_mesh = bpy.data.meshes.new('''%s''')\n" os.format("box_mesh = bpy.data.meshes.new('''%s''')\n"
@ -76,14 +68,14 @@ bool ReadMLVLToBlender(HECL::BlenderConnection& conn,
for (const auto& dock : area.docks) for (const auto& dock : area.docks)
{ {
os << "bm = bmesh.new()\n"; os << "bm = bmesh.new()\n";
Zeus::CVector3f pvAvg; zeus::CVector3f pvAvg;
for (const atVec3f& pv : dock.planeVerts) for (const atVec3f& pv : dock.planeVerts)
pvAvg += pv; pvAvg += pv;
pvAvg /= dock.planeVerts.size(); pvAvg /= dock.planeVerts.size();
int idx = 0; int idx = 0;
for (const atVec3f& pv : dock.planeVerts) for (const atVec3f& pv : dock.planeVerts)
{ {
Zeus::CVector3f pvRel = Zeus::CVector3f(pv) - pvAvg; zeus::CVector3f pvRel = zeus::CVector3f(pv) - pvAvg;
os.format("bm.verts.new((%f,%f,%f))\n" os.format("bm.verts.new((%f,%f,%f))\n"
"bm.verts.ensure_lookup_table()\n", "bm.verts.ensure_lookup_table()\n",
pvRel[0], pvRel[1], pvRel[2]); pvRel[0], pvRel[1], pvRel[2]);

View File

@ -16,7 +16,7 @@ struct NamedResourceCatalog : BigYAML
String<-1> name; String<-1> name;
IDType uid; IDType uid;
void read(Athena::io::IStreamReader& __dna_reader) void read(athena::io::IStreamReader& __dna_reader)
{ {
/* type */ /* type */
type.read(__dna_reader); type.read(__dna_reader);
@ -26,7 +26,7 @@ struct NamedResourceCatalog : BigYAML
uid.read(__dna_reader); uid.read(__dna_reader);
} }
void write(Athena::io::IStreamWriter& __dna_writer) const void write(athena::io::IStreamWriter& __dna_writer) const
{ {
/* type */ /* type */
type.write(__dna_writer); type.write(__dna_writer);
@ -36,7 +36,7 @@ struct NamedResourceCatalog : BigYAML
uid.write(__dna_writer); uid.write(__dna_writer);
} }
void read(Athena::io::YAMLDocReader& __dna_docin) void read(athena::io::YAMLDocReader& __dna_docin)
{ {
/* type */ /* type */
__dna_docin.enumerate("type", type); __dna_docin.enumerate("type", type);
@ -46,7 +46,7 @@ struct NamedResourceCatalog : BigYAML
__dna_docin.enumerate("uid", uid); __dna_docin.enumerate("uid", uid);
} }
void write(Athena::io::YAMLDocWriter& __dna_docout) const void write(athena::io::YAMLDocWriter& __dna_docout) const
{ {
/* type */ /* type */
__dna_docout.enumerate("type", type); __dna_docout.enumerate("type", type);
@ -56,7 +56,7 @@ struct NamedResourceCatalog : BigYAML
__dna_docout.enumerate("uid", uid); __dna_docout.enumerate("uid", uid);
} }
static const char* DNAType() { return "DataSpec::DNACommon::NameResourceCatalog::NamedResource"; } static const char* DNAType() { return "DataSpec::DNACommon::NameResourceCatalogvisor::NamedResource"; }
size_t binarySize(size_t __isz) const size_t binarySize(size_t __isz) const
{ {
@ -68,7 +68,7 @@ struct NamedResourceCatalog : BigYAML
}; };
Vector<NamedResource, DNA_COUNT(namedResCount)> namedResources; Vector<NamedResource, DNA_COUNT(namedResCount)> namedResources;
void read(Athena::io::IStreamReader& __dna_reader) void read(athena::io::IStreamReader& __dna_reader)
{ {
/* namedResCount */ /* namedResCount */
namedResCount = __dna_reader.readUint32Big(); namedResCount = __dna_reader.readUint32Big();
@ -76,7 +76,7 @@ struct NamedResourceCatalog : BigYAML
__dna_reader.enumerate(namedResources, namedResCount); __dna_reader.enumerate(namedResources, namedResCount);
} }
void write(Athena::io::IStreamWriter& __dna_writer) const void write(athena::io::IStreamWriter& __dna_writer) const
{ {
/* namedResCount */ /* namedResCount */
__dna_writer.writeUint32Big(namedResCount); __dna_writer.writeUint32Big(namedResCount);
@ -84,18 +84,14 @@ struct NamedResourceCatalog : BigYAML
__dna_writer.enumerate(namedResources); __dna_writer.enumerate(namedResources);
} }
void read(Athena::io::YAMLDocReader& __dna_docin) void read(athena::io::YAMLDocReader& __dna_docin)
{ {
/* namedResCount */
namedResCount = __dna_docin.readUint32("namedResCount");
/* namedResources */ /* namedResources */
__dna_docin.enumerate("namedResources", namedResources, namedResCount); namedResCount = __dna_docin.enumerate("namedResources", namedResources);
} }
void write(Athena::io::YAMLDocWriter& __dna_docout) const void write(athena::io::YAMLDocWriter& __dna_docout) const
{ {
/* namedResCount */
__dna_docout.writeUint32("namedResCount", namedResCount);
/* namedResources */ /* namedResources */
__dna_docout.enumerate("namedResources", namedResources); __dna_docout.enumerate("namedResources", namedResources);
} }

View File

@ -8,7 +8,7 @@ namespace DataSpec
{ {
/* PAK entry stream reader */ /* PAK entry stream reader */
class PAKEntryReadStream : public Athena::io::IStreamReader class PAKEntryReadStream : public athena::io::IStreamReader
{ {
std::unique_ptr<atUint8[]> m_buf; std::unique_ptr<atUint8[]> m_buf;
atUint64 m_sz; atUint64 m_sz;
@ -24,18 +24,18 @@ public:
: m_buf(std::move(buf)), m_sz(sz), m_pos(pos) : m_buf(std::move(buf)), m_sz(sz), m_pos(pos)
{ {
if (m_pos >= m_sz) if (m_pos >= m_sz)
LogDNACommon.report(LogVisor::FatalError, "PAK stream cursor overrun"); LogDNACommon.report(logvisor::Fatal, "PAK stream cursor overrun");
} }
void seek(atInt64 pos, Athena::SeekOrigin origin) void seek(atInt64 pos, athena::SeekOrigin origin)
{ {
if (origin == Athena::Begin) if (origin == athena::Begin)
m_pos = pos; m_pos = pos;
else if (origin == Athena::Current) else if (origin == athena::Current)
m_pos += pos; m_pos += pos;
else if (origin == Athena::End) else if (origin == athena::End)
m_pos = m_sz + pos; m_pos = m_sz + pos;
if (m_pos > m_sz) if (m_pos > m_sz)
LogDNACommon.report(LogVisor::FatalError, "PAK stream cursor overrun"); LogDNACommon.report(logvisor::Fatal, "PAK stream cursor overrun");
} }
atUint64 position() const {return m_pos;} atUint64 position() const {return m_pos;}
atUint64 length() const {return m_sz;} atUint64 length() const {return m_sz;}
@ -61,9 +61,9 @@ struct UniqueResult
Area, Area,
Layer Layer
} m_type = Type::NotFound; } m_type = Type::NotFound;
const HECL::SystemString* m_levelName = nullptr; const hecl::SystemString* m_levelName = nullptr;
const HECL::SystemString* m_areaName = nullptr; const hecl::SystemString* m_areaName = nullptr;
const HECL::SystemString* m_layerName = nullptr; const hecl::SystemString* m_layerName = nullptr;
UniqueResult() = default; UniqueResult() = default;
UniqueResult(Type tp) : m_type(tp) {} UniqueResult(Type tp) : m_type(tp) {}
@ -72,7 +72,7 @@ struct UniqueResult
{ {
UniqueResult::Type resultType = UniqueResult::Type::NotFound; UniqueResult::Type resultType = UniqueResult::Type::NotFound;
bool foundOneLayer = false; bool foundOneLayer = false;
const HECL::SystemString* levelName = nullptr; const hecl::SystemString* levelName = nullptr;
typename PAKBRIDGE::PAKType::IDType levelId; typename PAKBRIDGE::PAKType::IDType levelId;
typename PAKBRIDGE::PAKType::IDType areaId; typename PAKBRIDGE::PAKType::IDType areaId;
unsigned layerIdx; unsigned layerIdx;
@ -163,12 +163,12 @@ struct UniqueResult
} }
} }
HECL::ProjectPath uniquePath(const HECL::ProjectPath& pakPath) const hecl::ProjectPath uniquePath(const hecl::ProjectPath& pakPath) const
{ {
if (m_type == Type::Pak) if (m_type == Type::Pak)
return pakPath; return pakPath;
HECL::ProjectPath levelDir; hecl::ProjectPath levelDir;
if (m_levelName) if (m_levelName)
levelDir.assign(pakPath, *m_levelName); levelDir.assign(pakPath, *m_levelName);
else else
@ -177,15 +177,15 @@ struct UniqueResult
if (m_type == Type::Area) if (m_type == Type::Area)
{ {
HECL::ProjectPath areaDir(levelDir, *m_areaName); hecl::ProjectPath areaDir(levelDir, *m_areaName);
areaDir.makeDir(); areaDir.makeDir();
return areaDir; return areaDir;
} }
else if (m_type == Type::Layer) else if (m_type == Type::Layer)
{ {
HECL::ProjectPath areaDir(levelDir, *m_areaName); hecl::ProjectPath areaDir(levelDir, *m_areaName);
areaDir.makeDir(); areaDir.makeDir();
HECL::ProjectPath layerDir(areaDir, *m_layerName); hecl::ProjectPath layerDir(areaDir, *m_layerName);
layerDir.makeDir(); layerDir.makeDir();
return layerDir; return layerDir;
} }
@ -201,11 +201,11 @@ class PAKRouter;
template <class PAKBRIDGE> template <class PAKBRIDGE>
struct ResExtractor struct ResExtractor
{ {
std::function<bool(PAKEntryReadStream&, const HECL::ProjectPath&)> func_a; std::function<bool(PAKEntryReadStream&, const hecl::ProjectPath&)> func_a;
std::function<bool(const SpecBase&, PAKEntryReadStream&, const HECL::ProjectPath&, PAKRouter<PAKBRIDGE>&, std::function<bool(const SpecBase&, PAKEntryReadStream&, const hecl::ProjectPath&, PAKRouter<PAKBRIDGE>&,
const typename PAKBRIDGE::PAKType::Entry&, bool, const typename PAKBRIDGE::PAKType::Entry&, bool,
std::function<void(const HECL::SystemChar*)>)> func_b; std::function<void(const hecl::SystemChar*)>)> func_b;
const HECL::SystemChar* fileExts[4]; const hecl::SystemChar* fileExts[4];
unsigned weight; unsigned weight;
std::function<void(const SpecBase&, PAKEntryReadStream&, PAKRouter<PAKBRIDGE>&, std::function<void(const SpecBase&, PAKEntryReadStream&, PAKRouter<PAKBRIDGE>&,
typename PAKBRIDGE::PAKType::Entry&)> func_name; typename PAKBRIDGE::PAKType::Entry&)> func_name;
@ -215,13 +215,13 @@ struct ResExtractor
template <class IDType> template <class IDType>
struct Level struct Level
{ {
HECL::SystemString name; hecl::SystemString name;
struct Area struct Area
{ {
HECL::SystemString name; hecl::SystemString name;
struct Layer struct Layer
{ {
HECL::SystemString name; hecl::SystemString name;
bool active; bool active;
std::unordered_set<IDType> resources; std::unordered_set<IDType> resources;
}; };
@ -244,19 +244,19 @@ private:
NamedResourceCatalog<IDType> m_catalog; NamedResourceCatalog<IDType> m_catalog;
const SpecBase& m_dataSpec; const SpecBase& m_dataSpec;
const std::vector<BRIDGETYPE>* m_bridges = nullptr; const std::vector<BRIDGETYPE>* m_bridges = nullptr;
std::vector<std::pair<HECL::ProjectPath,HECL::ProjectPath>> m_bridgePaths; std::vector<std::pair<hecl::ProjectPath,hecl::ProjectPath>> m_bridgePaths;
size_t m_curBridgeIdx = 0; size_t m_curBridgeIdx = 0;
const HECL::ProjectPath& m_gameWorking; const hecl::ProjectPath& m_gameWorking;
const HECL::ProjectPath& m_gameCooked; const hecl::ProjectPath& m_gameCooked;
HECL::ProjectPath m_sharedWorking; hecl::ProjectPath m_sharedWorking;
HECL::ProjectPath m_sharedCooked; hecl::ProjectPath m_sharedCooked;
const PAKType* m_pak = nullptr; const PAKType* m_pak = nullptr;
const NOD::Node* m_node = nullptr; const nod::Node* m_node = nullptr;
std::unordered_map<IDType, std::pair<size_t, EntryType*>> m_uniqueEntries; std::unordered_map<IDType, std::pair<size_t, EntryType*>> m_uniqueEntries;
std::unordered_map<IDType, std::pair<size_t, EntryType*>> m_sharedEntries; std::unordered_map<IDType, std::pair<size_t, EntryType*>> m_sharedEntries;
std::unordered_map<IDType, RigPair> m_cmdlRigs; std::unordered_map<IDType, RigPair> m_cmdlRigs;
public: public:
PAKRouter(const SpecBase& dataSpec, const HECL::ProjectPath& working, const HECL::ProjectPath& cooked) PAKRouter(const SpecBase& dataSpec, const hecl::ProjectPath& working, const hecl::ProjectPath& cooked)
: m_dataSpec(dataSpec), : m_dataSpec(dataSpec),
m_gameWorking(working), m_gameCooked(cooked), m_gameWorking(working), m_gameCooked(cooked),
m_sharedWorking(working, "Shared"), m_sharedCooked(cooked, "Shared") {} m_sharedWorking(working, "Shared"), m_sharedCooked(cooked, "Shared") {}
@ -277,13 +277,13 @@ public:
for (BRIDGETYPE& bridge : bridges) for (BRIDGETYPE& bridge : bridges)
{ {
const std::string& name = bridge.getName(); const std::string& name = bridge.getName();
HECL::SystemStringView sysName(name); hecl::SystemStringView sysName(name);
HECL::SystemString::const_iterator extit = sysName.sys_str().end() - 4; hecl::SystemString::const_iterator extit = sysName.sys_str().end() - 4;
HECL::SystemString baseName(sysName.sys_str().begin(), extit); hecl::SystemString baseName(sysName.sys_str().begin(), extit);
m_bridgePaths.emplace_back(std::make_pair(HECL::ProjectPath(m_gameWorking, baseName), m_bridgePaths.emplace_back(std::make_pair(hecl::ProjectPath(m_gameWorking, baseName),
HECL::ProjectPath(m_gameCooked, baseName))); hecl::ProjectPath(m_gameCooked, baseName)));
/* Index this PAK */ /* Index this PAK */
bridge.build(); bridge.build();
@ -319,8 +319,8 @@ public:
++bridgeIdx; ++bridgeIdx;
} }
HECL::SystemString catalogPath = HECL::ProjectPath(m_gameCooked, "catalog.yaml").getAbsolutePath(); hecl::SystemString catalogPath = hecl::ProjectPath(m_gameCooked, "catalog.yaml").getAbsolutePath();
FILE* catalog = HECL::Fopen(catalogPath.c_str(), _S("wb")); FILE* catalog = hecl::Fopen(catalogPath.c_str(), _S("wb"));
if (catalog) if (catalog)
{ {
m_catalog.toYAMLFile(catalog); m_catalog.toYAMLFile(catalog);
@ -346,150 +346,132 @@ public:
++pit; ++pit;
++bridgeIdx; ++bridgeIdx;
} }
LogDNACommon.report(LogVisor::FatalError, "PAKBridge provided to PAKRouter::enterPAKBridge() was not part of build()"); LogDNACommon.report(logvisor::Fatal, "PAKBridge provided to PAKRouter::enterPAKBridge() was not part of build()");
} }
HECL::ProjectPath getWorking(const EntryType* entry, hecl::ProjectPath getWorking(const EntryType* entry,
const ResExtractor<BRIDGETYPE>& extractor) const const ResExtractor<BRIDGETYPE>& extractor) const
{ {
if (!m_pak) if (!m_pak)
LogDNACommon.report(LogVisor::FatalError, LogDNACommon.report(logvisor::Fatal,
"PAKRouter::enterPAKBridge() must be called before PAKRouter::getWorkingPath()"); "PAKRouter::enterPAKBridge() must be called before PAKRouter::getWorkingPath()");
if (m_pak->m_noShare) if (m_pak->m_noShare)
{ {
const EntryType* singleSearch = m_pak->lookupEntry(entry->id); const EntryType* singleSearch = m_pak->lookupEntry(entry->id);
if (singleSearch) if (singleSearch)
{ {
const HECL::ProjectPath& pakPath = m_bridgePaths[m_curBridgeIdx].first; const hecl::ProjectPath& pakPath = m_bridgePaths[m_curBridgeIdx].first;
pakPath.makeDir(); pakPath.makeDir();
#if HECL_UCS2 #if HECL_UCS2
HECL::SystemString entName = HECL::UTF8ToWide(m_pak->bestEntryName(*entry)); hecl::SystemString entName = hecl::UTF8ToWide(m_pak->bestEntryName(*entry));
#else #else
HECL::SystemString entName = m_pak->bestEntryName(*entry); hecl::SystemString entName = m_pak->bestEntryName(*entry);
#endif #endif
if (extractor.fileExts[0] && !extractor.fileExts[1]) if (extractor.fileExts[0] && !extractor.fileExts[1])
entName += extractor.fileExts[0]; entName += extractor.fileExts[0];
return HECL::ProjectPath(pakPath, entName); return hecl::ProjectPath(pakPath, entName);
} }
} }
auto uniqueSearch = m_uniqueEntries.find(entry->id); auto uniqueSearch = m_uniqueEntries.find(entry->id);
if (uniqueSearch != m_uniqueEntries.end()) if (uniqueSearch != m_uniqueEntries.end())
{ {
const HECL::ProjectPath& pakPath = m_bridgePaths[uniqueSearch->second.first].first; const hecl::ProjectPath& pakPath = m_bridgePaths[uniqueSearch->second.first].first;
pakPath.makeDir(); pakPath.makeDir();
HECL::ProjectPath uniquePath = entry->unique.uniquePath(pakPath); hecl::ProjectPath uniquePath = entry->unique.uniquePath(pakPath);
#if HECL_UCS2 #if HECL_UCS2
HECL::SystemString entName = HECL::UTF8ToWide(m_pak->bestEntryName(*entry)); hecl::SystemString entName = hecl::UTF8ToWide(m_pak->bestEntryName(*entry));
#else #else
HECL::SystemString entName = m_pak->bestEntryName(*entry); hecl::SystemString entName = m_pak->bestEntryName(*entry);
#endif #endif
if (extractor.fileExts[0] && !extractor.fileExts[1]) if (extractor.fileExts[0] && !extractor.fileExts[1])
entName += extractor.fileExts[0]; entName += extractor.fileExts[0];
return HECL::ProjectPath(uniquePath, entName); return hecl::ProjectPath(uniquePath, entName);
} }
auto sharedSearch = m_sharedEntries.find(entry->id); auto sharedSearch = m_sharedEntries.find(entry->id);
if (sharedSearch != m_sharedEntries.end()) if (sharedSearch != m_sharedEntries.end())
{ {
const HECL::ProjectPath& pakPath = m_bridgePaths[m_curBridgeIdx].first; const hecl::ProjectPath& pakPath = m_bridgePaths[m_curBridgeIdx].first;
HECL::ProjectPath uniquePathPre = entry->unique.uniquePath(pakPath); hecl::ProjectPath uniquePathPre = entry->unique.uniquePath(pakPath);
#if HECL_UCS2 #if HECL_UCS2
HECL::SystemString entBase = HECL::UTF8ToWide(m_pak->bestEntryName(*entry)); hecl::SystemString entBase = hecl::UTF8ToWide(m_pak->bestEntryName(*entry));
#else #else
HECL::SystemString entBase = m_pak->bestEntryName(*entry); hecl::SystemString entBase = m_pak->bestEntryName(*entry);
#endif #endif
HECL::SystemString entName = entBase; hecl::SystemString entName = entBase;
if (extractor.fileExts[0] && !extractor.fileExts[1]) if (extractor.fileExts[0] && !extractor.fileExts[1])
entName += extractor.fileExts[0]; entName += extractor.fileExts[0];
HECL::ProjectPath sharedPath(m_sharedWorking, entName); hecl::ProjectPath sharedPath(m_sharedWorking, entName);
HECL::ProjectPath uniquePath(uniquePathPre, entName);
if (extractor.func_a || extractor.func_b)
{
if (extractor.fileExts[0] && !extractor.fileExts[1])
uniquePath.makeLinkTo(sharedPath);
else
{
for (int e=0 ; e<4 ; ++e)
{
if (!extractor.fileExts[e])
break;
HECL::SystemString entName = entBase + extractor.fileExts[e];
HECL::ProjectPath sharedPath(m_sharedWorking, entName);
HECL::ProjectPath uniquePath(uniquePathPre, entName);
uniquePath.makeLinkTo(sharedPath);
}
}
}
m_sharedWorking.makeDir(); m_sharedWorking.makeDir();
return sharedPath; return sharedPath;
} }
LogDNACommon.report(LogVisor::FatalError, "Unable to find entry %s", entry->id.toString().c_str()); LogDNACommon.report(logvisor::Fatal, "Unable to find entry %s", entry->id.toString().c_str());
return HECL::ProjectPath(); return hecl::ProjectPath();
} }
HECL::ProjectPath getWorking(const EntryType* entry) const hecl::ProjectPath getWorking(const EntryType* entry) const
{ {
return getWorking(entry, BRIDGETYPE::LookupExtractor(*entry)); return getWorking(entry, BRIDGETYPE::LookupExtractor(*entry));
} }
HECL::ProjectPath getWorking(const IDType& id) const hecl::ProjectPath getWorking(const IDType& id) const
{ {
return getWorking(lookupEntry(id)); return getWorking(lookupEntry(id));
} }
HECL::ProjectPath getCooked(const EntryType* entry) const hecl::ProjectPath getCooked(const EntryType* entry) const
{ {
if (!m_pak) if (!m_pak)
LogDNACommon.report(LogVisor::FatalError, LogDNACommon.report(logvisor::Fatal,
"PAKRouter::enterPAKBridge() must be called before PAKRouter::getCookedPath()"); "PAKRouter::enterPAKBridge() must be called before PAKRouter::getCookedPath()");
if (m_pak->m_noShare) if (m_pak->m_noShare)
{ {
const EntryType* singleSearch = m_pak->lookupEntry(entry->id); const EntryType* singleSearch = m_pak->lookupEntry(entry->id);
if (singleSearch) if (singleSearch)
{ {
const HECL::ProjectPath& pakPath = m_bridgePaths[m_curBridgeIdx].second; const hecl::ProjectPath& pakPath = m_bridgePaths[m_curBridgeIdx].second;
pakPath.makeDir(); pakPath.makeDir();
return HECL::ProjectPath(pakPath, m_pak->bestEntryName(*entry)); return hecl::ProjectPath(pakPath, m_pak->bestEntryName(*entry));
} }
} }
auto uniqueSearch = m_uniqueEntries.find(entry->id); auto uniqueSearch = m_uniqueEntries.find(entry->id);
if (uniqueSearch != m_uniqueEntries.end()) if (uniqueSearch != m_uniqueEntries.end())
{ {
const HECL::ProjectPath& pakPath = m_bridgePaths[uniqueSearch->second.first].second; const hecl::ProjectPath& pakPath = m_bridgePaths[uniqueSearch->second.first].second;
pakPath.makeDir(); pakPath.makeDir();
HECL::ProjectPath uniquePath = entry->unique.uniquePath(pakPath); hecl::ProjectPath uniquePath = entry->unique.uniquePath(pakPath);
return HECL::ProjectPath(uniquePath, m_pak->bestEntryName(*entry)); return hecl::ProjectPath(uniquePath, m_pak->bestEntryName(*entry));
} }
auto sharedSearch = m_sharedEntries.find(entry->id); auto sharedSearch = m_sharedEntries.find(entry->id);
if (sharedSearch != m_sharedEntries.end()) if (sharedSearch != m_sharedEntries.end())
{ {
m_sharedCooked.makeDir(); m_sharedCooked.makeDir();
return HECL::ProjectPath(m_sharedCooked, m_pak->bestEntryName(*entry)); return hecl::ProjectPath(m_sharedCooked, m_pak->bestEntryName(*entry));
} }
LogDNACommon.report(LogVisor::FatalError, "Unable to find entry %s", entry->id.toString().c_str()); LogDNACommon.report(logvisor::Fatal, "Unable to find entry %s", entry->id.toString().c_str());
return HECL::ProjectPath(); return hecl::ProjectPath();
} }
HECL::ProjectPath getCooked(const IDType& id) const hecl::ProjectPath getCooked(const IDType& id) const
{ {
return getCooked(lookupEntry(id)); return getCooked(lookupEntry(id));
} }
HECL::SystemString getResourceRelativePath(const EntryType& a, const IDType& b) const hecl::SystemString getResourceRelativePath(const EntryType& a, const IDType& b) const
{ {
if (!m_pak) if (!m_pak)
LogDNACommon.report(LogVisor::FatalError, LogDNACommon.report(logvisor::Fatal,
"PAKRouter::enterPAKBridge() must be called before PAKRouter::getResourceRelativePath()"); "PAKRouter::enterPAKBridge() must be called before PAKRouter::getResourceRelativePath()");
const typename BRIDGETYPE::PAKType::Entry* be = lookupEntry(b); const typename BRIDGETYPE::PAKType::Entry* be = lookupEntry(b);
if (!be) if (!be)
return HECL::SystemString(); return hecl::SystemString();
HECL::ProjectPath aPath = getWorking(&a, BRIDGETYPE::LookupExtractor(a)); hecl::ProjectPath aPath = getWorking(&a, BRIDGETYPE::LookupExtractor(a));
HECL::SystemString ret; hecl::SystemString ret;
for (int i=0 ; i<aPath.levelCount() ; ++i) for (int i=0 ; i<aPath.levelCount() ; ++i)
ret += _S("../"); ret += _S("../");
HECL::ProjectPath bPath = getWorking(be, BRIDGETYPE::LookupExtractor(*be)); hecl::ProjectPath bPath = getWorking(be, BRIDGETYPE::LookupExtractor(*be));
ret += bPath.getRelativePath(); ret += bPath.getRelativePath();
return ret; return ret;
} }
@ -497,7 +479,7 @@ public:
std::string getBestEntryName(const EntryType& entry) const std::string getBestEntryName(const EntryType& entry) const
{ {
if (!m_pak) if (!m_pak)
LogDNACommon.report(LogVisor::FatalError, LogDNACommon.report(logvisor::Fatal,
"PAKRouter::enterPAKBridge() must be called before PAKRouter::getBestEntryName()"); "PAKRouter::enterPAKBridge() must be called before PAKRouter::getBestEntryName()");
return m_pak->bestEntryName(entry); return m_pak->bestEntryName(entry);
} }
@ -505,7 +487,7 @@ public:
std::string getBestEntryName(const IDType& entry) const std::string getBestEntryName(const IDType& entry) const
{ {
if (!m_pak) if (!m_pak)
LogDNACommon.report(LogVisor::FatalError, LogDNACommon.report(logvisor::Fatal,
"PAKRouter::enterPAKBridge() must be called before PAKRouter::getBestEntryName()"); "PAKRouter::enterPAKBridge() must be called before PAKRouter::getBestEntryName()");
const typename BRIDGETYPE::PAKType::Entry* e = m_pak->lookupEntry(entry); const typename BRIDGETYPE::PAKType::Entry* e = m_pak->lookupEntry(entry);
if (!e) if (!e)
@ -514,7 +496,7 @@ public:
} }
bool extractResources(const BRIDGETYPE& pakBridge, bool force, bool extractResources(const BRIDGETYPE& pakBridge, bool force,
std::function<void(const HECL::SystemChar*, float)> progress) std::function<void(const hecl::SystemChar*, float)> progress)
{ {
enterPAKBridge(pakBridge); enterPAKBridge(pakBridge);
size_t count = 0; size_t count = 0;
@ -529,24 +511,24 @@ public:
continue; continue;
std::string bestName = getBestEntryName(*item); std::string bestName = getBestEntryName(*item);
HECL::SystemStringView bestNameView(bestName); hecl::SystemStringView bestNameView(bestName);
float thisFac = ++count / fsz; float thisFac = ++count / fsz;
progress(bestNameView.sys_str().c_str(), thisFac); progress(bestNameView.sys_str().c_str(), thisFac);
/* TODO: Position after extracted item */ /* TODO: Position after extracted item */
HECL::ProjectPath cooked = getCooked(item); hecl::ProjectPath cooked = getCooked(item);
if (force || cooked.getPathType() == HECL::ProjectPath::Type::None) if (force || cooked.getPathType() == hecl::ProjectPath::Type::None)
{ {
PAKEntryReadStream s = item->beginReadStream(*m_node); PAKEntryReadStream s = item->beginReadStream(*m_node);
FILE* fout = HECL::Fopen(cooked.getAbsolutePath().c_str(), _S("wb")); FILE* fout = hecl::Fopen(cooked.getAbsolutePath().c_str(), _S("wb"));
fwrite(s.data(), 1, s.length(), fout); fwrite(s.data(), 1, s.length(), fout);
fclose(fout); fclose(fout);
} }
HECL::ProjectPath working = getWorking(item, extractor); hecl::ProjectPath working = getWorking(item, extractor);
if (extractor.func_a) /* Doesn't need PAKRouter access */ if (extractor.func_a) /* Doesn't need PAKRouter access */
{ {
if (force || working.getPathType() == HECL::ProjectPath::Type::None) if (force || working.getPathType() == hecl::ProjectPath::Type::None)
{ {
PAKEntryReadStream s = item->beginReadStream(*m_node); PAKEntryReadStream s = item->beginReadStream(*m_node);
extractor.func_a(s, working); extractor.func_a(s, working);
@ -554,11 +536,11 @@ public:
} }
else if (extractor.func_b) /* Needs PAKRouter access */ else if (extractor.func_b) /* Needs PAKRouter access */
{ {
if (force || working.getPathType() == HECL::ProjectPath::Type::None) if (force || working.getPathType() == hecl::ProjectPath::Type::None)
{ {
PAKEntryReadStream s = item->beginReadStream(*m_node); PAKEntryReadStream s = item->beginReadStream(*m_node);
extractor.func_b(m_dataSpec, s, working, *this, *item, force, extractor.func_b(m_dataSpec, s, working, *this, *item, force,
[&progress, thisFac](const HECL::SystemChar* update) [&progress, thisFac](const hecl::SystemChar* update)
{ {
progress(update, thisFac); progress(update, thisFac);
}); });
@ -571,7 +553,7 @@ public:
} }
const typename BRIDGETYPE::PAKType::Entry* lookupEntry(const IDType& entry, const typename BRIDGETYPE::PAKType::Entry* lookupEntry(const IDType& entry,
const NOD::Node** nodeOut=nullptr, const nod::Node** nodeOut=nullptr,
bool silenceWarnings=false, bool silenceWarnings=false,
bool currentPAK=false) const bool currentPAK=false) const
{ {
@ -579,7 +561,7 @@ public:
return nullptr; return nullptr;
if (!m_bridges) if (!m_bridges)
LogDNACommon.report(LogVisor::FatalError, LogDNACommon.report(logvisor::Fatal,
"PAKRouter::build() must be called before PAKRouter::lookupEntry()"); "PAKRouter::build() must be called before PAKRouter::lookupEntry()");
if (m_pak) if (m_pak)
@ -596,7 +578,7 @@ public:
if (currentPAK) if (currentPAK)
{ {
if (!silenceWarnings) if (!silenceWarnings)
LogDNACommon.report(LogVisor::Warning, "unable to find PAK entry %s in current PAK", entry.toString().c_str()); LogDNACommon.report(logvisor::Warning, "unable to find PAK entry %s in current PAK", entry.toString().c_str());
return nullptr; return nullptr;
} }
@ -613,7 +595,7 @@ public:
} }
if (!silenceWarnings) if (!silenceWarnings)
LogDNACommon.report(LogVisor::Warning, "unable to find PAK entry %s", entry.toString().c_str()); LogDNACommon.report(logvisor::Warning, "unable to find PAK entry %s", entry.toString().c_str());
if (nodeOut) if (nodeOut)
*nodeOut = nullptr; *nodeOut = nullptr;
return nullptr; return nullptr;
@ -622,7 +604,7 @@ public:
template <typename DNA> template <typename DNA>
bool lookupAndReadDNA(const IDType& id, DNA& out, bool silenceWarnings=false) bool lookupAndReadDNA(const IDType& id, DNA& out, bool silenceWarnings=false)
{ {
const NOD::Node* node; const nod::Node* node;
const EntryType* entry = lookupEntry(id, &node, silenceWarnings); const EntryType* entry = lookupEntry(id, &node, silenceWarnings);
if (!entry) if (!entry)
return false; return false;
@ -639,10 +621,10 @@ public:
return &search->second; return &search->second;
} }
HECL::ProjectPath getAreaLayerWorking(const IDType& areaId, int layerIdx) const hecl::ProjectPath getAreaLayerWorking(const IDType& areaId, int layerIdx) const
{ {
if (!m_bridges) if (!m_bridges)
LogDNACommon.report(LogVisor::FatalError, LogDNACommon.report(logvisor::Fatal,
"PAKRouter::build() must be called before PAKRouter::getAreaLayerWorking()"); "PAKRouter::build() must be called before PAKRouter::getAreaLayerWorking()");
auto bridgePathIt = m_bridgePaths.cbegin(); auto bridgePathIt = m_bridgePaths.cbegin();
for (const BRIDGETYPE& bridge : *m_bridges) for (const BRIDGETYPE& bridge : *m_bridges)
@ -651,21 +633,21 @@ public:
for (const auto& area : level.second.areas) for (const auto& area : level.second.areas)
if (area.first == areaId) if (area.first == areaId)
{ {
HECL::ProjectPath levelPath(bridgePathIt->first, level.second.name); hecl::ProjectPath levelPath(bridgePathIt->first, level.second.name);
HECL::ProjectPath areaPath(levelPath, area.second.name); hecl::ProjectPath areaPath(levelPath, area.second.name);
if (layerIdx < 0) if (layerIdx < 0)
return areaPath; return areaPath;
return HECL::ProjectPath(areaPath, area.second.layers.at(layerIdx).name); return hecl::ProjectPath(areaPath, area.second.layers.at(layerIdx).name);
} }
++bridgePathIt; ++bridgePathIt;
} }
return HECL::ProjectPath(); return hecl::ProjectPath();
} }
HECL::ProjectPath getAreaLayerCooked(const IDType& areaId, int layerIdx) const hecl::ProjectPath getAreaLayerCooked(const IDType& areaId, int layerIdx) const
{ {
if (!m_bridges) if (!m_bridges)
LogDNACommon.report(LogVisor::FatalError, LogDNACommon.report(logvisor::Fatal,
"PAKRouter::build() must be called before PAKRouter::getAreaLayerCooked()"); "PAKRouter::build() must be called before PAKRouter::getAreaLayerCooked()");
auto bridgePathIt = m_bridgePaths.cbegin(); auto bridgePathIt = m_bridgePaths.cbegin();
for (const BRIDGETYPE& bridge : *m_bridges) for (const BRIDGETYPE& bridge : *m_bridges)
@ -674,15 +656,15 @@ public:
for (const auto& area : level.second.areas) for (const auto& area : level.second.areas)
if (area.first == areaId) if (area.first == areaId)
{ {
HECL::ProjectPath levelPath(bridgePathIt->second, level.second.name); hecl::ProjectPath levelPath(bridgePathIt->second, level.second.name);
HECL::ProjectPath areaPath(levelPath, area.second.name); hecl::ProjectPath areaPath(levelPath, area.second.name);
if (layerIdx < 0) if (layerIdx < 0)
return areaPath; return areaPath;
return HECL::ProjectPath(areaPath, area.second.layers.at(layerIdx).name); return hecl::ProjectPath(areaPath, area.second.layers.at(layerIdx).name);
} }
++bridgePathIt; ++bridgePathIt;
} }
return HECL::ProjectPath(); return hecl::ProjectPath();
} }
}; };

View File

@ -3,7 +3,7 @@
#include "ParticleCommon.hpp" #include "ParticleCommon.hpp"
#include "PAK.hpp" #include "PAK.hpp"
#include "Athena/FileWriter.hpp" #include "athena/FileWriter.hpp"
namespace DataSpec namespace DataSpec
{ {
@ -13,7 +13,7 @@ namespace DNAParticle
template <class IDType> template <class IDType>
struct GPSM : BigYAML struct GPSM : BigYAML
{ {
static const char* DNAType() {return "Retro::GPSM";} static const char* DNAType() {return "urde::GPSM";}
const char* DNATypeV() const {return DNAType();} const char* DNATypeV() const {return DNAType();}
VectorElementFactory x0_PSIV; VectorElementFactory x0_PSIV;
@ -107,13 +107,13 @@ struct GPSM : BigYAML
x45_25_PMOO = true; x45_25_PMOO = true;
} }
void read(Athena::io::YAMLDocReader& r) void read(athena::io::YAMLDocReader& r)
{ {
for (const auto& elem : r.getCurNode()->m_mapChildren) for (const auto& elem : r.getCurNode()->m_mapChildren)
{ {
if (elem.first.size() < 4) if (elem.first.size() < 4)
{ {
LogModule.report(LogVisor::Warning, "short FourCC in element '%s'", elem.first.c_str()); LogModule.report(logvisor::Warning, "short FourCC in element '%s'", elem.first.c_str());
continue; continue;
} }
@ -366,7 +366,7 @@ struct GPSM : BigYAML
r.leaveSubRecord(); r.leaveSubRecord();
} }
} }
void write(Athena::io::YAMLDocWriter& w) const void write(athena::io::YAMLDocWriter& w) const
{ {
if (x0_PSIV) if (x0_PSIV)
{ {
@ -950,13 +950,13 @@ struct GPSM : BigYAML
__isz = x128_ADV8.binarySize(__isz + 4); __isz = x128_ADV8.binarySize(__isz + 4);
return __isz; return __isz;
} }
void read(Athena::io::IStreamReader& r) void read(athena::io::IStreamReader& r)
{ {
uint32_t clsId; uint32_t clsId;
r.readBytesToBuf(&clsId, 4); r.readBytesToBuf(&clsId, 4);
if (clsId != SBIG('GPSM')) if (clsId != SBIG('GPSM'))
{ {
LogModule.report(LogVisor::Warning, "non GPSM provided to GPSM parser"); LogModule.report(logvisor::Warning, "non GPSM provided to GPSM parser");
return; return;
} }
r.readBytesToBuf(&clsId, 4); r.readBytesToBuf(&clsId, 4);
@ -1226,13 +1226,13 @@ struct GPSM : BigYAML
xd8_SELC.read(r); xd8_SELC.read(r);
break; break;
default: default:
LogModule.report(LogVisor::FatalError, "Unknown GPSM class %.4s @%" PRIi64, &clsId, r.position()); LogModule.report(logvisor::Fatal, "Unknown GPSM class %.4s @%" PRIi64, &clsId, r.position());
break; break;
} }
r.readBytesToBuf(&clsId, 4); r.readBytesToBuf(&clsId, 4);
} }
} }
void write(Athena::io::IStreamWriter& w) const void write(athena::io::IStreamWriter& w) const
{ {
w.writeBytes((atInt8*)"GPSM", 4); w.writeBytes((atInt8*)"GPSM", 4);
if (x0_PSIV) if (x0_PSIV)
@ -1626,9 +1626,9 @@ struct GPSM : BigYAML
}; };
template <class IDType> template <class IDType>
bool ExtractGPSM(PAKEntryReadStream& rs, const HECL::ProjectPath& outPath) bool ExtractGPSM(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath)
{ {
FILE* fp = HECL::Fopen(outPath.getAbsolutePath().c_str(), _S("w")); FILE* fp = hecl::Fopen(outPath.getAbsolutePath().c_str(), _S("w"));
if (fp) if (fp)
{ {
GPSM<IDType> gpsm; GPSM<IDType> gpsm;
@ -1641,9 +1641,9 @@ bool ExtractGPSM(PAKEntryReadStream& rs, const HECL::ProjectPath& outPath)
} }
template <class IDType> template <class IDType>
bool WriteGPSM(const GPSM<IDType>& gpsm, const HECL::ProjectPath& outPath) bool WriteGPSM(const GPSM<IDType>& gpsm, const hecl::ProjectPath& outPath)
{ {
Athena::io::FileWriter w(outPath.getAbsolutePath(), true, false); athena::io::FileWriter w(outPath.getAbsolutePath(), true, false);
if (w.hasError()) if (w.hasError())
return false; return false;
gpsm.write(w); gpsm.write(w);

View File

@ -4,9 +4,9 @@ namespace DataSpec
{ {
namespace DNAParticle namespace DNAParticle
{ {
LogVisor::LogModule LogModule("Retro::DNAParticle"); logvisor::Module LogModule("urde::DNAParticle");
void RealElementFactory::read(Athena::io::YAMLDocReader& r) void RealElementFactory::read(athena::io::YAMLDocReader& r)
{ {
const auto& mapChildren = r.getCurNode()->m_mapChildren; const auto& mapChildren = r.getCurNode()->m_mapChildren;
if (mapChildren.empty()) if (mapChildren.empty())
@ -17,7 +17,7 @@ void RealElementFactory::read(Athena::io::YAMLDocReader& r)
const auto& elem = mapChildren[0]; const auto& elem = mapChildren[0];
if (elem.first.size() < 4) if (elem.first.size() < 4)
LogModule.report(LogVisor::FatalError, "short FourCC in element '%s'", elem.first.c_str()); LogModule.report(logvisor::Fatal, "short FourCC in element '%s'", elem.first.c_str());
switch (*reinterpret_cast<const uint32_t*>(elem.first.data())) switch (*reinterpret_cast<const uint32_t*>(elem.first.data()))
{ {
@ -130,7 +130,7 @@ void RealElementFactory::read(Athena::io::YAMLDocReader& r)
r.leaveSubRecord(); r.leaveSubRecord();
} }
void RealElementFactory::write(Athena::io::YAMLDocWriter& w) const void RealElementFactory::write(athena::io::YAMLDocWriter& w) const
{ {
if (m_elem) if (m_elem)
{ {
@ -148,7 +148,7 @@ size_t RealElementFactory::binarySize(size_t __isz) const
return __isz + 4; return __isz + 4;
} }
void RealElementFactory::read(Athena::io::IStreamReader& r) void RealElementFactory::read(athena::io::IStreamReader& r)
{ {
uint32_t clsId; uint32_t clsId;
r.readBytesToBuf(&clsId, 4); r.readBytesToBuf(&clsId, 4);
@ -259,13 +259,13 @@ void RealElementFactory::read(Athena::io::IStreamReader& r)
return; return;
default: default:
m_elem.reset(); m_elem.reset();
LogModule.report(LogVisor::FatalError, "Unknown RealElement class %.4s @%" PRIi64, &clsId, r.position()); LogModule.report(logvisor::Fatal, "Unknown RealElement class %.4s @%" PRIi64, &clsId, r.position());
return; return;
} }
m_elem->read(r); m_elem->read(r);
} }
void RealElementFactory::write(Athena::io::IStreamWriter& w) const void RealElementFactory::write(athena::io::IStreamWriter& w) const
{ {
if (m_elem) if (m_elem)
{ {
@ -277,7 +277,7 @@ void RealElementFactory::write(Athena::io::IStreamWriter& w) const
} }
void IntElementFactory::read(Athena::io::YAMLDocReader& r) void IntElementFactory::read(athena::io::YAMLDocReader& r)
{ {
const auto& mapChildren = r.getCurNode()->m_mapChildren; const auto& mapChildren = r.getCurNode()->m_mapChildren;
if (mapChildren.empty()) if (mapChildren.empty())
@ -288,7 +288,7 @@ void IntElementFactory::read(Athena::io::YAMLDocReader& r)
const auto& elem = mapChildren[0]; const auto& elem = mapChildren[0];
if (elem.first.size() < 4) if (elem.first.size() < 4)
LogModule.report(LogVisor::FatalError, "short FourCC in element '%s'", elem.first.c_str()); LogModule.report(logvisor::Fatal, "short FourCC in element '%s'", elem.first.c_str());
switch (*reinterpret_cast<const uint32_t*>(elem.first.data())) switch (*reinterpret_cast<const uint32_t*>(elem.first.data()))
{ {
@ -353,7 +353,7 @@ void IntElementFactory::read(Athena::io::YAMLDocReader& r)
r.leaveSubRecord(); r.leaveSubRecord();
} }
void IntElementFactory::write(Athena::io::YAMLDocWriter& w) const void IntElementFactory::write(athena::io::YAMLDocWriter& w) const
{ {
if (m_elem) if (m_elem)
{ {
@ -371,7 +371,7 @@ size_t IntElementFactory::binarySize(size_t __isz) const
return __isz + 4; return __isz + 4;
} }
void IntElementFactory::read(Athena::io::IStreamReader& r) void IntElementFactory::read(athena::io::IStreamReader& r)
{ {
uint32_t clsId; uint32_t clsId;
r.readBytesToBuf(&clsId, 4); r.readBytesToBuf(&clsId, 4);
@ -434,13 +434,13 @@ void IntElementFactory::read(Athena::io::IStreamReader& r)
return; return;
default: default:
m_elem.reset(); m_elem.reset();
LogModule.report(LogVisor::FatalError, "Unknown IntElement class %.4s @%" PRIi64, &clsId, r.position()); LogModule.report(logvisor::Fatal, "Unknown IntElement class %.4s @%" PRIi64, &clsId, r.position());
return; return;
} }
m_elem->read(r); m_elem->read(r);
} }
void IntElementFactory::write(Athena::io::IStreamWriter& w) const void IntElementFactory::write(athena::io::IStreamWriter& w) const
{ {
if (m_elem) if (m_elem)
{ {
@ -451,7 +451,7 @@ void IntElementFactory::write(Athena::io::IStreamWriter& w) const
w.writeBytes((atInt8*)"NONE", 4); w.writeBytes((atInt8*)"NONE", 4);
} }
void VectorElementFactory::read(Athena::io::YAMLDocReader& r) void VectorElementFactory::read(athena::io::YAMLDocReader& r)
{ {
const auto& mapChildren = r.getCurNode()->m_mapChildren; const auto& mapChildren = r.getCurNode()->m_mapChildren;
if (mapChildren.empty()) if (mapChildren.empty())
@ -462,7 +462,7 @@ void VectorElementFactory::read(Athena::io::YAMLDocReader& r)
const auto& elem = mapChildren[0]; const auto& elem = mapChildren[0];
if (elem.first.size() < 4) if (elem.first.size() < 4)
LogModule.report(LogVisor::FatalError, "short FourCC in element '%s'", elem.first.c_str()); LogModule.report(logvisor::Fatal, "short FourCC in element '%s'", elem.first.c_str());
switch (*reinterpret_cast<const uint32_t*>(elem.first.data())) switch (*reinterpret_cast<const uint32_t*>(elem.first.data()))
{ {
@ -527,7 +527,7 @@ void VectorElementFactory::read(Athena::io::YAMLDocReader& r)
r.leaveSubRecord(); r.leaveSubRecord();
} }
void VectorElementFactory::write(Athena::io::YAMLDocWriter& w) const void VectorElementFactory::write(athena::io::YAMLDocWriter& w) const
{ {
if (m_elem) if (m_elem)
{ {
@ -545,7 +545,7 @@ size_t VectorElementFactory::binarySize(size_t __isz) const
return __isz + 4; return __isz + 4;
} }
void VectorElementFactory::read(Athena::io::IStreamReader& r) void VectorElementFactory::read(athena::io::IStreamReader& r)
{ {
uint32_t clsId; uint32_t clsId;
r.readBytesToBuf(&clsId, 4); r.readBytesToBuf(&clsId, 4);
@ -608,13 +608,13 @@ void VectorElementFactory::read(Athena::io::IStreamReader& r)
return; return;
default: default:
m_elem.reset(); m_elem.reset();
LogModule.report(LogVisor::FatalError, "Unknown VectorElement class %.4s @%" PRIi64, &clsId, r.position()); LogModule.report(logvisor::Fatal, "Unknown VectorElement class %.4s @%" PRIi64, &clsId, r.position());
return; return;
} }
m_elem->read(r); m_elem->read(r);
} }
void VectorElementFactory::write(Athena::io::IStreamWriter& w) const void VectorElementFactory::write(athena::io::IStreamWriter& w) const
{ {
if (m_elem) if (m_elem)
{ {
@ -626,7 +626,7 @@ void VectorElementFactory::write(Athena::io::IStreamWriter& w) const
} }
void ColorElementFactory::read(Athena::io::YAMLDocReader& r) void ColorElementFactory::read(athena::io::YAMLDocReader& r)
{ {
const auto& mapChildren = r.getCurNode()->m_mapChildren; const auto& mapChildren = r.getCurNode()->m_mapChildren;
if (mapChildren.empty()) if (mapChildren.empty())
@ -637,7 +637,7 @@ void ColorElementFactory::read(Athena::io::YAMLDocReader& r)
const auto& elem = mapChildren[0]; const auto& elem = mapChildren[0];
if (elem.first.size() < 4) if (elem.first.size() < 4)
LogModule.report(LogVisor::FatalError, "short FourCC in element '%s'", elem.first.c_str()); LogModule.report(logvisor::Fatal, "short FourCC in element '%s'", elem.first.c_str());
switch (*reinterpret_cast<const uint32_t*>(elem.first.data())) switch (*reinterpret_cast<const uint32_t*>(elem.first.data()))
{ {
@ -669,7 +669,7 @@ void ColorElementFactory::read(Athena::io::YAMLDocReader& r)
r.leaveSubRecord(); r.leaveSubRecord();
} }
void ColorElementFactory::write(Athena::io::YAMLDocWriter& w) const void ColorElementFactory::write(athena::io::YAMLDocWriter& w) const
{ {
if (m_elem) if (m_elem)
{ {
@ -687,7 +687,7 @@ size_t ColorElementFactory::binarySize(size_t __isz) const
return __isz + 4; return __isz + 4;
} }
void ColorElementFactory::read(Athena::io::IStreamReader& r) void ColorElementFactory::read(athena::io::IStreamReader& r)
{ {
uint32_t clsId; uint32_t clsId;
r.readBytesToBuf(&clsId, 4); r.readBytesToBuf(&clsId, 4);
@ -717,13 +717,13 @@ void ColorElementFactory::read(Athena::io::IStreamReader& r)
return; return;
default: default:
m_elem.reset(); m_elem.reset();
LogModule.report(LogVisor::FatalError, "Unknown ColorElement class %.4s @%" PRIi64, &clsId, r.position()); LogModule.report(logvisor::Fatal, "Unknown ColorElement class %.4s @%" PRIi64, &clsId, r.position());
return; return;
} }
m_elem->read(r); m_elem->read(r);
} }
void ColorElementFactory::write(Athena::io::IStreamWriter& w) const void ColorElementFactory::write(athena::io::IStreamWriter& w) const
{ {
if (m_elem) if (m_elem)
{ {
@ -735,7 +735,7 @@ void ColorElementFactory::write(Athena::io::IStreamWriter& w) const
} }
void ModVectorElementFactory::read(Athena::io::YAMLDocReader& r) void ModVectorElementFactory::read(athena::io::YAMLDocReader& r)
{ {
const auto& mapChildren = r.getCurNode()->m_mapChildren; const auto& mapChildren = r.getCurNode()->m_mapChildren;
if (mapChildren.empty()) if (mapChildren.empty())
@ -746,7 +746,7 @@ void ModVectorElementFactory::read(Athena::io::YAMLDocReader& r)
const auto& elem = mapChildren[0]; const auto& elem = mapChildren[0];
if (elem.first.size() < 4) if (elem.first.size() < 4)
LogModule.report(LogVisor::FatalError, "short FourCC in element '%s'", elem.first.c_str()); LogModule.report(logvisor::Fatal, "short FourCC in element '%s'", elem.first.c_str());
switch (*reinterpret_cast<const uint32_t*>(elem.first.data())) switch (*reinterpret_cast<const uint32_t*>(elem.first.data()))
{ {
@ -795,7 +795,7 @@ void ModVectorElementFactory::read(Athena::io::YAMLDocReader& r)
r.leaveSubRecord(); r.leaveSubRecord();
} }
void ModVectorElementFactory::write(Athena::io::YAMLDocWriter& w) const void ModVectorElementFactory::write(athena::io::YAMLDocWriter& w) const
{ {
if (m_elem) if (m_elem)
{ {
@ -813,7 +813,7 @@ size_t ModVectorElementFactory::binarySize(size_t __isz) const
return __isz + 4; return __isz + 4;
} }
void ModVectorElementFactory::read(Athena::io::IStreamReader& r) void ModVectorElementFactory::read(athena::io::IStreamReader& r)
{ {
uint32_t clsId; uint32_t clsId;
r.readBytesToBuf(&clsId, 4); r.readBytesToBuf(&clsId, 4);
@ -860,13 +860,13 @@ void ModVectorElementFactory::read(Athena::io::IStreamReader& r)
return; return;
default: default:
m_elem.reset(); m_elem.reset();
LogModule.report(LogVisor::FatalError, "Unknown ModVectorElement class %.4s @%" PRIi64, &clsId, r.position()); LogModule.report(logvisor::Fatal, "Unknown ModVectorElement class %.4s @%" PRIi64, &clsId, r.position());
return; return;
} }
m_elem->read(r); m_elem->read(r);
} }
void ModVectorElementFactory::write(Athena::io::IStreamWriter& w) const void ModVectorElementFactory::write(athena::io::IStreamWriter& w) const
{ {
if (m_elem) if (m_elem)
{ {
@ -878,7 +878,7 @@ void ModVectorElementFactory::write(Athena::io::IStreamWriter& w) const
} }
void EmitterElementFactory::read(Athena::io::YAMLDocReader& r) void EmitterElementFactory::read(athena::io::YAMLDocReader& r)
{ {
const auto& mapChildren = r.getCurNode()->m_mapChildren; const auto& mapChildren = r.getCurNode()->m_mapChildren;
if (mapChildren.empty()) if (mapChildren.empty())
@ -889,7 +889,7 @@ void EmitterElementFactory::read(Athena::io::YAMLDocReader& r)
const auto& elem = mapChildren[0]; const auto& elem = mapChildren[0];
if (elem.first.size() < 4) if (elem.first.size() < 4)
LogModule.report(LogVisor::FatalError, "short FourCC in element '%s'", elem.first.c_str()); LogModule.report(logvisor::Fatal, "short FourCC in element '%s'", elem.first.c_str());
switch (*reinterpret_cast<const uint32_t*>(elem.first.data())) switch (*reinterpret_cast<const uint32_t*>(elem.first.data()))
{ {
@ -914,7 +914,7 @@ void EmitterElementFactory::read(Athena::io::YAMLDocReader& r)
r.leaveSubRecord(); r.leaveSubRecord();
} }
void EmitterElementFactory::write(Athena::io::YAMLDocWriter& w) const void EmitterElementFactory::write(athena::io::YAMLDocWriter& w) const
{ {
if (m_elem) if (m_elem)
{ {
@ -932,7 +932,7 @@ size_t EmitterElementFactory::binarySize(size_t __isz) const
return __isz + 4; return __isz + 4;
} }
void EmitterElementFactory::read(Athena::io::IStreamReader& r) void EmitterElementFactory::read(athena::io::IStreamReader& r)
{ {
uint32_t clsId; uint32_t clsId;
r.readBytesToBuf(&clsId, 4); r.readBytesToBuf(&clsId, 4);
@ -955,13 +955,13 @@ void EmitterElementFactory::read(Athena::io::IStreamReader& r)
return; return;
default: default:
m_elem.reset(); m_elem.reset();
LogModule.report(LogVisor::FatalError, "Unknown EmitterElement class %.4s @%" PRIi64, &clsId, r.position()); LogModule.report(logvisor::Fatal, "Unknown EmitterElement class %.4s @%" PRIi64, &clsId, r.position());
return; return;
} }
m_elem->read(r); m_elem->read(r);
} }
void EmitterElementFactory::write(Athena::io::IStreamWriter& w) const void EmitterElementFactory::write(athena::io::IStreamWriter& w) const
{ {
if (m_elem) if (m_elem)
{ {

View File

@ -7,7 +7,7 @@ namespace DataSpec
{ {
namespace DNAParticle namespace DNAParticle
{ {
extern LogVisor::LogModule LogModule; extern logvisor::Module LogModule;
struct IElement : BigYAML struct IElement : BigYAML
{ {
@ -23,11 +23,11 @@ struct RealElementFactory : BigYAML
std::unique_ptr<IRealElement> m_elem; std::unique_ptr<IRealElement> m_elem;
operator bool() const {return m_elem.operator bool();} operator bool() const {return m_elem.operator bool();}
void read(Athena::io::YAMLDocReader& r); void read(athena::io::YAMLDocReader& r);
void write(Athena::io::YAMLDocWriter& w) const; void write(athena::io::YAMLDocWriter& w) const;
size_t binarySize(size_t __isz) const; size_t binarySize(size_t __isz) const;
void read(Athena::io::IStreamReader& r); void read(athena::io::IStreamReader& r);
void write(Athena::io::IStreamWriter& w) const; void write(athena::io::IStreamWriter& w) const;
}; };
struct IIntElement : IElement {Delete _d;}; struct IIntElement : IElement {Delete _d;};
@ -37,11 +37,11 @@ struct IntElementFactory : BigYAML
std::unique_ptr<IIntElement> m_elem; std::unique_ptr<IIntElement> m_elem;
operator bool() const {return m_elem.operator bool();} operator bool() const {return m_elem.operator bool();}
void read(Athena::io::YAMLDocReader& r); void read(athena::io::YAMLDocReader& r);
void write(Athena::io::YAMLDocWriter& w) const; void write(athena::io::YAMLDocWriter& w) const;
size_t binarySize(size_t __isz) const; size_t binarySize(size_t __isz) const;
void read(Athena::io::IStreamReader& r); void read(athena::io::IStreamReader& r);
void write(Athena::io::IStreamWriter& w) const; void write(athena::io::IStreamWriter& w) const;
}; };
struct IVectorElement : IElement {Delete _d;}; struct IVectorElement : IElement {Delete _d;};
@ -51,11 +51,11 @@ struct VectorElementFactory : BigYAML
std::unique_ptr<IVectorElement> m_elem; std::unique_ptr<IVectorElement> m_elem;
operator bool() const {return m_elem.operator bool();} operator bool() const {return m_elem.operator bool();}
void read(Athena::io::YAMLDocReader& r); void read(athena::io::YAMLDocReader& r);
void write(Athena::io::YAMLDocWriter& w) const; void write(athena::io::YAMLDocWriter& w) const;
size_t binarySize(size_t __isz) const; size_t binarySize(size_t __isz) const;
void read(Athena::io::IStreamReader& r); void read(athena::io::IStreamReader& r);
void write(Athena::io::IStreamWriter& w) const; void write(athena::io::IStreamWriter& w) const;
}; };
struct IColorElement : IElement {Delete _d;}; struct IColorElement : IElement {Delete _d;};
@ -65,11 +65,11 @@ struct ColorElementFactory : BigYAML
std::unique_ptr<IColorElement> m_elem; std::unique_ptr<IColorElement> m_elem;
operator bool() const {return m_elem.operator bool();} operator bool() const {return m_elem.operator bool();}
void read(Athena::io::YAMLDocReader& r); void read(athena::io::YAMLDocReader& r);
void write(Athena::io::YAMLDocWriter& w) const; void write(athena::io::YAMLDocWriter& w) const;
size_t binarySize(size_t __isz) const; size_t binarySize(size_t __isz) const;
void read(Athena::io::IStreamReader& r); void read(athena::io::IStreamReader& r);
void write(Athena::io::IStreamWriter& w) const; void write(athena::io::IStreamWriter& w) const;
}; };
struct IModVectorElement : IElement {Delete _d;}; struct IModVectorElement : IElement {Delete _d;};
@ -79,11 +79,11 @@ struct ModVectorElementFactory : BigYAML
std::unique_ptr<IModVectorElement> m_elem; std::unique_ptr<IModVectorElement> m_elem;
operator bool() const {return m_elem.operator bool();} operator bool() const {return m_elem.operator bool();}
void read(Athena::io::YAMLDocReader& r); void read(athena::io::YAMLDocReader& r);
void write(Athena::io::YAMLDocWriter& w) const; void write(athena::io::YAMLDocWriter& w) const;
size_t binarySize(size_t __isz) const; size_t binarySize(size_t __isz) const;
void read(Athena::io::IStreamReader& r); void read(athena::io::IStreamReader& r);
void write(Athena::io::IStreamWriter& w) const; void write(athena::io::IStreamWriter& w) const;
}; };
struct IEmitterElement : IElement {Delete _d;}; struct IEmitterElement : IElement {Delete _d;};
@ -93,11 +93,11 @@ struct EmitterElementFactory : BigYAML
std::unique_ptr<IEmitterElement> m_elem; std::unique_ptr<IEmitterElement> m_elem;
operator bool() const {return m_elem.operator bool();} operator bool() const {return m_elem.operator bool();}
void read(Athena::io::YAMLDocReader& r); void read(athena::io::YAMLDocReader& r);
void write(Athena::io::YAMLDocWriter& w) const; void write(athena::io::YAMLDocWriter& w) const;
size_t binarySize(size_t __isz) const; size_t binarySize(size_t __isz) const;
void read(Athena::io::IStreamReader& r); void read(athena::io::IStreamReader& r);
void write(Athena::io::IStreamWriter& w) const; void write(athena::io::IStreamWriter& w) const;
}; };
struct IUVElement : IElement {Delete _d;}; struct IUVElement : IElement {Delete _d;};
@ -108,11 +108,11 @@ struct BoolHelper : IElement
bool value = false; bool value = false;
operator bool() const {return value;} operator bool() const {return value;}
BoolHelper& operator=(bool val) {value = val; return *this;} BoolHelper& operator=(bool val) {value = val; return *this;}
void read(Athena::io::YAMLDocReader& r) void read(athena::io::YAMLDocReader& r)
{ {
value = r.readBool(nullptr); value = r.readBool(nullptr);
} }
void write(Athena::io::YAMLDocWriter& w) const void write(athena::io::YAMLDocWriter& w) const
{ {
w.writeBool(nullptr, value); w.writeBool(nullptr, value);
} }
@ -120,7 +120,7 @@ struct BoolHelper : IElement
{ {
return __isz + 5; return __isz + 5;
} }
void read(Athena::io::IStreamReader& r) void read(athena::io::IStreamReader& r)
{ {
uint32_t clsId; uint32_t clsId;
r.readBytesToBuf(&clsId, 4); r.readBytesToBuf(&clsId, 4);
@ -129,7 +129,7 @@ struct BoolHelper : IElement
else else
value = false; value = false;
} }
void write(Athena::io::IStreamWriter& w) const void write(athena::io::IStreamWriter& w) const
{ {
w.writeBytes((atInt8*)"CNST", 4); w.writeBytes((atInt8*)"CNST", 4);
w.writeBool(value); w.writeBool(value);
@ -150,11 +150,11 @@ struct REConstant : IRealElement
Delete _d; Delete _d;
Value<float> val; Value<float> val;
void read(Athena::io::YAMLDocReader& r) void read(athena::io::YAMLDocReader& r)
{ {
val = r.readFloat(nullptr); val = r.readFloat(nullptr);
} }
void write(Athena::io::YAMLDocWriter& w) const void write(athena::io::YAMLDocWriter& w) const
{ {
w.writeFloat(nullptr, val); w.writeFloat(nullptr, val);
} }
@ -162,11 +162,11 @@ struct REConstant : IRealElement
{ {
return __isz + 4; return __isz + 4;
} }
void read(Athena::io::IStreamReader& r) void read(athena::io::IStreamReader& r)
{ {
val = r.readFloatBig(); val = r.readFloatBig();
} }
void write(Athena::io::IStreamWriter& w) const void write(athena::io::IStreamWriter& w) const
{ {
w.writeFloatBig(val); w.writeFloatBig(val);
} }
@ -463,11 +463,11 @@ struct IEConstant : IIntElement
Delete _d; Delete _d;
Value<atUint32> val; Value<atUint32> val;
void read(Athena::io::YAMLDocReader& r) void read(athena::io::YAMLDocReader& r)
{ {
val = r.readUint32(nullptr); val = r.readUint32(nullptr);
} }
void write(Athena::io::YAMLDocWriter& w) const void write(athena::io::YAMLDocWriter& w) const
{ {
w.writeUint32(nullptr, val); w.writeUint32(nullptr, val);
} }
@ -475,11 +475,11 @@ struct IEConstant : IIntElement
{ {
return __isz + 4; return __isz + 4;
} }
void read(Athena::io::IStreamReader& r) void read(athena::io::IStreamReader& r)
{ {
val = r.readUint32Big(); val = r.readUint32Big();
} }
void write(Athena::io::IStreamWriter& w) const void write(athena::io::IStreamWriter& w) const
{ {
w.writeUint32Big(val); w.writeUint32Big(val);
} }
@ -624,7 +624,7 @@ struct VEConstant : IVectorElement
Delete _d; Delete _d;
RealElementFactory comps[3]; RealElementFactory comps[3];
void read(Athena::io::YAMLDocReader& r) void read(athena::io::YAMLDocReader& r)
{ {
for (int i=0 ; i<3 ; ++i) for (int i=0 ; i<3 ; ++i)
{ {
@ -633,7 +633,7 @@ struct VEConstant : IVectorElement
r.leaveSubRecord(); r.leaveSubRecord();
} }
} }
void write(Athena::io::YAMLDocWriter& w) const void write(athena::io::YAMLDocWriter& w) const
{ {
w.enterSubVector(nullptr); w.enterSubVector(nullptr);
for (int i=0 ; i<3 ; ++i) for (int i=0 ; i<3 ; ++i)
@ -650,13 +650,13 @@ struct VEConstant : IVectorElement
__isz = comps[1].binarySize(__isz); __isz = comps[1].binarySize(__isz);
return comps[2].binarySize(__isz); return comps[2].binarySize(__isz);
} }
void read(Athena::io::IStreamReader& r) void read(athena::io::IStreamReader& r)
{ {
comps[0].read(r); comps[0].read(r);
comps[1].read(r); comps[1].read(r);
comps[2].read(r); comps[2].read(r);
} }
void write(Athena::io::IStreamWriter& w) const void write(athena::io::IStreamWriter& w) const
{ {
comps[0].write(w); comps[0].write(w);
comps[1].write(w); comps[1].write(w);
@ -772,7 +772,7 @@ struct CEConstant : IColorElement
Delete _d; Delete _d;
RealElementFactory comps[4]; RealElementFactory comps[4];
void read(Athena::io::YAMLDocReader& r) void read(athena::io::YAMLDocReader& r)
{ {
for (int i=0 ; i<4 ; ++i) for (int i=0 ; i<4 ; ++i)
{ {
@ -781,7 +781,7 @@ struct CEConstant : IColorElement
r.leaveSubRecord(); r.leaveSubRecord();
} }
} }
void write(Athena::io::YAMLDocWriter& w) const void write(athena::io::YAMLDocWriter& w) const
{ {
w.enterSubVector(nullptr); w.enterSubVector(nullptr);
for (int i=0 ; i<4 ; ++i) for (int i=0 ; i<4 ; ++i)
@ -799,14 +799,14 @@ struct CEConstant : IColorElement
__isz = comps[2].binarySize(__isz); __isz = comps[2].binarySize(__isz);
return comps[3].binarySize(__isz); return comps[3].binarySize(__isz);
} }
void read(Athena::io::IStreamReader& r) void read(athena::io::IStreamReader& r)
{ {
comps[0].read(r); comps[0].read(r);
comps[1].read(r); comps[1].read(r);
comps[2].read(r); comps[2].read(r);
comps[3].read(r); comps[3].read(r);
} }
void write(Athena::io::IStreamWriter& w) const void write(athena::io::IStreamWriter& w) const
{ {
comps[0].write(w); comps[0].write(w);
comps[1].write(w); comps[1].write(w);
@ -902,7 +902,7 @@ struct MVEConstant : IModVectorElement
Delete _d; Delete _d;
RealElementFactory comps[3]; RealElementFactory comps[3];
void read(Athena::io::YAMLDocReader& r) void read(athena::io::YAMLDocReader& r)
{ {
for (int i=0 ; i<3 ; ++i) for (int i=0 ; i<3 ; ++i)
{ {
@ -911,7 +911,7 @@ struct MVEConstant : IModVectorElement
r.leaveSubRecord(); r.leaveSubRecord();
} }
} }
void write(Athena::io::YAMLDocWriter& w) const void write(athena::io::YAMLDocWriter& w) const
{ {
w.enterSubVector(nullptr); w.enterSubVector(nullptr);
for (int i=0 ; i<3 ; ++i) for (int i=0 ; i<3 ; ++i)
@ -928,13 +928,13 @@ struct MVEConstant : IModVectorElement
__isz = comps[1].binarySize(__isz); __isz = comps[1].binarySize(__isz);
return comps[2].binarySize(__isz); return comps[2].binarySize(__isz);
} }
void read(Athena::io::IStreamReader& r) void read(athena::io::IStreamReader& r)
{ {
comps[0].read(r); comps[0].read(r);
comps[1].read(r); comps[1].read(r);
comps[2].read(r); comps[2].read(r);
} }
void write(Athena::io::IStreamWriter& w) const void write(athena::io::IStreamWriter& w) const
{ {
comps[0].write(w); comps[0].write(w);
comps[1].write(w); comps[1].write(w);
@ -1039,7 +1039,7 @@ struct EESimpleEmitterTR : EESimpleEmitter
{ {
Delete _d; Delete _d;
void read(Athena::io::YAMLDocReader& r) void read(athena::io::YAMLDocReader& r)
{ {
position.m_elem.reset(); position.m_elem.reset();
velocity.m_elem.reset(); velocity.m_elem.reset();
@ -1054,7 +1054,7 @@ struct EESimpleEmitterTR : EESimpleEmitter
r.leaveSubRecord(); r.leaveSubRecord();
} }
} }
void write(Athena::io::YAMLDocWriter& w) const void write(athena::io::YAMLDocWriter& w) const
{ {
w.enterSubRecord("ILOC"); w.enterSubRecord("ILOC");
position.write(w); position.write(w);
@ -1070,7 +1070,7 @@ struct EESimpleEmitterTR : EESimpleEmitter
__isz = velocity.binarySize(__isz); __isz = velocity.binarySize(__isz);
return __isz; return __isz;
} }
void read(Athena::io::IStreamReader& r) void read(athena::io::IStreamReader& r)
{ {
position.m_elem.reset(); position.m_elem.reset();
velocity.m_elem.reset(); velocity.m_elem.reset();
@ -1084,7 +1084,7 @@ struct EESimpleEmitterTR : EESimpleEmitter
velocity.read(r); velocity.read(r);
} }
} }
void write(Athena::io::IStreamWriter& w) const void write(athena::io::IStreamWriter& w) const
{ {
w.writeBytes((atInt8*)"ILOC", 4); w.writeBytes((atInt8*)"ILOC", 4);
position.write(w); position.write(w);
@ -1099,7 +1099,7 @@ struct UVEConstant : IUVElement
{ {
Delete _d; Delete _d;
IDType tex; IDType tex;
void read(Athena::io::YAMLDocReader& r) void read(athena::io::YAMLDocReader& r)
{ {
tex.clear(); tex.clear();
if (r.enterSubRecord("tex")) if (r.enterSubRecord("tex"))
@ -1108,7 +1108,7 @@ struct UVEConstant : IUVElement
r.leaveSubRecord(); r.leaveSubRecord();
} }
} }
void write(Athena::io::YAMLDocWriter& w) const void write(athena::io::YAMLDocWriter& w) const
{ {
w.enterSubRecord("tex"); w.enterSubRecord("tex");
tex.write(w); tex.write(w);
@ -1118,7 +1118,7 @@ struct UVEConstant : IUVElement
{ {
return tex.binarySize(__isz + 4); return tex.binarySize(__isz + 4);
} }
void read(Athena::io::IStreamReader& r) void read(athena::io::IStreamReader& r)
{ {
tex.clear(); tex.clear();
uint32_t clsId; uint32_t clsId;
@ -1126,7 +1126,7 @@ struct UVEConstant : IUVElement
if (clsId == SBIG('CNST')) if (clsId == SBIG('CNST'))
tex.read(r); tex.read(r);
} }
void write(Athena::io::IStreamWriter& w) const void write(athena::io::IStreamWriter& w) const
{ {
w.writeBytes((atInt8*)"CNST", 4); w.writeBytes((atInt8*)"CNST", 4);
tex.write(w); tex.write(w);
@ -1145,7 +1145,7 @@ struct UVEAnimTexture : IUVElement
IntElementFactory strideH; IntElementFactory strideH;
IntElementFactory cycleFrames; IntElementFactory cycleFrames;
Value<bool> loop = false; Value<bool> loop = false;
void read(Athena::io::YAMLDocReader& r) void read(athena::io::YAMLDocReader& r)
{ {
tex.clear(); tex.clear();
if (r.enterSubRecord("tex")) if (r.enterSubRecord("tex"))
@ -1184,7 +1184,7 @@ struct UVEAnimTexture : IUVElement
r.leaveSubRecord(); r.leaveSubRecord();
} }
} }
void write(Athena::io::YAMLDocWriter& w) const void write(athena::io::YAMLDocWriter& w) const
{ {
w.enterSubRecord("tex"); w.enterSubRecord("tex");
tex.write(w); tex.write(w);
@ -1217,7 +1217,7 @@ struct UVEAnimTexture : IUVElement
__isz = cycleFrames.binarySize(__isz); __isz = cycleFrames.binarySize(__isz);
return __isz; return __isz;
} }
void read(Athena::io::IStreamReader& r) void read(athena::io::IStreamReader& r)
{ {
tex.clear(); tex.clear();
uint32_t clsId; uint32_t clsId;
@ -1233,7 +1233,7 @@ struct UVEAnimTexture : IUVElement
if (clsId == SBIG('CNST')) if (clsId == SBIG('CNST'))
loop = r.readBool(); loop = r.readBool();
} }
void write(Athena::io::IStreamWriter& w) const void write(athena::io::IStreamWriter& w) const
{ {
w.writeBytes((atInt8*)"CNST", 4); w.writeBytes((atInt8*)"CNST", 4);
tex.write(w); tex.write(w);
@ -1255,7 +1255,7 @@ struct UVElementFactory : BigYAML
std::unique_ptr<IUVElement> m_elem; std::unique_ptr<IUVElement> m_elem;
operator bool() const {return m_elem.operator bool();} operator bool() const {return m_elem.operator bool();}
void read(Athena::io::YAMLDocReader& r) void read(athena::io::YAMLDocReader& r)
{ {
if (r.enterSubRecord("CNST")) if (r.enterSubRecord("CNST"))
{ {
@ -1273,7 +1273,7 @@ struct UVElementFactory : BigYAML
m_elem.reset(); m_elem.reset();
} }
void write(Athena::io::YAMLDocWriter& w) const void write(athena::io::YAMLDocWriter& w) const
{ {
if (m_elem) if (m_elem)
{ {
@ -1291,7 +1291,7 @@ struct UVElementFactory : BigYAML
return __isz + 4; return __isz + 4;
} }
void read(Athena::io::IStreamReader& r) void read(athena::io::IStreamReader& r)
{ {
uint32_t clsId; uint32_t clsId;
r.readBytesToBuf(&clsId, 4); r.readBytesToBuf(&clsId, 4);
@ -1310,7 +1310,7 @@ struct UVElementFactory : BigYAML
m_elem->read(r); m_elem->read(r);
} }
void write(Athena::io::IStreamWriter& w) const void write(athena::io::IStreamWriter& w) const
{ {
if (m_elem) if (m_elem)
{ {
@ -1339,7 +1339,7 @@ struct SpawnSystemKeyframeData : BigYAML
Value<atUint32> b; Value<atUint32> b;
Value<atUint32> c; Value<atUint32> c;
void read(Athena::io::YAMLDocReader& r) void read(athena::io::YAMLDocReader& r)
{ {
if (r.enterSubRecord("id")) if (r.enterSubRecord("id"))
{ {
@ -1362,7 +1362,7 @@ struct SpawnSystemKeyframeData : BigYAML
r.leaveSubRecord(); r.leaveSubRecord();
} }
} }
void write(Athena::io::YAMLDocWriter& w) const void write(athena::io::YAMLDocWriter& w) const
{ {
w.enterSubRecord("id"); w.enterSubRecord("id");
id.write(w); id.write(w);
@ -1375,14 +1375,14 @@ struct SpawnSystemKeyframeData : BigYAML
{ {
return id.binarySize(__isz + 12); return id.binarySize(__isz + 12);
} }
void read(Athena::io::IStreamReader& r) void read(athena::io::IStreamReader& r)
{ {
id.read(r); id.read(r);
a = r.readUint32Big(); a = r.readUint32Big();
b = r.readUint32Big(); b = r.readUint32Big();
c = r.readUint32Big(); c = r.readUint32Big();
} }
void write(Athena::io::IStreamWriter& w) const void write(athena::io::IStreamWriter& w) const
{ {
id.write(w); id.write(w);
w.writeUint32Big(a); w.writeUint32Big(a);
@ -1393,7 +1393,7 @@ struct SpawnSystemKeyframeData : BigYAML
std::vector<std::pair<atUint32, std::vector<SpawnSystemKeyframeInfo>>> spawns; std::vector<std::pair<atUint32, std::vector<SpawnSystemKeyframeInfo>>> spawns;
void read(Athena::io::YAMLDocReader& r) void read(athena::io::YAMLDocReader& r)
{ {
if (r.enterSubRecord("a")) if (r.enterSubRecord("a"))
{ {
@ -1416,18 +1416,20 @@ struct SpawnSystemKeyframeData : BigYAML
r.leaveSubRecord(); r.leaveSubRecord();
} }
spawns.clear(); spawns.clear();
if (r.enterSubVector("spawns")) size_t spawnCount;
if (r.enterSubVector("spawns", spawnCount))
{ {
spawns.reserve(r.getCurNode()->m_seqChildren.size()); spawns.reserve(spawnCount);
for (const auto& child : r.getCurNode()->m_seqChildren) for (const auto& child : r.getCurNode()->m_seqChildren)
{ {
if (r.enterSubRecord(nullptr)) if (r.enterSubRecord(nullptr))
{ {
spawns.emplace_back(); spawns.emplace_back();
spawns.back().first = r.readUint32("startFrame"); spawns.back().first = r.readUint32("startFrame");
if (r.enterSubVector("systems")) size_t systemCount;
if (r.enterSubVector("systems", systemCount))
{ {
spawns.back().second.reserve(r.getCurNode()->m_seqChildren.size()); spawns.back().second.reserve(systemCount);
for (const auto& in : r.getCurNode()->m_seqChildren) for (const auto& in : r.getCurNode()->m_seqChildren)
{ {
spawns.back().second.emplace_back(); spawns.back().second.emplace_back();
@ -1444,7 +1446,7 @@ struct SpawnSystemKeyframeData : BigYAML
r.leaveSubVector(); r.leaveSubVector();
} }
} }
void write(Athena::io::YAMLDocWriter& w) const void write(athena::io::YAMLDocWriter& w) const
{ {
if (spawns.empty()) if (spawns.empty())
return; return;
@ -1480,7 +1482,7 @@ struct SpawnSystemKeyframeData : BigYAML
} }
return __isz; return __isz;
} }
void read(Athena::io::IStreamReader& r) void read(athena::io::IStreamReader& r)
{ {
uint32_t clsId; uint32_t clsId;
r.readBytesToBuf(&clsId, 4); r.readBytesToBuf(&clsId, 4);
@ -1507,7 +1509,7 @@ struct SpawnSystemKeyframeData : BigYAML
} }
} }
} }
void write(Athena::io::IStreamWriter& w) const void write(athena::io::IStreamWriter& w) const
{ {
if (spawns.empty()) if (spawns.empty())
{ {
@ -1537,7 +1539,7 @@ struct ChildResourceFactory : BigYAML
{ {
Delete _d; Delete _d;
IDType id; IDType id;
void read(Athena::io::YAMLDocReader& r) void read(athena::io::YAMLDocReader& r)
{ {
id.clear(); id.clear();
if (r.enterSubRecord("CNST")) if (r.enterSubRecord("CNST"))
@ -1546,7 +1548,7 @@ struct ChildResourceFactory : BigYAML
r.leaveSubRecord(); r.leaveSubRecord();
} }
} }
void write(Athena::io::YAMLDocWriter& w) const void write(athena::io::YAMLDocWriter& w) const
{ {
if (id) if (id)
{ {
@ -1562,7 +1564,7 @@ struct ChildResourceFactory : BigYAML
else else
return __isz + 4; return __isz + 4;
} }
void read(Athena::io::IStreamReader& r) void read(athena::io::IStreamReader& r)
{ {
id.clear(); id.clear();
uint32_t clsId; uint32_t clsId;
@ -1570,7 +1572,7 @@ struct ChildResourceFactory : BigYAML
if (clsId == SBIG('CNST')) if (clsId == SBIG('CNST'))
id.read(r); id.read(r);
} }
void write(Athena::io::IStreamWriter& w) const void write(athena::io::IStreamWriter& w) const
{ {
if (id) if (id)
{ {

View File

@ -6,12 +6,12 @@
namespace DataSpec namespace DataSpec
{ {
std::unique_ptr<ISTRG> LoadSTRG(Athena::io::IStreamReader& reader) std::unique_ptr<ISTRG> LoadSTRG(athena::io::IStreamReader& reader)
{ {
uint32_t magic = reader.readUint32Big(); uint32_t magic = reader.readUint32Big();
if (magic != 0x87654321) if (magic != 0x87654321)
{ {
LogDNACommon.report(LogVisor::Error, "invalid STRG magic"); LogDNACommon.report(logvisor::Error, "invalid STRG magic");
return std::unique_ptr<ISTRG>(); return std::unique_ptr<ISTRG>();
} }

View File

@ -3,9 +3,9 @@
#include <string> #include <string>
#include <fstream> #include <fstream>
#include <HECL/HECL.hpp> #include <hecl/hecl.hpp>
#include <HECL/Database.hpp> #include <hecl/Database.hpp>
#include <Athena/FileWriter.hpp> #include <athena/FileWriter.hpp>
#include "DNACommon.hpp" #include "DNACommon.hpp"
namespace DataSpec namespace DataSpec
@ -17,10 +17,10 @@ struct ISTRG : BigYAML
virtual size_t count() const=0; virtual size_t count() const=0;
virtual std::string getUTF8(const FourCC& lang, size_t idx) const=0; virtual std::string getUTF8(const FourCC& lang, size_t idx) const=0;
virtual std::wstring getUTF16(const FourCC& lang, size_t idx) const=0; virtual std::wstring getUTF16(const FourCC& lang, size_t idx) const=0;
virtual HECL::SystemString getSystemString(const FourCC& lang, size_t idx) const=0; virtual hecl::SystemString getSystemString(const FourCC& lang, size_t idx) const=0;
virtual int32_t lookupIdx(const std::string& name) const=0; virtual int32_t lookupIdx(const std::string& name) const=0;
}; };
std::unique_ptr<ISTRG> LoadSTRG(Athena::io::IStreamReader& reader); std::unique_ptr<ISTRG> LoadSTRG(athena::io::IStreamReader& reader);
} }

View File

@ -6,7 +6,7 @@
namespace DataSpec namespace DataSpec
{ {
static LogVisor::LogModule Log("libpng"); static logvisor::Module Log("libpng");
/* GX uses this upsampling technique to prevent banding on downsampled texture formats */ /* GX uses this upsampling technique to prevent banding on downsampled texture formats */
static inline uint8_t Convert3To8(uint8_t v) static inline uint8_t Convert3To8(uint8_t v)
@ -80,10 +80,10 @@ static inline void LookupRGBA8(const uint8_t* texels, int width, int x, int y,
int bidx = (by * bwidth + bx) * 2; int bidx = (by * bwidth + bx) * 2;
const uint16_t* artexels = (uint16_t*)&texels[32*bidx]; const uint16_t* artexels = (uint16_t*)&texels[32*bidx];
const uint16_t* gbtexels = (uint16_t*)&texels[32*(bidx+1)]; const uint16_t* gbtexels = (uint16_t*)&texels[32*(bidx+1)];
uint16_t ar = HECL::SBig(artexels[ry*4+rx]); uint16_t ar = hecl::SBig(artexels[ry*4+rx]);
*a = ar >> 8 & 0xff; *a = ar >> 8 & 0xff;
*r = ar & 0xff; *r = ar & 0xff;
uint16_t gb = HECL::SBig(gbtexels[ry*4+rx]); uint16_t gb = hecl::SBig(gbtexels[ry*4+rx]);
*g = gb >> 8 & 0xff; *g = gb >> 8 & 0xff;
*b = gb & 0xff; *b = gb & 0xff;
} }
@ -160,7 +160,7 @@ static void DecodeIA8(png_structrp png, png_infop info,
static const uint8_t* DecodePalette(png_structrp png, png_infop info, static const uint8_t* DecodePalette(png_structrp png, png_infop info,
int numEntries, const uint8_t* data) int numEntries, const uint8_t* data)
{ {
uint32_t format = HECL::SBig(*(uint32_t*)data); uint32_t format = hecl::SBig(*(uint32_t*)data);
data += 8; data += 8;
png_color cEntries[256]; png_color cEntries[256];
png_byte aEntries[256]; png_byte aEntries[256];
@ -184,7 +184,7 @@ static const uint8_t* DecodePalette(png_structrp png, png_infop info,
const uint16_t* data16 = (uint16_t*)data; const uint16_t* data16 = (uint16_t*)data;
for (int e=0 ; e<numEntries ; ++e) for (int e=0 ; e<numEntries ; ++e)
{ {
uint16_t texel = HECL::SBig(data16[e]); uint16_t texel = hecl::SBig(data16[e]);
cEntries[e].red = Convert5To8(texel >> 11 & 0x1f); cEntries[e].red = Convert5To8(texel >> 11 & 0x1f);
cEntries[e].green = Convert6To8(texel >> 5 & 0x3f); cEntries[e].green = Convert6To8(texel >> 5 & 0x3f);
cEntries[e].blue = Convert5To8(texel & 0x1f); cEntries[e].blue = Convert5To8(texel & 0x1f);
@ -197,7 +197,7 @@ static const uint8_t* DecodePalette(png_structrp png, png_infop info,
const uint16_t* data16 = (uint16_t*)data; const uint16_t* data16 = (uint16_t*)data;
for (int e=0 ; e<numEntries ; ++e) for (int e=0 ; e<numEntries ; ++e)
{ {
uint16_t texel = HECL::SBig(data16[e]); uint16_t texel = hecl::SBig(data16[e]);
if (texel & 0x8000) if (texel & 0x8000)
{ {
cEntries[e].red = Convert5To8(texel >> 10 & 0x1f); cEntries[e].red = Convert5To8(texel >> 10 & 0x1f);
@ -226,7 +226,7 @@ static const uint8_t* DecodePalette(png_structrp png, png_infop info,
static const uint8_t* DecodePaletteSPLT(png_structrp png, png_infop info, static const uint8_t* DecodePaletteSPLT(png_structrp png, png_infop info,
int numEntries, const uint8_t* data) int numEntries, const uint8_t* data)
{ {
uint32_t format = HECL::SBig(*(uint32_t*)data); uint32_t format = hecl::SBig(*(uint32_t*)data);
data += 8; data += 8;
png_sPLT_entry entries[256] = {}; png_sPLT_entry entries[256] = {};
png_sPLT_t GXEntry = png_sPLT_t GXEntry =
@ -258,7 +258,7 @@ static const uint8_t* DecodePaletteSPLT(png_structrp png, png_infop info,
const uint16_t* data16 = (uint16_t*)data; const uint16_t* data16 = (uint16_t*)data;
for (int e=0 ; e<numEntries ; ++e) for (int e=0 ; e<numEntries ; ++e)
{ {
uint16_t texel = HECL::SBig(data16[e]); uint16_t texel = hecl::SBig(data16[e]);
entries[e].red = Convert5To8(texel >> 11 & 0x1f); entries[e].red = Convert5To8(texel >> 11 & 0x1f);
entries[e].green = Convert6To8(texel >> 5 & 0x3f); entries[e].green = Convert6To8(texel >> 5 & 0x3f);
entries[e].blue = Convert5To8(texel & 0x1f); entries[e].blue = Convert5To8(texel & 0x1f);
@ -273,7 +273,7 @@ static const uint8_t* DecodePaletteSPLT(png_structrp png, png_infop info,
const uint16_t* data16 = (uint16_t*)data; const uint16_t* data16 = (uint16_t*)data;
for (int e=0 ; e<numEntries ; ++e) for (int e=0 ; e<numEntries ; ++e)
{ {
uint16_t texel = HECL::SBig(data16[e]); uint16_t texel = hecl::SBig(data16[e]);
if (texel & 0x8000) if (texel & 0x8000)
{ {
entries[e].red = Convert5To8(texel >> 10 & 0x1f); entries[e].red = Convert5To8(texel >> 10 & 0x1f);
@ -369,7 +369,7 @@ static void DecodeRGB565(png_structrp png, png_infop info,
{ {
for (int x=0 ; x<width ; ++x) for (int x=0 ; x<width ; ++x)
{ {
uint16_t texel = HECL::SBig(Lookup16BPP(texels, width, x, y)); uint16_t texel = hecl::SBig(Lookup16BPP(texels, width, x, y));
buf[x*3] = Convert5To8(texel >> 11 & 0x1f); buf[x*3] = Convert5To8(texel >> 11 & 0x1f);
buf[x*3+1] = Convert6To8(texel >> 5 & 0x3f); buf[x*3+1] = Convert6To8(texel >> 5 & 0x3f);
buf[x*3+2] = Convert5To8(texel & 0x1f); buf[x*3+2] = Convert5To8(texel & 0x1f);
@ -390,7 +390,7 @@ static void DecodeRGB5A3(png_structrp png, png_infop info,
{ {
for (int x=0 ; x<width ; ++x) for (int x=0 ; x<width ; ++x)
{ {
uint16_t texel = HECL::SBig(Lookup16BPP(texels, width, x, y)); uint16_t texel = hecl::SBig(Lookup16BPP(texels, width, x, y));
if (texel & 0x8000) if (texel & 0x8000)
{ {
buf[x*4] = Convert5To8(texel >> 10 & 0x1f); buf[x*4] = Convert5To8(texel >> 10 & 0x1f);
@ -473,25 +473,25 @@ static void DecodeCMPR(png_structrp png, png_infop info,
static void PNGErr(png_structp png, png_const_charp msg) static void PNGErr(png_structp png, png_const_charp msg)
{ {
Log.report(LogVisor::Error, msg); Log.report(logvisor::Error, msg);
} }
static void PNGWarn(png_structp png, png_const_charp msg) static void PNGWarn(png_structp png, png_const_charp msg)
{ {
Log.report(LogVisor::Warning, msg); Log.report(logvisor::Warning, msg);
} }
bool TXTR::Extract(PAKEntryReadStream& rs, const HECL::ProjectPath& outPath) bool TXTR::Extract(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath)
{ {
uint32_t format = rs.readUint32Big(); uint32_t format = rs.readUint32Big();
uint16_t width = rs.readUint16Big(); uint16_t width = rs.readUint16Big();
uint16_t height = rs.readUint16Big(); uint16_t height = rs.readUint16Big();
uint32_t numMips = rs.readUint32Big(); uint32_t numMips = rs.readUint32Big();
FILE* fp = HECL::Fopen(outPath.getAbsolutePath().c_str(), _S("wb")); FILE* fp = hecl::Fopen(outPath.getAbsolutePath().c_str(), _S("wb"));
if (!fp) if (!fp)
{ {
Log.report(LogVisor::Error, Log.report(logvisor::Error,
_S("Unable to open '%s' for writing"), _S("Unable to open '%s' for writing"),
outPath.getAbsolutePath().c_str()); outPath.getAbsolutePath().c_str());
return false; return false;
@ -542,7 +542,7 @@ bool TXTR::Extract(PAKEntryReadStream& rs, const HECL::ProjectPath& outPath)
return true; return true;
} }
bool TXTR::Cook(const HECL::ProjectPath& inPath, const HECL::ProjectPath& outPath) bool TXTR::Cook(const hecl::ProjectPath& inPath, const hecl::ProjectPath& outPath)
{ {
return false; return false;
} }

View File

@ -9,8 +9,8 @@ class PAKEntryReadStream;
struct TXTR struct TXTR
{ {
static bool Extract(PAKEntryReadStream& rs, const HECL::ProjectPath& outPath); static bool Extract(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath);
static bool Cook(const HECL::ProjectPath& inPath, const HECL::ProjectPath& outPath); static bool Cook(const hecl::ProjectPath& inPath, const hecl::ProjectPath& outPath);
}; };
} }

View File

@ -1,7 +1,7 @@
#ifndef _DNAMP1_AFSM_HPP_ #ifndef _DNAMP1_AFSM_HPP_
#define _DNAMP1_AFSM_HPP_ #define _DNAMP1_AFSM_HPP_
#include <Athena/FileWriter.hpp> #include <athena/FileWriter.hpp>
#include "../DNACommon/DNACommon.hpp" #include "../DNACommon/DNACommon.hpp"
#include "DNAMP1.hpp" #include "DNAMP1.hpp"
@ -32,7 +32,7 @@ struct AFSM : public BigYAML
String<-1> name; String<-1> name;
Value<float> parameter; Value<float> parameter;
Value<atUint32> targetState; Value<atUint32> targetState;
void read(Athena::io::IStreamReader& __dna_reader) void read(athena::io::IStreamReader& __dna_reader)
{ {
/* name */ /* name */
name = __dna_reader.readString(-1); name = __dna_reader.readString(-1);
@ -45,7 +45,7 @@ struct AFSM : public BigYAML
} }
} }
void write(Athena::io::IStreamWriter& __dna_writer) const void write(athena::io::IStreamWriter& __dna_writer) const
{ {
/* name */ /* name */
__dna_writer.writeString(name, -1); __dna_writer.writeString(name, -1);
@ -58,7 +58,7 @@ struct AFSM : public BigYAML
} }
} }
void read(Athena::io::YAMLDocReader& __dna_docin) void read(athena::io::YAMLDocReader& __dna_docin)
{ {
/* name */ /* name */
name = __dna_docin.readString("name"); name = __dna_docin.readString("name");
@ -71,7 +71,7 @@ struct AFSM : public BigYAML
} }
} }
void write(Athena::io::YAMLDocWriter& __dna_docout) const void write(athena::io::YAMLDocWriter& __dna_docout) const
{ {
/* name */ /* name */
__dna_docout.writeString("name", name); __dna_docout.writeString("name", name);
@ -86,7 +86,7 @@ struct AFSM : public BigYAML
static const char* DNAType() static const char* DNAType()
{ {
return "Retro::DNAMP1::AFSM::Transition::Trigger"; return "urde::DNAMP1::AFSM::Transition::Trigger";
} }
size_t binarySize(size_t __isz) const size_t binarySize(size_t __isz) const
@ -98,21 +98,21 @@ struct AFSM : public BigYAML
Vector<Trigger, DNA_COUNT(triggerCount)> triggers; Vector<Trigger, DNA_COUNT(triggerCount)> triggers;
void read(Athena::io::IStreamReader& __dna_reader) void read(athena::io::IStreamReader& __dna_reader)
{ {
/* triggerCount */ /* triggerCount */
triggerCount = __dna_reader.readUint32Big(); triggerCount = __dna_reader.readUint32Big();
int i = 0; int i = 0;
/* triggers */ /* triggers */
__dna_reader.enumerate<Trigger>(triggers, triggerCount, __dna_reader.enumerate<Trigger>(triggers, triggerCount,
[&](Athena::io::IStreamReader& in, Trigger& tr){ [&](athena::io::IStreamReader& in, Trigger& tr){
tr.first = i == 0; tr.first = i == 0;
tr.read(in); tr.read(in);
i++; i++;
}); });
} }
void write(Athena::io::IStreamWriter& __dna_writer) const void write(athena::io::IStreamWriter& __dna_writer) const
{ {
/* triggerCount */ /* triggerCount */
__dna_writer.writeInt32Big(triggerCount); __dna_writer.writeInt32Big(triggerCount);
@ -120,31 +120,27 @@ struct AFSM : public BigYAML
__dna_writer.enumerate(triggers); __dna_writer.enumerate(triggers);
} }
void read(Athena::io::YAMLDocReader& __dna_docin) void read(athena::io::YAMLDocReader& __dna_docin)
{ {
/* triggerCount */
triggerCount = __dna_docin.readUint32("triggerCount");
int i = 0; int i = 0;
/* triggers */ /* triggers */
__dna_docin.enumerate<Trigger>("triggers", triggers, triggerCount, triggerCount = __dna_docin.enumerate<Trigger>("triggers", triggers,
[&](Athena::io::YAMLDocReader& in, Trigger& tr){ [&](athena::io::YAMLDocReader& in, Trigger& tr){
tr.first = i == 0; tr.first = i == 0;
tr.read(in); tr.read(in);
i++; i++;
}); });
} }
void write(Athena::io::YAMLDocWriter& __dna_docout) const void write(athena::io::YAMLDocWriter& __dna_docout) const
{ {
/* triggerCount */
__dna_docout.writeUint32("triggerCount", triggerCount);
/* triggers */ /* triggers */
__dna_docout.enumerate("triggers", triggers); __dna_docout.enumerate("triggers", triggers);
} }
static const char* DNAType() static const char* DNAType()
{ {
return "Retro::DNAMP1::AFSM::Transition"; return "urde::DNAMP1::AFSM::Transition";
} }
size_t binarySize(size_t __isz) const size_t binarySize(size_t __isz) const
@ -159,11 +155,11 @@ struct AFSM : public BigYAML
Vector<State, DNA_COUNT(stateCount)> states; Vector<State, DNA_COUNT(stateCount)> states;
static bool Extract(PAKEntryReadStream& rs, const HECL::ProjectPath& outPath) static bool Extract(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath)
{ {
AFSM afsm; AFSM afsm;
afsm.read(rs); afsm.read(rs);
FILE* fp = HECL::Fopen(outPath.getAbsolutePath().c_str(), _S("wb")); FILE* fp = hecl::Fopen(outPath.getAbsolutePath().c_str(), _S("wb"));
afsm.toYAMLFile(fp); afsm.toYAMLFile(fp);
fclose(fp); fclose(fp);
return true; return true;

View File

@ -5,7 +5,7 @@ namespace DataSpec
namespace DNAMP1 namespace DNAMP1
{ {
void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::ParmInfo::read(Athena::io::IStreamReader& reader) void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::ParmInfo::read(athena::io::IStreamReader& reader)
{ {
parmType = reader.readUint32Big(); parmType = reader.readUint32Big();
unk1 = reader.readUint32Big(); unk1 = reader.readUint32Big();
@ -32,7 +32,7 @@ void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::ParmInfo::read(A
} }
} }
void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::ParmInfo::write(Athena::io::IStreamWriter& writer) const void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::ParmInfo::write(athena::io::IStreamWriter& writer) const
{ {
writer.writeUint32Big(parmType); writer.writeUint32Big(parmType);
writer.writeUint32Big(unk1); writer.writeUint32Big(unk1);
@ -77,12 +77,13 @@ size_t ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::ParmInfo::bina
return __isz; return __isz;
} }
void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::ParmInfo::read(Athena::io::YAMLDocReader& reader) void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::ParmInfo::read(athena::io::YAMLDocReader& reader)
{ {
parmType = reader.readUint32("parmType"); parmType = reader.readUint32("parmType");
unk1 = reader.readUint32("unk1"); unk1 = reader.readUint32("unk1");
unk2 = reader.readFloat("unk2"); unk2 = reader.readFloat("unk2");
reader.enterSubVector("parmVals"); size_t parmCount;
reader.enterSubVector("parmVals", parmCount);
switch (DataType(parmType)) switch (DataType(parmType))
{ {
case DataType::Int32: case DataType::Int32:
@ -107,7 +108,7 @@ void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::ParmInfo::read(A
reader.leaveSubVector(); reader.leaveSubVector();
} }
void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::ParmInfo::write(Athena::io::YAMLDocWriter& writer) const void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::ParmInfo::write(athena::io::YAMLDocWriter& writer) const
{ {
writer.writeUint32("parmType", parmType); writer.writeUint32("parmType", parmType);
writer.writeUint32("unk1", unk1); writer.writeUint32("unk1", unk1);
@ -138,10 +139,10 @@ void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::ParmInfo::write(
const char* ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::ParmInfo::DNAType() const char* ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::ParmInfo::DNAType()
{ {
return "Retro::DNAMP1::ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::ParmInfo"; return "urde::DNAMP1::ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::ParmInfo";
} }
void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::read(Athena::io::IStreamReader& reader) void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::read(athena::io::IStreamReader& reader)
{ {
id = reader.readUint32Big(); id = reader.readUint32Big();
atUint32 parmInfoCount = reader.readUint32Big(); atUint32 parmInfoCount = reader.readUint32Big();
@ -152,7 +153,7 @@ void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::read(Athena::io:
animInfos.clear(); animInfos.clear();
animInfos.reserve(animInfoCount); animInfos.reserve(animInfoCount);
reader.enumerate<AnimInfo>(animInfos, animInfoCount, reader.enumerate<AnimInfo>(animInfos, animInfoCount,
[this, parmInfoCount](Athena::io::IStreamReader& reader, AnimInfo& ai) [this, parmInfoCount](athena::io::IStreamReader& reader, AnimInfo& ai)
{ {
ai.id = reader.readUint32Big(); ai.id = reader.readUint32Big();
ai.parmVals.reserve(parmInfoCount); ai.parmVals.reserve(parmInfoCount);
@ -179,7 +180,7 @@ void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::read(Athena::io:
}); });
} }
void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::write(Athena::io::IStreamWriter& writer) const void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::write(athena::io::IStreamWriter& writer) const
{ {
writer.writeUint32Big(id); writer.writeUint32Big(id);
writer.writeUint32Big(parmInfos.size()); writer.writeUint32Big(parmInfos.size());
@ -244,20 +245,19 @@ size_t ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::binarySize(siz
return __isz; return __isz;
} }
void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::read(Athena::io::YAMLDocReader& reader) void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::read(athena::io::YAMLDocReader& reader)
{ {
id = reader.readUint32("id"); id = reader.readUint32("id");
atUint32 parmInfoCount = reader.readUint32("parmInfoCount");
atUint32 animInfoCount = reader.readUint32("animInfoCount");
reader.enumerate("parmInfos", parmInfos, parmInfoCount); atUint32 parmInfoCount = reader.enumerate("parmInfos", parmInfos);
reader.enumerate<AnimInfo>("animInfos", animInfos, animInfoCount, reader.enumerate<AnimInfo>("animInfos", animInfos,
[this, parmInfoCount](Athena::io::YAMLDocReader& reader, AnimInfo& ai) [this, parmInfoCount](athena::io::YAMLDocReader& reader, AnimInfo& ai)
{ {
ai.id = reader.readUint32("id"); ai.id = reader.readUint32("id");
ai.parmVals.reserve(parmInfoCount); ai.parmVals.reserve(parmInfoCount);
reader.enterSubVector("parmVals"); size_t parmValCount;
reader.enterSubVector("parmVals", parmValCount);
for (const ParmInfo& pi : parmInfos) for (const ParmInfo& pi : parmInfos)
{ {
switch (ParmInfo::DataType(pi.parmType)) switch (ParmInfo::DataType(pi.parmType))
@ -282,16 +282,14 @@ void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::read(Athena::io:
}); });
} }
void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::write(Athena::io::YAMLDocWriter& writer) const void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::write(athena::io::YAMLDocWriter& writer) const
{ {
writer.writeUint32("id", id); writer.writeUint32("id", id);
writer.writeUint32("parmInfoCount", parmInfos.size());
writer.writeUint32("animInfoCount", animInfos.size());
writer.enumerate("parmInfos", parmInfos); writer.enumerate("parmInfos", parmInfos);
writer.enumerate<AnimInfo>("animInfos", animInfos, writer.enumerate<AnimInfo>("animInfos", animInfos,
[this](Athena::io::YAMLDocWriter& writer, const AnimInfo& ai) [this](athena::io::YAMLDocWriter& writer, const AnimInfo& ai)
{ {
writer.writeUint32("id", ai.id); writer.writeUint32("id", ai.id);
auto it = ai.parmVals.begin(); auto it = ai.parmVals.begin();
@ -325,10 +323,10 @@ void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::write(Athena::io
const char* ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::DNAType() const char* ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::DNAType()
{ {
return "Retro::DNAMP1::ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState"; return "urde::DNAMP1::ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState";
} }
void ANCS::CharacterSet::CharacterInfo::read(Athena::io::IStreamReader& reader) void ANCS::CharacterSet::CharacterInfo::read(athena::io::IStreamReader& reader)
{ {
idx = reader.readUint32Big(); idx = reader.readUint32Big();
atUint16 sectionCount = reader.readUint16Big(); atUint16 sectionCount = reader.readUint16Big();
@ -388,7 +386,7 @@ void ANCS::CharacterSet::CharacterInfo::read(Athena::io::IStreamReader& reader)
} }
} }
void ANCS::CharacterSet::CharacterInfo::write(Athena::io::IStreamWriter& writer) const void ANCS::CharacterSet::CharacterInfo::write(athena::io::IStreamWriter& writer) const
{ {
writer.writeUint32Big(idx); writer.writeUint32Big(idx);
@ -524,7 +522,7 @@ size_t ANCS::CharacterSet::CharacterInfo::binarySize(size_t __isz) const
return __isz; return __isz;
} }
void ANCS::CharacterSet::CharacterInfo::read(Athena::io::YAMLDocReader& reader) void ANCS::CharacterSet::CharacterInfo::read(athena::io::YAMLDocReader& reader)
{ {
idx = reader.readUint32("idx"); idx = reader.readUint32("idx");
atUint16 sectionCount = reader.readUint16("sectionCount"); atUint16 sectionCount = reader.readUint16("sectionCount");
@ -533,25 +531,20 @@ void ANCS::CharacterSet::CharacterInfo::read(Athena::io::YAMLDocReader& reader)
reader.enumerate("cskr", cskr); reader.enumerate("cskr", cskr);
reader.enumerate("cinf", cinf); reader.enumerate("cinf", cinf);
atUint32 animationCount = reader.readUint32("animationCount"); reader.enumerate("animations", animations);
reader.enumerate("animations", animations, animationCount);
reader.enumerate("pasDatabase", pasDatabase); reader.enumerate("pasDatabase", pasDatabase);
atUint32 partCount = reader.readUint32("partCount"); reader.enumerate("part", partResData.part);
reader.enumerate("part", partResData.part, partCount);
atUint32 swhcCount = reader.readUint32("swhcCount"); reader.enumerate("swhc", partResData.swhc);
reader.enumerate("swhc", partResData.swhc, swhcCount);
atUint32 unkCount = reader.readUint32("unkCount"); reader.enumerate("unk", partResData.unk);
reader.enumerate("unk", partResData.unk, unkCount);
partResData.elsc.clear(); partResData.elsc.clear();
if (sectionCount > 5) if (sectionCount > 5)
{ {
atUint32 elscCount = reader.readUint32("elscCount"); reader.enumerate("elsc", partResData.elsc);
reader.enumerate("elsc", partResData.elsc, elscCount);
} }
unk1 = reader.readUint32("unk1"); unk1 = reader.readUint32("unk1");
@ -559,15 +552,13 @@ void ANCS::CharacterSet::CharacterInfo::read(Athena::io::YAMLDocReader& reader)
animAABBs.clear(); animAABBs.clear();
if (sectionCount > 1) if (sectionCount > 1)
{ {
atUint32 aabbCount = reader.readUint32("animAABBCount"); reader.enumerate("part", animAABBs);
reader.enumerate("part", animAABBs, aabbCount);
} }
effects.clear(); effects.clear();
if (sectionCount > 2) if (sectionCount > 2)
{ {
atUint32 effectCount = reader.readUint32("effectCount"); reader.enumerate("effects", effects);
reader.enumerate("effects", effects, effectCount);
} }
if (sectionCount > 3) if (sectionCount > 3)
@ -579,12 +570,11 @@ void ANCS::CharacterSet::CharacterInfo::read(Athena::io::YAMLDocReader& reader)
animIdxs.clear(); animIdxs.clear();
if (sectionCount > 4) if (sectionCount > 4)
{ {
atUint32 animIdxCount = reader.readUint32("animIdxCount"); reader.enumerate("animIdxs", animIdxs);
reader.enumerate("animIdxs", animIdxs, animIdxCount);
} }
} }
void ANCS::CharacterSet::CharacterInfo::write(Athena::io::YAMLDocWriter& writer) const void ANCS::CharacterSet::CharacterInfo::write(athena::io::YAMLDocWriter& writer) const
{ {
writer.writeUint32("idx", idx); writer.writeUint32("idx", idx);
@ -608,23 +598,18 @@ void ANCS::CharacterSet::CharacterInfo::write(Athena::io::YAMLDocWriter& writer)
writer.enumerate("cskr", cskr); writer.enumerate("cskr", cskr);
writer.enumerate("cinf", cinf); writer.enumerate("cinf", cinf);
writer.writeUint32("animationCount", animations.size());
writer.enumerate("animations", animations); writer.enumerate("animations", animations);
writer.enumerate("pasDatabase", pasDatabase); writer.enumerate("pasDatabase", pasDatabase);
writer.writeUint32("partCount", partResData.part.size());
writer.enumerate("part", partResData.part); writer.enumerate("part", partResData.part);
writer.writeUint32("swhcCount", partResData.swhc.size());
writer.enumerate("swhc", partResData.swhc); writer.enumerate("swhc", partResData.swhc);
writer.writeUint32("unkCount", partResData.unk.size());
writer.enumerate("unk", partResData.unk); writer.enumerate("unk", partResData.unk);
if (sectionCount > 5) if (sectionCount > 5)
{ {
writer.writeUint32("elscCount", partResData.elsc.size());
writer.enumerate("elsc", partResData.elsc); writer.enumerate("elsc", partResData.elsc);
} }
@ -632,13 +617,11 @@ void ANCS::CharacterSet::CharacterInfo::write(Athena::io::YAMLDocWriter& writer)
if (sectionCount > 1) if (sectionCount > 1)
{ {
writer.writeUint32("animAABBCount", animAABBs.size());
writer.enumerate("animAABBs", animAABBs); writer.enumerate("animAABBs", animAABBs);
} }
if (sectionCount > 2) if (sectionCount > 2)
{ {
writer.writeUint32("effectCount", effects.size());
writer.enumerate("effects", effects); writer.enumerate("effects", effects);
} }
@ -650,17 +633,16 @@ void ANCS::CharacterSet::CharacterInfo::write(Athena::io::YAMLDocWriter& writer)
if (sectionCount > 4) if (sectionCount > 4)
{ {
writer.writeUint32("animIdxCount", animIdxs.size());
writer.enumerate("animIdxs", animIdxs); writer.enumerate("animIdxs", animIdxs);
} }
} }
const char* ANCS::CharacterSet::CharacterInfo::DNAType() const char* ANCS::CharacterSet::CharacterInfo::DNAType()
{ {
return "Retro::DNAMP1::ANCS::CharacterSet::CharacterInfo"; return "urde::DNAMP1::ANCS::CharacterSet::CharacterInfo";
} }
void ANCS::AnimationSet::MetaAnimFactory::read(Athena::io::IStreamReader& reader) void ANCS::AnimationSet::MetaAnimFactory::read(athena::io::IStreamReader& reader)
{ {
IMetaAnim::Type type(IMetaAnim::Type(reader.readUint32Big())); IMetaAnim::Type type(IMetaAnim::Type(reader.readUint32Big()));
switch (type) switch (type)
@ -691,7 +673,7 @@ void ANCS::AnimationSet::MetaAnimFactory::read(Athena::io::IStreamReader& reader
} }
} }
void ANCS::AnimationSet::MetaAnimFactory::write(Athena::io::IStreamWriter& writer) const void ANCS::AnimationSet::MetaAnimFactory::write(athena::io::IStreamWriter& writer) const
{ {
if (!m_anim) if (!m_anim)
return; return;
@ -706,7 +688,7 @@ size_t ANCS::AnimationSet::MetaAnimFactory::binarySize(size_t __isz) const
return m_anim->binarySize(__isz + 4); return m_anim->binarySize(__isz + 4);
} }
void ANCS::AnimationSet::MetaAnimFactory::read(Athena::io::YAMLDocReader& reader) void ANCS::AnimationSet::MetaAnimFactory::read(athena::io::YAMLDocReader& reader)
{ {
std::string type = reader.readString("type"); std::string type = reader.readString("type");
std::transform(type.begin(), type.end(), type.begin(), tolower); std::transform(type.begin(), type.end(), type.begin(), tolower);
@ -742,7 +724,7 @@ void ANCS::AnimationSet::MetaAnimFactory::read(Athena::io::YAMLDocReader& reader
} }
void ANCS::AnimationSet::MetaAnimFactory::write(Athena::io::YAMLDocWriter& writer) const void ANCS::AnimationSet::MetaAnimFactory::write(athena::io::YAMLDocWriter& writer) const
{ {
if (!m_anim) if (!m_anim)
return; return;
@ -752,10 +734,10 @@ void ANCS::AnimationSet::MetaAnimFactory::write(Athena::io::YAMLDocWriter& write
const char* ANCS::AnimationSet::MetaAnimFactory::DNAType() const char* ANCS::AnimationSet::MetaAnimFactory::DNAType()
{ {
return "Retro::DNAMP1::ANCS::AnimationSet::MetaAnimFactory"; return "urde::DNAMP1::ANCS::AnimationSet::MetaAnimFactory";
} }
void ANCS::AnimationSet::MetaTransFactory::read(Athena::io::IStreamReader& reader) void ANCS::AnimationSet::MetaTransFactory::read(athena::io::IStreamReader& reader)
{ {
IMetaTrans::Type type(IMetaTrans::Type(reader.readUint32Big())); IMetaTrans::Type type(IMetaTrans::Type(reader.readUint32Big()));
switch (type) switch (type)
@ -779,7 +761,7 @@ void ANCS::AnimationSet::MetaTransFactory::read(Athena::io::IStreamReader& reade
} }
} }
void ANCS::AnimationSet::MetaTransFactory::write(Athena::io::IStreamWriter& writer) const void ANCS::AnimationSet::MetaTransFactory::write(athena::io::IStreamWriter& writer) const
{ {
if (!m_trans) if (!m_trans)
{ {
@ -797,7 +779,7 @@ size_t ANCS::AnimationSet::MetaTransFactory::binarySize(size_t __isz) const
return m_trans->binarySize(__isz + 4); return m_trans->binarySize(__isz + 4);
} }
void ANCS::AnimationSet::MetaTransFactory::read(Athena::io::YAMLDocReader& reader) void ANCS::AnimationSet::MetaTransFactory::read(athena::io::YAMLDocReader& reader)
{ {
std::string type = reader.readString("type"); std::string type = reader.readString("type");
std::transform(type.begin(), type.end(), type.begin(), tolower); std::transform(type.begin(), type.end(), type.begin(), tolower);
@ -823,7 +805,7 @@ void ANCS::AnimationSet::MetaTransFactory::read(Athena::io::YAMLDocReader& reade
} }
void ANCS::AnimationSet::MetaTransFactory::write(Athena::io::YAMLDocWriter& writer) const void ANCS::AnimationSet::MetaTransFactory::write(athena::io::YAMLDocWriter& writer) const
{ {
if (!m_trans) if (!m_trans)
{ {
@ -836,10 +818,10 @@ void ANCS::AnimationSet::MetaTransFactory::write(Athena::io::YAMLDocWriter& writ
const char* ANCS::AnimationSet::MetaTransFactory::DNAType() const char* ANCS::AnimationSet::MetaTransFactory::DNAType()
{ {
return "Retro::DNAMP1::ANCS::AnimationSet::MetaTransFactory"; return "urde::DNAMP1::ANCS::AnimationSet::MetaTransFactory";
} }
void ANCS::AnimationSet::read(Athena::io::IStreamReader& reader) void ANCS::AnimationSet::read(athena::io::IStreamReader& reader)
{ {
atUint16 sectionCount = reader.readUint16Big(); atUint16 sectionCount = reader.readUint16Big();
@ -874,7 +856,7 @@ void ANCS::AnimationSet::read(Athena::io::IStreamReader& reader)
} }
} }
void ANCS::AnimationSet::write(Athena::io::IStreamWriter& writer) const void ANCS::AnimationSet::write(athena::io::IStreamWriter& writer) const
{ {
atUint16 sectionCount; atUint16 sectionCount;
if (animResources.size()) if (animResources.size())
@ -957,22 +939,19 @@ size_t ANCS::AnimationSet::binarySize(size_t __isz) const
return __isz; return __isz;
} }
void ANCS::AnimationSet::read(Athena::io::YAMLDocReader& reader) void ANCS::AnimationSet::read(athena::io::YAMLDocReader& reader)
{ {
atUint16 sectionCount = reader.readUint16("sectionCount"); atUint16 sectionCount = reader.readUint16("sectionCount");
atUint32 animationCount = reader.readUint32("animationCount"); reader.enumerate("animations", animations);
reader.enumerate("animations", animations, animationCount);
atUint32 transitionCount = reader.readUint32("transitionCount"); reader.enumerate("transitions", transitions);
reader.enumerate("transitions", transitions, transitionCount);
reader.enumerate("defaultTransition", defaultTransition); reader.enumerate("defaultTransition", defaultTransition);
additiveAnims.clear(); additiveAnims.clear();
if (sectionCount > 1) if (sectionCount > 1)
{ {
atUint32 additiveAnimCount = reader.readUint32("additiveAnimCount"); reader.enumerate("additiveAnims", additiveAnims);
reader.enumerate("additiveAnims", additiveAnims, additiveAnimCount);
floatA = reader.readFloat("floatA"); floatA = reader.readFloat("floatA");
floatB = reader.readFloat("floatB"); floatB = reader.readFloat("floatB");
} }
@ -980,19 +959,17 @@ void ANCS::AnimationSet::read(Athena::io::YAMLDocReader& reader)
halfTransitions.clear(); halfTransitions.clear();
if (sectionCount > 2) if (sectionCount > 2)
{ {
atUint32 halfTransitionCount = reader.readUint32("halfTransitionCount"); reader.enumerate("halfTransitions", halfTransitions);
reader.enumerate("halfTransitions", halfTransitions, halfTransitionCount);
} }
animResources.clear(); animResources.clear();
if (sectionCount > 3) if (sectionCount > 3)
{ {
atUint32 animResourcesCount = reader.readUint32("animResourcesCount"); reader.enumerate("animResources", animResources);
reader.enumerate("animResources", animResources, animResourcesCount);
} }
} }
void ANCS::AnimationSet::write(Athena::io::YAMLDocWriter& writer) const void ANCS::AnimationSet::write(athena::io::YAMLDocWriter& writer) const
{ {
atUint16 sectionCount; atUint16 sectionCount;
if (animResources.size()) if (animResources.size())
@ -1006,16 +983,13 @@ void ANCS::AnimationSet::write(Athena::io::YAMLDocWriter& writer) const
writer.writeUint16("sectionCount", sectionCount); writer.writeUint16("sectionCount", sectionCount);
writer.writeUint32("animationCount", animations.size());
writer.enumerate("animations", animations); writer.enumerate("animations", animations);
writer.writeUint32("transitionCount", transitions.size());
writer.enumerate("transitions", transitions); writer.enumerate("transitions", transitions);
writer.enumerate("defaultTransition", defaultTransition); writer.enumerate("defaultTransition", defaultTransition);
if (sectionCount > 1) if (sectionCount > 1)
{ {
writer.writeUint32("additiveAnimCount", additiveAnims.size());
writer.enumerate("additiveAnims", additiveAnims); writer.enumerate("additiveAnims", additiveAnims);
writer.writeFloat("floatA", floatA); writer.writeFloat("floatA", floatA);
writer.writeFloat("floatB", floatB); writer.writeFloat("floatB", floatB);
@ -1023,20 +997,18 @@ void ANCS::AnimationSet::write(Athena::io::YAMLDocWriter& writer) const
if (sectionCount > 2) if (sectionCount > 2)
{ {
writer.writeUint32("halfTransitionCount", halfTransitions.size());
writer.enumerate("halfTransitions", halfTransitions); writer.enumerate("halfTransitions", halfTransitions);
} }
if (sectionCount > 3) if (sectionCount > 3)
{ {
writer.writeUint32("animResourcesCount", animResources.size());
writer.enumerate("animResources", animResources); writer.enumerate("animResources", animResources);
} }
} }
const char* ANCS::AnimationSet::DNAType() const char* ANCS::AnimationSet::DNAType()
{ {
return "Retro::DNAMP1::ANCS::AnimationSet"; return "urde::DNAMP1::ANCS::AnimationSet";
} }
} }

View File

@ -9,7 +9,7 @@
#include "CINF.hpp" #include "CINF.hpp"
#include "CSKR.hpp" #include "CSKR.hpp"
#include "ANIM.hpp" #include "ANIM.hpp"
#include "Athena/FileReader.hpp" #include "athena/FileReader.hpp"
namespace DataSpec namespace DataSpec
{ {
@ -390,34 +390,34 @@ struct ANCS : BigYAML
static bool Extract(const SpecBase& dataSpec, static bool Extract(const SpecBase& dataSpec,
PAKEntryReadStream& rs, PAKEntryReadStream& rs,
const HECL::ProjectPath& outPath, const hecl::ProjectPath& outPath,
PAKRouter<PAKBridge>& pakRouter, PAKRouter<PAKBridge>& pakRouter,
const PAK::Entry& entry, const PAK::Entry& entry,
bool force, bool force,
std::function<void(const HECL::SystemChar*)> fileChanged) std::function<void(const hecl::SystemChar*)> fileChanged)
{ {
HECL::ProjectPath yamlPath = outPath.getWithExtension(_S(".yaml")); hecl::ProjectPath yamlPath = outPath.getWithExtension(_S(".yaml"));
HECL::ProjectPath::Type yamlType = yamlPath.getPathType(); hecl::ProjectPath::Type yamlType = yamlPath.getPathType();
HECL::ProjectPath blendPath = outPath.getWithExtension(_S(".blend")); hecl::ProjectPath blendPath = outPath.getWithExtension(_S(".blend"));
HECL::ProjectPath::Type blendType = blendPath.getPathType(); hecl::ProjectPath::Type blendType = blendPath.getPathType();
if (force || if (force ||
yamlType == HECL::ProjectPath::Type::None || yamlType == hecl::ProjectPath::Type::None ||
blendType == HECL::ProjectPath::Type::None) blendType == hecl::ProjectPath::Type::None)
{ {
ANCS ancs; ANCS ancs;
ancs.read(rs); ancs.read(rs);
if (force || yamlType == HECL::ProjectPath::Type::None) if (force || yamlType == hecl::ProjectPath::Type::None)
{ {
FILE* fp = HECL::Fopen(yamlPath.getAbsolutePath().c_str(), _S("wb")); FILE* fp = hecl::Fopen(yamlPath.getAbsolutePath().c_str(), _S("wb"));
ancs.toYAMLFile(fp); ancs.toYAMLFile(fp);
fclose(fp); fclose(fp);
} }
if (force || blendType == HECL::ProjectPath::Type::None) if (force || blendType == hecl::ProjectPath::Type::None)
{ {
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection(); hecl::BlenderConnection& conn = hecl::BlenderConnection::SharedConnection();
DNAANCS::ReadANCSToBlender<PAKRouter<PAKBridge>, ANCS, MaterialSet, DNACMDL::SurfaceHeader_1, 2> DNAANCS::ReadANCSToBlender<PAKRouter<PAKBridge>, ANCS, MaterialSet, DNACMDL::SurfaceHeader_1, 2>
(conn, ancs, blendPath, pakRouter, entry, dataSpec, fileChanged, force); (conn, ancs, blendPath, pakRouter, entry, dataSpec, fileChanged, force);
} }
@ -426,19 +426,19 @@ struct ANCS : BigYAML
return true; return true;
} }
static bool Cook(const HECL::ProjectPath& outPath, static bool Cook(const hecl::ProjectPath& outPath,
const HECL::ProjectPath& inPath, const hecl::ProjectPath& inPath,
const DNAANCS::Actor& actor) const DNAANCS::Actor& actor)
{ {
/* Search for yaml */ /* Search for yaml */
HECL::ProjectPath yamlPath = inPath.getWithExtension(_S(".yaml"), true); hecl::ProjectPath yamlPath = inPath.getWithExtension(_S(".yaml"), true);
if (yamlPath.getPathType() != HECL::ProjectPath::Type::File) if (yamlPath.getPathType() != hecl::ProjectPath::Type::File)
Log.report(LogVisor::FatalError, _S("'%s' not found as file"), Log.report(logvisor::Fatal, _S("'%s' not found as file"),
yamlPath.getRelativePath().c_str()); yamlPath.getRelativePath().c_str());
Athena::io::FileReader yamlReader(yamlPath.getAbsolutePath()); athena::io::FileReader yamlReader(yamlPath.getAbsolutePath());
if (!BigYAML::ValidateFromYAMLFile<ANCS>(yamlReader)) if (!BigYAML::ValidateFromYAMLFile<ANCS>(yamlReader))
Log.report(LogVisor::FatalError, _S("'%s' is not Retro::DNAMP1::ANCS type"), Log.report(logvisor::Fatal, _S("'%s' is not urde::DNAMP1::ANCS type"),
yamlPath.getRelativePath().c_str()); yamlPath.getRelativePath().c_str());
ANCS ancs; ANCS ancs;
ancs.read(yamlReader); ancs.read(yamlReader);

View File

@ -5,9 +5,9 @@ namespace DataSpec
namespace DNAMP1 namespace DNAMP1
{ {
using ANIMOutStream = HECL::BlenderConnection::PyOutStream::ANIMOutStream; using ANIMOutStream = hecl::BlenderConnection::PyOutStream::ANIMOutStream;
void ANIM::IANIM::sendANIMToBlender(HECL::BlenderConnection::PyOutStream& os, const CINF& cinf) const void ANIM::IANIM::sendANIMToBlender(hecl::BlenderConnection::PyOutStream& os, const CINF& cinf) const
{ {
os.format("act.hecl_fps = round(%f)\n", (1.0f / mainInterval)); os.format("act.hecl_fps = round(%f)\n", (1.0f / mainInterval));
@ -68,7 +68,7 @@ void ANIM::IANIM::sendANIMToBlender(HECL::BlenderConnection::PyOutStream& os, co
} }
} }
void ANIM::ANIM0::read(Athena::io::IStreamReader& reader) void ANIM::ANIM0::read(athena::io::IStreamReader& reader)
{ {
Header head; Header head;
head.read(reader); head.read(reader);
@ -138,7 +138,7 @@ void ANIM::ANIM0::read(Athena::io::IStreamReader& reader)
evnt.read(reader); evnt.read(reader);
} }
void ANIM::ANIM0::write(Athena::io::IStreamWriter& writer) const void ANIM::ANIM0::write(athena::io::IStreamWriter& writer) const
{ {
Header head; Header head;
head.unk0 = 0; head.unk0 = 0;
@ -239,7 +239,7 @@ size_t ANIM::ANIM0::binarySize(size_t __isz) const
return __isz + 4; return __isz + 4;
} }
void ANIM::ANIM2::read(Athena::io::IStreamReader& reader) void ANIM::ANIM2::read(athena::io::IStreamReader& reader)
{ {
Header head; Header head;
head.read(reader); head.read(reader);
@ -303,7 +303,7 @@ void ANIM::ANIM2::read(Athena::io::IStreamReader& reader)
chanKeys = bsReader.read(bsData.get(), keyframeCount, channels, head.rotDiv, head.translationMult); chanKeys = bsReader.read(bsData.get(), keyframeCount, channels, head.rotDiv, head.translationMult);
} }
void ANIM::ANIM2::write(Athena::io::IStreamWriter& writer) const void ANIM::ANIM2::write(athena::io::IStreamWriter& writer) const
{ {
Header head; Header head;
head.evnt = evnt; head.evnt = evnt;

View File

@ -28,7 +28,7 @@ struct ANIM : BigDNA
float mainInterval = 0.0; float mainInterval = 0.0;
UniqueID32 evnt; UniqueID32 evnt;
void sendANIMToBlender(HECL::BlenderConnection::PyOutStream&, const CINF&) const; void sendANIMToBlender(hecl::BlenderConnection::PyOutStream&, const CINF&) const;
}; };
struct ANIM0 : IANIM struct ANIM0 : IANIM
@ -90,7 +90,7 @@ struct ANIM : BigDNA
Value<atUint16> initTZ = 0; Value<atUint16> initTZ = 0;
Value<atUint8> qTZ = 0; Value<atUint8> qTZ = 0;
void read(Athena::io::IStreamReader& reader) void read(athena::io::IStreamReader& reader)
{ {
id = reader.readUint32Big(); id = reader.readUint32Big();
keyCount1 = reader.readUint16Big(); keyCount1 = reader.readUint16Big();
@ -111,7 +111,7 @@ struct ANIM : BigDNA
qTZ = reader.readUByte(); qTZ = reader.readUByte();
} }
} }
void write(Athena::io::IStreamWriter& writer) const void write(athena::io::IStreamWriter& writer) const
{ {
writer.writeUint32Big(id); writer.writeUint32Big(id);
writer.writeUint16Big(keyCount1); writer.writeUint16Big(keyCount1);
@ -143,7 +143,7 @@ struct ANIM : BigDNA
}; };
std::unique_ptr<IANIM> m_anim; std::unique_ptr<IANIM> m_anim;
void read(Athena::io::IStreamReader& reader) void read(athena::io::IStreamReader& reader)
{ {
atUint32 version = reader.readUint32Big(); atUint32 version = reader.readUint32Big();
switch (version) switch (version)
@ -157,12 +157,12 @@ struct ANIM : BigDNA
m_anim->read(reader); m_anim->read(reader);
break; break;
default: default:
Log.report(LogVisor::Error, "unrecognized ANIM version"); Log.report(logvisor::Error, "unrecognized ANIM version");
break; break;
} }
} }
void write(Athena::io::IStreamWriter& writer) const void write(athena::io::IStreamWriter& writer) const
{ {
writer.writeUint32Big(m_anim->m_version); writer.writeUint32Big(m_anim->m_version);
m_anim->write(writer); m_anim->write(writer);
@ -173,7 +173,7 @@ struct ANIM : BigDNA
return m_anim->binarySize(__isz + 4); return m_anim->binarySize(__isz + 4);
} }
void sendANIMToBlender(HECL::BlenderConnection::PyOutStream& os, const CINF& cinf, bool) const void sendANIMToBlender(hecl::BlenderConnection::PyOutStream& os, const CINF& cinf, bool) const
{ {
m_anim->sendANIMToBlender(os, cinf); m_anim->sendANIMToBlender(os, cinf);
} }

View File

@ -56,7 +56,7 @@ struct CINF : BigDNA
return nullptr; return nullptr;
} }
void sendVertexGroupsToBlender(HECL::BlenderConnection::PyOutStream& os) const void sendVertexGroupsToBlender(hecl::BlenderConnection::PyOutStream& os) const
{ {
for (atUint32 bid : boneIds) for (atUint32 bid : boneIds)
{ {
@ -71,7 +71,7 @@ struct CINF : BigDNA
} }
} }
void sendCINFToBlender(HECL::BlenderConnection::PyOutStream& os, const UniqueID32& cinfId) const void sendCINFToBlender(hecl::BlenderConnection::PyOutStream& os, const UniqueID32& cinfId) const
{ {
os.format("arm = bpy.data.armatures.new('CINF_%08X')\n" os.format("arm = bpy.data.armatures.new('CINF_%08X')\n"
"arm_obj = bpy.data.objects.new(arm.name, arm)\n" "arm_obj = bpy.data.objects.new(arm.name, arm)\n"

View File

@ -8,7 +8,7 @@
#include "CINF.hpp" #include "CINF.hpp"
#include "CSKR.hpp" #include "CSKR.hpp"
#include <Athena/FileReader.hpp> #include <athena/FileReader.hpp>
namespace DataSpec namespace DataSpec
{ {
@ -19,11 +19,11 @@ struct CMDL
{ {
static bool Extract(const SpecBase& dataSpec, static bool Extract(const SpecBase& dataSpec,
PAKEntryReadStream& rs, PAKEntryReadStream& rs,
const HECL::ProjectPath& outPath, const hecl::ProjectPath& outPath,
PAKRouter<PAKBridge>& pakRouter, PAKRouter<PAKBridge>& pakRouter,
const PAK::Entry& entry, const PAK::Entry& entry,
bool force, bool force,
std::function<void(const HECL::SystemChar*)> fileChanged) std::function<void(const hecl::SystemChar*)> fileChanged)
{ {
/* Check for RigPair */ /* Check for RigPair */
const PAKRouter<PAKBridge>::RigPair* rp = pakRouter.lookupCMDLRigPair(entry.id); const PAKRouter<PAKBridge>::RigPair* rp = pakRouter.lookupCMDLRigPair(entry.id);
@ -39,8 +39,8 @@ struct CMDL
} }
/* Do extract */ /* Do extract */
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection(); hecl::BlenderConnection& conn = hecl::BlenderConnection::SharedConnection();
if (!conn.createBlend(outPath, HECL::BlenderConnection::BlendType::Mesh)) if (!conn.createBlend(outPath, hecl::BlenderConnection::BlendType::Mesh))
return false; return false;
DNACMDL::ReadCMDLToBlender<PAKRouter<PAKBridge>, MaterialSet, std::pair<CSKR*,CINF*>, DNACMDL::SurfaceHeader_1, 2> DNACMDL::ReadCMDLToBlender<PAKRouter<PAKBridge>, MaterialSet, std::pair<CSKR*,CINF*>, DNACMDL::SurfaceHeader_1, 2>
(conn, rs, pakRouter, entry, dataSpec, loadRp); (conn, rs, pakRouter, entry, dataSpec, loadRp);
@ -48,24 +48,24 @@ struct CMDL
#if 0 #if 0
/* Cook and re-extract test */ /* Cook and re-extract test */
HECL::ProjectPath tempOut = outPath.getWithExtension(_S(".recook"), true); hecl::ProjectPath tempOut = outPath.getWithExtension(_S(".recook"), true);
HECL::BlenderConnection::DataStream ds = conn.beginData(); hecl::BlenderConnection::DataStream ds = conn.beginData();
DNACMDL::Mesh mesh = ds.compileMesh(HECL::TopologyTriStrips, -1); DNACMDL::Mesh mesh = ds.compileMesh(hecl::TopologyTriStrips, -1);
ds.close(); ds.close();
DNACMDL::WriteCMDL<MaterialSet, DNACMDL::SurfaceHeader_1_2, 2>(tempOut, outPath, mesh); DNACMDL::WriteCMDL<MaterialSet, DNACMDL::SurfaceHeader_1_2, 2>(tempOut, outPath, mesh);
Athena::io::FileReader reader(tempOut.getAbsolutePath()); athena::io::FileReader reader(tempOut.getAbsolutePath());
HECL::ProjectPath tempBlend = outPath.getWithExtension(_S(".recook.blend"), true); hecl::ProjectPath tempBlend = outPath.getWithExtension(_S(".recook.blend"), true);
if (!conn.createBlend(tempBlend, HECL::BlenderConnection::TypeMesh)) if (!conn.createBlend(tempBlend, hecl::BlenderConnection::TypeMesh))
return false; return false;
DNACMDL::ReadCMDLToBlender<PAKRouter<PAKBridge>, MaterialSet, std::pair<CSKR*,CINF*>, DNACMDL::SurfaceHeader_1_2, 2> DNACMDL::ReadCMDLToBlender<PAKRouter<PAKBridge>, MaterialSet, std::pair<CSKR*,CINF*>, DNACMDL::SurfaceHeader_1_2, 2>
(conn, reader, pakRouter, entry, dataSpec, loadRp); (conn, reader, pakRouter, entry, dataSpec, loadRp);
return conn.saveBlend(); return conn.saveBlend();
#elif 0 #elif 0
/* HMDL cook test */ /* HMDL cook test */
HECL::ProjectPath tempOut = outPath.getWithExtension(_S(".recook"), true); hecl::ProjectPath tempOut = outPath.getWithExtension(_S(".recook"), true);
HECL::BlenderConnection::DataStream ds = conn.beginData(); hecl::BlenderConnection::DataStream ds = conn.beginData();
DNACMDL::Mesh mesh = ds.compileMesh(HECL::HMDLTopology::TriStrips, 16); DNACMDL::Mesh mesh = ds.compileMesh(hecl::HMDLTopology::TriStrips, 16);
ds.close(); ds.close();
DNACMDL::WriteHMDLCMDL<HMDLMaterialSet, DNACMDL::SurfaceHeader_1, 2>(tempOut, outPath, mesh); DNACMDL::WriteHMDLCMDL<HMDLMaterialSet, DNACMDL::SurfaceHeader_1, 2>(tempOut, outPath, mesh);
#endif #endif
@ -81,11 +81,11 @@ struct CMDL
DNACMDL::NameCMDL<PAKRouter<PAKBridge>, MaterialSet>(rs, pakRouter, entry, dataSpec); DNACMDL::NameCMDL<PAKRouter<PAKBridge>, MaterialSet>(rs, pakRouter, entry, dataSpec);
} }
static bool Cook(const HECL::ProjectPath& outPath, static bool Cook(const hecl::ProjectPath& outPath,
const HECL::ProjectPath& inPath, const hecl::ProjectPath& inPath,
const DNACMDL::Mesh& mesh) const DNACMDL::Mesh& mesh)
{ {
HECL::ProjectPath tempOut = outPath.getWithExtension(_S(".recook")); hecl::ProjectPath tempOut = outPath.getWithExtension(_S(".recook"));
if (mesh.skins.size()) if (mesh.skins.size())
{ {
DNACMDL::Mesh skinMesh = mesh.getContiguousSkinningVersion(); DNACMDL::Mesh skinMesh = mesh.getContiguousSkinningVersion();
@ -94,7 +94,7 @@ struct CMDL
/* Output skinning intermediate */ /* Output skinning intermediate */
auto vertCountIt = skinMesh.contiguousSkinVertCounts.cbegin(); auto vertCountIt = skinMesh.contiguousSkinVertCounts.cbegin();
Athena::io::FileWriter writer(outPath.getWithExtension(_S(".skin")).getAbsolutePath()); athena::io::FileWriter writer(outPath.getWithExtension(_S(".skin")).getAbsolutePath());
writer.writeUint32Big(skinMesh.skins.size()); writer.writeUint32Big(skinMesh.skins.size());
for (const std::vector<DNACMDL::Mesh::SkinBind> skin : skinMesh.skins) for (const std::vector<DNACMDL::Mesh::SkinBind> skin : skinMesh.skins)
{ {
@ -116,18 +116,18 @@ struct CMDL
return true; return true;
} }
static bool HMDLCook(const HECL::ProjectPath& outPath, static bool HMDLCook(const hecl::ProjectPath& outPath,
const HECL::ProjectPath& inPath, const hecl::ProjectPath& inPath,
const DNACMDL::Mesh& mesh) const DNACMDL::Mesh& mesh)
{ {
HECL::ProjectPath tempOut = outPath.getWithExtension(_S(".recook")); hecl::ProjectPath tempOut = outPath.getWithExtension(_S(".recook"));
if (mesh.skins.size()) if (mesh.skins.size())
{ {
if (!DNACMDL::WriteHMDLCMDL<HMDLMaterialSet, DNACMDL::SurfaceHeader_1, 2>(tempOut, inPath, mesh)) if (!DNACMDL::WriteHMDLCMDL<HMDLMaterialSet, DNACMDL::SurfaceHeader_1, 2>(tempOut, inPath, mesh))
return false; return false;
/* Output skinning intermediate */ /* Output skinning intermediate */
Athena::io::FileWriter writer(outPath.getWithExtension(_S(".skin")).getAbsolutePath()); athena::io::FileWriter writer(outPath.getWithExtension(_S(".skin")).getAbsolutePath());
writer.writeUint32Big(mesh.skinBanks.banks.size()); writer.writeUint32Big(mesh.skinBanks.banks.size());
for (const DNACMDL::Mesh::SkinBanks::Bank& sb : mesh.skinBanks.banks) for (const DNACMDL::Mesh::SkinBanks::Bank& sb : mesh.skinBanks.banks)
{ {

View File

@ -1,7 +1,7 @@
#include "CMDLMaterials.hpp" #include "CMDLMaterials.hpp"
#include "../DNAMP2/CMDLMaterials.hpp" #include "../DNAMP2/CMDLMaterials.hpp"
using Stream = HECL::BlenderConnection::PyOutStream; using Stream = hecl::BlenderConnection::PyOutStream;
namespace DataSpec namespace DataSpec
{ {
@ -914,10 +914,10 @@ void MaterialSet::ConstructMaterial(Stream& out,
unsigned matIdx) unsigned matIdx)
{_ConstructMaterial(out, material, groupIdx, matIdx);} {_ConstructMaterial(out, material, groupIdx, matIdx);}
MaterialSet::Material::Material(const HECL::Backend::GX& gx, MaterialSet::Material::Material(const hecl::Backend::GX& gx,
const std::unordered_map<std::string, int32_t>& iprops, const std::unordered_map<std::string, int32_t>& iprops,
const std::vector<HECL::ProjectPath>& texPathsIn, const std::vector<hecl::ProjectPath>& texPathsIn,
std::vector<HECL::ProjectPath>& texPathsOut, std::vector<hecl::ProjectPath>& texPathsOut,
int colorCount, int colorCount,
int uvCount, int uvCount,
bool lightmapUVs, bool lightmapUVs,
@ -969,7 +969,7 @@ MaterialSet::Material::Material(const HECL::Backend::GX& gx,
textureIdxs.reserve(gx.m_tevCount); textureIdxs.reserve(gx.m_tevCount);
for (unsigned i=0 ; i<gx.m_tevCount ; ++i) for (unsigned i=0 ; i<gx.m_tevCount ; ++i)
{ {
const HECL::Backend::GX::TEVStage& stage = gx.m_tevs[i]; const hecl::Backend::GX::TEVStage& stage = gx.m_tevs[i];
tevStageTexInfo.emplace_back(); tevStageTexInfo.emplace_back();
TEVStageTexInfo& texInfo = tevStageTexInfo.back(); TEVStageTexInfo& texInfo = tevStageTexInfo.back();
if (stage.m_texGenIdx != -1) if (stage.m_texGenIdx != -1)
@ -977,7 +977,7 @@ MaterialSet::Material::Material(const HECL::Backend::GX& gx,
if (stage.m_texMapIdx != -1) if (stage.m_texMapIdx != -1)
{ {
texInfo.texSlot = textureIdxs.size(); texInfo.texSlot = textureIdxs.size();
const HECL::ProjectPath& texPath = texPathsIn.at(stage.m_texMapIdx); const hecl::ProjectPath& texPath = texPathsIn.at(stage.m_texMapIdx);
texFlags |= 1 << i; texFlags |= 1 << i;
++textureCount; ++textureCount;
bool found = false; bool found = false;
@ -1056,11 +1056,11 @@ MaterialSet::Material::Material(const HECL::Backend::GX& gx,
ColorChannel& ch = colorChannels.back(); ColorChannel& ch = colorChannels.back();
for (unsigned i=0 ; i<gx.m_tevCount ; ++i) for (unsigned i=0 ; i<gx.m_tevCount ; ++i)
{ {
const HECL::Backend::GX::TEVStage& stage = gx.m_tevs[i]; const hecl::Backend::GX::TEVStage& stage = gx.m_tevs[i];
for (int c=0 ; c<4 ; ++c) for (int c=0 ; c<4 ; ++c)
if (stage.m_color[c] == HECL::Backend::GX::CC_RASC || if (stage.m_color[c] == hecl::Backend::GX::CC_RASC ||
stage.m_color[c] == HECL::Backend::GX::CC_RASA || stage.m_color[c] == hecl::Backend::GX::CC_RASA ||
stage.m_alpha[c] == HECL::Backend::GX::CA_RASA) stage.m_alpha[c] == hecl::Backend::GX::CA_RASA)
{ {
ch.setLighting(true); ch.setLighting(true);
break; break;
@ -1075,7 +1075,7 @@ MaterialSet::Material::Material(const HECL::Backend::GX& gx,
tevStages.reserve(gx.m_tevCount); tevStages.reserve(gx.m_tevCount);
for (unsigned i=0 ; i<gx.m_tevCount ; ++i) for (unsigned i=0 ; i<gx.m_tevCount ; ++i)
{ {
const HECL::Backend::GX::TEVStage& stage = gx.m_tevs[i]; const hecl::Backend::GX::TEVStage& stage = gx.m_tevs[i];
tevStages.emplace_back(); tevStages.emplace_back();
TEVStage& target = tevStages.back(); TEVStage& target = tevStages.back();
@ -1104,7 +1104,7 @@ MaterialSet::Material::Material(const HECL::Backend::GX& gx,
tcgCount = gx.m_tcgCount; tcgCount = gx.m_tcgCount;
for (unsigned i=0 ; i<gx.m_tcgCount ; ++i) for (unsigned i=0 ; i<gx.m_tcgCount ; ++i)
{ {
const HECL::Backend::GX::TexCoordGen& tcg = gx.m_tcgs[i]; const hecl::Backend::GX::TexCoordGen& tcg = gx.m_tcgs[i];
tcgs.emplace_back(); tcgs.emplace_back();
TexCoordGen& target = tcgs.back(); TexCoordGen& target = tcgs.back();
target.setType(GX::TG_MTX3x4); target.setType(GX::TG_MTX3x4);
@ -1132,7 +1132,7 @@ MaterialSet::Material::Material(const HECL::Backend::GX& gx,
bool found = false; bool found = false;
for (unsigned t=0 ; t<gx.m_tcgCount ; ++t) for (unsigned t=0 ; t<gx.m_tcgCount ; ++t)
{ {
const HECL::Backend::GX::TexCoordGen& tcg = gx.m_tcgs[t]; const hecl::Backend::GX::TexCoordGen& tcg = gx.m_tcgs[t];
if (tcg.m_mtx == GX::IDENTITY) if (tcg.m_mtx == GX::IDENTITY)
continue; continue;
if ((tcg.m_mtx - GX::TEXMTX0) / 3 == uvAnimsCount) if ((tcg.m_mtx - GX::TEXMTX0) / 3 == uvAnimsCount)
@ -1149,11 +1149,11 @@ MaterialSet::Material::Material(const HECL::Backend::GX& gx,
} }
} }
HMDLMaterialSet::Material::Material(HECL::Frontend::Frontend& FE, HMDLMaterialSet::Material::Material(hecl::Frontend::Frontend& FE,
const std::string& diagName, const std::string& diagName,
const HECL::BlenderConnection::DataStream::Mesh::Material& mat, const hecl::BlenderConnection::DataStream::Mesh::Material& mat,
const std::unordered_map<std::string, int32_t>& iprops, const std::unordered_map<std::string, int32_t>& iprops,
const std::vector<HECL::ProjectPath>& texPaths) const std::vector<hecl::ProjectPath>& texPaths)
{ {
auto search = iprops.find("retro_depth_sort"); auto search = iprops.find("retro_depth_sort");
if (search != iprops.end()) if (search != iprops.end())
@ -1187,10 +1187,10 @@ HMDLMaterialSet::Material::Material(HECL::Frontend::Frontend& FE,
if (search != iprops.end()) if (search != iprops.end())
flags.setLightmap(search->second != 0); flags.setLightmap(search->second != 0);
for (const HECL::ProjectPath& path : mat.texs) for (const hecl::ProjectPath& path : mat.texs)
{ {
size_t idx = 0; size_t idx = 0;
for (const HECL::ProjectPath& tPath : texPaths) for (const hecl::ProjectPath& tPath : texPaths)
{ {
if (path == tPath) if (path == tPath)
{ {
@ -1210,15 +1210,15 @@ HMDLMaterialSet::Material::Material(HECL::Frontend::Frontend& FE,
uvAnimsSize = 4; uvAnimsSize = 4;
uvAnimsCount = 0; uvAnimsCount = 0;
for (const HECL::Frontend::IR::Instruction& inst : heclIr.m_instructions) for (const hecl::Frontend::IR::Instruction& inst : heclIr.m_instructions)
{ {
if (inst.m_op != HECL::Frontend::IR::OpType::Call) if (inst.m_op != hecl::Frontend::IR::OpType::Call)
continue; continue;
if (inst.m_call.m_name.compare("Texture")) if (inst.m_call.m_name.compare("Texture"))
continue; continue;
const HECL::Frontend::IR::Instruction& sourceInst = inst.getChildInst(heclIr, 1); const hecl::Frontend::IR::Instruction& sourceInst = inst.getChildInst(heclIr, 1);
if (sourceInst.m_op != HECL::Frontend::IR::OpType::Call) if (sourceInst.m_op != hecl::Frontend::IR::OpType::Call)
continue; continue;
if (sourceInst.m_call.m_name.compare(0, 11, "RetroUVMode")) if (sourceInst.m_call.m_name.compare(0, 11, "RetroUVMode"))
continue; continue;
@ -1227,7 +1227,7 @@ HMDLMaterialSet::Material::Material(HECL::Frontend::Frontend& FE,
gameArgs.reserve(sourceInst.getChildCount() - 1); gameArgs.reserve(sourceInst.getChildCount() - 1);
for (int i=1 ; i<sourceInst.getChildCount() ; ++i) for (int i=1 ; i<sourceInst.getChildCount() ; ++i)
{ {
const HECL::Frontend::IR::Instruction& ci = sourceInst.getChildInst(heclIr, i); const hecl::Frontend::IR::Instruction& ci = sourceInst.getChildInst(heclIr, i);
gameArgs.push_back(ci.getImmVec()); gameArgs.push_back(ci.getImmVec());
} }
@ -1248,7 +1248,7 @@ MaterialSet::Material::UVAnimation::UVAnimation(const std::string& gameFunction,
{ {
mode = Mode::Scroll; mode = Mode::Scroll;
if (gameArgs.size() < 2) if (gameArgs.size() < 2)
Log.report(LogVisor::FatalError, "Mode2 UV anim requires 2 vector arguments"); Log.report(logvisor::Fatal, "Mode2 UV anim requires 2 vector arguments");
vals[0] = gameArgs[0].vec[0]; vals[0] = gameArgs[0].vec[0];
vals[1] = gameArgs[0].vec[1]; vals[1] = gameArgs[0].vec[1];
vals[2] = gameArgs[1].vec[0]; vals[2] = gameArgs[1].vec[0];
@ -1258,7 +1258,7 @@ MaterialSet::Material::UVAnimation::UVAnimation(const std::string& gameFunction,
{ {
mode = Mode::Rotation; mode = Mode::Rotation;
if (gameArgs.size() < 2) if (gameArgs.size() < 2)
Log.report(LogVisor::FatalError, "Mode3 UV anim requires 2 arguments"); Log.report(logvisor::Fatal, "Mode3 UV anim requires 2 arguments");
vals[0] = gameArgs[0].vec[0]; vals[0] = gameArgs[0].vec[0];
vals[1] = gameArgs[1].vec[0]; vals[1] = gameArgs[1].vec[0];
} }
@ -1266,7 +1266,7 @@ MaterialSet::Material::UVAnimation::UVAnimation(const std::string& gameFunction,
{ {
mode = Mode::HStrip; mode = Mode::HStrip;
if (gameArgs.size() < 4) if (gameArgs.size() < 4)
Log.report(LogVisor::FatalError, "Mode4 UV anim requires 4 arguments"); Log.report(logvisor::Fatal, "Mode4 UV anim requires 4 arguments");
vals[0] = gameArgs[0].vec[0]; vals[0] = gameArgs[0].vec[0];
vals[1] = gameArgs[1].vec[0]; vals[1] = gameArgs[1].vec[0];
vals[2] = gameArgs[2].vec[0]; vals[2] = gameArgs[2].vec[0];
@ -1276,7 +1276,7 @@ MaterialSet::Material::UVAnimation::UVAnimation(const std::string& gameFunction,
{ {
mode = Mode::VStrip; mode = Mode::VStrip;
if (gameArgs.size() < 4) if (gameArgs.size() < 4)
Log.report(LogVisor::FatalError, "Mode5 UV anim requires 4 arguments"); Log.report(logvisor::Fatal, "Mode5 UV anim requires 4 arguments");
vals[0] = gameArgs[0].vec[0]; vals[0] = gameArgs[0].vec[0];
vals[1] = gameArgs[1].vec[0]; vals[1] = gameArgs[1].vec[0];
vals[2] = gameArgs[2].vec[0]; vals[2] = gameArgs[2].vec[0];
@ -1288,12 +1288,12 @@ MaterialSet::Material::UVAnimation::UVAnimation(const std::string& gameFunction,
{ {
mode = Mode::WhoMustNotBeNamed; mode = Mode::WhoMustNotBeNamed;
if (gameArgs.size() < 2) if (gameArgs.size() < 2)
Log.report(LogVisor::FatalError, "Mode7 UV anim requires 2 arguments"); Log.report(logvisor::Fatal, "Mode7 UV anim requires 2 arguments");
vals[0] = gameArgs[0].vec[0]; vals[0] = gameArgs[0].vec[0];
vals[1] = gameArgs[1].vec[0]; vals[1] = gameArgs[1].vec[0];
} }
else else
Log.report(LogVisor::FatalError, "unsupported UV anim '%s'", gameFunction.c_str()); Log.report(logvisor::Fatal, "unsupported UV anim '%s'", gameFunction.c_str());
} }
} }

View File

@ -268,7 +268,7 @@ struct MaterialSet : BigDNA
Eight Eight
} mode; } mode;
float vals[9]; float vals[9];
void read(Athena::io::IStreamReader& reader) void read(athena::io::IStreamReader& reader)
{ {
mode = Mode(reader.readUint32Big()); mode = Mode(reader.readUint32Big());
switch (mode) switch (mode)
@ -303,7 +303,7 @@ struct MaterialSet : BigDNA
break; break;
} }
} }
void write(Athena::io::IStreamWriter& writer) const void write(athena::io::IStreamWriter& writer) const
{ {
writer.writeUint32Big(atUint32(mode)); writer.writeUint32Big(atUint32(mode));
switch (mode) switch (mode)
@ -365,21 +365,21 @@ struct MaterialSet : BigDNA
}; };
Vector<UVAnimation, DNA_COUNT(uvAnimsCount)> uvAnims; Vector<UVAnimation, DNA_COUNT(uvAnimsCount)> uvAnims;
static void AddTexture(HECL::BlenderConnection::PyOutStream& out, static void AddTexture(hecl::BlenderConnection::PyOutStream& out,
GX::TexGenSrc type, int mtxIdx, uint32_t texIdx); GX::TexGenSrc type, int mtxIdx, uint32_t texIdx);
static void AddTextureAnim(HECL::BlenderConnection::PyOutStream& out, static void AddTextureAnim(hecl::BlenderConnection::PyOutStream& out,
MaterialSet::Material::UVAnimation::Mode type, MaterialSet::Material::UVAnimation::Mode type,
unsigned idx, const float* vals); unsigned idx, const float* vals);
static void AddKcolor(HECL::BlenderConnection::PyOutStream& out, static void AddKcolor(hecl::BlenderConnection::PyOutStream& out,
const GX::Color& col, unsigned idx); const GX::Color& col, unsigned idx);
static void AddDynamicColor(HECL::BlenderConnection::PyOutStream& out, unsigned idx); static void AddDynamicColor(hecl::BlenderConnection::PyOutStream& out, unsigned idx);
static void AddDynamicAlpha(HECL::BlenderConnection::PyOutStream& out, unsigned idx); static void AddDynamicAlpha(hecl::BlenderConnection::PyOutStream& out, unsigned idx);
Material() = default; Material() = default;
Material(const HECL::Backend::GX& gx, Material(const hecl::Backend::GX& gx,
const std::unordered_map<std::string, int32_t>& iprops, const std::unordered_map<std::string, int32_t>& iprops,
const std::vector<HECL::ProjectPath>& texPathsIn, const std::vector<hecl::ProjectPath>& texPathsIn,
std::vector<HECL::ProjectPath>& texPathsOut, std::vector<hecl::ProjectPath>& texPathsOut,
int colorCount, int colorCount,
int uvCount, int uvCount,
bool lightmapUVs, bool lightmapUVs,
@ -388,12 +388,12 @@ struct MaterialSet : BigDNA
}; };
Vector<Material, DNA_COUNT(head.materialCount)> materials; Vector<Material, DNA_COUNT(head.materialCount)> materials;
static void RegisterMaterialProps(HECL::BlenderConnection::PyOutStream& out); static void RegisterMaterialProps(hecl::BlenderConnection::PyOutStream& out);
static void ConstructMaterial(HECL::BlenderConnection::PyOutStream& out, static void ConstructMaterial(hecl::BlenderConnection::PyOutStream& out,
const MaterialSet::Material& material, const MaterialSet::Material& material,
unsigned groupIdx, unsigned matIdx); unsigned groupIdx, unsigned matIdx);
void readToBlender(HECL::BlenderConnection::PyOutStream& os, void readToBlender(hecl::BlenderConnection::PyOutStream& os,
const PAKRouter<PAKBridge>& pakRouter, const PAKRouter<PAKBridge>& pakRouter,
const PAKRouter<PAKBridge>::EntryType& entry, const PAKRouter<PAKBridge>::EntryType& entry,
unsigned setIdx) unsigned setIdx)
@ -416,7 +416,7 @@ struct MaterialSet : BigDNA
++stageIdx; ++stageIdx;
continue; continue;
} }
const NOD::Node* node; const nod::Node* node;
typename PAKRouter::EntryType* texEntry = (typename PAKRouter::EntryType*) typename PAKRouter::EntryType* texEntry = (typename PAKRouter::EntryType*)
pakRouter.lookupEntry(head.textureIDs[mat.textureIdxs[texInfo.texSlot]], &node); pakRouter.lookupEntry(head.textureIDs[mat.textureIdxs[texInfo.texSlot]], &node);
if (texEntry->name.size()) if (texEntry->name.size())
@ -427,9 +427,9 @@ struct MaterialSet : BigDNA
continue; continue;
} }
if (setIdx < 0) if (setIdx < 0)
texEntry->name = HECL::Format("%s_%d_%d", prefix, matIdx, stageIdx); texEntry->name = hecl::Format("%s_%d_%d", prefix, matIdx, stageIdx);
else else
texEntry->name = HECL::Format("%s_%d_%d_%d", prefix, setIdx, matIdx, stageIdx); texEntry->name = hecl::Format("%s_%d_%d_%d", prefix, setIdx, matIdx, stageIdx);
if (mat.flags.lightmap() && stageIdx == 0) if (mat.flags.lightmap() && stageIdx == 0)
{ {
@ -468,14 +468,14 @@ struct HMDLMaterialSet : BigDNA
Vector<MaterialSet::Material::UVAnimation, DNA_COUNT(uvAnimsCount)> uvAnims; Vector<MaterialSet::Material::UVAnimation, DNA_COUNT(uvAnimsCount)> uvAnims;
String<-1> heclSource; String<-1> heclSource;
HECL::Frontend::IR heclIr; hecl::Frontend::IR heclIr;
Material() = default; Material() = default;
Material(HECL::Frontend::Frontend& FE, Material(hecl::Frontend::Frontend& FE,
const std::string& diagName, const std::string& diagName,
const HECL::BlenderConnection::DataStream::Mesh::Material& mat, const hecl::BlenderConnection::DataStream::Mesh::Material& mat,
const std::unordered_map<std::string, int32_t>& iprops, const std::unordered_map<std::string, int32_t>& iprops,
const std::vector<HECL::ProjectPath>& texPaths); const std::vector<hecl::ProjectPath>& texPaths);
}; };
Vector<Material, DNA_COUNT(head.materialCount)> materials; Vector<Material, DNA_COUNT(head.materialCount)> materials;
}; };

View File

@ -34,7 +34,7 @@ struct CSKR : BigDNA
return nullptr; return nullptr;
} }
void weightVertex(HECL::BlenderConnection::PyOutStream& os, const CINF& cinf, atUint32 idx) const void weightVertex(hecl::BlenderConnection::PyOutStream& os, const CINF& cinf, atUint32 idx) const
{ {
atUint32 accum = 0; atUint32 accum = 0;
for (const SkinningRule& rule : skinningRules) for (const SkinningRule& rule : skinningRules)

View File

@ -18,7 +18,7 @@ namespace DataSpec
{ {
namespace DNAMP1 namespace DNAMP1
{ {
LogVisor::LogModule Log("Retro::DNAMP1"); logvisor::Module Log("urde::DNAMP1");
static bool GetNoShare(const std::string& name) static bool GetNoShare(const std::string& name)
{ {
@ -29,12 +29,12 @@ static bool GetNoShare(const std::string& name)
return true; return true;
} }
PAKBridge::PAKBridge(HECL::Database::Project& project, PAKBridge::PAKBridge(hecl::Database::Project& project,
const NOD::Node& node, const nod::Node& node,
bool doExtract) bool doExtract)
: m_project(project), m_node(node), m_pak(false, GetNoShare(node.getName())), m_doExtract(doExtract) : m_project(project), m_node(node), m_pak(false, GetNoShare(node.getName())), m_doExtract(doExtract)
{ {
NOD::AthenaPartReadStream rs(node.beginReadStream()); nod::AthenaPartReadStream rs(node.beginReadStream());
m_pak.read(rs); m_pak.read(rs);
/* Append Level String */ /* Append Level String */
@ -60,12 +60,12 @@ PAKBridge::PAKBridge(HECL::Database::Project& project,
} }
} }
static HECL::SystemString LayerName(const std::string& name) static hecl::SystemString LayerName(const std::string& name)
{ {
#if HECL_UCS2 #if HECL_UCS2
HECL::SystemString ret = HECL::UTF8ToWide(name); hecl::SystemString ret = hecl::UTF8ToWide(name);
#else #else
HECL::SystemString ret = name; hecl::SystemString ret = name;
#endif #endif
for (auto& ch : ret) for (auto& ch : ret)
if (ch == _S('/') || ch == _S('\\')) if (ch == _S('/') || ch == _S('\\'))
@ -88,7 +88,7 @@ void PAKBridge::build()
mlvl.read(rs); mlvl.read(rs);
} }
#if HECL_UCS2 #if HECL_UCS2
level.name = HECL::UTF8ToWide(m_pak.bestEntryName(entry)); level.name = hecl::UTF8ToWide(m_pak.bestEntryName(entry));
#else #else
level.name = m_pak.bestEntryName(entry); level.name = m_pak.bestEntryName(entry);
#endif #endif
@ -102,7 +102,7 @@ void PAKBridge::build()
{ {
worldMapEnt->name = entry.name + "_mapw"; worldMapEnt->name = entry.name + "_mapw";
PAKEntryReadStream rs = worldMapEnt->beginReadStream(m_node); PAKEntryReadStream rs = worldMapEnt->beginReadStream(m_node);
rs.seek(8, Athena::Current); rs.seek(8, athena::Current);
atUint32 areaCount = rs.readUint32Big(); atUint32 areaCount = rs.readUint32Big();
mapw.reserve(areaCount); mapw.reserve(areaCount);
for (atUint32 i=0 ; i<areaCount ; ++i) for (atUint32 i=0 ; i<areaCount ; ++i)
@ -145,17 +145,17 @@ void PAKBridge::build()
if (areaDeps.name.empty()) if (areaDeps.name.empty())
{ {
#if HECL_UCS2 #if HECL_UCS2
areaDeps.name = _S("MREA_") + HECL::UTF8ToWide(area.areaMREAId.toString()); areaDeps.name = _S("MREA_") + hecl::UTF8ToWide(area.areaMREAId.toString());
#else #else
areaDeps.name = "MREA_" + area.areaMREAId.toString(); areaDeps.name = "MREA_" + area.areaMREAId.toString();
#endif #endif
} }
HECL::SystemChar num[16]; hecl::SystemChar num[16];
HECL::SNPrintf(num, 16, _S("%02u "), ai); hecl::SNPrintf(num, 16, _S("%02u "), ai);
areaDeps.name = num + areaDeps.name; areaDeps.name = num + areaDeps.name;
#if HECL_UCS2 #if HECL_UCS2
std::string lowerName = HECL::WideToUTF8(areaDeps.name); std::string lowerName = hecl::WideToUTF8(areaDeps.name);
#else #else
std::string lowerName(areaDeps.name); std::string lowerName(areaDeps.name);
#endif #endif
@ -187,7 +187,7 @@ void PAKBridge::build()
while (layer.name.size() && isspace(layer.name.back())) while (layer.name.size() && isspace(layer.name.back()))
layer.name.pop_back(); layer.name.pop_back();
#endif #endif
HECL::SNPrintf(num, 16, layer.active ? _S("%02ua ") : _S("%02u "), l-1); hecl::SNPrintf(num, 16, layer.active ? _S("%02ua ") : _S("%02u "), l-1);
layer.name = num + layer.name; layer.name = num + layer.name;
layer.resources.reserve(area.depLayers[l] - r); layer.resources.reserve(area.depLayers[l] - r);
@ -228,16 +228,16 @@ void PAKBridge::addCMDLRigPairs(PAKRouter<PAKBridge>& pakRouter,
PAK::Entry* cmdlEnt = (PAK::Entry*)m_pak.lookupEntry(ci.cmdl); PAK::Entry* cmdlEnt = (PAK::Entry*)m_pak.lookupEntry(ci.cmdl);
PAK::Entry* cskrEnt = (PAK::Entry*)m_pak.lookupEntry(ci.cskr); PAK::Entry* cskrEnt = (PAK::Entry*)m_pak.lookupEntry(ci.cskr);
PAK::Entry* cinfEnt = (PAK::Entry*)m_pak.lookupEntry(ci.cinf); PAK::Entry* cinfEnt = (PAK::Entry*)m_pak.lookupEntry(ci.cinf);
cmdlEnt->name = HECL::Format("ANCS_%08X_%s_model", entry.first.toUint32(), ci.name.c_str()); cmdlEnt->name = hecl::Format("ANCS_%08X_%s_model", entry.first.toUint32(), ci.name.c_str());
cskrEnt->name = HECL::Format("ANCS_%08X_%s_skin", entry.first.toUint32(), ci.name.c_str()); cskrEnt->name = hecl::Format("ANCS_%08X_%s_skin", entry.first.toUint32(), ci.name.c_str());
cinfEnt->name = HECL::Format("ANCS_%08X_%s_skel", entry.first.toUint32(), ci.name.c_str()); cinfEnt->name = hecl::Format("ANCS_%08X_%s_skel", entry.first.toUint32(), ci.name.c_str());
if (ci.cmdlOverlay && ci.cskrOverlay) if (ci.cmdlOverlay && ci.cskrOverlay)
{ {
addTo[ci.cmdlOverlay] = std::make_pair(ci.cskrOverlay, ci.cinf); addTo[ci.cmdlOverlay] = std::make_pair(ci.cskrOverlay, ci.cinf);
PAK::Entry* cmdlEnt = (PAK::Entry*)m_pak.lookupEntry(ci.cmdlOverlay); PAK::Entry* cmdlEnt = (PAK::Entry*)m_pak.lookupEntry(ci.cmdlOverlay);
PAK::Entry* cskrEnt = (PAK::Entry*)m_pak.lookupEntry(ci.cskrOverlay); PAK::Entry* cskrEnt = (PAK::Entry*)m_pak.lookupEntry(ci.cskrOverlay);
cmdlEnt->name = HECL::Format("ANCS_%08X_%s_overmodel", entry.first.toUint32(), ci.name.c_str()); cmdlEnt->name = hecl::Format("ANCS_%08X_%s_overmodel", entry.first.toUint32(), ci.name.c_str());
cskrEnt->name = HECL::Format("ANCS_%08X_%s_overskin", entry.first.toUint32(), ci.name.c_str()); cskrEnt->name = hecl::Format("ANCS_%08X_%s_overskin", entry.first.toUint32(), ci.name.c_str());
} }
} }
std::map<atUint32, DNAANCS::AnimationResInfo<UniqueID32>> animInfo; std::map<atUint32, DNAANCS::AnimationResInfo<UniqueID32>> animInfo;
@ -245,11 +245,11 @@ void PAKBridge::addCMDLRigPairs(PAKRouter<PAKBridge>& pakRouter,
for (auto& ae : animInfo) for (auto& ae : animInfo)
{ {
PAK::Entry* animEnt = (PAK::Entry*)m_pak.lookupEntry(ae.second.animId); PAK::Entry* animEnt = (PAK::Entry*)m_pak.lookupEntry(ae.second.animId);
animEnt->name = HECL::Format("ANCS_%08X_%s", entry.first.toUint32(), ae.second.name.c_str()); animEnt->name = hecl::Format("ANCS_%08X_%s", entry.first.toUint32(), ae.second.name.c_str());
if (ae.second.evntId) if (ae.second.evntId)
{ {
PAK::Entry* evntEnt = (PAK::Entry*)m_pak.lookupEntry(ae.second.evntId); PAK::Entry* evntEnt = (PAK::Entry*)m_pak.lookupEntry(ae.second.evntId);
evntEnt->name = HECL::Format("ANCS_%08X_%s_evnt", entry.first.toUint32(), ae.second.name.c_str()); evntEnt->name = hecl::Format("ANCS_%08X_%s_evnt", entry.first.toUint32(), ae.second.name.c_str());
} }
} }
} }

View File

@ -9,30 +9,30 @@ namespace DataSpec
namespace DNAMP1 namespace DNAMP1
{ {
extern LogVisor::LogModule Log; extern logvisor::Module Log;
/* MP1-specific, one-shot PAK traversal/extraction class */ /* MP1-specific, one-shot PAK traversal/extraction class */
class PAKBridge class PAKBridge
{ {
HECL::Database::Project& m_project; hecl::Database::Project& m_project;
const NOD::Node& m_node; const nod::Node& m_node;
PAK m_pak; PAK m_pak;
public: public:
bool m_doExtract; bool m_doExtract;
using Level = Level<UniqueID32>; using Level = Level<UniqueID32>;
std::unordered_map<UniqueID32, Level> m_levelDeps; std::unordered_map<UniqueID32, Level> m_levelDeps;
HECL::SystemString m_levelString; hecl::SystemString m_levelString;
PAKBridge(HECL::Database::Project& project, PAKBridge(hecl::Database::Project& project,
const NOD::Node& node, const nod::Node& node,
bool doExtract=true); bool doExtract=true);
void build(); void build();
static ResExtractor<PAKBridge> LookupExtractor(const PAK::Entry& entry); static ResExtractor<PAKBridge> LookupExtractor(const PAK::Entry& entry);
const std::string& getName() const {return m_node.getName();} const std::string& getName() const {return m_node.getName();}
const HECL::SystemString& getLevelString() const {return m_levelString;} const hecl::SystemString& getLevelString() const {return m_levelString;}
using PAKType = PAK; using PAKType = PAK;
const PAKType& getPAK() const {return m_pak;} const PAKType& getPAK() const {return m_pak;}
const NOD::Node& getNode() const {return m_node;} const nod::Node& getNode() const {return m_node;}
void addCMDLRigPairs(PAKRouter<PAKBridge>& pakRouter, void addCMDLRigPairs(PAKRouter<PAKBridge>& pakRouter,
std::unordered_map<UniqueID32, std::pair<UniqueID32, UniqueID32>>& addTo) const; std::unordered_map<UniqueID32, std::pair<UniqueID32, UniqueID32>>& addTo) const;

View File

@ -5,7 +5,7 @@ namespace DataSpec
namespace DNAMP1 namespace DNAMP1
{ {
void DeafBabe::BlenderInit(HECL::BlenderConnection::PyOutStream& os) void DeafBabe::BlenderInit(hecl::BlenderConnection::PyOutStream& os)
{ {
os << "TYPE_COLORS = {'Ground':(1.0, 0.43, 0.15),\n" os << "TYPE_COLORS = {'Ground':(1.0, 0.43, 0.15),\n"
" 'Stone':(0.28, 0.28, 0.28),\n" " 'Stone':(0.28, 0.28, 0.28),\n"

View File

@ -86,10 +86,10 @@ struct DeafBabe : BigDNA
Vector<atVec3f, DNA_COUNT(vertCount)> verts; Vector<atVec3f, DNA_COUNT(vertCount)> verts;
/* Dummy MP2 member */ /* Dummy MP2 member */
void insertNoClimb(HECL::BlenderConnection::PyOutStream&) const {} void insertNoClimb(hecl::BlenderConnection::PyOutStream&) const {}
static void BlenderInit(HECL::BlenderConnection::PyOutStream& os); static void BlenderInit(hecl::BlenderConnection::PyOutStream& os);
void sendToBlender(HECL::BlenderConnection::PyOutStream& os) const void sendToBlender(hecl::BlenderConnection::PyOutStream& os) const
{ {
DeafBabeSendToBlender(os, *this); DeafBabeSendToBlender(os, *this);
} }

View File

@ -5,7 +5,7 @@ namespace DataSpec
namespace DNAMP1 namespace DNAMP1
{ {
void EVNT::read(Athena::io::IStreamReader& reader) void EVNT::read(athena::io::IStreamReader& reader)
{ {
version = reader.readUint32Big(); version = reader.readUint32Big();
@ -26,7 +26,7 @@ void EVNT::read(Athena::io::IStreamReader& reader)
} }
} }
void EVNT::write(Athena::io::IStreamWriter& writer) const void EVNT::write(athena::io::IStreamWriter& writer) const
{ {
writer.writeUint32Big(version); writer.writeUint32Big(version);
@ -46,50 +46,42 @@ void EVNT::write(Athena::io::IStreamWriter& writer) const
} }
} }
void EVNT::read(Athena::io::YAMLDocReader& reader) void EVNT::read(athena::io::YAMLDocReader& reader)
{ {
version = reader.readUint32("version"); version = reader.readUint32("version");
atUint32 loopCount = reader.readUint32("loopCount"); reader.enumerate("loopEvents", loopEvents);
reader.enumerate("loopEvents", loopEvents, loopCount);
uevtEvents.clear(); uevtEvents.clear();
atUint32 uevtCount = reader.readUint32("uevtCount"); reader.enumerate("uevtEvents", uevtEvents);
reader.enumerate("uevtEvents", uevtEvents, uevtCount);
atUint32 effectCount = reader.readUint32("effectCount"); reader.enumerate("effectEvents", effectEvents);
reader.enumerate("effectEvents", effectEvents, effectCount);
if (version == 2) if (version == 2)
{ {
atUint32 sfxCount = reader.readUint32("sfxCount"); reader.enumerate("sfxEvents", sfxEvents);
reader.enumerate("sfxEvents", sfxEvents, sfxCount);
} }
} }
void EVNT::write(Athena::io::YAMLDocWriter& writer) const void EVNT::write(athena::io::YAMLDocWriter& writer) const
{ {
writer.writeUint32("version", version); writer.writeUint32("version", version);
writer.writeUint32("loopCount", loopEvents.size());
writer.enumerate("loopEvents", loopEvents); writer.enumerate("loopEvents", loopEvents);
writer.writeUint32("uevtCount", uevtEvents.size());
writer.enumerate("uevtEvents", uevtEvents); writer.enumerate("uevtEvents", uevtEvents);
writer.writeUint32("effectCount", effectEvents.size());
writer.enumerate("effectEvents", effectEvents); writer.enumerate("effectEvents", effectEvents);
if (version == 2) if (version == 2)
{ {
writer.writeUint32("sfxCount", sfxEvents.size());
writer.enumerate("sfxEvents", sfxEvents); writer.enumerate("sfxEvents", sfxEvents);
} }
} }
const char* EVNT::DNAType() const char* EVNT::DNAType()
{ {
return "Retro::DNAMP1::EVNT"; return "urde::DNAMP1::EVNT";
} }
size_t EVNT::binarySize(size_t __isz) const size_t EVNT::binarySize(size_t __isz) const

View File

@ -66,11 +66,11 @@ struct EVNT : BigYAML
}; };
std::vector<SFXEvent> sfxEvents; std::vector<SFXEvent> sfxEvents;
static bool Extract(PAKEntryReadStream& rs, const HECL::ProjectPath& outPath) static bool Extract(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath)
{ {
EVNT evnt; EVNT evnt;
evnt.read(rs); evnt.read(rs);
FILE* fp = HECL::Fopen(outPath.getAbsolutePath().c_str(), _S("wb")); FILE* fp = hecl::Fopen(outPath.getAbsolutePath().c_str(), _S("wb"));
evnt.toYAMLFile(fp); evnt.toYAMLFile(fp);
fclose(fp); fclose(fp);
return true; return true;

View File

@ -5,7 +5,7 @@ namespace DataSpec
{ {
namespace DNAMP1 namespace DNAMP1
{ {
void FRME::read(Athena::io::IStreamReader& __dna_reader) void FRME::read(athena::io::IStreamReader& __dna_reader)
{ {
/* version */ /* version */
version = __dna_reader.readUint32Big(); version = __dna_reader.readUint32Big();
@ -18,13 +18,13 @@ void FRME::read(Athena::io::IStreamReader& __dna_reader)
/* widgetCount */ /* widgetCount */
widgetCount = __dna_reader.readUint32Big(); widgetCount = __dna_reader.readUint32Big();
/* widgets */ /* widgets */
__dna_reader.enumerate<Widget>(widgets, widgetCount, [this](Athena::io::IStreamReader& reader, Widget& w) { __dna_reader.enumerate<Widget>(widgets, widgetCount, [this](athena::io::IStreamReader& reader, Widget& w) {
w.owner = this; w.owner = this;
w.read(reader); w.read(reader);
}); });
} }
void FRME::write(Athena::io::IStreamWriter& __dna_writer) const void FRME::write(athena::io::IStreamWriter& __dna_writer) const
{ {
/* version */ /* version */
__dna_writer.writeUint32Big(version); __dna_writer.writeUint32Big(version);
@ -46,7 +46,7 @@ size_t FRME::binarySize(size_t __isz) const
return __isz + 20; return __isz + 20;
} }
void FRME::Widget::read(Athena::io::IStreamReader& __dna_reader) void FRME::Widget::read(athena::io::IStreamReader& __dna_reader)
{ {
/* type */ /* type */
type.read(__dna_reader); type.read(__dna_reader);
@ -67,7 +67,7 @@ void FRME::Widget::read(Athena::io::IStreamReader& __dna_reader)
case SBIG('TBGP'): widgetInfo.reset(new TBGPInfo); break; case SBIG('TBGP'): widgetInfo.reset(new TBGPInfo); break;
case SBIG('SLGP'): widgetInfo.reset(new SLGPInfo); break; case SBIG('SLGP'): widgetInfo.reset(new SLGPInfo); break;
default: default:
Log.report(LogVisor::FatalError, _S("Unsupported FRME widget type %.8X"), type.toUint32()); Log.report(logvisor::Fatal, _S("Unsupported FRME widget type %.8X"), type.toUint32());
} }
/* widgetInfo */ /* widgetInfo */
@ -98,7 +98,7 @@ void FRME::Widget::read(Athena::io::IStreamReader& __dna_reader)
unk4 = __dna_reader.readBool(); unk4 = __dna_reader.readBool();
} }
void FRME::Widget::write(Athena::io::IStreamWriter& __dna_writer) const void FRME::Widget::write(athena::io::IStreamWriter& __dna_writer) const
{ {
/* type */ /* type */
type.write(__dna_writer); type.write(__dna_writer);
@ -143,7 +143,7 @@ size_t FRME::Widget::binarySize(size_t __isz) const
return __isz + 67; return __isz + 67;
} }
void FRME::Widget::CAMRInfo::read(Athena::io::IStreamReader& __dna_reader) void FRME::Widget::CAMRInfo::read(athena::io::IStreamReader& __dna_reader)
{ {
projectionType = ProjectionType(__dna_reader.readUint32Big()); projectionType = ProjectionType(__dna_reader.readUint32Big());
if (projectionType == ProjectionType::Perspective) if (projectionType == ProjectionType::Perspective)
@ -151,17 +151,17 @@ void FRME::Widget::CAMRInfo::read(Athena::io::IStreamReader& __dna_reader)
else if (projectionType == ProjectionType::Orthographic) else if (projectionType == ProjectionType::Orthographic)
projection.reset(new OrthographicProjection); projection.reset(new OrthographicProjection);
else else
Log.report(LogVisor::FatalError, _S("Invalid CAMR projection mode! %i"), int(projectionType)); Log.report(logvisor::Fatal, _S("Invalid CAMR projection mode! %i"), int(projectionType));
projection->read(__dna_reader); projection->read(__dna_reader);
} }
void FRME::Widget::CAMRInfo::write(Athena::io::IStreamWriter& __dna_writer) const void FRME::Widget::CAMRInfo::write(athena::io::IStreamWriter& __dna_writer) const
{ {
if (!projection) if (!projection)
Log.report(LogVisor::FatalError, _S("Invalid CAMR projection object!")); Log.report(logvisor::Fatal, _S("Invalid CAMR projection object!"));
if (projection->type != projectionType) if (projection->type != projectionType)
Log.report(LogVisor::FatalError, _S("CAMR projection type does not match actual projection type!")); Log.report(logvisor::Fatal, _S("CAMR projection type does not match actual projection type!"));
__dna_writer.writeUint32Big(atUint32(projectionType)); __dna_writer.writeUint32Big(atUint32(projectionType));
projection->write(__dna_writer); projection->write(__dna_writer);
@ -173,7 +173,7 @@ size_t FRME::Widget::CAMRInfo::binarySize(size_t __isz) const
return __isz + 4; return __isz + 4;
} }
void FRME::Widget::TXPNInfo::read(Athena::io::IStreamReader& __dna_reader) void FRME::Widget::TXPNInfo::read(athena::io::IStreamReader& __dna_reader)
{ {
IWidgetInfo::read(__dna_reader); IWidgetInfo::read(__dna_reader);
/* frameVals[0] */ /* frameVals[0] */
@ -213,7 +213,7 @@ void FRME::Widget::TXPNInfo::read(Athena::io::IStreamReader& __dna_reader)
} }
} }
void FRME::Widget::TXPNInfo::write(Athena::io::IStreamWriter& __dna_writer) const void FRME::Widget::TXPNInfo::write(athena::io::IStreamWriter& __dna_writer) const
{ {
IWidgetInfo::write(__dna_writer); IWidgetInfo::write(__dna_writer);
/* frameVals[0] */ /* frameVals[0] */
@ -263,22 +263,22 @@ size_t FRME::Widget::TXPNInfo::binarySize(size_t __isz) const
return __isz + (version == 1 ? 78 : 66); return __isz + (version == 1 ? 78 : 66);
} }
bool FRME::Extract(const SpecBase &dataSpec, PAKEntryReadStream &rs, const HECL::ProjectPath &outPath, PAKRouter<PAKBridge> &pakRouter, const PAK::Entry &entry, bool force, std::function<void (const HECL::SystemChar *)> fileChanged) bool FRME::Extract(const SpecBase &dataSpec, PAKEntryReadStream &rs, const hecl::ProjectPath &outPath, PAKRouter<PAKBridge> &pakRouter, const PAK::Entry &entry, bool force, std::function<void (const hecl::SystemChar *)> fileChanged)
{ {
FRME frme; FRME frme;
frme.read(rs); frme.read(rs);
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection(); hecl::BlenderConnection& conn = hecl::BlenderConnection::SharedConnection();
#if 0 #if 0
if (!force && outPath.getPathType() == HECL::ProjectPath::Type::File) if (!force && outPath.getPathType() == hecl::ProjectPath::Type::File)
return true; return true;
#endif #endif
if (!conn.createBlend(outPath, HECL::BlenderConnection::BlendType::Frame)) if (!conn.createBlend(outPath, hecl::BlenderConnection::BlendType::Frame))
return false; return false;
HECL::BlenderConnection::PyOutStream os = conn.beginPythonOut(true); hecl::BlenderConnection::PyOutStream os = conn.beginPythonOut(true);
os << "import bpy, math\n" os << "import bpy, math\n"
"from mathutils import Matrix, Quaternion\n" "from mathutils import Matrix, Quaternion\n"
@ -347,7 +347,7 @@ bool FRME::Extract(const SpecBase &dataSpec, PAKEntryReadStream &rs, const HECL:
{ {
using MODLInfo = FRME::Widget::MODLInfo; using MODLInfo = FRME::Widget::MODLInfo;
MODLInfo* info = dynamic_cast<MODLInfo*>(w.widgetInfo.get()); MODLInfo* info = dynamic_cast<MODLInfo*>(w.widgetInfo.get());
HECL::ProjectPath modelPath = pakRouter.getWorking(info->model); hecl::ProjectPath modelPath = pakRouter.getWorking(info->model);
const PAKRouter<PAKBridge>::EntryType* cmdlE = pakRouter.lookupEntry(info->model, nullptr, true, true); const PAKRouter<PAKBridge>::EntryType* cmdlE = pakRouter.lookupEntry(info->model, nullptr, true, true);
os.linkBlend(modelPath.getAbsolutePathUTF8().c_str(), os.linkBlend(modelPath.getAbsolutePathUTF8().c_str(),
@ -366,16 +366,16 @@ bool FRME::Extract(const SpecBase &dataSpec, PAKEntryReadStream &rs, const HECL:
if (info && info->texture) if (info && info->texture)
{ {
std::string texName = pakRouter.getBestEntryName(info->texture); std::string texName = pakRouter.getBestEntryName(info->texture);
const NOD::Node* node; const nod::Node* node;
const PAKRouter<PAKBridge>::EntryType* texEntry = pakRouter.lookupEntry(info->texture, &node); const PAKRouter<PAKBridge>::EntryType* texEntry = pakRouter.lookupEntry(info->texture, &node);
HECL::ProjectPath txtrPath = pakRouter.getWorking(texEntry); hecl::ProjectPath txtrPath = pakRouter.getWorking(texEntry);
if (txtrPath.getPathType() == HECL::ProjectPath::Type::None) if (txtrPath.getPathType() == hecl::ProjectPath::Type::None)
{ {
PAKEntryReadStream rs = texEntry->beginReadStream(*node); PAKEntryReadStream rs = texEntry->beginReadStream(*node);
TXTR::Extract(rs, txtrPath); TXTR::Extract(rs, txtrPath);
} }
HECL::SystemString resPath = pakRouter.getResourceRelativePath(entry, info->texture); hecl::SystemString resPath = pakRouter.getResourceRelativePath(entry, info->texture);
HECL::SystemUTF8View resPathView(resPath); hecl::SystemUTF8View resPathView(resPath);
os.format("if '%s' in bpy.data.images:\n" os.format("if '%s' in bpy.data.images:\n"
" image = bpy.data.images['%s']\n" " image = bpy.data.images['%s']\n"
"else:\n" "else:\n"

View File

@ -3,7 +3,7 @@
#include "../DNACommon/DNACommon.hpp" #include "../DNACommon/DNACommon.hpp"
#include "DNAMP1.hpp" #include "DNAMP1.hpp"
#include <Athena/FileWriter.hpp> #include <athena/FileWriter.hpp>
namespace DataSpec namespace DataSpec
{ {
@ -39,8 +39,8 @@ struct FRME : BigDNA
struct IWidgetInfo : BigDNA struct IWidgetInfo : BigDNA
{ {
Delete _d; Delete _d;
virtual void read(Athena::io::IStreamReader&) {} virtual void read(athena::io::IStreamReader&) {}
void write(Athena::io::IStreamWriter&) const {} void write(athena::io::IStreamWriter&) const {}
size_t binarySize(size_t __isz) const { return __isz; } size_t binarySize(size_t __isz) const { return __isz; }
}; };
@ -219,11 +219,11 @@ struct FRME : BigDNA
Vector<Widget, DNA_COUNT(widgetCount)> widgets; Vector<Widget, DNA_COUNT(widgetCount)> widgets;
static bool Extract(const SpecBase& dataSpec, static bool Extract(const SpecBase& dataSpec,
PAKEntryReadStream& rs, PAKEntryReadStream& rs,
const HECL::ProjectPath& outPath, const hecl::ProjectPath& outPath,
PAKRouter<PAKBridge>& pakRouter, PAKRouter<PAKBridge>& pakRouter,
const PAK::Entry& entry, const PAK::Entry& entry,
bool force, bool force,
std::function<void(const HECL::SystemChar*)> fileChanged); std::function<void(const hecl::SystemChar*)> fileChanged);
}; };
} }

View File

@ -16,15 +16,15 @@ struct MAPA : DNAMAPA::MAPA
{ {
static bool Extract(const SpecBase& dataSpec, static bool Extract(const SpecBase& dataSpec,
PAKEntryReadStream& rs, PAKEntryReadStream& rs,
const HECL::ProjectPath& outPath, const hecl::ProjectPath& outPath,
PAKRouter<PAKBridge>& pakRouter, PAKRouter<PAKBridge>& pakRouter,
const PAK::Entry& entry, const PAK::Entry& entry,
bool force, bool force,
std::function<void(const HECL::SystemChar*)> fileChanged) std::function<void(const hecl::SystemChar*)> fileChanged)
{ {
MAPA mapa; MAPA mapa;
mapa.read(rs); mapa.read(rs);
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection(); hecl::BlenderConnection& conn = hecl::BlenderConnection::SharedConnection();
return DNAMAPA::ReadMAPAToBlender(conn, mapa, outPath, pakRouter, entry, force); return DNAMAPA::ReadMAPAToBlender(conn, mapa, outPath, pakRouter, entry, force);
} }
}; };

View File

@ -108,18 +108,18 @@ struct MLVL : BigYAML
static bool Extract(const SpecBase& dataSpec, static bool Extract(const SpecBase& dataSpec,
PAKEntryReadStream& rs, PAKEntryReadStream& rs,
const HECL::ProjectPath& outPath, const hecl::ProjectPath& outPath,
PAKRouter<PAKBridge>& pakRouter, PAKRouter<PAKBridge>& pakRouter,
const PAK::Entry& entry, const PAK::Entry& entry,
bool force, bool force,
std::function<void(const HECL::SystemChar*)> fileChanged) std::function<void(const hecl::SystemChar*)> fileChanged)
{ {
MLVL mlvl; MLVL mlvl;
mlvl.read(rs); mlvl.read(rs);
FILE* fp = HECL::Fopen(outPath.getWithExtension(_S(".yaml"), true).getAbsolutePath().c_str(), _S("w")); FILE* fp = hecl::Fopen(outPath.getWithExtension(_S(".yaml"), true).getAbsolutePath().c_str(), _S("w"));
mlvl.toYAMLFile(fp); mlvl.toYAMLFile(fp);
fclose(fp); fclose(fp);
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection(); hecl::BlenderConnection& conn = hecl::BlenderConnection::SharedConnection();
return DNAMLVL::ReadMLVLToBlender(conn, mlvl, outPath, pakRouter, return DNAMLVL::ReadMLVLToBlender(conn, mlvl, outPath, pakRouter,
entry, force, fileChanged); entry, force, fileChanged);
} }

View File

@ -2,23 +2,19 @@
#include "SCLY.hpp" #include "SCLY.hpp"
#include "DeafBabe.hpp" #include "DeafBabe.hpp"
#include "../DNACommon/BabeDead.hpp" #include "../DNACommon/BabeDead.hpp"
#include "zeus/Math.hpp"
#ifndef _USE_MATH_DEFINES
#define _USE_MATH_DEFINES 1
#endif
#include <math.h>
namespace DataSpec namespace DataSpec
{ {
namespace DNAMP1 namespace DNAMP1
{ {
void MREA::ReadBabeDeadToBlender_1_2(HECL::BlenderConnection::PyOutStream& os, void MREA::ReadBabeDeadToBlender_1_2(hecl::BlenderConnection::PyOutStream& os,
Athena::io::IStreamReader& rs) athena::io::IStreamReader& rs)
{ {
atUint32 bdMagic = rs.readUint32Big(); atUint32 bdMagic = rs.readUint32Big();
if (bdMagic != 0xBABEDEAD) if (bdMagic != 0xBABEDEAD)
Log.report(LogVisor::FatalError, "invalid BABEDEAD magic"); Log.report(logvisor::Fatal, "invalid BABEDEAD magic");
os << "bpy.context.scene.render.engine = 'CYCLES'\n" os << "bpy.context.scene.render.engine = 'CYCLES'\n"
"bpy.context.scene.world.use_nodes = True\n" "bpy.context.scene.world.use_nodes = True\n"
"bpy.context.scene.render.engine = 'BLENDER_GAME'\n" "bpy.context.scene.render.engine = 'BLENDER_GAME'\n"
@ -49,7 +45,7 @@ void MREA::AddCMDLRigPairs(PAKEntryReadStream& rs,
atUint64 secStart = rs.position(); atUint64 secStart = rs.position();
while (curSec != head.sclySecIdx) while (curSec != head.sclySecIdx)
secStart += head.secSizes[curSec++]; secStart += head.secSizes[curSec++];
rs.seek(secStart, Athena::Begin); rs.seek(secStart, athena::Begin);
SCLY scly; SCLY scly;
scly.read(rs); scly.read(rs);
scly.addCMDLRigPairs(pakRouter, addTo); scly.addCMDLRigPairs(pakRouter, addTo);
@ -57,18 +53,18 @@ void MREA::AddCMDLRigPairs(PAKEntryReadStream& rs,
bool MREA::Extract(const SpecBase& dataSpec, bool MREA::Extract(const SpecBase& dataSpec,
PAKEntryReadStream& rs, PAKEntryReadStream& rs,
const HECL::ProjectPath& outPath, const hecl::ProjectPath& outPath,
PAKRouter<PAKBridge>& pakRouter, PAKRouter<PAKBridge>& pakRouter,
const PAK::Entry& entry, const PAK::Entry& entry,
bool force, bool force,
std::function<void(const HECL::SystemChar*)>) std::function<void(const hecl::SystemChar*)>)
{ {
using RigPair = std::pair<CSKR*, CINF*>; using RigPair = std::pair<CSKR*, CINF*>;
RigPair dummy(nullptr, nullptr); RigPair dummy(nullptr, nullptr);
/* Rename MREA for consistency */ /* Rename MREA for consistency */
HECL::ProjectPath mreaPath(outPath.getParentPath(), _S("!area.blend")); hecl::ProjectPath mreaPath(outPath.getParentPath(), _S("!area.blend"));
if (!force && mreaPath.getPathType() == HECL::ProjectPath::Type::File) if (!force && mreaPath.getPathType() == hecl::ProjectPath::Type::File)
return true; return true;
/* Do extract */ /* Do extract */
@ -76,12 +72,12 @@ bool MREA::Extract(const SpecBase& dataSpec,
head.read(rs); head.read(rs);
rs.seekAlign32(); rs.seekAlign32();
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection(); hecl::BlenderConnection& conn = hecl::BlenderConnection::SharedConnection();
if (!conn.createBlend(mreaPath, HECL::BlenderConnection::BlendType::Area)) if (!conn.createBlend(mreaPath, hecl::BlenderConnection::BlendType::Area))
return false; return false;
/* Open Py Stream and read sections */ /* Open Py Stream and read sections */
HECL::BlenderConnection::PyOutStream os = conn.beginPythonOut(true); hecl::BlenderConnection::PyOutStream os = conn.beginPythonOut(true);
os.format("import bpy\n" os.format("import bpy\n"
"import bmesh\n" "import bmesh\n"
"from mathutils import Vector\n" "from mathutils import Vector\n"
@ -113,7 +109,7 @@ bool MREA::Extract(const SpecBase& dataSpec,
atUint64 secStart = rs.position(); atUint64 secStart = rs.position();
matSet.read(rs); matSet.read(rs);
matSet.readToBlender(os, pakRouter, entry, 0); matSet.readToBlender(os, pakRouter, entry, 0);
rs.seek(secStart + head.secSizes[0], Athena::Begin); rs.seek(secStart + head.secSizes[0], athena::Begin);
std::vector<DNACMDL::VertexAttributes> vertAttribs; std::vector<DNACMDL::VertexAttributes> vertAttribs;
DNACMDL::GetVertexAttributes(matSet, vertAttribs); DNACMDL::GetVertexAttributes(matSet, vertAttribs);
@ -124,7 +120,7 @@ bool MREA::Extract(const SpecBase& dataSpec,
MeshHeader mHeader; MeshHeader mHeader;
secStart = rs.position(); secStart = rs.position();
mHeader.read(rs); mHeader.read(rs);
rs.seek(secStart + head.secSizes[curSec++], Athena::Begin); rs.seek(secStart + head.secSizes[curSec++], athena::Begin);
curSec += DNACMDL::ReadGeomSectionsToBlender<PAKRouter<PAKBridge>, MaterialSet, RigPair, DNACMDL::SurfaceHeader_1> curSec += DNACMDL::ReadGeomSectionsToBlender<PAKRouter<PAKBridge>, MaterialSet, RigPair, DNACMDL::SurfaceHeader_1>
(os, rs, pakRouter, entry, dummy, true, (os, rs, pakRouter, entry, dummy, true,
true, vertAttribs, m, head.secCount, 0, &head.secSizes[curSec]); true, vertAttribs, m, head.secCount, 0, &head.secSizes[curSec]);
@ -139,14 +135,14 @@ bool MREA::Extract(const SpecBase& dataSpec,
} }
/* Skip AROT */ /* Skip AROT */
rs.seek(head.secSizes[curSec++], Athena::Current); rs.seek(head.secSizes[curSec++], athena::Current);
/* Read SCLY layers */ /* Read SCLY layers */
secStart = rs.position(); secStart = rs.position();
SCLY scly; SCLY scly;
scly.read(rs); scly.read(rs);
scly.exportToLayerDirectories(entry, pakRouter, force); scly.exportToLayerDirectories(entry, pakRouter, force);
rs.seek(secStart + head.secSizes[curSec++], Athena::Begin); rs.seek(secStart + head.secSizes[curSec++], athena::Begin);
/* Read collision meshes */ /* Read collision meshes */
DeafBabe collision; DeafBabe collision;
@ -154,15 +150,15 @@ bool MREA::Extract(const SpecBase& dataSpec,
collision.read(rs); collision.read(rs);
DeafBabe::BlenderInit(os); DeafBabe::BlenderInit(os);
collision.sendToBlender(os); collision.sendToBlender(os);
rs.seek(secStart + head.secSizes[curSec++], Athena::Begin); rs.seek(secStart + head.secSizes[curSec++], athena::Begin);
/* Skip unknown section */ /* Skip unknown section */
rs.seek(head.secSizes[curSec++], Athena::Current); rs.seek(head.secSizes[curSec++], athena::Current);
/* Read BABEDEAD Lights as Cycles emissives */ /* Read BABEDEAD Lights as Cycles emissives */
secStart = rs.position(); secStart = rs.position();
ReadBabeDeadToBlender_1_2(os, rs); ReadBabeDeadToBlender_1_2(os, rs);
rs.seek(secStart + head.secSizes[curSec++], Athena::Begin); rs.seek(secStart + head.secSizes[curSec++], athena::Begin);
/* Origins to center of mass */ /* Origins to center of mass */
os << "bpy.context.scene.layers[1] = True\n" os << "bpy.context.scene.layers[1] = True\n"
@ -193,15 +189,15 @@ void MREA::Name(const SpecBase& dataSpec,
atUint64 secStart = rs.position(); atUint64 secStart = rs.position();
MaterialSet matSet; MaterialSet matSet;
matSet.read(rs); matSet.read(rs);
matSet.nameTextures(pakRouter, HECL::Format("MREA_%s", entry.id.toString().c_str()).c_str(), -1); matSet.nameTextures(pakRouter, hecl::Format("MREA_%s", entry.id.toString().c_str()).c_str(), -1);
rs.seek(secStart + head.secSizes[0], Athena::Begin); rs.seek(secStart + head.secSizes[0], athena::Begin);
/* Skip to SCLY */ /* Skip to SCLY */
atUint32 curSec = 1; atUint32 curSec = 1;
secStart = rs.position(); secStart = rs.position();
while (curSec != head.sclySecIdx) while (curSec != head.sclySecIdx)
secStart += head.secSizes[curSec++]; secStart += head.secSizes[curSec++];
rs.seek(secStart, Athena::Begin); rs.seek(secStart, athena::Begin);
SCLY scly; SCLY scly;
scly.read(rs); scly.read(rs);
scly.nameIDs(pakRouter); scly.nameIDs(pakRouter);
@ -209,10 +205,10 @@ void MREA::Name(const SpecBase& dataSpec,
/* Skip to PATH */ /* Skip to PATH */
while (curSec != head.pathSecIdx) while (curSec != head.pathSecIdx)
secStart += head.secSizes[curSec++]; secStart += head.secSizes[curSec++];
rs.seek(secStart, Athena::Begin); rs.seek(secStart, athena::Begin);
UniqueID32 pathID(rs); UniqueID32 pathID(rs);
const NOD::Node* node; const nod::Node* node;
PAK::Entry* pathEnt = (PAK::Entry*)pakRouter.lookupEntry(pathID, &node); PAK::Entry* pathEnt = (PAK::Entry*)pakRouter.lookupEntry(pathID, &node);
pathEnt->name = entry.name + "_path"; pathEnt->name = entry.name + "_path";
} }

View File

@ -100,8 +100,8 @@ struct MREA
Value<float> unk9; Value<float> unk9;
}; };
static void ReadBabeDeadToBlender_1_2(HECL::BlenderConnection::PyOutStream& os, static void ReadBabeDeadToBlender_1_2(hecl::BlenderConnection::PyOutStream& os,
Athena::io::IStreamReader& rs); athena::io::IStreamReader& rs);
static void AddCMDLRigPairs(PAKEntryReadStream& rs, static void AddCMDLRigPairs(PAKEntryReadStream& rs,
PAKRouter<PAKBridge>& pakRouter, PAKRouter<PAKBridge>& pakRouter,
@ -109,11 +109,11 @@ struct MREA
static bool Extract(const SpecBase& dataSpec, static bool Extract(const SpecBase& dataSpec,
PAKEntryReadStream& rs, PAKEntryReadStream& rs,
const HECL::ProjectPath& outPath, const hecl::ProjectPath& outPath,
PAKRouter<PAKBridge>& pakRouter, PAKRouter<PAKBridge>& pakRouter,
const PAK::Entry& entry, const PAK::Entry& entry,
bool, bool,
std::function<void(const HECL::SystemChar*)>); std::function<void(const hecl::SystemChar*)>);
static void Name(const SpecBase& dataSpec, static void Name(const SpecBase& dataSpec,
PAKEntryReadStream& rs, PAKEntryReadStream& rs,

View File

@ -8,11 +8,11 @@ namespace DataSpec
namespace DNAMP1 namespace DNAMP1
{ {
void PAK::read(Athena::io::IStreamReader& reader) void PAK::read(athena::io::IStreamReader& reader)
{ {
atUint32 version = reader.readUint32Big(); atUint32 version = reader.readUint32Big();
if (version != 0x00030005) if (version != 0x00030005)
Log.report(LogVisor::FatalError, "unexpected PAK magic"); Log.report(logvisor::Fatal, "unexpected PAK magic");
reader.readUint32Big(); reader.readUint32Big();
atUint32 nameCount = reader.readUint32Big(); atUint32 nameCount = reader.readUint32Big();
@ -62,7 +62,7 @@ void PAK::read(Athena::io::IStreamReader& reader)
} }
} }
void PAK::write(Athena::io::IStreamWriter& writer) const void PAK::write(athena::io::IStreamWriter& writer) const
{ {
writer.writeUint32Big(0x00030005); writer.writeUint32Big(0x00030005);
writer.writeUint32Big(0); writer.writeUint32Big(0);
@ -98,15 +98,15 @@ size_t PAK::binarySize(size_t __isz) const
} }
std::unique_ptr<atUint8[]> std::unique_ptr<atUint8[]>
PAK::Entry::getBuffer(const NOD::Node& pak, atUint64& szOut) const PAK::Entry::getBuffer(const nod::Node& pak, atUint64& szOut) const
{ {
if (compressed) if (compressed)
{ {
std::unique_ptr<NOD::IPartReadStream> strm = pak.beginReadStream(offset); std::unique_ptr<nod::IPartReadStream> strm = pak.beginReadStream(offset);
atUint32 decompSz; atUint32 decompSz;
strm->read(&decompSz, 4); strm->read(&decompSz, 4);
decompSz = HECL::SBig(decompSz); decompSz = hecl::SBig(decompSz);
atUint8* buf = new atUint8[decompSz]; atUint8* buf = new atUint8[decompSz];
atUint8* bufCur = buf; atUint8* bufCur = buf;
@ -135,7 +135,7 @@ PAK::Entry::getBuffer(const NOD::Node& pak, atUint64& szOut) const
{ {
atUint16 chunkSz; atUint16 chunkSz;
strm->read(&chunkSz, 2); strm->read(&chunkSz, 2);
chunkSz = HECL::SBig(chunkSz); chunkSz = hecl::SBig(chunkSz);
strm->read(compBuf, chunkSz); strm->read(compBuf, chunkSz);
lzo_uint dsz = rem; lzo_uint dsz = rem;
lzo1x_decompress(compBuf, chunkSz, bufCur, &dsz, nullptr); lzo1x_decompress(compBuf, chunkSz, bufCur, &dsz, nullptr);

View File

@ -3,7 +3,7 @@
#include <unordered_map> #include <unordered_map>
#include <NOD/DiscBase.hpp> #include <nod/DiscBase.hpp>
#include "../DNACommon/PAK.hpp" #include "../DNACommon/PAK.hpp"
namespace DataSpec namespace DataSpec
@ -38,8 +38,8 @@ struct PAK : BigDNA
UniqueResult unique; UniqueResult unique;
std::string name; /* backreferencing name for RE purposes */ std::string name; /* backreferencing name for RE purposes */
std::unique_ptr<atUint8[]> getBuffer(const NOD::Node& pak, atUint64& szOut) const; std::unique_ptr<atUint8[]> getBuffer(const nod::Node& pak, atUint64& szOut) const;
inline PAKEntryReadStream beginReadStream(const NOD::Node& pak, atUint64 off=0) const inline PAKEntryReadStream beginReadStream(const nod::Node& pak, atUint64 off=0) const
{ {
atUint64 sz; atUint64 sz;
std::unique_ptr<atUint8[]> buf = getBuffer(pak, sz); std::unique_ptr<atUint8[]> buf = getBuffer(pak, sz);

View File

@ -1,7 +1,7 @@
#ifndef _DNAMP1_SCAN_HPP_ #ifndef _DNAMP1_SCAN_HPP_
#define _DNAMP1_SCAN_HPP_ #define _DNAMP1_SCAN_HPP_
#include <Athena/FileWriter.hpp> #include <athena/FileWriter.hpp>
#include "../DNACommon/DNACommon.hpp" #include "../DNACommon/DNACommon.hpp"
#include "DNAMP1.hpp" #include "DNAMP1.hpp"
@ -59,7 +59,7 @@ struct SCAN : BigYAML
Value<float> interval; // 0.0 - 1.0 Value<float> interval; // 0.0 - 1.0
Value<float> fadeDuration; // 0.0 - 1.0 Value<float> fadeDuration; // 0.0 - 1.0
void read(Athena::io::IStreamReader& __dna_reader) void read(athena::io::IStreamReader& __dna_reader)
{ {
/* texture */ /* texture */
texture.read(__dna_reader); texture.read(__dna_reader);
@ -77,7 +77,7 @@ struct SCAN : BigYAML
fadeDuration = __dna_reader.readFloatBig(); fadeDuration = __dna_reader.readFloatBig();
} }
void write(Athena::io::IStreamWriter& __dna_writer) const void write(athena::io::IStreamWriter& __dna_writer) const
{ {
/* texture */ /* texture */
texture.write(__dna_writer); texture.write(__dna_writer);
@ -95,7 +95,7 @@ struct SCAN : BigYAML
__dna_writer.writeFloatBig(fadeDuration); __dna_writer.writeFloatBig(fadeDuration);
} }
void read(Athena::io::YAMLDocReader& __dna_docin) void read(athena::io::YAMLDocReader& __dna_docin)
{ {
/* texture */ /* texture */
__dna_docin.enumerate("texture", texture); __dna_docin.enumerate("texture", texture);
@ -120,7 +120,7 @@ struct SCAN : BigYAML
fadeDuration = __dna_docin.readFloat("fadeDuration"); fadeDuration = __dna_docin.readFloat("fadeDuration");
} }
void write(Athena::io::YAMLDocWriter& __dna_docout) const void write(athena::io::YAMLDocWriter& __dna_docout) const
{ {
/* texture */ /* texture */
__dna_docout.enumerate("texture", texture); __dna_docout.enumerate("texture", texture);
@ -141,7 +141,7 @@ struct SCAN : BigYAML
__dna_docout.writeFloat("fadeDuration", fadeDuration); __dna_docout.writeFloat("fadeDuration", fadeDuration);
} }
const char* DNAType() { return "Retro::DNAMP1::SCAN::Texture"; } const char* DNAType() { return "urde::DNAMP1::SCAN::Texture"; }
size_t binarySize(size_t __isz) const size_t binarySize(size_t __isz) const
{ {
__isz = texture.binarySize(__isz); __isz = texture.binarySize(__isz);
@ -152,23 +152,23 @@ struct SCAN : BigYAML
Texture textures[4]; Texture textures[4];
static bool Extract(PAKEntryReadStream& rs, const HECL::ProjectPath& outPath) static bool Extract(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath)
{ {
SCAN scan; SCAN scan;
scan.read(rs); scan.read(rs);
FILE* fp = HECL::Fopen(outPath.getAbsolutePath().c_str(), _S("wb")); FILE* fp = hecl::Fopen(outPath.getAbsolutePath().c_str(), _S("wb"));
scan.toYAMLFile(fp); scan.toYAMLFile(fp);
fclose(fp); fclose(fp);
return true; return true;
} }
static bool Cook(const HECL::ProjectPath& inPath, const HECL::ProjectPath& outPath) static bool Cook(const hecl::ProjectPath& inPath, const hecl::ProjectPath& outPath)
{ {
SCAN scan; SCAN scan;
FILE* fp = HECL::Fopen(inPath.getAbsolutePath().c_str(), _S("rb")); FILE* fp = hecl::Fopen(inPath.getAbsolutePath().c_str(), _S("rb"));
scan.fromYAMLFile(fp); scan.fromYAMLFile(fp);
fclose(fp); fclose(fp);
Athena::io::FileWriter ws(outPath.getAbsolutePath()); athena::io::FileWriter ws(outPath.getAbsolutePath());
scan.write(ws); scan.write(ws);
return true; return true;
} }
@ -183,7 +183,7 @@ struct SCAN : BigYAML
if (scan.string) if (scan.string)
{ {
PAK::Entry* ent = (PAK::Entry*)pakRouter.lookupEntry(scan.string); PAK::Entry* ent = (PAK::Entry*)pakRouter.lookupEntry(scan.string);
ent->name = HECL::Format("SCAN_%s_strg", entry.id.toString().c_str()); ent->name = hecl::Format("SCAN_%s_strg", entry.id.toString().c_str());
} }
for (int i=0 ; i<4 ; ++i) for (int i=0 ; i<4 ; ++i)
{ {
@ -191,7 +191,7 @@ struct SCAN : BigYAML
if (tex.texture) if (tex.texture)
{ {
PAK::Entry* ent = (PAK::Entry*)pakRouter.lookupEntry(tex.texture); PAK::Entry* ent = (PAK::Entry*)pakRouter.lookupEntry(tex.texture);
ent->name = HECL::Format("SCAN_%s_tex%d", entry.id.toString().c_str(), i+1); ent->name = hecl::Format("SCAN_%s_tex%d", entry.id.toString().c_str(), i+1);
} }
} }
} }

View File

@ -6,21 +6,21 @@ namespace DataSpec
namespace DNAMP1 namespace DNAMP1
{ {
void SCLY::read(Athena::io::IStreamReader& rs) void SCLY::read(athena::io::IStreamReader& rs)
{ {
fourCC = rs.readUint32Little(); fourCC = rs.readUint32Little();
version = rs.readUint32Big(); version = rs.readUint32Big();
layerCount = rs.readUint32Big(); layerCount = rs.readUint32Big();
rs.enumerateBig(layerSizes, layerCount); rs.enumerateBig(layerSizes, layerCount);
atUint32 i = 0; atUint32 i = 0;
rs.enumerate<ScriptLayer>(layers, layerCount, [&i,this](Athena::io::IStreamReader& rs, ScriptLayer& layer) { rs.enumerate<ScriptLayer>(layers, layerCount, [&i,this](athena::io::IStreamReader& rs, ScriptLayer& layer) {
atUint64 start = rs.position(); atUint64 start = rs.position();
layer.read(rs); layer.read(rs);
rs.seek(start + layerSizes[i++], Athena::Begin); rs.seek(start + layerSizes[i++], athena::Begin);
}); });
} }
void SCLY::write(Athena::io::IStreamWriter& ws) const void SCLY::write(athena::io::IStreamWriter& ws) const
{ {
ws.writeUint32Big(fourCC); ws.writeUint32Big(fourCC);
ws.writeUint32Big(version); ws.writeUint32Big(version);
@ -40,14 +40,14 @@ void SCLY::exportToLayerDirectories(const PAK::Entry& entry, PAKRouter<PAKBridge
{ {
for (atUint32 i = 0; i < layerCount; i++) for (atUint32 i = 0; i < layerCount; i++)
{ {
HECL::ProjectPath layerPath = pakRouter.getAreaLayerWorking(entry.id, i); hecl::ProjectPath layerPath = pakRouter.getAreaLayerWorking(entry.id, i);
if (layerPath.getPathType() == HECL::ProjectPath::Type::None) if (layerPath.getPathType() == hecl::ProjectPath::Type::None)
layerPath.makeDir(); layerPath.makeDir();
HECL::ProjectPath yamlFile = HECL::ProjectPath(layerPath, _S("objects.yaml")); hecl::ProjectPath yamlFile = hecl::ProjectPath(layerPath, _S("objects.yaml"));
if (force || yamlFile.getPathType() == HECL::ProjectPath::Type::None) if (force || yamlFile.getPathType() == hecl::ProjectPath::Type::None)
{ {
FILE* yaml = HECL::Fopen(yamlFile.getAbsolutePath().c_str(), _S("wb")); FILE* yaml = hecl::Fopen(yamlFile.getAbsolutePath().c_str(), _S("wb"));
layers[i].toYAMLFile(yaml); layers[i].toYAMLFile(yaml);
fclose(yaml); fclose(yaml);
} }
@ -80,33 +80,32 @@ void SCLY::ScriptLayer::nameIDs(PAKRouter<PAKBridge>& pakRouter) const
obj->nameIDs(pakRouter); obj->nameIDs(pakRouter);
} }
void SCLY::read(Athena::io::YAMLDocReader& docin) void SCLY::read(athena::io::YAMLDocReader& docin)
{ {
fourCC = docin.readUint32("fourCC"); fourCC = docin.readUint32("fourCC");
version = docin.readUint32("version"); version = docin.readUint32("version");
layerCount = docin.readUint32("layerCount"); layerCount = docin.enumerate("layerSizes", layerSizes);
docin.enumerate("layerSizes", layerSizes, layerCount); docin.enumerate("layers", layers);
docin.enumerate("layers", layers, layerCount);
} }
void SCLY::write(Athena::io::YAMLDocWriter& docout) const void SCLY::write(athena::io::YAMLDocWriter& docout) const
{ {
docout.writeUint32("fourCC", fourCC); docout.writeUint32("fourCC", fourCC);
docout.writeUint32("version", version); docout.writeUint32("version", version);
docout.writeUint32("layerCount", layerCount);
docout.enumerate("layerSizes", layerSizes); docout.enumerate("layerSizes", layerSizes);
docout.enumerate("layers", layers); docout.enumerate("layers", layers);
} }
const char* SCLY::DNAType() const char* SCLY::DNAType()
{ {
return "Retro::DNAMP1::SCLY"; return "urde::DNAMP1::SCLY";
} }
void SCLY::ScriptLayer::read(Athena::io::IStreamReader& rs) void SCLY::ScriptLayer::read(athena::io::IStreamReader& rs)
{ {
unknown = rs.readUByte(); unknown = rs.readUByte();
objectCount = rs.readUint32Big(); objectCount = rs.readUint32Big();
objects.clear();
objects.reserve(objectCount); objects.reserve(objectCount);
for (atUint32 i = 0; i < objectCount; i++) for (atUint32 i = 0; i < objectCount; i++)
{ {
@ -125,20 +124,22 @@ void SCLY::ScriptLayer::read(Athena::io::IStreamReader& rs)
objects.push_back(std::move(obj)); objects.push_back(std::move(obj));
size_t actualLen = rs.position() - start; size_t actualLen = rs.position() - start;
if (actualLen != len) if (actualLen != len)
Log.report(LogVisor::FatalError, _S("Error while reading object of type 0x%.2X, did not read the expected amount of data, read 0x%x, expected 0x%x"), (atUint32)type, actualLen, len); Log.report(logvisor::Fatal, _S("Error while reading object of type 0x%.2X, did not read the expected amount of data, read 0x%x, expected 0x%x"), (atUint32)type, actualLen, len);
rs.seek(start + len, Athena::Begin); rs.seek(start + len, athena::Begin);
} }
else else
Log.report(LogVisor::FatalError, _S("Unable to find type 0x%X in object database"), (atUint32)type); Log.report(logvisor::Fatal, _S("Unable to find type 0x%X in object database"), (atUint32)type);
} }
} }
void SCLY::ScriptLayer::read(Athena::io::YAMLDocReader& rs) void SCLY::ScriptLayer::read(athena::io::YAMLDocReader& rs)
{ {
unknown = rs.readUByte("unknown"); unknown = rs.readUByte("unknown");
objectCount = rs.readUint32("objectCount"); size_t objCount;
objects.reserve(objectCount); rs.enterSubVector("objects", objCount);
rs.enterSubVector("objects"); objectCount = objCount;
objects.clear();
objects.reserve(objCount);
for (atUint32 i = 0; i < objectCount; i++) for (atUint32 i = 0; i < objectCount; i++)
{ {
rs.enterSubRecord(nullptr); rs.enterSubRecord(nullptr);
@ -154,14 +155,14 @@ void SCLY::ScriptLayer::read(Athena::io::YAMLDocReader& rs)
objects.push_back(std::move(obj)); objects.push_back(std::move(obj));
} }
else else
Log.report(LogVisor::FatalError, _S("Unable to find type 0x%X in object database"), (atUint32)type); Log.report(logvisor::Fatal, _S("Unable to find type 0x%X in object database"), (atUint32)type);
rs.leaveSubRecord(); rs.leaveSubRecord();
} }
rs.leaveSubVector(); rs.leaveSubVector();
} }
void SCLY::ScriptLayer::write(Athena::io::IStreamWriter& ws) const void SCLY::ScriptLayer::write(athena::io::IStreamWriter& ws) const
{ {
ws.writeUByte(unknown); ws.writeUByte(unknown);
ws.writeUint32Big(objectCount); ws.writeUint32Big(objectCount);
@ -183,10 +184,9 @@ size_t SCLY::ScriptLayer::binarySize(size_t __isz) const
return __isz; return __isz;
} }
void SCLY::ScriptLayer::write(Athena::io::YAMLDocWriter& ws) const void SCLY::ScriptLayer::write(athena::io::YAMLDocWriter& ws) const
{ {
ws.writeUByte("unknown", unknown); ws.writeUByte("unknown", unknown);
ws.writeUint32("objectCount", objectCount);
ws.enterSubVector("objects"); ws.enterSubVector("objects");
for (const std::unique_ptr<IScriptObject>& obj : objects) for (const std::unique_ptr<IScriptObject>& obj : objects)
{ {
@ -200,7 +200,7 @@ void SCLY::ScriptLayer::write(Athena::io::YAMLDocWriter& ws) const
const char* SCLY::ScriptLayer::DNAType() const char* SCLY::ScriptLayer::DNAType()
{ {
return "Retro::DNAMP1::SCLY::ScriptLayer"; return "urde::DNAMP1::SCLY::ScriptLayer";
} }
} }

View File

@ -26,8 +26,8 @@ struct SCLY : BigYAML
Value<atUint8> unknown; Value<atUint8> unknown;
Value<atUint32> objectCount; Value<atUint32> objectCount;
Vector<std::unique_ptr<IScriptObject>, DNA_COUNT(objectCount)> objects; Vector<std::unique_ptr<IScriptObject>, DNA_COUNT(objectCount)> objects;
void read(Athena::io::IStreamReader &rs); void read(athena::io::IStreamReader &rs);
void write(Athena::io::IStreamWriter &ws) const; void write(athena::io::IStreamWriter &ws) const;
size_t binarySize(size_t __isz) const; size_t binarySize(size_t __isz) const;
void addCMDLRigPairs(PAKRouter<PAKBridge>& pakRouter, void addCMDLRigPairs(PAKRouter<PAKBridge>& pakRouter,
std::unordered_map<UniqueID32, std::pair<UniqueID32, UniqueID32>>& addTo) const; std::unordered_map<UniqueID32, std::pair<UniqueID32, UniqueID32>>& addTo) const;
@ -35,8 +35,8 @@ struct SCLY : BigYAML
}; };
Vector<ScriptLayer, DNA_COUNT(layerCount)> layers; Vector<ScriptLayer, DNA_COUNT(layerCount)> layers;
void read(Athena::io::IStreamReader &rs); void read(athena::io::IStreamReader &rs);
void write(Athena::io::IStreamWriter &ws) const; void write(athena::io::IStreamWriter &ws) const;
size_t binarySize(size_t __isz) const; size_t binarySize(size_t __isz) const;
void exportToLayerDirectories(const PAK::Entry &, PAKRouter<PAKBridge>&, bool) const; void exportToLayerDirectories(const PAK::Entry &, PAKRouter<PAKBridge>&, bool) const;

View File

@ -6,7 +6,7 @@ namespace DataSpec
namespace DNAMP1 namespace DNAMP1
{ {
void STRG::_read(Athena::io::IStreamReader& reader) void STRG::_read(athena::io::IStreamReader& reader)
{ {
atUint32 langCount = reader.readUint32Big(); atUint32 langCount = reader.readUint32Big();
atUint32 strCount = reader.readUint32Big(); atUint32 strCount = reader.readUint32Big();
@ -38,20 +38,20 @@ void STRG::_read(Athena::io::IStreamReader& reader)
langMap.emplace(item.first, &item.second); langMap.emplace(item.first, &item.second);
} }
void STRG::read(Athena::io::IStreamReader& reader) void STRG::read(athena::io::IStreamReader& reader)
{ {
atUint32 magic = reader.readUint32Big(); atUint32 magic = reader.readUint32Big();
if (magic != 0x87654321) if (magic != 0x87654321)
Log.report(LogVisor::Error, "invalid STRG magic"); Log.report(logvisor::Error, "invalid STRG magic");
atUint32 version = reader.readUint32Big(); atUint32 version = reader.readUint32Big();
if (version != 0) if (version != 0)
Log.report(LogVisor::Error, "invalid STRG version"); Log.report(logvisor::Error, "invalid STRG version");
_read(reader); _read(reader);
} }
void STRG::write(Athena::io::IStreamWriter& writer) const void STRG::write(athena::io::IStreamWriter& writer) const
{ {
writer.writeUint32Big(0x87654321); writer.writeUint32Big(0x87654321);
writer.writeUint32Big(0); writer.writeUint32Big(0);
@ -131,9 +131,9 @@ size_t STRG::binarySize(size_t __isz) const
return __isz; return __isz;
} }
void STRG::read(Athena::io::YAMLDocReader& reader) void STRG::read(athena::io::YAMLDocReader& reader)
{ {
const Athena::io::YAMLNode* root = reader.getRootNode(); const athena::io::YAMLNode* root = reader.getRootNode();
/* Validate Pass */ /* Validate Pass */
if (root->m_type == YAML_MAPPING_NODE) if (root->m_type == YAML_MAPPING_NODE)
@ -142,19 +142,19 @@ void STRG::read(Athena::io::YAMLDocReader& reader)
{ {
if (lang.first.size() != 4) if (lang.first.size() != 4)
{ {
Log.report(LogVisor::Warning, "STRG language string '%s' must be exactly 4 characters; skipping", lang.first.c_str()); Log.report(logvisor::Warning, "STRG language string '%s' must be exactly 4 characters; skipping", lang.first.c_str());
return; return;
} }
if (lang.second->m_type != YAML_SEQUENCE_NODE) if (lang.second->m_type != YAML_SEQUENCE_NODE)
{ {
Log.report(LogVisor::Warning, "STRG language string '%s' must contain a sequence; skipping", lang.first.c_str()); Log.report(logvisor::Warning, "STRG language string '%s' must contain a sequence; skipping", lang.first.c_str());
return; return;
} }
for (const auto& str : lang.second->m_seqChildren) for (const auto& str : lang.second->m_seqChildren)
{ {
if (str->m_type != YAML_SCALAR_NODE) if (str->m_type != YAML_SCALAR_NODE)
{ {
Log.report(LogVisor::Warning, "STRG language '%s' must contain all scalars; skipping", lang.first.c_str()); Log.report(logvisor::Warning, "STRG language '%s' must contain all scalars; skipping", lang.first.c_str());
return; return;
} }
} }
@ -162,7 +162,7 @@ void STRG::read(Athena::io::YAMLDocReader& reader)
} }
else else
{ {
Log.report(LogVisor::Warning, "STRG must have a mapping root node; skipping"); Log.report(logvisor::Warning, "STRG must have a mapping root node; skipping");
return; return;
} }
@ -172,7 +172,7 @@ void STRG::read(Athena::io::YAMLDocReader& reader)
{ {
std::vector<std::wstring> strs; std::vector<std::wstring> strs;
for (const auto& str : lang.second->m_seqChildren) for (const auto& str : lang.second->m_seqChildren)
strs.emplace_back(HECL::UTF8ToWide(str->m_scalarString)); strs.emplace_back(hecl::UTF8ToWide(str->m_scalarString));
langs.emplace_back(FourCC(lang.first.c_str()), strs); langs.emplace_back(FourCC(lang.first.c_str()), strs);
} }
@ -182,7 +182,7 @@ void STRG::read(Athena::io::YAMLDocReader& reader)
langMap.emplace(item.first, &item.second); langMap.emplace(item.first, &item.second);
} }
void STRG::write(Athena::io::YAMLDocWriter& writer) const void STRG::write(athena::io::YAMLDocWriter& writer) const
{ {
for (const auto& lang : langs) for (const auto& lang : langs)
{ {
@ -195,7 +195,7 @@ void STRG::write(Athena::io::YAMLDocWriter& writer) const
const char* STRG::DNAType() const char* STRG::DNAType()
{ {
return "Retro::DNAMP1::STRG"; return "urde::DNAMP1::STRG";
} }
} }

View File

@ -15,7 +15,7 @@ struct STRG : ISTRG
{ {
DECL_YAML DECL_YAML
Delete expl; Delete expl;
void _read(Athena::io::IStreamReader& reader); void _read(athena::io::IStreamReader& reader);
std::vector<std::pair<FourCC, std::vector<std::wstring>>> langs; std::vector<std::pair<FourCC, std::vector<std::wstring>>> langs;
std::unordered_map<FourCC, std::vector<std::wstring>*> langMap; std::unordered_map<FourCC, std::vector<std::wstring>*> langMap;
@ -36,7 +36,7 @@ struct STRG : ISTRG
{ {
auto search = langMap.find(lang); auto search = langMap.find(lang);
if (search != langMap.end()) if (search != langMap.end())
return HECL::WideToUTF8(search->second->at(idx)); return hecl::WideToUTF8(search->second->at(idx));
return std::string(); return std::string();
} }
inline std::wstring getUTF16(const FourCC& lang, size_t idx) const inline std::wstring getUTF16(const FourCC& lang, size_t idx) const
@ -46,35 +46,35 @@ struct STRG : ISTRG
return search->second->at(idx); return search->second->at(idx);
return std::wstring(); return std::wstring();
} }
inline HECL::SystemString getSystemString(const FourCC& lang, size_t idx) const inline hecl::SystemString getSystemString(const FourCC& lang, size_t idx) const
{ {
auto search = langMap.find(lang); auto search = langMap.find(lang);
if (search != langMap.end()) if (search != langMap.end())
#if HECL_UCS2 #if HECL_UCS2
return search->second->at(idx); return search->second->at(idx);
#else #else
return HECL::WideToUTF8(search->second->at(idx)); return hecl::WideToUTF8(search->second->at(idx));
#endif #endif
return HECL::SystemString(); return hecl::SystemString();
} }
static bool Extract(PAKEntryReadStream& rs, const HECL::ProjectPath& outPath) static bool Extract(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath)
{ {
STRG strg; STRG strg;
strg.read(rs); strg.read(rs);
FILE* fp = HECL::Fopen(outPath.getAbsolutePath().c_str(), _S("wb")); FILE* fp = hecl::Fopen(outPath.getAbsolutePath().c_str(), _S("wb"));
strg.toYAMLFile(fp); strg.toYAMLFile(fp);
fclose(fp); fclose(fp);
return true; return true;
} }
static bool Cook(const HECL::ProjectPath& inPath, const HECL::ProjectPath& outPath) static bool Cook(const hecl::ProjectPath& inPath, const hecl::ProjectPath& outPath)
{ {
STRG strg; STRG strg;
FILE* fp = HECL::Fopen(inPath.getAbsolutePath().c_str(), _S("rb")); FILE* fp = hecl::Fopen(inPath.getAbsolutePath().c_str(), _S("rb"));
strg.fromYAMLFile(fp); strg.fromYAMLFile(fp);
fclose(fp); fclose(fp);
Athena::io::FileWriter ws(outPath.getAbsolutePath()); athena::io::FileWriter ws(outPath.getAbsolutePath());
strg.write(ws); strg.write(ws);
return true; return true;
} }

View File

@ -31,7 +31,7 @@ struct Oculus : IScriptObject
/* Trilogy addition */ /* Trilogy addition */
Value<float> unknown8; Value<float> unknown8;
void read(Athena::io::IStreamReader& __dna_reader) void read(athena::io::IStreamReader& __dna_reader)
{ {
IScriptObject::read(__dna_reader); IScriptObject::read(__dna_reader);
/* name */ /* name */
@ -71,7 +71,7 @@ struct Oculus : IScriptObject
unknown8 = 0.0; unknown8 = 0.0;
} }
void write(Athena::io::IStreamWriter& __dna_writer) const void write(athena::io::IStreamWriter& __dna_writer) const
{ {
IScriptObject::write(__dna_writer); IScriptObject::write(__dna_writer);
/* name */ /* name */
@ -109,7 +109,7 @@ struct Oculus : IScriptObject
__dna_writer.writeFloatBig(unknown8); __dna_writer.writeFloatBig(unknown8);
} }
void read(Athena::io::YAMLDocReader& __dna_docin) void read(athena::io::YAMLDocReader& __dna_docin)
{ {
IScriptObject::read(__dna_docin); IScriptObject::read(__dna_docin);
/* name */ /* name */
@ -149,7 +149,7 @@ struct Oculus : IScriptObject
unknown8 = 0.0; unknown8 = 0.0;
} }
void write(Athena::io::YAMLDocWriter& __dna_docout) const void write(athena::io::YAMLDocWriter& __dna_docout) const
{ {
IScriptObject::write(__dna_docout); IScriptObject::write(__dna_docout);
/* name */ /* name */
@ -189,7 +189,7 @@ struct Oculus : IScriptObject
static const char* DNAType() static const char* DNAType()
{ {
return "Retro::DNAMP1::Oculus"; return "urde::DNAMP1::Oculus";
} }
void addCMDLRigPairs(PAKRouter<PAKBridge>& pakRouter, void addCMDLRigPairs(PAKRouter<PAKBridge>& pakRouter,

View File

@ -10,7 +10,7 @@ UniqueID32 AnimationParameters::getCINF(PAKRouter<PAKBridge>& pakRouter) const
{ {
if (!animationCharacterSet) if (!animationCharacterSet)
return UniqueID32(); return UniqueID32();
const NOD::Node* node; const nod::Node* node;
const PAK::Entry* ancsEnt = pakRouter.lookupEntry(animationCharacterSet, &node); const PAK::Entry* ancsEnt = pakRouter.lookupEntry(animationCharacterSet, &node);
ANCS ancs; ANCS ancs;
{ {

View File

@ -124,7 +124,7 @@ struct Ridley : IScriptObject
/* Trilogy addition */ /* Trilogy addition */
DamageInfo damageInfo9; DamageInfo damageInfo9;
void read(Athena::io::IStreamReader& __dna_reader) void read(athena::io::IStreamReader& __dna_reader)
{ {
IScriptObject::read(__dna_reader); IScriptObject::read(__dna_reader);
/* name */ /* name */
@ -234,7 +234,7 @@ struct Ridley : IScriptObject
damageInfo9.read(__dna_reader); damageInfo9.read(__dna_reader);
} }
void write(Athena::io::IStreamWriter& __dna_writer) const void write(athena::io::IStreamWriter& __dna_writer) const
{ {
IScriptObject::write(__dna_writer); IScriptObject::write(__dna_writer);
/* name */ /* name */
@ -344,7 +344,7 @@ struct Ridley : IScriptObject
damageInfo9.write(__dna_writer); damageInfo9.write(__dna_writer);
} }
void read(Athena::io::YAMLDocReader& __dna_docin) void read(athena::io::YAMLDocReader& __dna_docin)
{ {
IScriptObject::read(__dna_docin); IScriptObject::read(__dna_docin);
/* name */ /* name */
@ -454,7 +454,7 @@ struct Ridley : IScriptObject
__dna_docin.enumerate("damageInfo9", damageInfo9); __dna_docin.enumerate("damageInfo9", damageInfo9);
} }
void write(Athena::io::YAMLDocWriter& __dna_docout) const void write(athena::io::YAMLDocWriter& __dna_docout) const
{ {
IScriptObject::write(__dna_docout); IScriptObject::write(__dna_docout);
/* name */ /* name */
@ -566,7 +566,7 @@ struct Ridley : IScriptObject
static const char* DNAType() static const char* DNAType()
{ {
return "Retro::DNAMP1::Ridley"; return "urde::DNAMP1::Ridley";
} }
void addCMDLRigPairs(PAKRouter<PAKBridge>& pakRouter, void addCMDLRigPairs(PAKRouter<PAKBridge>& pakRouter,

View File

@ -41,7 +41,7 @@ struct WorldTeleporter : IScriptObject
Value<float> unknown15; Value<float> unknown15;
Value<float> unknown16; Value<float> unknown16;
void read(Athena::io::IStreamReader& __dna_reader) void read(athena::io::IStreamReader& __dna_reader)
{ {
IScriptObject::read(__dna_reader); IScriptObject::read(__dna_reader);
/* name */ /* name */
@ -104,7 +104,7 @@ struct WorldTeleporter : IScriptObject
} }
} }
void write(Athena::io::IStreamWriter& __dna_writer) const void write(athena::io::IStreamWriter& __dna_writer) const
{ {
IScriptObject::write(__dna_writer); IScriptObject::write(__dna_writer);
/* name */ /* name */
@ -160,7 +160,7 @@ struct WorldTeleporter : IScriptObject
} }
} }
void read(Athena::io::YAMLDocReader& __dna_docin) void read(athena::io::YAMLDocReader& __dna_docin)
{ {
IScriptObject::read(__dna_docin); IScriptObject::read(__dna_docin);
/* name */ /* name */
@ -223,7 +223,7 @@ struct WorldTeleporter : IScriptObject
} }
} }
void write(Athena::io::YAMLDocWriter& __dna_docout) const void write(athena::io::YAMLDocWriter& __dna_docout) const
{ {
IScriptObject::write(__dna_docout); IScriptObject::write(__dna_docout);
/* name */ /* name */
@ -281,7 +281,7 @@ struct WorldTeleporter : IScriptObject
static const char* DNAType() static const char* DNAType()
{ {
return "Retro::DNAMP1::WorldTeleporter"; return "urde::DNAMP1::WorldTeleporter";
} }
void nameIDs(PAKRouter<PAKBridge>& pakRouter) const void nameIDs(PAKRouter<PAKBridge>& pakRouter) const

View File

@ -15,7 +15,7 @@ struct CTweakGame : ITweakGame
String<-1> m_ruinsArea; // ???? String<-1> m_ruinsArea; // ????
virtual const std::string& GetWorldPrefix() const { return m_worldPrefix; } virtual const std::string& GetWorldPrefix() const { return m_worldPrefix; }
CTweakGame(Athena::io::IStreamReader& in) { this->read(in); } CTweakGame(athena::io::IStreamReader& in) { this->read(in); }
}; };
} }
} }

View File

@ -15,7 +15,7 @@ struct CTweakParticle : ITweakParticle
String<-1> m_powerBeam; String<-1> m_powerBeam;
String<-1> m_genThrust; String<-1> m_genThrust;
CTweakParticle(Athena::io::IStreamReader& reader) { this->read(reader); } CTweakParticle(athena::io::IStreamReader& reader) { this->read(reader); }
}; };
} }

View File

@ -15,7 +15,7 @@ struct CTweakPlayer : ITweakPlayer
Value<float> m_rightDiv; Value<float> m_rightDiv;
float GetLeftLogicalThreshold() const {return m_leftDiv;} float GetLeftLogicalThreshold() const {return m_leftDiv;}
float GetRightLogicalThreshold() const {return m_rightDiv;} float GetRightLogicalThreshold() const {return m_rightDiv;}
CTweakPlayer(Athena::io::IStreamReader& reader) {this->read(reader);} CTweakPlayer(athena::io::IStreamReader& reader) {this->read(reader);}
}; };
} }

View File

@ -13,7 +13,7 @@ struct CTweakPlayerControl : ITweakPlayerControl
DECL_YAML DECL_YAML
Vector<atUint32, DNA_COUNT(65)> m_mappings; Vector<atUint32, DNA_COUNT(65)> m_mappings;
atUint32 GetMapping(atUint32 command) const {return m_mappings[command];} atUint32 GetMapping(atUint32 command) const {return m_mappings[command];}
CTweakPlayerControl(Athena::io::IStreamReader& reader) {this->read(reader);} CTweakPlayerControl(athena::io::IStreamReader& reader) {this->read(reader);}
}; };
} }

View File

@ -5,7 +5,7 @@ namespace DataSpec
namespace DNAMP2 namespace DNAMP2
{ {
void ANCS::CharacterSet::CharacterInfo::read(Athena::io::IStreamReader& reader) void ANCS::CharacterSet::CharacterInfo::read(athena::io::IStreamReader& reader)
{ {
idx = reader.readUint32Big(); idx = reader.readUint32Big();
atUint16 sectionCount = reader.readUint16Big(); atUint16 sectionCount = reader.readUint16Big();
@ -78,7 +78,7 @@ void ANCS::CharacterSet::CharacterInfo::read(Athena::io::IStreamReader& reader)
} }
} }
void ANCS::CharacterSet::CharacterInfo::write(Athena::io::IStreamWriter& writer) const void ANCS::CharacterSet::CharacterInfo::write(athena::io::IStreamWriter& writer) const
{ {
writer.writeUint32Big(idx); writer.writeUint32Big(idx);
@ -238,7 +238,7 @@ size_t ANCS::CharacterSet::CharacterInfo::binarySize(size_t __isz) const
return __isz; return __isz;
} }
void ANCS::CharacterSet::CharacterInfo::read(Athena::io::YAMLDocReader& reader) void ANCS::CharacterSet::CharacterInfo::read(athena::io::YAMLDocReader& reader)
{ {
idx = reader.readUint32("idx"); idx = reader.readUint32("idx");
atUint16 sectionCount = reader.readUint16("sectionCount"); atUint16 sectionCount = reader.readUint16("sectionCount");
@ -247,43 +247,34 @@ void ANCS::CharacterSet::CharacterInfo::read(Athena::io::YAMLDocReader& reader)
reader.enumerate("cskr", cskr); reader.enumerate("cskr", cskr);
reader.enumerate("cinf", cinf); reader.enumerate("cinf", cinf);
atUint32 animationCount = reader.readUint32("animationCount"); reader.enumerate("animations", animations);
reader.enumerate("animations", animations, animationCount);
reader.enumerate("pasDatabase", pasDatabase); reader.enumerate("pasDatabase", pasDatabase);
atUint32 partCount = reader.readUint32("partCount"); reader.enumerate("part", partResData.part);
reader.enumerate("part", partResData.part, partCount);
atUint32 swhcCount = reader.readUint32("swhcCount"); reader.enumerate("swhc", partResData.swhc);
reader.enumerate("swhc", partResData.swhc, swhcCount);
atUint32 unkCount = reader.readUint32("unkCount"); reader.enumerate("unk", partResData.unk);
reader.enumerate("unk", partResData.unk, unkCount);
atUint32 elscCount = reader.readUint32("elscCount"); reader.enumerate("elsc", partResData.elsc);
reader.enumerate("elsc", partResData.elsc, elscCount);
atUint32 spscCount = reader.readUint32("spscCount"); reader.enumerate("spsc", partResData.spsc);
reader.enumerate("spsc", partResData.spsc, spscCount);
atUint32 unk2Count = reader.readUint32("unk2Count"); reader.enumerate("unk2", partResData.unk2);
reader.enumerate("unk2", partResData.unk2, unk2Count);
unk1 = reader.readUint32("unk1"); unk1 = reader.readUint32("unk1");
animAABBs.clear(); animAABBs.clear();
if (sectionCount > 1) if (sectionCount > 1)
{ {
atUint32 aabbCount = reader.readUint32("animAABBCount"); reader.enumerate("part", animAABBs);
reader.enumerate("part", animAABBs, aabbCount);
} }
effects.clear(); effects.clear();
if (sectionCount > 2) if (sectionCount > 2)
{ {
atUint32 effectCount = reader.readUint32("effectCount"); reader.enumerate("effects", effects);
reader.enumerate("effects", effects, effectCount);
} }
if (sectionCount > 3) if (sectionCount > 3)
@ -295,8 +286,7 @@ void ANCS::CharacterSet::CharacterInfo::read(Athena::io::YAMLDocReader& reader)
animIdxs.clear(); animIdxs.clear();
if (sectionCount > 4) if (sectionCount > 4)
{ {
atUint32 animIdxCount = reader.readUint32("animIdxCount"); reader.enumerate("animIdxs", animIdxs);
reader.enumerate("animIdxs", animIdxs, animIdxCount);
} }
extents.clear(); extents.clear();
@ -304,12 +294,11 @@ void ANCS::CharacterSet::CharacterInfo::read(Athena::io::YAMLDocReader& reader)
{ {
unk4 = reader.readUint32("unk4"); unk4 = reader.readUint32("unk4");
unk5 = reader.readUByte("unk5"); unk5 = reader.readUByte("unk5");
atUint32 extentsCount = reader.readUint32("extentsCount"); reader.enumerate("extents", extents);
reader.enumerate("extents", extents, extentsCount);
} }
} }
void ANCS::CharacterSet::CharacterInfo::write(Athena::io::YAMLDocWriter& writer) const void ANCS::CharacterSet::CharacterInfo::write(athena::io::YAMLDocWriter& writer) const
{ {
writer.writeUint32("idx", idx); writer.writeUint32("idx", idx);
@ -335,40 +324,31 @@ void ANCS::CharacterSet::CharacterInfo::write(Athena::io::YAMLDocWriter& writer)
writer.enumerate("cskr", cskr); writer.enumerate("cskr", cskr);
writer.enumerate("cinf", cinf); writer.enumerate("cinf", cinf);
writer.writeUint32("animationCount", animations.size());
writer.enumerate("animations", animations); writer.enumerate("animations", animations);
writer.enumerate("pasDatabase", pasDatabase); writer.enumerate("pasDatabase", pasDatabase);
writer.writeUint32("partCount", partResData.part.size());
writer.enumerate("part", partResData.part); writer.enumerate("part", partResData.part);
writer.writeUint32("swhcCount", partResData.swhc.size());
writer.enumerate("swhc", partResData.swhc); writer.enumerate("swhc", partResData.swhc);
writer.writeUint32("unkCount", partResData.unk.size());
writer.enumerate("unk", partResData.unk); writer.enumerate("unk", partResData.unk);
writer.writeUint32("elscCount", partResData.elsc.size());
writer.enumerate("elsc", partResData.elsc); writer.enumerate("elsc", partResData.elsc);
writer.writeUint32("spscCount", partResData.spsc.size());
writer.enumerate("spsc", partResData.spsc); writer.enumerate("spsc", partResData.spsc);
writer.writeUint32("unk2Count", partResData.unk2.size());
writer.enumerate("unk2", partResData.unk2); writer.enumerate("unk2", partResData.unk2);
writer.writeUint32("unk1", unk1); writer.writeUint32("unk1", unk1);
if (sectionCount > 1) if (sectionCount > 1)
{ {
writer.writeUint32("animAABBCount", animAABBs.size());
writer.enumerate("animAABBs", animAABBs); writer.enumerate("animAABBs", animAABBs);
} }
if (sectionCount > 2) if (sectionCount > 2)
{ {
writer.writeUint32("effectCount", effects.size());
writer.enumerate("effects", effects); writer.enumerate("effects", effects);
} }
@ -380,7 +360,6 @@ void ANCS::CharacterSet::CharacterInfo::write(Athena::io::YAMLDocWriter& writer)
if (sectionCount > 4) if (sectionCount > 4)
{ {
writer.writeUint32("animIdxCount", animIdxs.size());
writer.enumerate("animIdxs", animIdxs); writer.enumerate("animIdxs", animIdxs);
} }
@ -388,17 +367,16 @@ void ANCS::CharacterSet::CharacterInfo::write(Athena::io::YAMLDocWriter& writer)
{ {
writer.writeUint32("unk4", unk4); writer.writeUint32("unk4", unk4);
writer.writeUByte("unk5", unk5); writer.writeUByte("unk5", unk5);
writer.writeUint32("extentsCount", extents.size());
writer.enumerate("extents", extents); writer.enumerate("extents", extents);
} }
} }
const char* ANCS::CharacterSet::CharacterInfo::DNAType() const char* ANCS::CharacterSet::CharacterInfo::DNAType()
{ {
return "Retro::DNAMP2::ANCS::CharacterSet::CharacterInfo"; return "urde::DNAMP2::ANCS::CharacterSet::CharacterInfo";
} }
void ANCS::AnimationSet::read(Athena::io::IStreamReader& reader) void ANCS::AnimationSet::read(athena::io::IStreamReader& reader)
{ {
atUint16 sectionCount = reader.readUint16Big(); atUint16 sectionCount = reader.readUint16Big();
@ -433,7 +411,7 @@ void ANCS::AnimationSet::read(Athena::io::IStreamReader& reader)
} }
} }
void ANCS::AnimationSet::write(Athena::io::IStreamWriter& writer) const void ANCS::AnimationSet::write(athena::io::IStreamWriter& writer) const
{ {
atUint16 sectionCount; atUint16 sectionCount;
if (evnts.size()) if (evnts.size())
@ -516,22 +494,19 @@ size_t ANCS::AnimationSet::binarySize(size_t __isz) const
return __isz; return __isz;
} }
void ANCS::AnimationSet::read(Athena::io::YAMLDocReader& reader) void ANCS::AnimationSet::read(athena::io::YAMLDocReader& reader)
{ {
atUint16 sectionCount = reader.readUint16("sectionCount"); atUint16 sectionCount = reader.readUint16("sectionCount");
atUint32 animationCount = reader.readUint32("animationCount"); reader.enumerate("animations", animations);
reader.enumerate("animations", animations, animationCount);
atUint32 transitionCount = reader.readUint32("transitionCount"); reader.enumerate("transitions", transitions);
reader.enumerate("transitions", transitions, transitionCount);
reader.enumerate("defaultTransition", defaultTransition); reader.enumerate("defaultTransition", defaultTransition);
additiveAnims.clear(); additiveAnims.clear();
if (sectionCount > 1) if (sectionCount > 1)
{ {
atUint32 additiveAnimCount = reader.readUint32("additiveAnimCount"); reader.enumerate("additiveAnims", additiveAnims);
reader.enumerate("additiveAnims", additiveAnims, additiveAnimCount);
floatA = reader.readFloat("floatA"); floatA = reader.readFloat("floatA");
floatB = reader.readFloat("floatB"); floatB = reader.readFloat("floatB");
} }
@ -539,19 +514,17 @@ void ANCS::AnimationSet::read(Athena::io::YAMLDocReader& reader)
halfTransitions.clear(); halfTransitions.clear();
if (sectionCount > 2) if (sectionCount > 2)
{ {
atUint32 halfTransitionCount = reader.readUint32("halfTransitionCount"); reader.enumerate("halfTransitions", halfTransitions);
reader.enumerate("halfTransitions", halfTransitions, halfTransitionCount);
} }
evnts.clear(); evnts.clear();
if (sectionCount > 3) if (sectionCount > 3)
{ {
atUint32 evntsCount = reader.readUint32("evntsCount"); reader.enumerate("evnts", evnts);
reader.enumerate("evnts", evnts, evntsCount);
} }
} }
void ANCS::AnimationSet::write(Athena::io::YAMLDocWriter& writer) const void ANCS::AnimationSet::write(athena::io::YAMLDocWriter& writer) const
{ {
atUint16 sectionCount; atUint16 sectionCount;
if (evnts.size()) if (evnts.size())
@ -565,16 +538,13 @@ void ANCS::AnimationSet::write(Athena::io::YAMLDocWriter& writer) const
writer.writeUint16("sectionCount", sectionCount); writer.writeUint16("sectionCount", sectionCount);
writer.writeUint32("animationCount", animations.size());
writer.enumerate("animations", animations); writer.enumerate("animations", animations);
writer.writeUint32("transitionCount", transitions.size());
writer.enumerate("transitions", transitions); writer.enumerate("transitions", transitions);
writer.enumerate("defaultTransition", defaultTransition); writer.enumerate("defaultTransition", defaultTransition);
if (sectionCount > 1) if (sectionCount > 1)
{ {
writer.writeUint32("additiveAnimCount", additiveAnims.size());
writer.enumerate("additiveAnims", additiveAnims); writer.enumerate("additiveAnims", additiveAnims);
writer.writeFloat("floatA", floatA); writer.writeFloat("floatA", floatA);
writer.writeFloat("floatB", floatB); writer.writeFloat("floatB", floatB);
@ -582,23 +552,21 @@ void ANCS::AnimationSet::write(Athena::io::YAMLDocWriter& writer) const
if (sectionCount > 2) if (sectionCount > 2)
{ {
writer.writeUint32("halfTransitionCount", halfTransitions.size());
writer.enumerate("halfTransitions", halfTransitions); writer.enumerate("halfTransitions", halfTransitions);
} }
if (sectionCount > 3) if (sectionCount > 3)
{ {
writer.writeUint32("evntsCount", evnts.size());
writer.enumerate("evnts", evnts); writer.enumerate("evnts", evnts);
} }
} }
const char* ANCS::AnimationSet::DNAType() const char* ANCS::AnimationSet::DNAType()
{ {
return "Retro::DNAMP2::ANCS::AnimationSet"; return "urde::DNAMP2::ANCS::AnimationSet";
} }
void ANCS::AnimationSet::EVNT::read(Athena::io::IStreamReader& reader) void ANCS::AnimationSet::EVNT::read(athena::io::IStreamReader& reader)
{ {
version = reader.readUint32Big(); version = reader.readUint32Big();
@ -619,7 +587,7 @@ void ANCS::AnimationSet::EVNT::read(Athena::io::IStreamReader& reader)
reader.enumerate(sfxEvents, sfxCount); reader.enumerate(sfxEvents, sfxCount);
} }
void ANCS::AnimationSet::EVNT::write(Athena::io::IStreamWriter& writer) const void ANCS::AnimationSet::EVNT::write(athena::io::IStreamWriter& writer) const
{ {
writer.writeUint32Big(version); writer.writeUint32Big(version);
@ -661,50 +629,42 @@ size_t ANCS::AnimationSet::EVNT::binarySize(size_t __isz) const
return __isz; return __isz;
} }
void ANCS::AnimationSet::EVNT::read(Athena::io::YAMLDocReader& reader) void ANCS::AnimationSet::EVNT::read(athena::io::YAMLDocReader& reader)
{ {
version = reader.readUint32("version"); version = reader.readUint32("version");
atUint32 loopCount = reader.readUint32("loopCount"); reader.enumerate("loopEvents", loopEvents);
reader.enumerate("loopEvents", loopEvents, loopCount);
uevtEvents.clear(); uevtEvents.clear();
if (version == 2) if (version == 2)
{ {
atUint32 uevtCount = reader.readUint32("uevtCount"); reader.enumerate("uevtEvents", uevtEvents);
reader.enumerate("uevtEvents", uevtEvents, uevtCount);
} }
atUint32 effectCount = reader.readUint32("effectCount"); reader.enumerate("effectEvents", effectEvents);
reader.enumerate("effectEvents", effectEvents, effectCount);
atUint32 sfxCount = reader.readUint32("sfxCount"); reader.enumerate("sfxEvents", sfxEvents);
reader.enumerate("sfxEvents", sfxEvents, sfxCount);
} }
void ANCS::AnimationSet::EVNT::write(Athena::io::YAMLDocWriter& writer) const void ANCS::AnimationSet::EVNT::write(athena::io::YAMLDocWriter& writer) const
{ {
writer.writeUint32("version", version); writer.writeUint32("version", version);
writer.writeUint32("loopCount", loopEvents.size());
writer.enumerate("loopEvents", loopEvents); writer.enumerate("loopEvents", loopEvents);
if (version == 2) if (version == 2)
{ {
writer.writeUint32("uevtCount", uevtEvents.size());
writer.enumerate("uevtEvents", uevtEvents); writer.enumerate("uevtEvents", uevtEvents);
} }
writer.writeUint32("effectCount", effectEvents.size());
writer.enumerate("effectEvents", effectEvents); writer.enumerate("effectEvents", effectEvents);
writer.writeUint32("sfxCount", sfxEvents.size());
writer.enumerate("sfxEvents", sfxEvents); writer.enumerate("sfxEvents", sfxEvents);
} }
const char* ANCS::AnimationSet::EVNT::DNAType() const char* ANCS::AnimationSet::EVNT::DNAType()
{ {
return "Retro::DNAMP2::ANCS::AnimationSet::EVNT"; return "urde::DNAMP2::ANCS::AnimationSet::EVNT";
} }
} }

View File

@ -213,34 +213,34 @@ struct ANCS : BigYAML
static bool Extract(const SpecBase& dataSpec, static bool Extract(const SpecBase& dataSpec,
PAKEntryReadStream& rs, PAKEntryReadStream& rs,
const HECL::ProjectPath& outPath, const hecl::ProjectPath& outPath,
PAKRouter<PAKBridge>& pakRouter, PAKRouter<PAKBridge>& pakRouter,
const DNAMP1::PAK::Entry& entry, const DNAMP1::PAK::Entry& entry,
bool force, bool force,
std::function<void(const HECL::SystemChar*)> fileChanged) std::function<void(const hecl::SystemChar*)> fileChanged)
{ {
HECL::ProjectPath yamlPath = outPath.getWithExtension(_S(".yaml")); hecl::ProjectPath yamlPath = outPath.getWithExtension(_S(".yaml"));
HECL::ProjectPath::Type yamlType = yamlPath.getPathType(); hecl::ProjectPath::Type yamlType = yamlPath.getPathType();
HECL::ProjectPath blendPath = outPath.getWithExtension(_S(".blend")); hecl::ProjectPath blendPath = outPath.getWithExtension(_S(".blend"));
HECL::ProjectPath::Type blendType = blendPath.getPathType(); hecl::ProjectPath::Type blendType = blendPath.getPathType();
if (force || if (force ||
yamlType == HECL::ProjectPath::Type::None || yamlType == hecl::ProjectPath::Type::None ||
blendType == HECL::ProjectPath::Type::None) blendType == hecl::ProjectPath::Type::None)
{ {
ANCS ancs; ANCS ancs;
ancs.read(rs); ancs.read(rs);
if (force || yamlType == HECL::ProjectPath::Type::None) if (force || yamlType == hecl::ProjectPath::Type::None)
{ {
FILE* fp = HECL::Fopen(yamlPath.getAbsolutePath().c_str(), _S("wb")); FILE* fp = hecl::Fopen(yamlPath.getAbsolutePath().c_str(), _S("wb"));
ancs.toYAMLFile(fp); ancs.toYAMLFile(fp);
fclose(fp); fclose(fp);
} }
if (force || blendType == HECL::ProjectPath::Type::None) if (force || blendType == hecl::ProjectPath::Type::None)
{ {
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection(); hecl::BlenderConnection& conn = hecl::BlenderConnection::SharedConnection();
DNAANCS::ReadANCSToBlender<PAKRouter<PAKBridge>, ANCS, MaterialSet, DNACMDL::SurfaceHeader_2, 4> DNAANCS::ReadANCSToBlender<PAKRouter<PAKBridge>, ANCS, MaterialSet, DNACMDL::SurfaceHeader_2, 4>
(conn, ancs, blendPath, pakRouter, entry, dataSpec, fileChanged, force); (conn, ancs, blendPath, pakRouter, entry, dataSpec, fileChanged, force);
} }

View File

@ -5,9 +5,9 @@ namespace DataSpec
namespace DNAMP2 namespace DNAMP2
{ {
using ANIMOutStream = HECL::BlenderConnection::PyOutStream::ANIMOutStream; using ANIMOutStream = hecl::BlenderConnection::PyOutStream::ANIMOutStream;
void ANIM::IANIM::sendANIMToBlender(HECL::BlenderConnection::PyOutStream& os, const CINF& cinf) const void ANIM::IANIM::sendANIMToBlender(hecl::BlenderConnection::PyOutStream& os, const CINF& cinf) const
{ {
os.format("act.hecl_fps = round(%f)\n", (1.0f / mainInterval)); os.format("act.hecl_fps = round(%f)\n", (1.0f / mainInterval));
@ -92,7 +92,7 @@ void ANIM::IANIM::sendANIMToBlender(HECL::BlenderConnection::PyOutStream& os, co
} }
} }
void ANIM::ANIM0::read(Athena::io::IStreamReader& reader) void ANIM::ANIM0::read(athena::io::IStreamReader& reader)
{ {
Header head; Header head;
head.read(reader); head.read(reader);
@ -215,7 +215,7 @@ void ANIM::ANIM0::read(Athena::io::IStreamReader& reader)
} }
} }
void ANIM::ANIM0::write(Athena::io::IStreamWriter& writer) const void ANIM::ANIM0::write(athena::io::IStreamWriter& writer) const
{ {
Header head; Header head;
head.unk0 = 0; head.unk0 = 0;
@ -372,7 +372,7 @@ size_t ANIM::ANIM0::binarySize(size_t __isz) const
return __isz; return __isz;
} }
void ANIM::ANIM2::read(Athena::io::IStreamReader& reader) void ANIM::ANIM2::read(athena::io::IStreamReader& reader)
{ {
Header head; Header head;
head.read(reader); head.read(reader);
@ -450,7 +450,7 @@ void ANIM::ANIM2::read(Athena::io::IStreamReader& reader)
chanKeys = bsReader.read(bsData.get(), keyframeCount, channels, head.rotDiv, head.translationMult); chanKeys = bsReader.read(bsData.get(), keyframeCount, channels, head.rotDiv, head.translationMult);
} }
void ANIM::ANIM2::write(Athena::io::IStreamWriter& writer) const void ANIM::ANIM2::write(athena::io::IStreamWriter& writer) const
{ {
Header head; Header head;
head.unk1 = 1; head.unk1 = 1;

View File

@ -27,7 +27,7 @@ struct ANIM : BigDNA
std::vector<std::vector<DNAANIM::Value>> chanKeys; std::vector<std::vector<DNAANIM::Value>> chanKeys;
float mainInterval = 0.0; float mainInterval = 0.0;
void sendANIMToBlender(HECL::BlenderConnection::PyOutStream&, const CINF&) const; void sendANIMToBlender(hecl::BlenderConnection::PyOutStream&, const CINF&) const;
}; };
struct ANIM0 : IANIM struct ANIM0 : IANIM
@ -97,7 +97,7 @@ struct ANIM : BigDNA
Value<atUint16> initSZ = 0; Value<atUint16> initSZ = 0;
Value<atUint8> qSZ = 0; Value<atUint8> qSZ = 0;
void read(Athena::io::IStreamReader& reader) void read(athena::io::IStreamReader& reader)
{ {
id = reader.readUByte(); id = reader.readUByte();
keyCount1 = reader.readUint16Big(); keyCount1 = reader.readUint16Big();
@ -131,7 +131,7 @@ struct ANIM : BigDNA
qSZ = reader.readUByte(); qSZ = reader.readUByte();
} }
} }
void write(Athena::io::IStreamWriter& writer) const void write(athena::io::IStreamWriter& writer) const
{ {
writer.writeUByte(id); writer.writeUByte(id);
writer.writeUint16Big(keyCount1); writer.writeUint16Big(keyCount1);
@ -180,7 +180,7 @@ struct ANIM : BigDNA
}; };
std::unique_ptr<IANIM> m_anim; std::unique_ptr<IANIM> m_anim;
void read(Athena::io::IStreamReader& reader) void read(athena::io::IStreamReader& reader)
{ {
atUint32 version = reader.readUint32Big(); atUint32 version = reader.readUint32Big();
switch (version) switch (version)
@ -194,12 +194,12 @@ struct ANIM : BigDNA
m_anim->read(reader); m_anim->read(reader);
break; break;
default: default:
Log.report(LogVisor::FatalError, "unrecognized ANIM version"); Log.report(logvisor::Fatal, "unrecognized ANIM version");
break; break;
} }
} }
void write(Athena::io::IStreamWriter& writer) const void write(athena::io::IStreamWriter& writer) const
{ {
writer.writeUint32Big(m_anim->m_version); writer.writeUint32Big(m_anim->m_version);
m_anim->write(writer); m_anim->write(writer);
@ -210,7 +210,7 @@ struct ANIM : BigDNA
return m_anim->binarySize(__isz + 4); return m_anim->binarySize(__isz + 4);
} }
void sendANIMToBlender(HECL::BlenderConnection::PyOutStream& os, const CINF& cinf, bool) const void sendANIMToBlender(hecl::BlenderConnection::PyOutStream& os, const CINF& cinf, bool) const
{ {
m_anim->sendANIMToBlender(os, cinf); m_anim->sendANIMToBlender(os, cinf);
} }

View File

@ -57,7 +57,7 @@ struct CINF : BigDNA
return nullptr; return nullptr;
} }
void sendVertexGroupsToBlender(HECL::BlenderConnection::PyOutStream& os) const void sendVertexGroupsToBlender(hecl::BlenderConnection::PyOutStream& os) const
{ {
for (atUint32 bid : boneIds) for (atUint32 bid : boneIds)
{ {
@ -72,7 +72,7 @@ struct CINF : BigDNA
} }
} }
void sendCINFToBlender(HECL::BlenderConnection::PyOutStream& os, const UniqueID32& cinfId) const void sendCINFToBlender(hecl::BlenderConnection::PyOutStream& os, const UniqueID32& cinfId) const
{ {
os.format("arm = bpy.data.armatures.new('CINF_%08X')\n" os.format("arm = bpy.data.armatures.new('CINF_%08X')\n"
"arm_obj = bpy.data.objects.new(arm.name, arm)\n" "arm_obj = bpy.data.objects.new(arm.name, arm)\n"

View File

@ -17,11 +17,11 @@ struct CMDL
{ {
static bool Extract(const SpecBase& dataSpec, static bool Extract(const SpecBase& dataSpec,
PAKEntryReadStream& rs, PAKEntryReadStream& rs,
const HECL::ProjectPath& outPath, const hecl::ProjectPath& outPath,
PAKRouter<PAKBridge>& pakRouter, PAKRouter<PAKBridge>& pakRouter,
const DNAMP1::PAK::Entry& entry, const DNAMP1::PAK::Entry& entry,
bool, bool,
std::function<void(const HECL::SystemChar*)>) std::function<void(const hecl::SystemChar*)>)
{ {
/* Check for RigPair */ /* Check for RigPair */
const PAKRouter<PAKBridge>::RigPair* rp = pakRouter.lookupCMDLRigPair(entry.id); const PAKRouter<PAKBridge>::RigPair* rp = pakRouter.lookupCMDLRigPair(entry.id);
@ -37,8 +37,8 @@ struct CMDL
} }
/* Do extract */ /* Do extract */
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection(); hecl::BlenderConnection& conn = hecl::BlenderConnection::SharedConnection();
if (!conn.createBlend(outPath, HECL::BlenderConnection::BlendType::Mesh)) if (!conn.createBlend(outPath, hecl::BlenderConnection::BlendType::Mesh))
return false; return false;
DNACMDL::ReadCMDLToBlender<PAKRouter<PAKBridge>, MaterialSet, std::pair<CSKR*,CINF*>, DNACMDL::SurfaceHeader_2, 4> DNACMDL::ReadCMDLToBlender<PAKRouter<PAKBridge>, MaterialSet, std::pair<CSKR*,CINF*>, DNACMDL::SurfaceHeader_2, 4>
(conn, rs, pakRouter, entry, dataSpec, loadRp); (conn, rs, pakRouter, entry, dataSpec, loadRp);

View File

@ -59,15 +59,15 @@ struct MaterialSet : BigDNA
}; };
Vector<Material, DNA_COUNT(head.materialCount)> materials; Vector<Material, DNA_COUNT(head.materialCount)> materials;
static void RegisterMaterialProps(HECL::BlenderConnection::PyOutStream& out) static void RegisterMaterialProps(hecl::BlenderConnection::PyOutStream& out)
{ {
DNAMP1::MaterialSet::RegisterMaterialProps(out); DNAMP1::MaterialSet::RegisterMaterialProps(out);
} }
static void ConstructMaterial(HECL::BlenderConnection::PyOutStream& out, static void ConstructMaterial(hecl::BlenderConnection::PyOutStream& out,
const MaterialSet::Material& material, const MaterialSet::Material& material,
unsigned groupIdx, unsigned matIdx); unsigned groupIdx, unsigned matIdx);
void readToBlender(HECL::BlenderConnection::PyOutStream& os, void readToBlender(hecl::BlenderConnection::PyOutStream& os,
const PAKRouter<PAKBridge>& pakRouter, const PAKRouter<PAKBridge>& pakRouter,
const PAKRouter<PAKBridge>::EntryType& entry, const PAKRouter<PAKBridge>::EntryType& entry,
unsigned setIdx) unsigned setIdx)

View File

@ -20,7 +20,7 @@ struct CSKR : DNAMP1::CSKR
return nullptr; return nullptr;
} }
void weightVertex(HECL::BlenderConnection::PyOutStream& os, const CINF& cinf, atUint32 idx) const void weightVertex(hecl::BlenderConnection::PyOutStream& os, const CINF& cinf, atUint32 idx) const
{ {
atUint32 accum = 0; atUint32 accum = 0;
for (const SkinningRule& rule : skinningRules) for (const SkinningRule& rule : skinningRules)

View File

@ -13,7 +13,7 @@ namespace DataSpec
{ {
namespace DNAMP2 namespace DNAMP2
{ {
LogVisor::LogModule Log("Retro::DNAMP2"); logvisor::Module Log("urde::DNAMP2");
static bool GetNoShare(const std::string& name) static bool GetNoShare(const std::string& name)
{ {
@ -24,12 +24,12 @@ static bool GetNoShare(const std::string& name)
return true; return true;
} }
PAKBridge::PAKBridge(HECL::Database::Project& project, PAKBridge::PAKBridge(hecl::Database::Project& project,
const NOD::Node& node, const nod::Node& node,
bool doExtract) bool doExtract)
: m_project(project), m_node(node), m_pak(true, GetNoShare(node.getName())), m_doExtract(doExtract) : m_project(project), m_node(node), m_pak(true, GetNoShare(node.getName())), m_doExtract(doExtract)
{ {
NOD::AthenaPartReadStream rs(node.beginReadStream()); nod::AthenaPartReadStream rs(node.beginReadStream());
m_pak.read(rs); m_pak.read(rs);
/* Append Level String */ /* Append Level String */
@ -54,12 +54,12 @@ PAKBridge::PAKBridge(HECL::Database::Project& project,
} }
} }
static HECL::SystemString LayerName(const std::string& name) static hecl::SystemString LayerName(const std::string& name)
{ {
#if HECL_UCS2 #if HECL_UCS2
HECL::SystemString ret = HECL::UTF8ToWide(name); hecl::SystemString ret = hecl::UTF8ToWide(name);
#else #else
HECL::SystemString ret = name; hecl::SystemString ret = name;
#endif #endif
for (auto& ch : ret) for (auto& ch : ret)
if (ch == _S('/') || ch == _S('\\')) if (ch == _S('/') || ch == _S('\\'))
@ -82,7 +82,7 @@ void PAKBridge::build()
mlvl.read(rs); mlvl.read(rs);
} }
#if HECL_UCS2 #if HECL_UCS2
level.name = HECL::UTF8ToWide(m_pak.bestEntryName(entry)); level.name = hecl::UTF8ToWide(m_pak.bestEntryName(entry));
#else #else
level.name = m_pak.bestEntryName(entry); level.name = m_pak.bestEntryName(entry);
#endif #endif
@ -95,7 +95,7 @@ void PAKBridge::build()
if (worldMapEnt) if (worldMapEnt)
{ {
PAKEntryReadStream rs = worldMapEnt->beginReadStream(m_node); PAKEntryReadStream rs = worldMapEnt->beginReadStream(m_node);
rs.seek(8, Athena::Current); rs.seek(8, athena::Current);
atUint32 areaCount = rs.readUint32Big(); atUint32 areaCount = rs.readUint32Big();
mapw.reserve(areaCount); mapw.reserve(areaCount);
for (atUint32 i=0 ; i<areaCount ; ++i) for (atUint32 i=0 ; i<areaCount ; ++i)
@ -130,21 +130,21 @@ void PAKBridge::build()
if (areaDeps.name.empty()) if (areaDeps.name.empty())
{ {
#if HECL_UCS2 #if HECL_UCS2
areaDeps.name = HECL::UTF8ToWide(area.internalAreaName); areaDeps.name = hecl::UTF8ToWide(area.internalAreaName);
#else #else
areaDeps.name = area.internalAreaName; areaDeps.name = area.internalAreaName;
#endif #endif
if (areaDeps.name.empty()) if (areaDeps.name.empty())
{ {
#if HECL_UCS2 #if HECL_UCS2
areaDeps.name = _S("MREA_") + HECL::UTF8ToWide(area.areaMREAId.toString()); areaDeps.name = _S("MREA_") + hecl::UTF8ToWide(area.areaMREAId.toString());
#else #else
areaDeps.name = "MREA_" + area.areaMREAId.toString(); areaDeps.name = "MREA_" + area.areaMREAId.toString();
#endif #endif
} }
} }
HECL::SystemChar num[16]; hecl::SystemChar num[16];
HECL::SNPrintf(num, 16, _S("%02u "), ai); hecl::SNPrintf(num, 16, _S("%02u "), ai);
areaDeps.name = num + areaDeps.name; areaDeps.name = num + areaDeps.name;
areaDeps.layers.reserve(area.depLayerCount-1); areaDeps.layers.reserve(area.depLayerCount-1);
@ -163,7 +163,7 @@ void PAKBridge::build()
while (layer.name.size() && isspace(layer.name.back())) while (layer.name.size() && isspace(layer.name.back()))
layer.name.pop_back(); layer.name.pop_back();
#endif #endif
HECL::SNPrintf(num, 16, layer.active ? _S("%02ua ") : _S("%02u "), l-1); hecl::SNPrintf(num, 16, layer.active ? _S("%02ua ") : _S("%02u "), l-1);
layer.name = num + layer.name; layer.name = num + layer.name;
layer.resources.reserve(area.depLayers[l] - r); layer.resources.reserve(area.depLayers[l] - r);

View File

@ -9,31 +9,31 @@ namespace DataSpec
namespace DNAMP2 namespace DNAMP2
{ {
extern LogVisor::LogModule Log; extern logvisor::Module Log;
/* MP2-specific, one-shot PAK traversal/extraction class */ /* MP2-specific, one-shot PAK traversal/extraction class */
class PAKBridge class PAKBridge
{ {
HECL::Database::Project& m_project; hecl::Database::Project& m_project;
const NOD::Node& m_node; const nod::Node& m_node;
DNAMP1::PAK m_pak; DNAMP1::PAK m_pak;
public: public:
bool m_doExtract; bool m_doExtract;
using Level = Level<UniqueID32>; using Level = Level<UniqueID32>;
std::unordered_map<UniqueID32, Level> m_levelDeps; std::unordered_map<UniqueID32, Level> m_levelDeps;
HECL::SystemString m_levelString; hecl::SystemString m_levelString;
PAKBridge(HECL::Database::Project& project, PAKBridge(hecl::Database::Project& project,
const NOD::Node& node, const nod::Node& node,
bool doExtract=true); bool doExtract=true);
void build(); void build();
static ResExtractor<PAKBridge> LookupExtractor(const DNAMP1::PAK::Entry& entry); static ResExtractor<PAKBridge> LookupExtractor(const DNAMP1::PAK::Entry& entry);
const std::string& getName() const {return m_node.getName();} const std::string& getName() const {return m_node.getName();}
const HECL::SystemString& getLevelString() const {return m_levelString;} const hecl::SystemString& getLevelString() const {return m_levelString;}
using PAKType = DNAMP1::PAK; using PAKType = DNAMP1::PAK;
const PAKType& getPAK() const {return m_pak;} const PAKType& getPAK() const {return m_pak;}
const NOD::Node& getNode() const {return m_node;} const nod::Node& getNode() const {return m_node;}
void addCMDLRigPairs(PAKRouter<PAKBridge>& pakRouter, void addCMDLRigPairs(PAKRouter<PAKBridge>& pakRouter,
std::unordered_map<UniqueID32, std::pair<UniqueID32, UniqueID32>>& addTo) const; std::unordered_map<UniqueID32, std::pair<UniqueID32, UniqueID32>>& addTo) const;

View File

@ -65,11 +65,11 @@ struct DeafBabe : BigDNA
Value<atUint32> vertCount; Value<atUint32> vertCount;
Vector<atVec3f, DNA_COUNT(vertCount)> verts; Vector<atVec3f, DNA_COUNT(vertCount)> verts;
static void BlenderInit(HECL::BlenderConnection::PyOutStream& os) static void BlenderInit(hecl::BlenderConnection::PyOutStream& os)
{ {
DNAMP1::DeafBabe::BlenderInit(os); DNAMP1::DeafBabe::BlenderInit(os);
} }
void insertNoClimb(HECL::BlenderConnection::PyOutStream& os) const void insertNoClimb(hecl::BlenderConnection::PyOutStream& os) const
{ {
for (atInt16 edgeIdx : noClimbEdges) for (atInt16 edgeIdx : noClimbEdges)
{ {
@ -82,7 +82,7 @@ struct DeafBabe : BigDNA
edge.verts[0], edge.verts[1]); edge.verts[0], edge.verts[1]);
} }
} }
void sendToBlender(HECL::BlenderConnection::PyOutStream& os) const void sendToBlender(hecl::BlenderConnection::PyOutStream& os) const
{ {
DeafBabeSendToBlender(os, *this); DeafBabeSendToBlender(os, *this);
} }

View File

@ -13,15 +13,15 @@ struct MAPA : DNAMAPA::MAPA
{ {
static bool Extract(const SpecBase& dataSpec, static bool Extract(const SpecBase& dataSpec,
PAKEntryReadStream& rs, PAKEntryReadStream& rs,
const HECL::ProjectPath& outPath, const hecl::ProjectPath& outPath,
PAKRouter<PAKBridge>& pakRouter, PAKRouter<PAKBridge>& pakRouter,
const DNAMP1::PAK::Entry& entry, const DNAMP1::PAK::Entry& entry,
bool force, bool force,
std::function<void(const HECL::SystemChar*)> fileChanged) std::function<void(const hecl::SystemChar*)> fileChanged)
{ {
MAPA mapa; MAPA mapa;
mapa.read(rs); mapa.read(rs);
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection(); hecl::BlenderConnection& conn = hecl::BlenderConnection::SharedConnection();
return DNAMAPA::ReadMAPAToBlender(conn, mapa, outPath, pakRouter, entry, force); return DNAMAPA::ReadMAPAToBlender(conn, mapa, outPath, pakRouter, entry, force);
} }
}; };

View File

@ -96,18 +96,18 @@ struct MLVL : BigYAML
static bool Extract(const SpecBase& dataSpec, static bool Extract(const SpecBase& dataSpec,
PAKEntryReadStream& rs, PAKEntryReadStream& rs,
const HECL::ProjectPath& outPath, const hecl::ProjectPath& outPath,
PAKRouter<PAKBridge>& pakRouter, PAKRouter<PAKBridge>& pakRouter,
const DNAMP1::PAK::Entry& entry, const DNAMP1::PAK::Entry& entry,
bool force, bool force,
std::function<void(const HECL::SystemChar*)> fileChanged) std::function<void(const hecl::SystemChar*)> fileChanged)
{ {
MLVL mlvl; MLVL mlvl;
mlvl.read(rs); mlvl.read(rs);
FILE* fp = HECL::Fopen(outPath.getWithExtension(_S(".yaml"), true).getAbsolutePath().c_str(), _S("wb")); FILE* fp = hecl::Fopen(outPath.getWithExtension(_S(".yaml"), true).getAbsolutePath().c_str(), _S("wb"));
mlvl.toYAMLFile(fp); mlvl.toYAMLFile(fp);
fclose(fp); fclose(fp);
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection(); hecl::BlenderConnection& conn = hecl::BlenderConnection::SharedConnection();
return DNAMLVL::ReadMLVLToBlender(conn, mlvl, outPath, pakRouter, return DNAMLVL::ReadMLVLToBlender(conn, mlvl, outPath, pakRouter,
entry, force, fileChanged); entry, force, fileChanged);
} }

View File

@ -1,4 +1,4 @@
#include <Athena/FileWriter.hpp> #include <athena/FileWriter.hpp>
#include <lzo/lzo1x.h> #include <lzo/lzo1x.h>
#include "MREA.hpp" #include "MREA.hpp"
#include "../DNAMP1/MREA.hpp" #include "../DNAMP1/MREA.hpp"
@ -13,7 +13,7 @@ namespace DNAMP2
void MREA::StreamReader::nextBlock() void MREA::StreamReader::nextBlock()
{ {
if (m_nextBlk >= m_blkCount) if (m_nextBlk >= m_blkCount)
Log.report(LogVisor::FatalError, "MREA stream overrun"); Log.report(logvisor::Fatal, "MREA stream overrun");
BlockInfo& info = m_blockInfos[m_nextBlk++]; BlockInfo& info = m_blockInfos[m_nextBlk++];
@ -68,7 +68,7 @@ void MREA::StreamReader::nextBlock()
m_blkSz = info.decompSize; m_blkSz = info.decompSize;
} }
MREA::StreamReader::StreamReader(Athena::io::IStreamReader& source, atUint32 blkCount) MREA::StreamReader::StreamReader(athena::io::IStreamReader& source, atUint32 blkCount)
: m_compBufSz(0x4120), m_compBuf(new atUint8[0x4120]), : m_compBufSz(0x4120), m_compBuf(new atUint8[0x4120]),
m_decompBufSz(0x4120), m_decompBuf(new atUint8[0x4120]), m_decompBufSz(0x4120), m_decompBuf(new atUint8[0x4120]),
m_source(source), m_blkCount(blkCount) m_source(source), m_blkCount(blkCount)
@ -86,16 +86,16 @@ MREA::StreamReader::StreamReader(Athena::io::IStreamReader& source, atUint32 blk
nextBlock(); nextBlock();
} }
void MREA::StreamReader::seek(atInt64 diff, Athena::SeekOrigin whence) void MREA::StreamReader::seek(atInt64 diff, athena::SeekOrigin whence)
{ {
atUint64 target = diff; atUint64 target = diff;
if (whence == Athena::Current) if (whence == athena::Current)
target = m_pos + diff; target = m_pos + diff;
else if (whence == Athena::End) else if (whence == athena::End)
target = m_totalDecompLen - diff; target = m_totalDecompLen - diff;
if (target >= m_totalDecompLen) if (target >= m_totalDecompLen)
Log.report(LogVisor::FatalError, "MREA stream seek overrun"); Log.report(logvisor::Fatal, "MREA stream seek overrun");
/* Determine which block contains position */ /* Determine which block contains position */
atUint32 dAccum = 0; atUint32 dAccum = 0;
@ -117,7 +117,7 @@ void MREA::StreamReader::seek(atInt64 diff, Athena::SeekOrigin whence)
/* Seek source if needed */ /* Seek source if needed */
if (bIdx != m_nextBlk-1) if (bIdx != m_nextBlk-1)
{ {
m_source.seek(m_blkBase + cAccum, Athena::Begin); m_source.seek(m_blkBase + cAccum, athena::Begin);
m_nextBlk = bIdx; m_nextBlk = bIdx;
nextBlock(); nextBlock();
} }
@ -147,7 +147,7 @@ atUint64 MREA::StreamReader::readUBytesToBuf(void* buf, atUint64 len)
return len; return len;
} }
void MREA::StreamReader::writeDecompInfos(Athena::io::IStreamWriter& writer) const void MREA::StreamReader::writeDecompInfos(athena::io::IStreamWriter& writer) const
{ {
for (const BlockInfo& info : m_blockInfos) for (const BlockInfo& info : m_blockInfos)
{ {
@ -159,18 +159,18 @@ void MREA::StreamReader::writeDecompInfos(Athena::io::IStreamWriter& writer) con
bool MREA::Extract(const SpecBase& dataSpec, bool MREA::Extract(const SpecBase& dataSpec,
PAKEntryReadStream& rs, PAKEntryReadStream& rs,
const HECL::ProjectPath& outPath, const hecl::ProjectPath& outPath,
PAKRouter<PAKBridge>& pakRouter, PAKRouter<PAKBridge>& pakRouter,
const DNAMP1::PAK::Entry& entry, const DNAMP1::PAK::Entry& entry,
bool force, bool force,
std::function<void(const HECL::SystemChar*)>) std::function<void(const hecl::SystemChar*)>)
{ {
using RigPair = std::pair<CSKR*, CINF*>; using RigPair = std::pair<CSKR*, CINF*>;
RigPair dummy(nullptr, nullptr); RigPair dummy(nullptr, nullptr);
/* Rename MREA for consistency */ /* Rename MREA for consistency */
HECL::ProjectPath mreaPath(outPath.getParentPath(), _S("!area.blend")); hecl::ProjectPath mreaPath(outPath.getParentPath(), _S("!area.blend"));
if (!force && mreaPath.getPathType() == HECL::ProjectPath::Type::File) if (!force && mreaPath.getPathType() == hecl::ProjectPath::Type::File)
return true; return true;
/* Do extract */ /* Do extract */
@ -180,7 +180,7 @@ bool MREA::Extract(const SpecBase& dataSpec,
/* MREA decompression stream */ /* MREA decompression stream */
StreamReader drs(rs, head.compressedBlockCount); StreamReader drs(rs, head.compressedBlockCount);
Athena::io::FileWriter mreaDecompOut(pakRouter.getCooked(&entry).getWithExtension(_S(".decomp")).getAbsolutePath()); athena::io::FileWriter mreaDecompOut(pakRouter.getCooked(&entry).getWithExtension(_S(".decomp")).getAbsolutePath());
head.write(mreaDecompOut); head.write(mreaDecompOut);
mreaDecompOut.seekAlign32(); mreaDecompOut.seekAlign32();
drs.writeDecompInfos(mreaDecompOut); drs.writeDecompInfos(mreaDecompOut);
@ -188,11 +188,11 @@ bool MREA::Extract(const SpecBase& dataSpec,
atUint64 decompLen = drs.length(); atUint64 decompLen = drs.length();
mreaDecompOut.writeBytes(drs.readBytes(decompLen).get(), decompLen); mreaDecompOut.writeBytes(drs.readBytes(decompLen).get(), decompLen);
mreaDecompOut.close(); mreaDecompOut.close();
drs.seek(0, Athena::Begin); drs.seek(0, athena::Begin);
/* Start up blender connection */ /* Start up blender connection */
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection(); hecl::BlenderConnection& conn = hecl::BlenderConnection::SharedConnection();
if (!conn.createBlend(mreaPath, HECL::BlenderConnection::BlendType::Area)) if (!conn.createBlend(mreaPath, hecl::BlenderConnection::BlendType::Area))
return false; return false;
/* Calculate offset to EGMC section */ /* Calculate offset to EGMC section */
@ -201,15 +201,15 @@ bool MREA::Extract(const SpecBase& dataSpec,
egmcOffset += head.secSizes[i]; egmcOffset += head.secSizes[i];
/* Load EGMC if possible so we can assign meshes to scanIds */ /* Load EGMC if possible so we can assign meshes to scanIds */
drs.seek(egmcOffset, Athena::Begin); drs.seek(egmcOffset, athena::Begin);
UniqueID32 egmcId(drs); UniqueID32 egmcId(drs);
DNACommon::EGMC egmc; DNACommon::EGMC egmc;
bool hasEGMC = pakRouter.lookupAndReadDNA(egmcId, egmc); bool hasEGMC = pakRouter.lookupAndReadDNA(egmcId, egmc);
drs.seek(0, Athena::Begin); drs.seek(0, athena::Begin);
/* Open Py Stream and read sections */ /* Open Py Stream and read sections */
HECL::BlenderConnection::PyOutStream os = conn.beginPythonOut(true); hecl::BlenderConnection::PyOutStream os = conn.beginPythonOut(true);
os.format("import bpy\n" os.format("import bpy\n"
"import bmesh\n" "import bmesh\n"
"from mathutils import Vector\n" "from mathutils import Vector\n"
@ -241,7 +241,7 @@ bool MREA::Extract(const SpecBase& dataSpec,
atUint64 secStart = drs.position(); atUint64 secStart = drs.position();
matSet.read(drs); matSet.read(drs);
matSet.readToBlender(os, pakRouter, entry, 0); matSet.readToBlender(os, pakRouter, entry, 0);
drs.seek(secStart + head.secSizes[0], Athena::Begin); drs.seek(secStart + head.secSizes[0], athena::Begin);
std::vector<DNACMDL::VertexAttributes> vertAttribs; std::vector<DNACMDL::VertexAttributes> vertAttribs;
DNACMDL::GetVertexAttributes(matSet, vertAttribs); DNACMDL::GetVertexAttributes(matSet, vertAttribs);
@ -252,7 +252,7 @@ bool MREA::Extract(const SpecBase& dataSpec,
MeshHeader mHeader; MeshHeader mHeader;
secStart = drs.position(); secStart = drs.position();
mHeader.read(drs); mHeader.read(drs);
drs.seek(secStart + head.secSizes[curSec++], Athena::Begin); drs.seek(secStart + head.secSizes[curSec++], athena::Begin);
curSec += DNACMDL::ReadGeomSectionsToBlender<PAKRouter<PAKBridge>, MaterialSet, RigPair, DNACMDL::SurfaceHeader_2> curSec += DNACMDL::ReadGeomSectionsToBlender<PAKRouter<PAKBridge>, MaterialSet, RigPair, DNACMDL::SurfaceHeader_2>
(os, drs, pakRouter, entry, dummy, true, (os, drs, pakRouter, entry, dummy, true,
true, vertAttribs, m, head.secCount, 0, &head.secSizes[curSec]); true, vertAttribs, m, head.secCount, 0, &head.secSizes[curSec]);
@ -266,25 +266,25 @@ bool MREA::Extract(const SpecBase& dataSpec,
mHeader.visorFlags.thermalLevelStr()); mHeader.visorFlags.thermalLevelStr());
/* Seek through AROT-relation sections */ /* Seek through AROT-relation sections */
drs.seek(head.secSizes[curSec++], Athena::Current); drs.seek(head.secSizes[curSec++], athena::Current);
drs.seek(head.secSizes[curSec++], Athena::Current); drs.seek(head.secSizes[curSec++], athena::Current);
} }
/* Skip AROT */ /* Skip AROT */
drs.seek(head.secSizes[curSec++], Athena::Current); drs.seek(head.secSizes[curSec++], athena::Current);
/* Skip BVH */ /* Skip BVH */
drs.seek(head.secSizes[curSec++], Athena::Current); drs.seek(head.secSizes[curSec++], athena::Current);
/* Skip Bitmap */ /* Skip Bitmap */
drs.seek(head.secSizes[curSec++], Athena::Current); drs.seek(head.secSizes[curSec++], athena::Current);
/* Skip SCLY (for now) */ /* Skip SCLY (for now) */
for (atUint32 l=0 ; l<head.sclyLayerCount ; ++l) for (atUint32 l=0 ; l<head.sclyLayerCount ; ++l)
drs.seek(head.secSizes[curSec++], Athena::Current); drs.seek(head.secSizes[curSec++], athena::Current);
/* Skip SCGN (for now) */ /* Skip SCGN (for now) */
drs.seek(head.secSizes[curSec++], Athena::Current); drs.seek(head.secSizes[curSec++], athena::Current);
/* Read collision meshes */ /* Read collision meshes */
DeafBabe collision; DeafBabe collision;
@ -292,15 +292,15 @@ bool MREA::Extract(const SpecBase& dataSpec,
collision.read(drs); collision.read(drs);
DeafBabe::BlenderInit(os); DeafBabe::BlenderInit(os);
collision.sendToBlender(os); collision.sendToBlender(os);
drs.seek(secStart + head.secSizes[curSec++], Athena::Begin); drs.seek(secStart + head.secSizes[curSec++], athena::Begin);
/* Skip unknown section */ /* Skip unknown section */
drs.seek(head.secSizes[curSec++], Athena::Current); drs.seek(head.secSizes[curSec++], athena::Current);
/* Read BABEDEAD Lights as Cycles emissives */ /* Read BABEDEAD Lights as Cycles emissives */
secStart = drs.position(); secStart = drs.position();
DNAMP1::MREA::ReadBabeDeadToBlender_1_2(os, drs); DNAMP1::MREA::ReadBabeDeadToBlender_1_2(os, drs);
drs.seek(secStart + head.secSizes[curSec++], Athena::Begin); drs.seek(secStart + head.secSizes[curSec++], athena::Begin);
/* Origins to center of mass */ /* Origins to center of mass */
os << "bpy.context.scene.layers[1] = True\n" os << "bpy.context.scene.layers[1] = True\n"

View File

@ -12,7 +12,7 @@ namespace DNAMP2
struct MREA struct MREA
{ {
class StreamReader : public Athena::io::IStreamReader class StreamReader : public athena::io::IStreamReader
{ {
protected: protected:
struct BlockInfo : BigDNA struct BlockInfo : BigDNA
@ -29,7 +29,7 @@ struct MREA
std::unique_ptr<atUint8[]> m_compBuf; std::unique_ptr<atUint8[]> m_compBuf;
size_t m_decompBufSz; size_t m_decompBufSz;
std::unique_ptr<atUint8[]> m_decompBuf; std::unique_ptr<atUint8[]> m_decompBuf;
Athena::io::IStreamReader& m_source; athena::io::IStreamReader& m_source;
atUint64 m_blkBase; atUint64 m_blkBase;
atUint32 m_blkCount; atUint32 m_blkCount;
atUint32 m_totalDecompLen = 0; atUint32 m_totalDecompLen = 0;
@ -40,18 +40,18 @@ struct MREA
atUint32 m_blkSz = 0; atUint32 m_blkSz = 0;
void nextBlock(); void nextBlock();
StreamReader(Athena::io::IStreamReader& source) StreamReader(athena::io::IStreamReader& source)
: m_compBufSz(0x4120), m_compBuf(new atUint8[0x4120]), : m_compBufSz(0x4120), m_compBuf(new atUint8[0x4120]),
m_decompBufSz(0x4120), m_decompBuf(new atUint8[0x4120]), m_decompBufSz(0x4120), m_decompBuf(new atUint8[0x4120]),
m_source(source) {} /* Empty constructor for inheriting */ m_source(source) {} /* Empty constructor for inheriting */
public: public:
StreamReader(Athena::io::IStreamReader& source, atUint32 blkCount); StreamReader(athena::io::IStreamReader& source, atUint32 blkCount);
void seek(atInt64 diff, Athena::SeekOrigin whence); void seek(atInt64 diff, athena::SeekOrigin whence);
atUint64 position() const {return m_pos;} atUint64 position() const {return m_pos;}
atUint64 length() const {return m_totalDecompLen;} atUint64 length() const {return m_totalDecompLen;}
atUint64 readUBytesToBuf(void* buf, atUint64 len); atUint64 readUBytesToBuf(void* buf, atUint64 len);
void writeDecompInfos(Athena::io::IStreamWriter& writer) const; void writeDecompInfos(athena::io::IStreamWriter& writer) const;
}; };
struct Header : BigDNA struct Header : BigDNA
@ -75,7 +75,7 @@ struct MREA
Value<atUint32> unk3SecIdx; Value<atUint32> unk3SecIdx;
Value<atUint32> egmcSecIdx; Value<atUint32> egmcSecIdx;
Value<atUint32> compressedBlockCount; Value<atUint32> compressedBlockCount;
Seek<12, Athena::Current> align1; Seek<12, athena::Current> align1;
Vector<atUint32, DNA_COUNT(secCount)> secSizes; Vector<atUint32, DNA_COUNT(secCount)> secSizes;
}; };
@ -119,11 +119,11 @@ struct MREA
static bool Extract(const SpecBase& dataSpec, static bool Extract(const SpecBase& dataSpec,
PAKEntryReadStream& rs, PAKEntryReadStream& rs,
const HECL::ProjectPath& outPath, const hecl::ProjectPath& outPath,
PAKRouter<PAKBridge>& pakRouter, PAKRouter<PAKBridge>& pakRouter,
const DNAMP1::PAK::Entry& entry, const DNAMP1::PAK::Entry& entry,
bool, bool,
std::function<void(const HECL::SystemChar*)>); std::function<void(const hecl::SystemChar*)>);
}; };
} }

View File

@ -3,7 +3,7 @@
#include "../DNAMP1/PAK.hpp" #include "../DNAMP1/PAK.hpp"
namespace Retro namespace urde
{ {
namespace DNAMP2 namespace DNAMP2
{ {

View File

@ -6,7 +6,7 @@ namespace DataSpec
namespace DNAMP2 namespace DNAMP2
{ {
void STRG::_read(Athena::io::IStreamReader& reader) void STRG::_read(athena::io::IStreamReader& reader)
{ {
atUint32 langCount = reader.readUint32Big(); atUint32 langCount = reader.readUint32Big();
atUint32 strCount = reader.readUint32Big(); atUint32 strCount = reader.readUint32Big();
@ -32,8 +32,8 @@ void STRG::_read(Athena::io::IStreamReader& reader)
}* nameIndex = (NameIdxEntry*)nameTableBuf.get(); }* nameIndex = (NameIdxEntry*)nameTableBuf.get();
for (atUint32 n=0 ; n<nameCount ; ++n) for (atUint32 n=0 ; n<nameCount ; ++n)
{ {
const char* name = (char*)(nameTableBuf.get() + HECL::SBig(nameIndex[n].nameOff)); const char* name = (char*)(nameTableBuf.get() + hecl::SBig(nameIndex[n].nameOff));
names[name] = HECL::SBig(nameIndex[n].strIdx); names[name] = hecl::SBig(nameIndex[n].strIdx);
} }
langs.clear(); langs.clear();
@ -53,20 +53,20 @@ void STRG::_read(Athena::io::IStreamReader& reader)
langMap.emplace(item.first, &item.second); langMap.emplace(item.first, &item.second);
} }
void STRG::read(Athena::io::IStreamReader& reader) void STRG::read(athena::io::IStreamReader& reader)
{ {
atUint32 magic = reader.readUint32Big(); atUint32 magic = reader.readUint32Big();
if (magic != 0x87654321) if (magic != 0x87654321)
Log.report(LogVisor::Error, "invalid STRG magic"); Log.report(logvisor::Error, "invalid STRG magic");
atUint32 version = reader.readUint32Big(); atUint32 version = reader.readUint32Big();
if (version != 1) if (version != 1)
Log.report(LogVisor::Error, "invalid STRG version"); Log.report(logvisor::Error, "invalid STRG version");
_read(reader); _read(reader);
} }
void STRG::write(Athena::io::IStreamWriter& writer) const void STRG::write(athena::io::IStreamWriter& writer) const
{ {
writer.writeUint32Big(0x87654321); writer.writeUint32Big(0x87654321);
writer.writeUint32Big(1); writer.writeUint32Big(1);
@ -166,9 +166,9 @@ size_t STRG::binarySize(size_t __isz) const
return __isz; return __isz;
} }
void STRG::read(Athena::io::YAMLDocReader& reader) void STRG::read(athena::io::YAMLDocReader& reader)
{ {
const Athena::io::YAMLNode* root = reader.getRootNode(); const athena::io::YAMLNode* root = reader.getRootNode();
/* Validate Pass */ /* Validate Pass */
if (root->m_type == YAML_MAPPING_NODE) if (root->m_type == YAML_MAPPING_NODE)
@ -179,19 +179,19 @@ void STRG::read(Athena::io::YAMLDocReader& reader)
continue; continue;
if (lang.first.size() != 4) if (lang.first.size() != 4)
{ {
Log.report(LogVisor::Warning, "STRG language string '%s' must be exactly 4 characters; skipping", lang.first.c_str()); Log.report(logvisor::Warning, "STRG language string '%s' must be exactly 4 characters; skipping", lang.first.c_str());
return; return;
} }
if (lang.second->m_type != YAML_SEQUENCE_NODE) if (lang.second->m_type != YAML_SEQUENCE_NODE)
{ {
Log.report(LogVisor::Warning, "STRG language string '%s' must contain a sequence; skipping", lang.first.c_str()); Log.report(logvisor::Warning, "STRG language string '%s' must contain a sequence; skipping", lang.first.c_str());
return; return;
} }
for (const auto& str : lang.second->m_seqChildren) for (const auto& str : lang.second->m_seqChildren)
{ {
if (str->m_type != YAML_SCALAR_NODE) if (str->m_type != YAML_SCALAR_NODE)
{ {
Log.report(LogVisor::Warning, "STRG language '%s' must contain all scalars; skipping", lang.first.c_str()); Log.report(logvisor::Warning, "STRG language '%s' must contain all scalars; skipping", lang.first.c_str());
return; return;
} }
} }
@ -199,7 +199,7 @@ void STRG::read(Athena::io::YAMLDocReader& reader)
} }
else else
{ {
Log.report(LogVisor::Warning, "STRG must have a mapping root node; skipping"); Log.report(logvisor::Warning, "STRG must have a mapping root node; skipping");
return; return;
} }
@ -209,15 +209,15 @@ void STRG::read(Athena::io::YAMLDocReader& reader)
{ {
std::vector<std::wstring> strs; std::vector<std::wstring> strs;
for (const auto& str : lang.second->m_seqChildren) for (const auto& str : lang.second->m_seqChildren)
strs.emplace_back(HECL::UTF8ToWide(str->m_scalarString)); strs.emplace_back(hecl::UTF8ToWide(str->m_scalarString));
langs.emplace_back(FourCC(lang.first.c_str()), strs); langs.emplace_back(FourCC(lang.first.c_str()), strs);
} }
names.clear(); names.clear();
const Athena::io::YAMLNode* namesNode = root->findMapChild("names"); const athena::io::YAMLNode* namesNode = root->findMapChild("names");
if (namesNode) if (namesNode)
for (const auto& item : namesNode->m_mapChildren) for (const auto& item : namesNode->m_mapChildren)
names[item.first] = Athena::io::NodeToVal<atInt32>(item.second.get()); names[item.first] = athena::io::NodeToVal<atInt32>(item.second.get());
langMap.clear(); langMap.clear();
langMap.reserve(langs.size()); langMap.reserve(langs.size());
@ -225,7 +225,7 @@ void STRG::read(Athena::io::YAMLDocReader& reader)
langMap.emplace(item.first, &item.second); langMap.emplace(item.first, &item.second);
} }
void STRG::write(Athena::io::YAMLDocWriter& writer) const void STRG::write(athena::io::YAMLDocWriter& writer) const
{ {
for (const auto& lang : langs) for (const auto& lang : langs)
{ {
@ -249,7 +249,7 @@ void STRG::write(Athena::io::YAMLDocWriter& writer) const
const char* STRG::DNAType() const char* STRG::DNAType()
{ {
return "Retro::DNAMP2::STRG"; return "urde::DNAMP2::STRG";
} }
} }

View File

@ -14,7 +14,7 @@ struct STRG : ISTRG
{ {
DECL_YAML DECL_YAML
Delete expl; Delete expl;
void _read(Athena::io::IStreamReader& reader); void _read(athena::io::IStreamReader& reader);
std::vector<std::pair<FourCC, std::vector<std::wstring>>> langs; std::vector<std::pair<FourCC, std::vector<std::wstring>>> langs;
std::unordered_map<FourCC, std::vector<std::wstring>*> langMap; std::unordered_map<FourCC, std::vector<std::wstring>*> langMap;
std::map<std::string, int32_t> names; std::map<std::string, int32_t> names;
@ -42,7 +42,7 @@ struct STRG : ISTRG
{ {
auto search = langMap.find(lang); auto search = langMap.find(lang);
if (search != langMap.end()) if (search != langMap.end())
return HECL::WideToUTF8(search->second->at(idx)); return hecl::WideToUTF8(search->second->at(idx));
return std::string(); return std::string();
} }
inline std::wstring getUTF16(const FourCC& lang, size_t idx) const inline std::wstring getUTF16(const FourCC& lang, size_t idx) const
@ -52,35 +52,35 @@ struct STRG : ISTRG
return search->second->at(idx); return search->second->at(idx);
return std::wstring(); return std::wstring();
} }
inline HECL::SystemString getSystemString(const FourCC& lang, size_t idx) const inline hecl::SystemString getSystemString(const FourCC& lang, size_t idx) const
{ {
auto search = langMap.find(lang); auto search = langMap.find(lang);
if (search != langMap.end()) if (search != langMap.end())
#if HECL_UCS2 #if HECL_UCS2
return search->second->at(idx); return search->second->at(idx);
#else #else
return HECL::WideToUTF8(search->second->at(idx)); return hecl::WideToUTF8(search->second->at(idx));
#endif #endif
return HECL::SystemString(); return hecl::SystemString();
} }
static bool Extract(PAKEntryReadStream& rs, const HECL::ProjectPath& outPath) static bool Extract(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath)
{ {
STRG strg; STRG strg;
strg.read(rs); strg.read(rs);
FILE* fp = HECL::Fopen(outPath.getAbsolutePath().c_str(), _S("wb")); FILE* fp = hecl::Fopen(outPath.getAbsolutePath().c_str(), _S("wb"));
strg.toYAMLFile(fp); strg.toYAMLFile(fp);
fclose(fp); fclose(fp);
return true; return true;
} }
static bool Cook(const HECL::ProjectPath& inPath, const HECL::ProjectPath& outPath) static bool Cook(const hecl::ProjectPath& inPath, const hecl::ProjectPath& outPath)
{ {
STRG strg; STRG strg;
FILE* fp = HECL::Fopen(inPath.getAbsolutePath().c_str(), _S("rb")); FILE* fp = hecl::Fopen(inPath.getAbsolutePath().c_str(), _S("rb"));
strg.fromYAMLFile(fp); strg.fromYAMLFile(fp);
fclose(fp); fclose(fp);
Athena::io::FileWriter ws(outPath.getAbsolutePath()); athena::io::FileWriter ws(outPath.getAbsolutePath());
strg.write(ws); strg.write(ws);
return true; return true;
} }

View File

@ -1,15 +1,15 @@
#include "ANIM.hpp" #include "ANIM.hpp"
#include <float.h> #include <cfloat>
#include <math.h> #include "zeus/Math.hpp"
namespace DataSpec namespace DataSpec
{ {
namespace DNAMP3 namespace DNAMP3
{ {
using ANIMOutStream = HECL::BlenderConnection::PyOutStream::ANIMOutStream; using ANIMOutStream = hecl::BlenderConnection::PyOutStream::ANIMOutStream;
void ANIM::IANIM::sendANIMToBlender(HECL::BlenderConnection::PyOutStream& os, const CINF& cinf, bool additive) const void ANIM::IANIM::sendANIMToBlender(hecl::BlenderConnection::PyOutStream& os, const CINF& cinf, bool additive) const
{ {
os.format("act.hecl_fps = round(%f)\n" os.format("act.hecl_fps = round(%f)\n"
"act.hecl_additive = %s\n", "act.hecl_additive = %s\n",
@ -109,7 +109,7 @@ void ANIM::IANIM::sendANIMToBlender(HECL::BlenderConnection::PyOutStream& os, co
} }
} }
void ANIM::ANIM0::read(Athena::io::IStreamReader& reader) void ANIM::ANIM0::read(athena::io::IStreamReader& reader)
{ {
Header head; Header head;
head.read(reader); head.read(reader);
@ -235,7 +235,7 @@ void ANIM::ANIM0::read(Athena::io::IStreamReader& reader)
} }
} }
void ANIM::ANIM0::write(Athena::io::IStreamWriter& writer) const void ANIM::ANIM0::write(athena::io::IStreamWriter& writer) const
{ {
Header head; Header head;
head.unk0 = 0; head.unk0 = 0;
@ -425,7 +425,7 @@ static float ComputeFrames(const std::vector<float>& keyTimes, std::vector<atUin
return mainInterval; return mainInterval;
} }
void ANIM::ANIM1::read(Athena::io::IStreamReader& reader) void ANIM::ANIM1::read(athena::io::IStreamReader& reader)
{ {
Header head; Header head;
head.read(reader); head.read(reader);
@ -522,7 +522,7 @@ void ANIM::ANIM1::read(Athena::io::IStreamReader& reader)
chanKeys = bsReader.read(bsData.get(), head.keyCount-1, channels, 32767, head.translationMult); chanKeys = bsReader.read(bsData.get(), head.keyCount-1, channels, 32767, head.translationMult);
} }
void ANIM::ANIM1::write(Athena::io::IStreamWriter& writer) const void ANIM::ANIM1::write(athena::io::IStreamWriter& writer) const
{ {
} }

View File

@ -27,7 +27,7 @@ struct ANIM : BigDNA
std::vector<std::vector<DNAANIM::Value>> chanKeys; std::vector<std::vector<DNAANIM::Value>> chanKeys;
float mainInterval = 0.0; float mainInterval = 0.0;
void sendANIMToBlender(HECL::BlenderConnection::PyOutStream&, const CINF&, bool additive) const; void sendANIMToBlender(hecl::BlenderConnection::PyOutStream&, const CINF&, bool additive) const;
}; };
struct ANIM0 : IANIM struct ANIM0 : IANIM
@ -80,7 +80,7 @@ struct ANIM : BigDNA
}; };
std::unique_ptr<IANIM> m_anim; std::unique_ptr<IANIM> m_anim;
void read(Athena::io::IStreamReader& reader) void read(athena::io::IStreamReader& reader)
{ {
atUint32 version = reader.readUint32Big(); atUint32 version = reader.readUint32Big();
switch (version) switch (version)
@ -94,12 +94,12 @@ struct ANIM : BigDNA
m_anim->read(reader); m_anim->read(reader);
break; break;
default: default:
Log.report(LogVisor::FatalError, "unrecognized ANIM version"); Log.report(logvisor::Fatal, "unrecognized ANIM version");
break; break;
} }
} }
void write(Athena::io::IStreamWriter& writer) const void write(athena::io::IStreamWriter& writer) const
{ {
writer.writeUint32Big(m_anim->m_version); writer.writeUint32Big(m_anim->m_version);
m_anim->write(writer); m_anim->write(writer);
@ -110,7 +110,7 @@ struct ANIM : BigDNA
return m_anim->binarySize(__isz + 4); return m_anim->binarySize(__isz + 4);
} }
void sendANIMToBlender(HECL::BlenderConnection::PyOutStream& os, const CINF& cinf, bool additive) const void sendANIMToBlender(hecl::BlenderConnection::PyOutStream& os, const CINF& cinf, bool additive) const
{ {
m_anim->sendANIMToBlender(os, cinf, additive); m_anim->sendANIMToBlender(os, cinf, additive);
} }

View File

@ -5,7 +5,7 @@ namespace DataSpec
namespace DNAMP3 namespace DNAMP3
{ {
void CHAR::AnimationInfo::EVNT::SFXEvent::read(Athena::io::IStreamReader& reader) void CHAR::AnimationInfo::EVNT::SFXEvent::read(athena::io::IStreamReader& reader)
{ {
EventBase::read(reader); EventBase::read(reader);
caudId.read(reader); caudId.read(reader);
@ -17,10 +17,10 @@ void CHAR::AnimationInfo::EVNT::SFXEvent::read(Athena::io::IStreamReader& reader
if (extraType == 1) if (extraType == 1)
extraFloat = reader.readFloatBig(); extraFloat = reader.readFloatBig();
else if (extraType == 2) else if (extraType == 2)
reader.seek(35, Athena::Current); reader.seek(35, athena::Current);
} }
void CHAR::AnimationInfo::EVNT::SFXEvent::write(Athena::io::IStreamWriter& writer) const void CHAR::AnimationInfo::EVNT::SFXEvent::write(athena::io::IStreamWriter& writer) const
{ {
EventBase::write(writer); EventBase::write(writer);
caudId.write(writer); caudId.write(writer);
@ -32,7 +32,7 @@ void CHAR::AnimationInfo::EVNT::SFXEvent::write(Athena::io::IStreamWriter& write
if (extraType == 1) if (extraType == 1)
writer.writeFloatBig(extraFloat); writer.writeFloatBig(extraFloat);
else if (extraType == 2) else if (extraType == 2)
writer.seek(35, Athena::Current); writer.seek(35, athena::Current);
} }
size_t CHAR::AnimationInfo::EVNT::SFXEvent::binarySize(size_t __isz) const size_t CHAR::AnimationInfo::EVNT::SFXEvent::binarySize(size_t __isz) const
@ -48,26 +48,24 @@ size_t CHAR::AnimationInfo::EVNT::SFXEvent::binarySize(size_t __isz) const
return __isz; return __isz;
} }
void CHAR::AnimationInfo::EVNT::SFXEvent::read(Athena::io::YAMLDocReader& reader) void CHAR::AnimationInfo::EVNT::SFXEvent::read(athena::io::YAMLDocReader& reader)
{ {
EventBase::read(reader); EventBase::read(reader);
reader.enumerate("caudId", caudId); reader.enumerate("caudId", caudId);
unk1 = reader.readUint32("unk1"); unk1 = reader.readUint32("unk1");
unk2 = reader.readUint32("unk2"); unk2 = reader.readUint32("unk2");
unk3 = reader.readUint32("unk3"); unk3 = reader.enumerate("unk3Vals", unk3Vals);
reader.enumerate("unk3Vals", unk3Vals, unk3);
extraType = reader.readUint32("extraType"); extraType = reader.readUint32("extraType");
if (extraType == 1) if (extraType == 1)
extraFloat = reader.readFloat("extraFloat"); extraFloat = reader.readFloat("extraFloat");
} }
void CHAR::AnimationInfo::EVNT::SFXEvent::write(Athena::io::YAMLDocWriter& writer) const void CHAR::AnimationInfo::EVNT::SFXEvent::write(athena::io::YAMLDocWriter& writer) const
{ {
EventBase::write(writer); EventBase::write(writer);
writer.enumerate("caudId", caudId); writer.enumerate("caudId", caudId);
writer.writeUint32("unk1", unk1); writer.writeUint32("unk1", unk1);
writer.writeUint32("unk2", unk2); writer.writeUint32("unk2", unk2);
writer.writeUint32("unk3", unk3);
writer.enumerate("unk3Vals", unk3Vals); writer.enumerate("unk3Vals", unk3Vals);
writer.writeUint32("extraType", extraType); writer.writeUint32("extraType", extraType);
if (extraType == 1) if (extraType == 1)
@ -76,10 +74,10 @@ void CHAR::AnimationInfo::EVNT::SFXEvent::write(Athena::io::YAMLDocWriter& write
const char* CHAR::AnimationInfo::EVNT::SFXEvent::DNAType() const char* CHAR::AnimationInfo::EVNT::SFXEvent::DNAType()
{ {
return "Retro::DNAMP3::CHAR::AnimationInfo::EVNT::SFXEvent"; return "urde::DNAMP3::CHAR::AnimationInfo::EVNT::SFXEvent";
} }
void CHAR::AnimationInfo::MetaAnimFactory::read(Athena::io::IStreamReader& reader) void CHAR::AnimationInfo::MetaAnimFactory::read(athena::io::IStreamReader& reader)
{ {
IMetaAnim::Type type(IMetaAnim::Type(reader.readUint32Big())); IMetaAnim::Type type(IMetaAnim::Type(reader.readUint32Big()));
switch (type) switch (type)
@ -110,7 +108,7 @@ void CHAR::AnimationInfo::MetaAnimFactory::read(Athena::io::IStreamReader& reade
} }
} }
void CHAR::AnimationInfo::MetaAnimFactory::write(Athena::io::IStreamWriter& writer) const void CHAR::AnimationInfo::MetaAnimFactory::write(athena::io::IStreamWriter& writer) const
{ {
if (!m_anim) if (!m_anim)
return; return;
@ -125,7 +123,7 @@ size_t CHAR::AnimationInfo::MetaAnimFactory::binarySize(size_t __isz) const
return m_anim->binarySize(__isz + 4); return m_anim->binarySize(__isz + 4);
} }
void CHAR::AnimationInfo::MetaAnimFactory::read(Athena::io::YAMLDocReader& reader) void CHAR::AnimationInfo::MetaAnimFactory::read(athena::io::YAMLDocReader& reader)
{ {
std::string type = reader.readString("type"); std::string type = reader.readString("type");
std::transform(type.begin(), type.end(), type.begin(), tolower); std::transform(type.begin(), type.end(), type.begin(), tolower);
@ -161,7 +159,7 @@ void CHAR::AnimationInfo::MetaAnimFactory::read(Athena::io::YAMLDocReader& reade
} }
void CHAR::AnimationInfo::MetaAnimFactory::write(Athena::io::YAMLDocWriter& writer) const void CHAR::AnimationInfo::MetaAnimFactory::write(athena::io::YAMLDocWriter& writer) const
{ {
if (!m_anim) if (!m_anim)
return; return;
@ -171,7 +169,7 @@ void CHAR::AnimationInfo::MetaAnimFactory::write(Athena::io::YAMLDocWriter& writ
const char* CHAR::AnimationInfo::MetaAnimFactory::DNAType() const char* CHAR::AnimationInfo::MetaAnimFactory::DNAType()
{ {
return "Retro::DNAMP3::CHAR::AnimationInfo::MetaAnimFactory"; return "urde::DNAMP3::CHAR::AnimationInfo::MetaAnimFactory";
} }
} }

View File

@ -308,34 +308,34 @@ struct CHAR : BigYAML
static bool Extract(const SpecBase& dataSpec, static bool Extract(const SpecBase& dataSpec,
PAKEntryReadStream& rs, PAKEntryReadStream& rs,
const HECL::ProjectPath& outPath, const hecl::ProjectPath& outPath,
PAKRouter<PAKBridge>& pakRouter, PAKRouter<PAKBridge>& pakRouter,
const PAK::Entry& entry, const PAK::Entry& entry,
bool force, bool force,
std::function<void(const HECL::SystemChar*)> fileChanged) std::function<void(const hecl::SystemChar*)> fileChanged)
{ {
HECL::ProjectPath yamlPath = outPath.getWithExtension(_S(".yaml")); hecl::ProjectPath yamlPath = outPath.getWithExtension(_S(".yaml"));
HECL::ProjectPath::Type yamlType = yamlPath.getPathType(); hecl::ProjectPath::Type yamlType = yamlPath.getPathType();
HECL::ProjectPath blendPath = outPath.getWithExtension(_S(".blend")); hecl::ProjectPath blendPath = outPath.getWithExtension(_S(".blend"));
HECL::ProjectPath::Type blendType = blendPath.getPathType(); hecl::ProjectPath::Type blendType = blendPath.getPathType();
if (force || if (force ||
yamlType == HECL::ProjectPath::Type::None || yamlType == hecl::ProjectPath::Type::None ||
blendType == HECL::ProjectPath::Type::None) blendType == hecl::ProjectPath::Type::None)
{ {
CHAR aChar; CHAR aChar;
aChar.read(rs); aChar.read(rs);
if (force || yamlType == HECL::ProjectPath::Type::None) if (force || yamlType == hecl::ProjectPath::Type::None)
{ {
FILE* fp = HECL::Fopen(yamlPath.getAbsolutePath().c_str(), _S("wb")); FILE* fp = hecl::Fopen(yamlPath.getAbsolutePath().c_str(), _S("wb"));
aChar.toYAMLFile(fp); aChar.toYAMLFile(fp);
fclose(fp); fclose(fp);
} }
if (force || blendType == HECL::ProjectPath::Type::None) if (force || blendType == hecl::ProjectPath::Type::None)
{ {
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection(); hecl::BlenderConnection& conn = hecl::BlenderConnection::SharedConnection();
DNAANCS::ReadANCSToBlender<PAKRouter<PAKBridge>, CHAR, MaterialSet, DNACMDL::SurfaceHeader_3, 4> DNAANCS::ReadANCSToBlender<PAKRouter<PAKBridge>, CHAR, MaterialSet, DNACMDL::SurfaceHeader_3, 4>
(conn, aChar, blendPath, pakRouter, entry, dataSpec, fileChanged, force); (conn, aChar, blendPath, pakRouter, entry, dataSpec, fileChanged, force);
} }

View File

@ -13,7 +13,7 @@ namespace DNAMP3
struct CINF : DNAMP2::CINF struct CINF : DNAMP2::CINF
{ {
Delete expl; Delete expl;
void sendCINFToBlender(HECL::BlenderConnection::PyOutStream& os, const UniqueID64& cinfId) const void sendCINFToBlender(hecl::BlenderConnection::PyOutStream& os, const UniqueID64& cinfId) const
{ {
os.format("arm = bpy.data.armatures.new('CINF_%016" PRIX64 "')\n" os.format("arm = bpy.data.armatures.new('CINF_%016" PRIX64 "')\n"
"arm_obj = bpy.data.objects.new(arm.name, arm)\n" "arm_obj = bpy.data.objects.new(arm.name, arm)\n"

View File

@ -17,11 +17,11 @@ struct CMDL
{ {
static bool Extract(const SpecBase& dataSpec, static bool Extract(const SpecBase& dataSpec,
PAKEntryReadStream& rs, PAKEntryReadStream& rs,
const HECL::ProjectPath& outPath, const hecl::ProjectPath& outPath,
PAKRouter<PAKBridge>& pakRouter, PAKRouter<PAKBridge>& pakRouter,
const PAK::Entry& entry, const PAK::Entry& entry,
bool, bool,
std::function<void(const HECL::SystemChar*)>) std::function<void(const hecl::SystemChar*)>)
{ {
/* Check for RigPair */ /* Check for RigPair */
const PAKRouter<PAKBridge>::RigPair* rp = pakRouter.lookupCMDLRigPair(entry.id); const PAKRouter<PAKBridge>::RigPair* rp = pakRouter.lookupCMDLRigPair(entry.id);
@ -37,8 +37,8 @@ struct CMDL
} }
/* Do extract */ /* Do extract */
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection(); hecl::BlenderConnection& conn = hecl::BlenderConnection::SharedConnection();
if (!conn.createBlend(outPath, HECL::BlenderConnection::BlendType::Mesh)) if (!conn.createBlend(outPath, hecl::BlenderConnection::BlendType::Mesh))
return false; return false;
DNACMDL::ReadCMDLToBlender<PAKRouter<PAKBridge>, MaterialSet, std::pair<CSKR*,CINF*>, DNACMDL::SurfaceHeader_3, 5> DNACMDL::ReadCMDLToBlender<PAKRouter<PAKBridge>, MaterialSet, std::pair<CSKR*,CINF*>, DNACMDL::SurfaceHeader_3, 5>
(conn, rs, pakRouter, entry, dataSpec, loadRp); (conn, rs, pakRouter, entry, dataSpec, loadRp);

View File

@ -1,6 +1,6 @@
#include "CMDLMaterials.hpp" #include "CMDLMaterials.hpp"
using Stream = HECL::BlenderConnection::PyOutStream; using Stream = hecl::BlenderConnection::PyOutStream;
namespace DataSpec namespace DataSpec
{ {
@ -108,7 +108,7 @@ void MaterialSet::ConstructMaterial(Stream& out,
" new_nodetree.links.new(kcolor_nodes[-1][1].outputs[0], final_node.inputs['Alpha'])\n"; " new_nodetree.links.new(kcolor_nodes[-1][1].outputs[0], final_node.inputs['Alpha'])\n";
} }
void Material::SectionPASS::constructNode(HECL::BlenderConnection::PyOutStream& out, void Material::SectionPASS::constructNode(hecl::BlenderConnection::PyOutStream& out,
const PAKRouter<PAKBridge>& pakRouter, const PAKRouter<PAKBridge>& pakRouter,
const PAK::Entry& entry, const PAK::Entry& entry,
const Material::ISection* prevSection, const Material::ISection* prevSection,
@ -121,16 +121,16 @@ void Material::SectionPASS::constructNode(HECL::BlenderConnection::PyOutStream&
if (txtrId) if (txtrId)
{ {
std::string texName = pakRouter.getBestEntryName(txtrId); std::string texName = pakRouter.getBestEntryName(txtrId);
const NOD::Node* node; const nod::Node* node;
const PAK::Entry* texEntry = pakRouter.lookupEntry(txtrId, &node); const PAK::Entry* texEntry = pakRouter.lookupEntry(txtrId, &node);
HECL::ProjectPath txtrPath = pakRouter.getWorking(texEntry); hecl::ProjectPath txtrPath = pakRouter.getWorking(texEntry);
if (txtrPath.getPathType() == HECL::ProjectPath::Type::None) if (txtrPath.getPathType() == hecl::ProjectPath::Type::None)
{ {
PAKEntryReadStream rs = texEntry->beginReadStream(*node); PAKEntryReadStream rs = texEntry->beginReadStream(*node);
TXTR::Extract(rs, txtrPath); TXTR::Extract(rs, txtrPath);
} }
HECL::SystemString resPath = pakRouter.getResourceRelativePath(entry, txtrId); hecl::SystemString resPath = pakRouter.getResourceRelativePath(entry, txtrId);
HECL::SystemUTF8View resPathView(resPath); hecl::SystemUTF8View resPathView(resPath);
out.format("if '%s' in bpy.data.textures:\n" out.format("if '%s' in bpy.data.textures:\n"
" image = bpy.data.images['%s']\n" " image = bpy.data.images['%s']\n"
" texture = bpy.data.textures[image.name]\n" " texture = bpy.data.textures[image.name]\n"
@ -258,7 +258,7 @@ void Material::SectionPASS::constructNode(HECL::BlenderConnection::PyOutStream&
out << "gridder.row_break(2)\n"; out << "gridder.row_break(2)\n";
} }
void Material::SectionCLR::constructNode(HECL::BlenderConnection::PyOutStream& out, void Material::SectionCLR::constructNode(hecl::BlenderConnection::PyOutStream& out,
const PAKRouter<PAKBridge>& pakRouter, const PAKRouter<PAKBridge>& pakRouter,
const PAK::Entry& entry, const PAK::Entry& entry,
const Material::ISection* prevSection, const Material::ISection* prevSection,
@ -278,7 +278,7 @@ void Material::SectionCLR::constructNode(HECL::BlenderConnection::PyOutStream& o
} }
} }
void Material::SectionINT::constructNode(HECL::BlenderConnection::PyOutStream& out, void Material::SectionINT::constructNode(hecl::BlenderConnection::PyOutStream& out,
const PAKRouter<PAKBridge>& pakRouter, const PAKRouter<PAKBridge>& pakRouter,
const PAK::Entry& entry, const PAK::Entry& entry,
const Material::ISection* prevSection, const Material::ISection* prevSection,

View File

@ -64,7 +64,7 @@ struct MaterialSet : BigDNA
INT = SBIG('INT ') INT = SBIG('INT ')
} m_type; } m_type;
ISection(Type type) : m_type(type) {} ISection(Type type) : m_type(type) {}
virtual void constructNode(HECL::BlenderConnection::PyOutStream& out, virtual void constructNode(hecl::BlenderConnection::PyOutStream& out,
const PAKRouter<PAKBridge>& pakRouter, const PAKRouter<PAKBridge>& pakRouter,
const PAK::Entry& entry, const PAK::Entry& entry,
const Material::ISection* prevSection, const Material::ISection* prevSection,
@ -115,7 +115,7 @@ struct MaterialSet : BigDNA
}; };
Vector<UVAnimation, DNA_COUNT(uvAnimSize != 0)> uvAnim; Vector<UVAnimation, DNA_COUNT(uvAnimSize != 0)> uvAnim;
void constructNode(HECL::BlenderConnection::PyOutStream& out, void constructNode(hecl::BlenderConnection::PyOutStream& out,
const PAKRouter<PAKBridge>& pakRouter, const PAKRouter<PAKBridge>& pakRouter,
const PAK::Entry& entry, const PAK::Entry& entry,
const Material::ISection* prevSection, const Material::ISection* prevSection,
@ -136,7 +136,7 @@ struct MaterialSet : BigDNA
DNAFourCC subtype; DNAFourCC subtype;
GX::Color color; GX::Color color;
void constructNode(HECL::BlenderConnection::PyOutStream& out, void constructNode(hecl::BlenderConnection::PyOutStream& out,
const PAKRouter<PAKBridge>& pakRouter, const PAKRouter<PAKBridge>& pakRouter,
const PAK::Entry& entry, const PAK::Entry& entry,
const Material::ISection* prevSection, const Material::ISection* prevSection,
@ -160,7 +160,7 @@ struct MaterialSet : BigDNA
DNAFourCC subtype; DNAFourCC subtype;
Value<atUint32> value; Value<atUint32> value;
void constructNode(HECL::BlenderConnection::PyOutStream& out, void constructNode(hecl::BlenderConnection::PyOutStream& out,
const PAKRouter<PAKBridge>& pakRouter, const PAKRouter<PAKBridge>& pakRouter,
const PAK::Entry& entry, const PAK::Entry& entry,
const Material::ISection* prevSection, const Material::ISection* prevSection,
@ -173,7 +173,7 @@ struct MaterialSet : BigDNA
{ {
Delete expl; Delete expl;
std::unique_ptr<ISection> section; std::unique_ptr<ISection> section;
void read(Athena::io::IStreamReader& reader) void read(athena::io::IStreamReader& reader)
{ {
DNAFourCC type; DNAFourCC type;
type.read(reader); type.read(reader);
@ -196,7 +196,7 @@ struct MaterialSet : BigDNA
break; break;
} }
} }
void write(Athena::io::IStreamWriter& writer) const void write(athena::io::IStreamWriter& writer) const
{ {
if (!section) if (!section)
return; return;
@ -209,7 +209,7 @@ struct MaterialSet : BigDNA
} }
}; };
std::vector<SectionFactory> sections; std::vector<SectionFactory> sections;
void read(Athena::io::IStreamReader& reader) void read(athena::io::IStreamReader& reader)
{ {
header.read(reader); header.read(reader);
sections.clear(); sections.clear();
@ -219,7 +219,7 @@ struct MaterialSet : BigDNA
} while (sections.back().section); } while (sections.back().section);
sections.pop_back(); sections.pop_back();
} }
void write(Athena::io::IStreamWriter& writer) const void write(athena::io::IStreamWriter& writer) const
{ {
header.write(writer); header.write(writer);
for (const SectionFactory& section : sections) for (const SectionFactory& section : sections)
@ -236,14 +236,14 @@ struct MaterialSet : BigDNA
}; };
Vector<Material, DNA_COUNT(materialCount)> materials; Vector<Material, DNA_COUNT(materialCount)> materials;
static void RegisterMaterialProps(HECL::BlenderConnection::PyOutStream& out); static void RegisterMaterialProps(hecl::BlenderConnection::PyOutStream& out);
static void ConstructMaterial(HECL::BlenderConnection::PyOutStream& out, static void ConstructMaterial(hecl::BlenderConnection::PyOutStream& out,
const PAKRouter<PAKBridge>& pakRouter, const PAKRouter<PAKBridge>& pakRouter,
const PAK::Entry& entry, const PAK::Entry& entry,
const MaterialSet::Material& material, const MaterialSet::Material& material,
unsigned groupIdx, unsigned matIdx); unsigned groupIdx, unsigned matIdx);
void readToBlender(HECL::BlenderConnection::PyOutStream& os, void readToBlender(hecl::BlenderConnection::PyOutStream& os,
const PAKRouter<PAKBridge>& pakRouter, const PAKRouter<PAKBridge>& pakRouter,
const PAKRouter<PAKBridge>::EntryType& entry, const PAKRouter<PAKBridge>::EntryType& entry,
unsigned setIdx) unsigned setIdx)

View File

@ -41,7 +41,7 @@ struct CSKR : BigDNA
return mtxBindings.at(idx).mtxs; return mtxBindings.at(idx).mtxs;
} }
void weightVertex(HECL::BlenderConnection::PyOutStream& os, const CINF& cinf, atInt16 skinIdx) const void weightVertex(hecl::BlenderConnection::PyOutStream& os, const CINF& cinf, atInt16 skinIdx) const
{ {
if (skinIdx < 0) if (skinIdx < 0)
return; return;

View File

@ -14,7 +14,7 @@ namespace DataSpec
{ {
namespace DNAMP3 namespace DNAMP3
{ {
LogVisor::LogModule Log("Retro::DNAMP3"); logvisor::Module Log("urde::DNAMP3");
static bool GetNoShare(const std::string& name) static bool GetNoShare(const std::string& name)
{ {
@ -25,16 +25,16 @@ static bool GetNoShare(const std::string& name)
return true; return true;
} }
PAKBridge::PAKBridge(HECL::Database::Project& project, PAKBridge::PAKBridge(hecl::Database::Project& project,
const NOD::Node& node, const nod::Node& node,
bool doExtract) bool doExtract)
: m_project(project), m_node(node), m_pak(GetNoShare(node.getName())), m_doExtract(doExtract) : m_project(project), m_node(node), m_pak(GetNoShare(node.getName())), m_doExtract(doExtract)
{ {
NOD::AthenaPartReadStream rs(node.beginReadStream()); nod::AthenaPartReadStream rs(node.beginReadStream());
m_pak.read(rs); m_pak.read(rs);
/* Append Level String */ /* Append Level String */
std::set<HECL::SystemString, HECL::CaseInsensitiveCompare> uniq; std::set<hecl::SystemString, hecl::CaseInsensitiveCompare> uniq;
for (PAK::Entry& entry : m_pak.m_entries) for (PAK::Entry& entry : m_pak.m_entries)
{ {
if (entry.type == FOURCC('MLVL')) if (entry.type == FOURCC('MLVL'))
@ -53,7 +53,7 @@ PAKBridge::PAKBridge(HECL::Database::Project& project,
} }
} }
bool comma = false; bool comma = false;
for (const HECL::SystemString& str : uniq) for (const hecl::SystemString& str : uniq)
{ {
if (comma) if (comma)
m_levelString += _S(", "); m_levelString += _S(", ");
@ -62,12 +62,12 @@ PAKBridge::PAKBridge(HECL::Database::Project& project,
} }
} }
static HECL::SystemString LayerName(const std::string& name) static hecl::SystemString LayerName(const std::string& name)
{ {
#if HECL_UCS2 #if HECL_UCS2
HECL::SystemString ret = HECL::UTF8ToWide(name); hecl::SystemString ret = hecl::UTF8ToWide(name);
#else #else
HECL::SystemString ret = name; hecl::SystemString ret = name;
#endif #endif
for (auto& ch : ret) for (auto& ch : ret)
if (ch == _S('/') || ch == _S('\\')) if (ch == _S('/') || ch == _S('\\'))
@ -90,7 +90,7 @@ void PAKBridge::build()
mlvl.read(rs); mlvl.read(rs);
} }
#if HECL_UCS2 #if HECL_UCS2
level.name = HECL::UTF8ToWide(m_pak.bestEntryName(entry)); level.name = hecl::UTF8ToWide(m_pak.bestEntryName(entry));
#else #else
level.name = m_pak.bestEntryName(entry); level.name = m_pak.bestEntryName(entry);
#endif #endif
@ -103,7 +103,7 @@ void PAKBridge::build()
if (worldMapEnt) if (worldMapEnt)
{ {
PAKEntryReadStream rs = worldMapEnt->beginReadStream(m_node); PAKEntryReadStream rs = worldMapEnt->beginReadStream(m_node);
rs.seek(8, Athena::Current); rs.seek(8, athena::Current);
atUint32 areaCount = rs.readUint32Big(); atUint32 areaCount = rs.readUint32Big();
mapw.reserve(areaCount); mapw.reserve(areaCount);
for (atUint32 i=0 ; i<areaCount ; ++i) for (atUint32 i=0 ; i<areaCount ; ++i)
@ -138,21 +138,21 @@ void PAKBridge::build()
if (areaDeps.name.empty()) if (areaDeps.name.empty())
{ {
#if HECL_UCS2 #if HECL_UCS2
areaDeps.name = HECL::UTF8ToWide(area.internalAreaName); areaDeps.name = hecl::UTF8ToWide(area.internalAreaName);
#else #else
areaDeps.name = area.internalAreaName; areaDeps.name = area.internalAreaName;
#endif #endif
if (areaDeps.name.empty()) if (areaDeps.name.empty())
{ {
#if HECL_UCS2 #if HECL_UCS2
areaDeps.name = _S("MREA_") + HECL::UTF8ToWide(area.areaMREAId.toString()); areaDeps.name = _S("MREA_") + hecl::UTF8ToWide(area.areaMREAId.toString());
#else #else
areaDeps.name = "MREA_" + area.areaMREAId.toString(); areaDeps.name = "MREA_" + area.areaMREAId.toString();
#endif #endif
} }
} }
HECL::SystemChar num[16]; hecl::SystemChar num[16];
HECL::SNPrintf(num, 16, _S("%02u "), ai); hecl::SNPrintf(num, 16, _S("%02u "), ai);
areaDeps.name = num + areaDeps.name; areaDeps.name = num + areaDeps.name;
const MLVL::LayerFlags& layerFlags = *layerFlagsIt++; const MLVL::LayerFlags& layerFlags = *layerFlagsIt++;
@ -173,7 +173,7 @@ void PAKBridge::build()
while (layer.name.size() && isspace(layer.name.back())) while (layer.name.size() && isspace(layer.name.back()))
layer.name.pop_back(); layer.name.pop_back();
#endif #endif
HECL::SNPrintf(num, 16, layer.active ? _S("%02ua ") : _S("%02u "), l-1); hecl::SNPrintf(num, 16, layer.active ? _S("%02ua ") : _S("%02u "), l-1);
layer.name = num + layer.name; layer.name = num + layer.name;
} }
} }

View File

@ -9,31 +9,31 @@ namespace DataSpec
namespace DNAMP3 namespace DNAMP3
{ {
extern LogVisor::LogModule Log; extern logvisor::Module Log;
/* MP3-specific, one-shot PAK traversal/extraction class */ /* MP3-specific, one-shot PAK traversal/extraction class */
class PAKBridge class PAKBridge
{ {
HECL::Database::Project& m_project; hecl::Database::Project& m_project;
const NOD::Node& m_node; const nod::Node& m_node;
PAK m_pak; PAK m_pak;
public: public:
bool m_doExtract; bool m_doExtract;
using Level = Level<UniqueID64>; using Level = Level<UniqueID64>;
std::unordered_map<UniqueID64, Level> m_levelDeps; std::unordered_map<UniqueID64, Level> m_levelDeps;
HECL::SystemString m_levelString; hecl::SystemString m_levelString;
PAKBridge(HECL::Database::Project& project, PAKBridge(hecl::Database::Project& project,
const NOD::Node& node, const nod::Node& node,
bool doExtract=true); bool doExtract=true);
void build(); void build();
static ResExtractor<PAKBridge> LookupExtractor(const PAK::Entry& entry); static ResExtractor<PAKBridge> LookupExtractor(const PAK::Entry& entry);
inline const std::string& getName() const {return m_node.getName();} inline const std::string& getName() const {return m_node.getName();}
inline HECL::SystemString getLevelString() const {return m_levelString;} inline hecl::SystemString getLevelString() const {return m_levelString;}
using PAKType = PAK; using PAKType = PAK;
inline const PAKType& getPAK() const {return m_pak;} inline const PAKType& getPAK() const {return m_pak;}
inline const NOD::Node& getNode() const {return m_node;} inline const nod::Node& getNode() const {return m_node;}
void addCMDLRigPairs(PAKRouter<PAKBridge>& pakRouter, void addCMDLRigPairs(PAKRouter<PAKBridge>& pakRouter,
std::unordered_map<UniqueID64, std::pair<UniqueID64, UniqueID64>>& addTo) const; std::unordered_map<UniqueID64, std::pair<UniqueID64, UniqueID64>>& addTo) const;

View File

@ -13,15 +13,15 @@ struct MAPA : DNAMAPA::MAPA
{ {
static bool Extract(const SpecBase& dataSpec, static bool Extract(const SpecBase& dataSpec,
PAKEntryReadStream& rs, PAKEntryReadStream& rs,
const HECL::ProjectPath& outPath, const hecl::ProjectPath& outPath,
PAKRouter<PAKBridge>& pakRouter, PAKRouter<PAKBridge>& pakRouter,
const PAK::Entry& entry, const PAK::Entry& entry,
bool force, bool force,
std::function<void(const HECL::SystemChar*)> fileChanged) std::function<void(const hecl::SystemChar*)> fileChanged)
{ {
MAPA mapa; MAPA mapa;
mapa.read(rs); mapa.read(rs);
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection(); hecl::BlenderConnection& conn = hecl::BlenderConnection::SharedConnection();
return DNAMAPA::ReadMAPAToBlender(conn, mapa, outPath, pakRouter, entry, force); return DNAMAPA::ReadMAPAToBlender(conn, mapa, outPath, pakRouter, entry, force);
} }
}; };

View File

@ -80,18 +80,18 @@ struct MLVL : BigYAML
static bool Extract(const SpecBase& dataSpec, static bool Extract(const SpecBase& dataSpec,
PAKEntryReadStream& rs, PAKEntryReadStream& rs,
const HECL::ProjectPath& outPath, const hecl::ProjectPath& outPath,
PAKRouter<PAKBridge>& pakRouter, PAKRouter<PAKBridge>& pakRouter,
const PAK::Entry& entry, const PAK::Entry& entry,
bool force, bool force,
std::function<void(const HECL::SystemChar*)> fileChanged) std::function<void(const hecl::SystemChar*)> fileChanged)
{ {
MLVL mlvl; MLVL mlvl;
mlvl.read(rs); mlvl.read(rs);
FILE* fp = HECL::Fopen(outPath.getWithExtension(_S(".yaml"), true).getAbsolutePath().c_str(), _S("wb")); FILE* fp = hecl::Fopen(outPath.getWithExtension(_S(".yaml"), true).getAbsolutePath().c_str(), _S("wb"));
mlvl.toYAMLFile(fp); mlvl.toYAMLFile(fp);
fclose(fp); fclose(fp);
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection(); hecl::BlenderConnection& conn = hecl::BlenderConnection::SharedConnection();
return DNAMLVL::ReadMLVLToBlender(conn, mlvl, outPath, pakRouter, return DNAMLVL::ReadMLVLToBlender(conn, mlvl, outPath, pakRouter,
entry, force, fileChanged); entry, force, fileChanged);
} }

View File

@ -1,4 +1,4 @@
#include <Athena/FileWriter.hpp> #include <athena/FileWriter.hpp>
#include "MREA.hpp" #include "MREA.hpp"
#include "../DNAMP2/DeafBabe.hpp" #include "../DNAMP2/DeafBabe.hpp"
#include "../DNACommon/BabeDead.hpp" #include "../DNACommon/BabeDead.hpp"
@ -8,7 +8,7 @@ namespace DataSpec
namespace DNAMP3 namespace DNAMP3
{ {
MREA::StreamReader::StreamReader(Athena::io::IStreamReader& source, MREA::StreamReader::StreamReader(athena::io::IStreamReader& source,
atUint32 blkCount, atUint32 secIdxCount) atUint32 blkCount, atUint32 secIdxCount)
: DNAMP2::MREA::StreamReader(source) : DNAMP2::MREA::StreamReader(source)
{ {
@ -35,7 +35,7 @@ MREA::StreamReader::StreamReader(Athena::io::IStreamReader& source,
nextBlock(); nextBlock();
} }
void MREA::StreamReader::writeSecIdxs(Athena::io::IStreamWriter& writer) const void MREA::StreamReader::writeSecIdxs(athena::io::IStreamWriter& writer) const
{ {
for (const std::pair<DNAFourCC, atUint32>& idx : m_secIdxs) for (const std::pair<DNAFourCC, atUint32>& idx : m_secIdxs)
{ {
@ -44,12 +44,12 @@ void MREA::StreamReader::writeSecIdxs(Athena::io::IStreamWriter& writer) const
} }
} }
void MREA::ReadBabeDeadToBlender_3(HECL::BlenderConnection::PyOutStream& os, void MREA::ReadBabeDeadToBlender_3(hecl::BlenderConnection::PyOutStream& os,
Athena::io::IStreamReader& rs) athena::io::IStreamReader& rs)
{ {
atUint32 bdMagic = rs.readUint32Big(); atUint32 bdMagic = rs.readUint32Big();
if (bdMagic != 0xBABEDEAD) if (bdMagic != 0xBABEDEAD)
Log.report(LogVisor::FatalError, "invalid BABEDEAD magic"); Log.report(logvisor::Fatal, "invalid BABEDEAD magic");
os << "bpy.context.scene.render.engine = 'CYCLES'\n" os << "bpy.context.scene.render.engine = 'CYCLES'\n"
"bpy.context.scene.world.use_nodes = True\n" "bpy.context.scene.world.use_nodes = True\n"
"bpy.context.scene.render.engine = 'BLENDER_GAME'\n" "bpy.context.scene.render.engine = 'BLENDER_GAME'\n"
@ -68,18 +68,18 @@ void MREA::ReadBabeDeadToBlender_3(HECL::BlenderConnection::PyOutStream& os,
bool MREA::Extract(const SpecBase& dataSpec, bool MREA::Extract(const SpecBase& dataSpec,
PAKEntryReadStream& rs, PAKEntryReadStream& rs,
const HECL::ProjectPath& outPath, const hecl::ProjectPath& outPath,
PAKRouter<PAKBridge>& pakRouter, PAKRouter<PAKBridge>& pakRouter,
const PAK::Entry& entry, const PAK::Entry& entry,
bool force, bool force,
std::function<void(const HECL::SystemChar*)>) std::function<void(const hecl::SystemChar*)>)
{ {
using RigPair = std::pair<CSKR*, CINF*>; using RigPair = std::pair<CSKR*, CINF*>;
RigPair dummy(nullptr, nullptr); RigPair dummy(nullptr, nullptr);
/* Rename MREA for consistency */ /* Rename MREA for consistency */
HECL::ProjectPath mreaPath(outPath.getParentPath(), _S("!area.blend")); hecl::ProjectPath mreaPath(outPath.getParentPath(), _S("!area.blend"));
if (!force && mreaPath.getPathType() == HECL::ProjectPath::Type::File) if (!force && mreaPath.getPathType() == hecl::ProjectPath::Type::File)
return true; return true;
/* Do extract */ /* Do extract */
@ -89,7 +89,7 @@ bool MREA::Extract(const SpecBase& dataSpec,
/* MREA decompression stream */ /* MREA decompression stream */
StreamReader drs(rs, head.compressedBlockCount, head.secIndexCount); StreamReader drs(rs, head.compressedBlockCount, head.secIndexCount);
Athena::io::FileWriter mreaDecompOut(pakRouter.getCooked(&entry).getWithExtension(_S(".decomp")).getAbsolutePath()); athena::io::FileWriter mreaDecompOut(pakRouter.getCooked(&entry).getWithExtension(_S(".decomp")).getAbsolutePath());
head.write(mreaDecompOut); head.write(mreaDecompOut);
mreaDecompOut.seekAlign32(); mreaDecompOut.seekAlign32();
drs.writeDecompInfos(mreaDecompOut); drs.writeDecompInfos(mreaDecompOut);
@ -99,16 +99,16 @@ bool MREA::Extract(const SpecBase& dataSpec,
atUint64 decompLen = drs.length(); atUint64 decompLen = drs.length();
mreaDecompOut.writeBytes(drs.readBytes(decompLen).get(), decompLen); mreaDecompOut.writeBytes(drs.readBytes(decompLen).get(), decompLen);
mreaDecompOut.close(); mreaDecompOut.close();
drs.seek(0, Athena::Begin); drs.seek(0, athena::Begin);
/* Start up blender connection */ /* Start up blender connection */
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection(); hecl::BlenderConnection& conn = hecl::BlenderConnection::SharedConnection();
if (!conn.createBlend(mreaPath, HECL::BlenderConnection::BlendType::Area)) if (!conn.createBlend(mreaPath, hecl::BlenderConnection::BlendType::Area))
return false; return false;
/* Open Py Stream and read sections */ /* Open Py Stream and read sections */
HECL::BlenderConnection::PyOutStream os = conn.beginPythonOut(true); hecl::BlenderConnection::PyOutStream os = conn.beginPythonOut(true);
os.format("import bpy\n" os.format("import bpy\n"
"import bmesh\n" "import bmesh\n"
"from mathutils import Vector\n" "from mathutils import Vector\n"
@ -133,7 +133,7 @@ bool MREA::Extract(const SpecBase& dataSpec,
atUint64 secStart = drs.position(); atUint64 secStart = drs.position();
matSet.read(drs); matSet.read(drs);
matSet.readToBlender(os, pakRouter, entry, 0); matSet.readToBlender(os, pakRouter, entry, 0);
drs.seek(secStart + head.secSizes[0], Athena::Begin); drs.seek(secStart + head.secSizes[0], athena::Begin);
std::vector<DNACMDL::VertexAttributes> vertAttribs; std::vector<DNACMDL::VertexAttributes> vertAttribs;
DNACMDL::GetVertexAttributes(matSet, vertAttribs); DNACMDL::GetVertexAttributes(matSet, vertAttribs);
@ -147,16 +147,16 @@ bool MREA::Extract(const SpecBase& dataSpec,
MeshHeader mHeader; MeshHeader mHeader;
secStart = drs.position(); secStart = drs.position();
mHeader.read(drs); mHeader.read(drs);
drs.seek(secStart + head.secSizes[curSec++], Athena::Begin); drs.seek(secStart + head.secSizes[curSec++], athena::Begin);
/* Surface count from here */ /* Surface count from here */
secStart = drs.position(); secStart = drs.position();
surfaceCounts.push_back(drs.readUint32Big()); surfaceCounts.push_back(drs.readUint32Big());
drs.seek(secStart + head.secSizes[curSec++], Athena::Begin); drs.seek(secStart + head.secSizes[curSec++], athena::Begin);
/* Seek through AROT-relation sections */ /* Seek through AROT-relation sections */
drs.seek(head.secSizes[curSec++], Athena::Current); drs.seek(head.secSizes[curSec++], athena::Current);
drs.seek(head.secSizes[curSec++], Athena::Current); drs.seek(head.secSizes[curSec++], athena::Current);
} }
/* Skip though WOBJs */ /* Skip though WOBJs */
@ -167,14 +167,14 @@ bool MREA::Extract(const SpecBase& dataSpec,
/* Skip AROT */ /* Skip AROT */
if (secIdxIt->first == FOURCC('ROCT')) if (secIdxIt->first == FOURCC('ROCT'))
{ {
drs.seek(head.secSizes[curSec++], Athena::Current); drs.seek(head.secSizes[curSec++], athena::Current);
++secIdxIt; ++secIdxIt;
} }
/* Skip AABB */ /* Skip AABB */
if (secIdxIt->first == FOURCC('AABB')) if (secIdxIt->first == FOURCC('AABB'))
{ {
drs.seek(head.secSizes[curSec++], Athena::Current); drs.seek(head.secSizes[curSec++], athena::Current);
++secIdxIt; ++secIdxIt;
} }
@ -193,7 +193,7 @@ bool MREA::Extract(const SpecBase& dataSpec,
/* Skip DEPS */ /* Skip DEPS */
if (secIdxIt->first == FOURCC('DEPS')) if (secIdxIt->first == FOURCC('DEPS'))
{ {
drs.seek(head.secSizes[curSec++], Athena::Current); drs.seek(head.secSizes[curSec++], athena::Current);
++secIdxIt; ++secIdxIt;
} }
@ -201,14 +201,14 @@ bool MREA::Extract(const SpecBase& dataSpec,
if (secIdxIt->first == FOURCC('SOBJ')) if (secIdxIt->first == FOURCC('SOBJ'))
{ {
for (atUint32 l=0 ; l<head.sclyLayerCount ; ++l) for (atUint32 l=0 ; l<head.sclyLayerCount ; ++l)
drs.seek(head.secSizes[curSec++], Athena::Current); drs.seek(head.secSizes[curSec++], athena::Current);
++secIdxIt; ++secIdxIt;
} }
/* Skip SGEN */ /* Skip SGEN */
if (secIdxIt->first == FOURCC('SGEN')) if (secIdxIt->first == FOURCC('SGEN'))
{ {
drs.seek(head.secSizes[curSec++], Athena::Current); drs.seek(head.secSizes[curSec++], athena::Current);
++secIdxIt; ++secIdxIt;
} }
@ -220,7 +220,7 @@ bool MREA::Extract(const SpecBase& dataSpec,
collision.read(drs); collision.read(drs);
DNAMP2::DeafBabe::BlenderInit(os); DNAMP2::DeafBabe::BlenderInit(os);
collision.sendToBlender(os); collision.sendToBlender(os);
drs.seek(secStart + head.secSizes[curSec++], Athena::Begin); drs.seek(secStart + head.secSizes[curSec++], athena::Begin);
++secIdxIt; ++secIdxIt;
} }
@ -229,7 +229,7 @@ bool MREA::Extract(const SpecBase& dataSpec,
{ {
secStart = drs.position(); secStart = drs.position();
ReadBabeDeadToBlender_3(os, drs); ReadBabeDeadToBlender_3(os, drs);
drs.seek(secStart + head.secSizes[curSec++], Athena::Begin); drs.seek(secStart + head.secSizes[curSec++], athena::Begin);
++secIdxIt; ++secIdxIt;
} }
@ -258,7 +258,7 @@ bool MREA::ExtractLayerDeps(PAKEntryReadStream& rs, PAKBridge::Level::Area& area
{ {
if (idx.first == FOURCC('DEPS')) if (idx.first == FOURCC('DEPS'))
{ {
drs.seek(head.getSecOffset(idx.second), Athena::Begin); drs.seek(head.getSecOffset(idx.second), athena::Begin);
DEPS deps; DEPS deps;
deps.read(drs); deps.read(drs);

View File

@ -16,13 +16,13 @@ struct MREA
struct StreamReader : DNAMP2::MREA::StreamReader struct StreamReader : DNAMP2::MREA::StreamReader
{ {
std::vector<std::pair<DNAFourCC, atUint32>> m_secIdxs; std::vector<std::pair<DNAFourCC, atUint32>> m_secIdxs;
StreamReader(Athena::io::IStreamReader& source, StreamReader(athena::io::IStreamReader& source,
atUint32 blkCount, atUint32 secIdxCount); atUint32 blkCount, atUint32 secIdxCount);
std::vector<std::pair<DNAFourCC, atUint32>>::const_iterator beginSecIdxs() std::vector<std::pair<DNAFourCC, atUint32>>::const_iterator beginSecIdxs()
{ {
return m_secIdxs.begin(); return m_secIdxs.begin();
} }
void writeSecIdxs(Athena::io::IStreamWriter& writer) const; void writeSecIdxs(athena::io::IStreamWriter& writer) const;
}; };
struct Header : BigDNA struct Header : BigDNA
@ -36,7 +36,7 @@ struct MREA
Value<atUint32> secCount; Value<atUint32> secCount;
Value<atUint32> compressedBlockCount; Value<atUint32> compressedBlockCount;
Value<atUint32> secIndexCount; Value<atUint32> secIndexCount;
Seek<20, Athena::Current> align1; Seek<20, athena::Current> align1;
Vector<atUint32, DNA_COUNT(secCount)> secSizes; Vector<atUint32, DNA_COUNT(secCount)> secSizes;
atUint32 getSecOffset(atUint32 idx) const atUint32 getSecOffset(atUint32 idx) const
@ -111,16 +111,16 @@ struct MREA
Value<atUint32> unk13; Value<atUint32> unk13;
}; };
static void ReadBabeDeadToBlender_3(HECL::BlenderConnection::PyOutStream& os, static void ReadBabeDeadToBlender_3(hecl::BlenderConnection::PyOutStream& os,
Athena::io::IStreamReader& rs); athena::io::IStreamReader& rs);
static bool Extract(const SpecBase& dataSpec, static bool Extract(const SpecBase& dataSpec,
PAKEntryReadStream& rs, PAKEntryReadStream& rs,
const HECL::ProjectPath& outPath, const hecl::ProjectPath& outPath,
PAKRouter<PAKBridge>& pakRouter, PAKRouter<PAKBridge>& pakRouter,
const PAK::Entry& entry, const PAK::Entry& entry,
bool, bool,
std::function<void(const HECL::SystemChar*)>); std::function<void(const hecl::SystemChar*)>);
static bool ExtractLayerDeps(PAKEntryReadStream& rs, PAKBridge::Level::Area& areaOut); static bool ExtractLayerDeps(PAKEntryReadStream& rs, PAKBridge::Level::Area& areaOut);
}; };

View File

@ -6,19 +6,19 @@ namespace DataSpec
namespace DNAMP3 namespace DNAMP3
{ {
const HECL::FourCC CMPD("CMPD"); const hecl::FourCC CMPD("CMPD");
void PAK::read(Athena::io::IStreamReader& reader) void PAK::read(athena::io::IStreamReader& reader)
{ {
m_header.read(reader); m_header.read(reader);
if (m_header.version != 2) if (m_header.version != 2)
Log.report(LogVisor::FatalError, "unexpected PAK magic"); Log.report(logvisor::Fatal, "unexpected PAK magic");
reader.seek(8, Athena::Current); reader.seek(8, athena::Current);
atUint32 strgSz = reader.readUint32Big(); atUint32 strgSz = reader.readUint32Big();
reader.seek(4, Athena::Current); reader.seek(4, athena::Current);
atUint32 rshdSz = reader.readUint32Big(); atUint32 rshdSz = reader.readUint32Big();
reader.seek(44, Athena::Current); reader.seek(44, athena::Current);
atUint32 dataOffset = 128 + strgSz + rshdSz; atUint32 dataOffset = 128 + strgSz + rshdSz;
atUint64 strgBase = reader.position(); atUint64 strgBase = reader.position();
@ -30,7 +30,7 @@ void PAK::read(Athena::io::IStreamReader& reader)
m_nameEntries.emplace_back(); m_nameEntries.emplace_back();
m_nameEntries.back().read(reader); m_nameEntries.back().read(reader);
} }
reader.seek(strgBase + strgSz, Athena::Begin); reader.seek(strgBase + strgSz, athena::Begin);
atUint32 count = reader.readUint32Big(); atUint32 count = reader.readUint32Big();
m_entries.clear(); m_entries.clear();
@ -67,7 +67,7 @@ void PAK::read(Athena::io::IStreamReader& reader)
} }
} }
} }
void PAK::write(Athena::io::IStreamWriter& writer) const void PAK::write(athena::io::IStreamWriter& writer) const
{ {
m_header.write(writer); m_header.write(writer);
@ -93,12 +93,12 @@ void PAK::write(Athena::io::IStreamWriter& writer) const
atUint32 dataPad = ((dataSz + 63) & ~63) - dataSz; atUint32 dataPad = ((dataSz + 63) & ~63) - dataSz;
dataSz += dataPad; dataSz += dataPad;
writer.writeUint32Big(dataSz); writer.writeUint32Big(dataSz);
writer.seek(36, Athena::Current); writer.seek(36, athena::Current);
writer.writeUint32Big((atUint32)m_nameEntries.size()); writer.writeUint32Big((atUint32)m_nameEntries.size());
for (const NameEntry& entry : m_nameEntries) for (const NameEntry& entry : m_nameEntries)
entry.write(writer); entry.write(writer);
writer.seek(strgPad, Athena::Current); writer.seek(strgPad, athena::Current);
writer.writeUint32Big((atUint32)m_entries.size()); writer.writeUint32Big((atUint32)m_entries.size());
for (const Entry& entry : m_entries) for (const Entry& entry : m_entries)
@ -107,7 +107,7 @@ void PAK::write(Athena::io::IStreamWriter& writer) const
copy.offset -= dataOffset; copy.offset -= dataOffset;
copy.write(writer); copy.write(writer);
} }
writer.seek(rshdPad, Athena::Current); writer.seek(rshdPad, athena::Current);
} }
size_t PAK::binarySize(size_t __isz) const size_t PAK::binarySize(size_t __isz) const
{ {
@ -136,23 +136,23 @@ size_t PAK::binarySize(size_t __isz) const
return __isz; return __isz;
} }
std::unique_ptr<atUint8[]> PAK::Entry::getBuffer(const NOD::Node& pak, atUint64& szOut) const std::unique_ptr<atUint8[]> PAK::Entry::getBuffer(const nod::Node& pak, atUint64& szOut) const
{ {
if (compressed) if (compressed)
{ {
std::unique_ptr<NOD::IPartReadStream> strm = pak.beginReadStream(offset); std::unique_ptr<nod::IPartReadStream> strm = pak.beginReadStream(offset);
struct struct
{ {
HECL::FourCC magic; hecl::FourCC magic;
atUint32 blockCount; atUint32 blockCount;
} head; } head;
strm->read(&head, 8); strm->read(&head, 8);
if (head.magic != CMPD) if (head.magic != CMPD)
{ {
Log.report(LogVisor::Error, "invalid CMPD block"); Log.report(logvisor::Error, "invalid CMPD block");
return std::unique_ptr<atUint8[]>(); return std::unique_ptr<atUint8[]>();
} }
head.blockCount = HECL::SBig(head.blockCount); head.blockCount = hecl::SBig(head.blockCount);
struct Block struct Block
{ {
@ -167,8 +167,8 @@ std::unique_ptr<atUint8[]> PAK::Entry::getBuffer(const NOD::Node& pak, atUint64&
for (atUint32 b=0 ; b<head.blockCount ; ++b) for (atUint32 b=0 ; b<head.blockCount ; ++b)
{ {
Block& block = blocks[b]; Block& block = blocks[b];
block.compSz = HECL::SBig(block.compSz) & 0xffffff; block.compSz = hecl::SBig(block.compSz) & 0xffffff;
block.decompSz = HECL::SBig(block.decompSz); block.decompSz = hecl::SBig(block.decompSz);
if (block.compSz > maxBlockSz) if (block.compSz > maxBlockSz)
maxBlockSz = block.compSz; maxBlockSz = block.compSz;
totalDecompSz += block.decompSz; totalDecompSz += block.decompSz;
@ -192,7 +192,7 @@ std::unique_ptr<atUint8[]> PAK::Entry::getBuffer(const NOD::Node& pak, atUint64&
atUint32 rem = block.decompSz; atUint32 rem = block.decompSz;
while (rem) while (rem)
{ {
atUint16 chunkSz = HECL::SBig(*(atUint16*)compBufCur); atUint16 chunkSz = hecl::SBig(*(atUint16*)compBufCur);
compBufCur += 2; compBufCur += 2;
lzo_uint dsz = rem; lzo_uint dsz = rem;
lzo1x_decompress(compBufCur, chunkSz, bufCur, &dsz, nullptr); lzo1x_decompress(compBufCur, chunkSz, bufCur, &dsz, nullptr);

View File

@ -4,7 +4,7 @@
#include <unordered_map> #include <unordered_map>
#include <lzo/lzo1x.h> #include <lzo/lzo1x.h>
#include <NOD/DiscBase.hpp> #include <nod/DiscBase.hpp>
#include "../DNACommon/PAK.hpp" #include "../DNACommon/PAK.hpp"
namespace DataSpec namespace DataSpec
@ -12,7 +12,7 @@ namespace DataSpec
namespace DNAMP3 namespace DNAMP3
{ {
extern const HECL::FourCC CMPD; extern const hecl::FourCC CMPD;
struct PAK : BigDNA struct PAK : BigDNA
{ {
@ -25,7 +25,7 @@ struct PAK : BigDNA
Value<atUint32> version; Value<atUint32> version;
Value<atUint32> headSz; Value<atUint32> headSz;
Value<atUint8> md5sum[16]; Value<atUint8> md5sum[16];
Seek<40, Athena::Current> seek; Seek<40, athena::Current> seek;
} m_header; } m_header;
struct NameEntry : BigDNA struct NameEntry : BigDNA
@ -47,8 +47,8 @@ struct PAK : BigDNA
UniqueResult unique; UniqueResult unique;
std::string name; std::string name;
std::unique_ptr<atUint8[]> getBuffer(const NOD::Node& pak, atUint64& szOut) const; std::unique_ptr<atUint8[]> getBuffer(const nod::Node& pak, atUint64& szOut) const;
inline PAKEntryReadStream beginReadStream(const NOD::Node& pak, atUint64 off=0) const inline PAKEntryReadStream beginReadStream(const nod::Node& pak, atUint64 off=0) const
{ {
atUint64 sz; atUint64 sz;
std::unique_ptr<atUint8[]> buf = getBuffer(pak, sz); std::unique_ptr<atUint8[]> buf = getBuffer(pak, sz);

View File

@ -6,7 +6,7 @@ namespace DataSpec
namespace DNAMP3 namespace DNAMP3
{ {
void STRG::_read(Athena::io::IStreamReader& reader) void STRG::_read(athena::io::IStreamReader& reader)
{ {
atUint32 langCount = reader.readUint32Big(); atUint32 langCount = reader.readUint32Big();
atUint32 strCount = reader.readUint32Big(); atUint32 strCount = reader.readUint32Big();
@ -24,8 +24,8 @@ void STRG::_read(Athena::io::IStreamReader& reader)
}* nameIndex = (NameIdxEntry*)nameTableBuf.get(); }* nameIndex = (NameIdxEntry*)nameTableBuf.get();
for (atUint32 n=0 ; n<nameCount ; ++n) for (atUint32 n=0 ; n<nameCount ; ++n)
{ {
const char* name = (char*)(nameTableBuf.get() + HECL::SBig(nameIndex[n].nameOff)); const char* name = (char*)(nameTableBuf.get() + hecl::SBig(nameIndex[n].nameOff));
names[name] = HECL::SBig(nameIndex[n].strIdx); names[name] = hecl::SBig(nameIndex[n].strIdx);
} }
} }
@ -53,7 +53,7 @@ void STRG::_read(Athena::io::IStreamReader& reader)
std::vector<std::string> strs; std::vector<std::string> strs;
for (atUint32 s=0 ; s<strCount ; ++s) for (atUint32 s=0 ; s<strCount ; ++s)
{ {
reader.seek(strBase + strOffs[l*strCount+s], Athena::Begin); reader.seek(strBase + strOffs[l*strCount+s], athena::Begin);
atUint32 len = reader.readUint32Big(); atUint32 len = reader.readUint32Big();
strs.emplace_back(reader.readString(len)); strs.emplace_back(reader.readString(len));
} }
@ -66,28 +66,28 @@ void STRG::_read(Athena::io::IStreamReader& reader)
langMap.emplace(item.first, &item.second); langMap.emplace(item.first, &item.second);
} }
void STRG::read(Athena::io::IStreamReader& reader) void STRG::read(athena::io::IStreamReader& reader)
{ {
atUint32 magic = reader.readUint32Big(); atUint32 magic = reader.readUint32Big();
if (magic != 0x87654321) if (magic != 0x87654321)
{ {
Log.report(LogVisor::Error, "invalid STRG magic"); Log.report(logvisor::Error, "invalid STRG magic");
return; return;
} }
atUint32 version = reader.readUint32Big(); atUint32 version = reader.readUint32Big();
if (version != 3) if (version != 3)
{ {
Log.report(LogVisor::Error, "invalid STRG version"); Log.report(logvisor::Error, "invalid STRG version");
return; return;
} }
_read(reader); _read(reader);
} }
void STRG::read(Athena::io::YAMLDocReader& reader) void STRG::read(athena::io::YAMLDocReader& reader)
{ {
const Athena::io::YAMLNode* root = reader.getRootNode(); const athena::io::YAMLNode* root = reader.getRootNode();
/* Validate Pass */ /* Validate Pass */
if (root->m_type == YAML_MAPPING_NODE) if (root->m_type == YAML_MAPPING_NODE)
@ -98,12 +98,12 @@ void STRG::read(Athena::io::YAMLDocReader& reader)
continue; continue;
if (lang.first.size() != 4) if (lang.first.size() != 4)
{ {
Log.report(LogVisor::Warning, "STRG language string '%s' must be exactly 4 characters; skipping", lang.first.c_str()); Log.report(logvisor::Warning, "STRG language string '%s' must be exactly 4 characters; skipping", lang.first.c_str());
return; return;
} }
if (lang.second->m_type != YAML_SEQUENCE_NODE) if (lang.second->m_type != YAML_SEQUENCE_NODE)
{ {
Log.report(LogVisor::Warning, Log.report(logvisor::Warning,
"STRG language string '%s' must contain a sequence; skipping", lang.first.c_str()); "STRG language string '%s' must contain a sequence; skipping", lang.first.c_str());
return; return;
} }
@ -111,7 +111,7 @@ void STRG::read(Athena::io::YAMLDocReader& reader)
{ {
if (str->m_type != YAML_SCALAR_NODE) if (str->m_type != YAML_SCALAR_NODE)
{ {
Log.report(LogVisor::Warning, "STRG language '%s' must contain all scalars; skipping", lang.first.c_str()); Log.report(logvisor::Warning, "STRG language '%s' must contain all scalars; skipping", lang.first.c_str());
return; return;
} }
} }
@ -119,16 +119,16 @@ void STRG::read(Athena::io::YAMLDocReader& reader)
} }
else else
{ {
Log.report(LogVisor::Warning, "STRG must have a mapping root node; skipping"); Log.report(logvisor::Warning, "STRG must have a mapping root node; skipping");
return; return;
} }
const Athena::io::YAMLNode* nameYAML = root->findMapChild("names"); const athena::io::YAMLNode* nameYAML = root->findMapChild("names");
names.clear(); names.clear();
if (nameYAML && nameYAML->m_type == YAML_MAPPING_NODE) if (nameYAML && nameYAML->m_type == YAML_MAPPING_NODE)
for (const auto& item : nameYAML->m_mapChildren) for (const auto& item : nameYAML->m_mapChildren)
if (item.second->m_type == YAML_SCALAR_NODE) if (item.second->m_type == YAML_SCALAR_NODE)
names[item.first] = Athena::io::NodeToVal<atInt32>(item.second.get()); names[item.first] = athena::io::NodeToVal<atInt32>(item.second.get());
langs.clear(); langs.clear();
langs.reserve(root->m_mapChildren.size()); langs.reserve(root->m_mapChildren.size());
@ -151,7 +151,7 @@ void STRG::read(Athena::io::YAMLDocReader& reader)
langMap.emplace(item.first, &item.second); langMap.emplace(item.first, &item.second);
} }
void STRG::write(Athena::io::IStreamWriter& writer) const void STRG::write(athena::io::IStreamWriter& writer) const
{ {
writer.writeUint32Big(0x87654321); writer.writeUint32Big(0x87654321);
writer.writeUint32Big(3); writer.writeUint32Big(3);
@ -243,7 +243,7 @@ size_t STRG::binarySize(size_t __isz) const
return __isz; return __isz;
} }
void STRG::write(Athena::io::YAMLDocWriter& writer) const void STRG::write(athena::io::YAMLDocWriter& writer) const
{ {
for (const auto& item : langs) for (const auto& item : langs)
{ {
@ -268,7 +268,7 @@ void STRG::write(Athena::io::YAMLDocWriter& writer) const
const char* STRG::DNAType() const char* STRG::DNAType()
{ {
return "Retro::DNAMP3::STRG"; return "urde::DNAMP3::STRG";
} }
} }

View File

@ -14,7 +14,7 @@ struct STRG : ISTRG
{ {
DECL_YAML DECL_YAML
Delete expl; Delete expl;
void _read(Athena::io::IStreamReader& reader); void _read(athena::io::IStreamReader& reader);
std::vector<std::pair<DNAFourCC, std::vector<std::string>>> langs; std::vector<std::pair<DNAFourCC, std::vector<std::string>>> langs;
std::unordered_map<DNAFourCC, std::vector<std::string>*> langMap; std::unordered_map<DNAFourCC, std::vector<std::string>*> langMap;
std::map<std::string, int32_t> names; std::map<std::string, int32_t> names;
@ -49,37 +49,37 @@ struct STRG : ISTRG
{ {
auto search = langMap.find(lang); auto search = langMap.find(lang);
if (search != langMap.end()) if (search != langMap.end())
return HECL::UTF8ToWide(search->second->at(idx)); return hecl::UTF8ToWide(search->second->at(idx));
return std::wstring(); return std::wstring();
} }
inline HECL::SystemString getSystemString(const FourCC& lang, size_t idx) const inline hecl::SystemString getSystemString(const FourCC& lang, size_t idx) const
{ {
auto search = langMap.find(lang); auto search = langMap.find(lang);
if (search != langMap.end()) if (search != langMap.end())
#if HECL_UCS2 #if HECL_UCS2
return HECL::UTF8ToWide(search->second->at(idx)); return hecl::UTF8ToWide(search->second->at(idx));
#else #else
return search->second->at(idx); return search->second->at(idx);
#endif #endif
return HECL::SystemString(); return hecl::SystemString();
} }
static bool Extract(PAKEntryReadStream& rs, const HECL::ProjectPath& outPath) static bool Extract(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath)
{ {
std::unique_ptr<ISTRG> strg = LoadSTRG(rs); std::unique_ptr<ISTRG> strg = LoadSTRG(rs);
FILE* fp = HECL::Fopen(outPath.getAbsolutePath().c_str(), _S("wb")); FILE* fp = hecl::Fopen(outPath.getAbsolutePath().c_str(), _S("wb"));
strg->toYAMLFile(fp); strg->toYAMLFile(fp);
fclose(fp); fclose(fp);
return true; return true;
} }
static bool Cook(const HECL::ProjectPath& inPath, const HECL::ProjectPath& outPath) static bool Cook(const hecl::ProjectPath& inPath, const hecl::ProjectPath& outPath)
{ {
STRG strg; STRG strg;
FILE* fp = HECL::Fopen(inPath.getAbsolutePath().c_str(), _S("rb")); FILE* fp = hecl::Fopen(inPath.getAbsolutePath().c_str(), _S("rb"));
strg.fromYAMLFile(fp); strg.fromYAMLFile(fp);
fclose(fp); fclose(fp);
Athena::io::FileWriter ws(outPath.getAbsolutePath()); athena::io::FileWriter ws(outPath.getAbsolutePath());
strg.write(ws); strg.write(ws);
return true; return true;
} }

View File

@ -13,9 +13,9 @@
namespace DataSpec namespace DataSpec
{ {
static LogVisor::LogModule Log("Retro::SpecBase"); static logvisor::Module Log("urde::SpecBase");
static const HECL::SystemChar* MomErr[] = static const hecl::SystemChar* MomErr[] =
{ {
_S("Your metroid is in another castle"), _S("Your metroid is in another castle"),
_S("HECL is experiencing a PTSD attack"), _S("HECL is experiencing a PTSD attack"),
@ -31,13 +31,13 @@ static const HECL::SystemChar* MomErr[] =
}; };
constexpr uint32_t MomErrCount = 11; constexpr uint32_t MomErrCount = 11;
SpecBase::SpecBase(HECL::Database::Project& project) SpecBase::SpecBase(hecl::Database::Project& project)
: m_project(project), : m_project(project),
m_masterShader(project.getProjectWorkingPath(), ".hecl/RetroMasterShader.blend") {} m_masterShader(project.getProjectWorkingPath(), ".hecl/RetroMasterShader.blend") {}
bool SpecBase::canExtract(const ExtractPassInfo& info, std::vector<ExtractReport>& reps) bool SpecBase::canExtract(const ExtractPassInfo& info, std::vector<ExtractReport>& reps)
{ {
m_disc = NOD::OpenDiscFromImage(info.srcpath.c_str(), m_isWii); m_disc = nod::OpenDiscFromImage(info.srcpath.c_str(), m_isWii);
if (!m_disc) if (!m_disc)
return false; return false;
const char* gameID = m_disc->getHeader().m_gameID; const char* gameID = m_disc->getHeader().m_gameID;
@ -51,7 +51,7 @@ bool SpecBase::canExtract(const ExtractPassInfo& info, std::vector<ExtractReport
#else #else
int r = rand_r(&t) % MomErrCount; int r = rand_r(&t) % MomErrCount;
#endif #endif
Log.report(LogVisor::FatalError, MomErr[r]); Log.report(logvisor::Fatal, MomErr[r]);
} }
m_standalone = true; m_standalone = true;
@ -62,11 +62,11 @@ bool SpecBase::canExtract(const ExtractPassInfo& info, std::vector<ExtractReport
return false; return false;
char region = m_disc->getHeader().m_gameID[3]; char region = m_disc->getHeader().m_gameID[3];
static const HECL::SystemString regNONE = _S(""); static const hecl::SystemString regNONE = _S("");
static const HECL::SystemString regE = _S("NTSC"); static const hecl::SystemString regE = _S("NTSC");
static const HECL::SystemString regJ = _S("NTSC-J"); static const hecl::SystemString regJ = _S("NTSC-J");
static const HECL::SystemString regP = _S("PAL"); static const hecl::SystemString regP = _S("PAL");
const HECL::SystemString* regstr = &regNONE; const hecl::SystemString* regstr = &regNONE;
switch (region) switch (region)
{ {
case 'E': case 'E':
@ -90,13 +90,13 @@ void SpecBase::doExtract(const ExtractPassInfo& info, FProgress progress)
{ {
DataSpec::g_curSpec = this; DataSpec::g_curSpec = this;
if (!Blender::BuildMasterShader(m_masterShader)) if (!Blender::BuildMasterShader(m_masterShader))
Log.report(LogVisor::FatalError, "Unable to build master shader blend"); Log.report(logvisor::Fatal, "Unable to build master shader blend");
if (m_isWii) if (m_isWii)
{ {
/* Extract update partition for repacking later */ /* Extract update partition for repacking later */
const HECL::SystemString& target = m_project.getProjectWorkingPath().getAbsolutePath(); const hecl::SystemString& target = m_project.getProjectWorkingPath().getAbsolutePath();
NOD::Partition* update = m_disc->getUpdatePartition(); nod::Partition* update = m_disc->getUpdatePartition();
NOD::ExtractionContext ctx = {true, info.force, nullptr}; nod::ExtractionContext ctx = {true, info.force, nullptr};
if (update) if (update)
{ {
@ -104,7 +104,7 @@ void SpecBase::doExtract(const ExtractPassInfo& info, FProgress progress)
progress(_S("Update Partition"), _S(""), 0, 0.0); progress(_S("Update Partition"), _S(""), 0, 0.0);
const atUint64 nodeCount = update->getFSTRoot().rawEnd() - update->getFSTRoot().rawBegin(); const atUint64 nodeCount = update->getFSTRoot().rawEnd() - update->getFSTRoot().rawBegin();
ctx.progressCB = [&](const std::string& name) { ctx.progressCB = [&](const std::string& name) {
HECL::SystemStringView nameView(name); hecl::SystemStringView nameView(name);
progress(_S("Update Partition"), nameView.sys_str().c_str(), 0, idx / (float)nodeCount); progress(_S("Update Partition"), nameView.sys_str().c_str(), 0, idx / (float)nodeCount);
idx++; idx++;
}; };
@ -116,10 +116,10 @@ void SpecBase::doExtract(const ExtractPassInfo& info, FProgress progress)
if (!m_standalone) if (!m_standalone)
{ {
progress(_S("Trilogy Files"), _S(""), 1, 0.0); progress(_S("Trilogy Files"), _S(""), 1, 0.0);
NOD::Partition* data = m_disc->getDataPartition(); nod::Partition* data = m_disc->getDataPartition();
const NOD::Node& root = data->getFSTRoot(); const nod::Node& root = data->getFSTRoot();
for (const NOD::Node& child : root) for (const nod::Node& child : root)
if (child.getKind() == NOD::Node::Kind::File) if (child.getKind() == nod::Node::Kind::File)
child.extractToDirectory(target, ctx); child.extractToDirectory(target, ctx);
progress(_S("Trilogy Files"), _S(""), 1, 1.0); progress(_S("Trilogy Files"), _S(""), 1, 1.0);
} }
@ -127,25 +127,25 @@ void SpecBase::doExtract(const ExtractPassInfo& info, FProgress progress)
extractFromDisc(*m_disc, info.force, progress); extractFromDisc(*m_disc, info.force, progress);
} }
bool SpecBase::canCook(const HECL::ProjectPath& path) bool SpecBase::canCook(const hecl::ProjectPath& path)
{ {
if (!checkPathPrefix(path)) if (!checkPathPrefix(path))
return false; return false;
if (HECL::IsPathBlend(path)) if (hecl::IsPathBlend(path))
{ {
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection(); hecl::BlenderConnection& conn = hecl::BlenderConnection::SharedConnection();
if (!conn.openBlend(path)) if (!conn.openBlend(path))
return false; return false;
if (conn.getBlendType() != HECL::BlenderConnection::BlendType::None) if (conn.getBlendType() != hecl::BlenderConnection::BlendType::None)
return true; return true;
} }
else if (HECL::IsPathPNG(path)) else if (hecl::IsPathPNG(path))
{ {
return true; return true;
} }
else if (HECL::IsPathYAML(path)) else if (hecl::IsPathYAML(path))
{ {
FILE* fp = HECL::Fopen(path.getAbsolutePath().c_str(), _S("r")); FILE* fp = hecl::Fopen(path.getAbsolutePath().c_str(), _S("r"));
bool retval = validateYAMLDNAType(fp); bool retval = validateYAMLDNAType(fp);
fclose(fp); fclose(fp);
return retval; return retval;
@ -153,41 +153,41 @@ bool SpecBase::canCook(const HECL::ProjectPath& path)
return false; return false;
} }
void SpecBase::doCook(const HECL::ProjectPath& path, const HECL::ProjectPath& cookedPath, void SpecBase::doCook(const hecl::ProjectPath& path, const hecl::ProjectPath& cookedPath,
bool fast, FCookProgress progress) bool fast, FCookProgress progress)
{ {
DataSpec::g_curSpec = this; DataSpec::g_curSpec = this;
if (HECL::IsPathBlend(path)) if (hecl::IsPathBlend(path))
{ {
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection(); hecl::BlenderConnection& conn = hecl::BlenderConnection::SharedConnection();
if (!conn.openBlend(path)) if (!conn.openBlend(path))
return; return;
switch (conn.getBlendType()) switch (conn.getBlendType())
{ {
case HECL::BlenderConnection::BlendType::Mesh: case hecl::BlenderConnection::BlendType::Mesh:
{ {
HECL::BlenderConnection::DataStream ds = conn.beginData(); hecl::BlenderConnection::DataStream ds = conn.beginData();
cookMesh(cookedPath, path, ds, fast, progress); cookMesh(cookedPath, path, ds, fast, progress);
break; break;
} }
case HECL::BlenderConnection::BlendType::Actor: case hecl::BlenderConnection::BlendType::Actor:
{ {
HECL::BlenderConnection::DataStream ds = conn.beginData(); hecl::BlenderConnection::DataStream ds = conn.beginData();
cookActor(cookedPath, path, ds, fast, progress); cookActor(cookedPath, path, ds, fast, progress);
break; break;
} }
case HECL::BlenderConnection::BlendType::Area: case hecl::BlenderConnection::BlendType::Area:
{ {
HECL::BlenderConnection::DataStream ds = conn.beginData(); hecl::BlenderConnection::DataStream ds = conn.beginData();
cookArea(cookedPath, path, ds, fast, progress); cookArea(cookedPath, path, ds, fast, progress);
break; break;
} }
default: break; default: break;
} }
} }
else if (HECL::IsPathYAML(path)) else if (hecl::IsPathYAML(path))
{ {
FILE* fp = HECL::Fopen(path.getAbsolutePath().c_str(), _S("r")); FILE* fp = hecl::Fopen(path.getAbsolutePath().c_str(), _S("r"));
cookYAML(cookedPath, path, fp, progress); cookYAML(cookedPath, path, fp, progress);
} }
} }
@ -198,7 +198,7 @@ bool SpecBase::canPackage(const PackagePassInfo& info)
} }
void SpecBase::gatherDependencies(const PackagePassInfo& info, void SpecBase::gatherDependencies(const PackagePassInfo& info,
std::unordered_set<HECL::ProjectPath>& implicitsOut) std::unordered_set<hecl::ProjectPath>& implicitsOut)
{ {
} }

View File

@ -3,71 +3,71 @@
#include <functional> #include <functional>
#include <HECL/Database.hpp> #include <hecl/Database.hpp>
#include <NOD/NOD.hpp> #include <nod/nod.hpp>
#include "BlenderConnection.hpp" #include "BlenderConnection.hpp"
namespace DataSpec namespace DataSpec
{ {
struct SpecBase : HECL::Database::IDataSpec struct SpecBase : hecl::Database::IDataSpec
{ {
/* HECL Adaptors */ /* HECL Adaptors */
bool canExtract(const ExtractPassInfo& info, std::vector<ExtractReport>& reps); bool canExtract(const ExtractPassInfo& info, std::vector<ExtractReport>& reps);
void doExtract(const ExtractPassInfo& info, FProgress progress); void doExtract(const ExtractPassInfo& info, FProgress progress);
bool canCook(const HECL::ProjectPath& path); bool canCook(const hecl::ProjectPath& path);
void doCook(const HECL::ProjectPath& path, const HECL::ProjectPath& cookedPath, bool fast, FCookProgress progress); void doCook(const hecl::ProjectPath& path, const hecl::ProjectPath& cookedPath, bool fast, FCookProgress progress);
bool canPackage(const PackagePassInfo& info); bool canPackage(const PackagePassInfo& info);
void gatherDependencies(const PackagePassInfo& info, void gatherDependencies(const PackagePassInfo& info,
std::unordered_set<HECL::ProjectPath>& implicitsOut); std::unordered_set<hecl::ProjectPath>& implicitsOut);
void doPackage(const PackagePassInfo& info); void doPackage(const PackagePassInfo& info);
/* Extract handlers */ /* Extract handlers */
virtual bool checkStandaloneID(const char* id) const=0; virtual bool checkStandaloneID(const char* id) const=0;
virtual bool checkFromStandaloneDisc(NOD::DiscBase& disc, virtual bool checkFromStandaloneDisc(nod::DiscBase& disc,
const HECL::SystemString& regstr, const hecl::SystemString& regstr,
const std::vector<HECL::SystemString>& args, const std::vector<hecl::SystemString>& args,
std::vector<ExtractReport>& reps)=0; std::vector<ExtractReport>& reps)=0;
virtual bool checkFromTrilogyDisc(NOD::DiscBase& disc, virtual bool checkFromTrilogyDisc(nod::DiscBase& disc,
const HECL::SystemString& regstr, const hecl::SystemString& regstr,
const std::vector<HECL::SystemString>& args, const std::vector<hecl::SystemString>& args,
std::vector<ExtractReport>& reps)=0; std::vector<ExtractReport>& reps)=0;
virtual bool extractFromDisc(NOD::DiscBase& disc, bool force, virtual bool extractFromDisc(nod::DiscBase& disc, bool force,
FProgress progress)=0; FProgress progress)=0;
/* Basic path check (game directory matching) */ /* Basic path check (game directory matching) */
virtual bool checkPathPrefix(const HECL::ProjectPath& path)=0; virtual bool checkPathPrefix(const hecl::ProjectPath& path)=0;
/* Pre-cook handlers */ /* Pre-cook handlers */
virtual bool validateYAMLDNAType(FILE* fp) const=0; virtual bool validateYAMLDNAType(FILE* fp) const=0;
/* Cook handlers */ /* Cook handlers */
using BlendStream = HECL::BlenderConnection::DataStream; using BlendStream = hecl::BlenderConnection::DataStream;
using Mesh = BlendStream::Mesh; using Mesh = BlendStream::Mesh;
using Actor = BlendStream::Actor; using Actor = BlendStream::Actor;
virtual void cookMesh(const HECL::ProjectPath& out, const HECL::ProjectPath& in, BlendStream& ds, bool fast, FCookProgress progress) const=0; virtual void cookMesh(const hecl::ProjectPath& out, const hecl::ProjectPath& in, BlendStream& ds, bool fast, FCookProgress progress) const=0;
virtual void cookActor(const HECL::ProjectPath& out, const HECL::ProjectPath& in, BlendStream& ds, bool fast, FCookProgress progress) const=0; virtual void cookActor(const hecl::ProjectPath& out, const hecl::ProjectPath& in, BlendStream& ds, bool fast, FCookProgress progress) const=0;
virtual void cookArea(const HECL::ProjectPath& out, const HECL::ProjectPath& in, BlendStream& ds, bool fast, FCookProgress progress) const=0; virtual void cookArea(const hecl::ProjectPath& out, const hecl::ProjectPath& in, BlendStream& ds, bool fast, FCookProgress progress) const=0;
virtual void cookYAML(const HECL::ProjectPath& out, const HECL::ProjectPath& in, FILE* fin, FCookProgress progress) const=0; virtual void cookYAML(const hecl::ProjectPath& out, const hecl::ProjectPath& in, FILE* fin, FCookProgress progress) const=0;
const HECL::ProjectPath& getMasterShaderPath() const {return m_masterShader;} const hecl::ProjectPath& getMasterShaderPath() const {return m_masterShader;}
/* Support functions for resolving paths from IDs */ /* Support functions for resolving paths from IDs */
virtual HECL::ProjectPath getWorking(class UniqueID32&) {return HECL::ProjectPath();} virtual hecl::ProjectPath getWorking(class UniqueID32&) {return hecl::ProjectPath();}
virtual HECL::ProjectPath getWorking(class UniqueID64&) {return HECL::ProjectPath();} virtual hecl::ProjectPath getWorking(class UniqueID64&) {return hecl::ProjectPath();}
/* Project accessor */ /* Project accessor */
HECL::Database::Project& getProject() {return m_project;} hecl::Database::Project& getProject() {return m_project;}
SpecBase(HECL::Database::Project& project); SpecBase(hecl::Database::Project& project);
protected: protected:
HECL::Database::Project& m_project; hecl::Database::Project& m_project;
HECL::ProjectPath m_masterShader; hecl::ProjectPath m_masterShader;
private: private:
std::unique_ptr<NOD::DiscBase> m_disc; std::unique_ptr<nod::DiscBase> m_disc;
bool m_isWii; bool m_isWii;
bool m_standalone; bool m_standalone;
}; };

View File

@ -13,8 +13,8 @@
namespace DataSpec namespace DataSpec
{ {
static LogVisor::LogModule Log("Retro::SpecMP1"); static logvisor::Module Log("urde::SpecMP1");
extern HECL::Database::DataSpecEntry SpecEntMP1; extern hecl::Database::DataSpecEntry SpecEntMP1;
struct SpecMP1 : SpecBase struct SpecMP1 : SpecBase
{ {
@ -25,27 +25,27 @@ struct SpecMP1 : SpecBase
return false; return false;
} }
std::vector<const NOD::Node*> m_nonPaks; std::vector<const nod::Node*> m_nonPaks;
std::vector<DNAMP1::PAKBridge> m_paks; std::vector<DNAMP1::PAKBridge> m_paks;
std::map<std::string, DNAMP1::PAKBridge*, HECL::CaseInsensitiveCompare> m_orderedPaks; std::map<std::string, DNAMP1::PAKBridge*, hecl::CaseInsensitiveCompare> m_orderedPaks;
HECL::ProjectPath m_workPath; hecl::ProjectPath m_workPath;
HECL::ProjectPath m_cookPath; hecl::ProjectPath m_cookPath;
PAKRouter<DNAMP1::PAKBridge> m_pakRouter; PAKRouter<DNAMP1::PAKBridge> m_pakRouter;
SpecMP1(HECL::Database::Project& project) SpecMP1(hecl::Database::Project& project)
: SpecBase(project), : SpecBase(project),
m_workPath(project.getProjectWorkingPath(), _S("MP1")), m_workPath(project.getProjectWorkingPath(), _S("MP1")),
m_cookPath(project.getProjectCookedPath(SpecEntMP1), _S("MP1")), m_cookPath(project.getProjectCookedPath(SpecEntMP1), _S("MP1")),
m_pakRouter(*this, m_workPath, m_cookPath) {} m_pakRouter(*this, m_workPath, m_cookPath) {}
void buildPaks(NOD::Node& root, void buildPaks(nod::Node& root,
const std::vector<HECL::SystemString>& args, const std::vector<hecl::SystemString>& args,
ExtractReport& rep) ExtractReport& rep)
{ {
m_nonPaks.clear(); m_nonPaks.clear();
m_paks.clear(); m_paks.clear();
for (const NOD::Node& child : root) for (const nod::Node& child : root)
{ {
bool isPak = false; bool isPak = false;
const std::string& name = child.getName(); const std::string& name = child.getName();
@ -67,8 +67,8 @@ struct SpecMP1 : SpecBase
good = false; good = false;
if (!lowerName.compare(0, 7, "metroid")) if (!lowerName.compare(0, 7, "metroid"))
{ {
HECL::SystemChar idxChar = lowerName[7]; hecl::SystemChar idxChar = lowerName[7];
for (const HECL::SystemString& arg : args) for (const hecl::SystemString& arg : args)
{ {
if (arg.size() == 1 && iswdigit(arg[0])) if (arg.size() == 1 && iswdigit(arg[0]))
if (arg[0] == idxChar) if (arg[0] == idxChar)
@ -80,10 +80,10 @@ struct SpecMP1 : SpecBase
if (!good) if (!good)
{ {
for (const HECL::SystemString& arg : args) for (const hecl::SystemString& arg : args)
{ {
#if HECL_UCS2 #if HECL_UCS2
std::string lowerArg = HECL::WideToUTF8(arg); std::string lowerArg = hecl::WideToUTF8(arg);
#else #else
std::string lowerArg = arg; std::string lowerArg = arg;
#endif #endif
@ -116,18 +116,18 @@ struct SpecMP1 : SpecBase
continue; continue;
rep.childOpts.emplace_back(); rep.childOpts.emplace_back();
ExtractReport& childRep = rep.childOpts.back(); ExtractReport& childRep = rep.childOpts.back();
HECL::SystemStringView nameView(item.first); hecl::SystemStringView nameView(item.first);
childRep.name = nameView; childRep.name = nameView;
childRep.desc = item.second->getLevelString(); childRep.desc = item.second->getLevelString();
} }
} }
bool checkFromStandaloneDisc(NOD::DiscBase& disc, bool checkFromStandaloneDisc(nod::DiscBase& disc,
const HECL::SystemString& regstr, const hecl::SystemString& regstr,
const std::vector<HECL::SystemString>& args, const std::vector<hecl::SystemString>& args,
std::vector<ExtractReport>& reps) std::vector<ExtractReport>& reps)
{ {
NOD::Partition* partition = disc.getDataPartition(); nod::Partition* partition = disc.getDataPartition();
std::unique_ptr<uint8_t[]> dolBuf = partition->getDOLBuf(); std::unique_ptr<uint8_t[]> dolBuf = partition->getDOLBuf();
const char* buildInfo = (char*)memmem(dolBuf.get(), partition->getDOLSize(), "MetroidBuildInfo", 16) + 19; const char* buildInfo = (char*)memmem(dolBuf.get(), partition->getDOLSize(), "MetroidBuildInfo", 16) + 19;
@ -142,40 +142,40 @@ struct SpecMP1 : SpecBase
if (buildInfo) if (buildInfo)
{ {
std::string buildStr(buildInfo); std::string buildStr(buildInfo);
HECL::SystemStringView buildView(buildStr); hecl::SystemStringView buildView(buildStr);
rep.desc += _S(" (") + buildView + _S(")"); rep.desc += _S(" (") + buildView + _S(")");
} }
/* Iterate PAKs and build level options */ /* Iterate PAKs and build level options */
NOD::Node& root = partition->getFSTRoot(); nod::Node& root = partition->getFSTRoot();
buildPaks(root, args, rep); buildPaks(root, args, rep);
return true; return true;
} }
bool checkFromTrilogyDisc(NOD::DiscBase& disc, bool checkFromTrilogyDisc(nod::DiscBase& disc,
const HECL::SystemString& regstr, const hecl::SystemString& regstr,
const std::vector<HECL::SystemString>& args, const std::vector<hecl::SystemString>& args,
std::vector<ExtractReport>& reps) std::vector<ExtractReport>& reps)
{ {
std::vector<HECL::SystemString> mp1args; std::vector<hecl::SystemString> mp1args;
bool doExtract = false; bool doExtract = false;
if (args.size()) if (args.size())
{ {
/* Needs filter */ /* Needs filter */
for (const HECL::SystemString& arg : args) for (const hecl::SystemString& arg : args)
{ {
HECL::SystemString lowerArg = arg; hecl::SystemString lowerArg = arg;
HECL::ToLower(lowerArg); hecl::ToLower(lowerArg);
if (!lowerArg.compare(0, 3, _S("mp1"))) if (!lowerArg.compare(0, 3, _S("mp1")))
{ {
doExtract = true; doExtract = true;
mp1args.reserve(args.size()); mp1args.reserve(args.size());
size_t slashPos = arg.find(_S('/')); size_t slashPos = arg.find(_S('/'));
if (slashPos == HECL::SystemString::npos) if (slashPos == hecl::SystemString::npos)
slashPos = arg.find(_S('\\')); slashPos = arg.find(_S('\\'));
if (slashPos != HECL::SystemString::npos) if (slashPos != hecl::SystemString::npos)
mp1args.emplace_back(HECL::SystemString(arg.begin() + slashPos + 1, arg.end())); mp1args.emplace_back(hecl::SystemString(arg.begin() + slashPos + 1, arg.end()));
} }
} }
} }
@ -185,9 +185,9 @@ struct SpecMP1 : SpecBase
if (!doExtract) if (!doExtract)
return false; return false;
NOD::Partition* partition = disc.getDataPartition(); nod::Partition* partition = disc.getDataPartition();
NOD::Node& root = partition->getFSTRoot(); nod::Node& root = partition->getFSTRoot();
NOD::Node::DirectoryIterator dolIt = root.find("rs5mp1_p.dol"); nod::Node::DirectoryIterator dolIt = root.find("rs5mp1_p.dol");
if (dolIt == root.end()) if (dolIt == root.end())
return false; return false;
@ -202,12 +202,12 @@ struct SpecMP1 : SpecBase
if (buildInfo) if (buildInfo)
{ {
std::string buildStr(buildInfo); std::string buildStr(buildInfo);
HECL::SystemStringView buildView(buildStr); hecl::SystemStringView buildView(buildStr);
rep.desc += _S(" (") + buildView + _S(")"); rep.desc += _S(" (") + buildView + _S(")");
} }
/* Iterate PAKs and build level options */ /* Iterate PAKs and build level options */
NOD::Node::DirectoryIterator mp1It = root.find("MP1"); nod::Node::DirectoryIterator mp1It = root.find("MP1");
if (mp1It == root.end()) if (mp1It == root.end())
return false; return false;
buildPaks(*mp1It, mp1args, rep); buildPaks(*mp1It, mp1args, rep);
@ -215,9 +215,9 @@ struct SpecMP1 : SpecBase
return true; return true;
} }
bool extractFromDisc(NOD::DiscBase&, bool force, FProgress progress) bool extractFromDisc(nod::DiscBase&, bool force, FProgress progress)
{ {
NOD::ExtractionContext ctx = {true, force, nullptr}; nod::ExtractionContext ctx = {true, force, nullptr};
progress(_S("Indexing PAKs"), _S(""), 2, 0.0); progress(_S("Indexing PAKs"), _S(""), 2, 0.0);
m_pakRouter.build(m_paks, [&progress](float factor) m_pakRouter.build(m_paks, [&progress](float factor)
@ -230,17 +230,17 @@ struct SpecMP1 : SpecBase
progress(_S("MP1 Root"), _S(""), 3, 0.0); progress(_S("MP1 Root"), _S(""), 3, 0.0);
int prog = 0; int prog = 0;
ctx.progressCB = [&](const std::string& name) { ctx.progressCB = [&](const std::string& name) {
HECL::SystemStringView nameView(name); hecl::SystemStringView nameView(name);
progress(_S("MP1 Root"), nameView.sys_str().c_str(), 3, prog / (float)m_nonPaks.size()); progress(_S("MP1 Root"), nameView.sys_str().c_str(), 3, prog / (float)m_nonPaks.size());
}; };
for (const NOD::Node* node : m_nonPaks) for (const nod::Node* node : m_nonPaks)
{ {
node->extractToDirectory(m_workPath.getAbsolutePath(), ctx); node->extractToDirectory(m_workPath.getAbsolutePath(), ctx);
prog++; prog++;
} }
progress(_S("MP1 Root"), _S(""), 3, 1.0); progress(_S("MP1 Root"), _S(""), 3, 1.0);
const HECL::ProjectPath& cookPath = m_project.getProjectCookedPath(SpecEntMP1); const hecl::ProjectPath& cookPath = m_project.getProjectCookedPath(SpecEntMP1);
cookPath.makeDir(); cookPath.makeDir();
m_cookPath.makeDir(); m_cookPath.makeDir();
@ -253,11 +253,11 @@ struct SpecMP1 : SpecBase
continue; continue;
const std::string& name = pak.getName(); const std::string& name = pak.getName();
HECL::SystemStringView sysName(name); hecl::SystemStringView sysName(name);
progress(sysName.sys_str().c_str(), _S(""), compIdx, 0.0); progress(sysName.sys_str().c_str(), _S(""), compIdx, 0.0);
m_pakRouter.extractResources(pak, force, m_pakRouter.extractResources(pak, force,
[&progress, &sysName, &compIdx](const HECL::SystemChar* substr, float factor) [&progress, &sysName, &compIdx](const hecl::SystemChar* substr, float factor)
{ {
progress(sysName.sys_str().c_str(), substr, compIdx, factor); progress(sysName.sys_str().c_str(), substr, compIdx, factor);
}); });
@ -267,12 +267,12 @@ struct SpecMP1 : SpecBase
return true; return true;
} }
virtual HECL::ProjectPath getWorking(class UniqueID32& id) virtual hecl::ProjectPath getWorking(class UniqueID32& id)
{ {
return m_pakRouter.getWorking(id); return m_pakRouter.getWorking(id);
} }
bool checkPathPrefix(const HECL::ProjectPath& path) bool checkPathPrefix(const hecl::ProjectPath& path)
{ {
return path.getRelativePath().compare(0, 4, _S("MP1/")) == 0; return path.getRelativePath().compare(0, 4, _S("MP1/")) == 0;
} }
@ -286,41 +286,41 @@ struct SpecMP1 : SpecBase
return false; return false;
} }
void cookMesh(const HECL::ProjectPath& out, const HECL::ProjectPath& in, void cookMesh(const hecl::ProjectPath& out, const hecl::ProjectPath& in,
BlendStream& ds, bool fast, FCookProgress progress) const BlendStream& ds, bool fast, FCookProgress progress) const
{ {
Mesh mesh = ds.compileMesh(fast ? HECL::HMDLTopology::Triangles : HECL::HMDLTopology::TriStrips, -1, Mesh mesh = ds.compileMesh(fast ? hecl::HMDLTopology::Triangles : hecl::HMDLTopology::TriStrips, -1,
[&progress](int surfCount) [&progress](int surfCount)
{ {
progress(HECL::SysFormat(_S("%d"), surfCount).c_str()); progress(hecl::SysFormat(_S("%d"), surfCount).c_str());
}); });
DNAMP1::CMDL::Cook(out, in, mesh); DNAMP1::CMDL::Cook(out, in, mesh);
} }
void cookActor(const HECL::ProjectPath& out, const HECL::ProjectPath& in, void cookActor(const hecl::ProjectPath& out, const hecl::ProjectPath& in,
BlendStream& ds, bool fast, FCookProgress progress) const BlendStream& ds, bool fast, FCookProgress progress) const
{ {
Actor actor = ds.compileActor(); Actor actor = ds.compileActor();
DNAMP1::ANCS::Cook(out, in, actor); DNAMP1::ANCS::Cook(out, in, actor);
} }
void cookArea(const HECL::ProjectPath& out, const HECL::ProjectPath& in, void cookArea(const hecl::ProjectPath& out, const hecl::ProjectPath& in,
BlendStream& ds, bool fast, FCookProgress progress) const BlendStream& ds, bool fast, FCookProgress progress) const
{ {
} }
void cookYAML(const HECL::ProjectPath& out, const HECL::ProjectPath& in, void cookYAML(const hecl::ProjectPath& out, const hecl::ProjectPath& in,
FILE* fin, FCookProgress progress) const FILE* fin, FCookProgress progress) const
{ {
} }
}; };
HECL::Database::DataSpecEntry SpecEntMP1 = hecl::Database::DataSpecEntry SpecEntMP1 =
{ {
_S("MP1"), _S("MP1"),
_S("Data specification for original Metroid Prime engine"), _S("Data specification for original Metroid Prime engine"),
[](HECL::Database::Project& project, HECL::Database::DataSpecTool) [](hecl::Database::Project& project, hecl::Database::DataSpecTool)
-> HECL::Database::IDataSpec* {return new struct SpecMP1(project);} -> hecl::Database::IDataSpec* {return new struct SpecMP1(project);}
}; };
} }

Some files were not shown because too many files have changed in this diff Show More