Введение:
Вы когда-нибудь задумывались о том, как игра вообще устроена под капотом? Приходило ли вам в голову, что удар правой рукой и левой, с точки зрения игры, стрельба из разного оружия? Или может хотите узнать, как переключение кратности прицела может быть связано с использованием аптечки? Что ж, если заинтриговал, то прошу присаживаться. Сегодня я буду вашим проводником в мир нестандартных решений!
ЧАСТЬ 1: Швабры и потолок.
Начать хотелось бы со старой байки:
— Вася, у нас ядовитый газ потёк! В чем проблема?
— Не знаю, должно было все работать. Что–то в проекте менял?
— Немного, швабры вынес…
— Швабры потолок держали!
— Что??? Что, извините???
— Говорю, швабры потолок держали. Над ними цистерны с газом были. Очень тяжелые, пришлось в комнату снизу швабры напихать.— «Чужой код»
Данная цитата немного вырвана из контекста, но скоро вы поймете, какое отношение эта байка имеет к нашей теме. Видите ли, когда ты делаешь мод, ты ВСЕГДА работаешь с чужим кодом, так или иначе. У этого есть свои плюсы и свои минусы. Плюсы, разумеется, в том, что у тебя есть готовый фундамент. Не нужно писать с нуля самые базовые вещи, не нужно делать с нуля кучу моделей и анимаций, не нужно даже думать о том, как заставить все это работать. Все уже придумали за тебя. Минус же заключается в том, что за тебя все придумали не для твоих нужд, а для своих. Иными словами, фундамент пригоден для того, чтобы построить на нем обычную двухэтажку, а не для того, чтобы строить на нем частную виллу с подземным гаражом и бункером.
Вот тут-то начинается самое интересное. Наша задача не просто построить то, для чего фундамент не предназначался, а еще и сделать так, чтоб всё не развалилось от дуновения ветерка, да еще чтоб и комиссия потом, которая придет принимать наше строение, думала, что все в порядке и вообще всё так и задумано.
Возьмем для примера мод Kung-Fu Evolution на Max Payne 2. Задача у нас следующая: научить героя драться. Допустим, нам повезло, и все необходимые анимации у нас уже есть. Дело за «малым»: добавить их в игру и заставить персонажа их воспроизводить. Но как? У нас нет исходников движка, нет возможности добавить какие-то новые кнопки и функции, да и вообще, нет даже возможности делать «контакт» тушки игрока с вражеской — опасным.
Здесь-то на помощь и приходит СМЕКАЛОЧКА. В игре есть огнестрельное оружие, оно стреляет снарядами. Снаряды наносят урон, а значит нам надо заставить игру «думать», что мы «стреляем», когда деремся! И вот уже при ударе игрока ногой, из ноги вылетает «пуля», которая и наносит врагу урон. Только вот ведь незадача: пуля летит далеко, а значит, что пинком можно убить врага хоть с километра и это нам НЕ подходит! Снова лезем в код игры и обнаруживаем, что снаряд можно «взрывать» по истечении определенного времени. Проблема решена! Мы делаем «взрывающуюся» пулю, которая взрывается быстрее, чем успевает улететь слишком далеко, и вот уже наш герой отважно бьет всех встречных ногой с разворота!
Да, может и звучит странно, но в оригинальной игре, Макс бьет врагов прикладом ТОЧНО ТАКИМ ЖЕ СПОСОБОМ! То есть с точки зрения игры между выстрелом из оружия и ударом нет совершенно никакой разницы.
Однако, одного удара МАЛО! Нажимать одну кнопку, чтобы делать один и тот же удар, это не так уж и весело! Нам нужны серии ударов! Но как? У одного оружия не может быть РАЗНЫХ анимаций стрельбы! Что ж, значит, разные удары будут разным оружием, а чтобы выбирать каждый удар в меню оружия игроку не приходилось, нам нужно менять оружие НАСИЛЬНО. В конец анимации удара прописываем принудительную замену оружия на другое, и вот уже по нажатию одной кнопки мыши, герой делает целую серию ударов! Следом мы вспоминаем, что в игре еще есть перезарядка оружия, есть кувырки, которые тоже можно бы заменить чем-то «эдаким», и на выходе получаем вот это:
Сейчас я все описал максимально упрощенно, упустил целую кучу деталей, но думаю, основная суть ясна. Мы заставляем игру делать что-то, для чего она не предназначена, при помощи того, что в ней есть изначально. Иными словами, мы используем швабры, чтобы держать потолок.
ЧАСТЬ 2: Мечта об идеальной игре.
— А правда, что все журналисты мечтают написать роман?
— Нет, — солгал я.— Сергей Довлатов «Компромисс»
Я думаю, у всех была мечта об «идеальной игре». Спросите любого геймера, и он вам с радостью расскажет, что вот будь у него возможность, он бы ТАКУЮ игру сделал, что Нил Дракманн выбросился бы в окно от зависти, Винс Зампелла ушел в долгий запой, а Хидео Кодзима сказал, что уходит из игровой индустрии, поскольку лучшая игра на планете Земля уже создана.
Только вот, к сожалению или к счастью, такая возможность есть далеко не у каждого. Кто-то пробивается в индустрию с самых низов, чтобы однажды, возможно, стать новым Кори Барлогом, кто-то делает свою инди-игру по ночам после работы и надеется, что его проект не затеряется в тонне игр из стима, кто-то понимает, что в геймдеве ему делать нечего и решает сфокусироваться на критике игр всех вышеперечисленных, а кто-то уходит в моддинг.
Тут вы можете спросить: «Это что же? Все моддеры — это неудавшиеся игроделы?». И я отвечу: «Нет, потому что некоторые из них работают в геймдеве». Но это вовсе не значит, что мир делится исключительно на тех, кто попал в геймдев и неудачников, ведь «идеальная игра» — не обязательно новая игра! Очень часто люди хотят просто улучшить свою любимую игру, в конце концов, что может быть лучше, чем любимая игра, которая стала еще красочнее, разнообразнее и увлекательнее? К тому же, в процессе ковыряния любимой игры можно узнать о ней много всего интересного. Вот например, вы знали, что в Max Payne 2 урон от пули и её бронебойность — два разных понятия? Ладно, спрошу иначе, вы вообще знали, что во втором Максе Пейне есть механика брони? А она есть!
Казалось бы, враги в игре мрут как мухи, а, учитывая скорость перестрелок, ты в игре банально даже не заметишь, что попадание по бронежилету врага наносит ему меньше урона, чем попадание по рукам и ногам, и уж тем более не заметишь, что Беретта пробивает броню куда лучше, чем дробовик, но это было продумано и сделано. В такие моменты начинаешь еще больше ценить труд разработчиков, которые в кранчах нашли время, чтобы уделить этому внимание и не поскупились на мелочь, которую 99% игроков скорее всего даже не заметят.
Однако, используется эта фича игрой далеко не на полную катушку, а ведь стоит поиграться с параметрами, и начинаются чудеса! К примеру, поставим Беретте «BulletPenetration» на «1», а Дезерт Иглу на «0.15», и вот у нас уже парадоксальная, но реалистичная ситуация. Калибр 9мм пробивает броню куда охотнее, чем 0.50AE, в результате чего по «бронированным» врагам становится выгоднее стрелять из Беретты, чем из тяжелого Дигла. Мы всего заменой пары параметров уже изменили баланс и сделали игру более реалистичной, а я еще даже не про самые интересные особенности игры рассказал.
Еще немного изучив внутренности игры, можно выяснить, что, с её точки зрения, выпущенные игроком пули, отстрелянные гильзы и пустые магазины оружия — одно и тоже, т. е. снаряды. Падают такие «снаряды» благодаря параметру «GravityMultiplier». И к пулям этот параметр тоже можно применить…
А еще падающие пустые магазины, это, конечно, хорошо, но они неподвижны, словно их прикрутили к полу, увы. А вот подбираемое оружие обладает честной физикой… Что если отстрелянные магазины сделать «подбираемым объектом», только без возможности его поднять? И вот уже мы имеем пустые магазины, ведущие себя, согласно всем законам физики. В игре 2003 года выпуска!
К тому же, в отличии от обычных магазинов, количество «физических» будет неограниченным, и они по достижении лимита никуда не исчезнут.
ЧАСТЬ 3: Ладно, что еще я умею?
А я ещё и вышивать могу. и на машинке. тоже.— Кот Матроскин «Простоквашино»
Так что же еще можно сделать с любимой игрой? На самом деле почти что угодно, было бы желание и прямые руки, растущие из плеч. В ролике Невероятные конверсии Max Payne 2 уже приводили примеры, что можно сделать при наличии желания и свободного времени. Я же просто приведу еще несколько примеров того, как можно использовать на свою пользу то, что дала игра.
Santego Special Unit и камера.
Начнем с самого элементарного: вид от 1-го лица в моде Santego Special Unit. Да, на самом деле, это всё еще вид от 3-его лица, где изменили позицию камеры относительно игрока и подредактировали анимации, чтобы с новой камерой все смотрелось более-менее адекватно.
The Punisher-WarZone: CaseBox 01 и прицел с аптечкой.
Теперь задачка посложнее. Как-то раз при разработке The Punisher-WarZone: CaseBox 01 у меня отпала надобность в кнопке «обезболивающее», здоровье у игрока восстанавливалось автоматически, и нужда в аптечках пропала сама собой. Захотелось использовать освободившуюся кнопку для прицела с плеча. И действительно, по нажатию кнопки, включить приближение камеры очень просто. Вопрос остается один: как заставить камеру вернуться в исходное состояние на повторное нажатие?
Я не могу назначить на одно и тоже действие разные команды — в игре это просто так не работает. Но в какой-то момент меня осенило! Я могу назначить разные команды при попытке подобрать объект (оружие, коробку патронов и т. д.).
Если совсем коротко, то у подбираемого объекта есть три набора команд:
1 — когда мы подбираем объект в первый раз;
2 — когда мы просто подбираем объект;
3 — когда мы его НЕ можем подобрать.
Зависит текущий набор команд от количества патронов к оружию, к которому привязан объект (если у нас максимум патронов к пистолету, то мы не можем подобрать коробку патронов к пистолету, если патронов меньше максимума, то можем).
В результате теперь использование аптечки создает невидимый подбираемый объект, который привязан к неиспользуемому типу патронов. Если патронов у нас нет, то приближение сбрасывается, а если их максимум, то количество патронов обнуляется и запускается «таймер» с небольшой задержкой (ЭТО ВАЖНО), который включит приближение камеры. Таким образом, сначала происходит «сброс» камеры, а потом ее приближение.
Absent Grave и мирные зомби.
А помните мод Absent Grave? Герой выживает на арене, отбиваясь от кровожадных зомби… Только вот есть один нюанс. Зомби совершенно не кровожадные, скажу больше, они даже не хотят вредить нашему герою и вообще в этой ситуации ЖЕРТВЫ! Как так? Сейчас будем разбираться.
Дело в том, что AI в игре не умеет применять ближний бой. Он этому банально не научен. Поэтому автору Absent Grave, как и любому, кто хочет добавить в игру «ближних» врагов, приходится идти на хитрости. Помните, в начале мы разбирали пример с «пулей» для удара? Так вот. В таких модах игрок ВСЕГДА выпускает из себя «пули», которые взрываются рядом с ним, нанося окружающим маленький урон (меньше 1% здоровья). Анимация получения такого урона заменена на анимацию удара в ближнем бою, а AI врагов дана команда бежать на игрока. Иными словами, враги просто бегут на игрока и «атакуют» его, получая от него урон. Вот так история о суровом выживании среди агрессивной живой мертвечины превращается в историю о социопате, который вообще сам первый начал.
Транспорт, которого нет.
Я думаю, что любой, кто играл в Max Payne 2, наверняка вспомнит, что несколько раз за игру мы видели сцену, когда откуда-то выезжает фургон чистильщиков, и из него вылезают враги.
Так вот, а если я скажу вам, что никакого транспорта в игре на самом деле нет?
— Но как? — спросит любой игравший в игру. — Мы же лично его видели!
На самом деле все до гениального просто. Следите за руками:
Да, фургончик мало того, что для игры функционально ничем не отличается от взрывающейся бочки или пустой коробки, так еще и является частью карты! Кстати, танк из мода 7th Serpent: Crossfire сделан похожим образом. Он не «транспорт» (которого в игре, напоминаю, нет) и даже не вражеский NPC. С точки зрения игры, это просто часть уровня.
ЭПИЛОГ
На самом деле, все это лишь малая часть того, до чего доходило моддинг-комьюнити в желании сделать на движке что-то нетипичное. Да и не было тут цели пересказать всё (это попросту невозможно). Просто хотелось показать, к каким нестандартным решениям можно прийти в условиях ограниченного инструментария. Да и поделиться тем, что игры порою сделаны куда более глубокими, чем может показаться на первый взгляд. А на этом сегодня всё. Спасибо всем, кто дочитал этот текст до конца.
Автор: AntiEvil
Оригинал: Max Payne 2 изнутри или записки мододела.