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, но с другими блоками, другим сеттингом, да все другим, но со схожими механиками. Получается, что у меня уже есть какой-никакой прототип.
Всем большое спасибо за внимание и уделенное время!
Всем добра и успехов!
Лига Разработчиков Видеоигр
8.5K поста23.1K подписчик
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"