﻿VsyncPatch

基本的な使用方法は、VsyncPatch rev6と同じです
使用方法の詳細は、rev6のreadmeを御覧下さい

■対応OS
確認済：Windows XP SP3 32bit版
非対応：NT系のAPIを使用しているため、95/98/Meは動作不可能

■対応ゲーム
東方神霊廟 ver1.00c

■警告
本非公式パッチは、ゲームの内部動作を大幅に変更します
本パッチを当てると不具合がでるかもしれません
実行前にscore.dat等をバックアップすることを推奨します
また、十分に動作確認をした上でご使用ください
特に本パッチを使用した状態でリプレイを保存、公開される方はご注意ください
本パッチ適用時のリプレイに関しては、東方Projectスコアボードに投稿することはできません
リプレイをwebやuploder等で公開する場合は、VsyncPatchを使用していることを明記すると、
トラブルになりにくいかと思います
本パッチは非公式に作成したものです
公式に問い合わせないようにお願いします

■再配布
ご自由に再配布してくださってかまいません
ただし、zip内のファイルを変更・追加せず
そのままの状態で再配布をお願いします

■インストール
vpatch.exe、vpatch_th??.dll、vpatch.iniのファイルを
東方シリーズをインストールしたフォルダにコピーしてください
iniファイルは無くても一応動作します

東方神霊廟の場合はvpatch.exeとvpatch_th13.dllとvpatch.ini

※パッチの動作不良で、score.dat等がおかしくなる可能性もあるかもしれません
※念のためバックアップをとってからパッチを実行するようにしてください
※vpatch.exeは、vpatchという名のつくdllを同じフォルダ内で検索し、
※最初に見つかったdllをロードします
※したがって、同じフォルダ内に別のvpatch dllがあると、うまく起動できません
※東方シリーズをインストールしたフォルダには、
※対応しているdllのみを入れるようにしてください

■アンインストール
インストール時にコピーしたexeとdll及びiniファイルを削除してください


■iniファイル
[Option]
Vsync (デフォルト=0)
　0を指定すると垂直同期をせずに、描画を行います。

　1を指定すると独自の方法でソフトウェア的に垂直同期を取り、描画を行います。
　ハードウェア的に行う垂直同期よりも低入力遅延で操作が可能です。
　フレームレートは、モニタのリフレッシュレートと同じになります。
　Vsync=1にしてもティアリング(ちらつき)が発生する場合は、
　LockBackBuffer=1 と D3DMultiThread=1 と ProcessPriority=2 を設定してみてください。

　-1の場合、ハードウェアの支援を使用して垂直同期を行います。フルスクリーン時のみ有効です。
　ハードウェアの支援を使用しているため、完璧な垂直同期が可能です。
　-1の設定では、2フレーム以上の遅延が起きないように、タイミングを調節しつつ描画します。
　そのため、フレームレートが異様に低くなるシーンがあるかもしれませんが、Vsync=-2 よりも入力遅延は少ないです。
　ウィンドウモード時の場合に-1を指定した場合や、フルスクリーン時にハードウェアの支援が利用できない場合は、
　強制的に Vsync=1 の設定で動作します。

　-2の場合、ハードウェアの支援を使用して垂直同期を行います。フルスクリーン時のみ有効です。
　ハードウェアの支援を使用しているため、完璧な垂直同期が可能です。
　-2の設定では、ゲームループにwaitを入れずに全力で回すようにします。
　フレームレートは、ハードウェア側(ドライバ)の実装に依存します。
　Vsync=-2は、Vsyncのすべての設定の中で最もフレームレートが高くなると思われる設定です。
　ただし同時に、Vsyncのすべての設定の中で最も入力遅延が多い設定です。
　ウィンドウモード時の場合に-2を指定した場合や、フルスクリーン時にハードウェアの支援が利用できない場合は、
　強制的に Vsync=1 の設定で動作します。


D3DMultiThread (デフォルト=0)
　Direct3Dをマルチスレッドで動作させた場合に発生する不具合を無くすためのオプションです。
　0の場合は、何もしません。

　1の場合、IDirect3D9::CreateDevice() のBehaviorFlagsに、D3DCREATE_MULTITHREADEDを指定するようにします。
　このフラグを指定すると、マルチスレッドでDirect3Dを使用する際に不正終了しなくなります。

　ゲーム起動時にタイトル画面がバグったような感じになることがある場合は、D3DMultiThread=1 を指定すると、直ります。
　1を指定することを強く推奨しますが、CPU負荷が増え、フレームレートが低下する環境があるかもしれません。

　LockBackBuffer=1 にする場合は、マルチスレッドでの不具合を無くすために、できるだけ D3DMultiThread=1 を設定してください。
　Vsync=1 の場合は、ソフトウェアvsyncを行うためのヘルパースレッドを作成するため、できるだけ D3DMultiThread=1 を設定してください。


MagnificationMethod (デフォルト=0)
　0の場合は、何もしません
　windowモード時、規定のサイズ(640x480)よりも大きいウィンドウサイズ(例1024x768等)にした場合、
　ポイントサンプリングで拡大されてしまう環境があります(Windows7＆特定のグラフィックカード時、等)
　ポイントサンプリングで拡大すると、見た目がとても荒く、汚く見える場合があります
　MagnificationMethod=1 にするとバイリニアフィルタリングで拡大するようにします
　バイリニアフィルタリングで拡大すると、それなりに綺麗に拡大されます
　このオプションを有効にすると、バックバッファのサイズをウィンドウサイズと同じにし、
　ゲーム画面を640x480のテクスチャに描画したあと、バックバッファにウィンドウサイズと同じサイズのポリゴンを描画し、
　それにゲーム画面のテクスチャを貼り付けます(Direct3Dの機能で自動的にゲーム画面が拡大されます)
　上記の処理により、VRAM使用量が増加し、テクスチャを描画するためのメモリコピーの時間分、処理時間が増えます
　最近のグラフィックカードなら全く気にならない程度の処理時間の増加ですが、古いカードの場合はそうではないかもしれません
　※この機能はvpatchのwindowサイズ変更機能を使用している場合のみ、機能します
　※このオプションは動作確認が不十分かもしれません。描画等に不具合が出る可能性があるかもしれません。


DisableChecksum (デフォルト=0)
　東方の実行ファイルであるth13.exeのチェックサムを確認するかどうかの設定です
　1を設定すると、チェックサムを確認せずにvpatchを適用し、東方を起動します
　通常はこのオプションを変更する必要はありません
　東方の実行ファイルに何らかの非公式パッチ(言語パッチ・不具合解消パッチ等)を当てた場合は、このオプションを1にしてください
　1に設定した場合、vpatchが正常に動作するかどうかはわかりません
　※vpatchが適用できない場合は、まず、ゲームのバージョンが対応verであるかどうかを確認してください



■version履歴
2011/10/31 rev th13-1
　・東方神霊廟に対応
　　すべての描画間隔に対応済
　・東方神霊廟以外に対応したvpatchは同梱していません
　・ini項目追加：MagnificationMethod
　・ini項目追加：DisableChecksum
　・ini項目変更：Vsync
　　-1の設定を変更、-2の設定を追加
　　ハードウェアvsyncに対応し、フレームレート制御はすべてvpatch側で行うようにしました
　・ini項目削除：HookDirectInput
　　現在別の方法で同等のオプションを実装中ですが、
　　まだ実用段階では無いため、一時的にこのオプションを削除しました
　・動作変更：ゲームの実行ファイル(th??.exe)のバージョンチェックを追加 (DisableChecksumオプションでoffに変更可能)
　　違うバージョンでvpatchを起動しようとした場合、「ゲームの実行ファイルが見つかりませんでした」と表示し、起動できないようにしました
　　vpatch.exeは以前のverをそのまま使用可能です
　・フレームレート制御ライブラリ更新
　　WaitableTimerの精度確認処理：低精度なのか高精度なのかの判別処理をより正確にできるようにコードを変更
　　浮動小数点を使用する処理をすべて整数演算で行うように変更
　　ハードウェアvsync関連の処理を追加
　　vsync=0の時、特定の条件で1frameだけ描画が早くなってしまうことがあったのを修正



■ToDo
　・すべての東方作品における、入力デバイス処理のバグ修正(hook)の一元化及び対応デバイス・対応軸の拡充等
　　すべての入力デバイスに対応
　　デバイス上のすべての軸・ボタン・コントロールに対応
　　必要なデバイスのみPollし、処理時間を最小化 (HookDirectInputはすべてのデバイスをPollしていた)
　　デバイス入力を直接内部フラグに高速変換 (HookDirectInputは使用しない軸データの変換をしたり、無意味な変換を挟んでいた)
　　アサイン変更のためのGUIを実装
　・ヘルプの作成
　　東方がどのように動作するか(＝内部仕様の解説)
　　各種バグが発生するメカニズム
　　バグをどのようにvpatchで修正しているか
　　用語説明やFAQ等の追加
　・神霊廟にて、ロード画面中(特にエンディング後のロード中)にメモリアクセスエラーが起こる問題を修正したい
　　多少調査はしたものの、落ちる条件が未だ不明(なかなか落ちない)
　　エンディングまで行く手間もあり難航
　　タイトルロード時に落ちる条件はおそらく判明(再現性100%)



■作者
◆swmpLV/75E

■連絡先
バグ等の御報告はこちらからどうぞ
http://ux.getuploader.com/swmplv75e/inquire

