What's new
Pinball info

Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

In Progress Mishmash self build - let’s make a pinball machine

47427AEC-48BA-4953-80B3-6A766FC7437C.jpeg
After a lot of faff I’ve managed to get a program correctly reading the switch matrix . Needed to add some pull down resistors to the rows to keep them low unless pulled high by a closed switch on an active column when it strobes high.

There were a number of duff capacitors on the switches which caused me a bit of grief.

It’s reading quite fast but can speed it up, and also write a timer to stop multiple triggers / debounce etc. within a reasonable timescale. But need to have fast pop bumper reactions etc.
 
Totally lost it today. one of Clare’s cats who she moved in with me at Christmas has gone awol, spent many hours today searching under bushes and in the fields behind us. poor bugger, Mr. Bubbles is/was a right old character. 18, deaf as a post and on thyroid tabs, but still liked a good catty fight with any invading neighbours. I noticed he was a bit sluggish last two days (heat?). he was in last night but not around in the morning, which is not normal. I’ve even been over in the far corner of the farmers field where the foxes 🦊 play to see if i can spot any sort of sign he’s been taken. it’s the not knowing that’s the worse. Bloody cats have a habit of going away and hiding when their number is up.
 
Totally lost it today. one of Clare’s cats who she moved in with me at Christmas has gone awol, spent many hours today searching under bushes and in the fields behind us. poor bugger, Mr. Bubbles is/was a right old character. 18, deaf as a post and on thyroid tabs, but still liked a good catty fight with any invading neighbours. I noticed he was a bit sluggish last two days (heat?). he was in last night but not around in the morning, which is not normal. I’ve even been over in the far corner of the farmers field where the foxes 🦊 play to see if i can spot any sort of sign he’s been taken. it’s the not knowing that’s the worse. Bloody cats have a habit of going away and hiding when their number is up.
Good luck, pets get to you, it's what they do. You are right that cats disappear as they know their time is up, that, or chilling at a neighbor's house. Good luck. Fingers crossed
 
Totally lost it today. one of Clare’s cats who she moved in with me at Christmas has gone awol, spent many hours today searching under bushes and in the fields behind us. poor bugger, Mr. Bubbles is/was a right old character. 18, deaf as a post and on thyroid tabs, but still liked a good catty fight with any invading neighbours. I noticed he was a bit sluggish last two days (heat?). he was in last night but not around in the morning, which is not normal. I’ve even been over in the far corner of the farmers field where the foxes 🦊 play to see if i can spot any sort of sign he’s been taken. it’s the not knowing that’s the worse. Bloody cats have a habit of going away and hiding when their number is up.
Damn :( I know how it feels not knowing, best of luck and I hope you get some answers soon.
 
I have been poking around the internets to see if I can find a decent image of the EBC playfield. Found one but its not great. Can use it as a last resort - only really need the locations of the stuff (lamps etc etc)
Can make a template from that then take it from there :)
 
A bit of refinement on the switch matrix reading
CB7D5F93-40BE-42DE-B1D8-EA93143D0C34.jpeg
I’ve put in a debounce delay, currently fixed for all switches, but I guess I need it to be different, eg pop bumpers can trigger repeatedly very fast, but a rollover or target doesn’t need that speed

I’ve also run some tests to see how quickly the processor is reading the switches (without doing anything else). it’s around 7,000 times a second to read the whole 5x8 = 40 matrix.

I have simulated the system writing out to 4 8-bit, and reading in from 2 8-bit shift registers because that’s what i’ll need to be doing in a game to control the sounds and solenoids

I now need to get pen to paper and work out a data structure for each of the switches, eg for each switch in the matrix i’ll hold certain info, switch number, name, a function to run whenever that switch is activated in a game, debounce delay time, solenoid to fire (when in active game), sound to play, maybe default scoring points?, special switches such as tilt, slam, outhole need handling? maybe i can handle that in the functions . all needs designing out on paper

I also need to think about game modes, eg attract mode, game on, ball drain, tilt, slam etc.

Then need to handle ball in play and status of switches already hit and drop targets already down, maybe order they were hit, or an “in sequence” indicator. i’m probably going to leave some of that more advanced game play scoring and features until a lot later.

I’m away on holiday soon (c-19 tests for the kids today, so fingers crossed), so plenty of time to lie on a sunbed and have a good think about all of this.
 
I have been poking around the internets to see if I can find a decent image of the EBC playfield. Found one but its not great. Can use it as a last resort - only really need the locations of the stuff (lamps etc etc)
Can make a template from that then take it from there :)
Wow that’s amazing if you can.

That will get your name on the list of credits. 👍😀
 
A bit of refinement on the switch matrix reading
View attachment 143182
I’ve put in a debounce delay, currently fixed for all switches, but I guess I need it to be different, eg pop bumpers can trigger repeatedly very fast, but a rollover or target doesn’t need that speed

I’ve also run some tests to see how quickly the processor is reading the switches (without doing anything else). it’s around 7,000 times a second to read the whole 5x8 = 40 matrix.

I have simulated the system writing out to 4 8-bit, and reading in from 2 8-bit shift registers because that’s what i’ll need to be doing in a game to control the sounds and solenoids

I now need to get pen to paper and work out a data structure for each of the switches, eg for each switch in the matrix i’ll hold certain info, switch number, name, a function to run whenever that switch is activated in a game, debounce delay time, solenoid to fire (when in active game), sound to play, maybe default scoring points?, special switches such as tilt, slam, outhole need handling? maybe i can handle that in the functions . all needs designing out on paper

I also need to think about game modes, eg attract mode, game on, ball drain, tilt, slam etc.

Then need to handle ball in play and status of switches already hit and drop targets already down, maybe order they were hit, or an “in sequence” indicator. i’m probably going to leave some of that more advanced game play scoring and features until a lot later.

I’m away on holiday soon (c-19 tests for the kids today, so fingers crossed), so plenty of time to lie on a sunbed and have a good think about all of this.
Probably depends on how generic you want any system to be. (Ive given this a bit of thought albeit some time ago when I was pondering a UE4 pin)
 
Managed to get in a good bit of programming today. i’ve created a list of switches and designed some attributes for each of them
1B538DC6-84A9-461A-B816-6D2D85935BFF.jpeg


i’ve created the main program loop and started to implement the concepts of the machineState and gameState.
0986D0AC-AE3A-44C8-B78C-6B58FC27E810.jpeg



I’ve created each of the switch trigger procedures, ready to be populated with code
6CDE082C-49AF-4BDA-8A51-64FD3CCA7F32.jpeg

I’ve documented stuff
D636A2D7-721C-4A04-996F-68A90DB024C3.jpeg
and got a to do list started
877A9C5C-2A9E-422A-9E1B-6BE2772BDEEB.jpeg

There is major work ahead. I’ll do a bit more before my holiday……..
 
Awesome work!!!

It is called Pinball Operating System (POS) as thats what you keep calling it when debugging ?? ;)
 
C03C45D4-F1AD-4AF0-B7BE-3948AB8347AB.jpeg
Done the list of coils.
Once I get the cab to put the playfield in, I’ll wire up the cab switches. I need:
start button
tilt
slam tilt
left and right flippers

I’m not sure if I should wire the flippers into switch matrix, or direct wire flippers to the solenoids. more experiments to do. 😂
 
could you pull that data from a file ?
just thinking you could have an external tool that creates it - which would also provide a means to create the rules and such ?
of course such a tool *could* generate the header file for the project to include.
 
yes. i’ll drop those lists of switches and coils into a config file, so they are separated out.

similarly with rules - when i get there! no idea really on rules but i’ll start simple and then build up. rules i guess are about modes, hitting certain switches in any order or right order. maybe on a timer- and they affect scores, multipliers, bonuses, mode bonuses etc, lamps, sounds etc etc.
 
the cab arrived for this project:
F6D3FB17-3315-4EE7-9613-2E049B8C9A24.jpeg
I put some old legs on it.

A22B0A71-06CF-4DE3-A3C1-DB6D0EBD467A.jpeg
EF86BF7D-224E-43EB-B69A-48D268881D6D.jpeg
Cab had plenty of bits in it, but no coin door

BC9D81C4-5595-4052-A6F7-7BF9C94E7A0F.jpeg
Also psu module which is useful to me for this
CED51F82-0073-4834-9878-61FFE275333A.jpeg
all sorts of bit broken plastics and a load of bulbs and loose screws
6FE2AD3B-37DE-46A8-8CE2-3B96CB822DD8.jpeg
and, a playfield.

Now this gives me a bit of a quandary. Do I keep the cab and pf together or use the bally 8 ball champ with the cab?

I’m leaning now to keeping the operation thunder playfield. It’s in a bit of a state, parts raided and broken plastics, but it could be resurrected.

There is no backbox by the way.

What would you folks do?
 
the cab arrived for this project:
View attachment 143279
I put some old legs on it.

View attachment 143280
View attachment 143281
Cab had plenty of bits in it, but no coin door

View attachment 143282
Also psu module which is useful to me for this
View attachment 143283
all sorts of bit broken plastics and a load of bulbs and loose screws
View attachment 143284
and, a playfield.

Now this gives me a bit of a quandary. Do I keep the cab and pf together or use the bally 8 ball champ with the cab?

I’m leaning now to keeping the operation thunder playfield. It’s in a bit of a state, parts raided and broken plastics, but it could be resurrected.

There is no backbox by the way.

What would you folks do?
I'd watch with interest....;)
 
yes. i’ll drop those lists of switches and coils into a config file, so they are separated out.

similarly with rules - when i get there! no idea really on rules but i’ll start simple and then build up. rules i guess are about modes, hitting certain switches in any order or right order. maybe on a timer- and they affect scores, multipliers, bonuses, mode bonuses etc, lamps, sounds etc etc.
See what I would do.. is divide the rules up into sort of groups - with conditional ins and outs.

