Pat Wyatt
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:00Casey Muratori: Introducing Pat Wyatt
0:00Casey Muratori: Introducing Pat Wyatt
0:00Casey Muratori: Introducing Pat Wyatt
1:58CM: What was your first networked game?
1:58CM: What was your first networked game?
1:58CM: What was your first networked game?
2:08Pat Wyatt: Porting Battle Chess to Windows 3.0
2:08Pat Wyatt: Porting Battle Chess to Windows 3.0
2:08Pat Wyatt: Porting Battle Chess to Windows 3.0
2:19CM: What was involved in networking development for Warcraft?
2:19CM: What was involved in networking development for Warcraft?
2:19CM: What was involved in networking development for Warcraft?
2:44PW: Networking on Warcraft, sending user input
2:44PW: Networking on Warcraft, sending user input
2:44PW: Networking on Warcraft, sending user input
3:40CM: How did you deal with latency?
3:40CM: How did you deal with latency?
3:40CM: How did you deal with latency?
3:56PW: Queueing up 400ms worth of actions
3:56PW: Queueing up 400ms worth of actions
3:56PW: Queueing up 400ms worth of actions
5:03CM: The Warcraft networking model, buying time
5:03CM: The Warcraft networking model, buying time
5:03CM: The Warcraft networking model, buying time
5:29PW: Waiting for everyone's packets before executing the turn
5:29PW: Waiting for everyone's packets before executing the turn
5:29PW: Waiting for everyone's packets before executing the turn
5:44CM: What happens if we don't hear from everybody?
5:44CM: What happens if we don't hear from everybody?
5:44CM: What happens if we don't hear from everybody?
6:14PW: Greying out the screen after ~5 seconds of inactivity
6:14PW: Greying out the screen after ~5 seconds of inactivity
6:14PW: Greying out the screen after ~5 seconds of inactivity
6:38CM: Clean division of the networking code from the rest
6:38CM: Clean division of the networking code from the rest
6:38CM: Clean division of the networking code from the rest
7:00PW: Warcraft had networking code everywhere
7:00PW: Warcraft had networking code everywhere
7:00PW: Warcraft had networking code everywhere
7:12CM: It would have been separable?
7:12CM: It would have been separable?
7:12CM: It would have been separable?
7:21PW: The close integration occurred organically
7:21PW: The close integration occurred organically
7:21PW: The close integration occurred organically
7:30CM: Same thing for Warcraft II?
7:30CM: Same thing for Warcraft II?
7:30CM: Same thing for Warcraft II?
7:36PW: Warcraft II supported games with more than two players
7:36PW: Warcraft II supported games with more than two players
7:36PW: Warcraft II supported games with more than two players
8:18CM: What networking model did you use on Diablo?
8:18CM: What networking model did you use on Diablo?
8:18CM: What networking model did you use on Diablo?
8:35PW: Networking on Diablo
8:35PW: Networking on Diablo
8:35PW: Networking on Diablo
9:41CM: Explain more about the intermixed data
9:41CM: Explain more about the intermixed data
9:41CM: Explain more about the intermixed data
9:54PW: Separating data structures
9:54PW: Separating data structures
9:54PW: Separating data structures
10:28CM: Warcraft II was already divided up?
10:28CM: Warcraft II was already divided up?
10:28CM: Warcraft II was already divided up?
10:42PW: Synchronous lockstep games can have no coding errors
10:42PW: Synchronous lockstep games can have no coding errors
10:42PW: Synchronous lockstep games can have no coding errors
11:37CM: What was your approach to Diablo's networking?
11:37CM: What was your approach to Diablo's networking?
11:37CM: What was your approach to Diablo's networking?
11:47PW: Asynchronous, loosely-coupled networking model
11:47PW: Asynchronous, loosely-coupled networking model
11:47PW: Asynchronous, loosely-coupled networking model
12:45CM: A consensus problem
12:45CM: A consensus problem
12:45CM: A consensus problem
13:13PW: The master – the first to enter a level – initialises their level and maintains a list of players
13:13PW: The master – the first to enter a level – initialises their level and maintains a list of players
13:13PW: The master – the first to enter a level – initialises their level and maintains a list of players
14:52CM: How do you handle activity from multiple players on the same level?
14:52CM: How do you handle activity from multiple players on the same level?
14:52CM: How do you handle activity from multiple players on the same level?
15:09PW: Broadcasting messages, two-stage attempted pickups, with the master arbitrating race conditions
15:09PW: Broadcasting messages, two-stage attempted pickups, with the master arbitrating race conditions
15:09PW: Broadcasting messages, two-stage attempted pickups, with the master arbitrating race conditions
17:49CM: Did I miss anything?
17:49CM: Did I miss anything?
17:49CM: Did I miss anything?
17:54PW: Don't do a game like this, because people will cheat
17:54PW: Don't do a game like this, because people will cheat
17:54PW: Don't do a game like this, because people will cheat
19:21CM: Onto Guild Wars
19:21CM: Onto Guild Wars
19:21CM: Onto Guild Wars
19:56PW: Guild Wars' 200kb executable
19:56PW: Guild Wars' 200kb executable
19:56PW: Guild Wars' 200kb executable
20:12CM: Did your approach to Guild Wars come from your experience with the griefing on Diablo?
20:12CM: Did your approach to Guild Wars come from your experience with the griefing on Diablo?
20:12CM: Did your approach to Guild Wars come from your experience with the griefing on Diablo?
20:29PW: Also Guild Wars' online economy
20:29PW: Also Guild Wars' online economy
20:29PW: Also Guild Wars' online economy
20:32CM: What was involved in making Guild Wars happen?
20:32CM: What was involved in making Guild Wars happen?
20:32CM: What was involved in making Guild Wars happen?
21:08PW: The architecture of Guild Wars, using a client-server model
21:08PW: The architecture of Guild Wars, using a client-server model
21:08PW: The architecture of Guild Wars, using a client-server model
21:56CM: So you had an on-demand package system?
21:56CM: So you had an on-demand package system?
21:56CM: So you had an on-demand package system?
22:27PW: Guild Wars' package manager, with on-demand delta compression
22:27PW: Guild Wars' package manager, with on-demand delta compression
22:27PW: Guild Wars' package manager, with on-demand delta compression
23:23CM: So the ID and version number are separate?
23:23CM: So the ID and version number are separate?
23:23CM: So the ID and version number are separate?
23:37PW: File version identification
23:37PW: File version identification
23:37PW: File version identification
24:12CM: How do you assign IDs to artist creations?
24:12CM: How do you assign IDs to artist creations?
24:12CM: How do you assign IDs to artist creations?
24:46PW: Checking files into Perforce
24:46PW: Checking files into Perforce
24:46PW: Checking files into Perforce
26:57CM: Did you need multiple file servers?
26:57CM: Did you need multiple file servers?
26:57CM: Did you need multiple file servers?
27:22PW: Guild Wars' file servers all over the world
27:22PW: Guild Wars' file servers all over the world
27:22PW: Guild Wars' file servers all over the world
29:48PW: Distributed database commits
29:48PW: Distributed database commits
29:48PW: Distributed database commits
33:05PW: Fast iteration, and optimising the fsbuild build system
33:05PW: Fast iteration, and optimising the fsbuild build system
33:05PW: Fast iteration, and optimising the fsbuild build system
34:57CM: Caching the delta-compressed files to meet demand
34:57CM: Caching the delta-compressed files to meet demand
34:57CM: Caching the delta-compressed files to meet demand
35:36CM: After the file server, where do we go?
35:36CM: After the file server, where do we go?
35:36CM: After the file server, where do we go?
35:59PW: The lobby server
35:59PW: The lobby server
35:59PW: The lobby server
37:08CM: TCP vs UDP?
37:08CM: TCP vs UDP?
37:08CM: TCP vs UDP?
37:33PW: Guild Wars was fully TCP
37:33PW: Guild Wars was fully TCP
37:33PW: Guild Wars was fully TCP
37:58CM: Are packets routed through the lobby server?
37:58CM: Are packets routed through the lobby server?
37:58CM: Are packets routed through the lobby server?
38:21PW: The site (matchmaking) server, and relationship with the other servers
38:21PW: The site (matchmaking) server, and relationship with the other servers
38:21PW: The site (matchmaking) server, and relationship with the other servers
39:44CM: Why so many servers?
39:44CM: Why so many servers?
39:44CM: Why so many servers?
40:02PW: Isolation of components, separation of concerns, understandability of smaller units and horizontal scalability
40:02PW: Isolation of components, separation of concerns, understandability of smaller units and horizontal scalability
40:02PW: Isolation of components, separation of concerns, understandability of smaller units and horizontal scalability
41:55CM: How did you handle the interaction of servers?
41:55CM: How did you handle the interaction of servers?
41:55CM: How did you handle the interaction of servers?
42:36PW: Server interaction and upgrades
42:36PW: Server interaction and upgrades
42:36PW: Server interaction and upgrades
44:00CM: Did the servers share some standard code?
44:00CM: Did the servers share some standard code?
44:00CM: Did the servers share some standard code?
44:49PW: Modular and hot-reloadable servers
44:49PW: Modular and hot-reloadable servers
44:49PW: Modular and hot-reloadable servers
46:40CM: More on TCP vs UDP?
46:40CM: More on TCP vs UDP?
46:40CM: More on TCP vs UDP?
47:34PW: TCP vs UDP
47:34PW: TCP vs UDP
47:34PW: TCP vs UDP
49:24CM: How much logic was needed to make TCP work?
49:24CM: How much logic was needed to make TCP work?
49:24CM: How much logic was needed to make TCP work?
49:57PW: The socket library, planning for breakage and not having functions return boolean failure
49:57PW: The socket library, planning for breakage and not having functions return boolean failure
49:57PW: The socket library, planning for breakage and not having functions return boolean failure
53:35CM: Why do we not want FPS-style lossy-but-recent networking for Guild Wars?
53:35CM: Why do we not want FPS-style lossy-but-recent networking for Guild Wars?
53:35CM: Why do we not want FPS-style lossy-but-recent networking for Guild Wars?
54:04PW: The spirit of the game was not twitch-focused
54:04PW: The spirit of the game was not twitch-focused
54:04PW: The spirit of the game was not twitch-focused
55:05CM: How did you determine what the player client sees?
55:05CM: How did you determine what the player client sees?
55:05CM: How did you determine what the player client sees?
55:42PW: The server arbitrates decisions, which the client does its best to model
55:42PW: The server arbitrates decisions, which the client does its best to model
55:42PW: The server arbitrates decisions, which the client does its best to model
57:28CM: What's it like to write decision arbitration code?
57:28CM: What's it like to write decision arbitration code?
57:28CM: What's it like to write decision arbitration code?
57:52PW: 1. Model as if each action takes a minute
57:52PW: 1. Model as if each action takes a minute
57:52PW: 1. Model as if each action takes a minute
58:16PW: 2. Inject simulated latency and jitter
58:16PW: 2. Inject simulated latency and jitter
58:16PW: 2. Inject simulated latency and jitter
59:53CM: Could you recommend some networking resources?
59:53CM: Could you recommend some networking resources?
59:53CM: Could you recommend some networking resources?
1:00:53PW: Look for "game network programming", and remember to take griefing and hacking into account
1:00:53PW: Look for "game network programming", and remember to take griefing and hacking into account
1:00:53PW: Look for "game network programming", and remember to take griefing and hacking into account
1:03:53CM: How do you get a job in the games industry?
1:03:53CM: How do you get a job in the games industry?
1:03:53CM: How do you get a job in the games industry?
1:04:14PW: Demonstrable passion
1:04:14PW: Demonstrable passion
1:04:14PW: Demonstrable passion
1:06:08PW: Recommend Cracking the Coding Interview1
1:06:08PW: Recommend Cracking the Coding Interview1
1:06:08PW: Recommend Cracking the Coding Interview1
1:07:13CM: Thank you, Pat
1:07:13CM: Thank you, Pat
1:07:13CM: Thank you, Pat