Розділ 2. Створення шкірки KsirK

Зовнішній вигляд KsirK можна повністю змінити. Для користувачів, які мають таланти у малюванні, створення нової шкірки буде дуже простим: скопіюйте існуючу шкірку і змініть графіку у ній, оновіть дані у файлі налаштувань .desktop (цю операцію виконає програма «Редактор шкірок KsirK»). Останнім кроком буде зміна файла опису даних, які слід встановлювати для шкірки.

Всі приклади (текст і зображення) взято з типової шкірки KsirK.

Структура тек і файлів

  • Data/ : дані, що використовуються програмою для обробки зображень шкірки.

    • CMakeLists.txt : Описує файли, які слід встановити.

    • onu.desktop : головний файл опису шкірки. Його опис наведено нижче.

  • Images/ : зображення шкірки (карта, спрайти тощо)

    • CMakeLists.txt : Описує файли, які слід встановити.

    • pool.svg : карта і всі спрайти, які використовуються у цій шкірці.

    • map-mask.png : зображення, за яким програма визначає, над якою з країн на карті зараз знаходиться вказівник миші (див. нижче).

    • *.png : всі інші зображення є зображеннями кнопок.

  • CMakeLists.txt : Описує файли, які слід встановити.

  • Sounds/ : звукові файли шкірки.

Тека Data

У цій теці зберігається лише один файл, world.desktop. У цьому файлі міститься опис вмісту шкірки. Цей файл використовується для опису компонування світу і способу його показу. Вам не потрібно заповнювати його вручну: це зробить за вас програма «Редактор шкірок KsirK». Але, з міркувань повноти викладу, ми опишемо його структуру.

Група onu містить декілька записів країн, декілька записів націй і, нарешті, декілька записів континентів. Далі, різноманітні групи містять опис різних спрайтів, опис різних країн, континентів, націй і типів мети.

У наступних розділах наведено інформацію про вміст кожної з груп.

Група onu

Таблиця 2.1. Записи групи onu

Назва записуПризначення
widthШирина карти шкірки.
heightВисота карти шкірки.
skinpathШлях до шкірки, відносно шляху до даних програми (наприклад, skins/default)
nb-countriesКількість країн (42 у типовій шкірці). Нижче має бути наведено таку саму кількість записів груп країн.
nb-nationalitiesКількість націй (6 у типовій шкірці). Нижче має бути наведено таку саму кількість записів груп націй.
nb-continentsКількість континентів (6 у типовій шкірці). Нижче має бути наведено таку саму кількість записів груп континентів.
poolШлях і назва файла набору (pool), відносно шляху до шкірки (наприклад, Images/pool.svg).
map-maskШлях і назва файла маски карти, відносно шляху до шкірки (наприклад, Images/map-mask.png).
format-versionВерсія формату файла шкірки (2.0).
nameПоказана назва шкірки.
descРозгорнутий опис шкірки.
fighters-flag-y-diffРізниця висот між спрайтами прапорів і гармат.
width-between-flag-and-fighterКількість пікселів між найлівішим пікселем прапора і найправішим пікселем простої гармати (без пострілу і вибуху).

Групи описів спрайтів

Кожен з типів спрайтів (прапор, піхота, кіннота, гармата, гармата, що стріляє, і гармата, що вибухає) визначається групою. Лише деякі з спрайтів мають запис ширини. Цей запис використовується для відносного позиціонування під час анімації: гармати, постріл і вибух не повинні «рухати» об’єкт навколо прапору країни під час битви.

Таблиця 2.2. Записи групи опису спрайта

Назва записуПризначення
widthЕталонна ширина кадрів спрайта прапора.
heightЕталонна висота кадрів спрайта прапора.
framesКількість кадрів у спрайті.
versionsКількість версій спрайтів прапора.

Групи опису країн

Кожна з країн має свою групу onu, запис країни має власну групу з міткою у вигляді назви країни. У наведеній нижче таблиці показано записи цих груп.

Таблиця 2.3. Записи країн

Назва записуПризначення
idЦілий унікальний ідентифікатор країни, який має починатися з нуля (0).
nameНазва країни, яку буде показано гравцеві.
<sprite>-pointКожен з типів спрайтів (прапор, піхота тощо) на зображенні країни буде показано у певній позиції, яка визначається цим записом у вигляді двох цілих чисел, відокремлених комою
neighboursСписок ідентифікаторів країн, сусідніх з поточною країною.

Групи опису націй

Кожна з націй має свою групу onu, запис нації має власну групу з міткою у вигляді назви нації. У наведеній нижче таблиці показано записи цих груп.

Таблиця 2.4. Записи націй

Назва записуПризначення
nameНазва нації (наприклад, Japan)
leaderІм’я, яке буде запропоновано гравцеві, який обрав цю націю.
flagНазва елемента спрайта прапора країни у файлі SVG onu.

Групи опису континентів

Кожен з континентів має свою групу onu, запис континенту має власну групу з міткою у вигляді назви континенту. У наведеній нижче таблиці показано записи цих груп.

Таблиця 2.5. Записи континентів

Назва записуПризначення
nameНазва континенту (наприклад, Africa).
idУнікальне ціле число для ідентифікації континенту.
bonusКількість армій, які отримуватиме наприкінці ходу гравець, який володіє всіма країнами на континенті.
continent-countriesСписок ідентифікаторів країн на поточному континенті.

Групи опису мети

Кожну мету має бути включено до списку групи onu, запис мети має власну групу, чиєю міткою є назва метри. У наведеній нижче таблиці показано список записів цих груп.

Таблиця 2.6. Записи мети

Назва записуПризначення
typeТип мети. Може мати значення континенту, країн або гравця.
nbArmiesByCountryВстановлює мінімальну кількість армій, які гравець може залишати у кожній з країн.
nbCountriesВстановлює кількість країн, якими має володіти гравець.
nbCountriesFallbackПризначено для типу мети гравця, якщо відповідного гравця буде вбито іншим гравцем, цим параметром встановлюється кількість країн, які має навзамін завоювати гравець.
descПовний текстовий опис мети з відповідними заповнювачами (потрібна додаткова документація).
continentsСписок ідентифікаторів континентів, які гравець має підкорити.

Тека Images

У цій теці містяться кнопки, специфічні для KsirK і файл SVG з назвою pool (набір), у якому міститься карта і всі спрайти.

Файл pool.svg

У цьому файлі SVG містяться всі спрайти гри. Кожен з його елементів має таку назву, щоб програма могла визначити і показати його окремо від інших.

У типовій шкірці спрайтами є прапори, піхота, кіннота і гармата. Піхота відповідає одній армії, кіннота — п’яти, а гармата — десяти. Гармати також використовуються для показу битв. Ось чому у типовій шкірці три види спрайтів гармат: звичайна нерухома гармата або гармата, що рухається, гармата, що стріляє, гармата, що вибухає.

Кожне з зображень спрайта складається з об’єднання різних виглядів об’єкта, а кожен з виглядів, — з кадрів. Вигляди має бути впорядковано вертикально, а кадри — горизонтально. Місце, де зображення буде розрізано визначається за висотою зображення і кількістю виглядів, а ширина за кількістю кадрів. Всі ці дані знаходяться у файлі onu.desktop.

Приклад зображення спрайта: cannon.png

Спрайти армій мають три різних вигляди, згори вниз:

  • дивиться праворуч

  • дивиться ліворуч і

  • в обличчя

Прапори мають лише один вигляд. Всі елементи тла спрайтів слід зробити прозорими.

Приклад спрайта зображення прапора: italy.png

Таблиця 2.7. Елементи набору

Назва елементаЗразок зображенняПризначення
map
Карта шкірки світу. Країни можуть мати довільну форму, але їх має бути зібрано у придатні для розпізнавання оком континенти, лише за розташуванням або лише за кольором.
italy
Прапор нації Італії. Кожна з націй повинна мати такий запис.
infantry
Піктограма для однієї армії.
cavalry
Піктограма для п’яти армій.
cannon
Піктограма для десяти армій.
firing
Піктограма для показу армій під час битви.
exploding
Піктограма для показу армій, які програли битву.
alaska
Форма країни Аляска. Її буде використано для підсвічування цієї країни. У кожної з країн лише одна така форма. Її колір не використовується, отже його можна обрати будь-яким.
reddices
Для показу результатів битви буде використано червоні кістки.
bluedices
Для показу результатів битви буде використано сині кістки.
mark1
Цю позначку буде додано до спрайтів учасників битви, вона позначатиме кількість армій, які беруть участь у битві, у нашому прикладі 1. Існують також елементи mark2 і mark3.

Файл map-mask.png

Цей файл png також відповідає карті шкірки світу, але з закодованими кольорами, за допомогою яких можна точно визначити кожну з країн. Країни повинні мати принаймні такі самі форми, які мають відповідні країни у файлі map.png так, щоб користувач, який навів вказівник на будь-яку частину певної країни і клацнув лівою кнопкою миші, міг обрати потрібну йому країну. Країни, які складаються з невеличких островів, на зразок Індонезії, можна збільшити порівняно з відповідниками з файла map.png, щоб полегшити вибір відповідної країни.

Зразок маски карти

Компонент синього кольору (у моделі RGB) у кольорі країни призначено для ідентифікації країни: індексом 0 позначається країна 0 у файлі onu.xml, індексом 1 — країна 1 тощо. Білим кольором (0xFFFFFF у RGB) позначається відсутність країни (моря або, чому б ні, незаселені території).

Зображення кнопок

Назви файлів включено до коду програми, отже їх не можна змінювати. У наведеній нижче таблиці показано всі кнопки, які слід намалювати для теми.

Таблиця 2.8. Кнопки графічного інтерфейсу користувача

ЗображенняНазва файлаПризначення
newNetGame.pngСпроба приєднання до гри мережею.
recycling.pngПісля того, які всі гравці розташують свої армії, можна розпочинати зміну дислокацій (а саме, перестановку армій). Ця кнопка запрошує до такої передислокації.
recyclingFinished.pngВибір відмови від перерозподілу. У всіх клієнтських вікнах має бути ця кнопка, яку слід буде натиснути для того, щоб повністю завершити розподіл.
nextPlayer.pngЗавершення ходу поточного гравця і перехід ходу до наступного гравця, або перехід до наступного ходу, якщо гравець ходив останнім.
attackOne.pngВибір початку атаки силами однієї армії.
attackTwo.pngВибір початку атаки силами двох армій.
attackThree.pngВибір початку атаки силами трьох армій.
defendOne.pngВибір захисту атакованої країни силами однієї армії.
defendTwo.pngВибір захисту атакованої країни силами двох армій.
moveArmies.pngВибір початку пересування армій між двома країнами (остання дія протягом ходу).

Тека Sounds

У цій теці містяться три звукових файла:

  • roll.wav відтворюється під час пересування армій

  • cannon.wav відтворюється під час ведення вогню і

  • crash.wav відтворюється під час вибуху гармати