opensuspect / opensuspect-legacy Goto Github PK
View Code? Open in Web Editor NEWOpenSuspect is an open source social deduction game, similar to Mafia or Among Us.
Home Page: https://opensuspect.com
License: GNU General Public License v3.0
OpenSuspect is an open source social deduction game, similar to Mafia or Among Us.
Home Page: https://opensuspect.com
License: GNU General Public License v3.0
This is on hold until the game design and art teams can give us feedback about what appearance options will be customizable.
In order for the game to be playable, even in the most basic form, we need at minimum one working task.
I wanted to use it, but it didn't work. i never use TypeScript, so maybe it is because of that, but when i try to compile it, or install with npm it gives out errors and does't work.
When starting the game (moving from lobby to the map), a short cut scene should be implemented that shows the player what role they got assigned to.
Should be capable of showing one's partner, too, if the secret faction (infiltrators) have more than one player.
Should be capable of announcing other roles, like detective, publicly known detective, etc.
Currently, the only ingame UI is made up of a few nodes in main.tscn. We're going to need a much more robust system than that. I think the system needs:
I think a working pause menu from which you can return to the main menu, access settings, and close the game that uses this framework would close this issue.
Allow players to choose their appearance while in the lobby.
Initially implement as a button with a popup. For this basic version, we're more interested in implementing the plumbing. Allow the player to select an arbitrary color from a chooser, and save that to a place that will be persisted between scenes.
Later on we will receive input from the Game Design team as to a more interesting system (disguise kit? wardrobe interaction? opening your own dossier and "correcting" it?)
A kill mechanic for players assigned as an "infiltrator". Used to kill others not assigned infiltrator.
Should have:
See https://github.com/opensuspect/design-document/blob/main/general_gameplay.md.
The animations still work, but the textures are white. Trying to change any setting (including skin color) crashes the game. The appearance editor looks like this on an exported client:
@nicemicro discovered that the appearance editor is using .import files instead of the .png files. This is probably why the editor breaks when the game isn't in debug mode.
README.md and CONTRIBUTORS.txt are outdated, and could do with an update to better match the current state of the project. Updating the list of contributors by maybe putting names, then the teams they are active in might be a good idea. README.md could link to the website, nextcloud etc. Maybe it is also time to remove "Placey" the placeholder alien.
When in the lobby, the background should be scrolling horizontally through the windows, to give the train the appearance of motion.
A UI menu/screen to show during meetings.
When the server presses the "Start Game" button, the server changes maps, but the client does not. The client remains on the "Lobby" map. Both players can still see each other.
We need to revamp the killing system. What should be done:
For details, see the relevant part of the design document.
A system to manage what needs to be done before a task is completed and what happens after it is completed. Features to include:
Godot refuses to let you send remote procedure calls to yourself. When you move around, your x and y are sent to the server. if you are the server, godot spits out an error message.
Way to reproduce:
Game crashes with error: Attempt to call function 'set_movement_disabled' in base 'null instance' on a null instance.
Where it occures:
func _clean_up():
for id in PlayerManager.players:
PlayerManager.players[id].set_movement_disabled(false)
the PlayerManager.players is a dictionary with one element that is NULL
When the victory conditions are fulfilled for one of the teams, a victory screen should show up for the winning, and a defeat screen for the losing teams, which should show which players belonged to which group / team / role.
The system should be flexible enough to work in case of more than 2 teams.
Goals to be achieved:
A system to manage and store info about maps. This info would be the name, file directory, what tasks are available on it, etc.. Features to include:
The walking animations work fine for going vertically or horizontally, but when walking diagonally in any direction there is no animation
Currently the game is forced to 16:9 by black bars, either on top and bottom or left and right.
It would be good to support more aspect ratios.
Handling for the game to switch to the win/lose screen.
Should have:
Conditions:
See https://github.com/opensuspect/design-document/blob/main/general_gameplay.md.
A system that assigns tasks to players based on various conditions, such as game options or the player's role. Features to include:
Changed the screen resolution to 1920x1080 and since many of the ui nodes aren't properly set to centered/full rect/under a center container etc many things are moved to either off screen or to the side whenever screen resolution isn't 1024x600. This will become a big issue in the future if it isn't taken care of soon.
Acceptance criteria:
Acceptance criteria
Non-goals
I have "version = 5" under testing, after commit 769f394.
I tested with three instances running.
First instance starts a game as server.
Second instance joins the game.
I press "start game" on the server instance. The red dummy character appears on the screen, the "Lobby" text disappears.
Third instance joins the game.
The three players see each other, but while the first two instances have the red dummy character on screen, the third one sees the "Lobby" text.
An inventory system to be used with tasks etc.
Should have:
See https://github.com/opensuspect/design-document/blob/main/general_gameplay.md.
Players who are killed should die and became a spectator.
A system that allows the map to be interacted with. This would manage stuff like opening doors, and other map interactions. Features to include:
Toggle on full screen mode, and attempt to start a game. You will notice all the content for the role screen is far off in the corner.
Throughout the code, we use different names for the "teams" or "roles" the players get.
Based on the game design team's decision, the larger team, the default role should be called "agent" / "agents", while all smaller teams, who try to disrupt the main team's work should be called "infiltrator" / "infiltrators".
The variable names and comments throughout the codebase should reflect this for clarity.
A task type, that is never "started" or "finished", but constantly emits an output value based on some random input and some setting in the task interface (check https://github.com/opensuspect/design-document/blob/main/general_gameplay.md for reference).
The input value(s) should be constantly managed by the server, and task, where the setting is available, should provide the same interface with all players, so that should also be managed by the server. The output value should be also available to tasks that depend on the maintenance task, and certain values should trigger events such as warning sirens or even win / loss conditions.
There is a mock implementation of a gas valve task where the output should be regulated with a randomly changing input in PR#192.
Right now the FSM only works server side, meaning game states aren't synced.
A basic system to assign roles to players. Features to include:
Woo, this is my first bug report!
Description of Bug:
Pressing exit from the keybinds menu whilst in a game, takes the player back to the menu screen, rather than back to the game.
Steps to reproduce:
The players shouldn't be able to see players through walls, but they should still be able see the darkened environment. The players should probably have a limited visual range.
Right now, main.gd is a couple hundred lines long and is responsible for a ton of completely different things at once. It's handling network sync for movement, player appearance, and soon it will also handle it for items. This is on top of handling player spawning and killing.
If you can think of another solution, please post a comment!
Right now, the root node of main.tscn is scaled by a factor of .05. I think this is because the textures are so big that they would take up the entire screen if they weren't massively scaled down, but this is a poor solution. We need to decide on standards for image size and/or move a similar solution elsewhere, maybe by scaling down the actual Sprite node instead the entire scene.
In the lobby, players should be able to vote on the map they want to play on.
This can initially be implemented as just a button that opens a pop-up and allows players to select or not select maps. When the server moves to the "main game" phase, a map will be selected based on the votes of all players.
The game design team will later give input as to how this can be made more interesting. (Maybe each player has their own "train ticket", on which they choose the destination, giving a more diegetic map selection experience?)
While the environment gets the dark overlay, the characters are still visible outside the light radius, including the names.
Implement a flexible tasks system. This is a large system to implement, might take multiple people to tackle it, or one very dedicated soul.
Should have:
An example task can be seen at this PR: https://github.com/opensuspect/opensuspect/pull/192
See https://github.com/opensuspect/design-document/blob/main/task_base.md.
For accessibility and customizability there should be a settings submenu for changing all keyboard (and mouse) bindings that are used by the game. Though not an urgent feature, it will help players using different keyboard layout. Especially if the text chat is a critical game component, using a different layout than usual would be very uncomfortable for some players.
Support for multiple keybinds on one action would be a feature to consider (e.g. allowing movement with WASD and arrow keys).
The implementation might be linked to and possibly dependent of #99.
While it was already visible by default, with #26 it becomes really apparent that some sort of filtering (I assume bilinear filtering) is being used on the assets. I'm not yet familiar enough with godot to figure out if or where a setting is to set it to integer scaling.
As it is now we are mixing cases in files and directories.
My suggestion is to change it to all lower case, before we have all sorts of standards.
example: /src/Assets should be /src/assets
src/Scenes/UI/PlayGame.tscn becomes src/scenes/ui/playgame.tscn
This would not apply to md's/txt's etc in root directory.
Create a new type of Node that can be placed into a scene. For the purposes of this spec, we will call it 'Player Spawn'. Upon entering the Main Game mode, the server will assign each player to an unoccupied Player Spawn, at random. That location will be used for the initial position of their character.
Right now connection handling is split between main.gd and network.gd, when ideally it should all be in network.gd. This includes names, version checking, etc..
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.