libretro / mame2003-plus-libretro

Updated 2018 version of MAME (0.78) for libretro. with added game support plus many fixes and improvements
Other
191 stars 109 forks source link

4-way-restriction #380

Closed robertvb83 closed 6 years ago

robertvb83 commented 6 years ago

There is a software based attempt to change the behaviour of 8way joysticks @ 4-way games in xboxdrv https://github.com/RetroPie/RetroPie-Setup/wiki/Universal-Controller-Calibration-&-Mapping-Using-xboxdrv

Could something like this be included in mame2003-plus for all the 4-way games as an option?

There has been attempts in mame as discussed in retropie forum https://retropie.org.uk/forum/topic/11931/using-xboxdrv-for-4-way-restrictor-on-complete-rertropie-setup-already-using-dragonrise-usb-controller-setup/20

See especially last few posts

Wilstorm commented 6 years ago

@robertvb83 - Thanks for the links! That's exactly what I was looking into today using Mediamogul's guide. I think this would be the cat's meow for Plus. I have the first part complete but looking at Spud's script I am not sure. I'll have to spend some time trying to figure out what I would need to do as I am really new to attempting 4/8-way game restriction with a controller.

That would be neat to only need $3 variable and simplify the whole process.

robertvb83 commented 6 years ago

Does anybody know how the algorithm in xboxdrv works? Mame approach was like this: if joystick moves from up --> up/right then output is right. So on movement the unchanged direction is ignored.

To be fair this IS a prediction and there is a chance of false movement. Also if changing from up --> down/right it is hard to deal with the diagonal input. As it is not clear what the intendet move was, however i would make the algorithm go down in that case. Because it feels mote likely, why would i move so far if i just like to go right.

There have also been speeches against this implementation and i do not know what was the conclusion for mame finally or what it is like in current mame. I think as long as its optional, this is a clear benefit. I have trouble playing games like pacman with my 8-way-joystick and would love to try the feeling of a software assisted 4-way predictor. Bomberman can be really horrible because the fucker simply wont move on any diagonal inputs

ghost commented 6 years ago

Without knowing what is happening in the game, and analyzing it, or having more information available from the stick itself (i.e. more than 4 pieces of information),

There is no way to make a determination of what is the "probable intended" direction with an accuracy level higher than a "coin toss" it will be a per game bases. As this is pretty much the accuracy one gets by default, the actual net gain is zero. Use the correct restrictor jobs done or get a nes pad its incapable of doing diagonal directions

robertvb83 commented 6 years ago

@grant2258 how come that there are software based solutions with people getting a satisfying result as can be read in the above linked retropie thread? I think you did not get into the issue at all with the links provided or do you somehow have alot more info about this and proved any software attempt wrong somehow?

Physical restrictors are not an option for alot of people! Dealing with the diagonal input for 4way games in general seems totally logic to me because these inputs just do not exist for a single 4way game. With the info if 4way or not and the info that you have 8way joystick what else do you as ingame info. 4way games only need 4 outputs so exchanging the other 4 outputs with one of the possible again seems absolutely reasonable still

ghost commented 6 years ago

Well its not a lot more info at all. There is no physical difference in the number of switches 8way and 4 way all use 4 switches. 4 way just stops you you pressing more than one at a time.

technically what happens is in a 4 way joystick if you move from up to left or right your joystick centers for a vey short period of time then the other button clicks.

Problem is when you you dont have that physical barrier its impossible to get the directions 100% right because you have to guess where the dead zone is and what direction you want to go if you have a double button situation (up and right in some cases it will up in others it will be right it depends on the particular games mechanics). You wont notice this in games like pacman.

Try king fu master on mame. try do a directional jump on a 8 way joystick it is possible if you center the joystick before changing direction UP.

The game mechanics play a role here as well in the arcade itself if your moving in a direction for x amount of time and the direction goes off and up in a fixed amount of time it will do a directional jump.

say your walking right 2 seconds (joystick direction)

if (right released and up pressed within time range jump diagonal)

physical movement in a 4 way will be

joystick is pressed right when moving to up ( all buttons off when moving to up) then up is activated.

if you miss this centering actions all buttons off the mechanics wont work properly

This is true of most 4 way games if you get into the habit of centering before direction change it seems to go well but does not feel natural this way. I think this system is more doable in analog form you can tell where you joystick is from the center point.

