Creare Videogiochi - Game Developer

Versione completa: Oetzi: a bronze-age trading game
Al momento stai visualizzando i contenuti in una versione ridotta. Visualizza la versione completa e formattata.
Salve a tutti, 

sono Simone, 28 anni, residente a Berlino e non ho mai sviluppato niente di collegato ai videogiochi fino a pochi mesi fa. Tuttavia sono un giocatore accanito e per diversi anni ho scritto a livello semi-professionale su diverse testate italiane, principalmente in merito a MMORPG. 

Mi sono registrato qui perché sto sviluppando da alcuni mesi un progetto personale, estremamente ambizioso per le mie esperienze pressoché nulle, ma che mi sta coinvolgendo abbastanza da dedicarci almeno una dozzina di ore a settimana con regolarità e siccome a lungo termine conto di dare un'impronta community-driven e open-source al progetto, ho deciso che era il tempo perlomeno di condividere il lavoro in corso con qualcuno che non fosse la mia ragazza. Per condividere un eseguibile del gioco e il repo è ancora presto e farò una presentazione al mondo nel momento in cui avrò raggiunto lo step 0.1 della roadmap e ripulito il codice. Il thread è quindi più un'attività di organizzazione delle idee che non una richiesta di feedback o consigli, anche perché se il gioco non c'è, c'è ben poco che potete commentare. Lo userò comunque per postare update rilevanti una volta raggiunte le milestone interessanti.

Premessa:

Il gioco nasce come progetto personale, con la prospettiva di rimanere gratuito, open-source e orientato al soddisfacimento di un bisogno estetico del sottoscritto e di chi, sperabilmente, condividerà i miei obiettivi. Sto sviluppando principalmente per fare un gioco come piace a me ed è di conseguenza tutto un grande atto masturbatorio.

Seconda premessa:

Prevedo di sviluppare questo gioco a tempo indefinito, con una versione 1.0 che richiederebbe parecchi anni se fosse sviluppata da un team e molti di più da me da solo. Perciò numerose scelte tecniche sono volte a semplificare e snellire il processo di sviluppo, a discapito dell'aspetto grafico che è in fondo alle priorità del progetto. Allo stesso modo, in questa prima fase, sto impiegando tutte le mie competenze di code crafting per massimizzare la flessibilità del motore di gioco e dei vari moduli. 

Il gioco:

Oetzi vuole essere prima di tutto una simulazione e solo in secondo luogo un gioco. L'idea è di riprodurre gli aspetti economici, sociali e politici del nord italia (ma la collocazione geografica potrebbe variare in relazione alle discussioni con la mia ragazza su quale preciso setting potrebbe migliorare il gioco) con cui il giocatore interagirebbe in forma di gruppo itinerante: potrà fare il mercante, il pastore, l'artigiano, il brigante o più di una di queste cose insieme, a seconda della composizione del gruppo, che crescerà e cambierà in base alle scelte del giocatore ma anche alla volontà dei singoli membri. 

Ci sarà una modalità "world map" in cui ci si muoverà da un'insediamento all'altro, in cerca di risorse, commerci o attività lucrative di sorta. Ci sarà poi una modalità "combattimento" in cui il party verrà dispiegato nel caso di combattimenti, attività di caccia, risoluzione di zuffe interne e quant'altro.

Ispirazione primaria del gioco è Dwarf Fortress, non tanto nelle meccaniche quanto nell'approccio alla dimensione di gioco: quindi gameplay emergente, controllo molto limitato sugli individui, informazioni parziali o erronee sugli avvenimenti del gioco. Questo si traduce nella volontà di replicare da un lato, come in Dwarf Fortress, dinamiche sociali e individuali che possono andare in aperto contrasto con la volontà del giocatore, dall'altro in un'interfaccia che nasconda e confonda, per evitare un eccesso di numeri, testi e bottoni che un uomo di 4000 anni fa non apprezzerebbe. In particolare vorrei fare un lavoro specifico sulla rappresentazione del tempo e dello spazio e ho un po' di idee in testa. Altre cose come i tratti personali, le competenze e gli oggetti posseduti saranno invece più espliciti, in quanto facenti parte delle cose che una persona che non sa scrivere sa comunque descrivere.

Aspetto tecnico:

Il gioco è realizzato al 100% in linguaggio Scala usando libgdx come libreria. Sugli asset e la GUI sto facendo il minimo necessario per accompagnare il processo di sviluppo ma conto di approcciare il problema con calma, lasciandomi aperte le porte all'adozione di un asset loader un po' furbo. In ogni caso tutto 2D isometrico su griglia quadrata.

Le parti forse più peculiari sono:

1) la logica di gioco è implementata in funzionale puro con strutture dati immutabili(simulazione degli insediamenti, processi decisionali, rappresentazione dello stato del gioco, profili individuali, skill ecc ecc) mentre le parti più performance critical come il rendering, la gestione delle entità a schermo, il pathfinding, ecc ecc seguono l'interfaccia imperativa di libgdx, che comunque rimane un tool scritto e pensato per Java. Nei punti di contatto tra le due parti del gioco vorrei ancora raffinare un po' alcune cose ma per ora riesco a tenerle ben separate. Ho vaghe preoccupazioni sulla parte di simulazione in funzionale perché potrebbe risultare onerosa ma ho già provato a parallelizzarla su n core e riesco a simulare (usando operazioni farlocche giusto per far frullare la cpu, visto che la logica di gioco non c'è) simulando 500 insediamenti da 1000 individui ciascuno senza scendere sotto ai 60 fps.

2) molti elementi del gioco sono descritti con istruzioni in linguaggio naturale. Niente XML o JSON o formati strani. Il gioco sarà moddabile con frasi in linguaggio naturale. Ho già realizzato una proof of concept di un parser per la descrizione delle abilità di gioco. Per ora è molto rudimentale: si può dare un nome e una categoria all'abilità e assegnargli degli attributi opzionali (altrimenti usa il default). Per esempio: "Blacksmithing is a smithing skill. It must be learned by training." è una delle frasi riconosciute dal parser, che leggendo il file di testo creerà un'instanza di Skill, con nome "blacksmithing", categoria Smithing e trainableByLearning=True.  La proof of concept copre il 90% di quello che vorrei vedere nel linguaggio quindi per ora l'ho congelato in attesa di avere tutto il resto pronto per iniziare a lavorare seriamente sui contenuti.

3) più avanti cercherò di implementare un layer di API per il controllo delle entità e dei processi decisionali interni al gioco e rendere il gioco un sandbox per il machine learning, sia per implementare modelli decisionali complessi per le entità del gioco (però poi non si gioca più perché sarà lento come la fame) sia per il party normalmente operato dal giocatore. Questo è il campo in cui lavoro quindi non potevo esimermi.
Un'idea molto carina ma difficile da realizzare. Spero che non abbandonerai il progetto e che ci mostrerai delle immagini/video del gioco al piu presto.
Io son curioso di vedere qualche screenshot appena disponibile, seguo!
Il problema è che per adesso sto usando degli asset a caso trovati su internet e col classico stile da JRPG che non penso sarà quello definitivo. Appena ho un pezzo di simulazione fatto bene screenshotterò un po' di menù.