123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- #ifdef PRECOMPILEDHEADERS
- #include "TileEngine All.h"
- #else
- #include "worlddef.h"
- #include "worlddat.h"
- #include <stdio.h>
- #include <string.h>
- #include "wcheck.h"
- #include "stdlib.h"
- #include "time.h"
- #include "video.h"
- #include "debug.h"
- #include "smooth.h"
- #include "worldman.h"
- #include "mousesystem.h"
- #include "sys globals.h"
- #include "tiledat.h"
- #include "Fileman.h"
- #endif
- TILE_IMAGERY *gTileSurfaceArray[ NUMBEROFTILETYPES ];
- UINT8 gbDefaultSurfaceUsed[ NUMBEROFTILETYPES ];
- UINT8 gbSameAsDefaultSurfaceUsed[ NUMBEROFTILETYPES ];
- TILE_IMAGERY *LoadTileSurface( char * cFilename )
- {
- // Add tile surface
- PTILE_IMAGERY pTileSurf = NULL;
- VOBJECT_DESC VObjectDesc;
- HVOBJECT hVObject;
- HIMAGE hImage;
- SGPFILENAME cStructureFilename;
- STR cEndOfName;
- STRUCTURE_FILE_REF * pStructureFileRef;
- BOOLEAN fOk;
- hImage = CreateImage( cFilename, IMAGE_ALLDATA );
- if (hImage == NULL)
- {
- // Report error
- SET_ERROR( "Could not load tile file: %s", cFilename );
- return( NULL );
- }
- VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMHIMAGE;
- VObjectDesc.hImage = hImage;
- hVObject = CreateVideoObject( &VObjectDesc );
- if ( hVObject == NULL )
- {
- // Report error
- SET_ERROR( "Could not load tile file: %s", cFilename );
- // Video Object will set error conition.]
- DestroyImage( hImage );
- return( NULL );
- }
- // Load structure data, if any.
- // Start by hacking the image filename into that for the structure data
- strcpy( cStructureFilename, cFilename );
- cEndOfName = strchr( cStructureFilename, '.' );
- if (cEndOfName != NULL)
- {
- cEndOfName++;
- *cEndOfName = '\0';
- }
- else
- {
- strcat( cStructureFilename, "." );
- }
- strcat( cStructureFilename, STRUCTURE_FILE_EXTENSION );
- if (FileExists( cStructureFilename ))
- {
- pStructureFileRef = LoadStructureFile( cStructureFilename );
- if (pStructureFileRef == NULL || hVObject->usNumberOfObjects != pStructureFileRef->usNumberOfStructures)
- {
- DestroyImage( hImage );
- DeleteVideoObject( hVObject );
- SET_ERROR( "Structure file error: %s", cStructureFilename );
- return( NULL );
- }
-
- DebugMsg( TOPIC_JA2, DBG_LEVEL_3, cStructureFilename );
-
- fOk = AddZStripInfoToVObject( hVObject, pStructureFileRef, FALSE, 0 );
- if (fOk == FALSE)
- {
- DestroyImage( hImage );
- DeleteVideoObject( hVObject );
- SET_ERROR( "ZStrip creation error: %s", cStructureFilename );
- return( NULL );
- }
-
- }
- else
- {
- pStructureFileRef = NULL;
- }
- pTileSurf = MemAlloc( sizeof( TILE_IMAGERY ) );
- // Set all values to zero
- memset( pTileSurf, 0, sizeof( TILE_IMAGERY ) );
- pTileSurf->vo = hVObject;
- pTileSurf->pStructureFileRef = pStructureFileRef;
- if (pStructureFileRef && pStructureFileRef->pAuxData != NULL)
- {
- pTileSurf->pAuxData = pStructureFileRef->pAuxData;
- pTileSurf->pTileLocData = pStructureFileRef->pTileLocData;
- }
- else if (hImage->uiAppDataSize == hVObject->usNumberOfObjects * sizeof( AuxObjectData ))
- {
- // Valid auxiliary data, so make a copy of it for TileSurf
- pTileSurf->pAuxData = MemAlloc( hImage->uiAppDataSize );
- if ( pTileSurf->pAuxData == NULL)
- {
- DestroyImage( hImage );
- DeleteVideoObject( hVObject );
- return( NULL );
- }
- memcpy( pTileSurf->pAuxData, hImage->pAppData, hImage->uiAppDataSize );
- }
- else
- {
- pTileSurf->pAuxData = NULL;
- }
- // the hImage is no longer needed
- DestroyImage( hImage );
- return( pTileSurf );
- }
- void DeleteTileSurface( PTILE_IMAGERY pTileSurf )
- {
- if ( pTileSurf->pStructureFileRef != NULL )
- {
- FreeStructureFile( pTileSurf->pStructureFileRef );
- }
- else
- {
- // If a structure file exists, it will free the auxdata.
- // Since there is no structure file in this instance, we
- // free it ourselves.
- if (pTileSurf->pAuxData != NULL)
- {
- MemFree( pTileSurf->pAuxData );
- }
- }
- DeleteVideoObject( pTileSurf->vo );
- MemFree( pTileSurf );
- }
- extern void GetRootName( INT8 *pDestStr, INT8 *pSrcStr );
- void SetRaisedObjectFlag( char *cFilename, TILE_IMAGERY *pTileSurf )
- {
- INT32 cnt = 0;
- CHAR8 cRootFile[ 128 ];
- UINT8 ubRaisedObjectFiles[][80] =
- {
- "bones",
- "bones2",
- "grass2",
- "grass3",
- "l_weed3",
- "litter",
- "miniweed",
- "sblast",
- "sweeds",
- "twigs",
- "wing",
- "1"
- };
- // Loop through array of RAISED objecttype imagery and
- // set global value...
- if ( ( pTileSurf->fType >= DEBRISWOOD && pTileSurf->fType <= DEBRISWEEDS ) || pTileSurf->fType == DEBRIS2MISC || pTileSurf->fType == ANOTHERDEBRIS )
- {
- GetRootName( cRootFile, cFilename );
- while( ubRaisedObjectFiles[ cnt ][ 0 ] != '1' )
- {
- if ( stricmp( ubRaisedObjectFiles[ cnt ], cRootFile ) == 0 )
- {
- pTileSurf->bRaisedObjectType = TRUE;
- }
- cnt++;
- }
- }
- }
|