You are not logged in.
Pages: 1
Наверное все знают программу 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
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
По умолчанию скрипт называется 60vcframelimiter.cs/60iiiframelimiter.cs, где 60 - количество fps. Первые две цифры у скрипта должны быть числом, остальные символы не важны.
Ну и собственно для лимита в 90 фпс скрипт следует переименовать в 90vcframelimiter.cs/90iiiframelimiter.cs или 90frmlmtr.cs к примеру.
Last edited by Sergey81 (20-02-2011 10:12)
Offline
Обновил скрипт, теперь для обоих экзешников и с правильной установкой значения лимита, ну и версия для gta3.
Last edited by Sergey81 (19-02-2011 19:34)
Offline
:wow: что это за огромный список однотипных условий в скрипте?
там же все сводится к двум строчкам:
0A8F: 10@ = 1@ - 0x30 // int 0A8F: 12@ = 2@ - 0x30 // int
Offline
@Seemann - Ага, я как раз спать ложился, не увидел очевидного. Всё оптимизировал и перезалил.
Offline
Оптимизируем дальше. Зачем делать 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
@Seemann - эмм, разве? 0x3630 - 0x3030 = 0x258 (600). Хотя если не ошибаюсь игра то считает 0x3036 - 0x3030 = 0x6 (6). Ну я специально и потестил, 6 фпс в игре и есть.
Offline
Да, немного поторопился. 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
@Den_spb -
Имелось в виду, что 0x30 вычитается из каждого из двух байтов по отдельности.
Так во втором(текущем варианте) так и делается.
П.С. 0x3630 - 0x3030 = 0x600, а не 600 (windows-калькулятор в помощь)
Им и считал, правда в нём префикса 0x нету, а на hex/dec не всегда обращаешь внимание, всё перепуталось тут 3630 - 3030 = 600 конечно же:D
@Seemann - Это было бы полезно использовать при переносе GTA 3 FOV Hack на клео, там я посмотрел, меняется адрес указателя на ms_fFOV__5CDraw, а потом по этому адресу пишется новое значение, чтоб игра стандартное не перезаписывала. Но не зная, нужно ли ещё что делать, помимо этого, скрипт писать не хочется.
Offline
Отличные скрипты. то что доктор прописал, теперь гоняю на 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
Могу дать адреса значений фрейм лимитера и фпс в гта са, если ты это просил.
Last edited by Jack Daniel's (30-07-2011 16:57)
Offline
Я просил модифицировать текущий скрипт чтобы он работал и в сан андреасе)) А не только адрес))
Если ты можешь подкорректировать скрипт вставив в него известные тебе адреса для евро версий 1.0 и 1.01 то это именно то что мне нужно)) Ну в любом случае если ты не можешь это сделать, то автору сабжа адреса пригодятся)
Last edited by Voodooman (30-07-2011 17:43)
Offline
Pages: 1