1 #ifndef _TILE_ANIMATION_H 2 #define _TILE_ANIMATION_H 3 4 #include "JA2Types.h" 5 #include "Sound_Control.h" 6 #include "WorldDef.h" 7 8 9 enum AnimationFlags 10 { 11 ANITILE_DOOR = 0x00000001, 12 ANITILE_BACKWARD = 0x00000020, 13 ANITILE_FORWARD = 0x00000040, 14 ANITILE_PAUSED = 0x00000200, 15 ANITILE_EXISTINGTILE = 0x00000400, 16 ANITILE_LOOPING = 0x00020000, 17 ANITILE_NOZBLITTER = 0x00040000, 18 ANITILE_REVERSE_LOOPING = 0x00080000, 19 ANITILE_ALWAYS_TRANSLUCENT = 0x00100000, 20 ANITILE_OPTIMIZEFORSLOWMOVING = 0x00400000, 21 ANITILE_ANIMATE_Z = 0x00800000, 22 ANITILE_USE_DIRECTION_FOR_START_FRAME = 0x01000000, 23 ANITILE_PAUSE_AFTER_LOOP = 0x02000000, // XXX same value as ANITILE_USE_4DIRECTION_FOR_START_FRAME 24 ANITILE_ERASEITEMFROMSAVEBUFFFER = 0x04000000, 25 ANITILE_SMOKE_EFFECT = 0x10000000, 26 ANITILE_EXPLOSION = 0x20000000, 27 ANITILE_RELEASE_ATTACKER_WHEN_DONE = 0x40000000, 28 ANITILE_USE_4DIRECTION_FOR_START_FRAME = 0x02000000 // XXX same value as ANITILE_PAUSE_AFTER_LOOP 29 }; 30 ENUM_BITSET(AnimationFlags) 31 32 33 enum AnimationLevel 34 { 35 ANI_LAND_LEVEL = 1, 36 ANI_SHADOW_LEVEL = 2, 37 ANI_OBJECT_LEVEL = 3, 38 ANI_STRUCT_LEVEL = 4, 39 ANI_ROOF_LEVEL = 5, 40 ANI_ONROOF_LEVEL = 6, 41 ANI_TOPMOST_LEVEL = 7 42 }; 43 44 45 union AniUserData 46 { 47 struct 48 { 49 UINT32 uiData; 50 UINT32 uiData3; 51 } user; 52 EXPLOSIONTYPE* explosion; 53 BULLET* bullet; 54 const REAL_OBJECT* object; 55 SoundID sound; 56 }; 57 58 59 struct ANITILE 60 { 61 ANITILE* pNext; 62 AnimationFlags uiFlags; // flags struct 63 UINT32 uiTimeLastUpdate; // Stuff for animated tiles 64 65 LEVELNODE *pLevelNode; 66 UINT8 ubLevelID; 67 INT16 sCurrentFrame; 68 INT16 sStartFrame; 69 INT16 sDelay; 70 UINT16 usNumFrames; 71 72 INT16 sRelativeX; 73 INT16 sRelativeY; 74 INT16 sRelativeZ; 75 INT16 sGridNo; 76 UINT16 usTileIndex; 77 78 INT16 sCachedTileID; // Index into cached tile ID 79 80 UINT8 ubKeyFrame1; 81 UINT32 uiKeyFrame1Code; 82 UINT8 ubKeyFrame2; 83 UINT32 uiKeyFrame2Code; 84 85 AniUserData v; 86 87 INT8 bFrameCountAfterStart; 88 89 }; 90 91 92 struct ANITILE_PARAMS 93 { 94 AnimationFlags uiFlags; // flags struct 95 AnimationLevel ubLevelID; // Level ID for rendering layer 96 INT16 sStartFrame; // Start frame 97 INT16 sDelay; // Delay time 98 UINT16 usTileIndex; // Tile database index ( optional ) 99 INT16 sX; // World X ( optional ) 100 INT16 sY; // World Y ( optional ) 101 INT16 sZ; // World Z ( optional ) 102 INT16 sGridNo; // World GridNo 103 104 LEVELNODE *pGivenLevelNode; // Levelnode for existing tile ( optional ) 105 const char *zCachedFile; // Filename for cached tile name ( optional ) 106 107 UINT8 ubKeyFrame1; // Key frame 1 108 UINT32 uiKeyFrame1Code; // Key frame code 109 UINT8 ubKeyFrame2; // Key frame 2 110 UINT32 uiKeyFrame2Code; // Key frame code 111 112 AniUserData v; 113 }; 114 115 116 enum KeyFrameEnums 117 { 118 ANI_KEYFRAME_NO_CODE, 119 ANI_KEYFRAME_BEGIN_TRANSLUCENCY, 120 ANI_KEYFRAME_BEGIN_DAMAGE, 121 ANI_KEYFRAME_CHAIN_WATER_EXPLOSION, 122 ANI_KEYFRAME_DO_SOUND 123 }; 124 125 126 ANITILE* CreateAnimationTile(const ANITILE_PARAMS*); 127 128 129 void DeleteAniTile( ANITILE *pAniTile ); 130 void UpdateAniTiles(void); 131 void DeleteAniTiles(void); 132 133 void HideAniTile( ANITILE *pAniTile, BOOLEAN fHide ); 134 135 ANITILE* GetCachedAniTileOfType(INT16 sGridNo, UINT8 ubLevelID, AnimationFlags); 136 137 #endif 138