Полная Версия: (sfall) дополнения
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25
Crafty
QUOTE (Fakeman)
Во протестировал, теперь ясно ты просто увеличил скорость тикам) выше 10 ставить смысла нет ибо все начинает глючить — мобы дергаются при хождении, все начинают быстро разговаривать, это по сути тоже самое, что и SpeedMultiInitial только без анимации.
В этом и был смысл — увеличить скорость времени без увеличения скорости анимации, чтобы действия в игре выглядели реально по игровому времени — пробежался от дома к дому за 10 секунд игрового времени, а не за 1 секунду.
Мобы не дёргаются даже при 1000, разговаривают как и раньше через определённый промежуток игрового времени. И да, по сути TimeScale и SpeedMultiInitial — масло масляное ;-p

QUOTE (Foxx)
Брал любой MP3 и переименовывал в 06rokot.
В F2 это 07desert.

QUOTE (Fakeman)
ну вот в чем и вопрос, хотелось чтобы время шло быстрее, а все тики остались такими-же (прим.ред. по скорости).
А как ещё можно ускорить время не затрагивая тики, если последние и являются временем.
Прочитал оригинал:
QUOTE
I know you can modify the ddraw.ini to change the speed of the game, resulting in more fluid animations. Is there any setting anywhere in the game that changes the time scale? It currently seems 1:1, with 1 minute real world time equaling 1 minute in-game time when not traveling or waiting. Is it possible to quicken this to one second equals one minute, or whatever the user may apply? The dynamic of the days was one of the few things that bothered me about the game — I hate how I can roll into Junktown, take out Morbid, save Killian, take out Gizmo, recruit Tycho, bust the Skulz.... all in the space of half an hour in-game. Video Game exposition is more concise and less nuanced than any real world negotiation/action, and I feel the time should reflect this succinctness. Well, sorry for ranting.

Tl;dr is there any way to modify the time scale?
И сделал так же.

QUOTE (Crafty)
Так и будет.
Так и есть.
Fakeman
QUOTE
А как ещё можно ускорить время не затрагивая тики, если последние и являются временем.

Ну я как Профессионал с большой буквы в этом деле)) скажу, что нужно сделать переменную в которой тики будут вычисляться по формуле: Tics X TimeScale = NewTics
(но я так понимаю будет переполнение переменной раньше времени)
NewTics — это тики которые нужны будут для времени в пип-бое. (не в курсах как там эти тики преобразуется в формат ЧЧ:ММ ДД/МM/ГГГГ).
При этом функции game_time_hour/get_day/get_month должны по видимому брать тики из новой переменной.

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

QUOTE
Мобы не дёргаются даже при 1000

при 100 скриптовые у которых перемещение связанно через тики на таймере дергаются как под током))
и чтобы это исправить нужна проверка на AnimBusy

Имя параметру логичнее было бы дать TikcsSpeedMulti :)
Crafty
QUOTE (Fakeman)
скажу, что нужно сделать переменную в которой тики будут вычисляться по формуле: Tics X TimeScale = NewTics
(но я так понимаю будет переполнение переменной раньше времени)
NewTics — это тики которые нужны будут для времени в пип-бое. (не в курсах как там эти тики преобразуется в формат ЧЧ:ММ ДД/МM/ГГГГ).
При этом функции game_time_hour/get_day/get_month должны по видимому брать тики из новой переменной.

Еще вариант поковырять код который преобразует тики в формат времени для пип-боя и сделать там множитель равный TimeScale.
Не понимаю что в итоге должно выйти, причём тут пипбой и что ты ожидал увидеть. Приведи практический пример.

Тики содержатся в целочисленной беззнаковой (unsigned int, [0, +4 294 967 295]) переменной (_fallout_game_time) и десять раз в секунду увеличиваются на единицу. В понятный формат времени тики преобразуются простейшими делениями из расчёта значений:
CODE
/* Time Information  (in Ticks) */

#define ONE_GAME_SECOND             (10)
#define ONE_GAME_MINUTE             (60*ONE_GAME_SECOND) = 600
#define ONE_GAME_HOUR               (60*ONE_GAME_MINUTE) = 36000
#define ONE_GAME_DAY                (24*ONE_GAME_HOUR) = 864000
#define ONE_GAME_WEEK               (7*ONE_GAME_DAY) = 6048000
#define ONE_GAME_MONTH              (30*ONE_GAME_DAY) = 25920000
Потом к году прибавляется 2241, к месяцу 6 и к дню 24.

QUOTE (Fakeman)
и чтобы это исправить нужна проверка на AnimBusy
Не обязательно, посмотри как в том же ECBDYGRD.SSL сделан 11 sequence.
Fakeman
QUOTE
Не понимаю что в итоге должно выйти, причём тут пипбой и что ты ожидал увидеть.

Ожидал увидеть, что скорость тиков останется такой-же, а время будет будет идти быстрее.
Смотри сейчас 1 сек равна 10 тикам соответственно у нас есть возможность влиять на время без увеличения скорости тиков, просто меняем константу которая указывает сколько в секунде тиков. (в движке же это заложено, не с потолка же они взяли 10 тиков).
К примеру ONE_GAME_SECOND равна 5 тикам, получаем прирост времени х2 при тех же количествах тиках в переменной _fallout_game_time а один игровой час(ONE_GAME_HOUR) должна будет равняться 18000 тикам.

Но есть побочка этого способа завязанная на механике в количестве тиксов, наркота будет действовать в два раза дольше, лечится игрок будет каждые 12 часов, восстанавливать +1 очко здоровья будет не в конце дня, а через день, и т.п. фигня.
Поэтому тут возникает вопрос, а так уж ли и нужно это увеличение времени с такой побочкой без правки всего этого?
Crafty
QUOTE (Fakeman)
Ожидал увидеть, что скорость тиков останется такой-же, а время будет будет идти быстрее.
"А как ещё можно ускорить время не затрагивая тики, если последние и являются временем."
Твой способ требует ненужных усилий по изменению движка и дополнительной правки скриптов (game_time + ONE_GAME_SECOND) при каждом изменении TimeScale, а единственный, помимо увеличения скорости течения времени, "профит" от всего этого — увеличение лимита игрового времени (13*TimeScale). И это всё равно автоматически не решает проблему с анимацией в скриптовых сценках.
Fakeman
QUOTE
дополнительной правки скриптов (game_time + ONE_GAME_SECOND) при каждом изменении TimeScale,

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

QUOTE
И это всё равно автоматически не решает проблему с анимацией в скриптовых сценках.

разве должны быть какие-то проблемы, скорость и количество тиков(10:1) в скриптах остается такой же.

Ладно завязываем эту тему)





Crafty
QUOTE (Fakeman)
QUOTE
дополнительной правки скриптов (game_time + ONE_GAME_SECOND) при каждом изменении TimeScale,
я и рассматривал это с позиции модмейкеров, что потребуется правка наркоты/скриптов относительно множителя.
Так даже с этой позиции в разы проще использовать вариант с увеличением частоты прироста тиков, при этом один раз скомпилировать существующие скрипты с дополнительными проверками на anim_busy, чем каждый раз при изменении TimeScale перекомпилировать всё.
Fakeman
Сможешь довести до ума 32-битные головы? чтобы картинка располагалось правильно при других разрешениях отличного от 640х480, а то сдвигается в левый верхний угол. (если нужны файлы с башкой могу дать.)

и start_gdialog(NAME, ptr_obj, mood, head, BACKGROUND)
вроде как багнута параметр mood игнорируется, и всегда при начале разговора показывает нам хорошую(GF/GP) физиономию. (по идеи должна быть нейтральная если уж не учитывать mood). возможно я ошибаюсь.
У голов еще есть не используемый суффикс V для плохой(BV) и хорошей(GV) головы, о котором ничего ни где не написано.

И еще такой вопрос не совсем относящийся к сфаллу.
в движке заложено ограничение на количество используемых frm в 4096, потому как в индификаторе frm pid для этого используется 12 бит, остальные 4 бита(ID1) используются под нужды криттеров и голов, для остальных типов не используется, и их значения могут быть любыми(если верить докам).
CODE
Поля «Object type» и «Индекс в лист-файл» используются всегда, а поля «ID3», «ID2» и «ID1» могут игнорироваться в зависимости от значения поля «Object type». Значение не используемого бита может быть любым.

Поэтому вопрос, возможно ли расширить указатель на индекс lst до полных 2-x байт (16 бит) для Тiles (реально не хватает 4к изображений :) )
Сам формат карт вроде как поддерживает сохранение в нем 16-битого указателя на индекс фрм'ки.
CODE

На одну плитку приходится 4 байта. Структура плитки: RR RR TT TT
где RR RR - это указатель плитки крыши (roof tile) по листфайлу master.dat\\art\tiles.,нависающей над плиткой пола, а TT TT - указатель плитки пола (floor tile) по тому же самому листфайлу. Данное решение позволяет использовать одни и те же плитки в качестве крыши и пола.

Но в движке и маппере не учитывает эти 4 бита и показывает нам черную дырку в плитке если значение указателя больше 0FFF, можно это починить? (ну и соответственно в маппере то-же самое.)

Я тут пытался кое чего поискать — но сам понимаешь ассемблер это не моя стихия) Вот есть такое очень похожее на нашего пациента
CODE
004B2A56 loc_4B2A56:                                ; square_render_floor_+197j
004B2A56            mov     eax, [esp+44h+var_34]
004B2A5A            mov     ebx, [esp+44h+var_18]
004B2A5E            mov     edx, ds:_squares
004B2A64            add     eax, esi
004B2A66            add     edx, ebx
004B2A68            lea     edi, ds:0[eax*4]
004B2A6F            mov     edx, [edx]
004B2A71            mov     edx, [edx+edi]
004B2A74            and     edx, 0F000h
004B2A7A            shr     edx, 0Ch
004B2A7D            test    dl, 1
004B2A80            jnz     short loc_4B2AD4

логическая операция И, сдвиг на 12 бит и проверка результата — если пациент здоров то по видимому рисуем тайл.
потом ниже кодом идете обнуление старших 4 битов
CODE

004B2AB1            mov     eax, 4                  ; ObjType Tiles
004B2AB6            and     edx, 0FFFh            ; Index

Я убил jnz выше nop'пами — тайлы пола появились, но старшие 4 бита все равно не учитываются. (и как позже выяснилось, тайлы пола все равно не дает рисовать HRP с ним черная дыра).
Крыша кстати изначально показывается, но 4 бита где-то обнуляются и показывается тайл начиная с первого индекса ну ты понял, а изменение кода на and edx, FFFFh не помогает. если в режиме отладки проверить рег. edx то там как раз то число что записано в карте вида RRTT.
Я там все что нашел по исправлял(исправлял прямо в exe) а толка никакого) в общем нид хелп!
И как быть с HRP?
Crafty
QUOTE (Fakeman)
Сможешь довести до ума 32-битные головы?
Не очень хочу заниматься DirectX'овскими плюшками, в общем не в приоритете это... :-p

QUOTE (Fakeman)
и start_gdialog(NAME, ptr_obj, mood, head, BACKGROUND)
вроде как багнута параметр mood игнорируется, и всегда при начале разговора показывает нам хорошую(GF/GP) физиономию. (по идеи должна быть нейтральная если уж не учитывать mood). возможно я ошибаюсь.
mood учитывается только если не используется говорящая башка (head = -1).
У башки реакция хранится в нулевой локальной переменной её скрипта, и настроение вычисляется с помощью local_var(0) из скрипта цели:
CODE
if local_var(0) > 10 then mood := good_fidget;
else if local_var(0) > -10 then mood := neutral_fidget;
else mood := bad_fidget;

QUOTE (Fakeman)
Поэтому вопрос, возможно ли расширить указатель на индекс lst до полных 2-x байт (16 бит) для Тiles (реально не хватает 4к изображений :) )
Посмотрю сначала у себя, там дофига менять... Если выйдет, то будет 16384 вместо 4096. Ну и HRP может всё похерить.
Fakeman
CODE
У башки реакция хранится в нулевой локальной переменной её скрипта, и настроение вычисляется с помощью local_var(0) из скрипта цели:

Я вас понял. :) вот это конечно новость для меня. как кирпич на голову.

QUOTE
Посмотрю сначала у себя, там дофига менять... Если выйдет, то будет 16384 вместо 4096.

С чем связанно именно 16348 а не 65535? для чего 1 бит оставлять, в качестве знака что ли?
вот эту надо функцию надо копать
004B2ACF call floor_draw_
я не смог в ней нормально разобраться где там обнуляются 4 бита.
пред ее вызовом в eax содержится значение вида 0400TTTT (это после правки art_id_)
что делает функция art_id_ ? — я так понял что она общая для всех да?

QUOTE
Ну и HRP может всё похерить.

Ну тогда будем тайлы для крыши использовать, hrp вроде как не трогает их.
Crafty
QUOTE (Fakeman)
С чем связанно именно 16348 а не 65535? для чего 1 бит оставлять, в качестве знака что ли?
Движок использует первый бит (e) из оставшихся четырёх для своих нужд (флаг использования???). Ещё в одном месте есть проверка и второго бита (s), но я не вижу где он используется и это меня беспокоит-напрягает. Поэтому сдвигаю эти два бита наверх и верхняя граница индекса (i) таким образом становится равна 0x3FFF вместо 0xFFF.
CODE
00se iiii iiii iiii
seii iiii iiii iiii

В общем собрал отладочную версию на посмотреть, но мне тяжко проверить...
Fakeman
QUOTE
В общем собрал отладочную версию на посмотреть, но мне тяжко проверить...

там легко карту для теста подготовить (даже прошки не надо делать), art\tiles.lst надо расширить до 4096+ просто дублируя строчкy с reserved.frm и на каком-нибудь номере например 4100 поставить любой из используемый в игре frm-тайла как контрольный. зайти в маппер димса и понатыкать этот тайл на пустую карту сохранить и уже в игре по контр-R грузить и тестировать.

Ты внес изменения в отладочную версию сфала? -ничего не изменилось, вернее тайлы пола показываться стали(hpr все равно блокирует), но опять таки графика тайла соответствует началу по индексу листа.
мне кажется ты еще забыл правку сделать в art_id_
00419D46 and eax, 0FFFh
но я ее менял по твоему методу и без разницы.
проанализируй лучше floor_draw_ / roof_draw_ я думаю там что-то.

---
я вот тут подумал, а ничего что самих то прото-файлов нет на такое количество тайлов, я вот проверяю 4109 frm-тайл но самой то прохи нет) в коде случаем нигде не проверяется? :)
пойду сделаю прохи... да нет без разницы.


и еще вопрос как вообще движок работает с art tiles.lst может он в памяти тоже ограничен по fff и больше чем 4096 не может содержать элементов аля массив, и если значение больше просто берет значение с начала массива.
Crafty
QUOTE (Fakeman)
там легко карту для теста подготовить (даже прошки не надо делать), art\tiles.lst надо расширить до 4096+ просто дублируя строчкy с reserved.frm и на каком-нибудь номере например 4100 поставить любой из используемый в игре frm-тайла как контрольный. зайти в маппер димса и понатыкать этот тайл на пустую карту сохранить и уже в игре по контр-R грузить и тестировать.
Так конечно проще ;) Пересобрал отладочную версию и добавил требование наличия переменной MoreTiles=1 в [Misc] секции. У меня работает, если отключён HRP.
Fakeman
QUOTE
Пересобрал отладочную версию

Да работает! спасибо) и я могу эти все правки сделать и для маппера(разумеется по другим адресам) и он тоже будет показывать тайлы?
в tiles.cpp это все правки которые ты сделал или есть еще?
Маппер димса я то поправил что б тоже показывал, но хочется еще и игровой маппер в нем тестить быстрее)

А что насчет HRP есть соображения по этому поводу?
(я так понимаю HRP — работает по такому-же принципу как и библа ddraw?)

и еще меня очень смущает art_id_ и подобные функции в которых участвуют не только фрм-тайлов, как допустим это отразится на работе для фрм-scenary, что по сути для их изменилось?
Crafty
QUOTE (Fakeman)
Да работает! спасибо) и я могу эти все правки сделать и для маппера(разумеется по другим адресам) и он тоже будет показывать тайлы?
Попробуй, хотя скорее всего в маппере ещё где-то нужно что-то подправить.

QUOTE (Fakeman)
в tiles.cpp это все правки которые ты сделал или есть еще?
Все, касающиеся этого вопроса.

QUOTE (Fakeman)
А что насчет HRP есть соображения по этому поводу?
Пока никаких, да и без HRP пока эта штука из разряда "прикольных".

QUOTE (Fakeman)
(я так понимаю HRP — работает по такому-же принципу как и библа ddraw?)
Да.

QUOTE (Fakeman)
и еще меня очень смущает art_id_ и подобные функции в которых участвуют не только фрм-тайлов, как допустим это отразится на работе для фрм-scenary, что по сути для их изменилось?
art_id_ позже подправлю на проверку тайлов, art_get_name_ только что поправил.
Но тут проблема в другом — на карте тайлы хранятся с установленным первым битом (e) и, возможно, вторым (s) где нужно и потому после загрузки таких карт (а они все такие) будут неприятности. В общем надо копать дальше...
Fakeman
QUOTE
Но тут проблема в другом — на карте тайлы хранятся с установленным первым битом (e) и, возможно, вторым (s) где нужно и потому после загрузки таких карт (а они все такие) будут неприятности.

Хранятся? это те карты которые сохраняет игра .sav? — ибо в обычном map формате эти 4 бита всегда равны нулю. каково предназначение этих 2 бит?

QUOTE
Пока никаких, да и без HRP пока эта штука из разряда "прикольных".
Ну тайлы потолка показывает, значит буду перемещать потолки за пределы 4к
надо другие версии попробовать, вдруг это что-то связанное с лишним функционалом HRP — может из-за тумана войны.
жаль что человек не оставил исходники сего творения.
Phobos
@Crafty:

Давно мучает вопрос. Зачем переписывать код sfall-а весь на ASM? Мне правда любопытно, какая причина может сподвигнуть на такое решение :)
Foxx
QUOTE (Phobos)
Зачем переписывать код sfall-а весь на ASM?
Мне кажется ему так легче работать с кодом.

QUOTE (Crafty)
Так я же понимаю C[++] на простейшем уровне, а ASM уже достаточно вспомнил. Мне так проще ;)
Phobos
QUOTE
Мне кажется ему так легче работать с кодом.


Фигово то что большинству людей как мне кажется легче работать с кодом для программиста а не с кодом для машины :)

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

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

Еще не понятно почему бы не продолжать использовать github? Или имеет место некое желание быть единоличным владельцем кода? (которое мне, опять же, как фанату open-source, не понять)


PS: кстати а тут есть у кого-нибудь мнение по поводу интеграции LUA в sfall?
Fakeman
QUOTE
Если бы мы мыслили в одном русле, вместе могли бы горы свернуть в плане расширения возможностей движка...

А как же движок со сложным названием на букву F, на который ты бросил все свои силы?

А что подразумевается под интерацией луа?
Phobos
QUOTE
А как же движок со сложным названием на букву F, на который ты бросил все свои силы?


Да я давно им не занимался. Тоже надо бы время найти.


QUOTE
А что подразумевается под интерацией луа?


Возможность подключения глобальных и хук скриптов (а в перспективе и полная альтернатива SSL для объектов тоже) на Луа. Для всех высокоуровневых функций ВМ пробросить биндинги и вперед.

Преимуществ перед SSL масса:
- известный любому геймдеву или опытному мододелу язык с кучей готовых библиотек и решений
- не нужно ничего компилировать (соответственно отпадает надобность в поддержке редактора скриптов, компилятора и декомпилятора)
- новые опкоды можно будет прописывать напрямую в sfall без необходимости обновления компиляторов, кроме того отпадет проблема конфликтов (например если 2 человека независимо друг от друга добавляют новый опкод следующий по номеру — получается 2 варианта языка SSL...) — биндинги будут не по порядковому номеру а просто имя функции
- поддержка современных парадигм программирования, таких как ООП

Сложности которые я вижу:
- а будут ли юзать?)
- все-же кто-то будет продолжать юзать SSL скрипты (например для модов к оригинальной игре или старым TC, без создания игры с нуля) и захочет новые опкоды — соответственно проблема поддержки sslc/int2ssl никуда не денется и теперь придется каждую новую функцию в трех местах прописывать (не считая редактор скриптов, документацию и т.п)
- вызов опкодов из луа, понадобится какой-то фейковый scriptProgram (но это не проблема по идее)


