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

Что делать с инструкцией movq ?


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

Наткнулся на такую инструкцию "movq" , она изменяет координату (x) . Как сделать speedhack? Все значения , всё нашёл  ... Помогите плз...

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

Ну во первых действительно выложи скрипт, и конкретно объясни что ты хочешь сделать. 

Ускорить игру?

Хочу сделать ускорение по координате "х" , но я хз , как это сделать ... Координату нашёл, инструкцию , пишущую туда, нашёл (movq), а хочу , чтобы персонаж двигался быстрее ...

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

Сомневаюсь, что с такой малой инфой, которую ты дал, кто-то тебе поможет.

Вот обрати внимание на соседний топик (здесь.- вот так нужно подавать инфу:

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

Сомневаюсь, что с такой малой инфой, которую ты дал, кто-то тебе поможет.

Вот обрати внимание на соседний топик (здесь.- вот так нужно подавать инфу:

http://vk.cc/3Ffci2 , хочу сделать как тут, но инструкция в той игре другая (movq) ... 

Может  мне сигнатуры сюда скинуть?

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

Наткнулся на такую инструкцию "movq" , она изменяет координату (x) . Как сделать speedhack? Все значения , всё нашёл  ... Помогите плз...

Умножай значение координат на свой множитель - это и есть "SpeedHack".

Допустим, скорость бега персонажа равняется 50-ти, это значит, что при каждом срабатывании инструкции, при движении вперед - будет увеличиваться значение координаты X на 50, а координата Y - в зависимости от угла направления персонажа.

То есть расчет будет примерно такой: (как я себе представляю)

X = X + 50; // скорость по координате XY = Y + I; // скорость по координате Y
Где "X" и "Y" - это координаты, где "i" - направление персонажа (угол поворота камеры).

Тебе же нужно сделать как-нибудь так:

X = X + (50 * 2); // скорость по координате XY = Y + (I * 2); // скорость по координате Y
То есть в данном примере - умножение идет на два (в координате X на константу скорости движения вперед, а в Y - умножение переменной направления персонажа), соответственно, каждое срабатывание инструкции будет двигать персонажа дальше, чем оригинальная инструкция.

Ну, это то, как я делаю SpeedHack, может есть методы лучше.

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

Умножай значение координат на свой множитель - это и есть "SpeedHack".

Допустим, скорость бега персонажа равняется 50-ти, это значит, что при каждом срабатывании инструкции, при движении вперед - будет увеличиваться значение координаты X на 50, а координата Y - в зависимости от угла направления персонажа.

То есть расчет будет примерно такой: (как я себе представляю)

X = X + 50; // скорость по координате XY = Y + I; // скорость по координате Y
Где "X" и "Y" - это координаты, где "i" - направление персонажа (угол поворота камеры).

Тебе же нужно сделать как-нибудь так:

X = X + (50 * 2); // скорость по координате XY = Y + (I * 2); // скорость по координате Y
То есть в данном примере - умножение идет на два (в координате X на константу скорости движения вперед, а в Y - умножение переменной направления персонажа), соответственно, каждое срабатывание инструкции будет двигать персонажа дальше, чем оригинальная инструкция.

Ну, это то, как я делаю SpeedHack, может есть методы лучше.

 

Твой метод мне и нужен, но как это сделать в отладчике?

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

Скорость передвижения игрока должна быть в коде игры. Это железно.
 
1) либо это +смещение по времени. Тогда менять смещение увеличивая его или умножая его
 


Пример

Здесь Vector3.Forward = new Vector3(0f,0f,1f). Т.е. здесь по времени приращение 1f по локальному направлению Z. Можем умножать вектор направления на скорость
 


 
2) либо это +смещение по времени * скорость. Тогда тупо меняем скорость

 
Пример

Ищем адрес скорости и меняем его например на 4

 

3) либо как предложил автор темы, дописывать дополнительный код по работе с координами. Но для этого надо знать ассемблер. Увеличивать изменении координаты в N раз.

 

Так что либо ищем адрес скорости и меняем его, либо пишем АА скрипты (или на другом языке например C++) работу с координатами.

void Update{  transform.Translate(Vector3.Forward * Time.deltaTime);}
public float speed = 2f;void Update{  transform.Translate(Vector3.Forward * speed * Time.deltaTime); // перемещение будет в два раза быстрее}
public float speed = 2f;void Update{  transform.Translate(Vector3.Forward * speed * Time.deltaTime); // перемещение будет в два раза быстрее}
public float speed = 4f;void Update{  transform.Translate(Vector3.Forward * speed * Time.deltaTime); // перемещение будет в два раза быстрее}
Ссылка на комментарий
Поделиться на другие сайты

Скорость передвижения игрока должна быть в коде игры. Это железно.

 

1) либо это +смещение по времени. Тогда менять смещение увеличивая его или умножая его

 

Пример

Здесь Vector3.Forward = new Vector3(0f,0f,1f). Т.е. здесь по времени приращение 1f по локальному направлению Z. Можем умножать вектор направления на скорость

 

 

2) либо это +смещение по времени * скорость. Тогда тупо меняем скорость

 

Пример

Ищем адрес скорости и меняем его например на 4

 

3) либо как предложил автор темы, дописывать дополнительный код по работе с координами. Но для этого надо знать ассемблер. Увеличивать изменении координаты в N раз.

 

Так что либо ищем адрес скорости и меняем его, либо пишем АА скрипты (или на другом языке например C++) работу с координатами.

P.S. инструкция выглядит так: movq [edi+смещение],xmm5

Что делать?

