KRIGSSVIN
930 постов
Карма: 53
#21 14 марта 2008 в 11:53
Вот-вот! А тут он используется как распознавалка, сексед плеер или не сексед (инопланИтянЕн).&nbsp; ???<br />Какой звук играть - должен определять сервер, никаких сексед и прочего быть не должно.&nbsp; 8)
VorteX
341 постов
Карма: 60
#22 14 марта 2008 в 13:59
я не очень понимаю, почему такой запар :) движок Quake 2 по сравнению с квейк 1 славится прекешем ресурсов &quot;на лету&quot;, так что при получении клиентом месседжа на проигрывание звука в определенном месте, делайте единовременный прекеш для всех звуков нужного пола и на лету в функции-обработчике SVC_ месседжа меняйте ссылку звука на нужную&nbsp; 8)
Dan
126 постов
Карма: 3
#23 14 марта 2008 в 14:14
ндо, у моего друга тоже есть проблема со звуком (НЕ ИЗ-ЗА ИГРЫ). Реверс колонок, причём без разницы, колонки, наушники или ещё какаянить хрень, вобщем никак исправить не может, а с реверсом стерео играть сами понимаете, сложно. Так вот, есть ли в игре команда реверса?
Дядя Миша
39 постов
Карма: 0
#24 14 марта 2008 в 16:10
При попытке зайти в свойства Video новая бетка вылетает с сами знаете чем.<br />И еще - при проигрывании cin файлов в самом низу, толщиной в один пиксель строка с какой-то галиматьей. Я не могу отделаться от впечатления, что q2xp где-то вылезает за границы массива.
Barnes
1979 постов
Карма: 153
#25 14 марта 2008 в 16:15
а старый конфиг ты стер?)))))
Какой богатый внутренний мир! Дай-ка посмотрю.....
Barnes
1979 постов
Карма: 153
#26 14 марта 2008 в 17:49
Dan пускай колонки местами поменяет
Какой богатый внутренний мир! Дай-ка посмотрю.....
willow
570 постов
Карма: 56
#27 14 марта 2008 в 18:28
[quote author=VorteX]<br />я не очень понимаю, почему такой запар :) движок Quake 2 по сравнению с квейк 1 славится прекешем ресурсов &quot;на лету&quot;, так что при получении клиентом месседжа на проигрывание звука в определенном месте, делайте единовременный прекеш для всех звуков нужного пола и на лету в функции-обработчике SVC_ месседжа меняйте ссылку звука на нужную&nbsp; 8)<br />[/quote]<br />Хм, ну как бы тебе объяснить чтобы покороче.. Звук полностью переписан. У нас есть понятие кэширование звука, а есть понятие проигрывание буфера. У буфера нет имени, только дескриптор. Да, конечно, кэшируется на лету - без проблем, но штука в том что движок требует проиграть буфер, который уже зарегистрирован! И это правильно, звуковой движок не должно волновать, что за звук должен быть под данным именем. Я подразумеваю чёткое соответствие имени звука и имени файла, иначе всё очень плохо заканчивается. Нельзя встраивать игровую логику в низшие подсистемы, это усложняет код и тормозит его за счёт &quot;специальных&quot; случаев. Логика поднимается обратно на вышележащие уровни и это обязано давать сбои. Когда, к примеру, сервер не инициализирован, а при этом требуется проверить &quot;половую принадлежность&quot; сущности зарегистрированной на сервере... Ну давайте ещё и рисование приладим сюда-же, а чё, мы же джедаи! Никаких имён файлов в сетевых пакетах быть не должно, только дескрипторы! Дескриптор типа int компактен и предсказуем в отличие от строки символов. С одним дескриптором должен быть связан один буфер - я думаю это тоже понятно.<br /><br />[quote author=Dan]<br />ндо, у моего друга тоже есть проблема со звуком (НЕ ИЗ-ЗА ИГРЫ). Реверс колонок, причём без разницы, колонки, наушники или ещё какаянить хрень, вобщем никак исправить не может, а с реверсом стерео играть сами понимаете, сложно. Так вот, есть ли в игре команда реверса?<br />[/quote]<br />Ничем подобным Q2XP не занимается и заниматься не будет. Это задача драйвера к звуковухе, обычным приложениям не стоит даже думать о таких настройках. Если приключился реверс колонок - это проблема клиента, и уж очень фантастический случай когда требуется. Если сделать подобную опцию в программе, то её чаще будут по ошибке включать, чем по надобности. Реверс каналов проблема системная и решать её нужно системно, а не в отдельно взятых приложениях. Если проблема аппаратная, то и решение нужно аппаратное - переходник, меняющий каналы местами.
VorteX
341 постов
Карма: 60
#28 15 марта 2008 в 01:10
Willow пишет:<br />
И это правильно, звуковой движок не должно волновать, что за звук должен быть под данным именем
Совершенно верно, звуковой движок работает со своими дескрипторами и не знает что ему файл-систем подсунет, но зачем заставлять сервер, принципиально отдельную систему (с ваших слов) работать с дескрипторами звукового движка?<br /><br />
Никаких имён файлов в сетевых пакетах быть не должно, только дескрипторы
Как это подвязывать? Сервер, особенно dedicated вообще не обязан звуки кешировать - они ему не нужны, ну и откуда дескрипторы тогда брать в сервер-клиент пакетах?<br /><br />
сервер не инициализирован, а при этом требуется проверить &quot;половую принадлежность&quot; сущности зарегистрированной на сервере...
Нельзя встраивать игровую логику в низшие подсистемы, это усложняет код и тормозит его за счёт &quot;специальных&quot; случаев
Да вы не в том месте проверяете половую принадлежность. :) Проверять её надо на этапе получения SVC_-сообщения, они кастуются только во время игры когда сервер в клиента пакетом швыряет. Вы же как я понял проверяете её в любом звуковом процессе (то есть в звуках менюшки и пр.)
willow
570 постов
Карма: 56
#29 15 марта 2008 в 17:41
но зачем заставлять сервер, принципиально отдельную систему (с ваших слов) работать с дескрипторами звукового движка?
. Хм, нет же, у клиента таблица сответствий прекэшированных звуков (дескрипторов OpenAL) и идентификаторов самого сервера. Звуки кэшируются тоже по запросу сервера. Идентификаторы сервера плотно завязаны на содержимом самих игровых карт.<br /><br />
Как это подвязывать? Сервер, особенно dedicated вообще не обязан звуки кешировать - они ему не нужны, ну и откуда дескрипторы тогда брать в сервер-клиент пакетах?
<br />Хм, давай лучше без фантазий, посмотрим как всё есть на самом деле )))) Обрати внимание на количество чрезвычайно необходимых хаков &gt;:(<br /><br />/*<br />==================<br />CL_ParseStartSoundPacket<br />==================<br />*/<br />void CL_ParseStartSoundPacket(void)<br />{<br /> vec3_t pos_v;<br /> float *pos;<br /> int channel, ent;<br /> int sound_num;<br /> float volume;<br /> float attenuation;<br /> unsigned ofs;<br /> int flags = MSG_ReadByte(&amp;net_message);<br /><br /> sound_num = MSG_ReadByte(&amp;net_message);<br /> volume =<br /> (flags &amp; SND_VOLUME) ? MSG_ReadByte(&amp;net_message) /<br /> 255.0 : DEFAULT_SOUND_PACKET_VOLUME;<br /> attenuation =<br /> (flags &amp; SND_ATTENUATION) ? MSG_ReadByte(&amp;net_message) /<br /> 64.0 : DEFAULT_SOUND_PACKET_ATTENUATION;<br /> ofs = (flags &amp; SND_OFFSET) ? MSG_ReadByte(&amp;net_message) : 0;<br /><br /> if (flags &amp; SND_ENT) { // entity reletive<br /> channel = MSG_ReadShort(&amp;net_message);<br /> ent = channel &gt;&gt; 3;<br /> if (ent &gt; MAX_EDICTS)<br /> Com_Error(ERR_DROP, &quot;CL_ParseStartSoundPacket: ent = %i&quot;, ent);<br /><br /> channel &amp;= 7;<br /> } else {<br /> ent = 0;<br /> channel = 0;<br /> }<br /><br /> if (flags &amp; SND_POS) { // positioned in space<br /> MSG_ReadPos(&amp;net_message, pos_v);<br /><br /> pos = pos_v;<br /> } else // use entity number<br /> pos = NULL;<br /><br /> // willow: F**K THE HACK&#39;S!!! trying to cheat ugly id&#39;s map design and <br /> // stuff<br /> if (!attenuation<br /> &amp;&amp; (cl.<br /> sound_precache_hacks[sound_num] &amp; sound_precache_hacks_FLAT2D))<br /> {<br /> S_StartLocalSound(cl.sound_precache[sound_num]);<br /> return;<br /> }<br /><br /> if (cl.<br /> sound_precache_hacks[sound_num] &amp;<br /> sound_precache_hacks_AUTOFIX_gain)<br /> volume = cl.sound_precache_gain[sound_num];<br /><br /> if (cl.<br /> sound_precache_hacks[sound_num] &amp;<br /> sound_precache_hacks_AUTOFIX_rolloff_factor)<br /> attenuation = cl.sound_precache_rolloff_factor[sound_num];<br /><br /> // willow: simple as it should be ^_^<br /> S_StartSound(pos, ent, channel, cl.sound_precache[sound_num], volume,<br /> attenuation, ofs);<br />}<br /><br /><br />
Да вы не в том месте проверяете половую принадлежность. :) Проверять её надо на этапе получения SVC_-сообщения, они кастуются только во время игры когда сервер в клиента пакетом швыряет. Вы же как я понял проверяете её в любом звуковом процессе (то есть в звуках менюшки и пр.)
<br /><br />Не совсем так. Когда играется звук, поздняк метаться, если дескриптор действителен то ему соответсвует только один звук. Выбор есть только на этапе кэширования. Хотелось бы всё свести к однозначным сообщениям, как сейчас. Я же даже не совсем понимаю где проблема... возможно, cl.sound_precache требуется обновить при смене игрока или ещё какой кэш.. Как я понимаю, ID software просто упустили из виду что нужно по-новой проходить CL_RegisterSounds() и всё с этим связанное.<br /><br />Рестарт звуковой системы явно намекает на то, что это необходимо:<br /><br />/*<br />=================<br />CL_Snd_Restart_f<br /><br />Restart the sound subsystem so it can pick up<br />new parameters and flush all sounds<br />=================<br />*/<br />void CL_Snd_Restart_f(void)<br />{<br /> S_Restart();<br /><br /> CL_RegisterSounds();<br />}<br /><br />Т.е. как я подозреваю при смене игрока ещё нужно дополнительно звонить CL_RegisterSounds() и проблема решится, ибо это даже не кэширование звуков, а в первую очередь обновление кэшей соответсвий дескрипторов и идентификаторов сервера плюс таблицы хаков для серверных сообщений<br />