ControllerFix
Controller and click fixes: tap a case board card to open it, hold to move it, cards open fully on screen, Y opens and closes menus. One press per click on keypads, phones and elevators, and map floors one at a time.
| Date uploaded | 7 hours ago |
| Version | 1.3.2 |
| Download link | Sm3gm-ControllerFix-1.3.2.zip |
| Downloads | 19 |
| Dependency string | Sm3gm-ControllerFix-1.3.2 |
This mod requires the following mods to function
BepInEx-BepInExPack_IL2CPP
BepInEx pack for IL2CPP x64 Unity games. Preconfigured and ready to use.
Preferred version: 6.0.755README
Controller Fix
A BepInEx (mod loader) plugin for Shadows of Doubt. Fixes for playing with a controller, a trackpad or a mouse: one click is one press, case board cards open with a tap and move with a hold, opened cards stay on screen, Y opens and closes menus and closes cards on the case board, the map's floor buttons step one floor, and the cursor survives switching input.
Formerly Button Fix. Same mod and same settings, with a better name for what it has grown into.
If it saves you from retyping a door code, please leave a like on its Thunderstore page. It keeps me motivated to make more mods. Donations are welcome too:
Want them all? This mod is part of Sm3gm Quality of Life and Sm3gm Complete.
What it does
- One press per click: on keypads, phone keys and elevator panels, the game could press the same key several times for one click, especially at low or uneven frame rates. Codes came out wrong and elevators stopped at the wrong floor. Now each click presses its key once. Entering a code you already know still fills in every digit.
- Presses what you point at: with a controller, a click could press a button that was selected earlier, somewhere else on the screen. Keypads jumped to the Passcodes tab in the middle of a code. Now a click only presses what you point at.
- Map floors, one at a time: the map's floor up and down buttons could take one controller press twice and skip a floor.
- Case board cards do what you mean: tap a card anywhere to open it, hold and move to drag it, whatever the cursor shows. The game went by which part of the card you hit, so a click could move the card, do nothing, or open it only sometimes. A click that wobbles a few pixels still opens. With a mouse or trackpad, a click on the frame still starts a string as in the game.
- Cards stay on screen: open cards no longer land half under the top bar or past the edge of the screen, also when you come back to the case board. Drag a card past the edge and it slides back when you let go.
- Y closes a card on the case board: B closes the whole board, so with a controller there was no quick way to close one card. Press Y and the card you opened last closes, one per press. Over a card, its photo or its pin, Y opens the card's menu, and Y again closes it; an open menu always closes first. A right-click (or two-finger tap) on a photo opens the menu too. Thanks to Captain Fender for the idea.
- Switching input on the case board: going from controller to mouse or back kept no working cursor until you left the board. Now the right cursor comes back at once.
- Phone calls: switching between controller and keyboard during a call no longer lets the view drift, and the view is yours again when the call ends.
- Text fields and lists are left alone: search boxes, typing fields and drop-down lists work as normal.
Works with mouse, trackpad and controller. Tested at 15 and 120 fps.
Config
After one launch, edit BepInEx/config/sm3gm.sod.controllerfix.cfg with the game closed. Coming from Button Fix, your settings carry over.
| Setting | Default | Meaning |
|---|---|---|
| Buttons / OnePressPerClick | true | Keypads, phone keys, elevator buttons and the map's floor buttons take one press per click. |
| Buttons / ClickWindowSeconds | 0.6 | How long after a click the game may still press the key (the hand moves to it first). |
| Buttons / SelectUnderCursor | true | The button under the cursor becomes the selected one, so a controller click presses what you point at. |
| CaseBoard / DragThreshold | 24 | How far (in pixels at 1080p) the cursor must move with the button held before a click becomes a drag. The game uses 10. 0 = leave the game's value. |
| CaseBoard / YClosesTopCard | true | On the case board with a controller, Y closes the card you opened last, one per press, and opens and closes a card's menu. |
| CaseBoard / TapOpensCard | true | With a controller, a tap anywhere on a card opens it and a hold moves it. |
| CaseBoard / PhotoOpensCard | true | The photo always opens the card and shows the hand cursor; the rest of the card moves it. |
| CaseBoard / OpenCardsOnScreen | true | Open cards are kept fully on the screen, below the top bar. |
| Phone / KeepViewOnPhone | true | On a phone call the view stays put when you switch between controller and keyboard. |
| Debug / LogBlocked | false | Write a line to the log for every repeated press that was stopped. |
Install
Use Thunderstore Mod Manager or r2modman and install as normal. BepInEx is installed automatically. If you have Button Fix, you can remove it; only one of the two runs anyway.
To install by hand:
- Install BepInExPack IL2CPP version 6.0.755.
- Put
SoDControllerFix.dllinBepInEx/plugins/ControllerFix/inside your existingBepInExfolder. Remove the oldButtonFixfolder if you have one.
Pairs well with Turn Speed Fix - Steady Turning, which makes controller turning the same speed at any frame rate, and Quick Menu, one menu for all my mods on D-pad Down.
Feedback
Found a bug or have an idea? Post it on the official Shadows of Doubt Discord: https://discord.gg/shadows
Also by sm3gm
All my mods are on Thunderstore.
Support
This mod is free and always will be.
Likes are greatly appreciated and keep me motivated to release more mods, so if you enjoy it, please leave one. You give a like on the mod's Thunderstore page while logged in to Thunderstore. If you installed through a mod manager, open that page in your browser to find the button.
And if you love what I do and want to support future projects, or just want to send a friendly thought, you can do so here:
Thanks for playing.
CHANGELOG
Changelog
1.3.2
- Keypads no longer jump to the Passcodes tab or press the wrong key when you use a controller.
1.3.1
- Case board: open cards now stay on screen when you leave the case board and come back (the game put them back under the top bar or off the edge). A card dragged past the edge slides back when you let go.
1.3.0
- Case board: a tap anywhere on a card opens it and a hold moves it, whatever the cursor shows. Before, the part of the card you hit decided, so a click could move the card or do nothing.
- Case board: the photo always shows the hand and opens the card; the cursor no longer flips between the hand and the move cross on the same spot.
- Case board: opened cards no longer land under the top bar or off the screen.
- Case board: Y and a right-click on a photo open the card's menu, and Y closes an open menu before it closes cards.
- With a mouse or trackpad, a click on a card's frame still starts a string, and the menu opens only the menu.
- New settings: CaseBoard / TapOpensCard, PhotoOpensCard and OpenCardsOnScreen.
1.2.3
- Page text only, no code changes: links to my other mods, and "All my mods" now shows the modpacks too.
- Credits: the "Y closes the card you opened last" idea (1.2.0 and 1.2.2) came from Captain Fender. Thank you!
1.2.2
- Case board: Y now closes the card you opened last, like B used to, also when the cursor is on a card. Only over a pin is Y left to the game (its menu).
- Y is also recognised on controllers that report their buttons differently.
1.2.0
- Case board: with a controller, Y on an empty spot closes the card on top, one card per press (B closes the whole board). Over a card or a pin, Y is left to the game. New setting CaseBoard / YClosesTopCard.
1.1.0
- New name: Button Fix is now Controller Fix. Same mod, same settings; Button Fix points here.
- Map: the floor up and down buttons step one floor per press with a controller (they skipped a floor).
- Case board: a shaky controller or trackpad click opens a note instead of moving it (new DragThreshold setting).
- Case board: switching between mouse and controller keeps a working cursor (it disappeared until you left the board).
- Case board: hovering no longer flickers between moving and opening.
- Phone: the view stays put when you switch between controller and keyboard during a call, and is given back when the call ends.
1.0.0
- First release (as Button Fix). One press per click on keypads, phone keys and elevator panels, and controller clicks press the button under the cursor.

