Browse Source

Implement CelGetFrameStart

pull/293/head
Anders Jenbo 7 years ago
parent
commit
64824cab2b
  1. 4
      Source/engine.cpp
  2. 10
      Source/engine.h
  3. 29
      Source/engine.inc
  4. 12
      Source/gendung.cpp
  5. 2
      Source/missiles.cpp
  6. 6
      defs.h

4
Source/engine.cpp

@ -1560,14 +1560,12 @@ void Cl2ApplyTrans(BYTE *p, BYTE *ttbl, int nCel)
int i, nDataSize;
char width;
BYTE *dst;
DWORD *pFrameTable;
/// ASSERT: assert(p != NULL);
/// ASSERT: assert(ttbl != NULL);
for (i = 1; i <= nCel; i++) {
pFrameTable = (DWORD *)&p[4 * i];
dst = &p[pFrameTable[0] + 10];
dst = CelGetFrameStart(p, i) + 10;
nDataSize = CelGetFrameSize(p, i) - 10;
while (nDataSize) {
width = *dst++;

10
Source/engine.h

@ -11,7 +11,15 @@ extern int orgseed;
extern int SeedCount;
extern BOOL gbNotInView; // valid - if x/y are in bounds
__FINLINE BYTE *CelGetFrame(BYTE *pCelBuff, int nCel, int *nDataSize);
#ifdef USE_ASM
#define __FORCEINLINE __forceinline
#include "engine.inc"
#else
#define __FORCEINLINE
BYTE *CelGetFrameStart(BYTE *pCelBuff, int nCel);
int CelGetFrameSize(BYTE *pCelBuff, int nCel);
BYTE *CelGetFrame(BYTE *pCelBuff, int nCel, int *nDataSize);
#endif
void CelDrawDatOnly(BYTE *pDecodeTo, BYTE *pRLEBytes, int nDataSize, int nWidth);
void CelDecodeOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth);

29
Source/engine.inc

@ -0,0 +1,29 @@
__FORCEINLINE BYTE *CelGetFrameStart(BYTE *pCelBuff, int nCel)
{
DWORD *pFrameTable;
pFrameTable = (DWORD *)pCelBuff;
return pCelBuff + SwapLE32(pFrameTable[nCel]);
}
__FORCEINLINE int CelGetFrameSize(BYTE *pCelBuff, int nCel)
{
DWORD *pFrameTable;
pFrameTable = (DWORD *)pCelBuff;
return SwapLE32(pFrameTable[nCel + 1]) - SwapLE32(pFrameTable[nCel]);
}
__FORCEINLINE BYTE *CelGetFrame(BYTE *pCelBuff, int nCel, int *nDataSize)
{
DWORD *pFrameTable;
DWORD nCellStart;
pFrameTable = (DWORD *)pCelBuff;
nCellStart = SwapLE32(pFrameTable[nCel]);
*nDataSize = SwapLE32(pFrameTable[nCel + 1]) - nCellStart;
return pCelBuff + nCellStart;
}

12
Source/gendung.cpp

@ -159,12 +159,12 @@ void MakeSpeedCels()
}
pFrameTable = (DWORD *)pDungeonCels;
nDataSize = pFrameTable[0];
nDataSize = SwapLE32(pFrameTable[0]);
nlevel_frames = nDataSize & 0xFFFF;
for (i = 1; i < nlevel_frames; i++) {
z = i;
nDataSize = pFrameTable[i + 1] - pFrameTable[i];
nDataSize = CelGetFrameSize(pDungeonCels, i);
level_frame_sizes[i] = nDataSize & 0xFFFF;
}
@ -178,14 +178,14 @@ void MakeSpeedCels()
blood_flag = TRUE;
if (level_frame_count[i] != 0) {
if (level_frame_types[i] != 0x1000) {
src = &pDungeonCels[pFrameTable[i]];
src = CelGetFrameStart(pDungeonCels, i);
for (j = level_frame_sizes[i]; j; j--) {
pix = *src++;
if (pix && pix < 32)
blood_flag = FALSE;
}
} else {
src = &pDungeonCels[pFrameTable[i]];
src = CelGetFrameStart(pDungeonCels, i);
for (k = 32; k; k--) {
for (l = 32; l;) {
width = *src++;
@ -244,7 +244,7 @@ void MakeSpeedCels()
t = level_frame_sizes[i];
for (j = 1; j < blk_cnt; j++) {
SpeedFrameTbl[i][j] = frameidx;
src = &pDungeonCels[pFrameTable[z]];
src = CelGetFrameStart(pDungeonCels, z);
dst = &pSpeedCels[frameidx];
tbl = &pLightTbl[256 * j];
for (k = t; k; k--) {
@ -255,7 +255,7 @@ void MakeSpeedCels()
} else {
for (j = 1; j < blk_cnt; j++) {
SpeedFrameTbl[i][j] = frameidx;
src = &pDungeonCels[pFrameTable[z]];
src = CelGetFrameStart(pDungeonCels, z);
dst = &pSpeedCels[frameidx];
tbl = &pLightTbl[256 * j];
for (k = 32; k; k--) {

2
Source/missiles.cpp

@ -1096,7 +1096,7 @@ void LoadMissileGFX(BYTE mi)
sprintf(pszName, "Missiles\\%s.CL2", mfd->mName);
file = LoadFileInMem(pszName, NULL);
for (i = 0; i < mfd->mAnimFAmt; i++)
mfd->mAnimData[i] = &file[((int *)file)[i]];
mfd->mAnimData[i] = CelGetFrameStart(file, i);
} else if (mfd->mAnimFAmt == 1) {
sprintf(pszName, "Missiles\\%s.CL2", mfd->mName);
if (!mfd->mAnimData[0])

6
defs.h

@ -183,12 +183,6 @@ typedef void (*_PVFV)(void);
#define ALIGN_BY_1
#endif
#if (_MSC_VER == 1200)
#define __FINLINE __forceinline
#else
#define __FINLINE
#endif
#ifndef _BIG_ENDIAN_
#define SwapLE32
#else

Loading…
Cancel
Save