mini avatars

mini avatars can be created and used with veadotube and veadotube mini.

the MLST chunk

provides a list of avatar states. the existence of this chunk in a file tells that this is file contains a mini avatar.

the entire contents of this chunk is a list of 4-byte integers, indicating the id of each MSTA chunk.

the MSTA chunk

provides information on an avatar state.

length description
1+ state name, variable-length string
1 state flags
4 id for the AIMG chunk of the closed mouth thumbnail
4 id for the AIMG chunk of the open mouth thumbnail
4 id for the AIMG chunk of the blinking closed mouth thumbnail
4 id for the AIMG chunk of the blinking open mouth thumbnail
4 id for the AIMG chunk of the closed mouth image
4 id for the AIMG chunk of the open mouth image
4 id for the AIMG chunk of the blinking closed mouth image
4 id for the AIMG chunk of the blinking open mouth image
1+ closed mouth effects list
1+ open mouth effects list
1+ closed-to-open transitions list
1+ open-to-closed transitions list
1+ shortcuts list
4 shortcut mode, FourCC

the possible state flags are as follows:

flag description
0x1 images should be rendered pixelated (point sampling)
0x2 blink image animation will sync with non-blink image animation
0x4 image animation will reset when state is activated

both effects and transitions lists are serialized the same. each is prefixed with a variable-length integer telling the number of entries. then for each entry:

length description
1+ effect/transition type, variable-length string
1 effect/transition flags
? if flags above contain 0x4, id for the MEPR chunk; if flags contain 0x2, variable-length string of the built-in preset id; otherwise, nothing
1+ number of custom values = n, variable-length integer
8n each custom value, n double-precision floating numbers

the possible effect/transition flags are as follows:

flag description
0x1 this effect/transition is active
0x2 this effect/transition uses a built-in preset
0x4 this effect/transition uses a custom user-defined preset

the shortcuts list is prefixed with a variable-length integer telling the number of entries. then for each entry:

length description
1+ id of the signal provider, variable-length string
1+ the signal itself, variable-length string

signal providers include keyboards, mice, etc. the signal itself can be the keyboard key, or the mouse button, so on.

the MANL chunk

provides a list of anchors.

the entire contents of this chunk is a list of 4-byte integers, indicating the id of each MANC chunk.

the MANC chunk

provides information on an anchor.

first serialized is the variable-length string for the anchor name. then, until the end of the chunk, we serialize positioning information for each state in the avatar:

length description
4 id for the corresponding MSTA chunk
1 anchor flags
48 positioning for the closed mouth image
48 positioning for the open mouth image
48 positioning for the blinking closed mouth image
48 positioning for the blinking open mouth image

the possible anchor flags are as follows:

flag description
0x1 this anchor is visible for the closed mouth image
0x2 this anchor is visible for the open mouth image
0x4 this anchor is visible for the blinking closed mouth image
0x8 this anchor is visible for the blinking open mouth image

positioning information is serialized as follows:

length description
8 X position, double-precision floating point number
8 Y position, double-precision floating point number
8 rotation in radians, double-precision floating point number
8 X scale, double-precision floating point number
8 Y scale, double-precision floating point number
8 skewing in radians, double-precision floating point number

the MEPL chunk

provides a list of custom user-defined effect/transition presets.

the entire contents of this chunk is a list of 4-byte integers, indicating the id of each MEPR chunk.

the MEPR chunk

provides information on a custom user-defined effect/transition preset.

length description
1 preset type; 0 for effect, 1 for transition
1+ effect/transition type, variable-length string
1+ preset name, variable-length string
1+ number of values = n, variable-length integer
8n each value, n double-precision floating numbers

the ASFD chunk

provides the list of images used in a mini avatar.

it starts with MINI written in ASCII, and then for each image in the avatar:

length description
1+ image name, variable-length string
4 id for the corresponding AIMG chunk
1 zero byte

the image name is most often just image00000000 with the numbers being the image chunk id in hexadecimal. all names must be unique.

this is a compatibility thing, as avatars created in veadotube mini 2.0 and 2.1 use an asset management system that requires this chunk, otherwise images won’t be loaded. avatars loaded in veadotube don’t require this chunk.

effects and transitions

each effect and transition type has an id and different uses for each declared value:

effect type description param #1 param #2 param #3 param #4
randommove moves with perlin noise amount velocity    
wavemove moves with sine and cosine amount X amount Y time period period offset
jump bounces in a parabola amount X amount Y velocity  
waverotate rotates with sine amount time period period offset  
darken darkens image amount      
transition type description param #1 param #2
jump bounces in a parabola amount velocity

if an effect or transition doesn’t provide enough values for the necessary parameters, they’re filled with zero.