#126 28-01-2008 20:58

turnik
Registered: 28-01-2008
Posts: 3

Re: Адреса и функции gta_sa.exe 1.0

Здравствуйте, скажите какие конкретно строчки нужно убрать в оригинальном GTA_SA.exe(US) чтобы игра не требовала диск. И возможно ли сделать cleo скрипт для того что бы игра запускалась, не изменяя оригинальный exe. И еще(наблюдение), когда я запускаю игру(оригинальный exe) через Deamon tools, не устанавливая cleo, игра идет хорошо, в обратном случае( когда установлен cleo), при загрузке она вылетает.

Last edited by turnik (28-01-2008 21:06)

Offline

#127 29-01-2008 17:04

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Адреса и функции gta_sa.exe 1.0

Alexander wrote:

listner написал :

Тоесть получается , что для изменения хандлинга автомобиля на свой достаточно в

.text:006B0BA8 0D0                 mov     [esi+384h], eax

вместо eax подать указатель на свою структуру хандлинга ?

Не совсем. Есть четыре типа хэндлинга: Vehicle, Flying, Bike и Boat; для каждого - своя структура
Для разных объектов нужно установить от одного до трех типов.
Для автомобиля, например, - Vehicle и Flying (показано в приведенном фрагменте). Плюс, отдельная переменная для флагов (+38Ch).
(Я не зря привел такой большой кусок кода)

Конструкторы СBike и CBoat я еще не разбирал (посмотрю завтра-послезавтра, как с текущими делами по работе разгребусь).

Самое же противное, что есть захардкоденные места. Т.е., любой потомок CEntity модержит modelIndex. В соответствующем CModelCars есть handlingIndex.
И есть несколько мест в коде, где обращаения к хэндлингу делаются не через vehicle->handlingStruct, а как
handling->vehicleHandling[((CModelCars *)models[vehicle->modelIndex])->handlingIndex].

Если учитывать такие тонкости, (т.е., не пытаться подсунуть "левый" хэндлинг для "гибридов"), все будет нормально.

Offline

#128 29-01-2008 18:04

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Адреса и функции gta_sa.exe 1.0

2turnik:
Все зависит от того, какой exe-шник имеется в виду.
Если это оригинальный securom-protected exe - "убиранием строчек" не отделаться. Этот exe-шник зашифрован, и расшифровывается только после проверки диска (в ходе проверки получается ключ дешифровки).

Если это любой другой exe (hoodlum, paradox, compact...), то он требует не DVD, а файлы из каталога AUDIO\STREAMS, которые не копируются на винт инсталлятором. Если скопировать весь каталог  AUDIO на винт - требовать диск он прекращает.

Offline

#129 29-01-2008 18:25

turnik
Registered: 28-01-2008
Posts: 3

Re: Адреса и функции gta_sa.exe 1.0

2listener:
Да, у меня оригинальный английский gta_sa.exe1.0, и действительно стоит securom-protected(SecuRom 7.00.00.0037). Получаеться, для такого ехе возможен только запуск при помощи образа. Все же если возможно, каким-то образом узнать ключ дешифровки и таким образом запустить игру без диска, то пожалуйста расскажите поподробней об этой процедуре. Кстати, если вдруг кому пригодиться мой ехе для экспериментов, могу куда-нибудь выложить. В любом случае, спасибо за внимание.

Offline

#130 30-01-2008 03:25

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Адреса и функции gta_sa.exe 1.0

2turnik:
Если все было бы так просто, производители защит давно бы разорились....
Ключ занимает несколько килобайтов, плюс, в нем используется часть кода, который немного нетривиально перемешивается.
Проще пойти на www.gamecopyworld.com и взять уже расшифрованный exe-шник.

Offline

#131 30-01-2008 08:51

AleX AciD
From: RU-VLG
Registered: 27-02-2007
Posts: 36
Website

Re: Адреса и функции gta_sa.exe 1.0

Переменная

dword_859D9C -> fFive    ;ext. script trigger def. radius

хранит 5.0 - радиус, используемый по умолчанию, при регистрации внешних скриптов-триггеров опкодами 0928 и 0929.

Функции

sub_43D6A0 -> reset_player_destroyed_model_counters
sub_46A930 -> init_external_script_trigger    // находит свободный элемент массива и заполняет его
sub_46A8C0 -> init_ext_script_triggers        // инициализирует массив структур ext_script_triggers
dummy_46B260 -> __init_ext_script_triggers    // вызывает предыдущую
.text:0084A740     unknown_libname_128 -> _init_script_triggers   // вызывает предыдущую

Переменная

stru_A90CF0 -> ext_script_triggers

- массив структур extScriptTrigger (размером по 0x14 байт) в количестве 70 (0x46) штук.

Структура

00000000 extScriptTrigger struc ; (sizeof=0x14)
00000000 script_index    dw ?
00000002 is_object       db ?                    ; 1: object, 0: actor
00000003 type            db ?
00000004 field_4         db ?
00000005 __pad           db 3 dup(?)
00000008 radius          dd ?          ;; <- float
0000000C model           dw ?
0000000E priority        dw ?
00000010 field_10        dd ?
00000014 extScriptTrigger ends

хранит информацию о внешнем скрипте-триггере (заполняется опкодами 0928 и 0929)


PS:
Функция

.text:0084A740     unknown_libname_128 -> _init_script_triggers

входит в большую таблицу функций, начинающуюся с адреса 0x008A4000. Это, случаем, не "основной класс игры" (CGame) ? cool


[large][acronym=Завтра, завтра, постоянно завтра, так проходит жизнь]Cras, cras, semper cras, sic evadit aetas[/acronym][/large]

Offline

#132 30-01-2008 09:10

turnik
Registered: 28-01-2008
Posts: 3

Re: Адреса и функции gta_sa.exe 1.0

listener wrote:

2turnik:
Если все было бы так просто, производители защит давно бы разорились....
Ключ занимает несколько килобайтов, плюс, в нем используется часть кода, который немного нетривиально перемешивается.
Проще пойти на www.gamecopyworld.com и взять уже расшифрованный exe-шник.

Спасибо за разьяснения.

Offline

#133 02-02-2008 12:45

Axel218
From: Astana
Registered: 26-07-2007
Posts: 15
Website

Re: Адреса и функции gta_sa.exe 1.0

Nикто не знает адреса, в которых можно найти смещения
стандартных даммисов (например, фар или бензобака) от центра модели?
Соответственно, адрес должен быть расположен от указателя 0xB74494...

Offline

#134 02-02-2008 17:33

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: Адреса и функции gta_sa.exe 1.0

0xB74494 - указатель на пул машин, а думмисы относятся к самой модели. Поэтому, если где искать эти смещения, то скорее в районе 0x8E4CC0

Для чего тебе эти адреса?

Offline

#135 03-02-2008 03:45

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Адреса и функции gta_sa.exe 1.0

2Axel218:
Начнем с того, что понятия "центр модели" просто нет. Есть начало координат, от которого считаются все смещения в модели.

В остальном, задачка несложная, хотя потребует немного экспериментов.
Какое-то время назад, я выкладывал исходники работы с моделями (ссылка есть в этом топике) - там есть почти все необходимое.

Есть массив modelPtrs (0xA9B0C8)
По номеру модели в нем находится ссылка на объект этой модели.
Чтобы не перебирать все варианты, считаем, что мы взяли ссылку на CModelCars.
В поле clump в ней лежит ссылка на корневой кламп модели.
Берем от него parent - это указатель на корневой фрейм всей иерархии компонентов модели.
Дальше, рекурсивно ищем фрейм нужного даммиса по имени (в тех исходниках, nodeName внутри фрейма еще не описан, зато описано, где лежит функция findFrameFromNameWithoutIdCB, которая, как раз, ищет фрейм по имени внутри иерархии).

Дальше начинаются эксперименты. Если нам повезло, координаты нашего найденного даммиса уже лежат в modelling.pos, и задача решена.
Если не повезло, то нужно проходить по всей иерархии от найденного фрейма до корня и преобразовывать эту несчастную точку по modelling каждого фрейма.

В общем, курить надо CModelCars::preprocessHierarchy - там все это точно есть, нужно только выбрать нужные куски.

Offline

#136 03-02-2008 09:48

Axel218
From: Astana
Registered: 26-07-2007
Posts: 15
Website

Re: Адреса и функции gta_sa.exe 1.0

2Seemann:
Эти адреса мне нужны для Великих Эксперементов smile

2listener:
Из того, что ты мне наговорил, я понял только около половины smile
Ну ничего, сейчас будем потихоньку разбираться...
Спасибо за ответ!

Offline

#137 03-02-2008 14:14

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Адреса и функции gta_sa.exe 1.0

2Axel218:
Около половины - это очень хорошо. Во-первых, это писалось, примерно, после четрыех часов копания в потрохах RenderWare,
Во-вторых, если было бы непонятно все, объяснять дальше - было бы просто бесполезно.

Я сейчас "причесываю" свои исходники. В следующий раз там будут комментарии (на русском, но много), плюс, я потихоньку описываю RW-шные структуры так, как они используются в GTA (т.е., со всеми плагинами) - получается гораздо понятнее.

Offline

#138 04-02-2008 09:35

Axel218
From: Astana
Registered: 26-07-2007
Posts: 15
Website

Re: Адреса и функции gta_sa.exe 1.0

Ну теперь пару вытекающих вопросов. Должен предупредить, память San Andreas я копаю недолго, но с функциями/указателями и всем таким прочим небольшой опыт работы имею.

1. Что такое RenderWare?
2. Что надо скачивать-то? В этом топике куча твоих ссылок...
3. Лезем в массив 0xA9B0C8. Ищем по номеру модели указатель или что? В виде чего ссылка должна быть?

Я бы мог подробно объяснить, что именно меня затрудняет в поисках, но боюсь показаться полным криведко в этих делах....

Offline

#139 05-02-2008 19:08

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Адреса и функции gta_sa.exe 1.0

2Axel218:
1. RenderWare - набор библиотек для написания игр. В частности, в GTA:SA, для графической части используется RenderWare Graphics.
http://en.wikipedia.org/wiki/Renderware
Ссылки на доки по рендервари и саму рендерварь можно найти в форуме.

2. Скачивать надо http://public.sannybuilder.com/sources/ … 071119.rar . В нем смотреть в ogModel.h и ogModel.cpp

3. 0xA9B0C8 -> CModelBase * modelPtrs[20000];
Индекс массива - objectId, элемент массива - ссылка на потомок CModelBase.
Для каждой секции .ide ('objs', 'tobj', ..., 'cars')  - свой класс, унаследованный от CModelBase.

CModelBase. в числе всего прочего, является оберткой вокруг RwObject (в версии от 2007/11/19 - там union, в котором лежат ссылки на RpAtomic и RpClump) От него и надо копать.

Offline

#140 06-02-2008 08:24

Axel218
From: Astana
Registered: 26-07-2007
Posts: 15
Website

Re: Адреса и функции gta_sa.exe 1.0

Спасибо!

Offline

#141 14-02-2008 14:54

Axel218
From: Astana
Registered: 26-07-2007
Posts: 15
Website

Re: Адреса и функции gta_sa.exe 1.0

Вопрос: Почему, когда я пытаюсь установить процедуре в своей Delphi'йской программе указатель на процедуру в SA, выскакивает грубейшее сообщение об ошибке доступа? hmm

@ShowTextBox := Ptr($588BE0);

Версия игры подходит. Это 100%.

P.S. Оффтоп: классный дизайн на форуме, особенно удобная панель для быстрого добавления сообщения clap

Offline

#142 14-02-2008 15:14

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: Адреса и функции gta_sa.exe 1.0

@Axel218 - программа загружена в адресное пространство игры или нет? Если она запускается как обычный exe, то Ptr($588BE0) будет указывать на адрес внутри этой программы, а не SA. Соответственно когда ты вызовешь ShowTextBox, произойдет ошибка доступа.
Эта программа должна быть выполнена в виде библиотеки с расширением .asi или .cleo, чтобы игра загружала ее к себе при запуске (при наличии CLEO или ASI Loader), тогда Ptr($588BE0) будет указывать на нужное место.

Offline

#143 14-02-2008 16:30

Axel218
From: Astana
Registered: 26-07-2007
Posts: 15
Website

Re: Адреса и функции gta_sa.exe 1.0

Thanx, man! grin

Offline

#144 17-02-2008 06:13

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Адреса и функции gta_sa.exe 1.0

Новая база. Начерно расписаны все методы CTask* (пока, в основном, как mXX).
Составлена диаграмма наследования всех сабклассов CTask (~320 классов, до пяти уровней вложенности), классов на 30 уже понятно назначение (но еще непонятно, как писать свои rolleyes ).

http://public.sannybuilder.com/gtasa_ex … 080217.txt

Last edited by listener (17-02-2008 06:14)

Offline

#145 19-02-2008 10:34

Agenzvell
From: Windows/system32
Registered: 28-08-2007
Posts: 109
Website

Re: Адреса и функции gta_sa.exe 1.0

Можно ли добиться улучшения детализации текстур? Если да то редактированием какого адреса памяти?

Offline

#146 24-02-2008 06:22

Axel218
From: Astana
Registered: 26-07-2007
Posts: 15
Website

Re: Адреса и функции gta_sa.exe 1.0

Можно, просто размер текстуры увеличь раза в 2, и будет тебе счастье good

Offline

#147 24-02-2008 22:56

Alexander
Registered: 19-08-2006
Posts: 184
Website

Re: Адреса и функции gta_sa.exe 1.0

Agenzvell wrote:

Можно ли добиться улучшения детализации текстур? Если да то редактированием какого адреса памяти?

Можно , непосредственным редактированием RW SDK , хотя от этого только мороки больше , а одним адресом - никак

Axel218 wrote:

Можно, просто размер текстуры увеличь раза в 2, и будет тебе счастье good

Если увеличить , то детализация не изменится , ухудшется качество .

Offline

#148 26-02-2008 09:27

Axel218
From: Astana
Registered: 26-07-2007
Posts: 15
Website

Re: Адреса и функции gta_sa.exe 1.0

Не увеличивая стандартную текстуру, а сделать другие более большие детализированные текстуры. Я имел ввиду именно это! good
А про стандартные текстуры вообще ничего не говорю... smile

Offline

#149 05-03-2008 15:07

Axel218
From: Astana
Registered: 26-07-2007
Posts: 15
Website

Re: Адреса и функции gta_sa.exe 1.0

Вот ещё вопрос. Я пытался установить RemoteThread для SA. В WinAPI функция:

HANDLE CreateRemoteThread(

    HANDLE hProcess,	// handle to process to create thread in  
    LPSECURITY_ATTRIBUTES lpThreadAttributes,	// pointer to thread security attributes 
    DWORD dwStackSize,	// initial thread stack size, in bytes
    LPTHREAD_START_ROUTINE lpStartAddress,	// pointer to thread function 
    LPVOID lpParameter,	// pointer to argument for new thread  
    DWORD dwCreationFlags,	// creation flags 
    LPDWORD lpThreadId 	// pointer to returned thread identifier 
   );

Можете, плз, подсказать, что нужно указать для параметров lpStartAddress и lpParameter? И какой нужно указывать размер стека dwStackSize?

Offline

#150 05-03-2008 16:18

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Адреса и функции gta_sa.exe 1.0

lpStartAddress - адрес функции, которая будет исполняться в новом потоке
lpParameter - параметр, который будет ей передан
dwStackSize - 0 (automatic)

А нафига? Не проще врезаться в CGame::Process и не думать о синхронизации? Там есть пара заглушек, вместо которых можно подключиться.

Offline

Board footer

Powered by FluxBB