I dont see it being doable in 4 buttons without restrictors unless you set it up per game simple up down left right games yes itll work....... any mechanics in there you need to match your logic up to the games. Hope that explains it to you.

https://www.youtube.com/watch?v=Il24F1_TBao

look at the video at 1:08 to 1:12 to see the diagonal jump at work

markwkidd commented 6 years ago

Disclaimer: I'm just going to think about loud here and I have no idea how these existing software-based 8-way to 4-way control schemes work.

I can imagine a combination of using weighted directional averages plus the libretro runahead feature that might be better than existing options but I am not saying I want to take this on or anything! Runahead is basically magic to me at this point.

In this hypothetical "Software 4-Way Mode" mame2003 would keep track of the joystick direction for the previous X frames of gameplay in order to calculate a "weighted average direction". If the weighted direction is Left and the current joystick direction shifts upward, the core would compare the current direction with the weighted direction and decide whether to change the input to Up by trying to guess whether the user is deliberately moving their joystick that way.

Runahead would come in for the cases where the guess was incorrect. In those scenarios the core would switch over to a parallel runahead instance where instead of Up, the core kept registering Left.

Again this is pure speculation. Just thinking about it!

ghost commented 6 years ago

Well again I don't think this would solve the problem. It's just on off time In the switches. Think about up down left right. That's a simple on or off.

Now if you where making a game with a 4 way how would you do a diagonal jump and also a straight up jump?

This is what I would do.

Check direction has been moving at least 1.5 seconds if it has check the joystick centerd (direction changed) and if up was pressed within 6 tenths of a second (guessing time here) do a diagonal. If it more than 6 tenths jump up straight vet. This is basically using the physical restrictor. The only slightly sane solution it to regard any 2 buttons presses as off and when the button comes back to one switch set that direction. The problem is getting the timing right for every game in the software

Wilstorm commented 6 years ago

I know it's just a script but here's what they have been doing with Libretro using runcommand-start (runcommand-exit for cleanup; these run before and after a game starts each time. My target was for controllers--with a physical stick I use a simple restrictor plate that twists with power but a Cade joysticks too would be great). The magic is from the Xboxdrv driver and a single command --four-way-restrictor turns 4-way only on and I guess it works well. Mediamogul on the forums is the master behind all of it and is very helpful and friendly. Below is a simpler example with just a few games to separate out 4-way from the rest. I think you could do it with a single command --four-way-restrictor in runcommand-start but then all games would be that way so whatever is in the driver option is the magic. I know that driver works for a lot controllers and it's approaching from a Libretro point of view but I thought Robert dug some old MAME code from a milennia ago in old versions where they attempted it but abandoned it eventually due to not being pure to the MAME prime directive. Sorry for the crappy formatting I can't find squat for the "back tilde" on a tablet.

ROMNAME="${3##*/}"
if [ "$ROMNAME" = "pacman.zip" ] || [ "$ROMNAME" = "mspacman.zip" ] || [ "$ROMNAME" = "jrpacman.zip" ] && [ "$2" = "advmame" ]; then
  sudo /opt/retropie/supplementary/xboxdrv/bin/xboxdrv \
    --evdev /dev/input/by-path/platform-3f980000.usb-usb-0:1.2.1:1.0-event-joystick \
    --detach-kernel-driver \
    --force-feedback \
    --trigger-as-button \
    --deadzone-trigger 15% \
    --deadzone 4000 \
    --device-name "Logitech Rumblepad 2 (xboxdrv)" \
    --silent \
    --axis-sensitivity X1=-0.00,Y1=-0.00,X2=-0.00,Y2=-0.00 \
    --four-way-restrictor \
    --modifier dpad-restrictor=fourway \
    --axismap -Y1=Y1,-Y2=Y2 \
    --evdev-absmap ABS_X=x1,ABS_Y=y1,ABS_Z=x2,ABS_RZ=y2,ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y \
    --evdev-keymap BTN_THUMB2=a,BTN_THUMB=b,BTN_TOP=x,BTN_TRIGGER=y,BTN_BASE3=back,BTN_BASE4=start,BTN_TOP2=lb,BTN_PINKIE=rb,BTN_BASE5=tl,BTN_BASE6=tr,BTN_BASE=lt,BTN_BASE2=rt \
    --ui-buttonmap guide=void \
fi &
ghost commented 6 years ago

A lot of 4way games are just up down left and right so it should be fine for them. It's the other games like kung fu master that would cause problems. Luckily my sanwa has an adjustable 4/8 way restrictor.

robertvb83 commented 6 years ago

@grant2258 this is exactly what i am talking about. Of course there are special games but lets stick to up down left right games for this discussion. To be honest i never consisered anything else. I am happy for you and your adjustable joystick.

For me it is clear that NO software can do what a 4way restrictor does... period. But it might be possible to make these games less annoying and frustrating by help of a software based solution thats all.

Plus it appears to me there is already a solution available as part of the xboxdrv driver that seems to be satisfying to some people in comparison to a standard 8way control. Unfortunately i have no insight in the code or algorithm that is used there and my hope was that one of you guys maybe could help finding that out. To be honest i do not know how hard that would be to implement into mame. As per the links i provided things that have been discussed a decade ago seemed quite easy to do

ghost commented 6 years ago

I really dont want to touch on this too much input is marks department. Im pretty sure we are skipping most of the mame build in stuff tbh the code changes would need to be done here. https://github.com/libretro/mame2003-plus-libretro/blob/efe5de504dd41a3ef7c0a0303e097789e5821e13/src/inptport.c#L2132

Some part of the inputs system are hacked in like the analog maps ect you would need to ask @markwkidd and @arcadez if they would be ok with this or not and take it from there. Last time we touched the input system the thread was closed down. Mame2003 is no longer my main use for my barcade now but i see no reason not to improve it depending on what the maintainers want

Wilstorm commented 6 years ago

I would second my only focus really is 4-way games, 8-way are fine as is minus the one-offs specialties. Games like Donkey Kong, Pac-man, Burger Time, Frogger, Dig Dug, Mr. Do, 1943, on and on so many would be a huge benefit to play. On a controller you can't get really serious but more novelty play because you always get hung on ladders etc. If it's not a crazy amount of coding this is such a great core to attempt. The xboxdrv is incredibly flexible but the setup does take a fair amount of work but you can simulate a mouse with scummvm or keyboard keys hence all the extra lines in that script but people seem very pleased once it's setup. To lock-down even 4-way would be a huge leap for the core I think.

ghost commented 6 years ago

i added some code in a pull request feel free to test my @Wilstorm and @robertvb83 please not xbox360 controllers digital hats are notorious for false diagonals that cause emulation station lists to scroll. This code is mainly aimed at joysticks if it works like it should we can add it as an option if its wanted by anyone

Wilstorm commented 6 years ago

Do we just update from source as usual to test? Also it needs tested on an arcade stick and not a controller correct?

ghost commented 6 years ago

you would need to grab the pull req intructions here

https://github.com/TeamPorcupine/ProjectPorcupine/wiki/How-to-Test-a-Pull-Request

the only other way is to temporally change the the branch to my repo in the setup script and grab it from my github

ghost commented 6 years ago

i looked up the xboxdrv it looks like this 4 way restrictor is aimed at analog joysticks. I said above it would be easier on an analog. This solution wont work well on digital hats(dpad and 8 way joysticks) but will work well as an analog solution.

https://github.com/xboxdrv/xboxdrv/blob/stable/src/modifier/four_way_restrictor_modifier.cpp

I dont see any other way apart from ignoring diagonals have you tested this on a none analog joystick @Wilstorm

ghost commented 6 years ago

from the way I see it we will need two conditions

one for digital hats (digital pads on controllers and real 8 way joysticks) . This basically accepts input only when one switch is pressed if you you are in nomans land (diagonal nothing will happen).

the mode above is no good for analog the best solution is to get the x and y axis and set the direction to up down left or right depending where the joystick is pointing to at the most. Analog is a lot easier you just check which axis is closest to a direction and pick that. However analog joysticks are not implemented properly in this core ie you cant map them but they will work mapped hardwired like they are

robertvb83 commented 6 years ago

I think there is another completely different (preferred) approach for 8way joysticks instead of making diagonals deadzone like centered. "Delete/ignore the unchanged direction on moving to diagonal"

Imagine pacman if walking up and in a hussle turn right but getting in up/right then you would be stuck and will die.

Instead if moving from UP to UP/RIGHT diagonal delete the unchanged which is UP. So in this case the diagonal instantly becomes right as the most probable intended move. (Why else would i turn joystick to up/right but meaning right?)

