Полная Версия: Модификация BOS.EXE
Страницы: 1, 2, 3, 4, 5
Hex
Краткое подведение итогов: Что уже найдено и отсортировано (пр. модератора)
Ссылка поправлена 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 :)
Ну и конечно список, того что нужно исправить с максимально точным описанием проблем.
Hmt
Спасибо за то, что обратили внимание на FT — это уже +
QUOTE
На сколько я понял, вы собрались исправить баги Fallout Tactics которые возникают при мультиплеере.
Не только MP. "Сингловые" проблемы тоже весьма актуальны
QUOTE
но баги я так понял рандомные.
Есть вполне конкретные и стабильные "ошибки-недочеты" разработчиков, их хотелось бы устранить (список составим).
QUOTE
Короче, для работы мне нужна инфа о форматах файлов, описание скриптов, если там есть какой-то sdk — тоже пригодится.
Техническая информация по сабжу практически нулевая. Кое-какие исследования проводились,
положительные результаты есть. Попробую систематизировать ...
Hex
Ок, давайте начнем с конкретных проблем, это всегда проще.
Hmt
QUOTE
Ок, давайте начнем с конкретных проблем, это всегда проще.

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

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

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

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

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

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

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

Есть и другие неприятные проблемы, обдумаю-напишу. Может кто-то еще что добавит.
Hex
Мда, скрипты тут специфические... набор триггеров.
Hmt
QUOTE
Мда, скрипты тут специфические... набор триггеров.
Эту сторону FT я знаю неплохо, постараюсь отвечать на любые возникающие вопросы.
Hex
Неплохо со стороны дизассемблера или со стороны FT Tools ?
Hmt
QUOTE
Неплохо со стороны дизассемблера или со стороны FT Tools?
Я со стороны FT Tools. Со стороны asm, вроде хорошо владеет один англоговорящий товарищ он же автор FT Improver'а.
Но его можно найти только на NMA, а я языком владею очень хило, тут нужно просить помощи Two Eyed Yum'а ...
Hex
Нашел код для работы с перками. Похож на тот, что в f2, но со своими извратами.
Способ хранения инфы о перках персонажа здесь точно такой же, как и в F2: захардкожены в массив. Длина 111 элементов. То есть их может быть 111, хотя в perk.txt объявлено только 95. Остальные свободны.
В этом массиве хранится количество уровней для данного перка, которые взял персонаж.
Нельзя менять перки местами, в движке четко забиты индексы перков.

Нашел два места где проверяется перк night vision.
Модификатор видимости лежит по смещению: 40C188, там 4 байта, это float число 0,2 т.е. 20%
Hex
QUOTE
6. Есть трейт 'nightPerson'. Ночью у персонажа с таким трейтом, Интелект и Восприятие увеличиваются на 1, днем на 1 уменьшаются. Это работает с подконтрольным игроком, но не работает с NPC — это дало бы возможность скриптово узнавать, что сейчас день или ночь ?

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

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

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

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

QUOTE
Никакая из campain variables и mission variables никак ко времени не привязана?
К сожалению нет. Нет никаких привязок ни ко времени, ни к датам. Хотя текущее игровое время и выводится по нажатию клавиши 'D'.
Hex
Нашел таблицу перков, т.е. ту где прописаны на каком уровне получать перк, сколько уровней для перка, какие требуются статы и скилы. От 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?
Two Eyed Yum
Хорошая работа!

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

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

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

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

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

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

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

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

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

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

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

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

Хм ... загрузил в xvi32 'bos.exe' — goto $2ADB44 ...
Hex
Блин, это я виноват. Правильно вот так:
2ADB47 <два байта> — год
Hmt
QUOTE
Блин, это я виноват. Правильно вот так:
2ADB47 <два байта> — год
Спасибо, работает !
Hex
QUOTE
А нельзя ли сделать так, чтобы гули не умели бегать.

Все можно, нужно только найти...

Отправлено: 19 окт 11 21:13
Про время. Исходя из настроек сетевой игры:
0 — 7 tod_predawn
7 — 13 tod_day
13 — 18 tod_evening
18 — 00 tod_night

Получается что ночь это с 6 вечера до 12 ночи. :)

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

Как ни странно, это почти не варварство. Здесь можно разве что вместо забивания пробелами, прописать что нужно 0 экземпляров данного объекта. Т.е. 1 байт исправить для каждого предмета.

А так тут реальный хардкод того, что должно попасть в инвентарь в начале игры. Но хардкод хитрый — хардкодится навание предмета, его количество и в каком слоте оно лежит. Далее, есть набор опциональных предметов, которые добавляются в зависимости от затегированных скилов.

А конкретно:
тэг на "легкое оружие" — ammo9mmBall.ent + booze.ent
тэг на "тяжелое оружие" — happyPie.ent (возьми с полки пирожок) + booze.ent
тэг на "энергетическое оружие" — donutFood.ent (возьми с полки пирожок №2) + booze.ent
тэг на "без оружия" — brassKnuckles.ent + rotGut.ent + buffoutChem.ent
тэг на "холодное оружия" — knife.ent + brokenBottle.ent
тэг на "метательное" — spear.ent + rock.ent + fragGrenade.ent
тэг на "первая помощь" — firstAidKit.ent + poisonChem.ent + poisonAntidote.ent
тэг на "доктор" — doctorsBag.ent + fruitFood.ent + scalpel.ent
тэг на "скрытность" — axeHandle.ent (не понял шутки)
тэг на "взлом" — stinkyFood.ent (типа взламывать плохо) + pullTabs.ent
тэг на "кража" — pullTabs.ent + 30 денег
тэг на "ловушки" — spikeTrap.ent + grenadeTrap.ent + antiPersonnelMine.ent
тэг на "наука" — mentatsChem.ent + clipBoard02.ent + nukaClassic.ent
тэг на "ремонт" — crowbar.ent + toolKit.ent + booze.ent
тэг на "пилот" — beer.ent (душевная компания...) + booze.ent + xxxxxBeer.ent + catsPawMag.ent (ну вы поняли...)
тэг на "бартер" — catsPawMag.ent + pullTabs.ent + booze.ent
тэг на "азартные игры" — 500 денег
тэг на "натуралист" — radxChem.ent + healingPowder.ent

Так что придется не только общее убирать, а еще и вот эти тэговые предметы. Имхо их лучше заменить, а не удалять совсем всё.
Ursa
В ранних версиях ft было два интересных перка Break the rules и bent the rules, позже их убрали. Они позволяли выбрать в след. раз перк вне зависимости от уровня (break the rules) и вне зависимости от расы (bent the rules), что открывало дополнительные возможности для "билда" персонажа (если бы еще и в требования харизму поставить — тогда эти перки могли бы быть причиной брать харизму выше 2). Hex, если вы будете еще смотреть перки, очень интересно было бы узнать про два вышеописанных!
Two Eyed Yum
QUOTE
В ранних версиях ft было два интересных перка Break the rules и bent the rules, позже их убрали.

Я уже писал выше, что их все еще можно добавить через редактор.
QUOTE
позволяли выбрать

Действительно позволяли в ранних версиях, или же это только описание?

Hex, да, рукоятка от топора — тоже оружие. Правда, я до сих пор не в курсе, как она относится к стелсу... Pull Tabs — тоже деньги. Бумажные принимаются только в братстве, а крышечки — в миссиях и случайных встречах, где бумажки БС не имеют силы.

Тэг на "красноречие"? Красноречие в ФТ отсутствует, его место занимает навык "Вождение". Так что пиво и прочий алкоголь выглядят еще интереснее.

