Specifications
Proposed Milestones
v0.1 - White Rabbit system that simply displays the
avatar to the screen with option to display a text box
v0.2 - Introduction of "Bunny Farm" theme creator in QT that can load and
display skeletons, textures, characters, etc.
v0.3 - Finalize the theme file/data structure and preliminary personality
theme system
v0.4 - Completed personality system
v0.5 - Add the ability to load more types of files into Bunny Farm (see
main page for formats) and other fluff
v1.0 - Completely finished and fully-featured Bunny Farm and White Rabbit
with personality systems and personality authoring built into Bunny Farm
Bunny Farm
Bunny farm will be a KDE-based theme editing program.
Here's a mock up of what I'm thinking for the screen layout:

There will be a standard library of skeletons (small files, so
it's not an issue even with ~100 skeletons) that will represent all of the
standard biological body frames. Then there will be a way to open meshes
from a variety of sources (e.g. 3ds).
Then the model's final touch will be applying materials/images to the wire-mesh
frame. Once the material is applied to it, double clicking on the polygon
that holds the material should bring up an embedded image viewer (using DCOP, I
guess).
The final output will be a machine-readable binary file format
with a .wr extension. It will be a tightly compressed compilation of all
skeletons, meshes, images, options, sounds, and personality formats that are necessary
for the theme to be used. When a theme is compiled into this format,
all of the necessary checks and fall-through options will be added. For
example, if the theme doesn't handle a certain emotional state, the
fall-through option will be set to do nothing upon request for a change to that
emotional state. This way, emotional states can be added by the user and
to the pertinent themes that the user wants to use these states in without
introducing nondeterministic results from asking older themes for the new
abilities. If the neglected state is mandatory, the system should refuse
to output a theme file.
White Rabbit
Themes (what they must include):
dialog box
- The main idea here is displaying a PNG or an MNG
at a constantly updated location (always a certain number of pixels away
from the avatar's mouth. For this, there will be a focus point
built into the model that represents the mouth location.
-
It will need: length and width of the texture, length and width of the
text drawing area, and coordinates of the text drawing area. This
way, the animation/image can be drawn to the screen and text can be
added to it.

|
meshes/textures
- a mesh model in cal3d's format
- a list of accessory models that this model can use and where to
attach them (e.g. a model for a cigarette to be placed in the mouth of
the character, a walking stick model for a decrepit old man model)
- a list of textures and where they are (would be nice to have a
standard "library" of accessory models...)
- The model must have two points specifically defined on the skeletal
structure. The points are: mouth point (where the center of the
mouth is, which will be necessary if the mouth system becomes modular
and outside of cal3d) and gravity center point (where the center of
gravity for the body frame should be located).
|
personality
Mouth Animation Images (stolen from
here)
Mouth Position |
Sample Image |
Representation |
Closed |

|
Normal mouth closed shape.
Also used for phonemes such as "m" as in "mom," "b" as in "bob,"
"f" as in "fife." |
Open-wide 1 |

|
Mouth is slightly open, at full width.
Used for phonemes such as "g" as in "gag," "l" as in "lull,"
"ear" as in "hear." |
Open-wide 2 |

|
Mouth is partially open, at full width.
Used for phonemes such as "n" as in "nun," "d" as in "dad," "t"
as in "tot." |
Open-wide 3 |

|
Mouth is open, at full width.
Used for phonemes such as "u" as in "hut," "ea" as in "head," "ur"
as in "hurt." |
Open-wide 4 |

|
Mouth is completely open, at full width.
Used for phonemes such as "a" as in "hat," "ow" as in "how." |
Open-medium |

|
Mouth is open at half width.
Used for phonemes such as "oy" as in "ahoy," "o" as in "hot." |
Open-narrow |

|
Mouth is open at narrow width.
Used for phonemes such as "o" as in "hoop", "o" as in "hope,"
"w" as in "wet." |
|
- have mixer combinations that represent different states: base (no
movement), focus (some event to freshly wake up the character, be it
mouse clicks or new mail or whatever), blur (go to sleep after a timer
tells it to), sleep (take a nap after blurred for a long time, usually
going off-screen), dialogue (how to handle asking the user a question,
be it in TTS or in a text box that the character holds)
- Must be able to define sounds inside of the character's theme.
e.g. ducks should quack occasionally.
- TODO: figure out how
the hell to do the rest of this
|
What will we need to ask a character to do?
- Move to a location on the screen (x, y, z = 0)
- WriteOnSign("Hello!") to get the avatar to hold up a sign saying "Hello!"
- Initialization
- End of session
- Optionally: avoid the cursor mode to stay unobstrusive
- Show approval, disapproval, anger, sadness, excitedness (for completion of
events with high priority)
- Attach to a window (e.g. walk along the top of it, grab and move it,
whatever)
- Gesture in a certain direction (e.g. point at pixel located at 25,45 on
the screen)
Use Cases
- Gecko slithering around the screen resting on top of windows and casually
conversing with the user.
- A family of ducks quacking around the screen with all of the baby ducks
following the momma duck.
- Upon notification of an intruder detected by the IDS module, the avatar
should switch to another avatar (e.g. a war mech, a civil war soldier) and
proceed with a set of actions.
