• 欢迎来到THBWiki!如果您是第一次来到这里,请点击右上角注册一个帐户
  • 有任何意见、建议、求助、反馈都可以在 讨论板 提出
  • THBWiki以专业性和准确性为目标,如果你发现了任何确定的错误或疏漏,可在登录后直接进行改正

游戏攻略/STG常用工具/VsyncPatch/vpatch readme

来自THBWiki
跳到导航 跳到搜索
  • 纯文本格式(Wiki系统将从本页面下方的翻译表中自动获取内容并拼接成纯文本格式的页面)
日文版
汉化版


VsyncPatch
VsyncPatch
■対応OS
確認済:Windows XP SP2 32bit版
非対応:NT系のAPIを使用しているため、95/98/Meは動作不可能
動作報告有:XP64bit、Vista32bit
■OS支持
已确认:Windows XP SP2 32bit版
不支持:因为使用了NT系的API,95/98/Me不能运行
有报告称能正常运行:XP64bit、Vista32bit
■対応ゲーム
東方紅魔郷 ver1.02h
東方妖々夢 ver1.00b
東方永夜抄 ver1.00d
東方花映塚 ver1.50a
東方文花帖 ver1.02a
東方風神録 ver1.00a
黄昏酒場 ver1.00a (web配布版)
東方地霊殿 ver1.00a
東方星蓮船 ver1.00b
■游戏支持
东方红魔乡 ver1.02h
东方妖妖梦 ver1.00b
东方永夜抄 ver1.00d
东方花映塚 ver1.50a
东方文花帖 ver1.02a
东方风神录 ver1.00a
黄昏酒场 ver1.00a (web发布版)
东方地灵殿 ver1.00a
东方星莲船 ver1.00b
■警告
本非公式パッチは、ゲームの内部動作を大幅に変更します
本パッチを当てると不具合がでるかもしれません
実行前にscore.dat等をバックアップすることを推奨します
また、十分に動作確認をした上でご使用ください
特に本パッチを使用した状態でリプレイを保存、公開される方はご注意ください
本パッチ適用時のリプレイに関しては、東方Projectスコアボードに投稿することはできません
リプレイをwebやuploder等で公開する場合は、VsyncPatchを使用していることを明記すると、
トラブルになりにくいかと思います
本パッチは非公式に作成したものです
公式に問い合わせないようにお願いします
■警告
本非官方补丁大幅改变了游戏的内部行为
使用本补丁可能会导致bug
使用前建议备份score.dat等文件
另外,请在充分确认操作后使用
在使用本补丁的情况下保存或发布replay的玩家请注意
使用本补丁时的replay无法投稿至东方Project排行榜
通过网站和网盘等方式发布的情况,请明确表示使用了VsyncPatch,
以免造成不必要的麻烦
本补丁是第三方自行制作的
请不要向官方询问
■効果
本パッチを使用することにより、CPU使用率が常に100%になる現象を回避できます
紅魔郷の場合、環境によって、58fpsや62fps等で固定されてしまう現象を回避できます
妖々夢の場合、桜点が100万点を超えると表示がおかしくなりますが、これを修正できます
風神録の場合、windowモードで50fpsになったりする現象を回避できます
風神録の場合、確実に垂直同期されるため遅延を感じることがありますが、これも回避できます
リプレイを再生するとき、skipボタンを押下すると高速再生できます
垂直同期を取っても、入力遅延を少なくすることができます
低性能なPCで垂直同期OFFの状態でプレイすると、
弾幕が多く表示される高負荷の場面にて、表示がかくつくことがありますが、
これも緩和することができます
ゲームを60fps以外で、例えば120fpsで変態プレイができます(要高性能PC)
■功能
使用本补丁可以避免CPU占用率经常达到100%的问题
对于红魔乡,可以避免不同环境下帧数被固定在 58fps 、 62fps 等(非60帧固定值)的问题
对于妖妖梦,修复了樱点超过100万后产生的奇怪的显示问题
对于风神录,可以避免窗口模式下帧率变为50fps的问题
对于风神录,避免了因垂直同步导致的操作延迟问题
播放replay时,可以按下跳过键进行快进
即使使用垂直同步,也可以减少输入延迟
如果在低性能PC上关闭垂直同步进行游玩,
在显示较多弹幕的高负载场景,显示可能会被遮挡,
本补丁可以缓解这个问题
可以将游戏以60fps以外的帧率,例如以120fps进行大触游玩(要求高性能PC)1
■再配布
ご自由に再配布してくださってかまいません
ただし、zip内のファイルを変更・追加せず
そのままの状態で再配布をお願いします
■转载
可以随意转载
但请不要修改压缩包内的文件,或向其中添加文件
请保持原样转载
■ファイル
vpatch.exe
dllを東方.exeにインジェクションするための実行ファイル
東方をプレイしたい時はこの実行ファイルを実行してください
※vpatch.exeは、東方.exeのファイル内容を書き換えるものではありません
※本パッチを適用した状態で東方をプレイしたい時は、
※必ずvpatch.exeを実行する必要があります
■ 文件
vpatch.exe
将dll注入 東方.exe 的可执行文件
玩东方时请运行这个文件
※vpatch.exe 不会改写 東方.exe 的文件内容
※如果您想在应用本补丁的情况下玩东方,
※请务必运行 vpatch.exe
vpatch_th??.dll
各東方シリーズ用のパッチ本体
このdllがvpatch.exeによってゲーム上にLoadされ、
メモリ上の実行コードが書き換えられます
vpatch_th??.dll
用于东方系列各作品的补丁本体
此 dll 通过 vpatch.exe 加载到游戏中,
重写内存中的执行代码
■インストール
vpatch.exe、vpatch_th??.dll、vpatch.iniのファイルを
東方シリーズをインストールしたフォルダにコピーしてください
iniファイルは無くても一応動作します
■安装
请将 vpatch.exe、vpatch_th??.dll、vpatch.ini 文件
复制到东方系列作品的安装目录下
即使没有ini文件也可以工作
紅魔郷の場合はvpatch.exeとvpatch_th06.dllとvpatch.ini
妖々夢の場合はvpatch.exeとvpatch_th07.dllとvpatch.ini
永夜抄の場合はvpatch.exeとvpatch_th08.dllとvpatch.ini
花映塚の場合はvpatch.exeとvpatch_th09.dllとvpatch.ini
文花帖の場合はvpatch.exeとvpatch_th095.dllとvpatch.ini
風神録の場合はvpatch.exeとvpatch_th10.dllとvpatch.ini
地霊殿の場合はvpatch.exeとvpatch_th11.dllとvpatch.ini
星蓮船の場合はvpatch.exeとvpatch_th12.dllとvpatch.ini
黄昏酒場の場合はvpatch.exeとvpatch_alcostg.dllとvpatch.ini
对于红魔乡,复制vpatch.exe和vpatch_th06.dll和vpatch.ini
对于妖妖梦,复制vpatch.exe和vpatch_th07.dll和vpatch.ini
对于永夜抄,复制vpatch.exe和vpatch_th08.dll和vpatch.ini
对于花映塚,复制vpatch.exe和vpatch_th09.dll和vpatch.ini
对于文花帖,复制vpatch.exe和vpatch_th095.dll和vpatch.ini
对于风神录,复制vpatch.exe和vpatch_th10.dll和vpatch.ini
对于地灵殿,复制vpatch.exe和vpatch_th11.dll和vpatch.ini
对于星莲船,复制vpatch.exe和vpatch_th12.dll和vpatch.ini
对于黄昏酒场,复制vpatch.exe和vpatch_alcostg.dll和vpatch.ini
※パッチの動作不良で、score.dat等がおかしくなる可能性もあるかもしれません
※念のためバックアップをとってからパッチを実行するようにしてください
※また、本ツール上からはゲームのversionをチェックしていないので、
※対応しているかどうか確認してください
※vpatch.exeは、vpatchという名のつくdllを同じフォルダ内で検索し、
※最初に見つかったdllをロードします
※したがって、同じフォルダ内に別のvpatch dllがあると、うまく起動できません
※東方シリーズをインストールしたフォルダには、
※対応しているdllのみを入れるようにしてください
※存在由于补丁故障而导致score.dat等文件损坏的可能
※使用补丁前请做好备份以防万一
※此外,由于本工具没有检查游戏版本,
※请自行检查是否支持
※vpatch.exe会在同目录下查找文件名中含有vpatch的dll,
※并加载找到的第一个dll
※因此,如果同目录下还有另一个 vpatch dll,它将无法正常启动
※在东方系列作品的安装目录中,
※请不要放入该作品以外的dll
■アンインストール
インストール時にコピーしたexeとdll及びiniファイルを削除してください
また、ゲーム上の「垂直同期を取らない」設定にチェックが入っているので、
垂直同期をONにしてプレイしたい場合は、
custom.exeを起動し「垂直同期を取らない」設定のチェックを消してください
■卸载
请删除安装时复制的exe、dll和ini文件
此外,由于勾选了游戏中的「不使用垂直同步」选项,
若想要在开启垂直同步的情况下游玩,
请开启custom.exe并取消勾选「不使用垂直同步」选项
■起動オプション
vpatch.exeを起動する際、コマンドライン引数で、ロードするiniファイルを指定することができます
iniファイルのPathは、相対Pathでも絶対Pathでもファイル名のみでもかまいません
ファイル名だけを書くと、vpatch.exeと同じフォルダにあるiniファイルが読み込まれます
例:
※vpatch.exeの存在するフォルダが C:\Program Files\TH\kouma\ の場合
vpatch.exe "C:\Program Files\TH\vpatch_120fps.ini"
 C:\Program Files\TH\vpatch_120fps.ini が読み込まれます
