Nuova puntata di Bugsmashers! Oggi Mark ci mostra un interessante bug responsabile di una parte dei problemi di sincronizzazione dei client di SC in modalità multigiocatore.


Cosa dice il Designer al Programmatore?

Smettila di buggare!

 

Articolo originale disponibile presso le Roberts Space Industries.


Mark: “Benvenuti a un nuovo episodio della serie Bugsmashers, ho una barzelletta da raccontarvi”

… ”Cosa dice un bug al codice?
Nulla, è morto… *faccia spettrale*

Let’s get started!”
*Bugsmashers*

Oggi Mark ci mostra un nuovo curiosissimo bug che si può riscontrare durante le partite in multiplayer. Per rendere velocemente l’idea, Mark, apre due client e li pone uno accanto all’altro sullo schermo, mostrandoci due Hornet a distanza ravvicinata, l’una con vista dall’abitacolo, l’altra ripresa dall’esterno.

Dalla prima Hornet spara alcuni colpi contro l’altra, senza colpirla direttamente, ovvero direzionando il fuoco a pochi metri di distanza, ma per quanto possa cambiare la direzione dei laser, dalla visuale della seconda nave sembra che i colpi la sfiorino sempre nello stesso punto, cioè c’è un evidente problema di sincronizzazione tra il primo e il secondo client. Mark passa quindi ad analizzare il codice e ci informa dell’esistenza di un componente, il controller delle armi, il cui scopo è quello di ottimizzare il codice e non appesantire eccessivamente l’esperienza multigiocatore a livello di traffico dati. L’idea di base è che, invece di condividere con gli altri client la posizione di ogni singolo colpo, il client che spara invia a tutti gli altri solo le informazioni relative al punto in cui sta mirando, cosicché la traiettoria di tutti i proiettili finirà per colpire quel determinato punto. Ma in questo caso, il controller delle armi è bloccato e non invia alcuna informazione agli altri client.

Nel controller delle armi esiste una funzione che ricava informazioni dalla visuale degli altri giocatori. Il problema è che queste informazioni non vengono condivise ed è il server stesso ad essere responsabile della gestione di questi scambi dati. Per correggere questo errore e fare in modo che la traiettoria dei colpi venga sincronizzata correttamente, Mark cambia alcuni parametri della parte di codice relativa al funzionamento della rete, un componente chiamato controller della rete. Questo componente, che è stato implementato solo di recente, dovrebbe assicurare una maggior efficienza e in futuro gestirà una moltitudine di aspetti legati alla rete. Tuttavia, la versione attualmente in uso ha funzionalità limitate e potrebbero sorgere dei problemi qualora più client richiedano contemporaneamente di avere accesso alle stesse informazioni relative a un’arma o ad una nave.

Tornando al problema di sincronizzazione, che pare sia quindi dovuto a una questione di autorizzazioni non gestite correttamente dal server, per aggirare questo problema, Mark limita il sistema in maniera tale che tali autorizzazioni possano essere gestite soltanto una per volta, client per client, direttamente dal controller della rete. In futuro (soon), verrà introdotta la possibilità di gestire le comunicazioni dati di questo componente in maniera più efficiente e simultanea.

Entusiasta del suo lavoro, Mark ci mostra infine che il bug è stato (parzialmente) risolto.

Speriamo che il video vi sia piaciuto, e arrivederci alla prossima puntata di Bugsmashers!

Trascrizione completa disponibile presso ImperialNews.