Skip to content

Commit

Permalink
Fixed MIFHeader start point endian issue.
Browse files Browse the repository at this point in the history
  • Loading branch information
afritz1 committed Dec 21, 2024
1 parent 97dffef commit 50023cf
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 16 deletions.
18 changes: 9 additions & 9 deletions OpenTESArena/src/Assets/ArenaTypes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ void ArenaTypes::MIFHeader::init(const uint8_t *data)
this->unknown1 = *data;
this->entryCount = *(data + 1);

const uint16_t *startXStart = reinterpret_cast<const uint16_t*>(data + 2);
const uint16_t *startXEnd = startXStart + this->startX.size();
std::copy(startXStart, startXEnd, this->startX.begin());

const uint16_t *startYStart = startXEnd;
const uint16_t *startYEnd = startYStart + this->startY.size();
std::copy(startYStart, startYEnd, this->startY.begin());
const uint8_t *startXStart = data + 2;
const uint8_t *startYStart = data + 10;
for (int i = 0; i < MIFHeader::START_POINT_COUNT; i++)
{
this->startX[i] = Bytes::getLE16(startXStart + (i * 2));
this->startY[i] = Bytes::getLE16(startYStart + (i * 2));
}

this->startingLevelIndex = *(data + 18);
this->levelCount = *(data + 19);
Expand All @@ -33,8 +33,8 @@ void ArenaTypes::MIFHeader::init(const uint8_t *data)
this->mapHeight = Bytes::getLE16(data + 23);

const uint8_t *unknown3Start = data + 25;
const uint8_t *unknown3End = unknown3Start + this->unknown3.size();
std::copy(unknown3Start, unknown3End, this->unknown3.begin());
const uint8_t *unknown3End = unknown3Start + std::size(this->unknown3);
std::copy(unknown3Start, unknown3End, std::begin(this->unknown3));
}

void ArenaTypes::MIFLock::init(const uint8_t *data)
Expand Down
6 changes: 4 additions & 2 deletions OpenTESArena/src/Assets/ArenaTypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -143,11 +143,13 @@ namespace ArenaTypes

struct MIFHeader
{
static constexpr int START_POINT_COUNT = 4;

uint8_t unknown1, entryCount;
std::array<uint16_t, 4> startX, startY;
uint16_t startX[START_POINT_COUNT], startY[START_POINT_COUNT];
uint8_t startingLevelIndex, levelCount, unknown2;
uint16_t mapWidth, mapHeight;
std::array<uint8_t, 34> unknown3;
uint8_t unknown3[34];

void init(const uint8_t *data);
};
Expand Down
6 changes: 1 addition & 5 deletions OpenTESArena/src/Assets/MIFFile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -383,11 +383,7 @@ bool MIFFile::init(const char *filename)
// Load start locations from the header. Not all are set (i.e., some are (0, 0)).
for (size_t i = 0; i < this->startPoints.size(); i++)
{
static_assert(std::tuple_size<decltype(mifHeader.startX)>::value ==
std::tuple_size<decltype(this->startPoints)>::value);
static_assert(std::tuple_size<decltype(mifHeader.startY)>::value ==
std::tuple_size<decltype(this->startPoints)>::value);

static_assert(std::tuple_size<decltype(this->startPoints)>::value == ArenaTypes::MIFHeader::START_POINT_COUNT);
const uint16_t mifX = mifHeader.startX[i];
const uint16_t mifY = mifHeader.startY[i];
this->startPoints[i] = OriginalInt2(mifX, mifY);
Expand Down

0 comments on commit 50023cf

Please sign in to comment.