Перейти к содержимому


Фотография

Модификация BOS.EXE


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 201

#1 Hex

Hex

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 78 сообщений

Отправлено 16 Октябрь 2011 - 11:34

Краткое подведение итогов: Что уже найдено и отсортировано (пр. модератора)
Ссылка поправлена 2 января 2015 года модератором. Happy new war.


На сколько я понял, вы собрались исправить баги Fallout Tactics которые возникают при мультиплеере.

Я посмотрел бинарь и могу дать прикидки по времени. Здесь в 4 раза больше кода чем в F2, но здесь больше RTTI инфы, поэтому реверсить несколько легче. Вход в курс дела для F2 у меня занял месяц работы по 8 часов в день, так уж повезло что у меня тогда был отпуск :). Сейчас у меня свободно от силы 4 часа в неделю. В принципе для Fallout of nevada я все исследования сделал. И щас только для себя продолжаю неспешно выполнять "хитрый план". Так что сначала будет вход в курс дела, а только потом реальная работа.

В принципе вполне конкретные вопросы можно и за 4 часа решить, но баги я так понял рандомные. Т.е. в какой-то момент, без очевидной причины, игра начинает вести себя странно. Поиск таких багов займет хз-сколько времени. Потому что сначала придется определить настоящие причины проблемы, а потом думать можно ли это пропатчить вообще, и если можно то как.

Скорее всего придется делать что-то типа sfall, потому что опыт F2 показывает, что не все можно пропатчить, часто приходится "раздвигать" или дописывать код. Т.е. дополнительная dll, которая на старте процесса хучит и патчит нужные места. Декомпилировать не вижу смысла, 5 мб — это слишком много. Да и тут C++, а не C, как в F2. Долго + будут проблемы при выполнение реассемблированного кода.

Короче, для работы мне нужна инфа о форматах файлов, описание скриптов, если там есть какой-то sdk — тоже пригодится. Ну и если кто-то какие-то исследования в IDA проводил — базы(idb). Я ведь тут пока что, такой же "нуб", как и любой человек начинающий ковырять FT :)
Ну и конечно список, того что нужно исправить с максимально точным описанием проблем.

Это сообщение отредактировано Two Eyed Yum - 2 января 2015 | 14:11


#2 Hmt

Hmt

    Триггер-Маньяк

  • Пользователи
  • PipPipPip
  • 878 сообщений

Отправлено 16 Октябрь 2011 - 13:08

Спасибо за то, что обратили внимание на FT — это уже +
QUOTE
На сколько я понял, вы собрались исправить баги Fallout Tactics которые возникают при мультиплеере.
Не только MP. "Сингловые" проблемы тоже весьма актуальны
QUOTE
но баги я так понял рандомные.
Есть вполне конкретные и стабильные "ошибки-недочеты" разработчиков, их хотелось бы устранить (список составим).
QUOTE
Короче, для работы мне нужна инфа о форматах файлов, описание скриптов, если там есть какой-то sdk — тоже пригодится.
Техническая информация по сабжу практически нулевая. Кое-какие исследования проводились,
положительные результаты есть. Попробую систематизировать ...


#3 Hex

Hex

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 78 сообщений

Отправлено 16 Октябрь 2011 - 18:23

Ок, давайте начнем с конкретных проблем, это всегда проще.


#4 Hmt

Hmt

    Триггер-Маньяк

  • Пользователи
  • PipPipPip
  • 878 сообщений

Отправлено 16 Октябрь 2011 - 19:51

QUOTE
Ок, давайте начнем с конкретных проблем, это всегда проще.

1. Изменение стартовой даты/времени (пожелание, а не проблема)

2. Блокирование смены 'tagname' у персонажей подконтрольных игроку (это пожалуй самое актуальное и необходимое). Попробую кратко объяснить: у главного героя и у любых других персонажей может быть уникальное имя 'tagname', на которое могут быть завязаны многие скрипты и триггеры. При выходе с карты и повторном заходе, все эти уникальные имена у всех напарников становятся одинаковыми, копирующими имя главного героя. Хотелось бы их оставить без изменений (если сразу будет непонятно, я попробую еще более подробно расписать, с примерами).

3. Зона в которой открываются двери в игре очень мала, персонаж стоя впритык и чуть в стороне может до нее не дотянуться. Может быть возможно эту зону "увеличить", это решило бы некоторые проблемы и дало бы новые возможности (это больше пожелание, чем проблема).

4. Очистить стартовый инвентарь. В принципе решение уже есть и работает, прямая правка бинарника. Тупо название предметов забить пробелами, но это варварство, может есть другое решение.

5. Триггер 'Display World Text' выключает фоновую музыку + блокирует скролинг экрана. Музыку хотелось бы оставить, а механизм блокировки интересен, можно ли его будет применить в другом месте ? (сейчас по этому пункту не совсем корректно пишу, подумаю как можно подробнее)

6. Есть трейт 'nightPerson'. Ночью у персонажа с таким трейтом, Интелект и Восприятие увеличиваются на 1, днем на 1 уменьшаются. Это работает с подконтрольным игроком, но не работает с NPC — это дало бы возможность скриптово узнавать, что сейчас день или ночь ? Другого способа это выяснить я пока не придумал, в механизм скриптов это вообще не заложено :(

7. Баг очереди

Есть и другие неприятные проблемы, обдумаю-напишу. Может кто-то еще что добавит.


#5 Hex

Hex

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 78 сообщений

Отправлено 16 Октябрь 2011 - 23:27

Мда, скрипты тут специфические... набор триггеров.

Это сообщение отредактировано Hex - 17 октября 2011 | 00:32


#6 Hmt

Hmt

    Триггер-Маньяк

  • Пользователи
  • PipPipPip
  • 878 сообщений

Отправлено 17 Октябрь 2011 - 11:53

QUOTE
Мда, скрипты тут специфические... набор триггеров.
Эту сторону FT я знаю неплохо, постараюсь отвечать на любые возникающие вопросы.


#7 Hex

Hex

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 78 сообщений

Отправлено 17 Октябрь 2011 - 14:20

Неплохо со стороны дизассемблера или со стороны FT Tools ?


#8 Hmt

Hmt

    Триггер-Маньяк

  • Пользователи
  • PipPipPip
  • 878 сообщений

Отправлено 17 Октябрь 2011 - 16:37

QUOTE
Неплохо со стороны дизассемблера или со стороны FT Tools?
Я со стороны FT Tools. Со стороны asm, вроде хорошо владеет один англоговорящий товарищ он же автор FT Improver'а.
Но его можно найти только на NMA, а я языком владею очень хило, тут нужно просить помощи Two Eyed Yum'а ...


#9 Hex

Hex

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 78 сообщений

Отправлено 17 Октябрь 2011 - 22:47

Нашел код для работы с перками. Похож на тот, что в f2, но со своими извратами.
Способ хранения инфы о перках персонажа здесь точно такой же, как и в F2: захардкожены в массив. Длина 111 элементов. То есть их может быть 111, хотя в perk.txt объявлено только 95. Остальные свободны.
В этом массиве хранится количество уровней для данного перка, которые взял персонаж.
Нельзя менять перки местами, в движке четко забиты индексы перков.

Нашел два места где проверяется перк night vision.
Модификатор видимости лежит по смещению: 40C188, там 4 байта, это float число 0,2 т.е. 20%

Это сообщение отредактировано Hex - 18 октября 2011 | 00:02


#10 Hex

Hex

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 78 сообщений

Отправлено 18 Октябрь 2011 - 12:13

QUOTE
6. Есть трейт 'nightPerson'. Ночью у персонажа с таким трейтом, Интелект и Восприятие увеличиваются на 1, днем на 1 уменьшаются. Это работает с подконтрольным игроком, но не работает с NPC — это дало бы возможность скриптово узнавать, что сейчас день или ночь ?

Что значит не работает для NPC и как предполагалось использовать трейт 'nightPerson'?

QUOTE
Другого способа это выяснить я пока не придумал, в механизм скриптов это вообще не заложено :(

Никакая из campain variables и mission variables никак ко времени не привязана?


#11 Hmt

Hmt

    Триггер-Маньяк

  • Пользователи
  • PipPipPip
  • 878 сообщений

Отправлено 18 Октябрь 2011 - 12:28

QUOTE
Что значит не работает для NPC и как предполагалось использовать трейт 'nightPerson'?
Когда в триггер-листе проверяется условие на изменение статов, в зависимости от времени суток, то с главным героем проверка работает
(т.е я могу всегда узнать день сейчас или ночь по изменению статов). Но мне не нужен главный герой с постоянно включенным 'nightPerson'.
Когда пытаешься провести такую-же проверку с NPC, у которого есть этот трейт, то проверка не проходит, или значения статов у него не меняются. А так бы я поставил за пределами карты "болванчика", который бы мне "рисовал" переменную день-ночь.

Есть еще один способ узнать время суток. Все источники света имеют параметр 'nightOnly'. Т.е ночью фонарь горит, днем нет.
Но я не знаю связано ли это с параметром 'ScriptState', потому как он не "перекидывается".

QUOTE
Никакая из campain variables и mission variables никак ко времени не привязана?
К сожалению нет. Нет никаких привязок ни ко времени, ни к датам. Хотя текущее игровое время и выводится по нажатию клавиши 'D'.


#12 Hex

Hex

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 78 сообщений

Отправлено 18 Октябрь 2011 - 20:21

Нашел таблицу перков, т.е. ту где прописаны на каком уровне получать перк, сколько уровней для перка, какие требуются статы и скилы. От f2 отличается тем, что прописано какие типы критеров не могут иметь такой перк, и какие критеры могут иметь такой перк, это те самые:
QUOTE

//race specific
//ghouls
name_radChild            = {Дитя радиации}
name_cancerousGrowth     = {Злокачественный рост}
name_bonsai              = {Бонсаи}
//Super Mutants
name_steadyArm           = {Твердая рука}
name_psychotic           = {Психоман}
name_toughHide           = {Дубленая шкура}
//Death Claws
name_deathSense          = {Шестое чувство}
name_brutishHulk         = {Гора мускулов}
name_talonOfFear         = {Смертоносный коготь}
name_hideOfScars         = {Броня из шрамов}


Отправлено: 18 окт 11 21:39
Нашел где проставляется какие трейты доступны какой расе.

Отправлено: 18 окт 11 22:52
Прикол, у них тут есть traits и optional traits.
CODE

.data:008A42D0 gTraitNames     dd offset gaFastmetabolis; "fastMetabolism"
.data:008A42D4                 dd offset gaBruiser    ; "bruiser"
.data:008A42D8                 dd offset gaSmallframe; "smallFrame"
.data:008A42DC                 dd offset gaOnehander  ; "oneHander"
.data:008A42E0                 dd offset gaFinesse    ; "finesse"
.data:008A42E4                 dd offset gaKamikaze  ; "kamikaze"
.data:008A42E8                 dd offset gaHeavyhanded; "heavyHanded"
.data:008A42EC                 dd offset gaFastshot  ; "fastShot"
.data:008A42F0                 dd offset gaBloodymess; "bloodyMess"
.data:008A42F4                 dd offset gaJinxed    ; "jinxed"
.data:008A42F8                 dd offset gaGoodnatured; "goodNatured"
.data:008A42FC                 dd offset gaChemreliant; "chemReliant"
.data:008A4300                 dd offset gaChemresistant; "chemResistant"
.data:008A4304                 dd offset gaNightperson; "nightPerson"
.data:008A4308                 dd offset gaSkilled    ; "skilled"
.data:008A430C                 dd offset gaGifted    ; "gifted"
.data:008A4310                 dd offset gaGlowingone; "glowingOne"
.data:008A4314                 dd offset gaTechwizard; "techWizard"
.data:008A4318                 dd offset gaFearthereaper; "fearTheReaper"
.data:008A431C                 dd offset gaVatskin    ; "vatSkin"
.data:008A4320                 dd offset gaHamfisted  ; "hamFisted"
.data:008A4324                 dd offset gaDomesticated; "domesticated"
.data:008A4328                 dd offset gaRabid      ; "rabid"
.data:008A432C                 dd offset gaTightnuts  ; "tightNuts"
.data:008A4330                 dd offset gaTargetingcomp; "targetingComputer"
.data:008A4334                 dd offset gaBetasoftware; "betaSoftware"
.data:008A4338                 dd offset gaEmpshielding; "empShielding"
!!!!!!!!!
.data:008A433C                 dd offset gaHuman; "Human"
.data:008A4340                 dd offset gaGhoul      ; "Ghoul"
.data:008A4344                 dd offset gaMutant    ; "Mutant"
.data:008A4348                 dd offset gaRobothumanoid; "RobotHumanoid"
.data:008A434C                 dd offset gaDeathclaw  ; "Deathclaw"
.data:008A4350                 dd offset gaDog        ; "Dog"
.data:008A4354                 dd offset gaDoadrenaliner; "doAdrenalineRush"
.data:008A4358                 dd offset gaDodiehard  ; "doDieHard"
.data:008A435C                 dd offset gaDohthevade; "doHthEvade"
.data:008A4360                 dd offset gaDodrunkenmast; "doDrunkenMaster"
.data:008A4364                 dd offset gaDonightperson; "doNightPerson"

В optional traits раса — это трейт! Кроме того, перки AdrenalineRush, DieHard, HthEvade и DrunkenMaster проходят еще как трейт... А NightPerson вообще для чего-то дублируется...

Кто-нибудь знает в чем разница между traits и optional traits?

Это сообщение отредактировано Hex - 19 октября 2011 | 01:27


#13 Two Eyed Yum

Two Eyed Yum

    Бета-снайпер

  • Пользователи
  • PipPipPip
  • 1 071 сообщений

Отправлено 18 Октябрь 2011 - 23:38

Хорошая работа!

А вот по поводу этих странностей обнадежить не могу. Дублирование "ночной персоны" и "расовые" трейты — это что-то вроде мертвого груза. Что я помню из своих тестов:
1) doXXXXXXXX трейты не дают какого-то видимого эффекта (перепроверю на всякий) при добавлении неписю или префабу в редакторе.
2) Второго трейта "Ночная персона" я вообще не засек, хотя там легко запутаться глазами...
3) В списке есть несколько уникальных перков, которые вообще никак нельзя выбрать. Помню о Bend the rules (любой перк для данной расы), Break the rules (любой перк любой расы), Twitch gamer. Их можно добавить вручную через редактор, но реально работает только Твитч — небольшой шанс, что очередное действие не потратит АП (и надпись при этом выскакивает над головой даже).


