Тег ‘игры’

Еще за VRML

Надежда отечественного геймдева [info]golergka как-то спрашивал в комментах, зачем нужны VRML-ные извращения. А я сейчас на наглядном примере покажу, зачем.

На данный момент “мейнстримом” в плане динамического контента в вебе является Adobe Flash, правда, с начала 2000-х сильно сдавший позиции в пользу более универсального Ajax. Во всяком случае, извращения тех лет, вроде “сайтов целиком на Flash”, встречаются реже и реже – “изобразительные” и “технические” возможности Flash теперь реализуют с использованием HTML, CSS и Javascript.

Единственная область, где позиции Flash до сих пор сильны – это динамическая графика. Если, к примеру, текстовую “мочиловку” такого типа:

И плодть его содрыгнулыся от боли, и страшные черные птицы обклювали иго со всех сторон…
А злой волшебник Хухур достал иликрическую пилу и стал, весело хохоча, отпиливать ему ногу и отпилил ее три раза! Воистину!..
И он, хохоча, откусил ему глаз…
Злая колдунья острым ножом разрезывала плоть жертвы…
Его жилы, хохоча, хрустнули под ударом стальной дубины, и кровь толстым потоком затопила Долину Смерти…
Воистину прольется кровь, ибо да будет так!!!

…думаю, этого достаточно – все же видели игрушки типа “Бойцовского клуба”, где “мочилово” представляет собой длинный лог того, кто откусил кому яйца, в общем, если такую мочиловку попытаться снабдить графикой, то придется использовать Flash – нормальное рисование в Javascript+HTML совершенно недоступно (а когда все дойдут до поддержки HTML5 и элемента Canvas – я не скажу, да и никто не скажет).

В принципе, ничего против Flash я не имею – это довольно удобное средство отображения динамически меняющихся двумерных картинок. Но вот когда речь заходит о трехмерности…

Конечно, трехмерная графика с “оперативным” рендерингом на ПК применяется уже лет 20, вспомним тот же Wolfenstein 3D или Doom. Математическая основа 3D-графики прекрасно известна, и реализация “софтверного” рендерера не должна вызывать больших проблем при использовании любого языка высокого уровня (хоть того же ECMAScript). Недостаточная производительность скриптовых языков уже лет пять как не является проблемой, в чем нас пытаются убедить “веб-программисты”. Но это теория. А что мы имеем на практике? Для Flash существует десяток софтверных 3D-”движков”. Как говорит про них Википедия,

Скорость работы перечисленных движков зависит от используемой версии Flash Player, но в целом пока не достаточно высока.

Естественно, верить википедии на слово не стоит, а лучше убедиться лично, что я и проделал. Думаю, [info]golergka прекрасно известна многопользовательская игра “Танки онлайн“, в 2009 году ставшая “прорывом года” в использовании Flash.

tanki

Немного поиграл в эту “техническую заслугу” отечественных флешеров. Как игра – вполне приятно, ничего против не имею. Но насчет поразительной 3D-графики – не соглашусь. Графика довольно примитивна и каким-то прорывом является лишь для браузерных игр. А достигается это просто невероятной ценой – на моей не особо “дохлой” машине загрузка процессора достигала, держитесь за стул, 60-70%. Неудивительно – уже лет 10-15 для обсчета сложных 3D-сцен применяют либо очень низкоуровневые языки (вплоть до “оптимизации” на уровне ассемблерных кодов), либо специализированные графические процессоры. Flash не имеет доступа ни к тому, ни к другому.

В общем, по уровню графики все это напомнило мне виденную еще в начале 2000-х “игрушку” с паровозиком, сделанную фирмой Parallel Graphics для демонстрации возможностей своего VRML-браузера.

parovoz

К сожалению, на новом сайте Parallel Graphics эту демку уже не так легко найти, да и онлайн-версия почему-то не работает. Зато сохранилась версия в виде архива, которую я и выложил у себя на сайте для всех железнодорожных симмеров и прочих извращенцев.

Для работы потребуется VRML-плагин, причем желательно – Cortona 3D Viewer. Скачать его можно на сайте производителя.

PS Не надо понимать эту запись, как “Flash говно, VRML форева”. Просто мне хочется показать, что в разработке 3D-контента для веба существует не только современный мейнстрим (в виде Flash и софтверного рендера) и не только перспективные разработки (Silverlight, JavaFX), но и “хорошо забытое старое”. Кстати, поддержка асинхронных запросов к серверу в VRML тоже была прописана в стандарте 1997 года (в виде функции CreateVRMLfromURL()), просто применений ей тогда не нашлось.

UPD Почему-то Parallel Graphics не любит браузеры, отличные от IE, хотя их плагин в них прекрасно работает. Видимо, срабатывают ограничения из начала 2000-х.

Про одно маленькое извращение

Посетители интернетов “со стажем”, наверное, помнят про язык VRML, появившийся еще в 1997 году и позволявший описывать трехмерные пространства в “читаемом” виде. Практически для каждого браузера существовали плагины, позволявшие встраивать окошко с 3D-контентом на HTML-страницы. Даже я в далеком 2002 году не остался в стороне от использования VRML на домашней страничке и нарисовал в нем какое-то подобие сортира или станции метро “Кузьминки” – почему-то мне очень понравилась текстура кафельной плитки в каком-то VRML-редакторе.

Почему-то совершенно незамеченной в то время осталась возможность VRML-плагинов взаимодействовать со страничкой, в которой они находятся. Web 1.0 тихо исчез, уступив место для динамических сайтов с JavaScript, DHTML и AJAX (все эти три слова означают примерно одно и то же, разница в гламурности). VRML вообще не отличался особыми красотами, анимация там была в зачаточном состоянии (ЕМНИП, делалась она средствами реализованного там же JavaScript, но писать всякие “эффекты” приходилось практически вручную), а о возможности изменения 3D-сцены по полученным откуда-то “снаружи” командам никто не задумывался.

Теперь – о своем опыте прикручивания модного AJAX к немодному VRML. Конечно, можно было бы выбрать в качестве 3D-среды более современный X3D – дальнейшее развитие VRML, но для него попросту нет приличных плагинов для браузера. Для VRML я использовал Cortona 3D.

В общем, задача состояла в следующем. Есть трехмерная сцена с “лампочками”, которые могут гореть, например, красным, желтым и зеленым – например, представим себе модель перекрестка со светофорами и база данных, даже проще – регулярно обновляющийся XML-файл, в котором записано, каким цветом горит какая “лампочка”. Надо, чтобы трехмерная сцена динамически изменялась, отслеживая изменения в XML-файле, и при этом не требовала никаких действий от пользователя.

Естественно, задача очень легко решается, если отказаться от использования всяких VRML-ных хитростей, а сделать все с использованием обычного HTML и AJAX. С другой стороны, можно управлять VRML-сценой через JavaScript в браузере. Почему-то эта возможность VRML используется настолько редко, что о ее существовании в рунете не упоминают, а в буржуйских интернетах удалось найти лишь перепевы курсовой работы по программированию в университе Нэпира, что находится в доброй старой Англии. Надо ли говорить о том, что про объединие AJAX и VRML не написано вообще ничего? Решается же вышеописанная задача буквально парой десятков строк кода.

Конечно, можно решить ту же задачу тысячей разных способов. Например, можно отображать трехмерные объекты с использованием Flash. Можно использовать не VRML и не V3D, а какой-нибудь гугловский O3D или даже COLLADA. Пожалуй, всерьез использовать это могут только разработчики браузерных говноигр. Кстати, графика в современных VRML-плагинах вполне “на уровне” и не уступает многим более серьезным играм. Ну что, как насчет Lineage прямо в браузере?

PS Кстати, Cortona3D не работает с примером Turtle Graphics. Там требуется совсем небольшая доработка, но раскрывать этот маленький секрет я пока не буду.

Забавная игрушка

Stalin’s Dilemma

Прочитал в ЖЖ уважаемого [info]t00mas про игру Stalin’s Dilemma. Конечно, она совсем не похожа на “обычные” экономические стратегии, но интересна она не красивой графикой (которой там нет и никогда не было), а совершенно другим.

Собственно, вся игра происходит в изображенном на скриншоте “окне”. У игрока в наличии имеются определенные ресурсы и некоторые показатели развития – политическая стабильность, промышленный потенциал и военная мощь. Цель игры – за три хода-пятилетки довести эти показатели до требуемых (фактически, надо увеличить в четыре раза армию и промышленность), одновременно минимизировав потери в населении.

В архиве с игрой есть текстовый файлик-объяснялка, но я попытаюсь объяснить основные игровые моменты здесь. Итак, экономика в игре представлена следующими отраслями: сельское хозяйство (Agriculture), металлургия (Metals), энергетика (Energy), транспорт (Transportation) и машиностроение (Industry). Кроме того, имеется торговля (Foreign Trade) и вооруженные силы (Military).

Сельское хозяйство – самая “проблемная” отрасль в игровой экономике. Теоретически, продовольствия должно хватать для того, чтобы накормить всех рабочих и солдат, но на самом деле из-за индустриализации количество крестьян сокращается. Для сохранения сельского хозяйства на приемлемом уровне приходится обращать внимание на графу Tractors. Чем больше механизации в сельском хозяйстве, тем лучше. К сожалению, тракторам нужно топливо – на один трактор – одна “единица” в графе Fuel. Другие опции в сельском хозяйстве касаются способов “изъятия” излишков продовольствия – либо “рыночными” методами, оплачивая их с помощью “товаров широкого потребления” (графа Goods), либо с помощью “квоты” (графа Quotas) и объема коллективизации. При проведении коллективизации часть крестьян “отрывается” от сельского хозяйства и переходит в категорию “рабочих”, что совершенно необходимо для роста промышленности.

Ресурсы для промышленности представлены металлургией и энергетикой. Каждый обеспеченный едой рабочий в этих секторах экономики производит соответственно металл и топливо, которые могут быть использованы в других отраслях. Наличие механизации – Mine Equipment и Fuel Rigs – позволяет увеличить производство.

Транспортная отрасль позволяет перемещать ресурсы. При слабом развитии транспорта вполне может возникнуть ситуация, что необходимые ресурсы есть, а применить их нельзя. Собственно, больше сказать нечего.

Колонка Industry, наверное, самая важная в игре. Каждый обеспеченный металлом, топливом и рабочими завод добавляет единичку к Industrial Capacity, которая, в свою очередь может быть потрачена на производство новых заводов, транспорта, шахтного и нефтедобывающего оборудования, оружия и товаров народного потребления.

Естественно, в игре не обошлось и без внешней торговли. Можно продавать излишки еды и сырья, покупая взамен заводы, транспорт, добывающее оборудование и товары.

Самая “простая” часть игровой экономики – вооруженные силы. Достаточно обеспечить солдат едой, а танки топливом – и получатся так необходимые цифры в поле Military Effectiveness.

Еще один показатель, имеющий значение в игре – политическая стабильность, вычисляемая, как среднее арифметическое уровня жизни (Standart of Living) различных категорий населения. Ненулевого уровня жизни можно добиться, если обеспечить население едой и товарами народного потребления. Если не хватает еды – показатель будет отрицательным, и никакие “заваливания” материальными благами не увеличат его. С другой стороны, когда продовольственная проблема решена, добиться необходимого уровня политической стабильности уже несложно.

В целом, несмотря на определенные упрощения, игра представляет собой довольно интересный “глобальный” экономический симулятор. Конечно, здесь нет карты с изображением городов, фабрик и заводов, но точность имитации экономических процессов считается очень неплохой. Вряд ли Stalin’s Dilemma можно назвать развлекательной программой, скорее, ей подойдет определение “поучительная”. Наверное, в нее необходимо хоть пару раз сыграть тем, кто утверждает, что коллективизация и индустриализация могли бы быть проведены с гораздо меньшими жертвами.

АдмиралЪ на “Шнелльботе”

Наверное, разработчики “Морского охотника” сильно просчитались с определением времени действия игры. Наверное, более актуальным было бы получение лицензии на бренд “АдмиралЪ” с последующим выпуском игры про Колчака, который в перерывах между командованием эскадрой выходит в море на одиночном миноносце, чтобы пострелять из пушки. Между прочим, немецкие “Шнелльботы” по основным параметрам очень похожи на миноносцы начала XX века.

Игровой процесс можно было бы разбавить мини-играми, например, симулятором танцев наподобие “обучалки” из Mortal Kombat (думаю, все помнят этот “самоучитель по кнопкодавству”), или мини-шутером “убеги от революционных матросов”, или даже виртуальным тиром “расстреляй членов Учредительного собрания”.

Думаю, вышло бы неплохо.

Морской охотник

Буквально неделю назад вышел очередной проект российского игрового “долгостроя” – анонсированный еще в 2004 году “Морской охотник”. Интернет уже наводнен воплями любителей заполучить свежевышедшую игру на халяву в духе “нас обманули, образ двухгигабайтной игры весит семь гектар!!!”. Естественно, 5 Гб разницы – это не мифический “старфорс”, а информация о “топологии” диска, которая используется оным старфорсом для того, чтобы отличить пиратский диск от лицензионного. Зато плач по пяти гигабайтам легко выявляет пользователей “пиратки”.

В отличие от опущенцев, неспособных скачать несколько лишних гигабайт, я напишу о реальных достоинствах и недостатках “Морского охотника”. Поиграв в него где-то час-полтора, я составил некоторое представление о том, что же это за игра.

Жанр морского симулятора, к сожалению, довольно мало представлен на игровом рынке. Вообще, военно-морская тематика (для определенности, будем говорить про XX век) имеет свою специфику, и представить ее в “играбельном” виде – довольно непростая задача. Думаю, большинству геймеров будут совершенно “параллельны” такие игры, как Distant Guns: Russo-Japanese War at Sea, где игровой процесс сводится к тому, как малюсенькие кораблики (да, игровое поле приходится наблюдать с высоты нескольких километров, чтобы иметь хоть какое-то представление о происходящем) стреляют друг в друга, а потом почему-то из-за невидимых издалека пробоин и пожаров переворачиваются и тонут. Подобным грешит подавляющее большинство более-менее серьезных морских стратегий. Если же поместить игрока, например, на дредноут в Ютландском сражении, то возможностей проявить инициативу и героизм будет катастрофически мало – стрельба главным калибром за горизонт по невидимому противнику чертовски скучна. По-видимому, единственным “военно-морским” жанром с какими-то коммерческими перспективами является симулятор чего-то небольшого – эсминца, торпедного катера или подлодки. Если эсминцы и подлодки представлены достаточно богато, то о существовании “москитного флота” разработчики долго не догадывались. Кстати, маломерные суда достаточно бедно представлены в виртуальном пространстве – разве что в “тренажерах” наподобие Motorboat Simulator. В принципе, симуляция торпедного катера – это определенная находка разработчиков. Ничего подобного раньше не было.

Игра получилась довольно зрелищной. Скорость катера в 30 узлов в сочетании с дистанцией торпедного выстрела в несколько кабельтовых позволяют во всей красе разглядеть красивые модели кораблей с экипажем на своих местах, катера прорисованы довольно подробно, “эффекты” типа тумана, дымовых завес и снега очень хороши. Поверхность воды выглядит замечательно.

Экипаж катера более-менее “живой”, стрелки у орудий отличаются наличием или отсутствием бороды и усов, вертят головами, анимация довольно неплохая.

Процесс игры можно назвать даже “аркадным” – катера ходят быстро, легко поворачивают, способны “проскакивать” под носом у больших кораблей. Можно занять место одного из стрелков, тогда игра превращается в подобие тира на управляемой “платформе”. Да, катером можно управлять и с места стрелка, одновременно исполняя роли пулеметчика и рулевого. При этом, что интересно, пулеметная установка будет поворачиваться так, чтобы сохранить наводку на цель. Ориентироваться же “на местности” можно по экрану “радара” в левом нижнем углу экрана. Кстати, с этим радаром связана некая нелогичность в настройках игры. Я воспринимаю наличие этого элемента интерфейса, как некоторый заменитель возможности быстро оглянуться в реальной жизни. Соответственно, включение настройки “повреждение радара” означает то, что весь экипаж катера вдруг слепнет и не может докладывать обстановку. Как мне кажется, это несколько странно.

Можно командовать довольно крупными катерами, входившими в состав немецкого флота, с экипажем почти в 30 человек. А можно – и маленькими английскими или советскими, имея в подчинении всего лишь пять-шесть матросов. Кстати, быстроходный Г-5 с 20 мм пушками ШВАК оказался очень неплох в мультиплеерном “бою с ботами” – ни одного “живого” мультиплеерного сервера обнаружить в локалке не удалось.

Можно сразу забыть об “игровом балансе” в режиме мультиплеера. В игре представлено 12 классов катеров, очень сильно различающихся по ТТХ. Например, английские Thornycroft с вооружением всего лишь из двух кормовых торпедных аппаратов не смогут составить никакой конкуренции немецким Schnellboot, больше похожим на небольшие миноносцы. Впрочем, любой более-менее приличный симулятор страдает именно от этого. “Баланс” – не более, чем выдумка разработчиков компьютерных игр.

В общем, симуляторная часть оказалась неплоха. Но есть и откровенно слабые стороны игры. Не буду упоминать о глюках с дымовыми завесами, иногда неожиданно исчезающими – это можно будет поправить с помощью патчей. Дело в другом. Экипаж катера и командиры других кораблей, мягко говоря, не блещут искуственным интеллектом. Пулеметчики далеко не всегда открывают огонь по “подставившейся” цели, командиры кораблей, потеряв свою цель, не продолжают преследовать ее, а зачем-то ложатся на обратный курс. Возможно, именно поэтому был введен “тактический режим”, напоминающий морскую стратегию средней паршивости.

Те миссии, где участвует несколько кораблей, приходится проходить в режиме “тактической карты”. Точно так же, как и в Distant Guns и многих других подобных играх, трехмерный тактический режим оказывается жутко неудобным. Тактическая карта, где приходится управлять условными обозначениями кораблей – всевозможными треугольничками – на фоне мильной сетки, превращается в основной экран. Откровенно непонятливый AI не позволяет отвлечься даже на пару минут (управляемые им корабли неспособны, например, уклониться от идущих на них издалека торпед), чтобы поуправлять идущим в атаку катером или пострелять из крупнокалиберного пулемета. Кстати, как и в “Правде о девятой роте”, крупнокалиберные пулеметы – это rulezz :) Если же хочется играть не в “тактическую стратегию”, а в симулятор, то игра превращается в нервное дерганье по маршруту “мостик катера (кнопка 4) – орудийная установка (кнопки 1 и 2) – тактическая карта (кнопка m)”.

К сожалению, в игре нет “отдельных миссий”, поэтому приходится последовательно проходить задания в нескольких кампаниях. К числу положительных сторон относится возможность проходить кампании либо за немцев, либо за союзников, причем миссии иногда имеют “зеркальный” характер – например, при игре за немцев надо уничтожить два английских катера, захвативших секретные документы с подлодки, а при игре за союзников – наоборот, уйти от двух преследующих немецких “шнелльботов”. С другой стороны, кампании состоят из не связанных друг с другом миссий, результаты прохождения предыдущих заданий не влияют ни на что. Вместе с “адмиральским” режимом на тактической карте это полностью убивает ощущение присутствия на мостике торпедного катера. Даже если катер был утоплен, всегда можно “пересесть” на другой. Экипаж катера воспринимается, как “болванчики”, ныряющие в воду и тонущие (во всяком случае, плавающих в воде матросов я не видел) в ролике “Ваш торпедный катер уничтожен”.

Даже падающий на палубу перед капитанским мостиком убитый или раненый стрелок не вызывает никаких эмоций. В той же “Правде о девятой роте” однажды столкнулся с таким моментом – в миссии с корректировкой огня артиллерии слишком поздно подал сигнал к отходу, один из пулеметчиков не успел отбежать и был накрыт осколками. Учитывая, что за этого самого пулеметчика ты играл в предыдущем эпизоде, чувствуешь себя редкой сволочью. В “Морском охотнике”, напротив, члены экипажа, даже несмотря на “индивидуальность” бород и усов, воспринимаются, как “пушечное мясо”. Более того, возможность пройти игру в режиме тактической карты позволяет изображать “камикадзе”, например, выходя одиночным катером на дистанцию один-два кабельтова в попытке утопить крейсер. Конечно, катер будет расстрелян, но успеет выпустить торпеды. Сомневаюсь, что многие командиры катеров шли в такие совершенно безрассудные атаки.

С другой стороны, неплохо смотрятся миссии, где приходится управлять одним катером. Там приходится ценить свою шкуру, в отличие от “флотоводческих” миссий.

Довольно интересен, судя по игре с ботами, режим мультиплеера. К сожалению, сохраняется определенная “туповатость” стрелков, не желающих открывать огонь даже по хорошо видимой цели. С другой стороны, возможно, что это недоработки режима с DirectX 9 – как видно по демонстрационным роликам, в DirectX 10 более реалистично выглядит туман, возможно, не позволяющий виртуальным пулеметчикам разглядеть цель. Если же AI настолько убог, возможно, было бы правильным дать нескольким игрокам возможность находиться “на одном катере” – один управляет огнем пулеметов или скорострельных пушек, другой – “рулит и жмет на газ”. В идеале можно было бы дать им возможность переговариваться с использованием микрофона и наушников.

К недостаткам мультиплеерного режима можно отнести возможность игры только в формате “катера против катеров”. Наверное, можно было бы добавить возможность Cooperative play – например, атака на управляемый компьютером конвой нескольких катеров, управляемых различными игроками.

В целом, игра производит неплохое впечатление – но исключительно на фоне того, что других симуляторов торпедных катеров на горизонте не видно. Режим “тактической карты” нельзя отнести к достоинствам, его наличие может убить все удовольствие от игры. Непонятным выглядит отсутствие режима “одиночной миссии”, без необходимости прохождения всей кампании.