Суббота, 20.04.2024, 06:17
Качественные скрипты, моды и дополнения для GTA без регистрации
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • »
Форум » Игры серии ГТА » Справочная информация » [DOC] Документация по адресам gta_sa.exe 1.0US
[DOC] Документация по адресам gta_sa.exe 1.0US
DK22PacДата: Воскресенье, 01.05.2011, 19:11 | Сообщение # 1
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Думаю, такая тема не помешает.
Я сегодня случайно нашёл в googlesource исходники МТА, так вот там, как мне кажется, описаны все функции оО (даже в ИДА описаны далеко не все). Насколько позволили мне знания С++, я понял, что сами функции описаны в файлах .h, а в главном файле происходит их вызов.
Сегодня разобрал CRadioTrackManager, и сделал некое подобие всего, что там было, в СБ. Можно и просто вызывать метод, но так, мне кажется, круче) Как будто новый опкод появился (так кажется, по крайней мере...)
Code
0AB1: @GET_CURRENT_RADIOSTATION_ID 0 ( 0@ )
0AB1: @IS_VEHICLE_RADIO_ACTIVE 0 ( 0@ )
0AB1: @GET_RADIO_STATION_NAME_BY_ID 1 ( 6 ; 0@ ) ; radioID ; returns a pointer (char*)
0AB1: @IS_RADIO_ON 0 ( 0@ ) // 0 - off; 1 - on; -255 - listing
0AB1: @SET_RADIO_BASS_SETTINGS 2 ( 1.0 ; 1.0 ) // unk_float; bass_dword
0AB1: @RESET_RADIO 0
0AB1: @START_RADIO 4 ( 0 ; 0 ; 1 ; 6 ) // unk_byte ; unk_byte ; unk_byte ; unk_byte

Code
//RadioTrackManager.txt//

goto @__END_RADIOTRACKMANAGER

:GET_CURRENT_RADIOSTATION_ID
0AA8: call_function_method 0x4E83F0 struct 0x8CB6F8 num_params 0 pop 0 0@
0AB2: ret 1 0@

:IS_VEHICLE_RADIO_ACTIVE
0AA8: call_function_method 0x4E9800 struct 0x8CB6F8 num_params 0 pop 0 0@
if
       0@ > 0
then
       0@ = 1
end
0AB2: ret 1 0@

:GET_RADIO_STATION_NAME_BY_ID
0AA8: call_function_method 0x4E9E10 struct 0x8CB6F8 num_params 1 pop 0 0@ 1@
0AB2: ret 1 1@

:IS_RADIO_ON
0AA8: call_function_method 0x4E8350 struct 0x8CB6F8 num_params 0 pop 0 0@
0AB2: ret 1 0@

:SET_RADIO_BASS_SETTINGS
0AA6: call_method 0x4E82F0 struct 0x8CB6F8 num_params 2 pop 0 0@ 1@
0AB2: ret 0

:RESET_RADIO
0AA6: call_method 0x4E7F80 struct 0x8CB6F8 num_params 0 pop 0
0AB2: ret 0

:START_RADIO
0AA6: call_method 0x4EB3C0 struct 0x8CB6F8 num_params 4 pop 0 0@ 1@ 2@ 3@
0AB2: ret 0

:__END_RADIOTRACKMANAGER

Сейчас разбираю CAutomobile, там тоже много интересного)

UPD
Вообще, хотелось бы побольше всякого добра добавить в СБ, константы например... Жаль, круг действий не широк особо, хорошо было бы научится писать плагины, добавляющие новые опкоды..


Сообщение отредактировал DK22Pac - Воскресенье, 01.05.2011, 19:13
 
Den_spbДата: Понедельник, 02.05.2011, 01:55 | Сообщение # 2
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (DK22Pac)
Думаю, такая тема не помешает.
Наверно стоило бы продублировать сообщение на SB, т.к. там больше людей, интересующихся устройством GTA.

Quote (DK22Pac)
Можно и просто вызывать метод, но так, мне кажется, круче) Как будто новый опкод появился (так кажется, по крайней мере...)
Повторюсь, что scm-функции отличаются повышенным потреблением ресурсов, так что на мой взгляд следует по возможности снижать частоту их применения. Самый простой вариант, хотя и не очень красивый - соответствующим образом прокомментировать параметры функции в опкоде вызова:
Code
0AA5: 0x6FC580 21 21 1 0 0x41700000 0 0x3FC00000 0 0 0 0 0 attach_corona_flare 0 type 0 0x43160000 radius 0.3 with_offsets RwV3D intensity 255 blue 0 green 128 red 255 to_vehicle_struct 20@ unical_number 26@

Quote (DK22Pac)
Вообще, хотелось бы побольше всякого добра добавить в СБ, константы например...
Seemann, похоже, Санни Билдером больше не занимается.

Quote (DK22Pac)
хорошо было бы научится писать плагины, добавляющие новые опкоды..
Надо смотреть исходники этих плагинов.
 
DK22PacДата: Среда, 17.08.2011, 01:25 | Сообщение # 3
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Code
0x507430 CAudio_PauseAllSounds

Пока что не тестил.
Если что,
Code
CAudio = 0xB6BC90

Code
0x506F70 CAudio_StopRadio

Написал небольшой пример - отключение игрового радио.
http://pastebin.com/iMU9ndMT
http://www.mediafire.com/?azk92z4tluriocb
sub_6AF110 --> void CAutomobile_BlowUpCarsInPath (void)
Подрывание всех авто, которые находятся на пути с автомобилем?
В игре не работает (0 эффекта)
0x5332C0 --> void CEntity_SetRwObjectAlpha (int)
Устанавливает уровень прозрачности.

Добавлено (07.08.2011, 02:07)
---------------------------------------------
Опять же, из исходников МТА:
sub_51D470 --> CCam_ProcessFixed
sub_53DF40 --> Render3DStuff
sub_727140 --> CRenderer_Render
sub_6B7280 --> CBike_ProcessDrivingAnims
sub_5DBAE0 --> RenderScene_Plants
sub_5E3B60 --> CPed_GetWeaponSkill

Вероятно,
CPed+0x72C --> byte Weapon Skill
PS Очень интересная функция, кстати, очень интересный алгоритм там)

sub_5853D0 --> _DrawAreaOnRadar


Сообщение отредактировал DK22Pac - Среда, 17.08.2011, 01:25
 
Den_spbДата: Среда, 17.08.2011, 02:11 | Сообщение # 4
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (DK22Pac)
исходники МТА
Так а что представляют из себя эти исходники? В какой программе их можно посмотреть?
 
DK22PacДата: Понедельник, 05.09.2011, 10:03 | Сообщение # 5
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Не так давно (относительно) Google открыла новый проект - Google Source. Там можно встретить исходники многих проектов. Для просмотра нужен только браузер)
http://code.google.com/p/mtasa-blue/source/browse/

Добавлено (22.08.2011, 01:38)
---------------------------------------------
Цвет бекграунда меню.

Code
{$CLEO}

0AC6: 31@ = label @__asm offset
30@ = label @__jmp offset
0AB1: call_scm_func @define_jump_to_asm_inj 4 asm_inj 31@ jump_from 0x57B991 then_jump 0x57B998 offset_jump_in_asm 30@
0A93:

:define_jump_to_asm_inj  
0A8C: write_memory 1@ size 1 value 0xE9 virtual_protect 1  
0085: 4@ = 1@  
4@ += 5  
0062: 0@ -= 4@  
1@ += 1  
0A8C: write_memory 1@ size 4 value 0@ virtual_protect 1  
0085: 4@ = 3@  
4@ += 5  
0062: 2@ -= 4@  
3@ += 1  
0A8C: write_memory 3@ size 4 value 2@ virtual_protect 1  
0AB2: ret 0

:__asm  
hex
     DB 44 24 18      // fild  [esp+44h+var_2C]
     68 00 00 00 00   // push  0     ; Blue
     68 00 00 00 00   // push  0     ; Green
     68 FF 00 00 00   // push  0xFF  ; Red
end  

:__jmp  
hex  
     E9 00 00 00 00 // jmp 0  
end

Добавлено (23.08.2011, 11:58)
---------------------------------------------
0x6E16A3 [dword] Указатель на мультипликатор размера тени хедлайта (дефолт - 4.0).
0x6E16B1 [dword] Указатель на величину расстояния тени хедлайта к фарам по оси Y (относительно транспорта).

Добавлено (05.09.2011, 10:03)
---------------------------------------------
Позже опишу процедуры CWeapon и CWorld.

 
444andrei444Дата: Воскресенье, 11.09.2011, 16:40 | Сообщение # 6
Группа: Проверенные
Сообщений: 15
Статус: Offline
В скрипте ”изменение цвета бэкграунда” можно обойтись без hex вставок? Хочу считывать значения ргб из внешнего файла.

Сообщение отредактировал 444andrei444 - Воскресенье, 11.09.2011, 20:54
 
Den_spbДата: Воскресенье, 11.09.2011, 19:31 | Сообщение # 7
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (444andrei444)
В скрипте ”изменение цвета бэкграунда” можно обойтись без hex вставок.
Это вопрос?
 
444andrei444Дата: Воскресенье, 11.09.2011, 20:55 | Сообщение # 8
Группа: Проверенные
Сообщений: 15
Статус: Offline
да. опять забыл вопрос поставить
 
Den_spbДата: Понедельник, 12.09.2011, 00:56 | Сообщение # 9
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (444andrei444)
В скрипте ”изменение цвета бэкграунда” можно обойтись без hex вставок? Хочу считывать значения ргб из внешнего файла.
Вставку убирать не нужно, т.к. её можно отредактировать в любой момент игры. Пример - установим синий цвет вместо красного:
Code
0AC6: 0@ = label @__asm offset // получили адрес буфера
0@ += 5
0A8C: write_memory 0@ size 1 value 0xFF virtual_protect 0 // пишем значение в пятый байт буфера (отсчёт ведётся от нуля)
0@ += 10
0A8C: write_memory 0@ size 1 value 0 virtual_protect 0 // пишем значение в 15-й байт буфера
 
444andrei444Дата: Понедельник, 12.09.2011, 19:40 | Сообщение # 10
Группа: Проверенные
Сообщений: 15
Статус: Offline
Ну все разобрался. Надеюсь DK22Pas не будет против использования этих адресов в своем моде. Если что я уберу из мода эту возможность
 
DK22PacДата: Воскресенье, 02.10.2011, 16:14 | Сообщение # 11
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
sub_6FB630 -> renderCoronas
sub_5674E0 -> processVerticalLine

Добавлено (02.10.2011, 14:59)
---------------------------------------------
sub_6FAEC0 -> renderCoronas
Я запутался...

Добавлено (02.10.2011, 15:56)
---------------------------------------------
CCoronas_
0x6FAEC0 _render
0x6FB630 _renderReflection
0x6FC180 _registerCoronaByTexture
0x6FC580 _registerCoronaByType
0x6FC5A0 _createSun
0x6FC7A0 _crete2dfxCoronas

Добавлено (02.10.2011, 16:14)
---------------------------------------------
В базе уже 25 процедур CWorld.

 
Den_spbДата: Воскресенье, 02.10.2011, 16:18 | Сообщение # 12
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (DK22Pac)
sub_6FB630 -> renderCoronas

А это тут зачем?
Code
.text:006FB630 000                 fld     _wetGripScale?  ; коэффициент, влияющий на сцепление колёс в мокрую погоду. (предположительно, меняется в зависимости от погоды)
Процедура занимается рисованием отражений корон на асфальте?
 
DK22PacДата: Воскресенье, 16.10.2011, 00:39 | Сообщение # 13
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Quote (Den_spb)
Процедура занимается рисованием отражений корон на асфальте?

Думаю, что да. К тому же, там присутсвует вызов процедуры processVerticalLine (она находит точку соприкосновения вертикальной линии с чем-либо, и возвращает указатель на CColPoint (точка коллизии)).

Добавлено (02.10.2011, 22:15)
---------------------------------------------
Вот так создаётся корона:
registerCoronaByType -> registerCoronaByTexture -----> renderCoronas -> sub_70D490 -> _im2DRenderPrimitive

Добавлено (05.10.2011, 23:35)
---------------------------------------------
sub_6FC4D0 --> CCoronas__updateCoronaCoors

Добавлено (15.10.2011, 02:07)
---------------------------------------------
sub_5E5ED0 --> CPed::makeWeaponEffects

Добавлено (16.10.2011, 00:39)
---------------------------------------------
Смотрел, как организован опкод 038D. Вот что нашёл:
sub_464980 --> renderTextSprites

Преобразование TextureID в адресс структуры RwTexture
0x464A76 movsx ecx, [esi+CTextSprite.textureID]
0x464A7A lea ecx, _textures[ecx*4]

0xA44B5C [word] - кол-во используемых текст-спрайтов.

 
Den_spbДата: Воскресенье, 16.10.2011, 00:47 | Сообщение # 14
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
А текст-спрайт это что такое?
 
DK22PacДата: Воскресенье, 16.10.2011, 00:55 | Сообщение # 15
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Текстуры, текст-боксы на экране.
Всего есть 5 видов текст-спрайтов, для каждого типа - свой метод отрисовки:
1) sub_578F50 -> __drawText
2) CMenu__DrawTextBoxWTitle
3) $drawRect
4) CTexture__drawTexturedRect // используется для 038D
5) sub_728520 -> _im2DRenderPrimitive // используется для 074B


Сообщение отредактировал DK22Pac - Воскресенье, 16.10.2011, 00:58
 
Форум » Игры серии ГТА » Справочная информация » [DOC] Документация по адресам gta_sa.exe 1.0US
  • Страница 1 из 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • »
Поиск: