#1 19-02-2011 01:07

Sergey81
Registered: 19-12-2008
Posts: 594

[III|VC] Cleo frame limit adjuster

Наверное все знают программу GTA:VC FPS Limit Adjuster, но загружать её перед запуском совсем не удобно. Поэтому я написал клео скрипт на замену этой программе, который позволяет устанавливать свой лимит кадров в пределах от 0 до 99 fps.
VC:

{$CLEO .cs}
0000: NOP 
05EC: 0@ = current_thread_pointer
0@ += 8
05E0: 1@ = read_memory 0@ size 1 virtual_protect 0   //0x36 default 
0@ += 1
05E0: 2@ = read_memory 0@ size 1 virtual_protect 0   //0x30 default 

05FB: 10@ = 1@ - 0x30
05FB: 12@ = 2@ - 0x30
var
10@:int                                                                       
12@:int
end
10@ *= 10
10@ += 12@


05E5: 3@ = game_version 
if 
  3@ == 0 // integer values 
then
05DF: write_memory 0x9B48EC size 1 value 10@ virtual_protect 0   //1.0
else
05DF: write_memory 0x9B48F4 size 1 value 10@ virtual_protect 0   //1.1
end
05DC: end_custom_thread

cb8679a86c0e823616529acfa105ad21.jpeg  7a42eddb814900a9e6e901f559a0bd98.jpeg 

III:

{$CLEO .cs}
0000: NOP 
05EC: 0@ = current_thread_pointer
0@ += 8
05E0: 1@ = read_memory 0@ size 1 virtual_protect 0   //0x36 default 
0@ += 1
05E0: 2@ = read_memory 0@ size 1 virtual_protect 0   //0x30 default 

var
1@:int                                                                       
2@:int
end
1@ -= 0x30
2@ -= 0x30

1@ *= 10
1@ += 2@


05E5: 3@ = game_version 
if 
  3@ == 0 // integer values 
then
05DF: write_memory 0x8F4374 size 1 value 1@ virtual_protect 0   //1.0
else
05DF: write_memory 0x8F4428 size 1 value 1@ virtual_protect 0   //1.1
end
05DC: end_custom_thread

2268166c431e477f90b4cc1a54840b53.jpeg 

По умолчанию скрипт называется 60vcframelimiter.cs/60iiiframelimiter.cs, где 60 - количество fps. Первые две цифры у скрипта должны быть числом, остальные символы не важны.
Ну и собственно для лимита в 90 фпс скрипт следует переименовать в 90vcframelimiter.cs/90iiiframelimiter.cs или 90frmlmtr.cs к примеру.

Last edited by Sergey81 (20-02-2011 13:12)

Offline

#2 19-02-2011 21:56

Sergey81
Registered: 19-12-2008
Posts: 594

Re: [III|VC] Cleo frame limit adjuster

Обновил скрипт, теперь для обоих экзешников и с правильной установкой значения лимита, ну и версия для gta3.

Last edited by Sergey81 (19-02-2011 22:34)

Offline

#3 20-02-2011 04:34

Seemann
Registered: 07-08-2006
Posts: 1,883

Re: [III|VC] Cleo frame limit adjuster

:wow: что это за огромный список однотипных условий в скрипте?

там же все сводится к двум строчкам:

0A8F: 10@ = 1@ - 0x30 // int
0A8F: 12@ = 2@ - 0x30 // int

Offline

#4 20-02-2011 11:08

Sergey81
Registered: 19-12-2008
Posts: 594

Re: [III|VC] Cleo frame limit adjuster

@Seemann - Ага, я как раз спать ложился, не увидел очевидного. Всё оптимизировал и перезалил.

Offline

#5 20-02-2011 17:35

Seemann
Registered: 07-08-2006
Posts: 1,883

Re: [III|VC] Cleo frame limit adjuster

Оптимизируем дальше. Зачем делать 2 одинаковых действия для разных символов, когда можно сделать это сразу:

05E0: 1@ = read_memory 0@ size 1 virtual_protect 0   //0x36 default 
0@ += 1
05E0: 2@ = read_memory 0@ size 1 virtual_protect 0   //0x30 default 

var
1@:int                                                                       
2@:int
end
1@ -= 0x30
2@ -= 0x30

1@ *= 10
1@ += 2@
05E0: 1@ = read_memory 0@ size 2 virtual_protect 0
1@ -= 0x3030

вычитаем 0x3030 из обоих цифр и получаем искомое число (0x3630 - 0x3030 = 60)

Но нужно учесть в таком случае,что значения фпс меньше 10 должны быть записаны с 0 в начале (05fps.cs)

Offline

#6 20-02-2011 19:31

Sergey81
Registered: 19-12-2008
Posts: 594

Re: [III|VC] Cleo frame limit adjuster

@Seemann - эмм, разве? 0x3630 - 0x3030 = 0x258 (600). Хотя если не ошибаюсь игра то считает 0x3036 - 0x3030 = 0x6 (6). Ну я специально и потестил, 6 фпс в игре и есть.

Offline

#7 20-02-2011 22:15

Seemann
Registered: 07-08-2006
Posts: 1,883

Re: [III|VC] Cleo frame limit adjuster

Да, немного поторопился. 0x600 - это не то, что нужно. Но, думаю, если помозговать, способ расчета найдется

05E0: 1@ = read_memory 0@ size 2 virtual_protect 0
000E: 1@ -= 0x3030 
0A91: 2@ = 1@ / 0x100
0A90: 3@ = 2@ * 0x100
0062: 1@ -= 3@
0012: 2@ *= 10
005A: 2@ += 1@

не очень-то оптимизировано выходит, зато меньше чтений памяти)))

Offline

#8 20-02-2011 23:29

Sergey81
Registered: 19-12-2008
Posts: 594

Re: [III|VC] Cleo frame limit adjuster

@Den_spb -

Имелось в виду, что 0x30 вычитается из каждого из двух байтов по отдельности.

Так во втором(текущем варианте) так и делается.

П.С. 0x3630 - 0x3030 = 0x600, а не 600 (windows-калькулятор в помощь)

Им и считал, правда в нём префикса 0x нету, а на hex/dec не всегда обращаешь внимание, всё перепуталось тут rolleyes 3630 - 3030 = 600 конечно же:D
@Seemann - Это было бы полезно использовать при переносе GTA 3 FOV Hack на клео, там я посмотрел, меняется адрес указателя на ms_fFOV__5CDraw, а потом по этому адресу пишется новое значение, чтоб игра стандартное не перезаписывала. Но не зная, нужно ли ещё что делать, помимо этого, скрипт писать не хочется.

Offline

#9 30-07-2011 18:01

Voodooman
Registered: 29-07-2011
Posts: 4

Re: [III|VC] Cleo frame limit adjuster

Отличные скрипты. то что доктор прописал, теперь гоняю на 60 фпс, без багов имеющихся при отвключенном лимитере.

Но вот с сан андреасом, и кучей разных ехе, большая проблема найти подобные программы или патчи, к US кряку 1.0 от холдума есть патч, с ним же работает один мемори хак, но вот с версиями 1.01 оригинальными US\UK(EU)\AU и крякнутыми (известна только UK(EU) версия, US и AU в природе не встречал), а так же оригинальной 2.0 US\UK (насчет существования AU версии не уверен, как и насчет существования кряка этой версии) и 3.0 (стим и последние D2D версии вроде) полная жопа.
Много людей были бы тебе благодарны, если бы ты хоть под все известные версии 1.0 и 1.1 сделал аналогичный скрипт, и опционально под 2.0 и 3.0 в виде ASI так ка клео их не поддерживает.
Хотя как показал мой опыт с использованием кастом кряка версии 1.0 для вайс сити, с которым твой скрипт работает без проблем, скрипт работает и с крякнутой и оригинальной версией идентично. Значит один скрипт для версии 1.01 EU(Uk) защищенной должен работать и с крякнутой версией и объем твоей работы значительно сокращается.

В общем слезно реквестирую для оригинальной и крякнутой версии Сана 1.0 и 1.01 замутить аналогичный скрипт.
Оффсет не знаю, но знаю точно что СА странно интерпретирует записанные значения ФПС - игровые 25 фпс записанны значением 30=1E, а 60 фпс выдает если использовать десятичное значение 105.
То есть тебе надо искать именно 1E.

Offline

#10 30-07-2011 19:55

Jack Daniel's
Registered: 05-07-2011
Posts: 209

Re: [III|VC] Cleo frame limit adjuster

Могу дать адреса значений фрейм лимитера и фпс в гта са, если ты это просил.

Last edited by Jack Daniel's (30-07-2011 19:57)

Offline

#11 30-07-2011 20:43

Voodooman
Registered: 29-07-2011
Posts: 4

Re: [III|VC] Cleo frame limit adjuster

Я просил модифицировать текущий скрипт чтобы он работал и в сан андреасе)) А не только адрес))
Если ты можешь подкорректировать скрипт вставив в него известные тебе адреса для евро версий 1.0 и 1.01 то это именно то что мне нужно)) Ну в любом случае если ты не можешь это сделать, то автору сабжа адреса пригодятся)

Last edited by Voodooman (30-07-2011 20:43)

Offline

Board footer

Powered by FluxBB