Fix per tile color in charpad import

This commit is contained in:
drmortalwombat 2023-10-27 17:59:37 +02:00
parent d9a8c5ea08
commit f541cf3848

View File

@ -462,39 +462,56 @@ void SourceFile::ReadCharPad(SourceFileDecoder decoder)
else else
fseek(mFile, 2 * numTiles * tileWidth * tileHeight, SEEK_CUR); fseek(mFile, 2 * numTiles * tileWidth * tileHeight, SEEK_CUR);
fread(&ctmMarker, 2, 1, mFile); if (ctmHeader.mColorMethod == 1)
if (decoder == SFD_CTM_CHAR_ATTRIB_1 || decoder == SFD_CTM_CHAR_ATTRIB_2)
{ {
mMemSize = numTiles;
mLimit = mMemSize;
mMemPos = 0;
mMemData = new uint8[mMemSize];
for (int i = 0; i < mMemSize; i++)
{
uint8 fd[3];
fread(&fd, 1, 1, mFile);
mMemData[i] = fd[0];
}
fread(&ctmMarker, 2, 1, mFile); fread(&ctmMarker, 2, 1, mFile);
if (decoder == SFD_CTM_CHAR_ATTRIB_1 || decoder == SFD_CTM_CHAR_ATTRIB_2)
for (int i = 0; i < mMemSize; i++)
{ {
uint8 fd[3]; mMemSize = numTiles;
fread(&fd, 1, 1, mFile); mLimit = mMemSize;
mMemData[i] |= fd[0] << 4; mMemPos = 0;
} mMemData = new uint8[mMemSize];
return; if (ctmHeader.mDispMode == 4)
} {
else for (int i = 0; i < mMemSize; i++)
{ {
// Skip material uint8 fd[3];
fseek(mFile, 1 * numTiles, SEEK_CUR); fread(fd, 1, 3, mFile);
if (decoder == SFD_CTM_CHAR_ATTRIB_1)
mMemData[i] = fd[0];
else
mMemData[i] = (fd[2] << 4) | fd[1];
}
}
else
{
for (int i = 0; i < mMemSize; i++)
{
uint8 fd[3];
fread(fd, 1, 1, mFile);
mMemData[i] = fd[0];
}
}
return;
}
else
{
// Skip colors
if (ctmHeader.mDispMode == 3)
fseek(mFile, 2 * numTiles, SEEK_CUR);
else if (ctmHeader.mDispMode == 4)
fseek(mFile, 3 * numTiles, SEEK_CUR);
else
fseek(mFile, numTiles, SEEK_CUR);
}
} }
// Skip tags
fread(&ctmMarker, 2, 1, mFile);
fseek(mFile, 1 * numTiles, SEEK_CUR);
// Skip tile names // Skip tile names
fread(&ctmMarker, 2, 1, mFile); fread(&ctmMarker, 2, 1, mFile);
for (int i = 0; i < numTiles; i++) for (int i = 0; i < numTiles; i++)