NewDark - Субтитры в видеороликах

Автор ViLE, 09 ноября 2012 12:49:33

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

ViLE

Поддержка субтитров в видеороликах для игр Thief, Thief 2 и System Shock 2 на базе неофициального патча NewDark.

Установка
Распаковать содержимое архива в папку с игрой и заменить существующие файлы.

Последняя версия: 2013.06.01

Совместимость: Thief 1/2 - 1.20, 1.21; System Shock 2 - 2.41, 2.42

Изменения (последняя версия):

  • Исправлено неверное определение строк, которые содержат только непечатаемые символы.
  • Для поиска файла с субтитрами используются пути, которые прописаны в install.cfg (параметр movie_path).
  • Обработка событий для субтитров теперь происходит на глобальном уровне, а не только во время декодирования кадра.

Soul_Tear

Хорошо, если так, только у меня страница не доступна.

ViLE

Цитата: Soul_Tear от 09 ноября 2012 13:19:52
Хорошо, если так, только у меня страница не доступна.
Спасибо, исправил.

S.Siamsky

ViLE, потестил сегодня сабы. Большое спасибо, оно работает, хотя, конечно, совсем и не так, как раньше.

А интересно, что за шрифт используется по умолчанию? Системный? Очень уж он мелкий.
Хотя, в принципе, и с этим уже можно работать.

Оригинальная игра поддерживала и другие типы сабов, более навороченные. SSA, например. Теперь только SRT.
Szybko, szybko, geht der ab!

ViLE

Цитата: S.Siamsky от 11 ноября 2012 20:28:08
ViLE, потестил сегодня сабы. Большое спасибо, оно работает, хотя, конечно, совсем и не так, как раньше.

А интересно, что за шрифт используется по умолчанию? Системный? Очень уж он мелкий.
Хотя, в принципе, и с этим уже можно работать.

Оригинальная игра поддерживала и другие типы сабов, более навороченные. SSA, например. Теперь только SRT.

Шрифт "Arial", размер 18. Можно вынести параметры настройки в файл "cam_ext.cfg".
Про то, что работает не совсем так как ожидалось я писал немного раньше: текст не выводится в оверлей, а просто накладывается на оригинальный кадр.
Самое главное - размер указан для оригинального размера кадра (например, в Thief 2 практически всё видео имеет размер 640x480), а не для результирующей картинки на экране.

S.Siamsky

ViLE, если это возможно, то конечно лучше бы вынести параметры настройки сабов в файл "cam_ext.cfg".
Szybko, szybko, geht der ab!

ViLE

Обновил lgvidsubs (ссылка).
Поменял метод вывода текста на Direct3D.
Добавил новые параметры для "cam_ext.cfg".
Список и описание новых параметров находятся в разделе «Настройка "cam_ext.cfg"» (файл readme_sub_rus.txt).

DonSleza4e

 :applause: молодчина

не тестил правда, но думаю все ок ))
Ща знающие люди набегут , проверят )

hard thief kyd

Охренеть, терь еще и сабы есть. ViLE, спасибо чувак.

Kolsy


MoroseTroll

ViLE: Молодцом! Если не секрет, как именно поменял логику работы библиотеки?

clearing


S.Siamsky

Отлично, будем тестить.
ViLE, спасибо огромное. Это очень нужное дело. В том числе, и для FM-строителей.
Szybko, szybko, geht der ab!

ViLE

Цитата: MoroseTroll от 15 ноября 2012 21:21:42
ViLE: Молодцом! Если не секрет, как именно поменял логику работы библиотеки?

В архиве с оригинальным патчем (для Thief 2 или System Shock 2) есть файл "contrib_src.zip" - в нём находятся исходники для библиотек ffmpeg.dll, fmsel.dll и lgvid.dll.
Я модифицировал только lgvid.dll.
В функцию открытия файла передаётся имя видео-файла. Меняем расширение на .srt и подгружем субтитры (если есть).
Перед тем как передать данные кадра движку, накладываем на картинку текст (средствами GDI).
Вроде бы и нормально, но текст был размытый - движок растягивал кадр на весь экран. Поэтому, чтобы текст выглядел
идеальным надо было играть в оконном режиме и с разрешением 640x480 :)

Пришлось идти немножко другим путём, а именно - выводить текст непосредственно на экран с помощью Direct3D 9.
В Direct3D есть функция, которая указывает видеосистеме, что "всё готово, можно выводить на экран" - EndScene.
Алгоритм простой: перед вызовом данной функции надо сделать своё "чёрное дело".
На практике оказалось немного сложнее :). В сети можно почитать про перехват данной функции.
Я выбрал вариант обёртки для Direct3D.

Cоздаём свою библиотеку, которая имеет такое же название как и ситемная (в данном случае d3d9.dll).
И пишем свои варианты функций (так называемые "заглушки)", в которых будут вызываться оригинальные функции.
Дальше, дело техники ;) Передаём из lgvid.dll в нашу d3d9.dll текст и его параметры, а в нашей d3d9.dll - рисуем перед EndScene.

Непосредственную реализацию можно посмотреть в исходниках (папка src в архиве).
Компилировал в Visual C++ 2010 Express.

DJ Riff

Цитата: ViLE от 16 ноября 2012 10:45:31Cоздаём свою библиотеку, которая имеет такое же название как и ситемная (в данном случае d3d9.dll).
И пишем свои варианты функций (так называемые "заглушки)", в которых будут вызываться оригинальные функции.
А как себя поведёт игра, если своя библиотека есть, а системная отсутствует? А то у людей это распространённая ошибка, если DX9 старый или отсутствует. Будет ли нормальное сообщение об ошибке dll или чёрный экран или просто вылет?
Тьма тоже распространяется со скоростью света.