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,8 +462,9 @@ void SourceFile::ReadCharPad(SourceFileDecoder decoder)
else else
fseek(mFile, 2 * numTiles * tileWidth * tileHeight, SEEK_CUR); fseek(mFile, 2 * numTiles * tileWidth * tileHeight, SEEK_CUR);
if (ctmHeader.mColorMethod == 1)
{
fread(&ctmMarker, 2, 1, mFile); fread(&ctmMarker, 2, 1, mFile);
if (decoder == SFD_CTM_CHAR_ATTRIB_1 || decoder == SFD_CTM_CHAR_ATTRIB_2) if (decoder == SFD_CTM_CHAR_ATTRIB_1 || decoder == SFD_CTM_CHAR_ATTRIB_2)
{ {
mMemSize = numTiles; mMemSize = numTiles;
@ -471,29 +472,45 @@ void SourceFile::ReadCharPad(SourceFileDecoder decoder)
mMemPos = 0; mMemPos = 0;
mMemData = new uint8[mMemSize]; mMemData = new uint8[mMemSize];
if (ctmHeader.mDispMode == 4)
{
for (int i = 0; i < mMemSize; i++) for (int i = 0; i < mMemSize; i++)
{ {
uint8 fd[3]; uint8 fd[3];
fread(&fd, 1, 1, mFile); 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]; mMemData[i] = fd[0];
} }
fread(&ctmMarker, 2, 1, mFile);
for (int i = 0; i < mMemSize; i++)
{
uint8 fd[3];
fread(&fd, 1, 1, mFile);
mMemData[i] |= fd[0] << 4;
} }
return; return;
} }
else else
{ {
// Skip material // Skip colors
fseek(mFile, 1 * numTiles, SEEK_CUR); 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);