Времена 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.
И управление памятью в старых языках давало дополнительный уровень сложности в понимании и разработке.
Поэтому сейчас даже лучше получается создавать ретро игры, чем раньше.
Лучше меньше - да лучше.