18 lug 2010

E poi il mondo.

BeeTLe BeTHLeHeM | Programmazione | Roguelike

A parte il fatto che le temperature di questo periodo mi stanno letteralmente sciogliendo, non vorrei si pensasse che, dopo la release del mese scorso, me ne sia rimasto con le mani in mano.

Un paio di osservazioni le ho ottenute nel modesto thread aperto su Reddit – non che mi aspettassi di più, e comunque sono servite per illuminarmi su un paio di dettagli. Per adesso questo si concretizza nella possibilità di ridefinire i tasti a proprio piacimento tramite un file esterno di configurazione, e la visualizzazione del readme direttamente dall’applicazione, sia da menù principale che ingame (l’avevo già pronta, ma ero arrivato in quel momento in cui senti nel profondo che o pubblichi tutto così com’è o non lo farai mai – rimane sempre qualcosa da fare “dopo”).

Credo di aver ottimizzato un pò il refresh a video, e delle segnalazioni che ho ricevuto mi resta solo di implementare nelle schermate di menù la selezione diretta via lettere alfabetiche tipica di NetHack (e non solo)… anche se la cosa ancora non mi convince troppo: sto pensando invece di permettere l’utilizzo di filtri per visualizzare tipologie specifiche di oggetti. Ci devo pensare.

mapgeneratorMa mentre Omen Nomen è in un momento di relativo riposo, mi sto portando avanti su quello che sarà il grande passo delle prossime versioni, ovvero l’espansione “geografica” del mondo di gioco. Da questo punto di vista mi sono messo a studiare il modo di generare una mappa abbastanza realistica, e prendendo a modello l’algoritmo di midpoint displacement, modificando, storcendo e tirando, ne è uscito fuori qualcosa che, se non è bello, perlomeno è funzionale. Anche se purtroppo alcune volte le zone di terreno appaiono ancora un pò troppo squadrate.
Oltre all’algoritmo di cui sopra ne ho utilizzato anche un secondo per simulare l’erosione laddove la differenza altimetrica tra due tile è eccessiva (togliendo dal più alto e aggiungendo al più basso), mentre i fiumi vengono generati in alto e scorrono verso il basso, e quando non possono più scorrere uso un metodo ricorsivo di flood fill per riempire d’acqua i tile adiacenti entro un certo range di altezza a partire da quello raggiunto dal fiume.

Il risultato (uno dei possibili risultati) lo vedete nell’immagine qui sopra: i corsi d’acqua sono azzurro/blu, le pianure sono trattini verdi, e quelli gialli sono zone desertiche. Le montagne sono rosse, e quei simboli verdi abbastanza simili a ^ sono colline. I ‘pipe’ verde chiaro sono foreste, e i simboli = sono zone paludose. Ci sono anche un paio di chioccioline, posizioni di villaggi (solo le coordinate). La schermata mostra solo una sezione della mappa intera, che misura 129×129 tile (il midpoint displacement deve partire da una mappa con dimensioni uguali a (2^x)+1).

In questi giorni sto affrontando la fase successiva: dopo la generazione geografica della mappa di gioco, sono passato alla creazione dei centri abitati, che acquisiscono caratteristiche a seconda del tipo di tile adiacenti – qualcosa di simile a Civilization, ma ad un livello molto più semplice. Oltre ai terreni, il posizionamento di giacimenti minerari di vario tipo applica ulteriori effetti, come i bonus al fattore difensivo del centro abitato, o il tipo di edifici presenti (che dipende anche dalla popolazione). Da qui si capisce che certi villaggi saranno più sviluppati di altri, e che ci saranno giacimenti non sfruttati. Sto già pensando a come far creare miniere separate che manderanno minerali ai paesi originari tramite carovane, ma come al solito non voglio spingermi troppo oltre.

Scrivi un commento