1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.
  3. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

Серия игр Heroes of Might and Magic - GL Wrapper & Patches

Тема в разделе "Мастерская", создана пользователем Verok, 23 май 2018.

  1. Verok

    Verok

    Регистрация:
    11 мар 2016
    Сообщения:
    495
    @AKuHAK Ну в III Героях я поправил проблему с частотой и стерео. Ну а в I и II там кажись все ок, поэтому наверное на слух не ощутимо. Я конешно пересмотрю все это дело. И спасибо за инфу с audiere.dll, я этого не знал. Если audiere.dll играет все форматы, то попозже возможно добавлю возможность чтобы игра искала сначаоа lossless форматы. Конешно интересно что такая старая библиотека уже умела работать с FLAC'ом
     
    AKuHAK нравится это.
  2. Verok

    Verok

    Регистрация:
    11 мар 2016
    Сообщения:
    495
    Несколько поправок к HoMM I.

    - вернул цветной системный курсор как в досовской версии и в HoMM II. Точнее курсор рендерится не как палитровый, а как 32-битная иконка. Если разрядность экрана менее 32 бита, то используется старый черно-белый. Также цветной курсор меняет свой размер в зависимости от размера картинки игры (вьюпорта)
    - добавил плавный переход между экранами как в досовской версии и в HoMM II (переход из/в замок, просмотр героя и тп.).

    Также, заметил что люди жалуются на проблемы со "скачками" героя в время хода в HoMM I и II, а точнее скачками почти целого изображения во время хода героя. Я эту проблему заметил только под VMWare, даже незнаю почему она там возникает, но всеткаи наверняк подправил.
     
    shikulja и Bato-San нравится это.
  3. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136
    Это как? Чисто костыль что ли?
     
  4. Verok

    Verok

    Регистрация:
    11 мар 2016
    Сообщения:
    495
    @Bato-San, Игра для отрисовки региона использует последовательность функция InvalidateRect, BeginPaint и DirectDrawSurface::Blit. Так вот при полноекранном режиме BeginPaint возвращает нулевой регион (rcPaintr). Все обработки сообщений я убирал, но всерано всегда почему-то возвращается {0, 0, 0 ,0}. В игре есть проверка, если регион нулевой, то тогда берется с помощью функции GetClientRect вся клиентская облась окна. Ну вот здесь и возникает проблема с координатами.
    --- добавлено 26 окт 2018, предыдущее сообщение размещено: 26 окт 2018 ---
    Пока писал предыдущий пост, кажись понял в чем проблема с нулевым регионом.
    Фишка наверное в том, что в изза проблемы с полножкранном OpenGL на разных системах, враппер имеет костыль и создает дополнительное окно поверх старого, отрисовывает грвфику в нем, а также перенаправляет все сообщения со старого в новый. А так как игра работает со старым окном, то винда и видит что окно порекрыто и нечего отрисовывать. Короче надо для функций InvalidateRect, BeginPaint использовать хендл нового окна. Попозже переправлю
    --- добавлено 26 окт 2018 ---
    Действительно, верно в MSDN пишут что нежелтельно использовать функцию BeginPaint за пределами обработки WM_PAINT. Чем игры HoMM I и II пренебрегают. Зато в III и IV уже все как в книжке
     
    Последнее редактирование: 26 окт 2018
    Bato-San нравится это.
  5. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136
    сорри, за наглость, но уж коли ты разобрался, сделай пожалуйста, если нетрудно, патчик для оригинальных файлов, чтобы можно было пользоваться без враппера.

    Кроме того, непонятно, почему эта же фигня наблюдается в DOS, где нет никаких окон в принципе.
     
  6. Verok

    Verok

    Регистрация:
    11 мар 2016
    Сообщения:
    495
    Что именно? Чтобы работало без OpenGL, через DirectDraw? Я об этом раньше уже думал, но как-то никак не настроюсь. Надо будет глянуть.
     
    Bato-San нравится это.
  7. AKuHAK

    AKuHAK

    Регистрация:
    1 окт 2010
    Сообщения:
    29
    Если будете смотреть, то сможете треки во вторых героях отвязать от диска? Например в первых в tournament edition сделано так:
    Хотелось бы чего-нибудь похожего для вторых героев.
     
  8. Verok

    Verok

    Регистрация:
    11 мар 2016
    Сообщения:
    495
    Сделал немного по иному. Если трек запрашивается с диска, то сначала он ищется в папке с игрой, а потом уже на CD.
    То-есть если ищется <cd>:\Tracks2\08-AudioTrack 08.ogg то игра питается сначала найти его по пути <game>\Tracks2\08-AudioTrack 08.ogg. В таком случае, в реестре ничего не надо ручками менять.

    Также, в обеих случая трек ищется в разных форматах. Что в папке с игрой что на диске. В таком случае можно пересобрать обра/диск.
    Подсмотрел в саму audiere.dll, какие форматы она поддерживает, и выставил их поиск по следующему приоритету
    ".wav", ".flac", ".mp3", ".ogg", ".mod", ".s3m", ".xm", ".it" . Проверял с FLAC, действительно эта старая версия библиотеки проигрывает его.

    Также, на всяк случай, все это работает только для версий игр с библиотекой audiere, то-есть на версиях от Буки. В английских же версиях все по старому - проигрывается CD музыка.

    P.S. Игру я не отвязывал от диска, только аудио треки.
     
    Neitan и AKuHAK нравится это.
  9. AKuHAK

    AKuHAK

    Регистрация:
    1 окт 2010
    Сообщения:
    29
    @Verok, огромное спасибо - вы так быстро это решили!:cool2: Кстати раз такая пьянка может можно все остальные файлы: которые с диска запрашиваются, тоже сперва в папке с игрой искать. Для первых героев это папка Tracks и Anim, для вторых героев - это вроде бы папка Tracks2 и Anim2, для третьих героев и хронику - каталог heroes3 (с видео и озвучкой). Огромное спасибо за труды!
    P.S. разве только в буковских версии audiere.dll использовалось?
     
    Последнее редактирование: 27 окт 2018
  10. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136
    @AKuHAK, буковские версии перенаправляются на винчестер через реестр. Т.е. полная отвязка от диска.
     
  11. Verok

    Verok

    Регистрация:
    11 мар 2016
    Сообщения:
    495
    С музыкой я просто сделал перехват функции к audiere.dll, где передавался путь к файлу, и на лету меняю его. С друними файлами не все так просто. Там нужно будет править сам код. А если отвязывать, то отвязывать все версии/игры

    После этого я подумал что в моем варианте с поиском в локальной папке косяк вылезает. Надо будет переправить, или убрать поиск в локальной папке
     
    AKuHAK нравится это.
  12. AKuHAK

    AKuHAK

    Регистрация:
    1 окт 2010
    Сообщения:
    29
    --- добавлено 28 окт 2018, предыдущее сообщение размещено: 28 окт 2018 ---
    Кстати - есть ли возможность сделать поддержку GOG версии вторых героев (HoMM 2 Gold (optional Windows version) (2.0.0.7).exe). А то она на 10 винде вообще не хочет работать - ГОГ команда что-то слишком перемудрила с этой игрой. Для проигрывания ogg версий используется winmm.dll - по сути открытая библиотека с github . К сожалению - мне не удалось запустить ни одну карту - постоянные вылеты.
    --- добавлено 28 окт 2018 ---
    лично мне ни разу не удалось заставить работать перенаправление в реестр - игры просит диск: чтобы я не написал в параметрах HMM2POL CDDrive и PathPL2. Я уж молчу про первых героев, где вообще вроде бы нет такой функции.
     
  13. shikulja

    shikulja

    Регистрация:
    11 авг 2013
    Сообщения:
    66
    актуально чтобы удалить старую винг, сохранив совместимость.

    1. под wmvare проверил на 98ой. Работает, но только билинейка доступна, на реальном железе может что нибудь и заработало бы.
    а вот родной винг32 запускаться даже с системной директории не захотел, типа с файлом что-то. хммм...
    2. 95 родной винг наоборот работает, а враппер нет. (мб либы какие надо было обновить..)
    3. файл реестра не применялся.. особенно гер2 чет ругалась на сд со второго раза ток запускалась.. и я подумал что хорошо бы вынести в инишник настройки, а если носд версию врапера, то отучивать и от реестра. Дабы избавиться от неверных путей x64\x86, и пр.
     
    Последнее редактирование: 29 окт 2018
  14. AKuHAK

    AKuHAK

    Регистрация:
    1 окт 2010
    Сообщения:
    29
    @Verok Нашел на гог форуме решение данной проблемы (ссылка), возможно вам будет интересно - пользователь с ником moranms написал свой собственный враппер. Не знал, что вторые герои используют ddraw.dll
    Ссылка на скачивание фикса
     
    Verok нравится это.
  15. Verok

    Verok

    Регистрация:
    11 мар 2016
    Сообщения:
    495
    Я стараюсь сохранить совместимость с 98/Me (95 не проверял). Но как уже раньше писал, не советую играть на старых осях и компах. DirectDraw на старых ОС работает быстренько, напрямую с железом, а не эмулируется. Тем более OpenGL на Win98/Me никто сильно не хотел поддерживать и не всегда он работал шустро. Также врапперу, чтобы он не тормозил, желательно мультипроцессорность, так как в нем работаю 2 главных потока: первый получает даные от игры, а второй уже работает с OpenGL и рисует.

    Ко всему выше перечисленому в 9х есть и проблема с подгрузкой библиотек с локальной папки, так как в ней использовалась иная модель приоритетов и кеширования библиотек. Так например бывает что удается с враппером запустить игру только один раз, а в последуюшие разы враппер уже не грузится изза закешированой с системной папки библиотеки ddraw.dll. И чтобы снова запустить игру с враппером приходится перегружать машину. В более новых ОС библиотека кешируется по поисковому пути, и остается там (в кеше) до того времени, пока ее использует хотя б один процесс.

    Для бикубического и других фильтров нужны шейдеры, а для этого врапперу нужен OpenGL 3.0. Насколько я знаю Win98 на железе успела увидеть максимум OpenGL 2.0 или 2.1. Даже WindowsXP под VMWare использует OpenGL драйвер от старой Mesa3D c версией OpenGL 2.1, поэтому под VMWare с WindowsXP также не будет никаких фильтров кроме билинейного

    Спасибо за наводку. Я подправил немного иным способом. Проблема заключается в том что системная библиотека winmm.dll кешируется быстрее локальной (winmm.dll враппера), и из-за этого игра подгружает не локальную winmm.dll, а уже закешировану системную. Но системная winmm.dll не умеет проигрывать *.ogg файлы. Поэтому я сделал чтобы враппер форсировал подгрузку сначала локальной winmm.dll, а потом уже системную. Правда изза локальной winmm.dll возникает проблема с редактором карт. Он не запускается, так как локальная winmm.dll (враппер) не имеет всех нужных системных функций. Поэтому, чтобы запустить редактор карт, можно или удалить этот GOG'овский враппер но зато в игре не будет музыки, или же заменить его тем что был предложен oggwinmm.dll, просто переименировав его в winmm.dll. Этот враппер умеет и OGG фалы проигрывать и редактор с ним отлично работает.

    Для оконного режима игра использует wing32.dll (Windows Graphics), а для полноэкранного ddraw.dll (DirectDraw). Я же делал враппер с именем файла wing32.dll, так как wing32.dll подгружается всегда (статически), а ddraw.dll динамически, только если игра в полноекранном режиме.
    --- добавлено 31 окт 2018, предыдущее сообщение размещено: 31 окт 2018 ---
    Также, раньше спрашивали чтобы игра проигрывала в замках 3 разных выпущеных варианта треков. Поэтому для буковской версии я это добавил. Игра теперь ищет файлы по маске "имя*.*" и для игры теперь нет приоритетов по разширению, она просто по маске проигрывает случайно найденый файл. Чтобы добавить разные варианты для трека, нужно назвать эти файлы также как и оригинал и дописать в что-то конце.

    Например если у нас есть трек для замка 05-AudioTrack 05.ogg, то его варианты могут быть 05-AudioTrack 05_1.ogg, 05-AudioTrack 05a.wav и тд.

    Это относиться не только к музыке в замках, но и ко всем трекам, а также и к HoMM I
     
    Последнее редактирование: 31 окт 2018
    AKuHAK, vwtrotsky и Bato-San нравится это.
  16. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136
    а чего бы не перехватить во враппер и это? Чтобы систему лишний раз не дёргать - пусть всё в окно и рисует. Хотя может ты это уже и так сделал?

    Поддержку 9х всё же стоит улучшить - для многих это единственное понятное решение проблем при совмещении с железячно-софтовой "ностальгией".
     
    Последнее редактирование: 31 окт 2018
  17. Verok

    Verok

    Регистрация:
    11 мар 2016
    Сообщения:
    495
    Да, так оно сейчас и работает
     
    Minaro и Bato-San нравится это.
  18. shikulja

    shikulja

    Регистрация:
    11 авг 2013
    Сообщения:
    66
    Круто спасибо за рандомную музыку, пойду баловаться.
    Да на старых ос все грустно. на 95 максимальный директ8 и неоф VC_R_7X.
    Запускал ради интереса Xebra (gdi+opengl) в гди немного шустрее, но в обоих подлагивает, но в целом, для виртуалки очень даже ничего так.

    Я с аудио запутался winmm для английской. audiere для буки? интересно почему так.
    Зацепился за то что треки на паузу ставятся а не рестартятся.
    Послушал, В 1 героях вроде бы пауза работает, а во вторых похоже что нет.
    Может сделать выбор через какую библиотеку проигрывать?
     
    Последнее редактирование: 1 ноя 2018
  19. Verok

    Verok

    Регистрация:
    11 мар 2016
    Сообщения:
    495
    В оффициальных релизах от NWC (New World Computing) вся музыка находилась на диске как CD аудио. Для ее проигрывания игра обращается к MSS32.DLL (The Miles Sound System), та же в свою очередь обращается к системной библиотеке WINMM.DLL (Windows Multimedia). В этой цепочке какраз WINMM.DLL проигрывает CD Audio.

    GOG просто взяли откуда-то враппер WINMM.DLL (или же сделали свой), который дурит игру, и вместо CD Audio проигрывает *.OGG файлы. То-есть если из папки GOG игры удалить WINMM.DLL, то игра через системную WINMM.DLL будет проигрывать музыку с диска (если таковой есть). Так сейчас многие старые переизданые игры работают. Например те же "Казаки" вместе с "Завоеванием Америки", также используют враппер на winmm.dll, возможно даже тот же самый что и здесь в GOG релизе, но переименованый в minmm.dll во избежание конфликтов.

    В Бука, в свою очередь, имея сурсы этих игр от NWC (незнаю даже как им это удалось, наверное получили вместе с лицензией), переписали логику проигрывания музыки с CD аудио на проигрывание обычных файловых треков, с помощью библиотеки AUDIERE.DLL. Тем самым обходя MSS32.DLL, и тем более WINMM.DLL.

    Соответственно чтобы в Буко'вскую версию вернуть поддержку CD Audio, или же в обычную добавить вызов Audiere, нужно искать и переписывать немалый код, в чем смысла вообще не вижу, да и нет желания это делать.
    --- добавлено 1 ноя 2018, предыдущее сообщение размещено: 1 ноя 2018 ---
    Также еще для каждого враппера добавил переключатель, который позволает вкл/откл фикс для ЦП. Это изза того что на слабых системах (да и не только) возможны тормоза с этим фиксом. Название немного не то, но как есть,
    "... как-то текст по дебильному написан ..." :D

    cold_cpu.png
     
    Последнее редактирование: 2 ноя 2018
    leiz и AKuHAK нравится это.
  20. AKuHAK

    AKuHAK

    Регистрация:
    1 окт 2010
    Сообщения:
    29
    @Verok, а вы не планируете обновить код на гитхабе? Там и в релизах можно будет скачивать старые версии, если вдруг в новых какие-то баги вылезут )
     
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление