Can't map mouse V scroll or Cursor X/Y to Switch/PS4 analog stick

Hello everyone!

I’m trying to map a mouse input to either a Switch or PS4 Left Analog but it doesn’t seem to work in all my testing. If I map them to D-pad directions, it does work but Left or Right analog sticks don’t respond even with different scaling settings. I was hoping someone could help me here.

Specifically, I’m trying to use a Taito Egret II Mini Paddle & Trackball controller on the Switch to play Arcade Archives Puzzle Bobble. The controller has a trackball and spinner wheel which maps to Cursor X/Cursor Y and V scroll respectively, meanwhile Puzzle Bobble only accepts D-pad or Left Stick inputs for movement. I’ve been able to map the trackpad and wheel as D-pad inputs, so the adapter is working though. They just don’t seem to work as Left or Right analog sticks.

Do I need to change something in Expressions? Or is the HID Remapper just not meant for this use case?

For reference, I’m using an Adafruit Feather RP2040 on the latest release r2025-06-17 and here’s what my button layout looks like:

The button layout is strange because Y fires the ball in Puzzle Bobble, while L/R lets me sync the controller to the Switch and are also used as Insert Coin/Start Game buttons.

And here’s what the trackball and wheel Min/Max values are:

For testing, I’ve tried using the adapter directly on the Switch, with another Switch controller adapter inbetween, and also with a PS4-to-Switch adapter while the HID Remapper adapter has been set to PS4. I’ve also tested it on PC using Steam controller tester as both a Switch or PS4 controller, and in all situations the left or right analog stick doesn’t work but the trackball and wheel does work when set as either D-pad Left/Right. (The Dpad solution just isn’t ideal because the V Scroll wheel can only be set to move the D-pad either Left or Right, so it just moves in one direction forever instead of being able to go back and forth)

In more testing, I have been able to make the controller work when I set the HID Remapper adapter to mouse output and then connected that to a Titan Two Controller Adapter which converted the mouse input to Switch output. But it’s a messy setup and I think it should be possible to handle it all within the HID Remapper adapter itself? I may be wrong though.

For more reference, I’ve referred to this post on the MISTer FPGA forum and this post on the github just to get this far in my process. Though these two examples were for outputting for PC, while I’m trying to get this to work on Switch.

Anyway, I’d appreciate any help or advice! Thanks everyone!

You can use HID Remapper to map mouse movement (and scroll) to analog sticks, but it won’t be a simple 1-to-1 mapping because they are fundamentally different types of inputs.

You can take a look at the “mouse to analog stick” configuration in the Examples tab on the configuration website for one way of doing it. Depending on your needs you might want to play with the specifics, that solution implements simple exponential smoothing which I think gives nice results, but you will have to try it in game to see if that’s what you want and play with the numbers or go for some other formula.

In the end you’re getting the deltas that you see in the Monitor tab every time you move the trackball/knob and you have to generate a 0-255 number for the stick where 128 is the neutral position. You might be tempted to use a simple formula like stick_axis_output=128+mouse_input*10, but keep in mind this would only set the joystick position for 1 frame (millisecond), which might not get give you good results in the game.

1 Like

Thanks for the info, jfedor!

I somehow totally missed the “Mouse to Analog Stick” example! I’ll try it out and mess around with the specifics like you said. Thanks again!

I got it working!

After trying out a bunch of things, in the end what worked best is actually the example formula you suggested not to use lol

It turns out that it’s okay for the joystick position to only be read for a millisecond because when I spin the controller wheel, it has velocity and maintains the position consistently over a period of time before slowing to a neutral position, so the output is consistent without extra steps.

The only snaggle I had was that the wheel spun opposite to what I expected and I couldn’t figure out what expressions to use to reverse that, but I eventually realized I could reverse it by mapping the input to a register with a reverse scaling.

Here’s how the settings look at a glance:

And here’s the json file for anyone else who has an Egret II Mini paddle/trackball controller and very specifically wants to play Switch Arcade Archives Puzzle Bobble with just the paddle/wheel lol

It still requires another controller to exit the Switch controller setup screen and start the game plus navigate its menus. Also I couldn’t find a satisfying way to use the trackball but that wasn’t really my goal anyway; I leave that to anyone else in the future who wants to tweak it.

1 Like