Dmcr не работает казаки windows 7

Обновлено: 04.07.2024

Файл dmcr.exe из -GSC- является частью -GSC- dmcr. dmcr.exe, расположенный в c: \program files \ (x86)cossacks - imperiacossacks - imperia\ dmcr .exe с размером файла 2580568 байт, версия файла 1, 0, 0, 1, подпись e59da6f23608eef20640f61a8a95378c.

  1. Запустите приложение Asmwsoft Pc Optimizer.
  2. Потом из главного окна выберите пункт "Clean Junk Files".
  3. Когда появится новое окно, нажмите на кнопку "start" и дождитесь окончания поиска.
  4. потом нажмите на кнопку "Select All".
  5. нажмите на кнопку "start cleaning".

Clean Registry to fix dmcr.exe has stopped working error

  1. Запустите приложение Asmwsoft Pc Optimizer.
  2. Потом из главного окна выберите пункт "Fix Registry problems".
  3. Нажмите на кнопку "select all" для проверки всех разделов реестра на наличие ошибок.
  4. 4. Нажмите на кнопку "Start" и подождите несколько минут в зависимости от размера файла реестра.
  5. После завершения поиска нажмите на кнопку "select all".
  6. Нажмите на кнопку "Fix selected".
    P.S. Вам может потребоваться повторно выполнить эти шаги.

3- Настройка Windows для исправления критических ошибок dmcr.exe:

Clean Registry to fix dmcr.exe has stopped working error

  1. Нажмите правой кнопкой мыши на «Мой компьютер» на рабочем столе и выберите пункт «Свойства».
  2. В меню слева выберите " Advanced system settings".
  3. В разделе «Быстродействие» нажмите на кнопку «Параметры».
  4. Нажмите на вкладку "data Execution prevention".
  5. Выберите опцию " Turn on DEP for all programs and services . " .
  6. Нажмите на кнопку "add" и выберите файл dmcr.exe, а затем нажмите на кнопку "open".
  7. Нажмите на кнопку "ok" и перезагрузите свой компьютер.
Как другие пользователи поступают с этим файлом?

Всего голосов ( 181 ), 115 говорят, что не будут удалять, а 66 говорят, что удалят его с компьютера.


Итак, у вас яркие цветные пиксели в казаках? На экране ничего не понятно? Патчи и совместимость не помогли? Вам сюда.

Сразу говорю, делал я это на Windows7, но мне кажется, что это поможет и на ХР и на Виста.

Условия:
- У вас крутой или не очень DVI экран с 16.7 млн. цветами
- У вас крутая или не очень видюха от NVidia серии от 6800 до бесконечности
- У вас винегрет из цветных пикселей, играть невозможно
- Вам не помогли патчи
- Вам не помогла совместимость
- Вам не помогло включение экрана не в DVI, а в VGA
- Вам ну очень хочется поиграть в казаки


Это все я писал из своего опыта. Данное решение - моя идея. Я не встречал его нигде более. Все совпадения - случайны.


о да, наконецто хоть какое то решение, щас запробую)

Arantir_3000, тебе +10:)



А какая именно у тебя проблема была?

ты сворачивал на win+D .
у тебя семерка или ХР ?


у меня пиксели разноцветные были, не все но 99 процентов гдето))
доминировали цвета в основном это сине-фиолетовый или зеленый, при переходе в другое меню все становилось нормально (относительно, всеравно коегде оставался лишние пиксели разных цветов, но это особых неудобств не доставляло, как говорится и не такое видали))
потом нашел тут патч который какбе устраняет проблемы с работой на современных карточках. Как видно он не устраняет их а заменяет другими) - теперь доминирующий цвет только один - черный и доминирует он не на 99 а на все сто процентов - черный екран как только заходиш в игру и пока не тыкнеш на угад (в настройки например, в принципе как карта ляжет))
и в самой игре через некоторое время 50 процентов гдето пикселей становятся чисто черными, в самом деле темная картина) не помогает ничто, только переход в главное меню, а как же по сетке такое провернешь?

сворачивание-разворачивание не дает никакого эффекта, вообще.

значит у меня семерка, пробовал ставить 16 бит (8 там попросту нет), на ярлыке совместимость с вин2000 и 256 цветов + в дровах настройки от приложения - толку ноль.
да, и игра с последним патчем, точно такая же проблема у брата, но у него видяха 240 ГТ и проц другой и тоже 7ка, симптомы те же.

ваше слово, рубить?)


кстати писал я это именно на такую проблему, что у тя (и у мя), то есть:

1 включил - картинка различка, но цвета все спутались и яркие и воще все хреновое
2 если где-нить нажать, то вроде все норм, но в некоторых местах яркие пиксели чуть-чуть "рассыпаны"
3 некоторые миссии запускаются норм (но немного яких цветных пикселей)
4 некоторые миссии запускаются так как меню в самом начале - них неясно
5 патч делает все черным. после нажатия иногда все как в первом пункте, но розовое, а иногда все как во втором, то есть патч не помог

я гляжу ты на панели НВидиа ставил.
теперь то понятно, почему не получилось. тут свернуть развернуть не главное, главное 256 цветов, без них никак. иногда даже сверн.-заверн. не надо, все так работает, НО на 256 цветов

панель управления - оформление - экран - разрешение - дополнительные параметры - список всех режимов - в списке по очереди 32 бит, 16 бит ,8 бит(там 256 цветов называется), на каждую частоту и разрешение.

о, да, и патч удали. хотя он не удаляться, ведь замена файлов, кароч сделай казаки без него. или восстанови файл или переустанови казаки.

Есть решение! Казаки: Европейские войны (Cossacks: European Wars) — тормозит? Вылетает? Зависает? Ошибки? Черный экран? Не запускается?

Решение проблем в Cossacks: European Wars — не устанавливается? Не запускается? Тормозит? Вылетает? Лагает? Ошибка? Не загружается?

К сожалению, в играх бывают изъяны: тормоза, низкий FPS, вылеты, зависания, баги и другие мелкие и не очень ошибки. Нередко проблемы начинаются еще до начала игры, когда она не устанавливается, не загружается или даже не скачивается. Да и сам компьютер иногда чудит, и тогда в Cossacks: European Wars вместо картинки черный экран, не работает управление, не слышно звук или что-нибудь еще.

Что сделать в первую очередь

  1. Скачайте и запустите всемирно известный CCleaner (скачать по прямой ссылке) - это программа, которая очистит ваш компьютер от ненужного мусора, в результате чего система станет работать быстрее после первой же перезагрузки;
  2. Обновите все драйверы в системе с помощью программы Driver Updater (скачать по прямой ссылке) - она просканирует ваш компьютер и обновит все драйверы до актуальной версии за 5 минут;
  3. Установите Advanced System Optimizer (скачать по прямой ссылке) и включите в ней игровой режим, который завершит бесполезные фоновые процессы во время запуска игр и повысит производительность в игре.

Системные требования Cossacks: European Wars

Второе, что стоит сделать при возникновении каких-либо проблем с Cossacks: European Wars, это свериться с системными требованиями. По-хорошему делать это нужно еще до покупки, чтобы не пожалеть о потраченных деньгах.

Минимальные системные требования Cossacks: European Wars:

Windows XP, Vista и 7, Процессор: C тактовой частотой 1,4 ГГц, 512 МБ ОЗУ, 350 МБ HDD, Cовместимая с DirectX 9 Видеопамять: 64 МБ

Каждому геймеру следует хотя бы немного разбираться в комплектующих, знать, зачем нужна видеокарта, процессор и другие штуки в системном блоке.

Системные требования Cossacks: European Wars

Файлы, драйверы и библиотеки

Практически каждое устройство в компьютере требует набор специального программного обеспечения. Это драйверы, библиотеки и прочие файлы, которые обеспечивают правильную работу компьютера.

Начать стоит с драйверов для видеокарты. Современные графические карты производятся только двумя крупными компаниями — Nvidia и AMD. Выяснив, продукт какой из них крутит кулерами в системном блоке, отправляемся на официальный сайт и загружаем пакет свежих драйверов:


Обязательным условием для успешного функционирования Cossacks: European Wars является наличие самых свежих драйверов для всех устройств в системе. Скачайте утилиту Driver Updater, чтобы легко и быстро загрузить последние версии драйверов и установить их одним щелчком мыши:

  • загрузите Driver Updater и запустите программу;
  • произведите сканирование системы (обычно оно занимает не более пяти минут);
  • обновите устаревшие драйверы одним щелчком мыши.


