TASEmulators / BizHawk

BizHawk is a multi-system emulator written in C#. BizHawk provides nice features for casual gamers such as full screen, and joypad support in addition to full rerecording and debugging tools for all system cores.
http://tasvideos.org/BizHawk.html
Other
2.21k stars 385 forks source link

Enhancement: NEW SOCD option suggestion. #4048

Open zaphod77 opened 2 months ago

zaphod77 commented 2 months ago

It seems that all three current choices for SOCD resolution allow tricks that are stupidly difficult on a controller that doesn't allow SOCD.

None allows glitches in games that don't properly handle SOCD. Priority allows frame perfect reversals easily, which is often used to keep dash momentum when reversing. forbid has it's own tricks, which i will list some of. 1) easy taps. press forward, tap back. voila! instant dash. 2) silly fast shoryukens. 3) a bajillion other SOCD shortcuts that the hitbox website advertises.

I propose a SOCD resolution method that combines priority and forbid at the same time. If you press opposite directions, it goes to neutral, but the one that was pressed first is disabled until it's released, just like with priority. This removes all the stupid SOCD cleaner tricks when not using a controller that does it in hardware. :)

YoshiRulz commented 2 months ago

(SOCD = simultaneous opposing cardinal directions a.k.a. U+D/L+R a.k.a. OpposingDirPolicy)

See https://github.com/TASEmulators/BizHawk/issues/2752#issuecomment-852409945 for some background. Currently, the "Priority" option will give priority to the most recently pressed direction in the case of a conflict.

Your proposed option sounds a lot like the existing "Forbid" option; how exactly is it different?

zaphod77 commented 2 months ago

it would force you to release the first direction before you could engage it again.

basically it stops 99% of the silly fighting game move tricks that work under forbid, while also stopping the tricks that work under priority that don't under forbid.

dashes will actually require pressing the same direction twice, and single frame reversals will have to be done withe frame perfect timing, like in normal "Forbid"

Note that a controller that actually used normal forbid in hardware will re-enable them. which is why i want to see leverless controllers that use tis method in hardware, because it's the best combination of usability and fairness with respect to stick.

None of this matters for TASing, but this emulator is also used for speedruns, and there it can definitely matter.

YoshiRulz commented 2 months ago

So after Left keydown, Right keydown, Left keyup there would be no keys held? That is distinct from the 5 listed in the other issue, but I think it remains that players won't ever need that behaviour. Your specific use case of applying axis semantics to buttons could be served by a Lua script. I presume you're in a moderation position for some RTA leaderboard—do you not decide the rules? Put the thing you want people to do (or not do) in the rules.

zaphod77 commented 2 months ago

no, that's just stupid and frustrating. :)

press right press left. goes to neutral release left. STAYS NEUTRAL. need to press right again to get the double tap.

if you press left, press right (neutral) release left, it will register right. just like Forbid. So execution of reversing directions is still easy, but doing it in one frame isn't.

nothing actually does this. either in hardware or in software.

i'm not such a person, but i think if this option existed, many would want to force it.

hardware socd filtering trumps it, but this particular handler will never cause the wrong thing to happen ever, while still allowing convenient execution. accidental socd doesn'a cause any real trouble, while intentional socd is more difficult to take advantage of.

YoshiRulz commented 2 months ago

When processing a keyup event with the previous state being with both Left and Right held, I'm not sure whether we can distinguish which was pressed first. But then the SOCD handler is a separate layer which is stateful, so maybe it could synthesise the keyup for the other direction at that time..?

nothing actually does this. either in hardware or in software. i'm not such a person, but i think if this option existed, many would want to force it.

What? Please explain your use case, in its entirety, without tangents.

zaphod77 commented 2 months ago

well here's an example use case.

In Synphony of the night. if you use priority, you can change directions with maria instantly and keep your run speed. this saves time in some places. this is easier than a pad

Using Forbid, it's considerably more difficult to do this move.

but forbid allows you to start a dash damn near instantly with press forward tap back, which doesn't work with priority.

i admit the logic is probably a bit tricky.

Morilli commented 2 months ago

I don't think we need to have this. What you're describing is already possible on a real controller, albeit much more annoying to actually execute: Press right on the d-pad, then press the left button with another finger which will naturally raise right up as well, then release the left button.

Of course doing this on an actual controller would be impractical and not be as easy to execute because of the differences in physical key response, but that's just the natural result of using a keyboard instead of specialised hardware. You cannot imitate the exact feel and possibilities of a physical d-pad using keyboard keys, and I don't think we should try harder than we currently do.

zaphod77 commented 2 weeks ago

The point isn't to replicate the feel. the point is to remove advantages from keyboard players so people who play on pad or stick can't whine when someone beats their time with a keyboard doing something that has higher execution requirements on the console's native input method.

on a pad or stick you have to double tap by, well double tapping. but on a keyboard you can use forbid to doubletap FASTER then you can double tap on a stick or pad, and save a few frames when playing in realtime. Which will add up My proposal would prevent that.

But if you turn on priority to stop that trick (and even use the strict variant which wouldn't re-engage the first direction) then you allow reversing directions while keeping run speed in any game that only cancels run on neutral.