Compare commits
8 Commits
950346f85a
...
b5805b1e66
Author | SHA1 | Date | |
---|---|---|---|
b5805b1e66 | |||
c19542bb66 | |||
84fb2876ad | |||
3ca41bdb47 | |||
03737e2385 | |||
ef68dbca48 | |||
4336098fe8 | |||
a67c3a3d7f |
26
README.md
26
README.md
@ -40,21 +40,17 @@ about what the types of parts are and how to use them:
|
|||||||
larger arcade sticks. They are simple to assemble, but you have fewer modularity/customization options, and they
|
larger arcade sticks. They are simple to assemble, but you have fewer modularity/customization options, and they
|
||||||
are harder to print because the physics of the material cooling will probably pull the corners up. They also need
|
are harder to print because the physics of the material cooling will probably pull the corners up. They also need
|
||||||
supports, since the top and bottom of the frame both have trays for panels to go into. Use at your own risk.
|
supports, since the top and bottom of the frame both have trays for panels to go into. Use at your own risk.
|
||||||
* `pieces/`
|
* `pieces/` these are the same four walls (generally speaking) as in the complete frames above, broken out into
|
||||||
* `box/` --- these are the same four walls (generally speaking) as in the complete frames above, broken out into
|
modular pieces to print separately. Because they are separate pieces, you can mix and match colors, and you can
|
||||||
modular pieces to print separately. Because they are separate pieces, you can mix and match colors, and you
|
lay them all face down on the print surface for better adhesion and surface patterns. There are also variants
|
||||||
can lay them all face down on the print surface for better adhesion and surface patterns. There are also
|
here, the "windowed" pieces, for doing two-tone variants and that kind of thing. There are also frame walls pulled
|
||||||
variants here, the "windowed" pieces, for doing two-tone variants and that kind of thing.
|
out to create MCZ TE-style extended sides. There is an interconnect that stands in for the joined inner wall
|
||||||
* `extended/` --- the frame walls are pulled out to create MCZ TE-style extended sides. Rather than getting a
|
between boxes of the overall unit. You need this if you are combining multiple sets of walls, e.g. for a
|
||||||
box look, you get a longer slab with nice bevels. These look nice, but slightly fiddily to print (and of
|
two-panel-long stick.
|
||||||
course need more material) --- watch your surface adhesion.
|
|
||||||
* `interconnect` --- complete frames are bolted to one another, but for frame pieces, there is an interconnect
|
|
||||||
that stands in for the joined inner wall. You need this if you are combining multiple sets of walls, e.g. for
|
|
||||||
a two-panel-long stick.
|
|
||||||
* `panels/`
|
* `panels/`
|
||||||
* `inset/` --- various panels, all of the same size, that fit into and flush with the frame, making the arcade stick
|
* `inset/` --- various panels, all of the same size, that fit into and flush with the frame, making the arcade stick
|
||||||
top or bottom. These work equally well with box or extended frames, and aside from using up a bit of the space
|
top or bottom. Aside from using up a bit of the space for components inside the frame, come with no downsides ---
|
||||||
inside the frame, come with no downsides --- they print easily and are a pretty simple shape to tweak and remix.
|
they print easily and are a pretty simple shape to tweak and remix.
|
||||||
* `overhang/` --- overhang panels have their plane extending over the edge of the frame, creating a bit of a
|
* `overhang/` --- overhang panels have their plane extending over the edge of the frame, creating a bit of a
|
||||||
sandwich look. This is mostly an aesthetic choice, but they sit higher in the frame as well, the main panel being
|
sandwich look. This is mostly an aesthetic choice, but they sit higher in the frame as well, the main panel being
|
||||||
over/under the frame rather than within it. This extra space is useful for taller levers. The only downside to
|
over/under the frame rather than within it. This extra space is useful for taller levers. The only downside to
|
||||||
@ -69,6 +65,8 @@ about what the types of parts are and how to use them:
|
|||||||
* `extras/`
|
* `extras/`
|
||||||
* Various experiments and things not directly related to making an arcade stick. At time of writing, there's a
|
* Various experiments and things not directly related to making an arcade stick. At time of writing, there's a
|
||||||
couple pieces for a little stand for the stick, solely for vanity purposes.
|
couple pieces for a little stand for the stick, solely for vanity purposes.
|
||||||
|
* `bss-ae/` --- these are pieces for an arcade control panel that fits on the Qanba 2009. See the docs in that
|
||||||
|
directory for details.
|
||||||
|
|
||||||
Feel free to request or contribute to more objects. Additional documentation regarding assembling the stick is available
|
Feel free to request or contribute to more objects. Additional documentation regarding assembling the stick is available
|
||||||
in `docs/assembly-and-tips.md`.
|
in `docs/assembly-and-tips.md`.
|
||||||
@ -76,7 +74,7 @@ in `docs/assembly-and-tips.md`.
|
|||||||
## Printing
|
## Printing
|
||||||
|
|
||||||
These items all fit on a 256mm^2 print bed; I use a Bambu Lab P1P based on what I've learned from the
|
These items all fit on a 256mm^2 print bed; I use a Bambu Lab P1P based on what I've learned from the
|
||||||
OpenStickCommunity. Standard settings seem sufficiently sturdy, but see `docs/materials-and-printing.md` for more
|
OpenStickCommunity. Standard settings seem sufficiently sturdy, but see `docs/printing-and-materials.md` for more
|
||||||
thoughts and settings based on my tinkering with prints.
|
thoughts and settings based on my tinkering with prints.
|
||||||
|
|
||||||
## Assembling
|
## Assembling
|
||||||
|
2
build.py
2
build.py
@ -42,7 +42,7 @@ for root, dirs, files in os.walk('.'):
|
|||||||
stl_file = re.sub(r'\.scad$', '.stl', file)
|
stl_file = re.sub(r'\.scad$', '.stl', file)
|
||||||
input_ = os.path.join(input_dir, file)
|
input_ = os.path.join(input_dir, file)
|
||||||
output = os.path.join(output_dir, stl_file)
|
output = os.path.join(output_dir, stl_file)
|
||||||
cmd = f'openscad -o {output} {input_}'
|
cmd = f'openscad --hardwarnings -o {output} {input_}'
|
||||||
print(cmd)
|
print(cmd)
|
||||||
processes.append(subprocess.Popen(cmd.split(' ')))
|
processes.append(subprocess.Popen(cmd.split(' ')))
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ color(base_color) translate([-panel_x/2, 0, -2.5]) side_frame_piece();
|
|||||||
color(base_color) translate([panel_x/2, 0, -2.5]) front_or_back_frame_piece();
|
color(base_color) translate([panel_x/2, 0, -2.5]) front_or_back_frame_piece();
|
||||||
color(base_color) translate([-panel_x/2, 0, -2.5]) front_or_back_frame_piece();
|
color(base_color) translate([-panel_x/2, 0, -2.5]) front_or_back_frame_piece();
|
||||||
color(base_color) translate([panel_x/2, 0, -2.5]) rotate([180, 180, 0]) front_or_back_aux_and_neutrik_frame_piece();
|
color(base_color) translate([panel_x/2, 0, -2.5]) rotate([180, 180, 0]) front_or_back_aux_and_neutrik_frame_piece();
|
||||||
color(base_color) translate([-panel_x/2, 0, -2.5]) rotate([180, 180, 0]) front_or_back_aux_and_neutrik_frame_piece();
|
color(base_color) translate([-panel_x/2, 0, -2.5]) rotate([180, 0, 0]) front_or_back_aux_and_neutrik_frame_piece();
|
||||||
color(base_color) translate([-panel_x/2, 0, -5-frame_z/2+5]) panel();
|
color(base_color) translate([-panel_x/2, 0, -5-frame_z/2+5]) panel();
|
||||||
color(base_color) translate([panel_x/2, 0, -5-frame_z/2+5]) panel();
|
color(base_color) translate([panel_x/2, 0, -5-frame_z/2+5]) panel();
|
||||||
|
|
||||||
|
@ -28,6 +28,15 @@ details.
|
|||||||
You should have received a copy of the GNU General Public License along with the Buildable Stick System. If not, see
|
You should have received a copy of the GNU General Public License along with the Buildable Stick System. If not, see
|
||||||
<https://www.gnu.org/licenses/>.
|
<https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
### Lineage
|
||||||
|
|
||||||
|
Inspired by the incredible work of [TheTrain](https://github.com/TheTrainGoes) on the [OpenStickCommunity Fightstick
|
||||||
|
Case](https://github.com/OpenStickCommunity/Hardware/tree/main/Fightstick%20Case), itself based on the incredible work
|
||||||
|
by [Dash n'Mash](https://twitter.com/Dash_xx_Mash?s=20). Original work Copyright 2023 TheTrain, [licensed under CC BY
|
||||||
|
4.0](https://creativecommons.org/licenses/by/4.0/).
|
||||||
|
|
||||||
|
Made possible by the amazing efforts of [slagcoin](https://www.slagcoin.com/).
|
||||||
|
|
||||||
### Distributing BSS Sticks
|
### Distributing BSS Sticks
|
||||||
|
|
||||||
Under the terms of the GPLv3, you must inform the receiver of the "object code" of their rights under the GPLv3. This is
|
Under the terms of the GPLv3, you must inform the receiver of the "object code" of their rights under the GPLv3. This is
|
||||||
|
@ -31,25 +31,25 @@ module panel_holes() {
|
|||||||
// button hole, with extra wide bits for various uses (cutting out space
|
// button hole, with extra wide bits for various uses (cutting out space
|
||||||
// for snap-ins, etc.
|
// for snap-ins, etc.
|
||||||
module button_24mm_hole() {
|
module button_24mm_hole() {
|
||||||
cylinder(r=small_button_radius, h=100, $fn=50, center=true);
|
cylinder(r=small_button_radius, h=100, $fn=100, center=true);
|
||||||
// carve out space for snap-ins and screw-in nuts
|
// carve out space for snap-ins and screw-in nuts
|
||||||
// translation is to leave 3mm thickness in the plate without recentering anything
|
// translation is to leave 3mm thickness in the plate without recentering anything
|
||||||
translate([0, 0, -25]) cylinder(r=small_button_radius+button_radius_connector_space, h=49, $fn=50, center=true);
|
translate([0, 0, -25]) cylinder(r=small_button_radius+button_radius_connector_space, h=49, $fn=100, center=true);
|
||||||
// space for decorative button surround stuff
|
// space for decorative button surround stuff
|
||||||
translate([0, 0, 50]) cylinder(r=small_button_radius*decorative_radius_scale, h=20, $fn=50, center=true);
|
translate([0, 0, 50]) cylinder(r=small_button_radius*decorative_radius_scale, h=20, $fn=100, center=true);
|
||||||
translate([0, 0, 70]) cylinder(r=small_button_radius*jumbo_decorative_radius_scale, h=20, $fn=50, center=true);
|
translate([0, 0, 70]) cylinder(r=small_button_radius*jumbo_decorative_radius_scale, h=20, $fn=100, center=true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// button hole, with extra wide bits for various uses (cutting out space
|
// button hole, with extra wide bits for various uses (cutting out space
|
||||||
// for snap-ins, etc.
|
// for snap-ins, etc.
|
||||||
module button_30mm_hole() {
|
module button_30mm_hole() {
|
||||||
cylinder(r=big_button_radius, h=100, $fn=50, center=true);
|
cylinder(r=big_button_radius, h=100, $fn=100, center=true);
|
||||||
// carve out space for snap-ins and screw-in nuts
|
// carve out space for snap-ins and screw-in nuts
|
||||||
// translation is to leave 3mm thickness in the plate without recentering anything
|
// translation is to leave 3mm thickness in the plate without recentering anything
|
||||||
translate([0, 0, -25]) cylinder(r=big_button_radius+button_radius_connector_space, h=49, $fn=50, center=true);
|
translate([0, 0, -25]) cylinder(r=big_button_radius+button_radius_connector_space, h=49, $fn=100, center=true);
|
||||||
// space for decorative button surround stuff
|
// space for decorative button surround stuff
|
||||||
translate([0, 0, 50]) cylinder(r=big_button_radius*decorative_radius_scale, h=20, $fn=50, center=true);
|
translate([0, 0, 50]) cylinder(r=big_button_radius*decorative_radius_scale, h=20, $fn=100, center=true);
|
||||||
translate([0, 0, 70]) cylinder(r=big_button_radius*jumbo_decorative_radius_scale, h=20, $fn=50, center=true);
|
translate([0, 0, 70]) cylinder(r=big_button_radius*jumbo_decorative_radius_scale, h=20, $fn=100, center=true);
|
||||||
}
|
}
|
||||||
|
|
||||||
module frame_hex_bolt_hole() {
|
module frame_hex_bolt_hole() {
|
||||||
|
@ -14,10 +14,8 @@ module front_or_back_frame_piece() {
|
|||||||
left_frame();
|
left_frame();
|
||||||
difference() {
|
difference() {
|
||||||
// include the whole bottom wall (including mount columns)
|
// include the whole bottom wall (including mount columns)
|
||||||
translate([0, -(frame_y/2)+(piece_width/2), 0]) cube([frame_x, piece_width, frame_z], center=true);
|
translate([0, -(frame_y/2)+(piece_width/2), 0])
|
||||||
// ...minus the frame wall and lip on the left
|
cube([frame_piece_x_x, piece_width, frame_z], center=true);
|
||||||
translate([-frame_x/2+frame_wall/2, 0, 0])
|
|
||||||
cube([frame_wall, frame_y, frame_z], center=true);
|
|
||||||
// ...minus a slot for the combining piece to go into
|
// ...minus a slot for the combining piece to go into
|
||||||
cube([frame_x, frame_y-(panel_support_width+frame_wall)*2, inner_frame_z/3], center=true);
|
cube([frame_x, frame_y-(panel_support_width+frame_wall)*2, inner_frame_z/3], center=true);
|
||||||
}
|
}
|
||||||
|
@ -5,18 +5,21 @@
|
|||||||
|
|
||||||
include <parameters.scad>
|
include <parameters.scad>
|
||||||
include <components.scad>
|
include <components.scad>
|
||||||
|
use <frames/complete/left-frame.scad>
|
||||||
use <front-or-back.scad>
|
use <front-or-back.scad>
|
||||||
|
|
||||||
module side_frame_piece() {
|
module side_frame_piece() {
|
||||||
piece_width = panel_support_width+frame_wall+frame_mount_column_width;
|
piece_width = panel_support_width+frame_wall+frame_mount_column_width;
|
||||||
difference() {
|
difference() {
|
||||||
// side piece is left/right agnostic
|
intersection() {
|
||||||
frame();
|
left_frame();
|
||||||
|
// include the whole left wall (including mount columns)
|
||||||
|
translate([-(frame_x/2)+(piece_width/2), 0, 0])
|
||||||
|
cube([piece_width, frame_piece_y_y, frame_z], center=true);
|
||||||
|
}
|
||||||
// minus the top and bottom
|
// minus the top and bottom
|
||||||
front_or_back_frame_piece();
|
front_or_back_frame_piece();
|
||||||
rotate([180, 0, 0]) front_or_back_frame_piece();
|
rotate([180, 0, 0]) front_or_back_frame_piece();
|
||||||
// and just chop out the rest of the frame
|
|
||||||
translate([piece_width, 0, 0]) cube([frame_x, frame_y+1, frame_z+1], center=true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,9 +21,9 @@ module dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_plate_of_plates() {
|
|||||||
|
|
||||||
union() {
|
union() {
|
||||||
// y values are based on the other half below
|
// y values are based on the other half below
|
||||||
translate([right_plate_center_x, 15, 0]) linear_extrude(2) offset(r=3, $fn=50)
|
translate([right_plate_center_x, 15, 0]) linear_extrude(2) offset(r=3, $fn=100)
|
||||||
square([right_plate_x, left_plate_y], center=true);
|
square([right_plate_x, left_plate_y], center=true);
|
||||||
translate([-left_plate_center_x, 15, 0]) linear_extrude(2) offset(r=3, $fn=50)
|
translate([-left_plate_center_x, 15, 0]) linear_extrude(2) offset(r=3, $fn=100)
|
||||||
square([left_plate_x, left_plate_y], center=true);
|
square([left_plate_x, left_plate_y], center=true);
|
||||||
/* translate([-50, 0, 0]) cube([200, 200, 2], center=true); */
|
/* translate([-50, 0, 0]) cube([200, 200, 2], center=true); */
|
||||||
}
|
}
|
||||||
|
@ -8,9 +8,9 @@ include <components.scad>
|
|||||||
|
|
||||||
module jlf_dustwasher() {
|
module jlf_dustwasher() {
|
||||||
difference() {
|
difference() {
|
||||||
cylinder(r=lever_plate_hole*decorative_radius_scale, h=2, $fn=50, center=true);
|
cylinder(r=lever_plate_hole*decorative_radius_scale, h=2, $fn=100, center=true);
|
||||||
// 5.25 = 4.55 (diameter of shaft is 9.10mm) + .25 to let it take an angle
|
// 5.25 = 4.55 (diameter of shaft is 9.10mm) + .25 to let it take an angle
|
||||||
cylinder(r=4.8, h=2.1, $fn=50, center=true);
|
cylinder(r=4.8, h=2.1, $fn=100, center=true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,9 +8,9 @@ include <components.scad>
|
|||||||
|
|
||||||
module lsx_nobi_dustwasher() {
|
module lsx_nobi_dustwasher() {
|
||||||
difference() {
|
difference() {
|
||||||
cylinder(r=lever_plate_hole*decorative_radius_scale, h=2, $fn=50, center=true);
|
cylinder(r=lever_plate_hole*decorative_radius_scale, h=2, $fn=100, center=true);
|
||||||
// 5.25 = 5 (diameter of shaft is 10mm) + .25 to let it take an angle
|
// 5.25 = 5 (diameter of shaft is 10mm) + .25 to let it take an angle
|
||||||
cylinder(r=5.25+hole_tolerance, h=2.1, $fn=50, center=true);
|
cylinder(r=5.25+hole_tolerance, h=2.1, $fn=100, center=true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,10 @@
|
|||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// CONNECTION POINT SIZES
|
||||||
|
|
||||||
|
|
||||||
// adjustments
|
// adjustments
|
||||||
hole_tolerance = 0.15;
|
hole_tolerance = 0.15;
|
||||||
|
|
||||||
@ -31,24 +35,38 @@ big_button_radius = 15 + hole_tolerance;
|
|||||||
// radius + value below should leave space for the nut and for fingers to grab the nut
|
// radius + value below should leave space for the nut and for fingers to grab the nut
|
||||||
button_radius_connector_space = 5;
|
button_radius_connector_space = 5;
|
||||||
|
|
||||||
|
// standard lever hole
|
||||||
|
lever_plate_hole = 12;
|
||||||
|
|
||||||
|
// neutrik D screw holes
|
||||||
|
neutrik_d_screw_radius = 1.6 + hole_tolerance;
|
||||||
|
neutrik_d_radius = 12 + hole_tolerance;
|
||||||
|
|
||||||
|
|
||||||
|
// ELEMENT DIMENSIONS
|
||||||
|
|
||||||
|
|
||||||
// JLF mount dimensions
|
// JLF mount dimensions
|
||||||
lever_mount_x = 53;
|
lever_mount_x = 53;
|
||||||
lever_mount_y = 95;
|
lever_mount_y = 95;
|
||||||
lever_mount_z = 2;
|
lever_mount_z = 2;
|
||||||
|
|
||||||
// standard lever hole
|
// base frame box. reminder: inside top and bottom (including mounts) are chopped by panel_z for plates
|
||||||
lever_plate_hole = 12;
|
|
||||||
|
|
||||||
// case dimensions
|
|
||||||
// base frame box. reminder: top of inside (including mounts) is chopped by panel_z for plates
|
|
||||||
frame_x = 233;
|
frame_x = 233;
|
||||||
frame_y = 208;
|
frame_y = 208;
|
||||||
frame_z = 57;
|
frame_z = 57;
|
||||||
|
|
||||||
// stand dimensions to display a stick
|
// depth of the "lip" of the frame that the top plate sets into/supports the overhang
|
||||||
stand_x = 5;
|
frame_wall = 4;
|
||||||
stand_y = frame_z;
|
|
||||||
stand_z = 15;
|
// top plate, which can either be the whole plate ("inset") or the mounting frame for a plate that overhangs
|
||||||
|
panel_x = frame_x - (frame_wall * 2);
|
||||||
|
panel_y = frame_y - (frame_wall * 2);
|
||||||
|
panel_z = 5;
|
||||||
|
|
||||||
|
// some dimensions for frame pieces, useful in doing some intersections and chopping
|
||||||
|
frame_piece_x_x = frame_x - (frame_wall * 2); // essentially panel_x, yes
|
||||||
|
frame_piece_y_y = frame_y; // the whole y of the frame, yes
|
||||||
|
|
||||||
// degree to which the extended frame pieces stick out from the end of the frame
|
// degree to which the extended frame pieces stick out from the end of the frame
|
||||||
frame_extension_x = 25;
|
frame_extension_x = 25;
|
||||||
@ -61,20 +79,12 @@ overhang_panel_bevel_height = 1;
|
|||||||
|
|
||||||
frame_center_to_neutrik = 70;
|
frame_center_to_neutrik = 70;
|
||||||
|
|
||||||
// depth of the "lip" of the frame that the top plate sets into/supports the overhang
|
|
||||||
frame_wall = 4;
|
|
||||||
|
|
||||||
// width of the column in the frame corners to support the hex bolt
|
// width of the column in the frame corners to support the hex bolt
|
||||||
frame_mount_column_width = 20;
|
frame_mount_column_width = 20;
|
||||||
|
|
||||||
// per neutrik (mm)
|
// per neutrik (mm)
|
||||||
neutrik_panel_thickness = 3;
|
neutrik_panel_thickness = 3;
|
||||||
|
|
||||||
// top plate, which can either be the whole plate ("inset") or the mounting frame for a plate that overhangs
|
|
||||||
panel_x = frame_x - (frame_wall * 2);
|
|
||||||
panel_y = frame_y - (frame_wall * 2);
|
|
||||||
panel_z = 5;
|
|
||||||
|
|
||||||
// inside the frame
|
// inside the frame
|
||||||
inner_frame_z = frame_z - (panel_z * 2);
|
inner_frame_z = frame_z - (panel_z * 2);
|
||||||
|
|
||||||
@ -96,10 +106,6 @@ panel_to_frame_point_y = (panel_y/2)-10;
|
|||||||
// frame interior that supports the top plates
|
// frame interior that supports the top plates
|
||||||
panel_support_width = 5;
|
panel_support_width = 5;
|
||||||
|
|
||||||
// neutrik D screw holes
|
|
||||||
neutrik_d_screw_radius = 1.6 + hole_tolerance;
|
|
||||||
neutrik_d_radius = 12 + hole_tolerance;
|
|
||||||
|
|
||||||
// additional button radius for decorative panels, etc.
|
// additional button radius for decorative panels, etc.
|
||||||
decorative_radius_scale = 1.75;
|
decorative_radius_scale = 1.75;
|
||||||
jumbo_decorative_radius_scale = 2;
|
jumbo_decorative_radius_scale = 2;
|
||||||
@ -113,8 +119,15 @@ slash_inner_displacement = 10;
|
|||||||
slash_width = 15;
|
slash_width = 15;
|
||||||
slash_height = frame_z-panel_z*3;
|
slash_height = frame_z-panel_z*3;
|
||||||
|
|
||||||
|
// stand dimensions to display a stick
|
||||||
|
stand_x = 5;
|
||||||
|
stand_y = frame_z;
|
||||||
|
stand_z = 15;
|
||||||
|
|
||||||
|
|
||||||
// LAYOUTS
|
// LAYOUTS
|
||||||
|
|
||||||
|
|
||||||
sega_2p_column_2_offset = 30.5;
|
sega_2p_column_2_offset = 30.5;
|
||||||
sega_2p_column_3_offset = sega_2p_column_2_offset + 36;
|
sega_2p_column_3_offset = sega_2p_column_2_offset + 36;
|
||||||
sega_2p_column_4_offset = sega_2p_column_3_offset + 36;
|
sega_2p_column_4_offset = sega_2p_column_3_offset + 36;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user