in theory we can hook when the game opens the controls UI and show a different UI instead, using a web menu. From there we could figure out the logic and work required to:
[x] make a UI that allows a user to select various options
[x] store those options in extra space within InputKind fields in control settings/save data
[x] make new pad flags using space stolen from stick position mapping, which will work over wifi
control options desired:
[x] dedicated smash button
[x] dedicated short hop button (use ctrl pad jump mini)
[ ] footstool button (requires new pad flag - 1 bit)
[ ] "strong attack"/"smash attacks when pressing Attack?" (requires mapping the setting in pad flag space - 1 bit)
[ ] stick sensitivity and deadzones for sticks
[ ] analog stick thresholds
[ ] mapping the inner button on gcc
[ ] "should your short hop button only footstool in the air?"
[ ] fullhop button (requires new pad flag - 1 bit)
[ ] "do you want a sh macro?" (requires mapping the setting in pad flag space - 1 bit)
total necessary pad flag bits: 4 bits
currently, transmitted data is:
X - x stick position
Y - y stick position
0 - dont care/cant use
A - button space
XXXXXXXX YYYYYYYY 000000000000000000000000000000 AAAAAAAAAAAAAAAAAA
instead we could:
X - x stick position
Y - y stick position
0 - dont care/cant use
A - button space
B - new button space to mask into
XXXXXX YYYYYY BBBB 000000000000000000000000000000 AAAAAAAAAAAAAAAAAA
we can pack any new pad flags into the existing bits that translate stick position:
16 bits is currently used to store stick, but we can use 12 to create a 64x64 control grid, and use the remaining 4 for the above settings.
[ ] footstool pad flag
[ ] "strong attack"/"smash attacks when pressing Attack?" setting
Also:
since the game sends pad flag data even during match startup, theoretically we could instead pack the pad flag data with 16 + 18 bits worth of settings data, if necessary during that time.
in theory we can hook when the game opens the controls UI and show a different UI instead, using a web menu. From there we could figure out the logic and work required to:
control options desired:
currently, transmitted data is: X - x stick position Y - y stick position 0 - dont care/cant use A - button space
XXXXXXXX YYYYYYYY 000000000000000000000000000000 AAAAAAAAAAAAAAAAAA
instead we could: X - x stick position Y - y stick position 0 - dont care/cant use A - button space B - new button space to mask into
XXXXXX YYYYYY BBBB 000000000000000000000000000000 AAAAAAAAAAAAAAAAAA
we can pack any new pad flags into the existing bits that translate stick position: 16 bits is currently used to store stick, but we can use 12 to create a 64x64 control grid, and use the remaining 4 for the above settings.
as far as reading, writing, and storing controller settings: since
InputKind
only technically uses the first 4 bits of its 8 bit size, we could use the back half of each of these InputKind fields to store additional data, in theory: https://github.com/HDR-Development/HewDraw-Remix/blob/dev/dynamic/src/ext.rs#L662-L722Also: since the game sends pad flag data even during match startup, theoretically we could instead pack the pad flag data with 16 + 18 bits worth of settings data, if necessary during that time.