Top Banner
“Let’s Play Together” Networked Mul-player Games Amir H. Fassihi Fanafzar
75

Lets Play Together

Jan 17, 2017

Download

Engineering

Amir H. Fassihi
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Lets Play Together

“Let’s  Play  Together”  Networked  Mul-player  Games  

Amir  H.  Fassihi  Fanafzar  

Page 2: Lets Play Together

Background  

Garshasp:  The  Monster  Slayer,  PC  2011  

Garshasp:  Temple  of  the  Dragon,  PC  2012  

Shadow  Blade,  iOS,  Android  Fall,  2013  

Page 3: Lets Play Together

Current  Game  

•  Coopera-ve  Mul-player  Game  

Page 4: Lets Play Together

Mul-player  Games  

•  Co-­‐op/PvP  •  Local/LAN/Internet  •  Real-­‐-me/Asynchronous  

Page 5: Lets Play Together

This  Talk  

•  LAN/Internet  •  Co-­‐op/PvP  •  Real-me  

Page 6: Lets Play Together

Game  Networking  

Gameplay  Code  

High  Level  Network  Code  

Low  Level  Network  Code  

Page 7: Lets Play Together

Low  Level  Networking  

•  Sockets  •  Transfer  Protocols  •  NAT  (Network  Address  Transla9on)  

Page 8: Lets Play Together

Sockets  

•  Socket  –  IP  – Port  

•  OS  Support  – BSD  Sockets  – WinSock  – …  

Page 9: Lets Play Together

Transfer  Protocols  

•  UDP  – Unreliable  – Un-­‐ordered  – Connec-on-­‐less  using  Datagrams  (1400  bytes)  

•  TCP  – Reliable  – Ordered  – Stream  Based  

Page 10: Lets Play Together

Game  Networking  

     

UDP  +  reliability  +  order  

Page 11: Lets Play Together

NAT  

•  Network  Address  Transla-on  •  Connec-on  Problem  with  NAT  Box  – Server  Listening  on  Port  – Client  changing  port  

•  NAT  Punch-­‐through  with  Facilitator  Server  

Page 12: Lets Play Together

High  Level  Networking  

•  Architecture  •  Data  to  Transfer  •  Lag  Compensa-on  

Page 13: Lets Play Together

Network  Architecture  

•  Peer  to  Peer  •  Client  Server  •  Mixed  

Page 14: Lets Play Together

Peer  to  Peer  

Client  1   Client  2  

Client  3  Client  4  

Page 15: Lets Play Together

Client-­‐Server  

Client  1  

Client  2  

Client  3  

Server  

Page 16: Lets Play Together

Data  Transfer  

     

How  To  Share  The  Same  Experience?  

Page 17: Lets Play Together

What  to  Send?  

1.  Share  Inputs  2.  Share  Input  and  State  (Authorita-ve  Server)  3.  Share  Input  and  State  (Mixed  Authority)  

Page 18: Lets Play Together

Game  Loop  (Simplified)  

1.  Read  User  Input  2.  Do  Simula-on  

1.  Logic  2.  AI  3.  Physics  …  

3.  Output  1.  Render  Graphics  2.  Play  Sound/Music  3.  Update  UI  …  

Page 19: Lets Play Together

Sharing  Input  

Client  1   Client  2  

User  1  Input  

User  2  Input  

Page 20: Lets Play Together

Shared  Input  P2P  

Main  Requirement:    

Determinis=c  Simula=on  

Page 21: Lets Play Together

Shared  Input  P2P  

Constraint  (for  Lockstep):    

Lag  Effect  On  Clients  No  mid-­‐game  join!  

Page 22: Lets Play Together

Shared  Input  P2P  

Risk:    

Chea=ng  

Page 23: Lets Play Together

Shared  Input  P2P  

Advantage:    

Low  Bandwidth  Requirements  

Page 24: Lets Play Together

Shared  Input  P2P  

Used  for:  

Strategy  Games  (Starcra',  Age  of  Empires,  …)  

 

Page 25: Lets Play Together

1500  Archers  

•  1500  Archers  on  a  28.8:  Network  Programming  in  Age  of  Empires  and  Beyond,  Gamasutra  

Page 26: Lets Play Together

Shared  State  

Server  

Client  1   Client  2  

Input  1   Input  2  

Game  State  

Game  State  

Page 27: Lets Play Together

Shared  State  

Main  Requirement:    

Simula=on  Only  On  Server  

Page 28: Lets Play Together

Shared  State    

Constraint:    

High  Bandwidth    (Especially  the  Server!)  

Page 29: Lets Play Together

Shared  State  

•  Cheat  Proof  •  Non-­‐determinis-c  simula-on  is  ok  •  Different  client  lag  will  not  stall  •  Mid-­‐game  joining  possible  

Page 30: Lets Play Together

Shared  State  

Good  For:    

Ac=on  Games  Compe==ve  Games  (eSports)  

Page 31: Lets Play Together

Main  Challenge  

     

Biggest  Challenge  in  Game  Networking  is:  

Page 32: Lets Play Together

     

Lag!!!    

Page 33: Lets Play Together

Lag  in  Client-­‐Server  

Client   Server  Press  Buaon  

Press  Buaon  Fire  

Fire  

Page 34: Lets Play Together

Lag  in  Client-­‐Server  

Client   Server  Press  Buaon  

Press  Buaon  Fire  

Fire  

Lag  

Page 35: Lets Play Together

Solu-on  #1  

   

Client  Side  Predic=on  

Page 36: Lets Play Together

Client-­‐side  Predic-on  

Client   Server  Press  Buaon  

Press  Buaon  Fire  

Fire  

Check  Validity  

Page 37: Lets Play Together

Client-­‐side  Predic-on  

•  Fix  Client  State  if  different  •  State  History  on  Client  •  Useful  for  player  state  •  Can  be  used  for  other  objects  (extrapola-on)  

Page 38: Lets Play Together

Client-­‐side  Predic-on  

Popularized  by:  

Page 39: Lets Play Together

Solu-on  #2  

   

Input  Latency  

Page 40: Lets Play Together

Input  Latency  

•  Input  marked  for  future  •  50-­‐100ms  •  Client  will  interpolate  

Page 41: Lets Play Together

Input  Latency  

Client   Server  Move  Forward  T  =  +100ms  

Move  Forward  Find  posi-on  for:  +100  

Pos:  +100ms  Current  t:  +70ms  

Interpolate  between  previous  pos  and  pos  at  +100ms  for  +70ms  

Page 42: Lets Play Together

Client  Interpola-on  

-me  =  1200   -me  =  1300  pos  =  1,  1,  1   pos  =  2,  2,  1  

9me  =  1250  pos  =  1.5,  1.5,  1  

Interpolated  State  

Page 43: Lets Play Together

Solu-on  #3  

   

Server-­‐side  Lag  Compensa=on  

Page 44: Lets Play Together

Server-­‐side  Lag  Compensa-on  

•  Rewind  simula-on  on  server  based  on  client  lag.  

•  Re-­‐simulate  game.  

Page 45: Lets Play Together

Source  Engine  Lag  Compensa-on  

Page 46: Lets Play Together

Gameplay  Inconsistencies  

•  Wrong  posi-on  (no  compensa9on)  

•  Late  Hits  (with  compensa9on)  

Page 47: Lets Play Together

Problem  with  Lag  Compensa-on  

A  

B  

High  Lag  

Low  Lag  

Page 48: Lets Play Together

Problem  with  Lag  Compensa-on  

A  

B  

High  Lag  

Low  Lag  

B  

Page 49: Lets Play Together

Design  

   

Lag  Compensa=on  Strategy  can  be  a    “Game  Design”  decision.  

Page 50: Lets Play Together

Doom  III  Solu-on  

 Player  Extrapola=on  

Page 51: Lets Play Together

Player  Extrapola-on  

•  A  kind  of  Predic-on  •  Assume  controls  don’t  change  •  Simulate  fully  (with  Physics)  like  the  server  •  AKA  Dead  Reckoning  

Page 52: Lets Play Together

Mixed  Authority  

•  Clients  with  Authority  over  some  objects.  •  Example:  Sync  Host  in  FUSE  (Overstrike),  Game  Developer  Magazine,  Feb  2012  

 

Page 53: Lets Play Together

Network  Op-miza-on  

•  High  Level  – Architecture  Selec-on  – Update  Frequency  – Data  Relevancy  – Priori-za-on  

Page 54: Lets Play Together

Network  Op-miza-on  

•  Low  Level  – Bitpacking  (bitstreams)  – Compression  – Delta  Values  

Page 55: Lets Play Together

Delta  Compression  in  Quake  (1996)  

Page 56: Lets Play Together

Quake  Delta  Compression  

Page 57: Lets Play Together

Delta  +  Reliable  UDP  

Page 58: Lets Play Together

Quake  Network  Stack  

Page 59: Lets Play Together

Doom  (1993)  

•  Doom  used  P2P  Lockstep  Model.  Good  for  LAN  only.  

Page 60: Lets Play Together

Quake  Engine  Evolu-on  

Page 61: Lets Play Together

Quake  Engine  Evolu-on  

Page 62: Lets Play Together

Quake  Engine  Evolu-on  

Page 63: Lets Play Together

Quake  Engine  Evolu-on  

Page 64: Lets Play Together

Cloud  Gaming  

Main  Challenge:  

 Lag!  

Page 65: Lets Play Together

Figh-ng  Game  Networking  

•  Peer  to  Peer  –  Input  Latency  – Rollback  Technique    Example:  GGPO  Networking  Library  

Page 66: Lets Play Together

Networking  Libraries  

•  Enet  •  RakNet  •  Ice  •  PocoProject  •  Torque  Network  Library  •  ZeroMQ  •  Boost  ASIO  

Page 67: Lets Play Together

Conclusion  

•  Networking  is  a  tradeoff  between:  – Consistency  – Responsiveness  – Bandwidth  – Latency  

Page 68: Lets Play Together

References  1  

•  Robust  Efficient  Networking,  Ben  Garney,  GDC  2008  

•  Torque  Networking  Library  (opentnl.org)  •  Video  Game  Op-miza-on,  Ben  Garney  •  “I  Shot  You  First”,  Halo  Reach  Networking,  David  Aldridge,  GDC    2011  

 

Page 69: Lets Play Together

References  2  

•  QuakeWorld    hap://en.wikipedia.org/wiki/QuakeWorld  

•  Network  Systems  in  Insomniac  Games’  Overstrike  (FUSE),  Game  Developer  Magazine,  Feb  2012  

•  1500  Archers  on  a  28.8,  hap://www.gamasutra.com/view/feature/131503/1500_archers_on_a_288_network_.php?page=1  

Page 70: Lets Play Together

References  3  

•  “The  TRIBES  Engine  Networking  Model”,  Frohnmayer  and  Gis,  GDC  1999      

•  Understanding  Figh-ng  Game  Networking,  hap://mauve.mizuumi.net/2012/07/05/understanding-­‐figh-ng-­‐game-­‐networking/  

•  GGOP  Networking  Library,    hap://ggpo.net/  

•  The  Doom  III  Network  Architecture  hap://mrelusive.com/publica-ons/papers/The-­‐DOOM-­‐III-­‐Network-­‐Architecture.pdf  

Page 71: Lets Play Together

References  4  

•  The  Quake  3  Networking  Model,  Brian  Hook,  hap://trac.bookouook.com/bookouook/trac.cgi/wiki/Quake3Networking  

•  What  Every  Programmer  Needs  To  Know  About  Game  Networking,  Glenn  Fiedler,  hap://gafferongames.com/networking-­‐for-­‐game-­‐programmers/what-­‐every-­‐programmer-­‐needs-­‐to-­‐know-­‐about-­‐game-­‐networking/  

•  Unreal  Networking  Architectures  hap://udn.epicgames.com/Three/NetworkingOverview.html  

Page 72: Lets Play Together

References  5  

•  “Latency  Compensa-ng  Methods  in  Client/Server  in-­‐game  Protocol  Design”,  Yahn  Bernier,  Valve    haps://developer.valvesosware.com/wiki/Latency_Compensa-ng_Methods_in_Client/Server_In-­‐game_Protocol_Design_and_Op-miza-on#Lag_Compensa-on  

•  Believable  Dead  Reckoning  for  Networked  Games,  Cur-ss  Murphy,  Game  Engine  Gems  2  

•  Choosing  a  Game  Network  Library,  Patrick  Wyaa,  hap://www.codeouonor.com/blog/choosing-­‐a-­‐game-­‐network-­‐lib  

Page 73: Lets Play Together

References  6  

•  Dead  Reckoning:  Latency  Hiding  for  Networked  games  hap://www.gamasutra.com/view/feature/3230/dead_reckoning_latency_hiding_for_.php  

Page 74: Lets Play Together

Special  Thanks    

•  Yaser  Zhian  •  Hojjat  Jafary  •  Ashkan  Saeidi  

Page 75: Lets Play Together

Ques-ons?  

     

[email protected]