"Noi incoraggiamo gli individui, consapevolmente curiosi, a passare dalla complessità alla semplicità, dall'interno all'esterno e, a metà strada fra la ricerca e la negazione del significato, vogliamo che i curiosi facciano una dannata scelta". Wachowski

venerdì 24 gennaio 2014

NET CODE: (pt-10) LA NUOVA (e vecchia) HIT DETECTION IN BF4

La conoscenza avviene così, per caso. A volte, continuando a giocare e a cercare, non si riesce a cavare un ragno dal buco. Poi ti capita di trovarti in quei server impazziti e le bestemmie iniziali possono diventare quei classici "ooohhh" perchè ti appare qualcosa di stupefacente che neanche credevi.
Sono ormai 10 gli articoli di questa serie (link) sul net code, resa famosa dall'articolo sul fattore di fluidità di rete (link). Come al solito consiglio ai nuovi di leggerli tutti, perchè secondo me non si può giocare con un gioco "a scatola chiusa".
In questo articolo, voglio dimostrarvi che cosa è cambiato nella gestione delle hit detection in Battlefield4, rispetto a BF3. Qualcosa è rimasto uguale, ma qualcosa è cambiato. Come al solito, per provare la mia teoria, me ne sono andato in un server australiano (200ms di ping) e mi sono fatto aiutare da amico di psn, L-J90, chiedendogli di essere colpito una sola volta. Semplice.
Senza ulteriori chiacchere, guardiamo la prima delle due figure (la più importante) che rappresenta una normale sequenza di sparo, qui sotto.


In questa foto notiamo 4 cose:

1) il fumo del bullet tracing del mio colpo singolo
2) il movimento del personaggio avversario che si contorce a causa del colpo subito
3) la barra della vita dell'avversario.
4) l'assenza dell'hit marker del server (la classica crocetta bianca)

Partiamo dalla (4). Poichè sono in un server australiano, dovrò attendere un pò prima che il server mi convalidi il colpo. Sono sicuro che mi convaliderà il colpo dato che sia io che L-J90 siamo rimasti immobili per molti secondi, semplificando la vita all'algoritmo di lag compensation (link).
Quello, perciò, che vediamo è una rappresentazione della realtà generata dal mio client in attesa che i server la convalidi.
In BF4, come in BF3, il client ovviamente mostra sia il fumo (1) che l'accartocciamento del giocatore (2). In BF3 si vedevano anche gli spruzzi di sangue che uscivano.
Fermiamoci su questo aspetto.

L'accartocciamento del giocatore avversario mi fa capire che il mio client ha identificato correttamente una hit. L'altra faccia di questa medaglia è che so se ho preso uno, solo se vedo questo tipo di animazione.

La cosa proprio diversa da BF3 è il punto (3): In BF3 la barra dell'avversario veniva aggiornata solo a seguito della conferma del server. In BF4, da quello che possiamo vedere in questa  figura, l'aggiornamento della barra della vita è immediatamente realizzata dal client in attesa della conferma del server.
La barra mancante, infatti, è il 25% che fa scopa con il mio colpo singolo di un AK-12 indirizzato verso il torso dell'avversario.

Finalmente arriviamo alla figura successiva dove il server australiano mi convalida la kill e si vede il classico simbolo ad X bianco.


Il fumo è sparito e l'animazione del giocatore che si accartoccia sta ancora continuando, ma la sua barra è rimasta intatta.

Facciamo una considerazione.
Secondo voi, potrà mai succedere che il client vi mostri uno stato diverso da quello che deriverà dall'aggiornamento del server? Voglio dire: se un client toglie 25 di vita all'avversario prima che lo convalidi il server, potra succedere che la vita dell'avversario, dopo l'aggiornamento, possa avere un valore diverso?

Avete capito che tipo di domanda sto facendo?

DOMANDA: Quei 25 di vita tolti, sono una informazione che il client invia al server e che il server valuta e rimanda indietro OPPURE il client non invia il danno al server, nella speranza che il server, dopo i suoi conti, dia come risultato 25?

Secondo me il client invia anche il valore di danno che andrebbe sottratto all'avversario. Ma è solo un "secondo me". Magari in futuro, un qualche altro server impazzito, mi darà lo spunto per altre ricerche.

Non abbiamo finito. Vediamo due apetti ovvero un consiglio e un'analisi

CONSIGLIO
La prossima volta che giocate, guardate se il giocatore avversario si "accartoccia" quando lo colpite. Se non si accartoccia, allora non l'avete mirato correttamente.
Ma se avete l'onestà di pensare che l'avete mirato correttamente e pensate che lo spread dell'arma non abbia allontanato troppo i colpi dal mirino, allora iniziate a dubitare del vostro client, che forse è buggato.
Molti smadonnano, ma dimenticano che lo spread può allontanare molto i colpi dal mirino.
Se perciò pensate di averlo mirato correttamente, allora siete fregati. Sapete perchè dico questo?

ANALISI
Vi ricordate di questo video? (link). E' il video forse più famoso di net code fallimentare di battlefield 4. Un intero caricatore di fucile e pistola e manco un hit marker. Guardatelo per favore. L'ho messo anche nella serie di articoli "IO VOGLIO RICORDARE" nella sezione Community (link).
Ora guardate l'immagine che ho vi mostro qui sotto presa dal filmato.


In questo fotogramma, così come in tutta la parte al rallentatore, non si vede alcun accartocciamento dell'avversario. Due caricatori interi e nessun accartocciamento. Ma dove finiscono i colpi di questo giocatore?

BOH. La cosa divertente è che però l'avversario li deve comunque percepire dato che successivamente si butta per terra.
Poi non si spiega il motivo per il quale dovrebbe equipaggiare il defibrillatore, ma lasciamo stare.

Con questo articolo, perciò, abbiamo visto alcuni cambiamenti che sono stati fatti in BF4, non fosse altro nella notifica dei danni subiti. Sono molti i video dove si vedono avversari ancora vivi con la barra completamente vuota. Ora sappiamo che è stato il client a disegnare la barra vuota e che il server non ha ancora convalidato, non si sa per quale motivo, una o più hit.
D'ora in poi, perciò, fate caso agli accartocciamenti dei vostri avversari. Una bestemmia può così diventare un "ecco, un'altra volta....."

10 commenti:

  1. Ecco altri 2 video di net code fallato:
    https://www.youtube.com/watch?v=KDwe6rMOE_k
    http://www.youtube.com/watch?v=dcGriNOEBnY&

    RispondiElimina
    Risposte
    1. Ciao anonimo. Ottimi i tuoi video dove non ci sono "accartocciamenti" dell'avversario. Sai che cosa inizio a pensare? Che il client non generi i colpi, ma solo il suono e l animazione dell arma che spara. Come è possibile sennò che non si veda l animazione dell'avversario che si contorce?

      Elimina
  2. ed ecco un altra cosa da inserire secondo me nella rubrica voglio riccordare:
    http://bf4central.com/2014/01/youtube-producers-ea-broke-ftc-rules-battlefield-4-promotion/
    I top youtubers pagati da DICE. Shame on lvlcap e simili!!!

    RispondiElimina
  3. Salve sono io di nuovo. Ecco un altra clip molto strana:
    http://www.youtube.com/watch?v=OZ0oT0k--Yo

    RispondiElimina
    Risposte
    1. Muoiono con il mortaio. Infatti saltano quando muoiono. Il bug li è vedere ASSALTO con ak12 senza nessun accessorio

      Elimina
  4. Questo è un video dove si vede quello che è successo a me e stavo giocando su server europeo con tutte le tacche di ping.... credo, a questo punto, che sia un problema legato all'algoritmo che calola la posizione dei soldati all'interno della mappa
    http://www.youtube.com/watch?v=8ObAlpfUbEA&feature=youtu.be

    RispondiElimina
    Risposte
    1. Bello pure questo video. Certo è assurdo doer parlare di queste cose invece di parlare del gioco. Che vergogna. Hanno fatto proprio uno schifo.

      Elimina
    2. Bello... insomma... immaginavo fosse il netcode ma non pensavo potesse arrivare fino a questo punto

      Elimina
  5. finalmente ho capito perché ogni tanto mi è capitato, onestamente non credo più di 5/6 le volte in cui me ne sono accorto prima di morire, di non sbucherellare il mio nemico!
    GRAZIE

    RispondiElimina