aboutsummaryrefslogtreecommitdiff
path: root/engines/cruise/mainDraw.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/cruise/mainDraw.cpp')
-rw-r--r--engines/cruise/mainDraw.cpp964
1 files changed, 473 insertions, 491 deletions
diff --git a/engines/cruise/mainDraw.cpp b/engines/cruise/mainDraw.cpp
index ae189dd8aa..6804075a07 100644
--- a/engines/cruise/mainDraw.cpp
+++ b/engines/cruise/mainDraw.cpp
@@ -29,45 +29,40 @@ namespace Cruise {
int currentTransparent;
-struct drawVar1Struct
-{
- struct drawVar1Struct* next;
+struct drawVar1Struct {
+ struct drawVar1Struct *next;
short int field_2;
short int field_4;
short int field_6;
short int field_8;
- cellStruct* field_A;
+ cellStruct *field_A;
};
typedef struct drawVar1Struct drawVar1Struct;
drawVar1Struct drawVar1;
+void mainDraw6(void) {
+ drawVar1Struct *pCurrent = drawVar1.next;
-void mainDraw6(void)
-{
- drawVar1Struct* pCurrent = drawVar1.next;
+ while (pCurrent) {
+ drawVar1Struct *next = pCurrent->next;
- while(pCurrent)
- {
- drawVar1Struct* next = pCurrent->next;
-
- if(pCurrent->field_6 == 5)
- {
- Op_InitializeStateSub(pCurrent->field_2, pCurrent->field_4, pCurrent->field_8);
- }
- else
- {
- setObjectPosition(pCurrent->field_2, pCurrent->field_4, pCurrent->field_6, pCurrent->field_8);
+ if (pCurrent->field_6 == 5) {
+ Op_InitializeStateSub(pCurrent->field_2,
+ pCurrent->field_4, pCurrent->field_8);
+ } else {
+ setObjectPosition(pCurrent->field_2, pCurrent->field_4,
+ pCurrent->field_6, pCurrent->field_8);
}
- if(pCurrent->field_A->nextAnimDelay < 0)
- {
+ if (pCurrent->field_A->nextAnimDelay < 0) {
objectParamsQuery params;
- getMultipleObjectParam(pCurrent->field_2, pCurrent->field_4, &params);
+ getMultipleObjectParam(pCurrent->field_2,
+ pCurrent->field_4, &params);
- pCurrent->field_A->currentAnimDelay = params.var6-1;
+ pCurrent->field_A->currentAnimDelay = params.var6 - 1;
}
free(pCurrent);
@@ -76,9 +71,8 @@ void mainDraw6(void)
}
}
-void flipScreen(void)
-{
- uint8* swapPtr;
+void flipScreen(void) {
+ uint8 *swapPtr;
swapPtr = gfxModuleData.pPage00;
gfxModuleData.pPage00 = gfxModuleData.pPage10;
@@ -87,7 +81,7 @@ void flipScreen(void)
gfxModuleData_flipScreen();
/*memcpy(globalAtariScreen, gfxModuleData.pPage00, 16000);
- convertAtariToRaw(gfxModuleData.pPage00,globalScreen,200,320);*/
+ * convertAtariToRaw(gfxModuleData.pPage00,globalScreen,200,320); */
}
int spriteX1;
@@ -95,60 +89,59 @@ int spriteX2;
int spriteY1;
int spriteY2;
-char* polyOutputBuffer;
+char *polyOutputBuffer;
-void pixel(int x, int y, char color)
-{
- if(x >= 0 && x < 320 && y >= 0 && y < 200)
- polyOutputBuffer[320*y+x] = color;
+void pixel(int x, int y, char color) {
+ if (x >= 0 && x < 320 && y >= 0 && y < 200)
+ polyOutputBuffer[320 * y + x] = color;
}
// this function checks if the dataPtr is not 0, else it retrives the data for X, Y, scale and DataPtr again (OLD: mainDrawSub1Sub1)
-void getPolyData(int fileIndex, int X, int Y, int *outScale, int *outY, int *outX, char **outDataPtr, int scale, char* dataPtr)
-{
- if(*(uint16*) dataPtr == 0)
- {
- uint16 newFileIndex;
- uint16 newX;
- char* newDataPtr; // this one is quite useless
- uint16 newY;
+void getPolyData(int fileIndex, int X, int Y, int *outScale, int *outY,
+ int *outX, char **outDataPtr, int scale, char *dataPtr) {
+ if (*(uint16 *) dataPtr == 0) {
+ uint16 newFileIndex;
+ uint16 newX;
+ char *newDataPtr; // this one is quite useless
+ uint16 newY;
- dataPtr += 2;
- newFileIndex = *(uint16*) dataPtr;
+ dataPtr += 2;
+ newFileIndex = *(uint16 *) dataPtr;
flipShort(&newFileIndex);
dataPtr += 2;
- newX = *(uint16*) dataPtr;
+ newX = *(uint16 *) dataPtr;
flipShort(&newX);
- newDataPtr = dataPtr; // useless
+ newDataPtr = dataPtr; // useless
- newY = *(uint16*) (newDataPtr + 2);
+ newY = *(uint16 *) (newDataPtr + 2);
flipShort(&newY);
newFileIndex += fileIndex;
- if(true /*newFileIndex >= 0*/) // FIXME: comparison is always true due to limited range of data type
+ if (true /*newFileIndex >= 0 */ ) // FIXME: comparison is always true due to limited range of data type
{
- if(filesDatabase[newFileIndex].resType == 0 && filesDatabase[newFileIndex].subData.ptr)
- {
- dataPtr = (char*)filesDatabase[newFileIndex].subData.ptr;
+ if (filesDatabase[newFileIndex].resType == 0
+ && filesDatabase[newFileIndex].subData.ptr) {
+ dataPtr =
+ (char *)filesDatabase[newFileIndex].
+ subData.ptr;
}
}
scale = -scale;
- X -= newX;
- Y -= newY;
+ X -= newX;
+ Y -= newY;
}
*outDataPtr = dataPtr;
- *outX = X;
- *outY = Y;
- *outScale = scale;
+ *outX = X;
+ *outY = Y;
+ *outScale = scale;
}
-int upscaleValue(int value, int scale)
-{
+int upscaleValue(int value, int scale) {
return (((value * scale) << 8) / 2);
}
@@ -170,83 +163,78 @@ int16 polyBuffer3[404];
int16 polyBuffer4[512];
// this function fills the sizeTable for the poly (OLD: mainDrawSub1Sub2)
-void getPolySize(int positionX, int positionY, int scale, int sizeTable[4], unsigned char* dataPtr)
-{
+void getPolySize(int positionX, int positionY, int scale, int sizeTable[4],
+ unsigned char *dataPtr) {
int upperBorder;
int lowerBorder;
m_flipLeftRight = 0;
- if(scale < 0) // flip left right
+ if (scale < 0) // flip left right
{
m_flipLeftRight = 1;
- scale = -scale;
+ scale = -scale;
}
-
// X1
upperBorder = *(dataPtr + 3);
- if(m_flipLeftRight)
- {
+ if (m_flipLeftRight) {
upperBorder = -upperBorder;
}
-
- upperBorder = (upscaleValue(upperBorder, scale) + 0x8000) >> 16;
- upperBorder = -upperBorder;
- lowerBorder = upperBorder;
+
+ upperBorder = (upscaleValue(upperBorder, scale) + 0x8000) >> 16;
+ upperBorder = -upperBorder;
+ lowerBorder = upperBorder;
// X2
- upperBorder = *(dataPtr + 1);
+ upperBorder = *(dataPtr + 1);
upperBorder -= *(dataPtr + 3);
- if(m_flipLeftRight)
- {
+ if (m_flipLeftRight) {
upperBorder = -upperBorder;
}
- upperBorder = (upscaleValue(upperBorder, scale) + 0x8000) >> 16;
+ upperBorder = (upscaleValue(upperBorder, scale) + 0x8000) >> 16;
- if(upperBorder < lowerBorder) // exchange borders if lower > upper
+ if (upperBorder < lowerBorder) // exchange borders if lower > upper
{
- int temp = upperBorder;
+ int temp = upperBorder;
upperBorder = lowerBorder;
lowerBorder = temp;
}
- sizeTable[0] = lowerBorder; // left
- sizeTable[1] = upperBorder; // right
+ sizeTable[0] = lowerBorder; // left
+ sizeTable[1] = upperBorder; // right
// Y1
- upperBorder = *(dataPtr + 4);
- upperBorder = (upscaleValue(upperBorder, scale) + 0x8000) >> 16;
- upperBorder = -upperBorder;
- lowerBorder = upperBorder;
+ upperBorder = *(dataPtr + 4);
+ upperBorder = (upscaleValue(upperBorder, scale) + 0x8000) >> 16;
+ upperBorder = -upperBorder;
+ lowerBorder = upperBorder;
// Y2
- upperBorder = *(dataPtr + 2);
+ upperBorder = *(dataPtr + 2);
upperBorder -= *(dataPtr + 4);
- upperBorder = (upscaleValue(upperBorder, scale) + 0x8000) >> 16;
+ upperBorder = (upscaleValue(upperBorder, scale) + 0x8000) >> 16;
- if(upperBorder < lowerBorder) // exchange borders if lower > upper
+ if (upperBorder < lowerBorder) // exchange borders if lower > upper
{
- int temp = upperBorder;
+ int temp = upperBorder;
upperBorder = lowerBorder;
lowerBorder = temp;
}
- sizeTable[2] = lowerBorder; // bottom
- sizeTable[3] = upperBorder; // top
+ sizeTable[2] = lowerBorder; // bottom
+ sizeTable[3] = upperBorder; // top
}
-void blitPolyMode1(char* dest, char* ptr, int16* buffer, char color)
-{
+void blitPolyMode1(char *dest, char *ptr, int16 * buffer, char color) {
}
-void blitPolyMode2(char* dest, int16* buffer, char color)
-{
+void blitPolyMode2(char *dest, int16 * buffer, char color) {
}
int polySize1;
@@ -255,31 +243,32 @@ int polySize3;
int polySize4;
int polyVar1;
-int16* polyVar2;
+int16 *polyVar2;
-void drawPolySub(void)
-{
+void drawPolySub(void) {
int i;
- for(i = 0; i < polyVar1; i++)
- {
- line(polyBuffer4[i * 2], polyBuffer4[i * 2 + 1], polyBuffer4[(i + 1) * 2], polyBuffer4[(i + 1) * 2 + 1], m_color & 0xF);
+ for (i = 0; i < polyVar1; i++) {
+ line(polyBuffer4[i * 2], polyBuffer4[i * 2 + 1],
+ polyBuffer4[(i + 1) * 2], polyBuffer4[(i + 1) * 2 + 1],
+ m_color & 0xF);
}
fillpoly(polyBuffer4, polyVar1, m_color & 0xF);
}
-char* drawPolyMode1(char* dataPointer, int linesToDraw)
-{
+char *drawPolyMode1(char *dataPointer, int linesToDraw) {
int index;
- int16* pBufferDest;
+ int16 *pBufferDest;
- polyVar1 = linesToDraw;
+ polyVar1 = linesToDraw;
pBufferDest = &polyBuffer4[polyVar1 * 2];
- index = *(dataPointer++);
+ index = *(dataPointer++);
- polySize1 = polySize2 = pBufferDest[-2] = pBufferDest[-2 + linesToDraw * 2] = polyBuffer2[index * 2];
- polySize1 = polySize2 = pBufferDest[-1] = pBufferDest[-1 + linesToDraw * 2] = polyBuffer2[(index * 2) + 1];
+ polySize1 = polySize2 = pBufferDest[-2] =
+ pBufferDest[-2 + linesToDraw * 2] = polyBuffer2[index * 2];
+ polySize1 = polySize2 = pBufferDest[-1] =
+ pBufferDest[-1 + linesToDraw * 2] = polyBuffer2[(index * 2) + 1];
linesToDraw--;
@@ -287,90 +276,85 @@ char* drawPolyMode1(char* dataPointer, int linesToDraw)
polyVar2 = pBufferDest;
- do
- {
+ do {
int value;
index = *(dataPointer++);
- value = pBufferDest[-2] = pBufferDest[-2 + polyVar1 * 2] = polyBuffer2[index * 2];
-
- if(value < polySize1)
- {
+ value = pBufferDest[-2] = pBufferDest[-2 + polyVar1 * 2] =
+ polyBuffer2[index * 2];
+
+ if (value < polySize1) {
polySize1 = value;
}
- if(value > polySize2)
- {
+ if (value > polySize2) {
polySize2 = value;
}
- value = pBufferDest[-1] = pBufferDest[-1 + polyVar1 * 2] = polyBuffer2[(index * 2) + 1];
-
- if(value > polySize4)
- {
+ value = pBufferDest[-1] = pBufferDest[-1 + polyVar1 * 2] =
+ polyBuffer2[(index * 2) + 1];
+
+ if (value > polySize4) {
polySize4 = value;
}
- if(value < polySize3)
- {
+ if (value < polySize3) {
polySize3 = value;
polyVar2 = pBufferDest - 4;
}
pBufferDest -= 2;
- } while(--linesToDraw);
+ } while (--linesToDraw);
drawPolySub();
return dataPointer;
}
-char* drawPolyMode2(char* dataPointer, int linesToDraw)
-{
+char *drawPolyMode2(char *dataPointer, int linesToDraw) {
int index;
- int16* pBufferDest;
+ int16 *pBufferDest;
pBufferDest = polyBuffer4;
- polyVar1 = linesToDraw;
- polyVar2 = polyBuffer4;
- index = *(dataPointer++);
+ polyVar1 = linesToDraw;
+ polyVar2 = polyBuffer4;
+ index = *(dataPointer++);
- polySize1 = polySize2 = pBufferDest[0] = pBufferDest[linesToDraw * 2] = polyBuffer2[index * 2];
- polySize1 = polySize2 = pBufferDest[1] = pBufferDest[linesToDraw * 2 + 1] = polyBuffer2[(index * 2) + 1];
+ polySize1 = polySize2 = pBufferDest[0] = pBufferDest[linesToDraw * 2] =
+ polyBuffer2[index * 2];
+ polySize1 = polySize2 = pBufferDest[1] =
+ pBufferDest[linesToDraw * 2 + 1] = polyBuffer2[(index * 2) + 1];
linesToDraw--;
pBufferDest += 2;
- do
- {
+ do {
int value;
index = *(dataPointer++);
- value = pBufferDest[0] = pBufferDest[polyVar1 * 2] = polyBuffer2[index * 2];
-
- if(value < polySize1)
- {
+ value = pBufferDest[0] = pBufferDest[polyVar1 * 2] =
+ polyBuffer2[index * 2];
+
+ if (value < polySize1) {
polySize1 = value;
}
- if(value > polySize2)
- {
+ if (value > polySize2) {
polySize2 = value;
}
- value = pBufferDest[1] = pBufferDest[polyVar1 * 2 + 1] = polyBuffer2[(index * 2) + 1];
+ value = pBufferDest[1] = pBufferDest[polyVar1 * 2 + 1] =
+ polyBuffer2[(index * 2) + 1];
- if(value > polySize4)
- {
+ if (value > polySize4) {
polySize4 = value;
}
- if(value < polySize3)
- {
+ if (value < polySize3) {
polySize3 = value;
polyVar2 = pBufferDest;
}
pBufferDest += 2;
- } while(--linesToDraw);
+ } while (--linesToDraw);
drawPolySub();
@@ -378,86 +362,82 @@ char* drawPolyMode2(char* dataPointer, int linesToDraw)
}
// this function builds the poly model and then calls the draw functions (OLD: mainDrawSub1Sub5)
-void buildPolyModel(int positionX, int positionY, int scale, char* ptr2, char* destBuffer, char* dataPtr)
-{
- int counter = 0; // numbers of coordinates to process
- int startX = 0; // first X in model
- int startY = 0; // first Y in model
- int x = 0; // current X
- int y = 0; // current Y
- int offsetXinModel = 0; // offset of the X value in the model
- int offsetYinModel = 0; // offset of the Y value in the model
- unsigned char* dataPointer = (unsigned char*)dataPtr;
- int16* ptrPoly_1_Buf = polyBuffer;
- int16* ptrPoly_2_Buf;
- polyOutputBuffer = destBuffer; // global
+void buildPolyModel(int positionX, int positionY, int scale, char *ptr2,
+ char *destBuffer, char *dataPtr) {
+ int counter = 0; // numbers of coordinates to process
+ int startX = 0; // first X in model
+ int startY = 0; // first Y in model
+ int x = 0; // current X
+ int y = 0; // current Y
+ int offsetXinModel = 0; // offset of the X value in the model
+ int offsetYinModel = 0; // offset of the Y value in the model
+ unsigned char *dataPointer = (unsigned char *)dataPtr;
+ int16 *ptrPoly_1_Buf = polyBuffer;
+ int16 *ptrPoly_2_Buf;
+ polyOutputBuffer = destBuffer; // global
m_flipLeftRight = 0;
m_useSmallScale = 0;
- m_lowerX = *(dataPointer + 3);
- m_lowerY = *(dataPointer + 4);
+ m_lowerX = *(dataPointer + 3);
+ m_lowerY = *(dataPointer + 4);
- if(scale < 0)
- {
- scale = -scale; // flip left right
+ if (scale < 0) {
+ scale = -scale; // flip left right
m_flipLeftRight = 1;
}
- if(scale < 0x180) // If scale is smaller than 384
+ if (scale < 0x180) // If scale is smaller than 384
{
m_useSmallScale = 1;
- m_scaleValue = scale << 1; // double scale
- }
- else
- {
+ m_scaleValue = scale << 1; // double scale
+ } else {
m_scaleValue = scale;
}
dataPointer += 5;
m_coordCount = (*(dataPointer++)) + 1; // original uses +1 here but its later substracted again, we could skip it
- m_first_X = *(dataPointer++);
- m_first_Y = *(dataPointer++);
- startX = m_lowerX - m_first_X;
- startY = m_lowerY - m_first_Y;
+ m_first_X = *(dataPointer++);
+ m_first_Y = *(dataPointer++);
+ startX = m_lowerX - m_first_X;
+ startY = m_lowerY - m_first_Y;
- if(m_useSmallScale)
- {
+ if (m_useSmallScale) {
startX >>= 1;
startY >>= 1;
}
-
- if(m_flipLeftRight)
- {
+
+ if (m_flipLeftRight) {
startX = -startX;
}
/*
- NOTE:
-
- The original code continues here with using X, Y instead of startX and StartY.
-
- Original code:
- positionX -= (upscaleValue(startX, m_scaleValue) + 0x8000) >> 16;
- positionY -= (upscaleValue(startX, m_scaleValue) + 0x8000) >> 16;
- */
-
+ * NOTE:
+ *
+ * The original code continues here with using X, Y instead of startX and StartY.
+ *
+ * Original code:
+ * positionX -= (upscaleValue(startX, m_scaleValue) + 0x8000) >> 16;
+ * positionY -= (upscaleValue(startX, m_scaleValue) + 0x8000) >> 16;
+ */
+
// get coordinates from data
- startX = positionX - ((upscaleValue(startX, m_scaleValue) + 0x8000) >> 16);
- startY = positionY - ((upscaleValue(startY, m_scaleValue) + 0x8000) >> 16);
-
+ startX =
+ positionX - ((upscaleValue(startX, m_scaleValue) + 0x8000) >> 16);
+ startY =
+ positionY - ((upscaleValue(startY, m_scaleValue) + 0x8000) >> 16);
+
ptrPoly_1_Buf[0] = 0;
ptrPoly_1_Buf[1] = 0;
- ptrPoly_1_Buf += 2;
- counter = m_coordCount - 1 - 1; // skip the first pair, we already have the values
+ ptrPoly_1_Buf += 2;
+ counter = m_coordCount - 1 - 1; // skip the first pair, we already have the values
- do
- {
+ do {
x = *(dataPointer++) - m_first_X;
y = *(dataPointer++) - m_first_Y;
-
- if(m_useSmallScale) // shrink all coordinates by factor 2 if a scale smaller than 384 is used
+
+ if (m_useSmallScale) // shrink all coordinates by factor 2 if a scale smaller than 384 is used
{
x >>= 1;
y >>= 1;
@@ -466,232 +446,213 @@ void buildPolyModel(int positionX, int positionY, int scale, char* ptr2, char* d
ptrPoly_1_Buf[0] = offsetXinModel - x;
ptrPoly_1_Buf++;
offsetXinModel = x;
-
+
ptrPoly_1_Buf[0] = -(offsetYinModel - y);
ptrPoly_1_Buf++;
offsetYinModel = y;
- } while(--counter);
+ } while (--counter);
// scale and adjust coordinates with offset (using two polybuffers by doing that)
/*
- NOTE: Is there a need for having two, a scaled and unscaled polybuffer?
- */
-
+ * NOTE: Is there a need for having two, a scaled and unscaled polybuffer?
+ */
+
ptrPoly_2_Buf = polyBuffer;
ptrPoly_1_Buf = polyBuffer2;
- counter = m_coordCount - 1; // reset counter // process first pair two
- m_current_X = 0;
- m_current_Y = 0;
+ counter = m_coordCount - 1; // reset counter // process first pair two
+ m_current_X = 0;
+ m_current_Y = 0;
- do
- {
+ do {
x = ptrPoly_2_Buf[0];
-
- if(m_flipLeftRight == 0)
- {
- x = -x;
- }
+ if (m_flipLeftRight == 0) {
+ x = -x;
+ }
//////////////////
- m_current_X += upscaleValue(x, m_scaleValue);
- ptrPoly_1_Buf[0] = ((m_current_X + 0x8000) >> 16) + startX; // adjust X value with start offset
+ m_current_X += upscaleValue(x, m_scaleValue);
+ ptrPoly_1_Buf[0] = ((m_current_X + 0x8000) >> 16) + startX; // adjust X value with start offset
+
+ m_current_Y += upscaleValue(ptrPoly_2_Buf[1], m_scaleValue);
+ ptrPoly_1_Buf[1] = ((m_current_Y + 0x8000) >> 16) + startY; // adjust Y value with start offset
- m_current_Y += upscaleValue(ptrPoly_2_Buf[1], m_scaleValue);
- ptrPoly_1_Buf[1] = ((m_current_Y + 0x8000) >> 16) + startY; // adjust Y value with start offset
-
/////////////////
ptrPoly_1_Buf += 2;
ptrPoly_2_Buf += 2;
- } while(--counter);
+ } while (--counter);
// position of the dataPointer is m_coordCount * 2
- do
- {
+ do {
int linesToDraw = *dataPointer++;
- if(linesToDraw > 1) // if value not zero
+ if (linesToDraw > 1) // if value not zero
{
uint16 minimumScale;
- m_color = *dataPointer; // color
+ m_color = *dataPointer; // color
dataPointer += 2;
- minimumScale = *(uint16*) (dataPointer);
+ minimumScale = *(uint16 *) (dataPointer);
dataPointer += 2;
flipShort(&minimumScale);
- if(minimumScale > scale) // if the scale is too small, for the model to be drawn ...
- {
- dataPointer += linesToDraw; // ... skip ahead
- }
- else
+ if (minimumScale > scale) // if the scale is too small, for the model to be drawn ...
{
- if(m_flipLeftRight)
- {
- dataPointer = (unsigned char*)drawPolyMode1((char*)dataPointer, linesToDraw);
- }
- else
- {
- dataPointer = (unsigned char*)drawPolyMode2((char*)dataPointer, linesToDraw);
+ dataPointer += linesToDraw; // ... skip ahead
+ } else {
+ if (m_flipLeftRight) {
+ dataPointer =
+ (unsigned char *)
+ drawPolyMode1((char *)dataPointer,
+ linesToDraw);
+ } else {
+ dataPointer =
+ (unsigned char *)
+ drawPolyMode2((char *)dataPointer,
+ linesToDraw);
}
- if(destBuffer)
- {
- if(ptr2)
- {
- blitPolyMode1(destBuffer, ptr2, polyBuffer3, m_color & 0xF);
- }
- else
- {
- blitPolyMode2(destBuffer, polyBuffer3, m_color & 0xF);
+ if (destBuffer) {
+ if (ptr2) {
+ blitPolyMode1(destBuffer, ptr2,
+ polyBuffer3,
+ m_color & 0xF);
+ } else {
+ blitPolyMode2(destBuffer,
+ polyBuffer3,
+ m_color & 0xF);
}
}
}
- }
- else
- {
+ } else {
dataPointer += 4;
}
- } while(*dataPointer != 0xFF);
+ } while (*dataPointer != 0xFF);
}
// draw poly sprite (OLD: mainDrawSub1)
-void mainDrawPolygons(int fileIndex, cellStruct* pObject, int X, int scale, int Y, char* destBuffer, char* dataPtr)
-{
- int newX;
- int newY;
- int newScale;
- char* newDataPtr;
- char* ptr2; // unused
- int var_8; // unused
+void mainDrawPolygons(int fileIndex, cellStruct *pObject, int X, int scale,
+ int Y, char *destBuffer, char *dataPtr) {
+ int newX;
+ int newY;
+ int newScale;
+ char *newDataPtr;
+ char *ptr2; // unused
+ int var_8; // unused
- int sizeTable[4]; // 0 = left, 1 = right, 2 = bottom, 3 = top
+ int sizeTable[4]; // 0 = left, 1 = right, 2 = bottom, 3 = top
// this function checks if the dataPtr is not 0, else it retrives the data for X, Y, scale and DataPtr again (OLD: mainDrawSub1Sub1)
- getPolyData(fileIndex, X, Y, &newScale, &newY, &newX, &newDataPtr, scale, dataPtr);
-
+ getPolyData(fileIndex, X, Y, &newScale, &newY, &newX, &newDataPtr,
+ scale, dataPtr);
+
// this function fills the sizeTable for the poly (OLD: mainDrawSub1Sub2)
- getPolySize(newX, newY, newScale, sizeTable, (unsigned char*)newDataPtr);
+ getPolySize(newX, newY, newScale, sizeTable,
+ (unsigned char *)newDataPtr);
- spriteX2 = sizeTable[0] - 2; // left border
+ spriteX2 = sizeTable[0] - 2; // left border
spriteX1 = sizeTable[1] + 18; // right border
- spriteY2 = sizeTable[2] - 2; // bottom border
- spriteY1 = sizeTable[3] + 2; // top border
-
+ spriteY2 = sizeTable[2] - 2; // bottom border
+ spriteY1 = sizeTable[3] + 2; // top border
+
/* if (X == 28 && Y == 80 && scale == 1024) {
printf("0--> x1: %i, y1: %i, x2: %i, y2: %i\n", sizeTable[1], sizeTable[3], sizeTable[0], sizeTable[2]);
printf("1--> x1: %i, y1: %i, x2: %i, y2: %i\n", spriteX1, spriteY1, spriteX2, spriteY2);
} */
- if(spriteX2 >= 320)
+ if (spriteX2 >= 320)
return;
- if(spriteX1 < 0)
+ if (spriteX1 < 0)
return;
- if(spriteY2 >= 200)
+ if (spriteY2 >= 200)
return;
- if(spriteY1 < 0)
+ if (spriteY1 < 0)
return;
- if(spriteX2 < 0)
- {
+ if (spriteX2 < 0) {
spriteX2 = 0;
}
- if(spriteX1 > 320)
- {
+ if (spriteX1 > 320) {
spriteX1 = 320;
}
- if(spriteY2 < 0)
- {
+ if (spriteY2 < 0) {
spriteY2 = 0;
}
- if(spriteY1 > 200)
- {
+ if (spriteY1 > 200) {
spriteY1 = 200;
}
- if(spriteX1 == spriteX2)
+ if (spriteX1 == spriteX2)
return;
- if(spriteY1 == spriteY2)
+ if (spriteY1 == spriteY2)
return;
ptr2 = NULL;
var_8 = 0;
- if(pObject)
- {
- cellStruct* pCurrentObject = pObject;
+ if (pObject) {
+ cellStruct *pCurrentObject = pObject;
- do
- {
- if(pCurrentObject->type == 2)
- {
+ do {
+ if (pCurrentObject->type == 2) {
// ASSERT(0);
}
pCurrentObject = pCurrentObject->next;
- } while(pCurrentObject);
+ } while (pCurrentObject);
}
-
// this function builds the poly model and then calls the draw functions (OLD: mainDrawSub1Sub5)
buildPolyModel(newX, newY, newScale, ptr2, destBuffer, newDataPtr);
}
-void mainSprite(int globalX, int globalY, gfxEntryStruct* pGfxPtr, uint8* ouputPtr, int newColor, int idx)
-{
+void mainSprite(int globalX, int globalY, gfxEntryStruct *pGfxPtr,
+ uint8 *ouputPtr, int newColor, int idx) {
// this is used for font only
- if(pGfxPtr)
- {
- uint8* initialOuput;
- uint8* output;
+ if (pGfxPtr) {
+ uint8 *initialOuput;
+ uint8 *output;
int i;
int j;
int x;
int y;
- uint8* ptr = pGfxPtr->imagePtr;
+ uint8 *ptr = pGfxPtr->imagePtr;
int height = pGfxPtr->height;
- int width = pGfxPtr->width;
+ int width = pGfxPtr->width;
- if(globalY < 0)
- {
+ if (globalY < 0) {
globalY = 0;
}
- if(globalY + pGfxPtr->height >= 198)
- {
+ if (globalY + pGfxPtr->height >= 198) {
globalY = 198 - pGfxPtr->height;
}
- initialOuput = ouputPtr + (globalY*320) + globalX;
+ initialOuput = ouputPtr + (globalY * 320) + globalX;
y = globalY;
x = globalX;
- for(i = 0; i < height; i++)
- {
+ for (i = 0; i < height; i++) {
output = initialOuput + 320 * i;
-
- for(j = 0; j < width; j++)
- {
+
+ for (j = 0; j < width; j++) {
uint8 color = *(ptr++);
- if(color)
- {
- if((x >= 0) && (x < 320) && (y >= 0) && (y < 200))
- {
- if(color == 1)
- {
+ if (color) {
+ if ((x >= 0) && (x < 320) && (y >= 0)
+ && (y < 200)) {
+ if (color == 1) {
*output = (uint8) 0;
- }
- else
- {
- *output = (uint8) newColor;
+ } else {
+ *output =
+ (uint8) newColor;
}
}
}
@@ -701,37 +662,35 @@ void mainSprite(int globalX, int globalY, gfxEntryStruct* pGfxPtr, uint8* ouputP
}
}
-void mainDrawSub4(int objX1, int var_6, cellStruct* currentObjPtr, char* data1, int objY2, int objX2, char* output, char* data2)
-{
+void mainDrawSub4(int objX1, int var_6, cellStruct *currentObjPtr,
+ char *data1, int objY2, int objX2, char *output, char *data2) {
int x = 0;
int y = 0;
- for(y = 0; y < var_6; y++)
- {
- for(x = 0; x < (objX1 * 8); x++)
- {
+ for (y = 0; y < var_6; y++) {
+ for (x = 0; x < (objX1 * 8); x++) {
uint8 color = (data1[0]);
data1++;
- if((x + objX2) >= 0 && (x + objX2) < 320 && (y + objY2) >= 0 && (y + objY2) < 200)
- {
- if(color != currentTransparent)
- {
- output[320 * (y + objY2) + x + objX2] = color;
+ if ((x + objX2) >= 0 && (x + objX2) < 320
+ && (y + objY2) >= 0 && (y + objY2) < 200) {
+ if (color != currentTransparent) {
+ output[320 * (y + objY2) + x + objX2] =
+ color;
}
}
}
}
}
-void mainDraw5(int overlayIdx, int idx, int field_28, cellStruct* pObject, int newVal)
-{
- drawVar1Struct* pNewEntry;
+void mainDraw5(int overlayIdx, int idx, int field_28, cellStruct *pObject,
+ int newVal) {
+ drawVar1Struct *pNewEntry;
- pNewEntry = (drawVar1Struct*)malloc(sizeof(drawVar1Struct));
+ pNewEntry = (drawVar1Struct *) malloc(sizeof(drawVar1Struct));
pNewEntry->next = drawVar1.next;
- drawVar1.next = pNewEntry;
+ drawVar1.next = pNewEntry;
pNewEntry->field_2 = overlayIdx;
pNewEntry->field_4 = idx;
@@ -741,38 +700,36 @@ void mainDraw5(int overlayIdx, int idx, int field_28, cellStruct* pObject, int n
}
#ifdef _DEBUG
-void drawCtp(void)
-{
+void drawCtp(void) {
int i;
- if(ctp_walkboxTable)
- {
- for(i = 0; i < 15; i++)
- {
- uint16* dataPtr = &ctp_walkboxTable[i * 40];
- int type = walkboxType[i]; // show different types in different colors
+ if (ctp_walkboxTable) {
+ for (i = 0; i < 15; i++) {
+ uint16 *dataPtr = &ctp_walkboxTable[i * 40];
+ int type = walkboxType[i]; // show different types in different colors
- if(*dataPtr)
- {
+ if (*dataPtr) {
int j;
- fillpoly((short*)dataPtr+1, *dataPtr, type);
+ fillpoly((short *)dataPtr + 1, *dataPtr, type);
- for(j = 0; j < (*dataPtr - 1); j++)
- {
- line(dataPtr[1 + j * 2], dataPtr[1 + j * 2 + 1], dataPtr[1 + (j + 1) * 2], dataPtr[1 + ( j + 1) * 2 + 1], 0);
+ for (j = 0; j < (*dataPtr - 1); j++) {
+ line(dataPtr[1 + j * 2],
+ dataPtr[1 + j * 2 + 1],
+ dataPtr[1 + (j + 1) * 2],
+ dataPtr[1 + (j + 1) * 2 + 1], 0);
}
- line(dataPtr[1 + j * 2], dataPtr[1 + j * 2 + 1], dataPtr[1], dataPtr[2], 0);
+ line(dataPtr[1 + j * 2],
+ dataPtr[1 + j * 2 + 1], dataPtr[1],
+ dataPtr[2], 0);
}
}
}
}
#endif
-void drawMenu(menuStruct* pMenu)
-{
- if(pMenu && pMenu->numElements)
- {
+void drawMenu(menuStruct *pMenu) {
+ if (pMenu && pMenu->numElements) {
int height;
int x;
int y;
@@ -783,29 +740,24 @@ void drawMenu(menuStruct* pMenu)
int currentY;
int var_8;
int di;
- menuElementStruct* si;
+ menuElementStruct *si;
height = pMenu->gfx->height;
- x = pMenu->x;
- y = pMenu->y;
+ x = pMenu->x;
+ y = pMenu->y;
var_10 = pMenu->gfx->width / (199 - (pMenu->gfx->width * 2));
- bx = var_10 / (pMenu->numElements + 1); // rustine...
+ bx = var_10 / (pMenu->numElements + 1); // rustine...
- if(!bx)
- {
+ if (!bx) {
bx++;
- if((pMenu->numElements * height) + y > 199 - height)
- {
+ if ((pMenu->numElements * height) + y > 199 - height) {
y = ((-1 - pMenu->numElements) * height) + 200;
}
- }
- else
- {
- if(var_10 % pMenu->numElements)
- {
+ } else {
+ if (var_10 % pMenu->numElements) {
bx++;
}
@@ -814,21 +766,19 @@ void drawMenu(menuStruct* pMenu)
newX = 320 * (2 - bx);
- if(newX < x)
- {
+ if (newX < x) {
x = newX;
}
- if(x < 0)
- {
+ if (x < 0) {
x = 0;
}
- var_6 = (80 * (bx-1)) + x;
+ var_6 = (80 * (bx - 1)) + x;
- if(var_6 <= 320)
- {
- mainSprite(var_6, y - height, pMenu->gfx, gfxModuleData.pPage10, video4, 320);
+ if (var_6 <= 320) {
+ mainSprite(var_6, y - height, pMenu->gfx,
+ gfxModuleData.pPage10, video4, 320);
}
currentY = y;
@@ -837,59 +787,48 @@ void drawMenu(menuStruct* pMenu)
si = pMenu->ptrNextElement;
- if(si)
- {
- do
- {
+ if (si) {
+ do {
int color;
- gfxEntryStruct* var_2 = si->gfx;
+ gfxEntryStruct *var_2 = si->gfx;
- si->x = di;
- si->y = currentY;
+ si->x = di;
+ si->y = currentY;
si->varA = 320;
- if(si->varC)
- {
+ if (si->varC) {
color = video3;
- }
- else
- {
- if(si->color != 255)
- {
+ } else {
+ if (si->color != 255) {
color = si->color;
- }
- else
- {
+ } else {
color = video2;
}
}
- if(di < 320)
- {
- mainSprite(di, currentY, var_2, gfxModuleData.pPage10, color, 320);
+ if (di < 320) {
+ mainSprite(di, currentY, var_2,
+ gfxModuleData.pPage10, color, 320);
}
currentY += height;
var_8++;
- if(var_8 == var_10)
- {
- var_8 = 0;
- di += 320;
+ if (var_8 == var_10) {
+ var_8 = 0;
+ di += 320;
currentY = y;
}
si = si->next;
- } while(si);
+ } while (si);
}
}
}
-int getValueFromObjectQuerry(objectParamsQuery* params, int idx)
-{
- switch(idx)
- {
+int getValueFromObjectQuerry(objectParamsQuery *params, int idx) {
+ switch (idx) {
case 0:
return params->X;
case 1:
@@ -913,10 +852,9 @@ int getValueFromObjectQuerry(objectParamsQuery* params, int idx)
return 0;
}
-void mainDraw(int16 param)
-{
- uint8* bgPtr;
- cellStruct* currentObjPtr;
+void mainDraw(int16 param) {
+ uint8 *bgPtr;
+ cellStruct *currentObjPtr;
int16 currentObjIdx;
int16 objX1 = 0;
int16 objY1 = 0;
@@ -926,17 +864,15 @@ void mainDraw(int16 param)
int16 objZ2;
int16 spriteHeight;
-
- if(fadeVar)
- {
+ if (fadeVar) {
return;
}
bgPtr = backgroundPtrtable[currentActiveBackgroundPlane];
- if(bgPtr)
- {
- gfxModuleData_gfxCopyScreen((char*)bgPtr,(char*)gfxModuleData.pPage10);
+ if (bgPtr) {
+ gfxModuleData_gfxCopyScreen((char *)bgPtr,
+ (char *)gfxModuleData.pPage10);
}
drawVar1.next = NULL;
@@ -950,144 +886,192 @@ void mainDraw(int16 param)
//-------------------------------------------------- PROCESS SPRITES -----------------------------------------//
- while(currentObjPtr)
- {
- if((currentActiveBackgroundPlane == currentObjPtr->backgroundPlane) && (currentObjPtr->freeze == 0) && (currentObjPtr->type == OBJ_SPRITE))
- {
+ while (currentObjPtr) {
+ if ((currentActiveBackgroundPlane ==
+ currentObjPtr->backgroundPlane)
+ && (currentObjPtr->freeze == 0)
+ && (currentObjPtr->type == OBJ_SPRITE)) {
objectParamsQuery params;
currentObjIdx = currentObjPtr->idx;
- if((currentObjPtr->followObjectOverlayIdx != currentObjPtr->overlay) || (currentObjPtr->followObjectIdx != currentObjPtr->idx))
- {
+ if ((currentObjPtr->followObjectOverlayIdx !=
+ currentObjPtr->overlay)
+ || (currentObjPtr->followObjectIdx !=
+ currentObjPtr->idx)) {
// Declaring this twice ?
// objectParamsQuery params;
- getMultipleObjectParam(currentObjPtr->followObjectOverlayIdx, currentObjPtr->followObjectIdx, &params);
+ getMultipleObjectParam(currentObjPtr->
+ followObjectOverlayIdx,
+ currentObjPtr->followObjectIdx, &params);
objX1 = params.X;
objY1 = params.Y;
objZ1 = params.fileIdx;
- }
- else
- {
+ } else {
objX1 = 0;
objY1 = 0;
objZ1 = 0;
}
- getMultipleObjectParam(currentObjPtr->overlay, currentObjIdx, &params);
+ getMultipleObjectParam(currentObjPtr->overlay,
+ currentObjIdx, &params);
objX2 = objX1 + params.X;
objY2 = objY1 + params.Y;
objZ2 = params.fileIdx;
- if(objZ2 >= 0)
- {
+ if (objZ2 >= 0) {
objZ2 += objZ1;
}
- if((params.var5 >= 0) && (objZ2 >= 0) && filesDatabase[objZ2].subData.ptr)
- {
- if(filesDatabase[objZ2].subData.resourceType == 8) // Poly
+ if ((params.var5 >= 0) && (objZ2 >= 0)
+ && filesDatabase[objZ2].subData.ptr) {
+ if (filesDatabase[objZ2].subData.resourceType == 8) // Poly
{
- mainDrawPolygons(objZ2, currentObjPtr, objX2, params.scale, objY2, (char*)gfxModuleData.pPage10, (char*)filesDatabase[objZ2].subData.ptr); // poly
- }
- else if(filesDatabase[objZ2].subData.resourceType == 6) // sound
- {
- }
- else if(filesDatabase[objZ2].resType == 1) //(num plan == 1)
+ mainDrawPolygons(objZ2, currentObjPtr, objX2, params.scale, objY2, (char *)gfxModuleData.pPage10, (char *)filesDatabase[objZ2].subData.ptr); // poly
+ } else if (filesDatabase[objZ2].subData.resourceType == 6) // sound
{
- }
- else if(filesDatabase[objZ2].subData.resourceType == 4)
+ } else if (filesDatabase[objZ2].resType == 1) //(num plan == 1)
{
- objX1 = filesDatabase[objZ2].width; // width
+ } else if (filesDatabase[objZ2].subData.
+ resourceType == 4) {
+ objX1 = filesDatabase[objZ2].width; // width
spriteHeight = filesDatabase[objZ2].height; // height
- if(filesDatabase[objZ2].subData.ptr)
- {
- currentTransparent = filesDatabase[objZ2].subData.transparency;
-
- mainDrawSub4(objX1, spriteHeight, currentObjPtr, (char*)filesDatabase[objZ2].subData.ptr, objY2, objX2, (char*)gfxModuleData.pPage10, (char*)filesDatabase[objZ2].subData.ptr);
+ if (filesDatabase[objZ2].subData.ptr) {
+ currentTransparent =
+ filesDatabase[objZ2].
+ subData.transparency;
+
+ mainDrawSub4(objX1,
+ spriteHeight,
+ currentObjPtr,
+ (char *)
+ filesDatabase[objZ2].
+ subData.ptr, objY2, objX2,
+ (char *)gfxModuleData.
+ pPage10,
+ (char *)
+ filesDatabase[objZ2].
+ subData.ptr);
}
}
}
- if((currentObjPtr->animStep != 0) && (param == 0))
- {
- if(currentObjPtr->currentAnimDelay <= 0)
- {
+ if ((currentObjPtr->animStep != 0) && (param == 0)) {
+ if (currentObjPtr->currentAnimDelay <= 0) {
int newVal;
bool change = true;
- newVal = getValueFromObjectQuerry(&params,currentObjPtr->field_28) + currentObjPtr->animStep;
-
- if(currentObjPtr->animStep > 0)
- {
- if(newVal > currentObjPtr->field_22)
- {
- if(currentObjPtr->field_30)
- {
- newVal = currentObjPtr->field_20;
- currentObjPtr->field_30--;
- }
- else
- {
+ newVal =
+ getValueFromObjectQuerry(&params,
+ currentObjPtr->field_28) +
+ currentObjPtr->animStep;
+
+ if (currentObjPtr->animStep > 0) {
+ if (newVal >
+ currentObjPtr->field_22) {
+ if (currentObjPtr->
+ field_30) {
+ newVal =
+ currentObjPtr->
+ field_20;
+ currentObjPtr->
+ field_30--;
+ } else {
int16 data2;
- data2 = currentObjPtr->field_20;
+ data2 =
+ currentObjPtr->
+ field_20;
change = false;
- currentObjPtr->animStep = 0;
+ currentObjPtr->
+ animStep =
+ 0;
- if(currentObjPtr->field_2A) // should we resume the script ?
+ if (currentObjPtr->field_2A) // should we resume the script ?
{
- if(currentObjPtr->field_1A == 20)
- {
- changeScriptParamInList(currentObjPtr->field_18, currentObjPtr->field_16, &scriptHandle2, 0, -1);
- }
- else if(currentObjPtr->field_1A == 30)
+ if (currentObjPtr->field_1A == 20) {
+ changeScriptParamInList
+ (currentObjPtr->
+ field_18,
+ currentObjPtr->
+ field_16,
+ &scriptHandle2,
+ 0,
+ -1);
+ } else
+ if
+ (currentObjPtr->
+ field_1A
+ ==
+ 30)
{
- changeScriptParamInList(currentObjPtr->field_18, currentObjPtr->field_16, &scriptHandle1, 0, -1);
+ changeScriptParamInList
+ (currentObjPtr->
+ field_18,
+ currentObjPtr->
+ field_16,
+ &scriptHandle1,
+ 0,
+ -1);
}
}
newVal = data2;
}
}
- }
- else
- {
+ } else {
ASSERT(0);
/* if(currentObjPtr->field_22>newVal)
- {
- } */
+ * {
+ * } */
}
- if(currentObjPtr->nextAnimDelay >= 0)
- {
- currentObjPtr->currentAnimDelay = currentObjPtr->nextAnimDelay;
+ if (currentObjPtr->nextAnimDelay >= 0) {
+ currentObjPtr->
+ currentAnimDelay =
+ currentObjPtr->
+ nextAnimDelay;
}
- if((currentObjPtr->field_2C >= 0) && (currentObjPtr->field_2C == newVal) && (currentObjPtr->field_2A != 0))
- {
- if(currentObjPtr->field_1A == 20)
- {
- changeScriptParamInList(currentObjPtr->field_18, currentObjPtr->field_16, &scriptHandle2, 0, -1);
- }
- else if(currentObjPtr->field_1A == 30)
- {
- changeScriptParamInList(currentObjPtr->field_18, currentObjPtr->field_16, &scriptHandle1, 0, -1);
+ if ((currentObjPtr->field_2C >= 0)
+ && (currentObjPtr->field_2C ==
+ newVal)
+ && (currentObjPtr->field_2A !=
+ 0)) {
+ if (currentObjPtr->field_1A ==
+ 20) {
+ changeScriptParamInList
+ (currentObjPtr->
+ field_18,
+ currentObjPtr->
+ field_16,
+ &scriptHandle2, 0,
+ -1);
+ } else if (currentObjPtr->
+ field_1A == 30) {
+ changeScriptParamInList
+ (currentObjPtr->
+ field_18,
+ currentObjPtr->
+ field_16,
+ &scriptHandle1, 0,
+ -1);
}
currentObjPtr->field_2A = 0;
}
- if(change)
- {
- mainDraw5(currentObjPtr->overlay, currentObjPtr->idx, currentObjPtr->field_28, currentObjPtr, newVal);
+ if (change) {
+ mainDraw5(currentObjPtr->
+ overlay,
+ currentObjPtr->idx,
+ currentObjPtr->field_28,
+ currentObjPtr, newVal);
}
- }
- else
- {
+ } else {
currentObjPtr->currentAnimDelay--;
}
}
@@ -1105,11 +1089,12 @@ void mainDraw(int16 param)
currentObjPtr = cellHead.next;
- while(currentObjPtr)
- {
- if(currentObjPtr->type == 5 && currentObjPtr->freeze == 0)
- {
- mainSprite(currentObjPtr->field_A, currentObjPtr->field_C, currentObjPtr->gfxPtr, gfxModuleData.pPage10, currentObjPtr->field_10, currentObjPtr->spriteIdx);
+ while (currentObjPtr) {
+ if (currentObjPtr->type == 5 && currentObjPtr->freeze == 0) {
+ mainSprite(currentObjPtr->field_A,
+ currentObjPtr->field_C, currentObjPtr->gfxPtr,
+ gfxModuleData.pPage10, currentObjPtr->field_10,
+ currentObjPtr->spriteIdx);
var20 = 1;
}
currentObjPtr = currentObjPtr->next;
@@ -1117,17 +1102,14 @@ void mainDraw(int16 param)
//----------------------------------------------------------------------------------------------------------------//
- if(currentActiveMenu != -1)
- {
- if(menuTable[currentActiveMenu])
- {
+ if (currentActiveMenu != -1) {
+ if (menuTable[currentActiveMenu]) {
drawMenu(menuTable[currentActiveMenu]);
return;
}
}
- if(mouseVar1)
- {
+ if (mouseVar1) {
ASSERT(0);
// TODO: draw mouse here
}