74

Supaplex Unity3d Clone

Добрый день, уважаемые пикабушники!

Хочу рассказать вам о своих небольших наработках по клонированию замечательной старенькой игры – Supaplex. Для тех, кто не знает, игра Supaplex вышла в 1991 году. Это двухмерный платформер, в котором предстоит играть за компьютерный вирус Мёрфи. Игра происходит внутри компьютера, необходимо проходить головоломки, собирать специальные объекты "Инфотроны", стараться не загонять себя в безвыходные ситуации. В игре много разных блоков: дискеты-взрывчатки, сник-снеки (ножницы), оперативная память, печатная плата, электроны, порты, зонки. Всего в игре 111 уровней.

Сам я про эту игру узнал не так давно, коллега по работе принес и дал поиграть. В итоге мы немного посоревновались, кто пройдет все уровни быстрее, но так и не прошли все, а остановились в районе 50 – 60 уровней.

Как раз в это время я ковырял Unity и решил попробовать перенести все механики на этот движок, но уже не в 2d, а в 3d. Скажу честно, получилось не очень. До конца так и не удалось перенести всё достоверно, а то что есть – иногда работает неправильно (это баг, а не фича). Но, обо всем по порядку.

Итак, началось все с того, что я захотел перенести Supaplex на Unity и подумал, что не буду смотреть дизассемблированную версию оригинала. Все делалось с нуля и максимально похожим на оригинал.

Для начала надо было решить, как поступить с уровнями. В Unity есть замечательная функция, которая позволяет читать изображение по пикселям. Поэтому, было решено, что все уровни будут изображениями размером 58х22 пикселей (такой размер оригинальных уровней - 58 блоков на 22 блока). Каждый пиксель имеет свой цвет, который соответствует определённому блоку (например, (255, 0, 0) – это цвет Мёрфи, главного игрока). Unity анализирует изображение, определяет, какой цвет соответствует тому или иному блоку, и ставит его в нужную позицию. Теперь для создания уровня нужны были все блоки и "карта уровня". Но как получить "карты уровней", если не знать, как достать их из оригинала.

Здесь на помощь пришел вики сайт по Supaplex, где есть изображения всех уровней, и мой друг, который знает Python. Уровни на вики представлены следующим образом:

Друг написал алгоритм, который переводит все блоки в пиксели нужного нам цвета. Мы скачали все изображения и прогнали их через программулину. Были небольшие неточности и ошибки с границей уровня. Но мы справились, вот какие уровни на входе получает Unity:

После того, как получились карты уровней, началась работа над моделями. Есть две версии игры, с более хорошими моделями и есть версия (первоначальная), в которой модели были сделаны ужасно, совсем не обращалось внимания на количество вершин и треугольников. Это очень сильно сказывалось на производительности. В текущей версии во всех блоках максимально уменьшено количество треугольников, где их не видно – там все удалено. Вот вид "лицевой":

А вот "со спины":

Ну и для примера то, как изменилось количество треугольников в модели.

Было:

Стало:

На примере блока "Терминал" получилось снизить количество треугольников почти в 42 раза. Первоначально, почти все модели были сделаны так неаккуратно. Поэтому пришлось их переделывать.

Ну вот, все блоки готовы, сделан простой скрипт построения уровня.

А вот, как выглядит уровень уже после работы скрипта:

Остается самое веселое – оживить это все.

Первоначально, я на каждый блок вешал определенный скрипт поведения. Но это ни к чему хорошему не привело. Вот пример, как ножницы не должны себя вести:

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

И не только ножницы, но и электроны (да, у них одинаковое поведение):

Ну, еще немножко похвастаюсь

Вот главное меню оригинала:

А теперь моя версия:

Видео прохождения первого уровня (прошу прощения за качество и ватермарку):

Итак, поведем некоторый итог.

На данный момент есть возможность поиграть во все 111 уровней, правда пройти некоторые невозможно. Не реализовано изменение гравитации, и нет блока «Баг» (это обычная печатная плата, которую пробивают электрические разряды), блоки в некоторых ситуациях ведут себя некорректно. Работы еще очень много.

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

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

Всем большое спасибо за внимание и уделенное время!

Всем добра и успехов!

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"