| パラダイム | 命令型(手続き型)、構造化された |
|---|---|
| デザイン: | ジョン・カーマック |
| 開発者 | idソフトウェア |
| 初登場 | 1996 |
| タイピングの規律 | 静的、強い |
| 主な実装 | |
| Quake C コンパイラ、FastQCC、FTEQCC、QCCx、GMQCC | |
| 影響を受けた | |
| C | |
QuakeC は、 1996 年にid SoftwareのJohn Carmackがビデオ ゲームQuakeの一部をプログラムするために開発したコンパイル言語です。QuakeC を使用すると、プログラマーは武器を追加したり、ゲーム ロジックや物理を変更したり、複雑なシナリオをプログラムしたりして、 Quake をかなりカスタマイズできます。また、AI の一部、トリガー、レベルの変更など、ゲーム自体の多くの側面を制御するために使用できます。Quakeエンジンは、 QuakeC を使用する唯一のゲーム エンジンでした。その後のエンジンでは、カスタマイズにCで記述されたDLLゲーム モジュールが使用され、id Tech 4以降ではC++ が使用されました。
概要
id Softwareのオリジナルの Quakeゲーム ロジックの QuakeC ソースは1996 年に公開され、キャプチャー ザ フラッグなどの改造のベースとして使用されました。[1] QuakeC ソース コードは、qcc と呼ばれるツールを使用して、 progs.dat と呼ばれるファイルに保存されるバイトコードにコンパイルされます。Quake 改造のプログラマーは、ソース コードを明かすことなく、 progs.dat バイトコードを公開できます。ほとんどの Quake改造は、この方法で公開されました。
QuakeC により、 Quakeエンジンは一人称視点シューティング ゲームのジャンルの方向性を主導するようになりました。[要出典]無制限の拡張性を追加することでビデオ ゲームの寿命を延ばすという Carmack のアイデア (拡張性はDoomですでに大きな役割を果たしていました) のおかげで、ゲーマーとプログラマーの巨大なインターネット コミュニティが生まれ、多くの現代のマルチプレイヤー ゲームが何らかの形で拡張可能になりました。[要出典]
QuakeCは、 Quakeの実行中にprogs.datファイルを継続的に解釈するため、解釈型として知られています。 [2]
制限とその後の解決策
QuakeC の構文は、その名前の通りC プログラミング言語の構文に基づいていますが、新しい型、構造体、配列、または「エンティティ」型 (常に参照) 以外の参照の実装はサポートしていません。また、QuakeC では、多くの組み込み関数 (QuakeC コードでプロトタイプ化されているが、実際にはゲーム エンジン内で定義され、C で記述されている関数) が、一時文字列バッファに文字列を返すという問題もあります。この一時文字列バッファには、一度に 1 つの文字列しか保持できません。つまり、次のような構造は、
SomeFunction (ftos (num1), ftos (num2));
は失敗します。これは、SomeFunction が何かを行う前に、2 回目の呼び出しftos(浮動小数点値を文字列に変換する) によって最初の呼び出しで返された文字列が上書きされるためです。QuakeC には、元のゲームでは必要のない文字列処理関数やファイル処理関数は含まれていません。
当時のほとんどのビデオゲームは、ゲームロジックをプレーンな C/C++ で記述し、実行ファイルにコンパイルしていたため、処理速度が速かったです。しかし、このためコミュニティがMOD を作成するのが難しくなり、ゲームを別のプラットフォーム ( Linuxなど) に移植するプロセスにコストがかかっていました。
このような利点があるにもかかわらず、カスタムスクリプト言語とインタープリタを使用してゲームロジックを実装するという選択肢は、QuakeCの全体的な柔軟性のなさ、ますます複雑化するゲームロジック、ゲームロジックをネイティブのダイナミックリンクライブラリにパッケージ化することで得られるパフォーマンス、およびすでに確立されたプログラミング言語のコミュニティ、ツール、教育資料、およびドキュメントを活用できる利点のために、コンパイルされたCコードに置き換えられ、次世代のQuake IIエンジンから削除されました。[3]
ネイティブ コードの配布により、セキュリティと移植性に関する新たな懸念が生じました。QuakeC バイトコードでは悪用される余地がほとんどありませんが、ネイティブ コードはマシン全体にアクセスできます。QuakeC バイトコードは、Quake を実行できるマシンであればどこでも動作しました。ネイティブ コードへのコンパイルは、より複雑なプログラミング環境をセットアップするよう求められるため、初心者の MOD 開発者にとって参入障壁をさらに高めました。Quake III エンジンによって実装された最終的な解決策は、元の QuakeC の利点と C をネイティブ コードにコンパイルする利点を組み合わせることでした。lcc C コンパイラは、標準 C をバイトコードにコンパイルするように拡張され、QuakeC と同様に仮想マシンで解釈できるようになりました。これにより、セキュリティ、移植性、ツール チェーンの問題は解決されましたが、ネイティブ コードのパフォーマンス上の利点は失われました。これは、サポートされているマシンで実行時にバイトコードをネイティブ コードにさらにコンパイルすることで解決されました。[4]
修正されたコンパイラと言語拡張
逆コンパイラと再コンパイラはArmin Rigoによってリリースされました(それぞれ、およびDEACCと呼ばれます)。これらのプログラムはリバースエンジニアリングREACCのプロセスを通じて作成され、のリリース前に公開された可能性があります。[5]qcc
id Software は、 1996 年に QuakeC コンパイラである のソースをqcc、オリジナルの QuakeC コードとともにリリースしました。その後すぐに、Jonathan Royfastqccと Ryan "FrikaC" Smith の FrikQCC など、修正バージョンが登場しました。これらのバージョンでは、機能、最適化、コンパイル速度の向上が追加されました。
1999 年に id Software が Quake のエンジンのコードをGNU General Public License (GPL) でリリースしたとき、バイトコード インタープリタの動作が調査され、JP Grossmanqccxや FrikQCC の新しいバージョンなどの新しい QuakeC コンパイラがリリースされました。これらのコンパイラは、バイトコードが未修正の Quake エンジンによって適切に解釈されるように、下位互換性のある方法で新しく発見された機能を活用しました。新しい機能には、配列、ポインタ、整数、for ループ、文字列操作などがあります。
Quakeエンジンのソース コードが変更できるようになったため、新しい組み込み関数の形で QuakeC にさらなる機能が追加されました。QuakeC のコーダーが長い間待ち望んでいた機能がついに実現し、QuakeC にはファイルと文字列の処理関数、拡張された文字列バッファー、より多くの数学関数などが追加されました。ただし、これらの変更を利用したプログラマーは、変更されていない Quake エンジンとの下位互換性を失いました。
Xonoticバージョン0.7以降ではgmqccコンパイラが使用されています。 [6]
クライアント側QuakeC
一部の強化されたQuakeエンジン(特にDarkplacesとFTEQW)[要説明]は、通常のQuakeC(現在では一般的にサーバーサイドQuakeCと呼ばれる)の拡張機能をサポートしており、 Quakeエンジンのクライアント側のみのスクリプト(CSQC(クライアントサイドQuakeC)とも略される)を可能にします。これは、GUI、HUD [要説明]、およびサーバー上でシミュレートしてネットワーク経由で転送する必要のない視覚的に重い効果に特に役立ちます。[7]
参照
参考文献
- ^ Lasse Lehtinen (1996-07-25). 「QuakeC リリース」. Quake および QuakeWorld の歴史. 2011-01-14閲覧。
- ^ Andrew Wu. 「Quake C の基礎」 。2013年 4 月 6 日閲覧。
- ^ Carmack, John (1997 年 3 月 13 日) . 「ここで議論すべき技術的な問題があります。18 ページ」(PDF) .plan . id Software . 2018 年11 月 5 日閲覧。
- ^ Carmack, John (1999年7月24日). 「1999年7月24日、54ページ」(PDF) .plan . id Software . 2018年11月5日閲覧。
- ^ 「Armin Rigo とのインタビュー - 1997 年 2 月 12 日」。1997 年 4 月 30 日。1997 年 4 月 30 日時点のオリジナルよりアーカイブ。
- ^ 「Xonotic 0.7 リリース」。
- ^ 「クライアントサイドQuakeC」。QuakeWiki。2012年9月30日。 2016年11月16日閲覧。
外部リンク
- id の github リポジトリには、qcc (QuakeC コンパイラ) の C ソースコードが含まれています。
- QuakeWorld ゲーム ロジックの QuakeC ソース コードを含む id の github リポジトリ
- 非公式QuakeC仕様
- QC MODの大規模なコレクション(ソースを含む)
- Inside3d - 素晴らしいQCチュートリアルのコレクションがここにあります
- InsideQC - 閉鎖されたInside3Dの遺産を引き継ぐ新しいウェブサイト
