Представлен открытый проект FPS.cob - шутер от первого лица на COBOL
Состоялся релиз необычного игрового проекта FPS.cob - шутера от первого лица, полностью написанного на языке программирования COBOL. Этот язык традиционно используют для разработки коммерческих и банковских систем, отчётности и корпоративных приложений, а не интерактивных игр, тем более шутеров. Именно поэтому проект привлёк внимание как демонстрация того, на что способен "нетипичный" для геймдева стек.
Автор, выступающий под ником icitry, поставил перед собой экспериментальную задачу: проверить, можно ли реализовать 2.5D-игру, наподобие ранних шутеров 90‑х, исключительно средствами COBOL. В основе FPS.cob лежит технология рейкастинга - тот же подход, на котором базировались ранние версии Doom и других классических шутеров от первого лица. По сути, игра оперирует плоской картой уровня, а трёхмерное изображение формируется путём "пробрасывания лучей" от точки зрения игрока.
Проект распространяется с открытым исходным кодом под лицензией Apache License 2.0. Это означает, что исходники можно изучать, модифицировать и использовать в собственных разработках с соблюдением условий лицензии. Для любителей низкоуровневых экспериментов и ретро-графики FPS.cob может стать интересным учебным примером того, как "несовместимые" технологии всё же можно подружить.
Главная сложность, с которой столкнулся разработчик, связана с самой природой COBOL. У языка нет собственного современного графического стека, привычных библиотек для работы с окнами, буферами и пикселями, которые имеются, к примеру, в C/C++ или языках с широким набором игровых фреймворков. В результате FPS.cob рендерит каждый кадр как необработанное растровое изображение и выводит его напрямую в STDOUT. Уже затем внешний инструмент или оболочка может интерпретировать этот поток байтов как картинку и отобразить игроку.
Аналогично организован и ввод: из-за отсутствия подходящих библиотек для работы с клавиатурой в среде COBOL команды от пользователя обрабатываются обходными путями. Управление в игре фактически реализовано через взаимодействие с потоками ввода-вывода, а не через привычные игровой индустрии API. Такой подход выглядит архаично, но хорошо демонстрирует гибкость стандартных механизмов ввода/вывода даже в "старых" языках.
FPS.cob относится к классу 2.5D-шутеров. Это значит, что игра формально использует двумерное представление уровня (плоскую карту с координатами и высотами), но обеспечивает визуальный эффект трёхмерного пространства. В отличие от полноценного 3D с полигональными моделями и сложной камерой, тут нет настоящей трёхмерной геометрии, однако игрок всё равно видит коридоры, стены, разную глубину сцены и перспективу. Для COBOL, который изначально создавался для отчётных форм и пакетной обработки данных, само появление подобного визуального уровня - уже нетривиальное достижение.
Стоит отметить, что FPS.cob - не первый заметный эксперимент в области игр и развлечений на COBOL. Ранее разработчик Фабиан Мейер представил открытый проект CobolCraft - сервер популярной песочницы Minecraft, переписанный на COBOL. Как и в случае с шутером, этот серверный проект показал, что язык, считающийся сугубо "деловым", можно адаптировать и к нестандартным сценариям. CobolCraft написан с использованием компилятора GnuCOBOL и рассчитан на запуск в среде Linux. Автор не заявлял официальную поддержку Windows, но развёртывание возможно через контейнеризацию с помощью Docker, что частично снимает платформенные ограничения. Лицензирование там иное: код CobolCraft распространяется по лицензии MIT, ещё более либеральной в плане использования и встраивания в другие продукты.
Подобные проекты важно рассматривать не как попытку "заменить" современные игровые движки, а как демонстрацию пределов гибкости старых языков и инструментов. COBOL десятилетиями оставался в тени геймдева, но при этом продолжал двигать банки, страховые и госструктуры. Эксперименты вроде FPS.cob наглядно показывают, что базовые принципы программирования - работа с памятью, потоками данных, математикой - универсальны, а различаются в первую очередь удобство и экосистема.
С практической точки зрения FPS.cob вряд ли станет основой полноценной коммерческой игры. Зато его исходный код может использоваться как учебный материал для нескольких задач сразу: знакомство с рейкастингом и 2.5D-рендерингом, понимание работы потоков ввода-вывода, изучение структуры COBOL-программ, пример обхода ограничений языка. Такой код полезен студентам, энтузиастам ретро-графики и разработчикам, которым приходится поддерживать старые COBOL-системы, но хочется взглянуть на язык "под другим углом".
Интересно и то, какое послание несут подобные эксперименты профессиональному сообществу. На фоне вечных дискуссий "какой язык лучше для игр" FPS.cob показывает, что вопрос часто лежит не в плоскости "можно или нельзя", а в области "разумно или нет". Да, сделать шутер на COBOL возможно. Но объём вспомогательных костылей и ограничений настолько велик, что для реальной разработки логичнее выбрать инструменты, уже оснащённые нужным стеком. Тем не менее, такой проект вдохновляет на творческие подвиги, ломает стереотипы и напоминает, что освоенный до тонкостей язык можно повернуть в неожиданных направлениях.
Сам выбор именно 2.5D-формата для FPS.cob тоже не случаен. Полноценный трёхмерный движок с полигональной графикой потребовал бы большого количества низкоуровневой математики, сложных структур данных и постоянной работы с памятью в реальном времени. Для COBOL, который не заточен под подобные операции, это превратилось бы в почти неподъёмную задачу. Рейкастинг, напротив, позволяет обойтись более "плоской" моделью мира: достаточно хранить карту уровня в таблицах, а затем вычислять пересечения лучей со стенами. Это хорошо стыкуется с табличной природой бизнес-логики COBOL и его сильной стороной - обработкой структурированных данных.
Нельзя забывать и о культурной составляющей. Многие разработчики, выросшие на Doom и других ранних шутерах, относятся к 2.5D-графике с теплотой и ностальгией. Реализовать подобный опыт на заведомо "неигровом" языке - способ отдать дань истории, одновременно подчёркивая, насколько далеко шагнули игровые технологии. Если раньше такой рендеринг был вынужденной мерой из-за ограничений "железа", то теперь он становится сознательным стилистическим выбором.
Для тех, кто интересуется внутренним устройством FPS.cob, наибольшую ценность представляет архитектура проекта. В нём можно увидеть, как организованы модули, отвечающие за обработку уровня, расчёт лучей, генерацию кадров и взаимодействие с пользователем через потоки. Даже если сам COBOL не планируется использовать в будущих проектах, логика разбивки на компоненты, структура данных и алгоритмы рейкастинга легко переносятся на другие языки - от C до Python.
В более широком смысле FPS.cob и CobolCraft подталкивают к пересмотру отношения к старым технологиям. Вместо жёсткого деления на "современные" и "устаревшие" гораздо продуктивнее смотреть на язык как на инструмент с определёнными сильными и слабыми сторонами. COBOL остаётся незаменимым в ряде критически важных отраслей, и именно поэтому появление игровых и экспериментальных проектов на нём особенно любопытно: оно помогает привлечь новое поколение разработчиков к изучению языка, который до сих пор лежит в основе огромного числа систем по всему миру.
Таким образом, FPS.cob - это не просто курьёзный шутер на COBOL, а показательный эксперимент на стыке ретро-геймдева, обучающих примеров и языкового фольклора. Он демонстрирует, что даже строгий прикладной язык для бизнес-задач можно заставить рисовать стены, коридоры и "стрелять" в псевдотрёхмерном пространстве, если подойти к проблеме с достаточной долей упорства и любопытства.



