Le dinamiche del gioco online
Perché i videogiochi non mi rendono nervoso, il lag però si!
Il gioco online rappresenta una parte molto importante della produzione videoludica moderna. Infatti, se lavoriamo per un grande studio, quando si propone un nuovo gioco, l'immancabile domanda del marketing è: "è prevista una modalità online?". E se la risposta è no, le probabilità di vedere accettata la nostra proposta calano notevolmente.
Ma questo è già meglio di quello che succedeva durante il periodo del COVID, quando invece veniva chiesto "è prevista una modalità e-Sport?".
Il problema, almeno per come lo percepisco io, è che in molti casi, soprattutto negli studi indie, c'è ancora un po' di confusione nel mettere a fuoco le problematiche di fare un gioco online. Oggi, quindi, vediamo di chiarirci un po’ le idee su questo argomento.
Che cosa vuol dire giocare online
Giocare online è, per la mia esperienza, una questione molto più complessa che non limitarsi ad avere due o più giocatori che si sfidano attraverso una rete. Altrimenti, non avrebbe molto senso tutto lo studio che se ne fa. Due giocatori che fanno couch co-op, come nell'ultimo gioco che ho avuto il piacere di recensire, non possono essere definiti come giocatori online. Allo stesso modo, organizzare un LAN party (come si faceva spesso un po' di anni fa), pur implicando il gioco attraverso una rete, non viene percepito come un'esperienza di gioco online, semplicemente perché tutti i partecipanti sono nella stessa stanza e interagiscono fisicamente tra loro.
Negli anni, personalmente, ho maturato la seguente opinione:
La questione non è giocare online, la questione è essere online!
Un gioco in cui siamo un giocatore da solo all'interno di un mondo virtuale, ma che poi pubblica delle classifiche in cui si vede chi è il più bravo tra i nostri amici, in Italia e nel mondo, si può considerare online?
Secondo me sì.
Perché ci sta dando uno strumento per affermare la nostra presenza online attraverso il gioco e ci mette in competizione con gli altri giocatori. Non siamo più "uno che gioca" ma diventiamo "quello che ha fatto il record". Quindi, anche solo potersi vantare (il cosiddetto bragging, o flexing) sui social network del nostro punteggio stratosferico contribuisce alla nostra esperienza di gioco online.
Tre modi di far giocare online
I giochi che vengono pubblicati oggi implementano l’esperienza di gioco online principalmente in tre modi.
Il gioco online come possibile opzione. Sono quei giochi in cui l'esperienza si svolge prevalentemente in modalità single-player e, una volta completato il contenuto principale, il giocatore ha la possibilità di continuare giocando online. Si tratta quindi di titoli single-player con un'estensione multiplayer. Pensate, ad esempio, a Gears of War (soprattutto il primo della serie) e Uncharted 3: Drake's Deception.
Il gioco online come una caratteristica fondamentale del gioco. Quindi, o giochiamo online o non giochiamo. Basti pensare a un qualsiasi MMO come World of Warcraft, Guild Wars 2 o Roblox. Tuttavia, all'interno di questa categoria esistono anche diverse sfumature di grigio. Parlo di giochi che presentano una breve componente single-player, spesso limitata a una manciata di ore, che fa da introduzione all'esperienza online vera e propria, destinata a durare mesi. Chi è appassionato della serie Call of Duty conosce già bene questa dinamica.
Infine, ci sono quei giochi in cui l'esperienza utente è fondamentalmente single-player, ma c'è una componente online che fa da valore aggiunto, molto spesso attraverso i social. Ovvero, gioco sempre da solo ma affermo la mia presenza online e interagisco con gli altri giocatori al di fuori delle meccaniche di gioco. Volete un esempio che coinvolge milioni di giocatori? Pokémon GO! Abbiamo un sacco di amici, ci scambiamo regali e c'è una community enorme; però non interagiamo mai direttamente con un altro giocatore; al massimo con i suoi Pokémon parcheggiati in una palestra.
Raccomando sempre ai miei studenti di fare molta attenzione a questa distinzione, perché determina quanta attenzione e quanto impegno (leggi: tempo e soldi) bisogna mettere nella realizzazione della parte online del gioco.
La decisione di avere una modalità online, e di quale tipo, deve essere presa a monte; prima di iniziare lo sviluppo e anche il design, perché condizionerà profondamente il nostro futuro gioco.
Che cosa succede all’interno di un gioco online
Una volta chiarito qual è la funzione della parte online per il nostro gioco, allora la fase implementativa diventa abbastanza lineare.
Se ci concentriamo sui giochi in cui i giocatori collaborano o competono in tempo reale, allora abbiamo uno schema che storicamente prende il nome di client-server.
Semplificando al massimo, i giocatori eseguono un software (che chiameremo client) e si collegano online a un altro software (il server) che gestisce il mondo di gioco. In realtà ci sarebbero un sacco di elementi in più, ma oggi parliamo di funzionalità e non di infrastrutture (ve lo tengo per le prossime settimane 😁).
Il client dice al server cosa vuole fare; il server elabora il nuovo stato del mondo virtuale e poi aggiorna tutti i client. Un’operazione molto semplice, a patto di seguire anche due regole estremamente importanti.
Regola N. 1: MAI dare a un client delle informazioni che non gli servono
Questo viene spesso confuso con il concetto di fog of war (la nebbia della guerra); per cui non ho informazioni precise sulle parti di mappa ancora inesplorate. In realtà, quando si tratta di implementazione, la questione è molto più stringente. Ogni client deve ricevere solo le informazioni che devono essere visualizzare all’utente e nulla di più. Anche se ci sono altri giocatori nelle vicinanze, se non li vedo non devo sapere la loro posizione e neppure che esistono. Altrimenti, potrei cambiare il sistema di visualizzazione del mio client per vedere le loro sagome anche se c'è un muro in mezzo. E questo è un cheat di cui si è molto (ab)usato in Counter-Strike: Global Offensive e in Diablo II.
Regola N. 2: MAI fare prendere una decisione a un client
Questo è ancora più importante della prima regola. Le decisioni devono essere prese unicamente dal server, poiché è un arbitro imparziale e affidabile. Il motivo, ancora una volta, è il cheating. Se il software del client dovesse decidere il risultato di un'azione, anche la più stupida, un giocatore disonesto potrebbe alterare il programma in modo che l'esito di quella azione sia sempre a suo favore per trarne un vantaggio. Immaginate se in un gioco FPS dovessimo lasciare decidere a un giocatore se ha colpito o meno il bersaglio; sarebbero tutti cecchini infallibili!
La grande bufala
C’è un aspetto che mi fa sempre innervosire in certe campagne di marketing. Oggi, per fortuna, non si vede più molto spesso, ma rimane una convinzione per molti.
Per giocare meglio online è bene avere una alta capacità di rete; detto anche “con la banda larga si gioca meglio”.
Niente di più falso!
Perché l’esperienza di gioco si appoggia quasi esclusivamente sui tempi di risposta del server. Infatti, i giochi online sono tutti progettati per trasferire il minor quantitativo di dati possibile; per due ottimi motivi.
Il primo è che mandando poche informazioni è più probabile che queste arrivino senza problemi e, nel caso in cui non arrivino a destinazione, è molto più semplice e veloce accorgersene e aggiustare la situazione.
Il secondo è un motivo economico. Perché anche chi fornisce un gioco online paga una bolletta al suo operatore. Facciamo un’ipotesi: se abbiamo un gioco online con 10000 giocatori e ognuno di loro ha bisogno di 0,5 Megabyte al secondo (5 megabit, neppure così tanto per gli standard di oggi), allora il server avrà bisogno di una connessione da 5 Gigabyte al secondo (50 Gigabit) che sarà sempre completamente satura. Fate voi le proporzioni su giochi più famosi dove arriviamo a un milione di utenti. E, vi assicuro, il costo di una connettività del genere è decisamente alto.
Nella realtà, un gioco come Fortnite, che è tra quelli che impegnano un po’ la rete, trasferisce mediamente in un’ora di gioco 120 Megabyte. Fatti i conti, sono 33 Kilobyte al secondo (0.3 Megabit). Se poi pensiamo che in un’ora non giochiamo mai per 60 minuti, ma meno; allora capite che va benissimo anche il tethering con il cellulare.
… a patto che il tempo di risposta del server sia accettabile!
Il lag: cos’è e da cosa dipende
Il lag è un termine che si usa tantissimo. Quante volte, io per primo, abbiamo detto sono laggato per giustificare (con una scusa) delle prestazioni di gioco online deludenti? Ma di cosa si tratta esattamente?
Il lag è il tempo necessario per dare al giocatore un feedback visuale per una sua azione.
Mettiamola così: il nostro software di gioco invia un messaggio al server, il quale deve uscire dalla rete domestica del giocatore, attraversare Internet, essere elaborato dal server e tornare indietro... in una manciata di millisecondi.
Questo tempo di risposta, purtroppo, dipende da una serie di fattori, che solo in minima parte sono sotto il nostro controllo. Inoltre, la soglia di ritardo accettabile varia molto in base al tipo di gioco e alle meccaniche che dobbiamo implementare. Se consideriamo una partita a scacchi, 200 millisecondi sono sicuramente accettabili, ma con un MOBA (come League of Legends) gli utenti iniziano a lamentarsi già solo con 30 millisecondi. E non parliamo nemmeno cosa serve a un picchiaduro online come Street Fighter.
Dove si genera il lag?
Il lag è la somma di tutti i ritardi accumulati dai messaggi scambiati tra il nostro dispositivo e il server di gioco. Ogni messaggio (chiamiamolo anche pacchetto) attraversa una serie di apparati di rete per arrivare a destinazione.
Spesso si pensa che il lag sia dovuto ai ritardi causati dall'elaborazione dei pacchetti.
Acqua 💧! Gli apparati di rete sono progettati per processare i pacchetti mandarli verso la destinazione in tempi brevissimi, nell'ordine dei nanosecondi.
Un'altra ipotesi comune è che il lag sia dovuto all'attesa in coda dei pacchetti che devono essere processati quando la rete è congestionata.
Fuochino 🔥! Le reti degli operatori sono generalmente sovradimensionate e avere del traffico di rete in eccesso è una situazione piuttosto rara.
I responsabili per il 90% del lag sono due punti specifici del percorso di un pacchetto: l'uscita dalla nostra rete domestica e il server di gioco.
L’uscita dalla rete di casa è un punto critico perché tra il nostro router e la rete dell’operatore si crea quello che viene chiamato gergalmente un collo di bottiglia. Il collegamento è spesso congestionato perché ci sono molti di dispositivi che usano Internet dall’interno di casa nostra. Mentre noi giochiamo qualcuno potrebbe guardare un film in streaming oppure fare dei download impegnativi. E anche quando questo non succede, il primo apparato dell’operatore potrebbe essere congestionato perché condiviso con tutti i nostri vicini di casa. Infatti, il fine settimana Internet va un po’ più piano per tutti. Insomma, è come avere un’autostada vuota, ma per entrarci dobbiamo passare per un casello con una coda chilometrica.
Anche nel caso di connessioni cellulari e tethering, il principio è lo stesso. Sebbene ci siano alcune differenze tecniche, il risultato finale è sempre lo stesso.
Il server di gioco è l'altro punto critico. In questo caso, però, il problema non è la trasmissione dei dati, ma l'elaborazione delle informazioni da parte del server. Ogni messaggio deve essere elaborato e va creata una risposta ad-hoc per il client. E la CPU del server, è sempre più lenta della rete.
Quindi, cosa possiamo fare?
Come sviluppatori possiamo solo aggirare il problema del lag. Per farlo, però, abbiamo bisogno di fare squadra con chi si occupa della parte di design.
Bisogna partire progettando il gioco tenendo conto delle prestazioni medie di rete. Dobbiamo fare uno studio e capire a quale ritardo può essere soggetto il nostro giocatore tipo. Da lì, parliamo con il designer per aiutarlo a identificare delle meccaniche di gioco che siano compatibili con il lag che ci troveremo di fronte.
Ad esempio, negli MMO, dove abbiamo bisogno di coinvolgere un sacco di giocatori con prestazioni di rete molto diverse tra loro, se ci fate caso, è molto raro che venga chiesto di mirare a qualcosa con precisione. Di solito si seleziona un bersaglio e si spara o si lancia un incantesimo che andrà a cercare il bersaglio. Oppure si fanno azioni che procurano danno su un’area di effetto, tipicamente dopo un ritardo imposto dall’azione (casting time). Il lag fa si che non sappiamo con precisione millimetrica dove è il bersaglio ma nel primo caso diventa ininfluente e nel secondo il lag sparisce all’interno di un timer molto più lungo.
Un mondo, quello online, tutto da scoprire
Sulle tecnologie per il gioco online si potrebbe scrivere un intero libro (e infatti sono stati scritti molti libri); quello che abbiamo potuto fare qui è stato toccare le principali problematiche. In realtà, ci sono un sacco di dettagli ed approfondimenti che si potrebbero fare.
Se vi interessa approfondire un aspetto specifico, lasciate un commento o inviatemi un messaggio, e cercherò di accontentarvi in una delle prossime uscite.
E anche per questa settimana direi che è tutto. A risentirci tra sette giorni per parlare di un argomento molto più legato alla programmazione.
Se vi è piaciuto questo articolo, potete leggere anche tutti quelli già usciti e iscrivervi a questa newsletter per ricevere le prossime uscite direttamente nella vostra casella di posta.
Happi hacking!






