Welcome to U.A.C.
login / register
Status: Guest

РегистрацияРегистрация ВходВход
Архивы форума | iddqd.ru | wlf3d.ru
Light HTML | WAP 2.0 | i.wlf3d.ru
ПравилаПравила
PrBoom(-plus) и GLBoom(-plus) Пред.  1, 2, 3 ... 18, 19, 20
   Список разделов - Doom и его порты - PrBoom(-plus) и GLBoom(-plus)Ответить
АвторСообщение
Never_Again
Marine 1st class
Next rank: - UAC Gunner - after 10 points
70

Doom Rate: 2
Сообщение Отправлено: 08.01.10 21:13:21

Так и положено, как в ванили.
BND [B0S]
Marine 1st class
Next rank: - UAC Gunner - after 17 points
63

Doom Rate: 1.11
Сообщение Отправлено: 14.01.10 11:10:34

Так и не понял с чем связана данная бага. http://files.wyw.ru/wyw_file?id=4212672
Писал в prboom-plus 2.4.8.1. Iwad - doom2.wad
Heretic
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 3 points
1537

Doom Rate: 3.11
Сообщение Отправлено: 14.01.10 15:39:50

Alex-of-persia :
Так и не понял с чем связана данная бага.

Это обычный ванильный баг - Intercepts Overflow. При желании его эмуляция отключается в прбум+.
1 4 1
Never_Again
Marine 1st class
Next rank: - UAC Gunner - after 10 points
70

Doom Rate: 2
Сообщение Отправлено: 14.01.10 16:04:59

Поскольку статья, указанная Еретиком, на английском, вот перевод.
Этот баг можно перевести как "переполнение перехватов" . Колин Фиппс, один из програмистов prBoom'а, объясняет:


"Всепризрачный" Баг

<...>"Всепризрачный" баг - гораздо более странное (чем Archvile баг - N_A) и редкое событие в Думе. Если бы не демы, доказывающие его существование, он, вероятно, считался бы мифом, потому что очень немногие игроки сталкиваются с ним в практической игре - я, по крайней мере, никогда. Действительно, я знаю о существовании только двух дем, демонстрирующих этот баг, и это на них я основываю свой анализ.

Так в чем же состоит этот баг? Внезапно, без какой-либо очевидной причины, все вещи в игре становятся призраками. Все монстры и все игроки становятся бестелесными. Это в конечном итоге срывает любую попытку играть всерьёз, так что такое происшествие трудно просмотреть Smile. <...>

Техническая информация

Хорошо, а чем вызывается "всепризрачный" баг? По-правде говоря, причину довольно труднее объяснить, чем найти; так что я начну с объяснения, как действует cоответствующая секция движка, а завершу самим багом.

Одной из основных операций в движке Дума является способность следовать за линией, и находить все игровые объекты (вещи и линий), которые она пересекает. Это производится функцией p_maputl.c:P_PathTraverse. Она задается точкой начала и конечной точкой и использует блокмапу и некоторые геометрические расчеты, чтобы создать упорядоченный список всего, что преграждает эту линию между теми точками. Хотя эта функция применяется главным обраэом при прямолинейных выстрелах из оружия, она также используется, когда игрок "юзает" (т.е., когда игрок жмёт пробел, движок должен "щупать", есть ли или нет перед игроком двери или переключатели), а также для определения, как игроку скользить вдоль препятствий.

Список препятствий - "перехватов"(intercepts), как Doom их называет - хранится в таблице (array). С типичным для движка Дума качеством кода, это статическая таблица с фиксированным размером пределов в 128 перехватов (MAXINTERCEPTS). А проверка диапазона при вношении перехватов в эту таблицу не производится, что может вызвать переполнение таблицы, с различными неприятные последствиями.

"Но 128-и перехватов должно хватать на любой случай жизни", скажет тут иной читатель. "В конце концов, невозможно натолкнуться на более чем одну стену за один раз, невозможно нажать более чем одну кнопку за один раз, и не невозможно попасть в более чем одного монстра или стену одной пулей. Ведь сам смысл перехватов эаключается в том, что они препятствуют тому, что ты пытаешься сделать, и дальше дело не идёт. Конечно, существуют перехваты, которые не являются препятствиями - например, бонусы и трупы не преграждают путь выстрелам - но 128 перехватов это всё равно более чем высокий предел. В конце концов, doom2.exe шизеет гораздо более очевидным образом при всего лишь 64-ёх вещах или 16-и двусторонних линиях на экране одновременно."

