1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

Pandelirium - диаблоид "у нас дома"

Автор: thenonsense · 18 сен 2025 ·
Попробовав делать простые рогалики, где прогресс сбрасывался при каждом отдельном забеге, со временем собрал и прототип игры, более похожей на Diablo не только выбранной перспективой, но и механиками.
  1. [​IMG]

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

    Здесь я рассказываю основные моменты и показываю процесс в видеоформате:



    Запустить прототип в браузере или скачать версии для windows/linux можно на этой странице:

    Панделирий | Pandelirium by NoNsense


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

    [​IMG]
    Уровень в редакторе движка

    Предметы в инвентаре занимают 1 ячейку. В одном из прочих прототипов я делал систему "органического инвентаря" - где предметы нужно было определённым образом "упаковывать". Нечто переходное между системой 1 предмет = 1 ячейка и системой "а ля Diablo", где 1 предмет = несколько ячеек.

    Подробнее о предыдущем рогалике ( проект Сферамида, плюс упоминается более ранний - Chaosborn ) рассказываю в этом видео:



    Маленькие бутылки здоровья и маны, помимо восстановления какого-то количества ресурса, добавляют шкале и некоторое количество концентрации , которая убывает со временем, как это было в Сферамиде. В то же время видов бутылок здесь меньше - 4 вида, против 6 в сферическом прототипе. В наиболее раннем, Chaosborn, были просто 1 бутылка здоровья и 1 бутылка маны, а концентрации не было.

    Большие бутылки просто дают количество ресурса, больше чем маленькие, но не дают концентрации. Концентрация отмечена маленькими яркими полосками рядом со шкалами, а также влияет на их цвет (снижая или увеличивая насыщенность). Маленькие бутылки добавляют треть к уровню концентрации, который со временем убывает. При уровне концентрации ниже 1/3 бутылки восполняют здоровье с задержкой, от 1/3 до 2/3 - стандартно, выше 2/3 - происходит регенерация ресурса, пока концентрация не понизится до среднего диапазона.

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

    [​IMG]
    Слева от здоровья полоска концентрации пока средняя и сейчас упадёт ниже, само здоровье при этом станет серым, а использование большой бутылки восполнит здоровье не сразу. Справа от маны концентрация максимальная, три деления, мана регенерирует.

    В первых рогаликах все параметры предмета определял номер его картинки (позиция в общем атласе). А здесь во все предметы зашит массив параметров, то есть они могут иметь различную редкость и свойства при одной и той же картинке. Самих картинок предметов не так много, они хранятся в общем атласе 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]
    Персонаж выучил руну М (Е - доступна на старте), О - встроена в текущий посох. Наведя курсор на другое такое же оружие, видим, что оно пока ещё не идентифицировано (надо 3 искры) и показан прогресс изучения руны О (надо ещё 8 искр, чтобы изучить её)

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

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

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

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

    Если нажать на портрет персонажа, то вылезает список параметров, которые сейчас ни на что не влияют - первичные (Ловкость, Сила, Разум, Интуиция) и производные/вторичные (вроде силы заклинаний, разных защит). Собственно, полноценным образом все эти параметры использовались в настольно-ролевой системе, а в ПК-прототипе не всё из этого нужно, но взяты и намечены те, что могут пригодиться.

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

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

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

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

    [​IMG]
    Монстры и кувшины в своём слое, отдельно от уровня

    При переходе на другой уровень, допустим, второй - сцена первого уровня удаляется и загружается сцена нового уровня. Текущий слой с монстрами не удаляется, но отсоединяется от родительской ветки и вместо него к ней присоединяется другой (соответствующий новому уровню), который мы словно достаём из стазиса.

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

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

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

    Элементы уровня
    [​IMG]
    Фрагмент с колоннами

    [​IMG]
    "улолок"

    Под основную архитектуру уровня базово выделена одна текстура, атлас, включающий в себя рисунок пола, колонн и прочих элементов. Самих стилей два - новый, с рисованными текстурами (на первом уровне, например) и старый, с текстурой более "реалистичного" вида. По идее, каждые 2-3 этажа стиль уровня желательно менять на следующий.

    [​IMG]
    Один из текстурных атласов

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

    [​IMG]
    Сборка "паззла" в редакторе

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

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

    Используемые инструменты
    Не только для конкретно этого проекта, а в целом что касается 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)

    [​IMG]
    Метки:
    Leiji, Octohum, Gamerun и 2 другим нравится это.

Последние отзывы

  1. manufactori_2k
    "Обязательно поиграю"
    5/5, 5 из 5, оставлен 18 сен 2025
    А сегодня пробую делать наработку элемент 4х - управление одной планетой
    thenonsense нравится это.

Комментарии

Чтобы оставить комментарий просто зарегистрируйтесь и станьте участником!
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление