[BeamNG + RBR] KB+M & full mouse XYZ control - steering, throttle & brake!

please move this to FAQ unless you want this to be at the bottom of every search engine

for other games (using vJoy / vXbox / ViGEmBus + feeder + remapping XYZ axis), -
scroll down to the comment section!

linux alternatives AND tl;dr included!

SLOW INTERNET WARNING: THERE ARE PICTURES!
NOTE: this is NOT a drift guide. maybe one day…


hello everyone. :blush: i have been asked numerous times by many people (0) “how do you even hold a drift with a mouse?!” - in this tutorial, i will be sharing my secret formula (spoiler alert: its ~30k combined hours in beamNG on me mom’s computer, pls dont judge…)! this may not differ that much from other guides for beamNG (and RBR!) on the internet, but nevertheless, i couldnt find one on beamMP (and rbr!). besides, it’s a pretty (cheap) niche and a hard-to-master method of driving! coming from communities such as richard burns rally and trackmania [citation needed], mouse control is a pretty cheap alternative to sim (big) rigs for any racing game! fortunately, beamNG allows you to bind wheel and pedal axis input to a mouse in-game without any third-party software. so, if you ever wanted to drive better (drifting a FWD) or are waiting for your new wheel from aliexpress (69nm of finger breaking action) - embrace the simulator genre where your mouse acts as an analogue joystick without any digital controls AND without physical joysticks themselves! wItHoUt fUrThEr aDo, LeTs jUmP rIgHt InTo iT :crazy_face: :crazy_face:





:mouse: :mouse2: :computer_mouse: FULL MOUSE CONTROL: :mouse: :mouse2: :computer_mouse:

(not recommended for beginners)
(FOR KB+M SCROLL DOWN)

this is the setup that i use. you’ll probably find kb+m easier. see down below.

  • you will need: a mouse with low DPI (sensitivity), preferrably without a trackball, with side buttons (mouse3, mouse4, mouse5, mouse6), vertical mice, mouse keypads and mice with haptic feedback are welcome and encouraged (carpal tunnel syndrome alert!)
    usually, when it comes to driving by means of a mouse, people refer to keyboard AND mouse controls, however, i drive by only using A mouse (singular).

  • trivia: disable all and any driving assists:
    – if you are struggling with shifting, enable clutch assist
    – if you are driving regular cars, dont drift or rally, enable throttle assist
    vehicle behaviour should be all off
    (because otherwise you will rev the engine while in the menu)


(res small cos im on a steam deck :P)

  • (!) the problem: clutch is the THIRD pedal, and since we are limited only to TWO analogue axes, clutch will be inevitably bound to the digital, binary key input (value of 0 OR 1), therefore we can only clutch kick just to shift a gear, which is pretty harmful to the transmission and the engine. however, if we’re drifting, there are such other techniques much easier on your car, for example, weight transfering and the use of the handbrake. anyway, such rapid clutch depressions can be mitigated by the built-in filtering logic which smoothes such binary key presses in beamNG (by default these are A and D for keyboard users) that i will talk about later, although that wont be enough. anyway, all of this is not a problem if we are driving a seq/DCT/auto or if we are clutch kicking in a professional racing automobile in a videogame, however…

– (if that bothers you, skip to the second part of the tutorial that includes the keyboard in the setup. it’s much more casual.)

after that, in the controls > vehicle, unbind (unassign) keyboard keys that you were using to control the car with, for example: “throttle”, “brake” - unbound (because we’re using combined throttle&brake instead), then “steering (left key)” and “steering (right key)” - unbound (because we’re using steering (axis/mouse). this is because such keys will interfere with mouse controls and will prioritise them in the middle of driving if you accidentally press them.


(do not worry, at the bottom of the list there are reset buttons)

btw the right mouse button (MOUSE2) is unboundable, because it is “hardcoded to camera rotation”, as the devs replied, and cannot be changed, so, that sucks…

  • COMBINED THROTTLE&BRAKE:
    – bind to VERTICAL MOUSE AXIS (Y AXIS) - just move it up and down
    filter: automatic (automatically sets to wheel (direct) since it is an analogue input!)
    inverted axis: enabled (unless you like natural scrolling or prefer brakes to be applied by moving the mouse upwards)
    linearity: 1
    deadzone (rest): 0
    deadzone (end): 0,5 (this is the distance your hand should travel to go full throttle or full brakes - lower for more precision, higher for faster response. experiment!)

  • STEERING (AXIS/MOUSE):
    – bind to HORISONTAL MOUSE AXIS (X AXIS) - just move it left and right
    filter: automatic
    inverted axis: off
    linearity: 1
    deadzone (rest): 0
    deadzone (end): 0
    force feedback configuration: oh so you have a wheel now, huh? unless you have haptics in your mouse, configure its intensity.

but wait! theres more…

  • CLUTCH
    – bind to LEFT MOUSE BUTTON
    filter: key (smooth) - (do you remember why we’re doing this?)

  • PARKING BRAKE
    – bind to MOUSE SCROLL WHEEL (press it, also known as MOUSE3, not to be confused with BUTTON3, which is a side button)
    – this is supposed to be the FOURTH axis, however, we’ll be smashing it regardless whether it can be pulled slightly or not. and as a matter of fact, not even wheel owners have such luxury of having a dedicated handbrake, therefore this stays unfiltered.

  • SHIFT UP
    – bind to BUTTON3 (side button)

  • SHIFT DOWN
    – bind to BUTTON4 (side button)

  • (optional) TOGGLE IGNITION STATE
    – bind to BUTTON5 (side button)
    (may not work if you are on linux)

  • (optional) SOME OTHER BUTTON
    – bound to BUTTON6 (side button)
    (may not work if you are on linux)

in controls > camera:

  • CENTRE CAMERA
    – bind to MOUSE SCROLL WHEEL (press it, same as handbrake)
    (because you may accidentally press right click and move your camera…
    …and right mouse button is hardcoded and unboundable, remember?)

when you are done…

now, think of your screen as a mathematical graph of a function. your centre of the screen, 0(X) 0(Y), is where you apply no throttle, no brakes and no steering input. (NOTE: you may prefer to see the mouse cursor on your screen. if there is no cursor, try borderless mode or changing the renderer). gently move your mouse (cursor) upwards to depress the gas pedal. then, slowly, very slowly move your mouse downwards to apply brakes. later you will realise how important it is not to go “full ABS mode”, also known as “to lock up”, if you dont have ABS. when you will understand the basics, then you can try taking corners at different speeds. remember, it does matter whether you release or depress it. unfortunately, and i only say this now but you probably saw it coming - no, you cannot trail brake, as there is no way to simultaneously brake and apply throttle. (EDIT: it IS possible, but it involves third-party software. it requires to invert either the Y or Z axis, so that brakes are applied to the remaining percent of the throttle not being depressed, e.g. throttle 75% > brakes 25%. however, this bind should be an on & off toggle, otherwise it will be impossible to drive normally. to learn more, scroll down to the comment section). however, let it not disappoint you as it doesnt make you any less competitive! i believe you can do this!

you can see the exact inputs you are doing in UI Apps > Pedals and Axis

and that’s about it! happy trailing, drifting, rallying, baja-ing, racing, cruising, etc! <3





:mouse: :mouse2: :computer_mouse: MOUSE + KEYBOARD CONTROL: :keyboard: :musical_keyboard:

(recommended for beginners)

this is the second part of the tutorial that you probably skipped to because it is just borderline insane to shift gears by using only a mouse. nonetheless, welcome, new mouse driver! this is a much simpler way to drive a vehicle in beamNG without worrying about shifting. this is generally the FASTER way to learn any automobile sport, including drifting! wItHoUt fUrThEr aDo, LeTs jUmP rIgHt InTo iT :crazy_face: :crazy_face:

  • you will need: a mouse with low DPI (sensitivity), preferrably without a trackball, with side buttons (mouse3, mouse4, mouse5, mouse6), vertical mice, mouse keypads and mice with haptic feedback are welcome and encouraged (carpal tunnel syndrome alert!)

disable the same assists as in the full mouse tutorial above, except we do simplify it a bit - we are enabling the game shifting logic (albeit not perfect and unrealistic) to ease our keyboard struggles:


(res small cos im on a steam deck :P)

after that, in the controls > vehicle, unbind (unassign) keyboard keys that you were using to control the car with, for example: “throttle”, “brake” - unbound (because we’re using combined throttle&brake instead), then “steering (left key)” and “steering (right key)” - unbound (because we’re using steering (axis/mouse). this is because such keys will interfere with mouse controls and will prioritise them in the middle of driving if you accidentally press them.


(do not worry, at the bottom of the list there are reset buttons)

TWO IMPORTANT BINDINGS:

  • combined throttle&brake - same settings as above in full mouse control section…
  • steering (axis/mouse) - same settings as above in full mouse control section…
    (sorry, but you had to pay attention… that im lazy af!)

but wait! theres more…

  • CLUTCH
    – bind to LSHIFT
    filter: key (smooth) - (as mentioned earlier, this is supposed to be our third axis that we cant have on a mouse, therefore we are trying to smooth its transition between 0 and 1 value states)
    (since the assists are doing the shifting job for us here, we use the clutch for the clutch kick technique to intentionally lose the grip)

  • PARKING BRAKE
    – bind to SPACEBAR
    – once again, the forgotten FOURTH axis. filtering can be omitted…

  • SHIFT UP
    – bind to X
    (can be any key, this is just for better posture and less wrist fatigue)

  • SHIFT DOWN
    – bind to Z
    (can be any key, this is just for better posture and less wrist fatigue)

next are the keys you would have sacrificed if you were in full mouse control

  • FLASH HIGH BEAM HEADLIGHTS
    – bind to LEFT MOUSE BUTTON
    (this is MAINLY to indicate you wish to overtake in a race)

in controls > camera:

  • CENTRE CAMERA
    – bind to MOUSE SCROLL WHEEL (press it) or BUTTON3 (side button)
    (in case you accidentally move your camera with the UNBOUNDABLE right click)

  • LOOK BACK
    – bind to **MOUSE SCROLL WHEEL (press it) or BUTTON3 (side button)
    (in case you cant see who is in the mirror,
    these two keys should be easily accessible,
    as you will be using them A LOT)

(optional) in controls > beamMP (at the bottom of the list):

  • (optional) PLAYER NAMETAGS
    – bind to BUTTON4 (side button)
    (sometimes they’re distracting)

  • (optional) TOGGLE CHAT
    – bind to BUTTON3 (side button)
    (if you are using the new imgui experimental beamMP chat, otherwise you can hide the interface with ALT+U)

when you are done…

now, think of your screen as a mathematical graph of a function. your centre of the screen, 0(X) 0(Y), is where you apply no throttle, no brakes and no steering input. (NOTE: you may prefer to see the mouse cursor on your screen. if there is no cursor, try borderless mode or changing the renderer). gently move your mouse (cursor) upwards to depress the gas pedal. then, slowly, very slowly move your mouse downwards to apply brakes. later you will realise how important it is not to go “full ABS mode”, also known as “to lock up”, if you dont have ABS. when you will understand the basics, then you can try taking corners at different speeds. remember, it does matter whether you release or depress it. unfortunately, and i only say this now but you probably saw it coming - no, you cannot trail brake, as there is no way to simultaneously brake and apply throttle. (EDIT: it IS possible, but it involves third-party software. it requires to invert either the Y or Z axis, so that brakes are applied to the remaining percent of the throttle not being depressed, e.g. throttle 75% > brakes 25%. however, this bind should be an on & off toggle, otherwise it will be impossible to drive normally. to learn more, scroll down to the comment section). however, let it not disappoint you as it doesnt make you any less competitive! i believe you can do this!

you can see the exact inputs you are doing in UI Apps > Pedals and Axis

and that’s about it! happy trailing, drifting, rallying, baja-ing, racing, cruising, etc! <3

please ask any questions - i will help you!

P.S. fun fact: now you can tune your car freely. very soon you will realise that tunes that you had before for keyboard dont work well or at all for mouse and/or wheel. good luck!
P.P.S. analogue keyboards (e.g. by Wooting) are awesome. however, none of us are that rich…

drifting AND tuning tutorial coming soon…

<3

1 Like

Think you could do a forum tutorial on how to actually drift, not “drift” like sean boswell in the beginning of tokyo drift. I always end up in a ditch, a wall, or spinning out. Or atleast a way to practice

SLOW INTERNET WARNING: THERE ARE PICTURES!

tl;dr skip to “HONORABLE MENTION” section and get those two (2) things.

hello everyone. this comment is an addendum for keyboard and mouse AND / OR full mouse controls for OTHER sim racing games, e.g. Richard Burns Rally (RBR), DiRT Rally (2.0), EA SPORTS WRC, Assetto Corsa (AC), iRacing, Forza Horizon, Gran Turismo, Project CARS, Automobilista, Farming Simulator, Trackmania, Bus Driver Simulator, My Summer Car, SnowRunner, MudRunner, Wreckfest, MS Flight Simulator (or VATSIM), X-Plane, DCS World, War Thunder (simulator battles, though mouse controls are present, they are absolute - when you probably want relative controls), Euro Truck Simulator (AFAIK only has mouse steering) and even casual games, such as “grand theft auto” (SAMP, MTA, GTA Connected, GTA Online, etc.) and EA SPORTS F1 (at least their tyre simulation is better than beamNG’s) or something else that is not even a racing game!

due to there being absolutely ■■■■ all information, guides, tutorials or instructions on the internet (cos they all are utter ■■■■■■■■ and misleading, especially youtube ones - no one is going to watch your youtube tutorial, mate) on how to set up a proper, FULL mouse OR keyboard AND mouse controls in RBR, - for example, where -X/+X left & right is mouse steering; -Y/+Y & -Z/+Z are mouse throttle and brake (50%/50%) controlled by the vertical Y axis, without any additional button pressed or held, - i have decided to create my own guide for future reference and crazy people alike who want to control a vehicle in a videogame with a mouse. my guide could be an absolute slop, but hey, i tried my best. remember, windows SUCKS and it is impossible to avoid this mess. extreme yapping below!


trivia (optional):

  • feeders are applications or software that “feed” or send input data (e.g. cursor position value change or keyboard input) FROM a serial port, i.e. your HID device, e.g. a mouse or a keyboard, TO vJoy, vXbox (aka ScpVBus) or ViGEmBus (links to them all below), or to another (physical and/or virtual!) HID compliant device (including but not limited to mouse and keyboard, again), where the aforementioned in bold are technically emulators of certain devices (notably joysticks and yokes), which makes them device drivers (also known as a bus driver - sorry, i meant “bus driver”). without HID device drivers, you would not be able to move the mouse or use the keyboard. and so, this essentially makes the feeder a “translator”. NOTE (in case you missed): it is NOT NECESSARY (with some exceptions) to use vJoy or ViGEmBus - you can also just connect a physical joystick and remap it to be used via a mouse, if the feeder is able to detect it, that is. almost every feeder comes with a graphical user interface (GUI) where you are able to bind or assign a key (digital, 0 or 1) or an axis input (analogue, 0 to 100) to “feed” or send (translate) that input data to the virtual joystick emulator or other HID compliant device, which they then can interpret inputs as keys (digital, 0 or 1) or XYZ axes (analogue, 0 to 100) - however and anyhow you like them to be remapped, bound or assigned. historically, people have used these joystick emulators because their favourite videogame could not recognise their new and fancy joystick, so they got mad and started furiously coding. for example, people are using vJoy in MS Flight Simulators, and one of the aircraft controls is the trim-tab control, which is an analogue axis, however, by translating a continuous key holding input to vJoy (where a keyboard being an absolute digital input device sends data through the feeder to vJoy and in turn gets a relative analogue input data), it can interpret a digital (0 to 1) input as a linear (0 to 100) analogue axis input - it is literally magic, is it not, would you not agree, right? moreover, vJoy is not necessarily a “joystick”, it can also be interpreted as various axes BEYOND just the XYZ, e.g. a steering wheel or a pedal (that by themselves are able to have remappable digital key inputs! think a steering wheel that is able to press A and / or B buttons, etc.!), which is what you wish to accomplish with a mouse - though, not to be confused with actual HID wheel and pedal axes - they are remappable, but may not work with a mouse, so instead we are using the actual joystick X, Y and Z axes (excluding Rx, Ry & Rz - second axes within the XYZ, like a joint (weed haha, but no, math - used in yokes), the handbrake and the clutch axes!). newer versions even have support for MIDI! so, there are a few ways to feed input data to a virtual generic joystick - via a proxy DLL, DLL injectors or via an API hook (low level and high level). there are a few input API’s a feeder can choose from - GameInput (newest, a static link of every other input API or DLL), XInput (new, not to be confused with xinput in linux!) and DirectInput (legacy). then, there is RawInput (arguably NOT an API, but literal raw input data, always relative input (?), ignores system settings (acceleration, etc.), has no interpolation or smoothing). but for my linux gals and guys, we are using libinput and sometimes even evdev (not to be confused with xorg’s evdev driver!), mousedev and joydev API with uinput kernel module (legacy, evdev can be a feeder, this is what Steam Virtual Controller uses btw, where uinput is a device emulator, i.e. just like ViGEmBus). and unlike windows, you most likely already have these in your system. and YES, there are LINUX alternatives. and last but not least, there are relative and absolute analogue inputs. a joystick can be both relative and absolute, where relative axis input is “keep constant velocity” RELATIVE to the centre of the screen or its neutral position (X0, Y0), whereas the absolute axis input is “release to neutral position when no input received”, in other words, relative is an “endless slider” (maximum value range of which you can limit) and absolute is the “camera control” (whatever input value of which always returns to the neutral position (centre), but NOT the camera itself!). the keyboard is always an absolute input device. can you guess why? correct, otherwise i would not be able to write this guide or else every key will get stuck in infinite input. now, relative and absolute input of a MOUSE is a whole different story. a mouse is by default a relative input device, but it too can be an absolute input device. the system interprets mouse position so that it is visible on the screen (to mouse, your screen is but a tiny solar system, just a speck in the vast open space it always has access to), but the mouse itself never really cared about any rules or limits. were you to move the mouse in a direction - it will keep increasing (or decreasing) its input value infinitely and forever, this is especially true if you are remapping it to a joystick, which is what we are literally doing. BUT! this is where it gets interesting. if the joystick has a value range, the mouse does not. it will exceed / overflow its emulated joystick position, ESPECIALLY if it is not calibrated in Win+R > joy.cpl, and while the joystick shows a maximum input value range of 0 to 16384, mouse itself can be in the millions, because it is RELATIVE. this may be a slight problem, but fortunately feeders allow to tweak and change many things if things go wrong. but what about the ABSOLUTE input of a MOUSE? it is actually in every (3D) videogame, because a videogame is NOT an extension of your system, instead it uses its own input libraries, such as SDL or DirectX - yes, this is where “DirectInput” comes from. so, simple as that - CAMERA control in videogames is an absolute input, so unless it moves constantly - it is relative (relative to the centre or its neutral position). but that is about it, really, when it comes to absolute input (of a mouse) in videogames, is it not? please do tell me if you know of a game where the absolute input of a MOUSE (not joystick!) is used BESIDES camera control - that would be fun. now that i think about it, there is a certain videogame that requires you to control an airplane / helicopter with a mouse with absolute controls… ANYWAY, finally, there can only be ONE (1) active feeder. there can ALSO be only ONE (1) active axis of the same axis - which may sound obvious, but is actually a limitation, and you are unable to bind multiple inputs to the same axis, e.g. Y to Y and Z to Y - although the other way around works! BUT! enabling another vJoy device (in vJoyConf), you can have twice or more the amount of the same axis (useful for toggling presets!). feeders should STAY ACTIVE (can be minimised) during the game. ALSO, in case you missed - YES, there are LINUX alternatives in the list below! sorry for caps lock, btw, it is because some people have a short attention span (like me). so, in short, a feeder (controls editor) connects to a device driver (joystick emulator) which can interpret or emulate input from any other HID device, AND, if you want it to, it can emulate itself to be recognised as, for example, an XBOX 360 controller. and with all of that you finally can, for instance, control a joystick by mouse, which is, in retrospect, perhaps only useful for some very obscure situations, like when you want joystick control but absolutely HATE using them (so much so that you destroyed it), so yes, you are indeed weird for wanting this in the first place (couldnt be me). i hope that up there made sense.

THE OLD AND SLOW METHOD - manual mapping -
consider other options too!

  • vJoy v2.1.9.1 (Github / SourceForge) - THE DEVICE DRIVER (EMULATOR)
    installs as an HID device. uninstall via Win+R > appwiz.cpl
    or C:\Program Files\vJoy\unins000.exe
    vJoy is a digitally signed 64 bit driver.
    NOTE1: on mobile devices, e.g. laptops, vJoy can disable
    itself to conserve battery. this feature can be turned off in
    Device Manager > Human Interface Devices > vJoy Device > Energy Management
    NEWER versions DID NOT work for me - winutil Win10, march 2025,
    but they still potentially MAY WORK for your system.
    alternatives to vJoy are vXbox (Github) and ViGEmBus (Github).
    NOTE2: ViGEmBus is more popular than vJoy.

vJoy v2.1.8 (Github) - works (win7, win8, win10)
vJoy v2.1.9.1 (Github) - works (win10, win11) - USE THIS ONE
vJoy v2.2.1.1 (Github) - does not work? (10, 11)
vJoy v.2.2.2.0 (Github) - does not work? (10, 11)

  • Virtual Controller (SourceForge) - THE FEEDER (CONTROLS EDITOR)
    WARNING: may not work for Windows 11 (its trash anyway)
    it translates (feeds) editable inputs of HID devices, e.g. a mouse, to vJoy.
    also supports vXbox (Github), if vJoy does not work.
    do not close the feeder during the game (can be minimised).
    uninstall via Win+R > appwiz.cpl
    or C:\Program Files\Virtual Controller\unins000.exe
    alternatives are provided down below. check them all out!

HONORABLE MENTION (the ViGEmBus way without vJoy) -
tl;dr? GET THIS!

THE NEW AND FAST METHOD FOR WINDOWS.


(i am controlling this with a mouse! INCREDIBLE!!!)

(Win+R > joy.cpl)

  • MouseSteering (Github) - photo above
    works out-of-the-box, no remapping needed.

    REQUIRES ViGEmBus (Github) - otherwise does not launch (!)
    (ViGEmBus is a fork of vXbox, also known as ScpVBus).
    easy to uninstall btw in Win+R > appwiz.cpl
    ViGEmBus’s XBOX 360 controller shows up ONLY when in use (by a feeder).
    (AFAIK emulation of DualShock 4 controller is dependant on the feeder)
    ViGEmBus is a digitally signed 64 bit device driver.
    kernel-mode driver (!). supports 32 and 64 bit.
    works for Win7 up to Win11. deprecated, but still works!

    (MouseSteering is NOT to be confused with MouseSteering_V1.7.2 (Steam Discussions)
    DOES NOT require vJoy installed. feel free to uninstall vJoy.
    1:1 replica of linear mouse controls from beamNG. good enough for anything!
    WRITTEN IN RUST BTW!!! has X, Y & Z axes.
    (to be precise, its XBOX controller analogs for XInput - button 6 & 7)
    also has key bindings to disable any axis on demand.
    comes in a .zip archive (no installation). has a .toml text config.
    however, there are little to no settings that can be changed.
    set snap_input = false in config.toml for unfiltered linear movement.
    set edge_scaling = true under [throttle_config] for more sensitive pedals
    (technically edge_scaling option is the deadzone, but i digress)
    when using this, you do not have to read my guide any more then.

OTHER FEEDERS (they could be better!) -
linux alternatives included!
(sorry, nothing for OSX…)

  • x360ce - Xbox 360 Controller emulator (Website / Github)
    mouse works! supports XInput, as well as other many API’s.
    has its own built-in virtual joystick emulator (in version 4.x.x.x).
    very extensive settings, in fact, THE MOST customisable feeder.
    works with all joystick emulators, i.e. vJoy, vXbox and ViGEmBus.
    has 32 and 64 bit versions. digitally signed application.
    the website is viewed better in austrian version.

  • MouseSteering_V1.7.2 (Steam Discussions)
    a popular autohotkey (AHK) script for steering that only has X axis.
    uses RawInput (no input interpolation or smoothing).
    if you need only the steering via X axis - GET THIS.
    has a mouse “force feedback” in the form of a “push back” to centre
    has key binds and input/steering telemetry.

  • UCR - Universal Control Remapper (Github) - C# version
    same functionality as virtual controller (feeder) above.
    DOES NOT detect keyboard and mouse without plugins!
    (previously known as UJR - Universal Joystick Remapper (Github)

  • UCR - Universal Control Remapper (Github) - AHK version
    mouse works! surprisingly, setup is easier than what’s in my guide below.
    has a lot of various input remaps for various devices.
    possibility to change absolute and relative modes for mouse deltas.

  • Mouse2Joystick (Github)
    changes XY coordinates on CONSTANT cursor movement.
    movement is limited when screen boundaries are reached.
    boundable / remappable mouse buttons to joystick buttons.
    requires ViGEmBus (Github)
    DOES NOT require vJoy installed.

  • mouse2joystick (Github)
    dont be confused. there are more like these.
    anyway, this one is for linux. sketchy self-compiling C code.
    however, steering is hardcoded to be used with held mouse buttons.
    for other linux feeders and drivers, read further.

  • MouseToJoystick (Github)
    same, but not really. changes XY value on CONSTANT (speed) movement.
    it is a mouse joystick in the most LITERAL sense.
    the mouse cursor is locked to the centre.
    double right click to activate / deactivate.

  • MTVJ - MouseToVJoy (itchio)
    mouse steering works, however, throttle and brake is mouse button click only.
    has separate clutch & handbrake axes. shifting is bound to scroll wheel.

  • KeyboardSplitterXbox (Github)
    wtf…

  • Joystick Gremlin (Github)
    same functionality as virtual controller (feeder).
    i have heard great things about it. however,
    mouse support NOT IMPLEMENTED. supports keyboard.

  • vJoySerialFeeder (Github)
    for nerds. also supports linux. crazy.
    too many ■■■■■■■ buttons, so could be scary.

  • AntiMicroX (Github)
    also works on linux! even nixOS!
    keyboard and mouse to joystick remapping.
    unless remapping a physical joystick, use a virtual one.

  • Input Remapper (Github)
    linux only. supports X11 AND Wayland!
    yep, works with mice!
    you may also want a device driver to have something to remap - xpadneo (Github) or even Steam Input Configurator!
    OR just connect a physical joystick.

  • QJoyPad (Github)
    linux only. supports mouse & keyboard. X11 only!
    the oldest remapper.

  • map2 (Github)
    for nerds. linux only. TUI.
    written in almighty rust, however the config is in python.

  • FreePIE (Github)
    for nerds, even more so. python config. windows only.
    there are pre-made user-submitted scripts for mouse-to-joystick control…
    but sim racers are not coders, so feel free to disregard.


MISCELLANEOUS:

  • msfs_mouse_yoke (Github)
    standalone python script. does not use any virtual joystick device drivers.
    uses vGamepad (Github) - device driver
    as well as a python input feeder pynput (Github) - feeder
    uses X, Y & THROTTLE (bound to mouse wheel) axes.

vJoy + Virtual Controller mouse to XYZ axis tutorial:

NOTE: OUTDATED METHOD (as in, slower than the alternatives above!). in this guide, we are manually binding / remapping mouse input in the “virtual controller” feeder to joystick input of a virtual generic joystick (vJoy). so, if you are going for the virtual controller way - continue with this guide, otherwise, scroll back up to “HONORABLE MENTION” section (NEW METHOD, fast). cluttered mess without formatting below. wItHoUt fUrThEr aDo, LeTs jUmP rIgHt InTo iT :crazy_face: :crazy_face:

  1. install vJoy
    (you may have to restart)

  2. install virtual controller
    (can be any feeder of choice - the list is above)

  3. in Start open / search Configure vJoy
    (C:\Program Files\vJoy\x64\vJoyConf.exe)

  4. configure like so:


    (axis may differ depending on your vJoy version).
    plural of axis is axes, however, for searchability sake,
    i will omit this easily confusing word.

  5. close vJoyConf
    (there can only be one (1) vJoy interface active)

  6. in Start open / search Virtual Controller
    (C:\Program Files\Virtual Controller\VirtualController.exe)
    (next steps may differ depending on your feeder application,
    but essentially they are all the same -
    the goal is to bind / remap mouse XYZ input to vJoy XYZ input)

  7. Settings > IO Devices > Setup > Mouse.
    with this feeder, we will be using the LLHook API (“low level” hook) to feed mouse inputs. this is because other API, such as RawInput will not be able to “lock” the mouse INSIDE the screen edges / bounds (of the window or screen’s native resolution) (not to be confused with the “lock” features in this window), because, as mentioned in the optional trivia, it is a relative input mode, so it sends input data to vJoy infinitely, exceeding the maximum value range. once again, a joystick is both a relative and absolute input device, and the XYZ axis is referring to thumbsticks of a joystick, which usually are relative, however, in this case they are, in fact, absolute, unless you have changed their input mode, so the mouse has no virtual boundaries because it is also a relative device of input. if the joystick always has physical boundaries and limitations to how far it is allowed to go, mouse does not. to learn more, i talked about this in the trivia section above.
    anyway, unfortunately, i have yet to find a better solution on how to make this better, because using the LLHook API (in this particular feeder) comes at a cost - it is NOT CALIBRATED (unless it is not, but make sure!) !!! this basically means that: 1. IT DOES NOT RESPECT NEUTRAL POSITION (centre of the screen), to be precise, it is not directly in the middle of the screen, instead it has “drifted” away to some side. high level API, like XInput, could be better for this matter, but this feeder does not have it. feel free to try another! 2. it may overflow negative or positive value range (below 0 or over 16384 / 32768 / 65536, e.g. -100% or 200%) - example photo of this situation provided below. in this case it would be easier to somehow limit vJoy’s maximum value range, but i think it is impossible without compiling your own vJoy via its SDK and you will be left with an unsigned driver. EDIT: wrong! it would be futile. the value range exceeding problem has to do with input being relative (explained somewhere in this post). if your feeder has an absolute mode for mouse input - use it. nevertheless, luckily, joy.cpl has a calibrate feature, read down below. 3. moreover, you may have noticed there is no XInput or even DirectInput in this feeder whatsoever, instead we are using an LLHook library, which may or may not be even WORSE than DirectInput API (which is also low level and deprecated, pre 2006 era) !!! you may stop and refer to other feeders if this does not suit your needs, as always.


    (API can be RawInput, however, axis input on movement will be choppy and laggy DESPITE the update interval (which can be 1ms, btw), because RawInput NOTORIOUSLY has no input interpolation (smoothing). this is not a problem though, because we are playing a sim racing game, most incredibly! anyway, when using RawInput, all physical HID devices will be shown in the IO Devices menu. 1. untick “Lock Feature” and “Entire Device Lock” if they have been turned on - unless i am wrong, needs testing, maybe not !!! 2. you will need to know the GUID of your mouse, which can be done in Controls > Tools > Quick Binding, or in the Windows’ Device Manager system app)

  8. IO Devices > Setup > vJoy 1


    (completely straightforward, just turn it on)

  9. close IO Devices and go to Settings > Controls > Bind > Create
    remapping / binding / assigning time…


    (Modifier can also be “Increase”, but you will probably have to create another binding with “Decrease” modifier so that it will not change its input value infinitely! the “Set” modifier is BASICALLY the same thing but in one single binding. other feeders follow the same principles, just via different interfaces. but DO note that having different modifiers for the input and the output can have vastly different effects (especially if the virtual joystick is not calibrated - more on that below). however, if you are not into mathematics and experimentation, then simply blindly continue to follow my guide)
    Output Modifier > “Set”
    click Settings > Use Input ON = (%) 100
    this is the steering (or aelirons / rudder),
    where horisontal X axis = left and right mouse position relative to the centre of the screen (neutral position)
    NOTE: oh for ■■■■■ sake, perhaps i should have mentioned this earlier… so some joysticks actually split its value range of an axis in two. left trigger could have a value range from Y0 to Y16384, and right trigger could be Y16384 to Y32768, and vice versa. so, in SOME CASES you will have to split an axis into two halves.

    Input Name: Y
    Output Name: Y
    Output Modifier > “Set”
    Settings > Use Input ON = (%) -100

    ^^^ NEGATIVE MINUS ONE HUNDRED ^^^
    this is the throttle OR braking (or elevators),
    where vertical Y axis = up and down mouse position relative to the centre of the screen (neutral position)
    (it is negative so that Y and Z axis move in opposite directions of each other
    in my experience, the values fed to the Y axis always come inverted (i.e. up is negative, down is positive - you probably dont think that way), so just remember that THIS axis has a negative input!

    NOTE: when using combined (!) bindings in-game, you may not even need to use the third Z axis or assign negative input to it since it is rudimentary. THIS Z AXIS CAN BE SKIPPED!
    Input Name: Y
    Output Name: Z
    Output Modifier > “Set”
    Settings > Use Input ON = (%) 100
    this is the throttle AND / OR braking (or elevators),
    where mouse vertical Y axis is remapped to joystick Z axis,
    also an up and down mouse input relative to the centre of the screen (neutral position)
    you can simulate the “combined throttle and brake” by adding deadzones to both halves of the screen for Y and Z respectively (to simulate split screen axis like in beamNG), in case there is no “combined” bindings in-game, but im afraid it is not possible with this particular feeder.
    EDIT: you may want to assign an additional key to activate and / or alternate between Y and Z vertical axis (for flight simulators).

  10. close Controls and go back to main window menu, activate (run) the feeder.
    Main > Run

  11. test in Start open / search Monitor vJoy or Win+R > run> joy.cpl.
    (C:\Program Files\vJoy\x64\JoyMonitor.exe)


    (notice Y and Z axis are opposite of each other - which is useful for trailbraking, but NOT for normal driving! again, for those with ADHD: you can use JUST THE Y axis for the split (combined) axis of gas & brake!)
    to edit any settings, first deactivate (stop) the feeder.
    if sensitivity is low, increase it from 100 to 200, 500, 1000, etc.
    ALTERNATIVELY, change your mouse DPI (if possible).
    if it is returning back to the centre of the screen (neutral position), check Mouse API in IO Devices or bindings in Controls, tick / untick “Lock Feature / Device Lock” or better yet, try XInput (modern, high level API) or DirectInput API (deprecated, low level API) (found in other feeders). also make sure they are not “Speed X/Y/Z”, which is “change value only on movement”.
    once again, if there is no response in vJoy Monitor, check your feeder’s bindings.
    however, if nothing works, try another vJoy version (it uninstalls itself, but you can do it manually) AND / OR try another feeder. trust me, it took me as much time and pain to make this work.
    lastly, as mentioned earlier, it IS possible to enable another joystick device, if your goal is to control double or more the amount of the same axis.

  12. IF axis is not fully 0%-100%, you will have to CALIBRATE your virtual joystick device - Win+R > run > joy.cpl > Calibrate > move your mouse all the way to the corners / edges of the SCREEN, not just X/Y/Z > Apply > OK !!!


    (example of Y axis being offset, when it should be 0)

    (example of Z axis being offset, when it should be 100% @ 32768)
    incredibly, Windows has a built-in “calibrate” feature that ACTUALLY works for VIRTUAL joysticks and their axis! do this EVERY TIME your input values are offset / overflowing below 0% or over 100%, as shown on the example above.
    NOTE: Y and Z axis have different value ranges!!!

  13. finally, test in-game, bind / map / assign controls to your new axis!
    FEEDERS SHOULD REMAIN ACTIVE (can be minimised) !!!


    example in Richard Burns Rally, the game:
    Steering > X axis (move your mouse horisontally left or right)
    (Combined) Accelerate and Brake > Y axis (move your mouse vertically up or down)
    if you have bound Y AND Z axis, then use Y for upwards motion, Z for downwards motion!
    you could then additionally bind the shifter to your device of choice.
    now, the in-game combined input splits the axis for us AUTOMATICALLY, so one of them could be more sensitive than the other. if that is the case, you will have to CALIBRATE your virtual joystick again (in Win+R > joy.cpl). my guess is that vJoy (NOT the game!) could have split (initialised and/or detected?) the axis UNEVENLY, where one half reaches its maximum input value faster than the other axis. so, make sure their value range go precisely FROM 0 TO 16384; FROM 16384 TO 32768; FROM 32768 TO 65536, etc. NOTE: some feeders have built-in calibrators.
    anyway, as usual, if there are no such (combined) bindings in your game, then you will have to come up with your own bindings via the feeder. so, back in the feeder’s bindings and controls you would want to somehow “split” the screen into two axis, where middle is the neutral position for Y and Z (Y0, Z0), where Z is inverted, so its Z0 starts in the centre, not at the bottom of the screen. this is something that i was previously completely stuck on with this feeder, virtual controller, so MAYBE you are better off using another feeder (scroll up for the list). this was honestly a nightmare to figure out myself, so i wish you the best of luck!!!
    EDIT: x360ce’s FAQ section has a guide on how to split the axis into two!

  14. if nothing worked and you are panicking and ■■■■■■■■ > uninstall vJoy via Win+R > appwiz.cpl (C:\Program Files\vJoy\unins000.exe) and try other options!


i did it for yall mfs who are freaky like that with a mouse.

i really encourage you to try the other feeders if youve had a bad experience!

little known fun fact: did you know that the playstation 2’s dualshock 2 & 3 controllers have analogue pressure-sensitive directional buttons? they are the first and the last controllers to ever feature analogue action buttons that are NOT triggers. when dualshock 4 came out, pressure-sensitive action buttons were considered rudimentary, since the rise of 2 trigger + 2 stick formula. this makes “button mashing” have less meaning nowadays.

P.S. feel free to share, spread, edit and (mis)interpret this information anywhere and everywhere (blog about it yeah?). let people know! oh, but whatever will i do - someone has already made a guide on youtube! oh no!!! anyway. also pls correct me if im wrong anywhere!! i, too, dont know wtf im doing. thank you.

tl;dr skip to “HONORABLE MENTION” section and get those two (2) things.

<3