Автор Тема: Выкладываем наработки по анализу кода, дизассемблированные базы, адреса  (Прочитано 6195 раз)

Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 509
  • Репутация: +14/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Если бы посмотрел в sdk, то увидел бы сразу функция возвращает что-то и что именно или не возвращает.
Не думаю, что я что-то увидел бы в sdk, если я не увидел это в idb базе, хотя там всё было под носом и очевидно. Просто на момент, когда я нашел эту функцию, мне не нужно было знать struct колеса, поэтому я не обратил на это внимания, а потом(когда потребовалось) - обратил. Ставить Visual Studio 2017, чтобы поставить sdk, чтобы проделывать те же операции уже в нем - пока смысла не вижу  :-\

Оффлайн kenking

  • Новичек
  • **
  • Сообщений: 143
  • Репутация: +5/-0
    • Просмотр профиля
Ставить Visual Studio 2017, чтобы поставить sdk, чтобы проделывать те же операции уже в нем - пока смысла не вижу  :-\
Если просто посмотреть какой-либо класс в sdk, то ставить VS не обязательно. Можно посмотреть на github. Например, класс CAutomobile про функцию которого шла речь https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_vc/game_vc/CAutomobile.h

А так, конечно, хозяин - барин. Смотри где тебе удобно.  :)

Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 509
  • Репутация: +14/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Например, класс CAutomobile про функцию которого шла речь https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_vc/game_vc/CAutomobile.h
И как мне поможет это, если там описаний функций нет?  :D
Названия есть и в idb базе.
Только в базе можно посмотреть, как функция работает, и понять, например, как сделать это:
Коллизия колеса восстанавливается
...
Только само колесо при этом не появляется.

Единственный плюс использования sdk для меня - это разобранные параметры, типа eCarNodes, а всё остальное всё равно придется
копошить
;D
« Последнее редактирование: Июнь 08, 2017, 05:46:54 pm от Shagg_E »

Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 509
  • Репутация: +14/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Не буду говорить, зачем я это ворошил, но вот отключение всех драк в игре(кроме удара кулаком на бегу):
Код: Text
  1. 0A8C: write_memory 0x52AD7D size 742 value 0x90 virtual_protect 1

Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 509
  • Репутация: +14/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Короче, искал способ проиграть любой звук sfx, разобрал этот опкод:
Код: Text
  1. 018C: play_sound 1 at 0.0 0.0 0.0

Не вдаваясь в подробности, скажу, что для звуков, у которых нет 3d позиционирования, можно применить эту функцию:
Код: C++
  1. 005F9960                         ; int __stdcall cDMAudio::PlayFrontEndSound(__int16, float)
Она проигрывает некоторые sfx звуки, которые не проигрывает опкод 018C(выше).
Использование:
Код: Text
  1. 0AA5: call 0x5F9960 num_params 2 pop 0 0.0 0@

, где 0.0 - неизвестный float параметр(изменения ни к чему не приводят, в опкоде стоит 0.0)
0@ - номер звука(нумерация странная):
59 - Щелчок "Нет боеприпасов" (щелчок снайперской винтовки)
60 - Щелчок "Нет боеприпасов" (щелчок гранатомета)
63-69, 71-73, 77-89, 100, 101, 159-162, 168, 169, 179 - "Action" звуки (например, пикапы)
167 - Звук "Таймер"
176, 177 - Тихие щелчки (выключение радио?)
178 - Порыв ветра
184 - Пуля пролетает справа
185 - Пуля пролетает слева
193 - Звук активации детонатора
194 - Звук смены радиостанции
195-198 - Звуки меню
199 - Шум
Другие значения ни к чему не приводят. В коде игры есть лимит 204, так что дальше проверять нет смысла. Пробовал расширить лимит до 65535 - всё равно после 199 ни одного звука не услышал(проверял до 1000).
« Последнее редактирование: Июль 07, 2017, 06:13:35 pm от Shagg_E »

Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 509
  • Репутация: +14/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Заставить актера говорить(не забывайте, что в игре есть дурацкий баг, из-за которого педы редко говорят, так что, чтобы нормально протестить нишенаписанное - поставьте патч, делающий педов и игрока более "разговорчивыми"):

Код: Text
  1. 0A96: 2@ = actor 0@ struct
  2. 2@ += 0x5DA
  3. 0A8C: write_memory 2@ size 2 value 1@ virtual_protect 1
, где 0@ - 2@ struct педа, 1@ - вид фразы:

(проверял только на полицейском!)
103 - крик смерти
107 - крик утопления
108 - продолжительный крик ужаса
110 - фраза угрозы кому-либо(иногда нужно толкнуть педа для фразы)
113 - фразы драки(иногда нужно толкнуть педа для фразы)
120 - панический крик
125 - фразы после боя/драки
129 - фразы напарникам("Попал!", "Он мой!", "Я взял его!", "Я вижу его!" и в таком духе)
130 - фразы противнику("Ты окружен!")
131 - фразы напарникам("Я тебя прикрою!")
132 - фразы противнику("Стоять!")
133 - фразы напарникам("Прикройте")
134 - фразы прохожим
135 - фразы напарникам
138 - фразы начала боя/драки
139 - стихие крики потери сознания/смерти
142 - раздраженные фразы("Не беси меня!", "Отвали!" и т.п.)

Именно благодаря этому оффсету в сцене "360" из папки примеров мода CarRec орет полицейский(сам CarRec со всеми примерами тут)
« Последнее редактирование: Июль 08, 2017, 01:10:10 am от Shagg_E »

Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 509
  • Репутация: +14/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Код ниже проверялся только на педах и катсценовых актерах. На авто отображает неправильные значения.
Нужно доработать...

VVVVVVVVVVVVVVVVVVV

Дополняю сообщения xanser-а и DK:
Есть тип 8: катсценовые актеры.

Итого - имеем следующий CLEO-код по выявлению типа Entity:

Код: Text
  1. записываем в 0@ указатель на структуру Entity(объекта, транспорта или педа), затем:
  2. 000A: 0@ += 0x5C // model index offset
  3. 0A8D: 0@ = read_memory 0@ size 2 virtual_protect 1
  4. 0A8D: 1@ = read_memory 0x92D4C8 size 4 virtual_protect 1 // CBaseModelInfo array
  5. 0012: 0@ *= 0x2C // model offset
  6. 005A: 1@ += 0@ // go to model offset
  7. 000A: 1@ += 0x19 // m_ModelType offset
  8. 0A8D: 1@ = read_memory 1@ size 1 virtual_protect 1
, где 1@:
1 - objs
3 - tobj
4 - weap (weapons, 258-294)
5 - hier (cutscene objects, id 295-299)
6 - cars (id 130-236)
7 - peds (peds and IG actors, id 0-129)
8 - peds (CS actors, id 109-129)
« Последнее редактирование: Июль 23, 2017, 12:03:55 am от Shagg_E »

Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 509
  • Репутация: +14/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Горящий огонь(пожар в смысле):

0x97F8A0 - количество горящих огней
0x97F8A4 - начало массива огней (максимум - 40 элементов)
каждый огонь состоит из 48 байт. координаты по оффсетам

0x00 [byte] - тип1 огня(0 - потух, 1 - горит)
0x01 [byte] - тип2 огня(0 - самопотухаемый, 1 - вечный)
0x02 [byte] - тип3 огня(0 - обычный, 1 - пед, авто)
0x03 [byte] - тип4 огня (0 - беззвучный, 1 - со звуком)
0x04 [float] - x coord
0x08 [float] - y coord
0x0C [float] - z coord
0x10 [pointer] - указатель на горящий entity
0x14 [pointer] - указатель на "виновника"(если он есть) огня(только для горящих entity)
0x18 [integer] - время затухания(в мировом таймере)
0x1C [integer] - время следующего чего-то?
0x20 [integer] - время следующего отображения партикла огня
0x24 [float] - размер огня
0x28 [float] - всегда 1.0
0x2C [integer] - неизвестно, всегда 0


когда машина горит "своим огнем", т.е. "готовится ко взрыву" - этот огонь не "настоящий" и в пуле отсутствует
« Последнее редактирование: Июнь 14, 2018, 12:10:47 am от Shagg_E »

Оффлайн DK

  • Новичек
  • **
  • Сообщений: 221
  • Репутация: +312/-0
    • dk22pac
    • Просмотр профиля
Plugin-SDK https://github.com/DK22Pac/plugin-sdk

Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 509
  • Репутация: +14/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Shagg_E, структура, скорее всего, идентична той, что в GTA3.
https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_III/game_III/CFire.h
Да, скорее всего. Я доковырял - вроде совпадает

Оффлайн DK

  • Новичек
  • **
  • Сообщений: 221
  • Репутация: +312/-0
    • dk22pac
    • Просмотр профиля
Вот что у меня получилось
Код: C++
  1. /* 0x00 */ bool     m_bActive            // существует (т.е. слот занят)
  2. /* 0x01 */ bool     m_bScriptFire        // ручное удаление ("заскриптованный" огонь)
  3. /* 0x02 */ bool     field_2              // возможно не используется, 0 - для огня после взрыва, 1 для всего остального
  4. /* 0x03 */ bool     m_bMakesNoise        // есть звук
  5. /* 0x04 */ CVector  m_vecPosition        // позиция
  6. /* 0x10 */ CEntity *m_pEntityTarget      // жертва
  7. /* 0x14 */ CEntity *m_pEntityCreator     // создатель
  8. /* 0x18 */ int      m_nEndLifeTime       // время затухания
  9. /* 0x1C */ int      field_1C             // какой-то таймер, возможно не используется, обнуляется каждые 400мс
  10. /* 0x20 */ int      m_nParticlesTimer    // таймер для создания партиклов
  11. /* 0x24 */ float    m_fSize              // размер
  12. /* 0x28 */ float    m_fStrength          // интенсивность (повышается при появлении огня и уменьшается при затухании)
  13. /* 0x2C */ bool     m_bBeingExtinguished // флаг "тушения" (водой) - используется, чтобы начать проигрывать какой-то звук, после выключается
  14. /* 0x2D */ char     _pad2D[3]
Plugin-SDK https://github.com/DK22Pac/plugin-sdk

Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 509
  • Репутация: +14/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
0x02 можно назвать m_bTargetExists

а 0x2D  _pad2D[3] - это просто пустышка, получается?


UPD: черт.. Оказывается, в марте для вайса уже всё разобрали. Я с лета не обновлял sdk ;D

UPD2: Вау, теперь есть удобный установщик sdk!
« Последнее редактирование: Май 22, 2018, 12:22:30 pm от Shagg_E »

Оффлайн DK

  • Новичек
  • **
  • Сообщений: 221
  • Репутация: +312/-0
    • dk22pac
    • Просмотр профиля
Shagg_E, странно, я сам в упор не видел, что CFire уже есть в sdk для VC.
Ну зато теперь по огням всё разобрано и перепроверено до мелочей.
Plugin-SDK https://github.com/DK22Pac/plugin-sdk

Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 509
  • Репутация: +14/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
CPointLights:

0x9751B0 - количество PointLights
0x7E4FE0 - начало массива PointLights (максимум - 32 элемента)
каждый PointLight состоит из 44(0x2С) байт.

Структура совпадает с GTA3, я просто добавлю пояснения.

0x00 [float] - x coord
0x04 [float] - y coord
0x08 [float] - z coord
0x0С [float] - x direction
0x10 [float] - y direction
0x14 [float] - z direction
0x18 [float] - дальность света
0x1С [float] - red(0.0-1.0)
0x20 [float] - green(0.0-1.0)
0x24 [float] - blue(0.0-1.0)
0x28 [byte] - тип света(0 - светит во все стороны из центра, 1 - directional(фары), светят строго по вектору, 2 - не используется(вроде), становятся слабее, если источников этого типа много, 3-4 - хз, не освещают динамику, скорее всего нужны для источников, которые кроме 2dfx никак не проявляют себя)
0x29 [byte] - тип "дымки" вокруг света(0 - нет "дымки", 1 и 2 - есть)
0x2A [bool] - генерация дополнительной тени авто игрока вблизи источника света(0 - нет, 1 - да), работает только для типа света 0, при параметре LightShd в timecyc.dat больше 0
0x2B [byte] - не используется(пустышка)

Продолжаю разбор каждого элемента, пост будет обновляться.
« Последнее редактирование: Июнь 20, 2018, 04:48:09 pm от Shagg_E »

Оффлайн ilufir

  • Прохожий
  • *
  • Сообщений: 69
  • Репутация: +1/-0
  • Я пытался
    • Просмотр профиля
CPointLights:

0x9751B0 - количество PointLights
0x7E4FE0 - начало пула PointLights (максимум - 32 элемента)
каждый PointLight состоит из 44(0x2С) байт.

Структура совпадает с GTA3, я просто добавлю пояснения.

0x00 [float] - x coord
0x04 [float] - y coord
0x08 [float] - z coord
0x0С [float] - x direction
0x10 [float] - y direction
0x14 [float] - z direction
0x18 [float] - дальность света
0x1С [float] - red(0.0-1.0)
0x20 [float] - green(0.0-1.0)
0x24 [float] - blue(0.0-1.0)
0x28 [byte] - тип света(0 - светит во все стороны из центра, 1 - фары, светят строго по вектору, 3-4 - хз, не освещают динамику, скорее всего нужны для источников, которые кроме 2dfx никак не проявляют себя)
0x29 [byte] - тип "дымки" вокруг света(0 - нет "дымки", 1 и 2 - есть)
0x2A [bool] - генерация дополнительной тени авто игрока вблизи тени(0 - нет, 1 - да)
0x2B [byte] - не используется(пустышка)

Продолжаю разбор каждого элемента, пост будет обновляться.


Где то еще должен быть пункт который добавляет к источнику lens-flare