<legend class="tech">Tinman ANIMATIONS BLOCK
Tinman animations
</legend>
NC
This 16bit value accounts for the total number of animation channels. A channel may have primitives associated with it or not. Channels are arranged hierarchically / outwardly from a single top-level channel. When one channel is animated, the effect is applied accumulatively to the subordinate channels.
00
This 16bit value is not understood. It may always be 1.
<ifieldset class="spec">
<legend class="tech">1st Tinman ANIMATION
Animations by ID
</legend>
ID
This 16bit value identifies the context of the animation. For instance, 0 for an "idle" animation. 4 for an "open" animation (eg. a door.) The meanings of the IDs appear to be implicit rather than conventional. Ie. they are hard wired into Sword of Moonlight itself. For a complete list of known IDs, see MDL (file format) / Appendix A (animation IDs) .
NF
This 16bit value accounts for the total number of sequential frames involved in the animation. The frames are not interpolated over time, and appear at regular intervals. There is no standard reference in terms of timing. However traditional (eg. original Sword of Moonlight files) playback speed is approximately 30 frames per second (reports exist that PRF files are useful for modulating playback in some way unclear / not well documented)
<ifieldset class="spec">
<legend class="caps">
The animation frame buffer
</legend>
The Tinman frame buffer model cannot be represented by a definite structure. It is instead a kind of specialized compression algorithm. For a precise definition, there is MDL (file format) / Algorithm A (Tinman codec) .
How it works in a nutshell; there is a sequence of variable length frames, which are themselves comprised of a sequence of variable length channel operations. Unaffected channels are omitted per frame. And in general the affect upon the channel for that frame is proportional to the amount of bytes consumed by that operation. Each operation upon a channel is accumulated frame by frame until the animation runs its course.
The word length of the frame buffer in total is not part of the MDL format. It is necessary to traverse the coarsest level of granularity afforded the frame buffer model in order to compute it. Or in fact to arrive at the end of the the animation itself. Which is where you will find the next animation, and so on, until the last animation indicated in the #Header is encountered.
The first channel operation sequence of the first frame of the first animation includes some additional information which describes a skeletal hierarchy by ID. IDs up to the number of #Primitive channels indicated by the header refer to the primitive channels themselves per each sub header . Subsequent IDs refer to until hence undefined animation-only channels, ie. lacking geometry.
Each channel operation has the net effect of transforming (eg. translating and rotating) its assigned channel little by little something like stop-motion animation.
</ifieldset>
</ifieldset>
<ifieldset class="spec">
<legend>⋯</legend>
</ifieldset>
<ifieldset class="spec">
<legend>Nth Tinman ANIMATION</legend>
</ifieldset>