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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
    Скрыть объявление
  2. Форум аддона "Возвращение" 2.0:
    — Обсудить игру, почитать о прохождениях и/или разрешить свои вопросы по игре вы можете в одной из тем одноименного форума. Посетить...
    — Прочитать историю изменения и/или скачать последнюю версию аддона "Возвращение", вы можете на страницах наших ресурсов. Скачать...
    Скрыть объявление

Готика 2: НВ Неофициальный фикс памяти

Тема в разделе "Готика - Патчи, Фиксы и исправления", создана пользователем lviper, 12 янв 2016.

?

Ну как оно?

  1. Замечательно, стало лучше

    43,7%
  2. Лаги реже, OutOfMemory теперь чаще

    4,9%
  3. OutOfMemory реже, а фризы стали чаще

    0 голосов
    0,0%
  4. Все хуже

    1,0%
  5. А у меня не запустилось! :(

    3,9%
  6. Не устанавливал и не собираюсь :)

    1,0%
  7. Не устанавливал, но может еще попробую

    30,1%
  8. Не заметил разницы :/

    15,5%
Модераторы: Dimus
  1. lviper

    lviper
    Модостроитель

    Регистрация:
    27 дек 2015
    Сообщения:
    78
    Благодарности:
    72
    Баллы:
    25
    Шапка в разработке

    Неофициальный фикс на память для игр Готика 1 - Готика 2: Ночь Ворона подменяет оригинальную библиотеку для работы с памятью SmartHeap на более новую Hoard, которая лучше работает на современных компьютерах. Особенно полезно для больших аддонов и модов, где уменьшает фризы и вероятность вылета с OutOfMemory, но может использоваться и на чистой игре без каких-либо модов.

    Установка:
    0) VS 2015 C++ Redistributable: https://www.microsoft.com/ru-ru/download/details.aspx?id=48145
    1) Создание резервной копии shw32.dll из Г2НВ/System (не пропускайте этот шаг, это важно, правда!)
    2) Распаковка архива и копирование из него dll файлов в Г2НВ/System с заменой
    На x64 системах рекомендуется применять совместно с 4gb_patch (хотя и не обязательно).

    Отписывайтесь, и пожалуйста указывайте версию виндовс, ее разрядность, процессор, объем оперативной памяти и установлен ли 4gb_patch. Если игра запускалась с модом/аддоном указывайте также его и его версию.

    В настоящий момент библиотека еще не тестировалась с Готикой 1, но игра с ней нормально запускается и работает. Если будут какие-то проблемы, фаталы можете отписываться в этой же теме. Также у меня не было возможности проверить работоспособность на оригинальной Г2 без аддона, но скорее всего тоже должно работать,

    Версия обновлена v06 (16.01.2016).
    Изменения:
    Открыть спойлер

    Уменьшено требование к резервированию памяти при включенном MessageBox
    Добавлена опция bUseNewHandler в ini-файл, позволяющая выбирать способ отлова OutOfMemory как в версиях v03a- или v04+.
    Исходники удалены из архива.

    Полная история изменений содержится в Архиве версий.


    Настройки, добавляемые в SystemPack.ini:
    Открыть спойлер
    Код:
    [SHW32]
    reserveInMb=50     ; (v05+) Сколько резервировать (в Мб)
    bShowGothicError=1 ; (v05+) Использовать обработчик ошибок Готики (показывать окно фатала со стеком)
    bShowMsgBox=0      ; (v05+) показывать MessageBox
    bUseNewHandler=1   ; (v06+) использовать обработчик OutOfMemory из (v04+)
    
    reserveInMb - сколько памяти будет зарезервировано на случай OutOfMemory (в Мб). Значение по умолчанию: 50.
    5 - минимальное значение, оптимально если отключать bShowGothicError или если у вас не установлен 4gb_patch и часты вылеты по OutOfMemory
    30-60 - хороший выбор, если не включать bShowMsgBox, с большой вероятностью правильно сохраняет стек.
    120-150 - применять только с 4gp_patch, хороший выбор, если включать bShowMsgBox и bShowGothicError или если важно что программа по возможности более корректно завершится при включенном bShowGothicError.
    300 - максимальное значение

    bShowGothicError - показывать ли ошибку готики (1 - да, по умолчанию), (0 - нет) в случае возникновения OutOfMemory.
    Если выключенно, то в этом случае вы можете резервировать минимальное количество памяти, однако не будет сообщение о фатале и игра не сможет обработать эту ошибку. Это похоже на то, как если бы при OutOfMemory готика автоматически завершалась через диспетчер задач, не оставляя никакого сообщения об ошибке, что не рекомендуется. Если выключен также и bShowMsgBox, то игра просто закрывается при OutOfMemory, без каких-либо уведомлений.
    В v05 отключение срабатывает не всегда и иногда игра все-таки окно Готики даже при bShowGothicError = 1.

    bShowMsgBox - показывать стандартную для виндовс сообщение об ошибке с текстом OutOfMemory. Теперь-то вы точно будете знать, что произошел именно OutOfMemory, а не какой-то другой фатал. Правда при включенном bShowGothicError в v05 требует резервирования большого количества памяти.

    bUseNewHandler - вид используемого обработчика OutOfMemory
    0 - отлавливать только те OutOfMemory, которые произошли при вызове методов из shw32.dll. Этот метод применялся в версиях v03a-
    1 (по умолчанию) - позволяет отловить OutOfMemory во всех модулях, даже если они используют свой аллокатор, а не обращаются к shw32.dll. Использовался в (v04-v05). Однако у некоторых пользователей он может вызывать микрофризы в городе, в этом случае рекомендуется установить 0.


    Просьба для тех кто хочет залить фикс на другой ресурс:
    Открыть спойлер
    Если у вас фикс запустился и помог, я вполне могу понять ваше возможное желание поделиться им с другими. И с формальной точки зрения, лицензия GPL 2.0, под которой был опубликован фикс из-за Hoard позволяет вам это сделать как угодно, даже не ставив меня в известность, так что запретить вам это я тоже не могу.
    И тем не менее, у меня просьба, пока что не распространять его, поскольку в этом случае я не буду иметь большой статистики работоспособности и не смогу вносить исправления (если еще будут) и получать отзывы.
    Даже если с текущим билдом все хорошо, мне еще хотелось бы подредактировать readme.
    Спасибо за понимание.




    Добавлены сборки с другими библиотеками аллокации, а именно с JeMalloc, TCMalloc и CRT. Забирать из архива версий. Если у вас проблема с Hoard, или просто есть желание протестировать с какой пойдет лучше, можете попробовать их.

    Архив версий
     

    Вложения:

    Последнее редактирование: 21 янв 2016
  2. Imbaprofeeder

    Imbaprofeeder Участник форума

    Регистрация:
    12 авг 2015
    Сообщения:
    17
    Благодарности:
    3
    Баллы:
    20
    Пол:
    Мужской
    На удивление вылеты пропали, W10 x64
     
  3. lviper

    lviper
    Модостроитель

    Регистрация:
    27 дек 2015
    Сообщения:
    78
    Благодарности:
    72
    Баллы:
    25
    Спасибо что отписался. В теории совсем исправить вылеты невозможно по объективным причинам, т.к. фрагментация памяти неотвратимо, хотя и медленно приближается, как тепловая смерть вселенной:) Но по-моему тоже стало лучше.

    Вот копипаста из моего отсчета проверок (с закрытого раздела возвращения 2.0):
    Открыть спойлер

    Тестировал так: 1) Дошел до города, сохранился напротив Гарада, поставил максимальные настройки графики (обзор и текстуры).
    2) CFF Explorer'ом снял ЛааХак, а в gothic.ini вернул значения кэшов по-умолчанию из Г2НВ (т.к. с новыми значениями, подогнанными под ЛааХак все совсем печально).
    3) Запускал готику,
    4) загружал сейв, делал полный оборот вокруг оси, сохранялся на соседний слот, повторял 4) до OutOfMemory
    Считал количество полных циклов загрузка-оборот-сейв до возникновения OutOfMemory.
    Итог:
    1) Оригинальный shw32.dll: 1 (2 загрузки, 1 сейв - нормально, на втором сейве стабильно OutOfMemory).
    2) Замена shw32.dll, используя malloc/free из стандартной библиотеки: 3 (аналогично - 4 загрузки и 3 сохранения нормально).
    3) Замена shw32.dll, используя malloc/free из библиотеки hoard: 6 (7 загрузок, 6 сейвов).

    Сразу предупреждаю, что я не рекомендую снимать 4gb_patch (ЛааХак), как-то специально менять кеши и устанавливать максимальные настройки графики (лучше обзор на 100% (=200%Г2НВ), а текстуры на одно деление меньше максимума, или еще ниже, смотрите сами), первые шаги сделаны исключительно в рамках тестирования, чтобы можно было быстрее получить пресловутою ошибку, чтобы понять имеет ли смысл в подобном исправлении. Но даже в таком синтетическом тесте, на В2 этот патч у меня уменьшил количество вылетов по OutOfMemory, условно говоря в 3-7 раз, поэтому решил что им уже можно делиться с сообществом.



    Меня особенно интересует как этот патч себя проявит на 32-битных системах, особенно если на WinXP. Я даже не уверен, что игра с этими библиотеками там вообще запуститься (но на всякий случай при проблемах с запуском на старых системах можно попробовать переименовать shw32.dll_xp в shw32.dll и скопировать его в Г2НВ/System (эта тот же самый код, просто скомпилирован с немного другими настройками, хотя по-хорошему там имело смысл компилировать программу и libhoard с более старым Windows SDK, но у меня сейчас нет возможности сделать это, да и к тому же может окажется что заработает и так)).
     
    Последнее редактирование: 12 янв 2016
  4. DAN_52rus

    DAN_52rus Участник форума

    Регистрация:
    11 мар 2015
    Сообщения:
    165
    Благодарности:
    42
    Баллы:
    80
    Пол:
    Мужской
    Большое спасибо! Попробовал сыграть в Возвращение 2.0 с этим фиксом, фризы исчезли, а Аут ов Мемори убирал до установки данного фикса 4gb_patch'ем. Наиграл примерно полтора часа, вернулся из далёкой локи в Хоринис, там тоже всё было нормально (180% обзор, прочие настройки на максимуме), но потом, при перезагрузке сейва вылетело с ошибкой (Я в этом особо не разбираюсь, но там была 1 строчка, в конце которой написано то ли по русски Неизвестно, то ли по инглишу Unknown). Впрочем, до этого ошибки вылетали либо сразу, либо приходили вместе с фризами после 30-60 минут игры. Ещё раз спасибо, ОС - Windows 7 x64.
     
  5. lviper

    lviper
    Модостроитель

    Регистрация:
    27 дек 2015
    Сообщения:
    78
    Благодарности:
    72
    Баллы:
    25
    Спасибо, если еще будет повторяться ошибка Unknown, либо поймешь как ее воспроизводить, можешь описать и приложить сейв? Потому что если ошибка Unknown, то скорее всего она произошла в этой библиотеке (так и не разобрался как передать готике2 отладочную информацию, поэтому любой фатал внутри этой реализации shw32.dll будет отображен ей как Unknown).
    Мне кажется наиболее вероятным, что произошел OutOfMemory (рекомендую все-таки уменьшить обзор до 100% (из-за SP это равно 200% оригинальной Г2НВ)). Тогда там сначала должен был быть мессаджбокс с OutOfMemory, который ты мог не увидеть, если играл в фулскрине, но случайно выбрал Retry, что вызвало срабатывание брейкпоинта, что движок игры и воспринял как неизвестную ошибку, т.к. отладчик подключен не был.
    Наверно мне имело смысл вообще выпилить этот выбор и сразу выкидывать при OutOfMemory, что скорее всего и сделаю, если буду обновлять фикс.
     
    Последнее редактирование: 12 янв 2016
  6. DAN_52rus

    DAN_52rus Участник форума

    Регистрация:
    11 мар 2015
    Сообщения:
    165
    Благодарности:
    42
    Баллы:
    80
    Пол:
    Мужской
    Хорошо, отпишусь ещё. Ну и да, играю на фулскрине, но раньше, без ЛааХака, OutOfMemory частенько вылазил и выбор был, причём по русски (Выбирал "Повторить"). А сейчас именно при перезагрузке сейва вылетело, без намёков на OutOfMemory (игру пока не запускал).
     
    lviper поблагодарил.
  7. lviper

    lviper
    Модостроитель

    Регистрация:
    27 дек 2015
    Сообщения:
    78
    Благодарности:
    72
    Баллы:
    25
    Это плохо, т.к. я не представляю что еще могло пойти не так.
    Но при OutOfMemory у меня тоже должно быть похожее окно с выбором из этих трех кнопок (язык кнопок выбирается системой автоматически).
     
  8. DAN_52rus

    DAN_52rus Участник форума

    Регистрация:
    11 мар 2015
    Сообщения:
    165
    Благодарности:
    42
    Баллы:
    80
    Пол:
    Мужской
    Ясненько, ну в общем, если будет что то ещё, то я обязательно отпишусь.
     
  9. Imbaprofeeder

    Imbaprofeeder Участник форума

    Регистрация:
    12 авг 2015
    Сообщения:
    17
    Благодарности:
    3
    Баллы:
    20
    Пол:
    Мужской
    Вылеты раньше были даже в башне Ксардаса, не говоря уже про лес. После фикса выбежал из башни, пробежался в миненталь, всё было гладко. Приду с работы и потестирую на W7 x32, мб попробую на убунте поднять для фана, раз либа кроссплатформенная.
     
    lviper поблагодарил.
  10. MaGoth

    MaGoth ★★★★★★★★★★★
    Администратор

    Регистрация:
    7 янв 2005
    Сообщения:
    14.489
    Благодарности:
    6.326
    Баллы:
    740
    Пол:
    Мужской
    Если словил еррор, и есть возможность поработать из проводника Винды, то:
    1. сразу открываем Блокнот, и скидываем в него все что есть в буфере обмена, если конечно туда передалось что либо. Сохраняем файл в виде *.тхт
    2. делаем скрин еррора по возможности, и сохраняем кго в *.жпг или *.пнг.
    3. создаем какую нить папку новую, например "еррор", закидываем в нее, текстовый файл что указан выше, скрин ошибки, сейв(ы), если таковые были или требуются, Готик2.рпт файл, может валятся в корне диска с установленной игрой, в корне каталога игры или в каталоге систем игры.
    Обязательно посмотреть содержимое файла *.рпт, чтобы не высылать тестировочные отчеты РВ, от 2001 года..))) Открыть его можно любым текстовым редактором...
    4. все это дело с каталогом в архив, и прицепухой к вашему сообщению во вложение форума...
    Профит..

    Это не АСТ, а СП, в нем видимость умножается в двое.
     
    lviper и DAN_52rus поблагодарили.
  11. DAN_52rus

    DAN_52rus Участник форума

    Регистрация:
    11 мар 2015
    Сообщения:
    165
    Благодарности:
    42
    Баллы:
    80
    Пол:
    Мужской
    Спасибо за инструкцию, в следующий раз так и сделаю.
     
  12. lviper

    lviper
    Модостроитель

    Регистрация:
    27 дек 2015
    Сообщения:
    78
    Благодарности:
    72
    Баллы:
    25
    Спасибо, у меня там правда была проблема в том, что готика2 не видела кол стек, а на любую ошибку выдавала сообщение из одной строки Unknown, из чего было нельзя сделать какие-то выводы. Но вроде понял как компилить, чтобы движок видел что нужно.

    Скачай заново этот фикс, я перекомпилировал. Там ничего не должно было измениться, за исключением того, что при крэше готика2 теперь будет выдавать нечто осмысленное, что позволит сразу установить где проблема.
     
    MaGoth и DAN_52rus поблагодарили.
  13. DAN_52rus

    DAN_52rus Участник форума

    Регистрация:
    11 мар 2015
    Сообщения:
    165
    Благодарности:
    42
    Баллы:
    80
    Пол:
    Мужской
    Фикс обновил. Играл примерно 3 часа и наиграл бы больше, если бы не надо было кое-куда поехать. Полёт шикарный - вылетов не было, фризов тоже. Посетил самую лагающую, на мой взгляд, локацию - Долину Рудников, с этим фиксом не заметил ни одного лага, серьёзно. Проделал маршрут Долина Древних - Яркендар - Хоринис - ДР - Кладбище Орков - ДР - Хоринис - Яркендар - Долина Древних. Перезагружался не так уж много и не так уж часто, примерно 5 раз. Хотя в прошлый раз ошибка вылетела при первой же перезагрузке (не совсем уверен). Ещё раз спасибо за фикс!
     
    MaGoth и lviper поблагодарили.
  14. unknown111

    unknown111 Участник форума

    Регистрация:
    5 фев 2013
    Сообщения:
    803
    Благодарности:
    1.043
    Баллы:
    200
    т.е. для того что бы об этом задумались нужно было просто наклепать в моды кучу 2048 текстур?

    а вообще если это действительно работает, то это довольно круто... можно усе обвешать в 2048p :D
    потом как-нибудь проверю
     
  15. lviper

    lviper
    Модостроитель

    Регистрация:
    27 дек 2015
    Сообщения:
    78
    Благодарности:
    72
    Баллы:
    25
    Вы там поаккуратнее, товарищи мододелы) Смотрите и эту библиотеку не положите рядом с умной кучей)
     
  16. Gor

    Gor Участник форума

    Регистрация:
    26 дек 2009
    Сообщения:
    838
    Благодарности:
    451
    Баллы:
    230
    Пол:
    Мужской
    SP1.5 Патчи: AST, 4GB

    1) OS Win 7 x64, CPU AMD Athlon 64 X2, RAM 4GB
    До установки патча G2NR_SHW32 ошибок и вылетов не было. Только увеличивающиеся со временем фризы. После установки первой версии патча ничего не изменилось.

    2) OS Win7 x64, CPU i5 3470K, RAM 8GB
    До установки патча G2NR_SHW32 ошибок и вылетов не было. Фризов практически нет. Со временем слегка увеличиваются. После установки первой версии патча начало сильно фризить. После установки третей версии патча чуть-чуть сильнее стало фризить, чем в оригинале.

    ЗЫ Я вижу некоторым людям помогло. Интересно, в чем причина таких разных результатов?
     
    MaGoth и lviper поблагодарили.
  17. Imbaprofeeder

    Imbaprofeeder Участник форума

    Регистрация:
    12 авг 2015
    Сообщения:
    17
    Благодарности:
    3
    Баллы:
    20
    Пол:
    Мужской
    Разное железо, оси, установленные дистры, различные версии дров... да что угодно.
     
    Gor поблагодарил.
  18. lviper

    lviper
    Модостроитель

    Регистрация:
    27 дек 2015
    Сообщения:
    78
    Благодарности:
    72
    Баллы:
    25
    Без понятия, я не пытался разбираться как именно работает библиотека. Выбрал именно ее, потому что на моей машине она дала лучший результат, из всех которые я пробовал. К слову без понятия почему у тебя разные фризы на разных версиях библиотек, потому что там очень небольшие изменения и по производительности они отличаться не должны, вообще. К слову, а как долго ты играл с этой библиотекой? Я просто предполагаю, что возможно лаги сойдут на нет через пол минуты игры, просто возможно эта библиотека более продвинута и ей нужно больше времени на то, чтобы "разогреться" и инициализировать все свои структуры данных, а после того, как она поймет что программа использует много памяти, дальше уже лаги исчезнут. Соответственно, если ты, например, запустил, загрузился, побегал секунд 20 и в ужасе удалил, то ты возможно просто не дал библиотеке раскрыть свой потенциал.

    Я могу дать тебе попробовать dll без Hoard, но из стандартной библиотекой VS C++ (у меня на ней лаги были больше, но вдруг именно у тебя она почему-то пойдет лучше). Приложил, если захочешь проверить, но лично я сомневаюсь что поможет.
    Как еще один вариант можешь найти знакомого C++ программиста, который согласился бы подключать библиотеки аллокации памяти и перекомпилировать, чтобы найти ту, которая будет идти хорошо, благо из-за Hoard исходники этой dll открыты и подключить туда любую другую скомпилированную библиотеку должно быть делом пяти минут. Я этим не занимаюсь, потому что у меня и так хорошо идет, а мне не хочется возиться с настройками и компиляцией разных библиотек (я очень не люблю подобные вещи).
     

    Вложения:

    Gor поблагодарил.
  19. Gor

    Gor Участник форума

    Регистрация:
    26 дек 2009
    Сообщения:
    838
    Благодарности:
    451
    Баллы:
    230
    Пол:
    Мужской
    По прошествию нескольких часов третья версия работает отлично на этом компе
    OS Win7 x64, CPU i5 3470K, RAM 8GB
    Стало лучше чем было, однозначно. Почему с первой версией тормозило неизвестно. Может что-то другое мешало?..
    На первом компе
    OS Win 7 x64, CPU AMD Athlon 64 X2, RAM 4GB
    все как было так и осталось. Никаких различий. Что есть патч, что нет. Думаю дело в слабом процессоре и большом количестве полигонов.
    Спасибо.
     
    lviper поблагодарил.
  20. lviper

    lviper
    Модостроитель

    Регистрация:
    27 дек 2015
    Сообщения:
    78
    Благодарности:
    72
    Баллы:
    25
    Ну в коде я не вижу ничего, что могло бы влиять на производительность, так что даже не знаю. Может антивирь, например, обнаружил подмену файла и решил следить за ним с особым пристрастием первое время? А так без понятия.

    Скорее всего. Возможно производительность и правда во что-то другое упирается, а может просто выбранная библиотека хорошо работает в первую очередь с более новыми компами (собственно на своем сайте в рекламных статьях они в первую очередь упирают на хорошую работу с многопоточными программами на многопроцессорных/многоядерных системах, так что скорее всего оптимизируют в первую очередь под самое последнее железо).
     
    Последнее редактирование: 14 янв 2016
    Gor поблагодарил.
Модераторы: Dimus

Поделиться этой страницей