|
SHEPPARD |
|
POPOV |
|
KENDALL |
|
O'NEALLY |
|
|
|
|
|
GAMES (часть 3): Билли! Нам нужна карта!
Генри Шеппард (www.HenrySheppard.ru / www.openmusic.ru)
О пользе Инквизиции
====
Во все времена творческие идеи получали явную и неявную поддержку со стороны деспотов, власть придержащих и простых офисных тиранов, что помогало развить потенциал многих идей до невиданных высот. Нет смысла напоминать про то, как банальное побивание мамонтов камнями быстро трансформировалось в катапульты, затем в пушки и, наконец, в межконтинентальные баллистические ракеты, для чего потребовался всего лишь легкий толчок со стороны честолюбия вождей, князей и королей. Это была простая и очевидная эволюция - типичная одноходовая логическая цепочка.
Однако кроме примитивных апгрейдов "в лоб" существуют и другие, более изощренные методы поощрения. Например какую-то жалкую 1000 лет назад во францисканском монастыре под Честером монахи неспешно ставили опыты в архитектуре, пытаясь отойти от арочных схем. Увеличение прочности построек в романском стиле было увлекательным занятием, причем задача состояла в максимальном упрощении конструкции. В то благословенное мирное время мелких муждоусобойных войн ученые прелаты на чистейшем латинском языке высоколобо спорили о постулате бедности Христа: францисканцы, альбигойцы, минориты и прочие сектанты доказывали, что Иисус был исключительно беден и проповедовал удаленность от мирской власти. Круги, близкие к Папе, не разделяли эту позицию, подкрепляя свои доводы такими общечеловеческими ценностями, как инквизиционные процессы и стравливание местных феодалов с монастырями. Логично, что быстро растущее благосостояние Папы и возможность повелевать королями стоили того...
Повальное увлечение простотой и скромностью не могло остаться незамеченным даже в архитектуре. Приехавший папский посланник быстро навел порядок во францисканском монастыре: организовал судебный процесс и за пару дней "раскопал" рассадник ереси, но слегка перестарался - под обвинение попало больше половины монахов монастыря (кто за любовные похождения, кто за увлечение Роджером Бэконом, а кто просто так, ибо пьяной рожей не вышел). Но британские и гибернийские (нынешняя Ирландия) подопечные Католической Церкви были неблагодарными и слегка диковатыми людьми с ужасным латинским произношением - они просто взяли просвещенного посланника и с англосаксонским изяществом вмуровали его в стену, благо до Рима и Авиньона - месяц пути, если не больше. Затем предки Агаты Кристи забрали труп какого-то бродяги из богадельни, обезобразили его до неузнаваемости, одели в рясу посланника и перевезли через пролив. В Нормандии как раз разыгрывалась очередная семейная ссора среди Капетингов, потомков Карла Великого, так что швырнуть труп посреди дороги и отписать в Рим, что посланника постигло несчастье в виде французских разбойников/солдат/наемников (нужное подчеркнуть), было проще пареной репы, не говоря уже об удовольствии оскорбить нежный слух Папы-француза отвратительной латинской грамматикой.
В результате монастырь получил передышку в пару месяцев, что позволило замаскировать свои примитивистские опыты вычурными декорациями в готическом стиле. Следующий посланник не нашел ничего предосудительного с точки зрения богатства и власти Папы: головная церковь прямо-таки сияла приверженностью к стяжательству и внешней помпезности.
Сия поучительная история только на первый взгляд кажется грязной и похабной шуткой про пьяных братьев во Христе. На самом деле это один из первых подробно задокументированных экспериментов по практической оптимизации процедур визуализации: под нагромождением быстро сляпанных готических фигур скрывался до неприличия простой деревянный крепеж "крест-накрест" - никаких арок с косой кладкой, колоннадных укреплений или портальных прослоек. Папский соглядатай хотел увидеть буйство скульптур? Да пусть хоть подавится своими горгульями. В летописи указывалось, что через полтора года часть наскоро прилепленных фигур осыпалась, поэтому монахи полностью разобрали готические аляповатости - монастырь до сих пор является местом паломничества студентов-архитекторов. Что еще раз подтверждает, что Простота - Самая Богоугодная Вещь на Свете. Аминь.
================
В настоящее время многие хотели бы иметь возможность вмуровывать в стены контролирующие органы, но общественная мораль шагнула далеко вперед, или, точнее, назад, расслабившись и потерявши четкость решений и скорость действий. Прокуроры, адвокаты, суды... это так утомительно! В лучшем случае можно рассчитывать на немногословные услуги наемных убийц, которые тоже редко выполняют заказ в тот же день.
Но не в этом дело. А дело в том, что как ни усложняется все на свете - рано или поздно вся шелуха сойдет. Эллочка-людоедка вполне органично вписалась в московскую культуру раннего декаданса без 25тысячного словарного запаса интеллигентного студента или инженера. Опытный сержант или petty-officer обходится в среднем 12ю словами, из которых 5 - матерные. А чудо современного инжениринга - компьютер - вообще знает только 0 и 1! Вильгельм Оккамский в наше время почувствовал бы себя круглым эрудированным идиотом.
================
Современные компьютерные игры тоже подчиняются всеобщему закону лени и примитивизма. Я уже рассказывал в прошлых номерах журнала о том, что изображение на экране монитора является обманом, иллюзией и ловкостью кода. Любой среднестатистический шутер имеет на экране от силы 30% вживую рассчитанных трехмерных деталей. Остальные 70% - те самые горгульи, добавляющие лоска и пышности, но никак не относящиеся к основной конструкции. Ими можно легко пожертвовать без потери прочности и качества.
Я также упоминал, что любой шутер состоит из нескольких важных частей: математический движок, карты, модели и звук. Математический движок мы уже рассматривали, звук "тянет" максимум на факультативное занятие, а вот карты и модели - суть и соль любого шутера. Очевидно, что солью злоупотреблять не стоит. Модели действительно являются узким местом разработки, но не самым главным по сравнению с картами. Дело в том, что игрок лицезреет трехмерных монстров или антуражные объекты изредка, только когда добирается до них. При этом модели практически не поддаются оптимизации - сколько полигонов они имеют, столько же полигонов будет отрисовано на экране. Существуют способы оптимизации "на лету" (например монстр при 90 fps может иметь 3-5 тыс полигонов, а при 40 их количество может сокращаться вдвое), но подобные расчеты сами по себе требуют недюжинных усилий процессора и незаурядного ума программиста - вдруг игре взбредет соптимизировать вершину, отмечающую углубление глазницы? Премиленькое личико вашего суперуродливого монстра автоматически превратится в плоскую гладильную доску. Можно заранее подготовить разные уровни детализации моделей на все случаи жизни, но это тот же самый обман, к которому я вас пламенно призываю.
Итак, отринем модели всеми фибрами нашей души. Займемся картами. Это самая важная часть игры хотя бы из-за того, что игрок ВСЕГДА находится на карте. Куда бы игрок не повернулся, куда бы не направился - он все время видит стены, пол или землю и объекты карты. Архитектура и антураж обеспечивают примерно 70-80% всей атмосферы игры. Фанаты файтингов легко припомнят очень неплохую игру на PC - Oni, которая вполне могла бы стать шедевром, если бы не примитивнейшие низкодетализированные уровни. А весьма посредственный Devastation (шутер на основе движка Unreal) при помощи грамотных локаций с фотореалистичным подходом к деталям оказался на высоте. Все удачные игры на базе лицензии Quake2/3 сильно выигрывали как раз за счет отличных карт. А раз все дело в карте, значит...
Билли! Нам нужна карта!
====
Уподобимся славному мальчику Джиму и благоразумно пропустим это требование мимо уха. Хотите карту? Черта-с-два! Люди вообще много чего обещанного недополучают, но почему-то не жалуются. Что колбаса с соей, что экологически чистые помидоры, подозрительно не стухающие за три недели - все это реальность. Отсюда следует, что наша карта тоже будет суровой реальностью, а не произведением искусства. А чтобы никто не заметил подвоха, мы ее всячески заретушируем и обвесим искуственными красотами.
Существует несколько относительно честных способов обмана:
1. Комплексное текстурирование
2. Игра светом и тенью
3. Скриптовые элементы
Первые два способа введения в заблуждение являются стандартными оптимизаторскими методами. Очевидно, что современный компьютер при всех своих возможностях не в состоянии вывести реалистичную картинку даже со скоростью кадр в секунду - все красоты современных компьютерных игр являются различного рода фейками.
Пожалуй начнем... Предварительно напомню, что раз мы выбрали движок Quake2 в качестве базы игры, то все нижеследующие описания будут касаться очень популярного редактора QERadiant 1.4. Более поздние версии не имеют окна Surface parameters, очень важного для наших фейков. Дополнительно обрадую тех читателей, которые откопают старые номера и все же попытаются сообразить собственную коммерческую игру: QERadiant месяц назад был подписан под лицензию GPL! А это означает, что теперь его можно использовать бесплатно и для коммерческих проектов.
Мы уже научились использовать в движке TGA-текстуры, поэтому нам достаточно включить в Preferences редактора галочку Hi-res textures, а сами текстуры скопировать в папку baseq2/textures/xxx, где xxx = названию вашей директории для ваших TGA.
Метод Тома Сойера
====
Комплексное текстурирование отлично известно тем, кто начинал строить карты еще для шутеров класса Quake1 или даже программировал скролл-аркады. Суть этого метода заключается в том, что человеческий глаз очень любит все яркое и цветастое. Именно поэтому рекламные щиты светят и мигают, девицы легкого поведения выглядят как куклы на витрине, а ремонтные рабочие обожают оранжевые куртки.
Допустим мы имеем скучную прямоугольную комнату, один источник света light с яркостью 300 и info_player_start (необходим для того, чтобы банально игрок мог "родиться" на карте в игре). Это всегда выглядит убого - как будто 13тилетний отморозок решил показать свою крутизну и умение делать шикарные моды. Однако не стоит спешить с вердиктом.
Обычная квадратная комната - примитивнее некуда |
Достаточно разделить стены на две части горизонтальным "разрезом" и раскрасить верхнюю и нижнюю части разными текстурами со сходными стыками. А раз уж пришлось резать, то глупо не воспользоваться моментом и не усложнить архитектуру парой лишних движений - добавим небольшой выступ. По идее этот архитектурный изыск мало что дает, но вспомним про второй метод - игру светом и тенью. Реалистичность картинки в игре достигается именно тенями. Чем они контастнее, тем приятнее выглядит картинка. Для того, чтобы сделать тень заметной и четкой, нужно приблизить источник света к препятствию, в данном случае к выступу. Для этого достаточно сделать несколько несильных источников света с яркостью 100-150 и расположить их впритык к стенам над выступами по всему периметру. Если раньше мощный источник заливал все углы светом, то теперь нижние "половинки" стен должны оказаться в тени.
Комната с выступом вдоль стены и источниками света, расположенными вплотную к стене над выступами.
|
Прогресс очевиден, хотя по сути мы ничего не сделали - это та же самая квадратная комната, только с ярковыраженными тенями. Теперь добавим немного психологии: как известно, человек смотрит под ноги, но мало что замечает. Вестибулярный аппарат сам по себе без особых умственных усилий со стороны сознания обходит препятствия. Человек вовсю пялится на достопримечательности, но при этом не расшибает себе лоб постоянными падениями. Ведь ни один турист не вспомнит, что ему пришлось брести по колено в птичьем помете, зато запомнит Трафальгарскую площадь, Нельсона и прорву глупых жирных голубей.
Отсюда вывод: украшать пол нужно только в крайних случаях. Обычно дополнительные детали на полу только раздражают, ведь игрок часто за них цепляется. Другое дело - потолок! Самая первая мысль, которая приходит в голову после усиленного просмотра обеих частей "Пилы", "Хостела" и всяких грамотных аниме, - чем темнее сверху, тем страшнее.Это тоже предсказуемая реакция человеческой психики - обычно источником света является Солнце, которое светит сверху. Если оно не светит, значит в данный момент наблюдается либо ночь и вурдалаки, либо ядерная зима, либо это трешовый ужастик, снятый в подвале. В любом случае присутствует доля страшилки.
Quake2 не имеет возможности творить чудеса с направленными источниками света, но мы уже знаем принцип построения глубоких теней: расположить препятствие поближе к лампочке. Выступ дает тень, очерчивая стык пола и нижней части стен. Аналогично поступим с потолком, но немного не так - не стоит повторяться, особенно в рамках одной комнаты. Сделаем кучу разных теней - для этого банально создадим "выступ" не вплотную к стене, а как бог на душу положит... обычно в подвалах полно всяких труб и загадочных вентиляций.
Достаточно добавить 4 новых браша с текстурой вентиляционной трубы, как комната "оживает". Еще 8 брашей, изображающих вертикальные перегородки между источниками света и две трубы, окончательно превращают комнату в опрятный полуподвал.
|
Обратите внимание - план комнаты четко показывает, что я использовал минимальный шаг карты в 8 юнитов, то есть шаг по умолчанию. Я не мельчил, не вставлял красивости... Приличная картинка была достигнута простенькими текстурами в формате TGA и более-менее грамотным освещением.
|
После того, как мы добились приличной картинки без мельтешения мелкими деталями, можно немного разнообразить антураж. Так как средняя современная машина легко провернет с десяток Quake2 в реальном времени, то особенно жадничать не стоит, однако учтите, что компиляция карты напрямую зависит от сложности "воздушного пространства" между брашами, к тому же вы все равно не сможете отрисовать качественно мелкие детали в QERadiant - это редактор для карт, а не моделей. Минимальный шаг в 1 юнит равен 1/64 роста игрока. То есть если перевести карту в "реальность", то получится, что минимальный кубик карты не может быть меньше дюйма. Представьте себе Лего с самой маленькой деталькой в кубический дюйм и осознайте, что наше призвание - гигантизм Церетели, а не тонкое изящество миниатюры. Мелкие детали делаются в виде моделей, но об этом позже.
Еще учтите, что приличная карта требует порядка 20-30 разных комнат-коридоров. Если на текущую комнату мы потратили около 4х минут без мелких украшательств и 6 минут с оными, то представьте, сколько вам потребуется времени на возню с мелкими деталями для всей карты. Для контроля необходимо изредка компилировать и проверять ее в движке. Компиляция давнной комнаты требует около 4х секунд, но средняя карта Quake2 обычно требует до получаса работы хорошо оптимизированного q3bsb2.exe (входит в комплект редактора). Время, необходимое на оптимизацию, растет почти по экспоненте относительно размера карты, так что не стоит удивляться тому, что после обострения творчества ваша карта будет компилироваться несколько часов. Новички часто переоценивают свои возможности.
Однако лекарство существует, и это не гильотина. Правила возни с мелкими деталями очень просты - желательно их располагать как можно ближе к большим плоским поверхностям впритирку - чтобы не было зазоров. Иначе компилятор (точнее оптимизатор VIS) будет вынужден обсчитывать эту узкую щель - долго и муторно. Могут даже проявиться артефакты освещения. Если все же хочется создать что-нибудь эдакое с кучей зазоров, то обязательно выделите все браши вашей "горгульи", а затем в меню Brush отметьте опцию Make Detailed. Это будет означать, что отмеченные браши исключаются из обсчета оптимизатора. Эта операция моментально ускоряет компиляцию и упрощает расчет освещения, но нужно учитывать, что с крупными объектами не стоит так подло поступать - иначе вы получите неестественные тени, точнее их отсутствие. Вспоминаем мантру: "тени должны быть сочными!" и избавляемся от соблазна пометить все выпирающие детали как Detailed.
Я добавил арку для перехода в следующую комнату, знак в глубине коридора, оранжево-черный "плинтус" и обозначил источники света. Картинка уже тянет на локацию для бюджетной стрелялки, хотя в общей сложности было добавлено всего 28 брашей.
|
Добавление мелких незатейливых деталей оживляет картинку. Но самой главной вкусностью являются "лампы". Пока их нет, их отсутствие не бросается в глаза. Человек редко обращает внимание не только на пол, но и на источники света, так как привык избегать смотреть на них прямо. Но свет без источника выглядит всегда неестественно, особенно если тени хорошо заметны. Наверняка все видели лампы в офисах или станциях метро, которые находятся на стенах, но спрятаны в нише или задрапированы так, что их самих не видно. Обычно такие лампы освещают потолок. Это всегда выглядит необычно из-за того, что зритель не видит источник света. Так как наша задача заключается в том, чтобы сделать игру максимально комфортной самыми малыми силами, то нам необходимо явно отметить источники, которые дают яркие пятна на стенах (хорошо заметно на предыдущих скриншотах). Для этого я пририсовал простенькие браши с белой текстурой под каждой light-точкой. Даже в такой примитивной инкарнации браши выглядят как лампы и резко повышают реалистичность картинки.
Причем тут Том Сойер? А вот причем: его метод покраски забора с многократной заменой исполнителей идеален при постройке карт. Обычно начинающий "строитель" тщательно наводит красоту в первой комнате, доводит ее до максимального качества, на которое способен, а затем пытается удержаться на этом же уровне, пристраивая новые коридоры и комнаты. Жалкое зрелище!
Творческий запал подыхает уже на третьем коридоре, компилятор не справляется с обилием деталей, а сам "строитель" бесится из-за долгой компиляции, хотя "я тут только мелкую фенечку прикрутил!". На самом деле я привел пример с примитивной комнатой с умыслом: к карте нужно подходить как к рисунку - сначал накидать целиком грубый скетч (целиком построить карту из примитивных комнат-коробок), затем очертить линии почетче (отрисовать крупные детали в каждой комнате), потом прорисовать тени (добавить необходимое освещение с учетом четкости теней) и только затем заниматься украшательством.
Такой почти фордовский подход дает сразу несколько преимуществ: карта получается сделанной в едином стиле, не имеет неестественно узких или широких проходов, имеет равномерно "размазанные" по карте красоты, обладает грамотным освещением и, бонус!, в процессе разработки компиляция будет требовать очень мало времени. Потерпеть медлительность компилятора придется только на последней стадии макияжа во время обработки мелких деталей.
Гениальная амеба
====
Амебы являются не только одноклеточными организмами, но и частым примером абсолютной и непрошибаемой глупости. Но на самом деле они обладают недюжинным интеллектом. Если взять амебу и поместить ее в тонкую иглу шприца, то эта недотварь поведет себя удивительно благоразумно, перемещаясь вдоль иглы. Не поперек, не под углом, а именно вдоль! Что, говорите металлические стенки ей мешают? А это уже не вашего ума дело.
Впечатляющий силлогизм... однако так устроено большинство игр, которые гордо хвастаются "непревзойденным AI" . Сплошная заскриптованность сложных сцен чередуется с узкими рамками возможных перемещений там, где монстрам дается призрачная свобода действий. Quake2 не исключение. Если неспешно покопаться в логике любого из монстров в gamex86.dll, то перед нами предстанет вся неприглядная картина тупизны Строггов. Эти идиоты не умеют обходить препятствия, выбирают тип атаки случайным образом, бегут по прямой к игроку, а слово "отступление" явно не из их лексикона. Хотя это неудивительно - Строгги же являются инопланетными злобными захватчиками с атрофированным чувством самосохранения.
Однако во время очередной бойни тупость монстров заметна очень редко. Изредка Строгг залипает в узком проходе или, чаще всего, начинает судорожно метаться вправо-влево вдоль длинного препятствия, как будто не знает, с какой стороны его оббежать. Нетрудно заметить, что подобные географические неувязки проявляются только на трех картах Quake2, обладающих сложной архитектурой. Значит при умелом использовании брашей этого можно избежать.
С другой стороны можно не только пытаться заскриптовать монстров, но и всячески отвлекать игрока от его главной цели. Например можно заставить его выполнять дополнительные действия, тем самым усложняя ему жизнь. Например в Quake2 почти все двери открываются сами, хотя организовать удаленную кнопку очень просто. Некоторые эффекты, которые могли бы резко повысить интерактивность окружения, использовались вообще один раз за всю игру - например включение света или плавающие ящики. Очень неразумный и расточительный подход.
Не будем изобретать велосипед, а просто перечислим возможности, которые нам дают самые простые скрипты управления:
1. ограничение свободы передвижения
2. триггеры
3. свойства материалов
Ложноножки
====
Триггеры Quake1 и Quake2 являются прародителями вообще всех триггеров в шутерах, поэтому не будем на них останавливаться - описания этих чудесных заменителей интеллекта можно найти где угодно в любом количестве. Но триггеры, как правило, являются четко засценарированными скриптами - персонаж под управлением скрипта будет работать одинаково, чтобы ни случилось. Часто это приводит к курьезным ошибкам. Но если мы нашли лекарство для примитивной комнаты, то мы так же легко можем вылечить и примитивного монстра.
Снова вернемся к нашей комнате. Представим, что в единственный проход (арка на скриншотах) к нам врывается парочка бойцов SAS. Очевидно, что в реальной жизни оба ассаултера постараются максимально быстро освободить проход и отойти в сторону, чтобы избежать прицельной стрельбы обороняющегося, а заодно освободить проход для тех, кто идет следом. То есть каждый боец должен войти в комнату и сразу же сдвинуться в сторону, при этом иметь некоторую свободу действий для того, чтобы адекватно реагировать на неожиданные выходки игрока. Если вспомнить, что монстры по простоте душевной с радостью мчатся по кратчайшему пути к игроку, то очевидно, что лучшим способом поправить его траекторию будет являться установка невидимого коридора. Это несложно сделать:
Красным цветом подсвечен браш, который является стенкой невидимого коридора. Я выделил его, а в Surface Inspector отметил галочку monsterclip - это означает, что теперь этот браш будет невидим на карте, но непроницаем для монстров. При этом игрок может проходить сквозь браш беспрепятстсвенно. Получается, что игрок будет видеть, как монстры забегают в комнату и сразу же поворачивают направо или налево, как указывают стрелки.
|
Отличный результат, оба SASовца идеально обогнули невидимое препятствие и ушли с линии огня (не обращайте внимание на примитивные модели - это стандартные бойцы из ActionQuake, которых я использовал для тестирования). Узкий проход обеспечил еще немного дополнительного реализма - низкополигональные парни обошли браш monsterclip с разных сторон.
|
Этот метод идеально подходит для того, чтобы научить монстров грамотно атаковать и не выстраиваться в линию, расстреливая друг друга в спины. Но кроме состояния драки в игре есть и состояние покоя. В стандартном Quake2 игрок часто мог видеть Строггов, которые прохлаждаются на месте, пока не услышат или не увидят игрока. Это выглядит очень неестественно - инопланетные уродцы смешно подрыгивают конечностями, но не сдвигаются с места, как привязанные. Это поведение резко выделяется на фоне приземистых пулеметчиков первого уровня (base1) у лифта, ведущего на следующую карту (base2), которые активно патрулируют пандус... значит можно заставить монстров двигаться?
Да, причем очень просто: достаточно расположить угловые точки траектории path_corner на карте (причем это можно делать даже на лестницах и иногда у конечных координат лифта) так, чтобы между соседними точками была обеспечена прямая видимость. Затем последовательно соединить их при помощи пар target-targetname или просто комбинацией Ctrl-K, а затем таким же образом соединить монстра с одной из точек. При загрузке карты монстр автоматически начнет движение со скоростью и анимацией шага по всем точкам в порядке их соединения. Если последнюю точку соединить с первой, то можно зациклить этот процесс.
Патрулирующий монстр будет вести себя вполне естественно до самой своей смерти: игрок увидит его в движении, затем при первом же выстреле игрока или попадании игрока в поле зрения монстра движок Quake2 автоматически удалит из памяти все точки path_corner - монстр начнет атаковать.
===
radiant6
Очень простая и очевидная комбинация: стрелки между объектами демонстрируют, в каком направлении будет двигаться монстр. На самом деле стрелки показывают, в каком порядке объекты передают друг другу управление. Но в нашем случае это одно и то же: монстр доходит до первой точки при инициализации карты, точка передает сигнал следующему path_corner, и монстр направляется к новой цели. Как только он касается новой path_corner, управление передается к следующей точке и т.д.
===
|
Очень простая и очевидная комбинация: стрелки между объектами демонстрируют, в каком направлении будет двигаться монстр. На самом деле стрелки показывают, в каком порядке объекты передают друг другу управление. Но в нашем случае это одно и то же: монстр доходит до первой точки при инициализации карты, точка передает сигнал следующему path_corner, и монстр направляется к новой цели. Как только он касается новой path_corner, управление передается к следующей точке и т.д.
|
(Небольшое лирическое отступление, которое покажет, что использование path_corner по прямому назначению является уделом примитивных и недалеких людей без капли воображения. Вместо монстра можно использовать обычный браш. Например можно раскрасить куб под деревянный ящик, придать ему свойства func_plat или func_train, наклепать несколько path_corner как можно ближе друг к другу, соединить их в цикл... а затем пририсовать воду так, чтобы точки траектории были примерно на уровне поверхности воды. В игре этот ящик будет плавать в воде, покачиваясь как поплавок - таких интересных использований траектории движения можно придумать очень много: на скорость работы движка эта логика практически не влияет, так что при наличии терпения можно довести интерактивность карты до вполне приличного современного уровня.)
Для большего реализма был введен еще один объект - point_combat. Он тоже безобразно редко использовался в оригинальной игре, хотя с его помощью можно обеспечить практически осмысленную реакцию монстра на атаку игрока. Суть этого entity отличается от path_corner тем, что монстр бежит к этой точке только тогда, когда подвергается атаке. До этого момента он может заниматься "своими делами" - патрулировать или стоять на месте. Так как самым слабым местом в логике Quake2 является беспримерная храбрость монстров, то этот небольшой финт позволяет сэмулировать отступление или вызов подкрепления. Например вы врываетесь в зал с патрулирующим монстром, стреляете... а монстр, вместо того чтобы ринуться к вам навстречу вашей мегапушке, сломя голову бросается в укрытие или вообще вон из комнаты, где благополучно срабатывает триггер, вызывающий подкрепление. Ситуацию можно усложнить: все монстры вас атакуют, а "связист" убегает за подкреплением - согласитесь, пара примитивных функций дает возможность потягаться в логике с играми уровня HL2/Doom3.
Сквозь тернии к звездам
====
Найти и убить монстра - наиглавнейшая задача. Но просто найти и расстрелять бедное несчастное животное чересчур просто - это сродни семейной охоте на лис в стиле Тома Джонса: у туповатого компьютерного персонажа нет шансов. Ласковый и послушный ребенок, по средам играющий на скрипке в музыкальной школе, легко найдет бедного монстрика на карте за ящиком и в упор всадит в него пару ракет или всю обойму дробовика. Раз жалкое компьютерное создание не может самостоятельно защититься от детской прямолинейности, значит нужно ему помочь, как учит Greenpeace.
Шутеры являются немного незаконорожденными потомками платформенных аркад, что часто проявляется в играх неопытных разработчиков. Часто игра незаметно трансформируется из зубодробительной пострелушки в скучные марафонские забеги в стиле кнопка-дверь-коридор-следующая_кнопка. Обычно это делается для того, чтобы "растянуть" игровое время и не дать игроку уложиться в рекордные 16 минут 9 секунд прохождения всего Quake1 на максимальном уровне сложности.
Но так делать нельзя. Очевидно, что если заставлять игрока второй раз подряд искать некую кнопку на задворках карты для открытия двери, то третьего раза, скорее всего, не будет. Игрок должен видеть перед собой цель - тогда он будет готов преодолевать самые замысловатые головоломки без глобальной опции Quit. В шутерах головоломки не очень приемлемы, особенно при напоре на реализм, но есть куча других мелких пакостей, которые не только предотвратят спринтерский забег по карте, но и добавят реалистичности действию.
Джентельменский набор пакостей и макияжных красок. |
Логика Quake2 поддерживает несколько видов свойств поверхности. Часть из них является строго визуализационной и влияет только на внешний вид текстуры, но другая добавляет логические функции и позволяет усложнить жизнь игроку, не отвлекая от сути игры. Несмотря на почти неограниченные возможности, эти чудесные приколы нужно использовать не менее стильно и аристократично, чем дизайн при постройке карт - я обычно "испытываю" каждую ловушку на соседском пацане, взращенном на попсовой ниве Counter-Strike. Любая непечатная реакция с его стороны со 100%-ной вероятностью означает одобрение.
Для наведения красоты в первую очередь полезны:
1. light - любой браш или поверхность браша с этим флагом автоматически становится источником света. Нужно указать его интенсивность в поле Value. Если бы я не был таким опытным, а вы такими зелеными молокососами, то я сразу бы продемонстрировал насколько это удобная вещь на примере нашей комнаты. Другое дело, что с точки зрения движка этот флаг является банальной эмуляцией - движок выстраивает рядом с поверхностью несколько light-объектов с яркостью 50-100. В нашей комнате это озналало бы увеличение количества источников света примерно в два раза, но, при необходимости создать большой "матовый" источник света, это незаменимый флаг.
2. Sky - стандартное решение для открытых пространств, поэтому не буду подробно описывать. Use Manual, Luke!
3. Warp - текстура браша или его поверхности с этим флагом перерисовывается 10 раз в секунду со стандартным синусоидальным деформингом по X и Y-координатам. По сути этот флаг позволяет эмулировать воду в небольшом резервуаре. Чем более прозрачна текстура воды, тем качественнее получается эффект (см. следующие флаги)
4. Trans33, trans66 - степень прозрачности текстуры. Обычно используются для прорисовки воды, но можно использовать для любых полупрозрачных поверхностей: стекло, отражения и проч. В отличие от самодельных скриптов на базе GL_ этот флаг работает корректно даже при пересечении нескольких полупрозрачных брашей. Обычно используется с warp для прорисовки воды, или с Window для корректного изображения прозрачного стекла.
5. Flowing - вода обычно куда-то течет... если указать этот флаг, то текстура будет "течь" почти как вода.
6. Nodraw - один из самых важных флагов, который позволяет прорисовывать (точнее не прорисовывать) плоские текстуры, декали и прочие мелкие радости. Поверхность браша, обладающая этим флагом, полностью выбрасывается не только из VIS, но и из BSP и RAD, то есть не отображается вовсе, что очень удобно при прорисовке невидимых стен, которые должны задерживать не только монстров и игрока, но и любые другие объекты, например ракеты.
7. Window - дополнительный или сборный флаг, который полностью описывает "поведение" отражений в стекле. Обычно используется вместе с transXX при создании окон.
Для создания проблем и веселой жизни полезен набор из:
1. Slick - поверхность браша с этим флагом превращается в "лед".
2. Lava, Slime - лава и кислота в Quake2.
3. Water - браш с этим флагом становится видимым, но "нетвердым", как вода. Более 5ти секунд в толще такого браша вызывают эффект "удушения". В комплексе с transXX и flowing позволяет создать практически реалистичную воду. Нужно только учесть, что если использовать флаг flowing вместе с water, то он не только анимирует текстуру воды, но и создает "течение", которое сдвигает игрока. Тоже очень приятный эффект.
4. Mist - аналог water, только без лишних украшательств - браш отлично виден, но превращается в "витруальную стену", сквозь которую могут проходить как игрок, так и монстры. Изначально это был "антипод" playerclip и monsterclip, но я после небольшой возни превратил этот бесполезный флаг в произведение искусства:
"косой" браш, повторяющий контуры потока света из окна, с флагами mist, trans33, trans66 и warp отлично изобразил вот эту красоту:
Бледный пыльный отсвет на самом деле динамичный, красивый и вообще изображает пыль в солнечных лучах. |
5. Playerclip и monsterclip - соответственно задерживают игрока или монстра, при этом не отображаются на карте. Эти флаги можно использовать одновременно для создания невидимых стен (которые, однако, не будут задерживать ракеты, пули и выстрелы бластера).
6. Ladder - при помощи этого флага любой браш или их компиляция превращаются в классическую лестницу.
Самыми сложными для понимания обычно являются nodraw и transXX - трудно оценить их значимость, пока не увидишь результат. Однако вот что можно сделать при их помощи:
Полупрозрачный пол - trans33, вывески VAX/TERM - nodraw и window. Подсветка под стеклянным полом - light. Как видите, ничего сложного. Остальной антураж полностью обеспечен аккуратным расположением источников света. |
Раз мы выяснили, что строить карты и программировать движок не просто, а очень просто, то нам остается только проштудировать способы сборки моделей. По разным средневековым данным Создатель собирал Землю от 5 до 9 суток, но человека он создал всего за день. Логично предположить, что человек - очень простое создание, несмотря на лейбл "Венец Природы".
В следующей статье я постараюсь описать полную процедуру создания человека, обработки его ребра и конечную альфа-сборку Мира. Пора уже нарушить монополию отсталых служителей культов различных религий и представить собственный проект сотворения мира. Вы наверняка не знаете, что в Бутане двое монахов были расстрижены только за то, что попытались по буддийским книгам воспроизвести человека? А ведь прошло всего 4 месяца...
|
|
|
|
|
|
|
|
|
|
|
ДРОИД-ШПИОН - контрольный запуск |
ИМПУЛЬСНАЯ ВИНТОВКА - в тесте |
УРАН НА ЛУНЕ - тесты завершены |
|
СУПЕРСИЛА ДЛЯ ДИСТРОФИКА: |
Подавляющее число людей не отличается не то чтобы атлетическим телосложением, но и вообще не обладают сколько-нибудь заметной физической силой, чтобы противостоять, скажем, трем противникам одновременно. А так хочется посрамить постановочные трюки Джеки Чана!
|
|
ДВИГАЙ МЫСЛЬЮ, А НЕ ЗАДНИЦЕЙ!: |
И пока Москву заполоняли крысы размером с ротвейлера, а старых дев похищали гости с Альфа Центавры, на тему телекинеза отчаянно измывался даже беззубый Ералаш. Классика жанра: школьник легко мог двигать дневник "силой мысли" до тех пор, пока злобная училка не пригвоздила его жирной увесистой двойкой по физике... за что предадим анафеме старую школьную мегеру и докажем, что этой дуре самой было бы неплохо подучить физику.
|
|
Киборги! Вот чего нам необходимо опасаться. Они будут лучше нас, людей, во много раз. Умнее, с лучшей памятью, со встроенными телефонами, модемами, фото- и видеоаппаратами и прочей дребеденью, которую мы сейчас таскаем на себе как вьючные животные.
Очевидно, что Врага нужно изучить, тем более что существуют прототипы. Пока слабые и неопасные, но многообещающие уже в недалеком будущем.
|
|
"Тяжелая физика", которая связана в первую очередь с легкими частицами, как правило вызывает отнюдь не легкую оторопь у новичка. Загадочные названия, неудобоваримые правила сведения формул и совершенно ненормальные прилагательные сбивают с толку даже самых стойких. Последний фактор, кажется, пугает больше всего: описывать очередную частицу как "красивую", "очаровательную" или "очарованную" - выше понимания среднестатистического человека.
Нас же интересует практическое применение радиации. Вы не "очитались": на самом деле радиация страшна только в газетных заметках или на территории ядерных полигонов, где она заботливо культивируется.
|
|
Обычно псевдонаучный термин "пивная акустика" используется работниками приличных баров и ресторанов, когда они выводят слегка перебравших посетителей с завышенным самомнением. Вопли класса "я свои права знаю!" или "уберите ваши грязные лапы!" отличаются неприятными амплитудно-частотными характеристиками и очень мешают окружающим, поэтому охрана старается как можно быстрее вывести такие источники звуковых волн на свежий воздух. Не правда ли, неприятная, но вполне обычная ситуация?
Но каждая идиома с переносным смыслом может быть расшифрована самым грубым и прямым способом. Впервые мне пришлось наблюдать этот подход в Кардиффском клубе ветеранов. Какой-то ненормальный коллекционер в пивном угаре подарил клубу шестифунтовую противотанковую пушку - это изящное канадское страшилище гордо стоит напротив барной стойки. Гильзы снарядов к пушке достаточно тяжелы и требуют аж двух человек обслуги, но сам снаряд удивительно точно повторяет очертания современной пивной банки.
|
|
Достаточно иметь голову на плечах и руки с десятком-другим пальцев, чтобы оценить все прелести старой техники. Списанная рухлядь имела пару неоспоримых преимуществ по сравнению с современными монстрами: она была простой и имела практически полностью открытый интерфейс. Старым хламом можно было управлять через драйвера, а можно и вручную через набор портов и регистров. А вот попробуйте молотком и кусачками разворотить корпус вашего нового мобильника, извлечь из него встроенную фотокамеру, а потом попытаться прикрутить ее к USB-порту! Даже инженеры, которые создавали этот шедевр миниатюризации, обреченно покрутят пальцем у виска горемыки, прогоревшего на попытке проделать этот фокус. Ни пользы, ни финансовой составляющей в этой операции не усматривается.
|
|
Очевидно, что оборона - удел лузеров. Однако я редко встречал авторов, которые прислушивались к этой прописной истине. Всевозможные поделки в журналах вроде Радио, РадиоАматор или в дурацком Хакер сводятся исключительно к пассивным методам шпионажа - украсть пароль, отсниффить поток данных и т.д. Скучно.
Ну раз все так тускло на российском железном небосклоне, придется поделиться сакральным знанием, как самостоятельно заняться прямой агрессивной пропагандой, благо теперь это модно в "узколиберальных" кругах. Так как политические пристрастия нашей команды колеблются в диапазоне от утопизма Мора до тотального протекционизма, то идею мы дарим всем.
Первые опыты прошли успешно, теперь мы решаем, на чем сосредоточить свои усилия: на радио или ТВ. Первый вариант отличается простотой, но второй, очевидно, более интересен читателю ;)
|
|
Веб-сервер, который работает при помощи необычного источника питания - двух картофелин, 20 таблеток аскорбиновой кислоты и 50ти копеек, разменянных на однокопеечные монеты... Поверить в это трудно, ведь очевидно, что такой источник обладает крайне низкой "мощностью".
Но наш сервер использует в качестве "базы" старую плату с 286-ым процессором, 2Мб памяти и немного модифицированный веб-сервер BoA под управлением MsDOS. Плата пережила небольшую хирургическую операцию по удалению всех лишних и энергоемких деталей, плата MIO использует 8-мибитную шину, а вся информация расположена в оперативной памяти сервера. Даже сигнальные светодиоды сетевой платы перекусаны, чтобы зря не светились! ;)
Это необычное устройство будет подробно описано на страницах январского номера ПЛ-Компьтеры. В связи с новогодними праздниками, которые наверняка затянутся примерно до 15 января, у нас есть возможность поддерживать эти сервер и сайт в рабочем состоянии в свободное от безделья время.
|
|
Знакомый психолог однажды заметил, что каждому человеку присущ садизм. У одних это проявляется в виде рыка на подчиненных, у других - промывании мозгов родственникам. Даже самые тишайшие и скромнейшие очкарики в снах разрывают на части своих врагов изощреннейшими методами. Но это слишком примитивные и неэстетичные способы удовлетворить маленький зуд разрушения. Ломать и портить нужно с пользой для дела и желательно с материальными следами.
Выше я уже упоминал, что разгон современного процессора не является особенной доблестью. Это скорее пограничный тюнинг, не более. Посрамить современные процессоры эти достижения не могут ни под каким видом. Нужно что-то особенное! Представьте себе космический межзвездный корабль, собранный на базе Жигули! Вот это уже действительно серьезная заявка на суперхит.
На этот раз мы беремся разогнать процессор более чем в 10 раз (десять!!!) при помощи подручных материалов безо всяких жидких азотов и прочей "кулхацкерской" атрибутики.
|
|
|
|
|
На заре компьютерной эры основной движущей силой прогресса была стесненность в средствах, точнее дороговизна компьютерных плат. Разнесчастная восьмибитная моно(!) звуковая карта от ESS могла с легкой хрипотцой прокаркать голосом ментата из Dune2 или на худой конец пошлепать огненными шарами из Doom2, правда, с жутким скрежетом. При этом подобное сомнительное удовольствие оценивалось в 300-400 долларов. Умельцы вспоминали азы радиоэлектроники и вооружались паяльниками, писали всевозможные драйвера для своих устройств и успешно конкурировали с Crеative и ESS.
Сейчас вполне приличные карты от ESS стоят в 100 раз дешевле, а звучат во столько же раз качественнее. Романтика былого времени уже забыта, однако наработки пионеров компьютерной индустрии до сих пор могут приносить пользу. Самый известный и распространенный перл того времени - COVOX. В простейшем варианте он представлял собою россыпь из десятка резисторов, одного конденсатора и разъема LPT-порта, а позволял выводить звук с качеством не хуже звуковых карт того времени. Небольшая доводка "драйвера" или программы, с которой он работал, превращала его в универсальный цифроаналоговый преобразователь. Его можно было превратить в устройство, управляемое программно любым аналоговым прибором.
|
|
|
|