Umožňuje vícero hráčům interagovat ve stejném herním světě a ve stejném čase.
Velmi komplexní záležitost, která má zásadní dopad na celou architekturu hry.
Lokální multiplayer
Síťový multiplayer
Lokální síťový multiplayer
Online multiplayer
Online-only multiplayer
MMO
Multiplayer v roce 1977
Multiplayer v roce 2004
Multiplayer v roce 2023
Metody
Topologie
Doom (1993)
Age of Empires (1997)
Command
NetChannel header
Použití TCP je to nejhorší, co může člověk při implementaci multiplayer hry udělat.Glenn Fielder, 2008
Problémy
Stream
Snapshot
Event
Akce
Generická zpráva
Connection
Beacon
Příklad bez optimalizace
struct Mage {
int health;
int mana;
}
void Serialize(const Mage* mage) {
SendMessage(reinterpret_cast<const char*>(mage), sizeof(Mage));
}
void Deserialize(const Mage* output) {
ReceiveMessage(reinterpret_cast<char*>(output), sizeof(Mage));
}
Health = 10, Mana = 14; Little Endian
struct Mage : public Streamable {
vector<Item*> items;
int health;
int mana;
void SaveToStream(NetWriter* writer) {
writer->WriteDWord(health);
writer->WriteDWord(mana);
writer->WriteDWord(items.size());
for(auto item : items) item->SaveToStream(writer);
}
void LoadFromStream(NetReader* reader) {
health = reader->ReadDWord();
mana = reader->ReadDWord();
int itemsCount = reader->ReadDWord();
for(int i=0; i<itemsCount; i++) {
items.push_back(new Item(reader));
}
}
}
Komprese bitů
Enkódování entropie
Komprese atributů
Komprese celé zprávy
Delta zprávy
switch(actionType) {
case OBJECT_CREATED:
int objectType = reader->ReadDWord();
auto factory = creatorManager->FindObjectFactory(objectType);
auto newInstance = factory->CreateInstance(reader); // parse parameters
objects.push_back(newInstance);
break;
case OBJECT_DELETED:
int objectId = reader->ReadDWord();
sceneManager->removeObjectById(objectId);
...
}
Latence
Akceptovatelná latence
Latence mimo síťový přenos
Síťová latence
Predikce
Simulace na serveru
Špatná predikce na klientovi
Řešení Source enginu
Špatně
Správně
Dilatace času
Deterministická predikce
Dead reckoning
Server-side rewind
Obvyklé hrozby
Validace vstupu
Cheat detection software
ReplicaNet
RakNet
NetStalker
Netcode for GameObjects (NGO)
Nedosažitelná výška musí být VIDITELNĚ VÝŠ než maximální výskok hráče.John Wiley