Перейти к содержанию

OpenMW или мечты иногда сбываются


MEZON

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

Официальный сайт OpenMW
Страница загрузки
Ссылка на загрузку актуального билда для Win64 (обновляется ежедневно)
 
Баг-трекер

Wiki

Список задач до релиза 1.0

Репозиторий с исходным кодом на GitLab

Discord: OpenMW (в наличии русскоязычный канал)
IRC: #openmw на irc.freenode.net

Полезные ссылки:
Реестр популярных модов для OpenMW с гайдами по установке
Руководство по портированию ретекстуров в OpenMW
OpenMW на Youtube
OpenMW на GitLab
Диздоки планов развития после 1.0
 
Сторонние проекты, основанные на OpenMW:
TES3MP - реализация мультиплеера для OpenMW.

Тема OpenMW на 4PDA - здесь можно найти сборки OpenMW для Android 5+ и гайды по решению проблем.

OpenMW для VR - основан на OpenXR, готовые сборки (устаревшие) есть только для Windows.

Порт на Switch - к сожалению, в настоящее время им никто не занимается.

Что такое OpenMW?

 

OpenMW - это попытка воссоздать игровой движок для популярной RPG TES3 Morrowind, полноценную реализацию всех особенностей игры с открытым исходным кодом. Для того, чтобы вы имели более полное представление о проекте, вот ключевые особенности OpenMW:

  • Кроссплатформенность - запуск на Windows (7 или новее), Linux, MacOS X, Android (платформы x86 не поддерживаются).
  • Виртуальная файловая система, позволяющая устанавливать моды в отдельные директории, а не засорять Data Files.
  • Поддержка сжатых BSA-архивов для экономии места на диске.
  • Исправление ошибок системного проектирования: "грязные" GMST записи в плагинах, проблема "удвоения" в сейвах, лимит на 255 плагинов и т.д.
  • Улучшенный поиск пути - с помощью статического или динамического (на выбор) построения навигационной сетки на основе геометрии локаций (вместо использования вручную расставленных дизайнерами локаций маркеров).
  • Улучшение интерфейса (поддержка TrueType-шрифтов, масштабирования интерфейса и миникарты, поддержка текстур высокого разрешения для элементов интерфейса, редактирования разметки интерфейса с помощью XML-файлов, клавиатурной навигации, поворота камеры с помощью гироскопов и т.д.).
  • Улучшение графики (поддержка шейдеров постобработки, динамические тени от объектов, Distant Land (хоть и без генератора LOD-ов), анимированная трава, шейдер воды с поддержкой отражений в реальном времени, улучшенная система освещения без лимита в 8 источников света на объект, улучшенная система тумана и многое другое).
  • Улучшенная поддержка анимаций (возможность использовать отдельные файлы для отдельных групп анимаций, возможность добавлять кастомные кости в скелеты, возможность задать новые анимации для топоров, булав и кинжалов, поддержка анимаций открытия-закрытия контейнеров).
  • Начальная поддержка Lua-скриптов для расширения возможностей плагиностроения.
  • Поддержка ICU для локализации Lua-скриптов, шейдеров постобработки и элементов интерфейса.
  • Использование дополнительных ядер процессора для фоновых задач (например, для предварительной загрузки локаций для бесшовного перемещения по игровому миру или для обработки коллизий объектов).
  • Отсутствие лимита 4Гб на адресуемую процессом игры память из-за поддержки 64-битных архитектур.
  • Намного меньшее количество вылетов в сравнении с оригинальным движком.
  • Возможность модификации движка под свои нужды (например, довольно популярен TES3MP - форк OpenMW с поддержкой мультиплеера).

OpenMW выпущен под лицензией GPLv3, весь исходный код написан с нуля.

Нужен ли оригинальный Morrowind для OpenMW?

И да, и нет.

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

НЕТ. OpenMW - самостоятельный игровой движок. Он может быть базой для тотальных конверсий, не использующих файлы Morrowind. В качестве примеров можно привести Robowind Construct и StarWind.

Каково текущее состояние проекта?

Статус

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

Какие технологии вы используете?

OpenMW построен с использованием различных библиотек и инструментов с открытым исходным кодом:

  • Языки программирования: C++ (стандарт C++17 с частичной поддержкой C++20), GLSL, Lua
  • Графика: OpenSceneGraph
  • Физика: Bullet
  • Звук: OpenAL
  • Ввод-вывод: SDL2
  • Интерфейс: MyGUI
  • Поиск пути для ИИ: Recast & Detour

 
Я не программист, как я могу помочь проекту?

 

1. Можно просто играть и отсылать багрепорты

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

3. Можно тестировать моды. Основная цель - выявить проблемы с совместимостью.

4. Можно исследовать механики оригинального движка, особенно актуально в области тонкостей работы скриптов.

5. Можно обновлять Wiki.

6. PR тоже не помешает, особенно если он позволит привлечь тестировщиков и плагиностроителей.

7. Можно донатить разработчикам на Patreon'е:

  • psi29 — проджект лид, поможете закрыть траты на хостинг
  • Capostrophic — тысяча и один фикс + вагон фич
  • AnyOldName3 — тени в OpenMW
  • David Cernat — работа над TES3MP
Изменено пользователем akortunov
Ссылка на комментарий
Поделиться на другие сайты

  • 9 месяцев спустя...
  • Ответов 3.1 тыс
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

UnPinned posts
По сути мы видим один поток загружен на полную

 

Да физику надо в отдельный поток выносить, желательно в несколько (тяжеловат все-таки Bullet). Это из-за нее FPS проседает в локациях с кучей объектов, например, в больших городах в Tamriel Rebuild.

Ссылка на комментарий
Поделиться на другие сайты

Кортунов:

  • ИИ не будет кастовать заклинания "на цель" под водой, так как это бессмысленно
  • ИИ научились использовать ключи для открывания дверей, как в оригинальном движке
  • При открывании двери неписем будет проигрываться звук открытия
  • Приветствия теперь отдельный от обычных ответов на топики тип записи диалога
  • Между топиком и текстом ответа на него в главной части окна диалога не будет пустой линии

psi29a:

  • Собственно вторая попытка перевода OpenMW на C++11.
  • Вместо многих функций Boost теперь используются новые в стандартной библиотеке плюсов. От Boost пока совсем избавиться невозможно из-за его незаменимых функций доступа к файловой системе, но может, что-нибудь на этот счёт придумают.

Nialsy:

  • Флаг GoToJail при загрузке сбрасывается на "нет", так что при быстрой загрузке в меню диалога с арестовавшим игрока стражником персонаж не будет вынужден отправляться в тюрьму

Siimacore:

  • Сообщение "невозможно найти местоположение файлов данных" не будет повторяться

Антон Урамер (?) пытался ввести более адекватный генератор случайных чисел и возможность парсинга else if как elseif, но Зини его попытки отвергает.

 

правка: одного человека забыл

Изменено пользователем Capostrophic
Ссылка на комментарий
Поделиться на другие сайты

Приветствия теперь отдельный от обычных ответов на топики тип записи диалога

 

Здесь имеется в виду то, что перед ответами нужно добавлять пустую строку, а перед приветствиями - нет (например, если вызвана команда ForceGreeting).

Ссылка на комментарий
Поделиться на другие сайты

Из новостей: OpenMW теперь поддерживает стандарт C++11.

Есть сборки уже? Там вроде какие-то оптимизации автоматом чисто от компиляции на этом стандарте включаются. Убей, не вспомню. Интересно проверить, собирать лень)

Ссылка на комментарий
Поделиться на другие сайты

 

 

Здесь имеется в виду то, что перед ответами нужно добавлять пустую строку, а перед приветствиями - нет (например, если вызвана команда ForceGreeting).

Спасибо за вашу работу!
Ссылка на комментарий
Поделиться на другие сайты

Allofich довёл до ума один из своих пулл реквестов и тот был объединён с главным репозиторием: теперь атакованный стражник не будет сразу требовать платы кровью с протагониста, а попробует его арестовать.

Allofich планирует довести до ума и другие свои пулл реквесты, но пока продолжает активно трудиться над Daggerfall Unity.

 

Обновление: очередные изменения ИИ от Андрея:

  • ИИ не будет использовать оружие дальнего боя, если находится под водой или если рейтинг лучших стрел/болтов равен нулю для луков/арбалетов соответственно
  • ИИ будет принимать во внимание сопротивление нормальному оружию у даэдра/призрака и бонус к урону серебром по вервольфам
  • Приоритетная цель в бою у ИИ будет зависеть не только от расстояния к противникам

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

Изменено пользователем Capostrophic
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

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

scrawl: теперь будут обрабатываться не только текстовые флаги NCO и NCC в качестве указывающих на отсутствие коллизий, но и любые такие флаги с маской NC*: это обнаружил Greatness7.

Allofich: актёры будут продолжать путь к местам, к которым шли, после прекращения боя, как в оригинальном движке.

Джордан Айерс: при восстановлении товаров у торговцев будет игнорироваться то, что ГГ продал им камни душ с душами, и продаваться будут вновь пустые камни душ.

 

0.42.0 всё ещё задерживается, а к тому же у Олоффсона (сборщика под винду) кончилось место на диске и найтли и любые релизные сборки не будут собраны, пока он не сможет вернуться к этому компьютеру. Шутят, что такими темпами лучше сразу будет 0.43.0 выпускать.

Ссылка на комментарий
Поделиться на другие сайты

scrawl:

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

Кортунов

  • Пустые записи в дневнике теперь не будут отображаться.

Ссылка на комментарий
Поделиться на другие сайты

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

CYyYDoKWsAAhfxx.jpg

Ссылка на комментарий
Поделиться на другие сайты

исправлен вылет при ударе по персонажу игрока с дефолтными причёской и головой

 

Если по-человечески:

1) У персонажей в OpenMW есть ссылка на локацию, в которой они находятся.

2) Если при выборе расы, пола, головы и прически оставить значения по умолчанию, то для персонажа игрока она не задавалась (считалось, что виджет ничего не поменял и ничего рассчитывать не нужно).

3) Если персонаж что-то говорит (например, стон при ударе), идет проверка - если персонаж под водой, то звук надо исказить.

4) Так как при этой проверке задействована локация (уровень воды в ней), а ссылка на нее не задана, игра вылетала.

Изменено пользователем akortunov
Ссылка на комментарий
Поделиться на другие сайты

Товарищи, нужен ваш совет.

Как известно, в OpenMW боевой ИИ не проверяет, что в области действия заклинания (типа Огненный шар или Искра) есть дружественные существа.

Это легко проверить в Гильдии Магов Балморы: атакуйте кого-нибудь, и Гальбедир умножит на ноль все население локации с помощью свитков.

В Морровинде подобная проблема тоже есть.

 

Соответственно, вопрос: как разруливать подобные ситуации? Интересует логика, без технических подробностей.

 

Сейчас боевая логика в OpenMW очень простая:

1) Выбираем ближайшую цель

2) Оцениваем все возможные действия применительно к этой цели

3) Выполняем действие с наивысшей оценкой

Причем учитывается только влияние на выбранную цель.

 

Более-менее рабочий вариант оценки заклинания, бьющего по площади:

1) Получаем список существ в области действия (центр - выбранная цель).

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

Т.е. ИИ будет бить, если предполагаемый сопутствующий ущерб будет меньше предполагаемого ущерба противнику.

 

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

 

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

Т.е. ИИ тупо не будет бить по площадям в свалке, когда можно задеть своих.

 

Есть ли какие-нибудь идеи, предложения?

Изменено пользователем akortunov
Ссылка на комментарий
Поделиться на другие сайты

Товарищи, нужен ваш совет.

Как известно, в OpenMW боевой ИИ не проверяет, что в области действия заклинания (типа Огненный шар или Искра) есть дружественные существа.

Это легко проверить в Гильдии Магов Балморы: атакуйте кого-нибудь, и Гальбедир умножит на ноль все население локации с помощью свитков.

В Морровинде подобная проблема тоже есть.

 

Соответственно, вопрос: как разруливать подобные ситуации? Интересует логика, без технических подробностей.

 

Сейчас боевая логика в OpenMW очень простая:

1) Выбираем ближайшую цель

2) Оцениваем все возможные действия применительно к этой цели

3) Выполняем действие с наивысшей оценкой

Причем учитывается только влияние на выбранную цель.

 

Более-менее рабочий вариант оценки заклинания, бьющего по площади:

1) Получаем список существ в области действия (центр - выбранная цель).

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

Т.е. ИИ будет бить, если предполагаемый сопутствующий ущерб будет меньше предполагаемого ущерба противнику.

 

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

 

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

Т.е. ИИ тупо не будет бить по площадям в свалке, когда можно задеть своих.

 

Есть ли какие-нибудь идеи, предложения?

ИМХО, оба варианта кому-то да не понравятся. Я б ввел флаг типа "расширенная боевая логика ИИ" в опции и позволил игроку выбирать самому, какую логику он предпочтет - примерно как было, или поболе здравого смысла от противников.

Ссылка на комментарий
Поделиться на другие сайты

Предлагаю пока вообще юзать заклинания без радиуса действия.

А потом уже можно будет коллективно работать над оптимизацией ИИ)

Предполагаю, что без анализа всех существ в зоне битвы все равно потом не обойтись никак..

 

Сейчас можно вести список атакующих врагов. Пока он 1 - тупо его и атаковать без радиуса, а когда их более 1 - атаковать более сильного

Ссылка на комментарий
Поделиться на другие сайты

Товарищи, нужен ваш совет.

Как известно, в OpenMW боевой ИИ не проверяет, что в области действия заклинания (типа Огненный шар или Искра) есть дружественные существа.

Это легко проверить в Гильдии Магов Балморы: атакуйте кого-нибудь, и Гальбедир умножит на ноль все население локации с помощью свитков.

В Морровинде подобная проблема тоже есть.

 

Соответственно, вопрос: как разруливать подобные ситуации? Интересует логика, без технических подробностей.

 

Сейчас боевая логика в OpenMW очень простая:

1) Выбираем ближайшую цель

2) Оцениваем все возможные действия применительно к этой цели

3) Выполняем действие с наивысшей оценкой

Причем учитывается только влияние на выбранную цель.

 

Более-менее рабочий вариант оценки заклинания, бьющего по площади:

1) Получаем список существ в области действия (центр - выбранная цель).

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

Т.е. ИИ будет бить, если предполагаемый сопутствующий ущерб будет меньше предполагаемого ущерба противнику.

 

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

 

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

Т.е. ИИ тупо не будет бить по площадям в свалке, когда можно задеть своих.

 

Есть ли какие-нибудь идеи, предложения?

Второй вариант вполне адекватен. Вопрос в том, кого ИИ будет считать своими?
Ссылка на комментарий
Поделиться на другие сайты

Товарищи, нужен ваш совет.

Как известно, в OpenMW боевой ИИ не проверяет, что в области действия заклинания (типа Огненный шар или Искра) есть дружественные существа.

В Морроувинде ИИ умел бросать заклинания с упреждением. Можно ведь прикрепить это упреждение и для проверки на своих в зоне действия. Или это лишние вычисления?

Изменено пользователем Муурн Шепард
Ссылка на комментарий
Поделиться на другие сайты

Вопрос в том, кого ИИ будет считать своими?

 

В текущей реализации - тех, на кого у колдующего нет пакета AiCombat. По идее, такой пакет есть на каждого противника в зоне видимости.

Ссылка на комментарий
Поделиться на другие сайты

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

А то, что Гальбедир сильна в магии, но не сильна в тактике - так это не баг, а фича.

тут не то что слово "тактика" не уместна... тут вообще стоит думать о ее вменяемости.

Мне кажется, это баг

Ссылка на комментарий
Поделиться на другие сайты

тут не то что слово "тактика" не уместна... тут вообще стоит думать о ее вменяемости.

Мне кажется, это баг

Не баг, а недосмотр.

Ссылка на комментарий
Поделиться на другие сайты

тут не то что слово "тактика" не уместна... тут вообще стоит думать о ее вменяемости.
А при чём тут вменяемость? Со страху жахнуть чем помощнее - вполне понятный рефлекс. В реальной жизни тебе когда дают гранату - проводят инструктаж по технике безопасности. А в Тамриэле ты придумал какую-нибудь магическую хрень - и пользуешься ей. Ты ж колдун.

Другое дело, что должны появляться стражники и оприходовать уже саму Гальбедир, но в таком месиве уже будет тяжело доказать её вину.

Ссылка на комментарий
Поделиться на другие сайты

Есть ли какие-нибудь идеи, предложения?
Привязать это к интеллекту. Или к уровню. Или к навыку разрушения. Или к формуле, которая все перечисленное, плюс рандом, в себя включать будет.
Ссылка на комментарий
Поделиться на другие сайты

Привязать это к интеллекту. Или к навыку разрушения.

Морровиндские ж параметры, на них нехорошо завязывать.

Ссылка на комментарий
Поделиться на другие сайты

В текущей реализации - тех, на кого у колдующего нет пакета AiCombat. По идее, такой пакет есть на каждого противника в зоне видимости.

Тогда норм. Не идеал АИ, но лучше, чем выпиливание неписями союзников.
А при чём тут вменяемость? Со страху жахнуть чем помощнее - вполне понятный рефлекс. В реальной жизни тебе когда дают гранату - проводят инструктаж по технике безопасности. А в Тамриэле ты придумал какую-нибудь магическую хрень - и пользуешься ей. Ты ж колдун.

Другое дело, что должны появляться стражники и оприходовать уже саму Гальбедир, но в таком месиве уже будет тяжело доказать её вину.

Да хрен с ней, с Гальбедир. Заваливаешься в логово к какому-нить магу. К тебе кидается его охрана, призванный скамп - и тут же дохнут, потому что сзади спеллкастер пару раз лупанул огнем по площади. Ну а ты такой подходишь и топориком его - тюк! Один хрен мана у колдуна уже кончилась :-)
Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

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