Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
#Круги добра
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Бесплатная браузерная игра «Слаймы Атакуют: Головоломка!» в жанре головоломка. Подходит для мальчиков и девочек, доступна без регистрации, на русском языке

Слаймы Атакуют: Головоломка!

Казуальные, Головоломки, Аркады

Играть

Топ прошлой недели

  • dec300z dec300z 11 постов
  • AlexKud AlexKud 43 поста
  • DashaVsegdaVasha DashaVsegdaVasha 7 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая «Подписаться», я даю согласие на обработку данных и условия почтовых рассылок.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
21
kakawa47
7 лет назад
Лига Разработчиков Видеоигр

Недельный отчет №1 Миникарта и "умные" мобы⁠⁠

Снова привет, Pikabu! Как и обещал ранее, выпускаю первый недельный отчет по разработке. Чтобы не выпускать кучу лишних постов без надобности, я решил разбавлять патчноут информацией о том, как я делал ту или иную вещь в игре. Тогда и читать будет интереснее да и текста будет поболее, а если попадется обширная тема - то сделаю отдельный пост. Традиционно передаю привет моим уже 23-м подписчикам

И по порядку начну с изменений:

1) Добавлена миникарта

Теперь в игре есть работающая (а раньше лагающая) миникарта. Во вроде бы простой задаче всегда найдется свой подводный камень, а я нашел там целый мешок. Изначально я хотел все сделать через жопу просто и топорно - у нас есть массив всех обьектов на карте, так почему бы не взять те, которые входят в зону видимости и не отрисовать как маленький спрайт вверху справа? И это работало. Только вот одна проблема. На первом скрине вы видите фпс без отрисовки карты:

А на втором вместе с отрисовкой:

Возникает логичный вопрос:

Проблема заключается в том, что метод Draw, который отвечает за отрисовку обьектов и его приблуд, вызывается очень часто. Вернее, не просто часто, а тысячи раз в секунду, или даже больше. С учетом того, что моя матрица не таких уж и маленьких размеров, процессор пытается пробежать её от начала до конца для поиска новых обьектов отрисовки на карте каждый из этих тысяч раз. Из-за этого возникает большая нагрузка, и даже мой i7 смотрит косо и говорит, мол, "дядя, ты дурной?". Приходится прибегать к хитростям, и на этот раз хитрость выглядит следующим образом - вместо того чтобы пробегать тысячи клеток, я пробегаю всего десяток комнат, и, если эта комната рядом со мной - рисую квадрат её размеров, относительно уменьшая его в несколько раз и перемещая в правый верхний угол. Просто? Проще репы. И выглядит, вроде, похоже:

Помимо этого, можно посмотреть всю открытую карту зажав "shift":

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

2) Туман войны (или просто скрытые комнаты)

В прошлых постах я задался вопросом скрывания от игрока тех комнат, которые он не посетил. В принципе, это работает и выглядит как-то так:

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

Проблема только в отрисовке тех же туннелей - они не обьекты, а значит, если мы будем искать их через массив, снова сьедим свои 3к ФПС.

Третьей и заключительной вещью, которую я реализовал на этой неделе, было:

3) Поиск пути от мобов к игроку

Раньше мобы действовали так: если на линии между игроком и мобом нет стены, значит нужно бежать в его сторону. В течении недели я совершил маленькую тайловую революцию и теперь каждая стена в игре - это не обьект, а просто картинка. Благодаря этому я увеличил тот же ФПС до 3к, но потерял возможность проверки столкновения. Недавно от одного из разработчиков на GMS2 (а именно, того парня что создал "Space ship Looter") был стрим по разработке новой игры, на котором я и поинтересовался, как у него мобы ищут путь до цели. Все оказалось довольно просто: в GMS есть такая вещь как mp_grid, это такой массив, который может хранить в себе "твердые предметы". Добавляя функцию path к мобу, мы можем указать ему условие, чтобы он искал путь от точки 1 до точки 2 избегая этих самых препятствий с указанной скоростью. В GMS2 mp_grid может не только учитывать твердые обьекты, но и заполнять сетку столкновений тайлами, от чего я упал в оргазмическом припадке с радостью взял данную фичу на вооружение, ведь это и сохранит мой ФПС, и позволит мобам "поумнеть". Примерно так смотрится все это действо на примере туповатых скелетов:

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

- Доработать отображение туннелей в тумане войны и на карте

- Добавить освещение, как общее, так и локальное

- Поиграться с методом path чтобы сделать плавное покачивание предметов и прочих вещей

- Поиграться с мобами и настроить пару видов поведения

- Добавить возможность телепортации между зелеными комнатами, если эти комнаты открыты

Надеюсь, пост был не скучным и информативным)


P.S. Все думаю, делать ли туннели 3 клетки шириной вместо 1. Как вы считаете? И стоит ли увеличить высоту стен на один блок?

Показать полностью 10
[моё] Game maker studio 2 Gamedev Roguelike Инди игра Длиннопост
20
45
kakawa47
7 лет назад
Лига Разработчиков Видеоигр

Генерация подземелий или как потеряться в массивах. Часть II.⁠⁠

И снова привет, Pikabu! С момента первых двух постов появились некоторые изменения:

Так что, теперь даже есть стимул писать для кого-то - спасибо тем кто ждет и кому интересно! :) Постараюсь не разочаровать моих 11 Кодзим новым постом о генерации подземелий.


В прошлый раз мы остановились на том что создали отдельный одномерный массив, содержащий id каждой игровой комнаты, а также гигантскую матрицу, в которой хранится наша сетка с расположением каждого блока на игровом поле. Что же дальше? А дальше нужно как-то соединить эту байду друг с другом, ведь бегать мы будем между комнатами, а не нарезать круги по одной и той же (логично(нет)).


Одним из удобных графических представлений связей между объектами в 2D плоскости является так называемый Граф:

Граф - это такой абстрактный математический объект, представляющий из себя множество вершин и ребер - соединений этих вершин между собой. Графы бывают разные (и они не обязательно напоминают символ сатаны) - они могут быть взвешенными, ориентированными, двудольными, связными.. В общем, куча их. Так какой же нам выбрать? Давайте подумаем. В нашем подземелье между комнатами будут туннели, и очень желательно чтобы они были как можно меньше (вспомните того шакала из прошлого поста), поэтому дистанция между комнатами - важный параметр. Граф, в котором такой параметр учитывается, называется взвешенным, и у каждого ребра такого графа пишется его "вес". В нашем случае - это дистанция между комнатами, и чем она меньше - тем лучше. Направления, в котором эти комнаты связаны, нам не особо и вперлось - какая разница куда бежать, вправо или влево, вверх или вниз между комнатами? В случае необходимости, мы можем пробежать по туннелю и два раза (мало ли, забыли итем в соседской комнате?). Это значит, что граф неориентированный, т.е., не имеет определенных, залоченных направлений движения. Вот и определились. Теперь нужно подумать, как представить его в коде, а не на бумаге. Можно сделать это структурой, например, где каждый элемент будет вершиной графа, содержащий указатели на все другие вершины.. (фу) Однако, в GMS2 я не особо то и обнаружил возможность нормально реализовать данный метод (или плохо искал). Так что, что мы говорим структурам?

И выбираем матрицу :3

Не зря ведь в заголовке написано "как потеряться в массивах" - надо оправдывать название) Берем наш двумерный массив, пробегаемся по каждой комнате по её id и вызовем функцию GMS distance_to_object(). Запишем значение в соответствующую ячейку, и, вуаля, получим заполненный массив с расстояниями между всеми комнатами. Теперь дело за малым - находим в каждой строке матрицы минимальное значение, не включая элемент, в котором индекс строки совпадает с индексом столбца (очевидно, ведь это путь от себя до себя и он равен 0) и сохраняем отдельно. Теперь у нас есть список наименьших путей, по которому мы сможем соединить между собой все комнаты. Но, думаю, если здесь есть те, кто имеет опыт работы с GMS и уже успели задаться вопросом: зачем заниматься всем этим, заполнять матрицу и искать меньшие значения, если есть чудесная функция instance_nearest(), которая и находит минимальную дистанцию до ближайшего объекта? Отвечу:

А вернее, я буду использовать не только самый короткий путь до комнаты, но и (с долей вероятности) буду искать еще один короткий, не включая предыдущий. Зачем?

Чтобы подземелье не было линейным, а имело ответвления или несколько способов попасть в комнату. Думаю, так будет интересней играть, нежели бежать хоть и по изогнутому, но все-таки коридорному пространству. Вот примерно так это и выглядит:

Итак, самое основное сделано - теперь мы знаем что связать друг с другом и как это сделать. Самое время построить туннели, ведь ради них все и затевалось. Но не так все просто оказалось, нежели я думал. Сначала я взял самое очевидное решение - построить из центра одной комнаты палку вверх, а из центра другой - палку в сторону. И знаете что?

Проблема вылилась практически сразу. Помните шакала с того поста? Его мы пофиксили добавляя маленькие комнаты, которые попадались на пересечении линий между основными комнатами. Однако, эти линии были внутри круга генерации тех самых комнат. Иными словами, если одна основная комната попадет в левую часть круга, а другая - в верхнюю, и они решат соединиться через мой алгоритм - заливать пустоты будет нечем, ведь дополнительных объектов вне круга не генерируется. Примерно вот такая кака:

Поэтому, пришлось пару дней подумать, поменять несколько решений и, в итоге, результат был неплох.

Что пришло мне на ум - у нас есть матрица игрового поля, почему бы не поработать с ней?

Алгоритм вышел такой:

1) Вычисляем положение наших двух комнат в матрице игрового поля

2) "Вырезаем" часть матрицы, в которой эти комнаты располагаются

3) В строках матрицы, где располагаются наши комнаты, ищем такую, в которой количество пустот минимально. Тоже самое со столбцами

4) Найденную строку и столбец заполняем полностью нулями, что означает для моей матрицы расположение туннеля.

Результат:

Желтые комнаты - основные, которые попытались соединиться. Алгоритм определил путь, по которому лежит минимальное количество пустоты и заполнил его туннелем. Осталась последняя загвоздка - справа внизу вы видите тупики, ведь алгоритм в тупую заполнил строку и столбец массива, не учитывая эту ситуацию. Проблема решилась с первого раза (что удивительно) - в цикле я запустил проверку в массиве на условие: "если рядом с ячейкой тоннеля есть меньше двух "соседей" (клетки комнат или такого же туннеля) - это значит, что это тупик, следовательно, заполни его пустотой".

Финальная версия генерации на данный момент выглядит примерно так:

На картинке еще можно найти некоторые огрехи - маленькие тупики, но там проблема забавная - рядом с этими тупиками есть спрятанная комната, её не видно, но она не вошла в основные или дополнительные и просто сидит рядом. Поэтому, алгоритм удаления тупиков принял её за соседа и оставил туннель.


Вот на этом, в принципе, и все - как то так и создаются на данный момент подземелья в моем прототипе. Над чем поработать еще определенно есть - нужно подкрутить вероятностное распределение, чтобы настроить размеры комнат, исправить проблему с невидимыми комнатами, добавить возможность комнат "префабов" - заранее созданных объектов из примеров (т.е., например, не квадратов а эллипсов и т.д.). Также есть идея рандомно создавать рядом с границей комнаты дополнительные стены, чтобы добавить неровностей. В следующем посте я расскажу как я разобрался с тайлами и про недавно созданную миникарту, а также, сейчас я пытаюсь сделать "туман войны", попутно настраивая поведение моих малочисленных мобов. К концу недели выйдет маленький пачноут, в котором опишутся все изменения за семь дней.


P.S. спасибо тем, кто оставлял комментарии по поводу генерации в прошлом посту - появилось пара идей для реализации)

Показать полностью 10
[моё] Game maker studio 2 Gamedev Длиннопост Инди игра Roguelike Разработка игр
12
48
kakawa47
7 лет назад
Лига Разработчиков Видеоигр

Генерация подземелий или как потеряться в массивах. Часть I.⁠⁠

Привет, Pikabu! С моего первого поста прошло всего несколько дней, но, на удивление для меня, кому-то стало все-таки интересно что творится под капотом страшной фразы "генерация подземелий" и как изнутри выглядит её код говнокод. Поэтому передаю привет моим трём подписчикам:

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


Первое, что приходит на ум при придумывании очередного велосипеда на тему создания подземелий - это наспаунить кучу квадратов и соединить их палками. А что, круто же? Комнаты есть, туннели - есть, бегай да собирай бонусы. Вот так и думал мой препод, для которого левел дизайн это "расставь алмазик в трех местах = три разных уровня". Помимо того, что это не так уж и просто сделать, такой подход еще и выглядит отчасти убого, ведь алгоритм объединения отдельных комнат туннелями в таком случае будет примитивным - соедини две ближних и получишь "змейку" из квадратов. Пара дней сидения за гуглом и спешным транслейтом ангельского языка на русский привели меня к статье на хабре, в которой примерно был описан алгоритм неплохой генерации, но на Юнити. Однако, цитировать его слово в слово я не буду, ведь:

так что, опишу то, что изменил под себя и как это выглядит на нашем деревенском GMS2.


Начало простое и логичное. Алгоритм последовательной генерации квадратов налагает на себя одну большую проблему - эти квадраты необходимо разместить так, чтобы они друг друга не касались. Да, можно поступить по топорному - пусть алгоритм ищет пустое место и тыкает туда комнату, размер которой будет рандомным. Вроде и не пересекается, вроде и недалеко друг от друга. Однако, если нам понадобится:

а) определенное количество основных комнат

б) определенный размер комнат
то мы выстрелим себе в ногу, потому что нам либо придется писать кучу условий на проверку свободного места (и в случае нехватки либо распределять заново либо удалять лишнее), либо сидеть и надеяться, что без этих условий рандом сжалится и ни разу не улетит в бесконечный цикл, наткнувшись на место, в которое нужно воткнуть комнату но не нельзя уместиться в минимальный размер.

Решение здесь такое же простое и ленивое - зачем думать над условиями, если программа сама может решить твою проблему? Существует такое понятие как "флокирующее поведение". Это поведение объекта (именуемого агентом) в условии присутствия других таких же объектов. У него существуют несколько ограничений, связывая которые можно получить различный тип поведения, от преследования до убегания. В моем случае, генерируем случайное количество комнат на плоскости со случайным размером в радиусе определенной окружности, определяем вектор каждой комнаты до ближайшего соседа, и просто разворачиваем его в обратную сторону. Иными словами:

Таким образом, расположенные рядом на очень близком расстоянии объекты, разлетаются друг от друга в противоположных направлениях. В итоге, мы получаем гарантированное "несовпадение" по координатам в независимости от размера комнат. В коде это выглядит примерно так:

"если я касаюсь какого-то выродка - посмотреть в его сторону и бежать в противоположную со скоростью 10"

Разбежавшись, комнаты занимают свои позиции и переводят дух. Теперь их ждет вторая стадия - необходимо определиться, кто здесь главный и с кем из соседей этот главный хочешь скорешиться. Забыл упомянуть, как это все хранится: каждая комната это обычный объект GMS2, имеющий координаты, спрайт, а также возможность добавления кода. Для того, чтобы дальше работать с ними как с совокупностью, а не раздельным сбродом, я добавляю id каждого объекта в специальный одномерный массив. Массив хранится в еще одном объекте, который отвечает здесь вообще за всю тусовку связанную с генерацией - obj_dungeonGenerator. Вон сидит, сидит палит

Комнат получается много, поэтому нужно отсечь лишние и взять нужные. Под нужными я понимаю те, которые имеют определенный размер, например, больше среднего. "Лишние" комнаты, однако, совсем не лишние. Почему? Взгляните сюда:

Зеленые квадраты - это нужные комнаты, а красные линии - потенциальные соединения между ними. И знаете что меня напрягает? Вот этот шакал:

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

Однако, это еще не конец истории. Окунемся немножко в теорию вероятностей чтобы было понятно о чем речь. В ненавистной мной ТВ (из-за тотального её непонимания когда я сидел на её парах) существует понятие равномерно распределения. Оно используется в любимой нами функции radom(), random_range() и прочих прочих. Согласно термину: "В теории вероятностей случайная величина имеет дискретное равномерное распределение, если она принимает конечное число значений с равными вероятностями." Это значит, что рандомно задавая размер комнаты, мы, каждый раз, можем равновероятно получить как большую, так и среднюю или малую комнату в нашем диапазоне. Как это нам мешает? Такое распределение создает ситуацию, в которой все комнаты получаются примерно одинакового размера. Поэтому, на моменте отбора нужных комнат получится, что мы отберем 10 самых больших, но на фоне останутся, фактически, такие же комнаты, только чуууть меньше или больше. Из этого следует, что в качестве туннелей мы получим не линию из маленьких комнат, а совокупность больших инвалидов, которые уместились по соседству. В своей игре я хочу иметь понятие "основной" и "дополнительной" комнаты - в первой будут сундуки и плюшки с сильными мобами, во вторых - прочая мишура для тира, которую можно пробежать и забыть, не сильно при этом скучая. Поэтому я беру на вооружение так называемое Геометрическое распределение. Оно отличается вероятностью появления каждого последующего события, т.е., чем дальше от начала отсчета "событие", тем меньше вероятность его появления. Таким образом, мы получим маленькое количество больших, и большое количество маленьких комнат, что играет нам на руку - первые в основные, вторые - на мясо. В итоге этого выглядит примерно так (на скрине еще старое, равномерно распределение, но прикрепляю его чтобы видно было дело, а не рисунки с пэинта):

На нем видно окружность, из которой выползли уже готовые комнаты, а также их разделение на основные и дополнительные. Однако, многие посмотрят на скриншот и спросят:

А это еще одна отдельная история. Получив равномерно распределенные по пространству и геометрически распределенные по размерам комнаты мы, по сути, ничего и не сделали - это просто набор объектов, хоть и располагающихся так, как нам нужно. Следующая задача - это сформировать из них массив, каждая ячейка которого будет отвечать за свое место в пространстве и то, что в нем находится - стена, пол, дверь или же пропасть. Благодаря этому массиву в будущем мы сформируем карту тайлов, которые и отрисуют нам графику (с ними, кстати, я недавно разобрался), а не цифры. Чтобы его сделать я отсортировываю все комнаты по х-координате и y-координате и выбираю самые крайние по четырем направлениям.

Получив их, я вычитаю самую верхнюю координату по Y из самой нижней, и самую правую из самой левой по X, получая, тем самым, размер всего занятого комнатами пространства. Дело осталось за малым - делим эти дистанции на размер нашей сетки (я выбрал 16 пикселей, т.к. всю графику буду рисовать именно в этом стиле) и, вауля, у нас получилась матрица определенного размера и с определенной шириной ячейки, однако, она все еще пустая.

Пробегаемся вложенным циклом по этому двумерному массиву с таким условием: "если по координатам этой ячейки ничего нет - кладем туда #, если есть главная комната - кладем 2, если дополнительная - кладем 1", а затем, пробегаем второй раз с другим условием: "если рядом с единицой или двойком в матрице есть # - заменяем его на +", получая тем самым заполненную матрицу с расположением комнат, стен, а также пустых пространств.

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


P.S. имхо, получилось скучнее и нуднее, чем я ожидал, поэтому заранее извиняюсь за слог. В следующий раз попытаюсь вещать более лаконично и грамотно, а то так даже мемасики не спасут положение. Отметьте в комментариях что непонятно или чего недостаточно, пишу такое, отчасти, в первый раз, так что постараюсь уточнить все, что смогу

Показать полностью 12
[моё] Инди игра Разработка игр Gamedev Game maker studio 2 Пиксель Roguelike Длиннопост
14
36
kakawa47
7 лет назад
Лига Разработчиков Видеоигр

Вперед и с песней. Мой первый серьезный проект⁠⁠

Анонс игры на стадии разработки. (Название? Да и пёс с нем, придет с вдохновением)

Всем привет! На Пикабу я давно, однако, я больше любитель поскроллить ленту чем писать посты, так что, лучше приберегите свои тапки для моих патчноутов - это будет продуктивнее)

Начну издалека. Время идет, годы летят и вот уже скоро настанет момент вступления в скучную и невеселую жизнь, ознаменует которую скорейшее получение степени Бакалавра в купэ с бесполезной синей бумажкой. Чтобы хоть как-то скрасить нарастающую тоску и ужас, в качестве темы для дипломной работы я решил выбрать не очередную бесполезную софтину, название и код которой полетят в помойку сразу же после получения отметки, а хоть что-то полезное, или, хотя бы то, к чему лежит душа. Так уж сложилось, что с давних пор я пытаюсь отчасти реализовать свой творческий фонтан делая маленькие игрушки, которые, конечно, никому не вперлись, но хоть как-то развлекают меня самим процессом создания. Последнее свое творение я даже пытался пропихнуть в еще живой тогда Гринлайт под названием Star Punisher, который я делал АЖ ДВЕ НЕДЕЛИ (а по тому времени для меня это казалось титаническим таймингом по разработке), который, однако, потерпел фиаско, зависнув там на дне как говешка в проруби.

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

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


Что из себя в общем представляет игра? Это рогалик. Со всеми вытекающими. Рандомные подземелья, куча шмота и мобов, НО. Увидев как-то (и в последствии купив) Nuclear Throne и Gungeon я понял, чего я хочу от своего детища - кровованов экШОна. Рандомная генерация отлично дополняется элементами TDS, что весьма кстати, ведь я сам являюсь фанатом мясных шутеров. Графику решено делать в богоподобном гиперреализме с кучей сисек пиксель арте, ведь для одного человека, фактически, ничего и не остается выбирать, да и мои навыки рисования хоть и не на уровне Вася пятикласник, но и не Сальвадор Дали. Досконально над механикой и конечным результатом я не задумывался - работаем по методу увидел - спиздил "ОГО, КРУТО, ХОЧУ ТАК ЖЕ" и делаю также..) Конечно, отношусь я к этому не столь безолаберно, однако, построить полностью модель будущей игры пока что не под силу юному геймдизайнеру, поэтому приходится обходиться вдохновением и желанием, попутно подставляя костыли в реализованные фичи.

