開発資料/ひとりで出来るもん の変更点

Top/開発資料/ひとりで出来るもん

*自分で解決したい人へ [#t0a85ed6]
OBSEや日本語パッチ、公式パッチやらがVer.UPするたびにOBSEにパッチを当てなければなりませんが、誰かがパッチをうpするのを待っていたんじゃ、いつになるかわかりません。やっぱり自分で解決できたほうがいいんじゃねぇの?!ってとこで。

&color(red){作者の意図から外れた行為なので、あんまり大きな声じゃ言えないんだけどね…。その辺を理解した上で実行してください。};

**はじめに [#ffb86f20]
OBSEはプログラムを呼び出す前に''Oblivion.exe''や''ConstructionSet.exe''のCRCを調べます。CRCというのは簡単に言えば検算のようなもので、CRCが同じなら中身も同じと言ってよいものです。OBSEはCRCがわかっている(動作確認の取れている)Oblivionでなければ実行されないようになっているのです。%%全く余計なことを…%%
CRCは16進数であらわされ、OBSEでは32bitCRC(8桁)を使っています。

**自分のCRCを調べる [#g1f9d172]
まずはOBSE_Loaderを実行してみてください。すると何かエラーが出るはずです。
文の最後に&color(Blue){CRC=????????};(8桁の英数字)がかかかれているはず。その英数字があなたの''Oblivion.exe''のCRCです。このCRCはOBSE_Loaderと同じフォルダに作られる''obse_loader.log''にも書いてありますので、念のためこれをメモるかコピーしときましょう。

**使用可能なCRCを調べる [#r30284a9]
OBSEにはソースがついています。これはexeに変換する前のプログラム群です。''OBSEのZip内のsrc/obse/loader/以下にあるmain.cpp''をテキストエディタで開いてみましょ。
&color(red){※v0017b以降は、src/obse/loader_common/EXEChecksum.cpp に記述されています。};

CRCに関する処理がされてないかな〜と「CRC」を検索してみます。いくつか見ていくと
&color(Blue){case 0x29F82D28:	// 1.1.0.511 russian unofficial w/ no-CD "<B@ZiK was here!>"};
&color(Blue){case 0x7F601478:	// 1.1.0.511 japanese unofficial v6};
といった怪しげな文章が見えてきます。ここがCRCチェック処理部です。//以下は注釈文で、これらがロシアのNo-CD版と日本語パッチver6であることが記されています。
>&color(red){Ver.1.2を当てている人は、その下にある1.2用のCRCを使用してください。なお、OBSEではSI版(1.2.0.201)には対応しておりません。 1.2.0.214を当ててください};

さて、これでCRCが&color(Blue){29F82D28};や&color(Blue){7F601478};の''Oblivion.exe''なら動くということがわかりました。
ちなみに[[ConstructionSet(CS)>MOD/Tool#z38f2850]]のCRCはその上のほうにある&color(Blue){case 0x96ED4409:	// 1.0.0.303};ってやつです。
※CSのバージョンが 1.2.0.404 の場合は 0x2F9AC10C。

**OBSE_Loaderを書き換える [#z9589a5a]
さていよいよ改造です。
&color(Blue){7F601478};のようなデータと比べているのですから、プログラム内にはそのデータが存在するはずです。
まずはバイナリエディタで''OBSE_Loader.exe''を開き、それを探します。Windowsソフトの内部では&color(Blue){7F601478};→&color(Blue){7814607F};のように&color(red){''後ろから2桁ずつの逆並び''};なので、&color(Blue){7814607F};を検索します。すると一箇所だけ該当するはずです。そこをあなたのCRCで上書きすればOKです。
&color(red){''逆ならび''};にしておくことを忘れずに。

>&color(red){''実際の書き換え例と諸注意''};
-''置き換えても動かない場合''は、置き換えるCRCを変えてみましょう。
&br;
-&color(Blue){7F601478}; の部分でだめなら &color(Blue){29F82D28}; の部分を書き換えてみる。ウチではなぜか日本語Ver.5のCRC &color(Blue){278B2356}; の部分を置換えないと有効になりませんでした。(main.cppのswitch-case文は、コンパイルされると2分木検索ロジックに展開されるため、2分木検索から外れてしまうものを書換えても、有効になりません。自分のCRCとなるべく近い値を選んで置換えたほうが、有効になる可能性が高いです。)
&br;
-検索対象が「一箇所だけ該当する」と思い込んでると駄目''かも''。あくまでも「''はず''」が付くので。複数個あれば全部書き換えるとかする必要がある「''かも''」。
実際にv0016betaだと、14a日本語パッチ済み1.1.0.511を検出するためのデータ &color(blue){0xEDBE0C74}; は二箇所あるよ。そして二箇所を自分のCRCで書き換えた時点で動作するようになりました。
&br;
-[[TES Construction Set 日本語化パッチ(2009年04月11日版)>http://oblivion.forum.jpmod.net/viewtopic.php?f=10&t=113]]を当てた CS v1.2.0.404 を
''OBSE v0016, v0017b,v0018beta4,v0018'' 経由で起動する場合は、
&color(blue){0x2F9AC10C (0CC19A2F)}; 
を書き換える事で起動できました。
&br;
-[[TES Construction Set 日本語化パッチ(2009年04月11日版)>http://oblivion.forum.jpmod.net/viewtopic.php?f=10&t=113]]を当てた CS v1.2.0.404 に、
Oblivion 日本語化パッチ v0.15c 付属テキストに記述されている &color(red){Books Import 時のタグ無効化対策を施し};、
''OBSE v0016'' 経由で起動する場合は、
&color(blue){0x96ED4409 (0944ED96)}; 
を書き換える事で起動できました。
&br;
-[[TES Construction Set 日本語化パッチ(2009年04月11日版)>http://oblivion.forum.jpmod.net/viewtopic.php?f=10&t=113]]を当てた CS v1.2.0.404 に、
Oblivion 日本語化パッチ v0.15c 付属テキストに記述されている &color(red){Books Import 時のタグ無効化対策を施し};、
''OBSE v0017, v0017a, v0018beta4, v0018beta6'' 経由で起動する場合は、
''OBSE v0017, v0017a, v0018beta4, v0018beta6, v0018b6, v0020'' 経由で起動する場合は、
&color(blue){0xE380C3AF (AFC380E3)}; 
を書き換える事で起動できました。
&br;


**どうやって書き換えるんだゴルァ [#a3ad87fc]
バイナリエディタは置換え機能を持ったものが使いやすいでしょう。そこで &color(Blue){バイナリエディタ 置換}; でググると出てくる、''Stirling''というエディタを使って説明します。
まず''Stirling''のメニューの&color(Green){ファイル→開く};で''OBSE_Loader.exe''を開きます。そして&color(Green){検索・移動→置換};をクリックし、検索データの部分に動くOblivionのCRCをいれ、置換データのほうに自分のCRCを入れます。&color(Red){何度も言いますが''逆並び''ってことを忘れずに。};データ種別は両方16進、範囲は全体にして一括置換をクリックします。一箇所置き換えた旨のメッセージが出たら成功です。そしてメニューの&color(Green){ファイル→保存};をして、起動実験をして見ましょう。ちなみに書き換え前のデータは自動的にバックアップされています。
それでもCRCが違うと出るなら、上記の注意の項を参照してください。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS