sherpal / battleforflatland Goto Github PK
View Code? Open in Web Editor NEW2D multiplayer coop game
2D multiplayer coop game
Currently, the only way for.a player to know what its current target is is to look at the name in the target bar. This is far from being sufficient.
The game should at least:
Currently, players send they position (and related information such as speed or rotation) to the server 60 times per second. This is way too much and will not scale well with going to ~10-15 players (this would mean 900 actions per second, only for player movements!).
This change should comme with a feature that AIs should have smoother movements, in the sense that they should not have a speed be either 0 or full speed, but should rather accelerate from and decelerate to 0 speed.
See title. Some dependencies are required before making this possible.
I think the stoppers now are ZIO and Circe
Currently the Asset type (in package assets in the frontend subproject) is simply a wrapper around a String url. It could be good to add more semantic in the type system. This semantic should reflect what the asset is used for.
For example, an asset could be some asset for an ability. We could then define
trait Asset[-For] {
...
}
and create an asset for an ability like Asset[Ability]
. (I guess this should be contravariant)
This way, we can, at certain places, ask assets for specific things and have more type checking. Also serves as documentation.
Players are currently rather small. 10 units for their radius is way too small.
This should be changed to 20. This change is not that straightforward because some other things depend on that radius, for example damage zones in Boss 102. But the walls in Boss 102 do not, hence changing the radius to 20 makes the game too small.
The game needs a working implementation of a Global Cooldown (GCD).
The purpose of a GCD is to make melee (mostly) entities do less stuff, which is easier and more intuitive.
Currently, a Buff
on an entity does not bear any information on how this buff actually appeared.
This is annoying because it prevents for doing later things depending on the source (for example, who put the debuff/buff in the first place).
I believe this can be fixed by adding to Buff
a type parameter Source
representing the type of information representing the source. For exemple it could be Entity.Id
to tell that the buff was placed by that entity. Then concrete implementations of Buffs
should have a value source: Source
.
We could also be a bit more restrictive and create an ADT with possible sources, and ask that as a parameter. This, I believe, will fulfil everything that we need and will ease many other implementations.
Such an ADT could look like
sealed trait Source
case class FromEntity(entityId: Entity.Id) extends Source
case object FromGame extends Source
// ...
The game is all about communication between players. A great way to allow players to communicate is to make it possible for them to put "markers" of sorts in the game.
These markers should have highly distinguishable shapes, and the players should be able to put them:
I believe that 6 possible markers should be enough, for example, a star, a lozenge, a square, a triangle, a skull and a cross.
Players should be able to put them before the fight actually starts, and there should be a shortcut for that.
See title. (Send Grid is probably fine.)
The sounds should integrate a lot of sounds in order to increase the overall feeling while playing.
Sounds may happen:
When in game, many "errors" can come from the user action. Typically a user who "spam" an ability key, or tries to hit/heal some entity too far away, or not in sight.
When any of these errors occur in game, there should be, at the top of the screen, a toast-ish red message disappearing after some time. The display of these messages could perhaps depend on the kind of error.
This issue will require a little bit of rewriting in the code. Especially because currently there is no actual feedback onn why a given action can't be performed.
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.