beatcracker: (Default)
Детективная история в трех частях с участием RPG 1999 года, DirectX и Windows 2008...

Часть первая, ностальгическая.

Дело было вечером в новогодние праздники, делать было нечего. В связи с отсутствием у единственного доступного соперника хедшот-скиллов в Counter-Strike, на свет божий была извлечена одна из двух рпг, в которую я умею играть - Аллоды 2.

Аллоды 2 - Повелитель душ

На варезной сцене в далеком 2002 году я так и не засветился, но nfo к релизу прилагалось:

BLiTZ.NFO

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

Те, кто опознал патчер, ставят себе плюсик :)


Cracker.exe

Cracker.exe


До момента истины, как казалось, оставалось недолго. Скоро кто-то познает, а я освежу в памяти "прокачку на белках", походы "на пузыря" и прочие рпгэшные радости.


Часть вторая, порнографическая.


Сгущались люминисцентные сумерки, пользователи выли на полную луну, а игровой воз был и ныне там. Аллоды прекрасно запускались на моей Windows 2008 x64 и 32-битной висте на ноутбуке, сетевая игра создавалась, белки и ящеры боролись за право первыми вгрызться в бренную плоть героев. Все было хорошо, за исключением того факта, что игра упорно отказывалась видеть созданный на другом компьютере сервер.
За прошедшие с той поры три с половиной дня, я успел перепробовать все возможные режимы совместимости, три различных варианта сети, serial-to-ethernet эмулятор, заспамить выдачу гугла по аллодам и поднять свой хэт (так в Аллодах называется мастер-сервер). К концу третьего дня за дело взялась тяжелая огнеметная система "Буратино" артиллерия: IDA, виртуальная машина с Win98 и так полюбившийся камраду [livejournal.com profile] iamnik Wireshark (бывший Ethereal).
С помощью кабельной акулы были успешно пойманы пакеты DirectPlay идущие в сторону мой машины. Там же было выяснено, что моя копия игры на них не отвечает. Сеть была проверена и перепроверена, проблема была явно где в софте. Окончательно убедиться в этом помогли чудные утилиты Luigi Auriemma для диагностики DirectPlay. Не смотря на запущенный сервер, dplay7info.exe рапортовала об его отсутствии. Проход аллодов под IDA показывал на инициализацию DirectPlay, но дальше дело не шло. Игра запущенная в виртуальной машине по 98 виндой работала и соединялась со всеми компьютерами кроме моего. Значит проблема в DirectPlay под x64...
Быстрый, а потом и не очень гугль, рассказал, что DirectPlay начиная с висты MS более не развивается и не поддерживается, уступив место их XNA и Games for Windows. Бесплодные попытки найти рабочий эмулятор DirectPlay на сокетах кончились на где-то тут, тут и тут. Эксперименты с подсовыванием разных версий dp*.dll вплоть до вайновских тоже не дали результата, равно как и попытка прикрутить IPX к 64-битной винде.

Часть третья, эзотерическая.

К концу четвертого дня в протобульон который являло собой содержимое моей головы ударила молния озарения. Во всех рабочих конфигурациях игра, при создании сервера на несколько секунд подвисала. В нерабочих же такой эффект отсутствовал. Учитывая, что сетевая часть реализована через DirectPlay и в частности позволяет вести чат между игроками еще до создания сервера, то это практически 100% реализовано через DirectPlay Lobby! Лобби! Именно на время его инициализации игра подвисает. В моем же случае Аллоды не могут создать объект DirectPlay Lobby и тихо фейлятся.

Зная куда копать, я уже целенаправлено начал искать информацию по этому интерфейсу COM-объекта. Как оказалось, обитает он в dplayx.dll. Чтобы приложение могло использовать интерфейс, он должен быть зарегистрирован в системе. Делается это с помощью записей в реестре по адресу HKLM\SOFTWARE\Classes\CLSID\{GUID}\. Поиск в реестре по строке "Lobby" на рабочей системе под Windows 98 выдает следующее:


REGEDIT4

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{2FE8F810-B2A5-11d0-A787-0000F803ABFC}]
@="DirectPlayLobby Object"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{2FE8F810-B2A5-11d0-A787-0000F803ABFC}\InprocServer32]
@="dplayx.dll"
"ThreadingModel"="Both"

[HKEY_CLASSES_ROOT\DirectPlayLobby]
@="DirectPlayLobby Object"

[HKEY_CLASSES_ROOT\DirectPlayLobby\CLSID]
@="{2FE8F810-B2A5-11d0-A787-0000F803ABFC}

Барабанная дробь, африканские там-тамы и туш! Как уже могли догадаться самые прозорливые из моих читателей в Windows 2008 этих записей нет. Делаем соответствующий reg-файл для Windows 2008
REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{2FE8F810-B2A5-11d0-A787-0000F803ABFC}]
@="DirectPlayLobby Object"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{2FE8F810-B2A5-11d0-A787-0000F803ABFC}\InprocServer32]
@="dplayx.dll"
"ThreadingModel"="Both"

[HKEY_CLASSES_ROOT\DirectPlayLobby]
@="DirectPlayLobby Object"

[HKEY_CLASSES_ROOT\DirectPlayLobby\CLSID]
@="{2FE8F810-B2A5-11d0-A787-0000F803ABFC}"

учитывая перенаправление реестра присущее 64-разрядным системам, импортируем файл через меню File->Import в Regedit и запускаем Аллодов.

Все работает!

Послесловие.

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

Смотрите шире. Зрите в корень. Оставайтесь с нами.

October 2017

M T W T F S S
      1
234 5 67 8
910 11 1213 1415
161718 19202122
23242526272829
3031     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Monday, 23 October 2017 11:48
Powered by Dreamwidth Studios