WhiteCoyo

WhiteCoyo

Начинающий Unity Developer
Пикабушник
183 рейтинг 2 подписчика 2 подписки 2 поста 1 в горячем
Награды:
5 лет на Пикабу
13

Forgotten Lands: Chronicles

Доброго времени суток! Хочу рассказать о своей игре, которую делаю в качестве хобби по вечерам уже почти 2 года – Forgotten Lands: Chronicles. Эта компьютерная ролевая игра с элементами пошаговой стратегии расскажет историю мира Славории, подозрительно похожего на Древнюю Русь.

Предыстория

История игры начинается в 2019 году после очередного прохождения King’s Bounty. Легенда о рыцаре. Пройдя игру, мне захотелось сделать что-то похожее. Делать самый первый прототип я начал в Unity. Одной из первых механик было сделано боевое поле с возможностью движения по нему существ. Для построения маршрута к клетке конечной клетке использовался волновой алгоритм поиска пути. Пришлось немного пошаманить, чтобы вместо обычных клеток-четырехугольников алгоритм корректно работал с гексагонами. Получилось сделать, чтобы можно было атаковать вражеское существо со всех окружающих его гексагонов. Для существ я сделал несколько моделей по всем известному мультфильму.

Прототип сцены боя на Unity

Следующим пунктом в моем плане было создание системы диалогов. Кататься на чужом велосипеде не захотелось, поэтому сделал свою примитивную систему. В отдельной сцене в Unity можно было создать диалоги. Визуально это выглядело как нодовый редактор, главный нод, у которого были варианты ответа игрока. Каждый ответ вел к следующему ноду (текст НИП). Ответы игрока могли появляться при определенных условиях, например, если какая-нибудь глобальная переменная принимала необходимое значение. Весь диалог сохранялся в файл dialogue_name.json. При нажатии на ответ игрока могло случиться како-то событие (старт квеста, завершение, добавление вещей в инвентарь и т.д.)

Редактор диалогов

Редактор диалогов

Соединив эти два элемента на одной сцене, у меня вышла дешевая подделка King’s Bounty. Безтекстурная лошадь могла бегать по поверхности и открывать диалог с одним НИП.

Собранный прототип прототипа на Unity

На этом я пока успокоился и задвинул проект в далекий ящик.

Переход на Godot

А потом спустя какое-то время случился скандал с ценовой политикой Unity. Начитавшись на сабреддите r/Unity как все переходят на другие движки, я скачал Godot. И конечно же первый делом решил перенести этот проект. Как оказалось, это было не трудно, и за пару дней у меня было все готово. С этого момента и начинается путь Forgotten Lands. Мне понравился Godot, понравился язык GDScript. И я решил доделывать наработки до полноценной игры.

В первую очередь были сделаны основные механики:

  • движение игрока по карте

  • когда враги догоняют игрока начинается бой

  • игрок можно «заходить» в здания и общаться с НИП

  • игрок может покупать существ

  • при выборе определенных ответов случаются какие-то события

Разработка

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

  • Пограничье – зона, которая находится на границе с Забытыми Землями

  • Царьград и окрестности - столица Славории

  • Болота, в которых живет Баба Яга

  • Дремучий лес

  • Забытые Земли

Пограничье, Царьград, Болота, Дремучий Лес, Забытые Земли

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

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

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

А вот иконки существ и предметов всецело сгенерированы нейросетью «Шедеврум» и «Кандинский».

Всего в игре получилось 30 существ:

  • 3 мини босса

  • 23 обычных существа

  • 4 специальных существа (этих существ нельзя купить, они появляются только по сюжету в качестве врагов)

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

На данный момент игра почти готова. Ее можно полностью пройти, готовы все задания, расставлены все существа, распределены отряды и количества существ.

Игрок повышает свой уровень, получает очки, которые можно распределить в одну из характеристик (атака, защита, здоровье, количество шагов). Опыт для уровней дается за бои и за прохождение заданий. За определенное количество очков одной характеристики героя существа получают бонус к аналогичной характеристики. Например, за каждые 4 очка здоровья у персонажа все существа получают +1 к своему здоровью. Так же с повышением опыта увеличивается "могущество" игрока. Чем больше "могущества", тем больше существ можно нанять.

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

Геймплей.

Ниже представлен геймплей прохождения одного из заданий на локации Дремучий лес – необходимо освободить мастерскую от волколаков.

Спасибо Всем за внимание!

Страница игры itch.io: https://whitecoyote.itch.io/forgotten-lands-chronicles

Показать полностью 15 1
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, но с другими блоками, другим сеттингом, да все другим, но со схожими механиками. Получается, что у меня уже есть какой-никакой прототип.

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

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

Показать полностью 22 1
Отличная работа, все прочитано!