Open309
User modding Crown 309 fightstick body replacement
Install / Use
/learn @not-magic/Open309README
Open309
An open-source 3D Printed Crown 309 fightstick body replacement.
This started out as a way to create a NEW Helpme body that supported Omron D2RV-LG silent switches. But it may also be used by anybody to tweak and print their own 309 body and adjust the collar shape and switch spacing, or just print a replacement if your old body breaks.
The body is in 3 parts to minimize what needs to be printed while tweaking things, as well as make it print with minimal supports:
Collar

Works as a replacement for the stock NEW Helpme collar. This part is completely interchangable with the stock collar, so you can keep the stock collar or only use one of these collars to adjust the throw angle and shape. There are round, square and a few squircle shapes. Additionally there are "smooth" and "notched" options. The "notched" variant adds 0.1mm notches meant to act as a slight bump to indicate diagonal positions, as well as a place for FDM printers to put the layer seam.
Body

The middle part that holds the grommet
Switch Plate

This holds the switches and controls their spacing
Printing
There are premade .STLs over in the Releases you can start with.
There are three variants of switch plates in the releases:
- Standard - 24.7 seems to be what the stock spacing is.
- Variable Deadzones - These adjust the switch spacings to have a larger down deadzone and the rest to have shorter deadzones, just for something to play around with.
- D2RV - These are what I found worked for me for the D2RV-LG switches, and include variable deadzones. I have settled on the 24.3 spacing.
The variable deadzone switch plates are meant to be oriented with the text to the front of the stick enclosure, e.g. the "down" switch is at the top
There are many variations of the collars with different throw angles and collar shapes:
- circle
- light_squircle (a more circular shape)
- squircle (a shape I found I liked)
- heavy_squircle (a more squarish shape)
- square
And each of them in throw angles:
- 14.0
- 14.5
- 15.0
- 15.5
- 16.0
It's difficult to measure the stock throw angle but I think it's about 15.
Parts Required
All parts were designed to fit the Crown CWL-309-MJ-NEW-Helpme-KMS-ST30 Joystick
Other 309 variants may also work, but I don't have any of them so I am not sure. It is likely they can all work with minimal modifications.
To assemble this you will also need 8x 16mm M3 bolts with nuts, to attach the switches to the switch plate. The height of the switch plate is designed for exactly 16mm bolts so anything else will either not reach the nuts or will intersect with the body.
The printed body is also a tiny bit too long for the stock 25mm M4 bolts. It works, barely, but it works better with 30mm M4 bolts.
All pieces are assembled stacked and held together by the M4 body bolts.
The only parts kept from the original lever are:
- The one-piece stick
- The grommit + DX bobbin
- The actuator (16mm or 16.2mm) which you could 3d print if you wanted
- The M6 E-clip
- The mounting plate
- Microswitches
If you were planning on replacing the grommet and switches anyway it may be cheaper to just buy the remaining parts separately.
Print settings
I did all test printing on a Prusa Mk3s with a 0.6 mm nozzle.
If the "smooth" collar is printed I would recommend using a random seam position, and lightly sanding the collar. This will prevent a layer transition seam in one position. I print the collar upside down with supports, which creates some pretty bad surface quality that is entirely hidden by the mounting plate.
The "notched" collar may be printed with a normal seam positions, with the notches designed to serve as a feature (bump where the diagonals are) as well as a place for FDM printers to place layer seams.
Modifying the design
This was made using OpenSCAD, which is a free open source parametric modeller. Once you open the file you can modify variables in the customizer (Window | Customizer in the menu) or just modify the source directly.

In this example image:
- The green area represents when one switch is triggered for a cardinal direction.
- The blue area represents when two switches are triggered for a diagonal.
- The grey box is the switch deadzone, which is required for proper function of the switches. Switches may activate at 1.4mm but may not deactivate until the lever is moved back 0.3mm.
- The white area is the neutral zone, where the switches have no interaction. On a levered switch this will be slightly twisted because the switch levers pivot. The lever must sit neutrally here or the switches cannot function correctly.
- The black circle represents a circular collar, the cap on the max rotation of the stick.
The proper switch spacing is a balance:
- Diagonals need to be large enough to be accurate.
- Cardinal zones need to be shallow enough you can double tap the directions for dashing reliably.
- Cardinal zones need to be wide enough to find them accurately.
- Deadzones must be the right size. They add a kind of "stickyness" to inputs, where a down to right motion may produce a QCF output if the down is still active because it hasn't left the down deadzone.
You can also make dash actions a bit more reliable by increasing the grommet tension, as it will return into the neutral zone faster.
Parameters
- SWITCH_SPACING_AWAY - This is the distance of switches to the center. The larger the value, the larger the neutral zone becomes and the smaller the activation zones become.
- SWITCH_SPACING_SIDEWAYS - This moves the switches perpedicular to the center. A larger value will increase the size of the switch deadzone.
- EXTRA_SWITCH_SPACING_AWAY* - These are options to add extra away switch spacing in each input direction, if you wanted "up" to be less sensitive for example.
- EXTRA_SWITCH_SPACING_SIDEWAYS* - These are options to adjust the deadzone size in each direction.
- SWITCH_ROTATION - This will rotate the switches towards (negative) or away from the center (positive). This may be necessary if the switches do not trigger when the lever is exactly parallel. This is the case with the D2RV-LG switches. Adjusting this will also twist all of the activation zones.
- STICK_THROW_DEGREES - This is the max rotation of the lever (e.g. max throw angle) which is used to generate the collar angles. This adjusts the size of the collar.
- SWITCH_GUARD_DISTANCE - This will adjust the size of the gate in the switch plate. This may never be hit, but due to the way korean levers work, applying enough pressure you can force the grommet to deform and push the actuator towards the lever anyway. So this is protection against damaging the switches. If you find you are hitting this with space to go, lower this distance, I tuned the defaults for the D2RV variants. Hitting this guard during normal operation will apply a square gate like feel, and is also going to be noisier as you hit the guard with more velocity than the collar.
- SHAFT_DIAMETER - This is the diameter of the stick shaft, used to generate the collar range of motion.
- SQUIRCLENESS - This affects the shape of the collar. At 0 it is a perfect circle. Higher numbers warp it into a square.
Using a larger sized actuator has the same basic effect of reducing the switch away spacing, except it may also reduce the throw angle if it hits the switch guard.
Exporting it
Using the 'PART' parameter, select each part and export it with F6, then F7
Alternatively on linux you can run make to rebuild every part. Use make -j 32 (or your core count number) to process them in parallel.
