Перейти к содержимому


Фотография

(sfall) дополнения


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 1246

#81 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 02 Апрель 2015 - 23:25

QUOTE
Теперь свободный вес показывается и при обмене с предметами (ящики/багажник/etc)

Так что-то мне опять не нравится :)
а нельзя ли сделать цвет шрифта веса зеленым а не белым?
и расположить веса не в слотах для предметов, а под картинками чюза и объекта, по мне такое расположение выглядело бы логичнее)

QUOTE
Это "релизная" версия dll, но в ней оставлены SkipSizeCheck и ExtraCRC из секции [Debugging])

А можно еще оставить и возможность DebugMode ?

Это сообщение отредактировано Fakeman - 2 апреля 2015 | 23:31


#82 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 03 Апрель 2015 - 01:02

QUOTE
а нельзя ли сделать цвет шрифта веса зеленым а не белым?
Можно, но всё равно нечётко в окне торговли/обмена с сопартийцем.

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

QUOTE
А можно еще оставить и возможность DebugMode ?
Нет смысла, проще сразу отладочную версию собрать — кинул в архив в \debugging.


#83 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 03 Апрель 2015 - 13:49

QUOTE
Не, нельзя — место под картинкой объекта используется для кнопок прокрутки по объектам если их несколько (трупы в одном месте).

не, ты не понял я имел ввиду вот так

QUOTE
отладочную версию собрать — кинул в архив в \debugging.

Спасибо то что мне нужно!
Ну а цвет веса при бартере можно было оставить и белым ибо с зеленый шрифт не сочетается с доской.

Это сообщение отредактировано Fakeman - 3 апреля 2015 | 14:14


#84 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 03 Апрель 2015 - 15:13

QUOTE
не, ты не понял я имел ввиду вот так
Просто ты проверяешь на маленьком шкафе, а ведь есть и более крупные (навскидку сразу могу сделать скрин как раз из Невады — Солт-Лейк, завод ядер-колы, здание с верстаком напротив офиса, полки во второй комнате) и там текст накладывается точно на картинку, а не серый фон. Ещё и придётся дописывать свою процедуру перерисовки части экрана. И опять же следуя стилю нужно и при торговле/обмене с сопартийцем выводить свободный вес не на доске, а под картинками персонажей.

QUOTE
Ну а цвет веса при бартере можно было оставить и белым ибо с зеленый шрифт не сочетается с доской.
Общая процедура для вывода текста свободного веса, потому цвет меняется везде.
Белый тоже сливается, всегда напрягало. В каком-то старом варианте я менял на чёрный (ну не совсем), выглядело намного лучше.


#85 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 03 Апрель 2015 - 16:46

QUOTE
а ведь есть и более крупные и там текст накладывается точно на картинку

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


#86 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 03 Апрель 2015 - 23:49

QUOTE
Я вот вообще не вижу никакого смысла показывать этот вес(размер) для контейнеров. Можно этот размер к багажнику машины прикрутить, а для остальных вырубить, вот такое мое мнение :)
Кушать не просит, почему бы и не показывать :-p
В F2 в качестве временных хранилищ я использовал шкаф в доме Гришэма в Модоке, шкафчик во второй комнате мастерской дочери Вика в Городе Убежище и ещё кучу подобных мест, особенно до появления машины.


#87 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 05 Апрель 2015 - 15:42

Люблю масштабные битвы — так чтобы куча врагов и добра после них. Потом всё добро собрать и разрядить. Да вот беда — если оружие одинаковое, но патроны в нём разные, то после разрядки будет не один, а два стака оружия — каждый для своего типа патронов. Жутко неудобно. Поправил ;)
Если оружие без патронов воруется, перекладывается в/из объект[а], подбирается с земли и конечно же разряжается руками, то тип используемых патронов меняется на патроны "по умолчанию" для этого оружия. При торговле или обмене — не меняется.

На форуме Олимпа затронули вопрос оптического прицела и связанного с ним штрафа дистанции, я там отписался и думаю стоит добавить решение в sfall. Глупо считать что если оружие с оптическим прицелом, то стрелять можно только глядя в оптику.


#88 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 08 Апрель 2015 - 02:08

Добавил фикс для "Too Many Items Bug" ("если неожиданно становится невозможно зайти на какую-либо карту из-за того, что игра виснет на черном экране") — предотвращает создание битых .SAV с картами из-за которых баг и проявляется. Но если уже есть битый сейв, то утилита TooManyItemsBug в помощь.

PS. Если действительно интересно расскажу в чём суть бага.

Update: Добавил ещё одну проверку.

Это сообщение отредактировано Crafty - 8 апреля 2015 | 19:37


#89 The Master

The Master

    Чистосердечный зевака

  • Пользователи
  • PipPipPip
  • 2 167 сообщений

Отправлено 08 Апрель 2015 - 10:22

Ну где-то описывалось, читал даже, но освежить и донести до тех, кто не знает, не помешает. Пиши :)


#90 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 10 Апрель 2015 - 10:25

QUOTE
Ну где-то описывалось, читал даже, но освежить и донести до тех, кто не знает, не помешает. Пиши :)
Мой рассказ таков, что без бутылки и не понять ;)

В общем, с каждой картой связано 5 типов скриптов (s_system, s_spatial, s_time, s_item, s_critter).
Для активной в данный момент карты каждый тип скриптов хранится в памяти в таком виде:
CODE
                Пример
┌──────────┐   ┌───────┐
│FirstBlock│ = │Block_1│
│LastBlock │ = │Block_3│
│BlockNums │ = │3      │
│Id        │ = │неважн.│
└──────────┘   └───────┘

FirstBlock — указатель на первый блок, а LastBlock — на последний блок скриптов этого типа.
BlockNums — количество блоков скриптов этого типа.
Если BlockNums = 0, то FirstBlock и LastBlock равны 0 и скриптов этого типа нет. Если BlockNums = 1, то LastBlock равен FirstBlock.

В свою очередь каждый блок скриптов (Block_1...Block_3) хранится в памяти в таком виде:
CODE
   Block_1                     Block_2                     Block_3          
╔═╤═════════╤═══════╗       ╔═╤═════════╤═══════╗       ╔═╤═════════╤═══════╗
║+│скрипт_1 │       ║   ┌─>─╢+│скрипт_17│       ║   ┌─>─╢+│скрипт_33│       ║
║+│скрипт_2 │       ║   │   ║+│скрипт_18│       ║   │   ║ │         │       ║
║+│скрипт_3 │       ║   │   ║+│скрипт_19│       ║   │   ║ │         │       ║
║+│скрипт_4 │       ║   │   ║+│скрипт_20│       ║   │   ║ │         │       ║
║+│скрипт_5 │       ║   │   ║+│скрипт_21│       ║   │   ║ │         │       ║
║+│скрипт_6 │       ║   │   ║+│скрипт_22│       ║   │   ║ │         │       ║
║+│скрипт_7 │       ║   │   ║+│скрипт_23│       ║   │   ║ │         │       ║
║+│скрипт_8 │       ║   │   ║+│скрипт_24│       ║   │   ║ │         │       ║
║+│скрипт_9 │       ║   │   ║+│скрипт_25│       ║   │   ║ │         │       ║
║+│скрипт_10│       ║   │   ║+│скрипт_26│       ║   │   ║ │         │       ║
║+│скрипт_11│       ║   │   ║+│скрипт_27│       ║   │   ║ │         │       ║
║+│скрипт_12│       ║   │   ║+│скрипт_28│       ║   │   ║ │         │       ║
║-│скрипт_13│       ║   │   ║+│скрипт_29│       ║   │   ║ │         │       ║
║-│скрипт_14│       ║   │   ║+│скрипт_30│       ║   │   ║ │         │       ║
║-│скрипт_15│       ║   │   ║+│скрипт_31│       ║   │   ║ │         │       ║
║-│скрипт_16│       ║   │   ║+│скрипт_32│       ║   │   ║ │         │       ║
╟─┴─────────┼───────╢   │   ╟─┴─────────┼───────╢   │   ╟─┴─────────┼───────╢
║Количество │16     ║   │   ║Количество │16     ║   │   ║Количество │1      ║
╟───────────┼───────╢   │   ╟───────────┼───────╢   │   ╟───────────┼───────╢
║Указатель  │Block_2╟─>─┘   ║Указатель  │Block_3╟─>─┘   ║Указатель  │0x0    ║
╚═══════════╧═══════╝       ╚═══════════╧═══════╝       ╚═══════════╧═══════╝

Когда в игре для карты добавляется новый скрипт, то добавляется он в конец последнего блока (увеличивая количество скриптов в этом блоке) или если количество скриптов равно 16 в этом блоке, то создаётся новый блок и скрипт добавляется в него.

При смене карты её состояние записывается в имя_карты.sav, который потом будет использоваться при записи игры (для текущей карты файл этой карты перезаписывается в момент записи игры). Важно то, что записываются все скрипты (каждого типа скриптов) связанные с картой, но сначала блоки чистятся от "неактивных" скриптов (я не стал разбирать структуру скриптов и точно не знаю почему некоторые скрипты не записываются, поэтому называю их "неактивными" они связаны с игроком) с помощью обмена содержимого "неактивного" скрипта с первым доступным "активным" скриптом из конца списка. Само собой подсчитывается количество записываемых "активных" скриптов, но не трогается содержимое остальных блоков скриптов — количество скриптов в блоках и указатели на следующий блок (указатели после записи карты будут нужны для освобождения памяти).

После чистки наступает очередь записи — сначала записывается подсчитанное количество "активных" скриптов, а потом содержимое блоков, включая значения количества скриптов в блоке и указатель на следующий блок (при загрузке карты значение указателя игнорируется).
Однако при этом движок вместо того чтобы использовать подсчитанное количество записываемых "активных" скриптов пользуется данными из блоков и это провал.

Лучше на примере — есть 3 блока скриптов, в 1 и 2 по 16 скриптов, в 3 один скрипт. Всего 33 скрипта, которые после чистки 4 "неактивных" скриптов станут 29. Движок должен записать первый блок, изменить количество скриптов во втором блоке и затем записать его.
В действительности, поскольку не был изменён указатель на последний блок, движок записывает два блока, затем обнаруживает что в третьем блоке "неактивный" скрипт и нигде не изменяя количество скриптов завершает обработку скриптов этого типа.
Что приводит к некритической ошибке (с поправкой на то, что в действительности представляют из себя "неактивные" скрипты). Если проверить любой из своих сейвов, то с большой вероятностью найдётся несколько некритических результатов этого бага (но карта будет рабочая). Если воспользоваться утилитой TooManyItemsBug:
CODE
Number of script's descriptors in 3'th sequence = 29
In 0'th block, 16 scripts were used.
In 0'th block, 4 unknown bytes = 26002544.
In 1'th block, 16 scripts were used.
In 1'th block, 4 unknown bytes = 240554040.
In last block 4 unknown bytes = 240554040.

Ошибка становится критической когда количество "неактивных" скриптов сдвигает список на один или более блоков и до чистки блоков было больше двух. Для нашего примера пусть будет 20 "неактивных" скриптов — должен быть записан только первый блок с 13 скриптами, но движок запишет ещё второй блок (ведь указатель на последний блок не поменялся), который и будет являться причиной зависания при загрузке этой карты. Для TooManyItemsBug:
CODE
Number of script's descriptors in 3'th sequence = 13
In 0'th block, 16 scripts were used.
In 0'th block, 4 unknown bytes = 26002544.
In last block 4 unknown bytes = 26002544.
Unused block detected.
In unused block, 16 scripts were used.
In unused block, 4 unknown bytes = 1.

Update: "Неактивные" скрипты — это скрипты связанные с игроком (ну там скриптовые вещи в инвентаре).

А вот описание бага на английском:
QUOTE
The too many items bug
I don't know exactly how it works technically, but what happens is that late in the game, if you have too many (different) items in one location, this will eventually corrupt maps. The number of items in question includes what you and your NPCs are carrying, the items on critters and in containers on the map (including shops), plus the stuff in your car no matter if it's present or not. The bug triggers upon leaving an area, and means that next time you try to enter that map, your computer will lock up completely. Many people have reported this behaviour; you'll notice how the "orbiting rocket" mouse pointer shows up on the screen, but doesn't animate. The hard drive might buzz for a while then fall silent. Depending on your system you may have to turn your computer off entirely. If you reload the game the same thing will happen again eventually, or right away if the save includes the broken state of the map you're trying to enter (but since a map goes bad only when you leave it, the current map of each save will never be corrupted, thankfully). Maps will become corrupted more frequently as you continue to play and amass items, making the game nearly (or literally) unplayable towards the end.

The simplest way to prevent this from happening is to avoid carrying around quest items which you have no further use of. If you want to keep them, don't store them in your trunk but in some accessible container on a map where there are no shops, or where there are not too many items anyway. If you want to be doubly safe, avoid selling too many different items in one place. If you're not in the habit of hoarding items, this will probably not be an issue.
© Per Jorner, The Nearly Ultimate Fallout 2 Guide v1.2

Это сообщение отредактировано Crafty - 10 апреля 2015 | 20:55


#91 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 14 Апрель 2015 - 16:04

Исправил два бага при использовании инвентаря игрока (вызов через 'I'). У них общая причина возникновения связанная с обратным порядком хранения предметов инвентаря в памяти — первый предмет в инвентаре (самый верхний в списке) хранится в памяти последним, и наоборот — последний предмет в инвентаре (самый нижний в списке) хранится в памяти первым. Поэтому движок должен менять порядок когда использует данные о предметах инвентаря. В инвентаре игрока движок об этом "забывает", что приводит к двум ошибкам.

Ошибка первая визуальная — при взятии предмета мышкой если предмет был в единственном экземпляре, то место откуда предмет взят становится пустым (стирается), если там несколько предметов, то место остаётся прежним (картинка предмета не стирается), но уменьшается счётчик количества предметов. В инвентаре игрока это сломано.
Пример: в инвентаре лежит 4 предмета — пистолет, автомат, винтовка и 3 стимулятора. Если взять мышкой пистолет, то движок использует данные о количестве стимуляторов и не сотрёт картинку места откуда взят пистолет. Если взять автомат, то картинка будет стёрта — используются данные винтовки. Взятие винтовки тоже сотрёт картинку — используются данные автомата. Взятие же стимулятора вместо того чтобы оставить картинку и уменьшить количество предметов на месте сотрёт её — используются данные пистолета.

Ошибка вторая техническая — вряд ли кто знает, что для зарядки оружия/складывания предметов в сумку помимо способа "взять оружие в руку, а затем перетащить патроны из инвентаря в руку с оружием" существует и другой способ — "перетащить патроны из инвентаря в оружие в инвентаре". В движке такая возможность есть, но правильно она не работает (это когда работает).
Пример: в инвентаре лежит 3 предмета — снайперская винтовка, патроны 0.223 и охотничье ружьё. Если перетащить патроны на винтовку, то зарядится ружьё. И наоборот :-p

Уже после исправления я обнаружил что установленный High Resolution Patch (который F2_RES) может дополнительно сломать уже сломанное ;) Если переменная IFACE_BAR_MODE из f2_res.ini равна 1, то сбивается порядковый номер слота (добавляется 1) куда перетаскивается предмет. Пример приводить не буду ;)


#92 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 16 Апрель 2015 - 19:46

QUOTE
Ошибка первая визуальная
Ошибка вторая техническая

вот не поверишь, никогда не замечал таких ошибок... *убежал проверять так ли это на самом деле* :))


#93 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 17 Апрель 2015 - 19:48

Бывает в бою нужно подлечиться — открываю инвентарь, использую стимпаки и "чтобы два раза не бегать" © заряжаю оружие перетаскивая патроны в руку с оружием. И тут вылазит это навязчивое окошко с предложением указать количество коробок патронов... Капут окошку ;)

Теперь клавиша перезарядки (ReloadWeaponKey) кроме собственно перезарядки оружия дополнительно функционирует как "Использовать" для не оружия.

Изменил минимальное и максимальное значение возраста игрока с 16-35 (возрастная аудитория?) на 8-60 :-p

Включённый DrugExploitFix дополнительно не позволит абузить повышение скиллов под отрицательным эффектом (101% в Легкое оружие — поесть баффаутов, дождаться отрицательного эффекта и качать скилл за 1 поинт вместо 2).
А при получении перков игнорируются и отрицательные эффекты (ранее только положительные). При 10 ловкости в списке перков не будет "Добавить ловкости", но под отрицательным эффектом появится.


#94 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 18 Апрель 2015 - 13:55

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

Не совсем понял что-ты сделала с окошком... ты что его убил :'(


#95 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 18 Апрель 2015 - 18:05

QUOTE
ты что его убил :'(
Вроде того :-p
Окошко вызывается когда количество коробок патронов больше 1 и возвращает введённое количество в диапазоне 1-макс.количество коробок. Вместо вызова окошка сразу возвращается макс.количество коробок.
Естественно это только при перетаскивании патронов в оружие — в остальных случаях (сумка, багажник или торговля) окошко вызываться будет.

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


#96 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 19 Апрель 2015 - 00:10

QUOTE
Вроде того :-p

Это ты зря!!!
Ты не подумал о ситуации когда у игрока допустим есть 3 пачки патронов, 2 из них он захочет зарядить в пулемет(магазин 3 пачки), а одну оставить, так как у него во второй руке пистолет с тем же калибром патронов который потом в бою нужно будет перезарядить, а нечем!!!! сечешь)

Это сообщение отредактировано Fakeman - 19 апреля 2015 | 00:12


#97 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 19 Апрель 2015 - 03:21

QUOTE
Ты не подумал о ситуации
Притянуто за уши, но разумно (ох уж эти любители создавать себе проблемы) ;)

Поправил — если макс.количество пачек патронов больше значения переменной ReloadReserve (по умолчанию = 1), то возвращает "макс.количество пачек минус ReloadReserve", или 1.


#98 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 19 Апрель 2015 - 13:21

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


#99 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 19 Апрель 2015 - 14:55

QUOTE
как тебе идея?
Не :-p


#100 Drobovik

Drobovik

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 211 сообщений

Отправлено 19 Апрель 2015 - 19:36

Crafty
Предлагаю внедрить данный фикс.




Похожие темы Свернуть

  Название темы Форум Автор Статистика Последнее сообщение


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных

Рейтинг@Mail.ru