[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 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 |
|
| |