#ifndef _TILE_ANIMATION_H #define _TILE_ANIMATION_H #define ANITILE_DOOR 0x00000001 #define ANITILE_BACKWARD 0x00000020 #define ANITILE_FORWARD 0x00000040 #define ANITILE_PAUSED 0x00000200 #define ANITILE_EXISTINGTILE 0x00000400 #define ANITILE_USEABSOLUTEPOS 0x00004000 #define ANITILE_CACHEDTILE 0x00008000 #define ANITILE_LOOPING 0x00020000 #define ANITILE_NOZBLITTER 0x00040000 #define ANITILE_REVERSE_LOOPING 0x00080000 #define ANITILE_ALWAYS_TRANSLUCENT 0x00100000 #define ANITILE_USEBEST_TRANSLUCENT 0x00200000 #define ANITILE_OPTIMIZEFORSLOWMOVING 0x00400000 #define ANITILE_ANIMATE_Z 0x00800000 #define ANITILE_USE_DIRECTION_FOR_START_FRAME 0x01000000 #define ANITILE_PAUSE_AFTER_LOOP 0x02000000 #define ANITILE_ERASEITEMFROMSAVEBUFFFER 0x04000000 #define ANITILE_OPTIMIZEFORSMOKEEFFECT 0x08000000 #define ANITILE_SMOKE_EFFECT 0x10000000 #define ANITILE_EXPLOSION 0x20000000 #define ANITILE_RELEASE_ATTACKER_WHEN_DONE 0x40000000 #define ANITILE_USE_4DIRECTION_FOR_START_FRAME 0x02000000 #define ANITILE_LIGHT 0x80000000 #define ANI_LAND_LEVEL 1 #define ANI_SHADOW_LEVEL 2 #define ANI_OBJECT_LEVEL 3 #define ANI_STRUCT_LEVEL 4 #define ANI_ROOF_LEVEL 5 #define ANI_ONROOF_LEVEL 6 #define ANI_TOPMOST_LEVEL 7 typedef struct TAG_anitile { struct TAG_anitile *pNext; UINT32 uiFlags; // flags struct UINT32 uiTimeLastUpdate; // Stuff for animated tiles LEVELNODE *pLevelNode; UINT8 ubLevelID; INT16 sCurrentFrame; INT16 sStartFrame; INT16 sDelay; UINT16 usTileType; UINT16 usNumFrames; UINT16 usMissAnimationPlayed; SoldierID ubAttackerMissed; INT16 sRelativeX; INT16 sRelativeY; INT16 sRelativeZ; INT32 sGridNo; UINT16 usTileIndex; UINT16 usCachedTileSubIndex; // sub Index INT16 sCachedTileID; // Index into cached tile ID UINT8 ubOwner; UINT8 ubKeyFrame1; UINT32 uiKeyFrame1Code; UINT8 ubKeyFrame2; UINT32 uiKeyFrame2Code; UINT32 uiUserData; UINT16 ubUserData2; // NOTE: Expanded the type due to SoldierID UINT32 uiUserData3; INT8 bFrameCountAfterStart; INT32 lightSprite; } ANITILE; typedef struct TAG_anitile_params { UINT32 uiFlags; // flags struct UINT8 ubLevelID; // Level ID for rendering layer INT16 sStartFrame; // Start frame INT16 sDelay; // Delay time UINT16 usTileType; // Tile databse type ( optional ) UINT16 usTileIndex; // Tile database index ( optional ) INT16 sX; // World X ( optional ) INT16 sY; // World Y ( optional ) INT16 sZ; // World Z ( optional ) INT32 sGridNo; // World GridNo LEVELNODE *pGivenLevelNode; // Levelnode for existing tile ( optional ) CHAR8 zCachedFile[ 100 ]; // Filename for cached tile name ( optional ) UINT8 ubOwner; // UBID for the owner UINT8 ubKeyFrame1; // Key frame 1 UINT32 uiKeyFrame1Code; // Key frame code UINT8 ubKeyFrame2; // Key frame 2 UINT32 uiKeyFrame2Code; // Key frame code UINT32 uiUserData; UINT16 ubUserData2; // NOTE: Expanded the type due to SoldierID UINT32 uiUserData3; INT32 lightSprite; } ANITILE_PARAMS; enum KeyFrameEnums { ANI_KEYFRAME_NO_CODE, ANI_KEYFRAME_BEGIN_TRANSLUCENCY, ANI_KEYFRAME_BEGIN_DAMAGE, ANI_KEYFRAME_CHAIN_WATER_EXPLOSION, ANI_KEYFRAME_DO_SOUND, } ; // ANimation tile data extern ANITILE *pAniTileHead; ANITILE *CreateAnimationTile( ANITILE_PARAMS *pAniParams ); void DeleteAniTile( ANITILE *pAniTile ); void UpdateAniTiles( ); void SetAniTileFrame( ANITILE *pAniTile, INT16 sFrame ); void DeleteAniTiles( ); void HideAniTile( ANITILE *pAniTile, BOOLEAN fHide ); void PauseAniTile( ANITILE *pAniTile, BOOLEAN fPause ); ANITILE *GetCachedAniTileOfType( INT32 sGridNo, UINT8 ubLevelID, UINT32 uiFlags ); void PauseAllAniTilesOfType( UINT32 uiType, BOOLEAN fPause ); #endif