Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 28 additions & 19 deletions Standard Gaming Platform/vobject.cpp
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
#include "DirectDraw Calls.h"
#include <stdio.h>
#include "debug.h"
#include "video.h"
#include "himage.h"
#include "vobject.h"
#include "wcheck.h"
#include "vobject_blitters.h"
#include "sgp.h"
#include "DirectDraw Calls.h"
#include <stdio.h>
#include "debug.h"
#include "video.h"
#include "himage.h"
#include "vobject.h"
#include "wcheck.h"
#include "vobject_blitters.h"
#include "sgp.h"

#include <unordered_map>

Expand Down Expand Up @@ -589,6 +589,7 @@ HVOBJECT CreateVideoObject( VOBJECT_DESC *VObjectDesc )

hVObject->usNumberOf16BPPObjects = 1;
hVObject->ubBitDepth = hImage->ubBitDepth;
strncpy(hVObject->ImageFile, hImage->ImageFile, SGPFILENAME_LEN);

if ( VObjectDesc->fCreateFlags & VOBJECT_CREATE_FROMFILE )
{
Expand Down Expand Up @@ -627,6 +628,7 @@ HVOBJECT CreateVideoObject( VOBJECT_DESC *VObjectDesc )

hVObject->usNumberOf16BPPObjects = 1;
hVObject->ubBitDepth = hImage->ubBitDepth;
strncpy(hVObject->ImageFile, hImage->ImageFile, SGPFILENAME_LEN);

if ( VObjectDesc->fCreateFlags & VOBJECT_CREATE_FROMFILE )
{
Expand Down Expand Up @@ -656,6 +658,7 @@ HVOBJECT CreateVideoObject( VOBJECT_DESC *VObjectDesc )
hVObject->pETRLEObject = TempETRLEData.pETRLEObject;
hVObject->pPixData = TempETRLEData.pPixData;
hVObject->uiSizePixData = TempETRLEData.uiSizePixData;
strncpy(hVObject->ImageFile, hImage->ImageFile, SGPFILENAME_LEN);

// Set palette from himage
if ( hImage->ubBitDepth == 8 )
Expand Down Expand Up @@ -897,9 +900,10 @@ UINT32 count;
//
// *******************************************************************

// High level blit function encapsolates ALL effects and BPP
// High level blit function encapsulates ALL effects and BPP
BOOLEAN BltVideoObjectToBuffer( UINT16 *pBuffer, UINT32 uiDestPitchBYTES, HVOBJECT hSrcVObject, UINT16 usIndex, INT32 iDestX, INT32 iDestY, INT32 fBltFlags, blt_fx *pBltFx )
{
CHAR8 errorText[512];
// Sometimes an exception is thrown in that method.
//BF __try
{
Expand All @@ -920,7 +924,8 @@ BOOLEAN BltVideoObjectToBuffer( UINT16 *pBuffer, UINT32 uiDestPitchBYTES, HVOBJE
switch( hSrcVObject->ubBitDepth )
{
case 32:
SGP_THROW_IFFALSE(usIndex < hSrcVObject->usNumberOf16BPPObjects, L"index larger that number images");
sprintf(errorText, "Video object index is larger than the number of images. Filename: %s", hSrcVObject->ImageFile);
SGP_THROW_IFFALSE(usIndex < hSrcVObject->usNumberOf16BPPObjects, errorText);
image = &hSrcVObject->p16BPPObject[usIndex];
Blt32BPPTo16BPPTrans( pBuffer, uiDestPitchBYTES,
(UINT32*)image->p16BPPData, image->usWidth * sizeof(UINT32),
Expand All @@ -929,7 +934,8 @@ BOOLEAN BltVideoObjectToBuffer( UINT16 *pBuffer, UINT32 uiDestPitchBYTES, HVOBJE
break;

case 16:
SGP_THROW_IFFALSE(usIndex < hSrcVObject->usNumberOf16BPPObjects, L"index larger that number images");
sprintf(errorText, "Video object index is larger than the number of images. Filename: %s", hSrcVObject->ImageFile);
SGP_THROW_IFFALSE(usIndex < hSrcVObject->usNumberOf16BPPObjects, errorText);
image = &hSrcVObject->p16BPPObject[usIndex];
if ( fBltFlags & VO_BLT_SRCTRANSPARENCY )
{
Expand All @@ -949,8 +955,8 @@ BOOLEAN BltVideoObjectToBuffer( UINT16 *pBuffer, UINT32 uiDestPitchBYTES, HVOBJE
break;

case 8:

SGP_THROW_IFFALSE( hSrcVObject->usNumberOfObjects > usIndex, L"Video object index is larger than the number of subimages");
sprintf(errorText, "Video object index is larger than the number of sub images. Filename: %s", hSrcVObject->ImageFile);
SGP_THROW_IFFALSE( hSrcVObject->usNumberOfObjects > usIndex, errorText);
// Switch based on flags given
do
{
Expand Down Expand Up @@ -1561,9 +1567,10 @@ BOOLEAN BltVideoObjectOutline(UINT32 uiDestVSurface, HVOBJECT hSrcVObject, UINT1

BOOLEAN BltVideoObjectOutlineShadowFromIndex(UINT32 uiDestVSurface, UINT32 uiSrcVObject, UINT16 usIndex, INT32 iDestX, INT32 iDestY )
{
UINT16 *pBuffer;
UINT32 uiPitch;
HVOBJECT hSrcVObject;
CHAR8 errorText[512];
UINT16 *pBuffer;
UINT32 uiPitch;
HVOBJECT hSrcVObject;

// Lock video surface
pBuffer = (UINT16*)LockVideoSurface( uiDestVSurface, &uiPitch );
Expand Down Expand Up @@ -1592,14 +1599,16 @@ BOOLEAN BltVideoObjectOutlineShadowFromIndex(UINT32 uiDestVSurface, UINT32 uiSrc
}
else if(hSrcVObject->ubBitDepth == 16)
{
SGP_THROW_IFFALSE(usIndex < hSrcVObject->usNumberOf16BPPObjects, L"index larger that number images");
sprintf(errorText, "Video object index is larger than the number of images. Filename: %s", hSrcVObject->ImageFile);
SGP_THROW_IFFALSE(usIndex < hSrcVObject->usNumberOf16BPPObjects, errorText);
SixteenBPPObjectInfo &image = hSrcVObject->p16BPPObject[0];
Blt16BPPTo16BPPTransShadow(pBuffer, uiPitch, image.p16BPPData, image.usWidth * sizeof(UINT16),
iDestX, iDestY, 0, 0, image.usWidth, image.usHeight, 0x1F);
}
else if(hSrcVObject->ubBitDepth == 32)
{
SGP_THROW_IFFALSE(usIndex < hSrcVObject->usNumberOf16BPPObjects, L"index larger that number images");
sprintf(errorText, "Video object index is larger than the number of images. Filename: %s", hSrcVObject->ImageFile);
SGP_THROW_IFFALSE(usIndex < hSrcVObject->usNumberOf16BPPObjects, errorText);
SixteenBPPObjectInfo &image = hSrcVObject->p16BPPObject[0];
Blt32BPPTo16BPPTransShadow(pBuffer, uiPitch, (UINT32*)image.p16BPPData, image.usWidth * sizeof(UINT32),
iDestX, iDestY, 0, 0, image.usWidth, image.usHeight);
Expand Down
40 changes: 18 additions & 22 deletions Standard Gaming Platform/vobject.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,30 +84,26 @@ typedef struct
// The video object contains different data based on it's type, compressed or not
typedef struct TAG_HVOBJECT
{
UINT32 fFlags; // Special flags
UINT32 uiSizePixData; // ETRLE data size
SGPPaletteEntry *pPaletteEntry; // 8BPP Palette
COLORVAL TransparentColor; // Defaults to 0,0,0
UINT16 *p16BPPPalette; // A 16BPP palette used for 8->16 blits
UINT32 fFlags; // Special flags
UINT32 uiSizePixData; // ETRLE data size
SGPPaletteEntry *pPaletteEntry; // 8BPP Palette
COLORVAL TransparentColor; // Defaults to 0,0,0
UINT16 *p16BPPPalette; // A 16BPP palette used for 8->16 blits

PTR pPixData; // ETRLE pixel data
ETRLEObject *pETRLEObject; // Object offset data etc
PTR pPixData; // ETRLE pixel data
ETRLEObject *pETRLEObject; // Object offset data etc
SixteenBPPObjectInfo *p16BPPObject;
UINT16 *pShades[HVOBJECT_SHADE_TABLES]; // Shading tables
UINT16 *pShadeCurrent;
UINT16 *pGlow; // glow highlight table
UINT8 *pShade8; // 8-bit shading index table
UINT8 *pGlow8; // 8-bit glow table
ZStripInfo **ppZStripInfo; // Z-value strip info arrays

UINT16 usNumberOf16BPPObjects;
UINT16 usNumberOfObjects; // Total number of objects
UINT8 ubBitDepth; // BPP

// Reserved for added room and 32-byte boundaries
BYTE bReserved[ 1 ];


UINT16 *pShades[HVOBJECT_SHADE_TABLES]; // Shading tables
UINT16 *pShadeCurrent;
UINT16 *pGlow; // glow highlight table
UINT8 *pShade8; // 8-bit shading index table
UINT8 *pGlow8; // 8-bit glow table
ZStripInfo **ppZStripInfo; // Z-value strip info arrays

UINT16 usNumberOf16BPPObjects;
UINT16 usNumberOfObjects; // Total number of objects
UINT8 ubBitDepth; // BPP
SGPFILENAME ImageFile;
} SGPVObject, *HVOBJECT;


Expand Down