Each set of animated textures is controlled by an object. In that object's init code is something like this: HIBYTE(v1->field_2) = AniTexs_ECoast2_1[0].TexID; *(_DWORD *)&v1->CharIndex = AniTexs_ECoast2_1; v1->gap_a[2] = 12; v1->gap_a[3] = 15; v1->gap_a[2] is the number of entries in the list, and v1->gap_a[3] is the number of textures in the animation. The data itself is in this format: 00000000 TextureAnimationData struc ; (sizeof=0x10) 00000000 Model dd ? ; pointer to the model being animated 00000004 MatCount db ? ; number of MATERIALs to animate (max 8) 00000005 MatIDs db 8 dup(?) ; ID numbers of materials 0000000D TexID db ? ; ID# of the texture to start at ;first model in list controls this 0000000E TexTime dw ? ; amount of frames to display each texture ;first model in list controls this 00000010 TextureAnimationData ends