[ Новые сообщения · Участники · Правила форума · Поиск · RSS ] |
|
Фан Форум для LF'айтеров Игрострой Модострой LF2 Руководства и База знаний [Перевод] О движке LF2 |
[Перевод] О движке LF2 |
Оригинальная статья
LF2 состоит из "объектов". В оригинале их не более 400, с порядковыми номерами 0-399. Движок LF2 проходится по всем этим объектам и делает всё необходимое с ними (рассчеты физики, показателей). Чтобы получить доступ к объекту, нам для начала требуется получить доступ к объекту через его адрес памяти. Это выглядит примерно так: Цитата mov eax,dword ptr ds:[esi+edi*4+194h] (В PDK движке 194h везде заменено на 3ECh, - прим. переводчика) Сейчас постараюсь объяснить что есть что. eax - Место, куда будет сохранен адрес объекта. Операция MOV для переноса правого значения в левое, значения разделены запятыми. esi - Назовем это "базовым указателем" (формулировка неверная, но так проще - прим. автора), оно всегда равно 458B00h. edi - Это номер объекта. Как я упомнял раньше, LF2 пробегается по кругу через все объекты, поэтому использование этого регистра дает возможность доступа к любому объекту. Поэтому эту строчку можно расшифровать как: Цитата mov eax, dword ptr ds:[458B00h+Номер_Объекта*4+194h] *Используемые регистры в примере лишь для самого примера, в коде они могут отличаться (прим. автора) Идем дальше (пример ниже не особо полезен - прим. автора): Простейший способ проверить, существует ли объект или нет Цитата cmp byte ptr ds:[esi+edi+4],0 Если результат 0 - объект не существует, если 1 - существует. После получения доступа к "Объекту", Вы можете получить доступ к его свойствам. Примерно так: Цитата mov dword ptr ds:[eax+70h],0 Эта строка устанавливает для объекта его Frame-кадр в номер 0. Огромный список оффсетов (смещений) доступен в таблице: https://docs.google.com/spreads....E#gid=0 (прим. переводичка - для PDK\Neora актуальна другая таблица: https://docs.google.com/spreads....4338899 ) После подключения к объекту мы имеем доступ ко всем его свойствам, они указаны на первой странице таблицы. Чтобы получить доступ ко второй странице "ID Properties" нам нужно получить на него Указатель (Pointer). Допустим, что мы уже сделали подключение к объекту как в первой строке, и этот адрес хранится в EAX: Цитата mov eax, dword ptr ds:[eax+368h] ; изменяем EAX указатель с первой страницы свойств на вторую, добавив +368h cmp dword ptr ds:[eax+6f4h],10 ; теперь мы можем сделать проверку, является ли ID объекта равным 10 Если на пальцах, первая строчка подгружает указатель на область данных, где мы можем посмотреть ID объекта, получив предварительно указатель. После того как указатель получен, мы можем получать данные со второй страницы свойств объекта (наиболее полезные там это данные об ID и Type объекта) Последнее, что осталось разобрать, это Frame-данные: Цитата mov eax,dword ptr ds:[esi+edi*4+194h] ; Получаем Указатель на объект (подключаемся к нему) mov ecx,dword ptr ds:[eax+70h] ; Узнаем какой номер Frame-кадра у объекта, сохраняем его в ECX mov edx,dword ptr ds:[eax+368h] ; Получаем указатель к ID-странице, сохраняем его в EDX imul ecx,ecx,178h ; умножаем номер кадра, который мы держим в ECX, на 178, сохраняем результат в ECX cmp dword ptr ds:[ecx+edx+7ACh],0 ; Теперь используем результат умножения и указатель на дату, чтобы проверить какой там state с помощью +7ACh (Я не знаю, почему умножение именно на 178h. Кроме того в PDK\Neora умножения отличаются, используются куда более адские числа, которым так же трудно найти логическое объяснение, но чаще всего в новом движке это равно 1B0h - прим. переводчика) Надеюсь всё становится ясно. В основном всё имеет такой вид: номер кадра * 178h + указатель объекта + желаемый оффсет ~Написано (Lord) Silva ~Переведено Archer-Dante
Coding in Assembly requires a mix of:
80% of brain, passion, intuition, creativity 10% of programming skills 10% of tan levels in your blood. |
Не сишечка, а сишечка++ :)
В ЛФ2 явно присутствуют так называемые "структуры" от С++ это наборы данных типа Х, Y, Z, ХП, МП, Команда, Номер Фрейма и так далее всё это есть те самые смещения +70 и другие. А в целом вся эта группа смещений - единая структура, которая содержит разнотипные данные. Верный признак С++, даже если бы язык был тайной~
Coding in Assembly requires a mix of:
80% of brain, passion, intuition, creativity 10% of programming skills 10% of tan levels in your blood. |
Ммм, а CMA.png и CMA2.png не поддерживают прозрачность, чтоль? Или в экзешнике что-то прописано для них, а точнее, черный цвет, как фоновый?
Прикрепленные файлы:
8441410.png
(37.6 Kb)
|
| |||
| |||