11 年前、中学 3 年の頃に開発した End of the World という 3D アクションゲームが出てきました

私は現在コンピュータネットワークに関するプログラミングをよくやっていますが、実は昔は 3D ゲームプログラミングをやりたいと思っていました。現在でも時間があれば 3D ゲームを開発してフリーウェアとして公開して楽しみたいと考えています。


私が中学 3 年生のとき (2000 年) は、Windows 2000DirectX 7.0 が動作する時代でした。確か、グラフィックアクセラレータでハードウェア T&L が利用できるようになった頃だったと思います。その頃に、任天堂から出ていた N64 用の「ゴールデンアイ 007」という FPS ゲーム、および Half-Life をやってみて、非常に面白いと思い、ぜひそのようなゲームを作ってフリーウェアで公開したいと思いました。


Half-Life では PC 用のゲームのため、MOD と呼ばれる追加のモデルデータ、スクリプト、ステージデータを作成することにより自分で新しいゲームを開発することができるのですが、N64 用の「ゴールデンアイ 007」は専用機用のゲームですので、自分でステージを作成することはできません (最近、インターネットで検索すると、頭のおかしい米国人がゴールデンアイの ROM イメージを吸い出して、逆アセンブリし、解析して、さらには独自のステージデータを作成するというところまでやっているというのを見かけましたが、さすがにそこまでやる気力はありませんでした)。
そこで、ゴールデンアイとよく似たゲームエンジンを自分で一から開発すれば良いのではないかと思い付きました。それを実現するために一応 Direct3D の勉強や 3D の基礎的な演算方法に関する学習をしてみて、3 ヶ月くらいで開発したゲームとして「End of the World」という物騒なタイトルのフリーウェアがあります。


この「End of the World」は昔は Web サイトで公開していた気がしますが、長い間消滅してしまっていて、どこにいったかわからなかったものが、最近スクリーンショットが発掘されましたので、懐かしいと思い以下に掲載したいと思います。


なお、このゲームは、Direct3D 関係の細かいユーティリティ関数を除き、すべての部分は一から C 言語で開発したものです。既存のゲームエンジンは一切使っていません。

ゴールデンアイのパクりのユーザーインターフェイス

当時は N64 用の「ゴールデンアイ 007」の熱狂的なユーザーでしたので、ゴールデンアイとほとんど同一のゲームエンジンを作りたいと思っていました。そのため、まずはゲームを開始する前のメニュー画面や各ステージのミッションを表示するための画面のユーザーインターフェイスを作りました。

上の画面をよく見ると、5 個のステージがあることがわかります。確か、最初から順にクリアしていかないと、次のステージをプレイできないという仕組みだったと思います。本当は 25 ステージくらいを作りたいと考えていたのですが、結局 5 までしか作っていません。
ところで、5 個のステージの名称は以下のようになっています。

  1. WTC ビル
  2. ヤスシ・ヤクザ
  3. ダム
  4. 化学工場
  5. 尼崎市

ステージ 3、4 は、ゴールデンアイのパクりです。1、2、5 は独自に考えたものです。
特筆すべき奇特な点は、ステージ 5 のタイトルがなんと尼崎市であることです。いきなりものすごくローカルな話になってしまっています。

ステージ 1 「WTC ビル」

ステージ 1 の「WTC ビル」を開始するときに表示されるミッションの詳細の画面は以下のようになっていました。


ものすごく大層なゲームのように見えて、実際にはミッションの内容は「金塊を盗み出せ」や「証拠隠滅のため、ビルの機械室にプラスチック爆弾をセットし、脱出せよ」といった単に私欲を満たすための低レベルな任務になっているところが笑えます。


念のために言うと、このゲームを作って公開したのは 2001 年に WTC ビルが本当に爆破された日よりも 1 年以上前です。


ゲームを開始すると、まずは WTC ビルの屋上のヘリポートのようなところから開始されます。しかし、不思議なことに、頭上にはどう見てもスター・ウォーズの X ウイング戦闘に見える物体が浮んでいます。確か、海外のモデルデータを配っているサイトからパクってきた覚えがあります。


ビルの中に入って階段を降りていくと、なぜか木箱があります。木箱は銃で 5 発撃つと爆発します。爆発は連鎖的に起こります。


さらに進むと、敵兵が出てきます。このモデルデータとアニメーションデータもどこかの海外のサイトからパクってきたものだと思います。しかし、確か顔のテクスチャだけは書き換えて、友達の顔写真を勝手に貼り付けていた記憶があります。


WTC ビルは 2 棟が並んで建っているので、ガラス越しに隣のビルが見えます。ガラスを銃で撃つと粉々になって割れます。こういう細かいところが異様に凝っています。


ミッション中に死亡すると、ゴールデンアイのパクりですので、ちゃんと上のほうから血液が流れてきて、自分の視点は錯乱して最後は地面に倒れるというような描写が開始されます。


任務はプラスチック爆弾を機械室にセットしてから 60 秒以内にビルの正面玄関から出ればクリアだったと思います。このスクリーンショットは仮に 60 秒以内に脱出できなかった場合に本当に爆弾が爆発して死亡する様子のものです。なお、60 秒のカウンタはものすごく細かく 100 分の 1 秒単位で表示されますが、このカウンタが表示されるのは全ゲーム中ここだけであるにもかかわらず、99 時間 99 分 99.99 秒まで表示することができるような書式指定文字列を用いて文字列描画をしている点が気になります。

ステージ 2 「ヤスシ・ヤクザ」

WTC ビル (場所はニューヨーク) をクリアすると、次のステージはなんと「ヤスシ・グループ 本部 神戸市北区」に飛びます。いきなりローカルな土地に飛ぶ訳です。最初の画面で「金を借りるなら ヤクシ・グループ 今ならなんと金利 530% / 日」という宣伝看板が大きく標示されたビルが映し出されます。


確かこのステージの目的は、昔お金をたくさん「ヤスシ・グループ」から借りたが、金利が法外であり、返済することができないので、代わりに「ヤスシ・グループ 本部 神戸市北区」のビルに侵入して「ヤスシ・ヤクザ」というよくわからない組長を暗殺するというものだったと思います。
「ヤスシ・グループ」のビルは、神戸市北区にありますので、周囲はあまり都市化されておらず、緑が豊かな地です。そこをビルに向かって進むと、警備員がたくさん出てくるので、射殺しなければなりません。しかし、警備員以外にも、一般市民が出てきます。もし一般市民を 1 人でも射殺してしまった場合は、任務が失敗になるという厳しい設定です。一般市民も警備員と全く同じ顔、服装をしているという点が難しいところです。ただし、手に銃を持っているか否かでその日人が警備員か一般市民であるかを見分けることができます。でも、それを見分けようとしている間に相手が警備員であれば撃たれてしまってこちらが死亡するので、ほとんど見分けることは無理です。だから、何度も死亡しながら少しずつ進み、すべての警備員と一般市民の配置を暗記するまで最後まで行けないという、かなりの超難関クソゲーとなってしまっています。


やはり神戸市北区ですので、六甲山という山の中を通ってビルに辿り着かなければなりません。六甲山の中にはトンネルがあり、なぜか水が溜まっていますが、ちゃんと橋がかけてあり、その上を歩くと対岸へ行くことができます。この水が半透明で、しかもちゃんと水面上の景色を反射して描画しているという手の入れようです。このゲームはこういうどうでもよい細部が異様に凝っているにもかかわらず、ゲームの難易度や面白さという点ではほとんど真面目に調整されていません。

ステージ 3 「ダム」、ステージ 4 「化学工場」

この 2 つのステージはほとんどゴールデンアイからのパクりです。ステージの中のテクスチャもパクりだった気がします。ゴールデンアイをプレイ中にそれをビデオキャプチャカードにつないで PC でテクスチャを保存して利用している感じです (今考えると著作権的にまずい)。


ゴールデンアイのダムのステージのマニアの人なら喜ぶと思いますが、ちゃんとダム湖の対岸には謎の塔が設置されています。


ダムから飛び降りると化学工場の入口があります。化学工場の中にはトイレがあり、敵兵が何人かいます。

ステージ 5 「尼崎市

ステージ 5 はいきなりものすごくローカルな市の名前のステージになります。このステージ間のギャップと脈絡の無さがこのゲームの醍醐味でもあります。
尼崎市には西側に武庫川という川が流れており、それが隣接する西宮市との間の境界になっていますが、このステージではちゃんと武庫川の川や土手、橋も再現されています。尼崎市マニアが見れば喜ぶに違いありません。


しかし、現実の尼崎市と違うところは、このようにものすごく立派な高層ビルが建っている点です。このビルは遠くから見るとなぜか上のほうに「Forum 2000」というバナー広告のようなテクスチャが貼ってあります。「Forum 2000」というのは確かその当時 Microsoft の Web サイトにアクセスするとトップにそのバナーが貼ってあったのでそれをそのままテクスチャにしたという、特に意味はないものだったと思います。


このステージではスナイパー・ライフルを持っているという設定になっています。スコープが付いていて、望遠することができます。そこでビルの右下あたりを望遠すると、なんと、ビルは「Microsotf 社」のものであるということがわかります。Microsoft ではなく、Microsotf です。このビルの中に入ってセキュリティカードを奪取し、次に別のビルから、このビルの屋上にいるボスを殺せばゲームクリアという設定だったと思われます。

まとめ

End of the World は思い付きで数ヶ月で作ったゲームであり、これを開発したのは中学 3 年か高校 1 年の頃であったため、ほとんどまともなプログラミングの作法やデータ構造、アルゴリズムなどを知らずにプログラミングしたものです。例えば、どのような操作をする場合でも、ローカル変数はほとんど使わず、すべてグローバル変数として定義されている巨大な配列のデータをいじって何とかするというような、今考えるとものすごく品質の低いプログラムになっています。メモリリークも酷く、特にテクスチャリソースが明らかにリークしており、10 回くらいステージの開始、終了を継続すると、一旦リソース不足になってゲームが強制終了するので、再起動しなければならないというようなものになっています。


今からこのようなゲームを、楽しみのために開発すれば、当時よりももう少し品質の高いゲームを作れるのではないかと考えています。ゲームプログラムを開発する際に色々分からないことを調べることで、数学や 3D に関する知識が増えるという点も魅力的ですので、そのうち時間を見つけてまた 3D ゲームプログラミングをやってみたいと思っています。