Capitolo 2. Creare un tema di KsirK

KsirK è completamente configurabile. Per chi ha capacità grafiche, creare un nuovo tema è facile come copiarne uno esistente, modificarne la grafica e aggiornarne i dati in un file di configurazione .desktop, generato con Editor dei temi di KsirK. L'ultimo passo è modificare il file che descrive cosa installare.

Tutti gli esempi (testo e immagini) sono presi dal tema predefinito di KsirK.

Struttura delle cartelle e dei file

  • Data/: dati usati dal programma per gestire le immagini del tema.

    • CMakeLists.txt: descrive cosa installare.

    • onu.desktop: file principale della descrizione del tema. Vedi sotto la sua descrizione.

  • Images/: le immagini del tema (mappa, sprite, ecc.)

    • CMakeLists.txt: descrive cosa installare.

    • pool.svg: la mappa e tutti gli sprite usati in questo tema.

    • map-mask.png: l'immagine che permette al programma di sapere su quale stato si trova il mouse durante il gioco (vedi sotto).

    • *.png: le rimanenti sono immagini dei pulsanti.

  • CMakeLists.txt: descrive cosa installare.

  • Sounds/: file sonori del tema.

La cartella Data

Questa cartella contiene un solo file, world.desktop. Questo file è una descrizione del contenuto del tema. Viene utilizzato per descrivere l'organizzazione del mondo e come visualizzarlo. Non devi scriverlo a mano perché sarà gestito da Editor dei temi di KsirK. Per completezza, però, ne descriveremo la struttura.

Un gruppo onu contiene un certo numero di voci di stati, di nazionalità e di continenti. Altri gruppi contengono le descrizioni dei vari sprite, stati, continenti, nazionalità e obiettivi.

Le sezioni seguenti descrivono il contenuto di ogni gruppo.

Il gruppo onu

Tabella 2.1. Le voci del gruppo onu

Nome della voceSignificato
widthLa larghezza della mappa del tema.
heightL'altezza della mappa del tema.
skinpathIl percorso del tema relativo al percorso dei dati dell'applicazione (ad es. skins/default).
nb-countriesIl numero di stati (42 nel tema predefinito). Ci dovrebbe essere lo stesso numero di gruppi di stati sotto.
nb-nationalitiesIl numero di nazionalità (6 nel tema predefinito). Ci dovrebbe essere lo stesso numero di gruppi di nazionalità sotto.
nb-continentsIl numero di continenti (6 nel tema predefinito). Ci dovrebbe essere lo stesso numero di gruppi di continenti sotto.
poolIl percorso e il nome del file magazzino relativamente al percorso del tema (ad es. Images/pool.svg).
map-maskIl percorso e il nome del file di maschera della mappa relativamente al percorso del tema (ad es. Images/map-mask.png).
format-versionLa versione del formato di file del tema (2.0).
nameIl nome del tema da visualizzare.
descUna descrizione lunga del tema.
fighters-flag-y-diffLa differenza d'altezza tra sprite di bandiere e cannoni.
width-between-flag-and-fighterIl numero di pixel tra il pixel all'estrema sinistra della bandiera e il pixel all'estrema destra del cannone semplice (mentre non fa fuoco né esplode).

I gruppi delle descrizioni degli sprite

Ogni tipo di sprite (bandiera, fanteria, cavalleria, cannone, cannone che fa fuoco e cannone che esplode) è definito da un gruppo. Solo alcuni sprite hanno una voce per la larghezza. Questa voce viene usata per il posizionamento relativo durante le animazioni: i cannoni, che facciano fuoco o che esplodano, non dovrebbero «spostarsi» attorno alla bandiera dello stato durante il combattimento.

Tabella 2.2. Voci dei gruppi delle descrizioni degli sprite

Nome della voceSignificato
widthLa larghezza di riferimento dei fotogrammi dello sprite della bandiera.
heightL'altezza di riferimento dei fotogrammi dello sprite della bandiera.
framesIl numero di fotogrammi dello sprite.
versionsIl numero di versioni degli sprite delle bandiere.

I gruppi di descrizione degli stati

Per ogni stato elencato nel gruppo onu, la voce countries ha il suo gruppo, la cui etichetta è il nome dello stato. La tabella sotto elenca le voci di questi gruppi.

Tabella 2.3. Voci degli stati

Nome della voceSignificato
idIl numero identificativo, intero ed univoco, dello stato; parte da zero (0).
nameIl nome dello stato da visualizzare.
<sprite>-pointOgni tipo di sprite (bandiera, fanteria, ecc..) nello stato viene visualizzato in una certa posizione definita da questa voce, che è costituita da due numeri interi separati da una virgola.
neighboursL'elenco degli identificativi dei vicini dello stato attuale.

I gruppi delle descrizioni delle nazionalità

Per ogni nazionalità elencata nel gruppo onu, la voce nationalities ha il suo gruppo, la cui etichetta è il nome della nazionalità. La tabella sotto elenca le voci di questi gruppi.

Tabella 2.4. Voci delle nazionalità

Nome della voceSignificato
nameIl nome della nazionalità (ad es. Giappone).
leaderIl nome che sarà proposto al giocatore che sceglie questa nazionalità.
flagIl nome dell'elemento dello sprite della bandiera dello stato nel file SVG onu.

I gruppi delle descrizioni dei continenti

Per ogni continente elencato nel gruppo onu, la voce continents ha il suo gruppo, la cui etichetta è il nome del continente. La tabella sotto elenca le voci di questi gruppi.

Tabella 2.5. Voci dei continenti

Nome della voceSignificato
nameIl nome del continente (ad es. Africa).
idIl numero identificativo, intero ed univoco, del continente.
bonusIl numero di armate ottenute alla fine del turno dal giocatore che domina tutti gli stati del continente.
continent-countriesL'elenco degli identificativi degli stati all'interno nel continente attuale.

I gruppi delle descrizioni degli obiettivi

Per ogni obiettivo elencato nel gruppo onu, la voce goals ha il suo gruppo, la cui etichetta è il nome dell'obiettivo. La tabella sotto elenca le voci di questi gruppi.

Tabella 2.6. Voci degli obiettivi

Nome della voceSignificato
typeIl tipo di obiettivo. Può essere continents (continenti), countries (stati) o player (giocatore).
nbArmiesByCountryImposta il numero minimo di armate che il giocatore deve mettere su ogni stato.
nbCountriesImposta il numero di stati che il giocatore deve possedere.
nbCountriesFallbackPer un tipo di obiettivo player, se il giocatore preso di mira viene ucciso da un altro, questo imposta il numero di stati che il giocatore deve conquistare come obiettivo alternativo.
descUna descrizione testuale completa dell'obiettivo con segnaposti appropriati (qui serve maggiore documentazione).
continentsL'elenco degli identificativi dei continenti che il giocatore dovrà conquistare.

La cartella Images

Questa cartella contiene i pulsanti specifici di KsirK e il file magazzino SVG contenente la mappa e tutti gli sprite.

Il file pool.svg

Questo file SVG contiene la mappa e tutti gli sprite del gioco. Ogni elemento ha un nome, in modo che il programma possa selezionare e rendere separatamente ciascuno di essi.

Nel tema predefinito, gli sprite sono bandiere, fanteria, cavalleria e cannone. La fanteria rappresenta un'armata, la cavalleria cinque e il cannone dieci. I cannoni sono usati anche per visualizzare le armate in combattimento: è per questo che ci sono tre tipi di sprite per i cannoni: cannone normale fermo o in movimento, cannone che fa fuoco e cannone che esplode.

Ogni immagine degli sprite è la concatenazione di varie viste dell'oggetto, e per ogni vista i suoi fotogrammi. Le viste sono organizzate verticalmente e i fotogrammi orizzontalmente. Dividendo l'altezza dell'immagine per il numero di viste e la larghezza per il numero di fotogrammi si calcola dove tagliare l'immagine in fotogrammi individuali. Questi dati si trovano nel file onu.desktop.

Un esempio di immagine sprite: cannon.png

Per gli sprite delle armate, ci sono tre viste diverse, dall'alto in basso:

  • verso destra,

  • verso sinistra, e

  • di fronte.

Per le bandiere, c'è solo una vista. Tutti gli sfondi degli sprite dovrebbero essere trasparenti.

Un esempio di un'immagine sprite di una bandiera: italy.png.

Tabella 2.7. Gli elementi del magazzino

Nome dell'elementoImmagine campioneSignificato
map
Mappa del mondo del tema. Gli stati possono avere forme arbitrarie, ma dovrebbero essere raggruppati in continenti riconoscibili a occhio, per posizione o per colore.
italy
La bandiera della nazione italiana. C'è una voce simile per ogni nazione.
infantry
Icona che rappresenta un'armata.
cavalry
Icona che rappresenta cinque armate.
cannon
Icona che rappresenta dieci armate.
firing
Icona che rappresenta dieci armate durante un combattimento.
exploding
Icona che rappresenta le armate sconfitte.
alaska
La forma dello stato dell'Alaska; si usa per evidenziarlo. C'è una forma simile per ogni stato. Il suo colore non viene usato, quindi, si è liberi di sceglierne uno qualsiasi.
reddices
I dadi rossi usati per mostrare i risultati delle battaglie.
bluedices
I dadi blu usati per mostrare i risultati delle battaglie.
mark1
Questo marcatore viene aggiunto agli sprite in combattimento per indicare il numero di armate che rappresentano, in questo caso 1. Ci sono anche degli elementi mark2 e mark3.

Il file map-mask.png

Anche questo è un file png che rappresenta il mondo del tema, ma con colori in codice che permettono di identificare ogni stato. Gli stati devono avere almeno le stesse forme degli stati corrispondenti in map.png, in modo che gli utenti possano fare clic ovunque in uno stato visibile e selezionare quello giusto. Stati come le isolette dell'Indonesia nella mappa predefinita possono essere più grandi dell'equivalente nel file map.png per facilitarne la selezione.

Una map-mask campione

Il componente blu (nel modello RGB) di uno stato lo identifica: l'indice 0 è lo stato 0 nel file onu.xml, l'indice 1 è lo stato 1, ecc.. Il bianco (0xFFFFFF in RGB) indica l'assenza di uno stato, come per i mari o le terre di nessuno.

Le immagini dei pulsanti

I nomi dei file sono fissati nel codice, quindi non vanno modificati. La tabella sotto indica tutti i pulsanti che si dovrebbero fornire.

Tabella 2.8. I pulsanti dell'interfaccia

ImmagineNome del fileSignificato
newNetGame.pngCerca di entrare in una partita in rete.
recycling.pngDopo che tutti i giocatori hanno disposto le loro armate, è possibile modificarne la distribuzione (cosiddetto riciclo). Questo pulsante chiede di eseguire questa redistribuzione.
recyclingFinished.pngSceglie di non ridistribuire. Tutte le finestre dei client devono avere questo pulsante premuto per concludere la redistribuzione.
nextPlayer.pngConclude il turno del giocatore attuale e passa al prossimo giocatore, o al prossimo turno se il giocatore attuale era l'ultimo.
attackOne.pngSceglie di cominciare un attacco con un'armata.
attackTwo.pngSceglie di cominciare un attacco con due armate.
attackThree.pngSceglie di cominciare un attacco con tre armate.
defendOne.pngSceglie di difendere uno stato attaccato con un'armata.
defendTwo.pngSceglie di difendere uno stato attaccato con due armate.
moveArmies.pngSceglie di cominciare lo spostamento di armate tra stati (ultima azione del turno).

La cartella Sounds

Questa cartella contiene tre file sonori:

  • roll.wav, riprodotto quando le armate sono in movimento

  • cannon.wav, riprodotto quando si fa fuoco e

  • crash.wav, riprodotto quando un cannone esplode