You are not logged in.
Собственно, моя новая разработка. Вернее старая, но для новой игры. Вернее для старой игры.
Короче говоря, перетащил движок CLEO 4 на платформу GTA Vice City.
Что делает:
1) подгружает CLEO скрипты из папки CLEO с расширением cs. Правила те же - нельзя объявлять свои глобальные переменные.
2) добавляет новые опкоды (список ниже).
3) добавляет FXT тексты, позволяющие использовать собственные GXT ключи без необходимости редактирования american.gxt. FXT файлы - это текстовые файлы (в многобайтовой кодировке, несмотря на то, что игра использует Unicode) с расширением fxt. Должны располагаться в папке CLEO\CLEO_TEXT.
[You must login to view hidden text.]
[---]
[center][large]CLEO опкоды:[/large][/center]
[large]05DC[/large]
[c]05DC: end_custom_thread[/c]
Завершает текущий CLEO поток.
[large]05DD[/large]
[c]05DD: end_custom_thread_named 'KEN1'[/c]
Завершает CLEO поток с указанным именем.
[large]05DE[/large]
[c]05DE: create_custom_thread 'ct.s'[/c]
Запускает поток из CLEO скрипта с указанным именем. Длина строки ограничена 7 символами. Путь ведется относительно папки CLEO.
[large]05DF[/large]
[c]05DF: write_memory 0xA10B2E size 1 value 0 virtual_protect 0[/c]
Пишет по памяти игры.
Параметры:
1 - Адрес памяти.
2 - Размер записи: 1, 2, 4 байта. При передаче других значений выполняется заполнение области памяти нижним байтом переданной величины.
3 - Значение.
4 - Virtual Protect: 1 – если нужно сделать адрес памяти записываемым, 0 – если запись идет в перезаписываемый адрес памяти.
[large]05E0[/large]
[c]05E0: 0@ = read_memory 1@ size 4 virtual_protect 0[/c]
Читает значение из памяти игры и записывает результат в переменную.
Параметры:
1 - Переменная, в которую будет записан результат.
2 - Адрес памяти.
3 - Размер записи: 1, 2, 4 байта.
4 - Virtual Protect: 1 – если нужно сделать адрес памяти читаемым, 0 – если запись идет в читаемый адрес памяти.
[large]05E1[/large]
[c]05E1: call 0x55BFC0 num_params 3 pop 3 0 0 0@[/c]
Вызывает функцию
Параметры:
1 - Адрес памяти функции.
2 - количество параметров функции, передаваемых через стек.
3 - выравнивание стека.
... - список параметров функции.
[large]05E2[/large]
[c]05E2: call_function 0x4BC1E0 num_params 0 pop 0 0@[/c]
Вызывает функцию подобно предыдущему опкоду, но имеется возможность получить возвращаемое функцией целочисленное значение.
Параметры:
1 - Адрес памяти функции.
2 - количество параметров функции, передаваемых через стек.
3 - выравнивание стека.
... - список параметров функции, после списка параметров должна стоять переменная, в которую записывается возвращаемое значение.
[large]05E3[/large]
[c]05E3: call_method 0x4DF240 struct 0@ num_params 3 pop 3 0.0 0.0 0.0[/c]
Вызывает функцию-метод.
Параметры:
1 - Адрес памяти функции.
2 - Адрес памяти объекта, владеющего методом.
2 - количество параметров функции, передаваемых через стек.
3 - выравнивание стека.
... - список параметров функции.
[large]05E4[/large]
[c]05E4: call_function_method 0x5BAA80 struct 0@ num_params 0 pop 0 1@[/c]
Вызывает функцию-метод подобно предыдущему опкоду, но имеется возможность получить возвращаемое функцией целочисленное значение.
Параметры:
1 - Адрес памяти функции.
2 - Адрес памяти объекта, владеющего методом.
2 - количество параметров функции, передаваемых через стек.
3 - выравнивание стека.
... - список параметров функции, после списка параметров должна стоять переменная, в которую записывается возвращаемое значение.
[large]05E5[/large]
[c]05E5: 0@ = game_version[/c]
Получает идентификатор версии игры: 0 - версия 1.0, 1 - версия 1.1.
[large]05E6[/large]
[c]05E6: 0@ = actor 0@ struct[/c]
Получает указатель на структуру актера по хэндлу.
[large]05E7[/large]
[c]05E7: 0@ = car 0@ struct[/c]
Получает указатель на структуру машины по хэндлу.
[large]05E8[/large]
[c]05E8: 0@ = object 0@ struct[/c]
Получает указатель на структуру объекта по хэндлу.
[large]05E9[/large]
[c]05E9: 0@ = ped_struct 0@ handle[/c]
Получает хэндл актера, расположенного в пуле актеров.
[large]05EA[/large]
[c]05EA: 0@ = vehicle_struct 0@ handle[/c]
Получает хэндл машины, расположенного в пуле машин.
[large]05EB[/large]
[c]05EB: 0@ = object_struct 0@ handle[/c]
Получает хэндл объекта, расположенного в пуле объектов.
[large]05EC[/large]
[c]05EC: 0@ = current_thread_pointer[/c]
Получает указатель на текущий поток.
[large]05ED[/large]
[c]05ED: 0@ = thread 'MAIN' pointer[/c]
Получает указатель на поток с указанным именем.
[large]05EE[/large]
[c]05EE: key_pressed 0x20 //VK_...[/c]
Проверяет, нажата ли клавиша.
[large]05EF[/large]
[c]05EF: 3@ = random_actor_near_point 0@ 1@ 2@ in_radius 10.0 find_next 1 pass_deads 0 //IF and SET[/c]
Выполняет поиск актера, расположенного в сфере указанного радиуса вокруг точки.
[large]05F0[/large]
[c]05F0: 3@ = random_vehicle_near_point 0@ 1@ 2@ in_radius 10.0 find_next 1 pass_wrecked 0 //IF and SET[/c]
Выполняет поиск машины, расположенной в сфере указанного радиуса вокруг точки.
[large]05F1[/large]
[c]05F1: 3@ = random_object_near_point 0@ 1@ 2@ in_radius 10.0 find_next 1 //IF and SET[/c]
Выполняет поиск объекта, расположенного в сфере указанного радиуса вокруг точки.
[large]05F2[/large]
[c]05F2: 0@ = pop_float[/c]
Получает возвращаемое функцией дробное значение. Должен использоваться после опкодов 05E1, 05E3.
[large]05F3[/large]
[c]05F3: 0@ = 2 exp 0.5 //all floats[/c]
Возводит число в степень.
[large]05F4[/large]
[c]05F4: 0@ = log 0@ base 2 //all floats[/c]
Находит логарифм числа по произвольному основанию.
[large]05F5[/large]
[c]05F5: call_scm_func @func params_count 0[/c]
Вызывает scm-функцию подобно gosub, но scm-функция имеет свой набор локальных переменных и может возвращать значения. При вызове в scm-функцию можно передать аргументы, которые по порядку запишутся в локальные переменные scm-функции. Количество аргументов контролируется вторым параметром опкода. После списка аргументов идет список переменных, в которые будут записаны возвращаемые scm-функцией значения.
[large]05F6[/large]
[c]05F6: ret 0[/c]
Выполняет возврат из scm-функции. Содержит список возвращаемых функцией значений, их количество контролируется первым параметром опкода и должно совпадать с количеством переменных-приемников в опкоде 05F5.
[large]05F7[/large]
[c]05F7: 0@ = label @label offset[/c]
Берет указатель на метку в памяти игры.
[large]05F8[/large]
[c]05F8: 0@ = var 0@ offset[/c]
Берет указатель на переменную в памяти игры.
[large]05F9[/large]
[c]05F9: 0@ = 0@ AND 0xFF[/c]
поразрядная конъюнкция.
[large]05FA[/large]
[c]05FA: 0@ = 0@ OR 0x10[/c]
поразрядная дизъюнкция.
[large]05FB[/large]
[c]05FB: 0@ = 0@ XOR 0x12345678[/c]
поразрядная исключающая дизъюнкция.
[large]05FC[/large]
[c]05FC: 0@ = NOT 0@[/c]
поразрядное логическое отрицание.
[large]05FD[/large]
[c]05FD: 0@ = 0@ MOD 10[/c]
взятие остатка от деления.
[large]05FE[/large]
[c]05FE: 0@ = 0@ SHR 8[/c]
логический сдвиг вправо.
[large]05FF[/large]
[c]05FE: 0@ = 0@ SHL 8[/c]
логический сдвиг влево.
Last edited by Alien (08-05-2010 13:32)
Offline
вместе с библиотекой идет скрипт, позволяющий сохраняться в любом месте игры (если не на миссии и не в машине) из главного меню: Game -> SAVE GAME.
Offline
При установке, когда инсталлятор спрашивает путь к игре, там написано GTA San Andreas.
Опкод enable_thread_saving пропущен намеренно?
Offline
Ч0рт, круто, оно работает?
Пока пробовать не буду, подожду впечатлений от нетерпеливых!
Offline
Опкод enable_thread_saving пропущен намеренно?
Да, намеренно. Мне показалось, что этих сохранений больше проблем, чем пользы.
Ч0рт, круто, оно работает?
Пока пробовать не буду, подожду впечатлений от нетерпеливых!
Смотри как бы не пришлось ждать слишком долго. Скриптеров на VC и 3 почти нет (надеюсь, появление CLEO для этих игр исправит эту ситуацию). Популярность этого форума невелика. Больше я нигде не публиковал.
Offline
WOW
Would be cool CLEO for III
Offline
Эт чё?! Реально что-ли? Ну круто блин!
Я даже незнаю как высказать свою радость!
Сразу зарегистрировался как узнал об этом
Обязательно опробую!
Спасибо вам умелые люди!
И вот такой вопрос (нубский скорее всего) - раньше когда была какаято серьезная ошибка в коде (сцм) то вайс зависал иногда безвозвратно (приходилось перезапускать компьютер) - с клео будет такая же петрушка???
Просто в Сан Андреасе такого не случалось (что бы вот так только "перезапуском") и если есть критическая ошибка то сразу выбивало на рабочий стол - это было удобно.
Надеюсь в вайсе теперь так-же с помощью клео???
Или это здесь вообще не причем и виноват только движок игры?
Last edited by Innocent (22-03-2010 19:36)
Offline
у меня Vice City работает стабильно. Возможно, все дело в модификациях.
Offline
Пожалуйста по подробней про нажатие клавишь, как я понимаю номера клавиш можно использовать те же, что и в справочнике билдера?
Offline
Спасибо, Alien, что не проигнорировал мою просьбу! Это круто!
Почему у меня после всех Load скринов вайс крашится с этим скриптом?
{$CLEO}
wait 0
:1
wait 10000
02AB: set_actor $PLAYER_ACTOR immunities BP 1 FP 1 EP 1 CP 1 MP 1
0223: set_actor $PLAYER_ACTOR health_to 9999
jump @1
Проверил, если оставить просто хелсы, игра работает. Может напишешь список опкодов, которые могут работать в Vice City?
Last edited by GTASA (23-03-2010 06:37)
Offline
А зачем после "immunities" какие-то букаффки, до сих пор помню, что в старых гта были одни цифры - 1 1 1 1 - например
PS и чем нравится Sanny, тем что нормальные циклы можно поставить, а не всякие джампы, и вобще, режим бога без вариантов не интересно, лучше, нажал кнопку - включился режим, ещё раз - выключился, а если при этом и сообщение будет выводится - самостоятельный такой модик-скриптик получается!
И добавить repair машины и случайную покраску!
Last edited by reute70 (24-03-2010 13:01)
Offline
Alien, спасибо большое за CLEO длЯ Vice City.
Есть вопрос. Ты в скрипте с охранением делал проверку
05E5: 1@ = game_version if 1@ == 0 // integer values else_jump @NONAME_40 1@ = 7179410 // integer values jump @NONAME_77
Её всегда следует делать или нет?
Last edited by d88 (24-03-2010 19:11)
Offline
проверка не причем, он просто использовал чтение и запись в память, а там адреса конкретные, поэтому он выяснял, какая версия.
для SA тоже есть разница, какая версия, чтоб использовать запись и чтение в память. у сани вообще очень много версий аж 6-8 версий от разработчиков, в васе там еще Steam версия всего 3.
I know everything and nothing...
Offline
круто, клео для вс
100 постов - 27 августа;
Offline
А как мне узнать, какие покоды SACLEO будут работать в VCLEO?
Offline
те опкоды, которые написаны в 1 посту будут работать в вс, остальные, которые в са - нет
100 постов - 27 августа;
Offline
Нашел список опкодов, вроде бы в этом списке все те, что работают в вайсе, но от элементарной загрузки модели оружия игры вылетает.
Список тут: http://www.gtamodding.com/index.php?tit … of_opcodes
Offline
R* использовали сквозную нумерацию опкодов во всей серии GTA 3. То есть в Vice City работают все те же опкоды, что и в San Andreas до номера 05a8 (+ некоторые свои вайсовые опкоды, обработчики которых были отключены в SA - NOP'ы).
Аналогично для GTA 3 - все опкоды до номера 0481 те же, что и в San Andreas и в Vice City.
Насколько я знаю, реверсингом скриптовой составляющей для GTA 3 и Vice City никто серьезно не занимался. INI-файлы, идущие с SB описывают большую часть опкодов не полностью или или вообще не описывают.
Offline
Alien, если опкоды работают, почему из-за этого скрипта игра виснет и крашится? Кстати, 0ab0: тоже для вайса идет?
// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007
{$VERSION 3.1.0027}
{$CLEO .cs}
//-------------MAIN---------------
wait 4000
:start
wait 0
0247: load_model #MINIGUN // вылеты начинаются здесь
038B: load_requested_models //
:1
wait 0
if
0256: player $PLAYER_CHAR defined
jf @1
//if 0ab0: 17 Ctrl
//jf @1
0223: set_actor $PLAYER_ACTOR health_to 999
01B2: give_actor $PLAYER_ACTOR weapon 66 ammo 9999 //
02AB: set_actor $PLAYER_ACTOR immunities 1 1 1 1 1 // здесь тоже вылетает
jump @1
Offline
@GTASA
Нет проверки на загруженность модели.
Не читаешь внимательно первый пост.
Вообще ничего внимательно не читаешь.
И самое главное КОМПИЛИРОВАТЬ надо в режиме VICE CITY.
У тебя скорее всего модель грузится из Сан Андреаса.
Меняешь значок внизу справа на Vice City.
Last edited by mfisto (26-03-2010 05:57)
I know everything and nothing...
Offline
А какая разница? Ну, поставил значок Vice City, ну, добавил проверку, запустил игру через F8 и все равно вылет через пять секунд. Я думаю, проблема в клео. Что в СА, что в ВС клео 4 глючит(
{$CLEO}
wait 5000
:start
wait 0
0247: load_model #MINIGUN
if
0248: model #MINIGUN available
jf @start
wait 4000
:1
wait 0
if
0256: player $PLAYER_CHAR defined
jf @1
0223: set_actor $PLAYER_ACTOR health_to 999
01B2: give_actor $PLAYER_ACTOR weapon 66 ammo 9999
02AB: set_actor $PLAYER_ACTOR immunities 1 1 1 1 1
jump @1
Offline
Слушай товарищ или как там тебя, серьезно, ты достал!
Почему пишешь оружие 66 когда в Васе миниган это 33.
Вообще прекращай тупить. Смотри внимательнее, что пишешь, о боже (((
I know everything and nothing...
Offline
Мдя, ну и что? Все равно вылет идет на загрузке модели!
Last edited by GTASA (26-03-2010 09:17)
Offline
Вообще-то в Васе это 33, а в Сане - 38. А 66 там никогда небыло!
Offline