vpatch.exe ini\vpatch_120fps.ini
 C:\Program Files\TH\kouma\ini\vpatch_120fps.ini が読み込まれます
vpatch.exe vpatch_120fps.ini
 C:\Program Files\TH\kouma\vpatch_120fps.ini が読み込まれます
■启动选项
在启动vpatch.exe时,可以使用命令行参数指定要加载的ini文件
无论是使用相对路径、绝对路径还是只有文件名都可以指定ini文件的路径
若只给出文件名,将会读取vpatch.exe所在目录内的ini文件
示例:
※假设 vpatch.exe 位于 C:\Program Files\TH\kouma\
vpatch.exe "C:\Program Files\TH\vpatch_120fps.ini"
 将会加载C:\Program Files\TH\vpatch_120fps.ini
vpatch.exe ini\vpatch_120fps.ini
 将会加载C:\Program Files\TH\kouma\ini\vpatch_120fps.ini
vpatch.exe vpatch_120fps.ini
 将会加载C:\Program Files\TH\kouma\vpatch_120fps.ini
■注意事項
custom.exe上で
 Windowモード、描画間隔=毎回
上記の設定で動作確認をしました
この設定以外でうまく動作するかどうかはわかりません
※本パッチを起動すると、ゲーム上の「垂直同期を取らない」設定が自動的にONにされます
※描画間隔=毎回、以外にすると、ゲーム速度が倍速化することもあります
※申し訳ないですが、毎回以外は非対応ということでお願いします
■注意事项
custom.exe中
 窗口模式、绘制周期=每次
使用上述设定确认可以正常使用
不确定使用了不同的设定是否可以正常使用
※若启动本补丁,游戏中「不使用垂直同步」设定将被自动开启
※若使用 绘制周期=每次 以外的设定,游戏速度可能会倍增
※很抱歉,但你可以理解为不支持 每次 以外的设定
■iniファイル
[Window]
AskWindowMode = 0以外を指定するとWindow or FullScreenを選択できるダイアログが起動時に表示されます
enabled = 0以外なら下記のWindow設定を有効にします(Windowモード時にWindowサイズや位置を変更できます)
X = 画面のX座標を指定
Y = 画面のY座標を指定
Width = ゲーム画面の幅を設定(default:640)
Height = 高さを設定(default:480)
TitleBar = 0を指定するとタイトルバーを消してゲーム画面のみにします
AlwaysOnTop = 0以外を指定すると常に手前に表示します
■ini文件
[Window]
若指定AskWindowMode为0以外的值,将会在启动时显示Window or FullScreen对话框
若指定enabled为0以外的值,将会应用下列窗口设定(窗口模式下可以改变窗口的大小与位置)
X = 指定画面的X坐标
Y = 指定画面的Y坐标
Width = 游戏画面宽度设定(default:640)
Height = 高度设定(default:480)
若指定TitleBar = 0,将隐藏标题栏而只显示游戏画面
若指定AlwaysOnTop为0以外的值,将会置顶显示
[Option]
Vsync (デフォルト=0)
 ※地霊殿と星蓮船については、custom.exeの"入力のレイテンシ"の設定が優先されます
 ※自動はVsync=1、高速はVsync=0として動作します
[Option]
Vsync (默认=0)
 ※对于地灵殿和星莲船2,优先使用custom.exe中的"输入模式"的设定
 ※自动对应Vsync=1、高速对应Vsync=0
 0を指定すると垂直同期をせずに、描画を行います
 若设置为0,则不使用垂直同步进行绘制
 1を指定すると独自の方法で垂直同期をとり、描画を行います
 Gameの速度(fps)は、リフレッシュレートと同じになります
 若设置为1,则使用自制的垂直同步方法进行绘制
 游戏速度(fps)将会与刷新率同步
 2を指定すると、垂直同期を取りつつ、GameFPSに設定されたfpsで描画を行います
 リフレッシュレートが60Hz以外でも60fps(GameFPS)に近いレートで描画が可能ですが、
 均等なレートで画面が更新できないため、弾の移動等が滑らかに描画できない可能性があります
 ※CalcFPS=0にしている場合は、fps表示が不安定になることがあります(59fps~61fps辺りをふらつく)
 ※CalcFPS=1の場合でも、多少不安定になることがありますが、四捨五入時には60fpsになると思います
 若设置为2,则在保持垂直同步的同时以 GameFPS 中设置的 fps 绘制
 即使刷新率不是60Hz,也可以以接近60fps(GameFPS)的速率进行绘制,
 由于屏幕无法以均匀的速度刷新画面,因此可能无法流畅地绘制子弹的移动等
 ※在CalcFPS=0的情况下,fps显示可能会不稳定(59fps~61fps左右浮动)
 ※即使在CalcFPS=1的情况下,也可能会有点不稳定,但四舍五入应该是60fps
 3を指定すると、走査線が画面の中央に来たときに描画を行います
 Gameの速度(fps)は、リフレッシュレートと同じになります
 必ず画面の中央付近でティアリングが起こるようになりますが、
 Vsync=1の時と比べて、画面の下半分の領域の描画遅延が8ms程度少なくなります(60Hz時)
 主に画面下でキャラを操作する人向きです
 ※画面上半分は8ms~16ms程度の描画遅延が起こります
 ※ちなみにVsync=1の時は、画面上半分は0~8ms程度の描画遅延、画面下半分は8ms~16ms程度の描画遅延が起こります
 ※Vsync=0の描画遅延は、描画タイミングが不定のため、描画遅延も不定(0~16ms)です
 若设置为3,则在扫描线位于屏幕中央时绘制
 游戏速度(fps)将会与刷新率同步
 撕裂总是发生在画面中心附近,
 但与Vsync=1时相比,画面的下半部分的绘制延迟将会减少8ms左右(60Hz时)
 主要针对在画面底部操作角色的玩家
 ※画面上半部分将会有8ms到16ms左右的绘制延迟
 ※顺带一提,在Vsync=1时,画面上半部分有0~8ms左右的绘制延迟,而画面下半部分有8ms~16ms左右的绘制延迟
 ※Vsync=0的绘制延迟,由于绘制时机是不确定的,绘制延迟也不确定(0~16ms)
 ディスプレイの走査線は、画面の上端から下端方向へ向かっていきます
 下端まで走査するのにかかる時間は、640x480 60Hz時で、およそ15ミリ秒です
 つまり、ディスプレイに画像が完全に表示されるまでに16ms近くかかるわけですから、
 ディスプレイに表示された時点で既に1フレーム(16ms)遅延しているということです
 また、上から下へ走査されるため、下へ行くほど遅延が大きいです
 显示器的扫描线从屏幕的顶部边缘到底部边缘
 在640x480 60Hz时,扫描到底部大约需要 15 毫秒
 也就是说,由于显示器完全显示图像需要接近16ms,
 当图像在显示器上显示的这一刻,已经有了1帧(16ms)的延迟
 另外,由于它是从上到下扫描的,因此延迟会随着向下扫描而增加。
 vpatchでは、vsyncをonにするよりもoffにした方が、プレイ時に表示される処理落ち率は低くなる傾向があります
 vsync on時では、走査線の周期に合わせて描画タイミングを調整する必要があり、どうしてもフレーム落ちが多く発生します
 vsync off時では、フレーム落ちが発生するシーンでも、常に最速のタイミングで描画が行えるようにしてあります
 低スペックマシンではvsync offをおすすめします
 ※vpatch未使用時の場合は、内部コードのアルゴリズム上、custom.exeでvsync offにしても、
 ※最速のタイミングでは描画されないことが多く、vsync on時とあまり変わらないかもしれません
 对于vpatch,在关闭vsync时,游玩过程中显示的处理落率往往比打开vsync时低
 在vsync开启的情况下,有必要调整绘图的时间以配合扫描线的周期,这不可避免地会导致更多的丢帧
 在关闭vsync的情况下,即使在发生掉帧的场景中,也总是使用尽可能快的时间进行渲染
 建议低配电脑关闭vsync
 ※在不使用vpatch的情况下,由于内部代码的算法,即使在custom.exe中关闭vsync,
 ※也很少能以最快的时间渲染,与打开vsync应该没有什么区别
 vsync off時のティアリングを極力抑えるには、ディスプレイのリフレッシュレートを85Hzにすると良いでしょう
 フレームごとに全く違う場所でティアリングが起こるため、人によってはティアリングを全く感じなくなります
 为了尽量减少关闭vsync时的撕裂现象,将显示器的刷新率设置为85Hz可能会有帮助
 因为每一帧的撕裂发生在完全不同的地方,人眼根本不会注意到任何撕裂
 Vsync=1の垂直同期は、東方本家の垂直同期とは違い、入力遅延はほとんどありません
 裏画面に次のフレームを描画している最中に垂直帰線消去期間(VBlank)を過ぎた場合は、
 同期せずにすぐに描画します
 つまり、この場合はティアリングが発生しますが、遅延せずに描画が可能です
 Vsync=1にする場合は、モニタのリフレッシュレートを60Hzにする必要があります
 PC環境により、ぴったり60.00fpsで描画できない可能性があります
 (59.75fpsだったり60.10fpsだったりします)
 これは走査線の速度がぴったり60.00Hzではないということです(仕様です)
 Vsync=1的垂直同步与东方原作的垂直同步不同,几乎没有任何输入延迟
 如果垂直空白期(VBlank)已过,而下一帧正在后屏幕上绘制的情况
 下一帧将跳过同步,立即绘制
 也就是说,虽然在这种情况下会出现撕裂现象,但可以无延迟进行渲染
 如果你设置Vsync=1,你需要将显示器刷新率设置为60Hz。
 根据PC环境的不同,可能无法准确地以60.00fps的速度进行渲染
 (有时为59.75fps,有时为60.10fps)
 这意味着扫描率不完全是60.00Hz(规范)
 Vsync=0にして、60.00fpsでGameが動作している時に、
 ティアリングが発生しているLineが、上か下に微妙に少しずつずれていくのが
 目で確認できると思います
 ティアリングが発生しているLineが、全く同じ箇所で起こっているならば、
 走査線の速度はぴったり60.00Hzということです
 ティアリングが発生しているLineが、上に移動していくなら、走査線の速度は
 60.00Hzよりも遅いです
 逆に、下に移動していくなら、60.00Hzよりも速いということです
 60.00Hzぴったりの環境は、ほとんどないと思います
 如果你设置Vsync=0,并且游戏以60.00fps的速度运行,
 你应该可以看到
 撕裂线在轻微上下抖动
 如果撕裂发生在完全相同的地方,就说明,
 扫描线的速度正好是60.00Hz。
 如果撕裂线是向上移动的,就说明,
 扫描线的速度慢于60.00Hz
 反之如果线是向下移动的,那么它就比60.00Hz快
 几乎没有正好是60.00Hz的环境
 PC環境によってはリフレッシュレートを60Hzに設定しても、
 実際には75fpsになることもあります
 グラフィックドライバ ForceWare 94.24 にて、この現象を確認しています
 GeForce/ION Driver 186.18 では、問題無しです
 GeForce6・GeForce7の推奨ドライバverのひとつに94.24が含まれているため、
 94.24を使用されている環境は多いかもしれません ご注意下さい
 リフレッシュレート設定がうまくできないverは94.24以外にもあるかもしれません
 94.24は、風・地のタイトル画面で画面がバグる現象もまれに起こります
 在一些PC环境中,即使将刷新率设置为60 Hz,
 但实际刷新率可能为75fps
 我们已经确认ForceWare 94.24图形驱动存在这种现象
 而使用GeForce/ION Driver 186.18则没有问题
 由于94.24是GeForce6和GeForce7的推荐驱动版本之一,
 94.24的使用可能非常广泛,请多加注意
 除了94.24之外,可能还有其他版本不能正确设置刷新率
 少见的情况下94.24还会导致风神录、地灵殿的标题画面出现错误
 VGAデバイスが走査線の読み取りをサポートしていない場合は、
 Vsync機能は自動的にOFFになります
 如果你的VGA设备不支持读取扫描线,
 Vsync功能将被自动关闭
SleepType (デフォルト=1)
 FPS制御を完璧にするかどうかの設定です
 0の場合は、Sleep復帰後すぐに描画するようにします
 0を指定するとPC環境によってはFPS表示がかなりふらつきますが、CPU負荷はかなり低いです
 1にすると、Sleepする時刻を1ミリ秒少なくし、
 Sleep復帰後、描画時刻を調査して、描画時刻ぴったりに描画するようにします
 -1にすると、Sleepの精度を調査して、高精度の場合はSleepTypeを0にします
 低精度の場合は、SleepTypeを1にします
 ※通常は1にしてください
 ※どうしても低負荷で動作させる必要がある場合は0を設定してください
 ※SleepType=0にした場合は、Vsync=1にする場合、正常にvsyncできない可能性があります
SleepType(默认=1)
 此设置决定FPS控制是否完美
 当设置为0时,游戏将在Sleep恢复后立即绘制画面
 设置为0时,根据PC环境,FPS显示将会十分错乱,但CPU负载将会十分低
 设置为1时,Sleep时间会减少1毫秒,
 并在恢复后检查绘制时间,然后在准确的绘制时间进行绘制
 设置为-1时,检查Sleep的准确性,如果精度高,SleepType将被设置为0
 如果精度低,SleepType将被设置为1
 ※一般情况请设置为1
 ※无论如何也想降低运行负荷的情况下,将SleepType设置为0
 ※SleepType=0并且Vsync = 1的情况下,vsync可能无法正常运作
BltPrepareTime (デフォルト=4)
 実際に画面に表示される何ミリ秒前に、
 裏画面に次のフレームを描画し始めるかを指定します
 0~16の数字を指定してください
 数字が大きいほど入力遅延を感じますが、
 大量の弾幕がある高負荷な状態でも滑らかに表示できます
 高速なPCなら4~6程度を、低速なPCなら10程度を指定してください
 描画が滑らかにならない場合は、1ずつ増やしてテストしてください
 入力遅延を感じる場合は、1ずつ減らしてテストしてください
 Vsync=1にする場合は、BltPrepareTimeは0より大きい数値を設定してください
 0にすると必ずティアリングが発生します
 BltPrepareTime=0にすると、裏画面に描画後、ただちに表画面に転送しますが、
 裏画面に描画する時間が弾幕の量によってまちまちなため、
 常に一定の描画間隔で表示できず、結果、かくつきを感じやすくなります
 (特に低性能なPCでより大きなかくつきを感じます)
 ※AutoBltPrepareTime=1の場合は、BltPrepareTimeの設定は無視されます
 ※BltPrepareTimeの設定を有効にしたい場合は、必ずAutoBltPrepareTime=0にする必要があります
 ※BltPrepareTime=-1にした場合は、強制的にAutoBltPrepareTime=1が設定されます
BltPrepareTime(默认=4)。
 下一帧实际显示在屏幕上之前的毫秒数
 控制下一帧绘制开始的时机
 请设置一个0到16之间的数字
 虽然数字越大,就会感觉到更大的输入延迟
 但在有大量子弹的重负荷下,游戏会更流畅
 对于高速的PC,请设置4到6左右的数字,对于慢速的PC,请设置10左右的数字
 如果渲染不流畅,请尝试将这个数字加1
 如果你感觉输入有延迟,请尝试将这个数字减1
 当设置Vsync=1时,BltPrepareTime应该被设置为一个大于0的数字
 若设置为0则必然导致撕裂
 虽然将BltPrepareTime设置为0时,画面将在显卡中绘制后立即转移到屏幕
 但由于在显卡中绘制的时间根据子弹的数量而变化
 所以并不总是能够以固定的时间间隔显示子弹,因此会感到画面卡顿、不稳定
 (这在低性能PC上尤其明显)
 ※如果AutoBltPrepareTime=1,BltPrepareTime设置将被忽略
 ※如果你想启用BltPrepareTime设置,必须将AutoBltPrepareTime设置为0
 ※BltPrepareTime=-1的情况下,将强制设置AutoBltPrepareTime为1
AutoBltPrepareTime (デフォルト=1)
 0を指定した場合は、何もしません
 1以上を指定すると、描画完了時間の統計を取り、最適なBltPrepareTimeを自動でセットします
 自動で算出されるBltPrepareTimeは、常に少なめに算出されます
 AutoBltPrepareTimeを1以上にすると、この値のミリ秒分、自動算出された値に加算されます
 vsyncがうまくできない場合は、2~4程度にすると、うまくいくかもしれません
 vsyncがうまくできない場合は、LockBackBuffer=1の設定も試してください
 ※AutoBltPrepareTimeを1にすると、BltPrepareTimeの設定は無視されます
 ※BltPrepareTime=-1にした場合は、AutoBltPrepareTimeの設定は無視されます
AutoBltPrepareTime(默认=1)。
 设置为0则不起任何作用
 设置为1以上时,将会对绘图的完成时间进行统计,并自动设置最佳的BltPrepareTime
 自动计算的BltPrepareTime总是倾向更低
 如果AutoBltPrepareTime被设置为1以上,将会以毫秒为单位在自动计算的值的基础上加上这个值
 如果vsync不起作用,将其设置为2-4可能有帮助
 如果vsync不起作用,你也可以尝试设置LockBackBuffer=1
 ※AutoBltPrepareTime设置为1时,BltPrepareTime设置将被忽略
 ※BltPrepareTime设置为-1时,AutoBltPrepareTime设置将被忽略
AllowShortDelay (デフォルト=0)
 0を指定した場合は、何もしません
 1を指定すると、重いシーンで描画時間がかかり過ぎても、短い遅延は遅延が無いものとして扱います
 1を指定した場合は、平均的なフレームレートをより高く維持することができますが、
 副作用で、遅れを取り戻す際に、一時的にフレームレートを高めるため、
 かくつきを感じるかもしれません
 処理落ち率を減らしたい場合は、AllowShortDelay=1にしてください
 高GameFPS(例えば120fps)でプレイする場合、AllowShortDelay=1にすると安定しやすいです
AllowShortDelay(默认=0)
 设置为0则不起任何作用
 设置为1时,即使复杂的场景需要过于长的时间来绘制,短时间的延迟将被视为没有延迟
 设置为1时,虽然得以保持较高的平均帧率,
 但副作用是,当游戏从延迟中恢复时,帧率会暂时增加,
 所以你可能会遇到一些不流畅的情况
 想降低处理落率的情况,请设置AllowShortDelay=1。
 如果你在高GameFPS(例如120fps)下进行游戏,设置AllowShortDelay=1来使游戏更加稳定
GameFPS (デフォルト=60)
 ゲームするFPSを指定します
 通常は60を指定してください
 60未満の数値は指定できません
 ※Vsync=1の場合は、モニタのリフレッシュレートと同じFPSになり、
 ※GameFPSは無視されます
GameFPS (默认=60)
 设置游戏的FPS
 通常设置为60
 不能设置为低于60的值
 ※如果Vsync=1,FPS将与显示器的刷新率相同
 ※GameFPS将被忽略
ReplaySkipFPS (デフォルト=240)
 リプレイを再生しているときにskipボタンを押下すると、
 ReplaySkipFPSのレートで再生できます
 このオプションは、描画する速度を変更するだけです
 Direct3D命令の呼び出しを省略して内部変数だけを変更してフレームを飛ばす、
 というわけではありません
 高いFPSを設定しても、低性能なPC環境では、そのレートまで出せない可能性があります
 対応ゲーム:紅魔郷、妖々夢、永夜抄、花映塚
ReplaySkipFPS(默认=240)。
 如果你在播放replay时按下跳过按钮
 replay将会以ReplaySkipFPS的帧率播放
 此配置项只会改变绘制的速度
 并不意味着你可以通过跳过对Direct3D指令的调用,
 而只是改变一个内部变量来跳过帧
 即使你设置了一个高的FPS,在低性能PC上也可能无法达到这个帧率
 支持游戏:红魔乡,妖妖梦,永夜抄,花映塚
ReplaySlowFPS (デフォルト=30)
 リプレイを再生しているときにslowボタンを押下すると、
 ReplaySlowFPSのレートで再生できます
 変態さんのリプレイを見る時に役に立つかもしれません
 対応ゲーム:紅魔郷、妖々夢、永夜抄、花映塚、風神録、黄昏酒場、星蓮船
ReplaySlowFPS(默认=30)。
 如果你在播放replay时按下低速按钮
 将会以ReplaySlowFPS的帧率播放
 在观看大触的replay时可能会派上用场
 支持的游戏: 红魔乡,妖妖梦,永夜抄,花映塚,风神录,星莲船3
CalcFPS (デフォルト=1)
 0以外を指定すると、ゲーム上で表示されるFPS表示を、独自方法で算出するようにします
 妖々夢のFPS表示がおかしい場合は、1を指定すると改善されます
 GameFPSを60以外にしている場合は、1を指定しないとFPS表示が変になるかもしれません
 かなり正確なFPSが表示できると思われますので、CalcFPS=1を推奨します
 Vsync=1にしている場合は、ぴったり60.00FPSにはならないと思われます
CalcFPS (默认=1)
 如果你指定一个不为0的值,游戏中显示的FPS将以一种独特的方式计算
 如果你在妖妖梦中遇到了FPS显示的问题,设置为1会获得改善
 在GameFPS不为60的情况下,请将此配置项设置为1,否则FPS显示可能会不太正确
 推荐使用CalcFPS=1,因为它能提供相当准确的FPS
 如果你设置Vsync=1,可能不会正好显示为60.00FPS
AlwaysBlt (デフォルト=0)
 custom.exeの"ウィンドウスタイル"が"ウィンドウ"用の設定です(Windowモード用の設定です)
 1にすると、ゲームWindowが非アクティブでも、常に描画を行うようにします
 これを1にすると、ゲームWindowのフォーカスをはずした場合に、
 キー入力が入りっぱなしになる現象等を修正するために、
 Game内の入力処理コードが修正されます
 keyboard入力は、ゲームWindowがアクティブの時のみ反応します
 custom.exeの「入力にDirectInputを使用しない」の項目は、チェックしてもしなくても問題ありません
 対応ゲーム:紅魔郷、妖々夢
AlwaysBlt (默认=0)
 在custom.exe中,"窗口选项 "被设置为 "窗口"(窗口模式)时适用的功能
 如果设置为1,即使游戏窗口没有获得焦点,也会正常绘制画面
 此处设定为1时,
 会修改游戏中的输入处理代码,
 以解决诸如游戏窗口失去焦点时,按键被留在上面的问题
 只有在游戏窗口处于活动状态时,键盘输入才会有效果
 无论是否勾选custom.exe中的 "不使用DirectInput输入"都没有问题
 支持游戏:红魔乡,妖妖梦
BugFixGetDeviceState (デフォルト=1)
 ※この項目は初期iniには存在しません 手動で追加してください
 0を指定した場合は、何もしません
 1にすると、
 バックグラウンドから戻ると、入力が入ったままになり暴走することがある件等を修正します
BugFixGetDeviceState(默认=1)。
 ※此配置项不存在于初始ini中,你可以手动添加它
 设置为0则不起任何作用
 设置为1时,
 可以修复从后台切换回来时,输入法仍然处于开启状态而导致失控之类的问题
BugFixCherry (デフォルト=1)
 これを0以外にすると、桜点表示バグを修正します
 桜点Nowが100万を超えた時に表示がおかしくなるのが気になる場合は1を指定してください
 対応ゲーム:妖々夢
BugFixCherry(默认=1)。
 若将此配置项设置为0以外的值,则会修复樱点的显示错误
 如果你很在意实时樱点超过100万时的奇怪显示错误,请将此设置为1
 支持游戏:妖妖梦
BugFixTh10Power3 (デフォルト=0)
 これを0以外にすると、風神録の貫通装備魔理沙のパワー3状態での高速移動時のショットが
 異常な攻撃力になるバグを修正します
 バグ修正とは言っても、ショットの威力が122の場合、12に補正するという処理を行うだけです
 魔理沙B、P3、高速状態、右のメインショットの威力を12に補正する処理ではないので、
 もしかすると、他へ影響があるかもしれません
 十分注意してご使用ください
 BugFixTh10Power3=1にして保存したリプレイは、
 リプレイを再生する側でもBugFixTh10Power3=1にして再生する必要があります
 pingval氏のご協力により、power3バグ修正を行うことができました
 ありがとうございました
BugFixTh10Power3 (默认=0)
 若将此配置项设置为0以外的值,则可以修复风神录魔B机体在高速移动时,
 攻击力变为异常值的bug
 虽然说是修复bug,其实只是在射击的威力为122时,修正为12而已
 由于魔理沙B在P3、高速状态下,右边主炮的威力并不会被修正到12
 因此可能会造成其他未知的影响
 请十分慎重地使用
 在BugFixTh10Power3=1的情况下保存replay的话,
 播放replay时也需要设置BugFixTh10Power3=1
 在pingval的帮助下,成功修复了power3bug
 非常感谢
BugFixTh12Shadow (デフォルト=0)
 星蓮船用のバグ修正オプションです
 一部のビデオカード及びオンボードにて聖輦船の影が黒く表示されない。
  http://www26.atwiki.jp/touhoufuguaimatome/pages/152.html
 1を指定すると、上記の問題を解決するためのパッチを適用します
 修正方法は、こちらの情報を参考にしました
  http://bygzam.seesaa.net/article/127298643.html
 BugFixTh12Shadow=1で修正される箇所は、D3DRS_FOGVERTEXMODE が指定されているところを
 D3DRS_FOGTABLEMODE に変更するだけです
 ※D3DRS_FOGTABLEMODE に対応していない環境は、D3DRS_FOGVERTEXMODEを指定するため、影の色は変わりません
 ※Geforce系は元々黒く表示されるため、問題ない環境が多いそうです
 ※Radeon系は白く表示される環境が多いそうです BugFixTh12Shadow=1を推奨します
 ※D3DRS_FOGTABLEMODE を使用した場合、若干描画が重くなる環境もあるようです
 ※プレイに支障をきたす場合は、BugFixTh12Shadow=0 でご使用下さい
