# Animations

## Actions

| Tool | Action | Parameters | Notes |
|------|--------|------------|-------|
| `animation` | `add-effect` | `session_id`, `slide_index`, `shape_index`, `effect_name`, `is_exit?`, `trigger?` | Adds an effect to the shape's slide, appended to the slide's animation timeline. `is_exit` (default `false`) makes it play as the shape leaving rather than entering/emphasizing. `trigger` is `"on-click"` (default), `"with-previous"`, or `"after-previous"`. Returns `effect_index` (1-based, position in the timeline) and `effect_count`. |
| `animation` | `get-effect-count` | `session_id`, `slide_index` | Returns `effect_count` — the number of animation effects on the slide's timeline. |
| `animation` | `delete-effect` | `session_id`, `slide_index`, `effect_index` | Removes the effect at the given 1-based timeline position. |
| `animation` | `get-transition` | `session_id`, `slide_index` | Returns `transition_name`, `duration_seconds`, `advance_on_click`, `advance_on_time`, `advance_time_seconds` for the slide. |
| `animation` | `set-transition` | `session_id`, `slide_index`, `transition_name`, `duration_seconds?`, `advance_on_click?`, `advance_on_time?`, `advance_time_seconds?` | Sets the slide's transition effect and (optionally) its timing/advance behavior. Every parameter besides `transition_name` is optional — omit any you don't want to change. |

## Entrance/Emphasis/Exit Effect Names (`effect_name`)

PowerPoint's animation model doesn't have a separate "emphasis" flag — the same effect id is used
whether the shape is already visible (emphasis) or newly appearing (entrance); `is_exit` is the
only flag that changes behavior (shape leaving vs. entering/emphasizing). Supported `effect_name`
values (a curated subset of the full `MsoAnimEffect` enum):

| Name | Description |
|------|-------------|
| `msoAnimEffectAppear` | Appears instantly |
| `msoAnimEffectFly` | Flies in/out |
| `msoAnimEffectBlinds` | Blinds |
| `msoAnimEffectBox` | Box |
| `msoAnimEffectCheckerboard` | Checkerboard |
| `msoAnimEffectCircle` | Circle |
| `msoAnimEffectDiamond` | Diamond |
| `msoAnimEffectDissolve` | Dissolve |
| `msoAnimEffectFade` | Fade |
| `msoAnimEffectFlashOnce` | Flash once |
| `msoAnimEffectPeek` | Peek |
| `msoAnimEffectPlus` | Plus |
| `msoAnimEffectRandomBars` | Random bars |
| `msoAnimEffectSpiral` | Spiral |
| `msoAnimEffectSplit` | Split |
| `msoAnimEffectStretch` | Stretch |
| `msoAnimEffectStrips` | Strips |
| `msoAnimEffectSwivel` | Swivel |
| `msoAnimEffectWedge` | Wedge |
| `msoAnimEffectWheel` | Wheel |
| `msoAnimEffectWipe` | Wipe |
| `msoAnimEffectZoom` | Zoom |
| `msoAnimEffectBounce` | Bounce |
| `msoAnimEffectCredits` | Credits (rolling) |
| `msoAnimEffectGrowShrink` | Grow/Shrink (emphasis) |
| `msoAnimEffectSpin` | Spin (emphasis) |
| `msoAnimEffectTransparency` | Transparency change (emphasis) |
| `msoAnimEffectChangeFillColor` | Fill color change (emphasis) |
| `msoAnimEffectChangeFontColor` | Font color change (emphasis) |

## Slide Transition Names (`transition_name`)

A curated subset of the full `PpEntryEffect` enum:

| Name | Description |
|------|-------------|
| `ppEffectNone` | No transition |
| `ppEffectCut` | Cut |
| `ppEffectCutThroughBlack` | Cut through black |
| `ppEffectRandom` | Random transition |
| `ppEffectBlindsHorizontal` / `ppEffectBlindsVertical` | Blinds |
| `ppEffectCheckerboardAcross` / `ppEffectCheckerboardDown` | Checkerboard |
| `ppEffectCoverLeft` / `ppEffectCoverRight` / `ppEffectCoverUp` / `ppEffectCoverDown` | Cover |
| `ppEffectUncoverLeft` / `ppEffectUncoverRight` / `ppEffectUncoverUp` / `ppEffectUncoverDown` | Uncover |
| `ppEffectDissolve` | Dissolve |
| `ppEffectFade` | Fade |
| `ppEffectFadeSmoothly` | Fade smoothly |
| `ppEffectRandomBarsHorizontal` / `ppEffectRandomBarsVertical` | Random bars |
| `ppEffectPushLeft` / `ppEffectPushRight` / `ppEffectPushUp` / `ppEffectPushDown` | Push |
| `ppEffectWedge` | Wedge |
| `ppEffectCircleOut` | Circle |
| `ppEffectDiamondOut` | Diamond |
| `ppEffectPlusOut` | Plus |
| `ppEffectNewsflash` | Newsflash |

## Typical Use

```
1. shape.add-text-box(session_id, slide_index, ...) → shape_index
2. animation(action: "add-effect", session_id, slide_index, shape_index, effect_name: "msoAnimEffectFade", trigger: "on-click")
3. animation(action: "set-transition", session_id, slide_index, transition_name: "ppEffectFade", duration_seconds: 0.75)
```

Entrance effects are added per-shape via `add-effect`; transitions are set per-slide via
`set-transition` and control how the slide show moves *into* that slide.

## Extending the Curated Name Lists

Both `effect_name` and `transition_name` are validated against a curated subset of PowerPoint's
full (150+ member) `MsoAnimEffect`/`PpEntryEffect` enums — not every enum member is wired up.
Extending either list requires adding a verified numeric value to the corresponding
`Dictionary<string, int>` in `AnimationCommands.cs` (never guess a value; check
learn.microsoft.com's `office.vba` reference pages for the enum first).
