As a followup to my previous post, I went in to make some adjustments to the positioning and spotted a tiiiny little problem.
Yeah. Not going to clear the cabinet.
The problem is a number of layers deep. First, I can’t slide the bracket back any more, and even if I could, moving it enough to clear the cabinet would break alignment with the kicker assembly. This is because stern actually mounts this BEHIND the kicker, which clearly isn’t possible in RG because of the trough kicker.
My solution here is to replace the whole trough assembly. A quick set of measurements indicate I can do a complete swap of this unit with the newer Stern assembly with only minor modification to the PF. So that’s on order now… As a bonus I now have a bit more flexibility in the ball count; something I was struggling with before (I was planning on using the drain as a hold for the fourth ball hold which is a logic mess). The assembly can easily be expanded to something insane like 6 balls, so I can have some fun there. The only real annoyance is going to be getting the optos working.
Rollergames didn’t ship with an auto-launch. This is a bit limiting, in that all multiball events must come from locks, and ball saves require a manual “plunge of shame”. While it’s not something I can’t work around, I like auto launches so why not add one?
The coil I chose is very anemic for this playfield, and barely gets it to the mouth of the ramp. Some of this may be due to installation (alignment is a hair off as you can see from the second shot), so I’ll likely replace it with something beefier soon.
I’ll need to order a new switch and bracket for the shooter lane; I thought I could repurpose the old Williams one but it’s too wide; and the switch wire isn’t long enough to work in the new position. Oh well, I hadn’t coded it in yet anyway.
In other news, I ordered a new GI relay to replace the one that worked a whopping two times before never again gracing me with it’s presence. I popped the board out today to install the new one and found two very bad solder joints that just needed a bit of love. On the bright side I’ve not got a spare relay.
As someone with absolutely no experience in pinball design, a lot the design work for the rules is simply trial and error. Often the quickest way to determine if a rule or event works is by simply doing it and throwing a ball into play. However this produces some interesting later stage design challenges that often push you to be a bit more creative.
One thing I noticed early on after building the “Battleship” event was that I felt this obligation to use the drop targets for all “Destruction” events. I wanted that comfortable consistency. However, I quickly noticed that this made the game very boring and one dimensional. It rapidly became Zone of the Drop Targets.
Every time I approach the table now, I have to constantly reset my brain out of this line of thinking to really start doing anything interesting with the table. I’m actually quite happy with the PF in this respect, as Rollergames was never really an event based game. The high level goal was basically just to grab multiball and rack up jackpots. This prevents me from walking in with any pre-conceived notions of how the table should play. Obviously I still have to follow some of the table’s design as a matter of course; Mutliball locks on the right through the ramp, etc.
Well, I didn’t originally intend on going with a Zone of the Enders theme, it just kind of happened. A recent post about ZOE3 being put on hold reminded me about the game, and on a whim I ripped some sounds out of it. Two hours later I was in love.
New things in this video are some higher level things like overarching events. The battleship event takes over the normal Drop target behaviors, and has first stab at handling any switch events before they fall through to the normal event queue.
You’ll note a few bugs here (Final multiball lock) and some old sounds that are now out of place. But there’s still much work to do.
You don’t appreciate just how complex a pinball machine is until you write one. Even something as simple as powering up the machine requires event handling code.
For example, if the previous player lost (or powered the machine down) while balls were locked, we need to get those into the trough to start. There could also be a ball stuck in the second stage ball save, or the pit. Maybe one in all three!
This last state ensures we can’t just ‘Fire all the solenoids!’ as we’d quickly find ourselves with one less fuse on our hands; and for good reason. All three of those solenoids are 50v and even if the fuse was upgraded for it, the power supply would likely choke on the inrush. So we need to separate the events with timers. Not a huge deal… But we also have to consider the mutiball locks are a closed loop, so we need to kick out the diverter at the right time as well.
After solving these problems, I made sure the game state is self contained. This means we can switch in and out of the game state as needed. The idea is when we drain, we’ll hop into a “Collect bonus” state, then launch back into the game state again. The fun complexity here is monitoring and remembering how many balls counts as “drained”, especially once multiple players become involved.
After quickly realizing how much I hate writing tons of giant arrays by hand, I took some time out to write an animation editor.
The goal was simple, write a quick tool to write out lamp state buffers into a hard file. These are then loaded at runtime and can be played at any time.
Overall it was pretty straightforward. The perf of this tool is pretty damn awful and it’s very one-off, but it gets the job done. One thing I did notice is that transparent buttons load VERY slowly, which is kind of annoying since I use transparency to indicate the animation has no preference (Used for localization animations)
Importing and running the animations was dead simple with C#’s DataContractSerializer, it doesn’t even require the target class be the same code as long as the data structures match.
To say that I was hesitant to plug that toroid in would be a gross understatement. There are a lot of things that can go horribly wrong, and while I did have the foresight to fuse all the outputs, there’s still the chance of something going wrong upstream.
So after many confusing hours of confusing results with a multimeter due to the output caps, I finally worked up the guts to power it all on. I actually went as far as to set it to power on with a 10 second delay, then only be on for one second. Heh.
No disasters. There was a new solenoid lock bug, but that was easily sorted. Beyond that the GI relay popped during testing, everything else worked fine. Expect a video soon.
Soldered up the board with caution, but it appears that the whole thing works fine. Currently I’m testing at 12v and the only problem I’ve noticed is that the new ATX power supply I’m using does a poor job of handling large current spikes. Tests have gone very well, no signs of back EMF or noise bleeding into the IO board or causing oddities.
Next I’ll be wiring it up for 24/50v testing and, assuming nothing goes hilariously wrong, it’ll be time to start seriously looking at the graphics and software. The hardware is basically feature complete beyond replacing a few temporary off the shelf parts and building some wiring harnesses. I still might need to do another run of the IO board to solve the cabinet switch issues, but I’m still hoping I can get away with some creative wiring.
I spent some time last night doing a quick test by populating one row and firing against 12v. Initial tests look grim until I noticed the test area was at the end of the shift register chain and I only installed the relevant one, meaning the data pin was never getting fed.
Then I later found that I hard coded the number of registers to 2 instead of using the constant I wrote for this very reason, meaning I was constantly trying to populate a 32 bit data pool with 16 bits of data. Went well obviously.
Final tests happened around 2am and look good. At 12v pop bumpers fired (though were quite anemic which was a bit concerning). Next step is to introduce the high voltage 24/50v power supply, once I’m confident the board itself is stable. Luckily the board hasn’t yet exhibited any signs of noise issues, so the grounding might actually be adequate this time.