на Главную Форума - 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
Результатов поиска: 10
Автор
Сообщение
kostay_scr

Ответов: 20
Просмотров: 16495
Сообщениеζ Фopум ζ: Dwarfs GreatSmith Великая Кузня   Добавлено: Чт Фев 15, 2018 17:13   Тeмa: Полное решение тормозов на новых компьютерах

Trulala52 писал(а):
ОГРОМНОЕ СПАСИБО!

Человечище!! Very Happy

Ничего не помогало, я уже не думал, что когда-нибудь смогу ещё раз в Эадор поиграть.

Сейчас на столе танцую - ждёт меня много вечеров, когда я буду пялиться в экран.

Очень, очень благодарен!
Smile

Очень рад, что удалось помочь!
Приятных игрSmile
kostay_scr

Ответов: 20
Просмотров: 16495
Сообщениеζ Фopум ζ: Dwarfs GreatSmith Великая Кузня   Добавлено: Ср Ноя 08, 2017 14:43   Тeмa: Полное решение тормозов на новых компьютерах

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

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

Ответов: 20
Просмотров: 16495
Сообщениеζ Фopум ζ: Dwarfs GreatSmith Великая Кузня   Добавлено: Ср Окт 04, 2017 8:18   Тeмa: Полное решение тормозов на новых компьютерах

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

Рад, что помогло. Спасибо за отзывSmile
kostay_scr

Ответов: 20
Просмотров: 16495
Сообщениеζ Фopум ζ: Dwarfs GreatSmith Великая Кузня   Добавлено: Пт Сен 01, 2017 9:26   Тeмa: Полное решение тормозов на новых компьютерах

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

Спасибо за ответ, хорошей игрыSmile
kostay_scr

Ответов: 20
Просмотров: 16495
Сообщениеζ Фopум ζ: Dwarfs GreatSmith Великая Кузня   Добавлено: Вт Авг 08, 2017 6:37   Тeмa: Полное решение тормозов на новых компьютерах

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

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

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

Ответов: 20
Просмотров: 16495
Сообщениеζ Фopум ζ: Dwarfs GreatSmith Великая Кузня   Добавлено: Пн Авг 07, 2017 10:17   Тeмa: Полное решение тормозов на новых компьютерах

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


Не за чтоSmile

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

Ответов: 20
Просмотров: 16495
Сообщениеζ Фopум ζ: Dwarfs GreatSmith Великая Кузня   Добавлено: Пн Авг 07, 2017 7:18   Тeмa: Полное решение тормозов на новых компьютерах

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

Дело было так:
Запустил Эадор, и получил те самые дикие лаги. Погуглил, нашел этот форум, инфу про связь с частотой процессора.
Начал отлаживать в 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
kostay_scr

Ответов: 145
Просмотров: 110812
Сообщениеζ Фopум ζ: Dwarfs GreatSmith Великая Кузня   Добавлено: Вс Авг 06, 2017 19:01   Тeмa: Полный фикс

Патч для полного решения описанной проблемы:
http://eador.com/B2/viewtopic.php?t=4130
Информация внутри темы.[/i]
kostay_scr

Ответов: 31
Просмотров: 38960
Сообщениеζ Фopум ζ: Dwarfs GreatSmith Великая Кузня   Добавлено: Вс Авг 06, 2017 19:00   Тeмa: Полный фикс

Патч для полного решения описанной проблемы:
http://eador.com/B2/viewtopic.php?t=4130
Информация внутри темы.
kostay_scr

Ответов: 20
Просмотров: 16495
Сообщениеζ Фopум ζ: Dwarfs GreatSmith Великая Кузня   Добавлено: Вс Авг 06, 2017 18:56   Тeмa: Полное решение тормозов на новых компьютерах

Я отладил проблему тормозов Эадора на моём компьютере (частота процессора 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:
Исправлен вылет при заходе в меню игры с одного компьютера.
Page 1 of 1

Часовой пояс: 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