Ну, 128-и должно хватать. Но, раскритиковав скверное осуществление проверки перехватов, пора пожаловаться на неудачный способ, которым используется этот алгоритм. Хотя большая часть кода, занимающегося перехватами, просто ищет первое "попадание", беда в том, что различные секции кода ищут различные типы попаданий. Выстрел может пересечь линию, которая по существу является приземлистой панелью переключателя, но P_PathTraverse не знает, что мы ищем - выключатель или удар; поэтому эта функция должна считать, что поиск может вестись и за тем, и за другим. И она действует соответственно пессимистическим образом: перечисляет каждый перехват между начальной и конечной точкой - независимо от того, что мы ищем только один конкретный - потому что программисты поленились найти способ научить её, что именно надо искать. Каждая секция движка, которая выэывает P_PathTraverse получает полный список перехватов и эатем читает этот список, пока не находит то единственное препятствие, которое её касается - и выбрасывает остальные результаты прочь. P_PathTraverse включает в себя следующий код быстрого завершения, но в действительности он никогда не используется:
      extern intercept_t      intercepts[MAXINTERCEPTS];
      extern intercept_t*     intercept_p;

Как только таблица перехватов переполняется, она портит указатель (pointer), используемый для хранения новых перехватов. Код начинает перезаписывать память. Неясно, порча ли intercept_p'а ведёт к "всепризрачному" багу непосредственно, или же этот баг является косвенным следствием последующего повреждения памяти. Чтобы ответить на этот вопрос определённо, вероятно, необходимо иметь возможность запускать оригинальный EXE из-под отладчика (debugger) ...


e6y поправит, если я какой-то технический термин перевёл неудачно, с русской терминологией програмистов я знаком слабо. Возможно, он также разъяснит смысл "кода быстрого завершения" ("some fast exit code" в вышеприведенной статье), что для меня, как не програмиста, загадка.

Статья была написана в 2003-ем, а в 2005-ом Grazza поставил на DW таблицу перечисляющую длинный ряд уровней и их дем, на которых были замечены различные баги, связанные с переполнениями. Одних intercepts_overflow'ов 17 штук. Славный список, только вот с советом по избежанию этого бага неувязка вышла. Какое имеет отношение linedef 0 к intercept overflow'у? Я осенью записал две демы на blacktowr.wad'е, где intercept overflow'ы происходят в довольно далёких от linedef 0'а местах.
BND [B0S]
Marine 1st class
Next rank: - UAC Gunner - after 17 points
63

Doom Rate: 1.11
Сообщение Отправлено: 23.01.10 17:52:32

Большое спасибо за разьяснение. Стал спать спокойнее.
Уж извините, что достаю, но если не трудно не расскажите ли ещё про одну ошибочку? Вроде бы всё идёт нормально и бац! Выскакивает сообщение вида "I_SignalHandler: Exiting on signal: signal 11". В гугле не забанен - искал, но не нашёл ничего кроме чейнджлога, в котором указано, что этот баг вызывал всего лишь торможение и был исправлен в версии 2.2.6.7. Причём встречается не так уж и редко.
Выкладываю дему, записанную на requiem'е. Писал в том же прбум+ 2.4.8.1. http://webfile.ru/4250487
Archi [B0S]
UAC General
Next rank: Unavailable after 0 points
6249

Doom Rate: 2.05
Сообщение Отправлено: 23.01.10 19:45:57

Alex-of-persia
Старнно. Ну ты прямо притягиваешь всякие ванильные фичобаги.
А вообще signal 11 у меня довольно часто всплывал когда я карты тестил в нем. Только вот причина обычно крылась в DEH(а может вообще в чем другом). Пусть гуру меня поправят.
1 1 2
entryway
-= DoomGod =-
3010

Doom Rate: 2.45
Сообщение Отправлено: 23.01.10 21:14:42

Alex-of-persia
Я правильно понимаю, ты мне тут описываешь баги версии трехлетней давности? Это бессмысленно.


По поводу "signal 11" - это обычный краш. Когда он случается, следует (для WinXP):

1. Скачать версию с суффиксом "debug"
2. При необходимости выполнить "drwtsn32 -i"
3. Запустить отладочную версию прбума с комстрокой -devparm
4. Воспроизвести падение
5. Выслать мне лог доктора Ватсона, который как правило находится здесь: C:\Documents and Settings\All Users\Application Data\Microsoft\Dr Watson\drwtsn32.log и последовательность действий, которая приводит к крашу.
3 1 1
Shadowman
UAC General
Next rank: Unavailable after 0 points
5607

Doom Rate: 2.49
Сообщение Отправлено: 22.02.10 16:19:20

Странный баг с signal 11 - в прбум+ 2.5.0.5
Если выставить глубину цвета в 32 бита, то при попытке запустить отдельный уровень из ком строки (типа skill 4 -warp 01) прбум вылетает с этой ошибкой. Это не зависит от вада, даже дум2.вад также вылетает. Но просто загрузить пвад можно.
Зато при глубине цвета в 16 бит бага нет.
Конечно, особой разнице в софте прбума для 16-бит или 32-бит цветов не заметно, но все ж интересно, с чем связана данная бага?
1 6 2
entryway
-= DoomGod =-
3010

Doom Rate: 2.45
Сообщение Отправлено: 28.02.10 02:54:02

Shadowman :
Странный баг с signal 11 - в прбум+ 2.5.0.5

2.5.0.5 не последняя.

Shadowman :
Конечно, особой разнице в софте прбума для 16-бит или 32-бит цветов не заметно

Разницы нет вообще, если не включена билинейная фильтрация. Думаю у тебя не включена.
3 1 1
Phosgene
- UAC Gunner -
Next rank: = UAC Gunner = after 29 points
81

Doom Rate: 1.8
Сообщение Отправлено: 06.06.10 21:38:20

Только сейчас дошло что мошно ускорять игру. Добовляет новые ощущения, особенно понравилось как пулемет быстро стреляет. Еще понравился ускоренный арахнотрон - становится чуть ли не самым опасным монстром!
entryway
-= DoomGod =-
3010

Doom Rate: 2.45
Сообщение Отправлено: 18.06.10 12:11:54

Phosgene :
Только сейчас дошло что мошно ускорять игру. Добовляет новые ощущения, особенно понравилось как пулемет быстро стреляет. Еще понравился ускоренный арахнотрон - становится чуть ли не самым опасным монстром!

Вообще-то возможность изменения скорости игры сделана не для того, чтоб с ней играть Smile Замедление по большей части для записи TAS демок, ускорение - для перемотки при просмотре.

Ко всему прочему, в последних версиях было добавлено:

1. Поддержка новых здумных нод (-X) и расширенных дипбспшных, так что теперь уровень не ограничен максимальным размером нод, плюс в случае с ZDBSP 1.15 в софтварном режиме практически исключена возможность появления слаймтрейлов.

2. GL рендер теперь понимает гздумное описание 6-ти стороннего скайбокса в GLDEFS.

3. Добавлена возможность динамической смены музыки через райзеновский MUSINFO лумп. Последние svn билды (g)zdoom тоже поддерживают этот синтаксис.

4. Добавлена поддержка детальных текстур. Для любой текстуры/флата через GLDEFS лумп можно определить свой детаил. Синтаксис тут.

Как задаются и работают детайлы, скайбокс и смена музыки можно посмотреть в details_test.wad который включен в бета версию.
3 1 1
TermiT
Recruit
Next rank: Marine after 8 points
32

Doom Rate: 2
Сообщение Отправлено: 25.08.10 09:24:51

entryway
а есть в планах добавить в prboom+ поддержку 3д моделей?
Archi [B0S]
UAC General
Next rank: Unavailable after 0 points
6249

Doom Rate: 2.05
Сообщение Отправлено: 25.08.10 09:49:12

entryway :
Добавлена возможность динамической смены музыки через райзеновский MUSINFO лумп. Последние svn билды (g)zdoom тоже поддерживают этот синтаксис.

Эх, раньше надо было его заметить... Но все равно спасибо.
1 1 2
Lainos [B0S]
- Captain -
Next rank: = Captain = after 79 points
1671

Doom Rate: 1.56
Сообщение Отправлено: 17.12.10 19:24:12

Куда дели тему Мифы и легенды Дум2... Ну да ладно. Сегодня на мап16 Дум2 встретил импа-призрака. Выглядит как обычный имп, атакует ходит... Но ходит сквозь стены. И пули тоже сквозь него летят. Surprised Играл в prBoom+ на комплевел 4.
6
Slavius [B0S]
Chief Petty Officer
Next rank: Chief Petty Officer after 60 points
930

Doom Rate: 1.54
Сообщение Отправлено: 17.12.10 20:22:10

Lainos [B0S]
Про такое вроде рассказывали уже. Он вроде получается если труп импа раздавленный дверью, оживит арч
3
Lainos [B0S]
- Captain -
Next rank: = Captain = after 79 points
1671

Doom Rate: 1.56
Сообщение Отправлено: 17.12.10 20:41:38

Ага. Просто я вживую не видел ни разу. Very Happy
6
Memfis
- Warrant Officer -
Next rank: = Warrant Officer = after 58 points
1102

Doom Rate: 2.23
Сообщение Отправлено: 24.12.10 20:03:22

В связи с 30cs1952 появился вопрос: можно ли как-нибудь в кооперативных демках переключаться с одного плеера на другого? Вроде же это довольно просто реализовать, нет?
1 1 1
Archi [B0S]
UAC General
Next rank: Unavailable after 0 points
6249

Doom Rate: 2.05
Сообщение Отправлено: 24.12.10 20:04:08

Memfis :
В связи с 30cs1952 появился вопрос: можно ли как-нибудь в кооперативных демках переключаться с одного плеера на другого? Вроде же это довольно просто реализовать, нет?

F12.
1 1 2
Memfis
- Warrant Officer -
Next rank: = Warrant Officer = after 58 points
1102

Doom Rate: 2.23
Сообщение Отправлено: 24.12.10 20:13:37

О, спасибо. Весёлое кино получается Smile
1 1 1
Страница 20 из 20 Пред.  1, 2, 3 ... 18, 19, 20
   Список разделов - Doom и его порты - PrBoom(-plus) и GLBoom(-plus)

Раздача наград