As the title says, I am working on a FOSS Linux Pinball Simulation Engine. It is based on my Pascal Tiny.Sim library which has been in github for many years. Tables are designed in parametric CAD (OnShape for now) and imported by my engine as 3D meshes. It simplifies many of the physics bodies into primitives and has options to configure how meshes are convert into a table. The logic for a table is written in Typescript. Users can also edit the table inside the game. The idea will be that users can use the engine to play and share pinball tables of their own designs. I am supporting Linux because I use Linux every day and it needs more support when it comes to playing good fun games.
If you want to help Linux and are an artist, I plan make the initial source code release with 3 different tables and a guide for how to create your own pinball tables. I am looking for artwork to help with table artwork. My contact information is on the page linked to this submission.
I'd imagine that pinball is essentially 2D. Maybe some lanes and ramps would affect gravity, but I can imagine the few Z-direction adjustments aren't worth simulating everything in 3D.
The ball often jumps off the playfield in real pinball. It's not uncommon for it to jump high enough to hit the glass. You'll never get an accurate simulation if you simulate it in 2D.
I started with Godot, and swtich back to Pascal. It will be and is cross platform, but I am focusing on Linux, because that is what I use.
With regards to Godot, while I like it, when using my own engine I can take a lot of shortcusts that Godot cannot. For example, I am able to save a lot of computational logic on reflections by making the requirements that reflections only world on right angled surfaces, which is fine for a pinball table. Also, I am able to cheap out with lighting using a my ouwn techniques for generating lighting maps in a shader, something that is hard to pull off with Godot.
This other game project of mine is written using Godot and C#:
I love pinball, personally terrible at it, I always thought a some luck came into play depending on where the ball was dropping/heading, until I watched someone actually good at pinball play.
He showed me there is a fine art in bumping the machine subtly enough to move the balls line so you can stop it from going straight down the middle or into one of the dead lanes... but not so much to trigger the sensors to shut the machine down.
Watching him play pinball blew my mind. I've never been able to do what he could do, but it's definitely an art form...
I would even argue that without bumping and the threat of tilting the table it is not really a pinball simulation, but merely some kind of pinball looking video game.
I'm interested in knowing how the physics are realized here.
I've been working on a golf game to play with my friends and the first hurdle I had to go through was the fact that you can't just slap an off-the-shelf physics engine on it and call it a day, because over certain velocities the ball will tunnel through the walls.
I started writing my own physics system a while back, and in January of this year started working on some tests befre realziing I was never going to get acceptable phyics on my own. In August I started using Jolt and it seems to work. So to answer your question, I am using Jolt for the physics now.
Tons of physics engines (including jolt mentioned by op) have some variation of continuous collision detection that should prevent such tunneling effects. At this point it seems more rare to not have CCD at all.
Yes, I am aware of Visual Pinball. This is meant as a pinball simulation system for Linux, using a Javascript engine and not VB Script. Also, it will support running on Linux using dmks, so on PCs without a display server.
The video demo looks great, the physics seem really close to a real pinball machine. I have a digital pinball machine at home, I hope this will support dual-screen machines!
Yes, it will eventually support dual screen, that is the playfield and the backglass. Today I will be working writing DMD screens using typescript, and I happen to prefer DMD over the newer LCD screens on modern tables.
When I get close to my initial source release I will look into what it takes to port tables from VPX to my engine. Right now I am purposefully not exploring that because I want an unclouded fresh start for pinball simulation.
No, but it will support PinMAME fully. For copyright reasons, I wll not however be developing both the engine, and recreating actual tables. That would be a bit too far from my legal perspective. I will leave it to other who want to do that.
27 comments:
As the title says, I am working on a FOSS Linux Pinball Simulation Engine. It is based on my Pascal Tiny.Sim library which has been in github for many years. Tables are designed in parametric CAD (OnShape for now) and imported by my engine as 3D meshes. It simplifies many of the physics bodies into primitives and has options to configure how meshes are convert into a table. The logic for a table is written in Typescript. Users can also edit the table inside the game. The idea will be that users can use the engine to play and share pinball tables of their own designs. I am supporting Linux because I use Linux every day and it needs more support when it comes to playing good fun games.
If you want to help Linux and are an artist, I plan make the initial source code release with 3 different tables and a guide for how to create your own pinball tables. I am looking for artwork to help with table artwork. My contact information is on the page linked to this submission.
How are you doing physics here, what is the physics engine based on? I checked Tiny.Sim on github and it said that it's has just 2d physics?
Thinking of it, pinball makes for a pretty good demo for physics engines
I'd imagine that pinball is essentially 2D. Maybe some lanes and ramps would affect gravity, but I can imagine the few Z-direction adjustments aren't worth simulating everything in 3D.
The ball often jumps off the playfield in real pinball. It's not uncommon for it to jump high enough to hit the glass. You'll never get an accurate simulation if you simulate it in 2D.
When you already have accelerator fields (pretty likely for a pinball simulator) you can reuse them for ramps
I was writing my own 3D egnine at the start of the year. I eventually gave up and switch to Jolt in August.
If you are already using Jolt, have you thought about switching to Godot to make it cross-platform?
I started with Godot, and swtich back to Pascal. It will be and is cross platform, but I am focusing on Linux, because that is what I use.
With regards to Godot, while I like it, when using my own engine I can take a lot of shortcusts that Godot cannot. For example, I am able to save a lot of computational logic on reflections by making the requirements that reflections only world on right angled surfaces, which is fine for a pinball table. Also, I am able to cheap out with lighting using a my ouwn techniques for generating lighting maps in a shader, something that is hard to pull off with Godot.
This other game project of mine is written using Godot and C#:
https://www.orbliterate.com
I love pinball, personally terrible at it, I always thought a some luck came into play depending on where the ball was dropping/heading, until I watched someone actually good at pinball play.
He showed me there is a fine art in bumping the machine subtly enough to move the balls line so you can stop it from going straight down the middle or into one of the dead lanes... but not so much to trigger the sensors to shut the machine down.
Watching him play pinball blew my mind. I've never been able to do what he could do, but it's definitely an art form...
So, can you implement machine bumping? :-)
I would even argue that without bumping and the threat of tilting the table it is not really a pinball simulation, but merely some kind of pinball looking video game.
A pinball sim running on a phone or a tablet would be perfect for this, because of the inbuilt accelerometer.
I've been playing and loving Vector Pinball (Floss, on fdroid: https://f-droid.org/en/packages/com.dozingcatsoftware.bouncy...) a lot.
I can only applaud more options for pinball games in the FLOSS world. Thanks!
I'm interested in knowing how the physics are realized here.
I've been working on a golf game to play with my friends and the first hurdle I had to go through was the fact that you can't just slap an off-the-shelf physics engine on it and call it a day, because over certain velocities the ball will tunnel through the walls.
I started writing my own physics system a while back, and in January of this year started working on some tests befre realziing I was never going to get acceptable phyics on my own. In August I started using Jolt and it seems to work. So to answer your question, I am using Jolt for the physics now.
Tons of physics engines (including jolt mentioned by op) have some variation of continuous collision detection that should prevent such tunneling effects. At this point it seems more rare to not have CCD at all.
Make sure to also check out Visual Pinball, the community has built tons of tables for that.
Yes, I am aware of Visual Pinball. This is meant as a pinball simulation system for Linux, using a Javascript engine and not VB Script. Also, it will support running on Linux using dmks, so on PCs without a display server.
The video demo looks great, the physics seem really close to a real pinball machine. I have a digital pinball machine at home, I hope this will support dual-screen machines!
Yes, it will eventually support dual screen, that is the playfield and the backglass. Today I will be working writing DMD screens using typescript, and I happen to prefer DMD over the newer LCD screens on modern tables.
Make it work with dualshock controllers, so that everyone can benefit from force feedback.
I will look into adding haptics. Thanks for the feedback.
Is it compatible with Visual Pinball? Because that's where all the tables are.
When I get close to my initial source release I will look into what it takes to port tables from VPX to my engine. Right now I am purposefully not exploring that because I want an unclouded fresh start for pinball simulation.
good. we need some quality games that are not on Steam to show to new linux users.
MsPinBall was very good at that for windows.
Does it pull or use anything from vPinMAME?
No, but it will support PinMAME fully. For copyright reasons, I wll not however be developing both the engine, and recreating actual tables. That would be a bit too far from my legal perspective. I will leave it to other who want to do that.
Very slick!