Использование моего собственного редактора для эффективного создания тематической карты викингов для моей игры.

В настоящее время я работаю над игрой, для которой требуется несколько разных карт. Ради интереса я хочу иметь разные темы карт с несколькими картами каждой темы. На данный момент есть четыре темы: Lush Mesa, Tropical Island, Desert и теперь Vikings. Наличие разных тем на самом деле не имеет значения для самого игрового процесса, но это делает его более интересным и реиграбельным для игрока, а также делает работу над картами более увлекательной для меня. В последнее время мне очень нравится создавать низкополигональные модели в Blender, и необходимость создавать больше моделей для разных тем является хорошим оправданием и мотивацией для создания большего количества моделей.
Хотя я и хотел бы разместить каждое дерево и камень на карте самостоятельно, на самом деле это невозможно, потому что это заняло бы целую вечность. Тем не менее, я создал свой собственный редактор, в котором есть несколько инструментов, которые помогут мне сделать лучшую карту более эффективной. Я все еще добавляю новые функции в редактор, но даже в его текущем состоянии он очень полезен для создания моих игровых карт.

Создание карты

Первым аспектом каждой новой карты является местность. В настоящее время у меня есть дополнительная программа для создания карт высот, которые я могу затем импортировать в свой редактор, но я собираюсь интегрировать создание карт высот непосредственно в редактор для простоты использования. Когда у меня есть стартовый ландшафт из карты высот, пришло время создать области для игроков. Для этой карты я выбрал простой квадрат 30x30, но они также могут быть больше или иметь другую форму. Затем мне нравится сглаживать края игровых зон и исправлять другие мелкие проблемы на карте высот или даже делать некоторые области более грубыми, чтобы получить более пересеченную местность или более изрезанную береговую линию. После этого есть два шага, которые важны для игрового процесса: отметьте, какие плитки преграждены, и назначьте плитки соответствующим игрокам. Несмотря на то, что на данный момент я использую редактор только для одной игры, у меня всегда была цель использовать его и для других типов игр, поэтому у меня есть очень общая концепция числового слоя, которую я использую. в этом случае для распределения тайлов игрока, но его можно использовать и для всех других функций.
Далее идет текстурирование земли, что очень просто в моем редакторе. Я всегда сравниваю это со строительством выживания в майнкрафте, где вы строите фигуру из одного типа блоков, а затем возвращаетесь и заменяете множество блоков другими типами блоков, чтобы получить более интересный вид. В отличие от майнкрафта, где каждый блок приходится заменять вручную, в моем редакторе есть функция случайного размещения текстур с определенным шансом. Требуется всего пара проходов с разными плитками и разными шансами, чтобы получить приличный базовый вид земли. После этого я вручную наношу еще несколько светлых текстур на некоторые участки карты, в данном случае на остатки снега на самых высоких возвышениях карты.

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

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

Проблемы с редактором

Стоит упомянуть, что мой редактор дважды вылетал во время работы над картой, из-за чего каждый раз я терял немного прогресса. В C++ есть два типа сбоев: плохие и глупые. Плохие сбои происходят из ниоткуда, и вы понятия не имеете, в чем была проблема, где она возникла и как ее исправить. В основном это утечки памяти или повреждения, и их поиск и исправление занимает целую вечность. Второй тип сбоев — глупые, когда вы точно знаете, в чем была проблема. Это происходит в основном потому, что вы забыли добавить простую проверку на ошибку или упустили из виду очевидную проблему, и каждый раз, когда они возникают, вы чувствуете себя «Черт, я тупой», отсюда и название. К счастью или к несчастью, в зависимости от вашей философии, оба сбоя были глупыми.
Первый сбой был обычной ошибкой пользователя. Я хотел открыть другой файл ресурсов, пока думал о чем-то другом, и использовал обычную кнопку загрузки вместо кнопки загрузки файла ресурсов, и редактор запутался и вылетел. Я просто забыл добавить для этого проверку на ошибку.
Второй крах был даже не крахом, он был намного глупее этого. В какой-то момент я добавил немного кода, чтобы полностью переместить окно вверх, когда оно будет вне поля зрения после изменения размера буфера кадра. Однако, когда я реализовал это, я не имел в виду высокие окна, потому что в то время у меня их не было. Но недавно я добавил окно размещения на основе шума, и оно имеет высоту около 800 пикселей, в то время как размер фреймбуфера по умолчанию составляет всего 720 пикселей. И я, должно быть, изменил размер буфера кадра в какой-то момент, что привело к перемещению окна вверх. Итак, теперь у меня было большое окно с его заголовком примерно на 80 пикселей выше верхнего края буфера кадра, и я не мог ни переместить его, ни закрыть. И, к сожалению, это было над строкой меню, где находится кнопка сохранения. Итак, я сидел там с открытым редактором и 10-минутным несохраненным прогрессом и абсолютно не мог сохранить его в течение примерно пяти минут в недоумении, прежде чем мне пришлось закрыть редактор без сохранения. Оглядываясь назад, я действительно должен был реализовать сохранение с помощью CTRL + S в какой-то момент. Почувствовав себя глупо какое-то время, я добавил сохранение CTRL+S, а также добавил еще один фрагмент кода, чтобы заголовок окна никогда не был выше верхнего края.

Первоначально опубликовано на https://pingpoli.de.