Chaosborn

Заготовка под рогалик на webgl-движке PlayCanvas.

Chaosborn

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

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

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

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

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

Запустить тест в браузере можно здесь:

Управление: WASD /стрелки - перемещение, пробел - выстрел, Enter - подобрать предмет. На мобильные устройства не рассчитано, но интерфейсные кнопки там тоже работают, а в окне настроек можно включить тач-джойстик, чтобы просто бегать.

44 показа
432432 открытия
9 комментариев

а почему такой выбор движка? 

Ответить

Как минимум - на браузерной платформе проект куда более доступен для публики. Нажал и попробовал, не надо ничего устанавливать.
Если же смотреть по webgl-движкам, то у этого есть выделенное пространство под проекты (то есть не нужно поднимать что-то в интернете дополнительно) и очень неплохой редактор.
А так - при желании я всегда могу перенести эту структуру в другие движки, тот же Godot или Unigine, если захочется чего-то более крупного и уйти от некоторых браузерных ограничений.

Ответить

Побегал тупо на телефоне,да я читал что выше.
Ну так вот,а чего он так медленно и вязко передвигается?
Сколько вы времени на это все потратили?

Ответить

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

Ответить

Круто, а расскажи как ты сделал систему эффектов? Я сейчас все строю на диспетчере событий даже для эффектов которые меняют атрибуты.

Ответить

Смотря, что имеется в виду под эффектами. Взаимодействия с их последствиями?
На большинстве объектов есть скрипт "destructor", который сам по себе ничего не делает в цикле, но к его методу обращаются определённые "попавшие" в этот объект сторонние коллайдеры (выстрелы, игрок). У каждого destructor имеется идентификатор (ID), на основании которого он обрабатывает случившиеся столкновения (в том числе - реагировать на них вобще, или нет), а также может получать дополнительные свойства. Например, если desrtructor висит на существе, то у него появляется запас здоровья. Если на предмете, то координаты иконки этого предмета в текстурном атласе, для дальнейшей передачи в окно инвентаря персонажа и так далее.
Информация не через "столкновения" передаётся либо через то, что объект при инициализации получает ссылку на главный менеджер сцены (который делает большинство задач), в котором может впоследствии поменять/взять данные или как-то воспользоваться её методами (просто вызвать, вызвать с параметром, что-то посчитать). Либо, ещё один вариант - хранить некоторые переменные глобально и в нужном скрипте делать проверки на изменение этого значения (то есть некая самописная альтернатива системе сигналов-делегатов). Естественно, через сигналы и их слушателей тоже можно делать.

Ответить

С таким скрином никто кроме меня и собомжей сюда не заглянет. 

Ответить