|
|
|
|
@ -170,58 +170,17 @@ int SpellPages[6][7] = {
|
|
|
|
|
{ -1, -1, -1, -1, -1, -1, -1 } |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
void DrawSpellCel(int xp, int yp, BYTE *Trans, int nCel, int w) |
|
|
|
|
void DrawSpellCel(int xp, int yp, BYTE *pCelBuff, int nCel, int nWidth) |
|
|
|
|
{ |
|
|
|
|
BYTE *dst, *tbl, *end; |
|
|
|
|
|
|
|
|
|
/// ASSERT: assert(gpBuffer);
|
|
|
|
|
|
|
|
|
|
dst = &gpBuffer[xp + PitchTbl[yp]]; |
|
|
|
|
tbl = SplTransTbl; |
|
|
|
|
|
|
|
|
|
int i; |
|
|
|
|
BYTE width; |
|
|
|
|
BYTE *src; |
|
|
|
|
int nDataSize; |
|
|
|
|
BYTE *pRLEBytes; |
|
|
|
|
DWORD *pFrameTable; |
|
|
|
|
|
|
|
|
|
pFrameTable = (DWORD *)&Trans[4 * nCel]; |
|
|
|
|
src = &Trans[pFrameTable[0]]; |
|
|
|
|
end = &src[pFrameTable[1] - pFrameTable[0]]; |
|
|
|
|
|
|
|
|
|
for (; src != end; dst -= BUFFER_WIDTH + w) { |
|
|
|
|
for (i = w; i;) { |
|
|
|
|
width = *src++; |
|
|
|
|
if (!(width & 0x80)) { |
|
|
|
|
i -= width; |
|
|
|
|
// asm_cel_light_edge(width, tbl, dst, src);
|
|
|
|
|
if (width & 1) { |
|
|
|
|
dst[0] = tbl[src[0]]; |
|
|
|
|
src++; |
|
|
|
|
dst++; |
|
|
|
|
} |
|
|
|
|
width >>= 1; |
|
|
|
|
if (width & 1) { |
|
|
|
|
dst[0] = tbl[src[0]]; |
|
|
|
|
dst[1] = tbl[src[1]]; |
|
|
|
|
src += 2; |
|
|
|
|
dst += 2; |
|
|
|
|
} |
|
|
|
|
width >>= 1; |
|
|
|
|
for (; width; width--) { |
|
|
|
|
dst[0] = tbl[src[0]]; |
|
|
|
|
dst[1] = tbl[src[1]]; |
|
|
|
|
dst[2] = tbl[src[2]]; |
|
|
|
|
dst[3] = tbl[src[3]]; |
|
|
|
|
src += 4; |
|
|
|
|
dst += 4; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
width = -(char)width; |
|
|
|
|
dst += width; |
|
|
|
|
i -= width; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
pFrameTable = (DWORD *)pCelBuff; |
|
|
|
|
pRLEBytes = &pCelBuff[pFrameTable[nCel]]; |
|
|
|
|
nDataSize = pFrameTable[nCel + 1] - pFrameTable[nCel]; |
|
|
|
|
|
|
|
|
|
CelDecDatLightOnly(&gpBuffer[xp + PitchTbl[yp]], pRLEBytes, nDataSize, nWidth, SplTransTbl); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void SetSpellTrans(char t) |
|
|
|
|
@ -490,52 +449,20 @@ void CPrintString(int nOffset, int nCel, char col)
|
|
|
|
|
{ |
|
|
|
|
/// ASSERT: assert(gpBuffer);
|
|
|
|
|
|
|
|
|
|
int i; |
|
|
|
|
int i, nDataSize; |
|
|
|
|
BYTE width, pix; |
|
|
|
|
BYTE *src, *dst, *end; |
|
|
|
|
DWORD *pFrameTable; |
|
|
|
|
|
|
|
|
|
pFrameTable = (DWORD *)&pPanelText[4 * nCel]; |
|
|
|
|
src = &pPanelText[pFrameTable[0]]; |
|
|
|
|
end = &src[pFrameTable[1] - pFrameTable[0]]; |
|
|
|
|
nDataSize = pFrameTable[1] - pFrameTable[0]; |
|
|
|
|
end = &src[nDataSize]; |
|
|
|
|
dst = &gpBuffer[nOffset]; |
|
|
|
|
|
|
|
|
|
switch (col) { |
|
|
|
|
case COL_WHITE: |
|
|
|
|
for (; src != end; dst -= BUFFER_WIDTH + 13) { |
|
|
|
|
for (i = 13; i;) { |
|
|
|
|
width = *src++; |
|
|
|
|
if (!(width & 0x80)) { |
|
|
|
|
i -= width; |
|
|
|
|
if (width & 1) { |
|
|
|
|
dst[0] = src[0]; |
|
|
|
|
src++; |
|
|
|
|
dst++; |
|
|
|
|
} |
|
|
|
|
width >>= 1; |
|
|
|
|
if (width & 1) { |
|
|
|
|
dst[0] = src[0]; |
|
|
|
|
dst[1] = src[1]; |
|
|
|
|
src += 2; |
|
|
|
|
dst += 2; |
|
|
|
|
} |
|
|
|
|
width >>= 1; |
|
|
|
|
while (width) { |
|
|
|
|
dst[0] = src[0]; |
|
|
|
|
dst[1] = src[1]; |
|
|
|
|
dst[2] = src[2]; |
|
|
|
|
dst[3] = src[3]; |
|
|
|
|
src += 4; |
|
|
|
|
dst += 4; |
|
|
|
|
width--; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
width = -(char)width; |
|
|
|
|
dst += width; |
|
|
|
|
i -= width; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
CelDrawDatOnly(dst, src, nDataSize, 13); |
|
|
|
|
break; |
|
|
|
|
case COL_BLUE: |
|
|
|
|
for (; src != end; dst -= BUFFER_WIDTH + 13) { |
|
|
|
|
@ -1550,39 +1477,6 @@ void DrawChr()
|
|
|
|
|
ADD_PlrStringXY(143, 332, 174, chrstr, col); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief Identical to MY_PlrStringXY(x, y, width, pszStr, col, 1) |
|
|
|
|
*/ |
|
|
|
|
void ADD_PlrStringXY(int x, int y, int width, char *pszStr, char col) |
|
|
|
|
{ |
|
|
|
|
BYTE c; |
|
|
|
|
char *tmp; |
|
|
|
|
int nOffset, screen_x, line, widthOffset; |
|
|
|
|
|
|
|
|
|
nOffset = x + PitchTbl[y + SCREEN_Y] + 64; |
|
|
|
|
widthOffset = width - x + 1; |
|
|
|
|
line = 0; |
|
|
|
|
screen_x = 0; |
|
|
|
|
tmp = pszStr; |
|
|
|
|
while (*tmp) { |
|
|
|
|
c = gbFontTransTbl[(BYTE)*tmp++]; |
|
|
|
|
screen_x += fontkern[fontframe[c]] + 1; |
|
|
|
|
} |
|
|
|
|
if (screen_x < widthOffset) |
|
|
|
|
line = (widthOffset - screen_x) >> 1; |
|
|
|
|
nOffset += line; |
|
|
|
|
while (*pszStr) { |
|
|
|
|
c = gbFontTransTbl[(BYTE)*pszStr++]; |
|
|
|
|
c = fontframe[c]; |
|
|
|
|
line += fontkern[c] + 1; |
|
|
|
|
if (c) { |
|
|
|
|
if (line < widthOffset) |
|
|
|
|
CPrintString(nOffset, c, col); |
|
|
|
|
} |
|
|
|
|
nOffset += fontkern[c] + 1; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void MY_PlrStringXY(int x, int y, int width, char *pszStr, char col, int base) |
|
|
|
|
{ |
|
|
|
|
BYTE c; |
|
|
|
|
|