# V2 Auto-Aim Assist

This runbook covers `TODOS.phase-72.72.13.2.3`: configurable auto-aim assist
with `Off`, `Low`, `Medium`, `High`, and `LockOn` strengths, controlled
separately for camera and aim.

## Runtime Surface

Auto-aim assist extends the V2Input accessibility profile model:

- profile: `FV2AutoAimAssistProfile`
- strength enum: `EV2AutoAimAssistStrength`
- tuning row: `FV2AutoAimAssistStrengthTuning`
- resolved assist: `FV2ResolvedAutoAimAssist`
- source library: `UV2InputBlueprintLibrary`
- config asset: `UV2InputConfigAsset`
- UI config: `FV2AccessibilityMotorAssistConfig`
- persistence snapshot: `FV2PlayerSettingsSnapshot`
- save game: `UV2SaveGame`
- persistence subsystem: `UV2PersistenceSubsystem`
- contract:
  `V2/ue/Content/V2/Input/Accessibility/AutoAimAssist_V2_Contract.json`
- focused checker: `V2/ue/Tools/check-v2-auto-aim-assist.py`

## Behavior

Profiles default both aim and camera assist to `Off`. Players can choose
separate strengths for aim and camera. `Low`, `Medium`, and `High` resolve to
bounded magnetism, camera friction, and target-cone tuning. `LockOn` is a
distinct opt-in strength with an explicit lock-on cone and resolved lock-on
flags for aim and camera independently.

## Validation

The tuning table must contain exactly the supported strength family: `Off`,
`Low`, `Medium`, `High`, and `LockOn`. The `Off` tuning has no magnetism, camera
friction, target cone, or lock-on. Enabled strengths must have positive aim,
camera, and cone values. Only the `LockOn` strength may enable lock-on.

## Persistence

`FV2PlayerSettingsSnapshot` stores `AutoAimAssistProfile` with startup flags.
`UV2SaveGame::SaveAutoAimAssistProfile` persists a validated profile per player,
`GetStartupAutoAimAssistProfile` resolves it on startup, and
`MarkAutoAimAssistAppliedOnStartup` records the before-gameplay apply time.
`ValidateSave` rejects profiles whose account id does not match the save header.

## Verification

Run these checks after changing auto-aim assist:

```bash
python3 V2/ue/Tools/check-v2-auto-aim-assist.py
python3 V2/ue/Tools/check-v2-input-module.py
python3 V2/ue/Tools/check-v2-profile-save-game.py
python3 V2/ue/Tools/check-v2-persistence-module.py
python3 V2/ue/Tools/check-v2-accessibility-feature-set.py
python3 V2/ue/Tools/check-v2-ui-module.py
python3 V2/ue/Tools/check-v2-ci-workflow.py
python3 V2/tools/validate-v2-docs.py
python3 -m py_compile V2/ue/Tools/check-v2-auto-aim-assist.py V2/ue/Tools/check-v2-ci-workflow.py
python3 -m json.tool V2/ue/Content/V2/Input/Accessibility/AutoAimAssist_V2_Contract.json
```

Automation coverage:

- `V2.Input.Module`
- `V2.Persistence.Module`
- `V2.Persistence.ProfileSave.AssetContract`
- `V2.UI.Module`

## Horde Gates

- `auto-aim-source`
- `auto-aim-strength-tunings`
- `auto-aim-separate-camera-aim`
- `auto-aim-lock-on`
- `auto-aim-per-player-persistence`
- `auto-aim-startup-apply`
- `auto-aim-ci-wired`
