16 November DOOMソースコードを読み解く 第2回 今回も第1回と同じく、まだソースコード自体には立ち入らず、予備知識を付けるための周辺的な話をしてみたいと思います。 DOOMの魅力の一つが、ユーザーが自分でマップを作れるという点にある事は言うまでもないと思います。 しかし、DOOMはどうやってそれを可能にしたのでしょうか? id softwareは1997年の末にDOOMのゲームプログラムのソースコードを公開しましたが、実はDOOM関連のソースコードを公開したのはこれが初めてではありません。 正確な時期はわかりませんが、おそらくDOOMを発売して間もない時期に、id softwareは自分たちがDOOMの開発時に使ったツール群のソースコードを公開しています。 この中にDOOMの公式のレベルエディタであるDoomEDがありました。 そしてこのDoomEDのソースコードを元にして、プログラミングに通じた一部の人たちが独自のレベルエディタを作っていきました。 考えてみると、当時使われていたレベルエディタはすべて一般のユーザーが作った非公式なものだったのは不思議といえば不思議です。 何故そうなったかと言うと、公式のレベルエディタであるDoomEDがDOS/Windowsマシン用ではなく、NeXTマシン用に作られていたからです。 そこでソースコードだけを公開して、プログラミングの心得のあるユーザーに独自のレベルエディタを作る事を促したわけです。 話は少し逸れますが、NeXTというのは言うまでもなくアップルを追われた後にスティーブ・ジョブズが作ったコンピュータ会社です。 ジョブズには、どういう訳か教育機関向けのPCを作るという願望があって、NeXTも最初は大学などの教育機関向けに販売されたそうです。 ジョブズ復帰後のアップル復活のきっかけを作ったともいえる大ヒットした初代iMacも、発売前は教育機関向けのPCになると言われていました。 NeXTの場合は、教育機関向けのわりには値段が高かった事が失敗の原因と言われていたので、今度は低価格のiMacで再挑戦したかったのではないでしょうか。 話を元に戻すと、id softwareはこのようにNeXTを使ってDOOMを開発していましたが、DOSゲームが盛んだった頃は、開発だけはUNIX系のワークステーションを使う事は一般的に行われていたと思います。 結局当時のDOSマシンでは、あまりにも非力だったからでしょう。 それでも、NeXTを開発に使っていた会社はほとんどいなかったと思います。NeXTマシンのCPUはモトローラの68000系で、これは当時のMacやアミーガと同じですから、それほど性能が高いわけでもなかったと思います。 NeXTを採用したはっきりした理由はわかりませんが、とにかくそれによってDOOMの開発ツールのソースコードは、NeXTのOSであるNeXTSTEPの標準開発言語であるObjective-Cで書かれる事になりました。 そうは言っても、Objective-CはC言語の機能はすべて備えていて、John CarmackもなるべくC言語の機能だけを使っていたようなので、DOSなどへのポートが比較的容易だったようです。 下の画像は、NeXTSTEP上で開発中のDOOMの様子です。 この画像は、自分が持っているGAME DEVELOPER誌のバックナンバーを収めたCD-ROMの中の1994年1月号の記事からキャプチャしたものです。 自分は、DOOMのゲームプログラムのソースは公開して間もない頃から少しはいじってはいましたが、2003,4年頃にたまたまどこかでid softwareがそれよりも前に公開していた開発ツールの一つであるノードビルダーのソースを入手してから本格的にDOOMのソースポート等のプログラム作りを始めました。 BSPツリーのアルゴリズムについては既にだいたいはわかってはいましたが、このオリジナルのノードビルダーのソースコードを読んで具体的なBSPツリーの構築方法が理解できた事が大きかったです。WadCraftでのBSPツリーの構築の部分は、このコードをほぼそのままの形で使っています。 現在でもオリジナルのノードビルダーのソースコードはこちらからダウンロード出来ます。 PR