HackerTube
HomeLongsLikedHistoryWatch laterCategoriesPlaylistsSettings

Overwatch Gameplay Architecture and Netcode

GDC Festival of Gaming16 HN recommenders · recommended in 10 months, 2019-2025
YouTube
196K views · 7 years ago · talk · evergreen

Blizzard's Timothy Ford explains in this 2017 GDC session how Overwatch uses an Entity Component System architecture for layered gameplay. He also covers its server-authoritative netcode with client-side prediction and how they keep the game responsive and fair.

HN treats it as the best real-world AAA example of ECS and game netcode, and cites it constantly in discussions of data-oriented design.

Game programming & enginesSoftware architecture & design#entitycomponentsystem#netcode#overwatch#clientprediction#gdc#data-orienteddesign

20 comments from Hacker News

@dkbrk2025 · in “Trillions spent and big software projects are still failing”

Have you seen the presentation from GDC 2017 on the architecture of Overwatch [0]? If you watch the video in detail -- stepping through frame-by-frame at some points -- it provides a nearly complete schematic of the game's architecture. That's probably why the video has since been made unlisted. [0]: ▶ this video

RecommendsView on HN
@yayitswei2024 · in “Riot Games: Peeking into Valorant's Netcode (2020)”

For comparison, here's a talk about Overwatch's netcode: ▶ this video Overwatch has a long time-to-kill, interesting to compare tradeoffs.

CitesView on HN
@FrostKiwi2024 · in “Flecs v4.0 Is Out”

Flecs implements a relatively new programming paradigm "ECS". For context, here is a big budget project, Blizzard's Overwatch embracing ECS [1]. [1] ▶ this video

CitesView on HN
@bcrosby952023 · in “I'm open-sourcing my game engine”

There's an awesome talk by someone in the overwatch team in youtube. It's about ECS but it has a big section on networking that had some useful tips. Edit: here it is - ▶ this video

Strongly recommendsView on HN
@adampk2021 · in “Unity patents ECS”

▶ this video "In this 2017 GDC session, Blizzard's Timothy Ford explains how Overwatch uses the Entity Component System (ECS) architecture to create a rich variety of layered gameplay." (My favorite resource to explain ECS + NetCode)

Strongly recommendsView on HN
@Rd6n62021 · in “Unity patents ECS”

Isn’t there a ton of prior art? I’ve seen tech talks about ecs implementations for years. From the top of my head, here’s a great tech talk about overwatch. ▶ this video Here’s a tech talk by Bob Nystrom (the game programming patterns guy) that mentions ecs from years ago link Edit: letsInvalid in another thread above linked to an article from 2013: link

RecommendsView on HN
@pphysch2021 · in “Open 3D Engine”

I'm seeing Godot mentioned a lot: one major distinction between O3DE and Godot is that O3DE is "ECS-based" while Godot is "OOP-based" [1][2]. This makes little difference for the hobbyist gamedev, but it has ramifications for large projects with many interacting systems. Proper ECS architecture better supports the latter case [3]. [1] - link [2] - link [3] - ▶ this video

CitesView on HN
@Bekwnn2021 · in “Data-oriented design or why you might shoot yourself in the foot with OOP (2009)”

> The components on the entity define not only it's data but also it's behavior by the set of systems that act on the corresponding components. And you can take these object definitions and inherit them to add additional behavior or change the existing behavior by adding more components to the new definition. This seems to miss what ECS actually is, unless you're just referring to the old-school way of doing entity components and not the data-oriented way. Data-oriented ECS way of doing things is to separate state and behaviour. Entity components essentially become structs where their only behaviour is potentially some getter/setter utilities. Behaviours are then state-less systems (just functions, essentially) which act on a set of components. For example, a PhysicsUpdateBehaviour might take in a RigidBodyComponent and a HealthComponent to perform a physics update and apply physics/fall based damage. The main benefit of ECS (imo) isn't even really performance. It makes code in complicated game projects much easier to manage by clarifying the game loop and by making it much more obvious how and when entity state is being modified. It's the kind of thing that potentially complicates a smaller project, but makes larger more complex projects easier to manage. This Overwatch GDC talk is the best breakdown/example of data-oriented ECS in a AAA game that I know of: ▶ this video

Strongly recommendsView on HN
@jonhermansen2021 · in “Why isn't Godot an ECS-based game engine?”

For anyone curious to know more about usage of ECS in Overwatch, check out this GDC talk from one of the developers: ▶ this video

RecommendsView on HN
@mathgladiator2021 · in “The future of web software is HTML over WebSockets”

This is a next step for my project as I'm trying to figure out how to generalize client side predictions in a sane way. Basically, I'm happy with my latency (for board games) which I hope to migrate closer to people as more edge compute offerings emerge. However, I'm wondering what the path is to find some of these ideas in more latency sensitive applications. The explanation for how the net-code behind Overwatch is a good explanation: ▶ this video and I'm just trying to figure out how to build the reactive tree in a way to support it sanely.

RecommendsView on HN
@milesvp2021 · in “Functorio”

Your comment made me feel compelled to mention a Blizzard talk I came across recently on the ECS (Entity Component System) architecture they used for Overwatch. It looks suspiciously like a function first architecture in that they don't allow mixing of data and functions. I'm not sure how purely functional it is, but it certainly strikes me as the kind of architecture that Carmack would appreciate in dealing with complexities that lead him to a more functional programming style. This talk is 3 years after release, and includes all the hindsight they gained from that. Also, the parts talking about the netcode are quite amazing, and the precision of their predictors that they attribute to using ECS. ▶ this video

RecommendsView on HN
@nightski2021 · in “OO in Python is mostly pointless”

There is a fantastic GDC video about Blizzard's use of ECS in Overwatch and how it made it far easier to understand the system due to all of the interacting subsystems. ▶ this video

Strongly recommendsView on HN
@setr2021 · in “OO in Python is mostly pointless”

It's definitely been around but I think Unity's (never-finishing) ECS + Rust gamedev community's focus on it has really spiked its popularity/interest lately. Otherwise pretty much every recommendation/engine is OOP-based, with a few straggling extensions/libraries for ECS here and there. No idea about usage in industry though, but it comes up randomly e.g blizzard: ▶ this video

CitesView on HN
@DecoPerson2020 · in “rg3d: Rust 3D game engine with an FPS demo game and scene editor”

Entities are a collection of component instances and nothing more. Components in ECS are data-only. Systems in ECS are logic-only. If you follow this strictly, then you cannot support encapsulation or data-hiding. There is no sole definition of OOP, but it is widely accepted that the ability to do encapsulation, including data-hiding, is a key part of OOP. Therefore, ECS is not OOP. QED If you’ve not seen the Overwatch team’s talk in which they discuss ECS, I can highly recommend it as a good resource to learn about ECS: ▶ this video There may be models commonly used in those languages you mentioned that are similar to ECS, but you seem to be implying that ECS is a form of OOP; it is not. Even if you implemented OOP using Structs of Arrays, a thread per object, or whatever you like, you cannot strictly conform with ECS’s requirement that “components have no logic” while also strictly conforming with OOP’s requirement that “objects should not know about each others’ internals” (object hierarchy).

Strongly recommendsView on HN
@nikki932020 · in “An Introduction to Data Oriented Design with Rust”

▶ this video I think this talk on how an ECS actually reduced coupling in the case of Overwatch would be a good concrete real world example to look at. It enabled some architectural benefits for implementing replay cameras or for networking code in their game through actual reduced coupling between input ->commands and commands->simulation.

RecommendsView on HN
@rcxdude2020 · in “How do I design a game from scratch? A primer on core loops”

Here's an interesting presentation on Overwatch's ECS system, though he doesn't go into great detail in terms of multithreading, he points out how the design makes it easy to identify what parts of the system can be safely run in parallel. ▶ this video

RecommendsView on HN
@Mirioron2020 · in “Show HN: Unity MMORPG Boilerplate – Multiplayer in Unity Made Easy”

The important two points are that the client must react immediately to a user's input, but at the same time the server has to have the authoritative game state. One way of doing that is that the server runs the authoritative simulation and the clients send input to the server, but the clients also run their own simulations. In some games the client will try to predict what the server will do. If there's a conflict with what the client simulates compared to the server then the client gets rolled back to the server's state. This usually happens when there's a second player that interferes in some way. Here is a talk by Timothy Ford about Overwatch's netcode (it's really fascinating): ▶ this video

RecommendsView on HN
@mtsr2020 · in “EnTT: Gaming meets Modern C++”

Since you generally want to keep a set number of time steps the commonly used data structure for this is a ring buffer. No garbage and all you do is increment the index (with wraparound) every step. Not a lot of technical details, but this video has a great general overview ▶ this video

RecommendsView on HN
@DavidVoid2020 · in “PC games are fighting a new surge of cheaters and hackers”

Overwatch allows none of that and seems to have some pretty well-designed netcode. Clients only send their controller inputs and the server has full authority of what actually happens. Blizzard's GDC talk about it is really good if you want an explanation of how to make a game feel responsive and fair without giving clients authority over everything [1]. Ofc this does not eliminate aimbot or wallhacks, but it gets rid of pretty much all other forms of cheating. [1] ▶ this video (Netcode talk starts at 22:22)

Strongly recommendsView on HN
@endgame2019 · in “Correctness – A paradigm for sustainable software development”

> running a simulation (what OOP was invented for) I used to believe that. I no longer do. Among other things, I watched this talk about Overwatch's architecture and it really seems like you have to go against your OO instincts to create larger simulations: ▶ this video

RecommendsView on HN
Bob Nystrom - Is There More to Game Architecture than ECS?23:06

Bob Nystrom - Is There More to Game Architecture than ECS?

Roguelike Celebration
301K views • 8 years ago
RustConf 2018 - Closing Keynote - Using Rust For Game Development by Catherine West42:30

RustConf 2018 - Closing Keynote - Using Rust For Game Development by Catherine West

Rust Programming Language
152K views • 8 years ago
Data Oriented GUI in Rust by Raph Levien - Bay Area Rust Meetup1:05:59

Data Oriented GUI in Rust by Raph Levien - Bay Area Rust Meetup

Rust Programming Language
83K views • 8 years ago
Destiny's Multithreaded Rendering Architecture1:06:37

Destiny's Multithreaded Rendering Architecture

GDC Festival of Gaming
45K views • 11 years ago
Rant: Entity systems and the Rust borrow checker ... or something.1:01:51

Rant: Entity systems and the Rust borrow checker ... or something.

Jonathan Blow
304K views • 8 years ago
Exploring the Tech and Design of Noita31:00

Exploring the Tech and Design of Noita

GDC Festival of Gaming
288K views • 6 years ago
8 Frames in 16ms: Rollback Networking in Mortal Kombat and Injustice 259:38

8 Frames in 16ms: Rollback Networking in Mortal Kombat and Injustice 2

GDC Festival of Gaming
94K views • 7 years ago
Robocalypse Now: Using Deep Learning to Combat Cheating in Counter-Strike: Global Offensive1:05:25

Robocalypse Now: Using Deep Learning to Combat Cheating in Counter-Strike: Global Offensive

GDC Festival of Gaming
35K views • 6 years ago
VACNET Anti-cheat13:04

VACNET Anti-cheat

3kliksphilip
574K views • 8 years ago
I Shot You First: Networking the Gameplay of Halo: Reach1:49:07

I Shot You First: Networking the Gameplay of Halo: Reach

GDC Festival of Gaming
58K views • 8 years ago
Google I/O 2011: Kick-Ass Game Programming with Google Web Toolkit44:59

Google I/O 2011: Kick-Ass Game Programming with Google Web Toolkit

Google for Developers
106K views • 15 years ago
The Implementation of Rewind in Braid26:56

The Implementation of Rewind in Braid

GDC Festival of Gaming
141K views • 9 years ago
Breaking Conventions with The Legend of Zelda: Breath of the Wild1:28:30

Breaking Conventions with The Legend of Zelda: Breath of the Wild

GDC Festival of Gaming
565K views • 9 years ago
Multithreading the Entire Destiny Engine59:34

Multithreading the Entire Destiny Engine

GDC Festival of Gaming
65K views • 9 years ago
IRDC US 2015 - Brian Bucklew, Data-Driven Engines of Qud and Sproggiwood27:10

IRDC US 2015 - Brian Bucklew, Data-Driven Engines of Qud and Sproggiwood

Logo “ND” Surströmming
39K views • 11 years ago
Unity DOTS vs Handbuilt: Sample Project27:56

Unity DOTS vs Handbuilt: Sample Project

Nick Caston
687K views • 6 years ago
GDC 2018: John McDonald (Valve) - Using Deep Learning to Combat Cheating in CSGO1:05:33

GDC 2018: John McDonald (Valve) - Using Deep Learning to Combat Cheating in CSGO

max4warn
128K views • 8 years ago
CppCon 2014: Jeff Preshing "How Ubisoft Develops Games for Multicore - Before and After C++11"1:04:33

CppCon 2014: Jeff Preshing "How Ubisoft Develops Games for Multicore - Before and After C++11"

CppCon
53K views • 12 years ago
[Highlight] StarCraft Remastered Rant11:17

[Highlight] StarCraft Remastered Rant

Day9TV
453K views • 9 years ago
TUN: Un-Ruining the MMO14:05

TUN: Un-Ruining the MMO

MrBtongue
291K views • 13 years ago