

A BepInEx 6 IL2CPP plugin that adds a fully-featured first-person camera to Aska.
General.SafeMode=true loads the plugin inert while you collect logsBepInEx/config/com.community.askafirstperson.cfg or in-game with BepInEx ConfigManager (F1)AskaFirstPerson.dll into BepInEx/plugins/ inside your Aska game folderAfter first launch, edit BepInEx/config/com.community.askafirstperson.cfg:
| Setting | Default | Range | Description |
|---|---|---|---|
| FOV | 80 | 60 -- 120 | First-person field of view |
| MouseSensitivity | 2.0 | 0.1 -- 10 | Mouse look sensitivity |
| NearClipPlane | 0.05 | -- | Near clip plane distance (lower prevents seeing inside geometry) |
| VerticalOffset | 0.1 | -- | Vertical offset above the head bone (metres) |
| ForwardOffset | 0.12 | -- | Forward offset from the head bone (metres) |
| SmoothSpeed | 15 | 1 -- 100 | Position smoothing factor (higher = less smoothing) |
| MotionDampening | 0.4 | 0 -- 1 | Reduces vertical camera shake from combat and head bob. 0 = raw tracking, 1 = maximum dampening. Recommended 0.3 -- 0.5 |
| Setting | Default | Description |
|---|---|---|
| ShowLowerBody | false | Show forearms, hands, and legs in first-person. Off = cleaner shadow-only body. On = experimental, may have mesh artifacts |
| Setting | Default | Description |
|---|---|---|
| ToggleKey | F5 | Keyboard key to toggle first-person and third-person |
| GamepadToggleButton | RightStickButton | Gamepad button to toggle first-person mode |
| GamepadModifierButton | LeftShoulder | Modifier button held with the toggle button (LB + R3 by default). Set to "None" for a bare button press |
| Setting | Default | Description |
|---|---|---|
| SafeMode | false | Skip all Harmony patches and per-frame behaviour. Use this if the mod crashes at startup so it can remain installed while you collect logs |
| EnableCinemachinePatch | true | Apply the Cinemachine camera-control patch. Disabling this prevents first-person camera control |
| EnableInputSuppressionPatch | true | Apply gamepad chord suppression. Disabling this means the gamepad toggle can still trigger its normal in-game action |
| EnableBehaviour | true | Register the per-frame first-person behaviour. Disabling this stops camera/input/visibility work |
Gamepad chord ordering: hold the modifier (LB) first, then tap the toggle (R3). The mod suppresses the underlying R3 action while LB is held so it does not fire alongside the toggle. Pressing R3 first then LB will fire R3's normal game action.
StreamingWorld) is observedCinemachineBrain.LateUpdate suppresses Cinemachine's camera positioning while in first-person mode, without disabling CinemachineBrain itself (which would break game state)Bip001 Spine and Bip001 Spine1) are rotated in LateUpdate after the Animator writes, so the upper body follows the camera direction while legs face the movement directionShadowCastingMode.ShadowsOnly, except items attached to hand bonesmaster transform to avoid matching duplicate skeletons inside equipment meshesBepInEx/interop/ and relaunch to regenerate)If you stream Aska to a Steam Deck or another device via Sunshine + Moonlight, you need mods installed directly in the game folder (r2modman's "Start modded" won't work over a stream).
Copy your r2modman profile to the game folder:
# Git Bash / MSYS2
cp -r "$APPDATA/r2modmanPlus-local/ASKA/profiles/Default/"* \
"C:/Program Files (x86)/Steam/steamapps/common/ASKA/"
# PowerShell
Copy-Item -Recurse -Force `
"$env:APPDATA\r2modmanPlus-local\ASKA\profiles\Default\*" `
"C:\Program Files (x86)\Steam\steamapps\common\ASKA\"
Then launch Aska normally from Steam -- mods load automatically. Re-run the copy after updating mods in r2modman. To revert, delete winhttp.dll and doorstop_config.ini from the game folder.
BepInEx/plugins/. Check BepInEx/LogOutput.log for Aska First Person Env: lines; they show the loaded plugin path plus Unity/game/interop versions.General.SafeMode = true in BepInEx/config/com.community.askafirstperson.cfg to make the plugin load inert while you collect LogOutput.log. Advanced toggles can also disable only the Cinemachine patch, input-suppression patch, or per-frame behaviour.StreamingWorld) is observed, so it is intentionally inactive before a save/world loads.NearClipPlane or increase ForwardOffsetSmoothSpeed for more smoothing, or increase MotionDampening to reduce vertical shake