Времена 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.

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

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

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

1818
4 комментария

Комментарий недоступен

1

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

но да, ощущение полной свободы завораживает, и если посмотреть что заталкивает народ в 256 байт кода (даже не в 4к!), то невольно удивляешься, куда и когда мы свернули не туда)

3

Люблю вымышленные консоли. В них реально процесс создания какой-то линейный, понятный сходу. Ещё и все инструменты под рукой. Что-то простое получается делать на ходу. Я Pico-8 использовал для быстрой визуализации некоторых лабораторок в вузе :D

1