And it all makes sense. It does, yeah. Did you minor in electrical engineering or how did that part come about? So I went to Virginia Tech in southwest Virginia and their computer engineering program was essentially, this was in the early days of computer engineering, it was essentially a mix of electrical engineering with a computer science minor. So we took all the electronics courses and they also had us taking programming and object-oriented classes. So they introduced us to both sides of it. That's really cool. And, you know, I support that. That's neat. Yeah. It's actually interesting to me how even the stuff we did in electrical engineering or learning how to define low-level logic and circuits and those kind of things is super fun and interesting for me. But nowadays, even when I started working after school, we didn't do any of that. We basically wrote code whether we were doing software or hardware. We wrote code even to describe the hardware. Wow. There's always been some aspect of programming in everything I've done. Yeah, and I've tinkered with EEs, the building circuits and so forth, and with logic. And I've found the similarity between the two pretty fascinating. A lot of my programmer brethren don't feel that way. Well, there's multiple levels of electrical engineering, right? There's analog circuits, which you're dealing with transistors and basically current curves and voltage curves. And there's really not a whole lot of logic to that. I mean, it's all based on fundamental theories and principles. But when you're talking about logic, when you're talking about programming, it's all ands and ors and ifs. And when you're doing digital logic or programming, it's all essentially the same thing. Yeah, just with logic gates instead. Yep. So what gave you the idea to come up with a control system? I had, as is common in the industry, I grew my pinball collection in my house from two games to four games to eight games and then to 11 games. Mm-hmm. Expensive play field layouts and kind of give them more life. So they have computers inside them. They had older computers that were obviously powerful enough to do fun things and create new or create interesting light shows and sound effects and videos on the dot matrix displays and progress through rule sets. But to me, it was an interesting technical challenge to try to come up with a way to connect a computer to those machines so that I or anybody else could create a custom rule set. So that was kind of the beginnings of it. I wanted to figure out a way to connect a computer to these machines and write my own software. And which platform did you choose as a base? At the time, my most popular, interesting games were WPC to me, so mid-90s Williams games. But I also had a couple of Stern games, so I didn't pick one. I actually designed a board that worked with both of them. Go for the most challenging wave. Well, so yeah, there's more to the story. While thinking about how to make or how to breathe new life into these games or how to write new software for these games, I came up with a concept for a machine, and we'll talk about that machine more, I'm sure, in a little while. But so the original goal of this board called the P-Rock that I developed was to be a fundamental building block, the controller board, the foundational piece for an eventual custom game I wanted to make. So the building blocks of that were there all the way back with P-Rock? Yeah, because what happened is I had a board now. I designed the P-Rock. Oh, I had the idea to design the P-Rock. I didn't have the board yet. I was sitting there thinking, the board is useless without this custom game or without features and play fields and things to control with it. So I either had to design and build the complete custom game at that point. In other words, the board by itself is nothing and a machine by itself is nothing, so I needed both pieces to work together in order to make any progress. But that was a ton of work, and I didn't want to bite all that off. So what I wound up doing was building in compatibility into the control board to work with existing games. And that essentially let me use old machines, old being the Williams games that I had in my house, as development platforms for future custom game development. I see. And was there one game in particular that you wanted to rewrite the rules for initially? No, I didn't actually have that goal myself. What I wanted to do was build the custom game. So what I did when I was researching how to build backwards compatibility into these things, I researched on the internet and I started talking on the pinball forums and asking questions to people who were more familiar with the control systems of those games. And as we talked through it and as I designed the board, it kind of became obvious that there were other people who wanted to use such a board to do new interesting things with their machines as well. So while the project kind of started as an idea to create a custom machine that might be able to run custom code, it grew into this potential product, this potential board that other people could use to write custom codes for their existing games as well. I see. With the board, you have to have some way to program it, to tell it what to do. Yes. So how did that come about, the framework that is used to control it? Yeah, so it's actually an interesting story because back then embedded control systems were very common. Anyone developing a thing that needed to be programmed would design some kind of embedded microcontroller onto the board. So they'd pick usually a RISC type of controller or maybe an x86 type of processor and stick it on the board. I didn't want to do that because I didn't know exactly what my machine was going to be like. So what I chose to do was add a USB slave device to the P-Rock board so that I could connect it to any kind of controller, whether that be a laptop, a desktop computer, or some kind of single board computer. At the time, computers like the BeagleBones were just starting to get popular single board computers. So the neat thing about that was no matter what you wanted to do, whether it was program new rule sets for an existing game We're going to develop a new game with low processing needs or high processing needs. You could connect to it whatever computer you wanted, whatever computer had enough power for you to run the type of software you needed. So developed the board, added the USB to it, connected it to a computer. It happened to be my desktop computer at the time just because it was sitting there. And I started obviously needing to write some simple device driver type code so I could connect to the board and configure it And then start twiddling driver bits or turning on coils or turning on lamps and those kind of things in a pinball machine. So originally it was all kind of hard-coded, very low-level driver work. And I was talking about it on the forums and I was showing people the progress. I'm sure I put out a couple of videos and some status updates. And a guy who lived in Atlanta, Georgia at the time just happened to be interested in a custom pinball project of his own. He was doing some research. He saw one of my posts or one of my videos and he contacted me to see what was going on or to see how he could get a hold of a board. It turns out his name was Adam Preble and he was a very accomplished software guy who saw what I was doing with my hard-coded, low-level hackery of code that would control this board. And he offered to help, basically to help structure the device driver and to structure a higher level framework around that code. That's awesome. Yeah, so we spent the next three or four or five months developing a more structured device driver that's now an open source project called LibPinProc, the library for the pinball controller called the PROC, LibPinProc. And he started developing on top of that a Python-based software framework to help with all the features in a pinball machine that you would need to basically develop a game. And that's now called PyProcGame, Python P-RockGame, PyProcGame. And that is basically the foundational framework that's used in a lot of the modern-day frameworks that people are using to write custom games. Yes. So Adam started with the core pieces, the things that needed really good performance and functionality. He developed this thing called a priority-based mode queue, so you could structure your game in subsets of logic, one to control like a multiball, one to control all your different modes, and you can put those together in a priority-based system so that it can properly respond to switch events and those kind of things. And I took the base of that and I was, the one machine we both had in common that we both owned at the time was a Judge Dredd. So I connected it to a Judge Dredd and I started writing a game using this Pi Proc game thing that Adam had created. And so to do a complete game I needed to add all sorts of functionality like ball trough management and tilt management and stuff to track the number of players in a game and all that stuff. So he gave me the core of that framework. I started adding pinball functionality to it. And fast forward about six months, we had a completely working custom rule set for Judge Dredd and a super feature-rich software framework that anyone with a P-Rock board could use to develop a game. Excellent. So do you still run the custom rule set today? Do you still have the Judge Dredd? I don't have the JudgeGrid anymore. I worked on it for, I don't know, about a year, but I moved on to other things. I wrote compatibility or functional game code for Stern machines to prove that would work. I did things with PinMame to make sure PinMame could control physical machines through the P-Rock board. I worked with Visual Pinball so that we could write games in PyProc game and have those connect to the Visual Pinball tables that people were developing. And I think at the time, or maybe they still do, have to write most of their games in Visual Basic for Visual Pinball. I'm pretty sure that's the case, yeah. So we wondered why people were struggling with Visual Pinball when they could use this higher-level scripting language that was much more user-friendly And that had the structure, the pinball structure that we put into the PyPROC game. So I helped to develop a bridge for that so you could use PyPROC game for those kind of things. And, of course, at the same time, I had day jobs, a series of day jobs that I was spending most of my time in. There was a lot going on. I don't have the Judge Dredd anymore. I got rid of it a while back. I actually paired my collection down from 11 machines to 3. Still have the original Theater of Magic. Still have the original Attack from Mars. And I also have a whitewater that I restored from basically a piece of junk to something that's pretty pretty. It's a cool machine. Very good. Those aren't the only games you have in your home, are they? Those actually are the only games. I used to have some of the machines that we work on now for our business, Multimorphic, and the P3 machine. But now all of those are at our factory, and we have them in a test lab and work on those during the day. And I go home at night and try not to work all night long. Understood. Okay. So how did the public receive the framework and the P-Rock when it came out? So it was a slow roll, mostly because the custom pinball community didn't exist at the time. It was just a few guys on a forum. I think it was rec.games.pinball at the time, RGP, just talking about possibilities. I think the first thing that happened to kind of create more awareness of it was a couple of Dutch guys got a hold of or saw the videos, saw the board, and ordered one to re-theme their brightest pinball. And today people know of them as Dutch Pinball. There was a guy named Kuhn who was a software developer and Barry who was a graphics guy who developed a lot of 2 and 3D animations and those kind of things. They got a hold of a P-Rock and Pipe Rock game and created an entire new rule set for Bride of Pinbot. It's now a popular project called Bride of Pinbot 2. But what's interesting about that is they developed or they created a video demonstration of what they've done. Barry was a video guy, so he packaged all their work into almost a promotional video for their game. And Adam and I were attending Pinball Expo that year. I want to say it was 2011, I think. So Pinball Expo in Chicago in 2011. And we got up there and we started presenting this super technical thing called the P-Rock Rock Board. And Adam was walking them through the, you know, the Pinball framework, the P-Rock Game framework, and explaining how to write code. And you look out there and there are all these bored, sleepy faces. And then we said, well, check this out. This is a video that one of our customers has put together. And we played this Brighter Pinball 2 video and the entire room lit up. And people were like, holy crap, that's awesome. It was super well produced and they were obviously doing some cool things with video and other things. And people at the time didn't realize you could customize a pinball game or at least not rewrite code for it in the way that they were doing it in the Bride of Pinball. So the room lit up. It got exciting. People had great questions after it. And I think you can actually dig up that seminar. It's on YouTube somewhere. Well, that's great. So then I know Multimorphic, you had pinballcontrollers.com. Yes. Did you get that started at that time? Yes. So because of the interest in the P-Rock board, I created a sole proprietorship at the time called pinballcontrollers.com. The only product at the beginning was the P-Rock board, and PyProcGame and the LibPinProc driver were not company products. Essentially, those were open-source things that we made available to everyone. So anyone could buy a board from us and then download the software from GitHub at the time, the repository, online. And go about it doing their thing. And then what was the impetus for making the P3 Rock? Okay, so the next step since I had the P-Rock board, which was the core piece that I needed to build a custom machine that I wanted to build, was that I needed a way to control coils and I needed a way to control lights. So the next thing I did was I designed those boards. So I designed a board called the PD-16 board, which is a PD stands for Power Driver, Power Driver 16. It's a small board that has 16 FETs on it and some control logic, and it can control up to 16 coils. And I designed that board in such a way that if you put a different type of FET on half of the board, you could use it as what's called a push-pull circuit. So you could supply current or you could sink current. And by populating half the board one way and half the board the other way, then instead of driving 16 devices like 16 coils, you could control a lamp matrix. So, for instance, you could have eight columns and eight rows, just like they have in a traditional Williams or Orlard Stern pinball machine to control lamps. So the P board had switch inputs and control circuitry to do all the low logic in a machine and we had this PD board to drive coils and the variant of that board we called it the PD to drive a Lant Matrix and that was essentially all we needed to have to control an entire pinball machine So at that point, I got with a hands-on kind of mechanical engineer type friend I had who was a guy I worked with at the time. And I said, we're ready. We're ready to develop. We're ready to build this custom machine that we wanted to do. The concept for this machine was that I wanted the central portion of the playfield to be essentially an LCD. I wanted real flippers, real bumpers, real slingshots, all that stuff, but I wanted the area just in front of the slingshots to be an LCD. And I wanted to develop physical elements, you know, traditional physical loops and targets and pop bumpers and all that stuff, and put them a little deeper into the play field. Remember, I'm coming from games like Attack from Mars and Medieval Madness, and even Theater of Magic has most of its elements. It's about two-thirds of the play field. So why do machines have this painted piece of wood in the lower portion that the ball rolls over as it gets to physical components when you could put a really cool dynamic canvas in there and draw graphics and basically take your display, take the scores and the instructional information and the pop-ups that happen when you shoot stuff and put them right in front of the player's eyes so that while they're playing the game they never need to look up. So that was the basic concept, and I was sitting there thinking, well, we now have these flat screen tablets and mobile phones and these things where you have a display and you can use your finger and touch points on the displays and interact with them. Well, holy crap, we're putting an LCD in a pinball machine and we have a physical pinball rolling over them. Why don't we do the same thing? So this sounds like a fun, simple idea, and it's very much not a simple idea. Obviously, you can't have a physical pinball. Well, being the input device onto a touchscreen LCD because it would break it. As soon as the ball touched the surface of the screen, the screen would stop working. I started thinking through how to solve that. There were a couple of ideas, but what I wound up doing was developing an infrared grid of light using transmitters and receivers along the edges of the screen in this interesting mess pattern to basically shine light across the playfield, across the top of this LCD. Have the physical pinball that is rolling around break combinations of beams of light, some from the left, some from the right, and use the data of which beams were broken to calculate a position of the ball. And if you again go back to YouTube and search early P3 concept videos from 2011, you'll see my first, call it a whitewood, because it was actually white, my first attempt at developing an infrared grid over top of an LCD and rolling a pinball around, drawing a, I think it was a red dot at the time in software to represent software's understanding of where it thought the pinball would be. And it's pretty cool because it actually, I mean it's not super, it's not even close to perfect, but what you can see is the red dot kind of jumps. Let's say you roll the physical pinball straight up the playfield right in the center of the playfield up on a vertical line. You would see this red dot move up the screen and kind of jump back and forth from the right to the left to the right to the left to the right to the left. And you could see that if you average the left and the right components of those dots, it would exactly match the line. The direction that the ball rolled up the screen. So it was this super cool and super basic proof of concept. That play field or that prototype had a, I believe it was a 17-inch screen in the middle of it, and it had two flippers. It didn't have slingshots. It didn't have anything else. It was just a very simple proof of concept. So then I got with less, and we started making it more complicated. A 17-inch screen is neat, but a pinball machine doesn't play like a pinball machine unless you have slingshots. So we were going to put these physical slingshots in, but 17-inch display, at least in the area we put it right in front of the flippers, blocks the mounting holes that you would need to mount traditional slingshots. So I went to Les and I said, you need to come up with a way to remotely mount actuators for slingshots. You need to physically somehow suspend them over the screen and figure out how to drive them without drilling a hole through the screen and without resting anything on the surface of the screen because that would block the light that we were shining across. He said, no, can't be done. There's no way. If you look at a coil, you look at the actuator, you look at all these mechanisms that they have in a slingshot, it's just too big. There's no way we could do that. We couldn't mount that such that it would exist over top of an area where a slingshot needs to be.