Coder Social home page Coder Social logo

tdelta / synergyquest Goto Github PK

View Code? Open in Web Editor NEW
12.0 3.0 1.0 8.05 MB

SynergyQuest is a 2D top-down cooperative multiplayer action-adventure video game using web-based smartphone controllers.

License: Other

HTML 0.45% CSS 1.32% TypeScript 11.15% JavaScript 0.03% C# 82.07% ShaderLab 4.29% HLSL 0.59% Shell 0.11%
unity unity2d game cooperative-game games

synergyquest's Introduction

development build license

Synergy Quest - A Mobile-Controlled Cooperative Multiplayer Game

SynergyQuest is a 2D top-down cooperative multiplayer action-adventure video game. It entertains 2-4 players by letting them delve into dungeon levels filled with a variety of puzzle challenges, mini-games, and battle sequences.

What is special about this game is that players use their smartphones as controllers. The game runs locally on a PC and serves a web-page to which the players can connect with their phones. Using touch controls and sensor input (accelerometer etc.) they can control their game character.

Download links for the latest release:

For detailed information on the game and the development process, see the technical report (distributed on the Releases page of this repository). Information on how to build the project is included in the readme files of this repository:

Nightlies ๐ŸŒŒ

You can download the latest builds of the development version here. They might be unstable though:

System Requirements

  • A Linux ๐Ÿง or Windows ๐Ÿ’ฐ PC
  • A smartphone for every player with a modern web browser installed ("officially" supported is the newest version of Google Chrome on Android Not supported: Firefox)
    • iOS devices are not supported

Credits

The game code (excluding engine) and some assets have been originally developed by

The main dungeon graphics stem from the mobile roguelike game Shattered Pixel Dungeon by Evan Debenham a.k.a. 00-Evan which is based on Pixel Dungeon by Oleg Dolya a.k.a. Watabou who have generously allowed us to use their art (see also the License section).

Furthermore, additional art, music and sounds have been sourced from many external artists through OpenGameArt.Org etc. All external artists are credited in the game menu and in SynergyQuest/Assets/Resources/ExternalArtCredits.yaml.


We thank JetBrains for supporting SynergyQuest with licenses for the Rider IDE and their other products

Used Libraries

Besides the game engine Unity the game makes use of the following C# libraries:

(We ship pre-built versions of these libraries with this repository. Binaries and license texts see SynergyQuest/Assets/Plugins.)

Furthermore, various Javascript/Typescript libraries are in use in the game controller web app. See 1 2 3 4.

License

Excluding of course Unity, the libraries and external art assets, this work is licensed under GPLv3, but additional permissions under section 7 of GPLv3 apply. Short Explanation (informal, please see LICENSE.md for the formal terms):

  • Although Unity's license is not compatible with the standard GPLv3, we grant permission to convey (a modified version of) this work combined/linked with the Unity engine
  • This work contains art assets by 00-Evan and Watabou from the Shattered Pixel Dungeon and Pixel Dungeon games which are licensed under GPLv3. Similar permission as the above has been granted by 00-Evan and Watabou to convey these assets with the Unity engine when combined with this work but under certain conditions. Please see the complete note regarding their permission in LICENSE.md.

Of course, for all external assets and especially the Unity components, their respective licenses apply and their terms must be upheld.

Details see LICENSE.md.

synergyquest's People

Contributors

ahbnr avatar dependabot[bot] avatar heckstrahler avatar m-arnold avatar maruker avatar potamides avatar

Stargazers

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

Watchers

 avatar  avatar  avatar

Forkers

edgeseeker

synergyquest's Issues

Sokoban boxes and other obstacles can block respawn points

(discovered by @potamides )

If a Sokoban box or other obstacle is moved onto the respawn position of a player (while they are falling to their death etc.) they will respawn on a adjacent position. If this position is a chasm or similar, a respawn loop can be caused.

Note
There is already some code for door spawners which selects a safe spawning position if the original position is occupied by an obstacle. Maybe we can also utilize this code to resolve this issue.

Item: Implementing Bow and Arrows

For this issue, a bow item and arrow ammunition shall be implemented. The bow should be used for fighting but also puzzle solving.

The details of the item mechanics have not been decided yet. Determining good use cases and optimizing the gameplay for fun are part of this issue.

Multiple ghosts spawn on player death (rare)

(reported by @didge-rydu )

Steps to reproduce

  1. ???
  2. Die
  3. ???
  4. Observe multiple ghosts spawning instead of one.
    This does only happen in rare cases and it is not clear what is causing this issue.
    It has been reported to occur when reloading the controller website while dying / after death.

Starting the proxy for development with a react server fails.

Starting the proxy for development with a react server fails with the following error:

(node:152790) ExperimentalWarning: --experimental-loader is an experimental feature. This feature could change at any time                                      
(Use `node --trace-warnings ...` to show where the warning was created)                                                                                         
TypeError [ERR_INVALID_RETURN_PROPERTY_VALUE]: Expected string to be returned for the "format" from the "loader getFormat" function but got type object.        
    at Loader.getFormat (internal/modules/esm/loader.js:110:13)                                                                                                 
    at Loader.getModuleJob (internal/modules/esm/loader.js:230:20)                                                                                              
    at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:53:21)                                                                                        
    at async Promise.all (index 2)                                                                                                                              
    at link (internal/modules/esm/module_job.js:58:9)                                                                                                           
error Command failed with exit code 1.                                          
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

This problem seems to have been introduced with node 14.13.1. Older versions work fine, so the current workaround is to downgrade to 14.13.0. More information can be found here.

Hearts: Refill your life bar

Currently, players can only lose hearts during battle with monsters. The purpose of this issue is to implement hearts to refill the life bar of the player. They should work as follows:

  • If a player collects a heart, then one life of his life bar is restored
  • Hearts should drop on monster death (with a modifiable chance)
  • After a certain amount of time the hearts are supposed to vanish
  • should be animated

Larger Doors

Currently, one player alone can move the whole player group to the next room. We want to change this, so that all players are needed to move to a different room:

  • All players need to have contact with door
  • Doors should adapt size to amount of players

Color-Traps do not react when moving over them while pulling a box

(discovered by @potamides )

Steps to reproduce

  1. Open Trap-Maze level (one of the D16 rooms)
  2. Pull Sokoban box over a trap. The trap should have an incompatible color (e.g. blue if you are playing red)
  3. Observe:
  • The trap does not activate even though it should
  • The trap does not change color

Notes

This is caused by the MovementBinder behaviour which deactivates Collider and Rigidbodies. Perhaps this could be solved by replacing the body.simulated = false line with body.isKinematic = true.
However, since physics-related changes can have many unforeseen effects, this "solution" should be tested and evaluated thoroughly.

PCG: Sokoban level generation

The purpose of this issue is to collect research and ideas regarding the automatic generation of rooms containing sokoban puzzles for 2-4 players.

Interesting questions:

  • ensuring that generated puzzles are solvable
  • determination of a measure of fun or complexity for the generated puzzles
  • a method for optimizing these values
  • adapting existing solutions to multiplayer

Collection of relevant papers and research:
https://www.zotero.org/groups/2641270/synergyquest/collections/57U3PREH

Automatic Validator for correct attribution of art assets

We collect attribution information for all external art in SynergyQuest/Assets/Resources/ExternalArtCredits.yaml. This information is automatically displayed by the game in the "Credits" menu.

Since it is easy to forget to insert an entry when adding new art to the game, the build system of the game should automatically validate that all art is properly credited.

Hence we want an automatic validator for this which...

  • Is callable from the editor menu
  • lists paths to all art files not properly attributed
  • is automatically executed by CI and build dialogs and stops the build if art files are found which have not been given proper credit

Some cases of blurry fonts

On some systems (Windows) some game objects with font elements are displayed incorrectly (blurry).

Example:

  1. Start the game on a Windows system (production build)
  2. Play until D3
  3. Let one player die (e.g. by falling down the chasm)
  4. Try to leave level using the left door.
    A speech bubble will appear which informs the players, that the dead player must be resurrected first to continue to the next room.
    The speech bubble will have very blurry text.

Weird lines inside UI scroll frames

(reported by @didge-rydu )

Many of the UI screens use a scroll background. In these scrolls panels with decorative frames are often used. When running the game, oftentimes vertical lines in the same color as the frames appear within these panels.

Steps to reproduce
One possibility to observe this issue:

  1. Start a new game
  2. Connect a player
  3. Observe lines within decorative frames of the lobby screen

Unintended screen orientation changes when controlling platforms by tilting phone

The D15 levels contain platforms which are controlled using the IMU sensors by tilting the smartphone controller.
However, since most phones rotate the display content when tilting the screen beyond a certain threshold, controlling the platform can be quite annoying / the controls be unusable.

We partially resolved this, by locking the screen orientation but this is only allowed by browsers if the controller website is executed in fullscreen.
By default, the controller executes in fullscreen and everything is fine, however, users can of course exit the fullscreen mode (e.g. by pressing the "back" button on their phone). Exiting the fullscreen mode also cancels the orientation lock.

The following ideas to improve this situation have been discussed within the team:

  1. Pressing the screen anywhere immediately reactivates fullscreen and orientation lock (a user interaction is required by the browser to enable fullscreen).
    However, a website which forces itself into fullscreen is often disliked by users.
  2. We detect changes of screen orientation and display a warning which informs the user to reenable fullscreen using the existing fullscreen button

Update: We will implement option 2.

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.