На Reddit появилась большая дискуссия о языках программирования, которые в разное время использовались для разработки видеоигр. Пользователи вспомнили написанные на BASIC игры, эпоху ассемблера и переход на C++, а также поделились историями из собственной практики.
Язык ассемблера использовали в 80-е и начале 90-х. В качестве примера можно привести первые три части Sonic The Hedgehog, Super Mario, а также ряд других проектов той эпохи.
Однако, как заметил Raidenkyu, для разных платформ использовался разный синтаксис в зависимости от типов процессора. 68000 — для Sega Genesis, 6502 — для NES, 65816 — для SNES.
Часть пользователей отметила, что некоторые ранние игры были написаны на BASIC. Большинство из них не были коммерчески успешными или не продавались вовсе, но были и исключения. Например, версия Sid Meier’s Pirates для Commodore 64 была преимущественно написана на BASIC.
Некоторые коммерческие игры в 80-х все же были написаны на BASIC. В то время разработчики-одиночки копировали их на кассеты и продавали в местных компьютерных магазинах. Насколько я помню, первая версия оригинальной Ultima была написана на Applesoft BASIC. об играх, написанных на BASIC
По словам пользователя codethulu, игры для первой PlayStation, Nintendo 64 и других консолей того поколения уже писали на C. Со временем распространение получил C++ и стал одним из стандартов на игровом рынке.
Пользователь philbgarner заметил, что разработчики игр для PC одними из первых перешли на языки C и C++, поскольку персональные компьютеры меньше зависели от ограничений памяти. Он также подчеркнул, что в те времена часто применялся гибридный подход: для создания графики использовали низкоуровневые языки программирования вроде ассемблера, а игровую логику писали на C/C++.
Я сталкивался с таким гибридным программированием на одном из занятий по компьютерное архитектуре. Мы писали части программы на ассемблере, в которых использовалось аппаратное обеспечение низкого уровня (например, установка частотного множителя и привязка выходного сигнала генератора к внутреннему динамику для генерации тонов), а другие части — на C++ (например, генерация песен). об использовании гибридного подхода
Пользователь SanityInAnarchy отметил, что многие известные видеоигры из 90-х использовали и ассемблер, и байт-код. В качестве примера он привел Quake, в котором низкоуровневые элементы писались на ассемблере, а высокоуровневая игровая логика — на QuakeC, специальном языке, разработанном Джоном Кармаком (John Carmack) в 1996 году.
Несмотря на то, что массовая разработка на ассемблере осталась в прошлом, некоторые разработчики по-прежнему использовали этот язык в конце 90-х и начале нулевых. Например, Крис Сойер (Chris Sawyer) полностью написал RollerCoaster Tycoon на ассемблере x86.
Naughty Dog на заре PlayStation 2 написала собственный диалект языка Lisp — Game Oriented Assembly Lisp (GOAL). Впервые он был использован для разработки Jak and Daxter: The Precursor Legacy. Со временем студия отказалась от GOAL, но иногда использовала его для скриптов в эпоху PlayStation 3 — например, в первой The Last of Us.
BillyTenderness посчитал забавным, что сегодня C++ превратился, по сути, в низкоуровневый язык. Его часто используют для графики и физики, а сценарные языки вроде Blueprint и Lua — для игровой логики.
Один из пользователей отметил, что никогда не слышал о применении сценарных языков в таком ключе. Однако в комментариях привели немало примеров использования такого подхода.
В играх серии Civilization для создания игровой логики как раз используется Lua (в четвертой части для этих целей применялся Python). По словам пользователя Noxime, по этой причине ходы на последних этапах игры традиционно становятся такими медленными.
Для этих целей Lua используется и в Metal Gear Solid V. Также в нулевые разработчики нередко использовали собственные сценарные языки для создания игровой логики.
По словам Putnam3145, сценарные языки в 5-10 раз медленнее, но компьютеры становятся быстрее, и поэтому скриптовые части больше не являются узким местом. Вопрос лишь в оптимизации.
В разговоре о языках программирования нельзя не упомянуть Java. В начале нулевых его использовали для разных игр, включая браузерную MMORPG RuneScape. Однако главным применением Java в эпоху до смартфонов были мобильные игры.
Примерно в нулевые J2ME (подмножество платформы Java) использовалось для разработки мобильных игр — например, для Nokia 3410. Такой код компилировали в байт-код, который затем на телефоне интерпретировался в машинный. Поэтому разработчикам приходилось делать несколько модификаций для разных платформ. о мобильной разработке в 2000-х
Пользователь filisoft отметил, что мобильные игры для Symbian и Blackberry писались на C/C++. Некоторые устройства были достаточно мощными, чтобы вытянуть отдельные 3D-элементы, а потому пакет таких тайтлов мог достигать нескольких сотен килобайт. Для сравнения, у проектов на Java были куда более строгие ограничения на размер — например, 48 КБ. Поэтому разработчикам приходилась сильно сжимать свои игры.
Однако с выходом iPhone и распространением смартфонов Java как язык для мобильной разработки, по сути, умер. Сегодня зачастую используют C# (Unity) и C++ (Unreal Engine и некоторые собственные движки).
Комментарии
Ответить