Rayel v0.7

Форум для проектов, находящихся на стадии Альфа и Бета. В них ещё не реализована вся задуманная автором функциональность, а значит идёт активная разработка.

Модераторы: Sanja, Максим Кич

Аватара пользователя
Anfeir
Сообщения: 750
Зарегистрирован: 14 дек 2007, 09:29
Контактная информация:

Rayel v0.7

Сообщение Anfeir » 18 июн 2021, 08:00

Update: Демки пока нет; как будет - тут появится ссылка.

Зафиксирую начало разработки.
За последний год было много метаний и перфекционистских поисков лучших вариантов играбельности, в основном в плане устройства мира. Как минимум четыре разных варианта перебрал и даже делал прототипы. Сейчас определился. Окончательный ли вариант? Кто знает... но очень хочу довести задумку до 1.0. Некоторые черты:
- рогалик, более-менее простой и классический;
- оптимизированный под мобилку и PC;
- очень многое будет использовано из предыдущих проектов (всё лучшее, по факту);
- внутренняя структура кода заточена под комфортное добавление большого количества содержимого (уже сделано);
- открытый мир, с небольшими оговорками и решением проблемы пустоты мира;
- полностью рандмная генерация, статические локации и подлокации будут;
- один режим мира, без второго режима путешествия по мини-карте;
- тайлы, для начала — колхозные из проекта agate island nights;
- 4 класса, у каждого три подкласса;
- всякие плюшки-фишки не расписываю, но они будут, конечно, со временем. Хочется ближе к классике, раньше всё время уводило куда-то в сторону. Будет сравнительно большое разнообразие монстров, предметов (с динамическими характеристиками и модификаторами), прочих объектов на карте, ландшафтов, а также заклинаний, навыков, типов атак. Графическое представление налагает определённые ограничения, особенно в моём исполнении (не хочется сильно заморачиваться с графикой). Текстовка тоже будет, но в небольшом объеме;
- ascii режим возможен. Тут два варианта, не знаю, какой лучше: простая замена иконок на буквы с сохранением графических эффектов атак и чисто текстовый (придётся добавлять больше текста). Но не в приоритете.

На данный момент сделано: крупными мазками основные элементы игрового движка. Сейчас буду перетаскивать из других проектов графику, основное игровое поле.
Последний раз редактировалось Anfeir 12 сен 2021, 11:39, всего редактировалось 6 раз.

Аватара пользователя
Xecutor
Мастер
Сообщения: 746
Зарегистрирован: 25 мар 2008, 08:32

Re: Foxmire

Сообщение Xecutor » 18 июн 2021, 11:46

решением проблемы пустоты мира
А можно тут поподробнее? :)

Аватара пользователя
Anfeir
Сообщения: 750
Зарегистрирован: 14 дек 2007, 09:29
Контактная информация:

Re: Foxmire

Сообщение Anfeir » 19 июн 2021, 08:09

Xecutor писал(а):
18 июн 2021, 11:46
решением проблемы пустоты мира
А можно тут поподробнее? :)
Мир разделён на регионы (локации) – прямоугольные плоские области. Например, лес. Выходим из него и плавно попадаем в другой регион – скажем, лесная дорога. Физически этот регион небольшой (ну например 15-20 в длину), но логически, по смыслу это длинная дорога, ведущая, например, в город. Подобные «дорожные» (и не только) регионы могут переплетаться, т.к. между собой они связаны только через «порталы» (визуально незаметные) – ну, как комнаты в первом Rayel. Т.е. принцип декартовых координат соблюдается только в пределах одного региона. Но визуально выглядеть должно всё плавно. Поле видимости строится из региона и всех его соседних регионов, возможно добавятся соседние соседних. Вертикальные же переходы (‘>’, ‘<’) вполне себе традиционные. Ну а дорога через весь континент будет занимать вменяемое количество перемещений. Но всё-таки ненулевое, ведь масштаб какой-то должен быть.

Как-то так ;)

Аватара пользователя
karagy
Сообщения: 1176
Зарегистрирован: 10 янв 2007, 14:13

Re: Foxmire

Сообщение karagy » 20 июн 2021, 20:53

Скрытый текст: ПОКАЗАТЬ
Изображение

Аватара пользователя
Anfeir
Сообщения: 750
Зарегистрирован: 14 дек 2007, 09:29
Контактная информация:

Re: Foxmire

Сообщение Anfeir » 25 июн 2021, 15:12

karagy писал(а):
20 июн 2021, 20:53
Скрытый текст: ПОКАЗАТЬ
Изображение
прикольно

Аватара пользователя
Anfeir
Сообщения: 750
Зарегистрирован: 14 дек 2007, 09:29
Контактная информация:

Re: Foxmire

Сообщение Anfeir » 25 июн 2021, 15:28

Идёт низкоуровневая работа над внутренностями движка. Много всякого, в том числе: простейший вывод карты на экран; основа анимации, плавное движение монстров по экрану. Добавил основу основ AI, простейшее занятие монстра – бродить вокруг. Добавил A*, работающий в т.ч. сквозь «портал». На скриншоте портал тоже присутствует. Добавил speedwalk по клику на удалённую точку с показом пути.
Дальше добавлю FOV, исследование карты и далее – улучшение UI, генерация карты (на скриншоте – хардкод), и т.д.
Скрытый текст: ПОКАЗАТЬ
2.PNG
2.PNG (109.44 КБ) 1059 просмотров

Аватара пользователя
Anfeir
Сообщения: 750
Зарегистрирован: 14 дек 2007, 09:29
Контактная информация:

Re: Foxmire

Сообщение Anfeir » 02 июл 2021, 07:13

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

Аватара пользователя
Anfeir
Сообщения: 750
Зарегистрирован: 14 дек 2007, 09:29
Контактная информация:

Re: Foxmire

Сообщение Anfeir » 09 июл 2021, 12:15

Делаю генерацию мира. Мир состоит из областей (Area), область - из N-ного количества регионов (Region) (плоский равномерный участок карты произвольного размера MxN). Связь регионов внутри одной области тоже рандомная, генерится по разным правилам. Где простой данжн, это будет простая примитивная связка регионов наподобие 1-2-3-4-босс, а есть более отмороженные области, где связь регионов случайна; на север пойдёшь - фиг знает, куда попадёшь, на юг пойдёшь - заблудишься, и т.п. Сами области более-менее определённые, например Тёмный Лес (полностью рандомные области с рандомным названием тоже никто не мешает сделать в будущем). Добираться из пункта А в пункт Б нужно будет немного по-разному при каждом прохождении.

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

Update: ещё в работе :/

Аватара пользователя
Anfeir
Сообщения: 750
Зарегистрирован: 14 дек 2007, 09:29
Контактная информация:

Re: Foxmire

Сообщение Anfeir » 23 июл 2021, 11:02

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

Теперь - генератор непосредственно локации. Он у меня уже есть рабочий - в нескольких вариациях, но ожидает весомая переработка. Да, работать с велосипедами и избавляться от костылей моё всё .)
Щас пишу и думаю, а может, оставить генерацию в неизменном виде, как было в Owlnest, например, отлично же работало. (см. скриншоты). Ладно, погружусь и подумаю получше.
Скрытый текст: ПОКАЗАТЬ
5.jpg
5.jpg (281.57 КБ) 627 просмотров
4.jpg
4.jpg (375.04 КБ) 627 просмотров
3.jpg
3.jpg (333.93 КБ) 627 просмотров
2.jpg
2.jpg (316.77 КБ) 627 просмотров
1.jpg
1.jpg (308.19 КБ) 627 просмотров

Аватара пользователя
karagy
Сообщения: 1176
Зарегистрирован: 10 янв 2007, 14:13

Re: Foxmire

Сообщение karagy » 23 июл 2021, 12:38

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

Аватара пользователя
Anfeir
Сообщения: 750
Зарегистрирован: 14 дек 2007, 09:29
Контактная информация:

Re: Foxmire

Сообщение Anfeir » 23 июл 2021, 14:17

karagy писал(а):
23 июл 2021, 12:38
Предполагается-ли в будущем авто-эксплор?
Возможные пожелания: если авто-эксплор таки будет и если в проекте будут секретки, то желательно что-бы он не находил их сам мимоходом.
Не знаю, будет или нет. Сделать не проблема, вопрос надо ли. Можно и прикрутить, чтоб в скучных местах проще было. Секретки, понятно, стороной. Кроме спрятанных и незаметных ловушек.

Аватара пользователя
Anfeir
Сообщения: 750
Зарегистрирован: 14 дек 2007, 09:29
Контактная информация:

Re: Foxmire

Сообщение Anfeir » 06 авг 2021, 14:35

Всё-таки решил делать так, как запланировал, т.е. перевести старые подходы на новые рельсы...
Получил первый видимый результат генерации локации. Пока примитивный, но с прохождением по всей инфраструктуре генерации. Дальше должно быть попроще: такой психологический момент, много пришлось писать кода без визуальной обратной связи.
Следующие шаги:
- Связать локацию с соседними ощутимым видимым образом, дорабатывать напильником,
- добавить переходы вверх-вниз, а также возможность для локации внутри локации (например, деревня внутри равнины);
- инструмент для быстрого просмотра генерации локации с возможностью перегенерировать,
- добавление объектов на карту.
- Потом - набросок - ходить по всему этому и мочить монстров. Затем более детально вглубь, инвентарь, свойства мостра, временные (и постоянные) эффекты.
????
- Profit (готовый Proof of Concept)

P.S. Время ппц быстро бежит :(
Последний раз редактировалось Anfeir 06 авг 2021, 19:10, всего редактировалось 2 раза.

Аватара пользователя
Anfeir
Сообщения: 750
Зарегистрирован: 14 дек 2007, 09:29
Контактная информация:

Re: Foxmire

Сообщение Anfeir » 06 авг 2021, 14:59

Попутно о некоторых деталях игровой механики. Лирика.
Тайминг
Как и ранее, есть временная ось, каждое событие в мире ставится на неё, и ось постепенно обрабатывается. Одно среднее перемещение занимало условно 100 ячеек оси, т.е. можно было создать объект, который движется в 100 раз быстрее. Разное время cooldown было и у действий. В Rayel 0.1 с этим вообще был зоопарк - действие начинает совершаться, но заканчивается через некоторое время, можно начать пить potion, но не успеть допить. Это было прикольно, но малоиграбельно, имхо, давно от этого отошел.
Сейчас будет бОльший уклон в сторону пошаговости. То есть, есть ход - основная единица продолжительности любого действия - условно, 10 временных единиц. Все атаки, открытия дверей, прочие манипуляции имеют cooldown 10. Не действует это только для перемещений, т.к. здесь подключается скорость монстра. Впрочем, ничто не мешает монстру сделать несколько атак за свой ход. Это сделано для большей тактической предсказуемости. Всё-таки рогалик - вещь визуально пошаговая, и физика должна соответствовать. Например, "вероятность нанести в свой ход повторный удар - 50%" мне теперь нравится больше, чем "время удара - на 3/4 меньше обычного". Посмотрим, как будет в деле, это не принципиальное различие.

Среда обитания (habitat)
Данный механизм отвечает на вопросы: может ли объект (обычно монстр) переместиться в данное место, и если может, то может ли ему за это что-то быть плохое. А также используется для поиска путей. Механизм побитовый, выглядит примерно так:
Скрытый текст: ПОКАЗАТЬ

Код: Выделить всё

enum class HabitatId : habitat_t
{
	None = 0,
	Air = BIT(0),
	Water = BIT(1),
	Fire = BIT(2),
	Electricity = BIT(3),
	Acid = BIT(4),
	Ice = BIT(5),
	Wall = BIT(6),
	Monster = BIT(7),
	Obstacle = BIT(8),
	Swamp = BIT(9),
	Sand = BIT(10),
	Snow = BIT(11),
	Tree = BIT(12),
	LowCeiling = BIT(13),
	Lowland = BIT(14),

	Active = Air | Water | Fire | Acid | Electricity | Swamp, 
	LogicallyImpassable = Wall | Tree | Obstacle | LowCeiling | Monster,
	LogicallyPassable = Air | Sand | Ice,
	BumpUnsupported = LogicallyImpassable | Water,
	BumpAbsent = Air | Water | Wall | Swamp | Sand | Acid | Snow | Electricity,
	All = 65535
};

struct Habitats
{
	Habitat supported;
	Habitat required;
};
у монстра есть supportedHabitats (поддерживаемые среды) и requiredHabitats (необходимые среды)
Например, у человека requiredHabitats будет содержать Air (воздух). Если он попадёт туда, где нет воздуха, то сработает проверка на habitats, выявится "нарушение" и пойдут более детальные проверки. У рыбы, например, required - Water. Но и человек, и рыба могут иметь air и water в supported. (человек - если умеет плавать).
LogicallyImpassable - то, что участвует в механизме перемещения для проверки на столкновение - для типичных "плотных" объектов.
BumpAbsent, например , отвечают за ситуацию, когда в поле отсутствует какой-либо из required habitats. То есть если превратиться в рыбу, то можно Bump о места, где её нет. Bump - это ни к чему не приводящее столкновение (обычно).
При поиске пути монстр предоставляет "passability habitats", т.е. те свойства среды, которые будут учитываться при поиске пути. В каких-то случаях монстр может, например, психануть и побежать напрямик через болото/реку/лаву.
У поля карты тоже есть свой Habitat, который складывается из "родного" habitat и тех объектов, которые находятся в поле (Свойство объекта "inducedHabitat". У монстра, например, inducedHabitat = Monster, у двери = Obstacle)
Побитовые проверки для процессора - раз плюнуть, как 2 + 2 по затратам.
Пока наверно в таком виде и оставлю, по принципу "работает - и ладно".

Аватара пользователя
karagy
Сообщения: 1176
Зарегистрирован: 10 янв 2007, 14:13

Re: Foxmire

Сообщение karagy » 06 авг 2021, 17:57

Anfeir писал(а):
06 авг 2021, 14:59
Тайминг
Как и ранее, есть временная ось, каждое событие в мире ставится на неё, и ось постепенно обрабатывается.
Интересуюсь: вы используете очереди?

Аватара пользователя
Anfeir
Сообщения: 750
Зарегистрирован: 14 дек 2007, 09:29
Контактная информация:

Re: Foxmire

Сообщение Anfeir » 06 авг 2021, 19:02

karagy писал(а):
06 авг 2021, 17:57
Anfeir писал(а):
06 авг 2021, 14:59
Тайминг
Как и ранее, есть временная ось, каждое событие в мире ставится на неё, и ось постепенно обрабатывается.
Интересуюсь: вы используете очереди?
Да, в ячейке временной оси содержимое по сути представляет собой очередь. С разного рода оптимизациями (в обычном случае работы с динамической памятью вообще не происходит), но тем не менее.
Тут, кстати, есть отличие. Сейчас сделал действительно очередь, в предыдущих проектах это была просто куча. Т.е. в одно деление времени если события попадали, но не друг за другом, а как попало (по факту, последний становился первым).

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

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

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость