Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Темы - mfisto

Страницы: [1]
1
Внимание всем следящим за новостями по LUA! Список полностью описан.

2
Дорогие друзья, в это теме мы будем делиться с вами разными функциями, написанными на движке LUA. Итак...
Начнем с того, что писать функции гораздо проще, чем просто опкодовой системой, поскольку мы можем вписывать вычисления в любую структуру записи функции LUA.
Что здесь важно знать: что такое память, сколько байтов нужно прочитать-записать, можно ли прочитать или записать адреса.

Функции с помощью которых можно работать с памятью:
med_ReadFloat(adress) - читает 4 байта с точкой
med_ReadInt(adress) - читает 4 байта
med_ReadWord(adress) - читает 2 байта
med_ReadByte(adress) - читает 1 байт
med_WriteInt(adress, var) - пишет 4 байта
med_WriteWord(adress, var) - пишет 2 байта
med_WriteByte(adress, var) - пишет 1 байт
med_WriteFloat(adress, var) - пишет 4 байта с точкой

med_AllowEditingMemory(adress, Int) - обозначение памяти для работы в ней в дальнейшем (в этом случае можно записывать любую память, даже защищенную)
med_EndEditingMemory() - освобождение обозначенной памяти

med_NewObject(Int) - выделение памяти для создания своей структуры
med_DeleteObject(pointer) освобождение памяти структуры

med_FLOAT_TO_HEX(var) - спец команда для обозначения значения с точкой в памяти как 4 байта (используется для записи в память)

Вот пример одной из функций взято из базы Вайса

Код: Lua
  1. function SFindGroundZFor3DCoord(x, y, z, bool_flag)
  2.         local bool_pointer = med_NewObject(1);
  3.         local result_pointer = med_NewObject(4);
  4.  
  5.         if (bool_flag ) then
  6.                 med_WriteByte(bool_pointer, 1)
  7.         else
  8.                 med_WriteByte(bool_pointer, 0)
  9.         end
  10.  
  11.         local float_result = med_CallFuncF(0x04D53A0, 4, med_FLOAT_TO_HEX(x), med_FLOAT_TO_HEX(y), med_FLOAT_TO_HEX(z), bool_pointer );
  12.  
  13.         -- результат тоже нужно конвертить.
  14.         med_WriteInt( result_pointer , float_result )
  15.         float_result =  med_ReadFloat( result_pointer )
  16.  
  17.         med_DeleteObject( result_pointer )
  18.  
  19.         med_DeleteObject( bool_pointer )
  20.         return float_result
  21. end

Затем такую функцию можно вызывать так-как все функции нах-ся в одном можно сказать "теле".
Вызывать просто:
Код: Lua
  1. local Zcoord = SFindGroundZFor3DCoord(xcoord, ycoord, zcoord, true)

Добавил:
Подправил немного функцию вот теперь корректно...

3
В данной теме расскажу принцип работы, данных функций.
Начну с функции or. В ассемблере и не только данная функция выкалывает 1-цы у числа, если представить его в двоичной форме. Скажем число 8 - это будет 1000. Возьмем и выколем у него число 4 (4 - это 100). В результате будет 1100. Это пишется вот так ->
8 or 4 = 12. Здесь правило такое, 1 на 1 дает 1, 1 на 0 дает тоже 1, но 0 на 0 дает 0.

Далее это функция and. Она работает по следующему принципу. И так возьмем число 12 (это 1100). И проведем операцию AND. Например с числом 8 (это 1000). Пишем 12 and 8 = 8. Правило такое 1 на 1 дает 1. 1 на 0 дает 0. Ну и 0 на 0 тоже 0. Отсюда и получается что у 12 и у 8 совпадают только 4-ые биты. Поэтому и будет число 8. Вот еще пример возьмем число 8 и число 4, будет 8 and 4 = 0, так как у них нет одинаковых битов. По правилу 1 на 1 - нет совпадений.

Ну с операцией not, просто переворачиваем биты, в данном случае, так как в игре используется 4 байта на любую переменную, то мы берем только 32 бита и их переворачиваем, т.е. not 4 = -5, да и вообще почему именно 32 бита, думаю всем известно, так как 32 разрядная система или по другому - x86. Кто не знает принцип знака, то рассказываю, есть знаковые и есть беззнаковые числа, если знаковое, то последний бит числа отвечает за его знак, у нас это 32 бита значит 32-ой. А пишется со знаком минус. Все числа имеющие 32 бит будут отрицательны. Вот и все.

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

Это вполне касается GTA 3, так как там не хватает нек-рых опкодов.

Вот эти функции:

AND
NOT
OR

Что мы делаем, а вот что пишем следующее:

:_func_and_
hex
    8B 44 24 04 8B 4C 24 08 21 C8 C3 90
end

:_func_or_
hex
    8B 44 24 04 8B 4C 24 08 09 C8 C3 90
end

:_func_not_
hex
    8B 44 24 04 F7 D0 C3 90
end

Это и будут наши функции (асм вставки).
Далее

05F5: call_scm_func @getLabelOffset 1 label @_func_and_ store_to 13@
05E2: call_function 13@ num_params 2 pop 2 14@ 4 15@

05F5: call_scm_func @getLabelOffset 1 label @_func_or_ store_to 13@
05E2: call_function 13@ num_params 2 pop 2 14@ 4 15@

05F5: call_scm_func @getLabelOffset 1 label @_func_not_ store_to 13@
05E2: call_function 13@ num_params 1 pop 1 14@ 15@

Вот выше - это будет их вызов.
Где в вызове функции and и or я беру два параметра 14@ и 4, а получаю в 15@
А сама цсм функция getlabelOffset выглядит так:

:getLabelOffset
{  Example:
    05F5: call_scm_func @getLabelOffset 1 label @lbl store_to 0@
}
if
    0@ <> 0
then
    05EC: 1@ = current_thread_pointer
    1@ += 0x98
    05E0: 1@ = read_memory 1@ size 4 virtual_protect 0
    0062: 1@ -= 0@
else
    1@ = 0
end
05F6: ret 1 1@


5
Общие вопросы / Анимация водителя
« : Март 09, 2015, 01:37:04 am »
Такой меня вопрос волнует, как заставить анимировать обычных педов как ГГ за рулем? Может уже кто-то сталкивался с этим. Может даже знает как? Не плохо было бы это реализовать. ;)

6
Общие вопросы / Двигатель авто в Vice City.
« : Январь 14, 2015, 06:37:36 pm »
Вот возник вопрос: как заставить работать двигатель авто, когда Tommy пассажиром?

7
Моды / ModLoader для Vice City
« : Апрель 02, 2014, 06:01:47 pm »
Предлагаю обсудить тут проект загрузчика модов, на подобии для San Andreas. Т.е. через плагин asi мы в отдельной папке собираем любые моды, с своими приоритетами, которые будут заменять оригинальные файлы игры через память. Особенно это касается файлов которые добавляются в gta3.img архив, а также паки текстур txd из папки models и txd. Что это даст: 1) во-первых игра будет абсолютно оригинальна без изменений, все изменения будет через asi загрузщик. 2) это позволит легко удалить непонравившийся мод, либо приоритет загрузки поставить 0, т.е. мод не будет загружаться. 3) в третьих согласитесь это будет уникально.

8
Общие вопросы / Эмуляторы и GTA
« : Август 19, 2013, 02:42:58 am »
Обсуждаем здесь тему эмулей. Кому что нравится.

На сегодняшний день есть три игры, которые обошла Rockstar Games, так и не выпустив их на PC.
Первая - это Liberty City Stories
Вторая - Vice City Stories
Ну и - Chinatown Wars

Презентуем сегодня все три на одном эмуляторе - на PPSSPP. Именно на нем все три работают с нормальной скоростью и без косяков. Нужно лишь скачать последнюю ревизию на сайте. Сайт эмулятора - ppsspp.org.

9
Скриптинг / Разнообразие в San Andreas
« : Август 15, 2013, 11:19:39 am »
Выкладываем сюда идеи того, что можно добавить в игру по скриптовой части, например, такси как в stories'ах, то есть загорается желтый фонарик, такси останавливается и пассажир садится в такси (имеется ввиду не миссия, а просто любые таксишки по городу).

10
Свободное общение / Моя история скриптинга
« : Август 15, 2013, 09:41:02 am »
Делимся опытом, по скриптам. Когда впервые стали заниматься, когда сделали первый скрипт, каких успехов достигли?
Почему именно Grand Theft Auto?
Выкладываем свои работы здесь аттачем. Либо выкладываем код.
Особенно волнует вопрос: что бы вы хотели нового увидеть в скриптинге, имеется ввиду новый способ написания скриптов или просто предложения по улучшению существующих способов?

Страницы: [1]