mirror of
https://github.com/libAthena/athena.git
synced 2025-12-10 05:57:57 +00:00
Huge non-virtual template-based refactor for DNA
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
|
||||
namespace athena::Checksums
|
||||
namespace athena::checksums
|
||||
{
|
||||
|
||||
atUint32 crc32(const atUint8* data, atUint64 length, atUint32 mask, atUint32 seed)
|
||||
|
||||
@@ -341,7 +341,8 @@ std::unique_ptr<atUint8[]> NodeToVal(const YAMLNode* node)
|
||||
std::unique_ptr<YAMLNode> ValToNode(const std::unique_ptr<atUint8[]>& val, size_t byteCount)
|
||||
{
|
||||
YAMLNode* ret = new YAMLNode(YAML_SCALAR_NODE);
|
||||
ret->m_scalarString = base64_encode(val.get(), byteCount);
|
||||
if (val)
|
||||
ret->m_scalarString = base64_encode(val.get(), byteCount);
|
||||
return std::unique_ptr<YAMLNode>(ret);
|
||||
}
|
||||
|
||||
|
||||
@@ -28,11 +28,11 @@ std::ostream& operator<<(std::ostream& os, const athena::Endian& endian)
|
||||
{
|
||||
switch (endian)
|
||||
{
|
||||
case athena::Endian::LittleEndian:
|
||||
case athena::Endian::Little:
|
||||
os << "LittleEndian";
|
||||
break;
|
||||
|
||||
case athena::Endian::BigEndian:
|
||||
case athena::Endian::Big:
|
||||
os << "BigEndian";
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ namespace athena
|
||||
{
|
||||
|
||||
MCSlot::MCSlot(std::unique_ptr<atUint8[]>&& data, atUint32 length)
|
||||
: ZQuestFile(ZQuestFile::MC, Endian::LittleEndian, std::move(data), length)
|
||||
: ZQuestFile(ZQuestFile::MC, Endian::Little, std::move(data), length)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -9,13 +9,13 @@ namespace athena::io
|
||||
SkywardSwordFileReader::SkywardSwordFileReader(atUint8* data, atUint64 length)
|
||||
: MemoryCopyReader(data, length)
|
||||
{
|
||||
setEndian(Endian::BigEndian);
|
||||
setEndian(Endian::Big);
|
||||
}
|
||||
|
||||
SkywardSwordFileReader::SkywardSwordFileReader(const std::string& filename)
|
||||
: MemoryCopyReader(filename)
|
||||
{
|
||||
setEndian(Endian::BigEndian);
|
||||
setEndian(Endian::Big);
|
||||
}
|
||||
|
||||
SkywardSwordFile* SkywardSwordFileReader::read()
|
||||
|
||||
@@ -8,13 +8,13 @@ namespace athena::io
|
||||
SkywardSwordFileWriter::SkywardSwordFileWriter(atUint8* data, atUint64 len)
|
||||
: MemoryCopyWriter(data, len)
|
||||
{
|
||||
setEndian(Endian::BigEndian);
|
||||
setEndian(Endian::Big);
|
||||
}
|
||||
|
||||
SkywardSwordFileWriter::SkywardSwordFileWriter(const std::string& filename)
|
||||
: MemoryCopyWriter(filename)
|
||||
{
|
||||
setEndian(Endian::BigEndian);
|
||||
setEndian(Endian::Big);
|
||||
}
|
||||
|
||||
void SkywardSwordFileWriter::write(SkywardSwordFile* file)
|
||||
|
||||
@@ -38,7 +38,7 @@ union AmmoValues
|
||||
};
|
||||
|
||||
SkywardSwordQuest::SkywardSwordQuest(std::unique_ptr<atUint8[]>&& data, atUint32 len)
|
||||
: ZQuestFile(ZQuestFile::SS, Endian::BigEndian, std::move(data), len)
|
||||
: ZQuestFile(ZQuestFile::SS, Endian::Big, std::move(data), len)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -240,11 +240,11 @@ atUint32 SkywardSwordQuest::skipChecksum()
|
||||
|
||||
void SkywardSwordQuest::fixChecksums()
|
||||
{
|
||||
atUint32 checksum = Checksums::crc32(m_data.get(), priv::CHECKSUM_OFFSET);
|
||||
atUint32 checksum = checksums::crc32(m_data.get(), priv::CHECKSUM_OFFSET);
|
||||
utility::BigUint32(checksum);
|
||||
*(atUint32*)(m_data.get() + priv::CHECKSUM_OFFSET) = checksum;
|
||||
|
||||
checksum = Checksums::crc32(m_skipData.get(), priv::SKIP_CHECKSUM_OFFSET);
|
||||
checksum = checksums::crc32(m_skipData.get(), priv::SKIP_CHECKSUM_OFFSET);
|
||||
utility::BigUint32(checksum);
|
||||
*(atUint32*)(m_skipData.get() + priv::SKIP_CHECKSUM_OFFSET) = checksum;
|
||||
}
|
||||
|
||||
@@ -11,14 +11,12 @@ WiiBanner::WiiBanner() :
|
||||
m_gameId(0),
|
||||
m_banner(NULL),
|
||||
m_flags(0),
|
||||
m_bannerSize(0),
|
||||
m_title(""),
|
||||
m_subtitle("")
|
||||
m_bannerSize(0)
|
||||
{
|
||||
}
|
||||
|
||||
WiiBanner::WiiBanner(atUint32 gameId, const std::string& title,
|
||||
const std::string& subtitle, WiiImage* banner, std::vector<WiiImage*> icons) :
|
||||
WiiBanner::WiiBanner(atUint32 gameId, const std::u16string& title,
|
||||
const std::u16string& subtitle, WiiImage* banner, std::vector<WiiImage*> icons) :
|
||||
m_gameId(gameId),
|
||||
m_banner(banner),
|
||||
m_flags(0),
|
||||
@@ -44,22 +42,22 @@ atUint64 WiiBanner::gameID() const
|
||||
{
|
||||
return m_gameId;
|
||||
}
|
||||
void WiiBanner::setTitle(const std::string& title)
|
||||
void WiiBanner::setTitle(const std::u16string& title)
|
||||
{
|
||||
m_title = title;
|
||||
}
|
||||
|
||||
std::string WiiBanner::title() const
|
||||
const std::u16string& WiiBanner::title() const
|
||||
{
|
||||
return m_title;
|
||||
}
|
||||
|
||||
void WiiBanner::setSubtitle(const std::string& subtitle)
|
||||
void WiiBanner::setSubtitle(const std::u16string& subtitle)
|
||||
{
|
||||
m_subtitle = subtitle;
|
||||
}
|
||||
|
||||
std::string WiiBanner::subtitle() const
|
||||
const std::u16string& WiiBanner::subtitle() const
|
||||
{
|
||||
return m_subtitle;
|
||||
}
|
||||
|
||||
@@ -22,13 +22,13 @@ namespace io
|
||||
WiiSaveReader::WiiSaveReader(const atUint8* data, atUint64 length)
|
||||
: MemoryCopyReader(data, length)
|
||||
{
|
||||
setEndian(Endian::BigEndian);
|
||||
setEndian(Endian::Big);
|
||||
}
|
||||
|
||||
WiiSaveReader::WiiSaveReader(const std::string& filename)
|
||||
: MemoryCopyReader(filename)
|
||||
{
|
||||
setEndian(Endian::BigEndian);
|
||||
setEndian(Endian::Big);
|
||||
}
|
||||
|
||||
std::unique_ptr<WiiSave> WiiSaveReader::readSave()
|
||||
@@ -164,8 +164,8 @@ WiiBanner* WiiSaveReader::readBanner()
|
||||
int magic;
|
||||
int flags;
|
||||
short animSpeed;
|
||||
std::string gameTitle;
|
||||
std::string subTitle;
|
||||
std::u16string gameTitle;
|
||||
std::u16string subTitle;
|
||||
|
||||
magic = readUint32();
|
||||
|
||||
@@ -183,12 +183,12 @@ WiiBanner* WiiSaveReader::readBanner()
|
||||
animSpeed = readUint16();
|
||||
seek(22);
|
||||
|
||||
gameTitle = readWStringAsString();
|
||||
gameTitle = readU16StringBig();
|
||||
|
||||
if (position() != 0x0080)
|
||||
seek(0x0080, SeekOrigin::Begin);
|
||||
|
||||
subTitle = readWStringAsString();
|
||||
subTitle = readU16StringBig();
|
||||
|
||||
if (position() != 0x00C0)
|
||||
seek(0x00C0, SeekOrigin::Begin);
|
||||
|
||||
@@ -30,7 +30,7 @@ namespace io
|
||||
WiiSaveWriter::WiiSaveWriter(const std::string& filename)
|
||||
: MemoryCopyWriter(filename)
|
||||
{
|
||||
setEndian(Endian::BigEndian);
|
||||
setEndian(Endian::Big);
|
||||
}
|
||||
|
||||
|
||||
@@ -83,7 +83,7 @@ bool WiiSaveWriter::writeSave(WiiSave* save, atUint8* macAddress, atUint32 ngId,
|
||||
|
||||
void WiiSaveWriter::writeBanner(WiiBanner* banner)
|
||||
{
|
||||
setEndian(Endian::BigEndian);
|
||||
setEndian(Endian::Big);
|
||||
writeInt64(banner->gameID());
|
||||
writeInt32((0x60a0 + 0x1200) * (atUint32)banner->icons().size());
|
||||
writeByte((atInt8)banner->permissions());
|
||||
|
||||
@@ -39,7 +39,7 @@ const atUint32 ZQuestFile::Magic = 'Z' | ('Q' << 8) | ('S' << 16) | (('0' + ZQ
|
||||
|
||||
ZQuestFile::ZQuestFile()
|
||||
: m_game(NoGame),
|
||||
m_endian(Endian::LittleEndian),
|
||||
m_endian(Endian::Little),
|
||||
m_length(0)
|
||||
{
|
||||
initGameStrings();
|
||||
|
||||
@@ -75,7 +75,7 @@ ZQuestFile* ZQuestFileReader::read()
|
||||
|
||||
if (version >= ZQUEST_VERSION_CHECK(2, 0, 0))
|
||||
{
|
||||
if (checksum != athena::Checksums::crc32(data.get(), compressedLen))
|
||||
if (checksum != athena::checksums::crc32(data.get(), compressedLen))
|
||||
{
|
||||
atError("Checksum mismatch, data corrupt");
|
||||
return nullptr;
|
||||
@@ -102,7 +102,7 @@ ZQuestFile* ZQuestFileReader::read()
|
||||
data.reset(dst);
|
||||
}
|
||||
|
||||
return new ZQuestFile(game, BOM == 0xFEFF ? Endian::BigEndian : Endian::LittleEndian, std::move(data), uncompressedLen, gameString);
|
||||
return new ZQuestFile(game, BOM == 0xFEFF ? Endian::Big : Endian::Little, std::move(data), uncompressedLen, gameString);
|
||||
}
|
||||
|
||||
} // zelda
|
||||
|
||||
@@ -59,8 +59,8 @@ void ZQuestFileWriter::write(ZQuestFile* quest, bool compress)
|
||||
|
||||
writeUint32(quest->length());
|
||||
writeBytes((atInt8*)quest->gameString().substr(0, 0x0A).c_str(), 0x0A);
|
||||
writeUint16(quest->endian() == Endian::BigEndian ? 0xFFFE : 0xFEFF);
|
||||
writeUint32(athena::Checksums::crc32(questData, compLen));
|
||||
writeUint16(quest->endian() == Endian::Big ? 0xFFFE : 0xFEFF);
|
||||
writeUint32(athena::checksums::crc32(questData, compLen));
|
||||
writeUBytes(questData, compLen);
|
||||
|
||||
save();
|
||||
|
||||
Reference in New Issue
Block a user