If moving from RIGHT to UP/RIGHT delete the unchanged which is RIGHT in this case leading to instant UP movement for the same diagonal as above

ghost commented 6 years ago

this id what we are doing

on first check

if this does not resolve the condition we still have a diagonal center the joystick (no input your asking for an impossible 4 way position)

now remember this input reads very fast from you moving the joystick from up to right i will be less than a second much less. what will happen with the code change is you movement will be ignored in the until the joystick reaches right in its travel

(this is what a 4 way restictor would do if you sat in nomans land with up and right no buttons pressed the movement would not happen). This should suit 8 way joysticks very well because you are forgetting one thing pacman still moves when you centered the direction you where going.

This code might not suit something like a xbox360 dpad which sometimes pressed diagonals when you just press down its very sensitive. 8 way joysticks however are not so sensitive try the code and see how it goes if it doesnt work out let me know. I am assuming your talking about real joysticks here

Wilstorm commented 6 years ago

@grant2258 - Well shoot, I was excited about the prospects there for a while, this sounds a lot more complicated than I hope or understand how to implement even. I'll just stick with the xboxdrv way for now but I do appreciate you taking a look into it at least.

ghost commented 6 years ago

Well if you guys dont want to test can be revisited sometime no point if there is no testers

robertvb83 commented 6 years ago

@grant2258 i'd love to test this. You are just too damn fast :-) Unfortunately i have almost no time right now. And i have no idea how to test a pull request, meaning that it takes lots of time until i discover that and be able to test.

Do you think we can pull that request into the main branch just for ease of testing via retropie update? This way i could give you feedback very soon and then it could be unpulled again and set to WIP again... What do you think?

ghost commented 6 years ago

ill need to do some testing myself just have some stuff going on at the moment there is no rush for this just test when you have time. If getting the pull request is where your struggling ill try sort something out. I dont mind attempting to improve this if its wanted and just for the record pacman plays just fine as is for a 8way joystick. I didnt find any problems with it cn you give me a game thats giving you problems so i can look into that particular game. The only games i remember off hand is amidar and kungfu master giving me grief

ghost commented 6 years ago

ok here is the instructions to compile on retropie

first we need grab the mame source

paste these two lines below

cd ~/RetroPie-Setup/ sudo ./retropie_packages.sh lr-mame2003-plus sources

now we need to grab the pull request paste the following lines

cd tmp/build/lr-mame2003-plus/ sudo git fetch origin +refs/pull/381/merge sudo git checkout FETCH_HEAD cd ../../../

now build and install paste the lines below

sudo ./retropie_packages.sh lr-mame2003-plus build sudo ./retropie_packages.sh lr-mame2003-plus install

ghost commented 6 years ago

just hooked my retropie up to my barcade much to my surprise kungfu master works perfect. On a 8way sanwa joystick any other games that need tested please let me know

ghost commented 6 years ago

@Wilstorm what does xboxdrv do when you walking right then press right and up in donkey kong does it keep on walking or does it stop. It should stop walking when you try to go up when there is no ladder. That is what would happen on a 4 way

robertvb83 commented 6 years ago

@grant2258 thanks for the tutorial on testing pull requests. You made it fairly easy to try. I will try to test in the next few days

ghost commented 6 years ago

the only thing that is needing decide here is

Which do you want to prevail First down or last down?

First down assumes that movement away from your original direction is "accidental" until such time as you move the stick away from your orignial direction.

Last down assumes when you move the stick you mean it, however you forgot to "center" the stick.

else your just being awkard holding diagonal in intentionally. Again this is random doesnt seem to fix the problem unless someone else has any ideas for an algo

@Wilstorm looking at the I code pointed out.... to me it was analog related reading the docs confirmed this.

--four-way-restrictor

The --four-way-restrictor option allows one to limit the movement on both analogsticks to only four directions (up, down, left, right), the diagonals (up/left, up/right, down/left, down/right) are filtered out from the output. This option is useful for games such as Tetris, that don't need diagonals and where you don't want to accidentally trigger the down-move while trying to do a left/right move.

like i said from the start analog is more adapt to handle this it can work out which axis is pressed the most. This is why im asking you for input on how its working on a real joystick panel.

I might install it and see if it works as expected on a 8 way joystick. The dragon rise is set to analog by default but in a 8 way switch environment a diagonal will give both x and y and equal value

