7ヶ月ぶりの更新です(汗)。新しいプレビュー版を公開いたします。
phase.0276 preview.0006
今回はゲームマニュアルも用意しました。
配布用の
アーカイブ版と
オンラインマニュアルの2種類あります(内容は同一です)。
わりと細かいところまで説明を書いたので結構な量になりましたが、現時点で実装できている内容は一通り記載していますのでプレイする前にご一読いただければ幸いです。
あとは…あ、そうそう。正式タイトルが決まりました。
結局
「PROJECT nayuta」のままですが、最初から思い入れのあるタイトルだっただけにそれを超える名前となるとなかなか思いつかないものですねぇ。
さて、前回のプレビュー版公開が4月末…って、えらい昔やん(苦笑)。
というわけで、プレビュー第5版からは大幅に追加・更新しています。
細かい見た目も含めて結構変わってますよ、ええ。
更新内容はさすがに書ききれないので割愛しますが、11月下旬にフィックスした「提出版」と同じものです。
公開が遅くなってしまったのは、正式タイトル決定と第6版公開に併せた
「nayuta」ページ全般の手直しのモチベーション回復に少々時間が必要だったためです。11月末からしばらく
ゴタゴタしていたこともありますね…。
え〜っと「完成」にはまだ遠いですが最低限遊ぶのに必要な要素は実装できていると思うので、よかったらプレイしてみてください。
現状の規模を書いておくと、5階層のダンジョンがひとつと敵モンスターを26種類用意しています。
「提出版」のフィックス前から11月末くらいまでちょこちょこと自分でもプレイしてみて、ある程度はバランス調整を入れたつもりですが、さて。
序盤はきつめですが、ある程度パートナーが育ってくるとまったりと遊べるんじゃないかなぁ。
今回SSがなくて寂しいので、自分で育てたデータを載せてみます(苦笑)。
なお、主人公のデフォルト名は「結城 翔太」となっています。
これを変更したい場合はゲームマニュアルの
「INIファイル」という項目を参照してください。
今のところINIファイルを直接編集するしか手段がないのですが、将来的には専用のツールを用意したいと思っています。
今後の作業内容については、いくつか構想があって
1.INIファイル編集ツール
2.状態異常系(「毒」やら「麻痺」など)の魔法&アイテムを追加 → 敵モンスターの行動バリエーションを増やす
3.ダンジョン脱出魔法(ドラクエでいう「リレミト」)を追加 ← 自分でプレイしていてこれは早く欲しいと痛感した
4.ダンジョンの3D化(「ウィザードリィ」風)
中期的な内容も含めると他にもいろいろありますが、当面は4.を実験がてらにやっていこうと考えています。
久しぶりの更新になってしまいましたが。
・サウンド再生処理の改良
・文字表示処理を置き換え
・いくつかのコンフィグデータをINIファイルに書き込み&読み出し
大きな作業内容としてはこのあたりでしょうか。
まず、サウンドの改良については
前回の報告で
> DirectMusicで「OggVorbis」のストリーム再生を行うと、負荷が高いのか、時々引っかかるような感じになることがあるのです。
と書きましたが、音のひっかかりの原因は負荷のせいではなかったようです。
OggVorbisの再生処理は、
すきやきさんのサイトに掲載されていたサンプルプログラムを参考に作成しました。
サンプルプログラムはデコード処理のヘッダ解析部分に少々力業っぽさが見受けられたものの、ループ再生しなければ問題なく再生できていました。
が、ゲーム中にBGMを鳴らすとなると曲の最後まで演奏されたら頭に戻るという無限ループも必要です。
音がひっかかったようになる状況を検証してみるとたいてい曲の頭に戻ったあたりだということから、正しくループさせるにはシーク処理に対応する必要があるんじゃないかという気がしてきました…ってまぁ、当たり前といえば当たり前ですが(^^;
というわけで、サウンド処理に大幅に手を入れました。
…ストリーム再生において、WAVファイルのヘッダ処理の流れを自前でイチから調べるとなるとかなり手間を取られたでしょうから、前述のサンプルプログラム自体はとても有用だと思います。結局はこちらの実装が甘かったというオチですね(苦笑)。
まぁ、何はともあれ今回の改良で音の引っかかり現象は解消されたんじゃないかと思われます。
で、次。
フォント表示というか、各種メッセージの類はこれまでD3DXFontを用いて描画していたわけですが、お手軽な反面、非常に処理が重いのです。
特にステータス画面を開いて画面上にたくさん文字列を並べると、それだけで秒間60フレームを切ってしまいそうな勢いです(苦笑)。
そこで自前での描画に置き換えようと前々から考えていたわけですが、今回「GetGlyphOutline()」を用いた方法に行き当たりました。
これは「TrueTypeフォントのアウトラインを取得する」というAPIで、一文字ずつテクスチャに文字列を描画→ポリゴンを貼り付け、という手順で処理します。
一文字ずつテクスチャに書き込むので準備には結構処理を取られますが、文字列を更新しなければ毎フレームポリゴン1枚描いておしまいなので非常に高速です。
また、GetGlyphOutlineではアンチエイリアス(以下、AA)のかかった文字情報を得ることもできるため、綺麗な文字を描画できます。
左側がAAなし、右側がありです。縮小しているためわかりにくいですが。
ただ、サイズの大きな文字フォントであればAAをかけた方が圧倒的に綺麗で読みやすいのですが「nayuta」での表示サイズだとかえってAAをかけない方が読みやすかったりするんですよね。
なので、今回は後述のINIファイルで「AAあり、なし」を設定できるようにしてみました。
あと、GetGlyphOutlineを用いた文字の描画方法では2回APIを呼び出すパターンが一般的なようです。
1回目で文字情報を得るためのバッファサイズを取得してから、2度目で実際のデータを貰います。
このアウトライン情報を得る関数の呼び出しは非常に処理がかかる(調べたところ、テクスチャに文字を1ドットずつ書き込む処理の方は思った以上に早かったです。多少処理を工夫してみてもあんまり変わらなかった)ので、できれば1回で済ませたいところ。
必要なバッファのサイズはフォントの大きさから計算できる(実際に格納されるデータは文字の最小限な大きさになるため可変だが、最大サイズはわかる)ので、あらかじめバッファを用意しておけば1回目の関数呼び出しは必要なくなります。
最後に、INIファイルでのコンフィグについて。
現時点では「プレイヤーの名前」「文字フォント関連」「サウンド関連」を記述できるようにしました。
「プレイヤーの名前」は最終的にはゲーム内で決められるべきものですが、とりあえずゲームスタート時にINIファイルから読み出すようになっています。
これでようやく自分の好きな名前でゲームをプレイできるわけです。やれやれ(^^;
ちなみに、パートナーキャラの方はデフォルト名から変更できない仕様の予定です。
彼女たちの名前にはそれなりに思い入れを持って決めているので制作者のわがままを通します(笑)。
とはいえ、INIファイルにはパートナーキャラのデフォルト名も記述されているので、これを書き換えればそちらの名前も好きに変えられます。
…ちょっとした裏技情報ということで(^^;
「文字フォント関連」は2項目あり、デフォルトでは以下のようになっています。
[MESSAGE]
AntiAlias=2
FontName=MS ゴシック
アンチエイリアスのオン・オフ(0=オフ、1=5段階AA、2=17段階AA)と文字フォント名の指定ができます。
文字フォントに「DF唐風隷書体W7」を指定した例です。これはこれでRPGっぽい雰囲気が出てるかも。
「サウンド関連」は以下の通り。
[SOUND]
BgmMasterVol=16
SeMasterVol=16
BgmStream=1
SeOggVorbis=1
上から、BGMとSEそれぞれのマスターボリューム(0〜16。0だとミュート扱い)。
下2つは、BGMをストリーム再生するかのフラグ(1=ストリーム再生。0=メモリ内にWAV変換してから再生)とSEをOggVorbisでロードするかのフラグ(1=OggVorbis。0=WAV)になります。
さて、最後に今週の作業予定をば。
ついにというか、ようやくというか、ずっと後回しになっていたバトルの演出追加を作成していきます。
作成中のダメージポイントの表示エフェクトです。今回SSが少なめなので載せておきます(笑)。