SlideShare a Scribd company logo
1 of 21
Multiplayer ve Factoriu
Multiplayer ve Factoriu
Úskalí a výhody multiplayeru založeném na
deterministické lock-step simulaci.
Kdo jsem a co je to Factorio
Není potřeba být specialista.
Není potřeba být specialista.
Ale než to bylo doladěno tak nám to trvalo cca dva člověko roky.
Není potřeba být specialista.
Ale než to bylo doladěno tak nám to trvalo cca dva člověko roky.
Zejména kvůli:
Složitosti logiky hry
Učili jsme se na tom (Prozkoumávání slepých uliček)
Metody sdílení herního stavu o kterých vím
Aktualizace celého stavu serverem (Malý stav hry, FPS, mlátičky atp)
Aktualizace stavu kolem hráče (Velký stav hry, celkem statický svět, MMO,
Minecraft atp.)
Deterministická lock step simulace (Velký stav, dynamický svět, RTS)
Deterministická
Pokud daný stav načteme, a spustíme na různých počítačích, výsledek po X
krocích bude do posledního bytu všude stejný.
Deterministická
Pokud daný stav načteme, a spustíme na různých počítačích, výsledek po X
krocích bude do posledního bytu všude stejný.
Vlastnost která není pro program zdaleka tak samozřejmá, jak by se mohlo zdát.
Deterministická
Pokud daný stav načteme, a spustíme na různých počítačích, výsledek po X
krocích bude do posledního bytu všude stejný.
Vlastnost která není pro program zdaleka tak samozřejmá, jak by se mohlo zdát.
Efekt motýlích křídel.
Deterministická
Pokud daný stav načteme, a spustíme na různých počítačích, výsledek po X
krocích bude do posledního bytu všude stejný.
Vlastnost která není pro program zdaleka tak samozřejmá, jak by se mohlo zdát.
Efekt motýlích křídel.
Striktní rozlišení toho co je ve stavu hry a co ne.
Lock step
Pouštíme tu samou simulaci najednou u všech hráčů.
Zařídit aby začínali ze stejného bodu (Stabilní serializace a deserializace)
Lock step
Pouštíme tu samou simulaci najednou u všech hráčů.
Zařídit aby začínali ze stejného bodu (Stabilní serializace a deserializace)
Když si prdne a uloží hru, tak to po načtení musí smrdět.
Aby na to jen tak nekoukali
Jediné co se po přenosu startovního stavu musí přenášet jsou uživatelské akce.
Aby na to jen tak nekoukali
Jediné co se po přenosu startovního stavu musí přenášet jsou uživatelské akce.
To je oproti jiným alternativám velice málo!
Aby na to jen tak nekoukali
Jediné co se po přenosu startovního stavu musí přenášet jsou uživatelské akce.
To je oproti jiným alternativám velice málo!
Akce se musí aplikovat na všech počítačích v přesně daný moment který je
všude stejný.
Aby na to jen tak nekoukali
Jediné co se po přenosu startovního stavu musí přenášet jsou uživatelské akce.
To je oproti jiným alternativám velice málo!
Akce se musí aplikovat na všech počítačích v přesně daný moment který je
všude stejný.
Latence
Aby na to jen tak nekoukali
Jediné co se po přenosu startovního stavu musí přenášet jsou uživatelské akce.
To je oproti jiným alternativám velice málo!
Akce se musí aplikovat na všech počítačích v přesně daný moment který je
všude stejný.
Latence - Velká je stabilní při horším spojení versus Malá má rychlou odezvu.
Aby na to jen tak nekoukali
Jediné co se po přenosu startovního stavu musí přenášet jsou uživatelské akce.
To je oproti jiným alternativám velice málo!
Akce se musí aplikovat na všech počítačích v přesně daný moment který je
všude stejný.
Latence - Velká je stabilní při horším spojení versus Malá má rychlou odezvu.
Skrývání latence
A tady hraje jednu hru 400 hráčů
Děkuji za pozornost. Dotazy?

More Related Content

More from Develcz

Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmysl
Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmyslŠtěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmysl
Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmyslDevelcz
 
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQL
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQLTomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQL
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQLDevelcz
 
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikací
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikacíTomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikací
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikacíDevelcz
 
Jakub Vrána: Dokazatelná bezpečnost
Jakub Vrána: Dokazatelná bezpečnostJakub Vrána: Dokazatelná bezpečnost
Jakub Vrána: Dokazatelná bezpečnostDevelcz
 
Roman Schejbal: From Madness To Reason
Roman Schejbal: From Madness To ReasonRoman Schejbal: From Madness To Reason
Roman Schejbal: From Madness To ReasonDevelcz
 
Michal Illich: Zuri aneb Vývojáři staví letadlo
Michal Illich: Zuri aneb Vývojáři staví letadloMichal Illich: Zuri aneb Vývojáři staví letadlo
Michal Illich: Zuri aneb Vývojáři staví letadloDevelcz
 
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...Develcz
 
David Majda: Autoformátování kódu
David Majda: Autoformátování kóduDavid Majda: Autoformátování kódu
David Majda: Autoformátování kóduDevelcz
 
David Grudl: Open source: The Good, the Bad and the Ugly
David Grudl: Open source: The Good, the Bad and the UglyDavid Grudl: Open source: The Good, the Bad and the Ugly
David Grudl: Open source: The Good, the Bad and the UglyDevelcz
 
Ondřej Machulda: Začíná zlatá doba end-to-end testů!
Ondřej Machulda: Začíná zlatá doba end-to-end testů!Ondřej Machulda: Začíná zlatá doba end-to-end testů!
Ondřej Machulda: Začíná zlatá doba end-to-end testů!Develcz
 
Adam Kudrna: Headless WordPress/Drupal
Adam Kudrna: Headless WordPress/DrupalAdam Kudrna: Headless WordPress/Drupal
Adam Kudrna: Headless WordPress/DrupalDevelcz
 
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světěJaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světěDevelcz
 
Martin Michálek: Bootstrap 4 - Jednou to muselo přijít
Martin Michálek: Bootstrap 4 - Jednou to muselo přijítMartin Michálek: Bootstrap 4 - Jednou to muselo přijít
Martin Michálek: Bootstrap 4 - Jednou to muselo přijítDevelcz
 
Ondřej Mirtes: Usnadněte si práci silně typovaným kódem a statickou analýzou!
Ondřej Mirtes: Usnadněte si práci silně typovaným kódem a statickou analýzou!Ondřej Mirtes: Usnadněte si práci silně typovaným kódem a statickou analýzou!
Ondřej Mirtes: Usnadněte si práci silně typovaným kódem a statickou analýzou!Develcz
 
Karel Smutný: Jak se samo-organizujeme v Brand Embassy
Karel Smutný: Jak se samo-organizujeme v Brand EmbassyKarel Smutný: Jak se samo-organizujeme v Brand Embassy
Karel Smutný: Jak se samo-organizujeme v Brand EmbassyDevelcz
 
Martin Šimeček: Chytré boty do každé rodiny
Martin Šimeček: Chytré boty do každé rodinyMartin Šimeček: Chytré boty do každé rodiny
Martin Šimeček: Chytré boty do každé rodinyDevelcz
 
Richard Fridrich: Třesení stromem v JavaScriptu
Richard Fridrich: Třesení stromem v JavaScriptuRichard Fridrich: Třesení stromem v JavaScriptu
Richard Fridrich: Třesení stromem v JavaScriptuDevelcz
 
Bára Bühnová: Naučte se taktizovat s pomocí bad code smells a quality tactics
Bára Bühnová: Naučte se taktizovat s pomocí bad code smells a quality tacticsBára Bühnová: Naučte se taktizovat s pomocí bad code smells a quality tactics
Bára Bühnová: Naučte se taktizovat s pomocí bad code smells a quality tacticsDevelcz
 
Jirka Kosek: CSS Paged Media aneb Gutenberg v prohlížeči
Jirka Kosek:  CSS Paged Media aneb Gutenberg v prohlížečiJirka Kosek:  CSS Paged Media aneb Gutenberg v prohlížeči
Jirka Kosek: CSS Paged Media aneb Gutenberg v prohlížečiDevelcz
 
Karol Danko: IoT z pohľadu programátora
Karol Danko:  IoT z pohľadu programátoraKarol Danko:  IoT z pohľadu programátora
Karol Danko: IoT z pohľadu programátoraDevelcz
 

More from Develcz (20)

Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmysl
Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmyslŠtěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmysl
Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmysl
 
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQL
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQLTomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQL
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQL
 
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikací
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikacíTomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikací
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikací
 
Jakub Vrána: Dokazatelná bezpečnost
Jakub Vrána: Dokazatelná bezpečnostJakub Vrána: Dokazatelná bezpečnost
Jakub Vrána: Dokazatelná bezpečnost
 
Roman Schejbal: From Madness To Reason
Roman Schejbal: From Madness To ReasonRoman Schejbal: From Madness To Reason
Roman Schejbal: From Madness To Reason
 
Michal Illich: Zuri aneb Vývojáři staví letadlo
Michal Illich: Zuri aneb Vývojáři staví letadloMichal Illich: Zuri aneb Vývojáři staví letadlo
Michal Illich: Zuri aneb Vývojáři staví letadlo
 
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...
 
David Majda: Autoformátování kódu
David Majda: Autoformátování kóduDavid Majda: Autoformátování kódu
David Majda: Autoformátování kódu
 
David Grudl: Open source: The Good, the Bad and the Ugly
David Grudl: Open source: The Good, the Bad and the UglyDavid Grudl: Open source: The Good, the Bad and the Ugly
David Grudl: Open source: The Good, the Bad and the Ugly
 
Ondřej Machulda: Začíná zlatá doba end-to-end testů!
Ondřej Machulda: Začíná zlatá doba end-to-end testů!Ondřej Machulda: Začíná zlatá doba end-to-end testů!
Ondřej Machulda: Začíná zlatá doba end-to-end testů!
 
Adam Kudrna: Headless WordPress/Drupal
Adam Kudrna: Headless WordPress/DrupalAdam Kudrna: Headless WordPress/Drupal
Adam Kudrna: Headless WordPress/Drupal
 
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světěJaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
 
Martin Michálek: Bootstrap 4 - Jednou to muselo přijít
Martin Michálek: Bootstrap 4 - Jednou to muselo přijítMartin Michálek: Bootstrap 4 - Jednou to muselo přijít
Martin Michálek: Bootstrap 4 - Jednou to muselo přijít
 
Ondřej Mirtes: Usnadněte si práci silně typovaným kódem a statickou analýzou!
Ondřej Mirtes: Usnadněte si práci silně typovaným kódem a statickou analýzou!Ondřej Mirtes: Usnadněte si práci silně typovaným kódem a statickou analýzou!
Ondřej Mirtes: Usnadněte si práci silně typovaným kódem a statickou analýzou!
 
Karel Smutný: Jak se samo-organizujeme v Brand Embassy
Karel Smutný: Jak se samo-organizujeme v Brand EmbassyKarel Smutný: Jak se samo-organizujeme v Brand Embassy
Karel Smutný: Jak se samo-organizujeme v Brand Embassy
 
Martin Šimeček: Chytré boty do každé rodiny
Martin Šimeček: Chytré boty do každé rodinyMartin Šimeček: Chytré boty do každé rodiny
Martin Šimeček: Chytré boty do každé rodiny
 
Richard Fridrich: Třesení stromem v JavaScriptu
Richard Fridrich: Třesení stromem v JavaScriptuRichard Fridrich: Třesení stromem v JavaScriptu
Richard Fridrich: Třesení stromem v JavaScriptu
 
Bára Bühnová: Naučte se taktizovat s pomocí bad code smells a quality tactics
Bára Bühnová: Naučte se taktizovat s pomocí bad code smells a quality tacticsBára Bühnová: Naučte se taktizovat s pomocí bad code smells a quality tactics
Bára Bühnová: Naučte se taktizovat s pomocí bad code smells a quality tactics
 
Jirka Kosek: CSS Paged Media aneb Gutenberg v prohlížeči
Jirka Kosek:  CSS Paged Media aneb Gutenberg v prohlížečiJirka Kosek:  CSS Paged Media aneb Gutenberg v prohlížeči
Jirka Kosek: CSS Paged Media aneb Gutenberg v prohlížeči
 
Karol Danko: IoT z pohľadu programátora
Karol Danko:  IoT z pohľadu programátoraKarol Danko:  IoT z pohľadu programátora
Karol Danko: IoT z pohľadu programátora
 

Michal Kovařík: Multiplayer ve Factoriu

  • 2. Multiplayer ve Factoriu Úskalí a výhody multiplayeru založeném na deterministické lock-step simulaci.
  • 3. Kdo jsem a co je to Factorio
  • 4. Není potřeba být specialista.
  • 5. Není potřeba být specialista. Ale než to bylo doladěno tak nám to trvalo cca dva člověko roky.
  • 6. Není potřeba být specialista. Ale než to bylo doladěno tak nám to trvalo cca dva člověko roky. Zejména kvůli: Složitosti logiky hry Učili jsme se na tom (Prozkoumávání slepých uliček)
  • 7. Metody sdílení herního stavu o kterých vím Aktualizace celého stavu serverem (Malý stav hry, FPS, mlátičky atp) Aktualizace stavu kolem hráče (Velký stav hry, celkem statický svět, MMO, Minecraft atp.) Deterministická lock step simulace (Velký stav, dynamický svět, RTS)
  • 8. Deterministická Pokud daný stav načteme, a spustíme na různých počítačích, výsledek po X krocích bude do posledního bytu všude stejný.
  • 9. Deterministická Pokud daný stav načteme, a spustíme na různých počítačích, výsledek po X krocích bude do posledního bytu všude stejný. Vlastnost která není pro program zdaleka tak samozřejmá, jak by se mohlo zdát.
  • 10. Deterministická Pokud daný stav načteme, a spustíme na různých počítačích, výsledek po X krocích bude do posledního bytu všude stejný. Vlastnost která není pro program zdaleka tak samozřejmá, jak by se mohlo zdát. Efekt motýlích křídel.
  • 11. Deterministická Pokud daný stav načteme, a spustíme na různých počítačích, výsledek po X krocích bude do posledního bytu všude stejný. Vlastnost která není pro program zdaleka tak samozřejmá, jak by se mohlo zdát. Efekt motýlích křídel. Striktní rozlišení toho co je ve stavu hry a co ne.
  • 12. Lock step Pouštíme tu samou simulaci najednou u všech hráčů. Zařídit aby začínali ze stejného bodu (Stabilní serializace a deserializace)
  • 13. Lock step Pouštíme tu samou simulaci najednou u všech hráčů. Zařídit aby začínali ze stejného bodu (Stabilní serializace a deserializace) Když si prdne a uloží hru, tak to po načtení musí smrdět.
  • 14. Aby na to jen tak nekoukali Jediné co se po přenosu startovního stavu musí přenášet jsou uživatelské akce.
  • 15. Aby na to jen tak nekoukali Jediné co se po přenosu startovního stavu musí přenášet jsou uživatelské akce. To je oproti jiným alternativám velice málo!
  • 16. Aby na to jen tak nekoukali Jediné co se po přenosu startovního stavu musí přenášet jsou uživatelské akce. To je oproti jiným alternativám velice málo! Akce se musí aplikovat na všech počítačích v přesně daný moment který je všude stejný.
  • 17. Aby na to jen tak nekoukali Jediné co se po přenosu startovního stavu musí přenášet jsou uživatelské akce. To je oproti jiným alternativám velice málo! Akce se musí aplikovat na všech počítačích v přesně daný moment který je všude stejný. Latence
  • 18. Aby na to jen tak nekoukali Jediné co se po přenosu startovního stavu musí přenášet jsou uživatelské akce. To je oproti jiným alternativám velice málo! Akce se musí aplikovat na všech počítačích v přesně daný moment který je všude stejný. Latence - Velká je stabilní při horším spojení versus Malá má rychlou odezvu.
  • 19. Aby na to jen tak nekoukali Jediné co se po přenosu startovního stavu musí přenášet jsou uživatelské akce. To je oproti jiným alternativám velice málo! Akce se musí aplikovat na všech počítačích v přesně daný moment který je všude stejný. Latence - Velká je stabilní při horším spojení versus Malá má rychlou odezvu. Skrývání latence
  • 20. A tady hraje jednu hru 400 hráčů