BugFixTh12Shadow (默认=0)
 这是对星莲船的一个错误修复选项
 在一些独立显卡和集成显卡上,圣辇船的影子并不显示为黑色
  http://www26.atwiki.jp/touhoufuguaimatome/pages/152.html
 如果设置为1,将应用一个补丁来解决上述问题
 具体修复方法请参照以下链接
  http://bygzam.seesaa.net/article/127298643.html
 BugFixTh12Shadow=1将通过把设置为D3DRS_FOGVERTEXMODE的地方修改为
 D3DRS_FOGTABLEMODE来解决这个问题
 ※对于不支持D3DRS_FOGTABLEMODE的环境,由于指定了D3DRS_FOGVERTEXMODE,阴影颜色将不会改变
 ※由于Geforce系显卡本身就显示为黑色,大多数环境下似乎都没有这个问题
 ※Radeon系显卡显示为白色的环境似乎比较多,推荐设置BugFixTh12Shadow=1
 ※如果你使用D3DRS_FOGTABLEMODE,在某些环境下的渲染可能会有点重
 ※如果你在游戏中遇到困难,请设置BugFixTh12Shadow=0
ProcessPriority (デフォルト=0)
 ※この項目は初期iniには存在しません 手動で追加してください
 ゲームのプロセスの優先度を指定します
 値:-2:低 -1:通常以下 0:通常 1:通常以上 2:高
ProcessPriority(默认=0)
 ※此配置项不存在于初始ini中,你可以手动添加它
 设置游戏进程的优先级
 值:-2:低 -1:低于正常 0:正常 1:高于正常 2:高
ProcessAffinityMask (デフォルト=0)
 ※この項目は初期iniには存在しません 手動で追加してください
 どのCPUでプロセスを実行するかを制御できます
 1:CPU0でのみ実行
 2:CPU1でのみ実行
 3:CPU0とCPU1で実行
 各ビットはプロセスのスレッドを実行できるプロセッサを表します
 ProcessAffinityMaskは10進数で指定してください
ProcessAffinityMask(默认=0)。
 ※此配置项不存在于初始ini中,你可以手动添加它
 可以控制进程将在哪个CPU上运行
 1:仅在CPU0上运行
 2:仅在CPU1上运行
 3:在CPU0和CPU1上运行
 每位代表一个处理器,进程线程可在其上执行4
 请以十进制数设置ProcessAffinityMask
LockBackBuffer (デフォルト=0)
 ※この項目は初期iniには存在しません 手動で追加してください
 vsyncが正常にできない場合に、1にしてください
 1にすると、Present直前にバックバッファをロックし、すべてのDirect3D描画命令の完了を待機します
 通常は1にする必要はありません
 0でティアリングが発生する環境では、1にすることで正常にvsyncが行えるようになるかもしれません
 副作用で、負荷のかかる場面でfpsが極端に落ちる可能性があります(スペルカード発動時等)
LockBackBuffer(默认=0)
 ※此配置项不存在于初始ini中,你可以手动添加它
 如果vsync工作不正常,将此设置为1
 设置为1时,在Present前锁定后台缓冲区并等待所有Direct3D绘制指令完成
 通常情况下,没有必要将其设置为1
 若在设置为0的情况下发生撕裂,将其设置为1可能得以使vsync正常工作
 副作用是,在重负荷情况下,帧数可能会急剧下降(例如发动符卡时)
★これより下に書いてある文章は、一般の方には必要のない情報です
★パッチがどのように動作しているのか、
★また、WindowsAPIの仕様・動作について書いてあります
★興味のない方は読み飛ばしてくださってかまいません
★以下文字对于一般用户是不必要的信息
★例如补丁是通过何种方式运行,
★以及,WindowsAPI的规范和操作
★不感兴趣的话请随意跳过
■技術情報
本パッチが内部でどのような動作をするかを書いておきます
すべてのパッチは下記の様に動作します
・東方本家のtimeBeginPeriod()とtimeEndPeriod()の呼び出しをすべて無効化します
・アプリ起動時にtimeBeginPeriod(1)を実行し、アプリ終了時にtimeEndPeriod(1)を実行するようにします
・IDirect3D::CreateDevice()を呼び出す際の引数、
 D3DPRESENT_PARAMETERS内部のD3DSWAPEFFECTを、D3DSWAPEFFECT_DISCARDに強制設定します
 また、DirectX9の場合、PresentationIntervalメンバ変数にD3DPRESENT_INTERVAL_IMMEDIATEを強制設定します
・本家の処理では、描画開始時刻未満の場合にSleep(0)が呼び出され、WindowMsg処理へ何度も飛びますが、
 本パッチでは、描画開始時刻判定処理をHookし、描画開始時刻まではSetWaitableTimer()を使い、待機するようにします
 WindowMsg処理は1フレームに1回しか行わないようにします
・裏画面から表画面への転送処理(IDirect3DDevice::Present())をHookし、vsync待ち等の処理を行うようにします
・処理の流れは下記の通りです
 WindowMsg処理 → 描画開始時刻までWait → 裏画面へ描画 → 表画面へ転送(Present処理) → WindowMsg処理
・現在のFPSを表示するためのfps計算は、Present処理をした時刻を元に計算します(本家では裏画面描画中の時刻が元)
 Present処理をした時刻というのは、Presentを呼び出す直前の時刻です
 Present後の時刻を元にfpsを算出すると、Present自体の処理時間が一定では無い場合にfpsが異常に乱れる場合があります
 (FrapsやDxtory等の外部ソフトにより、Presentがhookされる場合等)
 上記の理由により、fps計算には、Presentを呼び出す直前の時刻を使用します
 ただし、ハードウェア側のvsyncをonにする場合、DirectX9&windowモード時は、Presentをcallすると内部でsleepされるため
 Present後の時刻を元にfpsを算出する必要があるかもしれません
・妖々夢でFPS表示が乱れるのは、
 QueryPerformanceCounter()で得た値の下位32bitの値のみを使って演算するために起こります
 特にQueryPerformanceCounter()等で返される値が異常に大きい環境でFPS表示が乱れると思われます
 デュアルコア環境の場合、QueryPerformanceCounter()で返される値がRDTSC(Time Stamp Counter)の値になるため、
 おかしくなるものと思われます
 デュアルコアパッチを当てると、妖々夢でのFPS表示は直りますが、これは
 QueryPerformanceFrequency()で返される値が、Power Management Timerに変更されるためのようです
 このTSCとPMタイマの精度の差は、大きい環境の場合は1000倍くらい違います
 ※上記事項は、PC環境によりますので、全ての環境には当てはまりません
 ※http://support.microsoft.com/default.aspx?scid=kb;ja;327809
 ※妖々夢のfps表示の乱れは、boot.iniに/usepmtimerを指定するだけで修正できる環境が多いと思います
