Редактор Хабрахабра
2,0
рейтинг
27 апреля 2015 в 03:26

Разработка → Заглянем за кулисы разработки: подборка исходных кодов классических игр перевод

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

Исторически так сложилось, что видеоигры не делятся исходниками. Конечно, они ведь предназначены для игроков. Но для программистов там всегда есть, на что посмотреть. И некоторые игры всё-таки выпускали свои исходники. А я давно намеревался сделать такую подборку.

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

Многие игры после выпуска исходников были улучшены и дополнены сообществом – я намеренно даю ссылки только на оригинальные исходники. Так что, если вас вдруг интересуют апгрейды – они могут существовать.

Многие игры были рассмотрены на сайте Fabien Sanglard. Если вам интересны подробности их работы, то пожалуйте к нему.

Можно заметить, что многие игры принадлежат id Software/Apogee. Совпадение? Не думаю. id славится открытостью и привычкой выпускать исходники. Старые коммерческие игры уже не имеют ценности и были бы потеряны – не лучше ли, чтобы кто-то учился чему-то полезному на их основе?

Итак, приступим (в хронологическом порядке):

Colossal Cave Adventure (1976)


image

Разработчик: William Crowther and Don Woods
Издатель: Разные.
Платформа: PDP-10 и друзья.

“You are in a maze of twisty little passages, all alike.” («Вы находитесь в лабиринте из неотличимых друг от друга небольших извилистых проходов»).

Возможно, это не на 100% коммерческая игра. Но её продавали, кроме того, она имеет историческую важность. И, кстати, именно по мотивам названия этой игры все приключенческие игры называются adventure.

Оригинал был написан на Fortran, в котором современным программистам будет сложновато разобраться. Но последние версии были на C.

Исходники: rickadams.org/adventure

Catacomb (1989)


image

Разработчик: John Carmack
Издатель: Softdisk
Платформа: Apple II / DOS

Не путайте с Catacomb 3D. Это ранняя двумерная версия игры. Разработана Кармаком до создания id и полностью написана на Turbo Pascal.

Исходники (DOS): github.com/FlatRockSoft/Catacomb

Prince Of Persia (1989)


image

Разработчик: Jordan Mechner
Издатель: Brøderbund
Платформа: Apple II / DOS / many more
Обзор кода: fabiensanglard.net

Prince Of Persia произвёл фурор благодаря плавной анимации, голливудскому стилю подачи истории и интересному геймплею.

Написана полностью на ассемблере, что затрудняет задачу обзора кода. Рекомендую посмотреть интервью с Джорданом Мехнером, где он делится деталями о создании игры.

Исходник (Apple II): github.com/jmechner/Prince-of-Persia-Apple-II

SimCity (1989)


image

Разработчик: Maxis
Издатель: Maxis / Brøderbund
Платформа: All

Игра начала новый жанр. В основе алгоритма – симуляция города посредством клеточных алгоритмов. Хороший пример кода, который стоит изучить для понимания принципов работы. Исходники для unix-порта 1990 года были выпущены в 2008 году.

Исходники (Unix version): weblogs.asp.net/bsimser/simcity-source-code-released-to-the-wild-let-the-ports-begin

Hovertank 3D / Catacomb 3D (1991)


image

Разработчик: id Software
Издатель: Softdisk
Платформа: DOS

Первая веха в истории трёхмерных шутеров id Software. Эти игры используют технику raycasting, которая была улучшена в следующем хите, Wolfenstein, где были добавлены текстуры.

Исходники:
github.com/FlatRockSoft/Catacomb3D
github.com/FlatRockSoft/Hovertank3D

Star Control II (1992)


image

Разработчик: Toys for Bob
Издатель: Accolade
Платформа: DOS / 3D0

Уникальная игра, не вписывающаяся ни в один из строгих жанров. Внешний вид чётко напоминает нам о 90-х годах и системе VGA, где цвета были подобраны не для красоты, а из стандартной палитры DPaint.

Рекомендую почитать обзор кода от The Escapist.

Исходник получен с порта на 3D0, оригинальный же был утерян. Это часто случается со старыми играми, когда разработчики уходят из компании.

Исходники (3D0): sourceforge.net/projects/sc2/files/UQM/0.1

Wolfenstein 3D / Blake Stone (1992/3)


image

Разработчик: id Software
Издатель: Apogee Software
Платформа: DOS

На основе предыдущего движка Catacomb был сделан серьёзный апгрейд на VGA-графику. И играть стало интереснее. Как в большинстве случаев с компанией id, исходники сравнительно легко читать, хотя ключевые части написаны на 16-битном ассемблере (в Doom уже такого не встретишь).

Интересно отметить, что для рисования вертикальных линий они динамически генерируют разные функции для каждой из возможных высот стен.

У Fabien можно найти инструкцию по компиляции исходников на современных инструментах.

Blake Stone, ответвление от Apogee на том же движке, вышло в 1993 году, за неделю до Doom. Можно представить, почему оно кануло в лету.

Исходники: github.com/id-Software/wolf3d
Исходники: www.apogeesoftware.com/uncategorized/apogee-releases-blake-stone-source-code

Doom (1993)


image

Разработчик: id Software
Издатель: GT Interactive
Платформа: DOS
Code review: fabiensanglard.net

В каком-то смысле это самый важный для изучения движок. В своё время это была революция – мир от первого лица, не плоский, как Wolf3D. Освещение, текстуры и изобретение DeathMatch.

Одной из самых знаковых вещей стало изобретение идеи «движка». До этого игры были сильно связаны с данными. Doom пропагандировал отвязку данных игры от движка. Это породило целые сообщества, модифицировавшие игры (Aliens TC, Fistful Of Doom).

Исходники: github.com/id-Software/DOOM

Descent (1994)


image

Разработчик: Parallax Software
Издатель: Interplay Productions
Платформа: DOS

Многие компании кинулись догонять Doom, запустив волну «Клонов Doom». Parallax удалось сделать нечто совсем другое.

В игре можно было летать на корабле по трёхмерному лабиринту из проходов, в отличие от 2.5D коридоров Doom (у id полная трёхмерность появилась лишь в Quake год спустя).

Исходники: www.codersnotes.com/files/gamesrc/d1srcpc.zip

Gravity Force 2 (1994)


image

Разработчик: Jens Andersson and Jan Kronqvist
Издатель: Shareware
Платформа: Amiga

Многие современники вспомнят эту игру. Amiga Power однажды назвала её второй лучшей игрой всех времён.

Это не совсем коммерческая игра, она была выпущена по принципу платного shareware, а затем её раздавали бесплатно на диске Amiga Power. Включил её в список потому, что в ту пору вообще редкие игры выдавали свои исходники. Если вам интересно, как делались 16-битные игры, обратите внимание.

Также не пропустите интервью с авторами игры.

Исходники: www.lysator.liu.se/~jensa/gf2

Heretic / Hexen (1994/5)


image

Разработчик: Raven Software
Издатель: id Software / GT Interactive
Платформа: DOS

Это был уникальный клон Doom по двум причинам: 1) лицензированный движок Doom и 2) хороший геймплей

Заметные улучшения: возможность смотреть вверх и вниз, скриптовой движок для внутриигровых событий (новая идея на то время).

Исходники: sourceforge.net/projects/heretic

Rise Of The Triad: Dark War (1995)


image

Разработчик: Apogee Software
Издатель: Apogee Software / FormGen
Платформа: DOS

ROTT это была странная игра. Она была порождена движком Wolfenstein 3D, при этом создатели умудрились эмулировать ощущения разных высот. Но всё равно игра не смогла конкурировать с Doom от 1993 года.

Исходники: www.codersnotes.com/files/gamesrc/rottsource.zip

Marathon 2: Durandal (1995)


image

Разработчик: Bungie Software
Издатель: Bungie Software
Платформа: Apple Macintosh / Windows 95

Серия отличилась тем, что в своё время попала в крайне маленький список игр, доступных на Apple Macintosh. И, в общем-то, это клон Doom. А через 3 месяца после её выхода id Software выпустила знаменитый “qtest”, позволявший взглянуть на движок Quake.

Поскольку Маки тогда использовали лишь писатели с художниками, несмотря на все усилия, серия провалилась. Небольшая компания разработчиков имела неплохой успех на разных других платформах.

Исходники: www.codersnotes.com/files/gamesrc/marathon2_src.tar.gz

Duke Nukem 3D / Shadow Warrior (1996)


image

Разработчик: 3D Realms
Издатель: GT Interactive Software
Платформа: DOS
Code review: fabiensanglard.net

Из множества клонов, игры 3D Realms отличились хорошими попытками привнести нечто новое в игру. Движок Кена Сильвермана Build Engine добавил много интересных фич вроде наклонных полов, комнат, расположенных друг над другом и зеркал.

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

За дополнительной информацией обращайтесь на страницу автора.

Duke Nukem 3D / Исходники: www.codersnotes.com/files/gamesrc/duke3dsource.zip
Shadow Warrior / Исходники: www.codersnotes.com/files/gamesrc/Shadow_Warrior_1.2_Source_Code.zip
Build engine / Исходники: advsys.net/ken/buildsrc/default.htm

Quake 1/2/3 (1996-1999)


image

Разработчик: id Software
Издатель: GT Interactive / Activision
Платформа: DOS / Windows / others
Code review: fabiensanglard.net (Quake 1)
Code review: fabiensanglard.net (Quake 3)

Тут писать особо нечего, вы и сами всё знаете. Знатная веха в создании полностью трёхмерных движков, без всяких хаков вроде 2.5D

Упомяну несколько интересных подробностей. Возможно, это первая коммерческая игра, скомпилированная компилятором с открытым исходным кодом (DJGPP for DOS, ранний порт gcc).

В игре был свой скриптовой язык “Quake C” (позже lcc у Quake 3). Он был встроен специально для того, чтобы игроки могли делать модификации. Это, вкупе с системой ресурсов PWAD, породило огромное сообщество моддеров.

В Quake 1 был инновационный механизм кэширования результатов шейдинга. Но после распространения 3D-ускорителей это потеряло смысл. Следующая игра от id, Rage, использовала эту же идею.

Кроме того, Quake был очень надёжным движком. Никаких глюков растра или обсчёта столкновений.

Quake / Исходники: github.com/id-Software/Quake
Quake 2 / Исходники: github.com/id-Software/Quake-2
Quake 3 / Исходники: github.com/id-Software/Quake-III-Arena

Abuse (1996)


image

Разработчик: Crack dot Com
Издатель: Electronic Arts / Origin Systems
Платформа: DOS / Linux / Mac

Обожаю Abuse.

В игре было использовано несколько инноваций. Крутая система управления одновременно с мыши и клавиатуры. Динамическое освещение (неслыханная вещь для платформеров).

Но больше всего, как программисту, мне понравилась система «визуального Lisp». Вся игра заскриптована на языке, напоминающем Lisp. Поведение врагов можно изменять во время выполнения игры, а не просто включать в код.

Ещё одним интересным моментом стал способ, по которому события можно подключать во встроенном редакторе карт – визуально перетаскивать линии от выключателя к двери, или от ловушки к месту, где появляются враги. Присутствует возможность задавать логику И/ИЛИ в виде скрытых объектов на уровне. Такого я в других редакторах не встречал.

Коммерческого успеха игра не снискала и через два года исходники были опубликованы. Следующая игра от Crack Dot Com, Golgotha, была выпущена по принципу open-source, включая всю графику.

Abuse / Исходники: www.codersnotes.com/files/gamesrc/abuse_pd.tgz
Golgotha / Исходники: abuse.zoy.org/wiki/download

Aliens versus Predator (1999)


image

Разработчик: Rebellion
Издатель: Fox Interactive / Electronic Arts / Sierra On-Line
Платформа: Windows / Mac

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

Исходники: www.codersnotes.com/files/gamesrc/avptools.zip

Freespace 2 (1999)


image

Разработчик: Volition, Inc.
Издатель: Interplay Entertainment
Платформа: Windows

Как бы наследник франшизы Descent, но не совсем. Кампания и мультиплеер проходят полностью в космическом пространстве.

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

Исходники: www.codersnotes.com/files/gamesrc/fs2source.zip

The Operative: No One Lives Forever (2000)


image

Разработчик: Monolith Productions
Издатель: Fox Interactive / Sierra Entertainment / MacPlay
Платформа: Windows / Mac / PlayStation 2

У движка LithTech история долгая, хотя он и находится в тени более известных Quake и Unreal engine. Я особенно не рылся в исходника NOLF, но я подозреваю, что там есть лишь исходники самой игры, но не графического движка. И однозначно там не будет частей, связанных с работой на PlayStation 2.

А жаль – разработка для PS2 в наши дни должна выглядеть для программистов инопланетным делом, поскольку она гораздо сильнее подходила в методу ориентации на данные, чем это делают современные API.

Исходники: www.codersnotes.com/files/gamesrc/NOLFSource003.zip

MechCommander 2 (2001)


image

Разработчик: FASA Interactive
Издатель: Microsoft
Платформа: Windows

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

В прошлом году даже были выпущены исходники ранних версий MS-DOS и Word, что было неслыханным делом лет 30 назад.

Исходники: www.microsoft.com/downloads/details.aspx?FamilyID=6d790cde-c3e5-46be-b3a5-729581269a9c&DisplayLang=en

Doom 3 (2004)


image

Разработчик: id Software
Издатель: Activision
Платформа: Windows / Mac / Linux / Xbox / PS3
Code review: fabiensanglard.net

Если вы хотите изучить движки современных игр высшего класса, то Doom 3 – это один из наилучших примеров. На время выхода он был инновационным во многих областях. Метод использования моделей высокого разрешения на элементах низкого разрешения в игре сейчас является стандартом для коммерческих игр. В исходнике есть много всего интересного – одна лишь система обработки физики достойна изучения, в частности, отслеживание столкновений.

Это первая игра от id, написанная на С++. Прошлые игры из-за использования С несли в себе простоту. Doom 3 тоже довольно простой, но заметно уже изменение его вектора движения.

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

Отличный обзор кода от Fabien Anglard стоит прочтения.

Исходники: github.com/id-Software/DOOM-3
BFG edition Исходники: github.com/id-Software/DOOM-3-BFG

Gish (2004)


image

Разработчик: Cryptic Sea
Издатель: Chronic Logic / Stardock
Платформа: Windows / Linux

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

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

Исходники: www.crypticsea.com/download/gishsource153.zip

Canabalt (2009)


image

Разработчик: Adam Saltsman
Издатель: Semi-Secret / Beatshapers / Kittehface
Платформа: Flash / iOS / PSP / Android / Ouya

Не самая сложная игра, ну и что? Если вы хотите научиться делать игры, начинайте с простого – вот с этого.

Прототипирование заняло 5 дней, портирование на iOS – 10. Пример превращения простой идеи в достойное выражение. Это как бы возвращение 8-битной эпохи, когда еженедельно могли появляться новые жанры. Жаль, что с тех пор люди предпочитают клонировать идеи, а не творить самостоятельно.

Canabalt показывает, насколько вещи можно сделать просто, если захотеть.

Исходники: github.com/ericjohnson/canabalt-ios
Комментарии: blog.semisecretsoftware.com

Что я упустил


Нужно упомянуть ещё несколько игр. Они не выпускали исходников, но подверглись фанатскому обратному инжинирингу. Это, конечно, не то же самое, что настоящие исходники, но тоже может быть интересным:

Another World fabiensanglard.net/anotherWorld_code_reviewпрекрасное интервью на тему создания игры)
Heart of the Alien hota.sourceforge.net (сиквел предыдущей)
Strike Commander fabiensanglard.net/reverse_engineering_strike_commander/index.php
Little Big Adventure code.google.com/p/twin-e

Не попали в рейтинг


Сорцы следующих игр утекли в сеть нелегально, поэтому они не попали в зал славы:

Half Life 2
Falcon 4.0
ReVolt
Turrican III
Mr. Nutz: Hoppin’ Mad
Trespasser (ладно уж, вот вам обзор кода)
Перевод: Richard Mitton
Вячеслав Голованов @SLY_G
карма
248,2
рейтинг 2,0
Редактор Хабрахабра
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (12)

  • +2
    > Найти исходники для консолей или аркад почти нереально

    На самом деле для старых платформ (A2600, NES, Genesis, GB/GBC, SNES) и популярных игр есть туча reverse-engineered игр. Те же Pokemon, Metroid, Asteroids, Phantasy Start и т.д. есть в достаточно подробном разборе и при желании можно ознакомиться. Ну, хотя бы тут. Я бы еще отдельно выделил тот факт, что весьма-известный-в-узких-кругах композитор Jeroen Tel в свое время слил полунелегально дикую тучу исходников для всех игр, с которыми работал (а там список достаточно большой) — правда, для многих игр там только его личный код, т.е. музыкальный плеер + его данные, а не вся игра целиком.
  • +2
    Можно еще Jedi Academy + Jedi Outcast вспомнить.
  • 0
    Blake Stone, ответвление от Apogee на том же движке, вышло в 1993 году, за неделю до Doom. Можно представить, почему оно кануло в лету.

    Перед «кананьем в лету» у Blake Stone вышел целый сиквел, в 1994 году. Видимо неплохо для своего времени продавалась, иначе бы сиквела на было ;-) Вообще, Wolf3D-подобные шутеры выходили и продавались года эдак до 1995-1996 как минимум.
  • 0
    Почитал про исходники MechCommander 2. Там, оказывается, далеко не все, а только часть, необходимая для демонстрации возможностей системы сборки XNA. А я понадеялся на порт на современные шейдеры и прочую красоту:(
  • +3
    Пожалуй, сюда неплохо добавить Digger от Windmill software, 1983 год.
    image
    Оригинал был написан на C, но впоследствии его портировали на JAVA.

    Кстати, на хабре уже писали о культовой игре Commander Keen, странно, что о ней позабыли.
    image

    Вспоминая про Duke Nukem 3D, и про Build engine можно добавить весьма переделанный Blood 3D, у которого исходники оказались утеряны. Однако осталась альфа-версия.
    image
    Кроме того, исходники Blood 2, также опубликованы.
  • +2
    Исторически Microsoft и открытые исходные коды вместе не уживались. Но на склоне лет ситуация начинает смягчаться.

    Microsoft OpenSource Directory
  • 0
    Хм, почему HL2 то не попал все же? Официальное СДК есть, в котором полностью геймплей есть, как и в представленном NOLF

    Arx Fatalis не упомянут еще.
  • +2
    Исходник получен с порта на 3D0, оригинальный же был утерян. Это часто случается со старыми играми, когда разработчики уходят из компании.

    Что забавно, и до сих пор тут в посте ссылки на некоторые исходники прилагаются в виде ссылок на архивы с кодмаи, вместо ссылок на репозитории с гитхаб/битбакет, что несколько повышает вероятность того, что и эти коды могут оказаться утерянными через несколько лет.

    Gish (2004)

    Хм… а мне казалось, что эта игра вышла еще совсем недавно. Даже еще помню анонсы этой игры в журналах типа PC-Игры (или как-то так).
    • 0
      А мне вот иногда кажется, что 2004 — это вот почти что-то только что. А потом приходит осознание, что это больше 10 лет назад было 0_о

      >Что забавно, и до сих пор тут в посте ссылки на некоторые исходники прилагаются в виде ссылок на архивы с кодмаи, вместо ссылок на репозитории с гитхаб/битбакет
      Можно поискать на том же гитхабе, возможно кто-то уже озадачился созданием репозитория (:
  • 0
    Мне ещё вспомнилась не такая уж и известная игра Dark Angael, в которой практически все сырцы лежали просто так в виде lisp файлов.
  • 0
    Эх, были бы доступны эти исходники 15-25 лет назад.
    • 0
      Так были доступны. Не все, конечно… Например исходники Wolfenstein 3D были доступны в 95 году, Quake — в 99, Doom — где-то между ними.

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