«Орда: Северный ветер» - история создания

· прочитаете за 6 мин.
«Орда: Северный ветер» - история создания

В этой статье разработчики из компании 7th Bit Lab рассказывают об истории создании стратегии реального времени «Орда: Северный ветер». Несмотря на достаточно поверхностный характер материала, в статье есть некоторые любопытные моменты, в частности, об особенностях программирования и локализации игры на западные рынки.

Люди

«Орда» делалась несколько лет; за это время пришло и ушло множество людей. Большинство расценивало создание игры не как свое призвание или будущее, а как приятное времяпрепровождение, способ временного заработка или возможность научиться работе с компьютером бесплатно. На разных этапах создания «Орда» принимали участие до шестнадцати человек, а когда игра вышла, осталось всего пятеро. Как и везде, люди переживали основные этапы: энтузиазм, усталость, осмысление, потеря смысла, неоправданность надежд и так далее. В конце концов, в команде остались или те, кто не успел пережить эти этапы, либо те, кто не потерял интереса.

Как появилась идея создания игры

Идея создания игры пришла в голову Владимиру задолго до того, как в команде появились все основные создатели «Орды». В самом начале Владимир не знал, какого жанра игру он хочет сделать. Поэтому было много предположений: квест, файтинг, стратегия и так далее.

Архитектура игры

Архитектуру игры, программную модель придумал и воплотил Илья. Интересен процесс придумывания архитектуры: Илья долгими часами бродил по улицам и придумывал, как будет хранить, обрабатывать, извлекать данные в игре. Такие прогулки продолжались приблизительно 1-2 месяца. Илья за основу брал Warcraft 2, изучал его архитектуру, а затем думал, как создать подобный «двигатель».

Именно отсюда похожесть «Орды» на Warcraft 2. Затем архитектура пережила множество доработок. В программу было прикручено множество разных фишек, таких как главный герой, переход с карты на карту, игра нескольких игроков на одном компьютере и так далее.

Выбор платформы

Сразу же мы выбрали DOS, потому как Windows требовал более сильных компьютеров. Большая часть игры была написана на 386 компьютере, на видеокарте, не имевшей SVGA-режима. Поэтому писалось на 386, а затем переносилось на более мощный компьютер и тестировалось: работает или не работает. К тому же DOS был более изученным и позволял получить полный контроль над компьютером.

Язык программирования

В связи с тем, что программисты пришли со Spectrum'a, и наиболее известен им был язык Assembler, то и игру решили написать на Assembler'е. Кроме того, машины, на которых мы работали, были слабы, и чтобы написать что-либо быстрое, нужно было знать asm. Правда, C использовался для того, чтобы запускать игру.

Игра пережила несколько этапов:

  1. Real mode. Программа изначально писалась под реальный режим, с использованием 32-битных возможностей процессора. Но достаточно быстро закончилась память.
  2. EMS. Выход был найден: решили использовать EMS память. Работать с ней было неудобно, зато не нужно было много переделывать. Не помню почему, но с EMS мы проработали недолго, опять же из-за ограничений по памяти. Нужен был защищенный режим. В какой-то момент решили даже сами переключаться в защищенный режим, но для этого пришлось бы писать самим процедуры чтения/записи на диск, переключение видео и так далее.
  3. QEMM. Вначале решили использовать DPMI расширитель от QEMM, так как он был документирован и очень популярен в то время, то есть многие им пользовались. Но возникла проблема совместимости - не у всех же стоял QEMM.
  4. Watcom C. После долгих поисков, на диске, купленном давным-давно, был найден Watcom С. К тому же, очень многие игры в то время использовали DPMI расширитель от Watcom C. И вот, вооружившись документацией, стали изучать, что и как; приблизительно через пару недель приступили к переделке игры под защищенный режим. Вспоминается такой момент: мы скомпилировали по Watcom, запустили, и в начале загрузки программа выдала надпись о том, что используется DPMI расширитель от Watcom, на что Ил сказал: «Ну, просто настоящая программа!»
  5. Windows (Microsoft Visual Studio 6.0). Эта переработка была предпринята уже после того, как «Орда» вышла. Переработку под «Винды» мы стали делать из-за того, что на западе «Доса» как такового уже не осталось, а программу хотели купить. В связи с этим мы стали переделывать «Орду» под «Винды». Как ни странно, но это было сделано в течение месяца. То есть игра работала, хотя была и не отлажена. Постепенно, где-то за два месяца, игру довели до нормального состояния. Кроме того, если «Орда» для «Доса» была в разрешении 640х480, то под «Виндами» - 800х600. Кстати, это повлияло на время создания версии (где текст не там, или картинка меньше, ну и так далее).

Но даже эти этапы не изменили язык программирования: как писали на Assembler'е, так и продолжали. По сути, использование Watcom C сводилось к тому, что он давал нам защищенный режим и функции для работы с внешней средой. А само тело игры писалось на Assembler'е; в качестве компилятора использовался TASM 3.0. С использованием TASM был даже такой случай: основной файл увеличивался в размерах, и настал момент, когда TASM'у стало не хватать памяти, и он выдавал ошибки.

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

Мы сделали структуры, классы, наследование, связные списки, конструкторы и деструкторы, динамическое выделение памяти и даже свой своп-менеджер памяти (правда, затем его убрали в связи с тем, что игру переделывали под Windows). Был, правда, еще один момент, из-за которого мы решили писать на Assembler'е - это мания скорости выполнения программы. Доходило до того, что ради экономии пространства вместо jump @@label писали jump short @@label. Чтобы сэкономить байт.

Для расчета смещения в видеобуфере использовалась таблица смещений. За счет таблицы, на 486 машине можно было рассчитать смещение в видеобуфере за 5 тактов, в то время как при использовании умножения тратилось до 50. Во всем этом скупердяйстве был и положительный эффект: ну, например, спрайты хранились в упакованном виде, для ускорения вывода. Если точнее, то везде нужно выводить спрайт с прозрачным цветом. Мы сжимали прозрачный цвет, и во время вывода, вместо проверки на прозрачный цвет для каждой точки, прозрачный цвет просто пропускали. Кстати, это дало возможность разместить больше спрайтов. Таких примеров масса.

Компьютеры

«Орда» изначально создавалась как игра, не требовательная к мощности компьютера. Большая часть кода была написана на 386 компьютере с 4 мегабайтами памяти, хотя все остальное писалось и рисовалось на разных машинах от 386 до Pentium 166. На конец проекта был следующий расклад: 486 машина, два Pentium 100 и Pentium 166 ММХ. Правда, на тот момент было господство Pentium II с частотой 266 и 366 мегагерц. И вот настал момент, когда «Бука» издала «Орду». Нам привезли новенькие компьютеры, их было шесть: два вторых «пентиума» (на Slot 1) и четыре Celeron'а.

Я помню, как мы разглядывали эти чудо-машины, на которых были 3D-акселераторы (самое интересное, что до этого никто из нас не видел, как работает 3D-акселератор). Мы рубились в «Quake 3» до посинения. Но счастье было недолгим - через несколько недель квартиру, где мы работали, обворовали. Вынесли все: и новые, и старые машины, и все, что включалось в розетку. Правда, сохранилось три машины из этой партии, только потому, что их забрали домой. Но два вторых Pentium'а с крутыми по тем временам видеокартами в «делюксовом» исполнении, были украдены. К сожалению, ничего не нашли...

Локализации

Приблизительно через полгода, как «Орда» вышла на российский рынок, «Буке» потребовались локализованные версии «Орды». Илья сделал документ для перевода. Самая первая локализация была в Чешскую республику. Мы начали делать новое для нас дело, поэтому на первую локализацию потратили много времени. Затем мы набили руку, и последующие версии делались быстро - в среднем, за неделю. При работе с чехами было немало смешного: чехи самые первые объявили о желании сделать локализацию, а удовлетворились версией самые последние. За несколько месяцев они много раз изменяли тексты, раза три-четыре просили исправить имена. А также попросили убрать курящего человека из ролика с фотографиями авторов. В общем, достали не только нас, но и «Буку». Приблизительно через полгода, после пятой или шестой переработки, они все-таки приняли игру.

За время создания «Орды» было:

  • Написано 67697 строк кода на Assembler'е и 218 строк кода на С
  • Нарисовано 7639 спрайтов
  • Выпито приблизительно 156 литров кофе
  • Выкурено около 4000 пачек сигарет

ℹ️
Автор: «Бука», DTF
Дата публикации оригинального текста: 12.07.2002