Если я ещё раз напишу что что-то сделал, но не напишу как - бросьте мне на съеденье питона Каа. Полдня пытался вспомнить, что и как я делал. >:(
Мне удалось запустить Иду, но сильно в ней не копался, пока непривычно, и герои что-то в ней с первого раза не стартанули, выпал эксепшн. Ну ок, потом покопаюсь, как опять будет время. (для запуска надо было стартануть из-под администратора)
Установка разрешения в героях в 2013(любой) студии. Чтоб опять не потерялось.
У меня опять не совпали смещения до функций в ddraw.dll с тем, что показывает depends (задним умом думаю, это из-за того, что смотрел 64-битную версию, а heroes4 использует 32-битную)
Да! Всё делается в файле heroes4.exe (я почему-то полез искать в dll-ках сначала)
Первым делом надо загрузить через студию pdb-хи системных библиотек, чтобы было видно имена функций.
Потом просто по смещению ddraw найти её в памяти. Где-то ближе к началу будет функция _DD_SetDysplayMode, на скрине видно примерное смещение от начала модуля:
в ecx вы можете видеть моё расширение 0x03000400 - это 1204 на 768. Потом чуть ниже оно разложится в стеке, и будет call
собственно, сам стек вызова до DirectDrawObjectCreate, где создаётся указатель на интерфейс ddraw, оттуда я искал всё изначально:
Тут уже исправленное руками расширение в ebx, 1600 х 900, высота в страшем слове.
Всё это чисто для информации, потому что нас интересует сам код heroes4.exe, так как в момент вызова ddraw вставать в бряк уже поздно, окно героев после снятия с паузы получит фокус, и снова произойдёт перещёлк режимов. Это я пишу, потому что сколько-то времени убил, пытаясь понять, чего оно у меня в 1600х900 не переключается >:(
Теперь более полезное, поднимается на уровень выше, до вызова ddraw:
вот тут должен был быть скрин со стеком и пушем значений из edi и ebp для высоты/ширины, перед вызовом ddraw, но я сейчас посмотрел картинку, и понял, что скопировал/вставил не так, поэтому скрин с другого момента. Мне приходилось делать окно студии topmost, потому что при перещёлке режима(на брекпоинте), окно героев вставало поверх всех окон, и только окна-topmost можно было поднять выше. Стало быть, студию пришлось топмостить, чтобы поменять руками регистры и запустить дальше. Поэтому скрины приходилось вставлять в паинт вслепую
ну и последний скрин, того, как оно во "весь экран":
заново открыл окно с настройками, "во весь экран включено", но разрешение тут последнее выбранное, на самом деле 1600х900. Сбоку-снизу ничего не рисуется, артефакты от студии торчат и часть десктопа.
такие дела
upd: пока не забыл: функция, из которой зовётся ddraw с установкой режима - это один большой хэндлер основного окна игры, с счастью разработчики было старой школы, совсем старой
Это важно потому что в хендлере можно поискать кейсы на обработку графики и мыша.