ghost commented 6 years ago

@robertvb83 and @Wilstorm the pull request is in. I have tested with my arcade joystick all is well for me.

Please delete your current mame source if you done it manually and compile its in the retropie setup as normal where you update from source.

Just choose clean source folder then pick update from source. You will see a new option in the menu you can turn the new emulation on or off see what one is better for you. Let me know how you get on. Would like some feedback whenever you get the chance.

The main feedback im looking for is how real 8 way arcade sicks are working for you guys now. Also how is it on contollers. The controller might need a seperate algo .

robertvb83 commented 6 years ago

the discussion seems to be continued in #381

ghost commented 6 years ago

is should be in here tbh

ghost commented 6 years ago

@robertvb83 the bomber man changes have been done in another pull request can we keep the conversion in here about any problems unless its something directly to do with the pull request.

I know there was the issue with bomber man being the wrong joystick type in mame that was the people that wrote the drives though. I have tried bomberman with the 4way changes it seems all good to me and im pretty much happy with keep last_pressed direction on diagonal until a position is reached and that is what a 4 way restrict or does. So im sticking with that.

Prediction in the xor was just an idea for pacman and such it didnt work out as well as I would have liked tried a few ways you cant emulate a 4way restriction plate on a 8 way digital. So the above is the best we can get. You can do this very easily and a analog stick but the last pressed works just as well on both.

robertvb83 commented 6 years ago

Ah ok i see changes in #386

I will test that thanks!

robertvb83 commented 6 years ago

@grant2258 all the bomberman games are working like a charm now! This was an easy fix but effect is huge. For the first time bomberman is actally playable in mame. This is GREAT. Thank you sir!

ghost commented 6 years ago

well im glad the two that tested it so far prefer it as well so far. The funny thing is it all worked out in the end when i looked what joysticks buttons where doing on a real 4way and translated as best as i could. For me its a close as i can get it on a digital stick with 8 inputs.

ghost commented 6 years ago

I really dont use this core much believe it or not but its not reason to not make it better for people with that are using it. If my little mini pc breaks i would like the option to use the pie and things work nice if i need that option.

Wilstorm commented 6 years ago

@grant2258 - I apologize, my forum etiquette sucks at best. I see an email hit 'View on Github' and reply. I like socializing as much as anything and I will try and only post in the issue section, sorry.

I think more folks use this core than I realize even so I have a complete "Attitude of Gratitude" for all you guys have done to make this core as good as it is.

ghost commented 6 years ago

no need to apologize at all. Its just easier to keep track this way when a new pull req comes in thats all. If your both happy with the latest compiled code (the one that is only original or new in the options menu). Thats the one Robert tested. If you guys have strange behavior on any games it can possibly be tweaked a little within reason. It seems to be ok with me I have one idea in my head taht can be fixed a little but i havent managed to make that condition come true so it can stay in my head lol

Wilstorm commented 6 years ago

@grant2258 - Ok, I haven't tried the newest code yet but I will download it today. Any tweaks to improve it are welcome. You just can't go wrong with this feature, 4-way restriction on a controller, who would have thought, the better it works the cooler it is! I can see the idea coming out of your head with a wand as a silver stream...wait...that's Dumbledore, no it's Grant, by god I think he's done it! ;)

I did have good luck with both Mr. Do and Kung-Fu Master. I am thinking Dig Dug which I spent a good deal of time playing back in the day too. Ok there's just a whole slew of great 4-way games.

ghost commented 6 years ago

Im going to get a circular or octagonal gate for my sanwa at some point this code should work well on that or a circular gate. as is. i can use the square gate I have if i dont ride the corners.

To me this is not what people do instinctively though ill leave some feedback when I get round to getting one of these gates.

This video should explain it better than any words would. as far as real 8 way joysticks go.

https://www.youtube.com/watch?v=eMIzsIwSkjs

Wilstorm commented 6 years ago

@grant2258 - That's slick I think I might order a octagon gate for testing. I see it's only $5 to buy and ship on Amazon. Yep I ride the corners like it's going out of style. It's amazing the old arcade games held up as well as they did. Even more amazing is in the video where he mentions the Japanese don't ride the gate at all. I am way to heavy handed to even think about that method.

Wilstorm commented 6 years ago

