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


Фотография

(sfall) дополнения


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

#1 Crafty

Crafty

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

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

Отправлено 31 Январь 2015 - 13:25

Хочу поделиться с общественностью :)

- Расширение функциональности [пере]назначения книг в Books.ini: добавлена возможность повышения и других скиллов при чтении книги.
- Автоматическая перезарядка оружия в обеих руках после окончания боя.
- Перезарядка оружия или использование предмета (не оружия) в активной руке по хоткею.
- Включение отображения свободного веса/объёма в окне обмена.
- Автоматическое одевание сопартийцем лучшей брони после закрытия окна обмена.
- Движковый "NPC Armor" мод.
- Русский язык при вводе имени игрока и описания к сохраняемой игре.
- Отключение абуза отрицательных эффектов от наркотиков при чтении книг, получении перков и повышении скиллов.
- Складывание вместе одинакового оружия без патронов.
- Изменение дистанции штрафа для перка Weapon Scope Range|Оптический прицел.
- В окне настроек сопартийца в поле "Здоровье" в скобках показывается его текущий уровень, а в поле "ОД" класс брони.
- Расширена функциональность кнопок "Лучшее оружие" и "Лучшая броня" в настройках сопартийца — если оружие/броня одеты, то нажатие на кнопку их снимает.
- Переработан и расширен функционал кнопок прокрутки квестов (UseScrollingQuestsList) и добавлены клавиши для навигации (1-4) в пипбое.
- Добавлена переменная ReloadReserve, с помощью которой можно менять механизм перезарядки оружия перетаскиванием патронов на это оружие: -1 = оригинал с навязчивым окном для ввода количества пачек; 0 = использовать все имеющиеся патроны. 1 и больше = резервные пачки патронов, если имеющееся количество пачек патронов больше заданного резерва, то будут использованы все патроны за вычетом резерва; если меньше или равно резерву, то будет использована только одна пачка патронов.
- Исправление читеринга с кнопкой "A".
- Можно отключить хоткеи для перехода по неоткрытым зонам при выборе зоны на карте города.
- Возможность использования больше одного слота для быстрого сохранения (F6).
- Доработан контроль персонажей в бою (ControlCombat).
- Можно продавать ранее использованный счётчик Гейгера.
- При выводе в окне монитора количества полученных очков опыта после убийства врагов/воровства/случайных встреч на карте учитывается бонус от взятого перка 'Прилежный ученик'.

Исправлен баг подсчёта веса вещей у цели во время обмена/воровства (не учитывается вес одетой на цели брони и оружия). Исправлен баг с множественным снятием брони сопартийца через диалог, если у него в сумке есть такая же броня, а также потери класса брони равного получаемому от этой брони при получении сопартийцем уровня. Исправлено два бага с кликабельностью в пипбое. Исправлен "Too Many Items Bug". Исправлено два бага при использовании инвентаря игрока, что теперь позволяет заряжать оружие в инвентаре перетаскивая патроны на это оружие. Также можно перетаскивать стимпаки и прочую химию из инвентаря на картинку игрока с эффектом использования. Неиспользованный перк теперь не "пропадает" после получения следующего перкового уровня (можно "копить" перки). Исправлено несколько багов связанных с наркотиками, привыканием к ним и получением уровней у сопартийцев когда они под наркотическими эффектами. Исправлен баг "NPC turns into a container", "Unlimited Ammo bug" и ещё куча других менее известных багов.

Здесь готовый ddraw.dll (основа — исходники v3.6.7.346 оригинального sfall для Fallout 2) с примерами ini-файлов и исходниками.

По просьбе The Master'а собрал версию для первого Fallout'а, скачать можно здесь (основа — исходники v1.14a оригинального sfall для Fallout 1).

Также архивы доступны в Fallout Database камрада Drobovik'а.

Это сообщение отредактировано Crafty - 21 июля 2015 | 17:09


#2 Drobovik

Drobovik

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

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

Отправлено 01 Февраль 2015 - 02:08

Merci Beaucoup, Crafty

Чего еще у тебя есть интересного? :)

Это сообщение отредактировано Drobovik - 1 февраля 2015 | 02:09


#3 Crafty

Crafty

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

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

Отправлено 01 Февраль 2015 - 16:43

Потихоньку заканчиваю обрабатывать в IDA fallout2.exe для более читабельного вида, ну чтобы имена процедур соответствовали именам аналогичных процедур из mapper2.exe (sub_blabla -> obj_use_book_ и тому подобное) — странно что за столько лет никто из разбиравших движок этого не сделал :( Но это к игре/sfall особенного отношения не имеет ;)

А так ещё повесил перезарядку оружия в активной руке на хоткей (r|R) также без смены режима стрельбы, но как и подозревал (RP не установлен был) возникнет конфликт с Party Orders add-on (в нём клавиша R = Regroup), поэтому сейчас нужно решить какую клавишу использовать для перезарядки.

Edit: Перевесил на w|W :-p

Это сообщение отредактировано Crafty - 10 мая 2015 | 15:37


#4 Crafty

Crafty

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

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

Отправлено 07 Февраль 2015 - 01:20

Теперь после окончания боя перезаряжается оружие в обеих руках :)


#5 Crafty

Crafty

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

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

Отправлено 10 Февраль 2015 - 16:16

Добавил возможность отображения свободного веса вместо веса перекладываемых вещей при обмене. Заодно исправил "фичу" движка, при которой во время обмена (и только здесь и во время воровства) подсчёт веса вещей у цели не учитывает вес брони и оружия одетой на цели. Из-за чего можно передать цели больше вещей на +(вес одетой брони и оружия), но после закрытия обмена получать сообщения о перегрузке ("%s несет на себе слишком много").

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

PS. Когда разбирался с "фичей", так возникла забавная идея — при открытии окна обмена разоружать и снимать броню с сопартийца, чтобы они были доступны в его инвентаре, а при закрытии окна обмена одевать броню и оружие, но уже с вызовом движковых функций выбора лучшего оружия и брони. Такое себе повышение "ИИ" сопартийца ;)

Это сообщение отредактировано Crafty - 1 апреля 2015 | 09:29


#6 Drobovik

Drobovik

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

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

Отправлено 10 Февраль 2015 - 20:29

Отличная работа, Crafty.

Рад видеть, что не перевелись еще умельцы в русских селеньях:)

Не забудь потом выставить результы своих нововведений.


#7 Crafty

Crafty

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

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

Отправлено 11 Февраль 2015 - 00:28

Спасибо :)

В первом посте по ссылкам версия с последними изменениями :-p

Относительно идеи с снятием/одеванием экипировки при обмене — сразу не сделал из-за подводного камня: к примеру Маркус может использовать пулемёты и энергетическое оружие, которые вcё равно попадают в категорию "стрелковое" — если я опасаюсь его умения использовать пулемёты, то забираю у него пулемёт и даю в руки турбоплазменную винтовку, но в варианте автоматической экипировке после обмена он всяко будет хватать (это теория, под рукой его нет :)) в руки пулемёт если он у него в сумке. Поэтому идея и забавная, хотя можно без проблем сделать её только для брони.


#8 The Master

The Master

    Чистосердечный зевака

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

Отправлено 11 Февраль 2015 - 08:52

Господа, ваше появление всегда неожиданно и всегда приятно.

Ждём новых интересных штук!)


#9 Phobos

Phobos

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

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

Отправлено 12 Февраль 2015 - 17:49

А нет желания сделать пулл реквест с фичами которые подошли бы к "официальному" sfall?

Такие вещи как 1, 2 и 3 лучше реализовывать с помощью скриптов. Так это просто нагромождение и без того перегруженного хаками кода sfall. Но можно было бы добавить функцию скриптовую для перезарядки (хотя опять же это реализуется скриптами).

Раз есть желание ковырять движок и писать хаки, может стоит посмотреть в сторону более нужных вещей которые сейчас никак не сделать, например нормальные элементы интерфейса? (одна из проблем это невозможность сделать полноценный "модальный" режим и блокировать клик на карту если игрок кликнул на окне)

По поводу IDA, могу скинуть IDC файл в котором я переименовал множество функций в их реальные имена, в процессе ковыряния движка за последние несколько месяцев.

PS: я планирую переключиться полностью на falltergeist, поток новых фич от меня прекратится

Это сообщение отредактировано Phobos - 12 февраля 2015 | 17:55


#10 Crafty

Crafty

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

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

Отправлено 13 Февраль 2015 - 00:18

Вау, вау :) Что есть "пулл реквест с фичами которые подошли бы к "официальному" sfall?"?

Про реализацию с помощью скриптов ты мне писал, когда я просил расширить функционал Books.ini, да беда только что я скриптовый язык не знаю, а поскольку идеи создания аддона/сюжета у меня нет, то и не вижу смысла изучать его просто ради изучения. Тоже самое относится и к "более нужным вещам" — я не в теме и просто могу не понять о чём речь и в какую сторону копать :(

В третьем посте есть ссылка на архив (иногда обновляю) с fallout2.idb для версии 6.5 и fallout2.idc подправленный для более ранних версий (проверял на 5.0 и 6.1) — из 4363 процедур "безымянными" остались 36. Кроме того описаны структуры, приличное количество констант и названий переменных :-p


#11 Phobos

Phobos

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

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

Отправлено 13 Февраль 2015 - 19:42

ОГО, где ты столько инфы нарыл? Сколько лет ты составлял эту базу?) Имена функциям вручную назначал?

Ну я тебе подсказал чем можно заняться. Над интерфейсом нужно поработать. Плюс у меня были идеи по поводу расширения AI, но опять же в плане вынести часть логики в скрипты. Хотел сделать систему укрытий и заставить врагов использовать групповую тактику.

А вообще ковырять движок на мой взгляд не слишком перспективно сейчас, ввиду того что активные мододелы практически вымерли как динозавры. Вот новый движок разжег бы огонь творчества, ИМХО. Любые фичи запиливать можно будет без адских хаков, а скрипты писать на современном языке. Не желаешь помочь проекту falltergeist? (C++, SDL)

Это сообщение отредактировано Phobos - 13 февраля 2015 | 19:46


#12 Crafty

Crafty

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

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

Отправлено 14 Февраль 2015 - 01:03

Сначала в два окна переименование процедур/переменных (Ctrl-Ins/Shift-Ins) с анализом содержимого, ну чтобы быть уверенным что переименовываемое в fallout2 действительно соответствует аналогу из mapper2 (который обработан idc от Abel). Потом анализ и добавление имён из MacOS списка функций от Kanhef (main_*, MVE_* и что-то ещё). Потом ещё совсем немного из fallout2.idc от Abel. Потом добавление комментариев из EngineDocs от Ray, ещё комментарии из архивов форума и сайта TeamX и других мест. Ну и своего чутка — структуры, константы и комменты. В общем с миру по нитке, за пару недель управился ;)

А вот с falltergeist я, к сожалению, не помощник — даже то, что раньше знал уже забыл.
Я себе мозг сломал вспоминая паскаль пока делал простенькую программку для форматирования idc из 6.5, чтобы этот idc подхватывался предыдущими версиями иды (ну там "SegRegEx" поменять на "SegReg" и отрезать последний параметр или заменить все "SetType" в теле которых есть "__usercall" на "SetFunctionCmt" и тому подобное. И от результата рыдаю ;(


#13 Phobos

Phobos

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

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

Отправлено 14 Февраль 2015 - 08:08

Не совсем понял почему ты не можешь помочь с falltergeist, если ковыряешь sfall значит тянет на С++, или тебя именно хардкорные хаки привлекают?) Чтож, каждому свое я полагаю.

Твоя работа по этой базе похвальна, а с какой целью ты все это делал, если не секрет?
Было бы круто конечно еслиб ты комментарии писал только на английском языке. Думай о потомках так сказать. А то TeamX за годы накопили столько знаний а потом свалили в небытие не успев должным образом эти знания применить. И никакого толку от них нет на непонятном русском :)

ЗЫ: В моей базе есть некоторые структуры которых нет у тебя.


#14 Crafty

Crafty

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

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

Отправлено 14 Февраль 2015 - 18:11

