[DOC] Документация по адресам gta_sa.exe 1.0US
|
|
DK22Pac | Дата: Суббота, 28.01.2012, 21:54 | Сообщение # 46 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Последний параметр - тип источника. Я всё рассписал на гтамоддинге.
Сообщение отредактировал DK22Pac - Суббота, 28.01.2012, 21:55 |
|
| |
Den_spb | Дата: Воскресенье, 18.03.2012, 19:43 | Сообщение # 47 |
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
| Немного информации о поездах и точках путей:Code Смещения CTrain:
0x5A0 [word] - текущий номер точки маршрута (номер строчки в tracks, нумерация от нуля) За данной точкой находится задний габарит модели, если поезд направлен по порядку точек. Если поезд направлен в обратную сторону, то номер точки фиксируется относительно переднего габарита модели. 0x5A4 [float] - текущая скорость движения, м/с Независимо от первоначальной ориентации поезда - при движении по порядку точек - больше нуля, при движении против порядка точек - меньше нуля 0x5A8 [float] - расстояние, пройденное от начала маршрута в метрах при нуле задний габарит модели находится на первой точке маршрута - если поезд направлен по порядку точек при нуле передний габарит модели находится на первой точке маршрута - если поезд направлен в обратную сторону 0x5C0 [byte] - номер маршрута поезда 0 - tracks 1 - tracks3 2 - tracks2 3 - tracks4 0x5D0 [dword] - указатель на предыдущий вагон 0x5D4 [dword] - указатель на следующий вагон
Tracks.dat:
0xC38024 + 4 * НомерМаршрута [dword] - указатель на адрес массива точек tracksN.dat 0xC38014 + 4 * НомерМаршрута [dword] - количество точек в tracksN.dat
Структура точки tracks.dat:
Размер - 10 байтов
+0 [word] - координата X (перевести в float и поделить на 8.0) +2 [word] - координата Y (перевести в float и поделить на 8.0) +4 [word] - координата Z (перевести в float и поделить на 8.0) +6 [word] - длина маршрута от первой точки до текущей
Структура точки пути автомобиля:
Размер - 14 байтов
+0 [word] - координата X (перевести в float и поделить на 8.0) +2 [word] - координата Y (перевести в float и поделить на 8.0) +4 [word] - координата Z (перевести в float и поделить на 8.0) +6 [word] - номер точки ?
Пару адресов подсмотрел в скрипте Ryosuke "Train switch"
|
|
| |
DK22Pac | Дата: Воскресенье, 18.03.2012, 20:19 | Сообщение # 48 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Quote (Den_spb) Смещения CTrain: Добавил в вики. http://gtamodding.ru/wiki/Адреса_Памяти_ (SA)#CTrain_.28.D0.9F.D0.BE.D0.B5.D0.B7.D0.B4.D0.B0.29
|
|
| |
Den_spb | Дата: Воскресенье, 18.03.2012, 20:53 | Сообщение # 49 |
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
| Хорошо. Есть ещё указатели на компоненты, правда названий dummy-сов не помню:Code 0x66C - левая дверь 0x670 - правая дверь 0x674 - правое колесо 1 0x678 - правое колесо 2 0x67C - правое колесо 3 0x680 - правое колесо 4 0x684 - правое колесо 5 0x688 - правое колесо 6 0x68C - левое колесо 1 0x690 - левое колесо 2 0x694 - левое колесо 3 0x698 - левое колесо 4 0x69С - левое колесо 5 0x6A0 - левое колесо 6 0x6A4 - первая тележка (оси 1-3) 0x6A8 - вторая тележка (оси 4-6)
|
|
| |
DK22Pac | Дата: Понедельник, 16.04.2012, 01:59 | Сообщение # 50 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| CTrain+0x5CC Указатель на какую-то матрицу, используется при создании корон...
Добавлено (15.04.2012, 23:28) --------------------------------------------- 0x41D660 void __cdecl CCarAI::makeWayForCarWithSiren(CVehicle *vehicle) Только что проверял, всё работает. Code {$CLEO} 0000: while true wait 0 if player.Defined(0) then if actor.Driving($3) then 0811: 0@ $3 0A97: 0@ = car 0@ struct 0AA5: call 0x41D660 num_params 1 pop 1 0@ // CCarAI__makeWayForCarWithSiren end end end Добавлено (16.04.2012, 00:04) --------------------------------------------- 0x41D3D0 void __cdecl CCarAI__MellowOutChaseSpeed(CVehicle *vehicle)
Чем ближе авто к игроку - тем меньше его скорость. Используется для полицейских авто, когда у игрока есть звёзды розыска. Добавлено (16.04.2012, 00:45) --------------------------------------------- 0x41C960 unsigned __int64 __cdecl CCarAI__TellCarToRamOtherCar(CVehicle *vehicle1, CVehicle *vehicle2, float radius) Code unsigned __int64 __cdecl CCarAI__TellCarToRamOtherCar(CVehicle *vehicle1, CVehicle *vehicle2, float radius) { char vehicleFlags; // al@1 char v4; // zf@1 char newVehicleFlags; // al@2 char vehicleSpeed; // al@4 unsigned __int64 _radius; // qax@6
vehicle1->m_pTargetEntity = (int)vehicle2; CEntity__registerReference((CObject **)&vehicle1->m_pTargetEntity); sub_42F5A0(vehicle1); v4 = (vehicle1->field_42D & 2) == 0; vehicleFlags = vehicle1->flags; vehicle1->driverBehavior = 52; if ( v4 ) newVehicleFlags = vehicleFlags | 0x10; else newVehicleFlags = vehicleFlags & 0xEF; vehicle1->flags = newVehicleFlags; vehicleSpeed = vehicle1->??speed; if ( (unsigned __int8)vehicleSpeed <= 6u ) vehicleSpeed = 6; vehicle1->??speed = vehicleSpeed; _radius = (unsigned __int64)radius; vehicle1->followingRadius = _radius; return _radius; } Добавлено (16.04.2012, 00:45) --------------------------------------------- А теперь взгляните на эти функции Code signed int __cdecl sub_41C8A0(CVehicle *vehicle1, CVehicle *vehicle2) { char vehicleFlags; // al@1 char v3; // zf@1 char newVehicleFlags; // al@2 signed int vehicleSpeed; // eax@4
vehicle1->m_pTargetEntity = (int)vehicle2; CEntity__registerReference((CObject **)&vehicle1->m_pTargetEntity); sub_42F5A0(vehicle1); v3 = (vehicle1->field_42D & 2) == 0; vehicleFlags = vehicle1->flags; vehicle1->driverBehavior = 15; if ( v3 ) newVehicleFlags = vehicleFlags | 0x10; else newVehicleFlags = vehicleFlags & 0xEF; vehicle1->flags = newVehicleFlags; vehicleSpeed = vehicle1->??speed; if ( (_BYTE)vehicleSpeed <= 6u ) vehicleSpeed = 6; vehicle1->??speed = vehicleSpeed; return vehicleSpeed; } Code signed int __cdecl sub_41C900(CVehicle *vehicle1, CVehicle *vehicle2) { char vehicleFlags; // al@1 char v3; // zf@1 char newVehicleFlags; // al@2 signed int vehicleSpeed; // eax@4
vehicle1->m_pTargetEntity = (int)vehicle2; CEntity__registerReference((CObject **)&vehicle1->m_pTargetEntity); sub_42F5A0(vehicle1); v3 = (vehicle1->field_42D & 2) == 0; vehicleFlags = vehicle1->flags; vehicle1->driverBehavior = 17; if ( v3 ) newVehicleFlags = vehicleFlags | 0x10; else newVehicleFlags = vehicleFlags & 0xEF; vehicle1->flags = newVehicleFlags; vehicleSpeed = vehicle1->??speed; if ( (_BYTE)vehicleSpeed <= 6u ) vehicleSpeed = 6; vehicle1->??speed = vehicleSpeed; return vehicleSpeed; } Они в игре не использовались. Видать, R* долго мучались, какой выбрать behaviour, и, возможно, им пришлось создать новый тип поведения Нк и ещё прикрутили один параметр, радиус преследования (хотя не уверен, что это именно оно, значение из float переводится в int, потом записывается в структуру, в поле с размером в байт...).Добавлено (16.04.2012, 01:16) --------------------------------------------- 0x4383F0 float __cdecl CGame::setGameSpeed(float newGameSpeed) 0x4383E0 long double __cdecl CGame::getGameSpeed()
0x437C20 CCarCtrl::SteerAICarWithPhysics((CAutomobile *)) Добавлено (16.04.2012, 01:59) --------------------------------------------- Короче, там дофига полезных функций. Если интересно, то всё оформлю и запостю.
Сообщение отредактировал DK22Pac - Воскресенье, 15.04.2012, 23:29 |
|
| |
Den_spb | Дата: Понедельник, 16.04.2012, 07:26 | Сообщение # 51 |
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
| Спасибо за информацию. Quote (DK22Pac) значение из float переводится в int, потом записывается в структуру, в поле с размером в байт...). Максимальная скорость автомобиля тоже хранится в целом виде в поле типа byte - видимо сделано для экономии места. Quote (DK22Pac) Они в игре не использовались. А откуда ты знаешь, что они не использовались? Отсутствие ссылок на данную функцию ещё ни о чём не говорит. П.С. Всё, что относится к траффику, теперь можно обсуждать тут: http://modsforgta.ucoz.ru/forum/10-75-1 .
|
|
| |
Den-x | Дата: Среда, 02.05.2012, 16:26 | Сообщение # 52 |
Группа: Пользователи
Сообщений: 13
Статус: Offline
| Я MTA разбирал, потом надоело
|
|
| |
DK22Pac | Дата: Среда, 02.05.2012, 18:19 | Сообщение # 53 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Quote (Den_spb) А откуда ты знаешь, что они не использовались? Отсутствие ссылок на данную функцию ещё ни о чём не говорит. Я сужу по набору фактов. Во первых, нет прямых ссылок на эту процедуру. Во-вторых, есть процедура, имеющая более завершённый вид.
|
|
| |
Den_spb | Дата: Четверг, 03.05.2012, 12:25 | Сообщение # 54 |
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
| Если фактов несколько, то тогда действительно можно сделать точный вывод. Просто иногда встречаются функции, прямых ссылок на которые нет, но в игре они вызываются.
|
|
| |
DK22Pac | Дата: Среда, 23.05.2012, 11:23 | Сообщение # 55 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| 0x706F60 ; int __cdecl registerShadowWithTime(char a1, RwTexture *texture, RwV3D *pos, int X1, int Y1, int X2, int Y2, __int16 intensity, char red, char green, char blue, int zDistance, int time, int a14) Code 0AA7: call 0x706F60 num_params 14 pop 14 0x3F800000 5000 0x41200000 0 0 200 200 0xC0400000 0 0 0x40400000 10@ 14@ 2 20@ Создаёт тень на указанное время (медленно пропадает). Исп. для проекций взрывов, лужи крови.
Добавлено (23.05.2012, 11:22) --------------------------------------------- 0x6AE850 ; char __thiscall CAutomobile__processTankFire(CAutomobile *automobile)
CPhysical +0xBC DWORD[6] collidedEntity CPhysical +0xB9 BYTE numEntitiesCollided CVehicle +0x4D4 DWORD timeLastShot
Сообщение отредактировал DK22Pac - Среда, 23.05.2012, 11:39 |
|
| |
Den_spb | Дата: Среда, 23.05.2012, 13:06 | Сообщение # 56 |
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
| Quote (DK22Pac) 0x6AE850 ; char __thiscall CAutomobile__processTankFire(CAutomobile *automobile) Т.е. этой функцией можно заставить танк выстрелить?
|
|
| |
DK22Pac | Дата: Среда, 23.05.2012, 13:09 | Сообщение # 57 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Нет, проверка на нажатие клавиши происходит в этой функции.
|
|
| |
Den_spb | Дата: Среда, 23.05.2012, 13:11 | Сообщение # 58 |
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
| Понятно. А это: Quote (DK22Pac) CPhysical +0xBC DWORD[6] collidedEntity Указатель на объект, с которым столкнулся данный объект?
|
|
| |
DK22Pac | Дата: Пятница, 01.06.2012, 23:57 | Сообщение # 59 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| 6 обьектов.
0x5DEF60 ; int __thiscall CPed__getBodypartIDByPoint(CPed *this, RwV3D *point) Используется перед выбором анимации ранения для педов.
CPhysical +0x12C float Уровень освещённости поверхности, с которой соприкасается субьект (0.0 - 0.5)
CVehicle +0x51C CStoredCollPoly Поверхность, с которой контактирует передняя часть транспорта? CVehicle +0x548 CStoredCollPoly Поверхность, с которой контактирует передняя часть транспорта? CVehicle +0x574 BYTE Освещённость поверхности, с которой контактирует левая передняя часть транспорта CVehicle +0x575 BYTE Освещённость поверхности, с которой контактирует левая задняя часть транспорта CVehicle +0x576 BYTE Освещённость поверхности, с которой контактирует правая передняя часть транспорта CVehicle +0x577 BYTE Освещённость поверхности, с которой контактирует правая задняя часть транспорта CVehicle +0x588 DWORD Текстура номерного знака (RwTexture) CVehicle +0x598 WORD ID txd с текстурой покрасочной работы CVehicle +0x59C DWORD Текстура покрасочной работы (RwTexture)
CStoredCollPoly // sizeof=0x2C CStoredCollPoly +0x00 RwV3D meshVertexA // Координаты вершин треугольника CStoredCollPoly +0x0C RwV3D meshVertexB CStoredCollPoly +0x18 RwV3D meshVertexC CStoredCollPoly +0x24 BYTE isActual // Что-то в этом роде, устанавливается в 1 при создании CStoredCollPoly +0x25 BYTE[3] _padding CStoredCollPoly +0x28 DWORD lighting // Освещённость, при чтении из структуры транспорта используется только первый байтДобавлено (01.06.2012, 23:57) --------------------------------------------- Разобрался с Code 6AF110 ; void __thiscall CAutomobile__BlowUpCarsInPath(CAutomobile *automobile) Делает из автомобиля танк Дерзайте
Сообщение отредактировал DK22Pac - Понедельник, 28.05.2012, 20:14 |
|
| |
Den_spb | Дата: Воскресенье, 03.06.2012, 02:23 | Сообщение # 60 |
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
| Quote (DK22Pac) Делает из автомобиля танк Испытал. Работает, но автомобилю надо иммунитеты включить - иначе сам загорается после первого столкновения.
|
|
| |