Skip to content

A writeup of the network protocol used in Among Us, a game by Innersloth.

Notifications You must be signed in to change notification settings

roobscoob/among-us-protocol

Repository files navigation

Among Us Protocol Research

Note: This repo is outdated, it is correct up to and partially including the Airship Update. PRs are welcome!

Contained in this repo is my detailed explanation of the netcode behind Among Us, a game by Innersloth. Myself and others have spent countless hours scanning the game's decompiled source code as well as manually dissecting each and every packet sent by the game. Not all of this information will be correct, though it is safe to assume that almost all of it is, and those parts that I am uncertain of will be labeled as such.

I do not work for Innersloth, however Innersloth has provided support in the construction of this wiki; for the most part this is just the result of an obsession in discovering how the game works.

This repo does not currently contain instructions on how to decompile/deobfuscate the game.

To intercept packets, I recommend using Wireshark with one of the display filters below.

To show all game traffic:
udp.port in { 22023 22123 22223 22323 22423 22523 22623 22723 22823 22923 }

To show only reliable packets (recommended as movement, pings, and acks can add a bunch of noise):
udp.port in { 22023 22123 22223 22323 22423 22523 22623 22723 22823 22923 } and data[0] == 01

If you would like to discuss the Among Us protocol or client modding with me or others interested in such topics, you are welcome to join the NodePolus Discord server, or Reactor

Table of Contents

  1. Packet Structure
    1. Protocol Data Types
    2. Packed Integers
    3. The Structure of a Hazel Message
    4. The Vector2 Type
    5. Packet Types (SendOption)
      1. 0x00 Normal
      2. 0x01 Reliable
      3. 0x08 Hello
      4. 0x09 Disconnect
      5. 0x0a Acknowledgement
      6. 0x0b Fragment
      7. 0x0c Ping
    6. Enums
      1. AlterGameTag
      2. ChatNoteType
      3. Color
      4. DisconnectReason
      5. GameKeyword
      6. GameOverReason
      7. GameState
      8. Hat
      9. KillDistance
      10. LimboState
      11. Map
      12. Pet
      13. QuickChatMode
      14. ReportOutcome
      15. ReportReason
      16. Skin
      17. SpawnFlag
      18. SpawnType
      19. SystemType
      20. TaskBarMode
      21. TaskType
    7. The Different Types of IDs
  2. Root Message Types
    1. 0x00 HostGame
    2. 0x01 JoinGame
    3. 0x02 StartGame
    4. 0x03 RemoveGame
    5. 0x04 RemovePlayer
    6. 0x05 GameData
    7. 0x06 GameDataTo
    8. 0x07 JoinedGame
    9. 0x08 EndGame
    10. 0x09 GetGameList
    11. 0x0a AlterGame
    12. 0x0b KickPlayer
    13. 0x0c WaitForHost
    14. 0x0d Redirect
    15. 0x0e ReselectServer
    16. 0x10 GetGameListV2
    17. 0x11 ReportPlayer
  3. GameData and GameDataTo Message Types
    1. 0x01 Data
    2. 0x02 RPC
    3. 0x04 Spawn
    4. 0x05 Despawn
    5. 0x06 SceneChange
    6. 0x07 Ready
    7. 0x08 ChangeSettings
    8. 0xcd ClientInfo
  4. RPC Message Types
    1. 0x00 PlayAnimation
    2. 0x01 CompleteTask
    3. 0x02 SyncSettings
    4. 0x03 SetInfected
    5. 0x04 Exiled
    6. 0x05 CheckName
    7. 0x06 SetName
    8. 0x07 CheckColor
    9. 0x08 SetColor
    10. 0x09 SetHat
    11. 0x0a SetSkin
    12. 0x0b ReportDeadBody
    13. 0x0c MurderPlayer
    14. 0x0d SendChat
    15. 0x0e StartMeeting
    16. 0x0f SetScanner
    17. 0x10 SendChatNote
    18. 0x11 SetPet
    19. 0x12 SetStartCounter
    20. 0x13 EnterVent
    21. 0x14 ExitVent
    22. 0x15 SnapTo
    23. 0x16 Close
    24. 0x17 VotingComplete
    25. 0x18 CastVote
    26. 0x19 ClearVote
    27. 0x1a AddVote
    28. 0x1b CloseDoorsOfType
    29. 0x1c RepairSystem
    30. 0x1d SetTasks
    31. 0x1f ClimbLadder
    32. 0x20 UsePlatform
  5. InnerNetObject Types
    1. SkeldShipStatus
    2. MeetingHud
    3. LobbyBehaviour
    4. GameData
    5. PlayerControl
    6. MiraShipStatus
    7. PolusShipStatus
    8. DleksShipStatus
    9. VoteBanSystem
    10. PlayerPhysics
    11. CustomNetworkTransform
  6. The SystemType Implementations
    1. ReactorSystem
    2. SwitchSystem
    3. LifeSuppSystem
    4. MedScanSystem
    5. SecurityCameraSystem
    6. HudOverrideSystem
    7. AutoDoorsSystem
    8. SabotageSystem
    9. HqHudSystem
    10. DeconSystem
    11. DoorsSystem
  7. Miscellaneous
    1. The Structure of the GameOptionsData Object
    2. Converting Game IDs to and from Game Codes
    3. Reading the Client Version
    4. Map-Specific IDs for Vents and Tasks
      1. The Skeld
        1. Vents
        2. Tasks
      2. MIRA HQ
        1. Vents
        2. Tasks
      3. Polus
        1. Vents
        2. Tasks
      4. The Airship
        1. Vents
        2. Tasks
        3. Ladders