Перейти к содержанию

F1-2: Тонкости модостроения в old Fallout'е


NukaCola

Рекомендуемые сообщения

есть идея. писать моды, прилепляемые к игре независимо от родных master.dat и critter.dat и НЕперезаписывая родные PIDы.

 

то есть мы читаем последние зарегистрированные PIDы в родных dat'ах и каким-то образом передаем движку регистрацию своих PID'ов с нумерацией последний родной PID + n в зависимости от того чего мы хотим впихнуть и прилепить.

 

возможно ли такое реализовать в текущих реалиях sfall'a?

 

алгоритмически я вижу это так:

1. перед запуском клиента читаем родную дату, узнаем крайние PIDы

2. пишем в data/proto/critters, data/proto/items и т.д. родные critters.lst, items.lst и т.д. с дописанием в конец файла своих пидов.

3. дописываем так же свои pro-файлы в эти папки с именами взятыми из предыдущего пункта

 

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

 

или такое лучше творить в "инсталяторе"? безусловно всё это выглядит как сферический конь в вакууме, да еще и без проверки существующих patch000 или любой другой даты, которые могут родные дополнять своими прошками.

 

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

Ссылка на комментарий

Думаешь ты это первый предложил?))

Пока отложено.

Слишком непонятно как это будет взаимодействовать с другими модами, например два куя хотят зарегать свои ваучеры, кто из них какой номер получит? - отсюда вывод только динамическая рега (никаких доп.lst файликов с дописыванием)

+ докуя времени надо будет убить на тесты при реализации.

Ссылка на комментарий

Думаешь ты это первый предложил?))

конечно нет, учитывая сколько десятилетий игре и комьюнити))

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

Ссылка на комментарий

есть идея. писать моды, прилепляемые к игре независимо от родных master.dat и critter.dat и НЕперезаписывая родные PIDы.

 

то есть мы читаем последние зарегистрированные PIDы в родных dat'ах и каким-то образом передаем движку регистрацию своих PID'ов с нумерацией последний родной PID + n в зависимости от того чего мы хотим впихнуть и прилепить.

 

возможно ли такое реализовать в текущих реалиях sfall'a?

 

алгоритмически я вижу это так:

1. перед запуском клиента читаем родную дату, узнаем крайние PIDы

2. пишем в data/proto/critters, data/proto/items и т.д. родные critters.lst, items.lst и т.д. с дописанием в конец файла своих пидов.

3. дописываем так же свои pro-файлы в эти папки с именами взятыми из предыдущего пункта

 

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

 

или такое лучше творить в "инсталяторе"? безусловно всё это выглядит как сферический конь в вакууме, да еще и без проверки существующих patch000 или любой другой даты, которые могут родные дополнять своими прошками.

 

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

 

Добавить некий вариант версионирования изменений. Что то похожее есть в morrowind, skyrim. Просто подключаем свои плагины и играем. Без потери совместимости, получится кособоко и через раз работающее.

добавлено позже

Как пример можно взять игру arcanum. Разработчики заложили написание модулей к игре. Это просто dat архив с ресурсами игры. Но лучше сделать тоньше, для каждого модуля ввести некий namespace. Где бы в ресурсах фигурировало название модуля для всех ресурсов.

добавлено позже

Еще один пункт, карты жестко завязаны на наличие этих PID идентификаторов. PID есть у всех объектов, если только написать особо умный патчер, который бы патчил и каким то образом объединял моды. Короче не реально.

Ссылка на комментарий

Mr.Сталин, не мог бы глянуть?

на всех версиях игры проявляется такой интересный баг при первом посещении Сан-Франциско.

Лопен и Дракон не исчезают из ринга, Лопен ничего Дракону не отвечает. и все, стоят они как два дурака.

 

сначала я грешил на скрипты, но я проверил это уже на 4х разных сборках и версиях игры (RP, MM, оригинал ГоГ, оригинал 1с).

 

если запускать клиент БЕЗ sfall 5.0.1 то бага нет.

 

как только ты запускаешь клиент со sfall 5.0.1 баг себя проявляет.

 

вот сейв с чистого оригинального клиента 1с (3й слот стоя рядом с СФ).

https://disk.yandex.ru/d/0ixm9JgnBI3TZA

 

сейв чистого ГоГ(4й слот)

https://disk.yandex.ru/d/HaqzgPNJUlTK0A

 

 

я понимаю что это мелочь.... но.... я обратил внимание только сейчас.

 

и еще, на версии sfall 4.3.0.2(встроен в ММ последнеее что в открытом виде MM 2.47t2), 4.3.3.1 этого бага НЕТ. Дракон бьет Лопена, Лопен ему отвечает и они исчезают с ринга. так должно быть и все оке. опять же проверил на нескольких версиях игры (чистый ГоГ, чистый 1с).

 

очень странно, но такая дичь почему-то только на 5.0.1/5.0.1.1 (даже при параметрах по умолчанию, никакого ускорения и тд и тп)

Ссылка на комментарий

Я тут сидел думал. Про.

Динамическая регистрация прототипов кажется что это не реаллизуемо, потомучто прототипы их номер сохраняются в карте, а карта загружается до запуска скриптов.

Так например, если мы создаем свой про с новам файлом “трусы.pro" и регистрируем его в скрипте потом помещаем на карту... Все хорошо до момента пока не выключим игру, так как загрузится из сохраненной игры уже не получится.

 

Для такой фичи нужен другой движок основанный на других принципах.

добавлено позже

Хотя вроде проблема загрузки решается. Думаю дальше...

добавлено позже

Обращаться к такому про чтобы получить его актуальный номер, нужно будет по имени "Трусы" при регистрации.

Пока все гладко.

Ссылка на комментарий

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

 

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

но это опять же все упирается в порядок загрузки.

1. то есть каким-то образом определять сурсы мода уже после загрузки клиента игры (чтобы избежать сразу танцы с бубном с дат-файлами патчей и тп)? но я так понимаю если клиент загружен новые прошки зарегать уже невозможно.

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

 

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

Ссылка на комментарий

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

 

В этом и огромная проблема. Есть оригинальный ф2, нумерация для криттеров заканчивается на 2000, и есть два мода, которые добавляют еще по 10 прошников. И у каждого мода нумерация от 2001=2010. Данные файлы конфликтуют и могут распалагаться на разных картах. Как правильно все это перепатчить?

Один из вариантов ввести namespace где бы был не просто номер, имя мода\номер и тогда моды будут корректно работать(опять же если моды перетирают оригинальные файлы, здесь будут проблемы, так как два мода изменяют один и тот же объект).

Как такое проделать без нарушения совместимости мне не понятно.

добавлено позже

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

 

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

 

Я не вижу простых решений из коробки.

Ссылка на комментарий

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

Невозможно, только динамическая регистрация.

(почему невозможно расписывать не буду).

Ссылка на комментарий

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

 

Дело в том, что если и получится каким то образом пропатчить карты и прошки, могут быть проблемы с глобальными переменными. Так как моды могут использовать одинаковые номера переменных.

добавлено позже

Если еще и скрипты патчить. Будет какой то люто сложный патчер, сбоящий на простых модах:)

добавлено позже

Невозможно, только динамическая регистрация.

(почему невозможно расписывать не буду).

 

Мр. Сталин, у тебя есть мысли насколько это реализуемо? Я сколько не размышлял, понимаю, что с текущим взаимодействие с ресурсами построенному на идентификаторах, что то путное сделать невозможно.

Ссылка на комментарий

Рабочий вариант, введение namespace

под namespace я подразумеваю разделение диапазонов, для про?

т.е. например ванильный вариант от 0 до 4000

для мода №1 от 4000 до 4999

для мода №2 5000-5999

итд

 

(в движке возможно иметь до 65к про)

добавлено позже

Мр. Сталин, у тебя есть мысли насколько это реализуемо? Я сколько не размышлял, понимаю, что с текущим взаимодействие с ресурсами построенному на идентификаторах, что то путное сделать невозможно.

первый вариант с динамической регой я привел.

второй с разделением диапазона - аля твой namespaces (сложнее в реализации чем первый, но вроде как менее конфликтный).

Ссылка на комментарий

под namespace я подразумеваю разделение диапазонов, для про? т.е. например ванильный вариант от 0 до 4000 для мода №1 от 4000 до 4999 для мода №2 5000-5999 итд   (в движке возможно иметь до 65к про)

 

Не совсем, но в варианте движка ф2, данный вариант будет работать.

 

Получается нужо во время загрузки патчить моды, и заменяя старые pid, новыми уже из диапазона. Это патчить все файлы, pro, map, файлы где регаются города и файлы случайных встреч, скрипты что бы разрулить номера гвар и новых PID, если они юзаются в коде. Это как ходить по минному полю, и на каждом шагу наступать на мину :)

добавлено позже

первый вариант с динамической регой я привел.

 

Как конкретно оно будет работать?

Ссылка на комментарий

Да ты чето все усложняешь.

Только новые моды должны будут работать с таким подходом (которые будут иметь например спец файл отличный от lst), остальные по старинке в диапазоне 0-4к.

Ссылка на комментарий

Да ты чето все усложняешь.

Только новые моды должны будут работать с таким подходом (которые будут иметь например спец файл отличный от lst), остальные по старинке в диапазоне 0-4к.

 

Я чёт думал, о старых. Если делать новый, то можно многое учесть.

Ссылка на комментарий

Еще один баян, но что-то не помню как делать:

1. Сменил характеристики предмета в proto manager, теперь он не key а drug. Ок, но bis mapper теперь не может открыть карту. Что делаю не так?

2. Как из внешний вид убитого critter-a, чтоб он был в виде лужи или сломанный пополам, а не только упавшим на брюхо?

-!!- Технический перерыв. Не помогаю. Починяю компухтер!


Fallout 2Путеводитель по модам | FAQ | Перевод модов | Путеводитель по RP

Nevada Band: Путеводитель по играм серииFAQ

Fallout Tactics: Путеводитель по модам | FAQ

База Данных: YD\YD\MF

Помогая другим, не забывай о себе =) 

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

добавлено позже

По второму чет походу у тебя клавиатура сломалась, в чем вопрос какойто набор слов))

добавлено позже

Предпологаю ctrl+k или читай мануал по управлению маппера.
Ссылка на комментарий

1. Так и думал, но не хотелось, таким макаром и новую прошку можно скреэйтить)

2. Не, не сломалась, я ее уже заменил, теперь подсветка неравномерная и без русской раскладки)

3. Логика, а то на k жму, а оно то встает, то падает.

-!!- Технический перерыв. Не помогаю. Починяю компухтер!


Fallout 2Путеводитель по модам | FAQ | Перевод модов | Путеводитель по RP

Nevada Band: Путеводитель по играм серииFAQ

Fallout Tactics: Путеводитель по модам | FAQ

База Данных: YD\YD\MF

Помогая другим, не забывай о себе =) 

Ссылка на комментарий

ctrl+k

нефига

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

Только это:

K -  Убивает или «воскрешает» существо

-!!- Технический перерыв. Не помогаю. Починяю компухтер!


Fallout 2Путеводитель по модам | FAQ | Перевод модов | Путеводитель по RP

Nevada Band: Путеводитель по играм серииFAQ

Fallout Tactics: Путеводитель по модам | FAQ

База Данных: YD\YD\MF

Помогая другим, не забывай о себе =) 

Ссылка на комментарий

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...