Zelda 3 Randomizer Template ASM
Support for OAuth 2 and OpenId Connect (OIDC) in Angular.
ALttP VT Randomizer and API
Originally written by Alcaro. Asar is a SNES assembler, intended as a replacement for xkas v0.06
(Now) official repository of the SNES assembler Asar, originally created by Alcaro
A convention-based object-object mapper in .NET.
debug-oriented fork of bsnes v073
Yeah on PC many gamepads have both horizontal and vertical deadzones, in addition to the center deadzone. Unlike the center deadzone, these deadzones deactivate if you move out of them, and only reactivate when you return to center. This while making it easier to hit the four cardinal directions perfectly, but also allows you to rotate the stick without having the jerky response that they would have if the deadzones were always active. The actual implementation of this can be arbitrarilly complex, but the idea still stands.
The player movement is off by perhaps 3 to 6 degrees which is often inside of those deadzones, making it hard to subconsciously counteract this this as you must overshoot to deactivate the deadzone and then return to the correct angle. On the original 3ds it just feels like you must have pushed the pad a bit to the side and automatically subconsciously adjust.
I've still no idea what causes this. My new best guess is that they might have limited links movement to a finite number of directions, perhaps 64 or 128, and they wrote code to try to map the pad's position to the nearest such direction, and managed to have an off-by-one error in that code. I don't actually feel like trying to test if this theory is correct.
Whatever the cause, on real hardware it is very hard to tell this is happening unless you specifically look for it, so this error could easily have slipped though quality control testing. And honestly it is pretty harmless on the physical console, but obnoxious on an emulator.
comment created time in a month
Unfortunately, I can reproduce this on real hardware with A Link Between Worlds. On real hardware, I drift left going up, unless I push slightly right, and drift right going down unless I push slightly left. I've repeated this with multiple holding techniques, starting with different neutral positions, etc. same result. I also tried looking at the position of the pad relative to the circle, and it confirmed that somewhat right needed to be held on the pad to walk straight up.
I also tested it with Luma's input redirection feature, along with my PC joystick that has non-negligible deadzones along each axis, and an input viewer. (So I could tell if I was still in the horizontal dead zone.) With that I could tell if the stick was reading straight up. Even with knowing I am making perfect up inputs, on real hardware Link was drifting left, (or drifting right with perfect down inputs).
My conclusion is that even on real hardware the game character drifts left when moving up, and right when moving down. It is not a big deal on real hardware though, as the 3ds has only a center deadzone, so adjusting slightly to move straight up is pretty easy. However as mentioned many PC controllers also have horizontal and vertical dead zones to make it easy to push straight up/down or straight left/right. With these, walking straight is much more challenging, since those dead zones make it harder to slightly rotate your inputs to the stick. And of course if you have buttons mapped to the pad there is no good way to rotate that input just slightly.
I conclude that this is a quirk of the game not an emulation bug.
It might be a game bug, but I'm having trouble seeing how a slight rotation of the stick could be anything other than intentional. But I'm clueless as to why that would be intentional. Perhaps the devkit used to develop the game had the circle pad installed slightly crooked, and a developer noticed, assumed it was true of all systems, and added correction code to rotate the inputs?
To fix this one would need to either patch the game code to not do whater weird thing it is doing, or potentially Citra could add a feature to rotate the stick values before presenting them to the game, to allow counteracting this.
comment created time in a month