Здравствуйте. Столкнулся с ситуацией, когда косметическое удобство оказалось конфликтующим с вадом. Речь идёт про ситуацию с заменой звука подбора ключа. Замена звуков - не самая популярная вещь в вадах, но встречается, особенно в старых. Можно ли ввести настройку с мигающим ключом при попытке активации закрытой двери? Некоторые варианты звуков подбора ключа к данной ситуации откровенно не подходят.
И, кстати, раз уж речь зашла про новые настройки, ни разу не встречал опцию с блокировкой ускорения бега по диагонали, которая откровенно ломает многие старые уровни. Насколько тяжело подобное реализовать? Конечно, никто не запрещает просто не пользоваться данной функцией, но, во-первых, отказ от использования в определённой ситуации определённого метода, который используется в обиходе, откровенно ломает ощущение игры и оставляет впечатление, что вы играете с автором карты в поддавки, что довольно неуместно, а во-вторых, в некоторых ситуациях с хитрыми головоломками на маршруты движения очень велико искушение не париться и просто пробежать диагональю, и заданная в опциях физическая невозможность оного также весьма бы помогла этому искушению не поддаваться.
P.S. Прошу прощения за кучу "хотелок", но они не из пустоты взяты, а из реального игрового опыта с реальными вадами.
Проблему с конфигом воспроизвести так и не получилось. И я даже не представляю как может сохраниться / прочитаться только часть изменений.
Проблему с пропадающими линиями получилось воспроизвести: она возникает когда отключено сглаживание и размер области рендера достаточно маленький (У меня это только в оконном режиме с размером окна около 945 на 533 и меньше).
В качестве решения можно включить сглаживание. В RD оно на мой взгляд почти незаметное, в отличие от адового мыла в GZDoom.
Сложность тут в том что сглаживание это функциональность SDL и я пока не знаю что тут можно сделать для улучшения ситуации. Так как на больших разрешениях его можно безболезненно отключать и пользователи могут хотеть это сделать.
Возможно можно сделать постоянное сглаживание для карты, но тут надо будет глубже лезть в рендер и сильнее увязывать его с SDL.
По поводу бега по диагонали: насколько я знаю это оригинальная механика и то что автор карты на неё не рассчитывал, это не проблема порта. К тому же любые опции про геймплей это гарантированные сложности с демками. Как минимум эти опции будут в ванильном состоянии при записи демок.
Я конечно запишу идею, но мне кажется что оно того не стоит.
Про хомы: Думаю опцию сделать можно, но мне для этого надо разобраться в рендере. Я пока не знаю даже как хомы фиксить там где их явно быть не должно. Записал.
Про звуки и мигающее ключи: Да, можно сделать опцию, записал.
Большое спасибо за ответ. Я играю на низком разрешении, так что, проблема, очевидно, в этом.
По поводу спорных пожеланий: мне видится, что в некоторых вопросах можно просто отдать решение на откуп игроку. Очевидно, та же деактивация диагонального бега будет по умолчанию отключена, и если игрок её таки включил, то совместимость с демками, рассчитанными на иные настройки, тут как бы и не запланирована. В порте уже есть настройки, меняющие оригинальный геймплей, вроде того же снятия ограничения на души или возможности пробегать над предметами, и тут решение понятное: если хочешь смотреть демки, то отключай на время просмотра данные опции. То же и с хомами: никакой алгоритм фиксов не даёт 100% гарантии, что не будет нарушена авторская задумка. И проще и разумнее просто сделать их по умолчанию отключёнными, и пусть игрок включает их на свой страх и риск, главное, чтобы вылетов не было, и всё ограничивалось визуальными эффектами.
И ещё отдельно по поводу оригинальной механики и совместимости с демками. Уже не в первый раз слушаю аргумент про демки и не могу не ответить, что просмотр и запись демок - это далеко не единственное, для чего люди могут запускать Doom. Да, несовместимость карты с оригинальной механикой - ошибка автора карты, но страдают не авторы, которые выпускали эти карты 30 лет назад и уже давно про них забыли, страдают игроки, у которых нет подходящих для данных карт настроек совместимости. Мне видится вполне логичным разделение, что есть дефолтные настройки для ценителей демонстраций и есть возможность их менять для тех, кого интересует именно авторская задумка. Почему одно должно идти в ущерб другому? Если невозможно скрестить ужа с ежом (сиречь, совместить синхронизацию демок со следованием задумке автора карты), то пусть они сидят по отдельности, зачем одного из них обязательно выпиливать? Замечу, что это сказано скорее по теме в общем, нежели именно вам, так как слишком часто такое соображение приводится разными людьми в разных местах, хотя перед глазами есть прекрасный пример того же оригинального Boom, где всё это замечательно соседствовало, и где соображения совместимости с демками не помешало ввести кучу новых геймплейных опций, а это, в свою очередь, не помешало некоторым ответвлениям Boom считаться многими "портами для демок".
Проблему с конфигом воспроизвести так и не получилось. И я даже не представляю как может сохраниться / прочитаться только часть изменений.
А у меня снова воспроизвелась... Попробуйте повыходить с разными языками. Сбрасываются настройки громкости (что сразу выдаёт сброс даже без захода в меню), чувствительность мыши и настройки геймплея, плюс некоторые отдельные строчки в других местах. Да, добавлю, что у меня в геймплее установлена ваниль (самая первая строчка), возможно, тоже влияет, помнится, в старых версиях в ванильном режиме тоже были свои личные сбои... И ещё уточняю, что ошибка происходит только один раз на свежераспакованном архиве после нескольких запусков.
А у меня снова воспроизвелась... Попробуйте повыходить с разными языками. Сбрасываются настройки громкости (что сразу выдаёт сброс даже без захода в меню), чувствительность мыши и настройки геймплея, плюс некоторые отдельные строчки в других местах. Да, добавлю, что у меня в геймплее установлена ваниль (самая первая строчка), возможно, тоже влияет, помнится, в старых версиях в ванильном режиме тоже были свои личные сбои... И ещё уточняю, что ошибка происходит только один раз на свежераспакованном архиве после нескольких запусков.
напиши конкретные шаги плз в таком формате:
шаг 1: берем свежераспакованный архив порта
шаг 2: кидаем в папку распакованным портом такой конфиг (здесь ссылка на твой конфиг)
шаг 3: запускаем порт
шаг 4: смотрим опции громкости
шаг 5: меняем язык на русский
шаг 6 ...
вот в таком подробном формате распиши шаги для воспроизведения. И убедись, что у тебя по этим шагам воспроизводится
Запускаю первый раз с отсутствующим ini.
Выставляю музыку на 15 и выхожу.
Потом вхожу и выхожу несколько раз.
На пятый раз (с учётом самого первого) музыка возвращается на 8.
Воспроизвёл несколько раз, удаляя ini, не касаясь других настроек, кроме громкости музыки. Не уверен, что воспроизведётся у Dasperal или у вас, так как получается, что сброс стабильно происходит просто после нескольких запусков, а такое бы уже давно заметили.
Сравнил файлы ini через hex после первого и второго запуска без изменения настроек во время второго, и замена действительно есть, что-то там подсчитывается... и этот подсчёт, видимо, и влияет у меня на сброс во время пятого запуска. Если защитить файл ini от записи после четвёртого выхода, то музыка будет 8 при каждом запуске несмотря на music_volume = 15 в ini.
Уточнил, прыгает значение параметра player_name. Вот его значение после первого запуска:
Скрытый текст:
player_name = "└фьшэшёЄЁрЄюЁ"
А вот после четвёртого (разбито на две строки, чтобы не было горизонтальной полосы на форуме):
В hex это 360 знаков против 27 (форум срезал длинные пустые промежутки, плюс некоторые байты просто не отражаются в текстовом виде). После же пятого запуска значение сводится к player_name = """ (дополнительные кавычки) и больше не меняется. Если же во время первых запусков в имени что-то прописать, даже те же кавычки, оно всё-равно начнёт потом скакать. Уточнение, после переименования параметра в текстовом редакторе перед config_version в hex появляются дополнительные байты, невидимые в тексте (до переименования их нет), если их удалить, то дальнейших изменений не будет. Переименование параметра в уже стабильном ini никаких дополнительных байт не влечёт.
Немного домыслов: учитывая увеличение длины имени с каждым запуском (до пятого включительно), есть подозрение, что где-то что-то переполняется, отсюда может происходить и сброс только некоторых параметров, информация о которых находится именно на затрагиваемом участке памяти, по крайней мере, в самом ini громкость идёт уже после имени игрока, и выше я уже писал, что сбрасывается не только громкость музыки, но и многие другие настройки, просто изменение громкости музыки очевидно сразу после запуска игры, поэтому и привёл именно её, собственно, находящийся вплотную к проблемному участку параметр libsamplerate_scale сбрасывается уже при втором запуске и так каждый запуск до пятого включительно.
Вот, собственно, и всё. Предоставил всю информацию, которую смог. Надеюсь, чем-то поможет. Временное решение: запустить игру 6 раз и только потом лезть в настройки.
Учту такую возможность, но в конкретно данном случае он особо и не нужен, динамика изменения имени и так показана, а куча пробелов сама по себе ни о чём не скажет, тут правильнее сам hex-код давать, который за этими пробелами стоит.
Суть следующая:
"player_name" инициализируется именем пользователя в винде (а именно содержимым переменных окружения "USER" или "USERNAME"). Винда выдаёт эти значения в OEM кодировке (windows-1251 для России) по этому их надо сконвертировать в UTF-8.
Вот только эта конвертация происходила при каждом запуске, а не только при чтении из переменных окружения. На английские символы это не влияет, а вот остальные в UTF-8 занимают больше места чем в OEM. В итоге получается растущая с каждым запуском строчка.
Когда строка достигает критической длинны, об неё ломается парсер конфига и не может прочитать оставшуюся часть секции конфига, соответственно она сбрасывается на дефолтные значения.
Дополнительные байты в начале текста после сохранения в редакторе - это BOM. Возникают они потому что редактор определяет кодировку как "UTF-8 с BOM". Порт такую кодировку читать не умеет, поэтому надо сохранять файл конфига в кодировке "UTF-8 без BOM"
Конвертацию я исправил. Правда в её результате всё равно получается какой-то мусор, а не UTF-8 строка соответствующая OEM строке. Да и выводить UTF-8 строки порт пока не умеет. Буду с этим разбираться при добавлении полноценной поддержки UTF-8.
Проблемы с длинными строками и BOM буду исправлять во время переписывания парсера конфига, это вторая по приоритету задача на следующую (6.5) версию.
Dasperal Может, не брать имя из системы? В принципе, для сингловиков имя пользователя вообще не критично, и там может стоять какой-нибудь дефолтный "doomer", а для мультиплеера, во-первых, половина участников при таком раскладе будет администраторами (на том или ином языке), а во-вторых, светить имя профиля системы публично далеко не для всех приемлемо.
Как ты узнал что проблема именно в рус имени пользователя? Black_Raven предоставил тебе конфиг?
Прочитал в сообщении Black_Raven что параметр player_name инициализируется каким-то мусором.
Посмотрел в своём конфиге и увидел там свой ник, хотя его туда никогда не писал.
Посмотрел в коде, что с этим параметром происходит. Увидел чтение из переменных окружения и конвертацию OEM в UTF-8 с кривым условием.
Английский язык в ASCII и UTF-8 кодируется одинаково и занимает 1 байт на символ. А вот русский в windos-1251 занимает 1 байт на символ, а в UTF-8 уже 2 байта. Отсюда и растущая строка. А мусор там потому что конвертация не праильно работает.
Может, не брать имя из системы? В принципе, для сингловиков имя пользователя вообще не критично, и там может стоять какой-нибудь дефолтный "doomer", а для мультиплеера, во-первых, половина участников при таком раскладе будет администраторами (на том или ином языке), а во-вторых, светить имя профиля системы публично далеко не для всех приемлемо.
Винда же спрашивает имя пользователя при создании учётки, неужели туда все осознанно пишут "Администратор"? Но наверное ты прав, убрал инициализацию и оставил "Player" по умолчанию.