HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- FireBullets и рикошеты (https://hlfx.ru/forum/showthread.php?threadid=4496)
Отправлено Ku2zoff 18-11-2014 в 19:06:
FireBullets и рикошеты
Занялся механизмом рикошета при стрельбе. Естественно, подглядел образцы кода где можно, даже на бумажке алгоритм расписал. Когда выстреливается только одна пуля, она прекрасно рикошетит в цикле сколько нужно раз, хоть десять. Ну это чисто для теста, по задумке, после одного-двух рикошетов, кинетическая энергия пули падает, и цикл обрывается. Проблема в том, что когда рикошетят несколько пуль (см. дробовик), то отрикошетившие пули попадают в одну точку. Где ошибся, не знаю, вроде бы всё перепробовал. По смыслу, каждая новая пуля должна иметь свою собственную точку попадания после рикошета, а на практике, все последующие берут конечную точку попадания от самой первой. Может подскажете чего, товарищи форумчане?
Отправлено XaeroX 18-11-2014 в 19:15:
Ну ты хоть алгоритм подробно распиши, что ли... У нас тут не битва экстрасенсов.
Ты точно правильно берёшь исходное направление пули? Это не просто v_forward игрока?
__________________
Отправлено Ku2zoff 18-11-2014 в 20:21:
Цитата:
XaeroX писал:
Ты точно правильно берёшь исходное направление пули? Это не просто v_forward игрока?
Завтра копну в этом направлении, спс.
Цитата:
XaeroX писал:
Ну ты хоть алгоритм подробно распиши, что ли...
Я ещё сам попытаюсь разобраться, если не выйдет, кину кусок кода в тему.
Добавлено 19-11-2014 в 02:21:
Алгоритм такой:
Когда сила пули (iDamage) больше 10, то:
1. Если угол попадания трассы больше 60 градусов, то прерываем цикл.
2. Если энтитя, в которую мы попали, не брашевая, то прерываем цикл.
3. Проводим новую трассу из точки попадания под углом в столько же градусов, каков угол старой трассы относительно стены (короче, зеркально отражаем выстрел).
4. "Стреляем" в новом направлении, и делим iDamage пополам.
После первого рикошета всё повторятся до тех пор, пока угол попадания не станет больше 60 градусов, или iDamage не станет меньше 10.
Отправлено GioHAUS0n 19-11-2014 в 09:09:
Цитата:
Ku2zoff писал:
Ну это чисто для теста, по задумке, после одного-двух рикошетов, кинетическая энергия пули падает, и цикл обрывается.
Откуда взял эту информуху?_? Мне помниться, что она может вернуться обратно стрелку с первого рикошета:
https://en.wikipedia.org/wiki/Ricochet
Отправлено Ku2zoff 19-11-2014 в 09:54:
Цитата:
GioHAUS0n писал:
Мне помниться, что она может вернуться обратно стрелку с первого рикошета:
То-то меня бесит такое поведение при альтернативной атаке гаусса. Не, ну я могу такую гадость сделать, чтоб в 15 процентах случаев пулька рикошетила обратно, но это будет неимоверно бесить игроков. Я не спец в баллистике, но думаю, что рикошет обратно - это редкость.
Вроде справился с задачей, всё работает как надо. Перепилил код, добавил прострелы:
C++ Source Code:
1 | // ============================ |
2 | // ku2zoff: рикошет и прострелы |
3 | // ============================ |
5 | if (iDamage > 12) // все операции проводим только если урон больше 12 |
7 | float m_flNormal = -DotProduct(tr.vecPlaneNormal, vecDir); // угол попадания |
9 | if ((m_flNormal < 0.5) && (pEntity->pev->solid == SOLID_BSP)) // если угол меньше 60 градусов и энтитя - браш |
11 | Vector vecSrc_ric; // задаём новый исходный вектор |
13 | // переопределяем векторы согласно новым углам |
14 | vecDir = 2.0 * tr.vecPlaneNormal * m_flNormal + vecDir; |
15 | vecSrc_ric = tr.vecEndPos + vecDir * 8; |
16 | vecEnd = vecSrc_ric + vecDir * flDistance; |
18 | UTIL_Ricochet(vecSrc_ric, 1.0); // рисуем эффект рикошета |
20 | // проводим вторую трассу и ставим вторую декаль |
21 | UTIL_TraceLine(vecSrc_ric, vecEnd, dont_ignore_monsters, NULL, &tr); |
22 | DecalGunshot(&tr, iBulletType); |
24 | // уменьшаем урон в два раза, и наносим его |
26 | pEntity = CBaseEntity::Instance(tr.pHit); |
27 | pEntity->TraceAttack(pevAttacker, iDamage, vecDir, &tr, DMG_BULLET); |
29 | goto choose_think; // возвращемся к выбору |
31 | else // если угол больше 60 градусов или энтитя - не браш |
33 | // проводим вторую трассу в стену, на iDamage/10 юнитов |
34 | UTIL_TraceLine(tr.vecEndPos + vecDir * (iDamage/10), vecEnd, dont_ignore_monsters, ENT(pev), &tr); |
36 | // если трасса вышла из стены (стена тоньше, чем iDamage/10 юнитов) |
39 | // если трасса вышла, трейсим назад, и рисуем вторую декаль с обратной стороны стены |
40 | UTIL_TraceLine(tr.vecEndPos, vecSrc, dont_ignore_monsters, ENT(pev), &tr); |
41 | DecalGunshot(&tr, iBulletType); |
43 | // трейсим из точки попадания второй декальки вперёд, рисуем третью декаль |
44 | UTIL_TraceLine(tr.vecEndPos, vecEnd, dont_ignore_monsters, ENT(pev), &tr); |
45 | DecalGunshot(&tr, iBulletType); |
47 | // уменьшаем урон в два раза, и наносим его |
49 | pEntity = CBaseEntity::Instance(tr.pHit); |
50 | pEntity->TraceAttack(pevAttacker, iDamage, vecDir, &tr, DMG_BULLET); |
52 | goto choose_think; // возвращемся к выбору |
В зависимости от того, как мы попали и во что попали, выбирается действие: рикошет или прострел. Действие выполняется, урон уменьшается в два раза. Возвращаемся к выбору действия. Там вычисляем угол и солид энтити согласно новым данным, которые остались после предыдущего действия, и цикл повторяется. Цикл прерывается, если урон становится меньше 12, или когда пуля попадает под углом больше 60 градусов в непростреливаемую стенку.
Отправлено XaeroX 19-11-2014 в 10:35:
Цитата:
Ku2zoff писал:
Я не спец в баллистике, но думаю, что рикошет обратно - это редкость.
Стрелять, не задумываясь о рикошете, как мы делаем в играх - в реале это редкость. 
И я не совсем понимаю, для чего они тебе нужны. Весь мир стремится к упрощению механики игры, чтобы игрок мог чётко просчитывать свои действия (в этом смысл киберспорта). А ты вводишь прострелы (ну ок, их ещё можно просчитать в том же КС) и рикошеты, которые в реале, вообще говоря, непредсказуемы из-за микрорельефа. Какой следующий шаг? Рикошет с учётом карты нормалей? 
__________________
Отправлено tolerance 19-11-2014 в 11:03:
Урон по идеи не должен тупо делиться на два, а уменьшаться в зависимости от толщины простреливаемого объекта. А то получится, что игрок будет наносить одинаковый урон, простреливая стену, и простреливая какую-нибудь брашевую периллу в 1 юнит толщиной.
А рикошеты — это очень интересно. В ARMA хорошо реализовали:
https://www.youtube.com/watch?v=2mZNpurQj4U
На сколько я понял по коду, у тебя каждая пуля будет рикошетить если попадает под условие градуса? По-моему это перебор, и стоит добавить random (5-10% пуль будут рикошетить).
Отправлено ~ X ~ 19-11-2014 в 11:34:
Цитата:
XaeroX писал:
Какой следующий шаг? Рикошет с учётом карты нормалей?
А что, кто-то делал без нормалей?!! За это включаю убиватор! 
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
Отправлено XaeroX 19-11-2014 в 12:05:
Цитата:
~ X ~ писал:
А что, кто-то делал без нормалей?!! За это включаю убиватор!
Полагаю,что 99,9% рикошетов сделаны по обычному tr.vecPlaneNormal. А я про попиксельные карты нормалей говорю, которые для бампа используются. 
__________________
Отправлено Ku2zoff 19-11-2014 в 12:22:
Цитата:
tolerance писал:
По-моему это перебор, и стоит добавить random
Это ж пробный код. Конечно добавлю рандом. И углы рандомизирую.
Цитата:
XaeroX писал:
Весь мир стремится к упрощению механики игры,
Вот так и родилось Press E to win. А вообще, я конечно уменьшу процент рикошетов. Ещё и зависимость от материалов введу. Вон, с бронёй и повреждением от разных видов видов урона очень интересно получилось. Там в зависимости от чего хочешь защититься в первую очередь, такую броню и юзаешь(ну шлем, жилет или щитки на руки-ноги, или всё вместе). Тоже пока в стадии разработки.
Добавлено 19-11-2014 в 18:22:
Меня сейчас больше беспокоит правильность работы этого кода. Вроде как норм пока, боюсь как бы неприятный баг какой не словить. Особенно меня смущает использование goto. Другого варианта пока не нашёл.
Отправлено Cybermax 19-11-2014 в 12:58:
Цитата:
Ku2zoff писал:
Вот так и родилось Press E to win.
Если стремиться к реализму и хардкорности то надо делать: один выстрел - один фраг. Потому что в реале даже от одной пули 9мм можно убить особенно в голову.__________________
ㅤ
Отправлено Ku2zoff 19-11-2014 в 13:03:
Цитата:
Cybermax писал:
один выстрел - один фраг.
Day of Defeat же.
Отправлено Cybermax 19-11-2014 в 13:16:
Цитата:
Ku2zoff писал:
Day of Defeat же.
Скорее как в Insurgency. Типы патронов: бронебойные, трассирующие, экспансивные.__________________
ㅤ
Отправлено XaeroX 19-11-2014 в 13:20:
Цитата:
Ku2zoff писал:
Вот так и родилось Press E to win.
Нет, так родились Quake1, Quake2 и Quake3. Именно поэтому в них играли, играют и будут играть ещё десятки лет, вот увидите.
А "Press E to win" - это выкидыш. 
__________________
Отправлено ~ X ~ 19-11-2014 в 13:37:
Цитата:
Cybermax писал:
один выстрел - один фраг
skill 3 в XDM же
(тогда грунты реально опасные)__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
Отправлено Cybermax 19-11-2014 в 14:06:
Цитата:
XaeroX писал:
Нет, так родились Quake1, Quake2 и Quake3. Именно поэтому в них играли, играют и будут играть ещё десятки лет, вот увидите.
А "Press E to win" - это выкидыш.
И до сих пор делают "клоны " квейков на которых умудряются зарабатывать.
Цитата:
~ X ~ писал:
skill 3 в XDM же (тогда грунты реально опасные)
Надо будет проверить, хотя xdm и реализм не укладываются у меня в голове 
__________________
ㅤ
Отправлено PLut 19-11-2014 в 14:50:
Cybermax А клон сочненький, я бы даже раскошелился на распродаже.
А по теме: рикошеты крутая штука, хотелось бы увидеть видосик как оно выглядит, однако вряд ли бы в бдеф стал бы добавлять из-за того, что слишком мудренная это система. Я о том, что всякие разбросы, присядки, точность - это всё не для игры с быстрым темпом.
__________________
Base Defense on Steam, ModDB
Отправлено Ku2zoff 19-11-2014 в 19:30:
Цитата:
PLut писал:
это всё не для игры с быстрым темпом.
Вот я и думаю об этом. Хочется совместить аккуратность CS и драйв TFC в одном моде, при этом сохранив играбельность любимых режимов, которые будут в игре (assassination, escape, demolition и assault). А ещё охота всё это припудрить аутентичными оружиями времён второй мировой и дикого запада. Трудная задача. Но самое трудное - это написать годных ботов для одиночной кампании а-ля UT.
Отправлено Cybermax 19-11-2014 в 22:55:
Цитата:
Ku2zoff писал:
второй мировой и дикого запада.
Сочетание странное, тебе не кажется?__________________
ㅤ
Отправлено XaeroX 20-11-2014 в 00:11:
Цитата:
Cybermax писал:
Сочетание странное, тебе не кажется?
Просто у него есть на компе DoD и Wanted 
__________________
Отправлено Ku2zoff 20-11-2014 в 03:41:
Цитата:
XaeroX писал:
Просто у него есть на компе DoD и Wanted

Цитата:
Cybermax писал:
Сочетание странное, тебе не кажется?
Стараюсь подбирать так, чтобы набор выглядел единым целым. Да и дикозападных оружий мало: револьвер, винчестер рычажный, и, пока ещё не добавленый, буффало ган.
Отправлено Cybermax 20-11-2014 в 06:24:
Лучше бы мод про первую мировую или вторую мировую сделал с отечественным оружием типа Мосин-наган и СКС. Нет надо американщину пихать, очень оригинально
__________________
ㅤ
Отправлено Ku2zoff 20-11-2014 в 07:16:
Цитата:
Cybermax писал:
с отечественным оружием типа Мосин-наган и СКС.
Фапанье хомячков на АК, ВСС и СВД уже достало, в каждую поцреотичную игру их пихают. Не исключение и трёхлинейка Мосина. Так что не. Хотя, так-то можно её в кач-ве снайперки заюзать, только поликов в модели шибко дохрена.
Цитата:
Cybermax писал:
Нет надо американщину пихать
Какая разница? Лишь бы в контексте мода красиво смотрелось. У меня нет цели делать оружие с характеристиками реальных прототипов. У меня есть цель собрать удобный набор для каждого класса в команде. Чтобы этот набор лаконично смотрелся и хорошо стрелял.
Отправлено tolerance 20-11-2014 в 08:22:
Можно еще в мод добавить самодельный дробовик:

Отправлено XaeroX 20-11-2014 в 09:52:
Цитата:
Cybermax писал:
Лучше бы мод про первую мировую или вторую мировую сделал
Имхо, лучше бы про третью, и дорабатывать по ходу действия.
Сейчас, например, уже можно сделать кампанию про Донбасс и стелс-миссию про Симферополь.__________________
Отправлено Cybermax 20-11-2014 в 10:28:
Ну у меня есть концепция и про современный шутер аля их батла. Видимо пора на кикстартер идти краудфандингом заниматься. Сейчас без этого никуда.
__________________
ㅤ
Отправлено XaeroX 20-11-2014 в 10:35:
Цитата:
Cybermax писал:
Видимо пора на кикстартер идти краудфандингом заниматься.
Во-во, давай. Потом напишешь для нас туториал, как это делается. 
__________________
Отправлено ONeiLL 20-11-2014 в 12:04:
Цитата:
Ku2zoff писал:
Меня сейчас больше беспокоит правильность работы этого кода. Вроде как норм пока, боюсь как бы неприятный баг какой не словить.
Я делал точно так же прострел. Потом взял АВП и поставил игроков в ряд. Выстрелил и пуля убила каждого второго....) Такой код не всегда правильно находит точку вылета пули из препятствия.
Отправлено ~ X ~ 21-11-2014 в 08:32:
Цитата:
Ku2zoff писал:
играбельность любимых режимов, которые будут в игре (assassination, escape, demolition и assault).
Да, а карты тебе, наверное, Дядя Миша рисовать будет 
Цитата:
Ku2zoff писал:
А ещё охота всё это припудрить аутентичными оружиями времён второй мировой и дикого запада.
У каждого свой вкус. 
Цитата:
Cybermax писал:
xdm и реализм не укладываются у меня в голове
Почему?__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
Отправлено Ku2zoff 21-11-2014 в 14:04:
Цитата:
~ X ~ писал:
Да, а карты тебе, наверное, Дядя Миша рисовать будет
Пару сам нарисую, попрошу пару исходников на КСМе, чтобы энтити расставить. Пару готовых рипентом переделаю.
Отправлено Cybermax 21-11-2014 в 15:28:
Цитата:
~ X ~ писал:
Почему?
Я отказываюсь отвечать на этот вопрос. Скорее всего после него последует какая-то провакация в мой адрес в виде обвинения меня в упоротости и картинки на пол экрана и кучи смайлов а оно мне надо? Нет не надо.__________________
ㅤ
Отправлено GioHAUS0n 21-11-2014 в 16:07:
Цитата:
Cybermax писал:
Потому что в реале даже от одной пули 9мм можно убить особенно в голову.
А это забыл?
http://cs620025.vk.me/v620025081/165cc/IVxkL5bmwPM.jpg
Отправлено Cybermax 22-11-2014 в 01:06:
GioHAUS0n скажи у тебя есть справка из пнд гласящая о том что ты нормальный?
__________________
ㅤ
Отправлено GioHAUS0n 22-11-2014 в 04:48:
Цитата:
Cybermax писал:
GioHAUS0n скажи у тебя есть справка из пнд гласящая о том что ты нормальный?
- Есть в РесВК и РВК. Может вам сначала провериться, там?
- Это самая безвредная картинка. Вас тошнило или пропал аппетит на рагу?
- Не всегда хотел быть патологоанатомом, но думал об этом. Чтобы быть рядом с реальностью, а не иллюзией или манией величия.
Добавлено 22-11-2014 в 13:48:
- *Приблизительные* последствия в реальности от Gauss-Gun или Lightning-Gun:
http://cs617831.vk.me/v617831887/fdf8/ZCVeJhDtQRo.jpg
Отправлено Ku2zoff 24-11-2014 в 04:49:
Вот вам ещё одна версия. Эта мне больше нравится. Внимание! Не использует типы пуль, только урон. Типы пуль можно добавить, через них регулировать всякие там "шансы" рикошета, и индивидуальную пробивную силу.
C++ Source Code:
1 | Vector CBaseEntity::FireBulletsPlayer(ULONG cShots, Vector vecSrc, Vector vecDirShooting, Vector vecSpread, float flDistance, int iBulletType, int iTracerFreq, int iDamage, entvars_t *pevAttacker, int shared_rand) |
18 | gMultiDamage.type = DMG_BULLET | DMG_NEVERGIB; |
20 | for (ULONG iShot = 1; iShot <= cShots; iShot++) |
22 | x = UTIL_SharedRandomFloat( shared_rand + iShot, -0.5, 0.5 ) + UTIL_SharedRandomFloat( shared_rand + ( 1 + iShot ) , -0.5, 0.5 ); |
23 | y = UTIL_SharedRandomFloat( shared_rand + ( 2 + iShot ), -0.5, 0.5 ) + UTIL_SharedRandomFloat( shared_rand + ( 3 + iShot ), -0.5, 0.5 ); |
25 | vecDir = vecDirShooting + x * vecSpread.x * gpGlobals->v_right + y * vecSpread.y * gpGlobals->v_up; |
26 | vecEnd = vecSrc + vecDir * flDistance; |
28 | pentIgnore = ENT(pev); |
30 | UTIL_TraceLine(vecSrc, vecEnd, dont_ignore_monsters, pentIgnore, &tr); |
32 | int m_iDamageSaved = iDamage / 10; |
34 | while (iDamage > m_iDamageSaved) |
36 | if (tr.flFraction != 1.0) |
38 | pEntity = CBaseEntity::Instance(tr.pHit); |
40 | pEntity->TraceAttack(pevAttacker, iDamage, vecDir, &tr, DMG_BULLET); |
41 | DecalGunshot(&tr, iBulletType); |
43 | float n = -DotProduct(tr.vecPlaneNormal, vecDir); |
45 | if ((pEntity->pev->solid == SOLID_BSP) && (n < 0.5)) |
47 | Vector dirRic = 2.0 * tr.vecPlaneNormal * n + vecDir; |
48 | Vector srcRic = tr.vecEndPos + dirRic * 8; |
49 | Vector endRic = srcRic + dirRic * flDistance; |
51 | UTIL_Ricochet(srcRic, 1.0); |
56 | iDamage *= (0.65 - n); |
58 | // ALERT(at_console, "Damage: %i\n", iDamage); |
64 | UTIL_TraceLine(srcRic, endRic, dont_ignore_monsters, pentIgnore, &tr); |
68 | Vector endPos = tr.vecEndPos; |
70 | UTIL_TraceLine(tr.vecEndPos + vecDir * 8, vecEnd, dont_ignore_monsters, pentIgnore, &tr); |
74 | UTIL_TraceLine(tr.vecEndPos, endPos, dont_ignore_monsters, pentIgnore, &tr); |
76 | float n = (tr.vecEndPos - endPos).Length(); |
81 | if (tr.flFraction != 1.0) |
82 | DecalGunshot(&tr, iBulletType); |
90 | UTIL_TraceLine(tr.vecEndPos, vecEnd, dont_ignore_monsters, pentIgnore, &tr); |
97 | UTIL_BubbleTrail(vecSrc, tr.vecEndPos, (flDistance * tr.flFraction) / 64.0); |
100 | ApplyMultiDamage(pev, pevAttacker); |
102 | return Vector( x * vecSpread.x, y * vecSpread.y, 0.0 ); |
Добавлено 24-11-2014 в 10:49:
Эта реализация, кстати, рикошетит правильно, как гаусс, а так же отнимает правильно урон, только один раз в случае с дробовиком, а не на каждую пульку, как было в предыдущей. Есть один недостаток: эффект рикошета рисуется, и стенка простреливается, когда урон меньше 1/10, но после рикошета и прострела в конце новой трассы не ставится декаль и не наносится урон. Но это легко поправить.
Отправлено ~ X ~ 24-11-2014 в 10:53:
Цитата:
Ku2zoff писал:
правильно, как гаусс
Не забываем, что в гауссе до сих пор официально не исправлена ошибка, которая вызывает self-headshot. 
Выглядит, вроде бы, неплохо, но кажется, будто чего-то не хватает... Почему-то у меня этот код раза в четыре длиннее... 
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
Отправлено Ku2zoff 24-11-2014 в 14:09:
Цитата:
~ X ~ писал:
но кажется, будто чего-то не хватает
Да вроде бы всё в норме. Кстати, вылет обнаружился. Уже исправлено. Но сюда не выложу. Кому надо, сами догадаются 
Цитата:
~ X ~ писал:
не исправлена ошибка, которая вызывает self-headshot.
а я как раз с ней столкнулся в процессе написания этого кода. Только вот уже не припомню, в каком случае она возникала. То ли при переназначении vecSrc после рикошета, то ли vecDir. Причём застрелиться можно было АБСОЛЮТНО ВСЕГДА, а не так как с гауссом, при выстреле под 90 градусов в глухую стенку.
Добавлено 24-11-2014 в 20:09:
Цитата:
~ X ~ писал:
Не забываем, что в гауссе до сих пор официально не исправлена ошибка
Опять всплыло, кстати. Беспорядочные какие-то рикошеты появились. То рикошетит в ту же точку, куда попало первый раз, то в игрока. А почему это возникает? Я заметил, что всегда проявляется в каком-то определённом месте на карте, при попадании в определённую стенку под определённым углом.
Отправлено ONeiLL 24-11-2014 в 18:30:
Проще это написать рекурсивно, а потом, при желании, переделать на стэк
Отправлено Ku2zoff 24-11-2014 в 20:26:
Ещё раз переписал, избавился от одной неприятной вещи, когда при простреле сам прострел не делался, а новая трасса попадала в первую точку попадания (всегда проявляется в каком-то определённом месте на карте, при попадании в определённую стенку под определённым углом), и получалось, что один выстрел наносил урона раз в 20-30 больше положенного. Избавился от селф-хедшота, правда рикошеты теперь не как у гаусса, а строго под 90 градусов от первоначальной трассы. Ну может оно и к лучшему, можно стрелять за угол 
Отправлено ~ X ~ 25-11-2014 в 12:38:
Цитата:
Ku2zoff писал:
Ещё раз переписал
я же говорил... 
Нипынимаю, что такого страшного в рикошетах? Вот передавать их и синхронизировать по сети - да...
Добавлено 25-11-2014 в 15:38:
Кстати, о нехватании. Для затравки: какой может быть рикошет от matGrass, matWood, matFlesh? как оно поведёт себя на картах с 3d sky? 
Вариантов массы 
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]