Hunter or Victim - это мультиплеерная карта для Warcraft 3 соединившая в себе жанры стелс и выживания.
Огромный процедурно генерируемый мир сделает каждое ваше путешествие уникальным.
Используйте мастерство скрытности и навыки выживания, что бы устранить соперников или объедините усилия для победы над Древним Злом.
99 24 720
2
25
2 дня назад
2
Последние новости!

Изменения
Добавил соединения стен между областями.
Это придаст вариативности фигурам.
Теперь строка описывает весь замок вот так:
C0A0аC0A0D1B1бD1C1C2A2D3C3баC2A2D3B3
буквы в нижнем регистре указывают на то что эти точки могут быть соеденены для создания стен между областями.

Думаю на этом остановлюсь и буду переносить на jass.
0
17
3 недели назад
0
Jack-of-shadow, Да не надо переделывать, скинь как есть, кому очень надо - разберётся и под себя переделает или попросит кого )
Просто добавь в архив txt файл с описанием ньюансов, вроде невыделяемого материала или анимаций, и ок.
0
25
3 недели назад
Отредактирован Jack-of-shadow
0
EugeAl, Декор делался специально для карты. И в нем есть много нюансов. Он использует "не выделяемый" материал (это нужно для шифт системы) и использует анимации для переключения вариаций. Также 60% декора в игре спавнится как спецэффекты (по этому имеют спецификации для наклонов и прочего). Из модели из коробки будут неюзабельны для других проектов.

На самом деле много кто просил декор. Если кто то займется я могу расшарить сами модели для переделки, потому что сам я врятле до этого доберусь.
0
17
3 недели назад
0
Jack-of-shadow, у твоего проекта классные ассеты, особенно деревья и декор, судя по обзорам и скринам. Не планируешь ли выложить пак моделей из карты для использования?
0
25
3 недели назад
Отредактирован Jack-of-shadow
0
Последние новости!

Update 1.03c Eng

Translation of the Map into English.
• Version 1.03c Eng
3
25
4 недели назад
Отредактирован Jack-of-shadow
3
Последние новости!
Понял что для ИИ и эвентов мне понадобятся не только стены но и области.
По этому изменил подход к генерации.

Теперь стены генерируются по форме которую образуют расставленные области.

На выходе получаем 2 строки такого вида:
Форма стен:
D0B0A1B0D3C3D0D0B1C2C1A1C0A0D1C1A
Области города:
24+6+12-16+8-24+8-12+2-12+26+6-10-20+26+

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


Работает примерно так:

Логика для редактора


• 1.Ищем все связанные с выбранным объектом области.
• 2.Проходимся по клеткам найденных областей и создаем таблицу.
Клеткам на углах области присваиваем значение 3, остальным 1, при пересечении областей складываем сумму.
• 3.Строим путь.
Начинаем от первой клетки, проверяем шаг влево, вправо, вверх и вниз и двигаемся вперед.
0 и 2 это пересечение областей либо не размеченная область.
1,3,6 можно сделать шаг.
Сохраняем полученный путь Линия (A,B,C,D) + Поворот (0,1,2,3):
Пример пути: B0D3C3D0D0B1C2C1A1C0A0D1C1A2A1B2
• 4.Сохраняем координаты областей MinX+MinY+MaxX+MaxY:
Пример областей: 24+6+12-16+8-24+8-12+2-12+26+6-10-20+26+1
Для экономии сохраняются координаты деленные на 192.

Логика для генератора

• 1.Спавним области читая строку CityRect
• 2.Спавним постройки по областям.
Если размер области позволяет то будем спавнить дома.
Находим большую сторону области и относительно нее указываем направление для линии домов.
Рандомайзим длину линии.
Двигаемся вперед с шагом 192 и спавним дом (или палатки или тенты) или два дома влево вправо, либо делаем пропуск.
Спавним со сдвигом влево или вправо забор.
Спавним со сдвигом влево или вправо фонари бочки или другие пропсы.

• 3.Спавним стены читая CityWalls.
Спавним ассет стены (с условиями: тип стены, тип крыши, тип дверей).
На поворотах башня, на прямой лини стена.
Используем доп. условия. Например можно поставить ворота?, какой тип крыши? итд.
К каждой стене снаружи и внутри может быть заспанен пропс.
У пропров есть параметры:
шанс спавна, шанс на повторение в следующем блоке стены, особый поворот или офсет и прочие.
0
37
1 месяц назад
Отредактирован ScorpioT1000
0
Jack-of-shadow, подумай про сериализацию во вложенный массив/объекты. Всегда полезно иметь возможность воссоздать весь уровень с нуля по нему без рандома, для тех же сохранений или чтоб раздать игрокам его с сервера по сети. Рандом лучше на первых стадиях генерации использовать
0
17
1 месяц назад
0
Честно говоря хотелось бы более подробное описание генератора, в плане логики генерирования, это самая интересная часть
0
25
2 месяца назад
Отредактирован Jack-of-shadow
0
Alan_Gu,
Хотелось бы. Объем работ слишком велик. Разве что если нейронки запрячь.

ScorpioT1000,
Если бы я доковырял UE тулзу для понятного и удобного общего пользовния то был бы смысл)

А так, сейчас генератор разбит на 2 части:
Часть первая (тулзлы и кнопочки):
  1. Создать линию из стен в указанном направлении <∧∨> с указанной или рандомной длинной.
  2. Отменить последнию линию.
  3. Очистить генератор.
  4. Пересобрать стены.
  5. Соединить линии между собой.
Сборка сохраняет действия в строку: "D11112222333300а00"

Часть вторая (чтение строки и спавн ассетов).
Тут вся генерация. Рандомизируются типы стен,крыш ворот и пропсов/домов прилегающих к стенам.

Следующий этап слегка прибраться в нодах и повторить генеративную часть на jass.
В итоге разные типы замков будут описаны примерно вот так:
раскрыть
 void SpawnCityType(int sity_type) {
 if      sity_type == 1 {                    //Пресет города 1
  CastleWall          ("D11112222333300а00") //Повороты стен и доп инфа
  CastleBuildingsLine (1,0,"8")              //Линии домов (x,y,длинна)
  CastleBuildingsLine (3,0,"5")
  CastleBuildingsLine (5,0,"5")
 }elseif sity_type == 2 {
  CastleWall          ("D11223300")
  CastleBuildingsLine (1,0,"5")
  CastleBuildingsLine (2,0,"5")
  CastleBuildingsLine (3,0,"5")
 }