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

Сообщения от Помощь с фиксом заколдованной стрелы.

Пока нет оценок — будьте первым!
5 лет назад
Собственно.
Не нравится, что заколдованная баллиста (поправил) убивает геройскую позицию в атб шкале, превращая его из шикарного навыка в мусор.

Надо исправить.
Используемая версия, NCF обыкновенный (то есть оригинал с 2 изменениями, в данном контексте совершенно не важными).

Ссылка на описание фикса - ыыы
Написанно для обрезанных экзе, но другой информации просто нету.

По файлу нужно изменить 7 мест. Стал проверять все вручную.
Исходные ожидаемые данные совпадают для 6 вхождений.

Исходные ожидаемые данные не совпадают вот тут ыыы
Ожидается 99 нолей, у меня 
52 35 0e 37 59 37 88 37 98 37 28 38 78 38 98 38 cb 38 e4 38 3a 39 8e 39 d3 39 ea 39 ef 39 0f 3a 14 3a 61 3a 78 3a 7d 3a 9d 3a a2 3a ec 3a 14 3b 38 3b 80 3b f0 3b 02 3c 2b 3c 53 3c 77 3c c5 3e ce 3e d3 3e e2 3f 00 00 00 40 00 00 a8 00 00 00 3b 30 40 30 bd 30 c2 30 33 31 8f 31 e6 32 39 33 71 33 76

тыкать наугад не вариант, 99 нолей встречается 939 раз, нужный я не найду.
Как сделать, чтоб работало как надо?
Может кто знает или просто имеет ссылку на правильные изменения?

I want to fix Imbue balista exhausting Hero ATB bug. I have normal NCF exe (Original, that was not modified except the creature's count bytes).
I have only the information "for stripped exe".
The input byte values match 6 offsets. But 7th offset has other bytes than 99 zeros (above).

How to do this properly ? Is there a correct description for the Original?

@dredknight?

А как тут на форуме правильно тегнуть, чтоб увидел
Аватар пользователя
5 лет назад
@vasik, а по моему тут слово "stripped" следует понимать как "урезанный" или даже "голая", т.е. тут урезанный/голая означает сокращение до самого необходимого - иными словами оригинальная версия без каких-либо правок.
P.S.
Cравнил версию Ubi (у меня дисковая версия + патчик) с Nival/Buka - они одинаковые... так как во всех 6-ти вхождениях всё совпадает и в этих 6-ти правках нет переадресации на адрес 00BD90E0
Поэтому нужно уточнить у уважаемого товарища dredknight'а, что это за версия такая, которую они ковыряли!
Хотя что-то мне подсказывает, что это касалось именно MMH55 ... в общем в .exe RC14_B6 по этому адресу не нули, и даже не
8B 54 24 1C 8D 4C 31 04 56 51 50 89 CE 8B 86 E8
FE FF FF 8B 48 08 8D 8C 31 E8 FE FF FF 2B 49 FC
83 E9 68 8B 41 90 A3 24 61 13 01 8B 40 1C A3 28
61 13 01 58 59 5E C3 90 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50 56 8B 35 24 61 13 01 A1 28 61 13 01 89 46 1C
5E 58 C3
а вот это -
8b 54 24 1c 8d 4c 31 04 51 56 50 2b 49 fc 89 ce
8b 86 ec fe ff ff 8b 48 08 8d 8c 31 ec fe ff ff
2b 49 fc 83 e9 68 90 90 90 8b 41 94 90 90 90 89
c1 a3 24 61 14 01 8b 40 1c a3 28 61 14 01 58 5e
59 c3 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50 56 8b 35 24 61 14 01 a1 28 61 14 01 89 46 1c
5e 58 c3
5 лет назад
дело в том, что 7я правка нужная.

Я сделал 6, и теперь, если у героя есть навык заколдованная баллиста, при попытке выстрела игра вылетит
Говорит ошибка тута 0x00d360ea
Это число немножко больше, чем размер героев.
Видимо 7я правка правит какую-то ссылку, и без нее никак.

Технически я не знаю смысл данных правок, так что нужно просто правильное число найти
В ответ пользователю vasik
Аватар пользователя
5 лет назад
vasik
дело в том, что 7я правка нужная.

Я сделал 6, и теперь, если у героя есть навык заколдованная баллиста, при попытке выстрела игра вылетит
Говорит ошибка тута 0x00d360ea
Это число немножко больше, чем размер героев.
Видимо 7я правка правит какую-то ссылку, и без нее никак.

Технически я не знаю смысл данных правок, так что нужно просто правильное число найти
Ну так правильно больше, потому что когда запускается .exe то он переадресовывается со сдвигом в ОЗУ на величину 00 40 0с 00 и таким образом получается, что игра фактически сыпится по адресу 00 93 54 ea (это адрес в .exe)

В добавках нет явного указания на адрес с кучей нулей, присутствует только косвенная адресация, но вот относительно чего - это уже другой вопрос!
00D360C4                 loc_D360C4:                             ; CODE XREF: 00D35FD9
00D360C4                 mov     edi, [ebp-0Ch]
00D360C7                 cmp     dword ptr [edi+484h], 0
00D360CE                 jz      short loc_D3610B
00D360D0                 mov     eax, [esi+1Ch]
00D360D3                 add     eax, 36h
00D360D6                 mov     edx, eax
00D360D8                 shl     edx, 4
00D360DB                 sub     edx, eax
00D360DD                 mov     eax, [ebp-18h]
00D360E0                 add     edx, ebx
00D360E2                 mov     ecx, [eax+edx*4]
00D360E5                 mov     edx, [ebp-50h]
00D360E8                 push    ecx
00D360E9                 mov     ecx, [ebp-64h]
00D360EC                 push    edx
00D360ED                 mov     edx, [ebp-24h]
00D360F0                 push    ecx
00D360F1                 mov     ecx, [ebp-14h]
00D360F4                 push    edx
00D360F5                 mov     edx, [esi]
00D360F7                 push    ecx
00D360F8                 mov     ecx, [ebp-10h]
00D360FB                 push    edx
00D360FC                 push    edi
00D360FD                 push    ecx
00D360FE                 lea     edx, [eax+0B34h]
00D36104                 mov     ecx, ebx
00D36106                 call    sub_D1C780

И сыпется игра на var_64 - какая-то переменная в игре, очень может быть, что там прописан адрес процедуры механики заколдованной баллисты!

Попробуй 7-ую правку сделать с адреса - 00 b8 e8 fc (тут как раз таки куча нулей) или с 00 b9 04 fc (а тут нули в черезполосицу с ff)
5 лет назад
Пустых нолей по 99 штук там очень много вхождений, наугад не получится.
Если согласно какой-то логики, то не помогает - все тот же результат
В ответ пользователю vasik
Аватар пользователя
5 лет назад
vasik
Пустых нолей по 99 штук там очень много вхождений, наугад не получится.
Если согласно какой-то логики, то не помогает - все тот же результат
Не на угад, а по смещению относительно переменной var_64
5 лет назад
не помогло :(
5 лет назад
Автопереведено
Я не уверен, что это лучшее решение — это сильно изменит исполняемый файл, и у меня могут возникнуть проблемы, если я захочу обновить что-то еще или играть онлайн и т. д.

Если я узнаю правильное 7-е описание для обычной, не измененной версии ToE, я заменю байты вручную, мне просто нужна точная информация.
5 лет назад
Автопереведено
Мы начали использовать выделенное пространство, потому что в исполняемом файле не хватало места для добавления нового ассемблерного кода. Реализовать седьмое изменение невозможно без свободного места.
По сути, мы даем коду команду перенаправлять чтение из исполняемого файла в выделенное пространство ниже (то есть, с изменениями, предшествующими седьмому).
Затем он переходит к месту седьмого изменения, и этот код выполняет новые команды, а затем возвращается к коду исполняемого файла The Restoration of Erathia.

Если все игроки используют одну и ту же модификацию исполняемого файла, многопользовательский режим будет работать без каких-либо проблем.

Статистика

Приветствуем новейшего участника: recijeb