You are not logged in.
Единственное, сразу бросилось в глаза, опечатка в классе CPlacable
Это не моя работа))). Я строго писал имена методов в таком порядке CClass::Method. Кстати вот сейчас что еще нашел, буквально с под курсора:
text:0047BE8F CCam::Process_FollowPedWithMouse(CVector const&, float, float, float)
Судя по всему, это контроль мышки над камерой. А и забыл выше написать еще CRadar затронут в базе.
Немного обновил, базу и затронул разные методы классов CMatrix, CCam, CCamera, CPad, CTxdStore, CFont, CSprite2d и прочие...
Благодарю ребят за их труд! Хорошо по работали над базой для GTA Vice City. Самый раз можно делать моды.
Да тут, компилятор не плохо тоже поработал.
Ну все понял, а то я думал зачем еще туда всунули во внутрь: fcomp
Сама картинка такая:
.text:004DFEA0 RwV3D__normalize proc near ; CODE XREF: sub_4114E0+FBp .text:004DFEA0 ; sub_413DE0+231p .text:004DFEA0 ; sub_414470+BFEp .text:004DFEA0 ; sub_4165B0+E1p ... .text:004DFEA0 .text:004DFEA0 var_8 = dword ptr -8 .text:004DFEA0 .text:004DFEA0 000 83 EC 08 sub esp, 8 .text:004DFEA3 008 D9 41 04 fld [ecx+RwV3d.y] .text:004DFEA6 008 D9 C0 fld st .text:004DFEA8 008 D8 C8 fmul st, st ; y * y .text:004DFEAA 008 D9 01 fld [ecx+RwV3d.x] .text:004DFEAC 008 DD DA fstp st(2) .text:004DFEAE 008 D9 C1 fld st(1) .text:004DFEB0 008 D8 C8 fmul st, st .text:004DFEB2 008 DE C1 faddp st(1), st .text:004DFEB4 008 D9 41 08 fld [ecx+RwV3d.z] .text:004DFEB7 008 DD DA fstp st(2) .text:004DFEB9 008 D9 C1 fld st(1) .text:004DFEBB 008 D8 C8 fmul st, st .text:004DFEBD 008 DE C1 faddp st(1), st .text:004DFEBF 008 DD D1 fst st(1) .text:004DFEC1 008 D8 1D 70 15 69 00 fcomp flt_691570 .text:004DFEC7 008 DF E0 fnstsw ax .text:004DFEC9 008 F6 C4 04 test ah, 4 .text:004DFECC 008 75 14 jnz short loc_4DFEE2 .text:004DFECE 008 80 E4 45 and ah, 69 .text:004DFED1 008 F6 C4 41 test ah, 65 .text:004DFED4 008 74 0C jz short loc_4DFEE2 .text:004DFED6 008 C7 01 00 00 80 3F mov [ecx+RwV3d.x], 1.0 .text:004DFEDC 008 83 C4 08 add esp, 8 .text:004DFEDF 000 DD D8 fstp st .text:004DFEE1 000 C3 retn .text:004DFEE2 ; --------------------------------------------------------------------------- .text:004DFEE2 .text:004DFEE2 loc_4DFEE2: ; CODE XREF: RwV3D__normalize+2Cj .text:004DFEE2 ; RwV3D__normalize+34j .text:004DFEE2 008 D9 C0 fld st .text:004DFEE4 008 D9 FA fsqrt .text:004DFEE6 008 D9 1C 24 fstp [esp+8+var_8] .text:004DFEE9 008 D9 04 24 fld [esp+8+var_8] .text:004DFEEC 008 DD D9 fstp st(1) .text:004DFEEE 008 D9 05 74 15 69 00 fld flt_691574 .text:004DFEF4 008 D8 F1 fdiv st, st(1) .text:004DFEF6 008 DD D9 fstp st(1) .text:004DFEF8 008 D9 01 fld [ecx+RwV3d.x] .text:004DFEFA 008 D8 C9 fmul st, st(1) .text:004DFEFC 008 D9 19 fstp [ecx+RwV3d.x] .text:004DFEFE 008 D9 41 04 fld [ecx+RwV3d.y] .text:004DFF01 008 D8 C9 fmul st, st(1) .text:004DFF03 008 D9 59 04 fstp [ecx+RwV3d.y] .text:004DFF06 008 D9 41 08 fld [ecx+RwV3d.z] .text:004DFF09 008 D8 C9 fmul st, st(1) .text:004DFF0B 008 D9 59 08 fstp [ecx+RwV3d.z] .text:004DFF0E 008 DD D8 fstp st .text:004DFF10 008 83 C4 08 add esp, 8 .text:004DFF13 000 C3 retn .text:004DFF13 RwV3D__normalize endp
У RwV3d нет методов, это просто структура x y z. Другое дело CVector - там и перегруженные операторы, и те же Normalise и Length.
т.е CVector - эта обвертка, значит имеет методы? Вообще может быть, я не немножко не так переписал ее?
Сижу вот и думаю, может быть это метод RwV3d ? Который выполняет нормализацию.
Пока так написал, но внутри видел какую-то проверку на ноль.
void RwV3dNormalize(RwV3d * V3d) { float inv_lng = 1.0f / sqrt(V3d->x*V3d->x + V3d->y*V3d->y + V3d->z*V3d->z); V3d->x = V3d->x * inv_lng; V3d->y = V3d->y * inv_lng; V3d->z = V3d->z * inv_lng; }
Спасибо, теперь я все понял и за чего такой вид образовался у функции.
Но, поскольку параметр передается в ST, без ассемблерной вставки, ее переопределить нельзя.
Да уж. Но если уже переписывать MakeAngleAccute, тогда обязательно придется переписывать и те функции, где она вызывалась.
Здравствуйте, кто может подсказать как эту функцию, правильно переписывать в C++ ?
.text:00642920 ; float __usercall MakeAngleAccute<st0>(float val<st0>) .text:00642920 MakeAngleAccute proc near ; CODE XREF: sub_401FB0+1D2p .text:00642920 ; sub_402550+133p .text:00642920 ; sub_41D410+2BEp .text:00642920 ; sub_41D410+2E4p ... .text:00642920 000 D9 EB fldpi .text:00642922 000 D9 C9 fxch st(1) .text:00642924 .text:00642924 loc_642924: ; CODE XREF: MakeAngleAccute+14j .text:00642924 000 D9 05 A0 D4 6D 00 fld fHalf_1 .text:0064292A 000 DE C9 fmulp st(1), st .text:0064292C 000 D9 F8 fprem .text:0064292E 000 DF E0 fnstsw ax .text:00642930 000 66 A9 00 04 test ax, 400h .text:00642934 000 75 EE jnz short loc_642924 .text:00642936 000 DD D9 fstp st(1) .text:00642938 000 C3 retn .text:00642938 MakeAngleAccute endp
CFxSystem *(__thiscall *_RegisterFxSystem)(CParticleData *particleData, int i, const char *filename, FILE *file) = (CFxSystem *(__thiscall *)(CParticleData *, int, const char *, FILE *)) 0x5C1F50;
Если объявить так, то имей введу, что перед вызовом, надо каким-то образом передать указатель на объект в регистр ecx.
DWORD address; //Сюда присваиваем наш адрес объекта через __asm mov ecx, address; _RegisterFxSystem(&particleData, i, filename, &file);
Что-то должно выглядеть так. Ибо функция начинает обращаться регистру ecx, где вообще нету нашего адреса нужного объекта.
VintProg_Pro а что на счет взлома лимитов маркеров VC ? Ты как давно говорил об этом и скрины показывал, но релиза в этом направлении почему-то не было никакого..
Тут совсем все не просто, можно подменить конечно массив маркеров, но учтите что сохранение тоже увеличиться. Не стал, делать потому-что не кто в этом не нуждался.
обновление прошло, вроде все работает хорошо и заметно быстрее))
Ну просто, колоссальные изменения как на самом форуме, так и в инструменте SannyBuilder.
0058a330 1799 _?DrawRadar
@Seemann
Так а для какого конкретно exe? Есть соответствующая база IDA?
@RitrS
Да по сути, это не сложно, если это можно вправить одним-двумя значениями. Например для Вайса поиграв с этими адресами (примечание: это непосредственно в памяти и для версии 1.0):
0x68FD38
0x68FD3C
Можно сделать сам радар квадратный.
Да вот разработал, конечно не знаю, на сколько он будет полезен народу. Тем более это для GTA Vice City. Пишите свои оценки, на сколько вам понравился мой инструмент.
Да вещь!
005D1140 No Category CWeapon::FireInstantHit (( CEntity *, CVector *))
масштабирование компонента с коэффициентами для каждой из осей
А как же коллизии? Они не масштабируються?
Можно по подробней?
Прорисовка чего именно?
есть функция:
; int __thiscall CTexture__Draw(CTexture *, RwRect *rect, RwRGBA *color1, RwRGBA *color2, RwRGBA *color3, RwRGBA *color4, float, float, float, float, float) .text:005786A0 CTexture__Draw proc near ; CODE XREF: _DrawHud+3F3p .text:005786A0 ; _DrawHud+4D7p .text:005786A0 ; _DrawHud+619p .text:005786A0 ; _DrawHud+749p ... .text:005786A0 .text:005786A0 rect = dword ptr 4 .text:005786A0 color1 = dword ptr 8 .text:005786A0 color2 = dword ptr 0Ch .text:005786A0 color3 = dword ptr 10h .text:005786A0 color4 = dword ptr 14h .text:005786A0 f18_2 = dword ptr 18h .text:005786A0 f14_3 = dword ptr 1Ch .text:005786A0 f18_3 = dword ptr 20h .text:005786A0 f14_4 = dword ptr 24h .text:005786A0 f18_4 = dword ptr 28h .text:005786A0 .text:005786A0 000 8B 44 24 04 mov eax, [esp+rect] .text:005786A4 000 8B 54 24 08 mov edx, [esp+color1] .text:005786A8 000 53 push ebx .text:005786A9 004 89 CB mov ebx, ecx .text:005786AB 004 FF 74 24 2C push [esp+4+f18_4] ; f18_4 .text:005786AF 008 FF 74 24 2C push [esp+8+f14_4] ; f14_4 .text:005786B3 00C FF 74 24 2C push [esp+0Ch+f18_3] ; f18_3 .text:005786B7 010 FF 74 24 2C push [esp+10h+f14_3] ; f14_3 .text:005786BB 014 FF 74 24 2C push [esp+14h+f18_2] ; f18_2 .text:005786BF 018 FF 74 24 2C push [esp+18h+color4] ; f14_2 .text:005786C3 01C FF 74 24 2C push [esp+1Ch+color3] ; f18_1 .text:005786C7 020 FF 74 24 2C push [esp+20h+color2] ; f14_1 .text:005786CB 024 52 push edx ; color4 .text:005786CC 028 52 push edx ; color3 .text:005786CD 02C 52 push edx ; color2 .text:005786CE 030 52 push edx ; color1 .text:005786CF 034 50 push eax ; rect .text:005786D0 038 E8 3B F9 FF FF call ResetPrimitiveVertices .text:005786D5 038 8B 0B mov ecx, [ebx+CTexture.rwTexture] ; RwTexture* .text:005786D7 038 83 C4 34 add esp, 34h .text:005786DA 004 85 C9 test ecx, ecx .text:005786DC 004 75 04 jnz short loc_5786E2 .text:005786DE 004 6A 00 push 0 .text:005786E0 008 EB 03 jmp short loc_5786E5 .text:005786E2 ; --------------------------------------------------------------------------- .text:005786E2 .text:005786E2 loc_5786E2: ; CODE XREF: CTexture__Draw+3Cj .text:005786E2 004 8B 01 mov eax, [ecx+RwTexture.raster] .text:005786E4 004 50 push eax ; _DWORD .text:005786E5 .text:005786E5 loc_5786E5: ; CODE XREF: CTexture__Draw+40j .text:005786E5 008 6A 01 push rwRENDERSTATETEXTURERASTER ; RwRenderState .text:005786E7 00C E8 B4 14 0D 00 call _rwSetCameraRenderState .text:005786EC 00C 59 pop ecx .text:005786ED 008 59 pop ecx .text:005786EE 004 6A 04 push 4 ; vert_count .text:005786F0 008 68 40 40 7D 00 push offset _renderPrimitive ; vertices .text:005786F5 00C 6A 05 push 5 ; fvf .text:005786F7 010 E8 14 15 0D 00 call Im2DRenderPrimitive ; первый параметр - flexible vertex format? .text:005786FC 010 83 C4 0C add esp, 0Ch .text:005786FF 004 5B pop ebx .text:00578700 000 C2 28 00 retn 28h .text:00578700 CTexture__Draw endp
написал ее для начала в таком ввиде:
void Draw_Texture(void* pTexture, CRwRect * RwRect, CRwRGBA *color1, CRwRGBA *color2, CRwRGBA *color3, CRwRGBA *color4, CRwRGBA *color5, CRwRGBA *color6, CRwRGBA *color7, CRwRGBA *color8, CRwRGBA *color9){ DWORD A = ADDRESS_CTextureDraw; __asm { mov ecx, pTexture; push color9; push color8; push color7; push color6; push color5; push color4; push color3; push color2; push color1; push RwRect; call A; }; };
CRwRGBA RGBA;
CRwRect rect;
DWORD shotTexture = 0x0A10844;
RGBA.a = 255;
RGBA.b = 255;
RGBA.g = 255;
RGBA.r = 255;
rect.x = 128.0;
rect.y = 128.0;
rect.w = 128.0;
rect.h = 128.0;
пытаюсь вызывать ее, в таймере
Draw_Texture((void*)(0x0A10844), &rect, &RGBA, &RGBA, &RGBA, &RGBA, &RGBA, &RGBA, &RGBA, &RGBA, &RGBA);
но не чего на экран не выводится... В чем может быть проблема.
Ты имеешь введу что-бы он статику пачнул?
Были времена, а теперь не чего нового на GTA не выходит!
но я не знаю, как найденный код перенести на C++ (сложность в том, чтобы обозначить границы действительно нужного ассемблерного кода).
http://sannybuilder.com/forums/viewtopic.php?id=1363
есть функция void FUNCTION (int, float). я точно уверен, что важны два параметра и могу определить их в отладчике, однако в коде зачем-то в стек пихается больше значений, чем два
Возможно это не данной функций передается не нужные параметры...
как приложение понимает, что функция, вызываемая как FUNCTION (10, 234.55) на самом деле принимает только 2 параметра и как мне описать такую FUNCTION, если я наткнусь на непонятные "лишние" параметры в стеке?
IDA pro показывает arg_ сколько их столько и параметров у функции...
предположим, я хочу повторить функцию лечения игрока
Делается элементарно, просто меняешь значение в структуре игрока...
Опять пытаемся CLEO скриптом править память, ну зачем же...
Выделаешь свой массив в C++, заменяешь все ссылки на свой массив... Массив должен быть из верных элементов, например из структур...
Как насчет моей функции?
Да вовсе не глубоко... Там то все-от делов загрузка фонта , получение хендла и прорисовка...