Gta3.exe — различия между версиями

Материал из GTAModding.ru
Перейти к: навигация, поиск
(Классы коллизии)
 
(не показаны 29 промежуточных версий 5 участников)
Строка 1: Строка 1:
Исполняющий файл игры, содержит игровой движок - [[RenderWare]] и много различных игровых ресурсов, некоторые из них будут описаны ниже.
+
Исполняющий файл игры, содержит игровой движок - [[RenderWare]] и много различных игровых ресурсов.
  
 +
== Исходные коды ==
  
== Лимиты ==
+
Кроме собственно [[RenderWare]], <code>GTA3.exe</code> содержит специализированную часть кода, написанного программистами [[Rockstar Games]] специально под нужды GTA и встречающийся исключительно в линейке видеоигр серии, начиная с [[GTA III]].
 +
 
 +
=== Основные компоненты GTA CORE ===
 +
 
 +
* EventList.cpp - содержит список игровых событий
 +
* Crime.cpp - обеспечивает работу криминальных типов
 +
* Ped.cpp - формирует пути пешеходов на карте из nodes
 +
* PedAI.cpp - задаёт пешеходам определённое поведение
 +
* Pedtype.cpp - обработчик <code>[[PED.DAT]]</code>
 +
* Population.cpp - обработчик <code>[[PEDGRP.DAT]]</code>
 +
* Explosion.cpp
 +
* ProjectileInfo.cpp
 +
* Weapon.cpp - отвечает за оружие в игре
 +
* WeaponInfo.cpp - обработчик <code>[[WEAPON.DAT]]</code>
 +
 
 +
'''GTA3Portable:'''
 +
 
 +
* binarytree.cpp
 +
* POLRADIO.CPP
 +
* EmergencyPed.cpp
 +
* CopPed.cpp
 +
* combostate.cpp
 +
* glass.cpp
 +
* automobile.cpp
 +
* world.cpp
 +
* tinyxmlparser.cpp
 +
* fluff.cpp
 +
* player.cpp
 +
* pathrental.cpp
 +
* cranes.cpp
 +
* pedpath.cpp
 +
* civilianped.cpp
 +
* tinystr.cpp
 +
* localareaknowledge.cpp
 +
* trafficlights.cpp
 +
* physical.cpp
 +
* renderer.cpp
 +
* tinyxml.cpp
 +
* shadows.cpp
 +
* dummy.cpp
 +
* objectivefunctions.cpp
 +
* entity.cpp
 +
* streamingnew.cpp
 +
* vehicle.cpp
 +
* garage.cpp
 +
* fecontrollerelement.cpp
 +
* carctrl.cpp
 +
 
 +
'''GTA3Mobile:'''
 +
 
 +
* cdstream-tegra.cpp
 +
* font.cpp
 +
* sprite2d.cpp
 +
* Touchscreen.cpp
 +
* samp-oal.cpp
 +
* MobileFrontend.cpp
 +
* RadarMap.cpp
 +
* ImplArrays.cpp
 +
* IOSFile.cpp
 +
* IOSGamepad.cpp
 +
* EmuCustomShader.cpp
 +
 
 +
=== Лимиты ===
  
 
Как и в любой другой игре, в GTA3 тоже существуют так называемые игровые лимиты.
 
Как и в любой другой игре, в GTA3 тоже существуют так называемые игровые лимиты.
Строка 8: Строка 71:
 
Лимит - определённое ограничение, наложенное разработчиками игры на конкретные виды игровых ресурсов - модели, текстуры, автотранспорт и т.д. Выражены в числовом виде.
 
Лимит - определённое ограничение, наложенное разработчиками игры на конкретные виды игровых ресурсов - модели, текстуры, автотранспорт и т.д. Выражены в числовом виде.
  
Отредактировать лимиты можно любым HEX-редактором, отрыв в нём gta.exe или их можно изменять непосредственно в игровой памяти посредством написания asi-плагинов или через использование CLEO-скриптов, но это намного сложнее.
+
Отредактировать лимиты можно любым HEX-редактором, отрыв в нём <code>gta.exe</code> или их можно изменять непосредственно в игровой памяти посредством написания <code>*.asi</code>-плагинов или через использование CLEO-скриптов, но это намного сложнее.
  
 
Основные лимиты gta3 по способу хранения можно разделить на одно-байтовые и четырёх-байтовые. Четырёх-байтовые в свою очередь делятся на множество подвидов, с ними можно будет ознакомиться ниже.
 
Основные лимиты gta3 по способу хранения можно разделить на одно-байтовые и четырёх-байтовые. Четырёх-байтовые в свою очередь делятся на множество подвидов, с ними можно будет ознакомиться ниже.
  
== Классификация Хероманта ==
+
=== Классификация ===
  
 
Данная классификация нестандартна, является результатом любительского подхода к изучению содержимого gta3.exe. Была получена без использования различных декомпиляторов, поэтому что-то  ней может не совпадать с тем, что есть на самом деле.
 
Данная классификация нестандартна, является результатом любительского подхода к изучению содержимого gta3.exe. Была получена без использования различных декомпиляторов, поэтому что-то  ней может не совпадать с тем, что есть на самом деле.
  
=== Первая категория "Основные Лимиты" ===
+
==== Первая категория "Основные Лимиты" ====
 
+
Делятся на два типа по их идентификаторам в exe. Первый тип - "740989C16A", всегда занимает 1 байт, второй "740C89C168" - 4 байта.
+
  
 +
"Лимит", в данном случае, - параметр, передаваемый в процедуру, которая выделяет память для нового пула, - кол-во элементов в пуле.
 
Все адреса основных лимитов и их названия представлены ниже (база частично взята из GTA3 Limit Adjuster 1.0), в скобочках указаны их стандартные значения.
 
Все адреса основных лимитов и их названия представлены ниже (база частично взята из GTA3 Limit Adjuster 1.0), в скобочках указаны их стандартные значения.
  
* 00460C - первый неизвестный лимит (512)
+
* 00460C - Directory (512)
* 0069D3 - второй неизвестный лимит (128)
+
* 0069D3 - Directory (128)
* 037945 - третий неизвестный лимит (0)
+
* 037945 - CopPed (0)
 
* 0A186F (0A177F) - PtrNode (30000) - Определяет допустимые объёмы коллизий на игровой карте
 
* 0A186F (0A177F) - PtrNode (30000) - Определяет допустимые объёмы коллизий на игровой карте
 
* 0A188C (0A179C) - EntryInfoNode (5400)
 
* 0A188C (0A179C) - EntryInfoNode (5400)
Строка 34: Строка 96:
 
* 0A1937 (0A1847) - Dummy (2802)
 
* 0A1937 (0A1847) - Dummy (2802)
 
* 0A1954 (0A1864) - AudioScriptObj (256)
 
* 0A1954 (0A1864) - AudioScriptObj (256)
* 0F54E2 (0F5432) - (16)
+
* 0F54E2 (0F5432) - EmergencyPed (16)
* OF556E (0F54BE) - (17)
+
* OF556E (0F54BE) - EmergencyPed (17)
* 127698 (127458) - (850)
+
* 127698 (127458) - TxdDef (850)
* 15B6B8 (15B588) - (170)
+
* 15B6B8 (15B588) - ProjectileInfo (170)
* 15B6DC (15B5AC) - (174)
+
* 15B6DC (15B5AC) - ProjectileInfo (174)
* 15B700 (15B5D0) - (179)
+
* 15B700 (15B5D0) - ProjectileInfo (179)
 +
 
 +
