TheYellowArchitect / doubledamnation

Exclusively Co-Op Metroidvania with Movement as smooth as Smash Bros Melee
GNU General Public License v3.0
19 stars 2 forks source link

12-Player Online Multiplayer - Soulseek Mode #43

Open TheYellowArchitect opened 2 years ago

TheYellowArchitect commented 2 years ago

So, 2 players for each "character", makes for 6 "characters" in a world. Let's look into the game design first.

Game-Design

Obviously, with this movement, it is very hard to find or hit another player, in such vast worlds/levels (see Super Mario 64) Let's consider the default implementation, the classic implementation for online multiplayer 2D movement-focused games Everyone starts at checkpoint, and its a race to the end of the level. In Double Damnation, a level can be finished via over 20+ paths, no player will stumble onto another player! Not to mention the speed difference of a newbie and speedrunner, will often be 10 times faster...

In short, aside of the very start (chokepoint exit), you will never interact with another player. The final experience will be no different than solo speedrunning, aside of a few dead monsters and fallen platforms. If levels were linear with max 3 paths, and movement had less depth, there would be player interactions and the default speedrun race could be a fun experience.

Soulseek Mode

For reference, have this open in another tab.

So, your goal is to place a "flag" anywhere on the level. You are given 1 minute. This task, every player does. Of course, to place a "flag", you don't click it by mouse on some minimap, but have 1 minute to move to a point and place your "flag" all the while other players do the same (they can attack you, kill monsters etc etc)

When 1 minute passes, each player is given an image-minimap of the level and where the flags are placed. Probably with a spell ("map"/"show" or whatever)

And the goal of every player to win? Get all flags, before others. To make the routes unique, all flags - 1, so you are to design the optimal route among the flags, instead of having it be obvious where to go, but you also think how to go.

Note that "flags" are not consumable. Once a player gets a "flag", it stays there for other players to get it as well.

So, Soulseek Mode provides insane replayability, because of the interactions with other players (routes will often collide, as the direction is random), think for example creating pillars which block paths, or placing "flags" at spots which normally require falling platforms but these platforms are now unavailable for the rest (fallen platform). And ofc, a different route in each game, instead of grinding start of level -> end of level

There could be some polishing touches like a X/Y restriction (placing "flag" outside level ffs), and allowing Soulseek Mode for the level editor (true infinite replayability)

tl;dr: You have 1 minute to place your "flag". After 1 minute, its a race for who gets the most "flags" first!

Netcoding

Requires having finished most of Mirror Porting Other players are not duplicates or prefabs of Warrior but brand new classes. A player who isn't local is just a gameobject with a sprite renderer, an animator, and a SoulseekWarrior.cs class, nothing more, no collisions even. Player Position sync is just a Vector2, which should not even interpolate if outside camera range. As for visual sync? 2 ways:

  1. Sending the sprite index (I doubt it will look clean on >50 ping)
  2. Sending animation index, e.g. "PlayerX at timestamp 8.12361 played Idle" and hence, "Idle" animation on that player's sprite plays (hence ensuring smoothness of multiple sprites playing with proper timings from each other)

Attacks (health hitbox and spear hitboxes) may need some work, but what is certain is that player collisions dont exist, hence players can pass through you. It is possible to release without attack/damaging other players, but honestly that would be boring, and luckily isn't much work.

Spells are to be duplicated from current netcoding (e.g. see how fireball works)

For connecting players, just creating a new type of lobby via Steam API https://partner.steamgames.com/doc/features/multiplayer/game_servers https://partner.steamgames.com/doc/features/multiplayer/matchmaking

How to Access Soulseek Mode?

What do you think the top gate in TutorialScene is for? Currently, its the same as bottom, but if this mode was created, you can be certain it would load the same level, but with Soulseek Mode ;)