Konung of the Northern land
Главная Дневники
концепция
«Структура местности»
14 октября 2006 года

Автор: Dotcent

Часть 1: Фундаментальное предложение

Писание, изложение, «шлифовка» использованных фраз… В этом что-то есть – это интересно в самом процессе. У Маяковского и многих других авторов в дневниках достаточно неплохо описано то, что процесс лексической проработки записанных мыслей занимает более половины потраченного времени, и это действительно так.

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

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

Ещё я выдам моё видение соотношения значимостей РПГ и полноценного мира.

РПГ – способ реализации своего присутствия в созданном в игре мире. И чем выше возможности и видимая самостоятельность окружающего мира, тем лучше. Доказательством этого является широчайшая популярность on-line игр, РПГ которых, по сути, мало отличается от их персональных аналогов.

«Северный край состоит из глобальной карты и множества локаций, а именно - населенных пунктов и прочих мест, где по тем или иным причинам придется побывать героям игры, а так и игроку! На карту мира можно будет попасть двумя способами: 1. В том случае если бой в данный момент не ведется просто нажать на клавишу "М" или на соответствующую кнопку меню интерфейса. Однако, находясь в доме или в пещере на глобальную карту попасть нельзя, для этого нужно сначала вновь вернутся на "чистый воздух"! 2. Достичь "места перехода". В отличие от первого варианта "места перехода" ведут не только на глобальную карту, но и на другие локации. И как было сказано, в разгаре боя перейти на глобальную карту через меню интерфейса не представляется возможным. Чтобы убежать от противника, следует покинуть текущую локацию, достигнув всеми персонажами партии "места перехода"».

Итак, это аван-проект, как он есть в F.A.Q., рассмотрим два варианта его реализации.

Вот, первый вариант.

Сделать так же как и в «Князе 2» или «Златогорье 2». Состоит он в путешествии по карте и загрузке готовой ограниченной локации. Вероятнее всего, его и хотят сделать.

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

Степень готовности игрового движка позволяет сейчас говорить о спорных фундаментальных принципах. Также и это не маловажно (!) в приватном разговоре Мартий обмолвился, что на выбранном ими графическом движке (Power Render 6.0 - прим. ред.) возможно было реализовать местность как в «Князе Тьмы» (Скорее уж как в Morrowind, ибо 3Д - прим. ред.). Поясняю: там была готовая карта, участки которой могли подгружаться по мере передвижения персонажа.

Итак, второй вариант.

Предлагаю вообще не ограничивать местность рамками локации, а подгружать её по мере продвижения игрока. Если подгружаемая часть местности будет связана с картой, то создастся редкое для игр ощущение единого пространства, когда карта станет просто способом быстрее перемещаться по ШИРОЧАЙШЕЙ НЕПРЕРЫВНОЙ местности. Широта такого мира значительно превзойдет огромное пространство «Князя Тьмы», но, если в последнем колоссальный размер местности требовал достаточно нудных путешествий, то возможность пользования картой этот скучный аспект широты купирует.

В отличие от «Князя Тьмы», в котором Разработчики прорисовывали всю цельную местность, ИМХО, при реализации связи с картой можно (нужно) формировать местность почти случайным образом из простейших участков, но формировать с учетом заявленного картой типа местности с учетом побережий, дорог, троп пригородов и сёл. Тогда, например, через 0,5 дня дойти до реки, прогуляться по её берегу,..

Разнообразие может получиться абсолютным! Здесь же ещё один аспект: сколь велик не был бы полностью сформированный мир, если он неизменен, статичен, он всё равно со временем становится тесным. И уж тем более в него не так интересно переигрывать. Не верите? Аддон «Князя Тьмы» ставил в величайшее преимущество «на 30% больший» мир, в то время как мне терпения не хватило пройти всю карту первой части (потратил 50 часов).

А теперь проложу параллельное сравнение этих двух (1) и (2) типов реализаций по пунктам и возможностям.
  1. Степень свободы.

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

    2. Перемещаться можно будет двумя способами. По факту, картой будут пользоваться не меньше, чем в предыдущем варианте, но это уже будет вопрос свободного выбора. И выбор будет обусловлен уже не границами локации, а нежеланием очень долго переться по действительно огромной местности. Местность по ощущениям границы потеряет.

  2. Невозможность на ограниченной локации корректно реализовать преследованный уход. Варианты видел разные. Здесь предполагается самый грубый: при достижении границы локации всеми персонажами происходит благополучный выход на карту (а если у врага скорость лошадиная?). Можно и запретить преследованный выход на карту. Но тогда ещё сильнее почувствуются «стены». А трофеи? Как быть с ними? При неограниченной местности эта проблема напрочь отсутствует. И трофеи сохраняются.

  3. Равенство видимой и доступной местности ограниченной локации сильно купирует ощущение широты мира. Если на ограниченной локации сделать видимую область шире доступной, но проявится даже обратный эффект, когда «хочу дойти, но не могу». Предложенный второй вариант организации позволит сочетать огромную открытую местность с ограничением обзора. И это не уникально: в экшенах размер местности обозримой и той, на которой сохраняются шмотки, отличаются раз в 10 по ширине. Предрасполагаю: при ширине экрана =1 доступная для обозрения местность (экран упирается) составить может размер 3..5. Размер же местности, на которой сохраняется и/или предзаданы ландшафт, количество упырей и не теряются трофеи, может составлять радиусом 10..15 экранов. Упор экрана не сдвинет восприятие в сторону ограничений, потому что всегда можно будет пройти вперёд. Имеющаяся местность двигается вместе с героем, прирастая с одной стороны и убывая с противоположной. Вышедший за пределы трофей будет потерян.
Первые 3 пункта – о непосредственных недостатках. Следующие – о возможностях.
  1. Неограниченность локаций позволяет сделать проходящих персонажей, что дополнит картину полноценного самостоятельного ЖИВОГО мира (вообьще-то станет одной из основ этого). Например, можно сделать проходящий караван, проходящего торговца, которого можно отпустить, а потом, быть может, догнать. Возможно даже создание персонажей, которые подобно сороке, пока герой дерётся, украдут часть трофеев и на большой скорости сбегут. Возможно создавать проходящие стаи волков, диких быков и пр. Убегая от одного врага, можно наткнуться на другого, а можно встретить охраняемый караван и встать под его защиту. Последний случай (встреча каравана) создаст возможность разбойничать. И ещё, и ещё, и ещё много чего, оживляющего и по ощущениям расширяющего мир. Проходящие (подвижные, респавнящиеся и пропадающие) неписи, пожалуй, являются важнейшим фактором в становлении достаточно живого мира и ресурса его развития. И об этом важнейшем предложении я, вероятно, ещё буду писать подробнее.

  2. Готовый алгоритм местности всегда проще адаптировать к графическому движку, нежели создавать заново. Предложенный вариант обладает широчайшими возможностями в отношении изменения игровых факторов. «Старый» метод более статичен и удовлетворяет лишь к ограниченной номенклатуре игровых констант. При этом все возможности «старой» системы есть и в «новой», но не наоборот. Однако это уже вопросы потенциальные и прагматические...

Часть 2: Организация

Итак, структура локации ячеечная. Вперёд всего для непосвященных упрощенно запишу процесс созидания локации, логически интерполированный из оной при создании корабля в "Х2" (не бейте сильно за неточность – здесь описан принцип).

При вылете с карты инициируется процесс заполнения локации, которая, известно, имеет ячеистую структуру. Для неё программа отыскивает файл (в Х2 это а-ля _.txt), в котором записана матрица чисел – по одному для каждой ячейки локации с координатой {х,у}. Каждому числу соответствует какой-то элемент локации, даже просто участок тропы. Так вот, в соответствии с этими числами, пока пользователь видит шкалу загрузки, программа заполняет каждую ячейку плоскости объектами – и voila, мы, после последующей расстановки упырей и прочих активных объектов, выпадаем на природу.

Что здесь очень важно 2 аспекта:
  1. Мы изначально имеем число, характеризующее ячейку местности. При должной организации в это единственное число можно затолкать очень много параметров ячейки (проходимость, скорость прохода, видимость...), в виду чего все лучшие игры местность имеют с ячеистой структурой. Об этом – в другой раз.

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

1 1 1 1 2 0
1 1 1 2 0 0
1 1 1 2 0 0
1 1 2 0 0 0

Такой конгломерат чисел называется матрицей. Если поставить в соответствие двойке участок тропы, единице – участок поля, а нулю – участок леса, то при отрисовке получим тропу вдоль границы леса и поля. Пример очень утрирован – разбиение местности значительно более мелкое (в SpellForce мониторный размер ячейки составляет ~5 мм)

В Князе Тьмы местность была прорисована полностью и имела размерность (возьму от балды – не ошибусь) миллион-на-миллион ячеек. И занимались её отрисовкой (программно – заполнением матрицы местности) в титрах целая группа людей. Знаете, в Конунге желаема местность ещё больше (с возможностью путешествий по карте): если в «Князе Тьмы» её диаметр весил игровые сутки пути, то в Конунге хочу также как в Златогорье «вес» местности, измеряемый неделями пути. Но в праве ли я требовать этого, не обосновав? Нет! Ибо возможности Разрабов сильно фиксированы и даже недостаточны.

Задание:
  1. сформировать гигантскую местность;
  2. сделать местность непрерывной;
  3. сделать местность достаточно просто наполняемой локациями;
  4. сделать местность разнообразной;
  5. вложить в это относительно немного времени;
  6. обеспечить потенциал развития в рамках накопления наработок.
Ясное дело понятно, что:
  1. без генератора местности, как и без специальной организации карты, здеся не обойтись;
  2. нужна модульная структура для упрощения модификаций.
Начнём со структуризации местности. Пусть она будет миллион-на-миллион ячеек. Хотя бы в виду желаемой малоразмерности ячейки. В SpellForce ничтожный размер ячейки привёл к тому, что почти эфемерные признаки дискретизации местности я смог обнаружить только после 15 часов игры - отсюда пожелание, которое очевидно.

Первое приближение – разбиваем всю местность на участки: при ячейке 0,5 см оптимум – 200х200. Тогда получим 2-хуровневую структуру, каждая из которых имеет 200х200 позиций. Второй уровень упростит идентификацию ячеек, значительно сократит их номенклатуру. Сама мод-интерактивная структура – структура с промежуточными *.txt–файлами. Тогда карта будет в сейве иметь папки с обоймой файлов за номерами ХХХХХХ. Первые 3 цифры – номер по горизонтали, последние – по вертикали (или наоборот).

Во главе этого *.txt–файла, к примеру, должна стоять цифра 0 или 1, обозначающие соответственно один из типов содержания. При значении 0 движок обращается к генератору местности, а в файле прописаны условия для этого (об условиях позже). При значении 1 файл представляет собой готовую местность – матрицу 200х200 соответствующих чисел и условия расстановки активных объектов. При этом генератор местности не запускается, а движок приступает к непосредственной визуализации локации.

Впервые посещённый участок генерируется и сохраняется!!!! Т.е. местность фиксирована, но создана не вручную Разрабами. И каждая новая игра может подарить новые пейзажи. Можно также генерировать положение случайных («бонусных») локаций, которых нет в квестах, но на них можно наткнуться.

Тогда:
  1. Мы имеем полностью понятную архитектуру – мечта модостроителей

  2. Мы имеем возможность простой заменой *.txt-файла с номером локации встраивать этих локаций огромное количество (при должной проработке генератора местности).

  3. Разработчики будут иметь сторонний независимый скрипт генерации локаций, который в виду невстроенности в движок можно развивать и развивать, вводя различные условия предсказания и статистики (возможно, позже этот скрипт в его начальной редакции я приведу (в «яблоках» и «кастрюлях»)). И его можно развить даже до построения направленной сети дорог и троп. При этом ограничения – только по фантазии и усердию. Можно даже помимо «0» и «1» в начале файла использовать бОльшую номенклатуру, запуская различные типы генераторов. Ограничений здеся нет!

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

  5. Всё это превзойдёт Князя Тьмы (Sacred), ибо:

    • Огромные просторы игрового мира в Scred'е всегда остается неизменной вне зависимости от действий (или же как вариант полного бездействия) игрока. Глобальные события там также отсутствуют как класс;
    • Генератор случайной местности как нельзя лучше будет способствовать возникновению интереса исследования у игрока при повторном прохождении;
    • Помимо программных достоинств, игрок не будем долго и нудно плестись из одной сюжетной точки в другую через огромные пустые пространства;
    • Повторить подвиг сотрудников ASCARON'а и отрисовать карту такого размера вручную дано не каждому. А потому это можно сделаете при помощи готового скрипта. Задав к примеру: 20% кусты, 50% поле, 10% деревьев, степень консолидации участков – 4,… И местность будет каждый раз неповторимой.
Возвращаясь к нашим баранам, считаю необходимым указать, что и карта местности должна быть 2-хуровневой. Первый уровень – так как отображена карта Златогорья. Низший уровень карты открывается при зажатии ПК мыши на участке большой карты и показывает положение сюжетных локаций, типы местности и прочие вещи. Желательно отображать процесс открытия нижней карты также, как это сделано в «Князе Тьмы» при отображении местности с общей карты зажатием кнопки мыша на её участке(«лучше 1 раз увидеть, чем…»).

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

  2. Во имя визуального упрощения и расширения ощущений безграничности мира. Маленький нюанс. *.txt-файл локации должен иметь фрагмент, отвечающий за отображение названия локации на карте. Название на карте должно всплывать при наведении курсора, но никак не быть впечатанным в карту.
А теперь самое сложное. Локации нужно подгружать. Предложенный размер фрагмента неслучаен: при ширине ячейки 0,5 см получим участок метр-на-метр. Т.е. 3х17” экрана по ширине. Поскольку позиционирование отряда будет определяться позиционированием героя то желательно ограничить разбредание отряда по местности. Простого топорного предельного радиуса вполне хватит. Поверьте мне – поклоннику космических стратегий – что это ни сколько не создаст ощущений ограниченности, а просто будет иметься в виду. ИМХО, радиус в один экран (диаметр – в два) вполне сойдёт.

Так вот, при нахождении героя на местности движок позиционирует его положение относительно верхней структуры и формирует вокруг него 9 блоков местности: 1, на котором он стоит, и по 1 блоку в разные стороны. Т.е. 3х3 блока. При этом размер доступной для просмотра местности составляет всего 2х2 блока (соседние блоки перекрыты в среднем наполовину) и плавно двигается вместе с героем. При достижении границы обозримой местности экран упирается. Это меньше, чем сформированная местность, но в виду уверенности в существовании местности за обзором (сохраняются трофеи) такой подход:
  1. Поддержит ощущение широты пространства. При переходе героя на соседний блок местности с одной стороны блок убывает, с другой – прибывает.

  2. За обзорную местность можно строить по-разному, ведь вся эта «кухня» будет вне просмотра. Необходимо обеспечить задержку, т.к. если часто пересекать границу блоков без задержки в изменении местности, может подавиться проц.
В принципе, в этом направлении можно ещё много чего написать, но это уже детали. Возможности я описал, превосходство, кажется, обосновал и очень надеюсь, что успел, ибо даже в виду достоинств альтернативы надежд на переделку быть не может даже при 5% сделанного. Это уже психология.

P.S. Есть ещё одна очень весомая причина принять предложенную структуру. Вопрос сугубо потенциальный и прагматичный, его сейчас я только коснулся, но не рассмотрел.