Dune Knight

ВНИМАНИЕ!

Хотфикс первого дня после завершения джема. В джем версии игры не срабатывал триггер завершения уровня. Не стал ее трогать, она все еще запускается по зеленой кнопке справа. Исправленную версию, можно посмотреть тут.

К комментариям

Друзья, всем привет!

Меня зовут Александр Кондырев. Я работаю 5 дней в неделю, а дома после работы меня ждут жена и полугодовалый малыш. В свободное время я увлекаюсь разработкой игр и сейчас решил участвовать в GamesJam Defold. В этом конкурсе мне показалось интересным требование использовать неизвестный для меня конструктор Defold. Любопытно, что из этого получится. Все мои предыдущие работы и участие в конкурсах имели одну отличительную черту - я о них ничего не писал и тратил все время на разработку, а ближе к финалу выкладывал получившуюся версию. Для себя я сделал вывод, что это неправильно и нужно что-то писать в процессе. Поэтому в этом конкурсе моя цель не только создать игру на Defold, но и описывать процесс создания.

Идея

Действие игры происходит в постапокалиптическом будущем. Кругом песок, бандиты и нет воды. Яркий пример – фильм Безумный Макс.

В игре я планирую сделать смесь 2-х жанров: головоломки про строительство акведуков типа игры Pipe Dream и стрелялки на машинках с видом сверху.

Что получилось

Акведук можно построить и это замечательно. Удалось реализовать изначальную задумку со смесью 2-х жанров. Пластилиновое решение для создания графики очень помогло. Получается, что пластилин это олицетворение глины, а глина это материал, который с древних времен используется для создания посуды и др. предметов.

Известные проблемы

  • В веб-версии игры кнопки управления иногда могут фризить нажатие. В таком случае машинка может сама ехать или стрелять. Это происходит из-за потери фокуса приложения или по другим причинам. Если это произошло, то нужно получить фокус приложения, щелкнув на экран, а потом нажать и отпустить запавшую кнопку. (хотя обычно, я просто нажимаю все кнопки управления, это быстрее)
  • Сейчас в игре есть графическая ошибка. Крестовой тайл акведука может вести воду только по прямой и не может ее поворачивать. Из его графического вида это не понятно. Ошибка была допущена мною в спешке :(
  •  
  • Сообщения туториала можно случайно пропустить, если отжать кнопку стрельбы, когда оно уже появилось.
  • Кристаллы находятся на слой ниже, чем платформы строителей и ремонтников. Должны быть над ними.

Планы на будущее

В процессе разработки появлялись все новые и новые идеи как можно было бы разнообразить игру. Некоторые я успевал записывать, а некоторые, к сожалению пока остались в голове.

  • Добавить неразрушаемые блоки (типа горы), из-за которых акведук пришлось бы строить в обход.
  • Сделать следы от шин и отразить поворот передних колес у машинки
  • Добавить шейдеры на скорость, на взрыв
  • Использовать нормальмаппинг для улучшения модели освещения
  • Сделать вылетающие из пулемета гильзы и добавить другие виды оружия
  • Разннообразить поведение монстров, добавить стреляющих
  • Сделать 2-ую модель управления, чтобы машинка двигалась в указанном направлении, в зависимости от нажатых кнопок
  • Добавить песчанные бури, перекати поле и др.

Дневник разработки

День 1. Суббота 27 августа 2016.

Утром посмотрел тему Ludum Dare 36. Начал вспоминать древние технологии. Навскидку в голову пришли только египетские пирамиды, римские акведуки и греческие амфитеатры. Если действие игры будет происходить в далёком будущем, то все современные технологии можно назвать древними – оставлю этот вариант как запасной, на случай если ничего лучше не придумаю. Я решил, что нужно придумать, что-то с акведуками. В голову пришла идея сделать физическую головоломку с видом сбоку про строительство акведуков. Раньше головоломки я не разрабатывал, поэтому правила мне давались плохо. Жена вспомнила игру про объединение компьютеров в сеть и рассказала, о чем была игра. Эта игра напомнила мне старую игру Pipe Dream, в которую я играл в детстве на Game Boy. Мне показалось, что правила этой головоломки подходят и под строительство акведуков, но нужно внести в игру что-то новое. Я решил поэкспериментировать и добавить в игру процесс защиты акведуков от дикарей.

Строительство акведука в Древнем Риме. Иллюстрация: Brown Bear / Windmil Books / UIG / Getty Image / Fotobank.ru

С женой и малышом мы решили сходить к останкинской телебашне. Оказывается, на башню можно подняться в составе экскурсии за 1000 р. Подниматься мы не стали, но погуляли вокруг и пошли обратно. Дома я выяснил, что путь туда и обратно был больше 17 км.

День 2. Воскресенье 28 августа 2016.

Пора скачать Defold и пройти обучающий урок. Удивился тому, что Defold у меня уже установлен с 4 августа. Вспомнил, что в этот день я смотрел, что нового появилось среди 2D редакторов уровней, так конструктор попал ко мне. Тогда о нем я ничего не знал и не стал изучать, т.к. он показался мне слишком нагруженным для редактора уровней и не подходил для моих целей. Кто знает, как моё мнение изменится теперь. В процессе изучения обучающего урока про лягушонка конструктор меня приятно удивил своим набором инструментов для создания уровней и геометрии столкновений у объектов. Пожалуй, эти инструменты можно использовать не только для создания игр на Defold, но и в других проектах. Проверил, сколько весит пустой html5 проект. Эх, целых 5 мб. Что ж с этим ничего не поделать, 5 так 5.

Играл в Batman: Arkham Knight. Головоломки Риддлера очень разнообразны и разгадывать их интересно. Вот только в загадках есть проблема – найти правильный ракурс для сканирования отгадки не так-то просто. 

День 3. Понедельник 29 августа 2016.

Утром я встаю пораньше, и чтобы не мешать домочадцам иду с ноутбуком на кухню. Завершил обучающий урок по Defold. Это было интересно. Должен отметить, что разработчики знают какие инструменты важны для разработчика игр и как их правильно и удобно организовать. Пока все довольно удобно. В процессе работы, думаю, конечно найдутся недостатки, но без них не бывает.

День 4. Вторник 30 августа 2016.

Принял решение что нужно писать о разработке и приступил к написанию этого текста. Первые 3 дня пришлось написать постфактум. Придумал рабочее название для игры. Первым вариантом было название Цепной пес, но мне оно казалось очень заезженным. Так как герой игры будет восстанавливать акведуки, по которым в города будет поступать вода, то получается, что он благородный защитник. Ему подходит титул Рыцарь. Тогда я стал пробовать варианты Рыцарь пустыни, Рыцарь песков, Рыцарь пустоши и решил остановится на варианте Рыцарь дюн. Это название совмещает в себе благородного героя и мои приятные воспоминания из детства об очень хорошей игре.

Для оформления странички сделал иконку с названием игры.

На работе сегодня наконец привезли системник для Oculus. Подключали его и смотрели демки. Некоторые дэмки весьма впечатлили. Немного расстроил SteamVR - подключить джойстик в первый день мы так и не смогли.

День 5. Среда 31 августа 2016.

Все еще пишу текст о первых днях разработки. Ох и много же времени это занимает! С другой стороны, утром по будням не так много свободного времени. Ничего, впереди выходные. Подобрал картинки и сделал фотографии для оформления текста. Ребята посоветовали в качестве референса игру Койоты: Закон пустыни.

День 6. Четверг 1 сентября 2016.

Завершил описание предыдущих дней. Для загрузки рабочей версии решил использовать itch.io, тем более раньше им уже пользовался и сервис нравится. В процессе обнаружил, что не могу изменить высоту и ширину кадра для игры в настройках. Это было неожиданно. Придется посмотреть другие варианты. gamejolt.com понравился многообразием настроек. К сожалению, не смог сформировать прямую ссылку на игру, чтобы не приходилось дополнительно нажимать на кнопку «Play Game». Следующий вариант Pages на Github. Этот сервис понравился всем… поначалу. Запустил на нем тестовую версию. Вроде все хорошо. Подумал, что буду пользоваться. Но позже, что-то пошло не так. Свежая версия отказалась запускаться, ссылаясь на ошибку в графике. Решил, что пока не буду с этим разбираться. Все же смог наладить отношения itch.io. Оказывается, забыл поставить тип проекта html, поэтому у меня не было возможности изменить разрешение.

День 7. Пятница 2 сентября 2016.

Запрогал движение машинки главного героя. У меня оно уже было написано раньше на js. Здесь оставалось только переписать все на lua. Скопировал код, заменил все var на local, все this на self. Правильно оформил функции, циклы и условия. Теперь они заканчиваются на end. Неожиданно, но похоже в lua нет инкрементирующих операторов, типа ++ или -=. Пришлось заменить еще часть строк и переписать их без использования этих операторов. Остаток от деления вместо % нужно использовать math.fmod. Поведение машинки написал, как отдельный модуль и сохранил файл так main/world/car.script, поэтому для подключения в скрипте объекта нужно использовать local Car = require "main.world.car"

Жена поинтересовалась какая машинка у меня на иконке. Я почему-то ответил на автомате, что это Шелби. Не понятно откуда у меня это знание, но после загугливания оказалось действительно Шелби Кобра 427.

День 8. Суббота 3 сентября 2016.

Обычно я пишу только двухмерные игры, а у дефолда 2D сделано через 3D, так поймал себя на мысли, что пока не привык, что ось y идет вверх, а не вниз. Машинка у меня стреляет в направлении курсора, а камера передвигается. Значит мне нужно вычислять положение курсора относительно камеры, чтобы правильно запускать пули. В дефолде есть переменные, содержащие положение курсора action.x и action.y в колбэке on_input(self, action_id, action) и мне известно положение камеры. Значит нужное мне значение будет суммой вектора положения камеры и вектора, содержащего значение положения курсора. Для рабочей версии я пока затайлил бэкграунд текстуркой песка и скачал из интернета машику по запросу car top view.

Сегодня в гости приезжала моя мама. Мы готовили еду и ходили гулять с малышом. Малыш неожиданно долго спал :), так что я успел еще позаниматься на тренажерах, установленных на детской площадке и сходить в парикмахерскую.

День 9. Воскресенье 4 сентября 2016.

Интересная история. Проверял как у меня летают и уничтожаются пули, а их было много, так как они летали и уничтожались медленно для наглядности. В процессе в консоли появлялись ошибки, что больше 128 спрайтов создать нельзя, так как выставлено ограничение. Хм… Чтобы изменить это нужно заменить значения 2 параметров max_count в настройках проекта в разделах sprite и factory. Надо бы проверить на что влияют оба этих параметра. Видимо, первый на кол-во спрайтов в коллекции, а второй на кол-во объектов, находящихся в сцене и произведенных фабрикой. В моем примере фабрикой пуль.

Вопрос с графикой для игры пока не решен, так что в рамках GamesJamDefold решили с женой провести эксперимент и попробовать сделать графику из пластилина. Посмотрим, что из этого выйдет, графика может выглядеть очень странно. Представил как мы все это будем делать, используя iphone вставленный в штатив и освещая сценку настольной лампой. Фигурки и тайлы фона можно фотографировать на хромакее или без него, в любом случае нужно будет решить, как вырезать их из фона. В идеале хотелось бы делать фотографии с освещением с разных сторон, чтобы потом использовать это для создания карт нормалей. В таком случае картинка могла бы выглядеть очень живо, но боюсь, что данный процесс более длительный и выйдет за рамки джема. Пошли гулять с ребенком, а заодно зашли в магазин за пластилином. Штатив для iphone не нашли, но в переходе купили автомобильный держатель на присоске. Попробуем его применить.

День 10. Понедельник 5 сентября 2016.

В Defold удобно сделана работа с векторами и матрицами. Есть почти все необходимые функции. Математические вычисления можно делать с простыми операторами + или -.

Пластилин очень хороший материал для творчества. Помню в детстве было жалко, когда пластилин смешивался, ведь его потом не разделить, а новый взять негде. Сейчас пластилин стоит не дорого и всегда можно купить новый, а смешивая его можно получить довольно интересное сочетание цветов.

Сегодня у жены день рождения. Ее все поздравляли. В гости приезжали ее мама и папа. Вечером совсем нет времени что-то готовить. Поэтому мы ели пельмени и торт с чаем.

День 11. Вторник 6 сентября 2016.

Пока не понял, как в Defold задавать размер тайловой карты динамически. Сейчас в редакторе ставлю тайлы в левый нижний и правый верхний углы, чтобы задать размер, а потом заполняю всю сетку программно.

Первые снимки тайлов, они выглядят интересно. Пока не понял, как их фотографировать. Если свет сверху, то все норм. А вот если ставить свет сбоку, то тайлы выглядят очень эффектно. Из-за рельефности появляются блики и тени. Но свет от моей лампы затухает и тайлы освещены не равномерно. Нужно что-то с этим придумать.

Вот так выглядит мой транспорт, на котором я добираюсь на работу. За 3 года весь истерся, пора делать тюнинг. Только в дождливую погоду добираться не удобно.

День 12. Среда 7 сентября 2016.

