Il database dei nemici

In un generale piano di semplificazione (e possibilmente ampiamento) del gioco, ho pensato di ristrutturare le informazioni che il gioco utilizza per generare nemici con cui popolare gli ambienti.

Il database dei mostri

Fino a poche versioni fa, i nemici che invadono a ondate il castello venivano generati da una funzione che conteneva, hard-coded, tutte le caratteristiche necessarie a costruire le creature che costituiscono i nemici. Questo sistema risultava appesantire il codice del gioco e ogni volta che si voleva prevedere un nuovo nemico, toccava ovviamente fare modifiche al codice.

Oggi non è più così, e i dati di tutti i nemici che il sistema può generare sono contenuti in questo file: it_mobs.txt (cliccare per aprirlo). Questo file è anche detto il database dei mostri.

Formato

Osserviamone una riga, per capire come è fatto questo database:

0|2|uno sludge|asludge.gif,40,40|type=11,nohands,Forza=1.5,suffersound=pig.wav

Il formato è testo (codifica standard UTF-8) separato dai simboli “|” (anche detti pipe). In pratica il file ha 5 colonne.

  • Colonna 1=forzaMin: Livello medio di Forza minimo a cui questo nemico può apparire
  • Colonna 2=forzaMax: Livello medio di Forza massimo a cui questo nemico può apparire
  • Colonna 3=Nome
  • Colonna 4=Immagine, espressa come nome file (sottointeso: si deve trovare nella cartella immagini di Sottomondo), larghezza in pixel, altezza in pixel (sottointeso: per la risoluzione di riferimento dichiarata dal gioco 800×600 pixel)
  • Colonna 5=Attributi, espressi come lista chiave=valore, separati da virgole. Determinano le caratteristiche di questa creatura

Il sistema genera nemici a intervalli regolari, e prima di fare ciò calcola il livello medio della forza dei giocatori. La logica di questo è quella di non immettere nel gioco nemici troppo deboli o troppo forti. Una volta calcolato il livello medio della forza dei giocatori collegati, il sistema immetterà solo i nemici “adatti” ossia che soddisfano la seguente condizione:

forzaMin <= Media Forza Giocatori < forzaMax

La funzione che fa apparire un nemico scelto a random tra quelli “adatti” è la PopMonster() e si trova nel file it_commons.DXL. Basta dargli in ingresso la media della Forza dei giocatori, e un set di stanze dove si vuole che il mostro appaia.

La funzione si basa, appunto, sul database dei mostri. Questo, viene letto in memoria dalla funzione LoadMobs(), che va a popolare l’array mobs che resterà in memoria per tutta la durata del gioco.

SUB LoadMobs()
	' Load mobs from externl csv file
	mobs = NewArray()
	Dim txtTracks = HttpFetch(gameinfo("site")+"downloads/it_mobs.txt")
	If InStr(txtTracks,"exception")>0 'Offline
		Return
	End_If
	Dim lines = Split(txtTracks,Chr(10))
	Dim i=1
	For Each line In lines
		Dim arr = Split(line,"|")
		arr(1)=Round(arr(1),1)
		arr(2)=Round(arr(2),1)
		mobs(i) = arr
		i=i+1
	Next
	'Print "Caricati " & SetLen(mobs) & " mostri." & mobs
End_SUB

La LoadMobs() è piuttosto semplice da capire e tramite la istruzione HttpFetch scarica dal sito del gioco il file-database copiandolo in memoria. Questa funzione, richiamata all’avvio del gioco, si può anche richiamare dal pannello di amministrazione ed è dunque ovvio che così non è più necessario fare un riavvio del gioco se per caso si va a modificare il set di mostri. Una bella comodità.

Osservando forzaMin e forzaMax si vede che i mostri si differenziano in modo omogeneo nei livelli di forza da 1 a 15, mentre dal 15 al 100 i nemici sono sempre gli stessi.

Attributi dei mostri

Potrebbe suscitare un pò di curiosità la parte relativa agli attributi dei mostri, quella cioè che si trova nella quinta colonna del file. Gli attributi sono espressi generalmente come coppia chiave=valore. Qui sotto una carrellata dei pù importanti:

  • type = Tipo del mostro. C’è una tabella standard (cercate “character types” a questa pagina), ricordate che per esempio 14 è il vampiro.
  • Forza = forza del mostro generato. Curiosità: esiste un valore speciale “*” che verrà sostituito nella popMonster dalla forza media degli utenti, così si otterrà un mostro con forza sempre ottimale.
  • yell = Urlo di attacco del mostro. Deve essere un file audio
  • suffersound = Urlo del mostro (quando muore). Altro file audio. Esiste comunque il default “pig.wav” settato nella popMonster
  • artdefense = Arte di difesa. Di default, tutti i mostri generati dalla popMonster avranno comunque l’Arte della Sopravvivenza.
  • keeper = Flag che indica che questo mostro tende a “tenersi” gli oggetti che possiede. Nel file, keeper o keeper=1 sono sinonimi.
  • nohands = Flag, indica che il mostro non ha “mani” né tasche, quindi non può trasportare oggetti. Serpenti, vermi eccetera.
  • vuln_mob = Flag, indica vulnerabile solo da attacchi di gruppo
  • terminator = Flag. Indica che il mostro prende di mira una persona e al segue fino alla morte (di uno o dell’altro).

Conclusioni

Come è facile intuire, aggiungere mostri a Sottomondo è facile quanto aggiungere una riga di testo al file-database. Capendo come funzionano i vari attributi è davvero semplice, e potrebbe riuscirci anche un bambino. Occorre ricordare che anche la immagine e i vari file audio degli urli vanno messi nella cartella apposita, quindi al momento attuale se volete proporre nuovi mostri da aggiungere potete farlo ma dovete inviare riga di testo e files (grafica + audio eventuali) al nostro contatto. A inserire la riga e copiare i file al posto giusto ci pensiamo noi. Un domani potremmo anche trovare un modo ancora più agevole.

 

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *