• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

Gothic ½ Плагин zSmoothAniTransitions - плавные переходы между анимациями

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.081
Благодарности
1.901
Баллы
320
  • Первое сообщение
  • #1
zSmoothAniTransitions
Плавные переходы между анимациями
Google Drive
Функции плагина
  • Множественные исправления и улучшения движка связанные с работой анимаций
  • Автоматическая перезапись параметров смешивания анимаций
  • Автоматическая перезапись типов некоторых боевых анимаций
  • Более плавное приземление персонажа с плагином zHumansRemaster
  • Плавная реакция персонажа на применение/удаление оверлеев
Состав плагина
  • Патчи, адаптируюшие движок к возможности повсеместного использования смешиваний анимации
  • Плагин-костыль zAniCrutches необходимый, в основном, для применения улучшений к оригинальным анимациям
  • Модифицированная мной версия плагина zModelProtoExtender от Gratt, обеспечивающая плавное применение оверлеев
  • Скрипты-костыли для обхода технических изъянов мода Хроники Миртаны: Архолос
Изъяны плагина
  • Странноватый вид у комбинации ударов влево-вперёд. Хотя и оригинальные анимации с реализмом не дружат.
  • Плавное приземление персонажа с плагином zHumansRemaster имеет побочный эффект в виде подскакивания персонажа при прыжке через препятствия
Неполный список изъянов оригинальной игры Готика II Ночь Ворона, исправляемых плагином
Для воспроизведения багов использовался персонаж PC_Rockefeller с одноручным мечом в руке (если не сказано иного)

  1. Загрузить игру. Выполнить удар с разбега и сразу остановиться. Ноги застынут в неправильном положении.
  2. Выполнить удар с разбега и сразу остановиться. Будут постоянно генерироваться звуки ходьбы. Проще зафиксировать с помощью команды ztoggle showsounds.
  3. Выполнить прыжок с места. В конце персонаж резко перейдёт в боевую стойку.
  4. Выполнить прыжок с места на очень невысокий уступ. В конце персонаж резко перейдёт в боевую стойку.
  5. Выполнить прыжок с места на высокий уступ. В конце персонаж резко перейдёт в боевую стойку. (С прыжком на уступ средней высоты всё нормально).
  6. Бежать некоторое время и остановиться - персонаж резко перейдёт в боевую стойку
  7. Во время поворота персонажа убрать оружие с помошью клавиши 1 - анимация убирания оружия будет полностью подавляться анимацией поворота
  8. Выполнить удар с разбега, сразу остановиться и начать выполнять поворот - анимация удара будет подавлена анимацией поворота
  9. Во время бега начать убирать оружие, сразу остановиться и начать выполнять поворот - снова будет поглощение анимации.
  10. Во время бега начать доставать оружие, сразу остановиться и начать выполнять поворот - поглощение анимации
  11. Начать разбег с арбалетом в руках и сразу остановиться - резкий переход между анимациями
  12. Добить лежащего человека - резкий переход от анимации добивания к боевой стойке
  13. Достать оружие в режиме подкрадывания - резкий переход в боевую стойку
  14. Убрать оружие в режиме подкрадывания - потеря режима подкрадывания
  15. Начать движение с оружием в режиме подкрадывания и сразу остановиться - резкий переход в боевую стойку
  16. Во время бега начать убирать оружие и сразу остановиться - резкое изменение положения ног по окончании
  17. Прыжок с места в режиме подкрадывания - потеря режима подкрадывания
  18. Подобрать предмет во время поворота - анимации поворота не прерываются, хотя персонаж не может повернуться
Исходные коды
 
Последнее редактирование:

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.081
Благодарности
1.901
Баллы
320
Очередная версия плагина. Из крупных изменений:
  • Включена модифицированная версия плагина zModelProtoExtender
  • При манипуляции с оверлеями устаревшие анимации рассеиваются, а актуальные начинают воспроизводиться с того же места (в %)
  • Исправлен баг с множественным уроном при падении на живот
  • Убран резкий рывок головы при переходе от поворота к ходьбе и обратно
  • Устранён вылет при просмотре истории анимаций после удаления оверлея
 
Последнее редактирование:

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.448
Благодарности
1.976
Баллы
365
Slavemaster, хотел немного потестить, но у меня игра не грузится, вылетает при запуске, версия от 17 октября. Если запустить без ZMODELPROTOEXTENDER.DLL со старым zModelProtoExtender.vdf, то грузится.

Со старым zModelProtoExtender.vdf, без нового ZMODELPROTOEXTENDER.DLL
1667199493015.png


с новым ZMODELPROTOEXTENDER.DLL
1667199565802.png
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.081
Благодарности
1.901
Баллы
320
Xeдин, беда.
Версия 1: Добавил логи в GameEntry.
Версия 2: Скомпилил под v142
 

Вложения

  • zModelProtoExtender.vdf
    142,5 KB · Просмотры: 2
  • zModelProtoExtender.vdf
    142,5 KB · Просмотры: 4

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.448
Благодарности
1.976
Баллы
365
Slavemaster, 2 GameEntry вывела только в обоих случаях.

1667220351022.png
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.081
Благодарности
1.901
Баллы
320
Xeдин, должна была три.
 

Вложения

  • zModelProtoExtender.vdf
    142,5 KB · Просмотры: 5

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.448
Благодарности
1.976
Баллы
365

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.081
Благодарности
1.901
Баллы
320
Xeдин, что-то с Юнионом наверное. Эта строчка не выполняется полностью:
C++:
 CPatch::ExecuteResource(CPlugin::GetCurrentPlugin()->GetModule(), MAKEINTRESOURCE(IDR_PATCH1), "PATCH");
Хотя тело патча полностью выполнилось.
Union:
#engine [G1, G1A, G2, G2A]
    #patch [zLastFrameAniTransLerp]
        // engine specific
        PrintScreen("Resource 1")

        INT text_zCModel_AdvanceAnis_call_strafoNext_Unpack = ZenDef(0x005630FD, 0x0057B86D, 0x00577AE1, 0x0057D001)

        INT var_zCModel_AdvanceAnis_noLerpPosSample = ZenDef(0x5C, 0x60, 0x60, 0x60)
        // end of engine specific

        PrintScreen("Resource 2")
        
        #assembler [text_zCModel_AdvanceAnis_call_strafoNext_Unpack]
            push edx
            lea edx, [esp+$var_zCModel_AdvanceAnis_noLerpPosSample]
            push edx
            mov edx, esi
            call $hook_zTMdl_AniSample_Unpack
        #/assembler

        PrintScreen("Resource 3")
    #/patch
#/engine
Может Gratt подскажет в чём может быть дело.
 

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.448
Благодарности
1.976
Баллы
365
Slavemaster, проверил на чистом Г2НВ с заново установленным юнионом из ресурс менеджера что бы исключить вообще остальные вещи. Может конфликт с каким-то патчем в Union.patch ?

1667222977170.png
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.081
Благодарности
1.901
Баллы
320
Может конфликт с каким-то патчем в Union.patch ?
Нет.
А кто такой hook_zTMdl_AniSample_Unpack ?

C++:
CPatchInteger hook_zTMdl_AniSample_Unpack;
hook_zTMdl_AniSample_Unpack.Init();
hook_zTMdl_AniSample_Unpack.SetObjectName( "hook_zTMdl_AniSample_Unpack" );
hook_zTMdl_AniSample_Unpack.SetValue( reinterpret_cast<int>( TInstance( &zTMdl_AniSample::Unpack_Union ).data ) );
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
Slavemaster, ну тогда все просто. Когда сборщик мусора дочищает остатки данных файла, твоя переменная попадает под его злую руку. Но так как это не указатель, терпит ошибку на попытке удаления.
При этом, если ты хочешь сделать изменяемое в процессе выполнения игры значение (сейчас твой асм компилит как константу), то в патче следует указывать ptr [аргумента], а в hook_zTMdl_AniSample_Unpack использовать hook_zTMdl_AniSample_Unpack->DontRemove(); (void CPatchSymbol::DontRemove()), чтобы сборщик его никогда не трогал. Проверь, есть ли у тебя этот метод, если нужен.
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.081
Благодарности
1.901
Баллы
320
Gratt, всё-таки не понял, что делать-то? Адрес С++ функции является константой, но известен только после загрузки плагина, именно поэтому я патч в виде ресурса использую. void CPatchSymbol::DontRemove() - такого метода нет у меня.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
такого метода нет у меня.
Добавь ручками по той сигнатуре, которую я тебе дал, и lib перезапиши. Пригодится.

всё-таки не понял, что делать-то?
Идеальный вариант выглядит так:
C++:
CPatchInteger* hook_zTMdl_AniSample_Unpack = new CPatchInteger();
hook_zTMdl_AniSample_Unpack->Init();
hook_zTMdl_AniSample_Unpack->DontRemove();
hook_zTMdl_AniSample_Unpack->SetObjectName( "hook_zTMdl_AniSample_Unpack" );
hook_zTMdl_AniSample_Unpack->SetValue( reinterpret_cast<int>( TInstance( &zTMdl_AniSample::Unpack_Union ).data ) );
 

Вложения

  • Shw32.zip
    72,6 KB · Просмотры: 4

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.448
Благодарности
1.976
Баллы
365
Slavemaster, загружается, немного побегал уже. Буду наблюдать, я правда без хьюманремастера бегаю.
 
Последнее редактирование:

DjObama

Участник форума
Регистрация
25 Апр 2022
Сообщения
24
Благодарности
4
Баллы
40
I don't know if it's the right place to ask. But I think you, Slavemaster are the right person.
I noticed this:
G1 control disabled:
- PC is frozen after side attack (can't strafe or jumb back)
- PC can do side attacks in the middle of forward combo

G1 controls enabled:
- PC can strafe or jump back right after side attack
- PC can't do side attacks in the middle of forward combo

Is there a fix for that?

I translated it to russian with DeepL:
Я перевел это на русский с помощью DeepL:

Я не знаю, правильное ли это место для вопроса. Но я думаю, что вы, Slavemaster - правильный человек.
Я заметил следующее:
Управление G1 отключено:
- ПК застывает после боковой атаки (не может парировать или отпрыгнуть назад).
- ПК может делать боковые атаки в середине комбо вперед.

Управление G1 включено:
- ПК может выполнить рикошет или прыжок назад сразу после боковой атаки
- ПК не может делать боковые атаки в середине прямого комбо.

Есть ли исправление для этого?
 

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.448
Благодарности
1.976
Баллы
365
use turning buttons for side attacks.
For G2 can try to change keys:
keyActionRight=d100
keyActionLeft=d300
to
keyActionRight=d1001200
keyActionLeft=d3001000

Slavemaster поиграл все эти дни с плагином в Одиссее, особых проблем не вижу. Вроде все нормально. Играю на геймпаде и без human remaster.
 

apan

Участник форума
Регистрация
20 Ноя 2013
Сообщения
13
Благодарности
8
Баллы
160
В архалос после катсцены с пьянкой из-за мода ломаются скрипты и не запускается диалог.
 
Сверху Снизу