Попробовал поставить отснятый материал с пластилиновыми фигурками в игру. Получилось интересно. Фотки все ж пока не получается делать хорошо, все время появляется какая-то теневая сторона. Я так понял существует очень много факторов влияющих на освещение. Сейчас делаю все фотки утром на балконе при дневном свете в туманную погоду. Гифка результата ниже.

День 13. Четверг 8 сентября 2016.

Немного завис с выставлением глубины объектов. Оказывается, что глубина объектов в стандартном рендерере может быть в диапазоне от -1 до 1, о чём и говорит вот этот FAQ.

Сегодня после работы был на новоселье у друга. Он временно работает из дома, т.к. в его семье скоро появится малыш.

День 14. Пятница 9 сентября 2016.

В специальном канале слака сегодня выложили ссылку на конкурсную игру Pimp Clicker. Поиграл в нее. Понравилась графика и менеджмент сделан интересно. Игра расчитана для мобилки, можно смело смотреть с телефона.

Еще при создании html5 билда важно ставить галочку Release mode, как показано на скриншоте. Иначе игра будет собрана в отладочном режиме и производительность будет ниже. А при использовании эффектов частиц фпс у меня проседал в отладочном режиме всегда.

День 15. Суббота 10 сентября 2016.

А вот в твит-ленте справа увидел еще одну конкурсную игру благодаря тому, что ребята твитнули ссылку на страничку с хештегом #gamesjam. Они тоже решили использовать пластилин для создания графики. Стиль персонажей очень интересный, а вот прототип я пока не понял. Наверное будет похоже на Patapon. Думаю, что они его еще доделают.

Друзья прислали еще две интересные статьи на тему создания игровой графики с помощью пластилина: раз и два. Вторая игра сейчас в Steam Greenlight.

А вот друг сегодня дрифтит в Парке Легенд.

День 16. Воскресенье 11 сентября 2016.

Утром пошел делать новые снимки на балкон. Сегодня с балкона такой вид. Выбирал масштаб для опор акведука. В игре добавил тени, сейчас это отдельные объекты, которые двигаются и вращаются за родительским объектом. Чтобы не создавать лишних объектов хотел переделать эту модель на использование 2-х компонентов sprite, один из которых был бы тенью, но не нашел как изменить центр спрайта на лету. Позже ребята в Defold канале слака помогли с этим разобраться. Пока придется оставить текущую реализацию.

 

День 17. Понедельник 12 сентября 2016.

Переделал физику машинки, теперь она использует физическую модель Box2D. В Defold работать с ним довольно просто. К сожалению, моя реализация физики на Box2D пока выглядит странно. Сейчас физика не похожа ни на машинку, ни на танк. Она легко дрифтит, а при остановке может дергаться влево и вправо. Пока оставлю так. А еще вот так выглядит сейчас покадровая анимация машинки.

Завтра иду на DevsGo митап.

День 18. Вторник 13 сентября 2016.

Утром собираю версию, которую по возможности хотел бы показать на DevsGo. Экстренно добавляю вторую основную механику – строительство акведука. Хочу показать, что когда игрок строит акведук в режиме строительства, то это отражается и на режиме боя. Постройки в виде колонн акведука появляются на основной карте и изменяют геометрию поля боя.

Пока это выглядит не понятно. На втором скриншоте вид опоры на поле боя. Надо бы придумать тени.

День 19. Среда 14 сентября 2016.

Ходил вчера на DevsGo. Страшно было на шоукейсе показывать версию, в которой даже нет игры, только набор механик и немножко графики из пластилина. Собрал очень полезный фидбэк. Пообщался с интересными людьми. Рассказывал про опыт работы с Defold.

Утром зафрендился с новыми знакомыми в VK, FB, Twitter и поэкспериментировал с освещением в игре. Эффект освещения интересный, но увеличивает работу по подготовке графики в 4 раза о_О

Вот так выглядел столик для сбора отзывов.

День 20. Четверг 15 сентября 2016.

Сделал описания предыдущих дней. Добавил гифку с новым освещением. Гифки делаю с помощью программы screen to gif.

Враги теперь разворачиваются по направлению движения. Оказывается, нельзя запрашивать данные об объекте, если он находится в другом сокете. Например, go.get_position(“world:/car”) не будет работать если вызывать его из скрипта “default:/main#script”. Зато можно передавать сообщения между сокетами с помощью msg.post – это удобно.

День 21. Пятница 16 сентября 2016.

По умолчанию при создании проекта в дефолде выставляется разрешение экрана игры 1280x720. Я не знал где это можно изменить эту настройку, когда начал изучать дефолд, поэтому игра у меня сейчас запускается в этом разрешении. Не стал убирать кнопку Fullscreen, которая добавляется по умолчанию в сборку html5. В обычном режиме фокус управления может потеряться, если случайно щелкнуть за пределами игрового окна, а вот в полноэкранном режиме этого не происходит. Но полноэкранный режим растягивает картинку игры и на мониторах с аспектом не 16:9 выглядит плохо. Решил эту проблему сегодня, пришлось добавить новые строки в стандартный рендерер.

День 22. Суббота 17 сентября 2016.

Опоры акведука теперь правильно строятся в игровом процессе в зависимости от поставленного тайла в меню постройки.

Поэкспериментировал с нормаль маппингом. Было бы здорово добавить его в игру для улучшения освещения, но боюсь, что не успею сделать это в рамках джема, т.к. нужно будет для всех текстур сделать еще и карты нормалей. В дефолде пока можно передавать только одну текстуру в шейдер, и чтобы передавать карту нормалей я объединял ее с основной текстурой.

День 23. Воскресенье 18 сентября 2016.

Добавил тени для опор акведука и главное меню. Пока только текст на черном фоне. Решил, что пора сделать дополнительные тайлы земли. А то сфотканы они уже давно, а вот в игру пока так и не попали. Нужно будет все их вырезать из фотографий и отредактировать, чтобы они были бесшовными.

До конца конкурса осталась всего неделя. Хочется сделать версию игры, в которой будет один законченный уровень. Очень страшно не успеть до завершения конкурса.

День 24. Понедельник 19 сентября 2016.

Добавил главное меню. Хочется сделать красиво, но пока не доделаны все основные элементы игры, к красоте приступать рано. Поэтому некоторые элементы приходится делать пока как очень просто исключительно ради функционала.

День 25. Вторник 20 сентября 2016.

Сделал систему диалогов. Главного героя зовут Сокет, а его связного Хаб. Связной в самом начале выполняет роль учителя и объясняет, как разобраться с игрой. Кроме того, добавил новые тайлы, которые буду выкладывать вторым слоем поверх первого (основного). Всего у меня 15 талов. Каждый из них размером 512 х 512. Конечно полный атлас из них получился размером 2048 х 2048. В пнг они занимают около 5 Мб. Попробовал использовать пнг с индексированными цветами, но к сожалению, Дефолд не воспринимает индексированную прозрачность и отображает вместо нее черный цвет (либо я что-то не так понял).

День 26. Среда 21 сентября 2016.

Добавил локализацию на английский. Язык знаю плохо, но думаю, что это все ж лучше, чем ничего. Благо переводить пока совсем не много.

Кроме того, попробовал использовать Tiled для создания тайловых слоев. К тому же, на днях я видел, что ребята уже написали для него экспорт в тайловый формат Дефолда. Немного огорчило, что эксортировать в этот формат пока можно только с Мака, на винду плагина нет.

День 27. Четверг 22 сентября 2016.

Сегодня сделал, чтобы поставленные блоки акведука уничтожались правильно, а не по одной колонне. И добавил колонны которые нельзя сломать. Все это корректно отображается на карте. Так же сделал ремонтную мастерскую. Все еще нужно добавить строителей и дать возможность заказывать у них постройку новых блоков для акведука.

День 28. Пятница 23 сентября 2016.

Завтра начинается новый конкурс на CodinGame. GamesJamDefold заканчивается в воскресенье, так что начало придется пропустить. Думал сегодня как сделать алгоритм проверки целостности построенного акведука. И вот в голову мне пришло решение, которое я писал для одной из игр на CodinGame. Никогда не знаешь, где могут пригодится те или иные знания. В данном случае опыт полученный там точно не прошел бесследно. К слову, друзья, если вы хотите потренировать свои навыки в программировании на Lua для использования их в Defold, то отличная возможность сделать это на кодингейм. Кроме луа есть и другие популярные языки там.

День 29. Суббота 24 сентября 2016.

В Дефолд лучше не делать .tilesource и .atlas с одинаковым именем иначе билд не соберется. Из них видимо генерятся ресурсы и в данном случае получаются с одинаковыми именам, получается конфликт.

День 30. Воскресенье 25 сентября 2016.

Выложил видеоролик и версию игры для джема.

defold topdown shooter drive box2d
Логотип проекта

Строительство и защита акведука в пустыне. Смесь жанров. Головоломка в стиле Pipe Dream и стрелялка с видом сверху.

Играть
43


Участие в джемах


blog comments powered by Disqus