About This File
What is this?
The Advanced Animation Framework (AAF) provides a variety of tools for modders to play animations from a scalable number of animation packs.
Download Location & Instructions
The latest version of AAF is hosted at the AAF discord. The reason for this is that Nexus has terms for hosting files that I find unreasonable (once uploaded they gain the right to distribute a mod forever). Also, AAF is not an adult mod by itself and there are non-adult mods using it. So, LL, being an adult-focused site is not the right place to host. The issue has already been debated extensively in this thread. You can dig through the pages to find those discussions if interested. However, the matter is considered closed now. Further discussion about where AAF is hosted, how that impacts anyone or anything, is not allowed in this thread. If you wish to discuss those things, please bring them up in some other thread.
For the latest AAF version, news and information:
Official AAF discord
For NSFW user support with the TFM guide:
Donations
If you are interested in supporting this project, you can donate through my Patreon page.
Edited by dagobaking
What's New in Version 1.7.4
Released
# Version 1.7.4
## Added
- **First-person POV during scenes** — the follow-on teased in the 1.7.3 camera notes: watch any scene through an actor's eyes.
- Press the POV key (`camera_mode_key`, **K** by default) during a player scene to switch between the normal camera and POV, and the cycle key (`/` by default — the same key that steps camera angles) to jump between the scene's actors' POVs. The on-screen key hints follow the mode, and a corner message tells you whose POV you are in.
- The view rides the actor's **animated head** — position *and* gaze — so it looks where they look, moment to moment: down at a partner, back over a shoulder, and all the way over the top in an arched-back pose (the world genuinely renders upside-down, exactly as those eyes would see it).
- **You keep the mouse.** The default `auto` style yields to your mouse instantly and glides back to the actor's gaze after `pov_takeover_cooldown` seconds of no look input (`pov_yaw_limit`/`pov_pitch_limit` keep you from turning the view back into the actor's own head). Prefer it different? Set `pov_control_mode` to `locked` (always the gaze, mouse ignored) or `free` (you aim, only the position rides the head).
- Start every player scene in POV with `default_camera_mode = pov`; tune the feel with `pov_smoothing` (damps rapid head motion — also helps motion sensitivity) and `pov_eye_offset` (how far in front of the head bone the camera sits, clearing hair and face meshes).
- Plays fair with the 1.7.3 scene camera: entering POV pauses the auto-cycle and swaps the hints; exiting hands the camera back under the normal takeover rules. POV also works with `enable_scene_camera` off — it is its own feature.
- AE plugin (`aaf_1_11_221.dll`) only, like the scene camera. On the Old-Gen build the POV key simply reports "POV not available here".
## Fixed
- **Actors could be redressed in a *previous* scene's outfit.** The pre-scene equipment snapshot AAF restores at scene end could survive from one scene into the next — so after changing clothes between scenes, the next scene's end re-equipped the *earlier* outfit, and anything whose slots it covered (including keyword-protected items) was displaced. The snapshot is now tied to the scene it was captured for: a leftover from an earlier scene is discarded and the actor's actual current loadout is captured fresh at each new scene's start. (Reported by jaam, JB, and savantladylilith — thank you for the detailed logs.)
- **XML `hasKeyword` conditions work again.** Three stacked defects had left keyword conditions (e.g. `hasKeyword="ActorTypeRobot"` on an `equipmentSet` condition) matching nothing:
- Keywords that live on the actor's **race** record were invisible to the check — and that is where *every* vanilla `ActorType*` keyword lives (`ActorTypeHuman`, `ActorTypeRobot`, …), so actor-type conditions could never match. The check now also looks at the actor's race keywords.
- The **Old-Gen** plugin (`aaf_1_10_163.dll`) answered *false* for every keyword query outright, due to an invalid engine cast in its keyword handler.
- Keyword names were compared **case-sensitively**; the pre-1.6 keyword path matched case-insensitively and existing mod XML relies on that. Case-insensitive matching is restored on both builds.
- Bogus `XSD validation warning … 'hasKeyword' … value is not accepted by the pattern` log entries: the bundled `aaf.xsd` schema mistakenly declared `hasKeyword` as a boolean. It is a keyword editor-ID string (as documented); the schema now agrees. The warning was cosmetic — the XML still loaded — but it misled authors into thinking their file was rejected.
- Removed a leftover internal keyword cache in the UI layer that could silently abort actor-data processing (attraction profile values) if XML keyword registrations changed after startup (e.g. with `reload_xml_on_game_load`).
- **Closed the last gap in the 1.7.2.2 "invisible gear" fix.** 1.7.2.2 made scene equips flush at the moment they are requested, which fixed the common case — but the engine can still occasionally defer the actual apply for a locked-in-scene **player** by several seconds, past AAF's body refresh, leaving the late-landing gear (or the body itself) invisible for the rest of the scene. AAF now watches the player's inventory until those equips have really taken effect and refreshes the player's 3D again at that moment, so gear that lands late still appears. AE plugin only (NPCs were never affected — they refresh on their own).
# Version 1.7.3 (Patreon build)
Feature release stacked on 1.7.2.
## Added
- **PositionTree control for player-started scenes** — two complementary ways to control whether the player is handed the manual branch-controls widget in a tree scene:
- New `pc_in_scene_controls_tree` preference (default `true` = today's behavior). Set it `false` and a player who starts a positionTree scene through the wizard no longer gets the controls widget — the tree auto-advances like an NPC-run scene. Only affects wizard-started scenes; scenes started by other mods are unchanged.
- New `npcControlWhenPCActor` attribute on `<tree>` — a comma-separated list of actor slot indices. If the player ends up in one of those slots, the tree auto-advances (no controls widget) regardless of who started the scene. For trees authored so the player is a passive participant (e.g. mods that put the player in a non-driving role).
- **XML reload-on-load for animators** — new `reload_xml_on_game_load` preference (default `false`). With it `false`, AAF keeps pre-loading XML once at the main menu and reusing it (faster, current behavior). Set it `true` and AAF re-reads every XML file from disk on each game/save load, so animators can edit XML and load a save to see the changes without restarting Fallout. Intended only for XML iteration; leave it off for normal play.
- **Authored scene cameras** — animations can move the free-cam to author-defined angles during player scenes:
- Define angles with the new `cameraAngle` XML type (a position offset from the player plus how it aims — look-at, or explicit yaw/pitch, plus optional FOV).
- Group angles into a `cameraPlaylist`, then attach a playlist to content either directly (a `cameraPlaylist` attribute on an `<action>` or `<animation>`) or additively via the new `cameraMapData` file (map action/animation ids to a playlist — adds camera work to existing packs **without** editing their XML).
- The camera **auto-cycles** through the active playlist: `camera_angle_cycling` (on/off), `camera_angle_duration` (seconds per angle), `camera_start_angle` (first/random), and `camera_cycle_order` (linear/random). You can also step it manually with the existing cycle key (`/` by default), and an on-screen hint shows the key while a camera is active.
- **Smooth transitions** between angles — `camera_transition_type` = `cut` (instant, default), `direct` (glide in a straight line), or `rotated` (orbit around the actor), with `camera_transition_speed` setting the glide length. Applies to both auto-cycling and manual stepping; the glide tracks the actor as it moves.
- **Optional opening shot** — set `default_scene_start_playlist` to a playlist id and every player scene opens with an establishing move to one of its angles (`default_scene_start_angle` first/random) using its own `default_scene_start_transition`/`default_scene_start_speed`, before normal cycling. Blank (default) = no opening shot.
- **Angle capture tool for animators** — while in a scene's free-cam, press the quickscene key (F11 by default) to log a ready-to-paste `<cameraAngle .../>` line for the current camera (computed relative to the player) to `aaf.log`, so you can author angles by flying the camera instead of guessing offsets. (The quickscene key no longer starts a scene while you're already in one.)
- The camera always frames the player; playlists re-resolve as the animation changes (e.g. across a positionTree).
- **You can take the camera anytime** — just move the free-cam (WASD/mouse) and AAF stops cutting away. It resumes auto-cycling once you've left the camera still for `takeover_cooldown` seconds; set that to `0` and AAF hands you the camera for the rest of the scene the moment you touch it (negative/blank turns the courtesy off).
- Stays out of the way: the scene camera suspends itself during dialogue, menus, and loading screens (it only drives the view while the free-cam is actually active), and it always releases cleanly when a scene ends, is interrupted, or you load a save — so it can never leave the camera stuck.
- **On by default, with a subtle showcase.** AAF now ships with `enable_scene_camera` set to `true` and a bundled default playlist (`aaf_opening`), so every player scene opens with a brief establishing shot — a taste of the system that invites you to explore the camera settings. Don't want it? Set `enable_scene_camera = false` for exactly the old behavior (straight to the normal free-cam), or point `default_scene_start_playlist` at your own playlist.
- AE plugin (`aaf_1_11_221.dll`) only. On the Old-Gen build (`aaf_1_10_163.dll`, game 1.10.163) there is no camera support, so AAF **auto-detects and disables** the scene camera there — no camera changes, no on-screen hints, regardless of the setting. (First-person POV is a planned follow-on.)
- Fixed a harmless but distracting HUD redraw: pressing the "next scene" key (Backspace) with only one scene running rebuilt the scene window for no reason; it now only cycles when more than one scene is active.
## Fixed
- positionTree/animationGroup start & stop effects (equipment, morph, overlay) now apply even when the played position doesn't define them. A `stopEquipmentSet`/`stopMorphSet` (etc.) set on a `positionTree`'s (or `animationGroup`'s) `positionConfig` was silently ignored at scene start/end because AAF only read the effect from the currently-played position — which, for a tree branch playing a shared pack position, defines none. AAF now resolves these effects up the hierarchy (played **position → animationGroup → positionTree**, most-specific wins), so tree/group-level re-dress and morph effects fire as authored. A position that defines its own set still overrides the tree's. See the effect-resolution note in the positionTree documentation.
- Layered outfits not restored after a scene. When AAF undressed an actor for a scene, it snapshotted their loadout to re-dress them afterward — but for **layered equipment** (outfits AAF peels in stages via `equipmentLayers`/`equipmentRules`), that snapshot pointed at the *live* equipment list, so peeling the layers mid-scene corrupted it. At scene end the original outer clothing never came back (the actor stayed in an underlayer or undressed), and a later scene could carry stale layer state forward and instantly strip a freshly re-equipped outfit. AAF now **freezes a copy** of the pre-scene loadout and restores the original items from it, and rewinds layer state on re-dress. Plain (non-layered) equipment is unchanged. If an unusual setup misbehaves with the new restore, set `legacy_equipment_restore = true` to revert to the old behavior.
## Compatibility
- **PositionTree control** and **XML reload-on-load** work on both the Old-Gen (`aaf_1_10_163.dll`) and AE (`aaf_1_11_221.dll`) plugins — they are UI-side and both builds share the same UI.
- **Authored scene cameras** are **AE (`aaf_1_11_221.dll`) only**. The Old-Gen plugin has no camera support and silently ignores the camera settings, so 1.10.163 users see no change from these options. (An Old-Gen camera port may come later.)