So for example the rollover lanes would be a group. When each switch is made the rollover group sets that input. When all 3 are made the output is to set the input on another group. Which would probably be the bonus multiplier or whatever.
The 3 inputs could be any 3 switches on the playfield, but the group just needs to know what numbers they are so when they are closed it knows. The names would really be for making it easier to understand when creating the group. If that makes sense.

Of course this is possibly a little OTT - depends on how flexible/generic you want to make it - as I said I have thought about all this before cos I was going to make a one myself in unreal :)
If it was done in unreal of course you could also edit all these rules etc directly in the UE editor. If you wanted to do that here you would probably need to create a windows program that ultimately generated some kind of script file to do it all.

Feel free to ignore me - I'm waffling a bit.. :)
 
See what I would do.. is divide the rules up into sort of groups - with conditional ins and outs.

So for example the rollover lanes would be a group. When each switch is made the rollover group sets that input. When all 3 are made the output is to set the input on another group. Which would probably be the bonus multiplier or whatever.
The 3 inputs could be any 3 switches on the playfield, but the group just needs to know what numbers they are so when they are closed it knows. The names would really be for making it easier to understand when creating the group. If that makes sense.

Of course this is possibly a little OTT - depends on how flexible/generic you want to make it - as I said I have thought about all this before cos I was going to make a one myself in unreal :)
If it was done in unreal of course you could also edit all these rules etc directly in the UE editor. If you wanted to do that here you would probably need to create a windows program that ultimately generated some kind of script file to do it all.

Feel free to ignore me - I'm waffling a bit.. :)
 
With regard to your cabinet quandry - I would get rid of that stern lightning to make some space and fix up the op thunder :)
 
I'd probably go with the OpThunder PF in it's cab - you know it'll fit on it's mounts and into the cab with no additional work required.
 
Good idea. so at low level read the switches and do any basic operations. ie fire solenoids, start a game, add a player, end a ball/game, tilt, light lamps, play basic sounds etc

then go onto a set of configurable rules to check across multiple switches, keeping track of counters modes etc and then doing the more complex stuff

using the arduino ide it is very very easy to drop things into config files. bit like c programming, not that i’ve done much of that.
 
The Operation Thunder cabinet has a much steeper angle on the glass than the playfield, to accommodate the ramp, spinning dome, etc. Eight Ball Champ wouldn't have needed the extra clearance, and mounting it to match the glass would make it incredibly steep.

Some of the 'modern' games with steeper glass would allow the glass to slip out of its own accord once the front moulding was removed, when the channels were new and unworn anyway.

Incidentally, the depth of Gottlieb cabinets required slightly shorter legs to meet the perceived 'correct' height for the player. At a show once, a non-pinball-specialist exhibitor had a Gilligans' Island and a Gottlieb game, maybe an OT. They'd put the 'other' legs on each, and the difference between the two side by side was immediately noticeable. Especially since the Gilligans was abandoned in-play with a ball stuck.
 
Last edited:
Ha, ha this ones got bally legs on it 😂😂😂😂

I think the 8 ballC pf will fit and look ok, even though it doesn’t need the height space, but again my “save, reuse, restore” mantra is saying keep the OT pf in the OT cab!

I’m going to have a look at the OT manual and schematics and see how it looks as a candidate for a homebrew project.

btw. thanks to @MartinY for this cab
 
My OT came with the longer legs, I loved the height but everyone else moaned so fitted the correct shorter legs on😔
Nice solid cab and playfield😎
 
Some thoughts from the posts so far:

Definitely use/add flipper matrix switches. Makes things alot more flexible for rules, think lane change for rollovers and also using a flipper button held in during a shot made makes for good additional rules or secrets. Pretty easy to make any std flipper mech 'fliptronic' when you use low voltage button switches to

I fancied seeing what could be done with the 8 ball champ playfield, but using a gottlieb cab is certainly going to require some mods. Using a gottlieb base as the project is also going to require you to think in a 'gottlieb' way for game play logic. They still use relays for various game state things

In terms of controlling a set of lane rollovers i would create a method for the rules of the feature, or a 'mode' if you like. Then have an argument that accepts an id for the rollover position. Your switch handlers then call this method with a fixed id. The logic inside the lane rollovers method keeps track of all the rollover switches and updates variables to know when they are all lit etc. Then performs some other events.

Also, maybe look to use structures. As you are using the arduino ide you are basically wiriting in C++. Also use tabs in the arduino ide and split up your code into logic chunks, will help you later on ;) And also maybe look to create libraries for your code so that you can keep the repetition down and it does help alot with organisation. A class for each type of object is what i did when using only arduinos to run a game. ie a switch class, a solenoid class, a sound class, a display class etc, then create instances in the main code for what you need to use.
 
Last edited:
Back
Top Bottom