Вообще натолкнули меня на это размышления о том как бы сделать в фалауте конфиги такие же удобные как в STALKER. В принципе уже сейчас можно для этого юзать функции для работы с INI (пусть они коряво реализованы, но работают). Вариант использования — расширить прототипы игры, вынести туда например новые параметры оружия, которые будут использоваться в хук-скриптах просчета атаки, урона и т.п. Сейчас чаще всего просто прописывают для каждого мода прямо в скрипты PID оружия через кучу уродливых IF.. В общем ничего хорошего и никакой расширяемости.
Подобные конфиги позволят сделать мод расширенного функционала для оружия, брони и т.п. который потом любой без знания скриптов сможет адаптировать для любого мода.
Fakeman
QUOTE
Да я давно им не занимался. Тоже надо бы время найти.

ну я так посмотрел активности там маловато — в плане написания кода.
сразу вам скажу, что не стоит делать ограничение в 4095 картинок
а то смотрю там код и вижу такую хренатень(
auto baseId = FID & 0x00000FFF;

QUOTE
Возможность подключения глобальных и хук скриптов (а в перспективе и полная альтернатива SSL для объектов тоже) на Луа. Для всех высокоуровневых функций ВМ пробросить биндинги и вперед.
- а будут ли юзать?)

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

Crafty Еще раз по поводу start_gdialog.
CODE
mood учитывается только если не используется говорящая башка (head = -1).

тогда получается, что параметр mood и нафиг не нужен, т.к. "безбашенным" нпц нечем показывать свои эмоции :P
Phobos
А почему в Party control заблокировали кнопку PRINT и возможность красться во время контроля NPC?

А как вам такая идея, коллеги. Что если добавить новый опкод такой который позволит добавлять новые скриптовые функции в sfall без необходимости менять компилятор/декомпилятор?
В частности это позволит вам добавлять новые команды в свой форк так что мы сможем их у вас потом выборочно скомуниздить :D При этом конфликты маловероятны, т.к. вместо порядкового номера опкода в памяти будет использовать строковое имя.
Fakeman
QUOTE
А как вам такая идея, коллеги. Что если добавить новый опкод такой который позволит добавлять новые скриптовые функции в sfall без необходимости менять компилятор/декомпилятор?

не страдай фигней) -не ну и нафига?)
лучше сделайте в sfall аналог HRP :)
Phobos
QUOTE
не страдай фигней) -не ну и нафига?)

Читай выше нафига. Добавлять новые возможности скриптам теперь в разы проще будет.

QUOTE
лучше сделайте в sfall аналог HRP :)

Не, это точно без меня. Слишком дофига делов. Если еще копировать функционал с туманом войны, границами скролла и т.п...
Foxx
QUOTE (Phobos)
Если еще копировать функционал с туманом войны
Не понимаю зачем его вообще сделали в HRP — ну не подходит "туман" к этой игре (или он просто криво реализован).
Crafty
QUOTE (Fakeman)
Хранятся? это те карты которые сохраняет игра .sav?
При записи игры сохраняется бит (e), а при загрузке он сбрасывается. Добавлю сбрасывание перед записью чтобы избежать проблем при MoreTiles=0.

QUOTE (Fakeman)
жаль что человек не оставил исходники сего творения.
HRP своим аналогом подменяет движковую square_render_floor_. Добавил проверку на HRP 4.1.8 и нужные исправления.

QUOTE (Phobos)
Давно мучает вопрос. Зачем переписывать код sfall-а весь на ASM?
QUOTE (Foxx)
Мне кажется ему так легче работать с кодом.
This :-p

QUOTE (Phobos)
Выходит так что поддерживать весь переписанный код кроме Crafty никто и не сможет толком, т.к. возрастает его сложность.
Так это справедливо и для меня — я не могу нормально поддерживать написанный на C[++] код.

QUOTE (Phobos)
Еще не понятно почему бы не продолжать использовать github?
Меня напрягает добавление в ченжлог, потому что нужно коротко и понятно, а гитхаб вообще адок — поменял пару строчек кода и нужно отчитываться почему и для чего. В какой-то момент я понял что трачу больше времени на заливку изменения и выдумывания для него описания. Суета сует... :-p
Исходники всяко есть в архиве.

QUOTE (Phobos)
кстати а тут есть у кого-нибудь мнение по поводу интеграции LUA в sfall?
QUOTE (Fakeman)
поэтому лучше написать новый двиг где и применить все эти новые возможности.
Согласен.

QUOTE (Fakeman)
тогда получается, что параметр mood и нафиг не нужен, т.к. "безбашенным" нпц нечем показывать свои эмоции :P
Угу, такой сюр :(
Отношу это к багам и исправляю — теперь значение параметра mood всегда учитывается, но дополнительно может быть равно -1 — в этом случае mood будет рассчитываться с помощью нулевой локальной переменной этой башки.

QUOTE (Phobos)
А почему в Party control заблокировали кнопку PRINT и возможность красться во время контроля NPC?
О PRINT не знаю (да и что это?), скрытность заблокирована из-за очереди событий — обрабатывается только ГГ и использование скрытности сопартийцами после выхода из боя будет менять состояние у ГГ. Сейчас подумал и да, это в принципе можно обойти. Не шибко много профита (у сопартийцев нет перков/трейтов), и к тому же индикатор скрытности сейчас используется для имени.
Phobos
Crafty, почему бы тебе не освоить C/C++? Всяко по жизни пригодится :D А коллегам по цеху будет большой профит.

А насчет Github ты зря. Никто же не заставляет каждые пару строк комитить. Ты можешь делать коммиты с такой же частотой как заливаешь в дропбокс.

А что ты думаешь по поводу универсального опкода?
Fakeman
QUOTE
Отношу это к багам и исправляю — теперь значение параметра mood всегда учитывается, но дополнительно может быть равно -1 — в этом случае mood будет рассчитываться с помощью нулевой локальной переменной этой башки.

Я буду целовать песок по которому ты ходил))
Я вот тоже что-то типа такого хотел предложить, но потом подумал, что это слишком сложно будет — сложнее чем возня с тайлами :))

QUOTE (Phobos)
В частности это позволит вам добавлять новые команды в свой форк так что мы сможем их у вас потом выборочно скомуниздить :D

Тут как раз Крафти накопал ряд полезных функций из движка которых нет в сфалле, например вот.
write_int(ptr_obj+(0x24), flags) / read_int(ptr_obj+(0x24), flags)
позволяет получить и записать флаги объекта(криттера) непосредственно расположенного на карте.
там еще есть пару полезных вещей если полистать тему.
вот можете скомуниздить т.е. добавить себе)
Drobovik
QUOTE
QUOTE (Fakeman)
тогда получается, что параметр mood и нафиг не нужен, т.к. "безбашенным" нпц нечем показывать свои эмоции :P
Угу, такой сюр :(
Отношу это к багам и исправляю — теперь значение параметра mood всегда учитывается, но дополнительно может быть равно -1 — в этом случае mood будет рассчитываться с помощью нулевой локальной переменной этой башки.


А вот это мне интересно..)
Fakeman
По мапперу.
Я все пропатчил, все работает, ну кроме всяких функций по редактированию карты — оно и не надо.
Но остались вопросы в функции obj_preload_art_cache_
в fallout.exe такой код
CODE

lea     edx, [esp+1020h+buf]    ; lock
в нех: 8D 94 24 00 10 00 00

mov     eax, [esp+1020h+buf]    ; art_ptr
в нех: 8B 84 24 00 10 00 00

В маппер2.exe так
CODE

lea     edx, [esp+1020h+var_10]
в нех: 8D 94 24 10 10 00 00

mov     eax, [esp+1020h+var_10]
в нех: 8B 84 24 10 10 00 00

ничего что в нех отличается код от игрового на 10h, в чем вообще разница? -не пойму. (в игре получается ограничение на 16384, а в мапппере 16400)

и как мне поступить с art_id_ и art_get_name_ ?
может сделать call в неиспользуемую область типа таблицы перков и там код написать? или так нельзя делать)
Crafty
QUOTE
У башки реакция хранится в нулевой локальной переменной её скрипта, и настроение вычисляется с помощью local_var(0) из скрипта цели:
Описаны в MODREACT.H:
CODE
// LOCAL VARS WHICH WILL BE SAVED FOR EACH CRITTER

#define LVAR_reaction                   (0)             // Holds reaction number value.
#define LVAR_reaction_level             (1)             // Holds reaction level: BAD, NEUTRAL, GOOD.
#define LVAR_got_reaction               (2)             // Makes sure to modify reaction only once.
#define LVAR_base_reaction              (3)

QUOTE (Phobos)
А что ты думаешь по поводу универсального опкода?
Так я не против.

QUOTE (Fakeman)
Я все пропатчил, все работает
Не спеши, я уже сделал базовую версию (кодовое название sfallM, keke).

QUOTE (Fakeman)
ну кроме всяких функций по редактированию карты — оно и не надо.
Почему не надо? Ты в маппере играешь?
Fakeman
QUOTE
Почему не надо? Ты в маппере играешь?
В смысле играю) карты там делаю, скрипты не-сфаловские тестю, я имел виду что новые тайлы можно в маппере димса тыкать, я же его поправил для этого дела.

QUOTE
Не спеши, я уже сделал базовую версию (кодовое название sfallM, keke).
ну раз такое дело то поправь еще процедуры типа tile_place и tile_place_at чтоб "новые" тайлы можно было размещать.
я их правил но чтот не заработало как всегда)

CODE
#define LVAR_reaction                   (0)             // Holds reaction number value.

эта всегда сбрасывается в -3 когда криттер походил(поучаствовал) в бою. и вроде как даже если нпц из другой криттерской команды (не из стой с которой гг в бою).
Crafty
QUOTE (Fakeman)
ну кроме всяких функций по редактированию карты — оно и не надо.
QUOTE (Crafty)
Почему не надо? Ты в маппере играешь?
QUOTE (Fakeman)
ну раз такое дело то поправь еще процедуры типа tile_place и tile_place_at чтоб "новые" тайлы можно было размещать.
О том и разговор — изменений из F2-версии недостаточно.
Ссылка в первом посте, а здесь патчик для простенькой проверки. BIS'овский маппер по-другому обрабатывает список доступных тайлов — использует proto\tiles\tiles.lst и в отличии от маппера димса фокус с art\tiles\tiles.lst не прокатывает. Поэтому я взял из чистого F2 содержимое art\tiles и proto\tiles, добавил в art\tiles новые файлы из RP, потом из Невады и добил Олимпом. С добавлением в art\tiles\tiles.lst новых файлов. Создал в proto\tiles недостающие *.pro и добавил их в proto\tiles\tiles.lst.
Патчик распаковать в master_patches или скопировать его в каталог F2/маппера (в ddraw.ini проверить отсутствие PatchFile, отсутствие master_patches\art\tiles\tiles.lst и master_patches\proto\tiles\tiles.lst), в ddraw.ini добавить MoreTiles=1 (нужно бы какое-то описание придумать). Загружать artemple.map (в F2 Ctrl-R или новая игра, а в маппере Alt-O).

QUOTE (Fakeman)
эта всегда сбрасывается в -3 когда криттер походил(поучаствовал) в бою.
Движково ГГ должен обижать криттера, каждая любая обида устанавливает в -3 (на мой взгляд должно быть "накопление").
Fakeman
Ну проверил вроде работает.
CODE
+ Добавлены переменные PatchFile, SingleCore, ExtraSaveSlots, BoostScriptDialogLimit и DebugMode.

Круто DebugMode прямо в маппере.
Надо было еще и ProsessorIdle перенести а то маппер проц грузит как современная игра)
Crafty
QUOTE (Fakeman)
Круто DebugMode прямо в маппере.
Ну ради 3 режима оставил, так-то он в маппере есть, и, возможно не все знают, для переменной mode из mapper2.cfg кроме значения environment (настройка режима вывода через DEBUGACTIVE) можно использовать gnw (окошко Debug), log (создание debug.log), screen и mono. Последние два не шибко юзабельны в современных реалиях.

QUOTE (Fakeman)
Надо было еще и ProsessorIdle перенести а то маппер проц грузит как современная игра)
У меня 50%, но добавил.
Phobos
@Crafty:

Может вместо Sfall2 использовать буквенное обозначение вашего форка? Например SfallC (Crafty) или SfallA (Alternative). Дабы избежать путаницы (ведь у Sfall уже была версия 2.0).

Велись ли какие-либо работы для реализации (либо уже реализовано) следующих фич:

- Изменения логики ИИ во время боя (давно хотел сделать несколько хук скриптов чтобы кастомизировать поведение скриптами).
- Вывод типа/количества патронов в магазине прямо поверх иконки оружия в инвентаре.
- Опция для подсветки криттеров по аналогии с подсветкой контейнеров и предметов.
- Автоматическое открывание незапертых дверей (прокладывание маршрутов через такие двери) игроком.
- Еще есть такой репорт от Sduibek, что якобы во время загрузки локации "пролетает" время.. (что-то я такого не замечал правда).

Если что-либо из этого уже сделано, буду признателен за любую инфу, в каком файле (функции) это можно посмотреть.
Fakeman
Crafty У меня 50%, но добавил.
ну да всегда 50 при простое.
Для маппера не работает похоже эта фишка.

QUOTE
Ну ради 3 режима оставил, так-то он в маппере есть, и, возможно не все знают,

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

Phobos
У дверей есть для этого специальный флаг walk...что-то там.

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

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

Я тут думал над твоим луа, мне кажется что он сложнее в освоении чем ssl
Все равно чел. придется читать мануал по функциям движка, остальное основа програмирования if then else / while do / переменные и работа сними вычитание/сложение/присвоение, этих без базовых знаний в программировании чел не сможет написать скрипт как в луа, так и в ссл.
Поповоду не нужно будет компилировать — ну не знаю не испытываю проблем с компиляцией нажал кнопочку скрипт ушел на компиляцию и в папочку скрипт.
Не нужено будет делать декомпиляцию — ну тут да плюс, но тогда придется хранить и всякие свои левые include файлы.
А как же всякие препроцессорные фигни с указанием ключей аля release/debug — тоже классная штука.
Phobos
QUOTE
Я тут думал над твоим луа, мне кажется что он сложнее в освоении чем ssl
Все равно чел. придется читать мануал по функциям движка, остальное основа програмирования if then else / while do / переменные и работа сними вычитание/сложение/присвоение, этих без базовых знаний в программировании чел не сможет написать скрипт как в луа, так и в ссл.
Поповоду не нужно будет компилировать — ну не знаю не испытываю проблем с компиляцией нажал кнопочку скрипт ушел на компиляцию и в папочку скрипт.
Не нужено будет делать декомпиляцию — ну тут да плюс, но тогда придется хранить и всякие свои левые include файлы.
А как же всякие препроцессорные фигни с указанием ключей аля release/debug — тоже классная штука.


Просто на дворе 2016 год и сейчас никто не компилирует скрипты руками))) Кроме нас, олдфагов. Как минимум есть JIT-компиляция, которую я кстати подумывал тоже реализовать. Достаточно слинковать compile.dll с sfall также как это сделано в редакторе скриптов и вызывать в нужные моменты компиляцию.. Но тут появляется большая проблема работы с файлами.. В игре используется плоская структура — все скрипты в одной папке-помойке. А в исходниках по другому, т.е. игра должна знать в какой папке искать исходники... В общем дофига гемора.

А насчет того что сложнее в освоении — хз. Для не-программиста может SSL покажется в чем-то проще (потому-что он нихрена не может и сложного кода на нем нет), а вот для программеров однозначно лучше Lua.

В общем идею не поддержали, добавлю пару новых опкодов в SSL и возможно в будущем подумаю еще насчет ООП... На самом деле некое подобие классов можно реализовать процедурно... А также нужно активно юзать экспорт процедур. Это позволит сделать глобальный скрипт-библиотеку со всеми функциями мода, которую ты просто используешь везде. Понадобилось поменять какой-то общий код, и достаточно перекомпилить один скрипт...
Fakeman
ООП в скриптах да нафиг оно надо... — Займись лучше новым двигом)
Phobos
Нужно мнение всех тех кто пишет скрипты: http://www.nma-fallout.com/threads/fo2-eng...30#post-4195783.

Суть — набор опкодов, где ты передаешь имя скриптовой функции строкой и следом все аргументы. Т.е. для добавления новых функций достаточно только пересобрать sfall. Кроме того не потребуется писать ни строчки ASM если только сама функция не работает с движком игры.

Может есть предложения, пожелания по этому решению.
Fakeman
Пожеланий пока нет, ну а так нужная фигня) может кому и пригодится.
Phobos
Так что там насчет поделиться последней версией базы Иды с народом? :)
Fakeman
Так это)
QUOTE (Crafty)
А свою базу (или idc) конечно покажи ;)
Phobos
QUOTE
QUOTE (Crafty)
А свою базу (или idc) конечно покажи ;)


Это в каком контексте сообщение? Если речь про мою базу, то там мало что интересного. Она в подметки не годится той что я когда-то давно скачал от Crafty — там размечены реальные названия ВСЕХ функций. Я до сих пор не понимаю как ему это удалось :)

Сделал скриптовую функцию аналог critter_inven_obj но без проблемы с неактивным слотом. По новой технологии, вот как раз пример добавления новый скриптовых функций.

Проще некуда :)
Crafty
QUOTE (Phobos)
- Изменения логики ИИ во время боя (давно хотел сделать несколько хук скриптов чтобы кастомизировать поведение скриптами).
Разглядывал, пока ничего не сделал.

QUOTE (Phobos)
- Вывод типа/количества патронов в магазине прямо поверх иконки оружия в инвентаре.
Нет, и это, кстати, можно будет отнести к зашитому сложному моду, меняющему интерфейс игры :-p

QUOTE (Phobos)
- Опция для подсветки криттеров по аналогии с подсветкой контейнеров и предметов.
Комбат, не.

QUOTE (Phobos)
- Автоматическое открывание незапертых дверей (прокладывание маршрутов через такие двери) игроком.
Не вижу смысла, а то так дойдёт и до автоматических диалогов и боёв.

QUOTE (Fakeman)
Для маппера не работает похоже эта фишка.
Ни для чего не работала (наследие оригинала). Исправил.

QUOTE (Phobos)
Так что там насчет поделиться последней версией базы Иды с народом? :)
Пока только та, что в начале темы.
Phobos
Доработал решение с новыми опкодами sfall_funcX (остановился на таком названии). Теперь одну и туже функцию можно использовать как для полноценных опкодов (если они определены с помощью макроса _WRAP_OPCODE), так и для sfall_func.

Еще можно прописывать функции табличку и тогда их параметры будут автоматом валидироваться (выводится сообщения об ошибках в debug.log):
https://github.com/phobos2077/sfall/blob/3....tender.cpp#L361

Новые скриптовые функции:
https://github.com/phobos2077/sfall/blob/3....ruleOp.hpp#L105

Думаю при желании будет не трудно смерджить эти изменения в "ваш" sfall. Ветка 3.8-maintenance должна быть относительно совместимой...


В ветке develop провожу масштабный рефакторинг с целью повысить читаемость кода sfall, упростить дальнейшую поддержку и расширение.
В частности все ссылки на движковые функции и переменные теперь в отдельных пространствах имен, как следствие — их теперь хорошо видно в коде и возможные конфликты имен с функциями и переменными sfall исключаются.

В идеале хотелось бы видеть в качестве основы sfall набор структур, констант и оболочек функций таким образом чтобы можно было работать с движком игры как будто есть исходники...
Fakeman
Верните пожалуйста расчет СRC какой и был! sfall configurator не понимает ваш ассемблеровсккий способ расчета.
К тому же это создает большое неудобство при смене длл на оригинал с постоянным переписыванием значения крк.
Ладно претензия снимается, вспомнил что в строчку можно несколько прописать.
Но в чем вообще нужда смена расчета? -непонятно.

И это зачем закомментил, или это по дефолту так выключено?
я тут 32 поставил так звуки не прерываются если их одновременно много проигрывается
CODE
;Sets the number of allowed simultaneous sound effects (valid range: 1..127; Default is 4)
;NumSoundBuffers=4
Fakeman
Все забывал тебе написать про еще один неприятный баг связанный с multihex криттерами, во время боя такие криттеры вплотную подходят к игроку, т.е к своему центральному гексу, и гг как бы оказывается внутри моба :)
кстати и моб тратит при подходе на одно очко AP больше.
Pomah
Этот мод можно ставить на любой фол? Гуглешь говорит что только на оригинальный, то есть на русский нельзя?
Ваш ответ: