17 giu 2010

Omen Nomen /1

Programmazione | Roguelike

on_097a_1 L’idea di Omen Nomen nasce sia come diversivo, o meglio come un modo di affrontare il tema da un altro punto di vista, ed al tempo stesso viene stimolata dall’idea di introdurre una meccanica di generazione casuale che rende merito a Diablo II ed in parte a Borderlands, che va a rivitalizzare nella mia mente il concetto generale di “oggetto” di gioco (armi, armature ecc…) considerato come una base su cui vengono applicati diversi effetti – bonus o malus. Su questo imposto la generazione del nome dell’oggetto, che andrà a riflettere le proprietà che gli appartengono. Decido di portare il tutto ad un livello che va a rasentare il comico (il che accadeva per certe armi di alto livello in Diablo II).

Nasce così una serie di classificazioni (rank) divisi in fasce (tier), tramite i quali vengono generati oggetti e nomi che vanno da un’estrema semplicità (nessun tipo di effetto applicato), come Falchion, Crossbow ecc…, ad un insieme di effetti che producono descrizioni pompose come Magnetic Flail of Crushing o Glorious Dagger of Daylight. Lo stesso vale per le armature o per gli oggetti di equipaggiamento (stivali, guanti, elmi, anelli ecc.).

Già che ci sono, e dato che il titolo del gioco va a riflettere proprio il modo in cui il nome rispecchia la natura dell’oggetto a cui è legato (Omen Nomen, “il destino nel nome” in latino), espando la meccanica anche ai mostri (mai visto uno Electric Zombie of Moon?), ed ai dungeon (The Vaults, The Abyssal Forge, The Infernal Gelatinous Mausoleum of Luminous Skulls giusto per citare).

Oltre alla mera generazione del materiale di gioco, ho tentato di implementare lo spirito del titolo in maniera più completa, calcolando il seed del motore random dal nome che il giocatore sceglie per il suo personaggio. Questo significa, essenzialmente, che una serie di azioni avrà sempre lo stesso risultato (non è completamente esatto: sarebbe meglio parlare di “una serie di azioni che produce lo stesso numero di estrazioni di numeri casuali”). La cosa mi interessa soprattutto perchè mi porta ad un’interessante conclusione: “registrando” le azioni compiute dal personaggio ad ogni turno dovrebbe essere possibile riprodurre una sorta di replay dell’intera partita. Prima o poi dovrò provarci.

A parte questo, il discorso dungeon va a toccare il cuore di ogni roguelike, ovvero la generazione procedurale delle mappe dei dungeon: prima di arrivare a sviluppare la versione attualmente implementata ho compiuto alcune ricerche, ho riportato in Java un pò di algoritmi e li ho utilizzati come punto di partenza. Si può considerare questa (breve) lista come riferimento:
- Ray Dillinger Cave Generator
- Solarnus Dungeon Generator
- Jimmy_B Dungeon Generator
- Mike Anderson Generator (di questo purtroppo non trovo più il link) (UPDATE: link trovato, ed è proprio sulla sequenza di azioni riportate in pagina che ho basato il mio algoritmo per Omen Nomen).

Aggiungo inoltre un altro paio di pagine a cui ho dato almeno una scorsa:
- Ascii Dreams – Unangband Dungeon Generation – Part Two
- The Chronicles of Doryen – BSP Dungeon Generation
C’erano anche un pò di pagine utili su simugraph.com, ma sembra che il sito sia defunto.

In seguito a smanovelli e riflessioni ho sviluppato varie versioni personali, tra cui una basata sull’algoritmo di Conway (che genera più che altro caverne ampie e irregolari) e una sulla BSP (di cui sopra) che volevo utilizzare per generare un quartiere cittadino.
Dovrei avere ancora il progetto usato come banco di prova per gli algoritmi – appena ho un pò di tempo sistemo e lo metto a disposizione.

  1. #1

    NoaNo Gravatar

    Uff… avevo un link con una quantità disarmante di algoritmi per generare labirinti, da quelli irregolari, a quelli con stanze… >_< devo ritrovarlo, fosse solo perchè interessava anche me! :D

Scrivi un commento