On creating an Internet-ified Hobbit Pinball game
Warning: do not try this on your own unless you know what you are doing. You have been warned. Trying this may void warranties and evoke little sympathy from tech support!
[DISCUSS] this write-up on Reddit.
[UPDATE] JJP has this covered. Search for the word 'Internet' in the patent.
My endearing back-story
I've loved pinball for as long as I can remember having mobility, from the time where my local arcade was still about 50% 10-cent games. Then along came the Internet and the first browser, and I liked that too, it was cool - you could make things talk. Then came the growth of open source software such as Linux, which I fell in love with - you could hack things, you could fiddle, you could modify, you could compile source code from tarballs! w00t! we messed around with HOWTOs and wrote articles. Decades later as a young parent, I waxed philosophical about the old days and introducing my new young children to the Zen of Pinball (7-minute video). Good times.
In the non-technical arena, I've always been a fan of Tolkien, and even study his work a little. It took until the year 2016 for all of these loves to come together in the form of Jersey Jack's awesome Hobbit pinball game . Finally I had a game that had interesting (if non-canonical) intellectual property, great audio/video/gameplay, and to my surprise Linux under the hood. Unfortunately the stock game wasn't quite there. It wasn't CONNECTED to anything. I set out to fix that. Don't get me wrong, I'm not one of those people that thinks that plugging every damn thing into the Internet (ala the "Internet of Things") is a good idea. No I do not. This is how we get Cylons. However, the Internet of Pinball (IoP - Trademark 2016, ME) is a very GOOD thing, and a promising area of development. I claim no rights to these ideas. These are my notes.
First of all, apologies for the crappy work. My videos are hackneyed, my web page html is written in a text editor, and my mod is crude. I know this. This is Proof of Concept only. Someone that has more time, or perhaps even a modicum of programming talent, could do a far better job. I know this. My 14-year old son is horribly embarrassed by the un-combined twitch streams and v1 HTML code. For the record, he told me to do it better, but I'm lazy.
What I did was to modify the software on my Hobbit pin so that I could live stream directly from the pinball machine itself, and configure a web server so that random idiots (AKA my friends) on the Internet could interact with my game. All of the modifications (aside from plugging in an ethernet cord and a USB Webcam) are software based, although I did make my modifications on a copy of the hard drive so that I could go back to the stock any time. I announced and quickly did an Internet accessible PoC on August 2nd, 2016. I believe this is the FIRST time (8/2/16) that anyone has ever live-streamed video directly from a pinball machine without anything else. Similarly I don't know of anyone who has ever made it so that the Internet at large can interact with their pin. I didn't really look though, tell me if I'm wrong. The webcam, the backglass capture, and the web CGI binaries to interact with the machine were all configured directly in the pinball machine itself.
If you want to see a short overview of how it works, check out https://www.youtube.com/watch?v=8T524GXsVJY (~7 minute video)
If you are a glutton for punishment and want to see a low quality recording of the original live-stream, check out https://www.youtube.com/watch?v=ZIjp6hzc_zg#t=1320s (~long, starts at minute 22, done with my friend Maelstrom517 and a few awkward moments like covered up screens)
The Future of Pinball! (?)
The possibilities for this type of modification are very interesting! This would allow us to do things such as:
- Have a world-wide registry of pinball game scores. It would be easy for each pinball machine to upload their high scores to a single web server, perhaps run by JJP. We could also make a metric for game difficulty, based on how it is configured (for example, if you configure your game to award points instead of a free game, this makes it easier to get higher scores, and should have a lower rating). So, we could have an "absolute" score as well as a "weighted" score. It would be possible put some security on this, so for example the owner would have to register the game with JJP and you could use the serial number or ethernet MAC address to identify the machine. You could use some kind of one-way HMAC to sign the score uploads to discourage cheating. You could overlay the physical location of the game on Google Maps so you could view pinball hot-spots and where the high scores were coming from. Tweet high scores to the Internet, post them to Facebook or whatever silly social media type things you are interested in. Possibly get alerts based on certain initials, etc.
- Allow service personnel to remotely manage the machine - for example to see if it is turned on, to view the playfield to see if there is a problem (stuck orc door, etc) or find out when a pinball is stuck somewhere. Could even allow people to remotely diagnose bad switches, LED lights, etc.
- Password protect all this stuff so only the "right" people could do it.
- Use a wireless dongle instead of wired ethernet.
- Head to head tournament play. Get annoying messages when someone is kicking your ass in the tourney. Automatic tourney high-score boards.
- Capture the 3rd display
- Overlay a webcam focused on the player's head (ugh)
- A brand new high (or low) in Internet harassment, stalking and anonymous obscenity
Hardware and Software
The Hobbit pin has a whole bunch of hardware that I don't really understand and can barely fix. I'm not going to talk about that. I can just barely change a spring on a drop target. When it comes to soldering a bridge rectifier I'm out. However, it has a computer in its guts, and this I can mostly understand.
Motherboard: MSI H81M-P33 (https://us.msi.com/Motherboard/H81M-P33.html#hero-overview). A pretty solid, if inexpensive looking motherboard. It uses the onboard DVI for the 1080p backglass, and the VGA for the little bonus display on the right-hand side. If you are a distributor or run a route I'd buy one or two to have laying around in case you have one burn out some day.
CPU: Intel(R) Celeron(R) CPU G1840 @ 2.80GHz (fam: 06, model: 3c, stepping: 03). If you wanted this to rock as a streaming pin, you could upgrade the CPU.
OS: Ubuntu 15.10, kernel 4.2.0-16.
root@bedebox:/mnt/hobbit/1# file boot/vmlinuz-4.2.0-16-generic
boot/vmlinuz-4.2.0-16-generic: Linux kernel x86 boot executable bzImage, version 4.2.0-16-generic (buildd@lcy01-07) #19-Ubuntu SMP Thu Oct 8 15:, RO-rootFS, swap_dev 0x6, Normal VGA
Other: SQL database at the backend. Didn't mess with this, but could run a script to upload scores to a server, tweet for the twits, etc.
Tech Hints on how I did it
Unless you already know a whole lot about hardware and Linux, don't try.
Setup: In order to not get in as much trouble I'm not going to give step-by-step instructions but I will give you some hints. Use a hardware write blocker to DD the drive and lay down the image on a same-brand SSD of any size 32gb or bigger. In between consider converting to VMDK and setting up a temporary VM to get into it to enable networking and SSH. Single user boot mode. patchelf --set-rpath $ORIGIN for portable binaries. Re-create Apache directory requirements on boot before starting daemon
Streaming: ffmpeg - http://unix.stackexchange.com/questions/87107/using-ffmpeg-to-stream-to-twitch-tv-with-desktop-audio, https://trac.ffmpeg.org/wiki/StreamingGuide.
Link to Bede's game (CURRENTLY TURNED OFF)
View and interact with Bede's Hobbit
Thanks to Jersey Jack for making, in my opinion, the best pinball game of all time. I bought this game sight unseen and haven't regretted it for a moment. The power and flexibility of their platform is significant, and the programming, audio, and visuals are top-notch. Thanks also to my local arcade, Pinball Pete's, for the games and support over the years, and to Tim at the Pinball Hall of Fame in Vegas for what he does. I got my game from Gary at Able Electronics - (586)777-8232 - and found them to be honest, communicative and easy to work with (especially in the long dark years BEFORE 2016).
Thanks to Reza Beha (AKA Maelstrom517) for helping me on my PoC day and being a good friend and all around good guy.
Thanks to Signum University for allowing me to study fun stuff like Tolkien, myth, and literature online with like-minded folks from around the world.
About me: I am AKA Bede from the Foofus team, (AKA Mark Lachniet, firstname.lastname@example.org) work in information security, like to mess with things, and wanted to get this PoC before I headed out to the 2016 DefCon 24 conference in Las Vegas. Hence the haste and poor quality, but I wasn't going to miss DC and I didnt know if I'd have the attention span to continue when I got back.
Last updated: 2016-08-11