Крепление эффектов освещения к автомобилю
|
|
DK22Pac | Дата: Понедельник, 02.05.2011, 02:47 | Сообщение # 31 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Вот облом=/ Может оно как-то потом аттачится... Впрочем, так и быть... Может получиться прицепить обьект к машине с эффектом... (те же светофоры оставляют проекцию на земле), хотя не уверен, что получится что-то хорошее... Ещё я заметил, что проекция, созданная опкодом или через ту функцию, пропадает, когда повернуть камеру (напрмер, если смотреть на машину спереди), а свет от передних фар - никогда не пропадает. И ещё. Если делать таким способом (твой метод #1) Code {$CLEO} wait 0 while true wait 0 if not player.defined($player_char) then continue end if actor.Driving($player_actor) then 03C0: 0@ $player_actor 0A97: 0@ = car 0@ struct 0A8E: 1@ = 0@ + 0x14 // int 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 0AA6: call_method 0x6E1A60 struct 0@ num_params 2 pop 0 3 1@ // 1)vehicle struct 2) 0-îäíà ôàðà, 3 - äâå ôàðû 3) [VehStruct+20] end end То проекция распологается правильно относительно автомобиля (не даром там матрица передается). А в способе #2, проекция имеет всегда угол 0.0.Добавлено (02.05.2011, 02:47) --------------------------------------------- Den_spb, Эврика! Наверное... Если у меня нет лагов с игрой, то я могу констатировать тот факт, что проекция света фар НЕ цепляется* ко всем автмомбилям, а только к авто мгрока. Или к самому игроку. Под цеплянием здесь подразумевается такое цепляние, при котором проекция не отстаёт от авто.
Сообщение отредактировал DK22Pac - Воскресенье, 06.02.2011, 18:24 |
|
| |
Den_spb | Дата: Понедельник, 02.05.2011, 03:10 | Сообщение # 32 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (DK22Pac) что проекция света фар НЕ цепляется* ко всем автмомбилям, а только к авто мгрока. Или к самому игроку. Не понял, что ты имеешь ввиду: к авто игрока не цепляются любые проекции света или только созданные искусственным путём? По идее автомобиль игрока не должен ничем отличаться от других машин.
|
|
| |
DK22Pac | Дата: Среда, 08.06.2011, 14:41 | Сообщение # 33 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Den_spb, я подумал, что проекция цепляется именно к ГГ. То есть, у других тачек проекции "отстают". Хотя только что опять посмотрел эти процедуры, и ничего мне это не дало...Добавлено (08.06.2011, 14:41) --------------------------------------------- Где-то среди параметров должно быть расстояние отрисовки проекции, по оси Z. Неужели его нет?
|
|
| |
Den_spb | Дата: Среда, 08.06.2011, 16:27 | Сообщение # 34 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote .text:0070799F 000 push 0 .text:007079A1 004 push 0 .text:007079A3 008 push 3F800000h .text:007079A8 00C push 0 .text:007079AA 010 push 41700000h ; 15.0 .text:007079AF 014 push ecx .text:007079B0 018 mov ecx, [esp+18h+arg_18] .text:007079B4 018 push edx .text:007079B5 01C mov edx, [esp+1Ch+arg_14] .text:007079B9 01C push eax .text:007079BA 020 mov eax, [esp+20h+arg_10] .text:007079BE 020 push ecx .text:007079BF 024 mov ecx, [esp+24h+arg_C] .text:007079C3 024 push edx .text:007079C4 028 mov edx, [esp+28h+arg_8] .text:007079C8 028 push eax .text:007079C9 02C mov eax, [esp+2Ch+arg_4] .text:007079CD 02C push ecx .text:007079CE 030 mov ecx, _texShadPed .text:007079D4 030 push edx .text:007079D5 034 push eax .text:007079D6 038 push ecx .text:007079D7 03C push 1 .text:007079D9 040 call Create_Shadow Если расстояние до земли больше, чем значение параметра, то проекция не рисуется.
|
|
| |
DK22Pac | Дата: Суббота, 11.06.2011, 21:47 | Сообщение # 35 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Спасибо, то, что надо. Ато проекции рисовались и на мосту, и на дороге под мостом.Добавлено (11.06.2011, 21:29) --------------------------------------------- Денис, у меня с этой фигней осталась только одна проблема - когда я поворачиваю мышкой и смотрю на автомобиль спереди, проекция пропадает. То есть, её нету, когда между точкой позиции камеры и точкой, в которой создана проекция, находится автомобиль. Добавлено (11.06.2011, 21:47) --------------------------------------------- Блин... Всё из-за этой проверки... Code 0A97: 10@ = car 3@ struct 0A8E: 30@ = 10@ + 0x584 0A8D: 30@ = read_memory 30@ size 4 virtual_protect false if 08B7: test 30@ bit 2 Когда поворачиваешь мышу и фр не видно, игра ставит им статус "выключены". Как по-другому проверить? Нужна проверка, должны ли работать фары, а не работают ли они в данный момент.
|
|
| |
Den_spb | Дата: Понедельник, 13.06.2011, 03:24 | Сообщение # 36 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (DK22Pac) Нужна проверка, должны ли работать фары, а не работают ли они в данный момент. Можно просто проверить текущее время.
|
|
| |
DK22Pac | Дата: Воскресенье, 31.07.2011, 00:23 | Сообщение # 37 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Quote (Den_spb) CAutomobile__preRender -> 0x6E1A60 -> 0x6E1720 -> 0x6E1600 -> 0x70C500 -> 0x707390 Эта цепочка используется только при создании проекции для авто игрока. Для автомобилей NPC используются что-то иное.Добавлено (29.07.2011, 00:30) --------------------------------------------- Для тачек педов последний адресс в этой цепочке - 0x70BA00 (вместо 0x707390) Добавлено (31.07.2011, 00:20) --------------------------------------------- При создании проекции для авто игрока, первым параметором передаётся какой-то адресс... Самое странное, что этот адресс - находится перед адрессом старта структуры авто... У меня было примерно так: Param=CarStruct-100 Но эти значения постоянно менялись... (например - было CarStruct-30) Добавлено (31.07.2011, 00:23) --------------------------------------------- Второй параметр, как я понял, используется только когда создаётся текстура тени педа. Это [CPed+0x134]. Это последнее поле CPhysical, listener говорит, что это указатель на соприкасающийся обьект (но на самом деле это не так). Жаль, у меня слишком мало знаний, чтобы "копнуть" дальше. Если вместо [CPed+0x134] передать 0 то тень не будет падать на стены (а только на землю - поверхность, которая имеет угол поворота по X <90 градусов).
|
|
| |
Den_spb | Дата: Воскресенье, 31.07.2011, 00:24 | Сообщение # 38 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Странно. Я считал, что созданием проекций (любого типа и назначения) занимается 0x707390.
|
|
| |
DK22Pac | Дата: Воскресенье, 31.07.2011, 00:27 | Сообщение # 39 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Также, если передать [CPed+0x134], то игра будет использовать "свои" параметры размеров и поворота для тени. Добавлено (31.07.2011, 00:27) --------------------------------------------- Денис, я в ексе находил очень много процедур, которые подобны 0x707390. В той что я привёл, например, есть ещё один параметр (передаётся последним, не константа). Также я пытался занопить все вызовы 0x707390. Тени от обьектов и авто не пропали. Но пропали тени от педов. Как я выяснил позже, там тоже передаётся как параметр RwTexture*, - видимо, игра "рисует" текстуру, исходя от позиций костей педа (такие тени можно увидеть при включенном уровне высокой графики в настройках).
|
|
| |
Den_spb | Дата: Воскресенье, 31.07.2011, 00:44 | Сообщение # 40 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Насчёт параметра "начало структуры + бессмысленное смещение" - в функции, создающей корону, есть подобный параметр - там он является "уникальным номером" короны. Вообще отслеживание параметров при их передаче из одной функции в другую - дело не сложное, надо только не забывать, что в Stack Frame вызываемой функции первый переданный параметр находится в самом низу (максимальное положительное смещение), а последний - наверху (минимальное положит. смещение). Результат вызова процедуры чаще всего записан в eax.
|
|
| |
DK22Pac | Дата: Пятница, 12.08.2011, 03:44 | Сообщение # 41 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| sub_70C500 --> CShadows_StoreCarLightShadow Из исходников МТА. sub_6E1A60 --> CVehicle_DoVehicleLights 0x6E0D01 call CCoronas_AddCorona 0x6E0DF7 call CCoronas_AddCorona Создание корон передних фар. Короче, сейчас буду танцевать с бубном вокруг CVehicle_DoVehicleLights Отключение эффектов освещения для мотоциклов. делал чисто для теста: 0a8c: 0x6BD654 16 0x90 1 То же самое, для автомобилей: 0a8c: 0x6ABC91 45 0x90 1 Обновление 1 ? 2 Для теней педов - уазатель на какой-то массив. 3 0x3F800000 1.0 какой-то геометрический коэффициент? (при увеличении значения текстура уменьшается) 4 ? 5 Радиус действия по оси Z 6 Blue (100%) 7 Green (100%) 8 Red (100%) 9 Intensity 10 float положение текстуры : X1 11 float положение текстуры : Y1 12 float положение текстуры : X2 13 float положение текстуры : Y2 14 RwV3D, центр текстуры (100%) 15 RwTexture* (100%) 16 Тип эффекта. 1 - тень (применяется с текстурами теней) 2 - свет (применяется с текстурами света) 3 - ещё что-то.
Скорей всего, 0xC40430 --> старт пула структур теней Размер: 0x34 Элементов: 0x30
Стек CShadows__AddPermanentShadow arg_0 = byte Тип эффекта arg_4 = dword RwTexture* arg_8 = dword RwV3D, центр текстуры arg_C = dword положение текстуры : X2 arg_10 = dword положение текстуры : Y2 arg_14 = dword положение текстуры : X1 arg_18 = dword положение текстуры : Y1 arg_1C = word Intensity arg_20 = byte Red arg_24 = byte Green arg_28 = byte Blue arg_2C = dword Радиус действия по оси Z arg_30 = byte ? arg_34 = dword какой-то геометрический коэффициент? arg_38 = dword Для теней педов - уазатель на какой-то массив. arg_3C = byte ? Собственно, это только для того, чтобы легче было ориентироваться)
Ну и структура)) Самое аппетитное) +0x00 float X +0x04 float Y +0x08 float Z +0x0C float положение текстуры : X1 +0x10 float положение текстуры : Y1 +0x14 float положение текстуры : X2 +0x18 float положение текстуры : Y2 +0x1C float Радиус действия по оси Z +0x20 float какой-то геометрический коэффициент? +0x24 dword RwTexture* +0x28 dword Для теней педов - уазатель на какой-то массив. +0x2C word Intensity +0x2E byte тип эффекта +0x2F byte Red +0x30 byte Green +0x31 byte Blue +0x32 word то ли набор флагов, то ли ещё что-то... Выщитывается на осное arg_30 и arg_3С.
Блин... Не могу поверить, что сам всё это исследовал...
sub_6E1780 --> CVehilce__DoBacklights sub_6E0A50 --> CVehicle_DoHeadlightCoronas
Quote 16 Тип эффекта. 1 - тень (применяется с текстурами теней) 2 - свет (применяется с текстурами света) 3 - ещё что-то. Параметр 3 - инверсия RGB?
Код для поочерёдного вывода X,Y,Z теней на экран. Локальных смещений там нету. Только глобальные координаты. Code {$CLEO .cs} 2@ = 0x30 2@ *= 0x34 0A8E: 1@ = 0xC40430 + 2@ while true 003D: for 0@ = 0xC40430 to 1@ step 0x34 0A8E: 3@ = 0@ + 0x0 0A8D: 4@ 3@ 4 0 inc(3@, 4) 0A8D: 5@ 3@ 4 0 inc(3@, 4) 0A8D: 6@ 3@ 4 0 0AD1: show_formatted_text_highpriority "%.4f %.4f %.4f" time 500 4@ 5@ 6@ wait 500 end end
Блин... Всё было очень хорошо. Существует ещё один пул теней...
Сообщение отредактировал DK22Pac - Вторник, 16.08.2011, 00:58 |
|
| |
444andrei444 | Дата: Суббота, 15.10.2011, 18:40 | Сообщение # 42 |
Группа: Проверенные
Сообщений: 15
Статус: Offline
| я так и не понял как мне изменить дальность света фар, желательно на моей машине, ну или на всех.
|
|
| |
Den_spb | Дата: Суббота, 15.10.2011, 19:37 | Сообщение # 43 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Надо патчить вышеописанные процедуры. Конкретно - менять значения параметров, передаваемые в 0x707390.
|
|
| |
444andrei444 | Дата: Суббота, 15.10.2011, 21:59 | Сообщение # 44 |
Группа: Проверенные
Сообщений: 15
Статус: Offline
| я что то не понял
while true wait 0 0AA5: 0x707390 16 pop 16 0 0 0x3F800000 0 0x447A0000 255 255 255 255 0xC1400000 0 0 0x41400000 100 100 2 end что тут не так
|
|
| |
Den_spb | Дата: Суббота, 15.10.2011, 22:44 | Сообщение # 45 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Пример вызова 0x707390:Code {$CLEO} 0@ = -2024.2429 1@ = 170.1045 2@ = 28.8359 0AC7: 3@ = var 0@ offset 0A8D: 4@ = read_memory 0xC403F8 size 4 virtual_protect 0 while true wait 0 0AA5: 0x707390 16 pop 16 0 0 1.0 0 1000.0 255 255 255 255 1.0 0.0 0.0 1.0 3@ 4@ 2 end Проекция создаётся у гаража СФ.
|
|
| |