Перейти к содержанию

Как я ускорял игрока в Not The Time For Dragons


Partizan

Рекомендуемые сообщения

Сам запутался но всё же выложу.

 

Спойлер
[ENABLE]
aobscanmodule(MovementSpeed,thegame.exe,0F ? ? ? ? 0F ? ? ? ? F3 ? ? ? ? ? F3 ? ? ? 8B ? ? ? ? ? 0F)
alloc(newmem,$1000)
label(code)
label(return)
registersymbol(code)
registersymbol(MovementSpeed)

newmem:
  movaps xmm1,[esp+60]//оригинальная инструкция с N числами что прибавляются к координатам xmm2=0
  cmp [ebx+5B4],01//свой/чужой где 1=чужой
  je short @F//если 1 то прыжок
  movups xmm2,[code]//множители
  mulps xmm1,xmm2//xmm1=N числа/xmm2=множители
  xorps xmm2,xmm2//обнуляю xmm2 в исходное состояние
@@:
  jmp return

code:
dd (float)4//множитель координаты Y
dd (float)1//множитель координаты Z не нужно умножать поэтому множитель =1
dd (float)4//множитель координаты X
dd (float)1//какое-то левое число которое не нужно умножать

MovementSpeed:
  jmp newmem
return:

[DISABLE]
MovementSpeed:
db 0F 28 4C 24 60
unregistersymbol(*)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: thegame.exe+4C06D
thegame.exe+4C036: B8 01 00 00 00           - mov eax,00000001
thegame.exe+4C03B: 88 83 01 13 00 00        - mov [ebx+00001301],al
thegame.exe+4C041: EB 07                    - jmp thegame.exe+4C04A
thegame.exe+4C043: C6 83 01 13 00 00 00     - mov byte ptr [ebx+00001301],00
thegame.exe+4C04A: A1 A0 24 09 01           - mov eax,[thegame.exe+C924A0]
thegame.exe+4C04F: 8B 90 A0 00 00 00        - mov edx,[eax+000000A0]
thegame.exe+4C055: 0F AF 90 94 00 00 00     - imul edx,[eax+00000094]
thegame.exe+4C05C: F3 0F 2A C2              - cvtsi2ss xmm0,edx
thegame.exe+4C060: 8B 90 A4 00 00 00        - mov edx,[eax+000000A4]
thegame.exe+4C066: 0F AF 90 98 00 00 00     - imul edx,[eax+00000098]
// ---------- INJECTING HERE ----------
thegame.exe+4C06D: 0F 28 4C 24 60           - movaps xmm1,[esp+60]
// ---------- DONE INJECTING  ----------
thegame.exe+4C072: 0F 58 4C 24 50           - addps xmm1,[esp+50]
thegame.exe+4C077: F3 0F 11 44 24 20        - movss [esp+20],xmm0
thegame.exe+4C07D: F3 0F 2A C2              - cvtsi2ss xmm0,edx
thegame.exe+4C081: 8B 90 A8 00 00 00        - mov edx,[eax+000000A8]
thegame.exe+4C087: 0F AF 90 9C 00 00 00     - imul edx,[eax+0000009C]
thegame.exe+4C08E: 8B 45 0C                 - mov eax,[ebp+0C]
thegame.exe+4C091: F3 0F 11 44 24 24        - movss [esp+24],xmm0
thegame.exe+4C097: F3 0F 2A C2              - cvtsi2ss xmm0,edx
thegame.exe+4C09B: F3 0F 11 44 24 28        - movss [esp+28],xmm0
thegame.exe+4C0A1: F3 0F 10 05 D8 C1 9A 00  - movss xmm0,[thegame.exe+5AC1D8]
}

 

 

Ссылка на комментарий
Поделиться на другие сайты

Интересно было поностальгировать по СЕ.

Не Velocity ли это было? В ESP+50. На 12:48.

Обычно объекты ускоряют через Velocity * свой множитель.

 

Я бы посоветовал использовать всегда pushfd/popfd при наличии своего cmp.

Спойлер
//Когда-то давно в далекой галактике
PLACECamera_Shake_scr_7:
pushfq //x64
cmp [Camera_Control_Main_Checker],#0
je @f
cmp [Disable_Camera_Shake_Checker],#0
je @f
mov ecx,#0
@@:
popfq
mov [rbx+00000100],ecx //origin
jmp BACKCamera_Shake_scr_7

 

 

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.