В последнее время на работе стало совсем скучно заниматься ежедневной рутиной, а душа просила какого-то удовольствия. Делать что-то сложное с 3D желания не было, хотелось чего-то легкого, чтобы и подумать пришлось, и визуально было красиво. Нужна была идея. Вспомнил, что в моём детстве мне очень нравилась игра «Net Walk» (кстати, еле нашёл её в Google, название стёрлось из памяти).
Суть игры была проста и интересна одновременно. По сути это прародитель всех игр типа «Сантехник». Нужно было от сервера «протянуть» сеть, чтобы подключить все терминалы. Элементов в игре было всего 5 типов: сервер (с одним или несколькими выходами), терминал с одним входом, прямой провод, провод под углом 90° и тройник (один вход, два выхода). Помню, что в детстве даже с таким небольшим набором элементов игра на некоторых уровнях заставляла знатно подумать.
Поискал современные аналоги и как-то толком то ничего и не нашлось. Есть «Infinity Loop» под Android, добавили шестигранную сетку элементов вместо квадратной на некоторые уровни и магнитные катушки для передачи электричества от одной к другой без проводов. Но из всех уровней от силы 5% заставляют подумать, остальные проходятся очень легко. Причем только на 118 уровне я обнаружил, что можно использовать не все элементы, но игра за это никак не поощряет. Даже писал разработчику, на что он ответил что-то типа «ну да, так тоже можно».
Но повторять один в один – совсем не хотелось, хотелось новые механики, современный внешний вид и вообще своих «поэтесс». Итак, дорогой читатель, добро пожаловать в историю создания игры «Give Me the Light».
Идея найдена. Нужно определиться с инструментарием, на котором делать, под что делать, найти или создать графику, музыку, звуки, концепции, механики. Много всего. В январе 2020 года, пока новости про коронавирус еще были лишь китайскими процесс закипел. Делать решил под Windows, да не модно нынче игры под Windows делать, но офисных работников на «винде» много, а эта игра создаётся именно под них, чтобы можно было скоротать обеденное время тренируя мозг. Итак платформа определилась. Осталось дело за малым, проработать концепцию. Идея с лампочками в Infinity Loop мне понравилась больше, так как прокладка сетей нынче уже не так актуальна в эпоху Wi-Fi, 4G и т. д. Ок, игровая сетка пусть пока будет квадратная (шестигранники оставим для второй версии игры). И тут мне в голову приходит хорошая идея, а почему лампочка должна быть только одного цвета? Цветов же много, пусть будут разноцветные. И тут встала проблема. Количество спрайтов для игры резко возрастает пропорционально количеству будущих цветов. Рисовать их все вручную очень лениво, да и хотелось сделать масштабирование игрового поля, точнее задавать его размер для каждого уровня произвольно, следовательно, масштабировать спрайты на лету – терять качество.
Решено. Будем всю графику в игре отрисовывать налету, т.е. рендерить. Немного поигравшись с вариантами, 13.01.2020 родилась первая технологическая альфа-версия игры, с тремя уровнями, по сути, для теста графического движка на основе GDI+. В целом результат нравился. Сразу прошу прощения за качество некоторых рисунков (скриншотами их язык не поворачивается назвать), так как на начальной стадии делать полноценные скриншоты что-то было не когда. Тестеры присылали фотки экрана и мы обсуждали, что, где не так и что улучшить.
Не сложно заметить, что игра уже поддерживает прохождение коротким и полным путём, за что в будущем будет давать плюшки. Нужно было больше тестеров, попросил знакомых и друзей. Получил массу советов и пару замечаний. На слабых машинах, игра давала 12-15 FPS, что было крайне удручающе.
Использование движка GDI+, который, увы, никак не использует мощь видеокарты даёт такой плачевный результат, если у игрока процессору больше 5-7 лет. Начался долгий этап по поиску графических движков, которые могут либо быстро рисовать графические примитивы, либо использовать для этого видеокарту. Рассматривались: Andora2D – не умеет полноценно примитивить, только спрайты. QUADEngine – так и не покинул этап разработки и версии старше 0.9 найти не удалось, примитивить умеет, но далеко не всё необходимое (дуги, например). Graphics32 – оказался не сильно производительнее GDI+, при этом требуя больше кода, для рисования примитивов. DirectX – не умеет полноценно примитивить в 2D, OpenGL – тоже. И тут я натыкаюсь на AGG – AntiGrain Geometry. Это именно то, что я искал, быстрое рисование примитивов в 2D. После теста, решено было переходить на него. Как итог, те, у кого было 12-15 FPS, получили по итогу минимум прибавку в 10-15 FPS, что уже было вполне комфортным для данной игры.
Теперь надо было решить проблему с созданием уровней. Формат файлов с описанием уровней я придумал, но набирать их вручную в бинарном виде в HEX-редакторе – то ещё удовольствие, а уж модифицировать их, так вообще ужас. Пришлось отвлечься от игры и написать редактор уровней.
Жить можно, теперь хотя бы можно визуально до сборки игры, примерно увидеть как будет выглядеть уровень. Но продержался этот редактор только во время проектирования первой десятки уровней, так как сложность уровней росла, а увидеть как будет жить уровень, поискать короткий путь и т.д. в редакторе, сделанном на скорую руку, оказалось просто невозможно. И снова разработка игры встала на паузу, тестерам была отдана по сути вторая сборка с обновлённой графикой и 10-15 уровнями на тесты, и начался этап разработки полноценного редактора. Тот же графический движок, что и сама игра, плюс много кода для бизнес-логики и вот он редактор моей мечты.
Теперь после создания редактора работа над игрой вновь закипела полным ходом.
Тестеры стали просить добавить систему ачивок, поначалу они давались за различные очевидные вещи: по типу повернуть элементы 1000 раз. Но потом мой ум стал придумывать более необычные вознаграждения и как итог теперь их 87 штук в 6 категориях. Большинство из них даются просто за то, что вы играете в игру, используя и находя новые механики, но есть и заковыристые, и даже за нахождение пасхалки.
Также для возрастных тестеров понадобилось приделать некий учебник, который бы научил основным механикам игры. А ещё отдельные тестеры просили, чтобы игра их сама обучила в процессе. Так учебник стал интерактивным и на первых уровнях обучает игрока.
С механикой и графикой вроде разобрались, пора задуматься о звуках и музыке.
Музыка подбиралась долго, требовалась медитативная приятная мелодия и лучше не одна, чтобы и фоном красиво звучала и к игре подходила. В итоге 90% музыки в игре от известного среди Free-музыки исполнителя Kevin MacLeod. Единственное, что он просит на своём сайте взамен – это указать его как автора музыки. Так в игре появились плашки с названиями треков. Но мало найти песни, надо выбрать звуковой движок и формат файлов, чтобы и звучало хорошо и размер не был гигантским. Рассматривались по сути две кандидатуры Fmod и BASS. Второй выиграл, бесплатен для условно-бесплатного ПО и имеет удобное и уже ранее знакомое API. ПО формату музыки остановился на OGG – этот формат не просит никаких лицензионных отчислений за своё использование, сопоставим по размеру файла с MP3 и имеет сопоставимое качество.
Ещё надо было подобрать звуки. Облазил десятки Free-Sound сайтов в поисках подходящих, скачал сотни подборок и по крупицам находил те звуки для разных событий, которые на мой вкус вписывались в медитативную атмосферу игры.
На дворе настал конец марта 2020. Карантин. Так как ранее разработка игры велась исключительно 20-30 минут в день во время обеда и то не каждый день, то теперь времени стало много, чтобы поработать над оптимизацией игры и компактностью одновременно. «Поиграть с цветами», как говорят дизайнеры. Первая проблема, которую хотелось решить: ресурсы игры (музыка, звуки, уровни, текстовые данные и немного PNG-шек для иконок ачивок) надо бы разместить прямо в EXE-файле, так и практичнее (пользователь не сможет что-то случайно удалить), и красивее. Забегая вперёд скажу, что удалось убрать 99,9% ресурсов, только BASS.DLL осталась торчать «наружу». Для этого потребовалось написать приличную гору скриптов для сборки и упаковки ресурсов и разработать структуру директорий для хранения исходников ресурсов.
Вторая проблема: я хотел прикрутить к игре мультиязычность. Чтобы расползаясь по миру, игроки могли выбрать язык, который им ближе. Для этого требовалось перевести на разные языки все текстовые элементы игры. Что-то переводил сам, что-то Google-переводчик. Языки выбирал не просто так. Русский и английский, как бы без вариантов, а дальше опирался на статью в Википедии про распространённость языков. В итоге имеем 11 языков. Кстати, иконки флагов тоже рисуются программно, это не картинки. Язык можно выбрать при первом запуске игры или затем изменить в настройках.
И за апрель, параллельно с ремонтом в квартире все эти задачи были решены.
После прохождения 100 уровней, тестеры хотели чего-то большего, чем просто финальные титры. И немного подумав, появился второй режим игры, который доступен после прохождения всех уровней. Я назвал его «Темнота» и от обычного он отличается тем, что целиком игровое поле не видно. Видны только подключенные элементы. В данном режиме многие уровни, на которых требовалось думать, стали еще сложнее, что значительно повысило интерес у игроков.
За прохождение уровней помимо ачивок, игрок зарабатывает звёзды. Одну, две или три. Расчёт ведётся на основе совершённых на уровне вращений элементов или затраченного времени. Причем для темного режима игры звёзды свои.
В процессе разработки у меня случались доработки и редактора (новые элементы), и самой игры. В итоге в самой игре сейчас насчитывается:
• 7 цветов (больше уже перебор, меньше – не так интересно), причём цвета могут комбинироваться или разделяться;
• 31 игровой элемент (12 уникальных);
• 100 уровней (на многих придётся попотеть);
• 87 ачивок;
• куча отсылок;
• одна пасхалка;
• 11 языков интерфейса;
• 2 режима игры;
• 600 звёзд суммарно;
• полноценный учебник;
• встроенный в игровой процесс «Онлайн» учебник;
• настройка качества графики (помогает совсем слабым ПК) и включение/выключение раздельно звука и музыки.
Разработка игры завершилась примерно в конце октября 2020 года, заняв суммарно порядка 50 часов. После чего я разместил её на двух игровых площадках, где она с тех пор без какой-либо рекламы тихонько набирает обороты. Почему я написал эту статью? Просто хотелось поделиться с Вами мыслью, что не бойтесь что-то делать, если Вам это нравится и приносит удовольствие. Если это так, то у Вас всё получится. Саму статью я приурочил к выходу небольшого обновления игры, где произошли минорные изменения, в том числе теперь игру можно развернуть на весь экран и погрузится в мир, где одинокие лампы хотят светиться.
p.s. Специально в статье стараюсь не упоминать на каком языке разработана игра. Во-первых, это не так важно, так как язык – это всего лишь инструмент, а во-вторых, стало интересно, сможет ли кто-то из читателей только по статье или по игре понять на чём она все-таки сделана. И помните HEX-редактор для просмотра EXE-шника, чтобы узнать язык – читерство, равно как и поиск сохранёнки в реестре, чтобы накрутить себе счётчиков (удачи *злобный смайлик*) ;)
p.s.s. Если вдруг кто желает помочь с исправлением/улучшением перевода на том или ином языке, дайте знать.
P.s.s.s. Немного техники:
• 900 Кбайт исходных кодов в 16 файлах;
• 329 файлов с ресурсами в 25 директориях на 132 Мб (95% - музыка и звуки).
• 121 Мб занимает игра после установки на диске (не разрастается) + сохранёнка на 1-2 Кб в реестре.
Страница игры на itch.io:
https://zgamesstudio.itch.io/give-me-the-light