==== Вторая категория "Пути" ====
 +
 
 +
Содержит строковые значения, ссылающиеся на основные игровые ресурсы. Выложены самые интересные, являющиеся полезными для моддинга GTA3.
 +
 
 +
* 1FD6B0 (1FD498) - fonts.txd
 +
* 1FDB2C (1FD914) - hud.txd
 +
* 1F34B0 (1F33A8) - menu.txd
 +
* 217C80 (217440) - txd.dir
 +
* 217C50 (217410) - txd.img
 +
* 1FFA0C (1FF7F4) - carcols.dat
 +
* 1F4EEC (1F4DDC) - default.dat
 +
* 1F57C4 (1F55AC) - gta3.dat
 +
* 2013D4 (2010B4) - handling.cfg
 +
* 1EE79C - main.scm
 +
* 2033FC (202CC4) - weapon.dat
 +
* 2035BD (202E85) - HEAD RADIO
 +
* 2034F5 (202DBD) - CLASSIC (DOUBLE CLEFF FM) RADIO
 +
* 20350E (202DD6) - KJAH RADIO
 +
* 203527 (202DEF) - RISE FM
 +
* 203540 (202E08) - LIPS 106
 +
* 203559 (202E21) - GAME FM
 +
* 203572 (202E3A) - MSX FM
 +
* 20358B (202E53) - FLASHBACK 95.6
 +
* 2035A4 (202E6C) - CHAT
 +
* 20F49D (20ED5D) - GTA3 USER FILES
 +
 
 +
==== Третья категория ====
 +
{{stub}}
 +
 
 +
=== Консоль debugger-а GTA CORE ===
 +
 
 +
Для тестирования GTA3 разработчиками использовалась консоль. В финальной версии она полностью заблокирована (оставили только кастратную возможность ввода чит-кодов без интерфейса командной строки). Текстуры консоли разработчиками были оставлены в <code>frontend.txd</code> и <code>menu.txd</code>.
 +
 
 +
 
 +
== Классы и структуры ==
 +
===CAutomobile===
 +
'''Таблица виртуальных методов'''
 +
Таблица  Функция  Имя
 +
0x600C1C 0x4202A0 CAutomobile::~CAutomobile(void)
 +
0x600C20 0x4951F0 CPhysical::Add(void)
 +
0x600C24 0x4954B0 CPhysical::Remove(void)
 +
0x600C28 0x52D190 CAutomobile::SetModelIndex(uint)
 +
0x600C2C 0x473E90 CEntity::SetModelIndexNoCreate(uint)
 +
0x600C30 0x473EA0 CEntity::CreateRwObject(void)
 +
0x600C34 0x473F90 CEntity::DeleteRwObject(void)
 +
0x600C38 0x495150 CPhysical::GetBoundRect(void)
 +
0x600C3C 0x531470 CAutomobile::ProcessControl(void)
 +
0x600C40 0x4961A0 CPhysical::ProcessCollision(void)
 +
0x600C44 0x496F10 CPhysical::ProcessShift(void)
 +
0x600C48 0x535180 CAutomobile::Teleport(CVector)
 +
0x600C4C 0x535B40 CAutomobile::PreRender(void)
 +
0x600C50 0x539EA0 CAutomobile::Render(void)
 +
0x600C54 0x4A7DD0 CVehicle::SetupLighting(void)
 +
0x600C58 0x4A7E60 CVehicle::RemoveLighting(bool)
 +
0x600C5C 0x53E350 CVehicle::FlagToDestroyWhenNextProcessed(void)
 +
0x600C60 0x53B270 CAutomobile::ProcessEntityCollision(CEntity *,CColPoint *)
 +
0x600C64 0x53B660 CAutomobile::ProcessControlInputs(uchar)
 +
0x600C68 0x52E5F0 CAutomobile::GetComponentWorldPosition(int,CVector &)
 +
0x600C6C 0x52E660 CAutomobile::IsComponentPresent(int)
 +
0x600C70 0x52E680 CAutomobile::SetComponentRotation(int,CVector)
 +
0x600C74 0x52E750 CAutomobile::OpenDoor(int,eDoors,float)
 +
0x600C78 0x52E910 CAutomobile::ProcessOpenDoor(uint,uint,float)
 +
0x600C7C 0x52EF10 CAutomobile::IsDoorReady(eDoors)
 +
0x600C80 0x52EF90 CAutomobile::IsDoorFullyOpen(eDoors)
 +
0x600C84 0x52EFD0 CAutomobile::IsDoorClosed(eDoors)
 +
0x600C88 0x52F000 CAutomobile::IsDoorMissing(eDoors)
 +
0x600C8C 0x53BF40 CAutomobile::RemoveRefsToVehicle(CEntity *)
 +
0x600C90 0x53BC60 CAutomobile::BlowUpCar(CEntity *)
 +
0x600C94 0x53BF70 CAutomobile::SetUpWheelColModel(CColModel *)
 +
0x600C98 0x53C0E0 CAutomobile::BurstTyre(uchar)
 +
0x600C9C 0x53C5B0 CAutomobile::IsRoomForPedToLeaveCar(uint,CVector *)
 +
0x600CA0 0x437690 CAutomobile::GetHeightAboveRoad(void)
 +
0x600CA4 0x53C450 CAutomobile::PlayCarHorn(void)
 +
 
 +
===CVector===
 +
0x0000 | float x
 +
0x0004 | float y
 +
0x0008 | float z
 +
 
 +
===CScrollBar===
 +
{|
 +
|Начало
 +
|0x62F240
 +
|-
 +
|Кол-во
 +
|11
 +
|-
 +
|Размер
 +
|0x60
 +
|}
 +
0x0000 | DWORD  counter
 +
0x0004 | char    *text              // Указатель на текущую строку
 +
0x0008 | CVector pos                // Координаты левого нижнего угла
 +
0x0014 | DWORD  textCurrPos
 +
0x0018 | DWORD  textStartPos
 +
0x001С | float  scaleX              // Масштабирование/разворот в 2D-системе координат
 +
0x0020 | float  scaleY              // Масштабирование/разворот в 2D-системе координат
 +
0x0024 | float  height              // Высота
 +
0x0028 | float  intensity          // Интенсивность, зависит от расположения камеры и влияет на значения RGB
 +
0x002C | BYTE    renderCharsSets[40]
 +
0x0054 | BYTE    textType            // Тип определяет комбинацию текстов, которая будет показана на бегущей строке
 +
0x0055 | BYTE    isUpdated
 +
0x0056 | BYTE    red
 +
0x0057 | BYTE    green
 +
0x0058 | BYTE    blue
 +
0x0059 | BYTE    _pad[3]
 +
0x005C | float  depth              // Толщина букв
 +
 
 +
===CAntenna===
 +
{|
 +
|Начало
 +
|0x664680
 +
|-
 +
|Кол-во
 +
|8
 +
|-
 +
|Размер
 +
|0x9C
 +
|}
 +
0x0000 | BYTE    isExist
 +
0x0001 | BYTE    isUpdated
 +
0x0002 | BYTE    _pad[2]
 +
0x0004 | DWORD  id
 +
0x0008 | float  length    // Длина, для RcBandit равна 1.0
 +
0x000С | CVector pointsA[6]
 +
0x0054 | CVector pointsB[6]
 +
 
 +
===CPointlight===
 +
{|
 +
|Начало
 +
|0x7096D0
 +
|-
 +
|Кол-во
 +
|32
 +
|-
 +
|Размер
 +
|0x2C
 +
|}
 +
0x0000 | CVector pos                  // Позиция
 +
0x000C | CVector direction            // Направление
 +
0x0018 | float  radius              // Радиус
 +
0x001C | float  red                  // 0.0 - 1.0
 +
0x0020 | float  green                // 0.0 - 1.0
 +
0x0024 | float  blue                // 0.0 - 1.0
 +
0x0028 | BYTE    type                // Тип источника света
 +
0x0029 | BYTE    fogType              // Эффект с использованием текстуры pointlight
 +
0x002A | BYTE    generateExtraShadows // Включить создание дополнительных теней для автомобиля игрока
 +
0x002B | BYTE    _pad
 +
 
 +
===CBulletTrace===
 +
{|
 +
|Начало
 +
|0x72B1B8
 +
|-
 +
|Кол-во
 +
|16
 +
|-
 +
|Размер
 +
|0x1C
 +
|}
 +
0x0000 | CVector origin
 +
0x000C | CVector target
 +
0x0018 | BYTE    isExist
 +
0x0019 | BYTE    timeCounter
 +
0x001A | BYTE    intensity
 +
0x001B | BYTE    _pad
 +
 
 +
===CBrightLight===
 +
{|
 +
|Начало
 +
|0x733A68
 +
|-
 +
|Кол-во
 +
|32
 +
|-
 +
|Размер
 +
|0x38
 +
|}
 +
0x0000 | CVector corner[4]
 +
0x0030 | float  cameraDistance
 +
0x0034 | RwRGBA  color
 +
 
 +
===CRegisteredShadow===
 +
{|
 +
|Начало
 +
|0x779058
 +
|-
 +
|Кол-во
 +
|48
 +
|-
 +
|Размер
 +
|0x30
 +
|}
 +
0x0000 | CVector  position
 +
0x000C | float    rotationX1  // Эти параметры определяют разворот и размер
 +
0x0010 | float    rotationY1
 +
0x0014 | float    rotationX2
 +
0x0018 | float    rotationY2
 +
0x001C | float    zDistance  // Максимальное расстояние между позицией тени и поверхностью, на которую падает тень
 +
0x0020 | float    scale      // Масштабирование относительно одного из углов
 +
0x0024 | WORD      intensity
 +
0x0026 | BYTE      type
 +
0x0027 | BYTE      red
 +
0x0028 | BYTE      green
 +
0x0029 | BYTE      blue
 +
0x002A | WORD      flags
 +
0x002C | RwTexture *texture
 +
''Типы теней (type)''
 +
ID Описание          Source-Blend Dest-Blend
 +
0                    5            6
 +
1  Тень (чёрный цвет) 2            2
 +
2  Свет (цвет RGB)    1            4
 +
 
 +
===CShinyText===
 +
{|
 +
|Начало
 +
|0x87B2D8
 +
|-
 +
|Кол-во
 +
|32
 +
|-
 +
|Размер
 +
|0x58
 +
|}
 +
0x0000 | CVector    corner[4]
 +
0x0030 | RwTexCoords cornerTexCoords[4]
 +
0x0050 | float      distanceToCamera
 +
0x0006 | RwRGBA      color
 +
 
 +
===CRegisteredMotionBlurStreak===
 +
{|
 +
|Начало
 +
|0x880A00
 +
|-
 +
|Кол-во
 +
|4
 +
|-
 +
|Размер
 +
|0x54
 +
|}
 +
0x0000 | DWORD  id
 +
0x0004 | BYTE    red
 +
0x0005 | BYTE    green
 +
0x0006 | BYTE    blue
 +
0x0007 | BYTE    _pad1
 +
0x0008 | CVector partPointsA[3]
 +
0x002C | CVector partPointsB[3]
 +
0x0050 | BYTE    isPartNeedsToBeRendered[3]
 +
0x0053 | BYTE    _pad2
 +
 
 +
===Радар===
 +
'''Функции'''
 +
0x4A3EF0 CRadar::Initialise(void)                                                     
 +
0x4A3F60 CRadar::Shutdown(void)                                                       
 +
0x4A4030 CRadar::LoadTextures(void)                                                   
 +
0x4A4180 CRadar::GetNewUniqueBlipIndex(int)                                           
 +
0x4A41C0 CRadar::GetActualBlipArrayIndex(int)                                         
 +
0x4A4200 CRadar::DrawMap(void)                                                         
 +
0x4A42F0 CRadar::DrawBlips(void)                                                       
 +
0x4A4C70 CRadar::Draw3dMarkers(void)                                                   
 +
0x4A4F30 CRadar::LimitRadarPoint(CVector2D &)                                         
 +
0x4A4F90 CRadar::CalculateBlipAlpha(float)                                             
 +
0x4A5040 CRadar::TransformRadarPointToScreenSpace(CVector2D &,CVector2D const&)       
 +
0x4A50D0 CRadar::TransformRealWorldPointToRadarSpace(CVector2D &,CVector2D const&)     
 +
0x4A5300 CRadar::TransformRadarPointToRealWorldSpace(CVector2D &,CVector2D const&)     
 +
0x4A5530 CRadar::TransformRealWorldToTexCoordSpace(CVector2D &,CVector2D const&,int,int)
 +
0x4A5590 CRadar::SetCoordBlip((eBlipType,CVector,int,eBlipDisplay))                   
 +
0x4A5640 CRadar::SetEntityBlip((eBlipType,int,int,eBlipDisplay))                       
 +
0x4A56C0 CRadar::ClearBlipForEntity((eBlipType,int))                                   
 +
0x4A5720 CRadar::ClearBlip((int))                                                     
 +
0x4A5770 CRadar::ChangeBlipColour((int,int))                                           
 +
0x4A57A0 CRadar::ChangeBlipBrightness((int,int))                                       
 +
0x4A57E0 CRadar::ChangeBlipScale((int,int))                                           
 +
0x4A5810 CRadar::ChangeBlipDisplay((int,eBlipDisplay))                                 
 +
0x4A5840 CRadar::SetBlipSprite((int,int))                                             
 +
0x4A5870 CRadar::ShowRadarTrace(float,float,uint,uchar,uchar,uchar,uchar)             
 +
0x4A59C0 CRadar::ShowRadarMarker(CVector,uint,float)                                   
 +
0x4A5BB0 CRadar::GetRadarTraceColour(uint,uchar)                                       
 +
0x4A5C60 CRadar::SetRadarMarkerState(int,uchar)                                       
 +
0x4A5D10 CRadar::DrawRotatingRadarSprite(CSprite2d *,float,float,float,uchar)         
 +
0x4A5EF0 CRadar::DrawRadarSprite(ushort,float,float,uchar)                             
 +
0x4A6020 ClipRadarTileCoords(int &,int &)                                             
 +
0x4A6060 RequestMapSection(int,int)                                                   
 +
0x4A60A0 RemoveMapSection(int,int)                                                     
 +
0x4A60E0 CRadar::RemoveRadarSections(void)                                             
 +
