My Table Template for Original Tables

Viewing 20 posts - 1 through 20 (of 41 total)
  • Author
    Posts
  • #86515
    LynnInDenver
    Participant
      @lynnindenver
      Member

      I’m more looking for input from the more experienced programmers here. I decided I wanted a table “frame” on which I could actually build a table, without having to worry about setting up the player counting and ball tracking on later. Here’s what I’ve put on the default “template” provided with VPX 10.5:

      Rudimentary Scoring. I know this I really do need to clean up a bit, putting the math part into a more proper subroutine so I just have one call when I add to score. Scoring values are controlled through a set of constants at the top of the script.

      Player Count Tracking, with Freeplay option. Basically, I can add credits, or set to freeplay in the script, and actually run a real game.

      Ball Save and Extra Ball. A timer on the table controls the time of the ball save, and currently I can use the right Magnasave to add extra balls for testing.

      Test Mode. More or less simulates the original template behavior, kicks a ball out, lets you flip, doesn’t track ball or player counts.

      Autoplunge of multiball. Right now, just an added plunger overlaid on the manual plunger, I haven’t figured out how to have manual mechanical control and multiball autofire off one plunger. I’ve also got the left Magnasave set to trigger the autofire plunger for testing.

      I’m curious if there’s any improvements/cleanups I can make to this table framework before I make this my template for building brand new tables off of in the future. Plus, who knows, it might prove useful to others.

      Creator of the first PinupPlayer PostDMD mods for VPX - PostDMD for Masters of the Universe VPX and Jaws VPX.
      Head Proprietor of Pisces Pinball, a VPX table developer.
      Lead Technician of MC Chase Amusements, a private arcade in our home basement.

      Attachments:
      #86522
      gtxjoe
      Participant
        @gtxjoe
        Member

        Take a look at JP’s Ghostbuster Slimer table for more ideas.

        The top half of the script is essentially a template with tons of additional support:  Tilt, High Score, Instant Info, Music, Lighting, Flasher effects, Multiball, Bonus scoring, Jackpot, Modes, Wizard Mode, Attract mode

         

        1 user thanked author for this post.
        #86690
        TerryRed
        Moderator
          @terryred
          MemberContributorModerator

          Look into ScottyWic’s “Orbital Pinball” framework template. I’m not sure if he posted it here yet, but the first version is available.

          1 user thanked author for this post.
          #86713
          LynnInDenver
          Participant
            @lynnindenver
            Member

            gtxjoe: I pulled the attract mode out of that table. Looks fairly cut and dried. I’m not finding much else of use without learning more about someone else’s coding style.

            TerryRed: I was looking for that and don’t see where he might have posted it. Certainly not any of the regular places. Looks like it’s only really available in his first Stranger Things table, so I might just have to message him and see where things are at.

            In other news, I’ve implemented a bonus system (just to have one in place), with multiplier (light the three standup targets to increase) cleaned up the scoring and update mechanisms a bit, added a “reset the lights” between players, and even got an extra ball earner (walk the top rollovers) just because. The one thing I’m actually having trouble on is getting a delay added on the “add the bonus to score” stepping at the end of the ball (like the old Gottlieb Sysy1 machines). I can either add it all in one go, or the resulting timer doesn’t delay start of next ball, which does funky things to the bonus and cuts the ball save short. The new file is attached. It actually feels like it could be a playable table, albeit there’s some really, really challenging things to collect because of the layout…

            Creator of the first PinupPlayer PostDMD mods for VPX - PostDMD for Masters of the Universe VPX and Jaws VPX.
            Head Proprietor of Pisces Pinball, a VPX table developer.
            Lead Technician of MC Chase Amusements, a private arcade in our home basement.

            Attachments:
            #86727
            shiva
            Participant
              @shiva
              Member

              If you like, I can always send you a copy of shivaengine 4 for vpx. It’s unfinished as there were a lot more features and upgrades needed to be added, but it’s fully functioning except for maybe the odd minor bug here and there. It’s mostly engine code and not too much hit code or exclusive code for a single table. It’s a very different structure scriptwise than anything else, but there are several things there that might help you without having to go through tons of table specific coding, it’s mostly engine.

              _____________________________________

              Latest projects and rants at My Facebook Page
              _____________________________________
              Latest Project: fpxEngine Table Builder

              #86732
              LynnInDenver
              Participant
                @lynnindenver
                Member

                I’d definitely be interested in taking a look at that, thanks. :yes:

                Creator of the first PinupPlayer PostDMD mods for VPX - PostDMD for Masters of the Universe VPX and Jaws VPX.
                Head Proprietor of Pisces Pinball, a VPX table developer.
                Lead Technician of MC Chase Amusements, a private arcade in our home basement.

                #86804
                shiva
                Participant
                  @shiva
                  Member

                  If you dont mind, I will send it tomorrow, or as soon as I have the proper internet access to access my website.

                  _____________________________________

                  Latest projects and rants at My Facebook Page
                  _____________________________________
                  Latest Project: fpxEngine Table Builder

                  1 user thanked author for this post.
                  #86816
                  LynnInDenver
                  Participant
                    @lynnindenver
                    Member

                    Yeah, that should work fine. I won’t have time to even fiddle with that tonight anyway.

                    Creator of the first PinupPlayer PostDMD mods for VPX - PostDMD for Masters of the Universe VPX and Jaws VPX.
                    Head Proprietor of Pisces Pinball, a VPX table developer.
                    Lead Technician of MC Chase Amusements, a private arcade in our home basement.

                    #86965
                    LynnInDenver
                    Participant
                      @lynnindenver
                      Member

                      OK, so I’ll admit to being more than a little stumped as to how to use Timers to create a bonus countdown like, say, Gottlieb’s Solar Ride table. So far, all my efforts have resulted in, at best, counting the bonus… but for all intents and purposes it gets 100% added as a lump sum value, after waiting for whatever I set the timer for, no updates to lights or score displays during the individual steps. At worst, it’s still trying to add up the bonus while it loads the next ball, resulting in serious shenanigans with the bonus system, particularly when I’m trying to get through multiple timers. (My tiny epic kingdom for a proper delay, I know it’s a state machine and doesn’t really do those.) The intended operation is like this:

                      Take the Bonus Count. Each “level” of the bonus count, count it each time for the multiplier (*beep beep beep beep* for, say, 4X, quarter second between beeps and scores, updates scoreboard). Switch that light off. Move to the next lower level. Wait a half second. Repeat. Once Bonus Count has hit zero, reset back to one, kick fresh ball into shooter lane or end game.

                      I’m probably missing something pretty important in order to get this to work correctly.

                      Sub UpdateScore
                      ScoreText1.Text = Score(1)
                      ScoreText2.Text = Score(2)
                      ScoreText3.Text = Score(3)
                      ScoreText4.Text = Score(4)
                      CreditText.Text = Credits
                      BallText.Text = CurrentBall
                      ExtraBallCountText.Text = ExtraBall
                      PlayerCountText.Text = PlayerCount
                      If BonusCount => 1 then LM1.state = 1 Else LM1.state = 0: End If
                      If BonusCount => 2 then LM2.state = 1 Else LM2.state = 0: End If
                      If BonusCount => 3 then LM3.state = 1 Else LM3.state = 0: End If
                      If BonusCount => 4 then LM4.state = 1 Else LM4.state = 0: End If
                      If BonusCount => 5 then LM5.state = 1 Else LM5.state = 0: End If
                      If BonusCount => 6 then LM6.state = 1 Else LM6.state = 0: End If
                      If BonusCount => 7 then LM7.state = 1 Else LM7.state = 0: End If
                      If BonusCount => 8 then LM8.state = 1 Else LM8.state = 0: End If
                      If BonusCount => 9 then LM9.state = 1 Else LM9.state = 0: End If
                      If BonusCount => 10 then LM10.state = 1 Else LM10.state = 0: End If
                      If BonusCount => 11 then LM11.state = 1 Else LM11.state = 0: End If
                      If BonusCount => 12 then LM12.state = 1 Else LM12.state = 0: End If
                      If BonusCount => 13 then LM13.state = 1 Else LM13.state = 0: End If
                      If BonusCount => 14 then LM14.state = 1 Else LM14.state = 0: End If
                      If BonusCount => 15 then LM15.state = 1 Else LM15.state = 0: End If
                      If BonusCount => 16 then LM16.state = 1 Else LM16.state = 0: End If
                      If L11.state + l12.state + l13.state = 3 then BonusMultiplier = BonusMultiplier + 1:L11.state = 0:L12.state = 0:l13.state = 0:End If
                      If BonusMultiplier =>2 then LBonus2.state = 1
                      If BonusMultiplier =>3 then LBonus3.state = 1
                      If BonusMultiplier =>4 then LBonus4.state = 1
                      If BonusMultiplier =>5 then LBonus5.state = 1
                      If ExtraBall => 1 then ShootAgainLight.state = 1:End If
                      If BallSaveActive = 1 then ShootAgainLight.state = 2:End If
                      End Sub

                      Sub Drain_Hit()
                      PlaySound “drain”,0,1,AudioPan(Drain),0.25,0,0,1,AudioFade(Drain)
                      Drain.DestroyBall
                      BIP = BIP – 1
                      If BIP = 0 then
                      If TestMode = False Then
                      If BallSaveActive = 0 Then
                      Me.TimerInterval=750
                      Me.TimerEnabled = True
                      End If
                      End If
                      UpdateScore
                      End If
                      End Sub

                      Sub Drain_Timer()
                      For ii = 1 to BonusCount
                      For i = 1 to BonusMultiplier
                      Me.TimerInterval = 400
                      AddScore(ScoreBonus):UpdateScore
                      Next
                      Me.TimerInterval = 800
                      BonusCount = BonusCount – 1:UpdateScore
                      Next
                      Me.TimerEnabled = False
                      Call BonusEnded
                      End Sub

                      Sub BonusEnded
                      If ExtraBall = 0 Then
                      ActivePlayer = ActivePlayer + 1
                      If ActivePlayer > PlayerCount Then ActivePlayer = 1:CurrentBall = CurrentBall + 1: End If
                      If CurrentBall > GameBalls Then Game_Over = True:CurrentBall = 0:PlayerCount = 0:ActivePlayer = 0:FirstSwitchHit = 0:StartAttractMode 1: End If
                      If ActivePlayer = 0 Then PlayerActive1.State = 0: PlayerActive2.State = 0: PlayerActive3.State = 0: PlayerActive4.State = 0:End If
                      If ActivePlayer = 1 Then PlayerActive1.State = 1: PlayerActive2.State = 0: PlayerActive3.State = 0: PlayerActive4.State = 0:End If
                      If ActivePlayer = 2 Then PlayerActive1.State = 0: PlayerActive2.State = 1: PlayerActive3.State = 0: PlayerActive4.State = 0:End If
                      If ActivePlayer = 3 Then PlayerActive1.State = 0: PlayerActive2.State = 0: PlayerActive3.State = 1: PlayerActive4.State = 0:End If
                      If ActivePlayer = 4 Then PlayerActive1.State = 0: PlayerActive2.State = 0: PlayerActive3.State = 0: PlayerActive4.State = 1:End If
                      Else ExtraBall = ExtraBall – 1: BallSaveActive = 0
                      End If
                      ResetMatrixLights
                      BonusCount = 1
                      BonusMultiplier = 1
                      l6.state = 1
                      If Game_Over = False Then
                      ‘Plunger.CreateBall
                      BallRelease.CreateBall
                      BallRelease.Kick 90, 7
                      PlaySound SoundFX(“ShooterLaneKickoutt”,DOFContactors), 0,1,AudioPan(BallRelease),0.25,0,0,1,AudioFade(BallRelease)
                      BIP = BIP + 1
                      If BallSaveActive = 0 then BallSaveTimer.Enabled = True : ShootAgainLight.State = 2:BallSaveActive = 1 else BallSaveActive = 0:ShootAgainLight.state = 0: End If
                      End If
                      UpdateScore
                      End Sub

                      Sub AddScore(ScoreValue)
                      Score(ActivePlayer) = Score(ActivePlayer) + ScoreValue
                      FirstSwitchHit = 1
                      UpdateScore
                      End Sub

                      Creator of the first PinupPlayer PostDMD mods for VPX - PostDMD for Masters of the Universe VPX and Jaws VPX.
                      Head Proprietor of Pisces Pinball, a VPX table developer.
                      Lead Technician of MC Chase Amusements, a private arcade in our home basement.

                      #86968
                      BorgDog
                      Participant
                        @borgdog
                        MemberContributorvip

                        sounds like a lot of em tables bonus count is what you are looking for.  check out some of loserman’s em tables to see how he does it, or check out my Gemini table (has my more recent way of doing it that I like better than my older em tables)

                        1 user thanked author for this post.
                        #86970
                        LynnInDenver
                        Participant
                          @lynnindenver
                          Member

                          Thanks, Borg, that did the trick! :good: Granted, I just looked at yours and basically rewrote the code to match my own setup, but I’ve now got a fully and correctly functional EM/Early Gottlieb SS style bonus countdown functioning. :yahoo:

                          Latest version is now attached.

                          The last thing I will probably be adding is going to need to be the tilt functionality.

                          Creator of the first PinupPlayer PostDMD mods for VPX - PostDMD for Masters of the Universe VPX and Jaws VPX.
                          Head Proprietor of Pisces Pinball, a VPX table developer.
                          Lead Technician of MC Chase Amusements, a private arcade in our home basement.

                          Attachments:
                          #86976
                          shiva
                          Participant
                            @shiva
                            Member

                            Here you go. Open to anyone to use if they need it. A project just to see what VPX was about, but decided to stick with FP for my tables. Had to remove a couple things, and did a rough and dirty job of changing the lighting and the glow of the lights as my settings were customized to the table graphic I had. I swapped the pf with my Playboy one.

                            This was me just experimenting with things, so it’s not a normal way, but the concepts should be understandable as I tend to do things the exact same way as much as possible. It’s a decent template, pretty feature loaded already, maybe someone can give it some love and finish it off.

                            http://shiva.pinballnirvana.com/uploads/vpxTemplate.zip

                            _____________________________________

                            Latest projects and rants at My Facebook Page
                            _____________________________________
                            Latest Project: fpxEngine Table Builder

                            #87060
                            LynnInDenver
                            Participant
                              @lynnindenver
                              Member

                              Thanks for posting it, Shiva. I’ll have to dig into that one as well.

                              I might be spending some time cleaning up my existing code before I look at the next “feature” to implement.

                              Creator of the first PinupPlayer PostDMD mods for VPX - PostDMD for Masters of the Universe VPX and Jaws VPX.
                              Head Proprietor of Pisces Pinball, a VPX table developer.
                              Lead Technician of MC Chase Amusements, a private arcade in our home basement.

                              #87225
                              LynnInDenver
                              Participant
                                @lynnindenver
                                Member

                                So I’ve been a reasonably busy bee. Got a drop reset working that isn’t the “reset the individual five seconds after dropping”, that adds one to the kickback when all three are dropped, then the drops reset.

                                Yes, I now have a left lane kickback installed. Default for each ball is kickback is already activated. So the table now has three plungers in it. If I need one for each outlane, I can always duplicate the objects and scripting. I also added some sounds (credited in the script). Rollover stars are now in the left passage, and are activated with the bonus multipliers. And the apron cards (with “for position only” textures) will rotate depending on Free Play and Test Mode (for the moment) being set to true.

                                Creator of the first PinupPlayer PostDMD mods for VPX - PostDMD for Masters of the Universe VPX and Jaws VPX.
                                Head Proprietor of Pisces Pinball, a VPX table developer.
                                Lead Technician of MC Chase Amusements, a private arcade in our home basement.

                                Attachments:
                                #87232
                                BorgDog
                                Participant
                                  @borgdog
                                  MemberContributorvip

                                  just took a quick peak at the frame, seems to be coming along.  I didn’t see anything that jumped out at me as multiball handling?

                                  also, even though we are just playing in virtual when I make tables, original or recreations, I try to make them so they act like real tables and could be built as real tables.  One of the big parts of that I jokingly call “save the balls!”, and is basically no destroying of balls, no magic holes where it disappears and reappears somewhere else unless that can actually be accomplished in the real world by subways, or whatever.  the first part of that is setting up a trough system in the table and only creating balls at table init.  just a thought.

                                  #87238
                                  LynnInDenver
                                  Participant
                                    @lynnindenver
                                    Member

                                    Yeah, I’ve just been working at getting other things handled. I’m not sure I’m going to go so far (yet) as to set up a proper trough. But I take your point with that, so far I’m working to maintain things within limits of what can be done normally on a real table, even if I’m not actually moving hidden balls under the apron. Although, I’ve got ideas for a future original table with a multiball mode where I’ll want to generate five balls of five different colors (mix of Sentai and Voltron tropes), which might be doable in a real table but would be a colossal, complicated and expensive pain of a trough, subway, vuk and sensor system to actually implement.

                                    Regarding multiball, I am still using the template “multiball”, although I’ve deliberately limited it to five balls with some extra logic. Partly because the table will crash if it generates a sixth ball, which appears to be related to the ball shadow handling. I may fiddle with that to see if I can squeeze a sixth ball out of it.

                                    In the next couple of days, I will probably be looking at creating a captive ball assembly somewhere on the table. I might have to move the multiball kicker over and edit the surroundings to make room for it.

                                    Creator of the first PinupPlayer PostDMD mods for VPX - PostDMD for Masters of the Universe VPX and Jaws VPX.
                                    Head Proprietor of Pisces Pinball, a VPX table developer.
                                    Lead Technician of MC Chase Amusements, a private arcade in our home basement.

                                    #87354
                                    LynnInDenver
                                    Participant
                                      @lynnindenver
                                      Member

                                      OK, got the captive ball installed today (installed in place of the far left bumper), all that was an issue was tweaking position because I should add a “clear the Extra Ball variable” to the game start script. It does work, but it reminds me of my difficulty hitting shots precisely, but I can hit it and it adds an extra ball with every (good) hit. I also fiddled around with decals for lighting inserts (thanks Shiva and scottywic) and meddled a bit in Materials land. I also found I had some bugs in my test mode code, and fixing that I introduced (and fixed) a ball count issue.

                                      I think I know what my next task should be… and that’s setting up a B2S on my frame.

                                      Creator of the first PinupPlayer PostDMD mods for VPX - PostDMD for Masters of the Universe VPX and Jaws VPX.
                                      Head Proprietor of Pisces Pinball, a VPX table developer.
                                      Lead Technician of MC Chase Amusements, a private arcade in our home basement.

                                      Attachments:
                                      #87361
                                      shiva
                                      Participant
                                        @shiva
                                        Member

                                        nice. looks like I have a little time to play the latest version, so see what you have. BTW the engine is part of the shivaEngine series, so there’s a lot of things in there like ball to ball player memory, and also features like Bonus held over and bonus collect in case you decide to do that. It also has a sound system set up for both EM and SS type games, as the engine can be used for pretty much any game from 1960’s EM up to System 11. If you have any problems understanding the code just ask (some things were removed like Multiball to be rewritten, other things like the Musicset feature were just put in roughly and is non functional) It’s still pretty damn powerful, maybe a bit too much, but certainly good enough to learn from and take bits of code as you need it.

                                        _____________________________________

                                        Latest projects and rants at My Facebook Page
                                        _____________________________________
                                        Latest Project: fpxEngine Table Builder

                                        #87363
                                        LynnInDenver
                                        Participant
                                          @lynnindenver
                                          Member

                                          I’ll have to tuck into your engine template here sometime this week; various memory functions are something I’ll need to think about in terms of what I’ll need for most tables.

                                          I also have to think about whether or not I’m going to try to bake in UltraDMD and PUP features, or leave those for when I tackle actual table builds.

                                          Creator of the first PinupPlayer PostDMD mods for VPX - PostDMD for Masters of the Universe VPX and Jaws VPX.
                                          Head Proprietor of Pisces Pinball, a VPX table developer.
                                          Lead Technician of MC Chase Amusements, a private arcade in our home basement.

                                          #87404
                                          shiva
                                          Participant
                                            @shiva
                                            Member

                                            Yeah good. It always screws up beginning coders, but this system is very simple.Most coders make this far more complicated than is needed, mine just uses light state. It takes a snapshot of which lights are on/off/blinking that you define using Set MemorySlot(x) and has 3 subroutines. MemorySave() takes the snapshot (like at the drain before the bonus countdown starts, MemoryLoad() will reload the lights (like at the start of a new ball) and MemoryReset() clears out all lights for each player. In my template, I just have the center targets done, they will remember the light state from the previous ball. Define each light you want to store the memory like this

                                             Set MemorySlot(1)=LightCTarget1
                                            Set MemorySlot(2)=LightCTarget2
                                            Set MemorySlot(3)=LightCTarget3
                                            Set MemorySlot(4)=LightCTarget4

                                            Now all you have to do is add the code for what the lights do depending on their state in the new ball subroutine. (which I never did yet…oops)  I’ve been using this for 16 years, once in it’s pretty much foolproof, hasn’t messed up once.

                                            Here’s a copy of the complete code

                                            ' *******************************************************
                                            ' ***                    Player Memory by shiva                               ***
                                            ' *******************************************************

                                            ' here's where you set the lights you want for Memory feature. You can have up to 99 lights, as it's preset
                                            ' in the engine.. Will Handle both LightStateOn and LightStateFlashing as well.

                                            Dim slot 'Purely for Looping purposes (unless you like to type a lot...)
                                            slot=99 'should be the same number as values for KeyMemorySlot and last value in KeyMemory
                                            'variable to set lights to memory, make sure the number matches with the last number in the Set MemorySlot code
                                            Dim MemorySlot(99)
                                            ' variable matched to KeyMemorySlot. First value=amount of players, the second should match KeyMemorySlot
                                            Dim Memory(4,99)

                                            ' Save Memory states
                                            Sub MemorySave()
                                            dim p
                                            for p = 1 to Slot
                                            On Error Resume Next
                                            Select Case Player
                                            Case 1
                                            if MemorySlot(p).State=0 Then Memory(1,(p)) = 0
                                            if MemorySlot(p).State=1 Then Memory(1,(p)) = 1
                                            if MemorySlot(p).State=2 Then Memory(1,(p)) = 2
                                            Case 2
                                            if MemorySlot(p).State=0 Then Memory(2,(p)) = 0
                                            if MemorySlot(p).State=1 Then Memory(2,(p)) = 1
                                            if MemorySlot(p).State=2 Then Memory(2,(p)) = 2
                                            Case 3
                                            if MemorySlot(p).State=0 Then Memory(3,(p)) = 0
                                            if MemorySlot(p).State=1 Then Memory(3,(p)) = 1
                                            if MemorySlot(p).State=2 Then Memory(3,(p)) = 2
                                            Case 4
                                            if MemorySlot(p).State=0 Then Memory(4,(p)) = 0
                                            if MemorySlot(p).State=1 Then Memory(4,(p)) = 1
                                            if MemorySlot(p).State=2 Then Memory(4,(p)) = 2
                                            End Select
                                            next
                                            end sub

                                            ' Load Memory states
                                            sub MemoryLoad()
                                            dim p
                                            for p = 1 to slot
                                            On Error Resume Next
                                            Select Case Player
                                            Case 1
                                            if Memory(1,(p)) = 0 then MemorySlot(p).State=0:end if
                                            if Memory(1,(p)) = 1 then MemorySlot(p).State=1:end if
                                            if Memory(1,(p)) = 2 then MemorySlot(p).State=2:end if
                                            Case 2
                                            if Memory(2,(p)) = 0 then MemorySlot(p).State=0:end if
                                            if Memory(2,(p)) = 1 then MemorySlot(p).State=1:end if
                                            if Memory(2,(p)) = 2 then MemorySlot(p).State=2:end if
                                            Case 3
                                            if Memory(3,(p)) = 0 then MemorySlot(p).State=0:end if
                                            if Memory(3,(p)) = 1 then MemorySlot(p).State=1:end if
                                            if Memory(3,(p)) = 2 then MemorySlot(p).State=2:end if
                                            Case 4
                                            if Memory(4,(p)) = 0 then MemorySlot(p).State=0:end if
                                            if Memory(4,(p)) = 1 then MemorySlot(p).State=1:end if
                                            if Memory(4,(p)) = 2 then MemorySlot(p).State=2:end if
                                            End Select
                                            next
                                            end sub

                                             

                                            ' Reset Memory States
                                            Sub MemoryReset()
                                            dim p
                                            On Error Resume Next
                                            for p=1 to slot:Memory(1,p)=0:Memory(2,p)=0:Memory(3,p)=0:Memory(4,p)=0:next
                                            End Sub

                                            Set MemorySlot(1)=LightCTarget1
                                            Set MemorySlot(2)=LightCTarget2
                                            Set MemorySlot(3)=LightCTarget3
                                            Set MemorySlot(4)=LightCTarget4

                                            ' *** END ***

                                            _____________________________________

                                            Latest projects and rants at My Facebook Page
                                            _____________________________________
                                            Latest Project: fpxEngine Table Builder

                                          Viewing 20 posts - 1 through 20 (of 41 total)

                                          Forums are currently locked.

                                          ©2024 VPinBall.com

                                          Log in with your credentials

                                          Forgot your details?