Заревёрсить игру ради калькулятора
Аноним18/03/24 Пнд 06:25:03№30902451
Надо зареверс инжинирить игру, чтобы узнать как там считаются цифры наносимого урона. Я знаю все входные и формулу, знаю что значения урона округляются. Пытался сделать самостоятельно, получаю погрешности, в единицу, но есть, а нужно точно единица к единице.
Знаний в программировании чуть больше, чем ноль. Пока только узнал, что реверс на ассемблере. Понимаю что задача далеко не самая простая, но мне буквально надо достать лишь код расчёта цифр. Поэтому прошу подсказки/гайда/указания как достичь конкретно этого побыстрее (вариант нанять человека на это не актуален).
>>3090245 (OP) С такой задачей даже большинство опытных разрабов быстро не справятся. Этот "код расчёта цифр" там может оказаться где угодно. Может, он вообще размазан по десятку функций в разных dll. Без чей-то помощи тебе самому придётся изучать ассемблер, условную сишку и книги по реверсингу, после чего разбираться с дизассемблерами и дебагерами. Даже если ты гений, уйдёт минимум несколько месяцев.
>>3090248 Демн...Я конечно понимал, что всё туго, но настолько... Правды ради, добавлю вопросу большу информации. В корневой папчке с игрой dll файл всего один и это стим_апи, один экзешник самой игры, остальое это png, fx, pac файлы. Я изначально не знал, что это играет важную роль. Теперь задача выглядит намного проще?
>>3120833 Не получается как-то. Пока только узнал, что во втором множителе как минимум 3 знака после запятой. На этом всё. Уже часов 10 чистых долбился.
>>3090245 (OP) Смотря от игры, но ты никогда не узнаешь чтобы прям точно.
Тебе нужно набрать статистику по урону, очень много статистики, прям ОЧЕНЬ ОЧЕНЬМ НОГО и по этой статистике уже пытаться ебануть формулы. Можно хоть перебором эти формулы подбирать, похуй впринципе, думаю найдёшь все коофциенты всех значений. Чем больше статиситке по урону - тем точнее формула.
>>3121435 У меня есть "формула", у меня есть значения входного урона, у меня есть множители. Но когда начинаются математические операции, начинается ебала, что из-за неправильного округления множителей(это пока что единственное предположение), цифры не совпадают, необходимо точное попадание единица в единицу, а у меня неточности появляются. >>3121546 Рандома нет.
>>3121666 А, то есть есть некая ситуация K - "битва X[j] против Y[k]", в ходе которой получается урон, который игра вычисляет с большой точностью, но отображается на экране округленный до какого знака?
>>3122406 У меня складывается впечатление, что тебе смешно будет от того, насколько у меня, полагаю, простая для тебя задача, учитывая, какие вопросы ты задаёшь. Ну да, полагаю, что так, округлённый до целого числа, там множители это дроби.
>>3122410 А зачем мне много экзеипляров? Инфа о множителях и цифрах урона взята с интернета. А итоговое значение Я в саму игру захожу и делаю с кода, а там итог сверяю.
>>3120833 Никогда бы не подумал, что сделать цикл из математических операций с необходимой точностью чисел настолько блять сложно. Отвал. Что Я делаю не так? Ааааааааааааааааааа, какая инфа нужна чтобы получить наводку, что Я делаю не так?
>>3125717 2015 год, на пк с 2017. Сомневаюсь. Она в каком-то смысле даже до сих пор поддерживается. А данные с инета взять было не сложно, там в целом в файлах на каждого чара стандартный текстовый файл где множители были написаны, Я их сам недавно трогал поэтому в курсе. Но то, что относится не к одному персонажу а ко всей игре, вот это жесть без понятия, что с этим делать.
>>3090245 (OP) >>3128099 ОП, собери все .exe и .dll файлы от установленной игры, залей одним архивом на файлообменник (https://dropmefiles.com/, ЯДиск, GDrive). Может что-то подскажу по реверсингу и дальнейшим действиям.
>>3128099 >Blazblue Centralfiction Какое-то говнище. Там скорее всего просто таблица заранее рассчитана и отбалансирована по ощущениям создателя. Формулы нет.
>>3128114 Там 15 гигов после архивации, если прям всё кидать...ну прям всё, т.е. кроме экзешника там только очень очень очень много .pac файлов, в которых инфа об игре, конкретно какая не знаю, но например, все статовые штуки персонажей расписаны там.
>>3129253 >Там 15 гигов после архивации, если прям всё кидать...ну прям всё Залей пока только исполняемые файлы.
> много .pac файлов, в которых инфа об игре, конкретно какая не знаю, но например, все статовые штуки персонажей расписаны там. Откуда знаешь про их содержимое? Где-то есть описание формата данных? Ну закинь несколько небольших .pac тоже для примера.
>>3130042 Глянул твой .exe. Поискал в теле файла строки с "damage" (урон), довольно много связанных имён попадается, то есть за что-то зацепиться всё же можно. Дальше дизассемблировал, поверхностно глянул несколько произвольных функций, которые ссылаются на строки с "damage". Вот несколько фрагментов кода, показавшихся мне заслуживающими внимания для дальнейшего изучения:
https://pastebin.ai/vua5lj3ddy (в начале приведён фрагмент ассемблерного кода внутри комментария / ... /, далее - декомпилированный в Си код функции) Функция ссылается на массив строк off_9EE048, который содержит названия ударов (типов урона?). Судя по всему, в зависимости от силы удара, выбирается одна из строк для дальнейшего вывода игроку. Также в данной функции происходят какие-то несложные расчёты.
https://pastebin.ai/ao3ha0pboo В функции используются строки "TrainingEtc_OneDamage", "TrainingEtc_ComboDamage", "TrainingEtc_MaxComboDamage". Из названий можно предположить, что она как-то связана с обучающим этапом. Можно изучить дальше, что вызывается из этой фукнции и какие вызывают её саму.
https://pastebin.ai/dkdae6brzq В данной функции используются строки "NirvanaCarlDamage", "NirvanaDamageBody", "NirvanaDamageBodyEnd", "NirvanaDamageLegEnd". Может ты знаешь, что за Нирвана такая, и как оно связано с уроном телу.
Основная проблема при реверсинге нативного кода в том, что зачастую отсутствует какая-либо высокоуровневая информация о структуре кода (названия функций), типах данных, названиях переменных. Дизассемблер как-то пытается отчасти это реконструировать, хотя бы поделить поток низкоуровневых инструкций на отдельные функции и построить карту вызовов, чтобы можно было анализировать ход выполнения и взаимосвязанность частей уже на более высоком уровне, но этого всё равно недостаточно для быстрого и полноценного понимания логики работы кода. Конечно, в последние годы появились декомпиляторы, которые из ассемблерных инструкций кое-как реконструируют Си-шный код, но даже с такими удобствами получается много неточностей, это лишь заготовка для последующего кропотливого анализа.
>>3130197 Ох анонче, спасибо тебе. На первый взгляд правда, всё грустно очень. >Функция ссылается на массив строк off_9EE048 Это из специального режима, к основной игре по сути никак не относится. Если Я правильно понял. >В функции используются строки "TrainingEtc_OneDamage", "TrainingEtc_ComboDamage", "TrainingEtc_MaxComboDamage" Настройки режима тренировка собсна...Там буквально весь список настроек. >Может ты знаешь, что за Нирвана такая, и как оно связано с уроном телу. Это буквально кусок кода, отвечающий за работу отдельного юнита, Я так полистал, он там полностью прописан.
На самом деле анонче, спасибо тебе, Я и близко не ожидал такой помощи. Заодно показал мне, верхушку айсберга сложности данного процесса. Позже ещё подробней гляну. И вообще ещё бы полистать что-то связанное с "multiplier", "proration". Но больше конечно, хз за что зацепиться.
В свою очередь, единственная функция, из которой она вызывается, это вот эта https://pastebin.ai/hmugxzavzs Судя по используемым в ней строкам "SPA_CounterHit", "TRI_CounterHit" (счётчики попаданий?) "Throw Counter" (счётчик киданий?) похоже как раз на обработку каких-то действий/ударов.
>>3090245 (OP) Заняться нечем? Вот вместо того чтобы пилить свою игру дальше ты хочешь полгода убить на калькулятор урона, за это время мог бы уже саму игру закончить и калькулятор свой написать
>>3133428 Ну, для своей игры, но только не той, что предмет, а то, что наречие(?). Т.е. лучше играть, лучше понять теорию, как получать больше урона и учить те цепочки, которые могут выдавать больше урона. Заниматься этим в игре в ручную крайне проблематично, только на одного персонажа у меня ушло более 50 часов и это только для самой теории, а чтобы вообще была возможность проверять её на практике, у меня ушло несколько сотен. Считать цифры самостоятельно ещё менее весёлое занятие, т.к. по идее надо считать не только урон, но есть и ещё один параметр, который Я пока что не затрагивал, т.к. мало смысла в попытках его автоматизировать, если даже урон не могу просчитать верно.
>>3134285 До меня не сразу дошло. Но видно для человека, который понятия не имеет о чём текст, Я изрёкся недостаточно понятно.
Я не делаю игру, в которую нужно играть. Я хочу улучшить свою игру, то есть то, как Я играю, то что делаю в моменте Я, а другие могут лишь наблюдать. Ну и параллельно создать что-нибудь классное прикольное автоматизирвоанное в процессе создания научится новым шуткам.
Если всё-таки появится вопрос, нахуя мне это, то ответ на него уже скорее из раздела /psy/, к сожалению. Тут же и ответ, почему Я занимаюсь этим лишь эпизодически и возможно с двух недельными и более перерывами.