Создание Текстур-паков в Geometry Dash V2
По вопросам можно (нужно) писать мне (@lord_nodus).
Полностью актуально до выхода 2.2, скорее всего и в 2.2, но тут Роб его знает
Данный способ будет работать и на телефонах.
Кроме текстур, я покажу, как менять разметку, музыку и анимации.
Начало
Для редактирования потребуются программы:
Игра Geometry Dash или папка с её ресурсами
Растровый фоторедактор с прозрачностью и желательно со слоями (Photoshop, Paint.net (это не сайт, а название программы) и тд)
Для более тонкой настройки текстур, редактор текста как Nodepad++, Sublime Text, Plist Editor, даже блокнот более новых версий или другой ± адекватный (Иметь это не обязательно, для создания простых текстур-паков)
1) Открываем папку с игрой. Если у вас пиратка, ищем куда установили. Для тех, у кого игра в Steam и папка для установи стандартная можно использовать путь «C:\Program Files (x86)\Steam\steamapps\common\Geometry Dash». Если папка другая можно сделать как на скринах →



2) Делаем бекап, копируем папку «Resources» и сохраняем в другие место. Это на случай, если захотите вернуть стандартные текстуры, сохраните файл с фоном или ещё что-то.
3) Открываем папку «Resources» и… а тут уже потребуется немного знаний о том, что за хаос в ней содержится.
На файл !test.py и .dat внимание не обращаем, это моё и его у вас не будет
В папке содержится: музыка, текстуры, файлы разметки и анимации.
Самое простое, это файлы музыки, их можно просто заменить на другой и в игре будет проигрываться другая музыка.
Дополнительно о музыке, в этой папке хранится только музыка из официальных уровней ГД, в том числе из уровней версий Meltdown, World и секретного уровня The Chellenge. Музыка из пользовательских уровней хранится по пути «C:\Users\{user}\AppData\Local\GeometryDash». Так же в этой папке хранятся файлы созданных уровней и аккаунта, так что удалять эту папку, чтобы освободить место, не лучшая идея.
Дальше разберём файлы текстур (.png) и разметки (.plist). Часто можно заметить, что файлы .png и .plist имеют одинаковые названия и 3 версии с приписками -hd, -uhd и без него.
Тут всё просто и логично. Файл с определённой припиской используется при включении определённого уровня графики в игре:
Без — Low (низкая графика)
hd — Medium (средняя графика)
uhd — High (Высокая графика)
При выборе в игре нужной настройки, будут использоваться соответственные текстуры. Файлы .plist хранят разметку. Об их полном функционале будет подробно рассказано позже, сейчас затронем ток небольшой функционал.
В игре почти все текстуры собраны в большие файлы. Открываем на пример файл «CCControlColourPickerSpriteSheet-uhd.png»
Сейчас будет сложно, но если понять, дальше будет очень просто, особенно на этапе более тонкой настройки текстур иконок.
Видим, что там лежат текстура палитры для редактора, но вот проблема, как игра понимает где в файле какая текстура? Для этого существует файл с форматом .plist
С помощью любого текстового редактора его можно открыть. Ищем файл с таким же названием (с учётом приписок -hd…) но с форматом .plist и открываем.
Если мы его откроем чаще всего увидим это →



