Capítulo 2. Creando un tema para KsirK

KsirK es totalmente personalizable. Para los que tengan habilidad con los gráficos, crear un nuevo tema es tan fácil como copiar uno ya existente, editar o cambiar los gráficos y actualizar los datos en un archivo de configuración .desktop, lo que se hace utilizando Editor de temas de KsirK. el último paso es editar el archivo describiendo qué instalar.

Todos los ejemplos (texto e imágenes) están tomados del tema predeterminado de KsirK.

Estructura de directorios y archivos

  • Data/: Datos usados por el programa para manejar las imágenes del tema.

    • CMakeLists.txt/: Describe qué instalar.

    • onu.desktop: Archivo principal para la descripción del tema. Vea su descripción más adelante.

  • Images/: Imágenes del tema (mapas, iconos, etc.)

    • CMakeLists.txt/: Describe qué instalar.

    • pool.svg: El mapa y todas las imágenes utilizadas en el tema.

    • map-mask.png: La imagen que permite al programa encontrar sobre qué país está el ratón durante el juego (ver abajo).

    • *.png: Las demás imágenes de aquí son de botones.

  • CMakeLists.txt/: Describe qué instalar.

  • Sounds/: Archivos de sonido para el tema.

La carpeta «Data»

Esta carpeta contiene solo un archivo, world.desktop. Este archivo es una descripción del contenido del tema. Se usa para describir la organización del mundo y cómo representarla. No tiene que rellenarlo manualmente, ya que de eso se encarga Editor de temas de KsirK. Pero, por dar una información completa, describiremos su estructura.

Un grupo onu contiene un número de entradas de países, un número de entradas de nacionalidades y un número de entradas de continentes. Entonces varios grupos contienen la descripción de las diferentes imágenes, la descripción de los diferentes países, continentes, nacionalidades y objetivos.

Las siguientes secciones describen el contenido de cada grupo.

El grupo onu

Tabla 2.1. Las entradas del grupo onu

Nombre de la entradaSignificado
widthAnchura del mapa del tema.
heightAltura del mapa del tema.
skinpathRuta del tema relativa a la ruta de los datos de la aplicación (por ejemplo, skins/default).
nb-countriesNúmero de países (42 en el tema predeterminado). Debería haber el mismo número de grupos de países abajo.
nb-nationalitiesNúmero de nacionalidades (6 en el tema predeterminado). Debería ser el mismo número de grupos de nacionalidad de abajo.
nb-continentsNúmero de continentes (6 en el tema predeterminado). Debería haber el mismo número de grupos de continentes abajo.
poolRuta y nombre del archivo de almacén relativa a la ruta del tema (por ejemplo, Images/pool.svg).
map-maskRuta y nombre del archivo de máscara del tema relativo a la ruta del tema (por ejemplo, Images/map-mask.png).
format-versionVersión del archivo de formato del tema (2.0).
nameNombre con el que se muestra el tema.
descDescripción detallada del tema.
fighters-flag-y-diffDiferencia de altura entre las imágenes de las banderas y los cañones.
width-between-flag-and-fighterNúmero de píxeles entre el píxel de más a la izquierda de la bandera y el píxel más a la izquierda del cañón (cuando no está disparando ni explotando).

Grupos de descripción de imágenes

Cada tipo de imagen (bandera, infantería, caballería, cañón, cañón disparando y cañón explotando) se define mediante un grupo. Solo algunas imágenes tienen entrada de anchura. Esta entrada se usa para establecer posiciones relativas durante las animaciones; los cañones, disparando o explotando, no deberían «moverse» alrededor de la bandera del país durante la batalla.

Tabla 2.2. Entradas del grupo de descripción de imágenes

Nombre de la entradaSignificado
widthAnchura de referencia de los marcos de la imagen de la bandera.
heightAltura de referencia de los marcos de la imagen de la bandera.
framesNúmero de fotogramas de la imagen.
versionsNúmero de versiones de las imágenes de la bandera.

Grupos de descripción de países

Para cada país listado en el grupo onu, la entrada de países tiene su propio grupo cuya etiqueta es el nombre del país. La tabla de abajo lista las entradas de estos grupos.

Tabla 2.3. Entradas de países

Nombre de la entradaSignificado
idEl entero que sirve como identificación única del país. Debe empezar en cero (0).
nameNombre mostrado del país.
<sprite>-pointCada tipo de imagen (bandera, infantería, etc.) del país se muestra en una determinada posición definida por esta entrada, consistente en dos enteros separados por una coma.
neighboursLista de las id de los vecinos del país actual.

Grupos de descripción de nacionalidades

Para cada nacionalidad listada en el grupo onu, la entrada de nacionalidades tiene su propio grupo, cuya etiqueta es el nombre de la nacionalidad. La tabla de abajo lista las entradas de estos grupos.

Tabla 2.4. Entradas de nacionalidades

Nombre de la entradaSignificado
nameNombre de la nacionalidad (por ejemplo, Japón).
leaderNombre que se le propondrá al jugador que elija su nacionalidad.
flagNombre de la imagen de la bandera del país en el archivo SVG de onu.

Grupos de descripción de los continentes

Para cada continente listado en el grupo onu, la entrada de continentes tiene su propio grupo, cuyo nombre es el nombre del continente. La tabla de abajo lista las entradas de estos grupos.

Tabla 2.5. Entradas de continentes

Nombre de la entradaSignificado
nameNombre del continente (por ejemplo, África).
idEl entero que sirve de identificación única para el continente.
bonusNúmero de ejércitos obtenidos al final de un turno para el jugador que posea todos los países del continente.
continent-countriesLista de las id de los países dentro del continente actual.

Grupos de descripción de objetivos

Para cada objetivo listado en el grupo onu, la entrada de objetivos tiene su propio grupo, cuya etiqueta es el nombre del objetivo. La tabla de abajo lista las entradas de estos grupos.

Tabla 2.6. Entradas de objetivos

Nombre de la entradaSignificado
typeTipo de objetivo. Puede ser continentes, países o un jugador.
nbArmiesByCountryEstablece el número mínimo de ejércitos que el jugador tendrá que poner en cada país.
nbCountriesEstablece el número de países que debe poseer el jugador.
nbCountriesFallbackPara un tipo de juego de objetivos por jugador, si un jugador mata a otro, aquel establece el número de países que el jugador tendrá que conquistar.
descUna descripción completa del objetivo con marcadores de posición apropiados (falta más documentación aquí).
continentsLista de ids de continentes que el jugador tendrá que conquistar.

La carpeta de imágenes

Esta carpeta contiene los botones específicos de KsirK y el archivo de almacén SVG que contiene el mapa y todas las imágenes.

El archivo pool.svg

Este archivo SVG contiene el mapa y todas las imágenes del juego. Cada elemento es nombrado de tal forma que el juego puede seleccionar y renderizar cada uno por separado.

En el tema por defecto, las imágenes son banderas, infantería, caballería y cañones. La infantería representa un ejército, cinco para la caballería y diez para los cañones. Los cañones también se utilizan para representar a ejércitos en lucha. Por eso es por lo que hay tres clases de imágenes para los cañones: normal estático o moviéndose, disparando y explotando.

Cada imagen es la concatenación de varias vistas del objeto y, para cada vista, sus marcos. Las vistas se organizan verticalmente y los marcos horizontalmente. Dónde cortar la imagen en marcos individuales se obtiene dividiendo la altura de la imagen por el número de vistas y la anchura por el número de marcos. Estos datos se encuentran en el archivo onu.desktop.

Ejemplo de una imagen: cañon.png

Para imágenes de ejércitos, hay tres vistas diferentes, de arriba abajo:

  • mirando a la derecha

  • mirando a la izquierda y

  • encarando

Para las banderas, solo hay una vista. Todos los fondos de imagen deberían hacerse transparentes.

Ejemplo de imagen de una bandera: italia.png

Tabla 2.7. Elementos del almacén

Nombre del elementoImagen de muestraSignificado
map
Mapa del mundo del tema. Los países pueden tener formas arbitrarias, pero deberían agruparse en continentes reconocibles a simple vista, por la localización o por el color.
italia
Bandera de la nación italiana. Hay una entrada así para cada nación.
infantry
Icono que representa un ejército.
cavalry
Icono que representa cinco ejércitos.
cannon
Icono que representa diez ejércitos.
disparando
Icono que representa ejércitos durante un combate.
explotando
Icono que representa ejércitos perdiendo un combate.
alaska
Forma del país de Alaska. Esto se utiliza para resaltar el país. Hay una forma así para cada país. El color no se usa. Por lo tanto, el color es libre.
dadosrojos
Dados rojos utilizados para mostrar los resultados de las batallas.
dadosazules
Dados azules utilizados para mostrar los resultados de las batallas.
marca1
Esta marca se añade a imágenes de lucha para mostrar el número de ejércitos que representan, aquí 1. También hay unos elementos de marca2 y marca3.

El archivo mascara-mapa.png

Este es n archivo png que también representa el mapa del mundo del tema, pero con un código de colores que permite identificar de manera única a cada país. Los países deben tener al menos las mismas formas que los correspondientes países sobre el archivo mapa.png, de forma que los usuarios puedan hacer click en cualquier parte de un país visible y seleccionen el bueno. Los países que son islas pequeñas como Indonesia en el mapa predeterminado pueden ser más grandes que el equivalente en el archivo mapa.png para facilitar la selección del país.

Ejemplo de máscara de mapa

El componente azul (en el modelo RGB) del color de un país identifica al país: el índice 0 es el país 0 en el archivo onu.xml, el índice 1 es el país 1, etc. El blanco (0xFFFFFF en RGB) identifica la ausencia del país (tierra de nadie).

Las imágenes de los botones

Los nombres de archivo están incluidos en el código, así que no deberían modificarse. La tabla de abajo muestra todos los botones que deben incluirse.

Tabla 2.8. Botones de la GUI

ImagenNombre de archivoSignificado
newNetGame.pngIntenta unirse a un juego de red.
recycling.pngDespués de que todos los jugadores han situado sus ejércitos, es posible modificar la distribución (lo que se llama «reciclaje»). Este botón pide hacer esa redistribución.
recyclingFinished.pngElige no redistribuir. Las ventanas de todos los clientes deben tener este botón pulsado para terminar la distribución.
nextPlayer.pngTermina el turno del jugador actual y cambia al siguiente, o pasa al siguiente turno si el jugador actual era el último.
attackOne.pngElige empezar un ataque con un ejército.
attackTwo.pngElige empezar un ataque con dos ejércitos.
attackThree.pngElige empezar un ataque con tres ejércitos.
defendOne.pngElige defender un país atacado con un ejército.
defendTwo.pngElige defender un país atacado con dos ejércitos.
moveArmies.pngElige empezar el movimiento de tropas entre dos países (última acción del turno).

Carpeta de sonidos

Esta carpeta contiene tres archivos de sonido:

  • roll.wav, que suena cuando las tropas se mueven

  • cannon.wav, que suena cuando se dispara, y

  • crash.wav, que suena cuando un cañón explota