lets play together

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

Upload: amir-h-fassihi

Post on 17-Jan-2017

556 views

Category:

Engineering


0 download

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]