Fallout 2 mod FO2 Engine Tweaks (Sfall)

sfall 3.8.1 is released on SourceForge, along win2k version. No modders pack update because this is purely a bug fix release.
Changelog said:
v3.8.1
>Fixed pressing F6 not displaying Quick Save screen

Daemon from Resurrection dev team reported this bug. It actually has existed in sfall for a long time, only some update in 3.8 makes it more noticeable.
 
What was it showing instead of quicksave screen, then? I'm pretty sure I used that function with recent sfall versions and I think it worked fine.
On a related note, it would probably be nice to be able to remap some keys. Quicksave and quickload being right near each other cause confusion.

Also, I want to say big thank you for adding numbers to the dialogue. Tried it recently, and it's so much easier to navigate dialogs.
 
What was it showing instead of quicksave screen, then? I'm pretty sure I used that function with recent sfall versions and I think it worked fine.
It shows normal Save Game screen, same as pressing F4. Before 3.8 the bug only occurs when in combat, but in 3.8 it always happens and completely breaks the Quick Save function.
 
Code:
set_pickpocket_max({int percentage});
set_critter_pickpocket_mod({CritterPtr}, {int max}, {int mod});
set_base_pickpocket_mod({int max}, {int mod});
These functions do not work? changing values does not affect the theft.
 
Code:
set_pickpocket_max({int percentage});
set_critter_pickpocket_mod({CritterPtr}, {int max}, {int mod});
set_base_pickpocket_mod({int max}, {int mod});
These functions do not work? changing values does not affect the theft.
Which versions of sfall did you test this on? What is your test script?
 
Which versions of sfall did you test this on?
by Crafty :)
Думаешь он там что-то поломал?)

phobos2077 said:
What is your test script?
Code:
procedure start begin
   if game_loaded then begin
      set_base_pickpocket_mod(25, 10);
   end
end
Вообще я пытался проверить на, что конкретно влияют эти функции т.к. в описании о них ничего толком не описано.
В общем тестил на краже с нпс... так не понял чего они изменяют, пришел к выводу что они не работают)
Как их юзать то правильно?
 
Вообще я пытался проверить на, что конкретно влияют эти функции т.к. в описании о них ничего толком не описано.
В общем тестил на краже с нпс... так не понял чего они изменяют, пришел к выводу что они не работают)
Как их юзать то правильно?
Теоретически они должны работать (NovaRain вроде бы тестировал, но результаты неточные). Советую забить и использовать hs_steal:
Code:
hs_steal.int

Runs when checking an attempt to steal or plant an item in other inventory using Steal skill.

This is fired before the default handlers are called, which you can override. In this case you MUST provide message of the result to player ("You steal the %s", "You are caught planting the %s", etc.).
Example message (vanilla behavior): display_msg(sprintf(mstr_skill(570 + (isSuccess != false) + arg4*2), obj_name(arg3)));

Critter arg1 - Thief
Obj     arg2 - The target
Item    arg3 - Item being stolen/planted
int     arg4 - 0 when stealing, 1 when planting

int     ret1 - overrides hard-coded handler (1 - force success, 0 - force fail, -1 - use engine handler)

Как использовать (примерный код):
Code:
procedure steal_handler begin
   variable thief := get_sfall_arg,
           target := get_sfall_arg,
           item := get_sfall_arg;
           action := get_sfall_arg;
   variable chance, success;

   if (action == 0) then begin
      // посчитай шанс успеха..
      success := (random(0, 99) < chance); // с вероятностью chance будет 1 - success, в противном случае 0 - failure
      display_msg(sprintf(mstr_skill(570 + (success != false) + action*2), obj_name(item)));
      set_sfall_return(success);
   end
end

procedure start begin
   if game_loaded then begin
      register_hook_proc(HOOK_STEAL, steal_handler);
   end
end
 
Here's another issue. Right now I've got a script that disables all user input via game_ui_disable and stop_game. Sadly, this also stops my global script from picking up any hotkey pressed (or anything else for the matter). Is there any way, with a hook script or whatever, to still get a key pressed through?
 
Here's another issue. Right now I've got a script that disables all user input via game_ui_disable and stop_game. Sadly, this also stops my global script from picking up any hotkey pressed (or anything else for the matter). Is there any way, with a hook script or whatever, to still get a key pressed through?
How do you currently catch key presses? Did you tried
Code:
register_hook_proc(HOOK_KEYPRESS, keypress_handler);
?
 
No, didn't. Where / how exactly would I use this?

Right now I simply have a global script running that checks weather a key has been pressed, and then reacts to it. But like I wrote, that doesn't work anymore as soon as I disable the game ui.
 
No, didn't. Where / how exactly would I use this?

Right now I simply have a global script running that checks weather a key has been pressed, and then reacts to it. But like I wrote, that doesn't work anymore as soon as I disable the game ui.

Did you check sfall modderspack documentation? It has full description for all hook scripts and how to use them. Just use it like any other hook script. Theoretically it should work because it is called on DirectInput level.
 
Oh well, turned out I was using outdated files again. The modderspack version that I had didn't even feature HOOK_KEYPRESS yet.... This happens when you keep working on the same mod base for 10 years...

Still, problem seems to remain. As soon as I use game_ui_disable the hookscript doesn't give out my debug message anymore once I hit the key. This really sucks, because I *need* game_ui_disable as well... or I'll have to rework some super complicated script.
 
Last edited:
I just keep posting 'em questions.

Got a button *on* my interface- it works perfect, except for one flaw: Because inactive interface elements are pushed into the background (behind the other interface stuff), I'll have to redraw my button basically over and over again (delete & recreate). Now I am wondering: Is there actually any way to pull a button "back to the front" again? I was thinking about something like SelectWin("xy"); for example. Such a function called via global script could really help me to reduce my amount of shit code.
 
Are you planning to add features which are in sfall Crafty ?
Such as:
Modes returned by the function get_game_mode: INTFACEUSE , INTFACELOOT and BARTER.

In hs_barterprice added 3 arguments.
critter arg7 - pointer to "table" proposed by the player goods
int arg8 - total cost of the proposed player products (separately, you can know the amount of money with item_caps_total(arg7))
int arg9 - 1 if button was pressed "the exchange offer" non-party members, otherwise 0.

New useful treatments
combat_is_starting_p_proc (start of battle - invoked when initializing the data, but does not mean that the character is in combat)
combat_is_over_p_proc (finishing the fight).

Error correction in use gdialog_mod_barter with the characters without a set flag trade.

The processing of setting the mood in functions start_gdialog - now it is always taken into account, and in addition can be equal to -1 in this case, the mood is calculated by the engine using zero as a local variable from a script of "talking head".

Fixes game crash when you try to open your bag/backpack in the trade window.

hs_keypress can return the scan code of the new key, which is processed by the engine instead of the original.

The correction of the output in the monitor window messages when hitting a random target if she is a character and she has a script, and call damage_p_proc at misses if the target is not a character.

Fixes game crash when clicking on empty space in the inventory with the cursor using the object from the main pack.

When UseScrollWheel=1 you can scroll through the inventory targets in the window boxes, corpses or the trade window.

DontTurnOffSneakIfYouRun - when the run mode if not taken advantage of 'Silent running' will not be turned off the ability to "Stealth" - instead, the character will walk.

TurnHighlightContainers acts on dead characters.

The output in the monitor window of the number of experience points given the bonus from the perk taken 'Swift Learner' after killing enemies/theft/random encounters on the map.

Support FRM the number of sprites for Tiles greater than 4096 (MoreTiles=1)
Режимы возвращаемые функцией get_game_mode: INTFACEUSE , INTFACELOOT и BARTER.

В hs_barterprice добавлены 3 аргумента.
critter arg7 - указатель на "стол" с предложенными игроком товарами
int arg8 - общая стоимость предложенных игроком товаров (отдельно можно узнать количество денег с помощью item_caps_total(arg7))
int arg9 - 1 если была нажата кнопка "предложения обмена" не сопартийцу, иначе 0.

Новые полезные процедуры
combat_is_starting_p_proc (начало боя - вызывается при инициализации данных, но не означает что персонаж находится в бою)
combat_is_over_p_proc (завершение боя).

Исправления ошибки в использовании gdialog_mod_barter с персонажами без установленного флага торговли.

Обработка параметра mood в функции start_gdialog - теперь он всегда учитывается, а кроме того может быть равен -1 и в этом случае настроение рассчитывается движком с использованием нулевой локальной переменной из скрипта "говорящей головы".

Исправления краша игры при попытке открыть сумку/рюкзак в окне торговли.

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

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

Исправления краша игры при клике по пустому месту в инвентаре при курсорном использовании предмета из основного рюкзака.

При UseScrollWheel=1 можно прокручивать инвентарь цели в окне ящиков, трупов или окне торговли.

DontTurnOffSneakIfYouRun - при включённом режиме бега если не взят перк 'Бесшумный бег' не будет отключаться умение "Скрытность" - вместо этого персонаж будет ходить.

TurnHighlightContainers действует и на мёртвых персонажей.

Вывод в окне монитора количества полученных очков опыта с учётом бонуса от взятого перка 'Прилежный ученик' после убийства врагов/воровства/случайных встреч на карте.

Поддержка количества FRM спрайтов для Tiles, больше чем 4096 (MoreTiles=1)
 
Are you planning to add features which are in sfall Crafty ?
Ого, когда это он все это успел? :)
Некоторые пункты звучат очень полезными, а другие сомнительны. В любом случае на данном этапе каждую фичу придется реализовывать заново, используя код Crafty как пример. Так что на это потребуется время.
Если есть примеры реального применения изменений связанных со скриптами, буду благодарен.

English (short story):
Some items are useful and some are dubious. Need time to investigate and re-implement them.
 
Ого, когда это он все это успел? :)
Некоторые пункты звучат очень полезными, а другие сомнительны. В любом случае на данном этапе каждую фичу придется реализовывать заново, используя код Crafty как пример. Так что на это потребуется время.
Если есть примеры реального применения изменений связанных со скриптами, буду благодарен.
Это список самого необходимого, сомнительное я оставил, дабы не загружать вас на все 145% )) потом еще добавлю.
Чего там сложного то, скопировать код ASM-вставок и немного их подкорректировать под оригинальный sfall и готово. Я же надеюсь вы не будете переписывать его код на С++ :)
Реально все используется в скриптах.
"ФильтрСталина" использует окна для работы, которые недоступны в оригинале + там же я реализовал бартер под новые аргументы, ну это так.
Переназначение в hs_keypress тоже полезная вещь, скрипт с модом клавиш тоже имеется на форуме NuclearCity.

А что сомнительное тут то по твоему мнению?

И еще с освещением Scenary объектов по работать нет желания? :)
f2light.jpg
 
Я же надеюсь вы не будете переписывать его код на С++ :)
Конечно будем :D Ну кроме тех мест где без ASM совсем не обойтись.

И еще с освещением Scenary объектов по работать нет желания? :)
Let's wait for Falltergeist for this :D I think lighting is already implemented there.
 
Back
Top