Крепление эффектов освещения к автомобилю
|
|
Den_spb | Дата: Суббота, 05.02.2011, 04:46 | Сообщение # 16 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Оно. Надо только определить смысл передаваемых параметров.
|
|
| |
DK22Pac | Дата: Суббота, 05.02.2011, 04:46 | Сообщение # 17 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Вот передача параметрови вызов sub_707390 из функции Code 0x707930 CShadows__?storeShadowToBeRendered Code loc_707945: ; case 0x1 000 mov eax, [esp+arg_24] 000 mov ecx, [esp+arg_20] 000 mov edx, [esp+arg_1C] 000 push 0 004 push 0 008 push 3F800000h 00C push 0 010 push 41700000h 014 push eax 018 mov eax, [esp+18h+arg_18] 018 push ecx 01C mov ecx, [esp+1Ch+arg_14] 01C push edx 020 mov edx, [esp+20h+arg_10] 020 push eax 024 mov eax, [esp+24h+arg_C] 024 push ecx 028 mov ecx, [esp+28h+arg_8] 028 push edx 02C mov edx, [esp+2Ch+arg_4] 02C push eax 030 mov eax, _texShadCar 030 push ecx 034 push edx 038 push eax 03C push 1 040 call sub_707390 040 add esp, 40h 000 retn
|
|
| |
Den_spb | Дата: Суббота, 05.02.2011, 04:46 | Сообщение # 18 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Часть параметров должна передаваться из опкода - нужно проследить их путь. Смысл других параметров можно определить, например, сравнивая их значения при вызове sub_707390 из различных процедур. Когда я изучал процедуру создания корон, у меня была похожая задача - тогда я для удобства сделал таблицу (аттач). Параметры 0x707390: 1 0 (const?) 2 0 (const?) 3 0x3F800000 1.0 какой-то геометрический коэффициент? (при увеличении значения текстура уменьшается) 4 0 5 0x41700000 1000.0 какой-то геометрический коэффициент? (текстура смещается?) 6 Blue (100%) 7 Green (100%) 8 Red (100%) 9 Intensity 10 float, масштаб тектуры поперёк (100%) 11 поворот текстуры + сжатие ? 12 поворот текстуры + сжатие ? 13 float, масштаб текстуры вдоль (100%) 14 RwV3D (100%) 15 ID текстуры (100%) 16 Тип эффекта. 1 - тень (применяется с текстурами теней) 2 - свет (применяется с текстурами света)
|
|
| |
DK22Pac | Дата: Суббота, 05.02.2011, 04:47 | Сообщение # 19 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Честно говоря, я думал, ты "взял" корону у Риосуке (вот часть его кода (missile - http://hotmist.ddo.jp/cleo_cs/missile.txt )) Code // 0AA5: call 0@(3@,1i) num_params 7 pop 7 [Z] [Y] [X] [Size] [Type] [Flare] [ID] :FUNC_00 hex 6A00 // push 0 6A00 // push 0 6800007041 // push 15.0 6A00 // push 0 68CDCC4C3E // push 0.2 6A00 // push 0 6A00 // push 0 6A00 // push 0 6A00 // push 0 6A01 // push 1 8B4C2430 // mov ecx, [esp+0x30] 51 // push ecx // Corona Flare 8B4C2438 // mov ecx, [esp+0x38] 51 // push ecx // Corona Type 6800803B45 // push 3000.0 8B4C2444 // mov ecx, [esp+0x44] 51 // push ecx // Corona Size 8D94244C000000 // lea edx, [esp+0x0000004C] 52 // push edx // Corona Position Pointer 68FF000000 // push 255 // Corona Alpha 6880000000 // push 128 // Corona Blue 68C0000000 // push 192 // Corona Green 68FF000000 // push 255 // Corona Red 6A00 // push 0 8B442454 // mov eax, [esp+0x54] 03C6 // add eax, esi 50 // push eax // Corona ID B880C56F00 // mov eax, 0x006FC580 FFD0 // call eax 83C454 // add esp, 0x54 C3 // ret end Ну что ж, попробую поискать...
Сообщение отредактировал DK22Pac - Суббота, 05.02.2011, 03:00 |
|
| |
Den_spb | Дата: Суббота, 05.02.2011, 04:47 | Сообщение # 20 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (DK22Pac) Честно говоря, я думал, ты "взял" корону у Риосуке (вот часть его кода (missile)) Нет, функцию короны я исследовал самостоятельно.
|
|
| |
DK22Pac | Дата: Суббота, 05.02.2011, 04:47 | Сообщение # 21 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Quote (Den_spb) Нет, функцию короны я исследовал самостоятельно. Это уже понял=) Кстати спасибо за выше предоставленную инфу по некоторым параметрам. Вот ещё один вызов. Code push 0 push 0 push 1.0 mov eax, _texShadExp push 0 push 1000.0 push 80h push 80h push 80h push 80h push -12.0 push 0 push 0 push 12.0 push edi push eax push 2 call sub_707390 add esp, 40h
|
|
| |
Den_spb | Дата: Суббота, 05.02.2011, 04:47 | Сообщение # 22 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (DK22Pac) Кстати спасибо за выше предоставленную инфу по некоторым параметрам. Да сейчас может добьём её.
|
|
| |
DK22Pac | Дата: Суббота, 05.02.2011, 04:47 | Сообщение # 23 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Quote (Den_spb) Да сейчас может добьём её. Жаль спать надо идти. Надеюсь, где-то среди параметров есть адресс структуры автомобиля... Может быть это первый параметр? Вот ещё один вызов... Там создаётся текстура тени педа Code push ecx push 0 push 3F800000h push 0 push 40800000h push eax push eax push eax push eax push edx pu sh eax push ecx push edx push eax push ecx push 1 Кстати в preRender именно она не вызывается. Может быть, вызывается через какую-то другую ф-цию... Вот здесь ещё один вызов Code .text:00707F2C 064 call sub_707390 Только параметров там передается почему-то 12, и последний из них - не 1 и не 2, а 3. Хотя мб там не через push, а через fstp (я не знаю что это) передаётся Code push 0 push edi push 3F800000h fsubr [esp+30h+origin.x] push 0 push 40800000h fstp [esp+38h+origin.x] push esi fld [esp+3Ch+arg_8] push esi fmul ds:flt_858FA0 push esi push esi sub esp, 10h fsubr [esp+58h+origin.y] lea edx, [esp+58h+origin] fstp [esp+58h+origin.y] fld [esp+58h+arg_18] fmul ds:flt_858CE8 ; 1.5f fstp [esp+58h+var_4C] fld [esp+58h+arg_14] fmul ds:flt_858CE8 ; 1.5f fstp [esp+58h+var_50] fld [esp+58h+arg_10] fmul ds:flt_858CE8 ; 1.5f fstp [esp+58h+var_54] fld [esp+58h+arg_C] fmul ds:flt_858CE8 ; 1.5f fstp [esp+58h+var_58] push edx push ebp push 3 call sub_707390 add esp, 40h
Сообщение отредактировал DK22Pac - Суббота, 05.02.2011, 03:45 |
|
| |
Den_spb | Дата: Суббота, 05.02.2011, 04:47 | Сообщение # 24 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Гигантский свет фар Код: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 0x3F800000 0 0x447A0000 255 255 255 255 0xC1400000 0 0 0x41400000 3@ 4@ 2 end
|
|
| |
DK22Pac | Дата: Суббота, 05.02.2011, 04:48 | Сообщение # 25 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Круто! Спасибо!! И ещё спасибо что выложил скрин, я вот с телефона зашёл. А к автомобилю не выходит прицепить?
|
|
| |
Den_spb | Дата: Суббота, 05.02.2011, 04:48 | Сообщение # 26 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (DK22Pac) Только параметров там передается почему-то 12 Число параметров по идее не должно меняться. Либо параметры кладутся на стек другой командой (не push), либо они к этому моменту уже находятся на стеке (правда не знаю, возможно ли это). Quote (DK22Pac) А к автомобилю не выходит прицепить? Пока неясно, какой параметр можно использовать для передачи структуры (если такой тут вообще есть).
|
|
| |
DK22Pac | Дата: Суббота, 05.02.2011, 11:35 | Сообщение # 27 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Проверил параметры с 0. Ни один не подходит. Кстати нашёл ещё одну ф-цию Code 020 push 0 024 push 0 028 faddp st(1), st 028 push 40.0 02C push 1.0 030 lea edx, [ebx+ebx] 030 fadd [esp+30h+var_8] 030 push 9.0 034 fld [esp+34h+var_4] 034 push 0 038 fadd [esp+38h+arg_C] 038 push 0 03C push 0 040 fstp [esp+40h+var_4] 040 fld [esp+40h+arg_10] 040 fmul ds:flt_858B8C ; 0.5f 040 fld st 040 fmul dword_B7CA50[eax] 040 fchs 040 fstp [esp+40h+var_10] 040 fmul flt_B7CA54[eax] 040 mov eax, 55555556h 040 imul edx 040 fchs 040 fstp [esp+40h+var_14] 040 fld [esp+40h+var_10] 040 fadd [esp+40h+var_C] 040 fstp [esp+40h+var_C] 040 mov eax, edx 040 fld [esp+40h+var_14] 040 shr eax, 1Fh 040 fadd st, st(1) 040 add edx, eax 040 push edx 044 mov edx, [esp+44h+var_10] 044 fstp [esp+44h+var_8] 044 sub esp, 8 04C lea eax, [esp+4Ch+var_C] 04C fstp st 04C fld [esp+4Ch+arg_14] 04C fmul dword_B79ED0[ecx*4] 04C fstp [esp+4Ch+var_48] 04C fld [esp+4Ch+arg_14] 04C fmul dword_B79F10[ecx*4] 04C mov ecx, [esp+4Ch+var_14] 04C fstp [esp+4Ch+var_4C] 04C push ecx 050 mov ecx, _texLampShad64 050 push edx 054 mov edx, [esp+54h+arg_18] 054 push eax 058 push ecx 05C lea eax, [esi+edx+33h] 05C push 1 060 push eax 064 call sub_70BA00 Ещё один её вызов. Тут 17 параметров. Code push edi push edi push 40.0 push 1.0 push 4.0 push ebx push ebx push ebx push edi push -2.0 push e di push edi push 2.0 push edx push eax push 2 push esi call sub_70BA00 Это уже ближе... Она походу занимается отрисовкой теней... Code .text:0070BDA0 sub_70BDA0 proc near ; CODE XREF: CAutomobile__preRender+11A5p .text:0070BDA0 ; CBike__preRender+5D7p .text:0070BDA0 ; CBmx__m44+311p .text:0070BDA0 ; CHeli__preRender+480p ... Из неё вызывается и то, и другое. http://img20.imageshack.us/img20/3506/dk22pac567.jpg
Сообщение отредактировал DK22Pac - Суббота, 05.02.2011, 12:07 |
|
| |
Den_spb | Дата: Суббота, 05.02.2011, 19:29 | Сообщение # 28 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Можно посмотреть процедуры, использующие текстуры эффектов. Например, на текстуру _texHeadlight (проекция двух фар) ссылаются процедуры:Code Up r sub_6E1600+91 mov edx, _texHeadlight Up w sub_706CD0+8C mov _texHeadlight, eax Up r sub_706ED0+46 mov eax, _texHeadlight r CShadows__?storeShadowToBeRendered+18A mov ecx, _texHeadlight Down r sub_71AED0+10 mov eax, _texHeadlight Типы текстур:Code // 0xC403F8 _texHeadlight 2 две фары // 0xC403E0 _texShadCar 1 тень машины // 00C403E4 _texShadPed 1 тень человека // 00C403F4 _texShadExp 2 сферический источник света // 00C403FC _texHeadlight1 2 одна фара // 00C40400 _texBloodpool64 2 кровь // 00C40404 _texHandman 2 значки пешеходного светофора // 00C40408 _texWincrack32 2 поверхность воды // 00C4040C _texLampShad64 2 ещё какой-то свет UPD: Quote Проверил параметры с 0. Ни один не подходит. В CAutomobile__preRender используется именно эта процедура. Вот вся цепочка: CAutomobile__preRender -> 0x6E1A60 -> 0x6E1720 -> 0x6E1600 -> 0x70C500 -> 0x707390
|
|
| |
DK22Pac | Дата: Суббота, 05.02.2011, 20:31 | Сообщение # 29 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Странно, что перед вызовом 0x70C500 передаются схожие параметры с теми, что идут в 0x707390. Напрашивается вопрос, зачем вообще тогда 0x707390... Может в 0x70C500 есть параметр-ссылка на структуру?
|
|
| |
Den_spb | Дата: Воскресенье, 06.02.2011, 01:34 | Сообщение # 30 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| 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 Эффект создаётся в нужном месте, но отстаёт при движении на большой скорости.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 0A8D: 4@ = read_memory 0xC403F8 size 4 virtual_protect 0 0AA6: call_method 0x6E1600 struct 0@ num_params 1 pop 0 4@ // 1)vehicle struct 2) ID текстуры, например [0xC403F8] end end Здесь эффект тоже отстаёт.
|
|
| |