Code Monkey home page Code Monkey logo

opensuspect-legacy's Introduction

OpenSuspect

One amongst us is not like the rest
OpenSuspect is an open source online social deduction game, like mafia.
OpenSuspect aims to be easily modifiable, however, our first maps and themes are going to be focused around the cold war.
It uses the Godot Engine.
This project is in very early stage development. However, see this guide for early playtesting.
Interested to get involved? We'd love to hear from you. Check out the contributors guide to get involved.

OpenSuspect is licensed under the GNU GPL v3 (see LICENSE.txt)

About the project

The OpenSuspect project is a team endevour of many volunteers. Our members work on the project in their spare time, often after work or school, so we don't have a rushed development schedule. Many of us regard the project as valuable experience in not just software development but also in team work. Our most important goals during development:

  • Supportive community
  • Openness
  • Keeping extensibiliy in mind
  • Focus on learning

However, we also understand that a game needs a direction, and some problems are easiest to solve in a top-down fashion. Therefore, we agreed to implement a team structure, where each team have their responsibilities, and are organized by an elected team leader. The project is guided by the council containing the team leaders and a few elected project coordinators, who set the goals together. For the current teams and leadership, check the CONTRIBUTORS file.

About the game

The main aims of the game:

  • Give a very flexible backbone for social deduction games, allow for great variety in future maps, mods and playtiles
  • Encourage collaborative gameplay that is equally fun for each participant
  • Chat integration and flexible chat rules to fit various needs
  • Free Software, Open Source, as all things should be

For the management of the development, we have 3 milestones that we are tracking on GitHub, see the Milestones page for current progress.

Goals for the alpha release

  • One (not finalized) game map, based on a fictional spy story from the 1960s cold war era,
  • working lobby for players,
  • customizable characters,
  • multiplayer with server side authority for all crucial steps,
  • in game text chat,
  • role assignment,
  • tasks to perform for a clean victory of the "agent team",
  • sabotage system for a clean victory of the "infiltrator team",
  • kill system,
  • items to carry and use,
  • meetings and "voting out" mechanics,
  • some miscellaneous map features.

Goals for the beta release

  • Finalized game map, based on a fictional spy story from the 1960s cold war era,
  • sufficient number of tasks for diverse gameplay,
  • sufficient number of items for a diverse gameplay,
  • unique misceallaneous map features,
  • all assets are in a coherent form that fit the game style,
  • the victory and loss conditions match the expectations for a social deduction game,
  • the number of game breaking bugs is minimal.

Goals for the fully playable release

  • Two or more distinct maps with unique features, tasks and goals,
  • all assets look good, modern, and fit the game theme,
  • the game is balanced,
  • the software is practically bug-free, no serious immersion breaking events.

Other plans for the undefined future

  • Integrated voice chat with optional location-based chat,
  • official server with match making.

Implementation of our goals

The exact way the abovementioned goals would be reached is part of the ongoing discussion in the community. Some points have been finalized, some are still being debated.

opensuspect-legacy's People

Contributors

1eldiego avatar damjan94 avatar daniel071 avatar danielkinsman avatar darshadi avatar dimikrik avatar dleboulanger avatar dyj216 avatar evolve2k avatar gobbel2000 avatar grbavacigla avatar infibrocco avatar jngo102 avatar jonahgoat avatar literit avatar luke-connor avatar macmv avatar mgthepro avatar monban avatar moxvallix avatar nicemicro avatar orangemn6 avatar random2nothing avatar theevilskeleton avatar theryeguywhowillnowdie avatar thesecondreal0 avatar toomanyarguments avatar vainiovano avatar vincens2005 avatar zapzoop0099 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

opensuspect-legacy's Issues

Client does not change map

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.

Some form of filtering used while scaling pixelart assets

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.

Change variable names and comments to be used uniformly: agents and infiltrators

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.

Host invisible

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.

Appearance editor broken on exported client

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:
appearance-bug
@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.

Lighting system

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.

Player entry point entity

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.

Killing and reloading

We need to revamp the killing system. What should be done:

  1. an overlay for the target to kill (crosshairs maybe?),
  2. a customizable keystroke + an on-screen clickable icon to commit the kill and
  3. a customizable keystroke + an on-screen clickable icon to reload the gun which also might serve as the timer for the reload.

For details, see the relevant part of the design document.

Parallax scrolling

When in the lobby, the background should be scrolling horizontally through the windows, to give the train the appearance of motion.

Appearance selection, MVP

This is on hold until the game design and art teams can give us feedback about what appearance options will be customizable.

Victory / Defeat screens

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.

Appearance selection, BASIC

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?)

Role announcement

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.

Win conditions

Handling for the game to switch to the win/lose screen.

Should have:

  • A system to handle conditions based on other in-game variables
  • System to determine winners / losers, and triggers end screen accordingly

Conditions:

  • Infiltrators win when number of infiltrators >= number of agents
  • Agents win when tasks are complete
  • Agents win when there are no infiltrators

See https://github.com/opensuspect/design-document/blob/main/general_gameplay.md.

Role screen broken in full screen

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.

UI exits game, takes back to menu screen

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:

  1. Host a game
  2. Open the menu, go Settings > Keybinds
  3. Press the back button

Keyboard control customization

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.

UI doesn't adapt to different screen sizes

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.

Role screen crashes game on second created game

Way to reproduce:

  1. Create a new game
  2. Start the game
  3. Go back to lobby
  4. Go back to main menu
  5. Create a new game
  6. Start the game

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

Very basic map

Acceptance criteria

  • Two rooms
  • Player spawn points (#161 prerequisite)
  • Some kind of texture on the walls and floors (programmer temporary art is okay)

Non-goals

  • Any type of actual map design
  • Looks good
  • Any kind of mechanics

Game State FSM

Create a finite state machine for the server to track the overall state of the game. It should be relatively easy to extend, but something like this is a good starting point:
FSM diagram

Maintenance tasks

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.

Storing task states on the server

Goals to be achieved:

  1. The tasks should have a parameter whether their states are synced to all players or not.
  2. Tasks should clearly define what variables define their state and these states should be synced with the server and stored there.
  3. If a task is synced to all players, the server should update it for every player once someone changes it.

Dying

Players who are killed should die and became a spectator.

Map interaction system

A system that allows the map to be interacted with. This would manage stuff like opening doors, and other map interactions. Features to include:

  • Store a list of dynamic map objects (such as doors)
  • Be able to receive signals from other systems, such as the task management system
  • Be able to change the state of various objects on the map

Proper UI System

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:

  • A heavy focus on modularity (easily add new UI components to manage)
  • Easy for other systems to hook into to tell it to show a UI component
  • Keep track of whether or not a menu is open

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.

Vote/Meeting UI

A UI menu/screen to show during meetings.

Requirements

  • Allow players to vote on one another and to skip
  • Have a timer to limit how long meetings can be
  • Give players access to the chat during the meeting
  • Show each player's appearance next to their name

Map selection

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?)

Fix weird scaling in main.tscn

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.

Task assignment system

A system that assigns tasks to players based on various conditions, such as game options or the player's role. Features to include:

  • Store a list that contains every task and info associated with it (type, which UI menu, role it should be assigned to, etc.)
  • Easily expandable with more tasks
  • Tasks can be assigned based on their role
  • Smartly distribute tasks among players
  • Ability for tasks to be disabled and not be assigned
  • Customizable (how many of each task/task type should be assigned)

Role assignment system

A basic system to assign roles to players. Features to include:

  • Easily expandable with more roles
  • Scales by the amount of players in the lobby
  • Customizable (how many of each role should be spawned/what percentage of players should be x role, etc.)

Map management system

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:

  • Keep track of every map in the game and info related to said map
  • Switch maps

Case mixing in directory structure

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.

The server accepts new players after the user pressed "Start game"

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.

Clean up main.gd

Problem

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.

Solution(s)

  1. Break main.gd apart into multiple scripts, attached to nodes in main.tscn. These specific scripts/nodes would handle their respective tasks. One script would sync appearance, another would sync movement, another items, etc..

If you can think of another solution, please post a comment!

Support for non 16:9 Aspect Ration

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.

Proper tutorial? xD

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.

Task management system

A system to manage what needs to be done before a task is completed and what happens after it is completed. Features to include:

  • Keep track of which tasks are accessible to the player (based on prerequisite tasks or player location)
  • Prerequisites (allow for tasks require certain conditions to be met before they can be completed. For instance, a task to open a door which requires you to complete another task where you grab a key)
  • Effects (opening doors, unlocking another task, etc.. Will need knowledge of the current map for dynamic map objects like doors.)

Update README and CONTRIBUTORS

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.

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.