» TeamX (Архив Форума)«


Форум TeamX » Исследования » Offsets или полезные смещения (двиглоковыряние... исключительно в целях обучения :))

Переход по темам
<< Пред. След. >>
Страницы этой темы [ 1 2 3 4 5 6 7 ] Все собщения

 
Ray
Модератор

Откуда: Донецк,Украина
Регистрация: Янв. 2004

Всего: 746 сообщений

Небольшие лирические размышления на тему замедления передвижения по карте мира

На данный момент мне неизвестен не один корректный способ, который позволил бы "правильно" замедлить передвижение по карте мира. Те способы, которые существуют сейчас, в том числе и приведнный в данной теме создают лишь илюзию замедления. В определённом месте ставиться безусловный переход в другое место движка, где создан цикл, который в зависимости от автора инкрементом увеличивает значение регистра от нуля до (как приведено в этой теме) 0x100000000
Фактически процессор просто загружается работой счётчика. После чего стоит указатель на старое место в двиге и продолжается выполнение ф-ии. Что ни коим образом не влияет на случайные встречи. Исключительно визуальное решение, толку от которого нет совсем. Так что применения этого я не вижу никакого смысла.

Господа "двиглоковырятели"  есть у кого идеи насчёт ф-ии обработки карты мира (которая начинается 0xB020C)?

Для тех, кому достаточно исключительно визуального решения, но при применении патча (приведённого в данной теме) не даёт достаточного результата можно увеличить количество шагов счётчика. Увеличте значение по адресу 0xBB3BB. 00000001 сделайте его больше.

P.S. Кто знает - то замедление по карте, которое делал Mynah работает по тому же принципу?

-----
Не бывает невозможных задач – бывает мало времени.

Отправлено: 20:00 - 25 Авг., 2007
Freeman
Пользователь

Регистрация: Февр. 2007

Всего: 24 сообщения

Что-то не понимаю почему от такого способа толку нет совсем. Хотя если определение есть ли встреча находится вне этого цикла то понятно. Можешь выложить дизасеммблеренный код процедуры и прокомментировать основные места? Или просто объяснить принцип по которому там всё работает?

Отправлено: 22:10 - 25 Авг., 2007
Ray
Модератор

Откуда: Донецк,Украина
Регистрация: Янв. 2004

Всего: 746 сообщений

Цитата:
Что-то не понимаю почему от такого способа толку нет совсем


На простом примере. Допустим у нас есть такая ф-ия

Код:
 
worldmap()
{
 func1(); //отрисовка
 while(true)
 {
    func2(); //обработка нажатых клавиш
    func3(); //обработка перемещения
    func4(); //слежение за машиной (топливо и пр.)
    func5(); //обработка случайных встреч
 }
}



существующие "замедлялки" делают следующее

Код:
 
worldmap()
{
 func1(); //отрисовка
 while(true)
 {
    SLOW();
    func2(); //обработка нажатых клавиш
    func3(); //обработка перемещения
    func4(); //слежение за машиной (топливо и пр.)
    func5(); //обработка случайных встреч
 }
}

SLOW()
{
 int eax = 0;
 while (eax< 0x100000000)
 {
   eax++;
 }
}



Комментарии нужны? Вставляется "холостой" цикл, который просто загружает временно проц. Но на игру он никак не влияет. Функция карты просто временно приостанавливается что мы и видим визуально. Но полезности от этого 0.

Цитата:
Можешь выложить дизасеммблеренный код процедуры и прокомментировать основные места?


Я только начал разбирать функцию. Это долгий процесс. К тому же она просто огромна. Если интересно найди в инете такую вещь как REC и найди в нём ф-ию "L004BFE0C"
(http://www.backerstreet.com/rec/rec.htm) А я потом поделюсь своими комментариями

-----
Не бывает невозможных задач – бывает мало времени.

Отправлено: 23:30 - 25 Авг., 2007
Ray
Модератор

Откуда: Донецк,Украина
Регистрация: Янв. 2004

Всего: 746 сообщений

Цитата:
Есть ещё охотники движок поковырять?  



А как же

Цитата:
Вот задачка: найти в движке место, отвечающее за изменение игрового времени в процессе движения по карте мира. Т.е. нужно не визуально замедлить/ускорить перемещение, а в игровом времени (тиках)


Ещё надо? За правильное решение задачи ожидаю только 5 баллов

Offset Значение
0xB04E5 50460000


Для Фаргуса, Американки v1.02d. Всё тестилось.

Комментарии: Движёк фола делает так - разбивает путь игрока на отрезки равной длинны (отрезки заранее определённого размера). На каждом шаге цикла перемещает игрока на один такой отрезок (в случае с машиной в зависимости от условий на 8 отрезков за раз). Как  бы то ни было на каждом шаге он прибавляет к дате пол часа (18000 тиков). По этому смещению и находится это число. Надо замедлить передвижение (ускорить течение времени) - увеличь число. Ускорить - умеши.
Как уже сказал число записано в тиках. Проще не придумаешь

P.S. Извини что так поздно

-----
Не бывает невозможных задач – бывает мало времени.

Отправлено: 19:24 - 26 Авг., 2007
Jordan 63
Пользователь

Откуда: Россия, Самара
Регистрация: Июль 2007

Всего: 228 сообщений

Я писал

Цитата:

По каким офсетам можно изменить что бы при выходе на карту мира игрок находился в таких координатах

X=823
Y=72

А также чтобы все тайлы возле арройо не были подсвещены. Очень нужно!



Я нашел ответ нужно было просто посмотреть документацию.

Отправлено: 22:42 - 16 Янв., 2008 | ИСПРАВЛЕНО: Jordan 63 - 22:51 - 16 Янв., 2008
 

Переход по темам
<< Пред. След. >>
Страницы этой темы [ 1 2 3 4 5 6 7 ] Все собщения


Powered by Ikonboard 2.1.9 RUS
Modified by RU.Board Team
© 2000 Ikonboard.com