Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

12-Player Online Multiplayer - Soulseek Mode #43

Open
TheYellowArchitect opened this issue Aug 13, 2022 · 0 comments
Open

12-Player Online Multiplayer - Soulseek Mode #43

TheYellowArchitect opened this issue Aug 13, 2022 · 0 comments
Labels
level editor Anything related to the level editor netcoding Anything related to networking or online multiplayer new feature New feature or request

Comments

@TheYellowArchitect
Copy link
Owner

TheYellowArchitect commented Aug 13, 2022

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

@TheYellowArchitect TheYellowArchitect added new feature New feature or request level editor Anything related to the level editor netcoding Anything related to networking or online multiplayer labels Aug 13, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
level editor Anything related to the level editor netcoding Anything related to networking or online multiplayer new feature New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant