Все посты %s в %S - AMK Team
Перейти к контенту

Zones Editor


Malandrinus

Рекомендуемые сообщения

Zones Editor

 

ссылка

 

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

 

Особая благодарность amik-у за неоценимую помощь с партиклами!

 

Версия игры ТЧ 1.0006

Для работы нужна последняя версия xrGame.dll из проекта X-Ray extensions. Пропатченного файла в проекте нет и не будет, но со страницы скачивания проекта можно взять комплект для патча.

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

В комплекте также прилагается версия библиотеки для работы с нетпакетами за авторством xStream (файл xs_netpk_545.script). Не пытайтесь её обновлять! Последняя версия не годится, надо использовать именно ту старую, что идёт в архиве.

 

 

Работа во многом полагается на колбеки на нажатия клавиш, введённые с новой xrgame.dll. Главное окно вызывается и закрывается нажатием ENTER. Сверху категории объёктов, для фильтрации списка всех доступных объектов. В основном это разные классы объектов. Там есть одна особенная категория "saved zones". Это специальный рестриктор с секцией "zone_editor_restrictor", в котором можно сохранить результаты редактирования.

Ниже окна фильтров два окна: слева список объектов, соответствующих фильтру, справа - редактор составного шейпа. Слева выбираете в списке объект, справа появляется список его шейпов.

Общие операции: показать/скрыть все элементарные шейпы, добавить новый бокс/сферу (в базовой точке [0,0,0] с размерами 1 игровой метр).

Остальные операции выполняются на редакторе каждого конкретного элементарного шейпа. Галка show включает отображения шейпа партиклами, а размеры и цвет частиц выбираются из списка там же. Галка edit включает интерактивный режим редактирования данного шейпа (клавишами).

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

Можно установить всё вручную и нажать set. Можно обнулить вращение, используя align, можно удалить данный шейп с помощью del и клонировать его с помощью clone. Можно также перейти в интерактивный режим и редактировать указанные выше компоненты с помощью кнопок на цифровой клавиатуре: 79 46 58. Просто нажатие меняет смещение, с зажатым left alt - вращает, с зажатым right alt - меняет размеры.

Можно сохранить то, что вы редактируете в специальном рестрикторе (кнопка save). Только не забудьте сохранить игру, чтобы это не пропало. К сожалению, имя задавать нельзя, так что придётся потом искать последний сохранённый в списке. Можно экспортировать отредактированный составной шейп в текстовом виде (кнопка export). Экспорт выполняется в лог игры. Оттуда его надо вставить копипастой в all.spawn.

 

Изменено пользователем malandrinus
  • Нравится 2
  • Полезно 2

Поделиться этим сообщением


Ссылка на сообщение

Шапку обновил. Новая ссылка с добавленными парой полезных для адаптации файлов. Новое видео с примером работы с составным шейпом. Также дано краткое описание работы.

Изменено пользователем malandrinus

Поделиться этим сообщением


Ссылка на сообщение

*Shoker*,

Вопрос: правленный DLL нужен тока для отлова нажатий клавишь?

Там ещё пара функций для работы с векторами/матрицами. В частности умножения вектора на матрицу. Можно конечно скриптами имитировать, но это отдельный геморрой.

 

Сяк,

[error]Arguments : LUA error: ...g\s.t.a.l.k.e.r\gamedata\scripts\ogse_signals.script:174: attempt to call global 'check_module' (a nil value)

Недовложено?

В фале _g.script

local fs = getFS()
function check_module(module_name)
    local script_name = fs:update_path("$game_scripts$", module_name..".script")
    local res, err = loadfile(script_name)
    if res then
        log1("module: '"..script_name.."' is correct")
    else
        log1("module: "..script_name.."\nerror: "..err)
    end
    return res, err
end

 

И папка configs названа - случайно?

Именовал вручную, мог и ошибиться.

 

К сожалению, сделано исходно под мою сборку OGSE, и я уже сам не помню, что от чего зависит. Мог и ещё что-то забыть, так что придётся так постепенно с вашей помощью делать адаптацию под чистую игру. Кстати, менеджер сигналов там в общем-то не сильно и нужен. При желании можно прописать все вызовы прямо из биндера актора. Их там всего четыре штуки кажется.

 

Была идея для интерактивного режима сделать отдельное окошко с кнопками операций вращения/размеров/смещения, но на это уже сил не хватило.

Поделиться этим сообщением


Ссылка на сообщение

подправил

http://rghost.net/36172916

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

Обращаю внимание на косяк в файле bind_stalker ещё с оригинала. В конце нестандартные комментарии, после них код не распознаётся.

 

Добавлено через 33 мин.:

Вот ещё вспомнил, зачем там используется изменённая xrgame.dll. Там из объекта получается его матрица трансформации с помощью чтения числа по смещению от адреса. Это особенно важно для объектов, которые повёрнуты от исходного положения, а таких может быть немало. Без этой функции я не знаю, как получить этот поворот. Может и можно чистыми скриптами, но разбираться по любому лениво.

 

Добавлено через 7 мин.:

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

 

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

Поделиться этим сообщением


Ссылка на сообщение

Shoker,
требует. Можно оттуда убрать колбеки и сделать вызов общего интерфейса не по клавише, а как-то иначе, однако всё равно остаются функции, используемые для получения данных из объектов. Признаться, уже не помню что и где там используется.

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

Поделиться этим сообщением


Ссылка на сообщение

@Artos,
get_go_float нужен для получения XFORM объекта, или иными словами его матрицы трансформации. В большинстве случаев можно было бы обойтись без этого и использовать только смещение объекта, которое можно узнать штатными средствами (функция position). В целом нет никакой нужды поворачивать объект зоны, поскольку можно крутить как хочешь отдельные шейпы, но иногда таки повёрнута вся зона, а положение шейпа высчитывается в локальных координатах объекта и для получения финальной формы и положения шейпа нужно знать поворот всей зоны. К сожалению, такое бывает, как я убедился на практике. Не так уж часто, но вполне случается.
Ну а матрица имеет 16 значений, которые получаются по смещению от нуля до 15 от базовой позиции внутри объекта.

mul_43 умножает две матрицы не почленно, а матричным умножением, т.е. переводит вторую матрицу в систему координат, заданную первой.

Я сейчас глянул скрипты. Я там, как выясняется, поставил заглушки на случай отсутствия этих функций. Без mul_43 вполне можно и так работать, там просто будет вычислять скриптами, делая ровно тоже самое. Просто будет немного медленней работать. Ну а с получением матрицы трансформации ничего поделать не могу. Если нет, то будет использоваться предположение о невращении объекта. В ряде случаев это будет давать некорректный результат.

 

Да кстати, поскольку трансформация сдвига в игре не используется, то можно восстановить матрицу трансформации на основе позиции и вектора поворота (direction т.е.). Надо будет как-нибудь сделать.

Изменено пользователем malandrinus
  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

@Artos, насчёт возможности восстановить матрицу трансформации по направлению я вообще говоря был неправ. Этой информации недостаточно, поскольку направление - это одна ось координат, а нужно две. Вот если есть поле серверного объекта angle, то тогда можно. Поскольку там углы поворота, и по ним уже можно восстанавливать матрицу поворота (это центральная часть 3х3 всей матрицы трансформации). К сожалению, это поле есть только в ЗП (и может в ЧН), но не в ТЧ.

 

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

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...