На каком этапе запуска программы потребовало диск?
Функция отвязки от диска проверена не один раз, все должно работать. Вы не могли вы выложить скриншот с этим сообщением?
Очень интересно. Может быть движок Starcraft более гибкий в этом плане?..
В Age of Empires мало того, что для каждого игрового разрешения своя графика, так еще и в коде есть огромное количество switch-ей в зависимости от текущего разрешения, где определяется расположение вывода всех элементов интерфейса и т.д. И чтобы добавить новые разрешения все это нужно исправлять.
Однако, ребята молодцы, респект им за это в любом случае :)
Главное побольше энтузиазма и терпения — и все получится! У меня тоже не сразу все получалось, над некоторыми мелочами приходилось сидеть чуть ли не сутки и т.д.
Дело в том, что я из игры передаю параметры в config.dll, поэтому простым добавлением в импорты не обойдешься. Более того, для некоторых вещей может понадобиться возможность управлять программой из библиотеки — и здесь обычным вызовом DllMain при LoadLibrary не обойдешься, необходимо передавать/принимать какие-то данные в/из игры.
Хотя это хорошая идея для подключения библиотеки wndmode.dll — чтобы наименьшей кровью сделать какое-нибудь DirectDraw приложение оконным. Спасибо за идею.
Верно, но освободившееся место я использовал для реализации специальных функций для работы с курсором мыши с учетом оконного режима (в статье я не привел, потому что кода много). И к сожалению, отведенного места чуть-чуть не хватило на полноценную реализацию замены SetCursorPos, а разрывать на куски одинаковые по смыслу функции не хотелось :). Впрочем, это отразилось только на одном вызове этой функции в ветке кода игры, которая никогда не вызывается. Вообще я в коде игры пока разбирался обнаружил очень много принудительно отключенных веток кода и не до конца реализованных вещей, которые никак нельзя запустить из игры, но можно из отладчика.
Для этого нужно отладчиком найти где программа ставит для себя эксклюзивный доступ к видеобуферу и отключить эту «фичу». Это всегда происходит гарантированно до перехода игры в полноэкранный режим. Поскольку Age of Empires работает на DirectDraw, я нашел вызов:
После чего игра хоть и с противными графическими артефактами (вся цветовая палитра нарушилась) потеряла эксклюзивный доступ к видеобуферу, и появилась возможность открывать программы поверх этого приложения (отладчик). Думаю, в случае с Direct3D будет очень похоже.
В случае же с Age of Empires я постарался как можно быстрее «прикрутить» оконный режим. Так что теперь можно отлаживать игру вообще без проблем с графикой и т.д.
Поскольку Starcraft очень похож на Age of Empires в техническом плане, сомневаюсь что есть возможность добавить поддержку новых разрешений экрана без перерисовки графики. Хотя добавить оконный режим вполне реально, при этом можно использовать библиотеку wndmode.dll — что-то мне подсказывает, что она справится.
Осталось только сделать LoadLibrary(«wndmode.dll»); в WinMain вашей игры :)
У вас все надписи квадратиками или только на кнопках? И какая локаль стоит в винде? Age of Empires II — это ANSI приложение, для его нужно чтобы в системе стоял русский язык для программ по умолчанию.
К сожалению, это так.
На американском сайте heavengames.com когда я опубликовал эту модификацию фанаты сперва обрадовались обновлениям. Потом кто-то восторженно спросил, как же я это сделал, на что я (сглупил) честно ответил, что дизассемблировал, а затем внес правки в сам исполняемый файл. На что мне ответили, что это незаконно, забанили навсегда, и попросили больше этим не заниматься. Такое впечатление что сразу было не ясно, каким образом можно сделать такую модификацию :) Если бы сам не сказал — уверен, до сих пор мог бы свободно выкладывать обновления. Довели дело до абсурда…
Надеюсь, здесь никто не будет беспокоиться о том, что мы занимаемся дизассемблированием игрушки восьмилетней давности :)
Раньше было все намного сложнее. Современные инструменты (я их перечислил в статье) значительно все упрощают. Так что при знании ассемблера достаточно запастись терпением — и много что можно будет сделать.
Несколько энтузиастов уже пыталось разработать OpenGenie, однако, пока что ничего не вышло. Мне же одному проще (и интереснее) модифицировать готовый исполняемый файл для достижения необходимого эффекта.
Простите, я не указал конкретно о какой версии идет речь. Здесь я говорю о последней версии Age of Empires II: The Conquerors 1.0C. Она требует обязательного наличия в реестре ключа CDPath, который создается при установке игры.
Функция отвязки от диска проверена не один раз, все должно работать. Вы не могли вы выложить скриншот с этим сообщением?
В Age of Empires мало того, что для каждого игрового разрешения своя графика, так еще и в коде есть огромное количество switch-ей в зависимости от текущего разрешения, где определяется расположение вывода всех элементов интерфейса и т.д. И чтобы добавить новые разрешения все это нужно исправлять.
Однако, ребята молодцы, респект им за это в любом случае :)
Хотя это хорошая идея для подключения библиотеки wndmode.dll — чтобы наименьшей кровью сделать какое-нибудь DirectDraw приложение оконным. Спасибо за идею.
И заменил его на:
После чего игра хоть и с противными графическими артефактами (вся цветовая палитра нарушилась) потеряла эксклюзивный доступ к видеобуферу, и появилась возможность открывать программы поверх этого приложения (отладчик). Думаю, в случае с Direct3D будет очень похоже.
В случае же с Age of Empires я постарался как можно быстрее «прикрутить» оконный режим. Так что теперь можно отлаживать игру вообще без проблем с графикой и т.д.
Осталось только сделать LoadLibrary(«wndmode.dll»); в WinMain вашей игры :)
На американском сайте heavengames.com когда я опубликовал эту модификацию фанаты сперва обрадовались обновлениям. Потом кто-то восторженно спросил, как же я это сделал, на что я (сглупил) честно ответил, что дизассемблировал, а затем внес правки в сам исполняемый файл. На что мне ответили, что это незаконно, забанили навсегда, и попросили больше этим не заниматься. Такое впечатление что сразу было не ясно, каким образом можно сделать такую модификацию :) Если бы сам не сказал — уверен, до сих пор мог бы свободно выкладывать обновления. Довели дело до абсурда…
Надеюсь, здесь никто не будет беспокоиться о том, что мы занимаемся дизассемблированием игрушки восьмилетней давности :)