Изначально наработки напоминали скорее помесь геймдизайнерской параши в купе с гениальным графоном

Ладно, я сам ору с этого скрина, но это, все-таки, первый день разрабоки..) Да и в начале я сосредоточился не на геймплее и графике, а именно на генерации подземелий. Спустя определенное время игра (а вернее, карта игры) начала принимать свой примерный вид, начиная с пустых и безликих обрамлений комнат

до вполне себе оформленных обьектов:

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

На данный момент в игре практически реализована генерация подземелий (в которой каждое последующее подземелье неплохо отличается от предыдущего в плане формы), есть простенькое меню, добавлена возможность создавать и настраивать оружие, присутствует стрельба и пара тупеньких мобов. Выглядит все это как-то так:

Не совсем уж и густо, однако, до релиза еще больше полугода, так что надеюсь позже перечитать этот пост и увидеть гигантскую разницу.
Почему я написал этот пост? Хочу узнать что об этом думают другие люди, а также, надеюсь, что попадутся те, кто имеет опыт игры в подобные жанры и подскажет, что его (или их?) раздражает или наоборот, привлекает в тех или иных продуктах. Буду рад примерам и советам, идеям и предложениям, надеюсь в итоге получить что-то хоть малость играбельное. Игра, кстати, планирует посетить Стим (это важно, сейчас в дипломе для хорошей оценки требуется т.н. "внедрение"). Дата примерного релиза - Май 2018. Путь долог и тернист, но не менее интересен и увлекателен, ведь еще надо додумывать сюжет, искать музыку, допиливать графон.. мле. А че так много то? Памагите. Что планируется добавить в скором или ближайшем времени:
- Освещение. Простое, но без него рогалик как плов без вязанки дров.

- Карта. Бегать в слепую это классно, настолько классно, что нет.

- Динамическое проявление комнат. Ака туман войны, ну, вы поняли..

- Оптимизация. Видели все эти квадратики на полу? А это обьекты. АХАХАХАХА (я еще не разобрался как размещать тайлы в новом GMS2, так что игра не лагает только на моей gtx1080)

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

Ну, наверное, вот и все. Надеюсь, этот пост не похож на большинство вроде: "мы начинающие разработчики ищем бесплатных людей и у нас будут корованы, прибыль поровну", максимально старался избежать этого. Жду комментариев и желающих продолжения. Если что-то упустил в тегах - не бейте

Показать полностью 10
[моё] Инди игра Game maker studio 2 Gamedev Пиксель Roguelike Длиннопост
18
69
Mazaris
Mazaris
7 лет назад
Darkest Dungeon

Shieldbreaker - Background⁠⁠

Shieldbreaker - Background
Показать полностью 1
Darkest Dungeon Комиксы Shieldbreaker Roguelike RPG
20
157
IceCrusader
IceCrusader
7 лет назад
Лига Геймеров

Streets Of Rogue...⁠⁠

...Или свежая порция индюшатины от ленивого обзорщика.

Серьезно, я настолько обленился, что даже не буду заканчивать это пре...


И эт...


И во...


Окей, собственно, следующую игру вы не смогли бы найти, даже роясь в самых зловонных клоаках торрентов, заглядывая туда, куда не заглядывала рука самого извращенного любителя скачать бесплатных рефератов вечерком, вынюхивая там, где пахнет грязью, д*рьмом, сиалексом и российским футболом.

Но ведь для этого у вас есть я.


Ладно, ладно, проект весьма свеж, как и мои шутки, и вообще даже сподвиг меня на предыдущий обзор по GTA 2.

Но не будем тянуть Na`Vi за PGL и начнем.

Те из вас, кто сейчас побежал в другой конец комнаты, истошно крича слово "ОПЯТЬ ХРЕНОВЫ ПИКСЕЛИ!!!" - отдышитесь и попытайтесь представить, что это всего лишь маленькие разноцветные квадратики. Ну хорошо, хорошо, кто-нибудь, дайте ему тазик для его собственного мнения по этому вопросу.

Как часто вам хотелось бросить все, выпить специального вещества, стать огромным и превратить этот город в пыль?

Знаю, знаю, каждый день, но теперь ваши мечты реальны: Streets Of Rogue предоставляет полную свободу в плане своего поведения на городских улицах.

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

Ведь здесь даже можно есть человеческое мясо и при этом слыть уважаемым человеком.

Ведь здесь даже можно красть сердечко копа при помощи денег.

Коррупциюшка, содомушка и вседозволенностюшка - вот три столпа, на которых держится Streets Of Rogue.

Ах да, и еще чувство юмора, определенно.

[Нет нет нет, не говори мне, что это почти как в России, хотя да, это почти как в России.]

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

И у игры есть такой: СЛУЧАЙНО ГЕНЕРИРУЕМЫЕ КАЖДЫЙ РАЗ [БОЖЕЧКИ, БОЖЕЧКИ, ЗДЕСЬ МОЖНО УМЕРЕТЬ ОТ СЛУЧАЙНЫХ СОБЫТИЙ!!!] районы города, предоставленные в виде уровней с постепенно возрастающей сложностью.

Каждый из районов населен своим случайным количеством NPC, застроен случайным количеством помещений и снабжен случайным количеством заданий, которые случайно созданному персонажу игрока и нужно выполнить, чтобы пройти на следующий случайно сгенерированный уровень [все это звучит как ЕГЭ].

Случайность? Не думаю.

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


- Живые уровни. -

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

Естественно, персонажи каждого класса конфликтуют между собой [прямо как в твоей школе, подписчик], поэтому при малейшем взаимодействии между собой или с окружающим миром всегда есть шанс, что что-то да начнется.

Коп увидит вора, гангстеры из двух банд не поделят цвет футболок, разумные гориллы заметят вдалеке ребят в белых халатах, и вот уже это не район, а чертов Город Грехов.

А посреди всего этого - персонаж игрока, взламывающий дистанционно телевизор, чтобы тот взорвался.

Зачем?

Но ведь так он борется с правительственным заговором [что и является основной сюжета, ведь в обучении игроку прямо говорят - он призван, чтобы совершить революцию и свергнуть мэра. Sobyanin Day: The Heist].

Настоящий Watch Dogs для нищебродов и oldfag-ов [разница между этими словами - в умении говорить фразу "мой комп это уже не потянет" с выражением лица фронтовика 40-вых годов, одновременно презрительно глядя на собеседника, как на newfag-а.]

- Интерактивность. -


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


Ворваться в помещение и перестрелять всех во имя несправедливости, или же подкинуть кислоты в вентиляцию, чтобы враги внутри задохнулись сами?

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

Нет нет, учеба в ПТУ не считается.

А еще можно дистанционно взломать ловушки и турели внутри охраняемого склада, и тогда вся техника и электроника внутри сама позаботится о прохождении миссии.

Deus Ex, мог ли ты мечтать о подобном?

- Наркотики и отвага. -

Именно так я назвал бы подход разработчиков к созданию персонажей.

Начиная с бомжа и заканчивая вампиром - каждый из предоставленных классовых недоразумений обладает своими характеристиками, навыками и ключевыми способностями.

Вор ворует и быстро бегает, вампир пьет кровь и быстро машет кулаками, хакер хакерит и быстро очищает историю поиска, каннибал каннибалит и быстро придумывает отговорки для следствия, Mail.ru наглеет и быстро вводит платную подписку на критику в свой адрес [Заплати сейчас и получи возможность ненавидеть Mail.ru сутки напролет!!!]...

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

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

- Предметы. -

Огромный набор эффективных штуковин для взаимодействия с и без того интерактивной дальше-только-Lego обстановкой.

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

И все вышеперечисленное нужно для того, чтобы пройти дальше.

Или разрушить район до основания.

Или просто отыграть роль своего персонажа полностью, напившись за пьяницу в местном баре и спровоцировав тех трех бандюг на пьяную драку, чтобы подбежавшие подкупленные игроком до этого копы избил всех троих, а персонажу осталось бы только подобрать выпавшее из ребят имущество.

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

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


И все это было бы невозможно без отлично сработанного всеобщего искусственного интеллекта, который заставляет NPC не просто бесцельно бродить по локации, а реагировать на шум, вид обнаженного мужика, ограбление, взрывы и вообще на все, что с ними может случиться, вплоть до получения подарка, совершенно по-разному.

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

В Streets Of Rogue ни одно прохождение действительно не будет похоже на другое, и это не пустое бахвальство, вроде разной расстановки предметов на уровне.

Это тот самый, почему-то слегка отдающий cyberpunk-ом и GTA одновременно, indie-проект, который уже на стадии alpha-развития способен затянуть на неделю игры.

Качайте, покупайте, пробуйте, плюйтесь и начинайте новую игру - 100 с лишним мегабайт пиксельного удовольствия ждут вас.

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

Или же вы просто глубоко ненавидите меня, как обзорщика и человека.

Это все потому, что вы оссосси...

Решать вам, а я таки запущу гребаный Tzar и попытаюсь понять, что же там такого хитового.

Всем - по собственному мнению, и если бы Бог состоял из пикселей, то первым пророком был бы Марио, воскресающий при помощи грибов.

IC.

Показать полностью 11
[моё] Streets of Rogue Компьютерные игры Ic обзор Длиннопост Roguelike Гифка
27
60
Mazaris
Mazaris
7 лет назад
Darkest Dungeon

Jester by BadOmenz⁠⁠

Jester by BadOmenz
Показать полностью 1
Darkest Dungeon Арт Jester Игры Roguelike
5
20
KarolinaLeo
8 лет назад
Лига Разработчиков Видеоигр

Взрыв из прошлого или создание тактической инди-игры.⁠⁠

Приветствую! Меня зовут Каролина, я нарратив дизайнер в небольшой инди-команде. С начала 2017 года мы работаем над компьютерной игрой Star Souls.

Star Souls задумывалась как тактическая игра. Основную ее часть составляют бои между космическими кораблями игрока и противника, которые происходят в реальном времени с тактической паузой. В этом посте я расскажу вам о разработке геймплея игры. Условно мы разделили геймплей на 3 составляющие части: время, место и действующие лица.

1. МЕСТО.

Игровое поле в Star Souls полностью открыто и разделено на клетки, по которым и происходит перемещение кораблей. Мы не делали игровое поле слишком большим, для того, чтобы игрок мог держать его полностью под контролем.

Это был определенный вызов: можно ли сделать при таком, казалось бы, минималистичном наборе условий интересный геймплей? На ум приходит удивительный пример игры, которая своими 64-мя клетками (8×8) и 16-ю фигурами развлекает людей вот уже полторы тысячи лет. Дотянуться до гениальности шахмат хотелось бы каждому игроделу, но все-таки будем реалистами)) В любой хорошей настольной игре мы манипулируем небольшим количеством предметов на относительно маленьком поле, и при этом они здорово затягивают.

В компьютерных играх нет проблемы с нехваткой физического места на столе, и игровое поле может быть в разы больше. В Battle City (те самые «Танчики» на Денди, в которые мы детьми залипали вечерами) 169 секторов (13×13), и они были очень хороши, согласитесь.

В Star Souls игровое поле относительно небольшое - 10×20 клеток, при этом оно максимально насыщено игровыми событиями. Чтобы не погибнуть в первые же минуты, игроку необходимо будет реагировать на опасности: уклоняться от метеоритов и опасных полей, укрываться в туманностях, пробивать себе путь среди мусора, и т.п. Кроме того, корабли могут выступать щитом для главного корабля, с потерей которого игра оканчивается.

1. ВРЕМЯ.

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

Но умирать придется вновь и вновь. Для того чтобы прохождение не напоминало день сурка, в Star Souls введены элементы roguelike на всех подуровнях игры – карта сектора генерируется рандомно, множество миниквестов и битв выпадает совершенно случайно, да и играть можно за любую из нескольких рас, корабли которых весьма отличаются по характеристикам. Исход квестов неоднозначен и может привести к разным последствиям. Проигрыш перестает быть драмой и означает новые приключения и новый опыт для игрока.

2. ДЕЙСТВУЮЩИЕ ЛИЦА

Есть один аспект, который роднит Star Souls с настольными играми – это собирательство, в нашем случае кораблей и оружия. В игре 30+ кораблей только игровых рас, множество неигровых вражеских кораблей, 30+ видов оружия, и естественно, хочется все это испытать в деле. Одновременно можно владеть не более чем тремя кораблями, на которые можно ставить не более четырех пушек. Корабли можно прокачивать, что улучшает их параметры, а также устанавливать на них различные модули, которые защищают от определенного вида урона. Прокачаться до такого уровня, чтобы чувствовать себя в безопасности, не получится никогда. Корабли запросто гибнут на поле боя, покупать их дорого, а зарабатывать хлопотно. Так или иначе, игроку придется нивелировать особенности кораблей (скорость, уклонение, очки жизни) посредством выбора определенного оружия, модулей и характерным стилем на поле боя.

Больше об игре можно узнать здесь:

Страничка на Фейсбук

Группа ВКонтакте

Твиттер

Показать полностью 3
[моё] Инди Starsouls Gamedev Roguelike Unity Разработка Научная фантастика Гифка Длиннопост
19
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии