QuakeC - QuakeC

QuakeC
Парадигмаимператив (процедурный ), структурированный
РазработаноДжон Кармак
Разработчикid Программное обеспечение
Впервые появился1996
Печатная дисциплинастатический, сильный
Основной реализации
Компилятор Quake C, FastQCC, FTEQCC, QCCx, GMQCC
Под влиянием
C

QuakeC это компилируемый язык разработан в 1996 г. Джон Кармак из id Программное обеспечение программировать части видео игра Землетрясение. Используя QuakeC, программист может настраивать Землетрясение в огромной степени за счет добавления оружия, изменения логики и физики игры и программирования сложных сценариев. Его можно использовать для управления многими аспектами самой игры, такими как части ИИ, триггеры или изменения уровня. В Землетрясение двигатель был единственным игровым движком, использующим QuakeC. Следующие двигатели используются DLL игровые модули для настройки, написанные на C, и C ++ из id Tech 4 на.

Обзор

Исходник QuakeC к оригиналу id Программное обеспечение Землетрясение игровая логика была опубликована в 1996 году и использовалась в качестве основы для таких модификаций, как захват флага и другие.[1] Исходный код QuakeC компилируется с помощью инструмента под названием qcc в байт-код хранится в файле под названием progs.dat. Программисты Землетрясение модификации могут затем публиковать свои progs.dat байт-код без раскрытия их исходного кода. Наиболее Землетрясение моды были опубликованы таким образом.

QuakeC разрешил Землетрясение двигатель доминировать над направлением шутер от первого лица жанр.[нужна цитата ] Благодаря идее Кармака продлить жизнь видеоигр за счет добавления неограниченной расширяемости (расширяемость уже сыграла большую роль в Рок ), возникло огромное интернет-сообщество геймеров и программистов, и многие современные многопользовательские игры в той или иной форме можно расширять.[нужна цитата ]

QuakeC известен как интерпретируемый, потому что как Землетрясение выполняется, он постоянно интерпретирует файл progs.dat.[2]

Ограничения и последующие решения

В синтаксис QuakeC основан на Язык программирования C, объясняя свое имя, но он не поддерживает реализацию новых типов, структур, массивов или каких-либо ссылок, кроме типа «сущность» (который всегда является ссылкой). QuakeC также страдает от того факта, что многие встроенные функции (функции, прототипы в коде QuakeC, но фактически определенные в игровом движке и написанные на C) возвращают строки во временном буфере строк, который может содержать только одну строку в любой момент времени. Другими словами, такая конструкция, как

SomeFunction (ftos (num1), ftos (num2));

не удастся, потому что второй вызов ftos (который преобразует значение с плавающей запятой в строку) перезаписывает строку, возвращенную первым вызовом, до того, как SomeFunction сможет что-то с ней сделать. QuakeC не содержит функций обработки строк или файлов, которые просто не нужны исходной игре.

Логика большинства видеоигр в то время была написана на простом C / C ++ и составлен в исполняемый файл, который работает быстрее. Однако из-за этого сообществу сложнее создавать моды и это делает процесс перенос игру на другую платформу (например, GNU / Linux ) дороже.

Несмотря на свои преимущества, выбор реализации игровой логики с использованием настраиваемого языка сценариев и устный переводчик был исключен из следующего поколения Quake II движок в пользу составленного C кода из-за общей негибкости QuakeC, все более сложной игровой логики, производительности, которую можно получить, упаковав игровую логику в родную библиотека динамической компоновки, а также преимущество использования уже созданного сообщества языков программирования, инструментов, учебных материалов и документации.[3]

Распространение собственного кода создало новые проблемы с безопасностью и переносимостью. Байт-код QuakeC дает мало возможностей для вреда, в то время как нативный код имеет доступ ко всей машине. Байт-код QuakeC также работал на любой машине, которая могла запускать Quake. Компиляция в собственный код добавила дополнительный барьер для входа для начинающих разработчиков модов, потому что их просили настроить более сложный среда программирования. Возможное решение, реализованное Quake III движок, заключалось в объединении преимуществ оригинального QuakeC с преимуществами компиляции C в собственный код. В lcc C компилятор был расширен для компиляции стандартного C в байт-код, который мог быть интерпретирован виртуальная машина аналогично QuakeC. Это решило проблемы безопасности, переносимости и цепочки инструментов, но потеряло преимущество в производительности собственного кода. Это было решено путем дальнейшей компиляции байт-кода в собственный код во время выполнения на поддерживаемых машинах.[4]

Модифицированные компиляторы и языковые расширения

id Программное обеспечение выпустил источник qcc, их компилятор QuakeC, вместе с оригинальным кодом QuakeC в 1996 году. Вскоре появились модифицированные версии, в том числе код Джонатана Роя fastqcc и Райан "FrikaC" Смит FrikQCC. Это добавленная функциональность, оптимизация и повышение скорости компиляции.

В 1999 году, когда id Software выпустила код движка Quake под Стандартная общественная лицензия GNU (GPL) была изучена работа интерпретатора байт-кода и выпущены новые компиляторы QuakeC, такие как JP Grossman qccx и новая версия FrikQCC. Эти компиляторы использовали преимущества недавно обнаруженных функций обратно совместимым способом, так что байт-код все еще мог правильно интерпретироваться немодифицированными движками Quake. Новые функции включают массивы, указатели, целые числа, циклы for и манипуляции со строками.

С Землетрясение исходный код движка теперь может быть изменен, в QuakeC были добавлены дополнительные функции в виде новых встроенных функций. Функции, к которым давно стремились разработчики QuakeC, наконец, достигли своей реализации, поскольку QuakeC теперь имеет функции обработки файлов и строк, увеличенные строковые буферы, больше математических функций и так далее. Однако программисты, воспользовавшиеся этими изменениями, потеряли обратную совместимость с немодифицированным движком Quake.

Ксонотический начиная с версии 0.7 использует gmqcc компилятор.[5]

Клиентская сторона QuakeC (CSQC)

Некоторые улучшенные движки Quake (в частности, Darkplaces и FTEQW) поддерживают расширение обычного QuakeC (теперь обычно называемого QuakeC на стороне сервера или SSQC), которое позволяет создавать скрипты движка Quake только на стороне клиента. Это особенно полезно для графических интерфейсов, HUD и любых визуально тяжелых эффектов, которые не нужно моделировать на сервере и передавать по сети.[6]

Смотрите также

Рекомендации

  1. ^ Лассе Лехтинен (1996-07-25). «QuakeC выпущен». История Quake и QuakeWorld. Получено 2011-01-14.
  2. ^ Эндрю Ву. "Основы Quake C". Получено 2013-04-06.
  3. ^ Кармак, Джон (13 марта 1997 г.). «Вот технический вопрос для обсуждения, стр.18» (PDF). .строить планы. id Программное обеспечение. Получено 5 ноября 2018.
  4. ^ Кармак, Джон (24 июля 1999 г.). "24 июля 1999 г., стр. 54" (PDF). .строить планы. id Программное обеспечение. Получено 5 ноября 2018.
  5. ^ Выпуск Xonotic 0.7
  6. ^ "Клиентский QuakeC". QuakeWiki. Получено 2016-11-16.

внешняя ссылка