Jump to content

QuakeC

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

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

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

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

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

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

[ редактировать ]

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

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

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

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

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

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

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

[ редактировать ]

Декомпилятор и рекомпилятор были выпущены Армином Риго (называемым DEACC и REACC соответственно). Эти программы были созданы в процессе обратного проектирования и, скорее всего, были опубликованы до выпуска qcc. [5]

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

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

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

Xonotic, начиная с версии 0.7, использует компилятор gmqcc . [6]

Клиентская часть QuakeC

[ редактировать ]

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

См. также

[ редактировать ]
  1. ^ Лассе Лехтинен (25 июля 1996 г.). «QuakeC выпущен» . История Quake и QuakeWorld . Проверено 14 января 2011 г.
  2. ^ Эндрю Ву. «Основы Quake C» . Проверено 6 апреля 2013 г.
  3. ^ Кармак, Джон (13 марта 1997 г.). «Здесь необходимо обсудить технический вопрос, стр. 18» (PDF) . .план . программное обеспечение id . Проверено 5 ноября 2018 г.
  4. ^ Кармак, Джон (24 июля 1999 г.). «24 июля 1999 г., стр. 54» (PDF) . .план . программное обеспечение id . Проверено 5 ноября 2018 г.
  5. ^ «Интервью с Армином Риго – 12 февраля 1997 г.» . 30 апреля 1997 г. Архивировано из оригинала 30 апреля 1997 г.
  6. ^ «Выпуск Xonotic 0.7» .
  7. ^ «Клиентский QuakeC» . Квейквики . 30 сентября 2012 года . Проверено 16 ноября 2016 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 194a0b5e6c91556c90029f4b4b085d54__1714614600
URL1:https://arc.ask3.ru/arc/aa/19/54/194a0b5e6c91556c90029f4b4b085d54.html
Заголовок, (Title) документа по адресу, URL1:
QuakeC - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)