Arcade Machine
Projects | |
---|---|
Participants | Control-k, Maijin, Realitygaps, Wizzup |
Skills | Programming |
Status | Active |
Niche | Software |
Purpose | Fun |
Contents
Arcade Machine
We own an Arcade Machine, of which we have replaced the contents with an Intel PC, running Linux. It has a custom game launcher and support for many emulators, such as MAME, UAE and other emulators.
Usage
Games
TODO: Re-create this list and only list games that are easy to use...
List of games:
Native (Intel)
- superhexagon
- Jamestown (works with joysticks)
- Syobon (not yet! Ubuntu didn't have it in their repo ☹)
Amiga
In UAE, just add the games as floppies.
- SWIV (Great shoot them up game)
- Pinball Fantasies
SNES
...
Plan / Wishlist
DONE
- Wheels
- Power button
TODO
(Shortened from Justa's original mail for readability)
- New and more physical input buttons
- Make the uinput-software much more user friendly
- Clean up the inside of the machine, bundle cables.
- Move the keyboard/mouse/touchpad into a drawer
- Fix a light inside of the cabinet
- Look at the test and volume controls inside of the cabinet
- Improve the launcher and uinput-mapper stuff
- Improve the game launcher
- Add more games (only when they work nicely / well), perhaps we can have a
"tested games" launcher and an advanced mode.
- (Re)Paint the cabinet.
Modifications
- Added two fixed wheels and two swivel-wheels under the base -- To be able to move the thing around
- Added a hole that runs from the 'cabinet' part into the 'base' part -- Since I had the console removed already, it seemed smart to make some kind of hole in the base AND the cabinet that'd allow running a cable through for lighting/whatever.
- Drilled a hole on the underside of the 'button-table' to let USB cables through -- To start getting rid of the 'kabel-salat' that plagues the arcade-machine, I moved the USB-hub from the 'coin-door' to a location inside of the cabinet; allowing the keyboard + pad to be connected a little more tidily. Also in preparation for other (suggested) changes
- Removed all the blue tape holding the access-hatch closed; replaced it (for now) with a single screw -- This is not permanent; but the use of blue tape all over the place was not making things look nice. The screw is just a kludge. There is a mechanism on the back of the access-panel that we could re-use, if I could figure out how it was supposed to work. Simply making a spring-loaded latch there would work fine too.
Details
The cabinet we have is a 'generic' model designed to be able to run a number of games, originally.
We stuck a PC in there and replaced the CRT with an LCD. The controls connect to the PC via a 'JPAC' module from Ultimarc; connected to the PC via PS/2 There are a number of USB-cables running from the PC to other devices. Including the keyboard + Touch-pad that are currently 'seated' at the top of the cabinet.
The PC runs Linux. It autoboots into an AWESOME desktop that has a full-screen 'program selection' window open which was programmed by Wizzup and Control-K as a way to easily be able to select the game/program/function you'd like to use.
The cabinet has the following controls
- A coin-return; now used for 'on/off' (wired to 'ATX poweron' i believe) - Player 2 start (on front edge) - Player 1 joystick - Player 1 button 1 - Player 1 button 2 - Player 2 start (on front edge) - Player 2 joystick - Player 2 button 1 - Player 2 button 2
The cabinet has a light-switch on the back to power on/off the light that illuminates the logo at the top.
The cabinet has two speakers. Not clear if volume is wired up via volume-control button on the inside of the cabinet.
The cabinet is designed to be used either in 'seated' mode or, in it's current configuration, when standing. To make this possible, the cabinet is constructed out of two sections. A main section housing all the electronics, etc, and a 'pedestal' at the bottom that can be separated from the rest by removing two bolts. This raises the height of the entire machine about 40cm's or so.
Video
We replaced the built-in monitor with a TFT monitor. (TODO: Resolution?)
Sound
The sound works and is connected to the computer as well. (TODO: Document how)
Power button
The button next to the coin slit is now (also) a power button.
Input
We have written our own Game Launcher frontend and software to do advanced input remapping.
Arcade Machine input
The input can be read as PS2 (and USB); using a chip that we got alongside the Arcade Machine:
http://www.ultimarc.com/jpac.html http://www.ultimarc.com/jpac2.html
The Arcade Machine input exposes itself as a single keyboard over USB and PS/2. This is problematic for most games, with the exception of MAME and a few emulators. Some games expect an input device per player, so one "keyboard" then simply is not enough.
To solve this problem we have written software that can split one keyboard up into multiple virtual ones: https://github.com/MerlijnWajer/uinput-mapper ; http://hetgrotebos.org/wiki/uinput-mapper
Other Input
We attached two PlayStation controllers, but I (Wizzup) am not a big fan of them. Regardless, there's a USB hub so feel free to plug in other controllers! It would be nice to have proper SNES ones.
This may be useful: https://www.thinkgeek.com/product/f08d/ and http://www.amazon.com/Classic-USB-Super-Nintendo-Controller-PC/dp/B002JAU20W Or we can make our own.
Coin Input
This should be handled by the Input over PS2/USB as well. It is probably mapped to some a key.
Old text
Common tasks
There are a few simple tasks until we've written a pretty interface + set of scritps.
It mostly boils down to two tasks:
1) disable/enable the "keyboard" interface in X (to avoid double input):
~/disable_*.sh or ~/enable_*.sh
2) start/stop uinput-mapper with the right configuration:
sudo input-read -D /dev/input/by-id/usb-Cypress_I-PAC_Arcade_Control_Interface-event-kbd | sudo input-create configs/techinc.py
And just hit ^C to stop it.
Writing our own input driver
Axes to axes, Buttons to buttons
Code: https://github.com/MerlijnWajer/uinput-mapper
For instructions, see: http://hetgrotebos.org/wiki/uinput-mapper
And the techinc.py config can be viewed online:
http://googleco.de/uinput-mapper/tree/configs/techinc.py
Map:
- Creates two joystick input devices in /dev/input
- Both joystick devices are mapped sanely.
- HAT0X / HAT0Y seem to work now that we specified absmin and absmax.
Keys are mapped like this:
HAT -> HAT0X, HAT0Y Red Buttons, left to right: BTN_0, BTN_1, BTN_2 Yellow Button: BTN_3
User Interface
There is a custom menu for the arcade machine, it should start automaticly. You can use the left joystick to choose a game/program. Press the most right button of player 1 to start it. For games that are not added yet, xterm is also in the menu.
If the menu is closed and you want to start it, the python script is in "/home/techinc/arcade/game.py", run it using python2.
Adding programs
You can use the supllied GUI in the menu, it will ask some questions. You can either choose a file to run or insert a custom command Then it asks for a name and descition Finaly, you will need a picture, you can use the standart questionmark, insert a file or taka a screenshot. When you take a screenshot, the command will be executed (so make sure it is alright) and after some seconds scrot is used to take a picture.
You can also edit the ~/arcade/gamelist.conf file for more flexebilety.
Removeing a program can be done by pressing [DEL] in the main menu while you have the program selected.
Sometimes things go wrong when adding games, specifecly while adding a screenshot, this can make the menu crash. You can fix it by removing the broken entry from ~/arcade/gamelist.conf manualy.
Games
in general
Let's not overload the console with ALL MAME games, make a selection and allow people to make wishes, otherwise you have clutter
Suggestion: focus on at least 50% co-op games! Fun is best shared! ;)
metal gear, swiv, bubble bobble, alien vs predator, metal slug, ikari warriors, gauntlet, smash tv, TMNT, Rampage, NARC, etc.
anything that makes fun together :)
Other uses
- We can use it to control a variety of stuff. (light, sound)
- We can hook other consoles into it.
- Some kind of game that integrates with the space? interacts with some light / stuff around the arcade machine
- ???
To-Do List
-
wheels! Everything that can move is not in the wayDone 20141116 - Justa -
power and/or reset button - make selection of like 50 MAME games - ask Mailing list for everyone's top-3 nostalgia favorites?
- USB/HID controls vs. input-mapper - Wizzup and Justa have to fight that one out...
- reinstall OS on SSD
- have it make coffee (hack a saeco inside for no reason)
- strip the PC and mount it inside - reduce clutter while busy
- investigate less heat production / better ventilation