Здравствуйте, гость ( Вход | Регистрация )
Дата поста: | В теме: | За сообщение: | Спасибо сказали: | ||
---|---|---|---|---|---|
14 Sep 2020, 11:38 |
MMDoC Revival Лучшая карточная онлайн игра снова доступна! |
Оригинальная игра MMDoC была закрыта 31 октября 2016. И до января 2019 в нее невозможно было поиграть. Теперь это возможно с MMDoC Revival. MMDoC Revival - это мод оригинального клиента MMDoC + новые онлайн-лобби и сервер, созданные с нуля. Разработка MMDoC Revival не прекращается. Текущая версия именуется альфой только потому, что еще не весь запланированный функционал реализован. В MMDoC Revival уже исправлен ряд багов оригинальной игры. И MMDoC Revival стабильнее оригинального MMDoC. ![]() Страница загрузки * проект развивается не очень быстро, так как основные мои силы и время уходят на Герои 3. |
XEL, tolich, lion-killer, Haart of the Abyss, Арысь-Поле, Zabuza-san, KypaToP_HM, Iriniko, kuindai | ||
18 Nov 2019, 20:35 |
HD. Релизы и обновления Информация о свежих версиях |
Давно не публиковал здесь инфу. Большинство обнов до этой касались онлайна. Эта - нет. 5.0 RC61 -> 5.0 RC63 (18.11.2019) Цитата [+] Новые графические режимы: (stretchable) 16-bit OpenGL и (stretchable) 32-bit OpenGL by Verok используют для масштабирования, фильтрации и рендеринга видеокарту, в отличие от остальных режимов. [+] Графические режимы 32-bit True стали еще более тру для Сод и для будущей ХотА [+] Системные курсоры, использовавшиеся в режиме 32-bit True (stretchable) GDI теперь используется во всех режимах. Эта опция крайне рекомендована к использованию. [ ] Все графические режимы и некоторые фильтры переименованы (функционал не изменился) [ ] Изменен код опции Sys.CPU.ReduceUsage (и = 1, и = 2) Теперь в цикле сообщений вместо "Sleep(1ms или может быть больше)" игра пытается делать "Sleep(около 0.5 ms, не больше)". Изменения касаются только ОС Windows. Как обычно, рекомендуется к использованию Sys.CPU.ReduceUsage = 2. [-] Настройки больше не сбиваются при обновлении. [ ] Незначительные изменения и исправления. |
Shurup, fireman, hippocamus, magoth, AKuHAK, lion-killer, Adept, Mefista, J2K, DrSlash, Slayer Moon, KypaToP_HM, stoned_golem, leiz, sasa961 | ||
21 Dec 2018, 14:47 |
Might & Magic: Duel of Champions F2P-CCG по Ашану |
Скорпион | |||
17 Dec 2018, 23:26 |
Might & Magic: Duel of Champions F2P-CCG по Ашану |
hippocamus, Adept, Скорпион | |||
29 Jul 2018, 10:16 |
Серия игр Heroes of Might and Magic - GL Wrapper & Patches |
Для тех, кто такой же внимательный, как я: ссылка на гитхаб с сорцами в первом посте. |
Ben, gamemazahist | ||
25 Jul 2018, 06:48 |
Серия игр Heroes of Might and Magic - GL Wrapper & Patches |
gamemazahist, отличный враппер. В список совместимых игр можно добавить HoMM III: Рог Бездны Однако враппер не совместим с HD-модом для Героев 3 и с разрешениями отличными от оригинального 800x600. А без HD-мода в Героев 3 сейчас мало кто играет. В HD-моде мной реализован схожий функционал, но фильтрация производится посредством CPU. Я давно хотел использовать GPU, но я не шарю в Direct3D/OpenGL а времени и особого желания разобраться не было. Не мог бы ты поделиться исходниками, для того, чтобы я включил функционал твоего враппера в HD-мод для Героев 3? Ну а если ты против, то я мог бы рассказать, как добавить поддержку HD-мода в твой враппер. |
fireman, Berserker | ||
25 Jun 2018, 12:53 |
Опрос: какой стретч фильтр вы используете? обсуждение графических режимов |
Цитата Так же интересно чем не нравятся конкретные фильтры и чего не хватает. Nearest neighbour! (да, для TSW)Он есть же. Первый в списке: Nearest. Хотя я лично все же с SaI в SW поиграл бы. Цитата та ничего там специфического нету, простенькие фрагментные шейдеры спасут. другое дело, что и смысла перетаскивать рендер на видеокарту я тоже не вижу в упор. Ну если ты не пользуешся стретчингом, а играешь в масштабе 1:1, то для тебя смысла нет. А так смысл в существенном увеличении быстродействия. Даже на моем бодром ЦП (ноутбучный i7) и разрешением экрана всего лишь 1366х768 c фильтром xBRZ + ... максимальный фпс в героях ниже 60 и это заметно. Заметны лаги при отрисовке в некоторые моменты (при быстром скроллинге списков, карты; хота в бою начинает пропускать кадры, чтобы уложиться в назначенные тайминги отрисовки). Более того, считаю в идеале максимальный фпс в героях не должен быть ниже 125, у меня такой фпс выдает только Bilinear SharperX2 (M) У людей с 4К экраном и слабеньким ЦП вообще все печально. Вот я недавно, в одном из релизов HD сделал игру DPI aware. (Для тех кто не в теме, если в винде (Vista и выше) выставить масштаб > 100%, например 150%, то старые виндовые не DPI aware приложения система стретчит со 100% до 150% сама (мыля их при этом). Т.е. в версиях ХД до этой в таком случае часть работы по масштабированию выполнял ХД, а часть - винда. Теперь же это полностью делает ХД.) Так мне после этого очень сильно жаловался один пользователь с 4К монитором, что у него даже c фильтром Bilinear SharperX2 появились тормоза до неиграбельности. Решилось это конечно же переключением в 32-bit true режим, в нем в фулскрине при выборе разрешения меньшего чем разрешение экрана картинка масштабируестя стандартными средствами видеокарты. |
AKuHAK | ||
25 Jun 2018, 09:07 |
Опрос: какой стретч фильтр вы используете? обсуждение графических режимов |
Протестил на днях несколько десятков разных фильтров. С удивлением обнаружил, что для героев просто превосходен фильтр SaI. Запилил несколько его вариантов: SaI + Bilinear Sharper, SaI + Bilinear SharperX2, SaI + Bilinear SharperX3. И теперь для меня лично это лучший фильтр для разрешений экрана HD и FHD. Именно текст с ним получается лучше чем с любым из других ХД-шных фильтров. Картинка тоже довольно балансная получается. Я бы сказал эффектом дизеринга. И довольно гладкая, но не такая прилизанная как с xBRZ. Тем кому нравится bilinear SharperX2, думаю он тоже понравится. Скорее всего заменю им текущий UltraSaI в будущем обновлении ХД. |
hippocamus, J2K, Axel_Templar, BratetsVolk, leiz | ||
17 Mar 2018, 18:57 |
Отчеты об ошибках багрепорты |
2. Также заметил, что стала очень сильно тормозить анимация. В бою или на карте приключения может прям несколько кадров быть пропущено (герой/существо на несколько клеток прыгает вперёд). Возможно, дело в HD Mod, и на версии 1.5.1 рывки тоже были, но не такие сильные. Запускаю HDMod при нативном разрешении экрана FullHD в 1180х664, 32bit True (stretchable) GDI, фильтр - xBRZ + Bilinear. Система - Core i3-6006U, 8Гб. Core i3-6006U - это слишком слабый проц. для xBRZ + Bilinear и FullHD. попробуй Scale2x... , ну или Bilinear Sharper X2 (M) К сожалению комфортная игра с xBRZ в HDмоде доступна преимущественно на +- топовых ноутбучных процессорах. Хотя разным людям кофортен разный ФПС.. |
AKuHAK, drevoborod | ||
22 Jan 2018, 11:15 |
Лобби-сервер для HotA обсуждение разработки |
Будет ли возможность наблюдать за текущими играми? не будетЦитата(deadman_blr87) Есть ли какие-то идеи по следующим проблемам?: Не будет такого. Герои изначально спроектированы и разработаны так, что состояние игры хранится у клиента и менять это состояние может только клиент, т.к. никакого сервера изначально не предполагалось. Мой лобби-сервер лишь предоставляет канал связи между двумя клиентами, которые обмениваются данными между собой реализованым в 1999 году способом.- возможность переподключения игрока к игре, если вылет и повторный вход в лобби Проще написать игру с 0 с учетом клиент-серверной архетиктуры, чем перенести состояние игры и логику на сервер в уже имеющейся с помощью модинга. Цитата - распознавание намеренного лива с игры с последующим наказанием 100% верного распознавания сделать невозможно, но какие-то вещи по борьбе с этим явлением планируются.Цитата - возможность продолжить игру без отключившегося одного игрока, передать управление компьютеру в планах это есть. но сделать это не просто и приоритет у этих задач низкий.- возможность продолжения игры, при поражении одного из игроков |
deadman_blr87, Mefista, J2K, the_new_pirate, VAS_SFERD | ||
27 Dec 2017, 22:38 |
Баг-репорты |
Цитата(Berserker) Бара, создаю корректный _pcx16_ на лету Для режимов с 32-bit True - не корректный. В режимах с 32-bit True _pcx16_ должен быть на самом деле _pcx32_ т.е. 1 пиксель - 4 байта XRGB8888, а не 2 байта RGB565 размер сканлайна и всего буфера соответсвенно в 2 раза больше. Если ты вызываешь оригинальный конструктор, то в хд на него стоит хук который устанавливает измененные размеры сканлайна и буфера. А вот заполняешь ты картинку судя по всему 2х-байтовыми значениями RGB565. Нужно - 4х байтовыми XRGB8888. узнать битность режима можно например так: Значение байта по адресу (0x5FA228 + 3) будет равно 2 при оригинальном 16-битном режиме и равно 4 при 32-битном. правка байта по адресу (0x5FA228 + 3) в ХД применяется в начале вызова функции WinMain по адресу 0x4f80c0 Если помнишь, то в этих (32-bit True) режимах так же не работает цветной эровский текст, т.к. отрисовка символа (fnt::DrawCharacter 0x4B4F00) полностью переписана. |
Berserker | ||
22 Nov 2017, 16:07 |
patсher_x86 |
Патчер версии 4.3 + map-файл: скачать |
Ben, Berserker | ||
20 Nov 2017, 15:09 |
patсher_x86 |
В DIRECT_ HiHook наша замещающая функция должна 100% соответствовать соглашению о вызовах замещаемой. т.е. если мы ставим хук на __thiscall функцию, то наша должна быть тоже __thiscall, а точнее принимать первый аргумент в ecx, остальные в стеке. если мы ставим хук на __fastcall, то наша должна принимать аргументы в ecx, edx и стеке. если на __cdecl, то наша функция должна возвращать управление по retn, а не по retn (4 * колво аргументов в стеке) как это делают __stdcall, __fastcall, __thiscall В VC++ нет проблем с объявлением __stdcall, __cdecl, __fastcall функций __thiscall объявить нельзя, но вместо нее можно использовать __fastcall (a1, no_used, a2, ...) Не знаю как с этим обстоят дела в Делфи/Паскале. С __stdcall проблем не должно быть, __cdecl вроде тоже поддерживается, а вот насчет __fastcall и __thiscall я не уверен. DIRECT_ HiHook не передает указатель на хук в замещающую функцию и не создает никаких мостов, он передает управление сразу прямо на нашу замещающую функцию. |
Berserker | ||
20 Nov 2017, 03:12 |
patсher_x86 |
Цитата А как насчёт map-файла? Можешь скомпилировать библиотеку с генерацией оного? map сделаю к следующей версии патчера, которая выйдет на днях. |
Berserker | ||
19 Nov 2017, 21:25 |
patсher_x86 |
Berserker, в патчере целиком и полностью забито на многопоточность. Точнее в патчере: 1. нельзя создавать/ставить/отменять патчи/хуки в несколько потоков. 2. нельзя выполнять код с LoHook и HiHook (кроме DIRECT_) хуками в несколько потоков. можно в несколько потоков выполнять Asm и DIRECT_ HiHook хуки. 3. нельзя пользоваться методами VarInit и VarFind в несколько потоков. Цитата В дополнение к предыдущему посту. Бара, ты используешь VirtualProtect для того, чтобы дать странице памяти права READ_WRITE_EXECUTE, но не возвращаешь оригинальные права обратно после применения патча. Вообще-то обратно возвращаю. |
Berserker | ||
14 Nov 2017, 11:23 |
patсher_x86 |
Здесь последний патчер версии 4.2.9.1, хэдер для C++ версии 4.2 и pas-файл версии 2.1: скачать патчер SDK |
Ben, Berserker, igrik | ||
12 Nov 2017, 06:48 |
patсher_x86 |
Цитата адрес затёртого кода, хранимого в мосте: [затёртая команда 1] [затёртая команда 2] [возврат на адрес после затёртых команд] я не понимаю зачем давать пользователю LoHook'a возможность обращаться к адресу затертого кода в мосте и зачем вызывать такое внутри Handler, ведь на момент вызова этого будет неактуальным и непредсказуемым содержимое регистров. после return EXEC_DEFAULT в Handler в мосте происходит следующее: 1. значения всех регистров из контекста (HookContext::eax, ...) копируются в соответствующие регистры 2. выполняется затертый код (затертая команда 1, затертая команда 2, ...) 3. прыжок на HookContext::return_address. Если внутри Handler он не изменялся, то это будет адрес после затёртых команд в исходном коде. Что тут тебе еще может быть нужно, я не понимаю. Цитата Были баги, кода перезаписал места вида ADD ESP, XXX или PUSH XXX или POP XXX. У тебя такие проблемы исключены? проблем c уcтановкой ЛоуХука на команды изменяющие esp - нет. Цитата(baratorch) Код int __stdcall Handler(LoHook* h, HookContext* c) { какой-то код... ... выполнить затертое ... какой-то код... } Здесь главное то, что после выполнения затертого еще можно выполнить еще какой-то свой код внутри Handler. Под затертым я имею в виду реально затертое (это может быть джамп другого хука, о котором мы не знаем), А так-то мы всегда можем в Handler продублировать затираемый оригинальный код манипуляциями с HookContext::eax, ... |
Berserker | ||
11 Nov 2017, 21:21 |
patсher_x86 |
переделал свой тест добавил в тестируемый код pushfd - popfd и добавил еще 2 варианта Код pushad... : 10172 push edi...: 9781 push eax...: 9906 old... : 12172 new... : 10984 Код pushad... : 5912 push edi...: 5506 push eax...: 5398 old... : 7566 new... : 6053 old - это то как реализовано перемещение регистров в стек и обратно в последнем опубликованном patcher_x86 4.2.8 через кучу, т.е. некоторые значения проходят путь: регистр -> куча -> стек -> куча -> регистр. new - это новая реализация: регистр -> стек -> стек -> регистр По моему очень неплохо для новой, да и старая показывает результат того же порядка. И это 500 000 000 итераций уж в рамках героев разницей точно можно пренебречь. |
Berserker | ||
11 Nov 2017, 21:01 |
patсher_x86 |
Цитата(Berserker) Я так понимаю, как LoHook нет метода, возвращающего адрес в рамках моста для вызова оригинальной (замещённой функции) или оригинальных команд с последующим продолжением исполнения, как если бы патча не существовало?. Я что-то не понял вопроса. Всмысле можно ли поставить LoHook который ничего не делает (просто выполняет затертый код)? Да, можно: Код int __stdcall NopFunc(LoHook* h, HookContext* c) { return EXEC_DEFAULT; } ... _PI->WriteLoHook(0xAABBCC, NopFunc); или нужно что-то вроде: Код int __stdcall Handler(LoHook* h, HookContext* c) { какой-то код... ... выполнить затертое ... какой-то код... } если да, то такое нельзя сделать. такое есть в WriteAsmHook: _PI->WriteAsmHook("какие-то команды....; _ExecDefault; какие-то команды...", 0); Цитата LoHook нет метода, возвращающего адрес в рамках моста для вызова оригинальной (замещённой функции) для LoHook нет понятия оригинальной (замещенной) функции. LoHook устанавливается просто на код. Что там за код под ним - не имеет значения. Я из кода эры не очень могу понять как устанавливается HOOKTYPE_BRIDGE хук. В самом мосте адрес возврата у тебя не пушится. Но в контексте он есть, так? Значит от попадает в стек до выполнения моста, так? Значит перенаправление на сам мост из оригинального кода идет посредством call? У меня же перенаправление на мост идет посредством jmp а адрес возврата помещается в контекст внутри моста. Второе. Я правильно понимаю что в твоем HOOKTYPE_BRIDGE мосте, если Handler возвращает EXEC_DEFAULT, то мост игнорирует адрес возврата из контекста и прыгает обратно туда, куда должен по умолчанию? У меня же в мост прыгает по адресу возврата из контекста , который мы возможно изменили внутри Handler, в любом случае: вернул ли Handler SKIP_DEFAULT или EXEC_DEFAULT |
Berserker | ||
11 Nov 2017, 16:13 |
patсher_x86 |
озадачился я вопросом скорости выполнения моста состряпал тест вот с таким кодом: скачать тестовый экзешник результат несколько неожиданный на моем рабочем ноуте такой: pushad... : 3074 push edi...: 2386 push eax...: 2590 на лобби сервере для Хоты: pushad... : 6719 push edi...: 4547 push eax...: 4625 * можно посмотреть в отладчике что тест выполняется честно * при перестановке местами вариантов результаты теста не меняются то есть pushad получается самым медленным. а именно та портянка, которая используется сейчас в патчере - самая быстрая. *** приведенный мной выше код моста я сократил и убрал перемещение значений esp и регистра флагов через кучу: но как сделать перемещение адреса возврата не через кучу я не представляю, кажется что сохранив функционал этого не сделать.. вобщем теперь переживать из-за размера моста можно будет меньше. кстати в дампе патчера есть записи bridge memory - это память выделенная патчером под все мосты. bridges sizes sum - это суммарный размер всех мостов. |
Berserker | ||
09 Nov 2017, 22:23 |
patсher_x86 |
в патчере в мосте лоу-хука до сих пор портянка команд на сохранение каждого регистра Для все той же обратной совместимости. Более того, в коде моста много данных в регистр/стек попадают через кучу (временные переменные). сейчаc код моста вот такой: Порядок регистров, адреса возврата и регистра флагов здесь продиктован лишь обратной совместимостью. Да, можно изменив порядок этого всего внутри HookContex сделать короче и красивее. Но мне лично лень ломать голову как это сделать я не ASM-нинзя, здесь скорее кто-то вроде MasterOfPuppets нужен. Предложите ваше решение и я добавлю в патчер "NewFastLoHook" хук. а старый LoHook останется для обратной совместимости. Но вообще от этой страшной медленной портянки никто, кроме тебя не страдает. Да и начиная с версии 4 используя PatcherInstance::WriteAsmHook или Patcher::WriteAsmCode можно легко написать низкоуровневый хук точно и тонко самому определив код его моста. Цитата Имеется сейчас актуальный pas-файл для подключения патчера и ссылка на сам патчер последней версии? актуального pas-файла нет, так как он уже несколько лет (!) никому не нужен. можно использовать старый, но, очевидно, не будет доступен добавленный позднее функционал (например Asm-патчи и Asm-хуки) Здесь последний патчер версии 4.2.8, хэдер для C++ версии 4.2 и pas-файл версии 2.1: скачать патчер SDK |
Berserker | ||
17 Sep 2017, 22:09 |
patсher_x86 |
Цитата Патчер - это инструмент для модификации любого исполняемого кода (не только героев). Кто-нибудь может привести пример, как использовать патчер для моддинга других игр (например, Героев 2)? Сейчас я в отпуске. Вернусь, покажу пример модинга героев 2. Я же начал делать ХД мод для двойки, но запнулся о локализацию, просто обломало ее делать. И работа дальше не пошла, хотя двойка (экзешник с сигнатурами) - благодатнейшая платформа для модинга. |
AlexSpl, hippocamus, Orzie | ||
05 Sep 2017, 04:39 |
Добавление функционала в HDmod |
А как? Может есть готовое решение, которое достаточно закинуть в папку? не помню… я доставал и засовывал обратно с помощью MMArchive, эта штука вроде только для windows и не знаю можно ли её использование скриптовать. если просто положить файл отдельно, опять же не проверял, может и прокатило бы. сейчас лень повторять, решил что проще смириться с обычной графикой. Так нужый батлфилд (bmp) и так достаточно закинуть в папку _HD3_Data\Common, раз уж обсуждение в теме ХД. |
the_new_pirate, dimakey | ||
27 Aug 2017, 17:43 |
Баг-репорты |
у меня установлен и выбран HW_rulez 1.40, но всё равно получается вот так. в чём может быть проблема? Установи Microsoft Visual C++ 2008 Redistributable Package: https://www.microsoft.com/ru-ru/download/details.aspx?id=29 |
the_new_pirate | ||
21 Aug 2017, 18:02 |
HD Флуд Флуд и офф-топ высокого разрешения |
Цитата(USBhere) Лично для меня главной ненужной заморочкой является упор разработчиков ХоТА на эстетической красоте мода. Как то странновато тратить уйму времени на полировку пикселей и отладку теней, которые будут не заметны глазу 90% игроков.Геройщики ждут от мода более лояльный и гибкий функционал, который будет позволять человеку удовлетворить различные его потребности и насытить игру разнообразием (в том числе и рендомом), который бывает критичен при длительном "зависании" в Г3. Чем еще заниматься людям, кторые (утрируя) умеют только пиксели полировать и отлаживать тени? Это художники должны новый функционал реализовывать? C помощью чего, фотошопа? Вся разработка игры бОльшую часть самой важной и успешной истории в хоте держится на одном(!) человеке. Я в свое время помог с редактором карт, еще человек сейчас сделал редактор шаблонов. Но саму игру на 99,5% делает один человек. |
hippocamus, Лентяй, XEPOMAHT, DrSlash | ||
Текстовая версия | Сейчас: 3 March 2021 - 14:26 |
Copyright by Алексей Крючков
![]() Programming by Degtyarev Dmitry |
|