Может быть такое, что будет отображаться куча перемешанных строк и табуляций, чаще всего случается, если открыть файл в старых версиях блокнота или других туповатых программах. Если вы редактируете чей-то текстур-пак и в разных программах так отображается, есть вероятность, что тот кто его делал — рукожоп.
В данном файле первые 5 строк нас вообще не интересуют, смотрим сразу на 7 строчку, там написано «<key>colourPicker.png</key>» это название текстуры, дальше идут её настройки, которые мы рассмотрим дальше, сейчас нам только может пригодится строки
<key>spriteSize</key>
<string>{52,52}</string>
<key>textureRect</key>
<string>{{1,1591},{52,52}}</string>
{1,1591} это координаты (x,y) текстуры в .png файле, считаются они от верхнего левого угла, указывая на левый верхний угол текстуры. {52,52} это размер текстуры; можно заметить, что эта запись повторяется 2 раза, в {{1,1591},{52,52}} и {52,52} отдельно после <key>spriteSize</key>. То что записано отдельно, есть настоящий размер текстуры, а то что записано в двух фигурных скобках бесполезное значение, которое можно менять, ничего не изменится, единственно, полностью удалять его нельзя.
Зная это открываем файл с текстурой и ищем точку в координатах 1, 1591 и размером 52 на 52, в редакторах обычно отображаются координаты мышки и размер выделения, так что ничего сложного нету.
И теперь в этой зоне мы можем спокойно редактировать текстуру, не задевая другие.
Для примера, перерисую её в квадрат.
Сохраняем, запускаем игру
Запускаем редактор и видим, что ничего не изменилось. Но тут всё просто. Мы редактировали файл с припиской -uhd, а сейчас игра запущена на средней графике.
Для этого заходим в настройки, открываем вкладку «Graphics»
Выбираем соответствующий пункт и нажимаем «Apply», игра сделает быстрый перезапуск и новые текстуры применятся.
Заходим в редактор и всё работает.
Это был небольшой пример, как редактировать простые текстуры, сейчас перейдём уже к иконкам, там полученные знания очень пригодятся.
4) Файлы иконок и другие часто используемые имеют названия:
«FireSheet_01.png» — анимированные блоки и часть блоков из 2.1
«game_bg_01_001», «game_bg_02_001» и тд — задний фон в уровнях
«groundSquare_01_001» и тд — земля
«GJ_GameSheet» — большая часть блоков игры
«GJ_GameSheet02» — все иконки игры, порталы, и триггеры. Так же имеет обводку (Glow эффект) для пауков и роботов.
«GJ_GameSheet03» — элементы интерфейса, кнопки, ключи, шарты и тд
«GJ_GameSheet04» — то что не поместилось в «GJ_GameSheet03» + эффекты порталов и орбов
«GJ_GameSheetGlow» — Свечение (Glow эффект) для иконок, кроме паука и робота, часть эффектов для орбов и текстуры для блоков меняющий прозрачность при приближении
«PlayerExplosion» — эффекты взрыва игрока
«gjFont…» — шрифты для надписей и количества попыток в уровне
«streak_01_001» и тд — след за игроком (о них расскажу потом)
Другие уже используются редко, чтобы их найти достаточно 2 минуты полистать папку с текстурами.
На всякий случай, если кто-то не знает, что такое Glow эффект
Даёт блокам лёгкое свечение. (отображается только в игре, в редакторе подсветки нету)
На скрине показано, как выключить эту настройку, по умолчанию она включена.
У иконок игрока она тоже есть, активируется чекбоксом «Glow», сам чекбокс выдаётся за прохождение 15 меппаков и на зарегистрированных аккаунтах (вроде).
Так же этот эффект появляется при выборе чёрного цвета, как основного.
Редактируем иконки и блоки
Тут я расскажу только про иконки, так как блоки редактируются схоже и чуть проще, скажу только пару слов.
Буду показывать как поменять текстуру у иконки. С начало думаем, какую иконку хотим отредактировать, а если хотим сделать полностью свою, заменив другую, вспоминаем, нужен ли нам 3 слой на неё.
Если не понятно, что за слои, сейчас буду показывать.
Иконки имеют минимум 3 слоя, слой который красится в 1 цвет, слой красящийся во 2 цвет и Glow эффект (о нём написано чуть выше). Так же часть иконок имеют 4 слой, он не меняет цвет и используется чаще всего для высветления, пример →
Выбрано 2 чёрных цвета, кроме белой обводки, есть глаза и зубы белого цвета, и язык серого. В игре этот слой не красится. В текстур-паке можно его окрасить любым цветом и использовать для дополнительных цветных деталей
Но, 4 слой есть только у некоторых иконок и добавить его к той у который нету нельзя.
Для начала поймём, как создаётся иконка из разных текстур, открываем файл с текстурами и разметку для него (учитывая нужный уровень графики).
Я обычно использую рисовалку Paint.net, так как она страшно простая, и Notepad++ для редактирования .plist, так как в нём можно отдельные куски разметки сворачивать →



Так же сворачивать умеет Plist Editor, но на момент написания у меня он залагал и не открывается D:
Использовать можно любые схожие программы, главное чтобы был нужный функционал.
Теперь мы знаем, как выбрать нужную иконку для редактирования, но вот вопрос, мы ленивые и не хотим по всему файлу искать нужную иконку.
Для этого открываем .plist файл, чтобы найти нужную иконку по координатам, как было показано выше, но тут появляется 2-ой вопрос, как понять какая иконка нам нужна из списка и что означают цифры в названиях.
Тут тоже не сложно, открываем Geometry Dash и считаем номер иконки в списке
В строке 12 иконок, наша находится в конце 2 строки, подключаем изи математику — 12 (строка) * 2-2(иконка с конца) = 22 это есть номер нашей иконки.
Я точно не помню, но вроде есть иконки куба, которые в мобильной версии не отображаются до получения, тогда мы узнаем только примерный номер
Дальше открываем .plist файл, нажимаем поиск (ctrl + f), и вбиваем «ship_22» и нас перекидывает на разметку нужной иконки. Как это работе?
В файлах разметки, иконки имеют название
{название режима}_{номер}_{слой}_{не влияющие цифры}
Названия для режимов такие:
НЛО — bird
Куб — player
Шар — player_ball
Робот — robot
Кораблик — ship
Паук — spider
Волна — dart
Я записал название режима_номер и программа нашла нужное.
Если, на пример, захочу найти 41 волну, нужно будет искать «dart_41»
Дальше видим, что есть 2 текстуры: «ship_22_001.png» и «ship_22_2_001.png», теперь вопросы: Что это? Где 3, если кораблик это 2 цветных и Glow? Можно ли добавить ещё слой «ship_22_3_001.png»?
1) «ship_22_001.png» в игре эта текстурка окрашивается в первый цвет, «ship_22_2_001.png» окрашивается во 2 цвет.
2) Так как это кораблик, Glow слой лежит файле «GJ_GameSheetGlow».
3) Если добавить новый слой игра не запустится.
Если бы был ещё 1 слой, но бы назывался «ship_22 _extra_001.png», но эта иконка имеет 2 слоя и Glow.
Теперь смотрим на то, что написано после название текстуры
Нечётные строки имеют название свойства текстуры, чётные значение свойства.
<key>aliases</key>
<key>spriteOffset</key>
<key>spriteSize</key>
<key>spriteSourceSize</key>
<key>textureRect</key>
<key>textureRotated</key>
aliases — Не заметил чтобы на что-то влияло, имеет всегда значение <array/>, если удалить ничего не изменится.
spriteOffset — Смещение текстуры в пикселях по x,y, если удалить смещение будет 0, 0
У левой текстуры смещение 0, 7 у правой 20, 7
spriteSize - Размер иконки при вырезании. Выше я показывал, как по разметке происходит вытаскивание текстуры из общего файла, это отвечает за размер. При изменении размера, меняется положение точки смещения.
Размер с 176, 94 увеличен до 200, 110
Если удалить, текстурка будет прозрачной.
spriteSourceSize — не понять, что это делает, иногда из-за него может попадать текстура. Можно удалить, будет значение 0,0 (при нём текстура не пропадает)
textureRect — значение в первой скобочки, есть координаты верхнего левого угла текстурки, значение во второй скобочке не влияют, можно менять, но удалять нельзя.
Значение 1, 335 изменено на 1, 300
textureRotated — имеет значения <true/> или <false/>, если удалить, значение будет <false/>. Игра при считывании текстуры, меняет значение spriteSize местами, а в игре поворачивает текстуру на 90 градусов против часовой стрелки.
Значение <false/> изменили на <true/>
Нужно для более компактного умещения текстур в файле
Зная разметку, можно начать редактировать текстуры на максималках
Для начала открывает рисовалку, создаём 2 слой и заливаем его тёмно-синем или тёмно-зелёным цветом, чёрным или серым не желательно, так как фон будет сливаться с некоторыми текстурами.
Дальше ищем нужную нам иконку, выделяем и редактируем. Для удобства можно собрать все слои и поместить в новый файл послойно.
После редактирования или создания новой, разделяем её на слои, которые будут окрашиваться и заменяем их на новые.
Может произойти, так что новая иконка будет больше старой, вот пример
Хоту сделать иконку, как на моей старой аватарке →
Но есть проблема, жёлтая полоска на крыле не помещается в слой с глазом, так как глаз мелкий и рядом с ним нету места на полосу.
Для этого нужно менять координаты и размер текстурки. В файле ищем любое свободное место, на пример тут →
Прикидываем примерный размер и заносим координаты с размером в разметку (размер можно не экономить, у нас его куча).
Для удобства, поставил размер, как у первого слоя иконки.
Дальше сохраняем, передвигаем остатки старой текстурки или рисуем новую на новом месте.
Я перенёс модельку и в нужных местах нарисовал 2 слой.
И так норм, излишки 2 слоя не будут видны.
Так как я не менял основную форум корабля, Glow и смещение первого слоя можно не менять, но 2 придётся настроить.
Сохраняю всё и запускаю игру.
Нужно пододвинуть 2 слой вверх, с начало устанавливаю значение 5 и смотрю.
Сохраняю и запускаю игру.
Почти идеально, можно передвинуть на 1 и всё. Кстати, в spriteOffset можно указать дробное значение. Я поставлю {0,6.5}
Отлично, меняю прозрачность обратно и тестирую в игре.
Вот и всё, можно чуть подравнять глаз и сделать тоньше чёрные линии но для понимания как это делать я думаю достаточно.
С обычными иконками мы завершили.
Дополнение к текстурам
Блоки делаются так же, но для их поиска придётся постараться, так как существует блоки имеющие клона, на пример пили из 1.9, есть версия пилы у которой можно менять все цвета, а есть та где можно менять только цвет внутренности, в редакторе такие блоки не отображаются во вкладках, но найти их можно в старых уровнях, по этому при изменении текстуры, нужно точно знать, что меняется нужная. Так же некоторые пилы в редакторе хранятся четвертями →
У иконок с 4 слоями, дополнительный слой называется extra, а не 03, как было бы логично.
Блоки имеют наикривейшие кастомные названия, разные слои блока не всегда будут иметь приписку 01, 02, 02 и сами блоки не упорядочены как в редакторе.
Эффекты смерти и трейлы
Тут всё просто, есть файл с кадрами эффекта смерти, а в .plist написаны настройки кадров.
Всё более чем знакомо.
Трейлы хранятся в нерастянутом виде.
У них общий .plist файл, у него свои настройки, конкретно ничего по ним не скажу, так как не редактировал, но смысл почти все настроек можно понять по названию (переводчик в помощь).
Так же, почти все эффекты: частицы в уровнях, в конце уровня, при ускорении и тд, почти все анимации и даже ачивки редактируются.
Анимации бега роботов и пауков
Самое весёлок как по мне, для тех кто прочитал до конца.
Роб недавно показал, что в 2.2 робот и паук будет менять анимацию с ускорением. Весь прикол в том, что такое можно частично воссоздать сейчас…
Конкретно только переделаю паука, так как робот это полный пипец. 16 кадров анимации бега, кадры падения и тд, переделывая в ручную для каждой части тела можно умереть, как это делать программой и хз, пока что планирую сделать полноценную программу для редактирования анимации паука, но для робота нет.
Нужный мне файл анимаций называется Spider_AnimDesc.plist он общий для всех уровней графики. Есть ещё Spider_AnimDesc2.plist, но я не знаю, что он делает.
С роботом всё проще в разы, так как анимаций меньше.
По сравнению с роботом это мало, тем более анимацию которую я хочу сделать, можно сделать программой.
Первый кадр idle — то как выглядит паук в меню, в статистике аккаунта и тд
fall — падение и полёт
Полёт на этих штуках тоже fall
jump — прыжок (а сферах тоже)
run и walk — анимация движения, если скорость -1 или 1 используется walk, если выше используется run
Вот список всех деталей паука, каждая деталь в файле анимации обозначена тегом
Тег 0 — задняя правая нога (если на него смотреть)
Тег 1 — передняя правая нога
Тег 2 — дополнительная деталь задней левой ноги (есть не у всех пауков)
Тег 3 — тело
Тег 4— задняя левая нога
Тег 5 — передняя левая нога
Кадры выглядят так →
Это стандартные значение, их можно поменять, меняя номер тега или название текстуры. Кстати, менял названия текстур на те, что используются в кубе, игра не запускается, для создание моделек, можно использовать только текстуры паука
Каждый кадр имеет положение каждой детали, её позиция, размер, поворот, отражение и слой.
Я сделаю не сильно сложную анимацию.
С начала быстро сделаю текстуры, показывать как не буду, всё так же как на кубе, но деталей больше.
Так как не хотелось морочится со слоями, можно в разметке изменить название с «spriteSize» на «spriteSize1» у кого-то слоя, и его не будет отображаться и его не нужно будет редактировать.
На скрине полностью прозрачная моделька, сделал её, чтобы некоторые детали не мешались, так как моя моделька будет из 3 деталей.
Дальше настраиваем анимацию.
Тут всё индивидуально, делал так:
Меняю текстуры (учитываем что текстура у 3 ног будет одинаковая, если вы в верхней части файла анимации не измените текстуры конечностей). Если текстура будет вращаться, то смешение лучше делать 0, так как точка вращения будет 0,0. Передвинуть её можно будет через позицию в анимации.
В начале можно было заметить, что у меня в папке есть файл !test.py, это программа на питоне, зачем страдать, пытаясь поменять позицию у каждого спрайта в анимации, если можно просто сделать программу. Убеждаюсь, что свойство position есть только у текстур, чтобы не поменять ничего лишнего, и пишу программу.
Все анимации полностью сброшены.
Это же программой, меняя некоторые значения поменял анимации и другие.
Теперь паук превратился в машинку, но колёса не крутятся, и огонь сзади не мигает, сейчас буду делать.
Спустя 2 часа я всё настроил, делать огонь уже лень.
Теперь это машинка, у которой крутятся колёса. Два колеса и дополнительная деталь ноги сделал невидимыми, чтобы не мешали, так что машину можно ещё сильнее заанимировать, на пример, наклон человека в кабине, огонь из трубы и ещё что-то. Так же она окрашивается при изменении цвета →
Не хватает только переделать Glow, но мне уже лень
На этом всё.
Результат можно скачать тут → https://yadi.sk/d/MKVMw7ZCdpyI5g
Работает только на высокой графике, анимации паука меняются для всех. Перед установкой, сделайте бекап!
Кол-во правок — 1
