After many years of thinking about it, I finally got around to prototyping my 'ideal' joystick. This page is to explain the project as I try to assess the level of interest for a small or medium scale production run.
OPTOPUS has a grommet for centering, and autoswitching maps (8way,4way, 2way, 49way) which can also be indivdually tuned per game.
It has also been designed for quick swap gate change (and maybe even automatic gate change from eg circle to diamond) but it might turn out that the simplicity of a circle gate for everything is the best overall compromise of simplicity vs performance.
When I got into MAME as a hobby my main interest was Defender. There were no 2way joysticks readily available to the UK, got a bunch of worn out sticks and developed a bearing modification to revitalise and improve them, that was the zeroplay kit (now discontinued). I had planned to make or buy replica sheet metalwork to build up new sticks, but instead I just cut a body from plastic, making the zeroplay joystick.
Next I wanted a grommet leaf joystick for Robotron. This was before Dominux8 and the Wico replicas. I made my own with cnc'd plastic bodies and locally sourced grommets. Various things around the supplies and the amount of work involved means I never sold these except to my cabinet customers (they would never be price competitive selling to USA against the domestic Dominux8, they might sell to the small UK market). The design has developed continuously over the years including changes to the quick swap gate.
As soon as you start working on joystick design you become aware of the limitations of 4switches for 8way movement. So even before I had made the grommet leaf stick I was thinking about the ideal activation map and had an idea to do it with 8 sensors.
The image above shows an idealised activation map for a 4switch joystick. The four TIC-TAC-TOE lines are the lines of switch activation, in red areas 2 switches are activated together and that is interpreted as diagonal by 8way games. The black circle represents a circular gate (physical restrictor). The activation point of the switches relative to the total travel determines the relative size of the grey deadzone, and of the diagonal zones, this example has been set-up with equal 45degree sections at the periphery (ie if you 'ride the gate' around the circle, you get equal diagonal vs cardinal activation times/distances).
The point to note is that the diagonals (red) are the cardinals (yellow) are different. The diagonals are further away from centre, and offer a smaller target to hit (a point versus a flat face at the initial engagement distance). Unless you are super accurate you will pass through a cardinal on the way to a diagonal.
Some 4way games don't play very well with an 8way stick, this is because if the game was designed for a 4way joystick the release of one switch and activation of the adjacent one happen at more or less the same place (maybe with a small crossover, or maybe none) but with an 8way stick these point are eg 45degrees apart, so it makes a big difference which switch state change is used to trigger the change in direction.
If adding a 4way diamond gate to this 8way setup as shown on the right, the diamond shape has to be considerably smaller than the circle in order to cut out the diagonals.
It seemed to me that the ideal 8way map would not favour cardinals over diagonals resulting in something like an equally split donut. And jumping ahead a bit, assuming control over the size of the diagonals and cardinals, we could change the map to suit normal 4way and Qbert style 4way games.
The diamond gate would no longer be needed to cut out the diagonal, but it might still be desirable for feel (to be determined later).
The U360 is a map switching stick using a magnet and hall(?) sensor that has been around since before I joined the hobby. The mappings are all based on the 7x7 grid format (49way) which I'm not too keen on. It's based on sanwa JLW joystick which is a spring centred joystick. https://www.ultimarc.com/arcade-controls/joysticks/ultrastik-360-oval-top-clone/
Later ParadiseArcadeShop anounced their coming Magenta, based on sanwa JLF it was going to offer a map with (highly adjustable) pie segments like I wanted. https://paradisearcadeshop.com/products/magenta-analog-to-digital-programmable-joystick
Waiting to see the Magenta appear was a contributary factor in my lack of progress on this project for a few years. It took a while to arrive and it looked good when it did, but I didn't try it straight away due to how expensive it was going to be when I added in a circular gate and rubber pivot modification. And then it went out of stock when I finally got around to wanting to buy it.
I keep telling myself not to build controls, just to buy something off the shelf. But it's not that easy. Or that's my excuse anyway.
For my own project I was always thinking in terms of 8 proximity sensors (rather than one sensor giving x,y output). I had the idea that this might be done with simple electronics eg adjustable pots rather than software ( eg ike the legendary Suzo Inductive).
Using optics was always on my mind as well, due to it seeming simple and also as it harks back to the past optical joysticks like the Wico/Happ Perfect360.
Prototype1 tested the basic concept with Infra-red LEDs and it appeared promising, so that's what I'm going with.
Automatic Switching via control panel encoder.
The requirement for my own use is to have the joystick map under the control of the arcade cabinet front-end (Attract-Mode), with the control signals being sent to the control panel encoder and from there to the joystick(s). This way I only have one usb connection to my panel, and I don't need to worry about joystick assigments by the operating system. Also it means I could easily upgrade existing leaf customers to the Optopus.
This variant would connect as any other optical joystick would (mimicking a 4 switch joystick) with just the usual 4 wires plus 5V and GND. Map selection could be via DIP switches or button press. This variant might appeal to original cabinet or multigame owners. People might want it for the map switching, or for the 8way performance, or for the 49way mapping.
This would be a module to swap with the leaf switch module on a Wico, with the user retaining the base, grommet and handle of the Wico. The operation could be either manual or automatic as per the above variants. This harks back to the optical Perfect360 clip in kit.
Standalone USB autoswitch/DIP
This would be a version that plugs into USB socket (like U360 or Magenta), it could allow for the connections of buttons as well and act as the encoder for the panel. This is perfect for a simple panel with one stick and a few buttons but complications arise when more than one controller is plugged into USB, others have solved this and I would too if this variant was wanted for eg 4player mega-panels (alternatively I could make my own mega-encoder with 60+(?) inputs).
This was designed with flyleads because I was leaning heavily into the 8 theme and I wanted a clean symmetric body. The flyleads are not very practical and didn't look how I had envisioned so they've been dropped.
It served some purposes though. It was my first ever time designing (and having assembled for me) a PCB with surface mount components.
Also it allowed me to test the map switching control software and the optical components and circuits.
This was not made into a functional joystick, so the concept is still un-playtested at this point.
Prototype 3 (Dec 2021)
The sensor processing is done by a plug-in dev board, currently arduino nano formfactor because it has neat 8 in a row ADC pins. This was done for development speed and it allows different processors to be tested. The intention for a batch production version would be to have onboard processing for neatness.
This is the minimalist form of the joystick that I would use myself and has 38mm balltop and Robotron (4" Wico) ball height. Just as easily the body could be made in eg Wico dimensions, and with the grommet internal to the body. Note that grommet stiffness and ball leverage combine to give the stick its stiffness.
I have been pleased with how quickly the algorithms took shape and produced an output that looked good. I put this down to having a fundamentally sound concept :- 8 directions from 8 sensors.
Below are some testing videos.
I quickly able to develop from simple 8 directions to analogXY and to 49way. The analogXY (green dot) looks pretty good for what took 30s of coding, I'm sure I'll spend many days refining it though.
There are many different ways to code the maps. I want to settle on something simple and intuitive for the users and ideally common across the variants.
For the computer (front-end) controlled map switching I could/will give the user the ability to program maps individually for each game, whether anyone would use that is a question though. Having found my ideal settings for Robotron will that be good for all the 8way games?
Excluding the 49way, the other maps could all be specified and tuned by specifying the size of the 8 segments. This could be simplified further down to 5 values (U/D/L/R/diags), 3 values (UD/LR/diags), or 2 values (Cardinals/Diagonals).
A method that works for both DIP switches and computer control would be a number of maps (eg16) and a deadzone size (2 or 4 sizes). The maps would be built in for the standalone manual version, but user programmable for the computer version. I like the idea of separating deadzone size as a separate variable as I think that will be of use, with 2way and 4way maps the deadzone is the only variable really. That might also be true of 8way, but I'm leaving open the possibility of non-equal pie segments.
If there is demand for the various variants I will produce them in a quantity for sale, which means getting at least some parts made for me rather than making all the parts myself. I don't really know how I'm going to asses the demand, maybe I'll do a kickstarter pre-sale for each variant that looks like it might be wanted.
I will be discussing the project on various forums and directing people to this page for info.
Encourage me to make the variant you want by sending me a message.
My development environment