というわけでVer 0.55 Alphaの公開となりました。やっぱり更新ペース早い上にバージョンが一つ飛んでいます。停滞していた2012年はいったい何だったのか、といわんばかりに。
飛んでいるバージョンはものすごく短期公開になってしまったものです。バグではなく修正された機能の問題でバージョンを飛ばしたことにしているだけです。それにしても、いろいろと調べていくと微妙な動きをしていたりするものがやっぱりありますね・・・。半分動いているような動きとかも。
GDI更新モードにDirect3D9フレーム更新モードを追加
といっても意味が分からないと思いますが、単純に言うなら本来の描画シーケンスを無視して一定の周期で本来ウィンドウに表示されるべき状態をDirect3D9を使って描画してやろう、という発想に基づくものです。そのためこれを使うには「一定の周期」を指定しないと動かないようになっています。このパターンならとりあえず「表示されるべき状態」をウィンドウを無視して描画できるのでまあよしとします。前回の更新でフレームレートリミットの機能を追加しましたが、その副産物というところです。
ちなみにこの機能、0.53 Alphaでは試験実装でしかも描画時に微妙な動きをしていたので設定ツール側からは動かないようになっていました。特に文字列を表示するタイミングでエラーが起こることが多かったです。0.55 Alphaではその部分を修正しましたが、そのために「そのタイミングで描画されている」という状態になりたま~に更新途中の状態で描画されるかもしれません。が、描画されないよりはよっぽど良いと思います。
この機能に連動するわけではありませんが、半分無用のオプションとなっていたWrapWindowもこのオプションにより一部の動かないパターンで動かせる強力な設定になっています。使わなくていい場合は使わない方がよいと思いますが、描画がうまくいかないときに使えるようになっています。
ゲームがフルスクリーンにする方法もいろいろあるな・・・
昔のゲームだと「フルスクリーン」というとほぼ100%「画面の解像度をゲームの描画解像度に合わせる」だったのですが、最近では「画面解像度を変えずに描画結果を画面にあわせて伸縮させる」というものがいろいろとあります。ここまでは予想内(私が作ったADVシステムもここまでは対応している)で、これを「仮想フルスクリーン」という言い方をしているのですが・・・。
とうとう「ウィンドウサイズは画面いっぱいだがDirect3D上は描画解像度までしか描画せず、Presentによる画面あわせ使っている」を使うシステムが。さすがにトリガを考えるのに苦労しましたし、解除のタイミングをどうするかにも問題がありましたがとりあえず対応して実装しています。しかも微妙なことにこちらでかみ合わせるとフルスクリーンのサイズにディスプレイの解像度以外のものを選ぶとなんと解像度を強制的に変更する、という仕様に。変更できないときはかなりおおもしろい状態になりますので。
しかも普通の仮想フルスクリーンに関する処理も追加しました。ゲーム側が現在のディスプレイの解像度に拡大する場合、WindowModeはその描画を通過させる(パススルー)という状態になります。補間処理が無視されますがこれは仕方がないものとしてあきらめています。ちゃんとFSAAは動くのに・・・。最新のゲームシステムについていくつかのパターンでテストしたものですので対応状況はそれなりだと思います。ただし、この状態の場合起動時にフルスクリーン状態だと解像度を誤認識します。ウィンドウモードから起動させれば仮想フルスクリーンでのパススルーが動作するのですが・・・。
そろそろ世界と張り合ってみるか・・・
いろいろな部分を英語に翻訳してやってみています。直接プログラムに関する場面は英訳していますので、実行さえしてしまえば英語環境では英語になります。もちろん、設定ファイルの記述も英語になっているので多少説明書が読めなくてもどうにかなるかな~と思っています。今回のプログラム更新で増えたプログラムサイズの大半がこれです。しかし、残った部分が大きいですよね・・・。説明書とWebページが・・・。
英訳に関しては自分の英語の能力がとても低いのでとりあえず自分が分かる範囲で英語に直して機械翻訳で日本語化したときに自分が思っている意味からそれほど外れていなければよしとしています。そのため、文法が誤っていたり、日本語の説明と英語の説明で意味が変わっているものがかなりあります。中には英語の方が詳しくなっているものがあります。さすがにすべて機械翻訳で直す、というのは私の概念としては無しです。機械翻訳だけでこちらが言いたい意味から変わる方が問題だと思うので。