Игры под DOS с открытым исходным кодом — редкость. Вы, конечно, можете вспомнить GORILLA.BAS или DONKEY.BAS, написанные в соавторстве с самим Биллом Гейтсом, или культовые шутеры от первого лица Doom и Quake. Но это скорее исключения.
Однако спустя много лет некоторые разработчики всё же решили выпустить в свет исходники своих игр. Большинство из них уже переписаны на SDL, благодаря чему их можно перенести практически на любую современную платформу, но мне стало интересно, насколько сложно скомпилировать настоящие двоичные файлы для DOS?
Вы спросите, зачем это делать? Потому что, ну... м-м-м. Давайте просто сделаем это!
Mario & Luigi
Начнём с этого клона “Марио”, написанного голландским разработчиком Майком Вирингом в 1994 году. Он имеет удобное управление, плавную прокрутку на фоне с эффектом параллакса, и шесть уровней. По словам автора, ассеты Марио были просто неким заполнителем для движка, который позже предполагалось использовать для других игр. Возможно, кто-то из олдов вспомнит игры Sint Nicolaas или Charlie the Duck от того же автора.
Несмотря на неофициальность, это была единственная игра про Марио, доступная под DOS, поэтому она быстро распространилась на дисках с подборками игр и через ранний интернет. Даже Тайгер Вудс до неё добрался!
Автор поделился исходным кодом на своём сайте в 2008 году. Он написан на Паскале, и его легко компилировать на Turbo Pascal 5.5 или выше. Просто запустите TPC /M /L MARIO
, и все готово! Проверьте код на наличие некоторых супер секретных чит-кодов!
Ссылки:
Mr. Boom
Игра была выпущена в 1999 году и, к моему удивлению, всё ещё остаётся популярной.
Она продолжает жить в виде ядра libretro, и вы даже можете установить её через менеджеры пакетов в большинстве операционных систем. Я не видел ссылки на первоисточник с официальных сайтов, но кто-то, к счастью, выложил его на github.
Исходный код написан на Turbo Assembler, вам понадобится компоновщик Watcom и расширитель PMODE/W, которые можно легко найти в интернете. Сначала вам нужно скомпилировать SS\REMDY-PM.ASM
и P.ASM
, слинковать их и запустить IFF/MAKE.BAT
и GFX/MAKE.BAT
, чтобы упаковать данные в исполняемый файл:
CD SS
TASMX /mu /m9 /q REMDY-PM.ASM
CD ..
TASMX /mu /m9 /q P.ASM
WLINK @X:\PMW133\PMODEW.LNK system pmodew file P.OBJ , SS\REMDY-PM.OBJ
CD IFF
CALL MAKE.BAT
CD ..
CD GFX
CALL MAKE.BAT
CD ..
К сожалению, полученный исполняемый файл зависает после выбора игрока, если вы не отключите монстров (аргумент -M
), так что либо что-то не так с кодом, либо я просто что-то упустил. Также не работает звук, и у меня не получилось его наладить, работая с исходным двоичным файлом.
Ссылки
Cyberdogs
Этот крутой шутер с видом сверху, напоминающий серию игр Chaos Engine, True Lies и Alien Breed, был выпущен в 1994 году шведским разработчиком Ронни Вестером и распространялся бесплатно.
Для сольного проекта это на удивление целостная игра — вам предстоит проходить различные миссии, где нужно отстреливать киборгов и собирать предметы, а между миссиями покупать оружие и различные бонусные предметы. Также есть кооперативный режим на двоих с очень интересной механикой разделения экрана: игроки используют один экран, но когда они отходят далеко друг от друга, экран разделяется.
Исходный код написан на Turbo Pascal 7 и выпущен в 2000 году. Он доступен в интернет-архиве на ныне несуществующем личном сайте автора. Две тогда ещё коммерческие библиотеки для обработки графики и звука не включены в исходный пакет, но теперь обе можно найти в Интернете.
Во-первых, давайте взглянем на звуковую библиотеку DSMI. По словам автора, она была лицензирована для нескольких коммерческих игр под DOS, включая Disney's Lion King и Aladdin. Я подозреваю, что Cannon Fodder 2 также использует её, потому что она хранит музыку в специальном формате AMF DSMI. Используйте CASM.BAT
для компиляции всего кода ассемблера в объектные файлы, а затем компилируйте файлы модулей Pascal с расширением TPC -B DSMI.PAS
.
Библиотека SPX распространялась в бинарном виде. Судя по README, исходный код можно было купить по "низкой цене в 220 долларов"... В любом случае, мы можем просто указать компилятору юнит-файлы для версии 7.0 и собрать игру:
COPY DSMI\DSMI.INC
TPC -B -UX:\TP7\UNITS;SPX\TPU70;DSMI -ODSMI DOGS.PAS
Ссылки
Сайт Cyberdogs (веб-архив)
C-Dogs
C-Dogs является продолжением Cyberdogs, выпущенной в 1997 году. Устав от ограничений 16-битного режима, автор полностью переписал игру на Watcom C. По сути, это та же игра, но с массой улучшений. В частности, поддержка джойстика, редактор, добавление «собачьего боя», в котором два игрока сражаются друг с другом, большее количество оружия и множество настроек игрового процесса.
В отличие от предыдущей игры, здесь нет сторонних библиотек, а исходный код даже включает Makefile! Итак, если ваш Watcom C настроен правильно, игру можно скомпилировать, просто запустив WMAKE. Определённо самый лёгкий процесс компиляции в нашей подборке.
Ссылки
Сайт C-Dogs (веб-архив)
Jump 'n Bump
Эта одноэкранная игра, в которой милые кролики разносят друг друга на кровавые ошмётки, была разработана шведской командой Brainchild Design из четырёх человек в 1998 году. Её исходный код был опубликован годом позже. Первый порт Linux, использующий библиотеку SDL для графики, появился ещё в 2001 году и поддерживается по сей день.
Найдя исходный релиз, я с грустью обнаружил, что библиотека, обрабатывающая графические и звуковые подпрограммы, предоставляется только в виде скомпилированной статической библиотеки. А вот остальной код можно скомпилировать с помощью компиляторов NASM и DJGPP:
nasm -f coff -o gfx.obj gfx.s
gcc -I. -c main.c menu.c interrpt.c gfx.c
gcc -I. -L. -o jump.exe interrpt.o main.o menu.o gfx.o gfx.obj -ldj
Ссылки
Avalon
Признанная критиками, но очень недооценённая ролевая игра Avalon была выпущена в 1998 году и распространялась бесплатно. У неё посредственная графика, но игра имеет своё очарование. В ней есть звуковые эффекты и тонны музыки, большой прокручиваемый мир и головоломки.
Её исходный код поставил меня в тупик. Все сторонние библиотеки представлены в виде юнит-файлов Turbo Pascal, поэтому исходников нет. Погуглив названия, я обнаружил, что некоторые TPU взяты из библиотеки MODEX Майка Чапина (MXPRPAS), некоторые взяты из MiGTracker (где они также находятся без исходников), некоторые из малоизвестной звуковой библиотеки tucgpl12 и вам понадобится объектный файл из другой библиотеки MODEX, написанной Мэттом Причардом. Есть ещё один TPU CTVOICE.TPU, происхождение которого я не смог определить.
В любом случае, поскольку все они включены в исходный код Avalon, компиляция проста:
TPC -B -U..\TPU -OMXPRPAS AVALON.PAS
Вам просто нужно использовать Turbo Pascal 7.0, потому что это, судя по всему, именно та версия, которая использовалась для компиляции TPU.
Ссылки
Paybacktime 2
![](https://habrastorage.org/getpro/habr/upload_files/bff/540/0a5/bff5400a532d0a11f1c727ceab480e84.jpeg)
Paybacktime 2 — это пошаговая тактическая игра для MS-DOS, в которую могут играть до 4-х игроков (некоторых игроков может заменить ИИ), вдохновлённая X-COM: Enemy Unknown. Первоначально игра была создана в 1994-1997 годах финскими разработчиками Нико Неватие и Кари Луоюс, а позже, в 2014 году, её исходный код, написанный на Turbo Pascal и Turbo Assembler, был выложен на github. Makefile отсутствует, и большинство командных файлов сломаны/отсутствуют, однако пакетный файл TP.BAT намекает нам на то, что нужно сделать. По какой-то причине мне удалось скомпилировать только файлы ассемблера с TASM, включенные в Borland C++ v3.1. Никакие другие версии TASM не работали (очень весело было устанавливать Borland C++ с 15 дискет!).
Ссылки
WetSpot 2
Эта игра особенная! Она единственная из списка написана на Basic! Точнее, QuickBasic 4.5. В ней есть продвинутые вещи, например, обход ограничения QBasic в 64 КБ за счёт разбиения кода на несколько модулей с использованием EMS, звука и музыки и т. д.
К тому же это реально захватывающая игра! Геймплей, кажется, вдохновлён аркадной игрой Pengo, но с улучшенной графикой. Она чем-то напоминает Goof Troop на SNES. Также в игре есть кооператив для двух игроков!
Если вы хотите скомпилировать игру, то проще всего сделать это через QBasic IDE с включённой быстрой библиотекой по умолчанию ( QB.EXE /L). Откройте WETSPOT2.PAS и создайте исполняемый файл из меню «Выполнить». Звуковой SBMIDI.exe драйвер поставляется с официального установочного диска Sound Blaster. Кстати, эта игра также была портирована на чистый C и SDL, так что если вы хотите в неё нормально играть, то это, пожалуй, лучший вариант.
Ссылки
Официальный сайт WetSpot 2 (веб-архив)
Оригинальный исходный код QBasic от Анджело Моттолы (веб-архив)
Keen Dreams
Эту игру также часто называют «Потерянным эпизодом Кина». История появления исходного кода довольно интересна. Игра, написанная iD software, принадлежала Softdisk, пока компания Flat Rock Software не приобрела весь каталог Softdisk. В 2014 году была проведена успешная краудфандинговая кампания по покупке прав и кода у Flat Rock и их дальнейшему обнародованию. Исходный код теперь доступен на github под лицензией GPL.
Код включает в себя файл проекта для Turbo C++, поэтому мы можем без проблем собрать исполняемый файл через IDE. Существует несколько версий игры, вам понадобится именно та, у которой код 1.93. Однако игра вылетает со страшной ошибкой CAL_CacheSprite: Bad shifts number!. Кажется, на Keen Wiki есть некоторая информация по этой теме, но мне не очень хочется в ней копаться.
Гораздо интереснее проект под названием omnispeak, который представляет собой современную версию с открытым исходным кодом на движке Goodbye, Galaxy! И самое крутое, что она компилируется для DOS!
Но не на самой DOS. В проекте используются современные компиляторы MinGW и djgpp для кросс-компиляции кода в исполняемый файл DOS. Понятия не имею о MinGW, но компиляция с использованием последней версии djgpp прошла без проблем. Просто запустите make PLATFORM=dos
или просто make
для версии SDL.
Ссылки
Abuse
Abuse — футуристический платформер в жанре «беги и стреляй», выпущенный в 1996 году для DOS и GNU/Linux. Вы перемещаетесь с помощью клавиатуры, целитесь и стреляете с помощью мыши и исследуете мрачный научно-фантастический мир, кишащий инопланетянами.
Исходный код был выпущен два года спустя, и с тех пор игра была перенесена на несколько платформ. Он написан на C++ и использует компилятор Watcom. Хотя проект включает make-файлы Watcom, компиляция не так проста, как запуск wmake. Я не слишком хорошо знаком с Watcom, но кажется, что некоторые файлы компоновщика отсутствуют. Кроме того, несмотря на все мои попытки, я не смог выполнить компиляцию с поддержкой сети IPX.
Одна библиотека под названием Sound Operating System Version 4.0 от компании Human Machine (которая может использоваться в более чем 150 играх) не включена в код. Сначала я подумал, что она вообще пропала из интернета, но в конце концов нашёл её в исходниках отменённого сиквела игры Corridor 7 .
Не буду перечислять все шаги, которые мне пришлось предпринять для сборки, но я создал патч, который делает все необходимое для компиляции (и ничего больше). После его применения все, что вам нужно сделать, это скопировать библиотеку SOS в корневую папку, а затем запустить её wmake /f makefile.wat в imlib и abuse . Вы можете найти патч на моем Gist.
Обратите внимание, что существует несколько версий игры. Исходный код для версии 2.00. Он также работает с данными fRaBs (Free Abuse).
Ссылки
Библиотека SOS (веб-архив)
Также достойны упоминания
Некоторые классические игры для DOS с открытым исходным кодом не попали в этот список. Например, Tyrian и Tyrian 2000 Джейсона Эмери. Эти потрясающие вертикальные шутеры изначально были с открытым исходным кодом, но с нюансами. Автор доверил исходный код Pascal/ASM только небольшой группе разработчиков, которые перенесли его на C и SDL, прежде чем выпустить как исходный порт OpenTyrian. Тем не менее, первоисточники не являются общедоступными.
Аналогичная судьба постигла и другую чрезвычайно популярную игру Liero. В данном случае исходный код Pascal был потерян из-за сбоя работы жёсткого диска. Тем временем сообщество открытого исходного кода разработало ремейк под названием OpenLiero, а позже получило благословение от автора на использование исходного имени, исключив Open из названия.
Scavenger — ещё одна игра, которая мне очень понравилось, но исходный код которой стал открытым только после конвертации в SDL.
Ссылки
Вот и всё. Я был очень удивлён, насколько гладко все прошло, учитывая, как сложно иногда бывает работать с кодом, который был написан всего пару лет назад.
Что ещё интересного есть в блоге Cloud4Y
→ Вирусу Микеланджело — 30 лет
→ Сделайте Linux похожим на Windows 95
→ Как не позволить техническому долгу одолеть вас
→ WD-40: средство, которое может почти всё
→ 30 лучших Python-проектов на GitHub на начало 2022 года
Подписывайтесь на наш Telegram-канал, чтобы не пропустить очередную статью. Пишем только по делу.