Speaking of retarded, center point != dead zone. Make sure you're using your basic terminology properly before you go calling people retarded.Why do you feel the need to validate yourself AS a retard?.
Its not the control, these games expect a deadzone of 127 and instead see 128 which throws the directions off.
A dead zone is how far you have to move AWAY from center before the controller is recognized as having moved. A dead zone of 127 or 128 would be painfully awful, as you'd have to move the stick very, very far from center before the game ever realized you touched it.
A center point is... well, the point at which the stick is centered.
And yes, the games WILL start acting flaky as the sticks wear, if they really require EXACT centering behavior to function.
You can't see that a stick with worn springs that doesn't return exactly to center might POSSIBLY return to 128,128 instead of 127,127; 126,125; 125,129; or some other equally loose definition of centered(those are co-ordinate pairs. BOTH axes return a value from 0/1-254/255)?
As I said, it not only can happen, but I have personal experience of mis-centering on a worn gamepad. On an actual PS1 system. No exciting bugs were caused, just Solid Snake deciding he NEEDED to creep very slowly to the right if I took my thumb off the stick because my stick wasn't capable of staying perfectly centered and tilted to the right.
Or do you think these numbers are magically divined by the system and don't originate inside the controller, based on the physical location of the thumbstick at the instant of polling, as represented by the resistance value of a pair of potentiometers connected to the lever?
YES, the controller is relevant. 128,128 is a valid coordinate combination, and any game that views access to this point on the stick as a reason to blow up has fundamental issues and will almost certainly explode during routine gameplay.
Oh, that's certainly an odd bug. Offhand, I'd guess there's an overflow or divide-by-zero error in there somewhere once the control hits it's maximum.No where did you explain why only Up and Left work while down and right don't either, stop trying to look smart because you really aren't.
Assuming your description of the issue is completely accurate, if the game expects a max value of 254 and receives a 255 reported, some assumptions about the math are suddenly wrong, and things can get exciting. I'm not downloading FF8 to experiment with the menu and see what EXACTLY happens under various circumstances, sorry to disappoint.
I've seen other games on other systems with analog joysticks blow up when they received input outside the expected range, though. Interestingly, a few on the Atari 5200 would generate effects very similar to the FF8 bug as defined. With the exception of they'd work fine until they saw 0, and after that they'd never work right until they were reset.
Your links only support the center point being off by 1,1. But that shouldn't cause such cataclysmic results since this can be replicated by pulling the stick VERY SLIGHTLY off-center, which is highly likely to occur at some point during actual gameplay... Unless the game's menu code is waiting for a return to center for some sort of initialization, in which case wiggling the stick very slightly and precisely off-center should cause the game to straighten up and fly right, at least temporarily. It'd be an interesting edge case if it was the cause.
I never said there wasn't an issue. There clearly is.The issue has already been verified in the source code of other PSemu based plugins.
I've questioned your full and complete definition of the issue, and consider any game that explodes if it sees an imperfectly centered controller to be poorly programmed.
Everything I've ready says the DualShock sends the full 0-255 range.
And it would be highly insane for the console to throw the least-significant bit away after reading it in.
Which means 1-255 or 0-254 is down to physical constraints, and it's EASILY possible for a worn controller to report the full 0-255 range(as well as center to values other than 127,127).
If you don't get the significance of 0-255... it's the maximum range that can be represented by one byte. The DualShock gamepad reads and reports axis data in 1-byte resolution.
7-bit resolution would be 0-127 across the entire axis, making the center point either 63 or 64, depending on how you slice it.
Discarding the least-significant bit gets you a range of 0-254. It also means you can't see any odd value. Not 1, 255, not 3, not 63, not 127, NO odd number, because you have discarded your 1s digit.
You have your 2s, 4s, 8s, 16s, 32s, 64s, and 128s(crash course in binary counting!). But no 1s.
You've halved your resolution AND made the gamepad more difficult to read. But you have a 0-254 range... that's mathematically incompatible with a center point of 127.
As you can guess, I'm INCREDIBLY skeptical that the PS1 discards the least-significant bit. It is perhaps the most insane thing they could do.
It also doesn't fit your description of the issue OR linked sources(I actually give credibility to technical details linked by you, I just doubt your interpretation of them as you've demonstrated several times before that you don't understand what you're reading).
And as I said, 128,128 is a valid co-ordinate under any definition of the DualShock gamepad.
Also note, the code you pasted explicitly contradicts your version of the bug, as it explicitly considers 255, not 254, to be the max range of the axis
Code: Select all
int value = (((int*)&global.JoyState[pad].lX)[pos] + 0x7F);
if (value >= 0xC0) value++;
if (value < 0) value = 0;
// Don't think this happens, but just in case...
if (value > 0xFF) value = 0xFF;
return (u8)value;