12-Player Online Multiplayer - Soulseek Mode #43
Labels
level editor
Anything related to the level editor
netcoding
Anything related to networking or online multiplayer
new feature
New feature or request
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 aSoulseekWarrior.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:
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 ;)
The text was updated successfully, but these errors were encountered: