2013年8月16日金曜日

画像変換したい!!!(1)

ということで、コーディングを進めました。

とりあえず、
① artLegacyMUL.uopのファイルマッピングページをVirtualQuery()でプロセスメモリ内から見つける
② 上記ページをVirtualProtect()でPAGE_WRITECOPY属性にする
③ artLegacyMUL.uopのインデックス情報を全て読みだしてみる&ちょこっと書き換えてみる
④ VirtualProtect()でページ属性を元の属性に戻しておく
⑤ ログイン
⑥ 終了
⑦ artLegacyMUL.uopが書き変わっていないことを確認
までは確認してみました。

あとは、どのインデックスを、どの情報に書き換えるか、を準備してhookdllに食わせるだけでうまくいくと思う。多分、、、

元のソースコードは言語はC#で、文字列→ハッシュ→辞書(連想配列)→UOPファイルとしており、C++ STLでいうところのmapを使用して実装しているのですが、hookdllはCで書いているためmapに該当するコードを書き加えるのがめんどっちいから、文字列からのハッシュ値で判定するようになると思います。

ハッシュ関数への入力文字列ですが、printfフォーマットで言うと"build/artlegacymul/%08d.tga" (よくこんなのみつけたな)で、このハッシュのシード(?)が舐めてますw 0xdeadbeef www
(しばらくプログラミングから離れていたので、用語が間違っているかもしれませんがご容赦ください)

追記: 上記は%08x.tga??? あれれ、該当するIDが見つからない><

2013年8月15日木曜日

鍵開け、意外と上がるものですね

完成度の低いUOAマクロを半日回していたら85超えました^^

画像変換のアルゴリズム

これでいける、かな???

(1) あらかじめ、被変換画像IDと変換画像IDを調べておく
(2) さらに、(1)の被変換画像IDと変換画像IDに対応するハッシュIDを調べておく
(3) さらにさらに、(1)の変換画像IDのエントリー情報をartLegacyMUL.uopから抜き出しておく
(4) uoclistのAttachボタンを押す
(5) hookdll内で、artLegacyMUL.uopのファイルマッピング位置を特定
(6) artLegacyMUL.uopの解析/書換開始
(7) ハッシュIDが(2)の被変換画像のハッシュIDと同じだったら、(3)で抜き出しておいたエントリー情報に書き換える
(8) artLegacyMUL.uopの解析/書換終了
(9) ログイン

ログイン前にartLegacyMUL.uopの内容をクライアントが読み出していてキャッシュに保存していなければ、これで成功しそうな気がするんだけど。。。

画像変換の学習

うらうらツールの画像変換、僕も使ってました。木とかサボテンを切り株に変換して動きやすくするために。

ところが、復帰してみたら使えなくなってました><
mulフォーマットがuopフォーマットに置き換わって、もうmulフォーマットでのアップデートはしないみたい。
なので、InsideUOなんかはもう動きませんね。
その後継ツールとしてのUoFiddlerは対応している模様。
UoFiddlerでart.mul/artidx.mulの内容を見ると、なるほど、過去のインデックス最大値だった0x3ffe(だったかな)の馬以降にもグラフィックが追加されています。要するにインデックス容量が足りなくなったので、(開発陣としては仕方なく?)フォーマット変更に踏み切ったというところでしょうか?

ではどうしたら?とちょこっと調べてみると
こちら
のLegacyMULConverter-v4.rarを利用しろ、ということらしいです。
幸いにも、ソース付きです^^
さすがRunUO!!!

ちょろっとソースコードを斜め読みしたところ、uoclistにも利用できそうです。


さて復習。

mulフォーマットの仕様はこちら。
artidx.mulのフォーマットを抜き出すと
3.2 ARTIDX.MUL
This file contains an index into ART.MUL. To load a specific tile number in ART.MUL, simply seek BNum * 12, read in the index tile data and use Lookup to find the tile within ART.MUL.
ARTIDX.MUL
Index Record (12 bytes)
0123456789AB
LookupSizeUnknown
DWORD Lookup - Is either undefined ($FFFFFFFF -1) or the file offset in ART.MUL
DWORD Size - Size of the art tile
DWORD Unknown - Unknown

うろ覚えなんだけど、artidx.mulのファイルサイズは12*0x4000で固定値、0から順番にインデックスを割り振り、各インデックスのバイト数は12、先頭4バイトがart.mulに格納されている画像データのオフセット値(上記Lookup)、次の4バイトがデータサイズ(Size)、になる。

なので、mulフォーマットベースで単純に切り株変換したい場合には、artidx.mulのLookupを変換させたい画像のオフセット値に書き換え、Sizeを変換させたい画像のデータサイズに書き換えるだけでよい、だったよな~?

あとはどうやって変換作業を実施するかだなぁ。うらうらツールと同じようにGUIで作業できることが理想だけど、無理っす><単純に被変換/変換のIDを書いたテキストファイルを実行時に読み込む、でいいよね???

2013年8月14日水曜日

鍵開け

こればっかりは、UOAにお任せしたほうがいいな、とひさしぶりにUOA起動してマクロ登録して、マクロの試運転してみました。

だるい。。。

予想はしていましたが、鍵開け(Lockpicking)のスキル上げは苦行です><
スキル50.0をソウルストーンで移して(後から考えると、100にしてから移したほうがよかったか)、51.0まであげてみましたが、だるい。。。

別アカのトレハンキャラはLockpickingGMなわけですが、よくこんなめんどくさい作業を続けたなぁ。サター上げができる前の話なので、95.0からは特に苦行だったろうに。

2013年8月12日月曜日

休みに入ったので

この暑さだと、日中は外に出たくないのでこもりっきり><
UOClistのバグがモリモリあったので直してました。(まだ全部直しきれてないと思う)
ゲーミングマウスとして昔使っていたLogitechのMX510を引っ張り出してきて、サイドボタンを活用できるように改良したり。
あとは、BO対策として青りんごの時間制限に引っかからなければBO後すぐに食べるようにしたり、ルートアイテム対象をゴリゴリハードコーディングして追加したり、くらいですね。

開発は、自分の遊び方の範囲で拡張しているので、その遊び方の範囲が狭いと安定期に入ってしまいます。
私の白豚のアクセはcursedなため、失うのが怖いので、まだまだ活動範囲が狭いです。
久しぶりにDOOM対岸に行ってみたいのですがねぇ、、、劣化版アクセで行ってみようかしらん。

2013年8月4日日曜日

2アカでTデスパやってみた

ケンタウルス×2でボス戦に30分位かかった。
目的のDespicableQuiverが一回目で出たからよかった(物理+10だけど)^^;;;
次もやろうって気にならないなぁ。。。