Первые игры под DOS - Когда создавать игры было просто

 Помню момент, когда только начал создавать игры. Машины были медленные (3-4Мгц) и памяти было мало (500Кб для программы и данных),  а также хранилище на дискетах (512Кб).


И несмотря на такие ограничения игры было создавать интересно. 


Прочитав книгу "Zen графики" (чёрная книга) понял как управлять регистрами EGA/VGA и создавать спецэффекты стало проще (там много алгоритмов расписывалось, а также хитрости работы в режиме 320х240)


Так как память графического адаптера отображалась 1к1 в память компьютера - то рисовать на экране было так же просто, как установить байт в памяти.


Графические возможности Turbo Pascal/C были очень ограниченны. А уж про синхронизацию экрана без регистров можно было забыть (часто появлялся эффект разрыва). И скорость вывода оставляла желать лучшего.


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


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


Решение было найдено в виде таблиц, которые заранее рассчитываешь и сохраняешь в файле данных. И моделька, хоть и закрашенная по Гуро (до Фонга не дорос тогда и машины с ним справлялись хуже) появилась на экране. 


Возникла другая проблема - нехватка памяти. Учитывая, что у тебя было 500Кб памяти максимум на всё, то чистыми их было 130Кб. 

Пришлось использовать оверлеи и загружать части программы из него. Благо язык это позволял. 



И так шаг за шагом игра обрастала функциями.


Но понял одну вещь - создавать что-то ценное на институтском компе - не очень хорошая идея.


В один прекрасный день, когда забыл сохранить данные на дискету кто-то решил погулять по диску. И нашёл мои исходники, и удалил. Просто забавы ради.

 

Тогда это был прямо шок. Вера в человечность пошатнулась. Урок, который был нужен студенту.


Справившись с потрясением, и немного отойдя решил сделать несколько простых игрушек. У Quick basic-а была отличная среда для того времени, и он прекрасно компилировал exe-шники.


Хотел написать дум с видом сверху, но очень сильно тормозил просчёт ИИ для 12 мобов. Пришлось хорошо посидеть и подумать.


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

При этом другие даже играли и получали удовольствие. Вот только мнение друзей часто перевешивает всё остальное. 


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


Тогда я заинтересовался Yamah-ой. Но у нас не было. А в соседнем институте, где учился и работал мой друг уже поставили простые компы на замену этим маленьким машинкам.


Позже пришла Win31 и стало интересно, как же под неё писать игры. Оказалось, что сложно. Особенно с не вытесняющей многозадачностью сложность возрастала сильно.


Поэтому пришлось оставить разработку игр под 3.1 на будущее. Благо пришла Windows 95 с DirectX. Наконец вернулся прямой доступ к памяти, хотя всё ещё спрайтовый (хоть и можно было заблокировать поверхность в памяти и играть с пикселями через байты - если помнишь как их хранит система). И появилась возможность писать дальше.


Только минимальная программа на Visual C++ занимала 100 строк. А это только управление памятью, и инициализация DirectDraw. 


Вывод и код движка занимал больше. Мне нравится печатать, но тогда я понял, что создавать программы без среды (Delphi, CBuilder) оказалось слишком заморочным.


Библиотеки или фреймворки (движки) тогда ещё не было возможности сделать (понимания было мало, да и интернет был по карточкам - только что в библиотеке было, то и читали и применяли).


И так шаг за шагом всё усложнялась разработка игр. Потом пришёл OpenGL, и его сложный API. Так как он был чисто 3д, то приходилось изголяться с ним.

Но это ещё цветочки - Direct3D с его огромными интерфейсами и не совсем понятной документацией показывал себя не с лучшей стороны. 


Да, удалось сделать на нём курсовую, а потом и игру про шарик в 3д. Но это был очень неприятный опыт.


И так год за годом всё усложнялось. А воспоминания о том, что можно просто написать игру становились всё грустнее.


Потом появились движки, сначала в виде библиотек, а затем и как самостоятельные. И каждый надо было изучить, чтобы эффективно работать.

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


Пришлось отдохнуть и найти простые фреймворки в виде MonoGame/GlScene для создания игр.


И лишь недавно с приходом новых языков go/C# и библиотек для C-Raylib, Pascal-Castle Engine, С++ - Allegro - простота создания вернулась опять.


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


Но постоянно тянуло на новые знания. В погоне за "золотым молотком", который улучшит и ускорит разработку прошли годы. 


Игры получались сырые, и новые проекты создавались и перетягивали на себя внимание.


А каждый год что-то новое приходило и привлекало к себе снова.

***

Посидев на Unity 4 года понял, что мне нужно вернуться к чему то простому.

Godot и Defold обещали многое, но оказались достаточно сложными для изучения.

Мой подход «изучить всё, а потом атаковать» всегда был медленным.

Но последнее время стал уставать от такого.


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

Причём создание своего инструментария тоже входит в эту идею фикс: «полный контроль»


И присмотревшись к go/pixel и c/raylib (а также рассмотрев pascal/sdl, C#/monogame, и другие фреймворки) начал делать как раньше.

Ощущения вернулись.

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


И создавая новые игры (хоть и мелкие) получаешь такую радость.


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

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


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

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

Приходилось создавать систему для отладки уже имеющейся.

А потом отлаживать саму систему отладки.


Поэтому, когда оглядываюсь назад, то вижу, что ограничения - это благо. Ты творишь маленькую игру с ограниченными возможностями машины. И радуешься самому творчеству и своему уму, когда решишь, как же поместить этот код или графику в такой малый объём памяти.


Сейчас эти же ощущения дают фентезийные консоли Pic-8, Tic-80 и прочее.

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

А само создание очень радует своей линейностью и не перегруженностью.

И язык lua - очень простой, но при этом мультипарадигменный с функциями первого порядка позволяет создать по настоящему изящный и простой код.


Правда надо ограничивать себя и в этом, поскольку динамическая структура языка и управление памятью дают такую свободу, которой не было на Pascal/C.

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


Поэтому сейчас даже лучше получается создавать ретро игры, чем раньше.


Лучше меньше - да лучше.

Комментарии

Популярные сообщения