In questa puntata, Mark affronta un curioso bug fisico dovuto a codice ereditato dai giochi della serie Crysis.


Mark è tornato per correggere un altro bug dell’Arena Commander e parla della sua opinione di Han Solo!

 

Articolo originale disponibile presso le Roberts Space Industries.


Trascrizione

Ragazzi, benvenuti al sesto episodio di Bugmashers!

Ho delle buone notizie! Ho sentito che stanno facendo un film su Han Solo, che sarà interpretato da… Indovinate chi? Yup, avete indovinato! Zac Efron! Oh, sarà interessante, sarà davvero interessante. Ok, diamo inizio allo show.

*Intro di Bugsmashers*

Salve a tutti, siamo qui nel mio piccolo, divertente livello di prova, per cui entriamo in game così che vi possa mostrare un altro bug divertente. Vi darò un assaggio degli affascinanti momenti che a volte viviamo quando lavoriamo con i flussi dati: in alcuni casi, quando proviamo qualcosa, ci accorgiamo immediatamente che ci sono già dei problemi o dei malfunzionamenti da risolvere. Dunque, il mio personaggio… Lo chiamerò Signor Rossi… Dicevo, siamo qui con il mio Signor Rossi e la mia bellissima Aurora e sto per entrare nella nave: vediamo cosa succede. Du du du du du du. Entro nella nave. Uhm… Oh no, sta vibrando tutto in maniera pazzesca! Weeeeee. Perché non si muove? Oh gosh, che sta succedendo? No… Niente, sta vibrando tutto… Oh gosh, e quando il giocatore si muove la situazione peggiora seeeempre più.

Ok, siamo di nuovo nel mio piccolo livello e stiamo osservando un altro bug. Come potete vedere, il mio personaggio non ha le texture… Yeeeeh. Oh, è incantevole, ma vediamo cosa sta succedendo nel flusso dati. Allora, questo bug è dovuto ad un’altra causa, ma adesso vi mostrerò cosa è successo prima con il mio personaggio, il Sig. Rossi, e la mia Aurora, quindi rientramo nella nave. Oh, sto entrando, oh, sto entrando. Ed ora… Oh, no! Oh, perché? Ahhhhh. Allora, la parte divertente è che il personaggio sta in qualche modo interagendo così male con la nave che si sta rompendo tutto, io sono incastrato all’interno dell’Aurora eeeee… Beh, è fantastico. Che ne pensi Tom? Sono sulla nave, e l’ho ribaltata.

*voce fuori campo* Ottimo.

Ottimo. Figo. Allora, diamogli di nuovo un’occhiata, ma questa volta utilizzeremo la nostra bellissima modalità debug, che ci mostra tutti i proxy fisici. Come potete vedere, dentro il Sig. Rossi c’è questa specie di piccola sfera grigiastra che costituisce il proxy fisico del personaggio: qualsiasi cosa la colpisce, colpisce anche il personaggio. Quando muovo il personaggio si muove anche il proxy, è come se… E’ come se fosse un manichino che si muove con noi, mentre la nave… Beh, è una nave. Dunque, vediamo cosa succede quando entro: iniziamo a salire… Per il momento non ci sono problemi, ma quando entriamo… O mio dio, sono diventato una capsula. Oh gosh, che sta succedendo? Sto penetrando il proxy fisico della nave, nooooooooooo, e… E’ esploso tutto.

Allora, la piccola capsula che avete visto è dovuta a del veeeecchio codice proveniente da Crysis, in cui essenzialmente utilizzavano questa capsula per ridurre il costo delle interazioni fisiche del giocatore: venivano considerate solo le interazioni che andavano a colpire la capsula, tralasciando tutte le altre e risparminado così sui calcoli delle collisioni, perché sono piuttosto costosi per la cpu. Noi avevamo disabilitato la capsula perché, beh… Avete visto un esempio dei bug che causa. Sfortunatamente, la capsula viene attivare a causa di qualche altro codice non riguardante in alcun modo la fisica del giocatore. Questa qui è la parte del codice responsabile della fisica del giocatore, mentre quest’altra è il… Reticolo del giocatore, che controlla un’altra serie di operazione come, ad esempio, la maniera in cui viene animato il personaggio, le collisioni, cose del genere. Allora, quando entriamo in una nave la modalità di funzionamento delle collisioni viene modificata in maniera tale che il personaggio non interagisca con la nave: non sarà in grado di penetrare all’interno del suo proxy fisico, ma non ci saranno neppure interazioni di nessun genere, e quando invece queste si verificano, semplicemente le rimuoviamo. Ma purtroppo, quando avviene questo cambio di modalità il codice decide di passare per queste piccole stringhe qui, e questa qui è la versione del modello del personaggio che viene utilizzata in questo caso: così facendo, si crea questo livello di collisioni extra, tutte dovute al codice del CryEngine, ed è qualcosa che vogliamo evitare. Infatti IllFonic aveva spostato tutto il codice relativo alla capsula, ma ci dobbiamo anche assicurare che tutto ciò sia disabilitato in questa parte del programma, il che vuol dire che che lo strano hack compiuto in passato per cercare di risolvere la questione non è stato sufficiente. Dunque, probabilmente di quel tentativo è rimasta questa variabile qui, per cui disabilitiamo questo cattivo ragazzo e dovremmo aver risolto: adesso non dovrebbe più comparire quella capsula.

Inoltre, c’è un altro problema perché… nel codice dei veicoli, più precisamente… Whoow… L’area delle funzioni. Allora… Inizializzazione… Ok. Quando effettuiamo l’inizializzazione, in realtà diciamo alla fisica dei veicoli che non vogliamo che il giocatore sia in grado di spostarli. Ma come avete potuto vedere, il personaggio era in grado di spostare la nave. C’è voluto parecchio debug per capire cosa stesse davvero accadendo, ma in due parti della… Ehr… Noi la chiamiamo l’entità vivente della fisica del giocatore… Questa stava controllando – più precisamente, in questo punto – se doveva interagire con qualcosa. Come potete vedere, questa porzione del codice non controlla se sia possibile spostare le navi, per cui salta questa verifica e passa direttamente alla linea successiva. Pertanto, quello che faremo adesso è spostare il controllo sulla capacità di muovere la nave per costringere questa funzione ad effettuare questo passaggio. Tuttavia, quando ho lanciato il gioco la prima volta per verificare se il nuovo codice funzionasse a dovere, mi sono accorto che il giocatore causava un’impulso sulla fisica della nave ogniqualvolta saltava. Riguardando il codice ho trovato questa sezione qui, quella delle collisioni con il terreno, che si occupa di… Se il giocatore è appoggiato su qualcosa, il motore fisico compie dei calcoli aggiuntivi e crea un impulso così che, quando il giocatore si troverà su una cassa e salterà, contemporaneamente la fisica imprimerà un impulso alla cassa stessa in direzione opposta a quella dello spostamento del giocatore. Ma dal momento che in questo caso non vogliamo che si verifichi una cosa simile, dobbiamo disattivare la flag che si occupa di queste collisioni. Ok, impostiamola così.

Dunque, adesso diamo una ricompilata al codice e riproviamoci. Sto entrando nella mia nave magica… Du du du… E la capsula è sparita! La nave non si sta muovendo, possiamo saltare come ci pare e la nave non si sposta perché abbiamo impostato quella flag, per cui non saremo in grado di spostare la nave. Ovviamente, il mio personaggio è ancora rosso, ma… Danny pensa che sia una nuova funzionalità. Voglio tenerla. Andiamo, Sig. Rossi… Wheee. Dunque mi posso muovere, ma la nave non si sposta. Ok, usciamo, e la nave è ancora lì. Eeehy, bug della fisica. Sto cercando di saltare, ma non riesco a farlo. Whow. Ok, questo è tutto, arrivederci al prossimo bug.

Spero che vi sia piaciuto quel piccolo bug, sembra proprio che ci capitino sempre dei bug fisici, o che succeda in tre casi su dieci. Il fatto è che stiamo utilizzando il motore di gioco per cose per cui non era stato programmato, per cui dobbiamo sempre fare i conti con problemi improvvisi ed inaspettati. Spero però che vi sia piaciuto e, sfortunatamente, questa settimana non ho ricevuto molte domande, per cui non ho nulla a cui rispondere, ma la speranza è l’ultima a morire. Se avete delle domande riguardanti il game design in generale, l’industria videoludica, la programmazione o qualsiasi altra cosa correlata al mio ruolo qui alla CIG, non fatevi problemi a chiedere. Cercherò di rispondervi ogni settimana. Per cui mandatemi le vostre domande e vedremo a quali riuscirò a rispondere.

Alla prossima, su Bugsmashers!

Trascrizione a cura di Darnos.