0x4A6100 CRadar::StreamRadarSections(int,int)                                         
 +
0x4A6160 IsPointInsideRadar(CVector2D  const&)                                         
 +
0x4A61C0 GetTextureCorners(int,int,CVector2D *)                                       
 +
0x4A6250 LineRadarBoxCollision(CVector2D &,CVector2D const&,CVector2D const&)         
 +
0x4A64A0 CRadar::ClipRadarPoly(CVector2D *,CVector2D const*)                           
 +
0x4A67E0 CRadar::DrawRadarSection(int,int)                                             
 +
0x4A69C0 CRadar::DrawRadarMask(void)                                                   
 +
0x4A6B60 CRadar::StreamRadarSections(CVector  const&)                                 
 +
0x4A6C20 CRadar::DrawRadarMap(void)                                                   
 +
0x4A6E30 CRadar::SaveAllRadarBlips(uchar *,uint *)                                     
 +
0x4A6F30 CRadar::LoadAllRadarBlips(uchar *)                                           
 +
0x4A7000 `global constructor keyed to'Radar.cpp                                       
 +
'''Переменные'''
 +
0x5F6EF8 char *gRadarTexNames[64]
 +
0x6299B8 CVector2D vec2DRadarOrigin
 +
0x6299C0 DWORD gRadarTxdIds[100]
 +
0x6ED5E0 CRadarBlip CRadar::ms_RadarTrace[32]
 +
0x885B24 CSprite2d CRadar::CatSprite
 +
0x885B58 CSprite2d CRadar::TonySprite
 +
0x8E2A7C CSprite2d CRadar::RaySprite
 +
0x8F1A2C CSprite2d CRadar::CopcarSprite
 +
0x8F1A3C CSprite2d CRadar::LuigiSprite
 +
0x8F1A40 CSprite2d CRadar::AsukaSprite
 +
0x8F1B80 CSprite2d CRadar::ElSprite
 +
0x8F29EC CSprite2d CRadar::SalSprite
 +
0x8F2BCC CSprite2d CRadar::EightSprite
 +
0x8F2BE0 CSprite2d CRadar::DonSprite
 +
0x8F2C00 CSprite2d CRadar::JoeySprite
 +
0x8F2C68 CSprite2d CRadar::KenjiSprite
 +
0x8F5830 CSprite2d CRadar::LizSprite
 +
0x8F5F74 CSprite2d CRadar::SaveSprite
 +
0x8F5FB4 CSprite2d CRadar::BombSprite
 +
0x8F6268 CSprite2d CRadar::CentreSprite
 +
0x8F6274 CSprite2d CRadar::NorthSprite
 +
0x941534 CSprite2d CRadar::WeaponSprite
 +
0x9415FC CSprite2d CRadar::IceSprite
 +
0x94307C CSprite2d CRadar::SpraySprite
 +
'''Константы'''
 +
0x5F714C float 94.0 - Ширина радара
 +
0x5F7154 float 40.0 - Смещение радара по X-оси
 +
0x5F715C float 76.0 - Высота радара
 +
0x5F7160 float 123.0 - Смещение радара по Y-оси
 +
'''Структуры'''
 +
{|
 +
|Название
 +
|Метка радара
 +
|-
 +
|Начало
 +
|0x6ED5E0
 +
|-
 +
|Кол-во
 +
|32
 +
|-
 +
|Размер
 +
|0x30
 +
|}
 +
0x0000 | DWORD    m_dwBlipColour
 +
0x0004 | DWORD    m_dwBlipType
 +
0x0008 | DWORD    m_dwEntityHandle
 +
0x000C | CVector2D m_v2dPosn
 +
0x0014 | CVector  m_v3dPosn
 +
0x0020 | WORD      m_wIndex
 +
0x0022 | BYTE      m_bBlipBrightness
 +
0x0023 | BYTE      m_bActive
 +
0x0024 | float    m_f3dMarkerAnimState
 +
0x0028 | WORD      m_wBlipScale
 +
0x002A | WORD      m_wBlipDisplay
 +
0x002C | WORD      m_wBlipSprite
 +
 
 +
== Классы моделей ==
 +
CBaseModelInfo                    // Отдельно не существует
 +
  |
 +
  |
 +
  +---CSimpleModelInfo            // Обьект карты? 5000 обьектов
 +
  |      |
 +
  |      |
 +
  |      +---CTimeModelInfo        // Ночной обьект? 30 обьектов
 +
  |
 +
  |
 +
  +---CClumpModelInfo              // Обьект с иерархией - сцществует отдельно, 5 обьектов (головы в катсценах)
 +
        |
 +
        |
 +
        +---CVehicleModelInfo    // Транспорт, 120 обьектов
 +
        |
 +
        |
 +
        +---CPedModelInfo        // Педы, 90 обьектов
 +
        |
 +
        |
 +
        +---CMloModelInfo        // 1 обьект, создается секцией sta
 +
        |
 +
        |
 +
        +---CXtraCompsModelInfo  // Части педа? 2 обьекта
 +
===CBaseModelInfo===
 +
struct CBaseModelInfo
 +
{
 +
    void      *__vmt;
 +
    char      m_cName[24];
 +
    CColModel *m_pColModel;
 +
    C2dEffect *m_p2dEffect;
 +
    WORD      m_wObjectDataId;
 +
    WORD      m_wRefCount;
 +
    WORD      m_wTxdId;
 +
    BYTE      m_bType;
 +
    BYTE      m_bNum2dEffects;
 +
    BYTE      __field_2C;
 +
    BYTE      __padding0[3];
 +
};
 +
===CSimpleModelInfo===
 +
struct CSimpleModelInfo : public CBaseModelInfo
 +
{
 +
    RpAtomic *m_pAtomic[3];
 +
    float    m_fLodDistance[3];
 +
    BYTE      m_bNumAtomics;
 +
    BYTE      m_bAlpha;
 +
    WORD      m_wLodFlags;
 +
};
 +
===CTimeModelInfo===
 +
struct CTimeModelInfo : public CSimpleModelInfo
 +
{
 +
    DWORD m_dwTimeOn;
 +
    DWORD m_dwTimeOff;
 +
    DWORD m_dwOtherTimeModelId;
 +
};
 +
===CClumpModelInfo===
 +
struct CClumpModelInfo : public CBaseModelInfo
 +
{
 +
    RpClump *m_pClump;
 +
};
 +
===CVehicleModelInfo===
 +
struct CVehicleModelInfo : public CClumpModelInfo
 +
{
 +
    BYTE        m_bLastCarColorId[2];
 +
    char        m_cGameName[32];
 +
    BYTE        __padding0[2];
 +
    DWORD      m_dwVehicleType;
 +
    DWORD      m_dwWheelModelIndex;
 +
    float      m_fWheelScale;
 +
    DWORD      m_dwNumDoors;
 +
    DWORD      m_dwHandlingId;
 +
    DWORD      m_dwClass;
 +
    DWORD      m_dwLvl;
 +
    CVector    m_vDummyPos[10];
 +
    DWORD      m_dwComprules;
 +
    float      m_fBikeSteerAngle;
 +
    RpMaterial *m_pMaterialPrimary[26];
 +
    RpMaterial *m_pMaterialSecondary[26];
 +
    BYTE        m_bPrimaryColorId[8];
 +
    BYTE        m_bSecondaryColorId[8];
 +
    BYTE        m_bNumColorVariations;
 +
    BYTE        m_bLastColorVariation;
 +
    BYTE        m_bCurrentColorId[2];
 +
    RwTexture  *m_pEnvironmentTex;
 +
    RpAtomic  *m_pExtra[6];
 +
    DWORD      m_dwNumExtras;
 +
};
 +
 
 +
===CPedModelInfo===
 +
struct CPedModelInfo
 +
{
 +
    DWORD      m_dwAnimGroupId;
 +
    DWORD      m_dwPedtype;
 +
    DWORD      m_dwStatPedtype;
 +
    DWORD      m_dwCarsCanDriveMask;
 +
    CColModel *m_pHitColModel;
 +
};
 +
===CMloModelInfo===
 +
struct CMloModelInfo : public CClumpModelInfo
 +
{
 +
    DWORD __field_34;
 +
    DWORD __field_38;
 +
    DWORD __field_3C;
 +
};
 +
===CXtraCompsModelInfo===
 +
struct CXtraCompsModelInfo : public CClumpModelInfo
 +
{
 +
    DWORD __field_34;
 +
};
 +
== Классы коллизии ==
 +
===CColModel===
 +
В оригинальных исходниках R*, класс CColModel выглядел примерно так:
 +
<source lang="cpp">class CColModel
 +
{
 +
public:
 +
    CColSphere m_BoundSphere;
 +
    CColBox m_BoundBox;
 +
    unsigned short m_wNumOfSpheres;
 +
    unsigned short m_wNumOfLines;
 +
    unsigned short m_wNumOfBoxes;
 +
    unsigned short m_wNumOfTriangles;
 +
    eLevelName m_ColLevel;
 +
    unsigned char m_nFlags;
 +
    CColSphere *m_pSpheres;
 +
    CColLine *m_pLines;
 +
    CColBox *m_pBoxes;
 +
    CompressedVector *m_pVertices;
 +
    CColTriangle *m_pTriangles;
 +
    CColTrianglePlane *m_pTrianglePlanes;
 +
 
 +
    CColModel();
 +
    ~CColModel();
 +
 
 +
    void operator=(CColModel const &right);
  
=== Вторая категория "Сектор Анимации" ===
+
    void GetTrianglePoint(CVector &out, int vertex);
 +
    void CalculateTrianglePlanes();
 +
    void RemoveTrianglePlanes();
 +
    void SetLinkPtr(CLink<CColModel *> *link);
 +
    CLink<CColModel *> *GetLinkPtr();
 +
    void RemoveCollisionVolumes();
 +
};</source>
 +
{{GTA3-navi}}
 +
[[Категория:GTA 3]]

Текущая версия на 22:46, 15 октября 2013

Исполняющий файл игры, содержит игровой движок - RenderWare и много различных игровых ресурсов.

Содержание

Исходные коды

Кроме собственно RenderWare, GTA3.exe содержит специализированную часть кода, написанного программистами Rockstar Games специально под нужды GTA и встречающийся исключительно в линейке видеоигр серии, начиная с GTA III.

Основные компоненты GTA CORE

  • EventList.cpp - содержит список игровых событий
  • Crime.cpp - обеспечивает работу криминальных типов
  • Ped.cpp - формирует пути пешеходов на карте из nodes
  • PedAI.cpp - задаёт пешеходам определённое поведение
  • Pedtype.cpp - обработчик PED.DAT
  • Population.cpp - обработчик PEDGRP.DAT
  • Explosion.cpp
  • ProjectileInfo.cpp
  • Weapon.cpp - отвечает за оружие в игре
  • WeaponInfo.cpp - обработчик WEAPON.DAT

GTA3Portable:

  • binarytree.cpp
  • POLRADIO.CPP
  • EmergencyPed.cpp
  • CopPed.cpp
  • combostate.cpp
  • glass.cpp
  • automobile.cpp
  • world.cpp
  • tinyxmlparser.cpp
  • fluff.cpp
  • player.cpp
  • pathrental.cpp
  • cranes.cpp
  • pedpath.cpp
  • civilianped.cpp
  • tinystr.cpp
  • localareaknowledge.cpp
  • trafficlights.cpp
  • physical.cpp
  • renderer.cpp
  • tinyxml.cpp
  • shadows.cpp
  • dummy.cpp
  • objectivefunctions.cpp
  • entity.cpp
  • streamingnew.cpp
  • vehicle.cpp
  • garage.cpp
  • fecontrollerelement.cpp
  • carctrl.cpp

GTA3Mobile:

  • cdstream-tegra.cpp
  • font.cpp
  • sprite2d.cpp
  • Touchscreen.cpp
  • samp-oal.cpp
  • MobileFrontend.cpp
  • RadarMap.cpp
  • ImplArrays.cpp
  • IOSFile.cpp
  • IOSGamepad.cpp
  • EmuCustomShader.cpp

Лимиты

Как и в любой другой игре, в GTA3 тоже существуют так называемые игровые лимиты.

Лимит - определённое ограничение, наложенное разработчиками игры на конкретные виды игровых ресурсов - модели, текстуры, автотранспорт и т.д. Выражены в числовом виде.

Отредактировать лимиты можно любым HEX-редактором, отрыв в нём gta.exe или их можно изменять непосредственно в игровой памяти посредством написания *.asi-плагинов или через использование CLEO-скриптов, но это намного сложнее.

Основные лимиты gta3 по способу хранения можно разделить на одно-байтовые и четырёх-байтовые. Четырёх-байтовые в свою очередь делятся на множество подвидов, с ними можно будет ознакомиться ниже.

Классификация

Данная классификация нестандартна, является результатом любительского подхода к изучению содержимого gta3.exe. Была получена без использования различных декомпиляторов, поэтому что-то ней может не совпадать с тем, что есть на самом деле.

Первая категория "Основные Лимиты"

"Лимит", в данном случае, - параметр, передаваемый в процедуру, которая выделяет память для нового пула, - кол-во элементов в пуле. Все адреса основных лимитов и их названия представлены ниже (база частично взята из GTA3 Limit Adjuster 1.0), в скобочках указаны их стандартные значения.

  • 00460C - Directory (512)
  • 0069D3 - Directory (128)
  • 037945 - CopPed (0)
  • 0A186F (0A177F) - PtrNode (30000) - Определяет допустимые объёмы коллизий на игровой карте
  • 0A188C (0A179C) - EntryInfoNode (5400)
  • 0A18A9 (0A17B9) - Peds (140)
  • 0A18C6 (0A17D6) - Vehicle (110)
  • 0A18E0 (0A17F0) - Buildings (5500)
  • 0A18FD (0A180D) - Treadable (1214)
  • 0A191A (0A182A) - Object (450)
  • 0A1937 (0A1847) - Dummy (2802)
  • 0A1954 (0A1864) - AudioScriptObj (256)
  • 0F54E2 (0F5432) - EmergencyPed (16)
  • OF556E (0F54BE) - EmergencyPed (17)
  • 127698 (127458) - TxdDef (850)
  • 15B6B8 (15B588) - ProjectileInfo (170)
  • 15B6DC (15B5AC) - ProjectileInfo (174)
  • 15B700 (15B5D0) - ProjectileInfo (179)

Вторая категория "Пути"

Содержит строковые значения, ссылающиеся на основные игровые ресурсы. Выложены самые интересные, являющиеся полезными для моддинга GTA3.

  • 1FD6B0 (1FD498) - fonts.txd
  • 1FDB2C (1FD914) - hud.txd
  • 1F34B0 (1F33A8) - menu.txd
  • 217C80 (217440) - txd.dir
  • 217C50 (217410) - txd.img
  • 1FFA0C (1FF7F4) - carcols.dat
  • 1F4EEC (1F4DDC) - default.dat
  • 1F57C4 (1F55AC) - gta3.dat
  • 2013D4 (2010B4) - handling.cfg
  • 1EE79C - main.scm
  • 2033FC (202CC4) - weapon.dat
  • 2035BD (202E85) - HEAD RADIO
  • 2034F5 (202DBD) - CLASSIC (DOUBLE CLEFF FM) RADIO
  • 20350E (202DD6) - KJAH RADIO
  • 203527 (202DEF) - RISE FM
  • 203540 (202E08) - LIPS 106
  • 203559 (202E21) - GAME FM
  • 203572 (202E3A) - MSX FM
  • 20358B (202E53) - FLASHBACK 95.6
  • 2035A4 (202E6C) - CHAT
  • 20F49D (20ED5D) - GTA3 USER FILES

Третья категория

Консоль debugger-а GTA CORE

Для тестирования GTA3 разработчиками использовалась консоль. В финальной версии она полностью заблокирована (оставили только кастратную возможность ввода чит-кодов без интерфейса командной строки). Текстуры консоли разработчиками были оставлены в frontend.txd и menu.txd.


Классы и структуры

CAutomobile

Таблица виртуальных методов

Таблица  Функция  Имя
0x600C1C 0x4202A0 CAutomobile::~CAutomobile(void)
0x600C20 0x4951F0 CPhysical::Add(void)
0x600C24 0x4954B0 CPhysical::Remove(void)
0x600C28 0x52D190 CAutomobile::SetModelIndex(uint)
0x600C2C 0x473E90 CEntity::SetModelIndexNoCreate(uint)
0x600C30 0x473EA0 CEntity::CreateRwObject(void)
0x600C34 0x473F90 CEntity::DeleteRwObject(void)
0x600C38 0x495150 CPhysical::GetBoundRect(void)
0x600C3C 0x531470 CAutomobile::ProcessControl(void)
0x600C40 0x4961A0 CPhysical::ProcessCollision(void)
0x600C44 0x496F10 CPhysical::ProcessShift(void)
0x600C48 0x535180 CAutomobile::Teleport(CVector)
0x600C4C 0x535B40 CAutomobile::PreRender(void)
0x600C50 0x539EA0 CAutomobile::Render(void)
0x600C54 0x4A7DD0 CVehicle::SetupLighting(void)
0x600C58 0x4A7E60 CVehicle::RemoveLighting(bool)
0x600C5C 0x53E350 CVehicle::FlagToDestroyWhenNextProcessed(void)
0x600C60 0x53B270 CAutomobile::ProcessEntityCollision(CEntity *,CColPoint *)
0x600C64 0x53B660 CAutomobile::ProcessControlInputs(uchar)
0x600C68 0x52E5F0 CAutomobile::GetComponentWorldPosition(int,CVector &)
0x600C6C 0x52E660 CAutomobile::IsComponentPresent(int)
0x600C70 0x52E680 CAutomobile::SetComponentRotation(int,CVector)
0x600C74 0x52E750 CAutomobile::OpenDoor(int,eDoors,float)
0x600C78 0x52E910 CAutomobile::ProcessOpenDoor(uint,uint,float)
0x600C7C 0x52EF10 CAutomobile::IsDoorReady(eDoors)
0x600C80 0x52EF90 CAutomobile::IsDoorFullyOpen(eDoors)
0x600C84 0x52EFD0 CAutomobile::IsDoorClosed(eDoors)
0x600C88 0x52F000 CAutomobile::IsDoorMissing(eDoors)
0x600C8C 0x53BF40 CAutomobile::RemoveRefsToVehicle(CEntity *)
0x600C90 0x53BC60 CAutomobile::BlowUpCar(CEntity *)
0x600C94 0x53BF70 CAutomobile::SetUpWheelColModel(CColModel *)
0x600C98 0x53C0E0 CAutomobile::BurstTyre(uchar)
0x600C9C 0x53C5B0 CAutomobile::IsRoomForPedToLeaveCar(uint,CVector *)
0x600CA0 0x437690 CAutomobile::GetHeightAboveRoad(void)
0x600CA4 0x53C450 CAutomobile::PlayCarHorn(void)

CVector

0x0000 | float x
0x0004 | float y
0x0008 | float z

CScrollBar

Начало 0x62F240
Кол-во 11
Размер 0x60
0x0000 | DWORD   counter
0x0004 | char    *text               // Указатель на текущую строку
0x0008 | CVector pos                 // Координаты левого нижнего угла
0x0014 | DWORD   textCurrPos
0x0018 | DWORD   textStartPos
0x001С | float   scaleX              // Масштабирование/разворот в 2D-системе координат
0x0020 | float   scaleY              // Масштабирование/разворот в 2D-системе координат
0x0024 | float   height              // Высота
0x0028 | float   intensity           // Интенсивность, зависит от расположения камеры и влияет на значения RGB
0x002C | BYTE    renderCharsSets[40]
0x0054 | BYTE    textType            // Тип определяет комбинацию текстов, которая будет показана на бегущей строке
0x0055 | BYTE    isUpdated
0x0056 | BYTE    red
0x0057 | BYTE    green
0x0058 | BYTE    blue
0x0059 | BYTE    _pad[3]
0x005C | float   depth               // Толщина букв

CAntenna

Начало 0x664680
Кол-во 8
Размер 0x9C
0x0000 | BYTE    isExist
0x0001 | BYTE    isUpdated
0x0002 | BYTE    _pad[2]
0x0004 | DWORD   id
0x0008 | float   length     // Длина, для RcBandit равна 1.0
0x000С | CVector pointsA[6]
0x0054 | CVector pointsB[6]

CPointlight

Начало 0x7096D0
Кол-во 32
Размер 0x2C
0x0000 | CVector pos                  // Позиция
0x000C | CVector direction            // Направление
0x0018 | float   radius               // Радиус
0x001C | float   red                  // 0.0 - 1.0
0x0020 | float   green                // 0.0 - 1.0
0x0024 | float   blue                 // 0.0 - 1.0
0x0028 | BYTE    type                 // Тип источника света
0x0029 | BYTE    fogType              // Эффект с использованием текстуры pointlight
0x002A | BYTE    generateExtraShadows // Включить создание дополнительных теней для автомобиля игрока
0x002B | BYTE    _pad

CBulletTrace

Начало 0x72B1B8
Кол-во 16
Размер 0x1C
0x0000 | CVector origin
0x000C | CVector target
0x0018 | BYTE    isExist
0x0019 | BYTE    timeCounter
0x001A | BYTE    intensity
0x001B | BYTE    _pad

CBrightLight

Начало 0x733A68
Кол-во 32
Размер 0x38
0x0000 | CVector corner[4]
0x0030 | float   cameraDistance
0x0034 | RwRGBA  color

CRegisteredShadow

Начало 0x779058
Кол-во 48
Размер 0x30
0x0000 | CVector   position
0x000C | float     rotationX1  // Эти параметры определяют разворот и размер
0x0010 | float     rotationY1
0x0014 | float     rotationX2
0x0018 | float     rotationY2
0x001C | float     zDistance   // Максимальное расстояние между позицией тени и поверхностью, на которую падает тень
0x0020 | float     scale       // Масштабирование относительно одного из углов
0x0024 | WORD      intensity
0x0026 | BYTE      type
0x0027 | BYTE      red
0x0028 | BYTE      green
0x0029 | BYTE      blue
0x002A | WORD      flags
0x002C | RwTexture *texture

Типы теней (type)

ID Описание           Source-Blend Dest-Blend
0                     5            6
1  Тень (чёрный цвет) 2            2
2  Свет (цвет RGB)    1            4

CShinyText

Начало 0x87B2D8
Кол-во 32
Размер 0x58
0x0000 | CVector     corner[4]
0x0030 | RwTexCoords cornerTexCoords[4]
0x0050 | float       distanceToCamera
0x0006 | RwRGBA      color

CRegisteredMotionBlurStreak

Начало 0x880A00
Кол-во 4
Размер 0x54
0x0000 | DWORD   id
0x0004 | BYTE    red
0x0005 | BYTE    green
0x0006 | BYTE    blue
0x0007 | BYTE    _pad1
0x0008 | CVector partPointsA[3]
0x002C | CVector partPointsB[3]
0x0050 | BYTE    isPartNeedsToBeRendered[3]
0x0053 | BYTE    _pad2

Радар

Функции

0x4A3EF0 CRadar::Initialise(void)                                                       
0x4A3F60 CRadar::Shutdown(void)                                                         
0x4A4030 CRadar::LoadTextures(void)                                                     
0x4A4180 CRadar::GetNewUniqueBlipIndex(int)                                             
0x4A41C0 CRadar::GetActualBlipArrayIndex(int)                                           
0x4A4200 CRadar::DrawMap(void)                                                          
0x4A42F0 CRadar::DrawBlips(void)                                                        
0x4A4C70 CRadar::Draw3dMarkers(void)                                                    
0x4A4F30 CRadar::LimitRadarPoint(CVector2D &)                                           
0x4A4F90 CRadar::CalculateBlipAlpha(float)                                              
0x4A5040 CRadar::TransformRadarPointToScreenSpace(CVector2D &,CVector2D const&)         
0x4A50D0 CRadar::TransformRealWorldPointToRadarSpace(CVector2D &,CVector2D const&)      
0x4A5300 CRadar::TransformRadarPointToRealWorldSpace(CVector2D &,CVector2D const&)      
0x4A5530 CRadar::TransformRealWorldToTexCoordSpace(CVector2D &,CVector2D const&,int,int)
0x4A5590 CRadar::SetCoordBlip((eBlipType,CVector,int,eBlipDisplay))                     
0x4A5640 CRadar::SetEntityBlip((eBlipType,int,int,eBlipDisplay))                        
0x4A56C0 CRadar::ClearBlipForEntity((eBlipType,int))                                    
0x4A5720 CRadar::ClearBlip((int))                                                       
0x4A5770 CRadar::ChangeBlipColour((int,int))                                            
0x4A57A0 CRadar::ChangeBlipBrightness((int,int))                                        
0x4A57E0 CRadar::ChangeBlipScale((int,int))                                             
0x4A5810 CRadar::ChangeBlipDisplay((int,eBlipDisplay))                                  
0x4A5840 CRadar::SetBlipSprite((int,int))                                               
0x4A5870 CRadar::ShowRadarTrace(float,float,uint,uchar,uchar,uchar,uchar)               
0x4A59C0 CRadar::ShowRadarMarker(CVector,uint,float)                                    
0x4A5BB0 CRadar::GetRadarTraceColour(uint,uchar)                                        
0x4A5C60 CRadar::SetRadarMarkerState(int,uchar)                                         
0x4A5D10 CRadar::DrawRotatingRadarSprite(CSprite2d *,float,float,float,uchar)           
0x4A5EF0 CRadar::DrawRadarSprite(ushort,float,float,uchar)                              
0x4A6020 ClipRadarTileCoords(int &,int &)                                               
0x4A6060 RequestMapSection(int,int)                                                     
0x4A60A0 RemoveMapSection(int,int)                                                      
0x4A60E0 CRadar::RemoveRadarSections(void)                                              
0x4A6100 CRadar::StreamRadarSections(int,int)                                           
0x4A6160 IsPointInsideRadar(CVector2D  const&)                                          
0x4A61C0 GetTextureCorners(int,int,CVector2D *)                                         
0x4A6250 LineRadarBoxCollision(CVector2D &,CVector2D const&,CVector2D const&)           
0x4A64A0 CRadar::ClipRadarPoly(CVector2D *,CVector2D const*)                            
0x4A67E0 CRadar::DrawRadarSection(int,int)                                              
0x4A69C0 CRadar::DrawRadarMask(void)                                                    
0x4A6B60 CRadar::StreamRadarSections(CVector  const&)                                   
0x4A6C20 CRadar::DrawRadarMap(void)                                                     
0x4A6E30 CRadar::SaveAllRadarBlips(uchar *,uint *)                                      
0x4A6F30 CRadar::LoadAllRadarBlips(uchar *)                                             
0x4A7000 `global constructor keyed to'Radar.cpp                                         

Переменные

0x5F6EF8 char *gRadarTexNames[64]
0x6299B8 CVector2D vec2DRadarOrigin
0x6299C0 DWORD gRadarTxdIds[100]
0x6ED5E0 CRadarBlip CRadar::ms_RadarTrace[32]
0x885B24 CSprite2d CRadar::CatSprite
0x885B58 CSprite2d CRadar::TonySprite
0x8E2A7C CSprite2d CRadar::RaySprite
0x8F1A2C CSprite2d CRadar::CopcarSprite
0x8F1A3C CSprite2d CRadar::LuigiSprite
0x8F1A40 CSprite2d CRadar::AsukaSprite
0x8F1B80 CSprite2d CRadar::ElSprite
0x8F29EC CSprite2d CRadar::SalSprite
0x8F2BCC CSprite2d CRadar::EightSprite
0x8F2BE0 CSprite2d CRadar::DonSprite
0x8F2C00 CSprite2d CRadar::JoeySprite
0x8F2C68 CSprite2d CRadar::KenjiSprite
0x8F5830 CSprite2d CRadar::LizSprite
0x8F5F74 CSprite2d CRadar::SaveSprite
0x8F5FB4 CSprite2d CRadar::BombSprite
0x8F6268 CSprite2d CRadar::CentreSprite
0x8F6274 CSprite2d CRadar::NorthSprite
0x941534 CSprite2d CRadar::WeaponSprite
0x9415FC CSprite2d CRadar::IceSprite
0x94307C CSprite2d CRadar::SpraySprite

Константы

0x5F714C float 94.0 - Ширина радара
0x5F7154 float 40.0 - Смещение радара по X-оси
0x5F715C float 76.0 - Высота радара
0x5F7160 float 123.0 - Смещение радара по Y-оси

Структуры

Название Метка радара
Начало 0x6ED5E0
Кол-во 32
Размер 0x30
0x0000 | DWORD     m_dwBlipColour
0x0004 | DWORD     m_dwBlipType
0x0008 | DWORD     m_dwEntityHandle
0x000C | CVector2D m_v2dPosn
0x0014 | CVector   m_v3dPosn
0x0020 | WORD      m_wIndex
0x0022 | BYTE      m_bBlipBrightness
0x0023 | BYTE      m_bActive
0x0024 | float     m_f3dMarkerAnimState
0x0028 | WORD      m_wBlipScale
0x002A | WORD      m_wBlipDisplay
0x002C | WORD      m_wBlipSprite

Классы моделей

CBaseModelInfo                    // Отдельно не существует
 |
 |
 +---CSimpleModelInfo             // Обьект карты? 5000 обьектов
 |      |
 |      |
 |      +---CTimeModelInfo        // Ночной обьект? 30 обьектов
 |
 |
 +---CClumpModelInfo              // Обьект с иерархией - сцществует отдельно, 5 обьектов (головы в катсценах)
        |
        |
        +---CVehicleModelInfo     // Транспорт, 120 обьектов
        |
        |
        +---CPedModelInfo         // Педы, 90 обьектов
        |
        |
        +---CMloModelInfo         // 1 обьект, создается секцией sta
        |
        |
        +---CXtraCompsModelInfo   // Части педа? 2 обьекта

CBaseModelInfo

struct CBaseModelInfo
{
    void      *__vmt;
    char       m_cName[24];
    CColModel *m_pColModel;
    C2dEffect *m_p2dEffect;
    WORD       m_wObjectDataId;
    WORD       m_wRefCount;
    WORD       m_wTxdId;
    BYTE       m_bType;
    BYTE       m_bNum2dEffects;
    BYTE       __field_2C;
    BYTE       __padding0[3];
};

CSimpleModelInfo

struct CSimpleModelInfo : public CBaseModelInfo
{
    RpAtomic *m_pAtomic[3];
    float     m_fLodDistance[3];
    BYTE      m_bNumAtomics;
    BYTE      m_bAlpha;
    WORD      m_wLodFlags;
};

CTimeModelInfo

struct CTimeModelInfo : public CSimpleModelInfo
{
    DWORD m_dwTimeOn;
    DWORD m_dwTimeOff;
    DWORD m_dwOtherTimeModelId;
};

CClumpModelInfo

struct CClumpModelInfo : public CBaseModelInfo
{
    RpClump *m_pClump;
};

CVehicleModelInfo

struct CVehicleModelInfo : public CClumpModelInfo
{
    BYTE        m_bLastCarColorId[2];
    char        m_cGameName[32];
    BYTE        __padding0[2];
    DWORD       m_dwVehicleType;
    DWORD       m_dwWheelModelIndex;
    float       m_fWheelScale;
    DWORD       m_dwNumDoors;
    DWORD       m_dwHandlingId;
    DWORD       m_dwClass;
    DWORD       m_dwLvl;
    CVector     m_vDummyPos[10];
    DWORD       m_dwComprules;
    float       m_fBikeSteerAngle;
    RpMaterial *m_pMaterialPrimary[26];
    RpMaterial *m_pMaterialSecondary[26];
    BYTE        m_bPrimaryColorId[8];
    BYTE        m_bSecondaryColorId[8];
    BYTE        m_bNumColorVariations;
    BYTE        m_bLastColorVariation;
    BYTE        m_bCurrentColorId[2];
    RwTexture  *m_pEnvironmentTex;
    RpAtomic   *m_pExtra[6];
    DWORD       m_dwNumExtras;
};

CPedModelInfo

struct CPedModelInfo
{
    DWORD      m_dwAnimGroupId;
    DWORD      m_dwPedtype;
    DWORD      m_dwStatPedtype;
    DWORD      m_dwCarsCanDriveMask;
    CColModel *m_pHitColModel;
};

CMloModelInfo

struct CMloModelInfo : public CClumpModelInfo
{
    DWORD __field_34;
    DWORD __field_38;
    DWORD __field_3C;
};

CXtraCompsModelInfo

struct CXtraCompsModelInfo : public CClumpModelInfo
{
    DWORD __field_34;
};

Классы коллизии

CColModel

В оригинальных исходниках R*, класс CColModel выглядел примерно так:

class CColModel
{
public:
    CColSphere m_BoundSphere;
    CColBox m_BoundBox;
    unsigned short m_wNumOfSpheres;
    unsigned short m_wNumOfLines;
    unsigned short m_wNumOfBoxes;
    unsigned short m_wNumOfTriangles;
    eLevelName m_ColLevel;
    unsigned char m_nFlags;
    CColSphere *m_pSpheres;
    CColLine *m_pLines;
    CColBox *m_pBoxes;
    CompressedVector *m_pVertices;
    CColTriangle *m_pTriangles;
    CColTrianglePlane *m_pTrianglePlanes;
 
    CColModel();
    ~CColModel();
 
    void operator=(CColModel const &right);
 
    void GetTrianglePoint(CVector &out, int vertex);
    void CalculateTrianglePlanes();
    void RemoveTrianglePlanes();
    void SetLinkPtr(CLink<CColModel *> *link);
    CLink<CColModel *> *GetLinkPtr();
    void RemoveCollisionVolumes();
};
п · о · р
GTA III Grand Theft Auto III
Форматы файлов.b.a3d.anm.col.cfg.dff.dat.gxt.ide.ifp.img/.dir.ipl.raw/.sdt.rep.sc.scm.set.txd.zon
Документацияcarcols.datCHASE.DATCULLZONE.DATcuts.imgdefault.datfistfite.datflight.datgta3.exegta3.dat
gta3.imggta3.zonhandling.cfgmain.scmmap.datmap.zonobject.datparticle.cfgped.datpedgrp.dat
pedstats.datsfx.rawsurface.datTimeCyc.DATtracks.dattrain.datwater.datwaterpro.datweapon.dat
ИнструментыCLEOClump ViewerCol-IO‎Collision File Editor IIData toolDFF Viewerdffxbox2pcG-ToolsGTA Garage Mod Manager
GXT EditorGTA3 Limit AdjusterGTA3 Mission BuilderGTA3 PatcherIMG ToolKam's Max ScriptsMap Editor
Mod GeneratorMod InstallerMoo MapperPS2 TXD ModPS2 TXD ViewerResourse HackerRotation Calculator
RW AnalyzeViceTXDWater EditorSanny BuilderTXD ToolTXD WorkshopYAIEZModeler
Туториалыраздел в разработке
Классические МодыGPS RadarBye-Bye BikiniUltimate Stunt ParkThe SphereMiss LibertyIllandoIntercity HighwayShoreside Bridge
Rockstar HeightsLighthouse BridgeBlade FunparkOrbital CityLakeside IslandLiberty PenitentiaryJEM Island
Illando HelixCliff Climbing Mountain
Глобальные МодыReal GTA3Twenty TenSnow CityFrosted WinterUltimateBeta modX-box modBad BusinessGTA3 HDUltra mod
OpenTunnelsBack to the Future
МультиплеерMulti Theft AutoLiberty Unleashed
Исходники4x48ballambulanceasukaasusbcameracar_gencatcopcardebugdemodiablofiretruckfrankgates
genstufhealthhjhoodimportintrojoeykenjiloveluigimayhemmeatpickupsrampagerayrcswitch
taxitoniusjwantedyard