Попробовав делать простые рогалики, где прогресс сбрасывался при каждом отдельном забеге, со временем собрал и прототип игры, более похожей на Diablo не только выбранной перспективой, но и механиками.
-
Скрыть объявление
Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.
-
Скрыть объявлениеЕсли Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.
Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
- Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
- Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
- Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
- Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
С уважением, администрация форума Old-Games.RU
Pandelirium - диаблоид "у нас дома"
Категории:
-
![[IMG]](proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fr%2Fw1560%2Fgetpro%2Fhabr%2Fupload_files%2Fd4f%2F611%2F4c0%2Fd4f6114c0b6c1f25eb9a61a37b8c3cc4.png&hash=7f149c1bfccd40901e2203aaab44298c)
Более ранние arpg-прототипы предполагали разовые забеги, без сохранения лута. А проект Панделирий фокусируется уже на концепции сохранения лута и прогресса зачистки врагов. Сам лут здесь уже обладает генерируемыми параметрами (разной редкости, зарядами и прочим), а игра предполагает заготовки для прогрессии персонажа и прочий, более диаблоподобный подход к происходящему.
Здесь я рассказываю основные моменты и показываю процесс в видеоформате:
Запустить прототип в браузере или скачать версии для windows/linux можно на этой странице:
Панделирий | Pandelirium by NoNsense
Особенности, общее
Конкретно в этой статье, помимо общих моментов, затрону некоторые другие подробности реализации (используется игровой движок Godot). Например, монстры, сундуки и кувшины вынесены в отдельные слои, которые хранятся независимо от самого уровня. Таким образом прогресс зачистки стартовых уровней сохраняется, пока игровая сессия не сброшена (через закрытие игры или опцию перезапуска в настройках).
![[IMG]](proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fr%2Fw1560%2Fgetpro%2Fhabr%2Fupload_files%2F088%2Fb20%2F100%2F088b201008f7bce9c7c17a50ae2e21e9.jpg&hash=c77ff5fe22d48a17f55dcb83c0f61d41)
Уровень в редакторе движка
Предметы в инвентаре занимают 1 ячейку. В одном из прочих прототипов я делал систему "органического инвентаря" - где предметы нужно было определённым образом "упаковывать". Нечто переходное между системой 1 предмет = 1 ячейка и системой "а ля Diablo", где 1 предмет = несколько ячеек.
Подробнее о предыдущем рогалике ( проект Сферамида, плюс упоминается более ранний - Chaosborn ) рассказываю в этом видео:
Маленькие бутылки здоровья и маны, помимо восстановления какого-то количества ресурса, добавляют шкале и некоторое количество концентрации , которая убывает со временем, как это было в Сферамиде. В то же время видов бутылок здесь меньше - 4 вида, против 6 в сферическом прототипе. В наиболее раннем, Chaosborn, были просто 1 бутылка здоровья и 1 бутылка маны, а концентрации не было.
Большие бутылки просто дают количество ресурса, больше чем маленькие, но не дают концентрации. Концентрация отмечена маленькими яркими полосками рядом со шкалами, а также влияет на их цвет (снижая или увеличивая насыщенность). Маленькие бутылки добавляют треть к уровню концентрации, который со временем убывает. При уровне концентрации ниже 1/3 бутылки восполняют здоровье с задержкой, от 1/3 до 2/3 - стандартно, выше 2/3 - происходит регенерация ресурса, пока концентрация не понизится до среднего диапазона.
Важно, что все типы бутылок вынесены как отдельные иконки, показывающие сколько какого зелья имеется в инвентаре, и их нужно использовать нажав на эту иконку, или хоткей. Без всяких этих судорожных перекладываний бутылочек в пояс/быстрый доступ. То есть, конкретная бутылка удалится из инвентаря уже автоматически, не нужно кликать по каждой конкретной бутылке в инвентаре. Собственно, непонятно, почему каким-то таким образом не сделали ещё в первой Diablo, где видов бутылок было мало, и, по сути, все виды можно было вынести в такие быстрые кнопки.
![[IMG]](proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fr%2Fw1560%2Fgetpro%2Fhabr%2Fupload_files%2F897%2Fb63%2F22a%2F897b6322a0421417a2d598470d8ed286.jpg&hash=f1de9df2059dbbf6782df84bef3432c5)
Слева от здоровья полоска концентрации пока средняя и сейчас упадёт ниже, само здоровье при этом станет серым, а использование большой бутылки восполнит здоровье не сразу. Справа от маны концентрация максимальная, три деления, мана регенерирует.
В первых рогаликах все параметры предмета определял номер его картинки (позиция в общем атласе). А здесь во все предметы зашит массив параметров, то есть они могут иметь различную редкость и свойства при одной и той же картинке. Самих картинок предметов не так много, они хранятся в общем атласе 8 на 8. Для различного масштабирования этой системы можно использовать много атласов и переключаться между ними.
Первоначально я заложил в предметы сразу много параметров, с запасом. Каждый предмет содержит в себе массив данных. Выглядит это примерно так:
item = [A,B,C,D,E,...,O,P,Q] , где А - номер картинки предмета, B - тип предмета, С - число редкости, D - прогресс в идентификации, E - степень изученности способности, F/G/H/I - параметры атаки для оружия (для не-оружия может содержать что-то другое), J/K - номер первого возможного бонуса и его количество, и так далее, например, число некоего заряда (для каких-то "заряжаемых" предметов или эмуляции параметра прочности).
Потом всё-таки решил базовые свойства по возможности брать из самого названия предмета (а это либо сам номер картинки, либо один дополнительный параметр), хотя для этого понадобится чуть больше перепроверок. А дополнительные свойства выбирать из фиксированных, как собственно, в диаблоидах изначально и заведено.
Тем не менее, тот же тип предмета решено было оставить в массиве, для удобства. Да, его можно вычислить от картинки каждый раз, но проверки по типу - вещь довольно частая и лучше сделать их попроще.
Что касается свойств - те самые дьябловские аффексы (префиксы/суффиксы) - решил двигаться в сторону первой Diablo, где одна строчка сразу содержит свойство с фиксированным количеством бонуса. В первой части, опять же, все эти аффиксы целиком отражались в названии рандомного предмета, а далее от этого частично отошли.
Собственно, я подумал одно свойство выносить в префикс, в название предмета, а возможные дополнительные - уже нет. В прототипе, помимо обычных версий некоторых предметов дропаются редкие: зелёные и синие, у которых название меняется.
Экипированный посох отображается на персонаже, даёт возможность стрелять магией, а ещё им можно просто бить (кнопка Q). При простом ударе посох наносит врагу одну из своих позиций атаки (у него их 4, как и у всего предполагаемого ближнего оружия). В целом такой подход изначально был удобнее для использования в тактической настолке, когда такая вещь, как броски на попадание, полностью упразднена и все исходы сразу зашиты в один бросок (поверх которого уже могут добавляться бонусы). То есть вместо бросок на попадание + бросок на повреждения - совершается всего 1 бросок, дающий сразу информацию о том, было ли попадание, попадание без повреждений или попадание с какими-то повреждениями. В ПК-варианте это не настолько актуально, как за столом, где удаление лишнего броска даёт очень большой буст к скорости сражений, но, почему бы и нет. Враги, кстати, атакуют героя по схожей схеме - у них есть набор из повреждений разной величины, и итоговый базовый урон определяется витруальным четырёхгранным кубиком.
Идентификацию и изучение новых спеллов я сшил в единую специальную игромеханику. У персонажа есть известные ему руны, а убивая монстров нужно ловить искры, чтобы копился прогресс идентификации текущего экипированного оружия. Далее любой идентифицированный посох в руках персонажа продвигает прогресс изучения своей руны, когда герой ловит искры, вылетающие из врагов (требуется всего 10 искр). Когда руна изучена, то она появляется для выбора в инвентаре - с ней можно будет выставить другую комбинацию рун, которая, возможно, изменит заклинание на левой кнопке мыши.
![[IMG]](proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fr%2Fw1560%2Fgetpro%2Fhabr%2Fupload_files%2Fc3f%2Faf0%2F362%2Fc3faf0362f42a892594c29f3488140b8.jpg&hash=ecc25a34b3ad43caa81810ff444bde3d)
Персонаж выучил руну М (Е - доступна на старте), О - встроена в текущий посох. Наведя курсор на другое такое же оружие, видим, что оно пока ещё не идентифицировано (надо 3 искры) и показан прогресс изучения руны О (надо ещё 8 искр, чтобы изучить её)
Имеются слоты книги и свитка. Пока они оба заполнены, меняют текущие активные заклинания на заклинание от комбинации двух рун книги и заклинание от комбинации руны книги и руны свитка. На эти, замещающие, заклинания тратится уже не мана, а заряды свитка и когда они закончатся - свиток пропадает, и у героя снова его обычные заклинания, от своих рун и оружия. То есть сама по себе книга, без свитка, не работает - свиток это её "патроны".
Здесь я также реализовал смену оружия в руках персонажей. Специальная пустышка анимирована отдельным, синхронным с движениями персонажа, аниматором, и внутри неё в нужный момент выключается или выключается определённая моделька оружия. Если таких моделей очень много то более оптимальным способом будет уже подгружать/стирать нужную модельку динамически внутрь этой пустышки.
В качестве дефолтного варианта управления выставлена схема, при которой нужно удерживать кнопку (любую из клавиш WASD, или пробел), чтобы двигаться в сторону указателя мыши. В противном случае персонаж стоит на месте и поворачивается за мышью. Это достаточно удобный вариант для диаблоида, как по мне - и не совсем WASD, и не свешивание управления на одну только мышь. В настройках можно немного изменить эту схему - делать по нажатию кнопки просто переключение в режим "стоять" или "автобег", чтобы не надо было удерживать для движения. Или же включить чисто WASD-движение.
Эффект просвечивания персонажа, как было в сферическом прототипе, здесь тоже имеется и он немного улучшен - теперь герой за препятствием становится как бы голографическим, а не пятном сплошного цвета.
Если нажать на портрет персонажа, то вылезает список параметров, которые сейчас ни на что не влияют - первичные (Ловкость, Сила, Разум, Интуиция) и производные/вторичные (вроде силы заклинаний, разных защит). Собственно, полноценным образом все эти параметры использовались в настольно-ролевой системе, а в ПК-прототипе не всё из этого нужно, но взяты и намечены те, что могут пригодиться.
При поражении героя игра не сбрасывается, вместо этого его возвращает на первый уровень, к "торговой точке" (некий аналог торговцев, просто это точка на уровне, где можно распылить какой-то лут и набрать новых бутылок здоровья/маны), с маленьким количеством здоровья. Для сброса прогресса или переключения на второго персонажа нужно выбрать рестарт в настройках.
![[IMG]](proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fr%2Fw1560%2Fgetpro%2Fhabr%2Fupload_files%2Fc05%2F3a4%2Fbd5%2Fc053a4bd5c79cc1b042d123595bd5f43.jpg&hash=10647b058d5edc87b5f8fcf9f63c543a)
Второй персонаж, тень, на торговой точке. Включена английская локализация и открыт инвентарь. Если нажать кнопку, то откроется интерфейс распыления предметов и покупки бутылок.
Слои с монстрами
Монстры и прочие интерактивные элементы (в плане возможной разрушаемости/необратимой открываемости) вынесены в отдельную сцену, которая накладывается как некий слой поверх сцены самого уровня.
На старте игры загружаются все слои с монстрами и первый уровень (его архитектура, прочие статические или интерактивные, но перманентно присутствующие на нём вещи). При этом все слои монстров изначально отсоединены от иерархии сцены, лишь один (слой с монстрами первого уровня) на старте прикрепляется как дочерний к основной ветке. Прочие как бы виртуально присутствуют, но их объекты словно находятся вне времени и пространства.
![[IMG]](proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fr%2Fw1560%2Fgetpro%2Fhabr%2Fupload_files%2Fd00%2F98e%2Ff2d%2Fd0098ef2d97ee3393926d67a6f7e4683.png&hash=3670cccce61b349003230b5de063d703)
Монстры и кувшины в своём слое, отдельно от уровня
При переходе на другой уровень, допустим, второй - сцена первого уровня удаляется и загружается сцена нового уровня. Текущий слой с монстрами не удаляется, но отсоединяется от родительской ветки и вместо него к ней присоединяется другой (соответствующий новому уровню), который мы словно достаём из стазиса.
Все предметы, которые падают на уровне, привязываются именно к его слою монстров, таким образом на нём не только останутся выжившие монстры, разрушенные и неразрушенные кувшины, но и весь лут, так или иначе выброшенный на пол. В Diablo было проще хранить информацию о разных выпавших вещах на уровне, потому что все подземелья по сути состоят из клеток, упакованных в массивы - а в 3д играх, когда уровень уже не "квадратно-гнездовой" по своей природе, с этим сложнее.
Скастованные заклинания, кстати, прикрепляются прямо к основной ветке, а не к слоям, поэтому при переезде между уровнями могут сохранятся. Для исключения этого момента позднее под заклинания можно выделить специальный слой, сбрасывающийся при смене уровня.
Что касается редактирования объектов слоя при разработке - для этого в редакторе префаб сцены нужного уровня временно забрасывается в специальную пустышку на слое, чтобы видеть сам уровень, поверх которого этот слой будет накладываться. После расстановки объектов префаб уровня отсюда удаляется и слой сохраняется.
Элементы уровня
![[IMG]](proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fr%2Fw1560%2Fgetpro%2Fhabr%2Fupload_files%2F916%2F07f%2Fca7%2F91607fca7c01064ec71dd284359c482d.png&hash=c554a24d536b4f0cfb2e4e667d7a2890)
Фрагмент с колоннами
![[IMG]](proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fr%2Fw1560%2Fgetpro%2Fhabr%2Fupload_files%2F5cf%2F582%2Fc2e%2F5cf582c2ebd456173dd675373fea2355.jpg&hash=17af420be83e6760e73c2e2d5ec955ad)
"улолок"
Под основную архитектуру уровня базово выделена одна текстура, атлас, включающий в себя рисунок пола, колонн и прочих элементов. Самих стилей два - новый, с рисованными текстурами (на первом уровне, например) и старый, с текстурой более "реалистичного" вида. По идее, каждые 2-3 этажа стиль уровня желательно менять на следующий.
![[IMG]](proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fr%2Fw1560%2Fgetpro%2Fhabr%2Fupload_files%2Fcf3%2Fa4a%2F538%2Fcf3a4a5380e6c6211961b1287370674e.png&hash=72b8475ffd4bd01db1334fa7d3625592)
Один из текстурных атласов
Далее собираются небольшие квадратные участки уровня, единые меши, использующие один атлас, но разные вариации колонн, угловых стен и так далее. Все они включают в себя пол. В редакторе каждый такой кусочек делается префабом, внутри которого расставляются коллайдеры. Из них в итоге и собирается весь уровень уже в редакторе.
![[IMG]](proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fr%2Fw1560%2Fgetpro%2Fhabr%2Fupload_files%2F5c4%2Fb86%2F241%2F5c4b86241b3bae6a4dc61eb1649c8acb.png&hash=71674fe12602000578452a81741efab2)
Сборка "паззла" в редакторе
Некоторые крупные фрагменты стен и прочих препятствий собираются отдельно, без пола, чтобы добавлять их уже поверх получившегося наброска уровня более свободно.
Поверх уже всего этого добавляются прочие элементы (вроде дверей, которые в этой версии были временно убраны), светильники, грибы. Ну а что-то вынесено на другой слой - сундуки, кувшины, монстры.
Используемые инструменты
Не только для конкретно этого проекта, а в целом что касается Godot-разработки в моём случае:
Собственно, сам игровой движок - Godot 3.5 (для некоторых прочих проектов Godot 4+)
Модели и текстуры - Blender 2.79 (для рендеров/мини роликов в том числе и Blender 3/4+)
Листы с иконками, эффектами и прочее 2д - Krita актуальной версии (удобно, что есть и векторные слои и растровые). Также в линуксе Pinta, для простого редактирования картинок.
Логи разработки - Zim Desktop Wiki и/или CherryTree (в первом сами файлы хранятся в виде иерархии простых текстовых документов в папках - удобно редактировать отдельно от программы, во втором пакете тексты зашиты внутрь его формата)
Захват видео - vokoscreenNG (на Manjaro Linux) и/или ShareX (на Win), который также хорош для скриншотов (а в линуксах хватает встроенных скриншотилок, например, отличнейший Spectacle)
Склейка видео - Shotcut (иногда Blender, обычно для склейки сделанных в нём же серий рендеров в avi)
Последние отзывы
-
"Обязательно поиграю"- 5/5, 5 из 5, оставлен 18 сен 2025
А сегодня пробую делать наработку элемент 4х - управление одной планетой
thenonsense нравится это.
Комментарии
Сортировать комментарии по