Dune 2 обзор

Обновлено: 06.07.2024

Рассказывать о Dune II, тем более через столько лет после её выхода – задача непростая. Все мы и так знаем, что это фундамент, основа жанра RTS, а также одна из немногих консольных стратегий, перекочевавших к нам с PC. Некоторые пользователи ошибочно считают её первой стратегией в реальном времени (на самом деле этот титул принадлежит Stonkers для ZX Spectrum, вышедшей в бородатом 1983-м), однако именно “Дюна” внесла в жанр элементы, со временем ставшие само собой разумеющимся. Бессмысленно пытаться написать что-то новое об этой великой игре, многие из нас помнят её едва ли не наизусть. Я попробую просто порассуждать о ней.

Главным минусом "Битвы за Арракис" можно назвать вырезание под корень сюжетной части. Вселенная “Дюны”, созданная Фрэнком Гербертом, известна своим сложным, детализированным и запутанным лабиринтом человеческих взаимоотношений. Увы, от былого великолепия почти ничего не осталось. Под нож пошли даже легендарные имена – вы не встретите упоминаний ни о Поле Атредисе, ни о бароне Харконене, ни об императоре Шаддаме. Мы видим только декорации, скупые комментарии Ментатов между уровнями, да кучку знакомых уху названий. Неужели это всё, что можно было взять из книг и фильма? Жаль.

Впрочем, прежде всего мы видим отличную стратегию. Со скидкой на давность, разумеется. Именно здесь на передний план вышла экономика, впервые появилась необходимость отстраивать тыловое обеспечение. Собирать ресурсы, возводить базу, группировать колонны юнитов для более эффективной атаки на противника – такой масштабности прежде видеть не доводилось. Добавить бы к этому ещё и грамотно проработанный баланс. С появлением танков отпадает всякая надобность в броневиках и пехоте, тем более человечков можно давить любой тяжёлой техникой. Противник, тем не менее, и на последних этапах бросает вперёд бесполезные пехотные полки. Захватывать ими здания AI не умеет, эта привилегия оставлена игроку. Харвестеры (сборщики спайса, основного и единственного ресурса) оппоненту не интересны, разве что если сами не заедут под обстрел стационарных орудий. А если с ними что-нибудь и случится, неведомые благодетели не оставят в беде – хотя бы один харвестер в наличии будет всегда. Защитники вражеской территории немногим умнее атакующих. Стоит перебить привязанных к определённым точкам "охранников", как передвижные установки залпового огня безнаказанно начнут осыпать вражескую базу ракетами. Проезжающие мимо в атаку лишь помашут ручками и минуту спустя отдадут прощальный салют под мощными залпами ваших заградительных турелей. Хоть бы маршрут меняли! Но нет, тянутся вереницы смертников по протоптанным тропам, пока клепающий их завод не превратится в пепел.

Помимо враждебных Домов, определённые проблемы исходят от коренного жителя Арракиса – Песчаного Червя-исполина. В отличие от своего собрата из фильма, внушавшего страх хотя бы своими размерами (что уж говорить о тысячах острых зубов), этот представляет собой всего лишь выпуклость на песке масштабом в одну "клетку", которая передвигается в произвольном направлении и иногда поедает подвернувшуюся технику. В моменты поедания можно увидеть, как открывается его трехстворчатая пасть, где неизбежно исчезает жертва. Прогнать незваного гостя без потерь трудно – толстенная шкура выдерживает не меньше полусотни залпов из самого тяжёлого оружия. Тем более стрелять приходится с твёрдой земли, всё что стоит на песке подвергается огромной опасности. Добить себя до конца червь никому не даст – когда от его могучего здоровья останется примерно треть, он благополучно нырнёт вглубь. То же самое случится после удачной охоты – сытый и довольный абориген уйдёт восвояси, отведав порядка шести юнитов. Что симптоматично, пастись этот товарищ любит вокруг харвестеров, которые по долгу службы большую часть времени проводят на песке. Надо отдать должное, политических предпочтений гигант не имеет и с удовольствием питается вражескими войсками.

Казалось бы, оценивая игру незамутнённым взглядом можно найти в ней целую массу изъянов. Вот только все они становятся незаметными, как только начинаешь погружение в бескрайние пески Арракиса. Недостатки просто меркнут, и мысли о них не лезут в голову, потому что легко вытесняются на обочину внимания настоящим драйвом и бесчисленным множеством приятных мелочей. Когда с замиранием сердца ждёшь возвращения загруженного харвестера, чтобы построить ещё несколько юнитов для очередной атаки. Когда аккуратно расставляешь плиты по вверенной территории, чтобы выгодно и красиво организовать строения на базе. Когда хватаешься за голову после удачного попадания вражеского Dead Hand’а. О каких вообще недоработках можно думать, когда отчаянно и дерзко штурмуешь укрепления базы самого Императора?! Музыка в шедевры не метит, но прекрасно дополняет общую картину бодрыми ритмами.

"Портирование" с PC удалось блестяще. Да и "портированием" назвать это трудно, игру собрали практически заново. Косметические изменения в графике пошли на пользу. По сравнению с оригиналом интерфейс потерял в объёме и приобрёл в простоте использования. Меню не маячит перед глазами, а вместе с исчезнувшей монструозной боковой панелью потерялся и Ментат со своими подсказками. Чтобы знать, что к чему, достаточно пробежаться по туториалу (какая прекрасная умиротворяющая мелодия играет там на заднем плане!). Dune II: Battle for Arrakis приносит с собой большую бочку с надписью “эмоции” и оставляет увесистый багаж с ярлыком “воспоминая”. Могло ли быть лучше? Могло ли быть ближе к первоисточнику, к настоящей вселенной "Дюны" Фрэнка Герберта? Может быть и да, но тогда мы потеряли бы "Дюну" такой, такой мы её знаем и любим.

moder browsers

Разработчик: Westwood Studios
Издатель: Virgin Games
Жанр: Strategy (Real-time) / Top-down
Системные требования:

Вместо введения

Dune 2 — это великолепная стратегия, одна из первых в жанре. Нет смысла распинаться и говорить насколько это великая игра для целого поколения детей 90х. А так как я, неожиданно для себя нахожу в удовольствие возиться с кодом и портировать его в JavaScript, то конечно же моей целью после TTD (статья) неизбежно стала Dune 2. По счастливой случайности я не додумался начать с неё, поскольку боюсь я бы не справился. Как оказалось, хоть Dune 2 и проще по функционалу чем TTD, но портировать ее было сложнее, но об этом далее.

Кодовая база

Выбор «правильной» кодовой базы является главным фактором успешного портирования проекта с применением emscripten. Например, использование SDL, отсутствие многопоточности являются хорошим маркером того что портирование пройдет с успехом. Я перебрал похоже все проекты так или иначе связанные с Dune 2, и остановился на OpenDune. Фишка которая меня зацепила — полное копирование всего поведения оригинальной игры включая все её баги. Похоже, код этого проекта изначально был получен полуавтоматическим путем из оригинала. В коде тут и там встречаются переменные с именем local_03FF, очень много глобальных переменных, код читать очень тяжело. Самый серьезный недостаток исходной кодовой базы в многопоточности, она вызвала много проблем при портировании. Но зато результат действительно радует, в браузере игра похожа на оригинал очень сильно, за исключением новой пачки багов.

Итак, сухие факты:

Язык: C
Количество исходных файлов: 143
Количество строк кода: 59151
Размер бинарника: 423.2 Кб
Размер эквивалентного JavaScript:

1000 Кб
Время потраченное на портирование:

Далее в этой статье будут описаны сложности с которыми я столкнулся при портировании. Наверняка это интересно не каждому, если так, то опустите этот подраздел до «известных проблем».

Многопоточность VS асинхронность

OpenDune имеет достаточно интересную модель многопоточности основывающуюся на прерываниях. Для обеспечения многопоточности, игровой код в момент простоя крутится в бесконечных циклах, выглядит это примерно так:

При старте приложения инициализируется интервальный таймер функцией setitimer. Этот таймер вызывает прерывание через равные промежутки времени. Оно приостанавливает основной поток выполнения и позволяет выполнить произвольный код. Для JavaScript реализация аналогичного таймера тривиальна, тем не менее был выбран другой путь портирования дабы искусственно не делить проект на JavaScript и C реализации. Было решено полностью отказаться от использования функции setitimer, вместо этого вызов sleepIdle() был замещен функцией обработки событий по таймеру, т.е. вместо простоя эта функция определяет какие запланированные события подошли и запускает их на выполнение.

Более серьезная проблема — внутрение циклы while, любое появление такого цикла в JavaScript вызовет неминуемое зависание открытой вкладки браузера (или браузера в целом). Это связано с тем, что большинство циклов ожидают пользовательского ввода (нажатие кнопки мыши, клавиатуры), однако браузер не может обработать события от устройств ввода, они ставятся в цепочку исполнения уже после текущего исполняемого блока JavaScript. Возможный способ решения этой проблемы — ручная правка кода и перевод проблемного кода в асинхронный режим.

Небольшой примеричик. Вот черновик кода который вызывает проблемы:

После мучительных умозрительных манипуляций, асинхронный код:

Адская работа. Ядром всей системы является функция Async_InvokeInLoop.

Async_InvokeInLoop — позволяет заменить любой цикл while (true) асинхронным эквивалентом. Функция гарантирует вызов open до начала цикла, а close после завершения цикла. Ссылки на функции condition и loop являются равноправными участниками асинхронной итерации, что они делают ясно из названия. Итерация реализуется через функцию Async_Loop:

Игровой цикл (или таймер в JavaScript) переодически дергает эту функцию заставляя всё в игре крутится. Если исходная функция должна возвращать результат, то проблемы удваиваются — приходится сохранять результат в памяти глобально, и потом извлекать его в других функциях. Все работает по соглашению. В результате у меня получился адовый фреймворк для асинхронизации проекта, вот его интерфейс:

  • Если вызвать меню строительства непосредственно перед тем, как компьютерный противник определит следующее строение для постройки, то можно получить доступ к его сооружениям (исправлено)
  • При загрузке сценария существовала возможность что сооружения противника получат 20 000 — 30 000 едениц жизни вместо 150 — 200 (исправлено)
  • Из за ошибок синхронизации — игровая карта может перерисоваться прямо поверх диалога с ментатом, правда проявляется это редко (не исправлено)

Известные проблемы

    Игра работает в браузерах Firefox, Chrome, Opera, Chrome (Android

Играем?

UPD3. Сервер уперся в ограничение tcpsndbuf — cуммарный размер буферов, которых может быть использован для отправки данных через TCP-соединения. Ограничение которое ставит мне провайдер, более производительный сервер позволить себе не могу, извините если вам не удалось поиграть. Ждем когда нагрузка придет в норму.

UPD4. Все же проблема была в моих кривых руках, теперь сервер должен справляться с нагрузкой.

UPD5. В космопорте не работает кнопка «Invoice», будте внимательны, если вы не заказали ни один юнит в космопорте и нажали «Send Order», то автоматически нажмется кнопка «Invoice» и все зависает.


Законченная, самостоятельная версия игры.
Эта игра усовершенствованная со всех сторон версия «DUNE II» и написана полностью с нуля. Содержит по 12 уровней на каждую династию, с оригинальными сюжетами и картами.

DUNE IV содержит 5 эпизодов с общим числом миссий 56, и рассчитана на время игры более 40 часов.
В новых эпизодах Атрейдесы сражаются с Фрименами. При этом Атрейдесы способны уничтожать песчаных червей самостоятельно. Лёгкая пехота одновременно обладает способностями инженеров, и способна захватывать здания.

Особенности Игры:
1.Игра DUNE IV содержит массу усовершенствований, по сравнению с DUNE III, таких как высокое графическое разрешение, продвинутое управление, продвинутый интеллект противника, и многое другое. Пакет игры включает видео, музыку в формате MP3.
2. С первых миссий игра Вас ознакомит со способом выживания на планете Арракис и научит добывать ресурс (основное богатство этой планеты – «спайс»), строить базы и армию.
3. Противник не оставит в покое Вас и Ваши базы ни на минуту, ну разве что на одну. Есть такие миссии, когда против Вас объединяться несколько альянсов, а есть и такие, когда каждый альянс за себя. Есть уровни с ограничением по времени. Также есть миссии, где от игрока потребуется находчивость и ловкость в командовании войсками, чтобы выполнить задачу.
4. На этот раз противник (в виде компьютера) поумнел, и будет искать уязвимые места в обороне игрока.

2. OpenSource Dune Legacy 0.95b2

Практически законченная версия игры. Использует файлы оригинальной Дюны2.

3. Dune 2: The Maker — demo4


Практически законченная версия игры.
open-source проект. Отличается улучшенной графикой (все спрайты были перерисованы вручную) и удобным интерфейсом наподобие Red Alert 2. Последняя версия поддерживает игру не только в оригинальные кампании, но и режим сражения (skirmish), а также генератор случайных карт.

4. Dune 2: The Golden Path 1.7


Заточка под мультиплеер, есть режим один против компьютера.

5. Super Dune II: Classic Edition 1.7 & Dune 2 eXtended Project


в этой версии игроку даётся возможность поиграть за Наёмников (Mercenaries) — эквивалент Ордосов, Императора (Emperor) — эквивалент Харконненов, и Фременов (Fremen) — соответственно, Атрейдесы. В самой последней миссии у игрока 5 противников.

  • Все миссии были почищены от ошибок и опечаток. В частности, теперь ИИ использует группы боевой техники для атак на игрока:
  • Исправлены анимации ментатов для всех новых сторон. Также добавлена фоновая музыка на экранах ментатов.
  • Для всех миссий были написаны новые брифинги.
  • Устранен глюк с неработающим космопортом:
  • Юниты новых сторон теперь восприимчивы к атакам Девиатора.
  • Песчаных червей, которыми игрок может командовать, играя за Фрименов, теперь легче контролировать. Добавлены новые кнопки команд для червей, из которых наиболее полезна Area Guard: в этом режиме черви атакуют только войска противника, а юнитов игрока не трогают:
  • Исправлены незначительные графические ошибки, включая некорректные цвета на здании исследовательского центра:
Dune 2 eXtended Project

Представляет собой модификацию SuperDune2. Сейчас перерисованы экраны меню, ментатов, выбор сторон, модифицировано дерево исследований, введены новые юниты, сделана демо-кампания,

6. Dune2 — Arrakis original & Arrakis-TM-Demo




Dune2 — Arrakis была написана на Qbasic. Вполне законченная и играбельная версия.
Arrakis — TheMaker — тоже самое, на основе TheMaker.

7. Redux 3 — RTS Engine (Dune2, C&C, RedAlert) v.1.02


Чисто движок, готовый, но голый…

8. Charge — Dune II «imitation»


Римейк Дюны2, написанный на Ява. Содержит одиночную игру.

9. OpenDune v0.1 от 1 ноября 2009

10. Dune — a Dune II clone with hi-res graphics.

Клон Дюны2, по сути опять чистый движок.

11. Dune 3: Back 2 Desert

12. Dune32: Strike Back — Engine

Чистый движок. Автор для демонстрации использовал графику из C&C:Red Alert

В доисторическую эпоху скачать из интернетов игру было не так просто. Во-первых, у меня не было интернета… У Коляна его тоже не было, зато была приставка (Sega что ли?) и к ней замечательная игра Dune II.

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

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

Собственно, об чём игра?

Выбираешь один из “домов” - хороших Атрейдесов (синие ), плохих, но инфернальных и потому харизматичных Харконенов (красные) и невесть откуда появившихся Ордосов (зелёненькие). У каждого дома есть свои уникальные юниты. Мне лично всегда казалось, что надуманные Ордосы слабее всех.

Высаживаешься ты такой на пустынной, как карман типичного школьника 90-х, планете Арракис, и, выбирая последовательно области разнообразной, как пустыня Сахара, планеты, постепенно её завоёвываешь. В каждой области на прямоугольной карте против тебя бьются либо Харконнены, либо Ордосы, либо и те и другие. Под конец ещё и император появится.

Нужно строить базу, с помощью харвестеров (т.е. комбайнов) собирать местный аналог нефти - спайс, который автоматически конвертируется в деньги, на которые строится база и покупаются юниты и, собственно, с помощью юнитов изничтожать врага. Ах да, чтобы жизнь не казалась мёдом, твоих юнитов, в т.ч. и харвестер, может пустынный червь может ZOGхавать. Вроде как его можно изничтожить, но у нас не получалось ни разу.

На первых уровнях доступны не все здания и юниты. Но с каждой новой победой появляются всё новые и новые ништяки. Танки там, ракетные установки и прочие летадлы (почему-то только у Ордосов и то малополезные). Между заданиями можно послушать (ну, точнее, почитать) что тебе впаривает про обстановку в стране и в мире местный ментат. Кто это такой и зачем нужен? В игре он не нужен низачем, и потому можно его не слушать, а сразу гамать.

А так писатель-фантаст Герберт, тиснувший книжку про эту самую Дюну, с которой всё и началось, описал этот спайс как то ли наркотик, то ли стимулятор, короче, эта штуковина помогает предсказывать будущее, всяческие паранормальные способности проявлять, например, ориентироваться в космосе (с компьютерами там плохо).

Но чтобы сделать это, мы посылали поближе к врагу MCV - специальную машину, которая позволял основывать базу поближе к врагу. А там уже можно постепенно продвигаться, ставя новые орудийные башни. Причём часто для убыстрения победы мы играли с кодом бессмертия. Как ни странно, всё равно было интересно [тут должна быть картиночка с Большим Шлёпой].

С современной точки зрения, конечно, у игры много недостатков, и зуммеры вообще, может, не поймут, чего же в этой “убогой” игрушке хорошего. Но надо помнить, что “шла” она разве что не на калькуляторе. Например, для установки, если верить педивикии, нужно было всего 7 Мб жёсткого диска. Да, зуммеры, не гигабайт, а мегабайт! Но да, не поспорить.

Графоний уровня “в этой паре пикселей при изрядной фантазии можно увидеть танк”, лимит на юнитов, странная игровая механика.Например, к середине захвата планеты пехота становилась бесполезной. Ордосы были много более слабыми, чем Атрейдесы с Харконенами (ну, или мы не умели ими играть), императорская армия, появлявшаяся под самый конец, ничем принципиально не отличалась от Харконенов, только, вроде как, пехота у них была посильнее. Притом, что к этому времени толку от неё не было.

Ну, и общая однообразность заданий. Строишься-выпиливаешь, строишься-выпиливаешь. Романтика! Никаких тебе “ваш хмель пожрал долгоносик”. Да и ресурс, в виде спайса, ровно один. Но в 90-е на это не обращали внимание. Заставочки между миссиями были атмосферны и красивы. Юниты разнообразны. Даже графоний не казался убогим. До того играли-то мы в тетрис да диггер! Ну, и атмосферно, ничего не сказать!В общем, Дюна стала частью моего детства и с этим уже ничего не сделать!

Читайте также: