PcoWSkbVqDnWTu_dm2ix
We use cookies on this site to enhance your user experience

Designing for Multiplayer

Designing for Multiplayer

Oct 17 2019, 5:06 PM PST 10 min

As a social platform, the most successful games on Roblox utilize mechanics that spark meaningful interactions among its players. By making specific design choices that encourage social play, you will see huge improvements in engagement, retention, and monetization.

Design Choices

Balance the World Size

Consider the size of the game world compared to the max player count. A few players on a large map will make a game feel unpopulated, while a cramped lobby can feel uncomfortable.

Here are some techniques for balancing map size and player count:

  • Create key points in larger maps to draw people together, such as important NPC shops or buildings in an FPS.
  • Use community events such as boss fights or holiday challenges to bring large groups of players to the same space.
  • During development, playtest with different player counts until you reach an ideal ratio of empty space to players.

Consider the Game Genre

Depending on the genre, you may design environments differently. For instance, Welcome to Bloxburg, a roleplaying game, has hubs where players can travel to work, purchase cars, and socialize at restaurants, clubs, or house parties. Large maps aren’t an issue because players gravitate towards these social hubs. In contrast, competitive combat games like Phantom Forces design their maps smaller to force players to engage with opponents frequently.

Avoid Splintering a Small Player Base

Releasing your game with multiple game modes can risk splintering the player base. For example, if the game is a battle royale, consider releasing it with a “squads” mode until the game has an established player base. Once you’re confident the game has enough players that it can be segmented and still have populated servers, introduce additional modes like solo play.

Provide Login Rewards

One way of maintaining a consistent, healthy community is ensuring that players return regularly. A common technique on Roblox is to provide login rewards such as /articles/Developer Products In Game Purchases|in-game items or /articles/Badges Special Game Awards|badges. As players return for rewards, it becomes part of their daily routine, ensuring your game maintains an active player base.

Some ways of incentivizing rewards include:

  • Improve standard rewards if players log in for multiple consecutive days. For instance, the roleplaying game Adopt Me! provides players in-game currency for consistent logins and a mystery gift after five days.
  • Provide ways of recognizing players for login streaks, such as rewarding exclusive cosmetic items. This reminds other players of the value of login rewards.

Social Features

Friendship and community encourages player retention and engagement. While Roblox includes features such as in-game chat and a friend system, you can improve your game with specific social features.

Prompt Friends to Join Each Other

Roblox provides SocialService functions which let players invite friends to their current game server.

The following code sample demonstrates how to use SocialService APIs for this purpose:

local SocialService = game:GetService("SocialService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer

local function canSendGameInvite(targetPlayer)
	local res, canSend = pcall(SocialService:CanSendGameInvite(targetPlayer))
	return res and canSend
end

local function promptGameInvite(targetPlayer)
	local res, canInvite = pcall(SocialService:PromptGameInvite(targetPlayer))
	return res and canInvite
end

local function openGameInvitePrompt(targetPlayer)
	local canInvite = canSendGameInvite(targetPlayer)
	if canInvite then
		local promptOpened = promptGameInvite(targetPlayer)
		return promptOpened
	end
	return false
end

local function invitePromptClosed(senderPlayer, recipientIds)
	-- Handle custom logic for players invited by sender
end

local function inputBegan(input, gameProcessed)
	local inputType = input.UserInputType
	local touch = Enum.UserInputType.Touch
	local mouse1 = Enum.UserInputType.MouseButton1

	if inputType == touch or inputType == mouse1 then
		openGameInvitePrompt(player)
	end
end

script.Parent.InputBegan:Connect(inputBegan)
SocialService.GameInvitePromptClosed:Connect(invitePromptClosed)

In order to work as expected, this code sample must be placed in a LocalScript descending from a GuiButton. When a player activates the button, it executes the openGameInvitePrompt() function which checks whether they can send game invites via SocialService/CanSendGameInviteAsync|CanSendGameInviteAsync(), then it opens the invite prompt using SocialService/PromptGameInvite|PromptGameInvite().

Group Players Together

Encourage social connections naturally by adding a system that groups players together. This could be a challenge requiring more than one player to participate, like a boss fight in a combat game or a movie theater showtime in a social game.

Celebrate Player Success In-World

Recognizing players for in-game achievements not only rewards the individual, but it can spark conversation or encourage others to seek out that reward. Some examples include:

  • Give the rewarded player a temporary particle effect.
  • Broadcast a message to a lobby of players.
  • Use leaderboards to showcase player achievements.

One game which implements player recognition is Egg Farm Simulator. It includes leaderboards — strategically located in the central area of the game — to showcase the achievements of the most dedicated players.

Further Resources

Tags:
  • multiplayer
  • engagement
  • social