Fakeman
22 July 2015 | 14:23
'delete' Тупанул :)
Phobos
23 July 2015 | 16:25
QUOTE |
Done (though I didn't test) ;) |
QUOTE |
Беспредельщик же ;-p |
QUOTE |
3 байта против 5 :-p |
Вот после таких фраз и закрадывается недоверие к твоему коду.
Слышал про такую вещь как читаемость кода? :)
Во многих случаях (а это именно такой случай) эффективностью пренебрегают ради качества кода. Оптимизация по размеру кода нужна в каких-нибудь макросах... а по быстродействию внутри циклов, выполняемых миллионы раз в секунду...
Crafty
24 July 2015 | 03:04
QUOTE |
Вот после таких фраз и закрадывается недоверие к твоему коду. |
Так это, я же его не продаю и не заставляю использовать :-p
Ethereal
24 July 2015 | 15:33
Раз уж тема про Сфалл, то опишу тут.
Дело в том, что я играю в гремучаю смесь RP, MM и собственных наработок. Сфал и HiRes начал использовать недавно, поскольку ранее не знал как отключить блокировку сав-лоада в бою. (Спасибо Crafty).
Речь пойдёт о дополнении RandomLoot. Это дополнение регенит случайным образом в пустых контейнерах различные предметы. Это конечно здорово, найти в Кламате диск с данными модернизации энергооружия и броню братства, но есть и большой недостаток. Предметы регенятся по классам, а в классе предметов "Misc" есть масса вещей, которые ни при каких условиях не должны попадать внутрь контейнеров. Причём регенит их крайне успешно, но после этого начинаются страшные глюки. Так в Брокен Хиле в доме одного мутанта в шкафу обнаружился разлагающийся труп, что вообще на мысли наводит... Труп я не взял, а потом на карту зайти больше не мог. Висло всё напрочь (и в маппере карта из сохранения так же висла). Кроме того, этот труп запорол весь сейв. На остальных картах начало происходить то же самое.
Что бы избежать подобных вещей надо в RandomLoot.ini установить RandomMiscPercent=0 . А лучше найти способ прописать конкретно какие вещи будут регенится. И не в скрипте, а в том же ini-файле.
Разобрался с High Resolution. Всё в нём было хорошо (Особенно туман войны), но бесила блокировка опций мыши за границами исконной активной зоны карты. Я там накопал секретных подвалов в разных городах, а попав в них ничего зделать и взять там невозможно было. Выяснив, что f2_res использует какие-то свои границы для карт распоковал f2_res.dat в одноимённую папку в корне игры и уничтожил там папку "maps", а оригинальный файл здал в архив для бэкапа. Теперь всё работает отлично все опции f2_res, включая туман войны, работают, при этом мод более не видит никаких границ карт и ничего не блокирует. Впоследствии некоторым картам всё-же вернул "ограничители", но... Границы границами, а блокировку нафига надо было делать?
Fakeman
3 August 2015 | 20:19
Так меня посетила идея для фишки, сделать возможность переключаться между со партийцами во время обмена с контейнером, как сделано с трупами.
Реализуемо?
Foxx
29 August 2015 | 10:42
Использую sfall от crafty с Olympus 2207. Все вроде работает, но есть один глюк.
Когда доктор в Метро лечит меня от радиации происходит вот это:
http://i67.fastpic.ru/big/2015/0829/b8/3dd...fcb5d54f2b8.jpg
Fakeman
29 August 2015 | 11:59
Эта рамка появляется только от сфалла крафти? А на оригинале сфала 3,6 пробовал?
Лучше запостит этот баг на форуме олимпа, т.к скритпы олимпа писались под старую версию 2.12 сфалла, и поэтому глюко-баги возможны.
Да и куды крафти пропал? :(
Foxx
29 August 2015 | 12:12
Попробывал sfall 3.4 из базы Дробовика, такая же фигня с рамкой.
На оригинальном sfall 2.12a, который с Олимпом устанавливается бага нет.
Fakeman
29 August 2015 | 13:27
QUOTE |
Попробывал sfall 3.4 из базы Дробовика, такая же фигня с рамкой. |
Хм, так и при чем тут версия от Crafty... иди Артема пинай :)
Кстати может они версию 1.1 под последнию версию сфалла замутят, так что пока они тестируют 1.1 иди баг-репортани, может фиксанут глюк.
Upd.
Кстати у тебя судя по скрину стоит мой интерфейсный мод, хз может я там в скрипте чего перешаманил, :-p попробуй без мода, т.е. с оригинальными скриптами олимпа.
Foxx
29 August 2015 | 17:35
[цитата]
Кстати у тебя судя по скрину стоит мой интерфейсный мод, хз может я там в скрипте чего перешаманил, :-p попробуй без мода, т.е. с оригинальными скриптами олимпа.
Мод скачал с базы Дробовика "Hi-Res Patch 4.1.8 & InterfaceMod for Olympus_v1.05". Пробовал без него, тоже самое.
Эта рамка отдельно лепится к диалоговому окну, вырезать бы ее из "master.dat", но какое у нее название файла FRM не знаю.
Fakeman
29 August 2015 | 17:50
QUOTE |
Мод скачал с базы Дробовика "Hi-Res Patch 4.1.8 & InterfaceMod for Olympus_v1.05". |
Угу оно самое :)
QUOTE |
Эта рамка отдельно лепится к диалоговому окну, вырезать бы ее из "master.dat", но какое у нее название файла FRM не знаю. |
там не fmr а pcx, но если удалить будет "Error" в виде черных полос :)
Я когда полгода назад правил баги скрипта сделал так, чтобы эта рамка показывалась при любых разрешениях, а не только при 800х600, ибо так красивее, так что выпилить можно только из скрипта :)
Elkantar
21 September 2015 | 13:28
Приветствую форумчан!
Помогите пожалуйста разобраться вот с какой задачей.
Хочу играть в фоллаут 1,2 и тд с разрешением 1360х768 (например) и использовать функции ScaleFilter от sFall`а.
Я имею ввиду это:
CODE |
;Set to something other than 0 to apply a software scaler in graphics modes 4 or 5 ;This can be used instead of, or in addition to, the hardware global.fx shader ;This option is unsupported when using Mash's resolution patch ;0 - Default scaler ;1 - 2xSai ;2 - SuperEagle ;3 - Super2xSai ;4 - hq2x ;5 - AdvancedMame2x ;6 - letterbox ;7 - no scaling ScaleFilter=5
|
Перебор всех установок от 0 до 7 никак на картинке не отражается.
Никак не могу разобраться как в точности должен выглядеть мой конфиг. Как я понял, есть два отдельных дополнения для игры, Mash's resolution patch и sFall. И вроде как они друг с другом не очень то уживаются. Так, в комментариях файла ddraw.ini о функции ScaleFilter что она с хайрез патчем не работает. Так как же быть тогда? Есть решения какие нибудь.
Каждое дополнение снабжено отдельным ini файлом f2_res и ddraw. И там и там есть строки чтобы выставлять разрешение экрана. Но работают они почему то по разному.
Помогите, камрады, разобраться?
П.с. Если это существенно, то моя видюха не поддерживает шейдеры.
Fakeman
22 September 2015 | 23:15
А что за необходимость использовать эту древнию версию Sfallа c этой функцией?... сейчас в тренде использовать Sfall2 от Crafty.
И использовать Mash's resolution patch, религия не позволяет? выстави там свое любимое разрешение и играй.
QUOTE |
Каждое дополнение снабжено отдельным ini файлом f2_res и ddraw. И там и там есть строки чтобы выставлять разрешение экрана. Но работают они почему то по разному. |
Если тебе надо растянуть картинку игры до твоего разрешеия, используй sfall
Если разрешение окна игры то используй resolution patch
Так что тебе надо?
зы; Я уж думал Crafty вернулся.
Elkantar
23 September 2015 | 12:59
Сейчас в Олимпус играю, а sfall от крафти с ним почему-то не работает.
Но дело здесь в другом. Я хочу включить функцию scalefilter, например AdvancedMame2x. Из опыта использования dropbox, в котором точно также используются эти функции, эти функции должны сглаживать текстуры и убирать зернистость. Но как ни старался, никакого эффекта ожидаемого это не принесло.
Сейчас я играю на 1280х720 и меня немного раздражает то, что всё стало слишком мелкое, в особенности текст. Если переключиться на 1024 например, играть становится гораздо удобней в плане эргономики объектов, элементов интерфейса и текста. Но вместе с тем становится всё слишком зернистым и размазанным, и функция scalefilter была бы очень кстати.
Может я не очень прав в своих ожиданиях, поскольку до конца не понимаю как эти технологии устроенны и работают. Если это так, то пожалуйста объясните в чём я не прав.
Fakeman
23 September 2015 | 14:47
QUOTE |
Я хочу включить функцию scalefilter, например AdvancedMame2x. Из опыта использования dropbox, в котором точно также используются эти функции, эти функции должны сглаживать текстуры и убирать зернистость. Но как ни старался, никакого эффекта ожидаемого это не принесло. |
потому что в олипе 1.1 версия Sfall'а сейчас 3.4 в новых версиях больше нет поддержки этих возможностей, последний sfall в которой это будет работать это 2.16 У вас вообще в олимпе какая версия sfall стоит. :)
Возьмите sfall из версии олимпа 1.05 и настраивайте его.
Я так понял тебе нужен х2 режим в игре, если есть монитор с поддержкой разрешения 1920х1080 то используй Mash's resolution patch версии 4.18 адаптированный под олимп, и будет то что ты хочешь все крупное)
ссылку надо?
Elkantar
24 September 2015 | 13:18
Спасибо ) Не надо ) Насколько я понимаю он ничем не отличается от того который запакован в HD релиз версии 1.1 Или есть разница?
п.с.
разархивировал архив Olympus_HiRes4.1.8_sfall 3.4
в файле ddraw написано:
CODE |
;sfall configuration settings ;v2.12 |
Хотя сам dll версии 3.4.1.305
У меня точно такое и установлено и там есть строки:
CODE |
;Set to something other than 0 to apply a software scaler in graphics modes 4 or 5 ;This can be used instead of, or in addition to, the hardware global.fx shader ;This option is unsupported when using Mash's resolution patch ;0 - Default scaler ;1 - 2xSai ;2 - SuperEagle ;3 - Super2xSai ;4 - hq2x ;5 - AdvancedMame2x ;6 - letterbox ;7 - no scaling ScaleFilter=0 |
Но судя по тому что что вы сказали, эти функции остались прописанными рудиментами которые более не работают. Это объясняет почему у меня ничего не получается. Пичаль.
п.п.с. Как правильно настроить функцию х2? Максимальное разрешение моего монитора 1360, но я всё равно хотел бы чтобы картинка масштабировалась.
Fakeman
24 September 2015 | 14:25
Видимо конфиг в игре остался старый от версии олипа 1.05. ничего страшного.
Если моник не поддерживает 1920 то смысла включать х2 нет, олимп не будет нормально работать т.е. не будет работать кнопка HMS, и его окна будут не корректно отображаться.
х2 это ScalingX2 в настройках Hi-Res 4.1.8.
Я на самом деле не пробовал на таком разрешении как у тебя, у меня в конфиге Hi-Res при х2 доступны только 1280х1024 и 1920х1080 и вот в первом разрешении игра не работает, не знаю как будет у тебя, попробуй может будет работать.
Возьми старую dll'ку Sfallа(без конфига) и настраивай.
Elkantar
24 September 2015 | 14:39
Я правильно понимаю, что x2 умножает параметр разрешение экрана на 2? Т.е. если параметр разрешения выставить 800х600 то игра запуститься 1600х1200? Аналогично если ставить 640х480 то на выходе будет 1280х960?
QUOTE |
Возьми старую dll'ку Sfallа(без конфига) и настраивай. |
А контролировать напарников с ним можно будет? И прочие радости!
Fakeman
24 September 2015 | 14:42
с кем с ним? со старым сфалом? вроде да.
Elkantar
24 September 2015 | 14:44
Да. Сообщение выше обновил.
Fakeman
24 September 2015 | 14:50
QUOTE |
Я правильно понимаю, что x2 умножает параметр разрешение экрана на 2? |
Родное разрешение увеличивается в 2 раза(1280х960), а дальше патч просто изменяет размер окна игры. вроде как-то так это работает.
Elkantar
24 September 2015 | 15:15
Значит настраиваю конфиг следующим образом.
f2_res:
QUOTE |
; Set GRAPHICS_MODE=2 to enable DirectX9 mode. GRAPHICS_MODE=2
; Set SCALE_2X=1 to scale the game x2. ; Note: This will increase the minimum resolution to from 640x480 to 1280x960. SCALE_2X=1
; Set the Fullscreen resolution here. SCR_WIDTH=0 SCR_HEIGHT=0
; Set the Fullscreen colours here. ; 8 for 8bit colour output (original) ; 16 for 16bit colour output (set only if your not using Sfall with graphics modes 4 or 5) ; 32 for 32bit colour output (set only if your not using Sfall with graphics modes 4 or 5) COLOUR_BITS=(????)
|
И ddraw
QUOTE |
[Graphics] ;Set to 0 for 8 bit fullscreen ;Set to 4 for dx9 fullscreen ;Set to 5 for dx9 windowed ;A dx9 mode is required for any graphics related script extender functions to work (i.e. fullscreen shaders) ;Modes 1, 2 and 3 are no longer supported Mode=(????)
;If using a dx9 mode, this changes the resolution ;The graphics are simply stretched to fit the new window; this does _not_ let you see more of the map GraphicsWidth=1280 GraphicsHeight=720
;Set to something other than 0 to apply a software scaler in graphics modes 4 or 5 ;This can be used instead of, or in addition to, the hardware global.fx shader ;This option is unsupported when using Mash's resolution patch ;0 Default scaler ;1 2xSai ;2 SuperEagle ;3 Super2xSai ;4 hq2x ;5 AdvancedMame2x ;6 letterbox ;7 no scaling ScaleFilter=(????)
;Set to 1 for a linear texture filter, or 0 to disable TextureFilter=(????)
|
Как быть с (????) ??
Fakeman
24 September 2015 | 15:57
Я без понятия как тебе настравать сфалл, пробуй разные варианты, единственное что надо соблюдать это одинаковое разрешение в сфалл и в hres. Для насройки hres есть утилитка, или в меню игры его настраивай.
Sfall
TextureFilter=1
Mode=4
Crafty
24 February 2016 | 00:42
По случаю праздника новая версия ;)
Сначала общие (ну или почти) изменения для F1/F2 версий:
- в F2-версии переписан оригинальный explosion_crash_fix на "правильный" вариант :-p В F1-версию он добавлен.
- Исправлен приводящий к крашу баг с форсированным (подбросить взрывчатку и покинуть карту до взрыва) использованием взрывчатки если взрыв задевает кого-либо рядом, возвратом на карту и снова выходом с карты.
- Теперь при форсированном использовании взрывчатки и смерти жертвы вызывается destroy_p_proc.
- Значение переменной SpeedInterfaceCounterAnims может быть равно 2 в этом случае значение счётчиков будет изменяться мгновенно (но в момент смерти всё так же с анимацией).
- Добавлена переменная InstanWeaponEquip, включение которой отключает анимацию убирания/доставания оружия при его смене, открытии ящиков и т.д..
- В F2-версии переписан оригинальный TimeLimit с исправлениями (потерянное время, обработка очереди событий), а в F1-версию он добавлен. Удалено значение -2 (переполнение счётчика и зависание игры. Какая от него польза?). Если всё же -2 используется, то эффект такой же как если бы указали -3. Правильно отображается возраст игрока (впрочем он ограничен 99, чтобы не портить вывод) на экране персонажа.
- Добавлена переменная PipboyTimeAnimDelay для изменения скорости анимации времени в будильнике пипбоя.
- В F2-версии оптимизирован AnimationsAtOnceLimit, в результате чего dll'ка похудела на 10 Kb ;) В F1-версию AnimationsAtOnceLimit добавлен.
- Исправлено отображение полученного дамага при мгновенной смерти.
Изменения в F2-версии:
- Вместо переменных BodypartHitMod0...BodypartHitMod8 используются BodyHit_Head...BodyHit_Uncalled как в sfall1.
- Удалена устаревшая переменная WorldMapFPS и связанная с ней ForceLowResolutionTimer (обрабатывались только если WorldMapFPSPatch=0), а также WorldMapDelay (обрабатывалась только если WorldMapFPS и WorldMapFPSPatch равны 0).
- Теперь WorldMapEncounterFix обрабатывается независимо от значения WorldMapFPSPatch (ранее только если WorldMapFPSPatch=0).
- Из ddraw.ini удалена переменная MultiHexPathingFix, причина аналогична удалению BlackSkilldexFix.
- Исправлен функционал переменной OverrideMusicDir.
- Теперь при включённой переменной CheckWeaponAmmoCost проверяется ещё и количество патронов у оружия при стрельбе очередью.
- Добавлены изменения из sfall:
>Fixed incorrect bonuses on AC and Melee Damage from Heavy Handed trait when using perks.ini
>A new hook script: hs_invenwield (when wielding or unwielding an armor or a weapon by a critter)
>Expanded message_str_game function to support all pro_*.msg files as well
>Removed obsolete Jim's damage formula
Изменения в F1-версии:
- Исправлен баг использования в бою лишних очков действия вместо указанных (2 ОД) при использовании предмета в руке (5 ОД) или с помощью значка действия "Использовать предмет из рюкзака" (3 ОД).
Foxx
26 February 2016 | 14:16
Большое спасибо
Fakeman
26 February 2016 | 20:15
Ну здравствуй пропащий)
Возможно ли доработать функцию sfallа 'get_game_mode'
чтобы можно было получить список не достающих режимов в котором находится игра?
в данном случае не хватает для USE и LOOT окон интерфейса.
CODE |
//Recognised modes for set_shader_mode and get_game_mode #define WORLDMAP (0x1) #define LOCALMAP (0x2) #define DIALOG (0x4) #define ESCMENU (0x8) #define SAVEGAME (0x10) #define LOADGAME (0x20) #define COMBAT (0x40) #define OPTIONS (0x80) #define HELP (0x100) #define CHARSCREEN (0x200) #define PIPBOY (0x400) #define PCOMBAT (0x800) #define INVENTORY (0x1000) #define AUTOMAP (0x2000) #define SKILLDEX (0x4000) |
Отправлено: 26 фев 16 20:24
QUOTE |
- Добавлена переменная InstanWeaponEquip, включение которой отключает анимацию убирания/доставания оружия при его смене, открытии ящиков и т.д. |
а может при "его смене" не надо убирать анимацию?
Crafty
26 February 2016 | 22:26
Foxx
Да не за что :)
Fakeman
QUOTE |
Ну здравствуй пропащий) |
Такой хитрый план :-p
QUOTE |
в данном случае не хватает для USE и LOOT окон интерфейса. |
Добавил INTFACEUSE и INTFACELOOT (или лучше именно USE и LOOT?):
CODE |
#define INTFACEUSE (0x8000) #define INTFACELOOT (0x10000) |
Проверяй, если то что нужно и без изменений, то так и оставим.
QUOTE |
а может при "его смене" не надо убирать анимацию? |
Почему? Это клавиша 'B', очень долгая задержка.
Fakeman
27 February 2016 | 02:11
QUOTE |
Добавил INTFACEUSE и INTFACELOOT (или лучше именно USE и LOOT?): |
Ого как оперативненько, спасибо думал месяц будешь ковырять))
Да это не важно как ты назвал главное, что теперь поддерживается.
QUOTE |
Почему? Это клавиша 'B', очень долгая задержка. |
Ну вот я бы вообще бы убрал эту анимацию когда лутаешь контейнеры действительно достает это дело, но оставил бы анимацию при смене оружия, а то совсем как-то неинтересно и скучно без нее.
может циферку 2 введешь для такого случая? :)
QUOTE |
Теперь при включённой переменной CheckWeaponAmmoCost проверяется ещё и количество патронов у оружия при стрельбе очередью. |
А до твоего изменения она чего делала?
Nordan
27 February 2016 | 16:05
В настройках сфалла можно менять максимальную вместимость инвентаря (не вес, а именно вместимость по размеру), можно ли этот параметр привязать к переменной?
Fakeman
27 February 2016 | 16:37
QUOTE |
можно ли этот параметр привязать к переменной? |
тут как бы если ты хочешь менять эти значение прямо из игры то придется вводить новые ОpСode, а соответственно и в компилятор(декомпилятор) тоже надо его вводить.
а вот просто получить значение из ini и записать их в переменную можно через get_ini_setting но это вероятно не то что тебе нужно.
А есть еще read_short(int address) / write_short(int address, int value) вот только бы адресс узнать остается где это записано)
Nordan
27 February 2016 | 17:06
QUOTE |
тут как бы если ты хочешь менять эти значение прямо из игры то придется вводить новые ОpСode, а соответственно и в компилятор(декомпилятор) тоже надо его вводить. |
Не, я говорю щас о том, чтобы привязать его, например, к ГВАРе, или к глобальной сфаллической переменной, чтобы максимальная вместимость бралась именно из нее (и ее можно было динамически менять в процессе игры), а не из INI файла, вот это было бы круто. )
QUOTE |
вот только бы адресс узнать остается где это записано) |
Я так понимаю, этот адрес постоянно меняется после перезахода в игру, да? Иначе можно было бы его найти через ArtMoney.
Fakeman
27 February 2016 | 17:52
Привязка к гваре чувствую это еще тот геморрой в реализации будет. Какой номер ей присваивать прописывать в ини тоже. К сфаловской гваре только.
Адрессное пространство видимо да меняется но оффсет относительно начала постоянен.
Вообще в чем фишка этого лимита веса инвентаря в чем ее суть?
Nordan
27 February 2016 | 18:03
Фишка этого лимита в том, что вещи имеют не только вес, но и размер, ведь невозможно же в одной сумке уместить 10 миниганов. ) А динамическое изменение этого лимита немного бы разнообразило характеристики брони, наличие дополнительных карманов увеличивало бы это значение. Типа того. Вообще, насколько это трудоемко мне не известно, так как в моем представлении это реализуется заменой проверки параметра в ини файле на проверку ГВАРы (а номер, в принципе не особо важен).
Fakeman
27 February 2016 | 18:30
QUOTE |
;Only the PC uses CritterInvSizeLimit. Other critters will use the extra unused stat (STAT_unused = 10) |
Как оптимальный вариант можно это записывать не в гвару, а в неиспользованный стат игрока но я не знаю на сколько это реально.
Nordan
27 February 2016 | 22:44
Ха, а вот с адресом то не совсем все однозначно, через артмани нашел адрес умения, вышел зашел, адрес не изменился, так шо можно попробовать просто поискать адрес этого лимита в памяти и просто менять его через соответствующие функции скриптово.
UPD: Нет, с лимитом так не получится, адрес меняется...
Crafty
28 February 2016 | 17:10
Fakeman
QUOTE |
Ого как оперативненько, спасибо думал месяц будешь ковырять)) Да это не важно как ты назвал главное, что теперь поддерживается. |
Дак дело буквально на 15 минут, что касается названий там 4 варианта интерфейсных режимов для работы с инвентарём: рюкзак игрока (клавиша 'I', INVENTORY), курсорное использование предмета из рюкзака (INTFACEUSE), обшаривание контейнеров/персонажей (INTFACELOOT) и неописанный режим торговли. Последний, если его нужно будет добавить, логично было бы назвать BARTER (INTFACEBARTER режет глаза ;)). Поэтому вероятно INTFACEUSE и INTFACELOOT лучше сделать без INTFACE, чтобы вписывались... Но если устраивает, то так и оставим.
QUOTE |
может циферку 2 введешь для такого случая? :) |
Пока лень :-p
QUOTE |
А до твоего изменения она чего делала? |
Если не использовался hs_ammocost, то всего лишь запрещала использовать Суперэлектрокнут и Силовой суперкастет если у них остался 1 "патрон" (они требуют 2 для удара). И подключала дополнительные обработчики для hs_ammocost.
Вообще реализация hs_ammocost и CheckWeaponAmmoCost невероятно кривая они завязаны друг на друга, не обрабатывается стрельба очередью. К примеру для пистолета-пулемёта (SMG), при CheckWeaponAmmoCost=0 и простеньким hs_ammocost, меняющим расход патронов на 2, можно стрелять очередями по 2 патрона, но получаемые жертвой повреждения расчитываются как для очереди из 10 патронов.
Так что я исправил hs_ammocost (хуки я вообще уже все переписал) и CheckWeaponAmmoCost, который теперь действует только на игрока (такое ограничение :( Это уже после предыдущего исправления проверки при стрельбе очередью).
Отправлено: 28 фев 16 18:22
Nordan
QUOTE |
В настройках сфалла можно менять максимальную вместимость инвентаря (не вес, а именно вместимость по размеру), можно ли этот параметр привязать к переменной? |
Ну как заметил Fakeman можно будет для игрока использовать STAT_unused (в оригинальном sfall STAT_unused используется для хранения прошедших лет для TimeLimit). В общем потом погляжу как CritterInvSizeLimit работает...
Fakeman
28 February 2016 | 22:18
QUOTE |
и неописанный режим торговли. Последний, если его нужно будет добавить, логично было бы назвать BARTER (INTFACEBARTER режет глаза ;)). Поэтому вероятно INTFACEUSE и INTFACELOOT лучше сделать без INTFACE, чтобы вписывались... |
О блин так нужно было и Бартер добавить а то приходиться по хуку определять когда гг в бартер заходит.
Мне вообще фиолетово как ты дэфайны называешь у меня свой дэфайн файл)
QUOTE |
STAT_unused (в оригинальном sfall STAT_unused используется для хранения прошедших лет для TimeLimit) |
О не знал что туда это записывается а ничего не поломается если поменять это.
Еще очень важный вопрос! есть ли какая-нибудь функция в движке игры которая перерисовывает итемы в слотах инвентаря? чтобы можно было ее как-нибудь вызвать из скрипта функцией call_offset_v0(int address)
в чем суть если при отрытом инвентаре скриптово добавить итем в сумку игроку(криттеру) то инвентарь не перерисовывается и добавленный итем не появляется на экране пока не по клацаешь стрелочки управления.
Crafty
4 March 2016 | 02:45
QUOTE |
О блин так нужно было и Бартер добавить а то приходиться по хуку определять когда гг в бартер заходит. |
Добавил BARTER:
CODE |
#define BARTER (0x20000) |
но ещё не заливал новую версию (переписал CritterInvSizeLimitMode, нужно сначала слегка проверить).
QUOTE |
О не знал что туда это записывается а ничего не поломается если поменять это. |
Нет в движке STAT_unused не используется.
QUOTE |
Еще очень важный вопрос! есть ли какая-нибудь функция в движке игры которая перерисовывает итемы в слотах инвентаря? чтобы можно было ее как-нибудь вызвать из скрипта функцией call_offset_v0(int address) в чем суть если при отрытом инвентаре скриптово добавить итем в сумку игроку(криттеру) то инвентарь не перерисовывается и добавленный итем не появляется на экране пока не по клацаешь стрелочки управления. |
Это весьма брутально, на твой страх и риск :-p
Вызов display_inventory_ для перерисовывания инвентаря игрока (для цели другая функция используется):
CODE |
call_offset_v3(0x46FDF4, inventory_offset, visible_offset, mode);
inventory_offset - для рюкзака можно читать содержимое в памяти read_int(0x59E844) чтобы получить смещение вещи которая сейчас видна первой (если прокрутил инвентарь вниз) или же 0 для отрисовки инвентаря начиная с самой верхней вещи; visible_offset - -1 должно хватить, если положительное значение, то вроде номер (1-6?) конкретной вещи видимой сейчас в инвентаре; mode - режим интерфейсного окна: 0 (INVENTORY), 1 (INTFACEUSE), 2 (INTFACELOOT) и 3 (BARTER); |
Fakeman
4 March 2016 | 13:48
Мне нужно для цели и для игрока именно для инвентарей loot и barter для других инвентарей нету проблемы с обновлением их можно обновлять по клавиши home/end.
Попробую поюзать, потом напишу о результате.
Попробовал для BARTER вызвать но игра вываливается с ошибкой рисуя какие-то диагональные темно-серые полосы в той части где сам интерфейс обмена.
Для проверки решил и для INVENTORY тоже пробовать но ничего не происходит, нет перерисовки. пробовал с разными аргументами вызова.
Может ты посмотришь какие функции забиндины на клавиши home/end инвентаря игрока.
Crafty
5 March 2016 | 01:58
QUOTE |
Может ты посмотришь какие функции забиндины на клавиши home/end инвентаря игрока. |
Именно display_inventory_ с нужными параметрами, то есть для home это выглядит как call_offset_v3(0x46FDF4, 0, -1, 0), впрочем это уже не важно ты написал о call_offset_v0(int address), ну я и подумал что уже где-то используешь, а значит это работает, проверять не стал и предложил подходящий аналог. Но дело в том, что call_offset_* и функции работы с памятью относятся к небезопасным и в релизной версии намертво отключены, их можно включить в отладочной версии с помощью AllowUnsafeScripting=1 в секции Debugging. Но и это не поможет как выяснилось call_offset_[v|r]1-call_offset_[v|r]4 полностью сломаны (неправильно читают аргументы). И даже после быстрого исправления я начал получать краш (до него просто не работало). Поскольку скриптовыми обработчиками я пока ещё не занимался, то и исправить пока ничего не могу... ;(
Fakeman
5 March 2016 | 10:07
AllowUnsafeScripting Про это я вкурсе.
Ну ладно фиг сним так сказать не прокатил вариант.
Nordan
5 March 2016 | 11:09
Чего то у меня вообще не так, версия sfall 3.7 релизная.
Пробовал затолкать функцию call_offset_v3(0x46FDF4, 0, -1, 0) в скрипт предмета в обработчик destroy_p_proc, чтобы он выполнялся из инвентаря непосредственно.
При отключенным AllowUnsafeScripting игра не крашится, но в дебаге появляется
ошибка.
При включенном, ничего не появляется и не крашится, может быть даже работает.
Fakeman
5 March 2016 | 13:34
Да не работает оно, я проверял на своем плагине фильтре инвентаря неперерисовывает итемы. А крашится в интерфейсе бартера.
Crafty
5 March 2016 | 21:33
В своё время мне CritterInvSizeLimitMode не понравился в русской версии на экране снаряжения игрока (который в рюкзаке игрока по клавише 'I') данные о "общий размер/максимальный размер" обрезались из-за "Общ. вес:", да и нельзя было нормально определить размер вещи. К тому же я считал что вес "заменяется" на размер.
На самом деле CritterInvSizeLimitMode шикарная вещь, и размер не заменяет вес, а является дополнительным ограничением (перегруженным можно быть не только из-за веса, но и из-за размера вещей). Оригинальная версия конечно бедненькая и нормально работающая только с игроком (остальным персонажам нужны подправленные pro'шники)...
Nordan
QUOTE |
В настройках сфалла можно менять максимальную вместимость инвентаря (не вес, а именно вместимость по размеру), можно ли этот параметр привязать к переменной? |
В общем допилил значение переменной CritterInvSizeLimit применяется ко всем заданным персонажам и для его хранения используется STAT_unused этого персонажа, что позволяет изменять (не напрямую) значение с помощью set_critter_stat.
На экране снаряжения игрока, а также в окне настроек сопартийца в поле "Несёт" кроме "общий вес/максимальный вес" показывается (при соответствующем режиме) дополнительно "общий размер/максимальный размер".
Какой русский вариант для "It occupies 1 unit."/"It occupies %d units."?
"Занимает 1 ячейку."/"Занимает %d ячеек." ничего лучше в голову пока не пришло.
Есть задумка сделать CritterInvSizeLimit динамически расчитываемым в зависимости от статов, как навык. К примеру использовать выносливость или силу (причём базовое значение, но для ГГ с учётом трейтов) и интеллект (а тут уже учитывать химию, влияет на компактность складывания вещей).
Что-то вроде при CritterInvSizeLimit = 5:
CODE |
5 * ((2 * текущий интеллект) + базовая выносливость) |
-----------------------------------------------------------------------
Доработал FreeWeight теперь поддерживается любой режим CritterInvSizeLimitMode, но чтобы не возникла путаница пришлось изменить формат отображения отказавшись от показа максимального значения. Сейчас формат "свободный вес" для персонажей и "свободный размер" для контейнеров, а при включённом режиме CritterInvSizeLimitMode для заданных персонажей "свободный вес/свободный размер".
PS. Вот простенький hs_invenwield добавляющий/отнимающий 10 "ячеек" при одевании/снятии любой брони сопартийцем:
CODE |
procedure start;
procedure start begin variable critter, armor, slot, hooktype, returned; begin critter := get_sfall_arg; armor := get_sfall_arg; slot := get_sfall_arg; hooktype := get_sfall_arg; returned := -1; if (slot == 0) then begin if (party_member_obj(obj_pid(critter)) != 0) then begin if (hooktype == 1) then begin set_critter_stat(critter, 10, 10); end else begin set_critter_stat(critter, 10, -10); end end end set_sfall_return(returned); end end |
Nordan
5 March 2016 | 22:45
Круто. Я так понимаю, ты все это делаешь под версию 3.6 ? На 3.7 не собираешься переходить?
Fakeman
6 March 2016 | 00:32
QUOTE |
На 3.7 не собираешься переходить |
На сколько я понял у него свой Sfall и со своим блэкджеком и... переход на 3.7 невозможен по причине того что у его Sfall'а исходный код конкретно изменен.
а зачем переходить на 3.7 он может плюхи из 3.7 добавить в свою версию, что и было сделано.
Crafty
6 March 2016 | 02:52
QUOTE |
И даже после быстрого исправления я начал получать краш |
То я тупанул и забыл проверять режим с помощью get_game_mode.
Вы бы хоть пример простенького скрипта для проверки кинули...
Nordan
QUOTE |
Чего то у меня вообще не так, версия sfall 3.7 релизная. |
Конечно не работает :-p
QUOTE |
как выяснилось call_offset_[v|r]1-call_offset_[v|r]4 полностью сломаны (неправильно читают аргументы) |
Fakeman
QUOTE |
Да не работает оно, я проверял на своем плагине фильтре инвентаря неперерисовывает итемы. А крашится в интерфейсе бартера. |
Работает :-p
Вот hs_keypress для проверки, аналог home в инвентаре игрока, только на клавишу F11:
CODE |
procedure start;
procedure start begin variable event, keyDX, keyVK; begin event := get_sfall_arg; keyDX := get_sfall_arg; keyVK := get_sfall_arg; if ((event == 1) and (keyDX == 87) and ((get_game_mode bwand 4096) != 0)) then begin display_msg("_stack_offset = " + read_int(0x59E844)); write_int(0x59E844, 0); call_offset_v3(0x46FDF4, 0, -1, 0); end end end |
Fakeman
6 March 2016 | 03:01
QUOTE |
Вот hs_keypress для проверки, аналог home в инвентаре игрока, только на клавишу F11: |
а можно это прикрутить именно к интерфейсу бартера и LOOT для цели и игрока?
для инвентаря игрока это как бы это и не надо.
write_int(0x59E844, 0); это обязательно записывать?
Во общем затестил в LOOT и BARTER (кстати бартер это аргумент 3 а не 4) для игрока замечательно работают нужно такую же функцию и для цели.
И еще найди функцию которая обновляет статы в Инвентаре игрока это когда предметы таскаешь оно обновляется.
Crafty
6 March 2016 | 05:17
QUOTE |
Во общем затестил в LOOT и BARTER (кстати бартер это аргумент 3 а не 4) для игрока замечательно работают нужно такую же функцию и для цели. |
Верно 3 тоже прозевал :(
CODE |
procedure start;
procedure start begin variable event, keyDX, keyVK; variable inventory_offset, target_inventory_offset, _target_pud, display_inventory_, display_target_inventory_; begin event := get_sfall_arg; keyDX := get_sfall_arg; keyVK := get_sfall_arg; if ((event == 1) and (keyDX == 87)) then begin inventory_offset := 0x59E844 + (read_int(0x59E96C) * 4); target_inventory_offset := 0x59E7EC + (read_int(0x59E948) * 4); _target_pud := read_int(0x59E978); display_inventory_ := 0x46FDF4; display_target_inventory_ := 0x47036C; if ((get_game_mode bwand 0x1000) != 0) then /* INVENTORY */ begin call_offset_v0(0x471D5C); /* display_stats_ */ write_int(inventory_offset, 0); call_offset_v3(display_inventory_, 0, -1, 0); end else if ((get_game_mode bwand 0x8000) != 0) then /* INTFACEUSE */ begin write_int(inventory_offset, 0); call_offset_v3(display_inventory_, 0, -1, 1); end else if ((get_game_mode bwand 0x10000) != 0) then /* INTFACELOOT */ begin write_int(target_inventory_offset, 0); call_offset_v4(display_target_inventory_, 0, -1, _target_pud, 2); call_offset_v1(0x4D6F5C, read_int(0x59E964));/* win_draw_ */ write_int(inventory_offset, 0); call_offset_v3(display_inventory_, 0, -1, 2); end else if ((get_game_mode bwand 0x20000) != 0) then /* BARTER */ begin write_int(target_inventory_offset, 0); call_offset_v4(display_target_inventory_, 0, -1, _target_pud, 3); call_offset_v1(0x4D6F5C, read_int(0x59E964));/* win_draw_ */ write_int(inventory_offset, 0); call_offset_v3(display_inventory_, 0, -1, 3); end end end end |
QUOTE |
write_int(0x59E844, 0); это обязательно записывать? |
Да, это чтобы номер текущего элемента соответствовал отрисованному.
Попробуй не записывать, прокрути инвентарь в конец, отрисуй и увидишь ;)
QUOTE |
И еще найди функцию которая обновляет статы в Инвентаре игрока это когда предметы таскаешь оно обновляется. |
Добавил.
Fakeman
6 March 2016 | 17:39
Огромное СПС, НО не работает)
Обновление для цели не корректно работает нужно поводить мышкой по слоту чтобы нарисовались итемы, аля такой фотошоп получается) в чем проблема?
CODE |
inventory_offset := 0x59E844 + (read_int(0x59E96C) * 4); |
а тут это у тебя уже по другому адресу записывается в чем разница?
CODE |
call_offset_v0(0x471D5C); /* display_stats_ */ |
Не стал проверять на оригинальной длл сфала это там тоже будет корректно работать?
Слушай, я наверное тебя уже достал) но давай тогда еще найдем функцию которая обновляет параметры на главной панели игрока такие как AP/AC/HP
- заметил обновление происходит когда закрываешь окно с характеристиками игрока, или когда броню одеваешь, но тут наверное просто счетик АС обновляется.
А можно доработать еще скриптовую функцию critter_inven_obj чтобы она получала указатель так-же и на предмет который находится в неактивном слоте руки. а то это вроде как баг, но с другой стороны и не баг, поэтому желательно наверное через ini опцию это фиксить, если не трудно будет. :)
Еще есть такой баг в двиге если клацнуть по пустому месту в слоте для предметов интерфейса USE то игра крашится.