本書はTADS製作者用手引きの一部です。
Copyright (C) 1987, 1996 by
Michael J. Roberts. All rights reserved.
この手引きはN. K. Guy、tela designによってHTMLに変換されました。
序文
TADSは特にテキストアドベンチャーのために作り出されたコンピュータプログラミング言語です。その言語上の文法と構造は洗練されたアドベンチャーゲームを単純にかつ実現を容易にするようデザインされています。TADSはプロフェッショナルなアドベンチャーゲームに求められるすべての特徴を備えた完全なランタイムシステムを供給します。ですから、ゲーム作者は基礎部分のソフトウェアではなく、自分のアドベンチャーに集中することができます。
本節ではTADS、テキストアドベンチャー一般、そしてこの説明書の概観を明らかにします。
最初のテキストアドベンチャーは、いかにもふさわしいのですが、Adventureだと思われます。このゲームは洞穴のインタラクティブ・シミュレーションでした。プレーヤーは「north」や「get rod,」のような命令をタイプすることでゲームに働きかけ、ゲームはその命令の結果を述べることでもって応答するというものでした。
多くの点で、Adventureはとても初歩的でした。たとえば、プレーヤーの命令は1または2語までに限られ、可能な行動の範囲はとても小さかったのです。しかし、Adventureはそれ以前のコンピュータ上またはその他のどんなゲームとも違っていました。そして、またたく間に膨大な信奉者を魅惑しました。非常に人気が出たのですが、実際、それはその元祖に因む「アドベンチャーゲーム」という一つのジャンルを生んだほどです。ジャンルが成熟し、コンピュータハードウェアがもっと洗練されたプログラムを扱えるようになるにつれて、多くの改良がアドベンチャーゲームに施されてきましたが、基本的な発想はほとんど変わらぬまま残っています。
アドベンチャーゲームは幅広い大衆に受けています。ほとんどのアーケードスタイルのゲームと違い、アドベンチャーはやり遂げることができ、ゲームを終えるまで数日、数週間、もしくは数か月もかかることがあります。理想的にいうと、アドベンチャーゲームはプレーヤーを虜にする豪華な物語です。
多くの人々がアドベンチャーゲームというジャンルに強い興味を抱き、自分自身でアドベンチャーを書いてみたいと思っています。ほとんどの人はゲームを書き始めたものの、書かねばならないコードの膨大さにあっさり参ってしまいます。アドベンチャーを書くために、作者になる可能性のある人はまず、プレーヤーコマンドを理解するパーサー(解読器)、ゲームをセーブ・再開するためのコードを書き、シナリオ中の物をシミュレートするためのデータ構造を整え、他にも複雑なルーチンをたくさん書かなければいけません。発想豊かな人々が全員コンピュータの専門家であるわけではないので、多くの潜在的アドベンチャー作家がこの分野に挑戦することを思いとどまらされています。
幸いなことに、アドベンチャーゲームがこなさなければいけない複雑な処理はどんなゲームでもたいてい同じか非常に近いものです。アドベンチャーゲーム開発に興味を持っていた一部の人々はこうした共通の処理―メッセージの表示、ゲーム内オブジェクトの状態の点検と設定、ゲームの保存と再開など―は、ゲームがいくつあっても共通のサブルーチン・ライブラリを共有して行えることを発見しました。他の人々はこの発想を押し進めて、特にテキストアドベンチャーの実現を目的に設計された専用言語がゲーム製作を簡略化できることを実証しています。TADSはそういう言語なのです。
TADSでゲームを書く作者は汎用言語でゲームを書くことに勝る恩恵を思い知るでしょう。TADSを利用することの利点は:
すでに膨大な数のコードが用意されていること:ある完全なプレーヤーコマンド・パーサーは、一コマンド中の複数のオブジェクト、一行中の複数のコマンド、「all」という言葉の使用、その他多くの洗練された特長、たとえば、ゲームの保存と再開のためのファイル操作コード、ゲームの成績簿をファイルに保存するコード、ゲームに必要なディスクとメモリの領域を軽減するための文字圧縮理論、それにユーザインタフェースコード、その他何もないところから書くと時間がかかる機能を実現しています。それゆえに、ゲーム製作者はゲームに集中し、それを支える低レベルのユーティリティーコードは無視することができるのです。
TADSのソースコードはTADSシステムが走るコンピュータ上でならいかなる修正も無しにコンパイルできます。TADSは多くのコンピュータシステム上で使えますから、ゲームをファイル転送以上の苦労はないまま自然に多くのコンピュータへ移せるということです。それに加えて、TADSのバージョン2では、コンパイルされたバイナリ・ゲーム・ファイルは完全にポータブルなので、それを新しいシステムに移したときに再コンパイルする必要さえありません。汎用言語で書かれたゲームを移植するには通常、相当の作業が必要になりますが、TADSのプログラムは常になんの変更もせずにすべての環境で同じように走ります。
TADSはテキストアドベンチャーに絞ってデザインされていますから、汎用言語よりもかなり簡単にゲームを作ることができます。その言語はアドベンチャーゲーム作成を容易にするためのいくつかの構文と、ゲームデザインを自然なものにするオブジェクト指向性を持っています。さらに、システムに用意されている標準オブジェクトクラスは、アドベンチャーに共通の構成要素がほとんどコーディングしなくても装備されるようにデザインされているのです。ですから、もし、TADSが提供するサポートコードとポータビリティーのすべてが、ある汎用言語に見い出せると仮定しても、TADSの構文論および構造上の能率性の点でテキストアドベンチャーの具現化に関して優位に立つのです。
TADSのバージョン1は非常によくできた、有用なソフトウェアでしたが、常に改良の余地が存在していました。私たちはTADSをさらに柔軟で強力なものにしたいと思いましたし、システムの強化のためにバージョン1のユーザがくれた提案の多くに応えたかったのです。バージョン2の新しい特長でとりわけ重要なもののいくつかを下に並べました。
バーチュアル・オブジェクト・キャッシュ: バージョン2の最重要の新しい特長の一つは、ゲームが有効メモリよりも大きくてもよくなる仮想メモリサブシステムです。バージョン1では、ゲームが一度にメモリの中へ納まる必要があったのに対し、TADSバージョン2は一定の時に使われるオブジェクトがメモリに入っていることだけしか要求しません。他のオブジェクトはディスク・ファイルに保存されます。この新しい特長のおかげで巨大なゲームをメモリの少ないコンピュータで走らせることができるようになり、TADSバージョン2の受け入れ能力は事実上すべてのコンピュータシステム上で無限になりました。
アンドゥ: ランタイムシステムはプレーヤーが「undo」コマンドを使えるようになりました。いくつかのアドベンチャーゲームシステムと違って、TADSは大量のアンドゥ情報を保持し、プレーヤーが多数の手順(初期設定で100以上)をさかのぼれるようになっています。アンドゥ機能はゲームを遊ぶ際の楽しさを増してくれるでしょう。なぜなら危険なことを試みるときに頻繁に保存と再開を行うわずらわしさを取り除いてくれるからです。
Cライクな文法の追加: TADSバージョン2はC言語からたくさんの新しい構文を追加しました。for, do-while, switchそして goto構文がCと同様に使えるようになりました。ローカル変数は宣言の中で初期化され、1ブロックの初めに複数のlocal文を持つことができます。 演算子は'+='、 '-='、 '*='、 '/='、 '++'、 '-'、そして'、' (コンマ演算子)が加わり、Cと同じように働きます(+=はリストと文字列、-=はリストと一緒に使えるという拡張を伴う)。
暗黙のself: selfのプロパティを評価したり割り当てるとき、そのプロパティの「self.」プレフィクスを省略できます―プロパティ名は単にそれがローカル変数であるかのように利用されます。
プロパティとファンクション・ポインタ: 変数の中にプロパティまたは関数への「pointer」を保存し、プロパティまたは関数の呼び出しに利用できます。
ステータス行のカスタマイズ: ステータス行のスコア部分に表示したいものを何でも表示できるようになりました。この部分にテキスト文字列なら何でも表示できますから、標準のスコアとターン・カウンタの表示の代わりに日付、プレーヤーのランク、その他お好きなものを表示できます。
テキストのハイライト表示: ハイライトになったテキストを表示できます。ただし、いくつかのシステムでは、このテキストは違った色で現われます。その他では異なる字面(ボールドまたはイタリック)で出てきます。
バージョン2はTADSのほとんど完全な書き直しです。幸い、私たちはTADSを改良したかっただけで、置き換えるつもりではなかったので、バージョン1で書かれたゲームがバージョン2でも動くことを確認しました。バージョン1で書かれたゲームは自動的にバージョン2の新しい特長の多く、バーチュアル・オブジェクト・キャッシュやランタイム・アンドゥなどを利用することになります。バージョン2で書かれた新しいゲームの製作者は追加されたCライクな文法のようにさらに多くのものを利用できます。
この文書はTADSを使ってゲームを実現しようと思うゲームデザイナーを対象にしています。この手引きは製作者になるかもしれない人に必要条件を一切課さないようにしてシステムを説明するつもりですが、もしあなたがすでにPascalやCのような従来からある構造化言語に通じているなら、TADSの使い方を学ぶ上で最もたやすくなるでしょう。オブジェクト指向プログラミングの概念に精通していることも助けになります。
これが本書の内容の概観です:
第1章 あなたをサンプルのゲームに案内し、TADSのゲームがどのように動くのかについて見取図を理解してもらいます。
第2章 オブジェクト指向プログラミングを一般論として説明します。TADSはこのスタイルのプログラミングに非常に影響を受けています。
第3章 言語についての詳しい紹介です。
第4章 TADSプログラムのランタイム環境について説明します。特に、この章はプレーヤーコマンドパーサーを解説します。
第5章 はTADS言語のレファレンスです。
第6章 は発想から具体化まで、TADSでゲームを書く過程について述べます。
第7章 はアドベンチャーゲームの様々な共通要素を実現する方法を説明します。また、TADSプログラムの書き方の豊富な実例を含んでいます。
若干の付録はいくつかの話題についての付加的な詳細を提供します: compilerの使用、エラーメッセージ, 標準的なアドベンチャーの定義、そして良質のアドベンチャーゲームをデザインする方法。
TADSを学ぶためにこの手引きを利用するなら、1章と2章から始めるとよいでしょう、しかし、システムの雰囲気をつかむだけで十分です。すべての詳細をすぐに理解しようと気を使うことはありません。次に言語に親しむために3章に進んでください。この章を読む間、この言語を用いてアドベンチャーを書く方法が即座に明確になることはないかもしれません。しかし、さしあたっては、ただ言語の全体図を理解するようにしてください。それから、4章を読んでください。そこにはアドベンチャーを書くためにいかに言語を使うかが述べられています。この章はTADSのランタイム環境を総論として、プレーヤー・コマンド・パーサーを各論として説明しています。TADSを学ぶ過程で、あなたはほとんどまちがいなく、TADSソフトウェアと一緒に供給される長ったらしいサンプルゲームを頻繁に参照することの有用性に気付くことでしょう。それはTADS言語の構文が実際のゲームの中でどのように使われているか、その実例を多く含んでいるからです。
5章はTADS言語を詳しく解説しているレファレンスです。この章は自習教材として意図されたものではありません。しかしTADSゲーム製作の詳細への簡単な到達方法を供給するようデザインされています。同様に、いくつかの付録もシステムの日の当たらない部分、たとえば、コンパイラのオプションやエラーメッセージなどの顕微鏡的細部を文書化しています。
Text Adventure Development Systemはこのドキュメンテーションの少なからぬ準備とも言える多年に渡る努力のたまものです。私はこのプロジェクトに貢献してくれた多くの方々に感謝を申し上げたいと思います。Jim Cserは今や古典となったHigh Tech Drifterを書くためにTADSの初期バージョンを使ってくれました。そして、Steve McAdamsは私と一緒にDeep Space Drifterに携わりました。これらの十分な規模のゲームを実現するうえで得た経験には計り知れない価値がありました。私は同時にこの手引きを検証したりシステムに含められたサンプルゲームのプレーテストをしてくれた方々、その他にプロジェクトの道程において助言を下さった多くの方々にもお礼を申し上げたいと思います。
感想と提案を寄せ、私がシステムのサポートと改良を続けるよう励ましてくれたバージョン1のたくさんのユーザにお礼を言いたいと思います。格別の感謝をTADSゲームのUnnkulianシリーズの製作者、David Baggett、Chris Nebel、David Learyに。彼らはTADSバージョン2のテストを手伝ってくれました。そしてTADSゲームがどれほど質の高いものになりうるかを示すことでTADSの人気に多大な貢献をしました。そして、Andy MillerにはすばらしいTADSmore山のカバーアートのお礼として。
思考の生命力は冒険の中にある。
ALFRED NORTH WHITEHEAD, Dialogues of Alfred North Whitehead (1953)
私はエンジニアを理解しています - 彼らは物事を変化させるのが大好きです。
DR. McCOY, Star Trek: The Motion Picture (1979)
許可と著作権 | 目次 | 第1章 |