#14 Hex

Hex

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 78 сообщений

Отправлено 19 Октябрь 2011 - 00:24

QUOTE
1. Изменение стартовой даты/времени (пожелание, а не проблема)

2ADAE6 06 ?? — часы
2ADAB9 1D ?? — минуты
2ADB47 <два байта> — год

месяц и день, при желании тоже можно, но надо извращаться... надеюсь 1-е января это не проблема? :)

Отправлено: 19 окт 11 00:29
QUOTE
Ночью у персонажа с таким трейтом, Интелект и Восприятие увеличиваются на 1, днем на 1 уменьшаются

С какого времени считается, что начался день и с какого, что началась ночь?

Это сообщение отредактировано Hex - 19 октября 2011 | 21:44


#15 Wozrogdenec

Wozrogdenec

    Defendor of the Wastes

  • Пользователи
  • PipPipPip
  • 3 198 сообщений

Отправлено 19 Октябрь 2011 - 01:48

QUOTE
С какого времени считается, что начался день и с какого, что началась ночь?
Вроде как и в классических — с 6:00 и с 18:00 соотв.


#16 Hmt

Hmt

    Триггер-Маньяк

  • Пользователи
  • PipPipPip
  • 878 сообщений

Отправлено 19 Октябрь 2011 - 08:04

QUOTE
Вроде как и в классических — с 6:00 и с 18:00 соотв.
В 5:29 фонари еще горят, в 6:29 уже нет.
В 17:29 еще не горят, в 18:29 уже горят.
Точнее сказать не могу, потому как смещение относительно выставленного в редакторе времени, ровно + 29 минут :)


#17 Hex

Hex

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 78 сообщений

Отправлено 19 Октябрь 2011 - 09:49

QUOTE
это что-то вроде мертвого груза

Да вот как-то сомнительно, слишком много кода пробегается по этому массиву optional traits.

Но мне пока не ясно, какой вообще смысл иметь отдельно traits и otraits. И то и другое хранится в WCharacter...

QUOTE
В 5:29 фонари еще горят, в 6:29 уже нет.
В 17:29 еще не горят, в 18:29 уже горят.
Точнее сказать не могу, потому как смещение относительно выставленного в редакторе времени, ровно + 29 минут :)

Ясно.

Это сообщение отредактировано Hex - 19 октября 2011 | 10:50


#18 Hmt

Hmt

    Триггер-Маньяк

  • Пользователи
  • PipPipPip
  • 878 сообщений

Отправлено 19 Октябрь 2011 - 20:18

QUOTE
2ADB44 <два байта> — год
Попробовал поменять год, игра вылетает при загрузке первой миссии :(

А нельзя ли сделать так, чтобы гули не умели бегать.
И чтобы не было розовых и голубых и.т.п мутантов.
(что-то ведь должно отвечать за рандомную раскраску)

Спасибо за уже проделанную, имхо нелегкую, работу !


#19 Hex

Hex

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 78 сообщений

Отправлено 19 Октябрь 2011 - 20:27

QUOTE
Попробовал поменять год, игра вылетает при загрузке первой миссии :(

Как поменял?


#20 Hmt

Hmt

    Триггер-Маньяк

  • Пользователи
  • PipPipPip
  • 878 сообщений

Отправлено 19 Октябрь 2011 - 20:41

QUOTE
Как поменял?

Хм ... загрузил в xvi32 'bos.exe' — goto $2ADB44 ...




Похожие темы Свернуть

  Название темы Форум Автор Статистика Последнее сообщение


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных

Рейтинг@Mail.ru