The animation data will be stored internally in one or more AM_LayUp objects, which each represent a single ``shot'' or ``animation sequence'', combining similar components. Each AM_LayUp consists of some control information and a list (actually an array of pointers) of AM_Layer objects. Each AM_Layer, in turn, contains multiple AM_Cel objects. Each layer represents a place holder for a cel in the animation lay-up, which contains zero or one active cels. All the layers are combined (overlaid) to form the final ``camera-ready'' lay-up, which is what is shown to the user.
In interacting with SDL, each AM_Cel contains an SDL_Surface object with the data to be displayed. The AM_Layer references the appropriate cel at any given time. Each AM_Layer (starting with the background, which is not given special treatment, except for its alpha channel being ignored) is displayed in turn.
Various ``tricks'' used in real cel animation (and some they just wish they had) will also be implemented: cels and layers will be able to be translated, rotated, and scaled with little overhead. Note the difference between applying these operations to cels and layers: when applied to individual cels, only that cel is affected, while altering the layer changes the default for all the contained cels (and the two rotations add up if used together).
There are also some popular ``special effects'' particularly used in Manga Anime: ``glow'', ``sparkle'', ``waterripple'', ``focus'', and ``lensing'' being the top ones on the list. These will be implemented by applying procedural effects to masked regions of images. The exact behavior will be different for each effect. These effects are used to emulate bright light or reflects, glittering or rippling water, depth of field effects, and various psychological effects.
Cels will use palette-based graphics so that palette effects can be used. In particular, the model will provide for a basic palette and a lighting parameter. The lighting parameter will multiply the palette to produce the palette actually used to display the image (as if the image were lit by a lamp with that color of light). This provides a simple way to adjust cels to fit the environment around them, and allows simple color changes to be done by changing a single color value.
Various effects require continuous updating, so the animation objects each provide an Update method, which can be passed as a callback to the AM_FrameTimer object which will be set up to run once every frame-rate period (Just for the record: 16 fps for old silent movies, 24fps for standard movies, 30fps for NTSC TV (US and Japan), 25fps for PAL TV (Europe). 48fps, 60fps, and 50fps are also of interest as doubled frame rates which are the flash rate of film projectors and the interlaced-frame rate of TV). Animation is often shot on reduced frame rates, down to about 8fps (though there are examples at 4fps).