You are not logged in.
Pages: 1
При написании скриптов, использующих технологию доступа к игровой памяти через массивы, в т.ч. ассемблерных вставок, необходимо учитывать разницу между версиями SA 1.0 и 1.01.
Строго говоря, разница есть даже между версиями игры для разных стран. Существет три разных exe: US, EUR, GER (соответственно, версия для США, Европы и Германии). В этих ехе адреса памяти могут разниться даже в пределах одной версии.
Для того, чтобы проверить, какая версия игры используется и в зависимости от этого корректировать адреса, можно использовать следующий способ:
Проверка адреса по индексу -429566. Если число там записанное равно 4611680, значит это версия 1.0, иначе 1.01
0@ = -429566 if &0(0@,1i) == 4611680 then // версия 1.0 else // версия 1.01 end
Данный способ является первым, и в будущем возможно будут найдены более универсальные методы проверки.
Offline
Можно еще так:
hex A1 68618A00 // MOV EAX,DWORD PTR DS:[8A6168] 3D 605E4600 // CMP EAX,00465E60 74 00 // JE SHORT X ... end
только нужно вручную считать кол-во байт.
Last edited by Sanchez (08-01-2007 10:23)
Offline
ну сам по себе асмовый код не запустится нужно еще через те же массивы запустить его.
это примерно тоже самое как команду inc eax заменить на
mov edx, eax
mov ecx, 1
add edx, ecx
mov eax, edx
Offline
ну сам по себе асмовый код не запустится нужно еще через те же массивы запустить его.
Это я знаю В твоем моде для каждой версии свой асмовский код, а можно все сделать в одном.
это примерно тоже самое как команду inc eax заменить на
mov edx, eax
mov ecx, 1
add edx, ecx
mov eax, edx
ты это о чем?
зы
Почему для проверки версий используется адрес 8A6168. Можно любой адрес использовать?
Last edited by Sanchez (09-01-2007 08:50)
Offline
В твоем моде для каждой версии свой асмовский код, а можно все сделать в одном.
ну да, только не намного проще будет. Там тогда все значения параметров придется через асм записывать, а удобнее через скм.
ты это о чем?
ну, код этот я привел для сравнения замены проверки версии через массивы на асм.
а P.S. это моя недавняя разработка, это я так, просто показать.
По адресу 8A6168 записан адрес первого парсера опкодов
.data:008A6168 OPCODE_SELECTORS dd offset OpcodeSelector_1_0000_0063 ; DATA XREF: sub_469EB0+3Dr
он равен 0x00465E60 в версии 1.0.
В версии 1.1 этот индекс массива будет указывать на совершенно другое место, где никаким опкодами и не пахнет, поэтому вероятность что проверка сработает = 0.01%
Этот адрес удобно использовать, потому что кругом только .data и нет опасности напороться на Access Violation.
Last edited by Seemann (09-01-2007 09:02)
Offline
ну да, только не намного проще будет. Там тогда все значения параметров придется через асм записывать, а удобнее через скм.
А если код содержал 100 строк и два тебе нужных адреса пришлось добавлять ещу 100. А так накидал в стек все параметры, адреса потом
mov eax, dword [esi+X]
а вконце выравнял стек и все
add esp, Y
качется так проще
P.S. это моя недавняя разработка, это я так, просто показать
Хорошо!!! А по каким адресам лежат координаты игрока?
На скриншоте у тебя игра запущена в окнонном режиме? Это как?
Last edited by Sanchez (09-01-2007 09:29)
Offline
На скриншоте у тебя игра запущена в окнонном режиме? Это как?
это gta_sa_loader. Запускает игру без заставок, можно переключаться в оконный режим (если разрешение в игре не больше 800x600).
http://www.gtaforums.com/index.php?showtopic=222397
линки в теме.
А по каким адресам лежат координаты игрока?
это я опкодами (0172) рисуется через text_draw. Основная фишка не в этом, а в том, что ключики из GXT меняются из scm, и можно любой текст выводить не зависимо от GXT.
Offline
это gta_sa_loader. Запускает игру без заставок, можно переключаться в оконный режим (если разрешение в игре не больше 800x600).
http://www.gtaforums.com/index.php?showtopic=222397
линки в теме.
Кул, теперь хоть олька заработает , а то softice не ставится
Основная фишка не в этом, а в том, что ключики из GXT меняются из scm, и можно любой текст выводить не зависимо от GXT.
Это как? Может расскажешь?
Offline
Это как? Может расскажешь?
доделаю, покажу. менюшка подглючивает немного, не могу понять почему.
Offline
Pages: 1