1. Заполняем командами nop (90h) диапазон адресов [68D4B; 68DE11]. Для этого выделяем указанный диапазон и выбираем Правка -> Заполнить выделение (в шестнадцатеричном редакторе HxD), шаблон заполнения - Hex-значения: 90. Только что мы освободили 199 байт для нашего кода и таблицы.
2. Открываем FASM и компилируем (Run -> Compile) следующий код:
- Код: Выделить всё
use32
mov ecx, [ebp-8]
xor eax, eax
mov al, byte [ecx*2 + 0FEFEFEFEh]
xor edx, edx
mov dl, byte [ecx*2 + 0FEFEFEFEh]
mov ecx, [ebp-0Ch]
mov [ecx+eax*4], edx
mov esp, ebp
pop ebp
retn
На выходе получится бинарный файл размером 31 байт, открываем его в шестнадцатеричном редакторе, копируем и вставляем с заменой по адресу 68D4B. Теперь мы знаем адрес таблицы со стоимостью существ в ресурсах: 68D4B + 1F = 68D6A (длина кода 31 = 1Fh байт).
3. Идём по адресу 68D6A и прописываем нашу 132-байтную таблицу. Таблица будет состоять в основном из нулей, но такова плата за универсальность. Приводить её полностью не буду. Хотите вводите вручную, но можно просто скопировать и вставить с заменой бинарный патч, что находится в конце данного поста.
4. Осталось только прописать реальный адрес таблицы вместо FEFEFEFE, т.е. по адресу 68D53 нужно прописать 6A 8D 46 00, а по адресу 68D5C - 6B 8D 46 00.
5. Сохраняем изменённый исполняемый файл под каким-нибудь именем, и патч готов.
* * *
Если Вы не хотите тратить время на выполнение пунктов 1-5, скопируйте содержимое файла ResPatch.bin и вставьте его с заменой по адресу 68D4B. Сохраните изменённый исполняемый файл под другим именем. Патч готов. Не забудьте сделать бэкап оригинального исполняемого файла.
* * *
Теперь Вы можете изменять стоимость существа в ресурсах, просто изменяя таблицу. Для этого перейдите по адресу 68D6Ah + ID * 2 и пропишите нужные Вам значения. Например, чтобы добавить 1 ед. руды к стоимости Крестоносца, перейдите по адресу 68D6Ah + 0Ah * 2 = 68D7Eh и пропишите там: 02 01 (02 - руда, 01 - 1 единица).