Вероятнее всего стоит стандартная системная кодировка — не кириллица. Если так, то загрузка даже нужных скриптов не поможет. Здесь можно попробовать подсунуть игре английскую версию библиотек language*.dll. Тогда все будет по-английски :)
На каком этапе запуска программы потребовало диск?
Функция отвязки от диска проверена не один раз, все должно работать. Вы не могли вы выложить скриншот с этим сообщением?
Очень интересно. Может быть движок 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 когда я опубликовал эту модификацию фанаты сперва обрадовались обновлениям. Потом кто-то восторженно спросил, как же я это сделал, на что я (сглупил) честно ответил, что дизассемблировал, а затем внес правки в сам исполняемый файл. На что мне ответили, что это незаконно, забанили навсегда, и попросили больше этим не заниматься. Такое впечатление что сразу было не ясно, каким образом можно сделать такую модификацию :) Если бы сам не сказал — уверен, до сих пор мог бы свободно выкладывать обновления. Довели дело до абсурда…
Надеюсь, здесь никто не будет беспокоиться о том, что мы занимаемся дизассемблированием игрушки восьмилетней давности :)
Раньше было все намного сложнее. Современные инструменты (я их перечислил в статье) значительно все упрощают. Так что при знании ассемблера достаточно запастись терпением — и много что можно будет сделать.
Функция отвязки от диска проверена не один раз, все должно работать. Вы не могли вы выложить скриншот с этим сообщением?
В Age of Empires мало того, что для каждого игрового разрешения своя графика, так еще и в коде есть огромное количество switch-ей в зависимости от текущего разрешения, где определяется расположение вывода всех элементов интерфейса и т.д. И чтобы добавить новые разрешения все это нужно исправлять.
Однако, ребята молодцы, респект им за это в любом случае :)
Хотя это хорошая идея для подключения библиотеки wndmode.dll — чтобы наименьшей кровью сделать какое-нибудь DirectDraw приложение оконным. Спасибо за идею.
И заменил его на:
После чего игра хоть и с противными графическими артефактами (вся цветовая палитра нарушилась) потеряла эксклюзивный доступ к видеобуферу, и появилась возможность открывать программы поверх этого приложения (отладчик). Думаю, в случае с Direct3D будет очень похоже.
В случае же с Age of Empires я постарался как можно быстрее «прикрутить» оконный режим. Так что теперь можно отлаживать игру вообще без проблем с графикой и т.д.
Осталось только сделать LoadLibrary(«wndmode.dll»); в WinMain вашей игры :)
На американском сайте heavengames.com когда я опубликовал эту модификацию фанаты сперва обрадовались обновлениям. Потом кто-то восторженно спросил, как же я это сделал, на что я (сглупил) честно ответил, что дизассемблировал, а затем внес правки в сам исполняемый файл. На что мне ответили, что это незаконно, забанили навсегда, и попросили больше этим не заниматься. Такое впечатление что сразу было не ясно, каким образом можно сделать такую модификацию :) Если бы сам не сказал — уверен, до сих пор мог бы свободно выкладывать обновления. Довели дело до абсурда…
Надеюсь, здесь никто не будет беспокоиться о том, что мы занимаемся дизассемблированием игрушки восьмилетней давности :)