на Главную Форума - back to Forum Indexна Главную Форума - back to Forum Indexна Главную Форума - back to Forum Index
на Главную Форума - back to Forum Index
Эадор.Сотворение - Eador.The Genesis на Главную Форума - back to Forum Indexна Главную Форума - back to Forum Indexна Главную Форума - back to Forum Index
на Главную Форума - back to Forum Index
Автор / Сообщение

Полное решение тормозов на новых компьютерах

Помог ли вам данный фикс решить проблему с тормозами игры на новых процессорах?

Да
77%  77%  [ 7 ]
Нет
22%  22%  [ 2 ]
Всего проголосовало : 9
   kostay_scr

 
 
 Боец

Свитков: 9
С нами с: 06.08.2017
Цитировать /Reply with quote
СообщениеДобавлено: Вс Авг 06, 2017 18:56     Заголовок сообщения: Полное решение тормозов на новых компьютерах

Я отладил проблему тормозов Эадора на моём компьютере (частота процессора 4.5ГГц).
Вообщем если тут еще есть кто живой(я совсем недавно узнал об игре), то ловите патчSmile
Ссылка: https://drive.google.com/file/d/0BwxrQ2aI_patTklPWnBHWVZWbEU/view?usp=sharing

Установка:

Rename alleg43.dll to alleg43.dll.bak in the game directory.
Then copy alleg43.dll_rebuilt.dll to the game directory. Rename it to alleg43.dll.
If it doesn't work or causes problems, delete it and try to do the same with alleg43_patched_olly.dll.
--
Переименуйте alleg43.dll в alleg43.dll.bak в папке с игрой.
Потом скопируйте alleg43_rebuilt.dll в папку с игрой. Переименуйте его в alleg43.dll.
Если это не сработает, или возникнут какие-либо проблемы, удалите его и попробуйте то же самое с alleg43_patched_olly.dll.

Если разработчик игры это читает, то надо бы выпустить официальный патч.
У кого есть желание, запостите на забугорских сайтах или залейте на зеркала=)
Если кому интересно, могу описать проблему подробно(и детали того, как я её нашел \ решил).

Пишите, голосуйте, кому помогло (или не помогло).

Обновление 13.08.2017:
Исправлен вылет при заходе в меню игры с одного компьютера.
Посмотреть профиль Отправить личное сообщение
   Arkitekt

 
 
 *Повелитель Сущего*
admin
Админ всея форума



Свитков: 4855
С нами с: 30.01.2013
Цитировать /Reply with quote
СообщениеДобавлено: Вс Авг 06, 2017 19:29     Заголовок сообщения: Re: Полное решение тормозов на новых компьютерах

kostay_scr писал(а):

Если кому интересно, могу описать проблему подробно(и детали того, как я её нашел \ решил).

Интересно.
_________________
20.11.2009 - 24.02.2015
Посмотреть профиль Отправить личное сообщение
   Koba

 
 
 ≡Охотник в Ночи≡
Ветеран



Свитков: 379
С нами с: 02.04.2013
Откуда: Новосибирск
Цитировать /Reply with quote
СообщениеДобавлено: Пн Авг 07, 2017 7:05     Заголовок сообщения:

Конечно интересно! Жаль (точнее, хорошо Smile ), что у меня не тормозит (наверно, потому что ХР стоит) и не могу проверить, но ты расскажи, как сделал - обожаю такие вещи. Сам в юности в дебаггере сидел Smile

2Архитект: а в вашем моде с обновлённой аллегрой тормозит? Как вообще продвигается дело?
Посмотреть профиль Отправить личное сообщение
   kostay_scr

 
 
 Боец

Свитков: 9
С нами с: 06.08.2017
Цитировать /Reply with quote
СообщениеДобавлено: Пн Авг 07, 2017 7:18     Заголовок сообщения:

Цитата:
Интересно.

Дело было так:
Запустил Эадор, и получил те самые дикие лаги. Погуглил, нашел этот форум, инфу про связь с частотой процессора.
Начал отлаживать в Ollydbg по функциям QueryPerformanceCounter, QueryPerformanceFrequency.
Потом нашел, скачал исходники Allegro (движок игры), вроде той же версии, что и dll в игре. В игре 4.3.1.0, а я скачал 4.3.10, т.к. 4.3.1.0 не было, подумал, что это одно и то же(чем оно и должно-бы было быть).
Покопавшись в исходниках, нашел проблемный код. Там проблема в коде таймеров. И есть 2 вида таймеров, выбирающиеся в зависимости от аппаратной поддержки(ну или как винда решит о её наличии). По умолчанию, более точный таймер, использующий зависящие от герцовки процессора QueryPerformanceCounter/Frequency. Думаю, сделаю просто, пусть будет таймер попроще, зато будет работать хорошо - пропатчу код выбора таймера.
Лажу, лажу в отладчике, смотрю, смотрю код, вижу что-то не сходится с исходниками, хотя должно. Не могу найти место выбора типа таймера.
Потом нашел в именованной экспортированной функции по именованным переменным тип таймера, так называемый timer_driver. Благо он dll экспортировался, так что было имя.
Смотрю, а у таймера в Эадоре совсем не тот ид, и не то описание, какие в исходниках! Покопался, покопался, и понял что у меня не тот код...
В общем перепробовал версий 6 или больше исходников, пока не нашел точно, которая была нужно в разделе unstable Sourceforge'a Allegro.
Оказывается 4.3.10 и 4.3.1.0, это, мать их, две разные версии! Ладно у них на сайте еще пишется, как 4.3.1 и 4.3.10, но всё равно, какого чёрта они нолик добавляют и думают что это хорошее версирование?
Покопался с правильными исходниками, через некоторое время нашел выбор типа таймера, зашитый в функции инициализации.
Пропатчил, и о чудо Эадор заработал без тормозовSmile

Ну думаю, оно то неплохо, но надо бы по-хорошему найти баг и всё исправить в коде, и пересобрать Alleg_43.dll Laughing
Провозившись добрых 4-6 часов, таки заставил библиотеку собираться через MinGW.

Некоторое время покопался в коде, сначало думал проблема в расчётах интервалов времени, там множилось на 1 000 000 для конверсии из тиков в uSec и так далее.
Но нет, дело было не в этом.
Оказалось, что просто выдаваемая функцией обработки таймеров в цикл таймера задержка т.е. сколько циклу надо еще поспать, что не гонять процессор, получалась >1мс, и этот поток даст немного времени другим потокам.
Но вроде процессор же многоядерный, пусть себе жрёт на отдельном ядре, но почему-то это так не работает.

Ну вот вроде и всё. Фикс сработал, и всё заработало нормально
Только еще вылез вылет при выходе из игры, в destroy_display, не вдаваясь в глубину кода, просто добавил пару проверок на NULL в функцию destroy_bitmap, и всё стало хорошо.

Edit:
Пока печатал всё это, так ответ пришелSmile
Цитата:
Конечно интересно!

Оно может просто выбирать таймер низкого разрешения и тогда проблемы нет, зависит от системы, и может быть драйверов на чипсет.
У меня вообще по мифическим причинам QueryPerformanceFrequency возвращает 0 под Ollydbg второй версии, но не первой Very Happy Соответственно запускаешь под отладчиком, и проблема исчезает ха-хаSmile
Посмотреть профиль Отправить личное сообщение
   Arkitekt

 
 
 *Повелитель Сущего*
admin
Админ всея форума



Свитков: 4855
С нами с: 30.01.2013
Цитировать /Reply with quote
СообщениеДобавлено: Пн Авг 07, 2017 9:30     Заголовок сообщения:

Люблю такие вот детективные истории с перекомпиляцией и отладчиками. Спасибо.

Цитата:
Как вообще продвигается дело?

Не продвигается. Сам в Эадор не играю очень давно, а вкладывать время в то, что самому не нужно, как-то не кажется хорошей идеей.
Последний раз когда проект открывал, работал над форматом сохранки. Возможно, получится редактор карт сделать и как-то игру адаптировать для игры по почте.
_________________
20.11.2009 - 24.02.2015
Посмотреть профиль Отправить личное сообщение
   kostay_scr

 
 
 Боец

Свитков: 9
С нами с: 06.08.2017
Цитировать /Reply with quote
СообщениеДобавлено: Пн Авг 07, 2017 10:17     Заголовок сообщения:

Arkitekt писал(а):
Люблю такие вот детективные истории с перекомпиляцией и отладчиками. Спасибо.


Не за чтоSmile

А разработчик вообще заходит на форум? Может ему написать куда, или что, чтобы патч офицальный запилить.
Посмотреть профиль Отправить личное сообщение
   Arkitekt

 
 
 *Повелитель Сущего*
admin
Админ всея форума



Свитков: 4855
С нами с: 30.01.2013
Цитировать /Reply with quote
СообщениеДобавлено: Пн Авг 07, 2017 11:03     Заголовок сообщения:

kostay_scr писал(а):
А разработчик вообще заходит на форум? Может ему написать куда, или что, чтобы патч офицальный запилить.

Разработчик может и заходит периодически, но молчит.
И у меня сложилось впечатление, что ему эта вся перекомпиляция удовольствия не приносит. У него получается придумывать интересные игры и наверняка он над чем-то работает сейчас. Пусть Эадор будет не таким идеальным, как бы нам хотелося, но будет еще что-нибудь.
_________________
20.11.2009 - 24.02.2015
Посмотреть профиль Отправить личное сообщение
   Koba

 
 
 ≡Охотник в Ночи≡
Ветеран



Свитков: 379
С нами с: 02.04.2013
Откуда: Новосибирск
Цитировать /Reply with quote
СообщениеДобавлено: Вт Авг 08, 2017 6:22     Заголовок сообщения:

Присоединяюсь, было интересно почитать Smile Нашёл вчера комп с 7 виндой 64, думаю, ща проверю - но, блин, Эадор и там не тормозил... i5 проц. Но я вё равно длл-ку заменил, работает, по-прежнему не тормозит Smile
Посмотреть профиль Отправить личное сообщение
   kostay_scr

 
 
 Боец

Свитков: 9
С нами с: 06.08.2017
Цитировать /Reply with quote
СообщениеДобавлено: Вт Авг 08, 2017 6:37     Заголовок сообщения:

Цитата:
Нашёл вчера комп с 7 виндой 64, думаю, ща проверю - но, блин, Эадор и там не тормозил...

Ну странный баг, да. У меня тоже i5-2500K@4.5GHz, так тормозило, что было просто неиграбельно. Музыка щелкала и медленно играла от тормозов в менюSmile
Скорее всего зависит от программ запущенных на компьютере, которые увеличивают разрешение системного таймера, по идее это должно влиять на баг. Например браузер с видео.
Хорошо, что не вылетает. Авось кому и сгодитсяSmile

Edit:
И действительно зависит от разрешения системного таймера, у меня, например, если запустить Steam оригинальный Эадор начинает дико тормозить, а если стим закрыть - то всё нормальноSmile
Так что это очень меняется от случая к случаю.
Посмотреть профиль Отправить личное сообщение
   Koba

 
 
 ≡Охотник в Ночи≡
Ветеран



Свитков: 379
С нами с: 02.04.2013
Откуда: Новосибирск
Цитировать /Reply with quote
СообщениеДобавлено: Вт Авг 08, 2017 10:52     Заголовок сообщения:

kostay_scr писал(а):
Так что это очень меняется от случая к случаю.
Ну да, на форумах обсуждались эмпирические, т.е. найденные случайно, способы решения; самый действенный - запустить 2 копии Эадора. Но у тебя профессиональный подход - вон ты сколько интересного за пару дней нашёл, и даже, похоже, решил проблему. Респект!
Посмотреть профиль Отправить личное сообщение
   DragonRU

 
 
 Дозорный

Сontest Prize Winner

Award of the Prize-winner of Eador

Свитков: 29
С нами с: 03.07.2011
Цитировать /Reply with quote
СообщениеДобавлено: Пт Сен 01, 2017 8:32     Заголовок сообщения:

Все работает, большое спасибо. Время перепройти Эадор еще раз :)
Посмотреть профиль Отправить личное сообщение
   kostay_scr

 
 
 Боец

Свитков: 9
С нами с: 06.08.2017
Цитировать /Reply with quote
СообщениеДобавлено: Пт Сен 01, 2017 9:26     Заголовок сообщения:

DragonRU писал(а):
Все работает, большое спасибо. Время перепройти Эадор еще раз Smile

Спасибо за ответ, хорошей игрыSmile
Посмотреть профиль Отправить личное сообщение
   Даэрон

 
 
 Лекарь

Свитков: 1
С нами с: 30.09.2017
Откуда: Самара
Цитировать /Reply with quote
СообщениеДобавлено: Сб Сен 30, 2017 17:24     Заголовок сообщения:

Тормоза исчезли после установки первого dll. Большое спасибо! Good!
Посмотреть профиль Отправить личное сообщение
   kostay_scr

 
 
 Боец

Свитков: 9
С нами с: 06.08.2017
Цитировать /Reply with quote
СообщениеДобавлено: Ср Окт 04, 2017 8:18     Заголовок сообщения:

Даэрон писал(а):
Тормоза исчезли после установки первого dll. Большое спасибо! Good!

Рад, что помогло. Спасибо за отзывSmile
Посмотреть профиль Отправить личное сообщение
   Synoecium

 
 
 Колдун

Свитков: 50
С нами с: 19.12.2015
Цитировать /Reply with quote
СообщениеДобавлено: Вт Ноя 07, 2017 21:19     Заголовок сообщения:

Спасибо. Было очень интересно почитать историю исследования Smile Только я не очень понял как это влияет на ход ИИ? или это связано только с тормозами в анимации?
Посмотреть профиль Отправить личное сообщение
   kostay_scr

 
 
 Боец

Свитков: 9
С нами с: 06.08.2017
Цитировать /Reply with quote
СообщениеДобавлено: Ср Ноя 08, 2017 14:43     Заголовок сообщения:

Synoecium писал(а):
Спасибо. Было очень интересно почитать историю исследования Smile Только я не очень понял как это влияет на ход ИИ? или это связано только с тормозами в анимации?

Рад, что смог помочь.
Я уже точно не помню, может на ход и не влияет, но поток таймеров просто проедает ресурсы процессора, соответственно для хода ИИ их остается меньше.
Поток, который ест ресурсы имеет самый высокий приоритет(THREAD_PRIORITY_TIME_CRITICAL), соответственно всё тормозит. Если интересно, можно посмотреть wtimer.c и timer.c в Allegro 4.3.10 (не 4.3.1).
Всё бы ничего, ведь процессор многоядерный (у меня например 4 ядра), но при этом поток еще и блокирует мьютекс на удаление таймера из глобального списка таймеров. Функция удаления таймера очень вероятно вызывается очень часто, вот и получается почти дедлок (поток высокого приоритета захватывает и высвобождает мьютекс в цикле(по сути while(true)), жрёт процессор и не даёт при этом выполняться другим потокам).
Просто из-за этого сильно замедляется и лагает вся игра(или может не очень сильно, зависит от конкретных условий), ход ИИ в том числе.
Вроде примерно так. Smile
Посмотреть профиль Отправить личное сообщение
Часовой пояс: GMT +3:00


 


Ты не можешь начинать темы
Ты не можешь отвечать на сообщения
Ты не можешь редактировать свои сообщения
Ты не можешь удалять свои сообщения
Ты не можешь голосовать в опросах
на Главную Форума - back to Forum Indexна Главную Форума - back to Forum Indexна Главную Форума - back to Forum Indexна Главную Форума - back to Forum Index Eador. The Genesis. Encyclopedia на Главную Форума - back to Forum Indexна Главную Форума - back to Forum Indexна Главную Форума - back to Forum Index