void Update{  transform.Translate(Vector3.Forward * Time.deltaTime);}
public float speed = 2f;void Update{  transform.Translate(Vector3.Forward * speed * Time.deltaTime); // перемещение будет в два раза быстрее}
public float speed = 2f;void Update{  transform.Translate(Vector3.Forward * speed * Time.deltaTime); // перемещение будет в два раза быстрее}
public float speed = 4f;void Update{  transform.Translate(Vector3.Forward * speed * Time.deltaTime); // перемещение будет в два раза быстрее}
Ссылка на комментарий
Поделиться на другие сайты

Умножить на какое-то число регистр xmm5. Или прибавить к нему какое-то число. Тут уже смотреть надо. Попробуй и то, и другое.

Ок! , там ещё на верху есть инструкции , попробую узнать , что они делают ...

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

Что делать?

Тут всё зависит от нужной задачи.

Дальше мои теоретические выкладки, т.к. вопрос полностью не исследовал.

 

Если нужно нормальное ускорение передвижения, то нужно искать именно коэффициенты скорости. Например как здесь через поиск по заранее известному названию коэффициентов, либо искать в структуре самому (методом проб и ошибок), как например делал JIeXA (написал об этом в этом сообщении.

 

Если достаточно и дискретного увеличения передвижения, т.е. при каждом шаге ГГ делает просто больше шаг, то можно и через координаты.

Для этого нужно:

1. Выйти на разовые инструкции для каждой координаты (что я подразумеваю под разовые - на каждый шаг -> одно срабатывание инструкции.)

2. Дальше можно делать двумя способами:

   2.1. Работаем непосредственно с координатой. Возьму твою инструкцию  movq [edi+смещение],xmm5

fld dword ptr[edi+смещение] // выгружаем в стек значение координатыfmul dword ptr [mnozitel]   // умножаем значение в стеке на множитель, про множитель ниже.fstp dword ptr[edi+смещение]// выгружаем из стека в адрес новое значение координаты.

про множитель почитай это моё сообщение (или лучше весь) топик.

 

   2.2. Работаем с разницей в значениях координат между шагом.

push eax push ebx                         // сохраняем регистрыmov eax,dword ptr [edi+смещение] // записываем в него координату.push eax                         // сохраняем старую координату в стеке movq [edi+смещение],xmm5        // получаем новое значение координатыfsub eax,dword ptr [edi+смещение]// рассчитываем разницу imul ebx,eax,4                   // ebx - сюда запишется результат (новый шаг), eax - разница,                                 // 4 - в данном случае множительpop eax                          // восстанавливаем в eax старую координатуfadd eax,ebx                     // прибавляем к координате новый шагmov dword ptr [edi+смещение],eax // записываем новую координату по адресуpop ebx                          // восстанавливаем регистры pop eax     

Коды могут быть неточные, т.к. без отладки в игре я за них не ручаюсь. Но мысль примерно такая.

Изменено пользователем Garik66
  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

Тут всё зависит от нужной задачи.

Дальше мои теоретические выкладки, т.к. вопрос полностью не исследовал.

 

Если нужно нормальное ускорение передвижения, то нужно искать именно коэффициенты скорости. Например как здесь через поиск по заранее известному названию коэффициентов, либо искать в структуре самому (методом проб и ошибок), как например делал JIeXA (написал об этом в этом сообщении.

 

Если достаточно и дискретного увеличения передвижения, т.е. при каждом шаге ГГ делает просто больше шаг, то можно и через координаты.

Для этого нужно:

1. Выйти на разовые инструкции для каждой координаты (что я подразумеваю под разовые - на каждый шаг -> одно срабатывание инструкции.)

2. Дальше можно делать двумя способами:

   2.1. Работаем непосредственно с координатой. Возьму твою инструкцию  movq [edi+смещение],xmm5

fld dword ptr[edi+смещение] // выгружаем в стек значение координатыfmul dword ptr [mnozitel]   // умножаем значение в стеке на множитель, про множитель ниже.fstp dword ptr[edi+смещение]// выгружаем из стека в адрес новое значение координаты.

про множитель почитай это моё сообщение (или лучше весь) топик.

 

   2.2. Работаем с разницей в значениях координат между шагом.

push eax push ebx                         // сохраняем регистрыmov eax,dword ptr [edi+смещение] // записываем в него координату.push eax                         // сохраняем старую координату в стеке movq [edi+смещение],xmm5        // получаем новое значение координатыfsub eax,dword ptr [edi+смещение]// рассчитываем разницу imul ebx,eax,4                   // ebx - сюда запишется результат (новый шаг), eax - разница,                                 // 4 - в данном случае множительpop eax                          // восстанавливаем в eax старую координатуfadd eax,ebx                     // прибавляем к координате новый шагmov dword ptr [edi+смещение],eax // записываем новую координату по адресуpop ebx                          // восстанавливаем регистры pop eax     

Коды могут быть неточные, т.к. без отладки в игре я за них не ручаюсь. Но мысль примерно такая.

Суть в том , что когда иду по координате "x" Прибавлялось и уменьшалось не по 1 (допустим, метру) а по 2 (метра)

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

Во-первых, не копируйте полностью цитируемое сообщение - потом очень тяжело читать топик.

  

Суть в том , что когда иду по координате "x" Прибавлялось и уменьшалось не по 1 (допустим, метру) а по 2 (метра)

Тогда никакого умножения не нужно.

fld dword ptr[edi+смещение] // выгружаем в стек значение координатыfadd dword ptr [metr]       // прибавляем к значению в стеке metrfstp dword ptr[edi+смещение]// выгружаем из стека в адрес новое значение координаты...................................metr:dd (float)1                 // здесь объявляем 1 метр (сколько он равен единицам в игре) 
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

 

Во-первых, не копируйте полностью цитируемое сообщение - потом очень тяжело читать топик.

  

Тогда никакого умножения не нужно.

fld dword ptr[edi+смещение] // выгружаем в стек значение координатыfadd dword ptr [metr]       // прибавляем к значению в стеке metrfstp dword ptr[edi+смещение]// выгружаем из стека в адрес новое значение координаты...................................metr:dd (float)1                 // здесь объявляем 1 метр (сколько он равен единицам в игре) 

Можно в ЛС скину скрин кода?

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

Во-первых, не копируйте полностью цитируемое сообщение - потом очень тяжело читать топик.

 

Можно в ЛС скину скрин кода?

Зачем?

Игру я качать не хочу. Я сейчас другой игрушкой занимаюсь.

Лучше сам пробуй: пиши скрипт, выкладывай, спрашивай - учись.

Вот к примеру прочти статью по работе с вещественными числами:

http://pblog.ru/?p=241 

 

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

Во-первых, не копируйте полностью цитируемое сообщение - потом очень тяжело читать топик.

 

Зачем?

Игру я качать не хочу. Я сейчас другой игрушкой занимаюсь.

Лучше сам пробуй: пиши скрипт, выкладывай, спрашивай - учись.

Вот к примеру прочти статью по работе с вещественными числами:

http://pblog.ru/?p=241 

ты прост глянь ...

Как найти коэффициент ?

P.S. , скажу сразу для других ... Инструкция обращается к адресу постоянно , я забыл об этом упомянуть раньше...

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

Вот нашёл про сам опкод MOVQ:

"инструкция MOV для 64-битных операндов из памяти в MMX регистр, называется MOVQ. Символ Q означает QUAD WORD (четыре слова)"

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

  • 3 недели спустя...

Всё , кароч. я понял , как искать множитель скорости...

afro228offical, может и нам теперь расскажешь, как гарантированно искать множитель скорости?

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

afro228offical, может и нам теперь расскажешь, как гарантированно искать множитель скорости?

По структуре ...

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

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

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

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