今回の作業内容ですが、
・サウンド関係の実装
・データセーブ&ロード周り
大きなところではこの2点です。
まず、サウンドについて。
機能としてはSE、BGMの再生とBGMのフェードアウトくらいと凝った処理は入れてないのですが、やっぱり音が鳴るようになると、ぐっといい感じになりますね。これはいつも思うことですが。
で、音といえば、開発中ということで手頃なSE素材はないかと手持ちのCDをあれこれ見てみると使えそうなものがありました。
「ストリートファイターZERO2」のサントラです。
このCDには曲はもちろんのこと、ヒット音やらカーソル音などのSEも収録されていてまさにうってつけの一枚といえるでしょう(笑)。
「SoundEngine」というフリーソフトでWAVファイルを切り出して鳴らしてみました。
やたら打撃音が気持ちよかったり、戦闘開始時に鳴る「ファイトッ!」のかけ声やら、敵モンスターを全滅させたときの「KO!」ボイスなど、かなり新鮮かつ爽快です。これそのまま使えへんかなーと真剣に思ったり(^^;
一方、BGMも趣味全開で選曲してみました。
タイトル曲は「スーパーストリートファイターII」のオープニング、フィールド(ダンジョン)には「イースIII」から「翼を持った少年(ステージ開始時に鳴るあの曲ですね)」をチョイス。
バトルは「女神転生II」のやたら格好いい戦闘曲(FC版のサントラ利用)で盛り上げ、城下町には「ソーサリアン」の「ここで逢えるね(そのものズバリ、お城の曲)」を鳴らしてみました。いやぁ、やたら豪華で実に俺好み(^^)
このまま配布できないのが本当に残念です…って、なんか完全に話が脱線しているぞ(苦笑)。
え〜っと、作業内容について書くと、SE、BGM双方の再生にはライセンスフリーなオーディオフォーマット
「OggVorbis」を用いました。
開発用のSDKが配布されているほか、ウェブ上のいくつかのプログラム系サイトでは「OggVorbis」を用いた音楽再生についての解説があがっていたりと音を鳴らすまでの作業自体は割と楽でしたね。
とても参考になったサイトを2つ挙げておくと
「ToruのDirectXプログラミング講座」(Toruさん)
「すきやきのゲームアルゴリズムとゲームプログラミング」(すきやきさん)
特にすきやきさんのサイトでは、DirectMusic上の「OggVorbis」ストリーム再生のサンプルプログラムが掲載されていて非常に助かりました。
Microsoft提供のサンプルを元に独自に手を入れられたそうですが、これがあるのとないのとでは作業の効率が全然違っていたと思います。
今回サウンド関係での作業としては、
1.BGM、SEごとにマスターボリュームを設定できるようにして「0」の時はミュート扱いにした
2.BGMのフェードアウト処理を入れた
3.SEデータは「WAV」と「Ogg」のどちらでも鳴らせるようにした
4.BGM再生において「あらかじめバッファに全て展開してから再生」、「ストリーム再生」に対応
4.で2通りの再生方法に対応したのは、こちらの開発環境(VAIO「VGN-S90」)ではDirectMusicで「OggVorbis」のストリーム再生を行うと、負荷が高いのか、時々引っかかるような感じになることがあるのです。
音のひっかかりが気になる場合は「バッファに展開してから再生」方式を選べるようにコンフィグに盛り込むつもりです。
このあたり、もう少し時間をとって検証したい(DirectSoundでの再生も試したい)ところですが、今後の課題になりそうかな。
あと、DirectMusicを実装してから、時々アプリケーションの終了時にアクセス違反が発生するようになり、対策として全セグメント(DirectMusicでの音の単位)の停止から解放までの間にウェイト(現状では200ミリ秒。多分もう少し短くても大丈夫っぽい)を入れると問題が出なくなったとか、データのキャッシュ周りでこれまた落ちることがあったのを解決したりと、それなりに落ち込みもしましたが、私は元気です(苦笑)。
あと、作業とは直接関係ないものの、SEデータについてはツテを頼りにメールで連絡を入れてみたものの、返答がもらえなくて落ち込んでいます。
まぁ、全面的にこちらのわがままなので仕方ないのですが、正直当てにしていたので痛いですね。
え〜、気を取り直して。
そういえば、ここまで一枚のSSもないのはめずらしいかも(^^;
データセーブとロードが入りました。
「城下町」の「宿屋」でデータセーブができます。
セーブするゲームデータは5つから選択できます(右側SS)。
ウィンドウの左にある「>」がカーソルですが、仮のものです。
今後どういう風に表示するか検討しています。ウィンドウの背景カラーを変えるかなぁ。
タイトル画面でリターンキーを押すと「スタートメニュー」が表示されるようになりました。
ご覧の通り、まだどう見ても仮(デバッグ文字での表示)ですが(苦笑)。
「CONTINUE」を選ぶと「データロード」画面になります(右側SS)。
ちなみにセーブファイル名は
「SAVE??.NMD(NayutaMemoirDataの略)」で
「DATA\SAVE」フォルダに作成されます。
それにしてもゲームデータのセーブやロードが入るといよいよプレイ環境が整ってきたような気がしますね。
まぁ、実際にはデータ関連(敵やらアイテムやらもろもろ)がまだサッパリなので遊ぶにはまだちと辛いですが。
今週は「iniファイル」によるコンフィグ処理(とりあえず、プレイヤーの名前やら上記のサウンド関連オプションをこちらから読み込むようにする)と文字フォント表示処理の改良(現状のD3DXFontを用いた描画ではあまりにも重いので)を行う予定です。
また、次回にはプレビュー版も更新できそうかな。
開発環境で鳴らしているサウンドデータは配布できないので、結局音なしになってしまいますが…。がっくし。
久々に新しいプレビュー版を公開します。
今版では、とりあえず「提出版」に向けた「バトル」「フィールド」「城下町」の各モードが一通り入りました。
phase.0152 preview.0005
このあと、データの作成(装備品やらアイテム、敵モンスターのデータがほとんど入っていないので)をしつつ、プログラムの整理や改良、見た目の強化(ヒットマークの追加など)をしてひと区切りとする予定です。
あと、新規作成分としてデータセーブ関係とサウンド処理が残っていますが、なんというか、プレビュー版もようやく格好が付いてきたというか。
…といっても今回のプレビュー版では「材料が揃った」というレベルなので、ゲームバランスについては考慮できていません。
敵の体力やらもろもろの数値関連がかなり適当なので、あんまりおもしろくない…つーか、はっきり言ってつまんないと思います(自爆)。
まぁ、そこら辺は5月に入ってからの作業でなんとかしたいところですが…。
さて、今回は1ヶ月半ぶりのプレビュー版の更新ということで、簡単にゲームの流れと操作について説明しておきましょう。
左側SSは、ゲーム開始直後の状態です。このダンジョンは3階層ありますので、とりあえず最下層を目指してみてください。
「城下町」に戻るには、左上にある出口に移動します(右側SS)。
「城下町」のメニューです。
「パーティ」は、自分とパートナーキャラの状態を確認できます(右側SS)。
「宿屋」では、HPとSPの回復。「教会」では死んでしまったキャラの復活。
「冒険者の店」では装備品とアイテムの売買。「魔術師ギルド」では魔法の習得が行えます。
で、「冒険に出発」を選ぶとさっきのダンジョンに戻れます。
バトルに勝利すると経験値が貯まって、レベルアップします。
左側SSにある「セルフレベル」というのは、プレイヤー自身のレベルのことです。
「nayuta」では「魔法」「装備」についてもレベルアップの概念が存在するので、それらとの区別のためにこう呼んでいます。
では、セルフレベルが上がったので、プレイヤーを「強化」してみましょう。
ダンジョン内で「ボタン2(スペースキー)」を押すと「コマンドメニュー」が開きます(右側SS)。
「コマンドメニュー」から「パーティ」→「ステータス」を選んだところです。
この画面で自分、またはパートナーキャラのステータスを確認できます。
「PL切り替え」を選ぶか「ボタン3(Zキー)」で表示するプレイヤーを切り替え、「表示切り替え」か「ボタン4(Xキー)」で表示項目が切り替わります。
「強化」を選ぶと(右側SS)、プレイヤーの能力値や属性値を強化できます。
画面中の「GP」が成長ポイントで、6ポイントありますね。カーソルキー上下で項目を選んで、左右で能力の増減ができます。
「魔法」「装備」についても同様で、バトル終了時に「魔法レベル」「装備レベル」があがるとGPがもらえます。
「魔法レベル」は魔法を使用するごとに、「装備レベル」は「武器攻撃」やダメージを受けると「熟練率」が加算されていきます。
なお各「熟練率」は上記ステータス画面で(表示切り替えすると)確認できます。
以上が「nayuta」の基本システムです。
それでは、バトルを重ねてお金(エリク)を稼ぎ、「冒険者の店」で装備やアイテムを購入してみてください。
「魔術師の店」で魔法を習得してみてもいいでしょう。
まだ購入できる種類が本当に少ないですが、だいたいの雰囲気は掴めるかと思います。
最後に今週の作業は、
・バトル関係の処理を繋ぎなおして、いろいろ更新
・内部処理の整理・更新
・「レベルアップ」をホンチャン仕様に
・サウンド処理の作成開始
思ったより内部処理の整理に時間を取られてしまいました。
それにしてもC++になってから結構「プログラムの整理」をやっているような気がします(^^;
とりあえず作ってみて仕様がかっちり固まると「こうした方がよさそうだ」というのが見えてくるというか…。
クラス間の繋がりなどでよりベターと思えるものが見えてくるとどうしても直さずにはいられなくなったり(苦笑)。
最初にがんがんソースを書いていって、一通りできるとよりシンプルに削っていくという感じですかねぇ。
さて、前回書いていた「イニシャルスタート」「セーブ・ロード」関係は後回しとして、先にサウンド処理を作り始めました。
手始めにいくつかのプログラム情報系サイトを参考にして(というか、ほぼそのまま)作ってみたのですが、WAVやMIDIファイルを鳴らすだけなら本当に簡単ですね。DirectMusicすげ〜(笑)。
というわけで、来週はサウンド関係の続きを作っていきます。
今回の更新内容ですが、結構変わっています。
・「魔法」の仕様を変更
・「属性」の種類を変更
・「城下町」に「魔術師ギルド」「宿屋」「教会」を追加
・「パーティ」に「ステータス」「強化」を追加
前回書いたように、「魔法」の風呂敷をたたんだ…というか、アイディアを整理して新仕様に移行しました。
具体的には「スキルと魔法の統合」「魔法パワー選択方式の廃止」、そして「属性の種類を変更」といったところでしょうか。
「パーティ」→「魔法」の新しい画面です。
ここから「種類:回復」→「光:回復魔法」→「詠唱」と選んでいくと右側SSになります。
ちなみに画面中の「回復1体」というのは「光:回復魔法」の「対象1体」詠唱時の仮名称(いいのが思いつかなかった…(^^;)です。
新仕様では対象範囲ごとに魔法自体の名称が変わったりするものもあります。
ここで少しだらだらと書いてみると…。
以前の選択手順ではまず「火」「水」などの属性を選んでいましたが、今回から「アイテム」と同様に魔法の種類を選ぶようになりました。
また、「火」などの属性ごとの攻撃魔法についてはそれぞれ1種類のみとなり、ひとつの魔法を鍛えていきます。
攻撃魔法をひとつずつとしたのは「成長(=強化)を楽しむゲームとしてどうすればいいか?」をいろいろ考えた結果です。
以前の方式では「ファイア・アロー」「ファイア・ボール」「ファイア・ブラスト」という感じで同じ火属性でも複数存在しました。
まず属性を選ぶシステムだったのでこのようにしていましたが、強化のことを考えてみると「ファイア・アロー」でも最終的には単体から全体攻撃までできるようになるわけで「ファイア・ブラスト」との違いは何?という疑問が出てきます(全体攻撃時にはファイア・アローがそれぞれの敵めがけて複数発射されたらそれはそれで格好いいんじゃない?とも思いましたが)。
とすると「ファイア・アロー」は単体限定にして、あるレベル以上になると「ファイア・ボール(2体攻撃できる)」「ファイア・ブラスト(全体攻撃ができる)」を覚えられるようにしようか…いや、それだとせっかくの「強化」の意味が薄れるよねぇ…。
魔法と統合することにした「スキル」は、もともと「剣士」タイプのプレイヤーが「剣技(剣士のための魔法みたいな感じ)」を身につけられたり、ある特定の魔法(「復活」やら「ダンジョンから脱出」)は別枠扱いにしたい(「パートナー」キャラ専用)というものでした。
これにも「強化」を絡めて考えた結果「剣士」タイプは「装備品」を鍛える、「魔術師」タイプは「魔法」を鍛える、という風に二極化するパターンでいった方がよくね?パートナーキャラ専用の魔法は「無属性」を追加するとして…。
あと、属性については…(以下略)と、ここにきて「ゲームデザイン」っぽいことをあれこれ検討して今回の新仕様となりました。
新しい「魔法強化」の画面です。
右側SSでは「威力」を強化してみました。魔法自体の攻撃力が「5」から「55」に増えています。
「攻撃力」の式の意味は「PLのトータル知力(攻撃力に関わる)」+「魔法の威力」=「最終的な攻撃力」です。
ちなみにPLのトータル知力が「989」というのはとんでもなく強い状態(苦笑)で、初期状態だと一桁でしょう。
さらにトータル知力というのはPL自身の知力+装備品補正の合計です。装備品によってはマイナス補正もあります。
「範囲」を強化すると「対象2体」や「対象全体」が選べるようになり、フェイズや消費SPも増加します。
しかし「速度」「技巧」を強化すれば減らすこともできます(右側SS)。
次に「パーティ」の「ステータス」画面を見てみましょう。
まず「パーティ」を開いたところから。
以前はこの段階でPLの個別ステータスを表示していましたが、パーティメンバーのHPやSPを一覧表示するように変更しました。
で、右側SSが「ステータス」画面です。
一画面に全部詰め込んでいたのをボタンで切り替えるようにしたので、表示される全情報量は増えています。
新しい属性の種類は「火」「水」「雷」「光」「闇」の5種類です(左側SS)。
とりあえず「提出版」では属性関連の実装は見送りますが、将来的にはちゃんと意味付けをしたいところ。
右側SSでは装備している装備品の一覧を表示してみました。
PLの「強化」画面です。
レベルアップ時には「装備」や「魔法」同様にGP(成長ポイント)がもらえ(る予定(^^;)、この画面からいつでも強化を行えます。
なお最大HPは「体力」、最大SPは「精神力」を強化すると増えます。
「城下町」での2コマ。「宿屋」と「教会」です。
「nayuta」では、死んでしまったPLを復活させると経験値が失われます。MMORPGでよくあるペナルティですね。
あと、右側SSにあるとおり「教会」ではお金を払わずに復活させることもできます(その分経験値ペナルティが大きいけど)。
貧乏な時(特にゲーム開始直後)に仲間が死んでしまうと非常に困るので、このような救済処置を入れてみました。
とはいえ、お金だけでは復活できないのは俺なりのこだわりです。
…と、ここまでの作業で「城下町」もだいたい入りました。
これで「提出版」に向けて新規実装が必要なのは後述するひとつと「データセーブ&ロード」「イニシャルスタート(簡易版)」くらいじゃないかな。
実際には、まだ中途半端になっている部分がいくつか(レベルアップ周りなど)あったり、今回の作業の都合でバトル関係を切り離したままになっているのを新仕様に合わせて作り替えたりと細々とやることは挙げられるものの、いよいよ「パーツが揃ってきた」ような気がしています。
次のプレビュー版も次回更新時には公開できそうかな。
今月中になんとかひととおりパーツを揃えて、来月は「調整」「改良」「データ作成」を経て「提出版完成!」に持って行きたいところ。
あと「サウンド」も鳴るようにしたい、いや、鳴るようにする、とここで宣言しておきましょう(^^;
実際のところ「そこそこ遊べる」ものとして提出できるかどうかは来月の調整やらデータ作成うんぬんにかかっているような気が大いにするんだけれど、始めてから半年経ってなんとか形にできそうな予感はしています。
とはいえ、ここまで来るのに半年かかっているわけで「思えば遠くにきたもんだ」との思いもありますねぇ。
さぁ、終わりも見えてきた(はず)ので、ラストまでがんばるぞ〜。
しばらく間が開いてしまいましたが。
今回の作業内容としては、
・「パーティ:アイテム」を作成
・「城下町:冒険者の店」を作成
だいたいこの2点ですね。
アイテムについては大幅な仕様変更というか、ここにきてようやく「ホンチャン仕様」なデータ構成が決まりました。
いわば「広げた風呂敷をたたむ」時がきた、って感じ。
作業効率を考えるときっちり仕様を固めてから作業に入るのが一番なわけですが、当初から「とにかく何か作ってないと不安」という焦りもありーので、なるべく風呂敷を広げたまま進めつつ妥協点を探ろうと考えていました。
作りながら細かい仕様を決めていくというやり方にしたわけですが、先月はあっちを直すとこっちもいじる必要があるなぁ、こっちを直したあとで作業を進めてみるとまたあっちも直さなきゃ、というあまりよろしくない循環に陥ってしまっていたように思います。
確かな反省点として、もうちょい早く風呂敷をたたみはじめるべきだったな、というのが残りましたが、そのおかげというか、ホンチャン仕様が固まってきた(はず)わけですし、ここまでの道程は全くの無駄だったわけではなく、ちょっと遠回りしちゃったな、って感じでしょうか。
え〜っと、今後は「トライアル版」から「アルファ版」に向けて作っていくぞ、という前向きな表現でこの場はまとめておきます(^^;
それにしても一人でゲームを作ることの難しさを実感させられたような気がするなぁ。
さて。
「パーティ」コマンドから「アイテム」を選択したところです(左側SS)。
今回から、アイテムはいくつかのカテゴリに属するようになりました。
「攻撃」「回復」「状態異常」「補助」「強化」「特殊」の6種類です。
で、右側SSは以前のバージョンのものです。
この段階では「移動時」「戦闘時」という分け方をしていました。こっちは没バージョンなので貴重です(笑)。
では次にアイテムコマンドから「捨てる」を使用してみましょう(左側SS)。
移動時に使用できるアイテムであれば、アイテムコマンドから「使う」こともできます(右側SS)。
ダンジョンから「城下町」に戻るとこんなメニューになります。
背景画像は「パーティ」コマンドと同じになっていますが、別のものに差し替える予定です。
「冒険者の店」では「装備品の売買」と「アイテムの売買」を行います(右側SS)。
「装備品の購入」画面です。
あ、そうそう。装備品のパラメータ表記が変わりました。
装備品のレベルは「+0」という表記になり、最大レベルは「レア(例:R10)」と表現します。
手に入れた直後は「+0R10」という感じになります。「R10」だと「+10」まで「強化」が可能という意味です。
レアなアイテムは「R」の値が大きく、それだけ強化可能なキャパがでかい(=レアだ)わけですね。
右側SSではB4(ボタン4:「X」キー」)を押して、情報表示を切り替えてみました。
これまで1画面になんとか情報を納めようと四苦八苦していましたが、ボタンで「能力値」「属性値」を切り替えるようにしました。
おかげで「プレイヤーの基本パラメータ」「装備のパラメータ」「修正後のパラメータ」を並べて表示することができるようになりました。
「装備品の売却」画面です。
プレイヤーが所持している装備品から選択し、売却できます。
「アイテムの購入」「アイテムの売却」も入りました。
アイテムはまとめて購入・売却ができます。
また、「愛の魔宝石」は「貴重品」なので売れません。使用回数も「無制限」と表示されていますね。
今回はこんなところです。
今週の作業としては「魔法」の風呂敷をたたみます。
魔法についても、悩みどころが結構あって頭が痛い状態です(苦笑)。
先週〜今週の作業は、フィールドでの「パーティ」コマンドの続きを作っていました。
前回の報告の最後にSSを掲載した「装備品:強化」を実装したほか、「渡す」「捨てる」コマンドも入りました。
「武器:ノービスソード」の「攻撃力」に10GP費やして、強化してみたところです。
ちなみに、魔法を使用するのにはあまり向いていない(と思われる)「片手剣」には、知力(魔法の攻撃力に関係します)にペナルティが付加されています…って、上記SSの「知力−10」は酷すぎますね(苦笑)。ま、開発途上版なので。
続いて、「装備品:渡す」を選んだところ(左側SS)。
ここで渡す相手に自分を指定する(右側SS)と、ある意味お約束な説明文が入ります(^^;
一応、「装備品:捨てる」も載せておきます。
「装備品」に関しては、多彩なパラメータと「成長=強化」を入れたかったので、画面のレイアウトには苦労しました。
装備品ひとつあたりのデータの種類も多くて、プレイヤー並みになってしまいました。
このような仕様は、セーブデータのサイズにそれほど気を遣わなくてもよいPCならではと言えるかもしれませんね。
あとプログラム的には、「装備品」は一通りのコマンドが揃っているので他の似たような処理(「魔法」やら「アイテム」)のリファレンスっぽい感じになっています。
このあと「魔法強化」「アイテム確認」コマンドを作るのにあたっては、「装備品」のソースを参照しながら内部処理を作り替えるところから取りかかりましたし。
で、今回初めてC++を用いたプログラムを書いていて「設計」の重要さを痛感しています。
この機能はどのクラスに入れるのが妥当かとか、そもそもどのようなデータの持ち方にするのかとか、ここまでその場での思いつき(今までの経験を踏まえた上での話ですが)でやってきたわけですが、後々「こっちの方がよかったんじゃないか」と思えることが多く、何度か一部のクラスの整理をやっています。
「ま、現状のままでもやれるけど、他のクラスがこんな感じになっているから、こっちも同じようにしといた方が後々わかりやすいかな」という感じですかね。
この辺も次第に自分の中にノウハウみたいなものが貯まっていけば、作り始める前にある程度「見えてくる」ようになるとは思うのですが…。
あと、ゲームを作っていて思うのは「びみょ〜に違う処理が多い」ということ(笑)。
プログラマ的には、うまくパターン化できて使い回しが効くのが一番「美しい」のですけど、似たような処理なのに「ここだけ違う」おかげで徐々にソースがごちゃごちゃに…。
今思えば実行時型変換(で合ってるかな)を積極的に用いていればもうちょいすっきりと記述できたかもなぁ。
あ〜、作業の方に話を戻しましょう(^^;
今回は「パーティ」→「魔法強化」も入りました。
まず左側SSから見ていくと、プレイヤーに魔法関連の成長パラメータを追加しました。
魔法熟練率が100%になると魔法レベルがあがり、GP(成長ポイント)がもらえます(この処理はまだ未実装ですが)。
このGPを用いて「魔法」も「強化」することができるわけです。
魔法のパラメータは4種類。魔法ごとに独立しています。
右側のSSでは各パラメータを「1」ずつ強化してみました。画面右下の「最大パワー」やら「基本フェイズ」やらが変化しています。
「基本〜」というのは「魔法パワー1倍」「魔法範囲1体」で魔法を詠唱したときはこのくらいですよ、という目安です。
上の方にあるウィンドウで「極め」とあるのは、その魔法の極め度になります。
プレイヤーの「ステータスレベル(いわゆるレベル。便宜上魔法レベルと区別したいのでこう呼びます)」「魔法レベル」や装備品の「レベル」とはちょっと意味合いが異なる(これらは経験値が貯まるとレベルがあがるのに対して、魔法の「極め」はGPを割り振ることであがる)ので、違う言葉を割り当てました。
数値は全てテスト前の仮段階ですが、「極め」にも上限があり徐々に緩和されていきます。
作業内容は以上ですが、今週は「パーティ」コマンドの「アイテム確認」を作成していきます。
この「アイテム確認」が入ると「パーティ」コマンドがだいたい完成ということになります(「冒険の記憶」というコマンドもありますが「提出版」では外します)。
この「提出版」での残り作業がようやく見えてきたので書いておくと、
・「城下町」周り
・「作り込み」
・「改良」
大きいのはこの3点ということになります。
「城下町」というのは、要するに「ウィザードリィ」と同じような感じで、宿屋やらお店をコマンドメニューで選んで移動します。
「nayuta」は「ダンジョン探索&プレイヤーの成長」こそがこのゲームの肝であり遊べる重要な要素ですので、労力などの資源はそこに1点(2点?)集中させ、他の部分は極力シンプル路線でいきます。
なので、フィールド移動はダンジョンのみに絞ったシステムを考えていました。
「作り込み」と「改良」については、主にバトルの見た目をもうちょっと派手にしたいなーとか、テンポ悪いのを直したいなーとか、いろいろです。
ある程度納得いく形で世に問いたい(汗)ので、当初の予定よりは時間がずれ込みそうですね…。