Well, because I don't actually have an animation engine made (and might not even make one), I'll show you what I do have under each object slot:
Code:
CurrentTiles .byte 2
RequestedTiles .byte 2
VramOffset .byte 2
MetaspriteTableAddress .byte 2
"CurrentTiles" and "RequestedTiles" don't actually hold the address of the first tile (otherwise, it would be more than two bytes for sure), they hold an offset for these tables:
Code:
TilesInFrameTable:
.word $0002,$0002
VramLoWordOfFrameTable:
.word .LOWORD(Test1Tiles),.LOWORD(Test2Tiles)
VramBankByteOfFrameTable:
.word .BANKBYTE(Test1Tiles),.BANKBYTE(Test2Tiles)
"VramOffset" is generated by the vram engine after looking comparing "RequestedTiles" to "CurrentTiles" and seeing if it's different (and after it actually finds an empty spots in vram to create the linked list) and "MetaspriteTableAddress" is exactly what the name implies. (It's only the loword of an address, but if I need to make it bigger, I will.)
Anyway, each entry in an animation table I'd build would hold a value for "RequestedTiles" and for "MetaspriteTableAddress". That's about it, aside from I might add an extra word for what to do when that part of the list gets reached, like loop back at the beginning, or stop, or whatever. Each entry in the list would be one frame, so there would be many, many entries that are exactly the same. I'm not sure if this is the best option, as I guess you could create a timer for each frame in how long the object should stay on it.