NOTA: pubblico il seguente post con la speranza di chiarire alcuni aspetti piuttosto che confondere ulteriormente le idee. Se avete domande, chiedete pure.
Nei giorni scorsi ho fatto qualche ricerca per svelare il funzionamento di alcune opzioni disponibili.
Bisogna premettere che il p2p è stato aggiunto parecchio tempo dopo il rilascio dell'ultima release di Kaillera standard, avvenuta nel 2003, che si basa esclusivamente su server.
Questo è il sito di riferimento:
p2p.kaillera.ru/
Questo è la pagina di riferimento della versione custom più sviluppata (giusto per mostrarne le potenzialità: purtroppo il progetto sembra morto da tempo e i link per i download non funzionano):
smashboards.com/threads/customized-n02-kailleraclient.275895/
Sul sito di riferimento è disponibile l'ultima versione rilasciata, la v0r7. Ha un pannello più ordinato, integra un client IRC (impostato su chissà quale codifica dei caratteri, visto che ha problemi con quelli accentati), ma non prevede l'utilizzo dei server (poco male per me, ma possono essere utili) e, magagna più grossa e pure strana, non è retrocompatibile con la versione che utilizziamo, la v0r6.
Il sito ha una sezione FAQ esaustiva (con alcune conferme, come l'assoluta parità di condizioni tra host e client*),
istruzioni all'uso (nulla che non conoscessimo già) e un simpatico
Delay calculator che, impostato correttamente, ti indica il ritardo in frame, sia su server (usate Official/UOKS servers) che su P2P. Si scopre così che Kaillera, in P2P, aggiunge
1 frame fino a 33ms
2 frame fino a 66ms
3 frame fino a 99ms
4 frame fino a 133ms
Non vado oltre perché già 4 frame di ritardo sono il limite massimo per un gioco come SWOS.
*
Q: Does it give any advantage to low pingers over high pingers like normal kaillera?
A: No. Ping a.k.a. latency can be seen as a network property between 2 endpoints. There are only 2 endpoints in p2p and hence both users share the same ping.
Q: Does host have any advantage? How is host different to connector?
A: No. Host is obviously the one who is connected to. Host has the privilage of taking certain initiatives such as calculating average ping and throughput but nothing special. Client's clock also gets synchronized emit the same time as host. On the negative side, host needs to have the hosting port forwarded in firewalls and routers so the connector can connect. Once the game starts, both behave identically.
Veniamo ora alle "scoperte"... Non aspettatevi chissà cosa, ma possono essere utili.
La prima, purtroppo non funzionante nei test che ho svolto (probabilmente è stata inserita nella nostra versione in attesa di una sua completa funzionalità) riguarda il pulsante
waiting games (vedi prima e seconda immagine, sulla sinistra).
In teoria, mettendo l'host la spunta su
Enlist in waiting games list (vedi terza immagine), il client dovrebbe, premendo il pulsante
waiting games, trovare tutti gli host disponibili in una finestra a parte (vedi quarta immagine).
Purtroppo, come ho già scritto, sembra non funzionare... Se riuscite a combinare qualcosa, scrivetelo qua.
La seconda è più interessante perché è legata alla qualità della parte giocata e, soprattutto, funziona.
Prima di illustrarla, una piccola premessa. Kaillera p2p funziona in maniera molto semplice: una volta calcolato il ping tra host e client applica X frame in aggiunta in maniera tale da preservare i 50 fps dell'emulazione.
Se la connessione è stabile non ci sono problemi e si gioca tranquillamente con X frame di ritardo (1, 2, 3, 4, ecc. ecc.).
Se la connessione non è stabile o, sfiga delle sfighe, ha un ping a cavallo tra il passaggio da un frame di ritardo all'altro, possono esserci i famigerati scatti (che possono sfociare in rallentamenti prolungati).
Primo esempio: io e Spaced ci connettiamo a 17ms di ritardo stabili. Kaillera p2p ci assegna 1 frame di ritardo e lancia l'emulatore. Giochiamo senza problemi.
Secondo esempio: io e Spaced ci connettiamo a 17ms di ritardo. Kaillera p2p ci assegna 1 frame di ritardo e lancia l'emulatore. La connessione non è stabile e, saltuariamente, supera i 34 ms. Ogni volta che la connessione supera quel valore abbiamo uno scatto, dovuto alla perdita di un frame che Kaillera recupera rallentando il gioco (da 50 a 49). Se il valore viene superato per lunghi tratti si hanno veri e propri rallentamenti, che possono scadere fino al vero e proprio slow-motion.
Terzo esempio: io e Spaced ci connettiamo a 32 ms di ritardo, sostanzialmente stabili. Kaillera p2p ci assegna 1 frame di ritardo e lancia l'emulatore. La connessione è stabile, ma ha dei piccoli ritardi che aumentano il ping a 35-36ms. Nonostante una connessione che considereremmo ottimale o quasi, il gioco ha scatti, più o meno continui in base a quante volte viene superata la soglia dei 2 fps.
In casi come il secondo e il terzo, l'host ha la possibilità di intervenire per minimizzare o eliminare il problema.
Kaillera p2p offre una funzione
Smoothing (vedi immagine, in basso a destra), le cui opzioni sono:
-
None, autoesplicativa;
-
If near UB, aggiunge 4ms al ritardo calcolato, nel tentativo di "stabilizzarlo";
-
Always, aggiunge 1 fps a quelli assegnati;
-
Extra, aggiunge 2 fps a quelli assegnati.
If near UB è un po' cervellotica e, a mio avviso, non molto funzionale.
Extra aggiunge ben 2 fps e può fare comodo solo in caso di ping molto buono, da 1 fps, ma decisamente poco stabile.
Always è molto funzionale perché risolverebbe pienamente il problema del terzo esempio (giocheremmo a 2 fps fissi anziché a 1 fps ballerino) e mitigherebbe il problema del secondo esempio.
Always e Extra potete pure utilizzarle per giocare offline e allenarvi a una risposta ritardata. Basta fare contemporaneamente da host e client.
Nota: in base a come è impostata la rete potreste avere un'emulazione lentissima.