@grant2258 - Having withdrawals here, haven't chatted in a while. ;) I was looking at a few games that had the joysticks rotated 45 degrees. Mainly Q-Bert and Congo Bongo. I think there's a lesser know Williams one too. I don't know it off-hand. Is it possible to lock them into 4-way but at a diagonal or is that more changes than it's worth?

You can kind of simulate 45 degrees on a regular joystick with TAB input.

Up = Up/Right
Down = Down/Left
Right = Right/Down
Left = Left/Up

It works better and feels natural when moving on an isometric screen like those two games were/are. I like to have 4-way enabled at all times as I see no reason to have it off (well until now) but with that input scheme I have to disable 4-way in order to play those two games. He kind of jumps randomly once in a while moving the joystick around. Or can it be disabled at the ROM level? I guess that would work too.

ghost commented 6 years ago

its certainly something i could look into doing cant see it being too hard will need some time off work before i do it though. I will need to think of names them. original/new/rot45. Ive ordered my circular restrictions from china so hopelly will be here in a 2 or 3 weeks. There is two way we can do this with mapping or code. I think code would be a better idea for net-play compatibility

robertvb83 commented 6 years ago

@Wilstorm that is a great addition! good idea to map the rotated joystick to diagonals only @grant2258 I think this should not be an alternate option to the new 4-way but rather an additional option to activate 45°rotation. these games are still 4-way but need an additional treatment. Because what @Wilstorm is saying, its annoying to have to switch joystick mode for just a few games. We want to just always activate the new 4-way mode in general and have it applied for all 4-way games.

Wilstorm commented 6 years ago

@robertvb83 - True making it part of the 4-way scheme is perfect. I think it would be great to be fully automated into the 4-way mode if possible, without a crazy amount of time to do it, that would be ideally perfect! ;)

I would also be happy with an override either in .zip.cfg if that's possible, as a RA ROM level option. Basically something easier than turning it on/off every time you start the game. I know it's a tweak but it just makes those movements feel more in sync with what you see on the screen and how you move you hand. I don't jump off the edge near as much when using the diagonal scheme.

@markwkidd - Is this a core option? Can it be turned on/off on a per game instance or are core options global to the core and not granular to the ROM level?

Wilstorm commented 6 years ago

I will need to think of names them. original/new/rot45.

@grant2258 - Would it be to presumptuous to just make them 4-way on the diagonals (after all they were rotated sticks) and keep the original/new toggle as is, basically on/off?

Maybe some prefer it up/down/left/right straight on the isometric games possibly and that's not a good idea?

I flip it on and call it good! ;)

Here's the core option I was wondering if they may be set at the ROM level would work also that's usually set in the file retroarch-core-options.cfg

mame2003-plus_four_way_emulation = "original"

ghost commented 6 years ago

It should work on game level if you you go to over rides in the core option. I explain why i dont want to enable this by default because if someone was to use a genuine 4-way joystick it would mean the game doesnt work if its only diagonals detected. IMHO default hardware should work and if you want to emulate it you should be picking that option. Grrr i hit send again. My decision isint set in stone its just my thoughts. Mark and Arcdadez can do guidance on thsi as well as you and robert

ghost commented 6 years ago

above should read over rides in the quick menu

ghost commented 6 years ago

@Wilstorm I seen your thread on the retropie forum I seen your comments about up/right /up/left ect the problem is the joysticks is set to 4way in the driver and you cant set this but there is a way round this.

First of all if your using real 4 hardware you will have to use original not new in the options .

The changes we are going to make in games using the diagonals it will render normal 4 ways hardware none functional for 45 degree rotated joysticks if they are used. So the new is just assumed emulation on gamepads/8way joysticks. If all involved agree.

The condition check will be if new type is selected in options then we will make a list of romnames that are 45 degrees rotated. if both conditions are set true we do the diagonal magic.

What i need from you guys is a list of games apart from qbert and ill make something workable hopefully

Wilstorm commented 6 years ago

@grant2258 - Good point I've never tested on real hardware but it seems like it should work ok on or off. You would want your 8-way arcade stick to work the same as a controller and 4-way seems like it should work fine either on or off but I haven't tested on real hardware.

Another good point if you already have a dedicated 45 degree stick...that would be interesting.

There aren't many I could find if there's more to add to the list.

Congo Bongo Inferno Jazz Rabbit (8-way stick but only uses diagonals for gameplay) TYLZ Q-Bert Q-Bert Qubes