Нечёткий сон

Тот самый уровень в игре, из-за которого обновление моей игры про сны отложилось на 7 лет. Рассказываю, в чём была проблема и как я её решал.

Изначально игра была сделана на движке GameMaker8.1. Сейчас последняя версия движка GameMakerStudio2. Между ними была GameMakerStudio1. Во второй студии полностью пределали работу с уровнями. В лучшую сторону, но изменения оказались тяжело сопоставимы со старой версией. Это не первая моя попытка перенести проект на новый движок. Я уже пробовал 7 лет назад. И столкнулся с проблемой.

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

В чём же проблема, раз импортируются?

Тайлы импортируются, а вот код для работы с ними долгое время был несопоставим с новой версией движка. Смотрите, дребезжание тайлов в оригинале я реализовал так:

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

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

Пораскинул мозгами - это не проблема, если я смогу считать информацию о тайле и взять ссылку на текстуру. И его координаты на этой текстуре. Тогда мой специальный объект будет отрисовывать дрожащую часть этой текстуры, а не заставлять дрожать сам тайл. Увы, такую информацию из тайлов вытащить нельзя. Даже сейчас.

Как я решил эту проблему?

Я создал отдельный спрайт, каждый кадр которого - это часть тайлсета для конкретно этого уровня.

Нечёткий сон

Теперь мой спец-объект имеет этот спрайт и дрожит сам себя. Мне пришлось вручную заменять остатки импортированных тайлов на эти объекты, каждому из них назначая нужный кадр спрайта.

Нечёткий сон

Не знаю, почему мне раньше не пришло в голову такое простое решение. Не зависит от тайлов вообще.

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

Прогресс по проекту отписываю в девлоге в своей группе ВК. И обсуждаю фичи с парнями на своём дискорд-сервере. Присоединяйтесь =)

36
19 комментариев