Скачать демки к статье

CPM

ENG

Последняя на момент добавления в дефраг версия кода физики промода была взята у его создателей и представляет модифицированную оригинальную физику vq3.
Поэтому посмотрим те моменты, в которых cpm физика отличается от vq3.
Надо сказать, что, благодаря изменениям, игра стала намного динамичнее и требует от игрока больших точности и реакции.

Стрейф.
Сам по себе разгон в воздухе не отличается от vq3.
Разгон же на земле заметно усилен путём увеличению тяги в полтора раза.
Для бега, ходьбы и приседания имеем соответственно 39, 20 и 10 u/s2.
Поэтому при cj можно набрать наземную скорость до 497ups (реально получается около 490ups).
Скорость поворота на земле для этого должна быть больше, чем в vq3.

Наиболее заметное отличие в cpm стрейфах заключается в том, что направление скорости можно сильно поворачивать - это так называемый cpm'ный эаконтрол.
Выполняется при зажатии одной из кнопок передвижения (следовательно, о таких удобных формах халфбита и инвертированных стрейфов, как в vq3, можно забыть):
  вперёд или назад - вектор скорости стремится совпасть с направлением нажатия; надёжный метод, т.к. только очень резкий поворот приведёт к потере скорости, однако при нём скорость практически не набирается
  кнопки стрейфов - плавно поворачиваем ими вектор скорости; хорошее направление взгляда для данного способа совпадает с направлением вектора скорости, что на газ-хаде соответствует границе между зоной разгона и торможения - тогда скорость будет сохраняться; если же поворачивать быстрее, то поворот станет резче, но будут потери в скорости; при более медленном повороте скорость будет набираться.
В общем случае чем больше скорость, тем медленнее поворот.
09-01_q3dm17_cpmaircontrol.dm_68 - пример обоих стилей эаконтрола в cpm.

Возможность поворачивать скорость оказывает влияние на логику разгона в cpm, ведь появляется новый персонаж - скорость по горизонтали.
То есть, если в vq3 нас интересовали только скорости по осям, то в cpm имеет смысл посмотреть при каких условиях лучше набирается результирующая скорость по XY, т.к. её можно впоследствии развернуть в нужном направлении, не потеряв.
На скорости от пары тысяч ups легко заметить, что лучше всего горизонтальная скорость набирается на том краю снэпзоны, что ближе к направлению тяги; а, например, до середины зоны скорость может не набираться, а то и теряться.
Легко в этом убедиться, застряв в полу с \noclip и пострейфив по кругу.
Такая же тенденция имеет место и с меньшими скоростями, только не так очевидна, т.к. скорость набирается всегда.
Таким образом, оптимальный разгон в cpm осуществляется по краям снэпзон, а чтобы этого достичь, направление скорости корректируется с помощью эаконтрола кнопкой "вперёд".
Например, перед сменой стрейфов кратковременно отпускается кнопка стрейфа или после смены стрейфов она зажимается не сразу, или, при достижении края текущей зоны, переходим к краю следующей, также отпуская стрейф.
Всё нацелено на то, чтобы попасть в нужную часть снэпзоны.
Практически комбинаций использования тех или иных снэпзон на определённой карте может быть очень много, и поиск наилучшей дорожки напоминает игру в шахматы:)

Небольшой пример техники использования краёв зон можно посмотреть в последнем триксе из демки 09-01_q3dm17_cpmaircontrol.dm_68 - использованы 4 снэпзоны.
09-02_pornstar-dhoni_14.952.dm_68 - весь путь построен на снэппинге.

Конечно, хотелось бы знать относительную эффективность краёв тех или иных зон для набора скорости.
Не мудрствуя лукаво, я просто взял и померил набор за фрейм для двух скоростей:

xy efficiency

и с haste:
xy efficiency with haste


Помимо обычных методов акселерации в cpm есть ещё один, выполняемый при эаконтроле кнопкой вперёд.
Для этого надо очень медленно поворачивать скорость от направления по оси до 45 градусов к ней.
На небольших скоростях эффективность такого разгона ниже, чем у обычных методов, а на больших вполне сравнима.
Препятствием к использованию такой техники является то, что сложно найти карту, где бы это можно было использовать.



Другое заметное отличие cpm от vq3 заключается в физике слика (льда): тут она является наземным состоянием с отключённым трением.
Т.е. тяга 39 u/s2 (с haste 50) и расчёт акселерации по обычной формуле - в результате имеем самые настоящие русские горки!
При такой большой тяге снэппинг не оказывает значительного влияния, поэтому направление для наилучшей акселерации будет точно таким, как показывает газ-хад.
Разгоняться можно любым стилем: фулбитом, халфбитом, инвертированными стрейфами.


Очевидно, другие состояния, использующие физику слика, тоже драматически отличаются от таких в vq3.


Прыжки из телепорта.
За 150ms адского cpm'ного слика можно, не моргнув глазом, набрать 730ups (теоретический максимум 760).
Это для случая, когда телепорт помещает игрока сразу на землю; обычно же выходы немного приподняты - тогда можно успеть набрать 600-670ups.
В этом триксе, как никогда, решает ювелирный тайминг. Для tj с максимальным временем нахождения на земле оптимальный поворот для разгона будет примерно 80 градусов.
09-03_q3dm17_tjs.dm_68 - несколько теледжампов.


Groundboost (gb)
Другая ситуация, включающая физику слика, - получение игроком отдачи от оружия; включается на 50-200ms в зависимости её величины.
Ещё более интересная вещь происходит при сочетании этого явления с состоянием skim'а от падения: если при его получении слик включён, то он сохранится на всё время, пока работает skim, т.е. 250ms.
В общем, можно нехило посликать:)
В vq3 трикс тоже работает, но как такового буста там не получишь, разве что можно немного проскользить.
В cpm же смело набираем упсы.

Gb с плазмой (pgb).
Сам по себе отстрел плазмой включает слик только на 50ms, а использование такого маленького времени затруднительно для человека.
Сочетание же со skim'ом вполне годится.
Выполняется pgb примерно так: незадолго до приземления (обычно после прыжка) подстреливаем себя плазмой, затем 250ms ведём себя, как на слике.
Желательно заранее прицелиться для разгона, т.к. после отстрела времени на перестроение, прямо скажем, маловато.
09-04_q3dm17_pgb_over_gap.dm_68 - наиболее распространённая техника pgb - выстрелом плазмины в пол; разгон двумя кнопками на слике позволяет стрейфиться сразу после gb, хотя доспустИм и вариант разгона одной кнопкой стрейфа.
Вертикальный угол, под которым производится выстрел, - это скорее вопрос удобства, т.к. его тайминг в любом случае является наиболее сложным элементом трикса.
При углах в диапазоне 61'-71', чтобы gb получился, надо выстрелить во временном промежутке 5 игровых тактов (40ms) до земли, а для углов от 72 до 87 это 4 фрейма.
При таких gb часто ловится ob, причём выход скорости от него заметно больше обычного sticky ob, т.к. при касании пола скорость не гасится трением.
09-05_q3dm6_3wall_pgb_styles.dm_68 - разные варианты выполнения pgb от стены: разгон кнопкой стрейфа, двумя кнопками, задом.
Тайминг выстрела в случае pgb от стены несколько демократичнее - 6 фреймов.

Gb с рокетом (rgb).
Отдачи рокета достаточно, чтобы включить режим слика на 200ms.
Значит, можно незамедлительно посликать, а можно, отстрелившись не более, чем за 200ms до приземления, посликать потом.
09-06_q3dm6_5rgb_styles.dm_68 - оба варианта с различными способами разгона; отстрелы от стен делаются примерно горизонтально для максимальной утилизации отдачи.
Также можно делать rgb от пола: 09-07_q3dm17_rgb_over_gap.dm_68
Вариант исполнения такого gb после прыжка практически непригоден к использованию, ведь для получения skim'а необходимо упасть со скоростью меньше -200ups по вертикали; в данном случае выбрана высота падения побольше.

Gb со всем остальным.
Понятно, что можно делать gb с любым оружием, имеющим сплеш, например bfg, дефраговским шафтом или гранатами.
Например: 09-08_q3dm17_nadegb.dm_68
В случае командных триксов сгодится вообще любая пушка, т.к. отдача будет: 09-09_q3dm17_gauntgb.dm_68
Также можно сочетать gb с другими триксами, например изловчиться и сделать pj в конце pgb: 09-10_q3dm6_ya-gb-pj-rg.dm_68
Или успеть переключиться на рокет и сделать rj; или gj после pgb или rgb.
В общем, на что фантазии хватит.



Отличие по оружию в cpm - время переключения = 24ms и увеличенная до 1000ups скорость полёта ракеты.
Также увеличена на 20% горизонтальная отдача рокета при отстрелах от стен и других игроков; 600ups против 500 в vq3.
Взятие оружия, хелсов и рулезов в cpm заметно проще, т.к. их физическая высота увеличена до 58u. Поэтому можно, к примеру, взять лежащую на земле пушку, находясь в верхней части прыжка, чего нельзя сделать в vq3, где высота энтити 40u.
Акселерация торможения в воздухе для cpm в 2.5 раза больше акселерации разгона. Благодаря этому при лазании по стенам ошибки в углах менее критичны, а для bfg и отстрелов оружием вниз это даже позволяет использовать более оптимальные углы.



Рампинг.
Под этим понятием в cpm обычно подразумевают именно преобразование горизонтальной скорости в вертикальную на наклонных поверхностях - рампах.
При прыжке на рампе в cpm часть скорости, направленная перпендикулярно ей, перераспределяется в горизонтальную и вертикальную составляющие в зависимости от угла наклонной.
Прыгать можно на рампах с углом наклона до 45 градусов.
С более отвесными наклонными проявляется другая интересная особенность физики cpm - огромная тяга кнопок стрейфа, позволяющая разгоняться и тормозить с ускорением 17u/s2. С их помощью можно свободно залезать на такие наклонные.



Даблджампы (dj).
Эта фича позаимствована из предыдущих версий игры Quake и заключается в том, что если совершить два прыжка с задержкой меньше 400ms, то второй прыжок будет иметь начальную вертикальную скорость 364ups против 264ups для обычного прыжка и высоту 91.158401u.
09-11_q3dm17_dj2rg.dm_68 - пример dj.
Можно вместо второго прыжка сделать rj или pj - они будут выше обычных: 09-12_q3dm7_ceil_dj+rj.dm_68
Если сделать даблджамп на рампе, то можно набрать внушительную высоту:
09-13_q3dm17_rampdj2rg.dm_68
09-14_q3dm17_rampdj2scull.dm_68
Также даблджампы делают на лестницах: 09-15_q3dm6_b2rdj.dm_68
с помощью телепорта: 09-03_q3dm17_tjs.dm_68
уменьшив время между прыжками при помощи оружия: 09-16_q3dm6_dj_w_rl.dm_68
ударившись об потолок; если потолок находится недостаточно низко, но и не слишком высоко, плюс рядом стенка, то можно уменьшить высоту прыжка, прижавшись к ней (приём работает и в vq3): 09-12_q3dm7_ceil_dj+rj.dm_68



Рампбуст.
В cpm после dj на некоторое время включается модифицированный код заступания на поверхности выше игрока.
Как результат - заступания не происходит, а игрок поднимается над поверхностью с сохранением скорости.
Сделано это, чтобы можно было бодро взлетать по лестницам после dj.
Но в случае, если ступеньки наклонные, меняется горизонтальная скорость: 09-17_escape2_1500rampboost.dm_68
Влияние на скорость зависит от текущей скорости и угла наклона ступеньки; можно её и терять.
В данном примере каждая ступенька добавляла от 100ups в начале до 10 в конце.
Встречается такой трикс нечасто, но даже если вы нашли одну единственную наклонную, на которую можно заступить после dj, а не целую лестницу из ступенек, это уже может стать решающим аргументом в борьбе за скорость.



Овербаунсы.
В общем, можно сказать, что ob в cpm не отличаются от vq3, отличия привносят другие изменённые параметры физики.
Например, за счёт увеличения наземной тяги звобы отбрасывают под другими углами, и максимально высокий звоб будет ниже, чем в vq3.
С помощью эаконтрола легко получить 0ups для ob: просто упираемся в стену кнопкой вперёд.
09-18_q3dm6_ob_w_wall.dm_68 - даже непростые случаи даются довольно легко.
Изменение физики, касающееся увеличения тяги торможения в 2.5 раза, позволяет легко делать midair ob при помощи +strafe:
09-19_q3dm17_midair_zwob.dm_68 - при правильно подобранной тяге скорость снижается до 0ups и не растёт в другую сторону.
Способ ловли нестандартных ob путём падения с высоты 166 и более u работает в cpm и для прыжка:
09-20_q3dm6_afterfall_obs.dm_68 - падать с 0ups необязательно для получения эффекта, если прыжок совершается сразу по приземлении.
09-11_q3dm17_dj2rg.dm_68 - тут тоже использован такой способ ловли ob.

Особенно в cpm актуальны ob на наклонных при рампджампах для случая, если их не сделать, т.е. нажать прыжок заранее.
Для обычного рампджампа наклонная сработает как плоская поверхность, т.е. не даст набора высоты и не изменит горизонтальную скорость.
В случае dj на рампе скорость по XY также сохранится, а вертикальная будет равна текущей+364ups.
Оба случая обзывают lowjump.
Явление это рендомное и обычно приводит к срезкам на карте или попросту необходимости начинать забег заново, поэтому хорошим тоном будет предотвращать
его при маппинге с помощью текстуры common/noob.