Come preannunciato su Discord, mi faccio carico dell'onere di aprire e gestire il thread per il GL-RTS! Per coloro i quali non hanno seguito: di cosa si tratta?
Qui in GameLoop continuiamo a fornire risorse per l'apprendimento e promuoviamo la condivisione delle conoscenze tra i membri della community. Dopo il CS50, quindi, abbiamo deciso di alzare un po' di più l'asticella e passare a qualcosa di nettamente più complesso, qualcosa che possa spingerci ad imparare sempre di più.
Svilupperemo un RTS multiplayer partendo dalle basi dello sviluppo di rete fino ad arrivare a completare anche il gameplay.
RISORSE
Networking
Sto personalmente sviluppando la libreria di networking che andremo tutti ad utilizzare. Potete trovarla qui e potete contribuire: non abbiate vergogna!
Articoli
Age of Empires' 1500 archers
Tribes Engine Networking Model
Quake 3 Networking Inspection
Gaffer on Games
redblobgames.com
catlikecoding.com
Libri
Multiplayer Game Programming
STRUMENTI UTILIZZATI
Gli strumenti che utilizzeremo per sviluppare (così come per fornire gli esempi e le risorse) saranno Unity e C#. Questo non esclude che possiate utilizzare qualsiasi strumento preferiate: i concetti che si andranno a toccare non dipendono dal linguaggio o dall'engine scelto.
DEFINIZIONE DELLA SFIDA
Per lo sviluppo di questo progetto ho deciso di lasciare libertà di espressione a chi vuole partecipare. Il gioco può essere costruito secondo la propria preferenza personale, percorrendo le tematiche che più preferite e aggiungendo le feature che più vi aggradano (e/o che vorreste provare ad implementare).
Ci sono però dei punti chiave che tutti i progetti devono contenere:
- un sistema per la gestione della telecamera
- un sistema di griglie (per pathfinding, building, etc)
- un sistema per la costruzione di edifici
- un sistema per la gestione delle risorse (estrazione, stoccaggio, consumazione)
- un sistema per la gestione delle unità (sia giocanti che non giocanti)
Inoltre, se volete aggiungere pepe alla sfida e mettervi alla prova, potete cimentarvi nell'introdurre feature addizionali (non obbligatorie) come:
- un sistema per la gestione della minimappa
- generazione procedurale della mappa
- nebbia di guerra e Area of Interest
NETWORKING
Il progetto è incentrato sul gioco multiplayer, quindi per forza di cose è necessario un paragrafo sul networking! 😉
Come già anticipavo prima, ho messo a disposizione i sorgenti di una piccola libreria di rete che man mano andrò a potenziare e arricchire. Come potete notare si basa su UDP. Per una spiegazione sul perché vogliamo utilizzare UDP rispetto a TCP, vi rimando ad un mio articolo.
L'architettura di rete che andremo a realizzare sarà composta da un server che farà girare la simulazione ed avrà l'authority e da X client che potranno collegarsi, inviare input e visualizzare lo stato della simulazione.
OBIETTIVI
- realizzare qualcosa di più complesso rispetto a ciò che si è fatto nel CS50
- imparare attraverso la condivisione di conoscenza e di idee
- imparare ad ottimizzare il consumo di risorse (CPU, memoria, bandwidth)
- avere una base sulla quale poggiarsi per poter sviluppare un RTS completo (casomai vogliate)
PARTECIPANTI
Si può partecipare all'evento sia da soli che in team, non ha importanza.
Di seguito una lista dei partecipanti.
ASSIGNMENT 1
Come prima cosa realizzare un documento che descriva cosa andrete a realizzare. Dovrà contenere un po' di informazioni sul concept che andrete a realizzare (un po' di fantasia, su!) e sulle meccaniche di gameplay che volete creare. Non è necessario niente di complesso, ovviamente.
Infine un elenco di milestone (con almeno i punti chiave da implementare in questo progetto) dove andrete a definire come intendete affrontare lo sviluppo.
Questo documento potete tranquillamente inserirlo come README del vostro repository GitHub dove andrete ad hostare il progetto.
Hard mode
Preventivare anche le tempistiche necessarie per ogni milestone.
ASSIGNMENT 2
Realizzare una piccola simulazione sul server con un terreno e delle unità in movimento. Sincronizzare queste unità sui client collegati. Le unità non sono comandate dal client, sono semplicemente unità possedute dal server.
Hard mode
Ottimizzare il consumo di risorse (in particolare della banda).