Фоновые процессы всегда влияют на производительность. Вы можете существенно увеличить FPS, очистив ваш ПК от мусорных файлов и включив специальный игровой режим с помощью программы Advanced System Optimizer

  • загрузите Advanced System Optimizer и запустите программу;
  • произведите сканирование системы (обычно оно занимает не более пяти минут);
  • выполните все требуемые действия. Ваша система работает как новая!

Драйверы для Cossacks: European Wars

Cossacks: European Wars не скачивается. Долгое скачивание. Решение

Скорость лично вашего интернет-канала не является единственно определяющей скорость загрузки. Если раздающий сервер работает на скорости, скажем, 5 Мб в секунду, то ваши 100 Мб делу не помогут.

Если Cossacks: European Wars совсем не скачивается, то это может происходить сразу по куче причин: неправильно настроен роутер, проблемы на стороне провайдера, кот погрыз кабель или, в конце-концов, упавший сервер на стороне сервиса, откуда скачивается игра.

Cossacks: European Wars не скачивается

Cossacks: European Wars не устанавливается. Прекращена установка. Решение

Перед тем, как начать установку Cossacks: European Wars, нужно еще раз обязательно проверить, какой объем она занимает на диске. Если же проблема с наличием свободного места на диске исключена, то следует провести диагностику диска. Возможно, в нем уже накопилось много «битых» секторов, и он банально неисправен?

В Windows есть стандартные средства проверки состояния HDD- и SSD-накопителей, но лучше всего воспользоваться специализированными программами.

Но нельзя также исключать и вероятность того, что из-за обрыва соединения загрузка прошла неудачно, такое тоже бывает. А если устанавливаете Cossacks: European Wars с диска, то стоит поглядеть, нет ли на носителе царапин и чужеродных веществ!

Cossacks: European Wars не устанавливается

Cossacks: European Wars не запускается. Ошибка при запуске. Решение

Cossacks: European Wars установилась, но попросту отказывается работать. Как быть?

Выдает ли Cossacks: European Wars какую-нибудь ошибку после вылета? Если да, то какой у нее текст? Возможно, она не поддерживает вашу видеокарту или какое-то другое оборудование? Или ей не хватает оперативной памяти?

Помните, что разработчики сами заинтересованы в том, чтобы встроить в игры систему описания ошибки при сбое. Им это нужно, чтобы понять, почему их проект не запускается при тестировании.

Обязательно запишите текст ошибки. Если вы не владеете иностранным языком, то обратитесь на официальный форум разработчиков Cossacks: European Wars. Также будет полезно заглянуть в крупные игровые сообщества и, конечно, в наш FAQ.

Если Cossacks: European Wars не запускается, мы рекомендуем вам попробовать отключить ваш антивирус или поставить игру в исключения антивируса, а также еще раз проверить соответствие системным требованиям и если что-то из вашей сборки не соответствует, то по возможности улучшить свой ПК, докупив более мощные комплектующие.

Cossacks: European Wars не запускается

В Cossacks: European Wars черный экран, белый экран, цветной экран. Решение

Проблемы с экранами разных цветов можно условно разделить на 2 категории.

Во-первых, они часто связаны с использованием сразу двух видеокарт. Например, если ваша материнская плата имеет встроенную видеокарту, но играете вы на дискретной, то Cossacks: European Wars может в первый раз запускаться на встроенной, при этом самой игры вы не увидите, ведь монитор подключен к дискретной видеокарте.

Во-вторых, цветные экраны бывают при проблемах с выводом изображения на экран. Это может происходить по разным причинам. Например, Cossacks: European Wars не может наладить работу через устаревший драйвер или не поддерживает видеокарту. Также черный/белый экран может выводиться при работе на разрешениях, которые не поддерживаются игрой.

Cossacks: European Wars черный экран

Cossacks: European Wars вылетает. В определенный или случайный момент. Решение

Играете вы себе, играете и тут — бац! — все гаснет, и вот уже перед вами рабочий стол без какого-либо намека на игру. Почему так происходит? Для решения проблемы стоит попробовать разобраться, какой характер имеет проблема.

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

Однако если вы точно знаете, в какие моменты происходит вылет, то можно и продолжить игру, избегая ситуаций, которые провоцируют сбой. Кроме того, можно скачать сохранение Cossacks: European Wars в нашем файловом архиве и обойти место вылета.

Cossacks: European Wars вылетает

Cossacks: European Wars зависает. Картинка застывает. Решение

Ситуация примерно такая же, как и с вылетами: многие зависания напрямую связаны с самой игрой, а вернее с ошибкой разработчика при ее создании. Впрочем, нередко застывшая картинка может стать отправной точкой для расследования плачевного состояния видеокарты или процессора.Так что если картинка в Cossacks: European Wars застывает, то воспользуйтесь программами для вывода статистики по загрузке комплектующих. Быть может, ваша видеокарта уже давно исчерпала свой рабочий ресурс или процессор греется до опасных температур?Проверить загрузку и температуры для видеокарты и процессоров проще всего в программе MSI Afterburner. При желании можно даже выводить эти и многие другие параметры поверх картинки Cossacks: European Wars.Какие температуры опасны? Процессоры и видеокарты имеют разные рабочие температуры. У видеокарт они обычно составляют 60-80 градусов по Цельсию. У процессоров немного ниже — 40-70 градусов. Если температура процессора выше, то следует проверить состояние термопасты. Возможно, она уже высохла и требует замены.Если греется видеокарта, то стоит воспользоваться драйвером или официальной утилитой от производителя. Нужно увеличить количество оборотов кулеров и проверить, снизится ли рабочая температура.

Cossacks: European Wars зависает

Cossacks: European Wars тормозит. Низкий FPS. Просадки частоты кадров. Решение

  • Разрешение теней — определяет, насколько детальной будет тень, отбрасываемая объектом. Если в игре динамические тени, то загружает ядро видеокарты, а если используется заранее созданный рендер, то «ест» видеопамять.
  • Мягкие тени — сглаживание неровностей на самих тенях, обычно эта опция дается вместе с динамическими тенями. Вне зависимости от типа теней нагружает видеокарту в реальном времени.


Cossacks: European Wars тормозит. Низкий FPS

Cossacks: European Wars лагает. Большая задержка при игре. Решение

Многие путают «тормоза» с «лагами», но эти проблемы имеют совершенно разные причины. Cossacks: European Wars тормозит, когда снижается частота кадров, с которой картинка выводится на монитор, и лагает, когда задержка при обращении к серверу или любому другому хосту слишком высокая.

Именно поэтому «лаги» могут быть только в сетевых играх. Причины разные: плохой сетевой код, физическая удаленность от серверов, загруженность сети, неправильно настроенный роутер, низкая скорость интернет-соединения.

Cossacks: European Wars лагает

В Cossacks: European Wars нет звука. Ничего не слышно. Решение

Cossacks: European Wars работает, но почему-то не звучит — это еще одна проблема, с которой сталкиваются геймеры. Конечно, можно играть и так, но все-таки лучше разобраться, в чем дело.

Сначала нужно определить масштаб проблемы. Где именно нет звука — только в игре или вообще на компьютере? Если только в игре, то, возможно, это обусловлено тем, что звуковая карта очень старая и не поддерживает DirectX.

Если же звука нет вообще, то дело однозначно в настройке компьютера. Возможно, неправильно установлены драйвера звуковой карты, а может быть звука нет из-за какой-то специфической ошибки нашей любимой ОС Windows.

В Cossacks: European Wars нет звука

В Cossacks: European Wars не работает управление. Cossacks: European Wars не видит мышь, клавиатуру или геймпад. Решение

Как играть, если невозможно управлять процессом? Проблемы поддержки специфических устройств тут неуместны, ведь речь идет о привычных девайсах — клавиатуре, мыши и контроллере.Таким образом, ошибки в самой игре практически исключены, почти всегда проблема на стороне пользователя. Решить ее можно по-разному, но, так или иначе, придется обращаться к драйверу. Обычно при подключении нового устройства операционная система сразу же пытается задействовать один из стандартных драйверов, но некоторые модели клавиатур, мышей и геймпадов несовместимы с ними.Таким образом, нужно узнать точную модель устройства и постараться найти именно ее драйвер. Часто с устройствами от известных геймерских брендов идут собственные комплекты ПО, так как стандартный драйвер Windows банально не может обеспечить правильную работу всех функций того или иного устройства.Если искать драйверы для всех устройств по отдельности не хочется, то можно воспользоваться программой Driver Updater. Она предназначена для автоматического поиска драйверов, так что нужно будет только дождаться результатов сканирования и загрузить нужные драйвера в интерфейсе программы.Нередко тормоза в Cossacks: European Wars могут быть вызваны вирусами. В таком случае нет разницы, насколько мощная видеокарта стоит в системном блоке. Проверить компьютер и отчистить его от вирусов и другого нежелательного ПО можно с помощью специальных программ. Например NOD32. Антивирус зарекомендовал себя с наилучшей стороны и получили одобрение миллионов пользователей по всему миру. ZoneAlarm подходит как для личного использования, так и для малого бизнеса, способен защитить компьютер с операционной системой Windows 10, Windows 8, Windows 7, Windows Vista и Windows XP от любых атак: фишинговых, вирусов, вредоносных программ, шпионских программ и других кибер угроз. Новым пользователям предоставляется 30-дневный бесплатный период.Nod32 — анитивирус от компании ESET, которая была удостоена многих наград за вклад в развитие безопасности. На сайте разработчика доступны версии анивирусных программ как для ПК, так и для мобильных устройств, предоставляется 30-дневная пробная версия. Есть специальные условия для бизнеса.

Cossacks: European Wars не работает управление

Cossacks: European Wars, скачанная с торрента не работает. Решение

Если дистрибутив игры был загружен через торрент, то никаких гарантий работы быть в принципе не может. Торренты и репаки практически никогда не обновляются через официальные приложения и не работают по сети, потому что по ходу взлома хакеры вырезают из игр все сетевые функции, которые часто используются для проверки лицензии.
Такие версии игр использовать не просто неудобно, а даже опасно, ведь очень часто в них изменены многие файлы. Например, для обхода защиты пираты модифицируют EXE-файл. При этом никто не знает, что они еще с ним делают. Быть может, они встраивают само-исполняющееся программное обеспечение. Например, майнер, который при первом запуске игры встроится в систему и будет использовать ее ресурсы для обеспечения благосостояния хакеров. Или вирус, дающий доступ к компьютеру третьим лицам. Тут никаких гарантий нет и быть не может.К тому же использование пиратских версий — это, по мнению нашего издания, воровство. Разработчики потратили много времени на создание игры, вкладывали свои собственные средства в надежде на то, что их детище окупится. А каждый труд должен быть оплачен.Поэтому при возникновении каких-либо проблем с играми, скачанными с торрентов или же взломанных с помощью тех или иных средств, следует сразу же удалить «пиратку», почистить компьютер при помощи антивируса и приобрести лицензионную копию игры. Это не только убережет от сомнительного ПО, но и позволит скачивать обновления для игры и получать официальную поддержку от ее создателей.

Скачанная с торрента Cossacks: European Wars не работает

Cossacks: European Wars выдает ошибку об отсутствии DLL-файла. Решение

Как правило, проблемы, связанные с отсутствием DLL-библиотек, возникают при запуске Cossacks: European Wars, однако иногда игра может обращаться к определенным DLL в процессе и, не найдя их, вылетать самым наглым образом.

Если ваша проблема оказалась более специфической или же способ, изложенный в данной статье, не помог, то вы можете спросить у других пользователей в нашей рубрике «Вопросы и ответы». Они оперативно помогут вам!

Данный патч позволяет запускать и играть в Казаки на Windows 7. У многих, даже можно сказать у всех, игра Казаки не идет на Windows 7, и им хочется запустить игру Казаки на windows 7. Эта проблема связана с тем, что разработчики игры Казаки не предусмотрели данную проблему. Ведь когда игра Казаки вышла? Тогда даже Windows 7 и в помине не было.

Это программа или патч (ее можно называть по разному) решает проблему запуска игр Казаки Европейские Войны, Казаки Снова Война и Казаки Последний Довод Королей, во общем решает проблему с запуском всех версий игры Казаки на Windows 7 (виндовс 7).

Установка очень и очень проста, вам практически ни чего делать не придется. Всего лишь после скачивания, распакуйте содержимое в папку с игрой и вы сможете запускать Казаки на Windows 7. Запускать игру Казаки надо через dmcr.bat. Надеюсь вы поняли, как запустить Казаки на Windows 7.



Вот такая вот ошибочка, пробовал войти через совместимость с XP не выходит, патч запускается на секунду и вылетает в виндовс. Стоит 7ка 64 бит

Сайт о серии игр "Казаки"


Самый легкий способ избавиться от всех проблем вылета

  1. Запустить средство для устранения проблем с совместимостью (для Windows 10)
  2. Устанавливаем патч (перекидываем все файлы в папку с игрой)
  3. Скачиваем патч для новых видеокарт (ddraw.dll) и переименовываем его в mdraw.dll.
  4. Заменяем патч на файл из папки с игрой.

Не работает мышка, черный экран и музыка

DirectDraw Init failed : Mode 1024x768x8 not found. Cossacks should not run.

Быстро крутится мельница, быстрый скроллинг (прокручивание), быстрая скорость игры

Игра на нетбуке

Как настроить игру на Windows 7

Инверсия (искажение) цветов

Windows 8


Такие должны быть настройки

После данной настройки обычно игра казаки на Windows 8 должна запуститься нормально. Данный способ игры проверялся на версиях: Казаки Снова Война и Казаки Последний Довод Королей. Также возможно что работает на игре Казаки Европейские Войны и Казаки Эхо Войны. По отзывам пользователей, у некоторых не работает на версии Казаки Империя.


После нескольких месяцев работы над исходным кодом игры «Казаки: Снова война» я наконец-то могу умыть руки и представить результат своих трудов. В этой статье мне хотелось бы поделиться с вами опытом рефакторинга этого незаурядного проекта, в частности кодовыми курьёзами. Всем любителям некро-программирования посвящается…

Начало

Первое и одно из самых неприятных препятствий было не в коде, а в самих проектах. Всего их четыре:

  • статическая библиотека CommCore.lib (сетевой протокол GSCp на базе UDP)
  • динамическая библиотека IntExplorer.dll (игровое лобби на сервере)
  • динамическая библиотека IChat.dll (чат в игровом лобби)
  • исполняемый файл dmcr.exe

Стартуем

Так, с проектами разобрались, теперь можно браться за дело. Компилятор рад за нас и приветствует множеством ошибок C2065: необъявленный идентификатор. Смотрим код и видим повсюду такую картину:


Конечно, можно было бы выставить /Zc:forScope- и забыть об этом, но мы же не кочегары и не плотники. Правим ручками больше сотни таких отрезков кода, продолжаем.

Следующее препятствие заключалось в графическом элементе, точнее в DirectDraw 7. Он активно использует механизм замены системной палитры. И если ранее это было повсеместной практикой, то начиная с Windows Vista такие фокусы больше не проходят. Дело в том, что DWM вместе с Windows Aero вплотную работают с палитрой и не терпят конкуренции. В итоге множество старых игр страдают от искажения цветов.

Не являясь экспертом по DirectX, я стал искать готовое решение и нашёл его в версии «Казаков», опубликованной на Steam в 2010 году. Помимо самой библиотеки ddraw.dll в папке с игрой присутствует дополнительная библиотека mdraw.dll, которая экспортирует функцию инициализации DirectDrawCreate(). Скажу честно – я не знаю, что именно ребята из GSC написали в их библиотеке DDemu DirectDraw Emulator в 2008 году, но она прекрасно справляется со своей задачей. Недолго думая я добавил соответствующую обёртку в Ddini.cpp и забыл об этой проблеме.

Затем встал вопрос об отладке полноэкранного приложения. Здесь мне снова повезло – в коде был предусмотрен отладочный режим, в котором игра запускалась в углу экрана в безрамном окне с фиксированным размером. Мне требовалось лишь довести его до ума, добавить смену разрешения, обработать захват и возврат курсора в зависимости от того, в меню ли игрок или в активной игре и добавить соответствующие параметры при старте. Теперь можно было удобно запускать игру в отладчике с ключом /window.

Далее представлены странные, проблемные и ошибочные участки кода игры «Казаки: Снова Война», с которыми я столкнулся во время работы. Прошу учесть, что целью данной статьи ни в коем случае не является критика или высмеивание разработчиков данной игры. Я считаю, что «Казаки: Снова Война» представляют собой исключительный результат усердной роботы и кропотливой оптимизации небольшой команды разработчиков, которые очень высоко подняли планку производительности и размаха битв для игр жанра RTS. Спасибо вам, GSC!

Весёлая арифметика

Причина такого поведения ИИ крылась в следующем финте ушами при копировании настроек от хоста игры в буфер обмена:


А вот так декларирована структура PlayerInfo:

В итоге я всё же принял решение не трогать UserParam[], а добавить массив UserParam2[3] в конце структуры, так как в одном из последних элементов хранится версия клиента и любое изменение структуры до него чревато неверным определением версий в игровом лобби. А так игроки с версией 1.35 будут видеть, что у других обновлённая версия игры.

Какие уроки можно почерпнуть для себя из этого?

Невидимый Джо Дефайн


«Ну и что в этом такого? — спросите вы — Всего лишь пробел в качестве константы». Ну, во-первых, пробел был бы крайне странным выбором для идентификации чего-либо в строке текста, а во-вторых это вовсе не пробел. SIGNBYTE определён как 0x7F, или управляющий символ DEL. И если ваш браузер достаточно осмотрителен и хотя бы показывает, что между кавычками что-то есть, то Visual Studio 2015 вероломно рисует '', между которыми курсор «спотыкается» на один символ.

Пожалуйста, если уж вы используете непечатаемые символы, то указывайте их в коде через шестнадцатеричное значение, а не как символ.

Правовой аспект

Всякий раз удивляюсь, когда для запуска игры требуются права администратора. И всякий раз думаю что-то вроде «ну как так можно игры программировать-то». Но в этот раз у меня и код на руках был, и собирал его я сам, а окно UAC всё так же не давало мне покоя.

Ответ нашёлся совершенно случайно, когда я подумал, что неплохо было бы вписать в свойства исполняемого файла информацию о том, что эта версия игры не оригинальная и не поддерживается разработчиками. Манифеста в проекте, естественно, не было, но был файл ресурсов Script1.rc. Каково же было моё удивление, когда после изменения блока VS_VERSION_INFO игре перестали требоваться права администратора!

Оказывается, ОС Windows начиная с Windows Vista применяет эвристический алгоритм для определения приложений, которым может потребоваться повышение привилегий. Называется эта функция «Технологией обнаружения установщика» (см. статью в ИТ-центре Windows), и обычно она реагирует на ключевые слова вроде install или setup. Но в нашем случае виновником оказался параметр CompanyName — если он содержит строку "-GSC-\0", то просыпается UAC и требует прав администратора.

Как уберечь своё приложение от такой эвристики со стороны Майкрософт, существующей и грядущей? А никак. Сегодня вы разрабатываете игры, а завтра уже стоите в одном ряду с Inno Setup и InstallShield.

Партизанский sscanf()

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

Опущу скучные детали отладки и перейду к самому соку. Настройки игры, вид карты и данные о выбранных нациях передаются через имя файла случайной карты, которое имеет формат , где

  • RN0: префикс RN и размер карты (0 — 2)
  • 1A3C: значение ГПСЧ для инициализации случайной карты
  • 12345: Вид карты (ландшафт, горы, месторождения и пр.)
  • 0KFH31CJ: Нации, которые выбрали игроки (0 — K)
  • 4501326: Настройки игры (Артиллерия, PT и пр.)


Загвоздка здесь в том, что для четвёртой переменной указан тип %x, в то время как диапазон символов в ней выходит за рамки шестнадцатиричной системы и простирается до буквы K. Если в игре присутствуют игроки, которые выбрали нации с индексом выше F, то sprintf() преждевременно закончит парсинг и вернёт 4. Параметры не будут интерпретированы, у ИИ будет неправильная информация об игре и он будет принимать другие решения, что приведёт к рассинхронизации.

В дополнение к этому идёт тот факт, что sprintf() вызывается исключительно для ADD_PARAM — остальные переменные нигде не используются. Решение проблемы относительно простое:


Флаг * указывает функции, что значение не следует сохранять в переменной. Кстати, пoсмотреть, каким образом я реализовал кодирование 10 игровых настроек на месте тех же 7 цифр можно здесь. «Зачем?» — спросите вы. А потому что менять длину строки с именем файла карты по своему усмотрению показалось мне не очень хорошей идеей (см. выше в «Весёлой арифметике»).

Самое интересное для меня здесь это тот факт, что баг проявил себя лишь при компиляции в . Получается, что реализация функции sscanf() в стандартной библиотеке за прошедшие годы стала построже и впредь не будет прощать такие вольности со стороны программистов.

Памятка: Следовать в первую очередь требованиям документации, а не принципу «рабочий код — правильный код».

Тонкости языка

Локализация это отдельная тема для любого разработчика, но такое я увидел впервые:


Если вам этого мало, предлагаю заглянуть под спойлер и посмотреть, для чего же нужен этот «крипто-ключ».

Вот таким нехитрым образом можно запороть локализацию на этапе компилирования. Если, например, «английскому» dmcr.exe подсунуть архив с ресурсами из русской версии, то всё, что останется от игры — окно ошибки access violation. Потому что ни до, ни после «isi memory decryption» содержимое буфера не проверяется. А вот если мы распакуем архив all.gsc, заменим файлы и запакуем его обратно, то в игре нас будет ждать русский интерфейс.

Посмотрев на эту XOR-вакханалию я решил ограничиться английской версией, но с поддержкой кириллицы в чате. Так как весь текст отрисовывается через собственные шрифты игры, я скопировал из русской версии ресурс mainfont.gp. Осталось только отловить символы, выходящие за пределы диапазона ascii, и правильно сопоставить коды букв с «индексом кадров» этого файла (формат GP используется в игре повсеместно для хранения графики, в том числе и для анимации). Не самое элегантное решение, зато работает безотказно, причём на сервере в чате с игроками под версией 1.35 тоже.

UDP без дырок

К сожалению, в оригинальных «Казаках» не был реализован механизм UDP hole punching, который позволил бы игрокам подключаться к игровым комнатам, даже если их хост находится по ту сторону NAT своего провайдера.

Все детали реализации можно посмотреть в классе UdpHolePuncher. Соединение инициализируется при создании игровой комнаты хостом, после чего он вплоть до старта игры поддерживает связь, отправляя небольшие пакеты. Это нужно, т.к. NAT может при каждом новом UDP соединении присваивать другой внешний порт, а так сервер наверняка знает, что в данный момент времени хост доступен из-за NAT по тому порту, с которого приходят пакеты.

Соответствующие изменения были внесены и в процедуру обработки команд сервера и в структуру RoomInfo в библиотеке IChat.dll. Поддерживаются следующие дополнительные переменные при создании игровой комнаты:

  • %PROF: идентификатор игрока. С помощью него сервер сможет различать хостов
  • %CG_HOLEHOST: адрес сервера, обрабатывающего UDP пакеты
  • %CG_HOLEPORT: порт сервера, на котором слушается UDP
  • %CG_HOLEINT: интервал, с которым клиент должен отправлять пакеты

Хотя весь этот механизм уже имплементирован в клиенте игры, протестировать мне его ещё не удалось, т.к. контакт с Аллигатором оборвался. Незадолго до этого он выложил в открытый доступ исходный код своего сервера, — спасибо тебе за это! — так что если кто-то готов поднять эстафетную палочку, я буду только за.

Послесловие

Статья и так уже вышла длиннее, чем я планировал, так что буду краток. Хотя этот проект занял продолжительное время и ощутимо истощил запас моего энтузиазма к реверс-инжинирингу и анализу исходного кода, я рад, что взялся за него. Рад, что написал тогда статью на Хабр с описанием своего первого, ассемблерного, костыля для «Казаков». Рад, что в комментарии пришёл Максим fsou11 и выложил в свободный доступ исходный код игры. Также я благодарен сообществу LCN за ценные советы, объяснения и помощь в тестировании.

Читайте также: