|
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
|
|
|
|