#1 21-03-2010 21:19

Alien
Registered: 12-10-2008
Posts: 564

CLEO для GTA Vice City

Собственно, моя новая разработка. Вернее старая, но для новой игры. Вернее для старой игры.
Короче говоря, перетащил движок 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

#2 21-03-2010 21:23

Alien
Registered: 12-10-2008
Posts: 564

Re: CLEO для GTA Vice City

вместе с библиотекой идет скрипт, позволяющий сохраняться в любом месте игры (если не на миссии и не в машине) из главного меню: Game -> SAVE GAME.

Offline

#3 22-03-2010 06:20

Seemann
Registered: 07-08-2006
Posts: 2,156

Re: CLEO для GTA Vice City

При установке, когда инсталлятор спрашивает путь к игре, там написано GTA San Andreas.

Опкод enable_thread_saving пропущен намеренно?

Offline

#4 22-03-2010 10:03

reute70
From: Средняя Волга
Registered: 22-08-2009
Posts: 182

Re: CLEO для GTA Vice City

Ч0рт, круто, оно работает?
Пока пробовать не буду, подожду впечатлений от нетерпеливых!  wink

Offline

#5 22-03-2010 10:51

Alien
Registered: 12-10-2008
Posts: 564

Re: CLEO для GTA Vice City

Seemann wrote:

Опкод enable_thread_saving пропущен намеренно?

Да, намеренно. Мне показалось, что этих сохранений больше проблем, чем пользы.

reute70 wrote:

Ч0рт, круто, оно работает?
Пока пробовать не буду, подожду впечатлений от нетерпеливых!  wink

Смотри как бы не пришлось ждать слишком долго. Скриптеров на VC и 3 почти нет (надеюсь, появление CLEO для этих игр исправит эту ситуацию). Популярность этого форума невелика. Больше я нигде не публиковал.

Offline

#6 22-03-2010 18:42

Jur1z
Registered: 08-03-2010
Posts: 17

Re: CLEO для GTA Vice City

WOW
Would be cool CLEO for III good

Offline

#7 22-03-2010 19:00

Innocent
From: Main SCM
Registered: 22-03-2010
Posts: 20

Re: CLEO для GTA Vice City

Эт чё?! Реально что-ли?  Ну круто блин!
Я даже незнаю как высказать свою радость!
Сразу зарегистрировался как узнал об этом

Обязательно опробую!
Спасибо вам умелые люди!


И вот такой вопрос (нубский скорее всего) - раньше когда была какаято серьезная ошибка в коде (сцм) то вайс зависал иногда безвозвратно (приходилось перезапускать компьютер) - с клео будет такая же петрушка???

Просто в Сан Андреасе такого не случалось (что бы вот так только "перезапуском") и если есть критическая ошибка то сразу выбивало на рабочий стол - это было удобно.

Надеюсь в вайсе теперь так-же с помощью клео???

Или это здесь вообще не причем и виноват только движок игры?

Last edited by Innocent (22-03-2010 19:36)

Offline

#8 22-03-2010 21:50

Alien
Registered: 12-10-2008
Posts: 564

Re: CLEO для GTA Vice City

у меня Vice City работает стабильно. Возможно, все дело в модификациях.

Offline

#9 22-03-2010 22:05

Kostyan
Registered: 27-09-2009
Posts: 94

Re: CLEO для GTA Vice City

Пожалуйста по подробней про нажатие клавишь, как я понимаю номера клавиш можно использовать те же, что и в справочнике билдера?

Offline

#10 23-03-2010 05:59

GTASA
Registered: 13-09-2008
Posts: 476

Re: CLEO для GTA Vice City

Спасибо, 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

#11 23-03-2010 07:56

reute70
From: Средняя Волга
Registered: 22-08-2009
Posts: 182

Re: CLEO для GTA Vice City

А зачем после "immunities" какие-то букаффки, до сих пор помню, что в старых гта были одни цифры - 1 1 1 1 - например

PS и чем нравится Sanny, тем что нормальные циклы можно поставить, а не всякие джампы, и вобще, режим бога без вариантов не интересно, лучше, нажал кнопку - включился режим, ещё раз - выключился, а если при этом и сообщение будет выводится - самостоятельный такой модик-скриптик получается!

И добавить repair машины и случайную покраску! crazy

Last edited by reute70 (24-03-2010 13:01)

Offline

#12 24-03-2010 19:10

d88
Registered: 15-12-2009
Posts: 254
Website

Re: CLEO для GTA Vice City

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

#13 24-03-2010 19:47

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: CLEO для GTA Vice City

проверка не причем, он просто использовал чтение и запись в память, а там адреса конкретные, поэтому он выяснял, какая версия.
для SA тоже есть разница, какая версия, чтоб использовать запись и чтение в память. у сани вообще очень много версий аж 6-8 версий от разработчиков, в васе там еще Steam версия всего 3.


I know everything and nothing...

Offline

#14 25-03-2010 08:00

PIT
Registered: 08-09-2008
Posts: 224

Re: CLEO для GTA Vice City

круто, клео для вс smile


100 постов - 27 августа;

Offline

#15 25-03-2010 10:30

GTASA
Registered: 13-09-2008
Posts: 476

Re: CLEO для GTA Vice City

А как мне узнать, какие покоды SACLEO будут работать в VCLEO?

Offline

#16 25-03-2010 10:34

PIT
Registered: 08-09-2008
Posts: 224

Re: CLEO для GTA Vice City

те опкоды, которые написаны в 1 посту будут работать в вс, остальные, которые в са - нет


100 постов - 27 августа;

Offline

#17 25-03-2010 10:48

GTASA
Registered: 13-09-2008
Posts: 476

Re: CLEO для GTA Vice City

Нашел список опкодов, вроде бы в этом списке все те, что работают в вайсе, но от элементарной загрузки модели оружия игры вылетает.

Список тут: http://www.gtamodding.com/index.php?tit … of_opcodes

Offline

#18 25-03-2010 11:15

Alien
Registered: 12-10-2008
Posts: 564

Re: CLEO для GTA Vice City

R* использовали сквозную нумерацию опкодов во всей серии GTA 3. То есть в Vice City работают все те же опкоды, что и в San Andreas до номера 05a8 (+ некоторые свои вайсовые опкоды, обработчики которых были отключены в SA - NOP'ы).
Аналогично для GTA 3 - все опкоды до номера 0481 те же, что и в San Andreas и в Vice City.
Насколько я знаю, реверсингом скриптовой составляющей для GTA 3 и Vice City никто серьезно не занимался. INI-файлы, идущие с SB описывают большую часть опкодов не полностью или или вообще не описывают.

Offline

#19 25-03-2010 13:08

d88
Registered: 15-12-2009
Posts: 254
Website

Re: CLEO для GTA Vice City

А есть какая-нибудь справка для скриптинга в ВС? Я имею в виду чтоб были списки анимаций, рarticle эффектов и т.д. В справке СБ этого нет.

Offline

#20 26-03-2010 02:58

GTASA
Registered: 13-09-2008
Posts: 476

Re: CLEO для GTA Vice City

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

#21 26-03-2010 05:57

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: CLEO для GTA Vice City

@GTASA

Нет проверки на загруженность модели.
Не читаешь внимательно первый пост.
Вообще ничего внимательно не читаешь.
И самое главное КОМПИЛИРОВАТЬ надо в режиме VICE CITY.
У тебя скорее всего модель грузится из Сан Андреаса.
Меняешь значок внизу справа на Vice City.

Last edited by mfisto (26-03-2010 05:57)


I know everything and nothing...

Offline

#22 26-03-2010 08:16

GTASA
Registered: 13-09-2008
Posts: 476

Re: CLEO для GTA Vice City

А какая разница? Ну, поставил значок 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

#23 26-03-2010 08:38

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: CLEO для GTA Vice City

Слушай товарищ или как там тебя, серьезно, ты достал!
Почему пишешь оружие 66 когда в Васе миниган это 33.
Вообще прекращай тупить. Смотри внимательнее, что пишешь, о боже sad(((


I know everything and nothing...

Offline

#24 26-03-2010 08:52

GTASA
Registered: 13-09-2008
Posts: 476

Re: CLEO для GTA Vice City

Мдя, ну и что? Все равно вылет идет на загрузке модели!

Last edited by GTASA (26-03-2010 09:17)

Offline

#25 26-03-2010 09:15

~AquaZ~
Registered: 01-03-2010
Posts: 726

Re: CLEO для GTA Vice City

Вообще-то в Васе это 33, а в Сане - 38. А 66 там никогда небыло!

Offline

Board footer

Powered by FluxBB