Нечёткий сон
Тот самый уровень в игре, из-за которого обновление моей игры про сны отложилось на 7 лет. Рассказываю, в чём была проблема и как я её решал.
Изначально игра была сделана на движке GameMaker8.1. Сейчас последняя версия движка GameMakerStudio2. Между ними была GameMakerStudio1. Во второй студии полностью пределали работу с уровнями. В лучшую сторону, но изменения оказались тяжело сопоставимы со старой версией. Это не первая моя попытка перенести проект на новый движок. Я уже пробовал 7 лет назад. И столкнулся с проблемой.
Всё дело в тайловой системе. В старых версиях движка тайлы можно было располагать в любом месте. Полагаю, технически они были реализованы как отрисовка обрезанного фона, в котором этот тайл находится. Именно так все тайлы импортируются со старых проектов во вторую студию.
В чём же проблема, раз импортируются?
Тайлы импортируются, а вот код для работы с ними долгое время был несопоставим с новой версией движка. Смотрите, дребезжание тайлов в оригинале я реализовал так:
- Отрисовал весь уровень обычными тайлами
- Поверх наложил специальные объекты, которые смотрят под собой все тайлы и начинают их дребезжать.
В новой версии движка тайлы располагаются чётко по заданной сетке. 7 лет назад было мало функций для работы с ними. Просто так взять и сместить тайл было нельзя. Сейчас для совместимости запилили незадокументированные функции для этого. Раньше их не было.
Пораскинул мозгами - это не проблема, если я смогу считать информацию о тайле и взять ссылку на текстуру. И его координаты на этой текстуре. Тогда мой специальный объект будет отрисовывать дрожащую часть этой текстуры, а не заставлять дрожать сам тайл. Увы, такую информацию из тайлов вытащить нельзя. Даже сейчас.
Как я решил эту проблему?
Я создал отдельный спрайт, каждый кадр которого - это часть тайлсета для конкретно этого уровня.
Теперь мой спец-объект имеет этот спрайт и дрожит сам себя. Мне пришлось вручную заменять остатки импортированных тайлов на эти объекты, каждому из них назначая нужный кадр спрайта.
Не знаю, почему мне раньше не пришло в голову такое простое решение. Не зависит от тайлов вообще.
Это один из двух проблемных уровней, которые затормозили апдейт игры. Второй я буду переделывать уже очень скоро.
Прогресс по проекту отписываю в девлоге в своей группе ВК. И обсуждаю фичи с парнями на своём дискорд-сервере. Присоединяйтесь =)