Joined: 18 Oct 2009, 04:01 Posts: 7252 Location: Владивосток
Почему-то не могу повторить. При всех комбинациях g_friendly_hit_projectile и g_friendly_absorb_damage поведение ожидаемое. Скажи мне свои флаги. Вообще, g_friendly_absorb_damage 1 по смыслу (не по действию!) дублирует g_friendly_hit_projectile 1, так что это будет неплохо вообще переделать заодно.
Занятно, кстати, что через монстров огонь из стрелкового оружия пролетает всегда. Так было и в оригинальном Doom2D, просто я раньше никогда не задумывался.
Joined: 19 Jun 2019, 23:28 Posts: 463 Location: Equestrian Wasteland.
Чёрный Думер wrote:
Почему-то не могу повторить. При всех комбинациях g_friendly_hit_projectile и g_friendly_absorb_damage поведение ожидаемое. Скажи мне свои флаги. Вообще, g_friendly_absorb_damage 1 по смыслу (не по действию!) дублирует g_friendly_hit_projectile 1, так что это будет неплохо вообще переделать заодно.
Подозреваю, твоё вмешательство путём изменения LongBool на что-то другое поломали ожидаемую смену поведения (впрочем, могу ошибаться, я изменения проверял не так досконально), потому что я даже через консоль не добивался изменений вообще, зато на предыдущем коммите всё стабильно отрабатывает. g_friendly_absorb_damage делает то, что в нём написано - включает поглощение урона, а не прохождение снарядов/хитскана, они по смыслу и названиям полностью разные. С прохождением хитскана и снарядов работал fgsfds, если что, не я, моих копыт дело только поглощение урона.
Проверялось следующим образом: запускалась "Своя игра", настройка перед запуском не трогалась, изменялось всё непосредственно во время игры. На предыдущем коммите всё работает как часики, с этого и после уже нет.
Joined: 18 Oct 2009, 04:01 Posts: 7252 Location: Владивосток
FoxFromPripyat» Проверялось следующим образом: запускалась "Своя игра", настройка перед запуском не трогалась, изменялось всё непосредственно во время игры. На предыдущем коммите всё работает как часики, с этого и после уже нет.
Так ты флаги скажи-то, которые во время игры выставлял. И ожидаемое поведение.
Joined: 19 Jun 2019, 23:28 Posts: 463 Location: Equestrian Wasteland.
Чёрный Думер wrote:
Так ты флаги скажи-то, которые во время игры выставлял. И ожидаемое поведение.
Почему каждый раз мне необходимо цитировать собственный мануал? Я же не для себя его писал в конце концов %)
Code:
g_friendly_hit_trace 1/0 Включить или выключить прохождение хитскана (пули) через своих союзников. g_friendly_hit_projectile 1/0 Включить или выключить прохождение прожекттайлов (ракеты, снаряды БФГ или плазмы) через своих союзников. Примечание: работает по следующему принципу: 1 - выключить (пули/снаряды будут сталкиваться с союзниками), 0 - включить (пули/снаряды будут проходить сквозь союзников).
Joined: 18 Oct 2009, 04:01 Posts: 7252 Location: Владивосток
FoxFromPripyat wrote:
Почему каждый раз мне необходимо цитировать собственный мануал? Я же не для себя его писал в конце концов %)
Потому что ты не понимаешь вопроса. Я знаю флаги, потому что как бы тестировал их иначе по-твоему? Моя просьба в другом: скажи, что и как ты выставлял, опиши последовательность действий и скажи, к какому нежелательному результату она приводит и к какому должна была приводить. Прям нумерованным списком и как для тупых, чтобы думать не приходилось.
Joined: 19 Jun 2019, 23:28 Posts: 463 Location: Equestrian Wasteland.
Исходя из переписки в дев-чате, эти две фичи были привязаны к Friendly Fire-опции, что и сломало ожидаемое поведение. Моё исследование кода это так же подтверждает.
Отмечу, какие опции за что отвечают: g_friendlyfire - определяет, будут ли наносить союзники урон; g_friendly_hit_trace - определяет, будут ли проходить пули сквозь союзников; g_friendly_hit_projectile - определяет, будут ли снаряды проходить сквозь союзников; g_friendly_absorb_damage - определяет, будут ли пройденные через союзников пули с уменьшенным в половину уроном или нет.
Исходя из этого, выходит следующее: 1. При включённом френдлифайере в коопе, союзники не смогут помогать как раньше (если он работает в коопе конечно). Например, нужно подкинуть кого-то при помощи БФГ - всё, нет этой возможности, только выключить прохождение снарядов через союзника, потому что если выключить это, то снаряд БФГ союзника убьёт и всё. 2. При выключенном френдлифайере регулировать, что же будет через союзника проходить, вообще невозможно, можно только выключить поглощение урона у пулек. В результате фичи включения прохождения снарядов и пуль становятся полностью бесполезными.
Абсолютно разные опции, но почему-то все привязаны к одной, которая полностью нивелирует эффект помощи в коопе и абсолютно странно смотрится такое переключение в ТДМ/ЦТФ, где, вообще-то, нанесение урона должно регулироваться отдельно всегда.
Joined: 18 Oct 2009, 04:01 Posts: 7252 Location: Владивосток
Во, сейчас наконец-то ясно стало.
FoxFromPripyat» Исходя из переписки в дев-чате, эти две фичи были привязаны к Friendly Fire-опции, что и сломало ожидаемое поведение. Наоборот: они не были привязаны, а стали привязаны. Смотри сам: https://repo.or.cz/d2df-sdl.git/blobdiff/67d37ea1..5a9d04df:/src/game/g_weapons.pas Именно исходя из того, что третья проверка заканчивалась = 0, а первые две нет, я и подумал, что здесь имеет место какой-то косяк. А поскольку не только названия настроек одинаково начинались с g_friendly*, но и соответствующие константы в коде начинались с GAME_OPTION_TEAM*, то я закономерно решил, что оно и должно быть привязано к friendlyfire. Хотя казалось бы, всего неточность в наименовании. Понимаешь теперь?
FoxFromPripyat» только выключить прохождение снарядов через союзника, потому что если выключить это, то снаряд БФГ союзника убьёт и всё Тут где-то Ы лишняя, кажется.
Joined: 19 Jun 2019, 23:28 Posts: 463 Location: Equestrian Wasteland.
Чёрный Думер wrote:
...то я закономерно решил, что оно и должно быть привязано к friendlyfire. Хотя казалось бы, всего неточность в наименовании. Понимаешь теперь?
Отмечал в чате, в данном случае префиксы меня будут интересовать в самую последнюю очередь, если есть очевидная путаница по функционалу и отсутствуют какие-либо вопросы на этот счёт. Пуганный уже случаями похлеще, где руками проверить или в код посмотреть куда надёжнее, чем доверять префиксу, который может вообще не относиться к той или иной штуке в силу пофигизма кодера или его рукозадости.
А ещё другого префикса и не требовалось никак, опции вполне относятся к g_friendly* и GAME_OPTION_TEAM* чисто технически (потому что в FFA/LMS это вообще ни на что не влияет, только в командных режимах). Если прям колышит эта тема, префикс меняем в g_team* и тогда путаницы больше не будет ни у кого.
Заодно обнаружил, что параметр g_friendly_absorb_damage не записывался в файл конфигурации при сохранении. Это тоже поправил. Ну и все три параметра теперь переименованы:
g_friendly_hit_trace — в g_team_hit_trace;
g_friendly_hit_projectile — в g_team_hit_projectile;
g_friendly_absorb_damage — в g_team_absorb_attacks.
И такое ощущение, что я именно этот баг сам лично упоминал в чате вообще ещё в феврале: https://t.me/doom2d/469027 Просто совсем забыл про это сообщение, а сейчас разбирал TODO и нашёл ссылку на него.
Но вроде бы боты как и пукали через других полным уроном, так и пукают
_________________ В душе я тупорылый школьник-нарцисс, который всегда старается самоутвердиться за счёт других ВНИМАНИЕ! Сообщение или часть сообщения генерируются с помощью усовершенствованной языковой модели искусственного интеллекта. Содержание, включая любые мнения, советы, заявления, услуги, предложения или другую информацию, выражено на дату, указанную выше, и может быть изменено без предварительного уведомления.⏎
Joined: 18 Oct 2009, 04:01 Posts: 7252 Location: Владивосток
Макс» Но вроде бы боты как и пукали через других полным уроном, так и пукают Если у тебя версия собрана после 13 ноября 2023 года, то об этом здесь и сообщили как раз. Попробуй пересобрать с последним коммитом.
Макс» Но вроде бы боты как и пукали через других полным уроном, так и пукают Если у тебя версия собрана после 13 ноября 2023 года, то об этом здесь и сообщили как раз. Попробуй пересобрать с последним коммитом.
Что именно было исправлено, сама логика? У меня файл настроек для дф пишется скриптом активации системы, поэтому я не полагался на систему сохранения настроек в игре
_________________ В душе я тупорылый школьник-нарцисс, который всегда старается самоутвердиться за счёт других ВНИМАНИЕ! Сообщение или часть сообщения генерируются с помощью усовершенствованной языковой модели искусственного интеллекта. Содержание, включая любые мнения, советы, заявления, услуги, предложения или другую информацию, выражено на дату, указанную выше, и может быть изменено без предварительного уведомления.
Joined: 18 Oct 2009, 04:01 Posts: 7252 Location: Владивосток
Макс» Что именно было исправлено, сама логика? Да. Я там два if'а сломал нечаянно когда менял синтаксис кода работы с настройками с raw bitwise на set of.
Joined: 18 Oct 2009, 04:01 Posts: 7252 Location: Владивосток
Чёрный Думер wrote:
Починил вроде бы:
Дополнил этот коммит и обновил ссылку в сообщении. Терминал сказал мне в тот раз, что снаряды починились, а стрелковое оружие нет - оно по-прежнему не отбрасывало игрока при hit_trace=1 если friendlyfire=0. И я целый месяц не мог понять, в чём же дело, потому что внешне всё выглядело правильно. А сегодня вчитался и наконец-таки обнаружил косяк: я сломал тогда не два if'а, а все три. Как в том анекдоте:
- Мастер, запорол! Все три запорол! - Дубина, как три, я же две давал! - Так я и образец запорол!
Ошибка вышла весьма нехарактерная. Изначально там было следующее условие:
Code:
if ((gGameSettings.Options and (GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMDAMAGE)) = 0) and
Когда я переделывал работу с флагами на операции с множествами, то заменил его на вот такое:
Code:
if (not ([TGameOption.TEAM_HIT_TRACE, TGameOption.FRIENDLY_FIRE] <= gGameSettings.Options)) and
И тут-то меня и коротнуло в моменте: я не понял, что противоположность высказыванию "все элементы из X присутствуют в Y" (оператор <=) - это "ОДИН ИЗ элементов НЕ присутствует", а не "все элементы отсутствуют".
К сожалению, во FreePascal нет операторов проверки на частичное пересечение, хотя было бы удобно. Поэтому пришлось сделать как и в остальных двух случаях - явным пересечением:
Code:
if (gGameSettings.Options * [TGameOption.TEAM_HIT_TRACE, TGameOption.FRIENDLY_FIRE] = []) and
Будет мне уроком. Терминал, проверь ещё раз, пожалуйста, если не затруднит.
Joined: 18 Oct 2009, 04:01 Posts: 7252 Location: Владивосток
FoxFromPripyat wrote:
Проверил настройки после последних коммитов - работает как положено.
Отлично, спасибо. На всякий случай оставлю здесь свою таблицу, которая и помогла мне понять логику работы этих настроек и различия между ними.
Варианты последствий для игрока-союзника:
получает урон?
поглощает ли часть урона (но не весь!) собой, в том числе без ущерба для себя?
простреливается насквозь?
отбрасывает попадание по нему?
friendlyfire=0:
hit_trace absorb 0 0 - 1:нет, 2:нет, 3:да, 4:нет - не получает, не поглощает; простреливается, не отбрасывает 0 1 - 1:нет, 2:да, 3:да, 4:нет - не получает, поглощает; простреливается, не отбрасывает 1 0 - 1:нет, 2:нет, 3:нет, 4:да - не получает, не поглощает; не простреливается, отбрасывает 1 1 - 1:нет, 2:нет, 3:нет, 4:да - не получает, не поглощает; не простреливается, отбрасывает
hit_proj absorb 0 0 - 1:нет, 2:нет, 3:да, 4:нет - не получает, не поглощает; простреливается, не отбрасывает 0 1 - 1:нет, 2:нет, 3:да, 4:нет - не получает, не поглощает; простреливается, не отбрасывает 1 0 - 1:нет, 2:нет, 3:нет, 4:да - не получает, не поглощает; не простреливается, отбрасывает 1 1 - 1:нет, 2:нет, 3:нет, 4:да - не получает, не поглощает; не простреливается, отбрасывает
friendlyfire=1:
hit_trace absorb 0 0 - 1:да, 2:нет, 3:нет, 4:да - получает, не поглощает; не простреливается, отбрасывает 0 1 - 1:да, 2:нет, 3:нет, 4:да - получает, не поглощает; не простреливается, отбрасывает 1 0 - 1:да, 2:нет, 3:нет, 4:да - получает, не поглощает; не простреливается, отбрасывает 1 1 - 1:да, 2:нет, 3:нет, 4:да - получает, не поглощает; не простреливается, отбрасывает
hit_proj absorb 0 0 - 1:да, 2:нет, 3:нет, 4:да - получает, не поглощает; не простреливается, отбрасывает 0 1 - 1:да, 2:нет, 3:нет, 4:да - получает, не поглощает; не простреливается, отбрасывает 1 0 - 1:да, 2:нет, 3:нет, 4:да - получает, не поглощает; не простреливается, отбрасывает 1 1 - 1:да, 2:нет, 3:нет, 4:да - получает, не поглощает; не простреливается, отбрасывает
Что мне сейчас не нравится:
У g_team_absorb_attacks отсутствует какое-либо влияние на снаряды. Хотя часть, скажем, того же сплеша от ракет можно было бы и поглощать.
Включённый g_team_hit_trace нивелирует собой g_team_absorb_attacks, частично пересекающийся с ним по смыслу. Но это похоже на уже имеющую место ситуацию с g_allow_dropflag и g_throw_flag, а потому более-менее терпимо.
Один лишь g_friendlyfire перекрывает собой все три настройки, тогда как ещё есть пространство для разнообразия. Самое очевидное - простреливать союзников насквозь при hit_trace=0, нанося им весь урон (при absorb=0) или только его поглощённую часть в порядке очерёдности (при absorb=1).
Нет какого-либо внятного контроля сплеша от BFG.
Поэтому пока оставляю как "В работе". Будет настроение - доделаю.
Users browsing this forum: No registered users and 0 guests
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum