v2021.11.9: Roles and Cosmicubes

On November 9 2021, Innersloth released the Roles and Cosmicubes update.

Official patch notes are on Innersloth's blog

Network version: 2021.11.9

Implementation of roles

There is a new SetRole RPC that sets the player's role. This replaces the SetInfected RPC.

To configure these roles, various role options are added to the game settings, changing its version to 5. See SyncSettings on how this data is encoded.

Engineer

The Engineer is a crewmate can vent like an Impostor, but only stay hidden for a few seconds instead of being allowed to stay in the vents indefinitely. The timeout for this works by the client sending an ExitVent command after the configured time is up. Engineers are also booted from vents if the vent they are in gets cleaned.

This affects the EnterVent, ExitVent, SnapTo and BootFromVent RPC's.

Scientist

The Scientist is a crewmate that can see the vitals panel from anywhere on the map for a few seconds. This works entirely client-side.

Shapeshifter

The Shapeshifter is an impostor can convert itself into another player. After a configurable amount of time, the player will shapeshift back. This uses the new Shapeshift RPC.

Guardian Angel

The Guardian Role is a dead crewmate role that is assigned to the player upon their death. While the player is in ghost form, they can protect a player: this will cause a colored angel to fly around the protected player, which is visible to ghosts and configureably Impostors as well.

This role uses 3 new RPC's: ProtectPlayer, CheckMurder and CheckProtect. It also changes how the MurderPlayer RPC is used.

Implementation of Cosmicubes

Cosmicubes are Innersloth's system for unlocking cosmetics. This is done by paying for stars and receiving beans and pods for playing games on the official servers. As the Cosmicube system uses Epic Online Services to maintain an inventory, it is currently not possible to reward beans and pods on custom servers.

To set the active cosmicube and award the correct beans, the SetActivePodType root packets is sent by the client.

All cosmetics RPC's have been replaced by variants which use a string instead of an numerical ID, see a summary page for these. This includes the new cosmetic types, Visors and NamePlates. The user level is also set via an RPC, SetLevel.

Other Changes

Official Game Servers now use an encrypted connection

As Innersloth is preparing for a release on consoles, the main game traffic is now sent over an encrypted connection, using Hazel's DTLS support. This disables the ability to connect to 3rd party servers. As a workaround, Reactor disables DTLS traffic for this version. In version 2021.12.14 and up DTLS can be disabled by using the new UseDtls flag. See Roles and Cosmicubes Bugfixes.

PlatformSpecificData

Many packets now include PlatformSpecificData, which is a large struct which details which platform the player is playing on.

Many players in a room can cause issues for some clients

Due to how PlatformSpecificData is shared, some packets are now larger than before as they now include the full PlatformSpecificData, which may hit packet size limitations.

Miscellaneous changes:

  • To account for the new game options added by this patch, GameOptions version 5 is used.
  • Previously it was possible to communicate error message directly when the server replied to JoinGame, this was removed. Disconnecting players with a custom message has the same result.
  • GameData no longer has an separate serialization for the initial state.