Current time: 17.09.2024, 00:11 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Плагин: воспроизведение видео в формате BIK (2022)
» Читает BIK: версии 0.5b и 1.8d
Author Message
Berserker Offline
Administrators

Posts: 16623
Post: #46

XEPOMAHT, если хочешь, напишу пример на FASM использования Splice или нового HookCode.
Адреса функций получать у тебя ведь выходит через GetProcAddr?

RedirectMemoryBlock работает сохраняет информацию о перемещённых областях, но ей нужно ещё пользоваться через GetRealAddr. Вдобавок, я по твоему совету стал использовать ещё и косвенные указатели на структуры. Так что там проблемы должны быть решаемы.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
08.08.2024 21:36
Find all posts by this user Quote this message in a reply
XEPOMAHT Online
Moderators

Posts: 2328
Post: #47

(08.08.2024 21:36)Berserker Wrote:  если хочешь, напишу пример на FASM использования Splice или нового HookCode.

Мне, к сожалению, поздно, т.к. время упущено. А новичкам будет полезны примеры создания хуков средствами самой ЭРЫ.

(08.08.2024 21:36)Berserker Wrote:  Адреса функций получать у тебя ведь выходит через GetProcAddr?

Нет, не знаю как этим поьзоваться. Доступ к другим dll в Тифоне работает только через секцию import:

Code:
import era,\
    GetVersion, 'GetVersion'
    ;RedirectMemoryBlock, 'RedirectMemoryBlock'

import patcher,\
    GetPatcher, '_GetPatcherX86@0'


(08.08.2024 21:36)Berserker Wrote:  я по твоему совету стал использовать ещё и косвенные указатели на структуры. Так что там проблемы должны быть решаемы.

Спасибо.
09.08.2024 11:14
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16623
Post: #48

XEPOMAHT, ну вот, импорт есть. Можно GetProcAddress не дёргать.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
09.08.2024 16:58
Find all posts by this user Quote this message in a reply
Suft Offline

Posts: 1056
Post: #49

myoffice91, Здравствуйте - на последних версиях мерцание логотипа и кнопок!
Нет мерцания на версии Video playback in BIK format 1.2
Но там нет быстрой прогрузки ролика.
Эти с мерцанием:
Image: 347655687.png


ERA HD Edition 0.7.2: ENG-RU
Сooperative no bugs: Yandex / Google

(This post was last modified: 15.08.2024 20:04 by Suft.)
15.08.2024 19:52
Find all posts by this user Quote this message in a reply
myoffice91 Offline
Moderators

Posts: 89
Post: #50

Suft, здравствуйте!
1.2 - есть свечение кнопок
1.6 - нет свечения кнопок


Смотрите видео https://yadi.sk/i/t-xFdYnHCz7LGw


В версии 1.3 исправлен баг:
18.09.2022
1) исправлен баг: если 23.97 кадров в секунду, то происходит сияние кнопки. (на моде "случайное видео в главном меню ERA 3") Теперь нет сияния кнопки.


----
Скорее может быть в алгоритме png проблема https://ru.wikipedia.org/wiki/Тройная_буферизация


---
Если у тебя кадры с запятой, например 20.559, то надо перекодировать видео на 20 кадров или 21, либо 23, то есть на целое число.



  1. Heroes 3 MoP Fan-Patch 3.14
  2. MoP Key Delete RandomMap
  3. TavernVideos BIK ASM
11.09.2024 13:39
Find all posts by this user Quote this message in a reply
Suft Offline

Posts: 1056
Post: #51

myoffice91, Я извлекал покадрово из видео (3264 кадров к примеру) - и рендерил - так что кадров всегда целое число.
Кнопка не сливается - а моргают отдельные фрагменты её краев. (сливание есть но оно не полное)...


ERA HD Edition 0.7.2: ENG-RU
Сooperative no bugs: Yandex / Google

(This post was last modified: 11.09.2024 16:27 by Suft.)
11.09.2024 16:25
Find all posts by this user Quote this message in a reply
myoffice91 Offline
Moderators

Posts: 89
Post: #52

Suft, раньше я конвертировал разные видео в файлы формата "mp4" в "bik". Не было свечения кнопок.

Скинь мне оригинальный видео файл






(08.08.2024 00:31)Berserker Wrote:  Нельзя писать внутрь моста/переходника хука. Для установки перехвата можно использовать HiHook патчера patcher_x86.dll или API из Эры:


Я не собираюсь модифицировать в era.dll. Мой плагин на ассемблер только берёт недокументированные функции вызова из ERA.DLL. Чтобы плагин легко вызывал функции era.dll.
Как прям проникновение в era.dll, еще глубже в функции и запоминает адрес процедур 96-copy .


(08.08.2024 00:31)Berserker Wrote:  function Splice (OrigFunc, HandlerFunc: pointer; CallingConv: integer; NumArgs: integer; {n} CustomParam: pinteger; {n} AppliedPatch: ppointer): pointer; stdcall;

Original function address (OpenBik first command address)
Your handler address
Calling convention of OpenBik function:

// Left-to-right
    CONV_PASCAL = CONV_LAST,

    // Left-to-right, first three arguments in EAX, EDX, ECX
    CONV_REGISTER = -102,

    // Right-to-left, caller clean-up
    CONV_CDECL = -103,

    // Right-to-left
    CONV_STDCALL = -104,

    // Right-to-left, first argument in ECX
    CONV_THISCALL = -105,

    // Right-to-left, first two arguments in ECX, EDX
    CONV_FASTCALL = -106,

Number of original function arguments, including those in registers
Two NULL arguments

Your handler must have STDCALL convention and accept void* OrigFunc argument + all other arguments in the same way, as original function would accept


"Splice" нет описания и примеров с результатами. Большая проблема, что вы написали полностью на английском документации, а не на русском языке. Отечественные Моддеры могут не владеть английском языком.





(08.08.2024 14:32)Berserker Wrote:  Ассемблер здесь не помеха. Я скоро выпущу 3.9.16 с изменённым исправленным HookCode. Тебе двух функций HookCode/Splice хватило бы почти на все нужды, при том, что они умеют строить мосты и выполнять затёртый код. У меня такое ощущение, что автор плагина не знал, как это сделать корректно и потому влез внутрь поста splice-перехвата Эры. А нужно было всего-то установить другой Splice перехват поверх оригинального. В этом и высокоуровневость, что одну и ту же функцию, можно перехватить несчётное количество раз.

В общем, не стесняйтесь детально спрашивать, ибо костыли потом аукаются всем )

Помни, известно, что "работает - не трогай!", чтобы плагин работал. Но, вы пытаетесь рефакторинг кода, ради поменять старую функцию хука "Core.Hook" на новый хук "ApiJack.HookCode". Эта вызывает несовместимость плагина, из-за не сталкивания с ассемблер, для входа внутрь и глубже. Вот появился плагин новой версии 1.6, где добавлена поддержка платформы Эра новой версии и добавлена проверка на некорректность, вызывает вызов "MessageBox", а затем вызов ассемблера "INT 3".


(25.07.2024 11:46)XEPOMAHT Wrote:  Вчерашняя версия era.dll 3.9.15 портит (или не даёт записывать) структуру видеоролика по адресу 694D00h из-за чего становится невозможно воспроизведение вступительных роликов перед главным меню (т.к. исходных кодов от плагина Video playback in BIK format.dll у меня нет, чтобы исправить конфликт хуков с era.dll). В общем опять ERA+ остётся на era.dll версии 3.9.14. 105

(30.07.2024 01:10)Berserker Wrote:  Плагин вылетает на последней Эре (буквально стало на 3.9.15), но причину с ходу не вижу.
Последняя dll Эры:
https://dropmefiles.com/wMjRO

(08.08.2024 17:18)XEPOMAHT Wrote:  
(08.08.2024 14:32)Berserker Wrote:  ибо костыли потом аукаются всем )

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

Никому не пришло в голову, что главная причина в замене хука. Надо было откат на старый хук ""Core.Hook"" и проверить, что плагин заработал.
   
   
   
   
   
   
   
   
(08.08.2024 17:18)XEPOMAHT Wrote:  Особенно критично в работе геройского ИИ, который на XXXL-картах сам по себе жутко тормозной. Те же участники HotA Crew делали форк Патчера для внутреннего использования с реализацией ускоренных хуков, но в свет эта инициатива так не вышла - Патчер как был медленным, так медленным и остаётся, особенно на моём старом ПК, где всё это очень заметно, несмотря на низкие системные требования оригинальной игры (имено поэтому Тифон подменяет/убирает кучу тормозящих игру воговских и эровских хуков во время игрового сражения на поле боя, чтобы не было 1-5 секундных задержек во время действий отрядов, т.к. комфорт от игрового процесса для меня важнее, чем сторонний функционал, который всё равно в ERA+ никак не используется - часть ERM-триггеров принесены в жертву ради производительности в ERA+, увы).

   
   Насчет, у ИИ очень медленный ход действий: вы посмотрите мой подпись "ИИ ускорение", но, там первая версия.
В МоР 3.15 последней версии есть кнопка на два режима "ИИ ускорение" и "ИИ турбо".
   В "ИИ турбо" вырезал цикл, стало очень шустрее и у ИИ без изменений поведений. В прошлом году, в феврале, я поделился патчингом с "daemon_n", чтобы он создал плагин и в сборке "HoMM3 ERA Launcher Edition". Он сказал, что "это функция виртуальных битв ИИ".

Значит, причина в ИИ, очень долго думает из-за "виртуальных битв ИИ".
   
   
---
Насчет, остальной задержки во время игрового сражения: попробуй закрыть браузер и дискорд, плюс антивирус, они жрут кеш-память процессора и ОЗУ.
   
Давно, помню, было в Cosmic Forgre -> Редакторе Локации при нажатии элемента для триггера всплывалось окно, но задержка на 2 секунды. Решил выложить видео в youtube, в комментариях писали, что на старом компьютере Windows XP, при нажатии элемента - мгновенно открывается окно "динамический триггер".

Не может быть, я решил у себя исследовать, пробовал закрыть программу "Диспетчер Задач", "Opera". Пробовал нажать элемент и окно "Динамический объект триггер" всплывалось за 0.1 секунду, чудо!. А затем, через несколько дней, снова повторилась проблема. Снова пробовал закрыть Opera, не помогло. Закрыл "диспетчер задач" - помогло. А потом, снова, не помню, закрыл "диспетчер задач" - не помогло, и закрыл еще "Opera" - помогло. Похоже программа кушает слишком много кеш-память процессора.
У меня Windows 7 использую "Гибернации".




(09.08.2024 11:14)XEPOMAHT Wrote:  
(08.08.2024 21:36)Berserker Wrote:  Адреса функций получать у тебя ведь выходит через GetProcAddr?

Нет, не знаю как этим поьзоваться. Доступ к другим dll в Тифоне работает только через секцию import:

Code:
import era,\
    GetVersion, 'GetVersion'
    ;RedirectMemoryBlock, 'RedirectMemoryBlock'

import patcher,\
    GetPatcher, '_GetPatcherX86@0'


У меня плагин "Воспроизведение видео в формате BIK", использую вызов сначала GetModuleHandleA, а потом GetProcAddress:
поделюсь исходным кодом на ассемблере

Code:
mov eax,dword[63A230h];GetModuleHandleA
.if eax
    push String_era_dll;db 'era.dll',0
    call eax
    .if eax
        mov ecx,dword[63A22Ch];GetProcAddress
        .if ecx
            push StringGetERA_API_ReadStrFromIni;db 'ReadStrFromIni',0
            push eax
            call ecx
            .if eax
                sub esp,400h
                mov edx,esp
                push edx
                push edx;ADDRES
                push Stringheroes3_INI;"heroes3.ini"
                push StringSettings;Settings
                push StringBinkSoundType;SHOWINTRO
                call eax
                pop eax
                add esp,400h
                .if word[eax] = 31h; 1
                    mov dword[BinkSoundType_Bool],1                    
                .endif;
            .endif;eax
        .endif;ecx
    .endif;eax
.endif;eax



  1. Heroes 3 MoP Fan-Patch 3.14
  2. MoP Key Delete RandomMap
  3. TavernVideos BIK ASM
11.09.2024 22:17
Find all posts by this user Quote this message in a reply
Suft Offline

Posts: 1056
Post: #53

Вот оригинальный видеофайл...
https://drive.google.com/file/d/1wtvGTwL...sp=sharing


ERA HD Edition 0.7.2: ENG-RU
Сooperative no bugs: Yandex / Google

12.09.2024 14:56
Find all posts by this user Quote this message in a reply
myoffice91 Offline
Moderators

Posts: 89
Post: #54

Suft, Посмотрел ваш видео, действительно баг. Но, на вашем видео "1793330308.mp4" всего (5 сцена) - 1 минута, 14 секунд, это слишком много.

Пробовал вырезать все сцены, кроме одной, получилось видео всего на 18 секунд. Экспорт на "BIK" - я подумал, что поможет решить проблему. Но, в игре есть свечение кнопок. Не помогло и изменить видео на кадров в секунду.

Странно, у меня разные видео на главном меню и нет проблем.


Решил попробовать без видео и без плагина "Video playback in BIK format" на главном меню, увидел результат:
Image: tr-1-q2wXDg.jpg?size=1252x1008&q...type=album

Вот видишь, после отпускания курсора мыши от кнопки - автоматический не очищается желтое свечение вокруг кнопки.



Очевидно, мой плагин "Video playback in BIK format" с видео на главном меню создает собственные буферизации или как https://ru.wikipedia.org/wiki/Тройная_буферизация - то есть, после отпускания курсора мыши от кнопки, игра очищает желтое свечение вокруг кнопки.


Можно решить проблему модифицировав "Data\Defs\zmenuhs.def\0_0.png" и ""Data\Defs\zmenuhs.def\0_3.png"
С помощью "Paint.Net" , "сохранить как..." -> "Порог прозрачности:" на 230. и 8 бит.
Результат: кнопка не будет с желтым снаружи свечением, но наверное будет менее привлекательнее кнопка.





Ладно, вот выпуск новой версии 1.7 - скачать https://yadi.sk/d/6aH-40UXXLd6DA



ИСТОРИЯ ИЗМЕНЕНИЙ ВЕРСИЙ:

1)В версии 1.3 удалены три исправленные баги.
2)Добавлена проверка условия выше или равно времени одной секунде для генерации видео в буферизацию.
Например, мод "Heroes 3 HD Edition for ERA Launcher", в главном меню видео всего 1 минута 14 секунд. Раньше плагин версии 1.2 была, что при запуске игры требовалось ждать фиксированные 2 или 3 секунды. Теперь плагин новой версии, при запуске игры требуется ждать случайной времени от 0.5 до 2 секунд, часто 1 секунда.



  1. Heroes 3 MoP Fan-Patch 3.14
  2. MoP Key Delete RandomMap
  3. TavernVideos BIK ASM
Yesterday 18:54
Find all posts by this user Quote this message in a reply
XEPOMAHT Online
Moderators

Posts: 2328
Post: #55

(Yesterday 18:54)myoffice91 Wrote:  Решил попробовать без видео и без плагина "Video playback in BIK format" на главном меню, увидел результат:
Image: tr-1-q2wXDg.jpg?size=1252x1008&q...type=album

У меня было точно так же. Т.к. игра пререрисовывает спрайт кнопок поверх того, что уже было нарисовано. В итоге, после нажатия вылазит каша из спрайтов. Ну и альфа-канал так же при этом удваивается/утраивается от наложения, в итоге - смысл использования альфа-канала на кнопках теряется полностью. Именно по-этому сейчас в ERA+ кпопки - практически квадратные, чтобы мимимизировать этот надоедливый баг, доставшийся в наследство от SoD.
Yesterday 20:52
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group