drwhut / tabletop-club

An open-source platform for playing tabletop games in a physics-based 3D environment for Windows, macOS, and Linux! Made with the Godot Engine.
https://tabletopclub.net
MIT License
1.27k stars 55 forks source link

Allow configuration of physics properties for objects, tables, and the room. #150

Open elmodor opened 1 year ago

elmodor commented 1 year ago

This is basically a discussion about tweaking the physics.

Currently it seems that the physics are very realistic. Objects slide very far, the collision takes quite some time for an object to settle down.

The question I want to discuss is if such realistic physics are the correct way for a tabletop simulator. In the end you want to play a boardgame and sometimes it can be very tricky to do so.

What I had in my could be changed:

Additionally there could be a toggle between:

What this would solve: Basically any "accidents" that would happen while playing a game. An accident which will knock over your objects etc. If this happens too often it will be too frustrating to play. Very often cards don't really need to slide that much. They are put down. Same with objects, you rarely toss those around. So the physics need to be there, sure - but only to some degree?

Curious to hear other opinions on this.

drwhut commented 1 year ago

For me personally, I find that the physics is part of the charm of the game. In alpha testing, we had plenty of "accidents" like knocking stuff over, but in the end once testers got used to the controls, this became a rare occurrence. It's also the reason why I advertise the game as a "physics sandbox" - sure, we had a lot of fun playing tabletop games within the game, but a lot of the entertainment value that came out from those tests was due to the physics engine as well.

One of the big design philosophies I have for the game is player freedom. This includes the game being open source (as in, the freedom to do what you want with the source code), but it also includes freedom in gameplay - if the player wants to fling an object into a stack of other objects, roll a bunch of objects down the table, flick an object into space, or play a board game, they should be able to do all of those things by default (this is the reason why I personally disagree with having a toggle in how the physics acts).

There are some things in the game currently that can help alleviate some annoyance:

I also had an idea of something that can be added to help:

elmodor commented 1 year ago

Maybe I chose my words poorly. I don't want to get rid of the current physic capabilities. That would be indeed the wrong move. Games like minigolf, pool/billiard would only be possible with realistic physics (and would be really cool to do but also very complicated to create the models for :smile:)

I would like to be able to configure and tweak the physics parameter - ideally via the GUI in the settings menu somewhere. That's why I was talking about the toggle. But in retrospective a configuration would be way better - for reasons you mentioned.

Like a room/table configuration where you can change various settings. And maybe this setting could have a drop down menu with preset configurations? (which is basically what I wanted with the toggle - pre-configured values for various scenarios)

Maybe we could also expose some of the other physics properties in Godot via configuration?

Yes please!

Add the option to lock only the angular axes, so it can still move, it just won't rotate.

Would you still be able to rotate the objects manually? Would you still be able to roll dice?

Additionally, is there any configuration that could be added to simplify the collision process? Freeze objects sooner/faster so that they don't resolve the collision 100%?

drwhut commented 1 year ago

Like a room/table configuration where you can change various settings. And maybe this setting could have a drop down menu with preset configurations? (which is basically what I wanted with the toggle - pre-configured values for various scenarios)

If there are any game-wide settings they could be added to the Room menu, which would then get saved into states, which subsequently would be in save files, and therefore that's how pre-made games could have configured values?

Would you still be able to rotate the objects manually? Would you still be able to roll dice?

No, in that case, you would not angle-lock dice. I was thinking as an example for chess pieces, so when they are dropped from a high distance they stay in the same position, but bounce into place.

Additionally, is there any configuration that could be added to simplify the collision process? Freeze objects sooner/faster so that they don't resolve the collision 100%?

There isn't anything like this that comes with Godot, and honestly, there's so many edge cases / subjective ideas to consider that I'm not sure if this is worth implementing. I think either grabbing or locking objects as they are moving works fine.

elmodor commented 1 year ago

If there are any game-wide settings they could be added to the Room menu, which would then get saved into states, which subsequently would be in save files, and therefore that's how pre-made games could have configured values?

Yep exactly. Sounds good.