2012-07-17
ローグライクをつくる15のステップ
RogueBasinのHow to Write a Roguelike in 15 Stepsを適当に訳したメモ。
元記事はどちらかと言うと7DRLなどの小規模開発向けではあるものの、ゼロから創ってみたいという人には参考になるかも。
あるいはローグライクに含まれる要素のまとめと整理用。
Step 1 Decide to write a game(がんばるぞ!)
これを読んでいるほとんどの人は、この段階をすでに過ぎているのでしょう。しかし、ここで最初の一歩を踏み出すためのヒントをいくつか。オリジナルのローグライクを作りはじめる一番良い動機は、自分が遊んで楽しめるゲームを創りたいと思うことです。
決してローグライクとは何かを周りの人に尋ねたりしないことです。そんな必要はないのですから。たとえ、あなたが創ったゲームはローグライクではないと他人に言われたとしても、自分が楽しんで遊ぶことができるのであれば、それは成功といえるからです。これは決められた要求を満たすゲームを創る大会ではないのです。
計画を立てすぎないことです。もちろん、ある程度の計画を立てることは必要と感じるでしょうが、そこには必ず余裕を持たせましょう。でも、あらゆる状況を想定して計画するようなことはしてはいけません、無理ですから。設計書を書く際には、たくさんのことを決めなければいけないでしょう。その多くは、先にテストを書いて決めるのが、良い方法です。
ただ計画通りに制作を続けるのは楽しくありません。いくらかの改善できる余地を残しておきましょう。実装に失敗するのを恐れてはいけません。もし、柔軟に対応できない実装をしてしまったとしても、必要になった時に直せば問題ありません。そして、大抵の場合は、それでうまくいくものなのです。
Step 2 Hello world!(環境を整えよう)
開発環境を整えます。使用する言語とプラットフォーム、コンパイラ、インタプリタ、エディタ、バージョン管理、自動ビルド、その他に使うものを決め、快適な環境を用意しましょう。
使用するライブラリも決めてしまいます。これは、あとで変えることもできますが、変更の作業は大変かもしれません。移植性については考え過ぎないようにしましょう。あとで考えることもできます。自分にとって何が必要で、やりやすいかを考えてみて下さい。
ソースコード内のコメントや説明を書く際には、英語を使うとアドバイスを広く多くもらいやすくなります。*1
国際化については気にしなくても問題ありません。翻訳は大体、開発プロセスの後の方に行われます。
さあ、コードを書きはじめましょう。
Step 3 It's a boy!(画面表示とキー入力)
画面表示とキー入力から始めましょう。簡単に、画面のレイアウトを決め(あとで変えてもいいです)マップとキャラクター、ステータスやメッセージを出すルーチンを作ります。
キー入力を取得するルーチンを作成します(コンフィグファイルや、キーの再定義は使わないように)
@が何もない画面を歩きまわるデモを作りましょう。
メッセージを扱うルーチンを作成します、特にデバッグメッセージの部分はこれからよく使うことになるでしょう。
Step 4 The Map(マップとマップオブジェクト)
マップの構造を考えます。汎化にとらわれ過ぎないようにしましょう。あとで追加することもできます。(空の)マップを画面に表示します。必要ならスクロールさせます。幾つかの要素をマップに配置して、正しく表示されるか確認しましょう(ハードコードで構いません。マップ生成は後で作成します)
@を画面に登場させます。スクロールのテストを行い、'look'コマンドを実装してみましょう。
@を動かせるようにしましょう。壁との当たり判定などを加えます。必要ならば、ドアやその開閉用のコマンドも作成します。
Step 5 Saving/Loading(保存と読み込み)
ハードコードにしていたマップのデータを、ファイルから読み込めるようにします。マップを可読性のあるものにしておくと、いろいろな設定を試すことができます。
ゲームの状態を保存するsaveコマンドを作ります。まずマップ、それからゲームに登場するすべての要素を保存します。ここから先、保存する必要がある要素を作成する際には、保存する部分をできるだけ先に作って下さい。
保存ファイルと保存の仕方についてはhttp://roguebasin.roguelikedevelopment.org/index.php/Save_Filesに詳しい記事があります。saveの仕様を決める際に一読してみて下さい。
ファイルに関する部分を作成したら、ゲームやキーの設定ファイルを作ることができます。ここを可読にしておくことで、いろいろな問題を避けられるでしょう。
Step 6 It's alice! Alive!(モンスターとターン制)
モンスターの配置と、ターンのシステムを追加します。モンスターを一体作り、単純なAI(話す、その場に留まる、ランダムに移動する)持たせます。
単純な先手/後手のターン制を作ってみましょう。それから、自分の考えたターンシステムを実装していきます(単純なものからはじめて、しだいに複雑化させます)
開発が進行するごとにテストすることを忘れないで下さい。
Step 7 Interaction(戦闘システム)
生物(プレイヤ/モンスター)たちにステータスを持たせます。できるだけ単純なものにしておきましょう。必要になった時に追加するようにするのが一番ですが、「かっこいいから」という理由で追加してしまうのもわからなくはないです。
複数のモンスターが、互いに影響し合うような動作を食わます。それぞれがぶつかったり、攻撃したりできるようにします。モンスターのAIを発展させていき、プレイヤーを追ってくるようになります。
戦闘システムの実装とテストを行います。装備については考えず、様々な値で試してみましょう。
Step 8 Data files(データファイル)
生物のデータやマップの設定などをデータファイルに移動してまとめておきます。現段階では移せないものはそのままにしておきましょう。
Step 9 Items(アイテム)
アイテムを加えます。まずは、ただ拾えるようなアイテムを作ります。それから、アイテムにステータスや特徴を増やしていきましょう。インベントリ*2を見る、アイテムを拾う、捨てるコマンドを実装します。アイテムを装備したり使用できるようにしましょう(まだ効果はなくてもいいです)。あなたが望むなら、複数所持や入れ物などを実装してください。
この段階ではバランスを取るテストが必要となってきます。
Step 10 Magic(アイテム効果と特殊攻撃)
アイテムの効果や、モンスターの特殊攻撃、呪文などを追加します。それらを追加したらテストをします。全ての効果をすぐに実装する必要はありません。とりあえず、次の段階に進める程度のものを用意しておきましょう。
Step 11 Simple game(テストプレイ)
ハードコードされたシンプルなゲームを創ることを心がけて下さい。友人に遊んでもらい、あなたが実装した部分についてテストを繰り返します。そしてそのゲームが楽しいかどうか確認してみて下さい。
変更する必要があると感じたところを直していきます。テストを繰り返すことを忘れないで下さい。面白さがどこにあるかを遊んだ人に聞いてみて下さい。あるいは、自分で遊んでみて考えて下さい。時には、遊んですぐには気づかないこともあるかもしれません。
このステップは長く取る必要があります。ここで、あなたが楽しく思えるミニゲームを完成させてください。
Step 12 Levels(階の生成と移動)
マップ生成システムを作ります。階の移動や全体/ローカルマップの切り替え、街への移動などを実装します。移動時に階の状態を永続に保存するようにすれば、メモリを使いきることもなくなります。
深さによってモンスターやアイテムの配置を変えられるようにします。さらに、新たなモンスターやアイテムを加え、その能力や効果も増やして行きましょう。
Step 13 Experience(成長とスキル)
成長やスキルのシステムを作りこみます。モンスターとアイテムのステータスを調節していきます。キャラ作成画面をつくり、クラスや種族などを増やして行きましょう。
テストプレイを頻繁に行なっていきます。
Step 14 Citizens(店・クエスト・それ以外)
NPCや商人、クエストのシステムなど増やします。それ以外のシステムを拡張していきます。
Step 15 Free at last(あとは自由だ!)
一番最初に自分の考えたオリジナルの要素を実装し、テストします。自分のアイデアを、今作成しているゲームに合うように再構築していきましょう。
ついにあなたの考えたユニークなシステム*3が、ゲームの中で実際に動くことになるのです。
- 4 http://www.google.co.jp/url?sa=t&rct=j&q=ローグライク&source=newssearch&cd=1&ved=0CDEQFjAA&url=http://d.hatena.ne.jp/countable/20120717/1342505647&ei=FYgFULW1C4f-mAXwiKxC&usg=AFQjCNFNyE9ggkQE1KVRsY1uEY
- 4 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CGgQFjAA&url=http://d.hatena.ne.jp/countable/&ei=NEcVUPCdJ4nWmAXxlYHQAQ&usg=AFQjCNH-vQHoTBE9gvASaOc668I3Hk9Efw&sig2=aYmVoA_nMAUjyh14yYnThg
- 3 http://blog.livedoor.jp/muko650/
- 3 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=21&ved=0CFAQFjAAOBQ&url=http://d.hatena.ne.jp/countable/20100912/1284257037&ei=MIkHUM2kO6PsmAW2pvzKAw&usg=AFQjCNHPKvT695QUmMVwwYDxXl5_IzxJxA
- 3 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&ved=0CGAQFjAD&url=http://d.hatena.ne.jp/countable/20120717/1342505647&ei=dxwNUOH2FYnomAXKo4CPCg&usg=AFQjCNFNyE9ggkQE1KVRsY1uEYGzuXeaIQ&sig2=ENlT8fqgXzu8Ww4qG9qJkA
- 2 http://d.hatena.ne.jp/
- 2 http://d.hatena.ne.jp/keyword/コンパイラ
- 2 http://ezsch.ezweb.ne.jp/search/?query=エルディシュ&ct=0001&pd=1&sr=0001
- 2 http://fege.blog68.fc2.com/?tag=サウンドノベル&page=3
- 2 http://search.yahoo.co.jp/search?p=浜松渚の計算ノート&ei=UTF-8&fr=applpd&x=wrt