-
Notifications
You must be signed in to change notification settings - Fork 323
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* make a proper protobuf enum for DDI combination mode * remove unused DDI variables from removed debouncer * do some tab vs. space cleanups for readability * remove support for Gamepad and Dual Directional DDI combination modes Gamepad is buggy, and both modes don't seem to have use cases. we are soft deprecating these for the moment, only making them work like Mixed, rather than actually migrating them to a new mode, for now * move first/last wins SOCD cleaning out of DDI preprocess I think this is just a vestige of how things used to work, it makes no discernable difference in my testing. in order to start showing my work, I also added a simple piece of documentation to describe how the modes work * simplify the DDI process block; documented behavior remains * reimplement DDI override mode this replaces the gamepad output with the DDI output (no combination or re-cleaning), which is interesting for situations like gamepad holding one axis and DDI pressing the other, letting you essentially toggle between the two axis with a press/release Fixes #823 * break out Neutral and Up Prio results for the DDI override docs * dual mode is supported again, name it properly in protobuf * reimplement Gamepad Override DDI mode since DDI Override was pretty easy to bring back with the new code, we might as well just bring Gamepad Override back since it's the same logic, just flipped. added more docs while I was at it. * tiny tabs/spaces fix * revert the default to Mixed like it used to be
- Loading branch information
Showing
8 changed files
with
170 additions
and
102 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
# Dual Directional Input + SOCD Modes | ||
|
||
Documenting results for future reference. Below examples are holding the buttons sequentially, unless otherwise noted by | ||
"xx", which means the button is released. | ||
|
||
## Basic SOCD Example | ||
|
||
I only documented Left/Right tests here, because Up/Down either follows the same behavior (Neutral/First/Last) on the | ||
other axis, or it has its own far more explicit Up priority that isn't worth distinguishing in this doc. | ||
|
||
| # | Input | Up Priority/Neutral | First Input Wins | Last Input Wins | | ||
| - | --------------- | ------------------- | ---------------- | --------------- | | ||
| 1 | Core Left | Left | Left | Left | | ||
| 2 | Core Right | Neutral | Left | Right | | ||
| 3 | xx Core Left | Right | Right | Right | | ||
| 4 | Core Left | Neutral | Right | Left | | ||
| 5 | xx Core Right | Left | Left | Left | | ||
|
||
## Combination Mode Mixed | ||
|
||
All Combination Mode Mixed examples apply equally to Combination Mode None when the DDI output is the same LS/DP/RS | ||
option as the core gamepad's. | ||
|
||
I only documented Left/Right tests here, because Up/Down either follows the same behavior (Neutral/First/Last) on the | ||
other axis, or it has its own far more explicit Up priority that isn't worth distinguishing in this doc. | ||
|
||
This mode seems to be useful for having two sets of inputs contribute to any one of LS/DP/RS at the same time, but is | ||
distinguished from two sets of core gamepad mappings by the fact that this allows for two layers of SOCD cleaning to be | ||
applied, essentially `SOCD( SOCD(gamepad) | SOCD(DDI) )` which can allow for some interesting inputs. | ||
|
||
| # | Input | Up Priority/Neutral | First Input Wins | Last Input Wins | | ||
| - | --------------- | ------------------- | ---------------- | --------------- | | ||
| 1 | Core Left | Left | Left | Left | | ||
| 2 | DDI Right | Neutral | Left | Right | | ||
| 3 | DDI Left | Left | Left | Left | | ||
| 4 | xx DDI Left | Neutral | Left | Right | | ||
| 5 | Core Right | Right | Left | Right | | ||
| 6 | DDI Left | Neutral | Left | Left | | ||
|
||
| # | Input | Up Priority/Neutral | First Input Wins | Last Input Wins | | ||
| - | --------------- | ------------------- | ---------------- | --------------- | | ||
| 1 | Core Left | Left | Left | Left | | ||
| 2 | Core Right | Neutral | Left | Right | | ||
| 3 | DDI Left | Left | Left | Left | | ||
| 4 | xx DDI Left | Neutral | Left | Right | | ||
| 5 | DDI Left | Left | Left | Left | | ||
| 6 | DDI Right | Neutral | Left | Right | | ||
|
||
| # | Input | Up Priority/Neutral | First Input Wins | Last Input Wins | | ||
| - | --------------- | ------------------- | ---------------- | --------------- | | ||
| 1 | Core Right | Right | Right | Right | | ||
| 2 | Core Left | Neutral | Right | Left | | ||
| 3 | DDI Right | Right | Right | Right | | ||
| 4 | xx DDI Right | Neutral | Right | Left | | ||
| 5 | DDI Right | Right | Right | Right | | ||
| 6 | DDI Left | Neutral | Right | Left | | ||
|
||
| # | Input | Up Priority/Neutral | First Input Wins | Last Input Wins | | ||
| - | --------------- | ------------------- | ---------------- | --------------- | | ||
| 1 | DDI Left | Left | Left | Left | | ||
| 2 | DDI Right | Neutral | Left | Right | | ||
| 3 | Core Left | Left | Left | Left | | ||
| 4 | xx Core Left | Neutral | Left | Right | | ||
| 5 | Core Left | Left | Left | Left | | ||
| 6 | Core Right | Neutral | Left | Right | | ||
|
||
## Combination Mode Gamepad Override | ||
|
||
This ignores the DDI output when the core gamepad has any output. SOCD history is maintained. Cross-axis | ||
behavior is interesting here, allowing some down-to-left/right tricks. | ||
|
||
This makes Tekken Shadow Step easy, apparently. | ||
|
||
| # | Input | Neutral | Up Prio | First Input Wins | Last Input Wins | | ||
| - | --------------- | --------- | --------- | ---------------- | --------------- | | ||
| 1 | DDI Down | Down | Down | Down | Down | | ||
| 2 | Core Left | Left | Left | Left | Left | | ||
| 3 | Core Down | Down Left | Down Left | Down Left | Down Left | | ||
| 4 | xx DDI Down | Down Left | Down Left | Down Left | Down Left | | ||
| 5 | xx Core Down | Left | Left | Left | Left | | ||
| 6 | xx Core Left | Neutral | Neutral | Neutral | Neutral | | ||
| 7 | DDI Down | Down | Down | Down | Down | | ||
| 8 | DDI Left | Down Left | Down Left | Down Left | Down Left | | ||
| 9 | Core Up | Up | Up | Up | Up | | ||
|
||
| # | Input | Neutral | Up Prio | First Input Wins | Last Input Wins | | ||
| - | --------------- | ------- | --------- | ---------------- | --------------- | | ||
| 1 | Core Left | Left | Left | Left | Left | | ||
| 2 | DDI Down | Left | Left | Left | Left | | ||
| 3 | DDI Up | Left | Left | Left | Left | | ||
| 4 | xx DDI Up | Left | Left | Left | Left | | ||
| 5 | xx DDI Down | Left | Left | Left | Left | | ||
| 6 | Core Right | Neutral | Neutral | Left | Right | | ||
|
||
| # | Input | Neutral | Up Prio | First Input Wins | Last Input Wins | | ||
| - | --------------- | ------- | --------- | ---------------- | --------------- | | ||
| 1 | DDI Left | Left | Left | Left | Left | | ||
| 2 | DDI Right | Neutral | Neutral | Left | Right | | ||
| 3 | Core Down | Down | Down | Down | Down | | ||
| 4 | Core Up | Neutral | Up | Down | Up | | ||
| 5 | xx Core Up | Down | Down | Down | Down | | ||
| 6 | xx Core Down | Neutral | Neutral | Left | Right | | ||
| 7 | xx DDI Right | Left | Left | Left | Left | | ||
|
||
## Combination Mode DDI Override | ||
|
||
This replaces whatever the gamepad has for output with a non-zero DDI output. SOCD history is maintained. Cross-axis | ||
behavior is interesting here, allowing some down-to-left/right tricks. (It's the same idea as Gamepad Override, just | ||
swapping which method overrides which.) | ||
|
||
| # | Input | Neutral | Up Prio | First Input Wins | Last Input Wins | | ||
| - | --------------- | ------- | --------- | ---------------- | --------------- | | ||
| 1 | Core Left | Left | Left | Left | Left | | ||
| 2 | Core Right | Neutral | Neutral | Left | Right | | ||
| 3 | DDI Down | Down | Down | Down | Down | | ||
| 4 | DDI Up | Neutral | Up | Down | Up | | ||
| 5 | xx DDI Up | Down | Down | Down | Down | | ||
| 6 | xx DDI Down | Neutral | Neutral | Left | Right | | ||
| 7 | xx Core Right | Left | Left | Left | Left | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.