По поводу идеи замены — полностью согласен. В идеале все бы заменить на Pull Tabs в примерно равных пропорциях (до 150 единиц).
Hmt
Маленькое исследование:
Часы и минуты проверил, работает. Правда тут есть одно но ... Если в редакторе время стоит принудительно (Force Start Hour), то значение "часа" равно значению выставленному в редакторе, минуты править можно. Кстати смещение "+29мин" и берется из адреса 2ADAB9 1D=29 :) Так что ставим туда нули, и получаем нормальное и четкое время без смещения по минутам.
QUOTE
Здесь можно разве что вместо забивания пробелами, прописать что нужно 0 экземпляров данного объекта. Т.е. 1 байт исправить для каждого предмета.
А это очень сложно сделать-узнать ? Некую таблицу адресов для правки (это больше пожелание, чем необходимость)
QUOTE
Тэг на "красноречие"? Красноречие в ФТ отсутствует, его место занимает навык "Вождение".
Вот интересно, можно ли вернуть именно "красноречие" вместо "вождения" ?

P.S: Hex, если "случайно наткнетесь" на 1 января — подскажите адресок ? :)
Hex
QUOTE
А это очень сложно сделать-узнать ? Некую таблицу адресов для правки (это больше пожелание, чем необходимость)

Узнать не сложно, будет очень много смещений. Только для опциональных вещей будет 43 * 2 = 86 смещений...

QUOTE
Кстати смещение "+29мин" и берется из адреса 2ADAB9 1D=29 :)

Спасибо Кэп! :)

QUOTE
если "случайно наткнетесь" на 1 января — подскажите адресок ? :)

Адреса там нет, нужно вклинивать свой код, чтобы добавить свою константу к месяцу и к дню.

QUOTE
Вот интересно, можно ли вернуть именно "красноречие" вместо "вождения" ?

Переименовать навык в локалях?

Отправлено: 20 окт 11 11:50
А чем можно zar просмотреть или распаковать в png?

Отправлено: 20 окт 11 11:55
QUOTE
Но мне пока не ясно, какой вообще смысл иметь отдельно traits и otraits

Щас посмотрел в FT Tools и понял зачем. Теперь optional traits — это то что в f2 называлось traits, а traits — это совсем другие "черты характера", которые так обозвали в FT. То что раньше вычилялось в F2 в рантайме, т.е. изменение скилов относительно базовых значений, теперь переехало в Derived. В общем нельзя больше ориентироваться на F2. Нужно все смотреть в FT tools
Hmt
QUOTE
А чем можно zar просмотреть или распаковать в png?
Например вот этим (правда bmp)
QUOTE
Адреса там нет, нужно вклинивать свой код, чтобы добавить свою константу к месяцу и к дню.
Только для опциональных вещей будет 43 * 2 = 86 смещений...
наверное про это забудем :)
Two Eyed Yum
Плюс пожелания (на будущее):

1. Формулы для умений. Именно формулы, влияющие на расчет, а не текст. Пригодится как для правки имеющегося баланса, так и для модов.

2. Формула расчета переносимого веса.
2б. Множитель максимального веса для полной иммобилизации.

QUOTE
А чем можно zar просмотреть или распаковать в png?

В FT Tools (если установлена версия 1.27 игры) есть отдельная функция PNG to ZAR, емнип.
Hex
В FT Tools при выборе цвета кожи, волос и т.д. есть три контрола:
1) выбиралка цвета, с подписью "C", я так понимаю это Color
2) бегунок, с подписью "S", я так понимаю это Saturation
3) бегунок, с подписью "A", что это?

Отправлено: 20 окт 11 16:43
QUOTE
И чтобы не было розовых и голубых и.т.п мутантов.
(что-то ведь должно отвечать за рандомную раскраску)

Нашел место где генерится цвет через рандом. Генерится два рандома для выбора:
1) цвет волос
2) цвет кожи
Если эти рандомы вырубить, то вообще все персонажи, которым генерится цвет, будут одного цвета.

Какой результат интересует?
Two Eyed Yum
Пусть только волосы рандомятся. Кожа и "остальное" — эти лучше пусть будут по умолчанию. Проще будет задать больше "дефолтовых" типов юнитов с определенной раскраской.
Hex
Пожалуйста:
2AE3F4 83 33
2AE3F5 E1 С9
2AE3F6 07 90

Это будет цвет с индексом 0.
Имею в виду этот

Мне только некак это проверить, надо сэйвы иметь, а мне играть облом. Я не фанат FT.
Two Eyed Yum
QUOTE
В FT Tools при выборе цвета кожи, волос и т.д. есть три контрола: 
1) выбиралка цвета, с подписью "C", я так понимаю это Color 
2) бегунок, с подписью "S", я так понимаю это Saturation 
3) бегунок, с подписью "A", что это?


S — может быть и Saturation, хотя разницу заметить сложновато. Выкрутка на максимум дает более темный оттенок, а так особых эффектов не заметно.

А — это "непрозрачность" цвета. То есть при левом положении цвет не применяется вообще, чем правее — тем больше объект окрашивается в указанный цвет.

Да, я уже понял, что они извращенцы, когда дело доходит до терминов...
Hex
A — Alpha channel :)
Hmt
уф ... не успел дойти домой с работы, а тут уже столько ....
QUOTE
2AE3F4 83 33
2AE3F5 E1 С9
2AE3F6 07 90
Это для всех, или только для определенной расы ?
Все три адреса отвечают за цвет кожи ?
Hex
Для всех. Это патч ассемблерной комадны, 3 байта на одну комадну здесь понадобилось.

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

Отправлено: 20 окт 11 22:47
QUOTE
2. Формула расчета переносимого веса.
2б. Множитель максимального веса для полной иммобилизации.

Формула расчета простая:сумма веса всех вещей инвентаря.
Множитель иммоблилизации = 1.25.
Хранится в переменной типа float по смещению 40C0C8

Отправлено: 21 окт 11 01:00
QUOTE
1. Формулы для умений. Именно формулы, влияющие на расчет, а не текст. Пригодится как для правки имеющегося баланса, так и для модов.

У них тут так замечательно делается SkillCheck. Могу точно сказать что так делают для lockpick'a, потом скажу где еще тоже самое.


Проверка делится на 2 стадии: просчет удачи и просчет фэйла. Удача считается вот так:
1) генерим рандомное число (от 1 до 100)
2) если скил > 95 и рандомное число > 95, скил = 95. Т.е. обрезается. Скилодрочерам превед!
3) скил = (скил — рандомное число)
4) если скил > 0, то проверка пройдена.
5) проверка не случился ли фэйл совместно с успехом.

Дальше идет код который прорабатывает случаи когда если скил <= 0, т.е. фэйлы. Там и проверка трейта jinxed, и fearTheReaper, и betaSoftware для робота.

Итого может быть 4 результата для skillcheck:
1) не получилось и ничего не случилось
2) получилось и ничего не случилось
3) не получилось и случился фэйл
4) получилось и случился фэйл

Так что вопрос: нужна формула и для удачи и для фэйла?
Hex
Эта же схема юзается для обнаружения/установки/обезвреживания ловушки, doctor при лечении cripled частей и при repair как лечении робота, при вождении (не могу точно сказать где именно), при ремонте автомобиля, при ремонте любых других вещей, при использовании science на какие-то ScienceSwitch и PowerNode.
Hmt
QUOTE
Мне только некак это проверить, надо сэйвы иметь, а мне играть облом.
Проверил, на случайных встречах "розово-голубых" больше нет :)
Кожа у всех идентична, все остальное рандомно. Спасибо !
А нельзя еще броню заблокировать только на металлический цвет ?

Вот чего "вылезло":
При изменении года — возраст героя начинает неверно отображаться :)
(он становится отрицательным при уменьшении года, и "стареет" при увеличении)
Похоже он "уменьшается-увеличивается" на внесенное значение, относительно оригинальной даты.
Two Eyed Yum
QUOTE
Формула расчета простая:сумма веса всех вещей инвентаря.  Множитель иммоблилизации = 1.25.

Отлично, меня не проглючило, значит.
Формулу я имел в виду ту, которая определяет зависимость максимального переносимого веса от Силы (и можно ли завязать еще и на Выносливость, допустим).

QUOTE
2) если скил > 95 и рандомное число > 95, скил = 95. Т.е. обрезается. Скилодрочерам превед!

Справедливо. Ни разу не видел рекомендаций прокачивать навыки выше 120%, если речь не о боевых. Прокачка с запасом делается для того, чтобы справиться со штрафами Силовой Брони и другими подобными моментами (в ФТ поверармор дает штрафы к некоторым навыкам).

QUOTE
1) не получилось и ничего не случилось 
2) получилось и ничего не случилось 
3) не получилось и случился фэйл 
4) получилось и случился фэйл

Не смог представить пункт 4 на примере Доктора. Как правило, если доктор фэйлит, то ломает пациенту глаза (часто, почему-то) + от 0 до некоего числа повреждений. Одновременно успеха и фэйла еще не видел...
Но в целом интересные данные.

QUOTE
Так что вопрос: нужна формула и для удачи и для фэйла?

Если она существует, то было бы неплохо увидеть...

QUOTE
при вождении (не могу точно сказать где именно)

Вот это точно интересно, потому что у меня до сих пор никаких идей, кроме увеличения скорости...

QUOTE
при использовании science на какие-то ScienceSwitch и PowerNode

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

А! ВСПОМНИЛ!
Уважаемый Hex , очень прошу — гляньте расчеты для энергетического оружия. В частности, посмотрите, нет ли какой связи между навыком "Наука" и повреждением оружия, работающего под скиллом "Энергетическое оружие".
Hex
QUOTE
Не смог представить пункт 4 на примере Доктора

Не, то что я описал, это просто функция SkillCheck'a, а как потом используются ее результаты — это другой вопрос. Функция обработки доктора, может и никак не реагировать на то что вернули и фэйл и упех одновременно. Она проверит, к примеру, что был успех, а на сопутствующий фэйл забьет.
Ethereal
1. Есть ли способ повысить максимальный уровень в игре не копаясь в сохранялках? Он всего 50 и на него где-то отведено определённое количество байт, но маловато будет.
2. Можно ли зделать ограничения для багажников машин, что бы проверка по статам шла и на максимальный вес, а не только для сопротивлений уронам? А заодно и на сопротивления к радиации у техники т.е что бы экипаж внутри машины мог быть облучён, но с расчётом — сопротивления техники + сопротивления персонажа.
Hex
Полная схема:
1) генерим рандомное число №1 (от 1 до 100)
2) если скил > 95 и рандомное число №1 > 95, скил = 95.
3) шанс = (скил — рандомное число №1)
4) генерим рандомное число №2 (от 1 до 100)
5) шанс критического фэйла = модификатор скила + (шанс / 10).
6) если шанс > 0 и шанс критического фэйла >= рандомное число №2, Результат = успех + критический фэйл.
7) если шанс > 0 но шанс критического фэйла < рандомное число №2, Результат = успех
8) если шанс <= 0
8.1) если криттер — это робот с трейтом betaSoftware или представитель любой другой "расы", то шанс критического фэйла = (модификатор скила / -5) - (шанс / 10) + 1
8.2) если персонаж имеет к тому же скил fearTheReaper или jinxed, то шанс критического фэйла = шанс критического фэйла * 2.
8.3) если получившися шанс критического фэйла > 25, шанс критического фэйла = 25
8.4) если получившися шанс критического фэйла < 5, шанс критического фэйла = 5
9) если шанс критического фэйла >= рандомное число №2, то Результат = критический фэйл
10) иначе, Результат = просто неудача без последствий

модификатор скила:
для trap и lockpick = 0
для repair, science, doctor и first aid = criticalChance. More Criticals не всегда хорошо :)

Отправлено: 21 окт 11 13:18
QUOTE
Вот чего "вылезло":
При изменении года — возраст героя начинает неверно отображаться :)
(он становится отрицательным при уменьшении года, и "стареет" при увеличении)
Похоже он "уменьшается-увеличивается" на внесенное значение, относительно оригинальной даты.

Нужно еще в одном месте год менять. Смещение 42CB9C тоже два байта.

Отправлено: 21 окт 11 14:16
Удача при краже.
Здесь очень сложная и длинная функция вычислений. Поэтому пока тезисно.
Конечная проверка сводится к проверке: скил кражи > значения, которое нужно для удачной кражи. Если есть то шанс удачи = 95%. Дальше генерируется случайное число от 0 до 99. Если шанс шанс > случайного числа, удача.

А вот значение, которое нужно для удачной кражи вычисляется от кучи всяких параметров:
1) база значения, которое нужно для удачной кражи = Perception (того у кого крадут) * 0.1 * скил кражи (того у кого крадут)
2) если у крадущего есть перк pickpocket, то база не меняется. Если нет, то муторные вычисления исходя из веса вещей.
3) если тот у кого крадут — без сознания, из базы вычитают 100
4) если тот у кого крадут — почти мертв (HP = 1), из базы вычитают 100
5) если тот у кого крадут — в нокауте (не знаю в чем разница от без сознания), вычитается 20
6) если крадущий использует sneak, то вычитается 25

Отправлено: 21 окт 11 19:24
Ответ про загадку трейтов nightPerson и doNightPerson. Когда у игрока есть трейт nightPerson, то когда настает ночь, ему добавляется трейт doNightPerson, что приводит к повышению PER и INT. Когда наступает день, то трейт doNightPerson убирается и это приводит к обратному эффекту.

Код движка:
CODE

 if ( this_->OTraits.nightPerson )
 {
   intelligence = this_->Stats.intelligence;
   if ( this_->OTraits.doNightPerson )
   {
     perception = this_->Stats.perception;
     this_->Stats.intelligence = intelligence + 1;
     this_->Stats.perception = perception + 1;
   }
   else
   {
     perception = this_->Stats.perception;
     this_->Stats.intelligence = intelligence - 1;
     this_->Stats.perception = perception - 1;
   }
 }

Так что вот так можно проверять ночь щас или день.
Hmt
QUOTE
Нужно еще в одном месте год менять. Смещение 42CB9C тоже два байта.
Да, теперь все в порядке. Спасибо.
QUOTE
когда настает ночь, ему добавляется трейт doNightPerson
А вот этого я даже не предполагал.
QUOTE
Когда у игрока есть трейт nightPerson ...
....
Так что вот так можно проверять ночь щас или день.
С игроком проверил, причем именно на наличие-отсутствие doNightPerson, все отлично.
Но на NPC это не работает. Я имею ввиду что NPC при смене времени суток,
не добавляется doNightPerson (есесно при наличии трейта nightPerson) :(
Two Eyed Yum
QUOTE
модификатор скила:  для trap и lockpick = 0 
для repair, science, doctor и first aid = criticalChance. More Criticals не всегда хорошо :)


Хм, интересно. Добавлю, что на применение скилла Доктор (не знаю, как с остальными) очень влияет Восприятие. Шов, доктор, которого выдают на старте в оригинальной кампании, весьма, кхм, близорук. Позже, даже при высоких значениях самого скилла, Шов регулярно ломает глаза, руки и ноги пациентам. Удача у него не самая плохая, криты я ему не раскачивал.

Надо будет поэкспериментировать и создать персонажа, который мог бы ломать насмерть врагов при помощи докторского саквояжика (и отключать роботов при помощи ремонтного набора)... Судя по формулам, такое возможно.

QUOTE
2) если скил > 95 и рандомное число №1 > 95, скил = 95.

Не совсем уловил. А если только скилл больше 95?

QUOTE
Ответ про загадку трейтов nightPerson и doNightPerson.

Спасибо, вы подтвердили мою догадку о том, что doSomething — это временные состояния. Собственно, по ограниченному числу этих состояний можно было догадаться, но приятно знать наверняка.
Hex
QUOTE
А если только скилл больше 95?

Тогда не обрезается.

Отправлено: 21 окт 11 23:50
Нашел где обрабатываются перки:
tag
divineFavour
hideOfScars
toughHide
negotiator
masterThief
thief
medic
mrFixit
Если чего-то из них хочется изменить — говорите, скажу смещения.

Отправлено: 22 окт 11 00:23
QUOTE
В частности, посмотрите, нет ли какой связи между навыком "Наука" и повреждением оружия, работающего под скиллом "Энергетическое оружие".

Конкретно со скилом энергетического оружия он не связан. Там другая связь. Если "жертва" атаки является живым существом — то на атаку влияет скил doctor, если "жертва" = робот, машина, пушка и т.д. то на атаку влияет скил science.

Движок берет значение скила, вычитает из него 30. Результат делит на 15 и если получилось положительное число, то добавляет его к какому-то числу влияющему на атаку. В каких попугаях это дело я не знаю.

Отправлено: 22 окт 11 00:26
QUOTE
2. Можно ли зделать ограничения для богажников машин, что бы проверка по статам шла и на максимальный вес, а не только для сопротивлений уронам?

По подробнее можно? Я без понятия как там чего работает у багажника и как машина влияет на сопротивление урону.

Отправлено: 22 окт 11 01:01
QUOTE
А нельзя еще броню заблокировать только на металлический цвет ?
чью?

Отправлено: 22 окт 11 01:03
QUOTE
Но на NPC это не работает. Я имею ввиду что NPC при смене времени суток

А можете мне карту такую сделать, чтобы там был ровно один NPC с трейтом nightPerson? Мне надо на чем-то отлаживаться...

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

Есть константа которая влияет на расстояние с которого можно производить действия. Смещение 424D04. Там лежит float число 1.0. Если увеличить до 2.0 уже можно будет выполнять действия стоя в шаге от предмета.
Патч:
424D06 80 00
424D07 3F 40

Отправлено: 22 окт 11 02:30
QUOTE
Попробую кратко объяснить: у главного героя и у любых других персонажей может быть уникальное имя 'tagname', на которое могут быть завязаны многие скрипты и триггеры.

Нужен пример карты с такими героями, потому что в стандартной кампании там нет тэгов.
Two Eyed Yum
QUOTE
Конкретно со скилом энергетического оружия он не связан. Там другая связь. Если "жертва" атаки является живым существом — то на атаку влияет скил doctor, если "жертва" = робот, машина, пушка и т.д. то на атаку влияет скил science.

Движок берет значение скила, вычитает из него 30. Результат делит на 15 и если получилось положительное число, то добавляет его к какому-то числу влияющему на атаку. В каких попугаях это дело я не знаю.

Чтение этих строк стало бальзамом для моей души. Я это, наверное, обведу рамкой и вывешу на самое видное место Мастерских, на случай будущих споров :)))

Скорее всего, это все-таки бонус к повреждению. Допустим, при 120 Науки/Доктора, имеем бонус в 6 единиц, либо в 6% (уж не знаю). Забавный факт выходит — если стрелять в живую цель, зажав под мышкой продвинутый докторский набор, то жертве будет больнее... ^^

QUOTE
чью?

Случайных встречных. Имеется в виду, что параметры S и A раскраски Base/Skin стоит сделать фиксированными (чем ближе к нулю, тем лучше).
Buzzil
В качестве "призраков":

В обзоной статье на мультиплеер был указан один баг — reaction bug. Суть в том, что если по персонажу стреляют и в это время он что-то делает (меняет экипировку, патроны, меняет направление движения, положения тела... в общем полчает приказ от игрока), то получаемый демедж становится заметно большим, чем в случае простого глядения персонажем в дуло вражьего дробовика.
В общем, судя по тому, как устаривается проверка навыков — подозреваю, что это может быть и не багом. Ведь исходя из логики — завершил ход и оставшиеся AP ушли в AC — вполне может получаться, что "отвлеченный" персонаж не "встречает пули нагрудной бронепластиной".
[оговорюсь, что явно такого бага в игре не видел, однако судя по записям МП-игр убивание активного персонажа происходило заметно быстрее, чем в варианте unconcious]

Также в той статье упоминалось, что в случае, когда атакующий стоит, а цель сидит/лежит и между ними всего пара метров, то цель имеет сильно порезаную "броню" (запамятовал — то ли вообще нету поглощений, то ли еще что-то).


Еще хотелось бы узнать каким образом в мультиплеере выводяться сообщения "Вы выйграли"/"Вы проиграли" и можно ли этот способ пользовать нам.

И какая периодичность для RandomSpeach у NPC?

И как устроено "прилипание" энтити Flag к трогавшему его персонажу (и это без tagname этого персонажа)?


А вообще, я надеюсь, что кто-то все же напишет подробно как и что менять, с перечнем софта и прочих.
И объясните — чего можно будет ждать от результатов работы Hex'а — инструмент которым можно редактировать переменные или инструкцию о ковырянии BOS.exe?


Алсо, вот та статья
The Master
QUOTE
А вообще, я надеюсь, что кто-то все же напишет подробно как и что менять, с перечнем софта и прочих.

Программы для редактирования exe — WinHex, xvi32, HDD Free Hex Editor, hiew
Любой из этих программ открываем exeшник FT и...
Пример, что смотреть и как менять:
QUOTE
424D06 80 00

Ищем адрес(обычно это слева) 424D0, по этому адресу располагается 16 байт
(0 1 2 3 4 5 6 7 8 9 A B C D E F), нам нужен 6 байт(7ой слева, считаем от 0)
Находим число 80, вместо него забиваем 00 и сохраняем результат. Всё, патч комплитед :D

Аналогично с любым другим адресом. Последняя цифра в строке типа этой
QUOTE
424D06

есть номер нужного байта.
QUOTE
чего можно будет ждать от результатов работы Hex'а

Нового витка в развитии моддинга FT, возможность некоторого изменения игровой механики, формул расчёта скиллов, повреждений, фиксов допущенных багов и многого другого.
Ethereal
QUOTE
По подробнее можно? Я без понятия как там чего работает у багажника и как машина влияет на сопротивление урону.


Дело в том, что багажники всех машин вмещают бесконечно много снаряжения. В FT Tools можно редактировать скорость и защиту машин, однако максимальный вес у багажников не меняется что там ни ставь — он всегда бесконечен. Тоже самое и с сопротивлениями радиации — экипаж внутри машины не облучается, поэтому сопротивления радиации у машин так же не работают.
Hex
QUOTE
Еще хотелось бы узнать каким образом в мультиплеере выводяться сообщения "Вы выйграли"/"Вы проиграли" и можно ли этот способ пользовать нам.

И какая периодичность для RandomSpeach у NPC?

И как устроено "прилипание" энтити Flag к трогавшему его персонажу (и это без tagname этого персонажа)?

Народ, я без руля в ваших терминах. Хотите чтобы я что-то нашел — опишите "историю": есть такая то фича/баг, которая возникает если то-то и то-то, я думаю, что она работает так-то, но должна вот так.
Откуда я знаю что за RandomSpeach? Откуда я знаю что такое "прилипание" и энтити флаг и когда это возникает?
Мне для того, чтобы найти что-то, часто нужно повторить поведение чтобы убедиться, что тот код который я нашел соответствует описываемой ситуации. А я не знаю что имеется в виду.

Отправлено: 22 окт 11 09:42
QUOTE
Также в той статье упоминалось, что в случае, когда атакующий стоит, а цель сидит/лежит и между ними всего пара метров, то цель имеет сильно порезаную "броню" (запамятовал — то ли вообще нету поглощений, то ли еще что-то).

Так это хочется исправить?
Ваш ответ: