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

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


NukaCola

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

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

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

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

ну так подскажи как мне открыть файл .pro из папки scenery и поправить его))

да нету там ничего такого)

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

В итоге потерянные фишки от движка теперь нужно доделывать самим в скрипте.

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

блджад. то есть ты хочешь сказать что в движке топором вырублено что только по скенери с айди 1009 (20003F1) будет работать этот бинокль?... оххх... еп....

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

 

чукча не дурак, чукча учится.

 

истина где-то здесь

 

procedure description_p_proc begin
   script_overrides;
end


procedure look_at_p_proc begin
   script_overrides;   
end
Изменено пользователем Vis
Ссылка на комментарий

ага самому повторить, то что сделано в движке.

еще и заряжать/заправлять авто надо при использовании итемов, если это не сделано.

 

вопрос оно тебе надо?)

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

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

 

ты же сам видел, там косяк ток при бинокле, все остальное отрабатывается.

 

помоги лучше вот с этим. никак не доеду.

set_self(), как мне писать?

 

мне надо узнать указатель объекта с пидом 33555441. получается надо чтобы этот объект изначально был создан (ну как бы не проблема его видимость в ноль сразу выставить чтобы не мешал если чо).

 

что-то типа

 

set_self(ГЕТ_УКАЗАТЕЛЬ_БАЙПИДОБЪЕКТ)

можно это как-то сделать?))

 

апд.

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

еще мне странно что просле scripts_overrides процедура после моей строчки все равно выполняет свое назначение. вроде ж не должна.

 

procedure description_p_proc begin
   script_overrides;
   display_msg(message_str_game(13,549));
end


procedure look_at_p_proc begin
   script_overrides;
end

 

 

2022-07-28-020135954.png

 

 

 

 

 

 

апдапдапд. и все таки поможите мне пжлст сменить указатель set_self() на указанный пид если это возможно))

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

отредактировать скенери нельзя?

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

 

А для чего тебе понадобилось редактировать scenery?

Ссылка на комментарий
Сценери или scenery, в общем декор и окружение. В новый обьект добавить в список, а смотреть например bis-om. Frame animator-om иframeviewer-om.

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


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

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

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

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

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

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

Я не понимать что ты хочешь?

Вместительность багажника нужно каждый раз при заходе на карту обновлять (устанавливать заново).

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

 

 

procedure Update_Trunk_Carry_Wieght begin
   metarule(52, 250);
   if (global_var(455) == 1) then begin
      metarule(52, 275);
   end
   if (global_var(456) == 1) then begin
      metarule(52, 500);
   end
   .....
end


procedure use_p_proc begin
   call Update_Trunk_Carry_Wieght();
end

 

 

 

в топку

 

 

 

а хочу я вот что. функция procedure description_p_proc показывает описание объекта, скрипт которого на него сейчас работает, так? так.

 

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

тогда при вызове движок будет видеть ПИД серой машины, и функция по идее должна отработать как надо. при этом надо понимать что движок при определении ПИДа будет обращаться скорее всего к конкретному объекту, вызванному по аргументу функции - поэтому и надо так радикально менять self_obj скрипта.  причем я так понял по описанию set_self работает единоразового до первого вызова self_obj и дальше self_obj возращается на исходную - нам так и надо чтобы после выхода из процедуры остальной код не поломался, а тут даже ничо дололнительно писать не придется уже на постобработке.

 

это в теории

и надо это как раз для этого бинокля который показывает заряд машины

 

можно пойти еще вторым путем, но я не знаю реализуемо ли это.

в этой же функции играть не с obj_self а с PID_DRIVABLE_CAR 

и сделать это через set_proto_data(). но я не увидел в дефайнах как это можно сделать, там нет такого офсета...

 

апдапд.

через set_self() не работает.

как вытащить описание объекта?

в дефайнах нашел так, но не работает либо я не понимаю как его вывести на дисплей? 

display_msg(get_proto_data(33555441, 2)); -- ничо не показывает

 

 

Изменено пользователем Vis
Ссылка на комментарий

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

 

полностью попробую переписать эту дичь с покраской машины.

нашел такие функции. 

A - фид искомого скенери

B - фид текущего скенери(по идее он должен быть постоянен так как машину хочу оставлять одну оригинальную и уже на нее натягивать фиды других машин)

 

и разрулить все через

 

set_object_data(self_obj,0x20,get_proto_data(ПИД_ИСКОМОЙ,0x20))

или вот так

metarule3(107,указатель объекта текущего скенери,A,0)

 

из define_extra.h

// common object data offsets
#define OBJ_DATA_ID                 (0x00)
#define OBJ_DATA_TILENUM            (0x04)
#define OBJ_DATA_CUR_FRM            (0x18) // current frame number
#define OBJ_DATA_ROTATION           (0x1C)
#define OBJ_DATA_FID                (0x20)
#define OBJ_DATA_ELEVATION          (0x28)
#define OBJ_DATA_PID                (0x64)
#define OBJ_DATA_CID                (0x68) // combat ID, used for savegame
#define OBJ_DATA_SID                (0x78) // script ID
#define OBJ_DATA_SCRIPT_INDEX       (0x80) // script index number in scripts.lst
// items

 

 

 

из define_lite.h

 

 

#define METARULE3_ART_SET_BASE_FID_NUM      (107)
#define art_change_fid_num(WHO, NUM)           metarule3(METARULE3_ART_SET_BASE_FID_NUM,WHO,NUM,0)
 

 

 

подскажи мыслю хотя бы в правильном направлении?

Изменено пользователем Vis
Ссылка на комментарий

подскажи мыслю хотя бы в правильном направлении?

 

metarule3(107,указатель на объект,A,0) - примерно так.

 

Смена внешнего вида у байка в Соноре в декомпилированом виде.

procedure art_change_self begin
   if (global_var(455) > 0) then begin
      if (((global_var(454) bwand 8) != 0) != 0) then begin
         metarule3(107, self_obj, 1787, 0);
      end
      else begin
         metarule3(107, self_obj, 1784, 0);
      end
   end
   else begin
      if (((global_var(454) bwand 32) != 0) != 0) then begin
         if (((global_var(454) bwand 8) != 0) != 0) then begin
            metarule3(107, self_obj, 1786, 0);
         end
         else begin
            metarule3(107, self_obj, 1783, 0);
         end
      end
      else begin
         if (((global_var(454) bwand 8) != 0) != 0) then begin
            metarule3(107, self_obj, 1785, 0);
         end
         else begin
            metarule3(107, self_obj, 1782, 0);
         end
      end
   end
end

Номер изображения берется по номеру строки в ART/SCENERY.LST - 1

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

OBJ_DATA_PID

 

Можешь просто попробовать сменить у текущих пид обекта.

С xxx на 455

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

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

Через смену FID более правильнее.
Ссылка на комментарий

вобщем я решил полностью переписать всю эту сраную механику, там в коде в скриптах и Дена тоже засрано.

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

 

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

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

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

А еще лучше, если за 5к, какого механника в пустоши пригнать скриптом)

А то, если Вика нет, то катания прекращаются.

 

Ден - о чем речь?

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


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

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

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

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

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

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

вопрос по механике. может кто подскажет что за дичь.

суть вопроса: из сборки мода удаляю все скрипты, отвечаютщие за машину (zsdrvcar, zictrnk и скрипт карты denbus1). по идее должны грузится старые скрипты из оригинала.

 

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

причем технически машины действительно не существует - нет самого такого объекта, соответственно процедуры на вход в карту/обновление и тд из скрипта на кузов машины не работают. объекта нет по сейведитору, то есть это не игра с видимостью объекта.

 

дальше играясь комбинациями выявил следующее:

1. оставляем скрипты мода на машину(zsdrvcar, zictrnk) но берем оригинальный скрипт карты - ошибка не исчезает

2. удаляем все 3 скрипта - ошибка не исчезает

3. оставляем только один скрипт на машину из мода (zsdrvcar/zictrnk) - ошибка не исчезает.

 

смущает очень сильно пункт 2. может кто подскажет что такого изменилось за эти годы в механике движка что оригнальный скрипт карты по сути несовместим вобще со сборкой даже если вырезать модификации тачки, так как ошибка устраняется только добавлением скрипта сборки на эту карту(denbus1). по коду там абсолютно все идиентично с процедурами из модовских (zsdrvcar/zictrnk).

 

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

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

вопрос по работе с sfal script editor

как переписать параметры скенери?

- имя

- флаг юзабельности

- флаг юз_он_объект

 

я понимаю что скорее всего через set_proto_data или set_object_data, но в параметрах уже совсем запутался.

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

я уже писал, не дает редактировать. где и как чего настроить?

 

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

 

 

2022-08-03-171940072.png

 

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

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

 

можно же играть флагами.

 

еще вопрос можно ли играя теми же офсетами присвоить скенери статус контейнера?

 

я пытался натянуть фид скенери на пид контейнера и чет не вышло, хотя такой путь правильнее

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

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

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

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

я уже писал, не дает редактировать. где и как чего настроить?

 

Из справки маппера, сам не пробовал. Возможно информация устарела и проще можно сделать, Сталин подскажет :-)

 

Как сделать PRO-файлы редактируемыми?

На диске, куда вы установили Fallout2 (не могу сказать точнее, это может быть диск, куда вы установили редактор, или тот диск, где находится master.dat, прописанный в mapper2.cfg – я не эксперементировал э этим, у меня все заработало сразу) создайте каталог «.../fallout2/dev/proto», и в уже в нем создайте подпапки с именами «critters», «items», «scenery", «tiles», «walls», «misc». После того, как вы сделаете это, появится возможность редактирования PRO-файлов.

Важное замечание: каждый PRO-файл обладает собственным PID [идентификатор]. Если вы скопировали PRO-файл [«создали новый» путем копирования], или перезаписали один другим, то необходимо убедиться в наличии правильного PID внутри файла – этот PID идентичен соответствующему номеру строки из файла «.../fallout2/data/critters/critter.lst» переведенному в шестнадцатеричный формат, таким образом вы исправите файловую ссылку [аналогично поступайте и с другими PRO и LST файлами, например «.../fallout2/data/ items/items.lst» для PRO-файлов предметов].

Вот образец того, как выглядит структура папок у меня:

E:\ \---fallout2

\---dev

\---proto

+---critters

+---items

+---scenery

+---tiles

+---walls

\---misc

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

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

 

 

2022-08-03-184840162.png

 

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

кароче нашел таки выход) осталось дело за малым, надо лишь у кабины проставить флаг юзабельности

 

 

2022-08-03-190435502.png

 

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

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

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

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

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

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

Войти

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

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

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