About this mod
A native mod to improve some of the keyboard and mouse controls.
- Requirements
- Permissions and credits
- Changelogs
Mouse support has been added to the dart game, including the option to use a completely overhauled minigame design built specifically for mice!
What does it do?
The purpose of this mod is to provide various improvements to FF7R's unfortunately terrible KB&M controls, particularly around allowing both movement and the menu directions to be bound to the same keys (e.g. WASD). Here are the list of the current features:
- Allows using a discrete set of keys to change your selected party member (internally called your "leader") in combat rather than having the menu buttons control it.
- Changes the map to be controlled by your mouse, including clicking and dragging to move the map and scrolling to zoom in and out.
- Allows you to rebind controls in the motorcycle minigame.
- Lets you press a button to walk slowly as if you were just slightly pushing the joystick on a controller.
Installation
- Install Native Mod Loader
- Put ff7-kbm-hook.dll into your NativeMods directory
Video: https://www.youtube.com/watch?v=sLDb_tu4TlI
Uninstallation
Remove ff7-kbm-hook.dll from your NativeMods directory, and optionally delete ff7-kbm-hook.toml and ff7-kbm-hook.log from the game's base directory.
Configuration
When you first start the game after installing this mod, a configuration file called "ff7-kbm-hook.toml" will automatically be created in your game's base path next to (not inside of) the NativeMods directory. If you wish to re-generate this file in the future, you can rename, move, or delete it, and the mod will generate a new one.
Options are split into categories based on what part of the mod they affect. A comprehensive list is included below:
[General]
- ReloadKey (default: 'f10') - controls what key will cause the config file to be reloaded from disk.
[ChangeLeader]
- EnableHook (default: true) - decides whether to override the behavior around changing your selected party member (leader); if false, none of the following options have any impact
- PrevLeader (default: 'left') - the button to switch to the previous party member in the list
- NextLeader (default: 'right') - the button to switch to the next party member in the list
- ZExperiment_DisableTimeStop (default: false) - disable the "time stop" effect when changing the leader
[Map]
- EnableHook (default: true) - decides whether to change the map to use mouse controls
- LockMouse (default: true) - whether your cursor should be locked to the map area, or if it can go anywhere
- ZoomSensitivity (min: 0 (off), max: 10, default: 5) - how much each scroll tick should zoom in or out; decimal values supported
[Movement]
- EnableHook (default: true) - decides whether to enable movement changes
- WalkKey (default: 'ctrl') - what key should make you walk rather than jog
- ToggleWalk (default: false) - whether WalkKey should toggle walking rather than needing it to be held
[Motorcycle]
Note: for all of the custom keybinds here, you can use an empty string ('') to tell the mod to use your original keybinds
- EnableHook (default: true) - decides whether to enable motorcycle minigame changes
- Accelerate (default: 'w') - the new accelerate key
- Brake (default: 's') - the new brake key
- AttackLeft (default: 'lbutton') - the new left attack key
- AttackRight (default: 'rbutton') - the new right attack key
- Guard (default: '') - the new guard key
- Special (default: '') - the new special/unique attack key
- LongRange (default: 'r') - the new long range key (the one you hold in order to make the special attack long-range)
[Darts]
Note: the options starting with Overhaul are used to configure the "overhaul" version of the darts minigame, which is a complete control rework to feel more fun and fair on mouse. MouseSensitivity and ReturnSpeed have no effect when Overhaul is enabled.
- EnableHook (default: true) - decides whether to enable darts minigame changes
- MouseSensitivity (default: 1) - how much the reticle should move in response to moving your mouse
- ReturnSpeed (default: 1.8) - how fast the reticle returns to its original position.1.8 is the default that the game uses for controllers, though on mouse it tends to be a bit fast. You might want to test out smaller values like 1.
- Overhaul (default: false) - enable a complete overhaul of the darts minigame in which control over the reticle behaves like dragging a spring; controller is not supported and will not work to control the reticle when this is enabled
- Overhaul_Frequency (default: 0.5) - how rapidly the spring will oscillate; smaller values move slower, while larger values may be hard to control
- Overhaul_Damping (default: 10) - how much damping will be applied to the spring; larger values will generally make the reticle easier to control
FAQ
What are valid key names?
Keyboard.cpp in the source code has a list. And yes it supports mouse bindings as well.
Can you add X?
Unless it's a trivial change, probably not, though you're free to ask. If I find something annoying during my playthrough, I may take the time to add a feature to fix it, but reverse engineering can be extraordinarily time consuming so I'm not likely to do it on request unless I also want it. If you already have relevant memory addresses/code patches for a particular KB&M improvement and you just want help getting it packaged into a mod, you can share them and I'll see how straight-forward it would be to include them in this mod.
Things I know would be nice features but I haven't gotten around to adding:
- When the confirm and unique attack keys are the same, prevent the unique attack from triggering when you give a command to another character in the ATB menu
- Add mouse or at least better keyboard control to the Midgar wireframe map (very low priority)
Is this open-source?
Yes. The source code is available on GitHub at https://github.com/TheUnlocked/ff7r-kbm-hook. Feel free to make pull requests.
Known Issues
- The PrevLeader and NextLeader buttons will also act as left and right menu navigation buttons. This happens because the mod triggers switching by emulating left and right arrow key presses. Earlier versions of this mod directly called internal functions to change the selected player, but that had its own issues and the current solution is far more stable.
Credits
gottyduke's DKUtil library and PluginTemplate sample were extremely helpful in creating this mod.
Thanks to Hydeny for the suggestion to add a walk button.