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