・風神録でWindowモード時、なぜか50fps以下になることについて…
 PresentationIntervalメンバ変数にD3DPRESENT_INTERVAL_DEFAULTが指定されているため、
 垂直同期が取られるようになります
 この垂直同期処理はDirect3D内部でSleep()を使って実装されています
 風神録ではtimeBeginPeriod()が呼び出されていないため、Sleepの精度が10~15ms程度になってしまい
 うまく垂直同期処理ができず、飛び飛びになってしまうため、60fpsが維持できなくなってしまうのだと思われます
・本パッチ上の垂直同期処理には、IDirect3DDevice::GetRasterStatus()を使用していますが、
 InVBlankメンバ変数を見てVBlankを判断しているのではなく、
 ScanLineメンバ変数を見て、次のVBlankの時刻を計算し、
 その時刻まで待ってからPresent()をするようにしています
 環境によっては、InVBlankはよく読み飛ばされる気がします
■timeBeginPeriod
timeBeginPeriod()を呼び出すと、Sleep()やWaitForSingleObject()等の精度が変わります
timeGetTime()やSleep()の精度だけしか変わらないと思ったら、大間違いのようです
SetWaitableTimer()&WaitForSingleObject()を使い、100ナノ秒単位の精度で
待機したい場合は、必ずtimeBeginPeriod(1)を呼ぶ必要があるようです
※timeBeginPeriod(1)を呼ばない状態でWaitForSingleObject()の精度が1ms以下の環境は
※おそらくWMP等のアプリがすでにtimeBeginPeriod(1)を呼んでいるために
※精度が高くなっていると思われます
MSDNライブラリのtimeBeginPeriod()の解説に
 タイマサービスの使用直前にこの関数を呼び出し、
 タイマサービスの使用終了後ただちに timeEndPeriod 関数を呼び出してください。
と書いてあります
これを鵜呑みにしてこのまま実装してしまうと、
timeGetTime()を呼び出すたびにtimeBeginPeriod(),timeEndPeriod()等を
呼ぶ必要があるように聞こえますが…
大嘘です MSDNの罠です 引っかかっちゃだめです >ZUN氏
timeBeginPeriod()を呼び出してもすぐには精度が変わらなく、
若干の間を必要とするという情報もあります
timeBeginPeriod()はアプリ起動時に、
timeEndPeriod()はアプリ終了時に呼び出すのが良いらしいです
上記はWindowsXPや2000の話です
Vistaの場合はAvSetMmThreadCharacteristicsという関数があります
詳細はgoogleやMSDNライブラリ等で調べてください
timeBeginPeriodと同じ効果があります
■SetWaitableTimer&WaitForSingleObjectの精度について
1.4GHzのシングルコアCPU搭載PC環境の場合において、1ミリ秒未満の精度を確認しました
おそらくこのような環境ではSleepType=0でも全く問題ないと思われます
2.6GHzのデュアルコアCPU搭載PC環境の場合、精度が1ミリ秒単位になりました
1.5ミリ秒を指定しても2ミリ秒程度Sleepしてしまいます
何が原因でこうなるのかはわかりませんが、
SetWaitableTimer&WaitForSingleObjectの精度は、
環境によってバラバラで信用できないみたいです
■double型の精度について
QueryPerformanceCounterで得た値をdoubleに変換して、
doubleでfps制御及びfps表示のための計算を行うと、fpsがふらつくようになります
doubleではなくて、64bitの整数型(LONGLONG)で演算すると
全くふらつかなくなりました
色々実験をしたわけではありませんが、double型の精度が悪いとしか思えません
(あるいはdoubleの精度を超える演算をしている可能性があるかも…)
(演算方法が悪いということはたぶん無いと思います。LONGLONGの場合と同じ演算方法でfpsがふらつくので)
時刻情報はできるだけ、QueryPerformanceCounterで得た値を
そのままLONGLONGで保持した方が良いかと思います
x86CPUの場合、ローカル変数を使用して演算する場合は、
float,doubleの型に関係なくfpuレジスタで80bitの精度で演算されますが、
float,double型はメモリに保存するだけで値が丸められ、精度が落ちるようです
特にグローバル変数・メンバ変数で保存・アクセスする場合に問題がでるようです
「小数の計算精度」でググると、良い文献が見つかります
IDirect3D::CreateDevice() をcallする際、
BehaviorFlagsに、D3DCREATE_FPU_PRESERVEを指定しないと
浮動小数の計算精度が単精度に設定されます
Game内でdouble型の変数を使用する場合は、必ずD3DCREATE_FPU_PRESERVEを指定する必要があります
※単精度に設定されるのはメインスレッド(CreateDeviceをcallしたスレッド)だけです
※それ以外のスレッドでは規定の倍精度で演算できます
※(別スレッドからDirect3D関連の関数をcallした場合については未確認)
■紅魔郷・妖々夢・永夜抄の入力遅延について
紅魔郷と妖々夢は、フレームレート制御を行っている場所が悪いために、
常に1フレームの描画遅延があります
処理の流れは以下の通りです
WindowMsg処理 → IDirect3DDevice8::BeginScene() → リストに登録された描画情報を裏画面に描画 →
IDirect3DDevice8::EndScene() → 現在のkey入力情報を取得 → キャラ移動等の処理を行い、描画情報をリストに登録 →
次のフレーム描画時刻まで待つ(フレームレート制御) → IDirect3DDevice8::Present() → WindowMsg処理
妖々夢は、上記の描画遅延に追加で、さらに1フレームの遅延があります
処理の流れは以下の通りです (key入力処理とキャラ移動処理のみを表記)
  現在のkey入力情報を取得し、変数Aに代入 → 変数Bを参照して、キャラ移動の処理を行う → 変数Bに変数Aを代入
※つまり、1フレーム前の入力を見ているということです
※妖々夢は描画遅延と入力遅延を合わせて2フレームの遅延があります
永夜抄は、妖々夢と同じ入力遅延が1フレームあります
フレームレート制御は正常なため、描画遅延はありません
上記の遅延を修正したことにより、大幅に描画完了待ち時間が少なくなります
今までは60fpsを維持していた場合でも、負荷のかかる場面でfpsが落ちる可能性があります
特に低性能なPCで、この現象が顕在化する可能性が高いです
■地霊殿について
修正点は、入力のレイテンシ:"自動"と"高速"のみです
ini項目のCalcFPSを1にした場合は、2重に四捨五入している部分も修正されます
※sprintfに渡す値に0.05を足しているのを、足さないようにします
ini項目のVsyncの設定は無視されます
ini項目のReplaySkipFPSの設定は無視されます
ini項目のReplaySlowFPSの設定は無視されます
地霊殿のcustom.exeにて、入力のレイテンシを自動にするとVsync=1、
入力のレイテンシを高速にするとVsync=0としてGameが動作します
iniでVsync=2にしている場合は、入力のレイテンシを自動にするとVsync=2として動作します
入力のレイテンシ:安定と通常については、元々の動作のままです
■星蓮船について
修正点は、入力のレイテンシ:"自動"と"高速"のみです
ini項目のCalcFPSを1にした場合は、スペル撃破実時間が正確な時間に修正されます
ini項目のCalcFPSを1にした場合は、2重に四捨五入している部分も修正されます
※sprintfに渡す値に0.05を足しているのを、足さないようにします
ini項目のVsyncの設定は無視されます
ini項目のReplaySkipFPSの設定は無視されます
星蓮船のcustom.exeにて、入力のレイテンシを自動にするとVsync=1、
入力のレイテンシを高速にするとVsync=0としてGameが動作します
iniでVsync=2にしている場合は、入力のレイテンシを自動にするとVsync=2として動作します
入力のレイテンシ:安定と通常については、元々の動作のままです
※地霊殿・星蓮船の入力のレイテンシ:自動(ソフトウェアvsync)は、ZUN氏独自の実装です
※したがって、vpatchの処理方法とは違うため、本家でfpsが安定しない環境で、
※vpatchを適用すると安定できる可能性があります
■version履歴
2008/04/01 rev1
 正式公開
■历史版本
2008/04/01 rev1
 正式发布
2008/04/11 rev2
 ・GetRasterStatusで得たScanLine値が、モニタの高さの値を超えてしまう
  仕様外の動作をする環境に対応 ツール総合スレ2 >>208氏thx
  →Vsync=1にすると不定期にハングアップする現象が直るかも
 ・走査線の読み取りをサポートしているかどうかの調査の方法を変更
  ScanLine値が変動しているかを検査します
 ・走査線の速度を計測する方法を変更
  →Vsync=1にするとGame起動時にCPU100%で固まる現象が直るかも
  →と思ったけど、CPU100%で固まる現象は仕様外の値を吐くGetRasterStatusがらみの問題なのかも
 ・ini項目追加:AskWindowMode(風神録・黄昏酒場は元々ある機能なため非対応)
  ツール総合スレ2 >>208氏thx
 ・技術情報追加:double型の精度について
 ・風神録・黄昏酒場のReplaySlowFPS対応
  文花帖は、リプレイフラグが見つからないため未対応
 ・紅魔郷のFPS制御を少し変更
 ・描画間隔を毎回以外にすると倍速化する件ですが、Gameによっては
  vsync=1にすると倍速化するようです(vsync=0でも倍速化するGameもあり)
  描画間隔:毎回、以外の対応は少し難しいです 申し訳ないですが仕様ということでお願いします
2008/04/12 rev3
 ・紅魔郷:フルスクリーン時、デバイスのvsyncがonになっていたのをoffに修正
  また、フルスクリーン専用のFPS制御処理(強制60frame等)をskipするように変更
  →フルスク時、おそらく入力遅延が発生していたと思います この修正で入力遅延が少なくなります
  →フルスク時、リプレイ高速再生ができなかったのが直ります
  →フルスク時、高FPSでGameができなかったのが直ります
2009/03/01 rev4
 ・紅魔郷:1フレームの入力遅延を解消
 ・妖々夢:2フレームの入力遅延を解消
 ・永夜抄:1フレームの入力遅延を解消
 ・紅魔郷&妖々夢:AlwaysBlt=1の時の挙動を変更
  →ゲームWindowのフォーカスをはずした場合に、
  →キー入力が入りっぱなしになる現象等を修正するために
  →入力処理コードを修正するようにしました
  →Game起動時にキーが入りっぱなしになる現象も修正できたと思います
  →この変更により、iniのNoKeyboardの項目は必要なくなりました
 ・地霊殿に対応
 ・ini項目削除:NoKeyboard
 ・ini項目削除:BltFineTuneTime
 ・ini項目追加:AutoBltPrepareTime
 ・ini項目追加:SleepType
 ・ini項目追加:LockBackBuffer
 ・ini項目更新:Vsync
 ・技術情報追加:紅魔郷・妖々夢・永夜抄の入力遅延について
 ・技術情報追加:地霊殿について
 ・精度が維持できるように各種計算式・アルゴリズムを変更
 ・走査線の速度を計測する方法を変更
  →走査線を読み飛ばす可能性を最小限に減らしました
  →速度計測に失敗した場合にFPSがおかしくなっていたのが直ります
 ・vsyncの方法を変更
  →VBlank時刻を正確に算出できるようにしました
  →リフレッシュレートを参照せずに、走査線のみを見て次のVBlank時刻を算出します
  →リフレッシュレートと走査線の速度が合っていない環境で、
  →FPSが不安定だったのが直ります
2009/09/13 rev5
 ・今回のrevは、星蓮船のみのリリースです
  星蓮船以外のvpatchのリリースはしばらく先になりそうです
 ・ini項目追加:BugFixGetDeviceState
  →デフォルトでキー入力の暴走を修正するコードが適用されます
  →これを適用してもなお暴走する場合は、報告して頂けるとありがたいです
 ・ini項目追加:AllowShortDelay
  →rev4にて、vsync=1の時のみAllowShortDelayの機能が常に適用されていたのを、rev5はデフォルトでoffにしました
  →rev5では、AllowShortDelay=1にした場合は、vsync off時にも適用されます
  →なおこの変更で、vsync=1にしていた場合、平均フレームレートがrev4より低下する可能性があります
  →rev4と同じ処理をしたい場合は、AllowShortDelay=1にしてください
 ・ini項目更新:AutoBltPrepareTime
  →自動算出方法を見直し
  →AutoBltPrepareTimeの値を、自動算出した値に加算するように変更
 ・vsync=0の時に、前のフレーム描画に時間がかかり過ぎた場合に、
  次の描画タイミングが早くなりすぎていたバグを修正
 ・マルチプロセッサの環境にて、QueryPerformanceCounterの
  タイマソースにrdtscが使用され、かつ、XPSP3未満の場合は、
  使用するプロセッサを1つに限定するように変更
 ・技術情報追加:星蓮船について
2009/09/25 rev6
 ・今回のrevは、星蓮船のみのリリースです
 ・走査線速度の計測が、特定の条件で失敗する不具合を修正
  →入力のレイテンシ:自動 の時、fpsがモニタのリフレッシュレートと
  →同期しないことがあったのが直ります
 ・ini項目追加:BugFixTh12Shadow
  →BugFixTh12Shadow=1にすると、星蓮船1面道中の船の影が白く表示されるのが直るかもしれません
 ・描画間隔:1/2,1/3のフレームレート制御を修正
  →おそらくこの修正で、ある程度fpsを高く維持できると思われます
■作者
◆swmpLV/75E
■作者
◆swmpLV/75E


  1. 译者注:只能加速不能减速,想用VP减速的可以洗洗睡了
  2. 译者注:其实这里包括地灵殿以后的所有作品,只是作者在写这个文档的时候只出到星莲船
  3. 译者注:其实就是支持所有vp支持的游戏,只是作者在写这个文档的时候只出到星莲船
  4. 译者注:1的二进制是01(即关开),2的二进制是10(即开关),3的二进制是11(即开开),对照上面三个例子应该不难看懂更多cpu的情况