Giter Site home page Giter Site logo

drwhut / tabletop-club Goto Github PK

View Code? Open in Web Editor NEW
1.2K 25.0 44.0 176.09 MB

An open-source platform for playing tabletop games in a physics-based 3D environment for Windows, macOS, and Linux! Made with the Godot Engine.

License: MIT License

GDScript 98.92% Shell 0.04% GLSL 0.39% Python 0.64%
game godot-engine tabletop tabletop-simulator tabletop-gaming tabletop-games physics 3d singleplayer multiplayer

tabletop-club's People

Contributors

allanovelha avatar chaffouin avatar comradekingu avatar csolisr avatar drwhut avatar elmodor avatar emi2k01 avatar fussmatte avatar guillaumemichel avatar hairic95 avatar hugoplacer avatar idodana avatar imbearchild avatar jeffilluminati avatar jposada202020 avatar jummit avatar kaechele avatar kompowiec avatar leogott avatar mdtrooper avatar mitrams avatar muzzug avatar nbuechner avatar santossi avatar seankuehl avatar the7thnightmare avatar vistaus avatar weblate avatar whouishere avatar x3a avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tabletop-club's Issues

Should the ability to lay stacks on the table automatically be added?

Is your feature request related to a problem? Please describe.
It's tedious to take e.g. a stack of cards and lay them nicely on the table in a line such that each card slightly overlaps the previous card.

Describe the solution you'd like
Have a button added to the context menu of a stack to lay the stack automatically.

Describe alternatives you've considered
None.

Additional context
The reason this is an open question is that part of me thinks this is a very niche feature that would rarely be used.

All instances of a custom object appear selected when one is selected.

Describe the bug
When you spawn instances of a custom object (i.e. an object that is imported from a glTF file), when you select one of them, all instances of the object appear to be selected.

To Reproduce
Steps to reproduce the behavior:

  1. Start a singleplayer game.
  2. Spawn more than one instance of the "Sphere" piece.
  3. Click on one of the spheres.
  4. All of the spheres should appear selected.

Expected behavior
Only the sphere you selected should appear like it is selected.

Screenshots
Screenshot from 2020-09-28 16-55-31

Environment
Linux Mint 20

Version
master

Additional context
This is probably because all instances of the object use the same material, and we are modifying that one material.

Physics movement is not interpolated.

Describe the bug
If the refresh rate of the monitor is higher than the physics framerate (default is 60Hz), then physically-driven objects visibly stutter due to the object's movement not being interpolated in-between physics frames.

To Reproduce
Steps to reproduce the behavior:

  1. Open the game via the Godot editor.
  2. Lower the physics FPS in the project settings to around half the refresh rate of the monitor.
  3. Launch the game, and enter a singleplayer instance.
  4. See that when objects are moving (either on their own or if the player is moving them), they appear "laggy".

Expected behavior
Objects should appear to move smoothly, no matter what the physics framerate or the monitor refresh rate is.

Screenshots
None.

Environment
Linux Mint 20

Version
master

Additional context
There is a proposal to add this functionality to Godot itself: godotengine/godot-proposals#671

Since it is not currently in Godot, there is both an addon and a module to implement it.

Have incoming clients download assets that are missing.

Is your feature request related to a problem? Please describe.
Right now, if a client connects to the server, and the client does not have the asset that another player has spawned, then the client will very likely error.

Describe the solution you'd like
If the client has an asset that the host does not have, have the host send the asset to the client and saved into the user://assets folder, then the client would import the file like it would at startup.

Describe alternatives you've considered
Trust that the client has the necessary assets.

Additional context
If not done properly, this could be the source of many security issues. This is why I have added the help wanted label.

Add support for importing Wavefront/OBJ files.

Is your feature request related to a problem? Please describe.
Right now it is only possible to import glTF models, which not all programs export to.

Describe the solution you'd like
Allow the importing of Wavefront/OBJ files as well as glTF files from the assets/[PACK]/pieces/custom/ folder.

Describe alternatives you've considered
None.

Additional context
This will require modifying the OpenTabletop Godot Module to allow for the importing of these files. Modifying the game code should be trivial.

Allow assets to have configurable values.

Is your feature request related to a problem? Please describe.
Right now sorting a stack only sorts it alphabetically based on the file name, which is pointless for most applications.

Describe the solution you'd like
Allow in the configuration files in the assets folder to give certain assets values (either raw values e.g. a poker chip with 10 on its face would have the value 10 or have assets contain a dictionary of values, e.g. value=6, suit="H"). This way, users can sort stacks of these assets by either their raw value or a type of value.

Describe alternatives you've considered
None.

Additional context
None.

Hands do not register cards when loading a state.

Describe the bug
When loading a state which includes one or more cards in someone's hand, the cards are no longer floating in the hand after the state is loaded.

To Reproduce
Steps to reproduce the behavior:

  1. Start a singleplayer game.
  2. Place one or more cards in your hand.
  3. Flip the table.
  4. Reset the table, and observe the behaviour.

Expected behavior
The cards, once the state is loaded, should still be in the player's hand.

Screenshots
Skjermbilde fra 2020-10-18 22-45-33

Environment
Linux Mint 20

Version
master

Additional context
None.

Make the player's hand a part of the 3D environment, not of the UI.

Is your feature request related to a problem? Please describe.
Right now, all of the features that are developed for the 3D environment in terms of the pieces, e.g. selecting, dragging, etc. need to be duplicated in the UI in order to have a fully-functional hand system.

Describe the solution you'd like
Move the hand system from the UI to the 3D environment, on the edge of the table, and in different positions for each of the players.

Describe alternatives you've considered
I could keep the hand in the UI, but this would mean extra work when it is not needed.

Additional context
Having the hand on the table itself is what Tabletop Simulator does, so players of that game will be immediately familiar with how to manipulate their hand when playing OpenTabletop.

Improve the asset selection dialogs.

Is your feature request related to a problem? Please describe.
Right now, the asset selection dialogs (i.e. for objects, games, skyboxes, and audio tracks) are inconsistent and can be difficult to navigate.

Describe the solution you'd like
Improve the asset selection dialogs by:

  • Only showing assets from one asset pack at a time (like the objects dialog currently does).
  • Including a search box that filters the results.
  • Grouping together different types of assets, and having those groups be "foldable".

Describe alternatives you've considered
None.

Additional context
It would be nice to have one scene/script for all of these dialogs for consistency.

Add the ability to change the spotlight's strength and colour.

Is your feature request related to a problem? Please describe.
Right now there is no way to change any of the properties of the spotlight that lights the room.

Describe the solution you'd like
Add options in the room menu to change the strength and colour of the spotlight.

Describe alternatives you've considered
None.

Additional context
Implementing this would mean that the spotlight's properties would have to be included in room states.

Show control hints in the corner of the screen.

Is your feature request related to a problem? Please describe.
As there is no manual yet for the game, the only way to know what buttons/keys to press when playing the game is to look at the key bindings section of the options menu.

Describe the solution you'd like
Add hints in the corner of the screen that show what button/key presses do what, that also change depending on what the player is doing. The player should have the ability to turn these hints off in the options menu.

Describe alternatives you've considered
There could be a tutorial section for the game, but I don't think it is necessary as there are still a lot of features that are yet to be implemented.

Additional context
None.

Exports display error about failing to get the modified time of the cursor images.

Describe the bug
When running an exported version of the game (i.e. not in the editor), an error is displayed when entering the 3D environment about the engine failing to get the modified time of the cursor images, which are used for displaying other player's cursors.

To Reproduce
Steps to reproduce the behavior:

  1. Export the game.
  2. Run the executable via the terminal.
  3. Start a singleplayer game.
  4. The error should be displayed in the terminal.

Expected behavior
This error should be displayed:

ERROR: _get_modified_time: Failed to get modified time for: res://Images/GrabbingCursor.png.
   At: drivers/unix/file_access_unix.cpp:321.
ERROR: _get_modified_time: Failed to get modified time for: res://Images/ArrowCursor.png.
   At: drivers/unix/file_access_unix.cpp:321.

Screenshots
None.

Environment
Linux Mint 20

Version
master

Additional context
None.

Make the skybox editable.

Is your feature request related to a problem? Please describe.
Right now the default skybox is used in-game, and it cannot be changed.

Describe the solution you'd like
Add the ability to import custom skyboxes via the assets folder, e.g. in the assets/[PACK]/skyboxes/ folder, which would get imported by the game at startup, at which point you could select it in-game and it would automatically change the environment's skybox.

Describe alternatives you've considered
None.

Additional context
This would probably involve the PanoramaSky class, as well as modifying the import module to allow for the importing of .hdr files.

Objects with box collision shapes jitter when colliding with the table.

Describe the bug
Since introducing the ability to import custom tables into the game, box-shaped objects like dice do not collide properly with the table (since the table now uses convex collision shapes).

To Reproduce
Steps to reproduce the behavior:

  1. Launch the game.
  2. Enter either a singleplayer or multiplayer instance.
  3. Spawn some dice.
  4. Pick up the dice, and throw them across the table.
  5. See that some of the dice will jitter before eventually "settling" on the table.

Expected behavior
All objects should collide properly with the table (no matter the shape of the table or the object).

Screenshots
Here is a video showing the collision:
https://user-images.githubusercontent.com/13645454/111029337-215e0200-83f4-11eb-8e15-8a843b18c5ec.mp4

Environment
Linux Mint 20

Version
master

Additional context
The following solutions fix the bug, but they are only workarounds:

  • Increasing the physics FPS, but this is incredibly detrimental for lower-end computers.
  • Converting the dice collision shapes to convex collision shapes, but cards also use box collision shapes, and they cannot be converted to use convex ones (since stacks rely on them having a box collision shape).

This issue seems similar to this one in Godot: godotengine/godot#41404

Add background images to the loading screen.

Is your feature request related to a problem? Please describe.
The loading screen's background is completely blank.

Describe the solution you'd like
It would be really, really awesome if there was something cool to look at during the loading screen! If you have made, or have found, images that you think would look good in the background of the loading screen, please don't hesitate to post a comment on this issue! Make sure to include as much information as possible about the image, see this page for what details you need to provide.

For example, the image could be a screenshot from the game (press F9 to hide the UI, then press F12 to take a screenshot), or it could even be artwork!

Keep in mind that the image should be landscape, and it should be at least 1080p.

Describe alternatives you've considered
None.

Additional context
For reference, this is what the loading screen currently looks like:
Screenshot from 2021-03-25 19-24-56

Adding a 7th skybox image to the default asset pack causes the physics engine to stop working.

Describe the bug
For god knows what reason, if you put six images in the assets/OpenTabletop/skyboxes/ folder, the game works fine. However, the game's physics will literally cease to function if you even think about putting a seventh image into that folder...

I've done some experimenting, and I've found some interesting cases where it does/doesn't happen:

  • It doesn't matter what sizes the images are, as long as there is at least seven of them.
  • It's only for the default asset pack. Making another asset pack (e.g. assets/Test/) and putting the images in there stops the bug.

The reason I've added the "help wanted" label is because this bug is actually game-breaking - the game entirely relies on the physics engine working, and you can't do much otherwise.

To Reproduce
Steps to reproduce the behavior:

  1. Update OpenTabletop to the latest commit.
  2. Ensure that there are at least seven images in the assets/OpenTabletop/skyboxes folder.
  3. Launch the game via the editor or an exported executable.
  4. Go into singleplayer, and see that spawned objects will not move.

Expected behavior
The physics engine shouldn't die because of an image being put in a folder...

Screenshots
None.

Environment
Linux Mint 20

Version
master

Additional context
This might actually top my list of the weirdest bugs I've ever encountered in my life.

Design the main menu.

Is your feature request related to a problem? Please describe.
Right now, the main menu looks really, really bad.

Describe the solution you'd like
I want to design an actual main menu for the game, but I want to make sure the design is one that is generally liked before it is implemented. If you like the design I was going to work with (explained below), please reply with a thumbs up. If you can think of a better design, please comment with your suggestion (diagrams are welcome)!

The design I was going to implement was based on Minecraft's main menu, where:

  • The logo/title of the game is at the top.
  • The buttons are centered.
  • The background is a spinning (possibly blurred) skybox of an in-game table.
  • There are details like the version number and copyright notice in the bottom corners.

One idea I had with this design is that the asset packs could have their own skybox/theme for the main menu, allowing you to change the main menu theme by selecting an asset pack in the corner.

Describe alternatives you've considered
None.

Additional context
The general feel I want for the game is for it to be "cozy", so preferably there shouldn't be any fast-moving elements in the design.

For context, this is what the main menu looks like as of this issue being created:
Screenshot from 2021-02-16 02-14-39

Add a loading screen.

Is your feature request related to a problem? Please describe.
Right now, when loading either a singleplayer or multiplayer instance, the screen just freezes. This can be concerning if it takes a long time to load!

Describe the solution you'd like
Add a loading screen when transitioning between big scenes (e.g. the main menu, the room). Preferably, the loading screen shouldn't be blank.

Describe alternatives you've considered
None.

Additional context
The functionality in terms of the scripting should be done mostly in res://Scripts/Global.gd, which is where the scene switching functions are. Plus, we've got to account for the case that the client tries to join a server, but fails (or takes a long time to connect).

EDIT: This page in the Godot documentation seems to have the exact functionality we need.

Add hidden areas.

Is your feature request related to a problem? Please describe.
Right now there is no way to make objects in the game visible to only yourself, other than putting cards in your hand.

Describe the solution you'd like
Add the ability to draw hidden areas onto the table, such that objects that enter the area are only visible to you.

Describe alternatives you've considered
None.

Additional context
This is a system that exists in Tabletop Simulator.

Add tooltips across the UI.

Is your feature request related to a problem? Please describe.
None of the UI have any tooltips that show when hovering over them. This would be helpful for labels like "MSAA".

Describe the solution you'd like
Add tooltips for a majority of the controls in the UI.

Describe alternatives you've considered
None.

Additional context
This should probably be the last issue to resolve before the first v0.1.0 release when all of the buttons/labels have been finalized.

Improve how large hand sizes are handled.

Is your feature request related to a problem? Please describe.
Currently, when you have a hand with a large number of cards, the cards will overlap with each other. This means that when it comes to picking a specific card from the hand, it is nearly impossible to do so.

Describe the solution you'd like
I have come up with two main solutions, but any other ideas are welcome:

  1. When you hover the mouse over your hand, the game selects a hand to "highlight", and it shifts the cards to the left and right to the side so you can clearly see what card you are hovering over.
  2. When hovering over a card for a given amount of time, a zoomed-in view of the card is displayed in the UI.

The reason I have added the question label is that I would like to know what people think is the better solution to the problem before one is implemented.

Describe alternatives you've considered
See above.

Additional context
For reference, this is what the hand looks like when the entire 52-card deck is added to it:
Skjermbilde fra 2020-10-07 15-17-15

Support custom objects with emissive materials.

Is your feature request related to a problem? Please describe.
When exporting models using Blender, you can export models with emissive materials, meaning that they should emit light in the scene. However, when importing them into the game, the emissive material does not affect the environment around it.

Describe the solution you'd like
Support emissive materials by having them light the environment around them.

Describe alternatives you've considered
None.

Additional context
This may only be able to be supported when Godot has dynamic real-time global illumination, which is planned to come with the 4.0 release, see here.

Remove redundancy caused by the back face of cards.

Is your feature request related to a problem? Please describe.
The way cards are imported is such that each card has one texture, with both the front and back faces on the texture. However, the fact that most card packs in general almost always have the same back face, means that the back face is being copied unnecessarily in every texture file. If the back face can't compress well, this can lead to huge folder sizes!

Describe the solution you'd like
Change how cards are imported so that each texture is just the front face of the card - then, in the config.cfg file, the back face can be set with a new property:

[*]
; Set the back face of every card in the pack.
; The BackFace.png file is also in the folder.
back_face = "BackFace.png"

[BackFace.png]
; Optional, but if this wasn't here, you would
; have another card with both the front and
; back faces being this texture.
ignore = true

This way, the back face only takes up one file, and the redundancy is gone! This also means that the front and back faces could potentially use different formats, so e.g. the front face can be a vector image while the back face is a pixel image.

Describe alternatives you've considered
Keeping the current system as is, but I can't sleep at night knowing the cards/ folder is twice the size it needs to be!

Additional context
Ideally, the new cards shouldn't have two separate meshes for each face, but rather one mesh with two surfaces that can have two separate materials.

Allow custom 3D tables to be imported.

Is your feature request related to a problem? Please describe.
Right now the only in-game table that can be used is the one that comes with the game (which is defined in the Room scene).

Describe the solution you'd like
Add a folder to the asset pack (e.g. assets/[PACK]/tables/), which contains exported 3D models that are imported as tables. There can then be an option to change which table the room is using in the room dialog.

Plus, the config.cfg file for the new tables should contain information about the positions of player hands (like they are defined currently), for example:

[MyTable.gltf]

hands = [
    {
        ; The position and forward direction of the first player's hand.
        "position": Vector3(0, 0, -5),
        "direction": Vector3(0, 0, 1)
    },
    {
        ; The position and forward direction of the second player's hand.
        "position": Vector3(0, 0, 5),
        "direction": Vector3(0, 0, -1)
    }
    ; ...
]

Describe alternatives you've considered
I've considered only allowing the texture of the current table to be modified, but this feature inherently has more flexibility and creative potential.

Additional context
Side note: This would probably mean having to change the name and extension of save files (.table -> .ot?) to avoid confusion.

The problem, and the reason I have been putting off this feature for so long, is due to the collision of the table - when I first added the current table to the game, I found that having the engine automatically create a convex collision shape for the table meant that very thin objects like cards just fall through the table until the collision shapes are changed to basic cube shapes. I'm assuming what's happening here is that the Bullet physics engine cannot handle a complex (convex) collision shape colliding with a very thin cube shape.

This is problematic for custom tables since we can only really make collision shapes of a convex type out of them (since there is an in-built function for it). With the current understanding of the physics engine, the custom table needs to have basic collision shapes (i.e. cubes, cylinders).

So, there are two options for approaching this feature:

  1. Somehow fix thin collision shapes not colliding correctly with convex collision shapes.
  2. Have the creator of the custom table define their own collision shapes in the config.cfg file.

Ideally, I would like to implement this feature using the first method, but I need help figuring this one out - If there are no apparent fixes, I will implement it with the second (less creator-friendly) method.

Add a chatbox for multiplayer games.

Is your feature request related to a problem? Please describe.
Right now there is no way to communicate with other players in-game. The only way is through other applications like Discord.

Describe the solution you'd like
Add a chatbox in multiplayer games, which would allow players to enter text that is displayed to the other players. The chatbox should also have the ability to be hidden.

Describe alternatives you've considered
None.

Additional context
We would also need to add an option enabled by default to block offensive words, I'm not sure the best way to go about this.

Make containers more intuitive to use.

Is your feature request related to a problem? Please describe.
A friend of mine while playtesting the game had some suggestions related to containers and how they could be more intuitive to use in terms of adding items to them, as well as improving containers in general.

Describe the solution you'd like
Modify containers so that they:

  • Instead of having to drop objects on top of containers to add them, make it so that selected objects colliding anywhere with the container adds the selected objects to the container.
  • Have an "add object" button in the context menu that brings up the object dialog, that allows the user to add objects directly into the container.
  • Have an "add selected objects" button in the context menu that adds other selected objects to the container.
  • Only start dispensing items if they are pointed directly down instead of generally down, and have this functionality be optional via the config.cfg file.

Describe alternatives you've considered
We also came up with the idea of having a button in the context menu that allows the player to add items to the container simply by left-clicking (as if it were its own tool). However, I feel that this is too similar to the idea of the "add selected objects" button in the context menu.

Additional context
None.

Add playable sound effects / music.

Is your feature request related to a problem? Please describe.
There is no way to play sound effects or music in the game currently.

Describe the solution you'd like
Allow the user to import audio files in the assets folder, e.g. in assets/[PACK]/sounds/, which can then be played globally in-game. In multiplayer, the sound should be played to all players.

Describe alternatives you've considered
None.

Additional context
Since in #12 we are planning to add a timer object, we should probably implement this functionality with a speaker object of some kind (maybe a boombox?).

Add importable table states to allow for quicker game setups.

Is your feature request related to a problem? Please describe.
Right now there is no way to quickly set up a game without manually spawning each piece/stack and laying them out on the table manually.

Describe the solution you'd like
Add importable table states to the assets folder, e.g. in assets/[PACK]/games/, which, when clicked on in-game, would reset the table state to the given state.

Describe alternatives you've considered
None.

Additional context
This issue is very similar to #10, maybe the save files from that issue could be used as the files that are imported in the assets folder, since they would be essentially table states?

Allow the sunlight to be changed into a spotlight.

Is your feature request related to a problem? Please describe.
The only kind of lighting that lights the table is a sunlight, which makes shadows appear directly below pieces. While this is practical for placing pieces down on the table, it isn't the most realistic lighting as the shadows do not change angle as pieces move away from the centre of the table.

Describe the solution you'd like
Add an option in the room dialog that changes the sunlight in a spotlight, which should change the shadows to be more realistic, at the expense of less useful shadows.

Describe alternatives you've considered
None.

Additional context
None.

Add a paint tool.

Is your feature request related to a problem? Please describe.
This doesn't really solve any problems, I just think it would be a cool feature to have!

Describe the solution you'd like
Add a paint tool that allows the player to paint different colours on either the table or potentially even objects in the room.

Describe alternatives you've considered
I have also considered having a text tool (which may end up having its own issue in the future), which would allow the player to put text on the table, serving almost the same purpose - but the paint tool has more potential, in my opinion.

Additional context
This would probably require having paintable objects instance their own textures instead of using a common texture resource, which would probably use a lot of memory!

Two asset packs with the same name will overwrite one another.

Describe the bug
When two asset packs exist with the same name (e.g. one in ~/Documents/OpenTabletop/assets and another in ~/Downloads/OpenTabletop/assets), then whichever pack gets imported last will completely overwrite the previous pack's imports.

To Reproduce
Steps to reproduce the behavior:

  1. Create the ~/Downloads/OpenTabletop/assets folder.
  2. Copy the OpenTabletop asset pack to this new folder.
  3. Remove any asset from the new asset pack.
  4. Run the game, and notice that the asset is gone.

Expected behavior
If two asset packs exist with the same name, then the pack imported last should overwrite the assets from the former pack, but it should not completely overwrite it, i.e. assets that are in the first pack, but not the second, should still be shown.

Screenshots
None.

Environment
Linux Mint 20

Version
master

Additional context
None.

Add container objects.

Is your feature request related to a problem? Please describe.
Right now, there is no way to represent pieces being put into an opaque container, which is a requirement for a lot of board games.

Describe the solution you'd like
Add the ability to import and spawn "containers". They should:

  • Be able to have pieces added to them by detecting collisions with other pieces on one of it's sides.
  • Hide the pieces once they have been added to the container.
  • Be able to randomly remove pieces when fast-dragging.

