diff --git a/components/bsa/ba2dx10file.cpp b/components/bsa/ba2dx10file.cpp index 82a5ee8473..b056f6faca 100644 --- a/components/bsa/ba2dx10file.cpp +++ b/components/bsa/ba2dx10file.cpp @@ -116,16 +116,19 @@ namespace Bsa if (header[0] == 0x00415342) /*"BSA\x00"*/ fail("Unrecognized compressed BSA format"); mVersion = header[1]; - if (mVersion != 0x01 /*FO4*/ && mVersion != 0x02 /*Starfield*/) - fail("Unrecognized compressed BSA version"); + switch (static_cast(mVersion)) + { + case BA2Version::Fallout4: + case BA2Version::Fallout4NG: + break; + case BA2Version::StarfieldDDS: + fail("Unsupported DDS BA2 version"); + default: + fail("Unrecognized DDS BA2 version"); + } type = header[2]; fileCount = header[3]; - if (mVersion == 0x02) - { - uint64_t dummy; - input.read(reinterpret_cast(&dummy), 8); - } } if (type == ESM::fourCC("DX10")) diff --git a/components/bsa/ba2file.hpp b/components/bsa/ba2file.hpp index 75a2ce8d61..8b890a7e10 100644 --- a/components/bsa/ba2file.hpp +++ b/components/bsa/ba2file.hpp @@ -8,6 +8,15 @@ namespace Bsa { uint32_t generateHash(const std::string& name); uint32_t generateExtensionHash(std::string_view extension); + + enum class BA2Version : std::uint32_t + { + Fallout4 = 1, + StarfieldGeneral = 2, + StarfieldDDS = 3, + Fallout4NG = 7, + Fallout4NG2 = 8, + }; } #endif diff --git a/components/bsa/ba2gnrlfile.cpp b/components/bsa/ba2gnrlfile.cpp index da5ad47029..3e4cd1be83 100644 --- a/components/bsa/ba2gnrlfile.cpp +++ b/components/bsa/ba2gnrlfile.cpp @@ -110,16 +110,22 @@ namespace Bsa if (header[0] == 0x00415342) /*"BSA\x00"*/ fail("Unrecognized compressed BSA format"); mVersion = header[1]; - if (mVersion != 0x01 /*FO4*/ && mVersion != 0x02 /*Starfield*/) - fail("Unrecognized compressed BSA version"); + switch (static_cast(mVersion)) + { + case BA2Version::Fallout4: + case BA2Version::Fallout4NG: + case BA2Version::Fallout4NG2: + break; + case BA2Version::StarfieldGeneral: + uint64_t dummy; + input.read(reinterpret_cast(&dummy), 8); + break; + default: + fail("Unrecognized general BA2 version"); + } type = header[2]; fileCount = header[3]; - if (mVersion == 0x02) - { - uint64_t dummy; - input.read(reinterpret_cast(&dummy), 8); - } } if (type == ESM::fourCC("GNRL"))