Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Increase New 3DS C-stick dead zone #94

Open
vaguerant opened this issue Mar 20, 2024 · 1 comment
Open

Increase New 3DS C-stick dead zone #94

vaguerant opened this issue Mar 20, 2024 · 1 comment

Comments

@vaguerant
Copy link

vaguerant commented Mar 20, 2024

Feature Request

What feature are you suggesting?

Overview:

  • Increasing the dead zone for the New 3DS C-stick from 5 to a higher value, perhaps 10. Personally, the dead zone of 5 set out here ...

    3ds-hbmenu/source/ui.c

    Lines 71 to 72 in c63d531

    g_cstickPos.dx = iabs(g_cstickPos.dx)<5 ? 0 : g_cstickPos.dx;
    g_cstickPos.dy = iabs(g_cstickPos.dy)<5 ? 0 : g_cstickPos.dy;

    ... is not quite enough on my New 3DS XL sometimes. Often, I'll have no problems, but other times I'll get the list slowly drifting up or down. I made a build locally where I bumped it up to 10 and so far I've seen no issues. Sensitivity of the C-stick when using it intentionally does not feel noticeably reduced to me.

Nature of Request:

  • Change

Why would this feature be useful?

Reduces unintended input without heavily impacting intended input.

Pull request

I'm of course happy to PR this change if desired, but I figured it was worth opening a discussion before unilaterally deciding 10 is the "correct" dead zone value.

@vaguerant
Copy link
Author

vaguerant commented Mar 20, 2024

I've actually just noticed I can generate spurious C-stick inputs by manipulating the hinge. I'm guessing the movement of the magnet located on the top-half's right side, which triggers the sleep mode, is interfering with the C-stick. Great design on Nintendo's part.

Even with the dead zone at 10, I'm still able to do this. I can consistently cause this issue by booting the console with the hinge in one position, shifting the hinge position, then loading 3ds-hbmenu. Perhaps in addition to adjusting the dead zone, 3ds-hbmenu should also recalibrate where the zero position is on boot?

EDIT: For a pure dead zone approach, I can still cause this issue with a dead zone of 20, but am no longer able to trigger it accidentally with a dead zone of 25. What I'm calling "accidentally" is unforced hinge-movement, i.e. the wiggle room available within a locked position. Even when the hinge is locked, if you e.g. hold the 3DS above your head, gravity will cause some slight hinge movement without taking you out of the locked position. A dead zone of 25 seems to be sufficient to prevent interference.

I can still "force" the issue by manually adjusting the hinge beyond what gravity alone can do, but notably the issue stops again when I reach the next hinge "snap" position. Perhaps there's some software/hardware trickery going on where the console knows to correct the C-stick inputs relative to the magnetic interference from the three "locked" positions, but no specific handling for when you're in-between locked positions?

i.e. I don't think the 3DS is strictly aware of the hinge position in an electronic sense, but it may be able to tell "C-stick inputs are being skewed by an amount roughly equivalent to the known interference from the hinge being in this position, so correct them by that amount."

I'm sorry that this issue got a lot more complicated than it originally seemed.

EDIT2: Video of the behavior:

VID_20240320_231722.mp4

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant