Studiare a 15 anni di distanza

Come dicevo ieri in questi giorni sto ragionando sul pathfinding. Questo tipo di attività mi ha richiesto di andare a ripassare tutta una serie di formule e teoremi di trigonometria. La trigonometria è una delle tipiche competenze che ho acquisito alle scuole superiori ma che ho perso nel tempo perché non ho avuto molte occasioni per utilizzarla.

Ricordo però di aver avuto bisogno della trigonometria per un’altra serie di programmi che avevo scritto circa quindici anni fa.

A quindici anni di distanza mi son reso conto di quanto sia cambiato il mio modo di reperire informazioni: 15 anni fa internet era molto diversa da come è oggi, Google non era ancora quotata in borsa e probabilmente non era ancora il primo motore di ricerca, anche il concetto stesso di “motore di ricerca” non era il ancora solidamente l’unico modo di reperire informazioni in rete. Quindici anni fa wikipedia era ancora una piccola enciclopedia online, e non era ancora la risposta a tutte le domande.

Per questa ragione quindici anni fa quando mi son trovato ad avere a che fare con questi problemi ho preso Il Manuale. Il manuale di elettronica e telecomunicazioni è un tomo grande quanto un mattone con i fogli sottili come carta velina che contiene tutti i concetti necessari per la vita, tra cui nella sezione Matematica, la parte di Geometria. Questa versione reale del Manuale delle Giovani Marmotte dal costo di 99.000 Lire era 15 anni fa la risposta a tutti i miei dubbi tecnici.

Oggi naturalmente il manuale rimane a far bella mostra di se in libreria, insieme a tutti gli altri libri di informatica che ho comprato durante gli anni, perché è molto più facile trovare le risposte tramite un motore di ricerca che andando a consultare un manuale cartaceo.

Questo è uno dei cambiamenti epocali che gradualmente si è attuato nel nostro mondo con la diffusione e l’ampliamento di internet.

A* Pathfinding

Vuoi scontrarti velocemente con dei problemi di ottimizzazione anche nel più semplice gioco 2D senza effetti grafici? Basta provare ad implementare un algoritmo generico per far “trovare la strada” ai tuoi omini e poi mettere un po’ di omini o allargare il campo di gioco.

In queste settimane sto sperimentando diverse strategie di pathfinding per simulare il movimento di una folla in un ambiente bidimensionale visto dall’alto con ostacoli. Sto cercando di evitare di usare una griglia e per questa ragione la mia implementazione utilizza i raycast del motore fisico 2D di Unity.

I raycast son semplicemente dei raggi che partono ad esempio da un personaggio, e segnalano se e dove colpiscono un ostacolo: in questo modo si può cercare di tracciare una strada per muovere il personaggio dalla sua posizione alla sua destinazione.

Se gli ostacoli sono pochi e semplici basterà angolare i raggi e far muovere il personaggio fino a quando questo sarà in vista del suo obiettivo, ma se vogliamo far muovere i nostri personaggi all’interno di un sistema più complesso, tipo una serie di stanze ad un vero e proprio labirinto, allora abbiamo bisogno di un sistema generico.

L’algoritmo A* è un sistema generico di navigazione formulato nel lontano 1968, ma tutt’oggi ancora molto utilizzato per la sua versatilità.

Questo algoritmo funziona su una griglia di nodi: dalla partenza si controllano i nodi circostanti e si calcola quale è il più vicino alla destinazione e quanto è il costo per arrivare ad ogni singolo nodo; quindi si prende il nodo più vicino alla destinazione e si fa lo stesso; quindi ci si continua ad espandere per nodi adiacenti fino a quando si trova il nodo di destinazione.

A questo punto possiamo impostare l’algoritmo con pesi differenti in modo che dia priorità al nodo più vicino o alla destinazione, o se privilegiare il minor numero di passaggi. Se privilegiamo il nodo di destinazione cercheremo di avvicinarci il più possibile all’obiettivo, e questo può andar bene se non ci son diversi vicoli ciechi. Se diamo priorità al numero di passaggi invece l’espansione della ricerca sarà uniforme e quindi più lenta nella sua esecuzione se si tratta di girare attorno ad un semplice muro.

La prima soluzione quindi è più veloce con degli ostacoli semplici ma anche in questo caso non garantisce la strada più veloce, mentre la seconda è più veloce con veri e propri labirinti (ed un labirinto è in ogni caso più lento da risolvere).

Una volta trovata la soluzione naturalmente possiamo effettuare altri passaggi per migliorarla, e soprattutto per memorizzarla in modo che il programma possa evitare di risolvere più volte problemi simili.

L’A* è quindi una buona base per cominciare a pensare ad un algoritmo di pathfinding, ma naturalmente su questa base occorre implementare altre “scorciatoie” a seconda delle necessità, per ottimizzare il processo.

A questo punto dello sviluppo ho implementato il semplice A* e un algoritmo per tagliare i nodi intermedi, ma non ci sono ancora come prestazioni: inoltre questa implementazione non sfrutta a pieno il potenziale del raycast che è molto adatto a misurare distanze: per questo motivo nei prossimi giorni proverò a cambiare la costruzione della griglia dei nodi.

Probabilmente scriverò un altro articolo quando arriverò ad una soluzione accettabile.

Review Bombing e la contromossa di Steam

Uno dei problemi grossi problemi delle recensioni sociali è la mentalità di gregge soprattutto quando portata all’estremo grazie agli strumenti attraverso i quali ci si può rapidamente organizzare “dal basso” in rete per dimostrare la propria momentanea indignazione verso qualcosa.

Nelle recensioni di Steam possiamo vedere queste ondate di indignazione rivolte verso gli sviluppatori e le loro pratiche commerciali. Benché tutte queste contestazioni possano essere adeguatamente motivate, spesso la ragione di questa motivazione non ha nulla a che vedere con il gioco in se, e le sue meccaniche. Il caso più eclatante è stata l’ondata di recensioni negative che ha ricevuto Firewatch quando il suo sviluppatore ha fatto rimuovere i video del suo gioco prodotti da Pewdiepie, in seguito all’ennesimo scandalo.

Valve ha deciso di intervenire, probabilmente spinta da quest’ultimo caso, e comunque nel quadro generale del miglioramento del proprio marketplace evidenziando sulla pagina che quel determinato gioco stava ricevendo una ondata di recensioni negative, e dando all’utente l’opzione di filtrare queste recensioni, o di evidenziarle.

Mi sembra un ottimo strumento per andare ad analizzare come le recenti recensioni si siano modificate: è un aspetto cruciale per capire lo stato attuale di un gioco, in particolare per quelli molto datati e per quelli in early access. Questa funzione poteva in parte essere svolta dalla colonna “recensioni recenti”, ma può essere svolta ancora meglio oggi andando a filtrare sul grafico solo alcuni punti di interesse, e leggendo le recensioni relative.

Son certamente strumenti avanzati che probabilmente non verranno utilizzati dalla massa, ma è ottimo che un negoziante sia aperto a mostrare tutto questo dettaglio granulare nelle recensioni degli utenti.

Le recensioni degli utenti sono un ottimo modo per capire la qualità del prodotto, ma hanno anche un sacco di falle: per questo è importante poterle filtrare con precisione.

L’interfaccia al primo avvio vs. l’interfaccia di tutti i giorni

I videogiochi contemporanei non sono mai veramente completi al lancio, e in diversi casi – soprattutto su PC – possono ricevere aggiornamenti costanti anche per molti anni sotto forma di patch e DLC. La questione è ulteriormente peggiorata dall’avvento dei giochi early access che costruiscono gran parte della loro base di utenti prima che il gioco venga lanciato.

Tutto questo quindi aumenta il divario tra il giocatore veterano e quello che sta aprendo il gioco per la prima volta: in un caso particolare mi son realmente reso conto di quale muro si trovano di fronte i nuovi giocatori, e questo caso è Company of Heroes 2.

Company of Heroes 2 è un gioco del lontano 2013 che raccoglie ancora una solida base di circa 150.000 giocatori attivi. Questo gioco ha numerosi DLC e altre forme di microtransazione, nonostante il suo prezzo attuale sia ancora di 19.99 €. Non ho nulla contro DLC e microtransazioni di per se, ma ho un problema se questi si mettono di traverso rispetto al valore del gioco base.

Ho lanciato lo scorso giugno per la prima volta Company of Heroes 2 e mi son trovato davanti ad un menù zeppo di opzioni: campagne single player, missioni multiplayer e altro ancora.

Disorientato ho cominciato a premere una opzione e ho sbattuto contro il primo paywall: devi comprare il dlc per giocare a questo. Torno indietro e scelgo una altra opzione e stessa storia: devi comprare il dlc. Alla sesta volta che ho sbattuto conto un dlc nei primi 20 minuti di esperienza di un gioco a pagamento ho chiuso tutto e liberato spazio sul mio hard disk.

Company of Heroes 2 è probabilmente un buon gioco, ma l’esperienza per i neofiti è disegnata veramente in modo orrendo non solo dal punto di vista dell’usabilità ma anche da quello commerciale: se ti ho appena dato 20 euro non dovresti provare a farmi overselling immediatamente. L’overselling è già fastidioso da Footlocker, e figuriamoci quanto più fastidioso è in un gioco del quale non si è ancora percepito il valore.

Per queste ragioni gli sviluppatori devono sempre ricordare che esistono i nuovi giocatori, e se si è fortunati esistono anche nuovi giocatori per quei giochi che hanno molti anni, e per loro deve sempre esserci una strada agevolata che li porti direttamente ad un tutorial o ad una prima esperienza di gioco, e idealmente promuovere i DLC solo dopo aver fatto sperimentare il gioco base per quello che è.

E in realtà, anche per i giocatori con ore alle spalle magari sarebbe carino non pubblicizzare in maniera invasiva le espansioni, e certamente non facendo sbattere contro dei muri a pagamento mentre si prova a giocare.

Il consiglio è: pensate sempre ai vostri nuovi utenti e testate spesso le prime 2 ore di gioco.

Ripresa Trasmissioni

Dopo aver passato senza celebrazioni il primo compleanno della riapertura di questo blog ho preso qualche altra settimana per riordinare ulteriormente le idee.

Come avevo scritto ho partecipato al Ludum Dare 39 e contrariamente a quanto mi aspettassi son riuscito a pubblicare un gioco entro 72 ore (qui).

Questo piccolo successo ha acceso in me un desiderio di continuare a sviluppare piccoli videogiochi, e nel mese di agosto ho infatti sviluppato un secondo titolo completo (qui).

Sviluppare un videogioco, anche piccolo, partendo da zero mette di fronte ad una serie di interessanti sfide che penso possano essere ottimi argomenti per questo blog: per questo motivo ho deciso di orientare lo scopo di questo blog ai videogiochi e in particolare allo sviluppo degli stessi. Oltre ai videogiochi parlerò occasionalmente di altri modi per raccontare storie come film, telefilm, o libri e quali lezioni si possano trarre da questi nella creazione di videogiochi.

Per il momento vorrei cercare di continuare a pubblicare un articolo al giorno, ma vedremo se con questo cambio di argomento avrò abbastanza da scrivere.

Nelle altre notizie: No Man Sky ha rilasciato un grosso aggiornamento, e penso che troverò una occasione per riprendere la serie di articoli che ho dedicato a questo titolo.