th17patch.zip/Readme.txt
プログラム名:非公式東方鬼形獣バグ修正パッチ
用途:
東方鬼形獣ver1.00bに存在するいくつかのバグを修正します。
※Steam版非対応です
使い方:
・winmm.dllをth17.exeと同じディレクトリに置く
・東方鬼形獣を起動する
・あとは東方鬼形獣を通常通りプレイするだけ
アンインストール:
・winmm.dllを削除するだけ
修正されるバグ一覧:
・実績から再生できるEDが違う
・カワウソ妖夢1面の誤字
・実績38の誤字
・replayフォルダ以下にもなぜかsnapshotフォルダが作られる
・リプレイでクリア系実績が解放される
enable_pl02cフォルダ内のwinmm.dll使用の場合さらに追加で以下
・オオワシ妖夢の与ダメージ上限が他より100低い
ファイル解説:
winmm.dll プログラム本体
Readme.txt 今読んでいるこれ
History.txt 更新履歴
enable_pl02c オオワシ妖夢与ダメージ上限解放版
src ソースコード
免責事項:
これに同梱されたプログラムその他が原因で発生したいかなる損害も当方は一切関知しません。
また、全てのプログラムがウイルスではないという証明も、ウイルスに感染していないという証明もありません。
自己責任でお使いください。
Q&A:
Q:公式?
A:非公式です、使用は自己責任で。
Q:オオワシ妖夢修正ってリプレイ互換性ある?
A:ないです。
そうとわからない形で他人へリプレイファイルを渡さないようにしてください。
Q:オオワシ妖夢修正入れたら他自機もリプレイ互換性なくなる?
A:互換性なくなるのはオオワシ妖夢だけです。
Q:オオワシ妖夢修正版リプレイは他人に見せられないの?
A:相手も本パッチを適用していれば問題なく再生されます。
Q:オオワシ妖夢修正版って他のバグ修正も含む?
A:含みます。
Q:オオワシ妖夢強すぎない?
A:おそらくそれが理由で下方修正が入ったと思われます。
とはいえ低速まで弱体化するのは予想外だったでしょうし
仕様バグみたいなものだと思うので一応変更できるようにしました。
自己責任でお使いください。
Q:誤字って具体的に何?
A:Wiki( https://wikiwiki.jp/thk/bug/%E9%AC%BC )を参照してください。
Q:既に解放済みの実績のED再生も直ってる?
A:直ってます。
Q:既に解放済みのリプレイ実績も消える?
A:消えません。
解放済みのセーブデータは手遅れなので諦めるしかないようです。
Q:以前実績から見れたスタッフロールが見えないんだけど。
A:バグで見えてただけなので我慢しましょう。
Q:それぞれのバグの原因は?
A:最下部の技術情報を参照してください。
Q:どうやって直してるの?
A:機械語(CPUへの命令文章のこと)を書き換えています。
それ以上の詳細はソースコードを参照してください。
Q:考えられる副作用は?
A:バグがあれば基本的にどうとでもなりますが主要なものは以下の通り
・極々微小の速度低下
・(あれば)パッチ実装ミスによるクラッシュ
・オオワシ妖夢パッチのみオオワシ妖夢のリプレイ互換性がなくなる
Q:Steam版でも使える?
A:使えません。
Q:Steam版実績も直ってる?
A:使えないので直りません。
Q:ver1.00aでも使える?
A:使えません、素直にアップデートしてください。
Q:1.00bより後のパッチが出たら使える?
A:使えません、それでバグが直っていることを祈りましょう。
Q:その他バグをみつけた or 動作しない or 要望がある
A:確認次第対応可能であれば対応します。
公開しても問題が無いメールアドレスにて
下部に記載されたアドレスまでメールをどうぞ。
メールアドレス:sweetie(あっと)click3.org
スペシャルサンクス:
東方Project攻略Wiki バグ情報を参照させていただきました
ライセンス:
・本ライセンスにおいて、全ての条項は「変更の有無を問わず、明示暗示を問わず、商業慈善を問わず、
個人法人を問わず、保持使用を問わず、有料無料を問わず、全体一部を問わず、コピー派生を問わず
実行ファイルソースファイルを問わず、故意錯誤を問わず」と装飾されている物として扱う。
・著作権者は本ソフトウェアに関する一切の保障義務をもたない。
・上記条項唯一の例外として、本ライセンスに違反した場合を除いて著作権者から
本ソフトウェアに関する一切の法的措置を受ける事が無い事のみ保証される。
・著作権者やその他保持者がこのライセンスの範囲で行う活動に支障が無い範囲であれば何を行っても構わない。
・上記条項の”何を行っても構わない”には本ソフトウェアの製作者を偽っての再配布も含まれる。
・全ての権利の行使において、著作権者への連絡、著作権者やライセンス条項の記載、
適用ライセンスなどの制限は一切存在しない。
著作権者名:sweetie
面倒な人向けライセンス解説:
ライセンスについて記載義務すらありません。
煮るなり焼くなりお好きにどうぞ。
技術情報(と、どうでもいい話):
基本的な原理
・DLL Preloading Attackでプロセス空間内に侵入
・Import Address Tableを書き換えてCreateFileAとReadFileを乗っ取る
・上記は基本的に本物に処理を流しつつ必要な情報だけ抜く
・・具体的にはth17.datの識別子獲得と、今読もうとしているファイルの把握
・それとは別に機械語15か所にパッチを当て、適宜こちら側へ処理を流したりする
ReadFileではth17.dat内のアドレスとファイルサイズから
dat内の何のファイルを読もうとしているのかを特定している。
特定方法は自力でもth17.datをパース、コードはtouhouSEより。
機械語へのパッチは大体の場合がバグの要所付近で自作コードをcall
データを加工したり代替処理を実行してから元の流れに戻すようにしている。
・オオワシ妖夢の原因
th17.dat内のpl02c.sht内に書かれている与ダメージ上限値が一人だけ60なせい。
datから読みだした直後をフックして中身を見て160に書き換えている。
・誤字の原因
両方とも単純にテキストミスである。
ただ片方は簡易的な暗号化テキストであったため
秘密計算チックに暗号化されたまま変更している。
・実績EDバグの原因
ED再生とSTGモード再生を切り替える実績ID閾値が違う
ED再生の10番以降の対応.msgファイル名が違う
STGモード再生の自機種別計算式が違う
(動物霊指定部分を実績ID%3とするべきところを実績ID/3している)
全て個別に機械語を変更し正常化した。
・replay/snapshotバグ
SetCurrentDirectoryWに成功するかでフォルダの存在有無をチェックしていたが
成功した場合に元のフォルダに戻る処理が抜けている
通算2回目の起動
=>replayにCD
=>当然存在するので成功して次へ(replayフォルダ内にいる)
=>snapshotにCD
=>(replayフォルダ内なので)失敗したからsnapshotフォルダを作成する
という流れで発生していた。
チェック後に元のディレクトリに戻す処理を追加して修正
・リプレイ実績バグ
リプレイフラグが立っている時は実績解放関数無視と個別にifが入っているが
クリア時の処理でのみ漏れがあり実績が解放されてしまうというもの。
実績解放関数自体にリプレイフラグを見て分岐するコードを追加して修正。
オオワシ妖夢は高速ショットの弾数が異様に多いので
上限160にして密着で全弾当てるとロアリングモードに匹敵する威力になる。
おそらくはそれに気づいた神主が修正を試みた結果が異様に低い上限。
そもそもオオワシ妖夢の基礎デザイン時点でこの事態は回避不能と見えるので
デザインミス、もしくは仕様バグと呼ぶべき存在だと思われる。
なお仕様派バグ派両方にある程度正当性があるため
本パッチでは有効無効を選べるようにした。
Steam版は推定アンチチートが入っていたので動作しませんでした。
無理すれば可能かもしれませんが対応予定はありません。
boostコンパイル大変そうな人が観測されたので依存止めました。