Describe alternatives you've considered
This could be theoretically done with hidden areas (#13), but the benefit of containers is that since they are game pieces, you could drag them around the table.

Additional context
None.

Custom pieces with more than one mesh aren't imported properly.

Describe the bug
When importing a glTF model that uses more than one mesh, the game only registers the first mesh, and all other meshes are ignored, but still visible.

To Reproduce
Steps to reproduce the behavior:

  1. Place the glTF exports into the pieces/custom/ folder in an asset pack.
  2. Launch the game.
  3. Spawn the piece.
  4. Check to see the error.

Expected behavior
The other meshes should have collision, and when selecting the piece, all meshes should light up.

Screenshots
Skjermbilde fra 2020-10-09 13-40-30

Environment
Linux Mint 20

Version
master

Additional context
Here are the export files I am testing with (the same ones as in the screenshot):
TwoToruses.zip

Show previews of objects in the objects menu.

Is your feature request related to a problem? Please describe.
Right now the objects menu is just a tree of text, so it is hard to know unless you've spawned the object before, what the object is going to look like.

Describe the solution you'd like
Have the object menu show spinning previews of every imported object.

Describe alternatives you've considered
None, except for having static images of the objects generated at import time, but I think it would be better for the objects to be spinning.

Additional context
Godot's viewports would come in handy here.

Use Ctrl+Scroll Wheel to move objects up and down on the y-axis.

Is your feature request related to a problem? Please describe.
When using the scroll wheel when hovering an object, it moves it away and towards the camera while keeping the object under the mouse cursor. But there are times where moving the piece up and down on the y-axis would be more useful, even if it meant the piece was no longer under the mouse cursor.

Describe the solution you'd like
Have it so that when Ctrl is held down while using the scroll wheel when hovering a piece, it will move the piece vertically up or down perpendicular to the table.

Describe alternatives you've considered
None.

Additional context
If this is implemented, it would not make sense to have the option to swap the actions of Scroll Wheel and Alt+Scroll Wheel in the options menu.

Add an in-game timer object.

Is your feature request related to a problem? Please describe.
Right now people would have to rely on other applications for timer or stopwatch functionality.

Describe the solution you'd like
Add a spawnable timer to the game, that has the ability to display the OS time, countdown from a given time, and also acts as a stopwatch.

Describe alternatives you've considered
I considered having this be a UI element, but this would probably be intrusive, and having a 3D timer on the table adds a bit of realism.

Additional context
None.

Add an undo button.

Is your feature request related to a problem? Please describe.
Right now, if the player makes a mistake (e.g. they knocked over objects they didn't mean to), then unless the player made a save prior to the mistake then there is no way for the player to undo the mistake.

Describe the solution you'd like
Add an undo button that, when pressed, loads back a recent, previous state.

Describe alternatives you've considered
This could also be implemented using autosaves, but I decided that this method, while it would be more complex to implement, would end up being the simplest method for the player to revert the state since it just requires a button press rather than loading a save file.

Additional context
This could be implemented using a stack of states, where a state is added to the stack when no pieces are moving (i.e. they are all "sleeping").

Flip the table!!!

Is your feature request related to a problem? Please describe.
I'm angry, and I want to flip the table!

Describe the solution you'd like
Let me flip the bloody table!

Describe alternatives you've considered
No, I just want to flip the damn table!!!

Additional context
We should probably have a way to reset the table state to what it was before the flipping occurred...

Automatically change video settings depending on the user's hardware.

Is your feature request related to a problem? Please describe.
Right now, when users first start the game, the video settings are at their lowest settings. If the users do not know there are options to change e.g. the anti-aliasing, then this would add a bad reputation.

Describe the solution you'd like
When the user launches the game for the first time, set the video settings according to their hardware, so users with potatoes will start with the lowest settings, and users with supercomputers start with the highest.

Describe alternatives you've considered
None.

Additional context
I'm not sure how to detect user hardware with Godot, more research is needed, or functionality needs to be added to Godot...

Add a measuring tool.

Is your feature request related to a problem? Please describe.
Right now there is no way to determine the distance between two points in the environment, which would make playing games like Warhammer very difficult.

Describe the solution you'd like
Add a measuring tool to the game that would, when two points on the table are clicked, would display the distance between them.

Describe alternatives you've considered
None.

Additional context
Note that the units in-game are in centimeters (cm).
Maybe there could be an option to change what unit it displays (e.g. display in inches instead)?

Design a logo and icon.

Is your feature request related to a problem? Please describe.
Right now the game has no logo, and it just uses the default Godot icon.

Describe the solution you'd like
I would like to create a logo and icon for the game, but I have no idea where to even start - I need ideas and inspiration for both assets!

Ideally, both assets should:

  • Be able to be made as vector images.
  • Be easily recognizable.
  • Represent the fact that the game is a tabletop board game simulator.
  • Give the game a cozy, relaxing, welcoming feel.

Describe alternatives you've considered
None.

Additional context
Any and all ideas, whether they be in the form of words or drawings, are welcome!

Allow the saving and loading of table states.

Is your feature request related to a problem? Please describe.
Right now there is no way to save the state of a table and load it up again.

Describe the solution you'd like
Add the ability to save and load table states. There is already functionality to get and set table states (which is used to send the current table state to connecting clients), so this would just involve saving these states to files.

Describe alternatives you've considered
None.

Additional context
This issue is very similar to #9, maybe saved games could be used as the files that are imported in that issue?

Tabletop Club Default Asset Pack TODO

Preface

The game allows for the importing of custom assets via asset packs, which contain things like textures and scenes that are then converted to in-game pieces. More information about assets can be found here.

The game comes with the default asset pack, which should contain assets for the most common board game pieces used by players. This issue will serve as a TODO list for adding these pieces to the default pack.

Note that the default pack will only contain pieces belonging to public-domain board games! For reference, you can find a list of the most popular public-domain games in this blog post.

Submitting Assets

If you have either made or have found assets that you think should be in the default pack, then feel free to open an issue with the asset submission template! Note that we will only accept assets with an open license, e.g. the CC BY-SA 4.0 license. For more information about contributing to the project in general, see the contributing guide.

TODO

Perudo / Liar's Dice

  • Cups (see #27)
  • Coloured D6

Crokinole

  • Crokinole board
  • Generic cylinder pieces

Chess

  • Chess board
  • Chess pieces

Poker

  • Playing cards
  • Poker chips

Cribbage

  • Playing cards
  • Cribbage board
  • Cribbage pegs

Yahtzee

  • Cups (see #27)
  • D6
  • Yahtzee scoring notepads

Backgammon

  • Backgammon board
  • Generic cylinder pieces
  • D6
  • Cups (see #27)
  • Doubling D6

Go

  • Go board
  • Black and white stones

Werewolf

  • Villager card(s)
  • Werewolf card(s)
  • Seer card
  • Extra role cards

Connect Four

NOTE: This game requires animatable objects to be implemented.

  • Connect Four grid
  • Generic cylinder pieces

Dominoes

  • ... Dominoes

Kalah

  • Kalah board
  • Stones

Othello

  • Othello board (can use Chess board)
  • Generic cylinder pieces

Mahjong

  • Mahjong tiles

Checkers

  • Chess/Checkers board
  • Generic cylinder pieces

Memory

  • Picture cards

Hearts

  • Playing cards

Euchre

  • Playing cards

Eat Poop You Cat

NOTE: This is an amazing name for a board game.

Pachisi

  • Pachisi board
  • Pachisi pawns
  • D6

Rummy

  • Playing cards

Oh Hell!

  • Playing cards

Go Fish

  • Playing cards

Chinese Checkers

  • Chinese Checkers board
  • Chinese Checkers pieces

Snakes and Ladders

  • Snakes and Ladders board
  • Pawns
  • D6

Bridge

  • Playing cards

Spades

  • Playing cards

Pool Billards

  • Pool balls
  • Pool table

Add support for localizing the asset packs.

Is your feature request related to a problem? Please describe.
Right now the game is only in English. If we're going to beat Fortnite in downloads, we need to support more languages and locales!

Describe the solution you'd like
Allow speakers of other languages to be able to contribute translations to the game in the following areas:

  • The executable.
  • The asset packs.
  • The documentation.

Describe alternatives you've considered
None.

Additional context
For the actual translation contributions, I think I'm going to use Weblate. It has a free plan for libre projects (like this one), and I really don't want to use GitHub for translation contributions (it would get very messy very quickly).

In terms of the documentation, it's not ready to be localized in its current state (as it consists of markdown files right now). So I might end up making Sphinx documentation since I have experience with it already, and I know it has a really easy method of generating translation templates.

Move objects up if they are being obstructed when starting to hover them.

Is your feature request related to a problem? Please describe.
When picking up an object, if the previous object that was being hovered was quite small, then there is a chance that the height the new object is being picked up at is too small and it will collide with either the table or another piece, causing it to violently shake.

Describe the solution you'd like
Have the game automatically adjust the y-position at which the piece is being hovered if we can determine that the piece will collide with another piece below it if we don't.

Describe alternatives you've considered
None.

Additional context
None.

Improve the measuring tool.

Is your feature request related to a problem? Please describe.
Right now you cannot make more than one ruler, and you cannot easily get meters (m) and feet (ft) from the measurements without manual calculation.

Describe the solution you'd like
Improve the measuring tool by:

  • Instead of immediately removing the ruler when creating a new one, have it so left-clicking only creates new rulers, and right-clicking removes the most recently created ruler.
  • Add the option to switch between metric and imperial units. This way, we can show more units like meters and feet without overwhelming the player.
  • Add the option to scale the measurements. This way, it makes playing games like D&D easier since they have their own scales.

Describe alternatives you've considered
None.

Additional context
None.

Add the "put in hand" option to stacks of cards, not just singular cards.

Is your feature request related to a problem? Please describe.
Right now there is no way to add an entire stack to our hand in one go, we have to manually drag each card to our hand.

Describe the solution you'd like
Add a button to the context menu of stacks of cards to put the entire stack into our hand, like what we can do with singular cards.

Describe alternatives you've considered
None.

Additional context
This depends on #1 to be finished first.

Right click to spawn objects at different positions other than (0, 0).

Is your feature request related to a problem? Please describe.
Right now every object that is added is spawned at position (0, 0), which can be disruptive and annoying.

Describe the solution you'd like
When right-clicking on the table, display a context menu with the option to add a piece at the clicked location, at which point the object menu would pop up, and any objects spawned would spawn at the given location.

Describe alternatives you've considered
None.

Additional context
It might also make sense to add another button to the context menu to set the spawn point for all spawned pieces afterward.

Add a deal button for stacks of cards.

Is your feature request related to a problem? Please describe.
Right now in order to deal out a stack of cards to players, you need to do so manually.

Describe the solution you'd like
Add a button in the context menu of stacks of cards to automatically deal out cards to every player.

Describe alternatives you've considered
None.

Additional context
This should probably wait until #1 is completed first.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.