Rolan 22 Опубликовано 27 Октября 2010 Автор Поделиться Опубликовано 27 Октября 2010 Вот он , xrGame от ЗП на сцене! Ссылка на комментарий
C2D 1 Опубликовано 27 Октября 2010 Поделиться Опубликовано 27 Октября 2010 (изменено) Rolan, что за реклама какого-то сайта в архиве? Вы это сделали или Колмогор? (исходник) Rolan, ясно. Изменено 27 Октября 2010 пользователем C2D Ссылка на комментарий
Rolan 22 Опубликовано 27 Октября 2010 Автор Поделиться Опубликовано 27 Октября 2010 C2D, Мы,добрый дядька Колмогор не фигурировал. Ссылка на комментарий
AK74 4 Опубликовано 27 Октября 2010 Поделиться Опубликовано 27 Октября 2010 (изменено) Доброго всем времени суток зачем начиная с ЧН многие примочки были вшиты в файлы движка? Я хоть и не имею отношения к ПЫСам, но рискну предположить что это было сделано из-за более навороченной графики. И вот почему: скрипты - это LUA, а LUA - это интерпретатор. А как известно, быстродействие не числится среди достоинств интерпретаторов. И имхо, вполне разумно, то что в предыдущих версиях игры реализовывалось скриптами (часто выполняемые функции или решили что эти функции не нуждаются в модификациях), "ввести" в код движка, а высвободившееся ресурсы CPU "отдать" графике. Какие проги выдают подобные ошибки? IDA, Periscope, Bubble Chamber, Sourcer - каждый выдал ошибки, потому что в dll-ках натыкали breakpointы Это Int 03h которые? Я далеко не хакер и даже не программер, но это меня заинтриговало. Запустил я из интересу OllyDbg, начал пошаговую отладку. Я не ставил цель разобраться в работе движка, просто было интересно нарвусь на Int03 или нет. Так вот, за полтора часа нажимания F7 (даже запустилась заставка игры), ни одного раза дебагер не попал на эти Int03! Дальше усердствовать не стал - через 4 часа идти на работу, а тут еще и спать хочется. Рискну предположить, что эти прерывания были введены чтобы вызвать вылет игры, если по каким-то причинам будет вычислен неверный адрес перехода (ведь там очень часто используются команды типа call eax). Так что только, с разрешения. Ну, можно например выложить на файлообменник, а линк озаглавить как-нибудь нейтрально, типа "мои размышления". Было бы желание. 2 Kolmogor Вы где-то писали, что многое можно вернуть в ЗП скриптами. Вам виднее, вопрос в другом - какой ценой? Вспомним AMK-мод, как я понимаю там почти весь мод построен на скриптах. Даже на нынешних компах, в случае большого скопления НПС или табунчика "бешеных электричек" наблюдаются не хилые лаги. А что будет с ЗП, если все это туда перетащить? Слайд-шоу. Другое дело, если бы удалось скажем LAU и физикой нагрузить 2-е ядро процессора (ведь сейчас многоядерников гораздо больше, чем 2 года назад). Вот тут уже можно было бы скриптов писать-не переписать. Удачи. ЗЫ. Забыл сказать что использовал xrEngine из NoDVD. Изменено 27 Октября 2010 пользователем AK74 Ссылка на комментарий
_Призрак_ 11 Опубликовано 27 Октября 2010 Поделиться Опубликовано 27 Октября 2010 (изменено) Инструкция по изменению плотности травы. Параметр меньше 0.02 не ставить - Колмогор писал что начинает лагать 1. Открываем айда 2. Открываем айда_виев 3. Теперь ищем что нам нужно найти. Нам сейчас нужно найти r__detail_density? Тогда жмем ctrl+t и вводим r__detail_density 4. Находим функцию и тщательно ее разбираем (я ее полностью разбирать не буду, а только укажу где задаются параметры: fld ds:flt_10064400 --нижнее ограничение равное 0.6 or dword_1007CACC, 8 sub esp, 8 fstp [esp+30h+var_2C] mov ecx, offset unk_1007CA9C fld ds:flt_10064380 --верхнее ограничение равное 0.2 fstp [esp+30h+var_30] push offset aSs ; "ЪЩЩ>" push offset aR__detail_dens ; "r__detail_density" call ds:??0CCC_Float@@QAE@PBDPAMMM@Z ; CCC_Float::CCC_Float(char const *,float *,float,float) push offset sub_1005E080 ; void (__cdecl *)() call _atexit add esp, 4 Если вы заметили, то что бы трава стала плотней нужно уменьшить параметр, а что-бы травы стало меньше нужно параметр увеличить 5. Нам нужно увеличить плотность травы: следовательно нужно изменить верхнее ограничение. Как это сделать? Есть 3 варианта: Первый и самый логичный вариант: изменить переменную которая задает. Но тут есть небольшой подвох на котором я попался. Этой переменной может пользоваться не одна функция, а несколько. И не ясно что вы можете сломать, поменяв одну циферку в переменной... Второй: взять другую уже существующую переменную. Хороший вариант которым я и воспользовался. Но и тут есть недочет - переменных в ддлке не так уж и много и можно просто не найти нужную Третий: создать переменную. Отличный вариант. Единственный минус - я не знаю как это сделать Я пошел по второму пути. Два раза шелкнув на ds:flt_10064380 айда отправила меня в дебри под названием .rdata. Там я нашел переменную которая называлась - flt_1006452C и которая имела значение 0.0720999 Вообще-то, как я понял, flt_1006452C - не является названием переменной. Это так сказать сборка из 2 показателей - (тип числа)_(оффсет) В нашем случае это число типа float которое находится в 1006452C. Ну чтож приступим к редактированию! 6. Отправляем в самое начало файла. Как? Сверху есть что-то типа статус бара - строка состоящая из синего,серого,черного цвета. Нажимаем там в любом месте мышкой и ведем влево до конца 7. Опять ищем r__detail_density. Находим в этой функции fld ds:flt_10064338. Дальше самое интересное. Жмем на ХЕКС_ВИЕВ и там у нас выделяются какие-то цифры. Это наше 10064338 только написано наоборот. Сравните: 38 43 06 10 10 06 43 38 Похоже, не правда? Начинаем редактировать. нам нужно поменять 4338 на 452C т.к. в этом и есть различие. Жмем правой кнопкой мыши на этих цифрах и выбираем пункт Edit. Меняем 38 43 на 2С 45. Дальше жмем где нибудь в коде. Это нужно сделать обязательно. После этого жмем правой кнопкой мыши и выбираем commit changes. Но айда не меняет исходный файл. В нашем случае мы можем только создать файл изменений. Делается это так - Файл - Produce file - Create DIF file. Назовем его test. DIF файл можно открыть при помощи блокнота и посмотреть что вы сделали. Теперь так сказать соединит этот файл и дллку. Это можно сделать при помощи bpatch. Качаем и смотрим и запускаем bpatch.cmd. Я думаю что вы сможете его изменить сами если нужно будет. Там все элементарно. Огромное спасибо Kolmogor'у и malandrinus'у. Если бы не они, я бы ничего не сделал. Спасибо вам еще раз Спасибо и Ролану с которым я очень много беседовал и тоже узнал много чего Кстати у меня вопрос. Как создать новую переменную? Колмогор сказал что либо найти пустое место, либо создать новый сектор. Пытаться найти пустое место опасно - оно может быть зарезервированно. А как сделать новый сектор? Изменено 27 Октября 2010 пользователем _Призрак_ 1 Freedom Ссылка на комментарий
Rolan 22 Опубликовано 27 Октября 2010 Автор Поделиться Опубликовано 27 Октября 2010 _Призрак_, Добавил в шапку. Очень хорошая статья получилась. Ссылка на комментарий
Malandrinus 615 Опубликовано 28 Октября 2010 Поделиться Опубликовано 28 Октября 2010 Rolan, Вот он , xrGame от ЗП на сцене! Я ценю ваши старания, но давайте таки определимся. Это не исходники. Исходники - это то, что писали разработчики, и они их никому не давали. А это - сгенерированный идой текст. Его нетрудно получить самому. Загружаем в IDA pro вашу dll и делаем File -> Produce File -> Create C File... Толку от этого текста чуть менее, чем ничего. Потеряна информация о типах, точных сигнатурах и именах функций, именах аргументов функций, шаблонах C++ и ещё куча всего. Существенная часть функций не распознана (поскольку ссылки на них сделаны не вызовами, а косвенные). Комментариев в этом тексте естественно нет (хотя не факт, что они и в исходниках были =). Отсутствует деление на файлы (а между прочим в одном только xrgame.dll файлов исходного текста несколько тысяч). Читать этот текст и извлечь из него полезную информацию невозможно. Это не значит, что декомпилятор hex-ray из IDA бесполезен. Напротив, полезен весьма, но использовать его имеет смысл точечно. Вот нашли функцию, которая делает что-то (и вы знаете что именно), тогда уже именно эту функцию и пытаетесь декомпилить, чтобы понять, как именно она делает то, что делает. И это не избавит от необходимости смотреть в окно дизассемблера, уж поверьте. С практической точки зрения более интересным и информативным представляется разбор файлов билда MP 2947, которые шли с отладочными дампами. Насчёт законности. Вся эта возня не более и не менее законна, нежели прочая деятельность модостроителей (т.е. вообще говоря незаконна, почитайте лицензию к игре, параграф 1). AK74, рискну предположить что это было сделано из-за более навороченной графики. И вот почему: скрипты - это LUA, а LUA - это интерпретатор. А как известно, быстродействие не числится среди достоинств интерпретаторов. И имхо, вполне разумно, то что в предыдущих версиях игры реализовывалось скриптами "ввести" в код движка, а высвободившееся ресурсы CPU "отдать" графике. Для начала, Lua здесь используется в связке с JIT копилятором. Т.е. интерпретируется текст только при первом исполнении, затем уже исполняется скомпилированный код. Такой же принцип используется в исполняемой среде .NET. Естественно, это помедленнее будет, чем код движка, но не так уж драматически медленней. И потом на скриптовую часть не ложится большая нагрузка (естественно до тех пор, пока какой-либо новичок не начнёт делать при каждом апдейте перебор всех объектов =). Потом, утверждение о "переносе функций из скриптов в движок" - это ерунда из того-же разряда, что и разговоры о протекторах и прерываниях. Я утверждаю, что движок в той части, что соответствует xrgame.dll (т.е. вся игровая логика) практически мало изменился за все три игры. В лучшем случае была проведена работа по исправлению ошибок и может быть некоторой оптимизации. Практически все функции, которые были экспортированы в ЧН и ЗП по сравнению с ТЧ - это функции, которые там имелись изначально (т.е. ещё в ТЧ), просто были экспортированы в Lua и даны в распоряжение скриптёров. Т.е. выходит картина с точностью до наоборот - в новых версиях движка скриптёру предоставляются потенциально более широкие полномочия. Это Int 03h которые? Вот ведь... Господа, есть форумы и тьма их, на которых только тем и занимаются, что обсуждают ломание всяких защит и прочее в этом роде. Но обсуждать это здесь, при том, что никаких защит тут нет - это уже не смешно даже. Другое дело, если бы удалось скажем LAU и физикой нагрузить 2-е ядро процессора Это к сожалению невозможно. Совсем. Всё, что можно сделать в этом направлении, уже сделали разработчики. _Призрак_, Вообще-то, как я понял, flt_1006452C - не является названием переменной. Это так сказать сборка из 2 показателей - (тип числа)_(оффсет) В нашем случае это число типа float которое находится в 1006452C. Это всё-таки именно имя, не более. Только учтите, что в IDA есть только адреса ячеек памяти, поэтому это просто метка адреса. Имя метки IDA определяет при первичном анализе. Если по каким-то причинам IDA сочла, что по этому адресу лежит 4-х байтовый float, то имя составляется как flt_virtual_address. В дальнейшем вы можете изменить как это имя, так и интерпретацию содержимого памяти по этому адресу. как сделать новый сектор? Есть замечательная утилита PE Tools, которая позволяет это сделать. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
nuklia 0 Опубликовано 28 Октября 2010 Поделиться Опубликовано 28 Октября 2010 Народ, может все-таки подскажет кто, почему в HEX View может быть недоступно редактирование? (IDA Pro 5.2.0.908 + Hex-Rays 1.0) В контекстном меню Hех View только Сopy и Sunhronize winh -> IDA View, и никакого намека на Data format" -> "Single Float (32 bit) Ссылка на комментарий
_Призрак_ 11 Опубликовано 28 Октября 2010 Поделиться Опубликовано 28 Октября 2010 Попробуй нажать на F(для чисел) и 1 для перехода обратно в хекс Freedom Ссылка на комментарий
nuklia 0 Опубликовано 28 Октября 2010 Поделиться Опубликовано 28 Октября 2010 _Призрак_, никакой реакции! Ссылка на комментарий
Malandrinus 615 Опубликовано 28 Октября 2010 Поделиться Опубликовано 28 Октября 2010 nuklia, может версия не та? Попробуй найти 5.5 Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
_Призрак_ 11 Опубликовано 28 Октября 2010 Поделиться Опубликовано 28 Октября 2010 Я пользуюсь скачанной с рутрекера IDA Pro Advanced 5.5 with Hex-Rays 1.1 Freedom Ссылка на комментарий
AK74 4 Опубликовано 28 Октября 2010 Поделиться Опубликовано 28 Октября 2010 Доброго всем времени суток. AK74, И потом на скриптовую часть не ложится большая нагрузка (естественно до тех пор, пока какой-либо новичок не начнёт делать при каждом апдейте перебор всех объектов =). Намек понял , но я даже еще не лез в скрипты. Впрочем, бог с нами, с новичками. Возьмем AMK-мод: 1 Выброс, как я понимаю, чисто скриптовое "дитя", т.к в оригинале его не было. Свалка, Депо: 27 НПС. Во время Выброса, практически невозможно даже шевелится. 2. В том же Депо, при отсутствии Выброса, никакого дискомфорта не ощущается. Даже в перестрелках с бандюками. 3. Набившая всем оскомину Электрохимера - тоже скрипты, как я понимаю. Стайка в 10 штук, при заходе на Радар, практически парализовала игру. 4. Возле Барьера носятся гораздо большее количество стандартных зверей (в том числе и простые химеры), но фризов не возникает (кроме моментов их спавна). Разница между ситуациями 1 и 2 - работа скриптов Выброса и скриптов заставляющих НПС реагировать на Выброс. Разница между ситуациями 3 и 4 - собственно скрипты ЭХ. 5. Теперь ЗП. Как я понимаю, здесь Выброс и реакция НПС на него "зашиты" в движок. Никакого дискомфорта во время Выброса я не заметил, хотя сама игра более требовательна к ресурсам CPU. 6. Подключил к АМК-ЗП локи из ЧН(локи не заселял), восстановил прежние(ЧН) левелченджеры, накатил "ржавчину" и постэффекты. Спавнюсь на ТД - ровное прохождение, не единого лага. Прогулки по локам ЧН тоже ровные. Перехожу с Кордона на Болота, наваливаются 3 соски, еле отмахнулся. Не потому что я тормоз, лаги мешали прицелиться. Таки в чем разница, между описанными выше ситуациями? По моему,все таки в скриптах(не в качестве, а в их наличии и количестве). Поймите правильно, это не критика мода и не тупое желание поспорить. Я просто пытаюсь понять причины. обсуждать это здесь, при том, что никаких защит тут нет - это уже не смешно даже. Но именно это я и пытался объяснить. Что если человек именно в Int03 увидел протекторы, то оно не страшнее пугала огородного. 2 ALL. В простых случаях, для определения чем упакована (не путать с защитой) та или иная прога, я пользуюсь сканером DrWeb, с включением детального лога. 2 Модераторам. Не считайте рекламой, просто обмен опытом. Могут ли другие антивирусы дать такого же рода информацию - не знаю, не пользовался. И это не удивительно, ведь именно программеры антивирусных компаний и являются одними из лучших спецов по реверс-инжениренгу(надеюсь, страстно желающим повозится в кишках игры, намек ясен?). Это к сожалению невозможно. Совсем. Всё, что можно сделать в этом направлении, уже сделали разработчики. "Какая жаль" (с) М.Задорнов. 1 Ссылка на комментарий
_Призрак_ 11 Опубликовано 28 Октября 2010 Поделиться Опубликовано 28 Октября 2010 (изменено) AK74 Тут смотря как сделать выброс. Дело в том что через двигатель можно сделать все что угодно - начиная от супер-пупер выброса и заканчивая просто передачей денег, ведь двигатель - это набор циферок. А скрипты могут тоже многое, но не всегда то что нужно. Поэтому используются обходные пути, которые тоже потребляют ресурсы. Поэтому если сравнивать падение FPS при выбросе в ЗП и в ТЧ - ЗП явно будет лидером. Но если сравнивать какую-то простую вещь - вывод 100 строк в лог - разница я думаю будет небольшая Кстати у меня получилось создать свой сегмент в дллке сталкера и сбросить туда нужные мне переменные. Скоро допишу мою статью Изменено 28 Октября 2010 пользователем _Призрак_ Freedom Ссылка на комментарий
nuklia 0 Опубликовано 28 Октября 2010 Поделиться Опубликовано 28 Октября 2010 malandrinus, _Призрак_, спасибо, в 5.5 на первый взгляд все ОК. Ссылка на комментарий
AK74 4 Опубликовано 28 Октября 2010 Поделиться Опубликовано 28 Октября 2010 2 _Призрак_ Наверное Вы не поверите , но об этом я догадываюсь. Речь не Выбросах, ЭХ и пр, как таковых. И даже не о качестве написания скриптов. Те случаи что я приводил, кроме 5 и 6 конечно , я привел лишь в качестве всем известных примеров, когда скрипты могут потреблять не малое количество ресурсов. Ссылка на комментарий
nuklia 0 Опубликовано 29 Октября 2010 Поделиться Опубликовано 29 Октября 2010 Попробовал на ЗП плотность травы увеличивать, так-же нашел и указал другую переменную со значением dd 0.2 - плотность судя по движку плотности травы увеличилась процентов на 30. Ковырял xrRender_r1 (идет для статического освещения). А родная переменная несколько раз применяется в других функциях(проверяется установкой курсора на имени переменной fit_xxxxxxx и нажатием клавиши Х) Вот только не нашел чтото bpatch - dll-ку пришлось править в НЕХ-ке - благо в файле отличий указан адрес и что на что менять, может кто даст ссылку на bpatch. Ссылка на комментарий
_Призрак_ 11 Опубликовано 29 Октября 2010 Поделиться Опубликовано 29 Октября 2010 у меня вроде в инструкции висела ссылка на мой (точнее malandrinus'а bpatch) http://ifolder.ru/19981015 Freedom Ссылка на комментарий
Malandrinus 615 Опубликовано 30 Октября 2010 Поделиться Опубликовано 30 Октября 2010 (изменено) _Призрак_, точнее malandrinus'а bpatch Не моя =) Это вроде бы известная GNU утилита. Хотя я о ней не знал сам, пока не потребовалось найти, чем применять dif файлы. Изменено 1 Ноября 2010 пользователем malandrinus Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
_Призрак_ 11 Опубликовано 31 Октября 2010 Поделиться Опубликовано 31 Октября 2010 Добавление к моей инструкции. Иногда требуется создать новую переменную. Но как это сделать? Искать неиспользованное место в дллке? Опасно. Это место может быть зарезервировано. Что же делать? Есть выход - создать свой сектор, куда мы будем пихать свои данные Для создание нового сектора нам потребуется программка Stud PE. Колмогор и malandrinus рекомендовали PE tools, но к сожалению у меня при задании RAM памяти дллка больше не читалась. Итак: 1. Открываем Stud PE 2. file -> Open PE file -> выбираем нашу дллку 3. Выбираем вкладку Sections 4. Правой кнопкой мыши - New section 5. Выбираем имя секции (лучше не понтоваться и выбрать 4-5 значное имя без чисел) 6. Выбираем виртуал и рам сайз. С размером лучше не шаманить - для начала хватит 0000001 7. В селектион дата ставим fill section with NULL bytes и жмем add Теперь как работать с новой переменной. В айда в конце файла находим нашу секцию. Правой кнопкой мыши - Data В Хексе вводим любое число. Я ввел 04 02 01 3C Перемещаемся в айда_виев и видем что-то типа такого: .pmod:10086000 db 4 .pmod:10086001 db 2 .pmod:10086002 db 1 .pmod:10086003 db 3Ch ; < Для того что-бы айда поняла что это одно число жмем 2 раза d. Ну а дальше для красоты жмем Edit -> Operant type ->Number -> Floating point. Дальше ссылаемся на нашу переменную откуда нужно и все. Freedom Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти