1
Ромхакинг и программирование / [SMD] Неполноценный хак FIFA 96
« : 22 Март 2024, 20:45:03 »Отремонтировал остальные турниры. Теперь все турниры работают. Правда, особо их не тестил.Если все работает, останется только за графику взяться.
В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.
Отремонтировал остальные турниры. Теперь все турниры работают. Правда, особо их не тестил.Если все работает, останется только за графику взяться.
Нет, она работала, до того как я внес составы лиг из FIFA 98.Игроки не работали? Или срам не работал?
Но, естественно, я не менял все значения.Но, когда мне нужны были адрес размера игроков, ты ведь сразу нашел все 4 каким-то образом. Возможно остальные следует поискать таким же способом, чтобы потом не думать, что ты что-то сломал? Но сами лиги сейчас вроде бы работают, только с отображением команд проблема.
в FIFA 98, есть команда add.l d0,d0. А в FIFA 99 такой команды естественно нетЕсли я бы понимал, за что она отвечает, сказал бы, нужна она или нет. Так-то я все турниры проходил, и в 96 и в 98. Возможно и без неё можно обойтись.
Скорее всего я не все адреса изменил.Чёрт возьми, не удивительно. Только что прошелся по адресам размера на блок игроков, там везде 0DEF, и действительно, почему это система чтения игроков сломалась? Да уж
Sram был настроен на область после рома, т.е. после 2 мегабайт, я его перенастроил на область после 3 мегабайт. Адрес 0x300000-30ffff.Почему тогда он не сохраняется? Не появляется даже сам файл. Введенные коды для турниров тоже не запоминает.
Например, нужно научить игру понимать данные из fifa 98. Т.е. почти все тоже самое, что было проделано для friendly режима, но плюс могут быть дополнительные тонкости, связанные с турниром.Сейчас вспомнил, что состав турнамента в World встроенный, т.е. все команды прописаны заранее. При этом Champions Cup команды из World не читает. Так что там, скорее всего, действительно надо подправлять, но не думаю, что там что-то сильно отличается. Но это тоже будет полезно, можно будет лигу чемпионов нормальную добавить.
Потому что я весь необходимый код поправил для Friеndly режима.Ты хочешь сказать, что ты специально отключил sram?
А остальные режимы я не трогал. Там тоже много чего надо менять.Например?
Терзают смутные сомнения уже насчет переносов блоковЕё доработать можно, Sharpnull же её тебе писал
Также во время игры неправильно отображается название второй команды.Там не вторая команда сломана. Все команды, после PSV Eindhoven перестают читаться, т.е. они читаются в списках, но не отображаются во время матча. Начиная с Pahang идут кастомные команды, что как бы намекает. Возможно еще где-то размер не указан. С игроками, подозреваю, такая же ерунда, но это я сам сейчас посмотрю.
Игра работает во Friendly режиме.Я даже знаю почему. У тебя запись в sram не работает. Сейчас не работают кастомные команды и трансферы сломаны. Кастомные игроки не запоминаются. Все чемпионаты, когда только формируются, уже пишутся в sram. Формат команд поменялся и ,скорее всего, поэтому режимы лиг не работают.
Я не переносил названия лиг, поэтому названия лиг не соответствуют командам.Я знаю, где это править, но там тоже головняк. Потом надо будет про это отдельно расписать.
Однако, это не мешает им пользоваться кому-то еще.Ты её в публичный доступ не выкладывал. Но так-то она все равно бесполезна станет, как только блок с игроками перенести.
Или в этом контексте есть какой-то ограничивающий фактор?
Этот тестовый код уже может изменить и поведение игроков, по идее.Ну уж действительно
Вообще, оглядываясь назад, уже можно констатировать то, как много мы все сообща сделали в этом непростом деле:Я картинки со странами всё никак не заменю
- создан редактор для редактирования параметров, амплуа и имен игроковтебе его делали за деньги и он для твоего личного пользования.
созданы инструкции для редактирования цветов команд и формы игроковОни в открытом виде были, их, разве что, редактировать не очень удобно, а так...
Ты ожидал получить другое расположение?Если в свойствах команды ввести номер несуществующей формации, то все игроки, кроме вратаря, исчезнут.
Пункт 3 же.Он фильтрацию начинает. Если уже нашел нужное, нужно бесконечно 3, что ли, жать?
Я перенес составы команд из 98 в 99(96).Если я правильно понял, то ты взял блок составов из 98, перенес в 96 и там поменял формат записи для ид команд т.е. вместо 86 00 у команды стало 00 86. Но команд в 98 больше, чем в 96, там и 0101 ид есть.
Ну, допустим, я перенес из FIFA 98 составы команд в конец рома и подправил код.Что все это значит?
Но вот с составами лиг уже посложнее.Если все таки речь о переносе из 98 в 96, то лиг в 98 больше и они больше размера занимают. Но я, все таки, пока не до конца понимаю о чем речь. Ты именно 98 разбираешь?
Инвертируем её и что мы должны увидеть в игре? Какой эффект?Скорее мы должны увидеть, что все команды исчезли, (кроме кастомных). Да, за это могут отвечать другие инструкции, но в данном случае остается только перебирать их все.
В игре же можно промотать все эти 239 команд в меню?Нет.
Их надо все 4 менять. Это всё связанно. Потому что созданные игроки через меню Create player получают нумерацию начиная с def. Если их не менять, то возможно, вместо этих игроков у тебя будут игроки, которых ты добавил через хекс эдиторТы имеешь ввиду Custom Players? Я менял эти параметры поочередно, изменения почти незаметные были. Я так понял, что кастомные игроки получают айдишники вслед за обычными.
90feaВот это помогло. Странно но я DEF на DF0 тоже массово менял, почему у меня тогда не получилось?
Надо не размер блока с игроками искать, а индекс количества игроков. Т.е. сравниваться будет индекс игрока и ограничение. Допустим, у тебя количество игроков def, а максимальный индекс dee. Значит, будет сравнение не превышает ли индекс игрока количества игроков. Или по другому говоря, имеется массив с игроками. И делается проверка не выходит ли индекс за границы массива. Т.е. тебе надо искать 0DEF, а не размер блока.Ага, я тоже так подумал и стал искать по всему рому 0DEE и 0DEF (все таки 0 ид считается, или нет?) Таких байтов оказалась куча. Ну я и решил автоматически заменить все 0DEE и 0DEF сразу по всем 470 адресам, или сколько их там было...
Глитчер сможет найти только один из этих указателей.Я имею ввиду, найти инструкцию, отвечающую за формат чтения именно этого блока
Без нулей иксы или игреки встанут на нечётный адрес и Сега не сможет получить к ним доступ. Т.е. для выравнивания.Но я ведь не только за 96 говорю. Еще раз:
А поясни, если не сложно, что там за баг.После пробивания пенальти, если ты промазал, твой игрок стоит как вкопаный секунд 5 и даже кнопка B не работает. Как следствие - невозможно сделать добивающий удар = потерянный гол
Кстати, забавный момент через Глитчер нашел. Жаль только, что не записал видео.Может ты в тактику залез, есть же long ball. А формации искать пробовал? Те которые 4-4-2 и т.д.
В каком-то из проходов программы наткнулся видимо на команду, которая должна ограничивать время дриблинга футболистов.
Пенальти в игре ботов - вещь достаточно редкаяА я не про игру ботов говорю. Или кроме ботов никто в эту игру играть не должен?
И каких либо прочих отрицательных отклонений после внесенного изменения в код игры я пока не заметилВ этом и проблема. Ты что-то меняешь и при этом не понимаешь что конкретно.
Да, Глитчер пока не может такое изменить, он только инвертирует.Кстати, где он? И ты говорил новая версия скоро будет. Я с ней смогу спрайты стран заменить?
Но предлагать не считать багом то, что мешает, прерывает игру, образуя цикличную петлюЯ сказал что баг - не сам бросок мяча, а то, что на позиции игрока не хватает, читай внимательно.
Честно говоря, я не понимаю Jestera. Вернее, я только понимаю, что ему это не интересноПоймешь, когда узнаешь, что починив один баг, ты получил 2 новых, потому что возможно окажется, что все элементы поведения ИИ взаимосвязаны, и для исправления одного бага или коррекции геймплея скорее всего придется разбирать весь ИИ. Потому что, чтобы исправить поведение ИИ, нужно понимать как он в игре устроен. И никто этого сейчас не понимает.
А в чём проблема такого управления?Есть 2 способа отбрать мяч: подкат через А (= штрафные\карточи\травмы), или выбивание через B. Но B это еще и переключение между игроками. Т.е. хочешь выбить мяч и вместо этого ты куда-то переключился, потому что, недостаточно близко к мячу. По сути, 2 разных действия на одну кнопку.
Je$TeR, это тебе. Кол-во попыток вбрасывания можешь посчитатьТы читал, что я написал?
В подобных случаях бот кидает мяч ровно по штрафной линии, на которой мяч принимает другой игрок и выбивает его головой в центр поля. Просто иногда там игрок не стоит.Иногда - означает в другой расстановке.
в нем игрок Нигерии (зеленая футболка) бросает мячик налево и ровно по линии поля (баг)А я ведь предупреждал, результат не соразмерен усилиям когда речь идет о поведении ИИ. Ты еще месяц будешь ковыряться с этим броском мяча, да и не баг это. В подобных случаях бот кидает мяч ровно по штрафной линии, на которой мяч принимает другой игрок и выбивает его головой в центр поля. Просто иногда там игрок не стоит.
Флаги бы я нашёл без проблем 100%. Искать графику дебагом это вообще проще простого.Ну так нашел бы уже, чего уж там
Je$TeR, я имел в виду про один элемент. Т.е. и у мигающей иконки тоже два указателяПонятное дело, просто если ломать глитчером в конкретном месте, скорее всего на оба поочередно наткнешься.
А ещё вспомнил, что должна быть ещё палитраЗачем? Они все одну палитру используют. Или я не понимаю о чем речь.
Вот тебе таблица со списком адресов:Это что угодно, но только не то, что мне нужно. Спрайт, который мне надо заменить, начинается в 12CB68, где 30 FB - отвечает за сжатие или чего-то там.
$15AEF0 - $15E0E3 - таблица с 4 байтными относительными поинтерами (3196 поинтеров)
Таких списков указателей в роме несколько же?Мне Sharpnull находил: D0D22 адрес (00063ADA) на блок с игроками (133854) при этом ссылается он относительно CFD7A (63ADA+CFD7A = 133854), этих списков определенно несколько.
Это усложняет дело, забыл про карту тайлов. Т.е. надо будет найти уже минимум два указателяЗабыл сказать, что там надо достать 2 спрайта одновременно. Один - спрайт страны, другой - мигающая иконка, у каждой страны своя. Если методом перебора всё делать, то можно наткнуться на оба сразу.
Тебе же надо создать новые флаги?Там примерно такая ситуация:
Для графики используется сжатие RefPack, которое использует EA, только они понаделали разных вариантов, ещё нужно найти правильную программу. Например, графика для флага Малайзии при выборе лиги в роме с позиции 12CB68: байты 30 FB, где FB - магический байт всегда, а в байте 30 хранится формат сжатия, вместо него в этой игре может быть 10/11, 46/47, 30/31/32/33/34/35, 7A/7B, 72/73, всего 5 алгоритмов, код распаковки с 0xADD60.Мне, короче говоря, нужно сначала научить читать конкретную графику без сжатия. Потом добавить спрайт в конец рома (через yychr, как я понял) и заставить ром читать нужный мне спрайт.
Формат флага может тебе разобрать хакер.О чем речь? Я знаю, что спрайт 64х64 максимум, Sharpnull говорил мне еще карта тайлов нужна. Но я бы предпочел сам разобраться, чем постоянно просить за каждый спрайт. А спрайт, допустим, есть у меня.
Зато моя программа снова показала, что годится для хакинга.Было бы здорово, если бы твоя программа помогла бы мне блоки увеличить и спрайты стран заменить.
45 минут - это слишком долго.ну ты же претендовал на реализм
У меня тайм = 6 минут. Матч = 12 минут.
В этом контексте, если вратаря не ослабить, то голов почти не будет.В 45 минутном матче боты себе делают счет 5-5, не понимаю о чем ты. Возможно ты 4-минутные матчи смотришь.
Однако, в последующих играх серии (97, 98) боты охотно травмируются.Если бот не умеет делать замены, то для него это только хуже. Да, боту может вручную сделать замену игрок, но расчет был явно не на это.
Например, такие голевые комбинации (как на видео) в базовой игре без редактирования параметров голкипера крайне редки. Там вратари ловят 99% подобных мячей.Я такие 99% мячей забиваю, с этой же позиции. В твоей версии вратарь будет совсем дырявым.
Я это делаю прежде всего для симуляции футбольного менеджера, когда живой игрок выступает только за тренера и скаута.Главная прелесь FIFA в том, что там можно играть вчетвером за одну команду, а не смотреть, как игра играет сама с собой. Лучше народ собрать и чемпионат какой нибудь пройти.
Это явно просто указатели. И с буквами G и D тоже. Так что попробую в Глитчер добавить перемешиватель указателей.Я не знаю о каких указателях речь, но вся графика стран в роме запакована и не редактируется.
Je$TeR, что думаешь насчёт его пункта 3?Я думаю, что он заморачивается совсем не тем, чем стоило бы. Для изменения поведения ИИ усилий нужно много, а результат незначительный. Да и не замечал я разницу в поведении вратаря от всех остальных, думаю, это очередное "мародер едет быстрее дерт девила в RRR".