"хотя мои познания в C[++] очень поверхностны, да и не писал я ничего больше 10 лет" © :-p

Цель простенькая — удобства ради, себе и людям. Ну или время так убивал :-p

А свою базу (или idc) конечно покажи ;)

Отправлено: 14 фев 15 20:19
Всё же решил добавить идею с бронёй — при открытии окна обмена снимается броня с сопартийца и появляется в инвентаре, а после закрытия окна обмена одевается лучшая броня из доступных. Также исправил забавный некритичный баг — если в инвентаре сопартийца количество штук одеваемой брони больше одного, то снимать через диалог ("поговорим об оружии и снаряжении -> Сними броню") приходится это количество штук брони.

Ещё расширил функциональность кнопок "Лучшее оружие" и "Лучшая броня" в настройках сопартийца — теперь если оружие/броня одеты, то нажатие на кнопку их снимает :-p

Это сообщение отредактировано Crafty - 22 февраля 2015 | 01:40


#15 Phobos

Phobos

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

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

Отправлено 15 Февраль 2015 - 11:22

QUOTE
Ещё расширил функциональность кнопок "Лучшее оружие" и "Лучшая броня" в настройках сопартийца — теперь если оружие/броня одеты, то нажатие на кнопку их снимает :-p


А вот это полезная фича. Ты используешь систему контроля версий при разработке? Стоило бы все-таки форкнуть проект на Sourceforge или создать на github. Ты же не из этих, которые считают свой код невероятной ценностью и отказываются выкладывать в общий доступ? ;)


#16 Crafty

Crafty

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

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

Отправлено 15 Февраль 2015 - 17:46

Так в первом посте ссылка на исходники :-p (перезалил их, а также dll — поправив уже свой баг после вчерашнего добавления).

А контроль версий, SF и github — слишком уж масштабно для простеньких ассемблерных вставок.
Вообще если считаешь что какая-то идея заслуживает внимания и есть желание, то добавь в официальный sfall ;)

Это сообщение отредактировано Crafty - 16 мая 2015 | 16:12


#17 Fakeman

Fakeman

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

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

Отправлено 19 Февраль 2015 - 19:44

Помогите со сборкой и кодом sfall.
Хочу реализовать и добавить секцию в ini файл с возможностью прописать размер exe файла(fallout2) по аналогии как реализовано с ExtraCRC в модерской версии сфала.
В общем код типа вставил не знаю правильно ли, и будет ли оно работать... :) теперь необходимо это собрать, подскажите чем и как правильно это все собрать.
ниже я пометил где вставил новый код.
CODE
void CRC(const char* filepath) {
char buf[512];
HANDLE h=CreateFileA(filepath, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
if(h==INVALID_HANDLE_VALUE) Fail("Cannot open fallout2.exe for CRC check");
DWORD size=GetFileSize(h, 0), crc;
if(size!=ExpectedSize) {

////////// ВСТАВИЛ КОД ////////////
#ifdef TRACE
DWORD extraSize=GetPrivateProfileIntA("Debugging", "ExtraSize", 0, ".\\ddraw.ini");
if(size!=extraSize) {
#endif
///////////////////////////////////////
 sprintf_s(buf, "You're trying to use sfall with an incompatible version of fallout\nWas expecting '" TARGETVERSION "'\n\nfallout2.exe was an unexpected size. Expected 0x%x but got 0x%x", ExpectedSize, size);
  Fail(buf);

/////////// ВСТАВИЛ КОД //////////////
#ifdef TRACE
 }
#endif
//////////////////////////////////////////
}
BYTE* bytes=new BYTE[size];
ReadFile(h, bytes, size, &crc, 0);
crc=crcInternal(bytes, size);

bool matchedCRC=false;
#ifdef TRACE
DWORD extraCRC=GetPrivateProfileIntA("Debugging", "ExtraCRC", 0, ".\\ddraw.ini");
if(crc==extraCRC) matchedCRC=true;
#endif
for(int i=0;i<sizeof(ExpectedCRC)/4;i++) {
 if(crc==ExpectedCRC[i]) matchedCRC=true;
}
if(!matchedCRC) {
 sprintf_s(buf, "You're trying to use sfall with an incompatible version of fallout\nWas expecting '" TARGETVERSION "'\n\nfallout2.exe had an unexpected crc. Expected 0x%x but got 0x%x", ExpectedCRC[0], crc);
 Fail(buf);
}

CloseHandle(h);
delete[] bytes;
}


Это сообщение отредактировано Fakeman - 19 февраля 2015 | 19:52


#18 Crafty

Crafty

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

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

Отправлено 19 Февраль 2015 - 21:20

Взять что-то вроде VS2010ExpressRUS.iso и установить Visual C++ 2010, запустить и загрузить (Файл->Открыть->Решение или проект...) ddraw.vcxproj. После загрузки в конфигурации решения (выпадающее меню наверху) поменять "Release" на "Trace" и нажать F7. Получить на выходе (предварительно создав "C:\Games\Fallout2\") готовый dll :-p Ещё придётся сначала поставить DirectX SDK и подбрасывать из него нужные файлы (не помню детали).


#19 Fakeman

Fakeman

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

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

Отправлено 19 Февраль 2015 - 21:55

QUOTE
Взять что-то вроде и установить Visual C++

а есть ли программы компиляторы отдельно от пакета? а то весь пакет не хочется что-то устанавливать, да и полностью оно мне не нужно будет т.к. толком не умею писать на С.


#20 Crafty

Crafty

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

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

Отправлено 19 Февраль 2015 - 23:05

В промежутке между реализацией идеи с одеванием брони и расширением функциональности кнопок я задумался — при нажатии в окне настроек сопартийца на кнопку выбора лучшего оружия, если оно одевается, то меняется анимация в картинке внизу, а почему для брони это не работает?
Сделал изменение анимации для брони и получил аналог скриптового "NPC Armor" мода, который дополнительно умеет менять внешний вид сопартийца ещё и в картинке. Начал тестировать и, опаньки, неожиданный побочный эффект — после одевания брони и изменения анимации сопартийцы "учились" пользоваться разными видами оружия. Поглядел подробнее и понял, что возможности сопартийцев определяются не какой-то хитрой таблицей с заданными параметрами для разрешённого оружия, а простым наличием анимации: есть анимация — умеет пользоваться оружием, нет — значит нет. Поэтому если после одевания брони я меняю анимацию на ту, которая указана в fid брони, то меняю и правила, а это провал и я отказался от идеи (также как и желания устанавливать разновидности скриптового "NPC Armor" мода).

Однако, спустя какое-то время я вспомнил что в RP (Restoration Project) для некоторых сопартийцев была сделана своя анимация с одетой бронёй и решил взглянуть. Действительно — анимация своя, а правила не менялись (к слову, стоит отметить что для Advanced Power Armor [MKII] и [Bridgekeeper's] Robes анимацию не сделали :( — Сулик одевает Мантию Стража моста и может использовать пулемёт). И я решил вернуться к идее движкового "NPC Armor" мода, но уже с использованием дополнительного ini-файла, в котором описаны сопартийцы и FID'ы для разной брони.
Результат доступен по ссылке из первого поста. В качестве примера в Armor.ini используются FID'ы из RP, а потому практическую пользу можно увидеть только при установленном RP.

И продолжая тему [бес]полезных косметических дополнений — теперь в окне настроек сопартийца в поле "ОД" в скобках показывается его класс брони (использовал для отладки, но решил оставить). Второе дополнение не совсем косметическое — как известно, неиспользованный перк "пропадает" после получения следующего перкового уровня. Теперь можно придержать, к примеру, перк с 9 уровня, чтобы на 12 уровне взять 2 перка.

Отправлено: 19 фев 15 23:20
2Fakeman: Тут я не помогу, сам не в восторге что пришлось ставить целый пакет. Ну и не забывай что с Trace-компиляцией ты получишь моддерскую aka отладочную версию.
Шутки ради можешь вместо компиляции просто патчить уже готовую dll'ку на предмет отключения проверки размера exe-файла или просто менять проверяемый размер exe-файла (то что ExpectedSize=0x00122800).




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

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


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

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

Рейтинг@Mail.ru