Работа с компонентами моделей
|
|
DK22Pac | Дата: Воскресенье, 26.02.2012, 17:47 | Сообщение # 121 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Всё-таки открыл окна
|
|
| |
izerli | Дата: Воскресенье, 26.02.2012, 19:09 | Сообщение # 122 |
Группа: Проверенные
Сообщений: 90
Статус: Offline
| DK22Pac, интересно)
|
|
| |
Den_spb | Дата: Воскресенье, 26.02.2012, 19:26 | Сообщение # 123 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (DK22Pac) Всё-таки открыл окна Действует на всех машинах одной модели или на одной машине?
|
|
| |
DK22Pac | Дата: Воскресенье, 26.02.2012, 23:36 | Сообщение # 124 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Отдельно для каждой Добавлено (26.02.2012, 23:36) --------------------------------------------- Изменение яркости компонента
|
|
| |
Den_spb | Дата: Воскресенье, 26.02.2012, 23:53 | Сообщение # 125 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Изменение прелайта что ли?
|
|
| |
DK22Pac | Дата: Понедельник, 27.02.2012, 00:08 | Сообщение # 126 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Диффузия материала. Добавлено (27.02.2012, 00:08) --------------------------------------------- Не, ошибаюсь. Это параметр ambient.
|
|
| |
izerli | Дата: Понедельник, 27.02.2012, 14:28 | Сообщение # 127 |
Группа: Проверенные
Сообщений: 90
Статус: Offline
| DK22Pac, шикарно)
|
|
| |
kenking | Дата: Среда, 29.02.2012, 13:25 | Сообщение # 128 |
Группа: Проверенные
Сообщений: 22
Статус: Offline
| Масштабирование компонента Code ..... 0A97: 1@ = car 0@ struct 1@ += 0x670 // левая передняя дверь 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 if 1@ > 0 then 1@ += 64 0A8D: 2@ = read_memory 1@ size 4 virtual_protect 0 // сохраняем значения эл-тов +48, +52, +56 в памяти т.к. метод масштабирования матрицы их обнуляет 1@ += 4 0A8D: 3@ = read_memory 1@ size 4 virtual_protect 0 1@ += 4 0A8D: 4@ = read_memory 1@ size 4 virtual_protect 0 1@ -= 56 0AA6: call_method 0x59AED0 struct 1@ num_params 1 pop 0 0.5 // метод масштабирования матрицы 1@ += 48 0A8C: write_memory 1@ size 4 value 2@ virtual_protect 0 // восстанавливаем значение X-position 1@ += 4 0A8C: write_memory 1@ size 4 value 3@ virtual_protect 0 // восстанавливаем значение Y-position 1@ += 4 0A8C: write_memory 1@ size 4 value 4@ virtual_protect 0 // восстанавливаем значение Z-position end ....
Вращение компонента по одной из осей Code ..... 0A97: 1@ = car 0@ struct 1@ += 0x670 // левая передняя дверь 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 if 1@ > 0 then 1@ += 16 0AA6: call_method 0x59AFA0 struct 1@ num_params 1 pop 0 -1.0 // _sub_59AFA0 надо бы переименовать в CMatrix__rotateAroundX //0AA6: call_method 0x59AFE0 struct 1@ num_params 1 pop 0 -1.0 // _sub_59AFE0 надо бы переименовать в CMatrix__rotateAroundY //0AA6: call_method 0x59B020 struct 1@ num_params 1 pop 0 -1.0 // CMatrix__rotateAroundZ end ....
Перемещение компонента Code ..... 0A97: 1@ = car 0@ struct 1@ += 0x670 // левая передняя дверь 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 if 1@ > 0 then 1@ += 64 0A8D: 2@ = read_memory 1@ size 4 virtual_protect 0 2@ -= 1.0 // изменяем координату X 1@ += 4 0A8D: 3@ = read_memory 1@ size 4 virtual_protect 0 3@ -= 1.0 // изменяем координату Y 1@ += 4 0A8D: 4@ = read_memory 1@ size 4 virtual_protect 0 4@ += 1.0 // изменяем координату Z 1@ -= 56 0AA6: call_method 0x59AF80 struct 1@ num_params 3 pop 0 4@ 3@ 2@ // CMatrix__setPos (Z Y X) end ....
Удаление компонента Code ..... 0A97: 1@ = car 0@ struct 1@ += 0x670 // левая передняя дверь 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 if 1@ > 0 then 0AA5: call_function 0x7F05A0 num_params 1 pop 1 1@ // _rwFrameDestroy end ....
Удаление всех вложенных компонентов (child) Code ..... 0A97: 1@ = car 0@ struct 1@ += 0x64C // chassis 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 if 1@ > 0 then 0AA5: call_function 0x7F0CD0 num_params 1 pop 1 1@ // _RwFrameRemoveChild end ....
Получение корня иерархии (root) Code ..... 0A97: 1@ = car 0@ struct 1@ += 0x670 // левая передняя дверь 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 if 1@ > 0 then 0AA7: call_function 0x7F09B0 num_params 1 pop 1 1@ 2@ // _RwFrameGetRoot end ....
Сообщение отредактировал kenking - Пятница, 13.04.2012, 13:42 |
|
| |
Den_spb | Дата: Среда, 29.02.2012, 20:28 | Сообщение # 129 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Информация полезная, молодец.
|
|
| |
DK22Pac | Дата: Понедельник, 05.03.2012, 03:50 | Сообщение # 130 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Жаль, что в СА не предусмотрена езда авто с 4-ма, разными по размеру, колёсами Можно было бы сделать лопающиеся покрышки...
|
|
| |
Den_spb | Дата: Понедельник, 05.03.2012, 16:50 | Сообщение # 131 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Так в игре и так лопаются покрышки. А вообще можно поискать процедуру рендера колёс и сделать asm-inject, если есть желание.
|
|
| |
izerli | Дата: Понедельник, 05.03.2012, 19:07 | Сообщение # 132 |
Группа: Проверенные
Сообщений: 90
Статус: Offline
| DK22Pac, приведи, пожалуйста, пример, как изменять яркость компонента?
|
|
| |
DK22Pac | Дата: Вторник, 06.03.2012, 00:01 | Сообщение # 133 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Примера в scm у меня нету, я писал инжектор в процедуру, которая перебирает материалы модели. Вот часть кода ImVehLights, скрины здесь
Добавлено (05.03.2012, 22:05) --------------------------------------------- Это будет выглядеть примерно так: clump>atomic>geometry>material Но тут есть одна деталь. Перед изменением параметров материала, надо сделать "бэкап" этих параметров в отведенный для этого буфер. После рендера клампа, специальная процедура "восстанавливает" параметры из этого буфера. Code struct MaterialRestoreData{ long pMaterialField long oldData } a
Code 8B 19 // mov ebx, [ecx] 89 03 // mov [ebx], eax 83 C3 04 // add ebx, 4 8B 30 // mov esi, [eax] 89 33 // mov [ebx], esi 83 01 08 // add dword ptr [ecx], 8 >> Code a[currentIndex].pMaterialField = &material[matIndex].texture a[currentIndex].oldDaata = material[matIndex].texture currentIndex++ Как-то так, программер из меня фиговый Добавлено (06.03.2012, 00:01) ---------------------------------------------
Code 0x6A32B0 CAutomobile__deflateTire Дальше всё теряется, она вызывается через virtual table.
Сообщение отредактировал DK22Pac - Понедельник, 05.03.2012, 22:12 |
|
| |
izerli | Дата: Вторник, 06.03.2012, 12:21 | Сообщение # 134 |
Группа: Проверенные
Сообщений: 90
Статус: Offline
| DK22Pac, спасибо, буду пытаться понять)
|
|
| |
DK22Pac | Дата: Вторник, 06.03.2012, 15:10 | Сообщение # 135 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Написал код для изменения параметров материала, маты изменяются на всех моделях (фейл...) Пытался через clumpForAllAtomics, и через frameForAllAtomics, одно и то же... Прикол в том, что игра использует эти же процедуры...
|
|
| |