TOP MAP UP

PS2 ひぐらしのなく頃に 祭 コンバータ




PS2 ひぐらしのなく頃に 祭 カケラ遊びコンバータ についてはこっち!



解析について

 PS2 ひぐらしのなく頃に 祭(以下ひぐらし)は、ファイルシステムがUDFによってデータが格納されている。Windows等でディスクを見ると、起動に必要な三つのファイルしか無く、あるはずの沢山のデータは見当たらない。

 ひぐらしでは先頭の方のセクタにファイルエントリがあり(UDFの規格通り)そこに登録されているファイル(前述の三つ)の実体はかなり後ろのセクタに登録されており、ゲームに使用されるデータは先頭あたりのセクタ〜起動に使うファイルまでの間のセクタにUDFの規格の外で格納されている(なので普通に見ても見えない)恐らくこれは解析を防ぐ為の方策だと思われる。

 UDFの規格の外のデータを読むには、セクタリードで直接読むしかないのだが、今回はお手軽なASPIをもちいた(SPTIはDDKが必要:持ってるけど)

 セクタリードをしてわかる事は、前半に良くわからないデータ、後半にゲームのデータが入っているという事である。ちなみにこの前半のよくわからないデータはただのランダムデータで、恐らくWinny等でイメージで交換される際に、アーカイブの圧縮率を少しでも低下させる為に入れているものだと思われる。

 後半のゲームデータも、セクタの頭の1パラグラフがNOTされている。通常これがNOTされると都合の良い事というのは無いので、これも解析を防ぐ為の方策だと思われる(ただし前述のUDFもこのNOTも見ればすぐにわかるレベルなので、そもそもプロテクト的にかけたものかは甚だ疑問だが・・・・)

 以上より、セクタリードすべき範囲と、セクタリードの際に適正なデータを得る為の方法がわかった(ちなみに今回はこれをひぐらしセクタリードと名前を付けてある)



 本来はファイルリストとLSN(Logical Sector Number:要するにセクタ位置)と長さのデータが何処かにあると思うのだけれども、探しても見つからないので(ELFの中にリテラルで埋められてる???)今回は全種類のファイルのヘッダを調べ、各セクタがそれらファイルのヘッダに該当するかチェックを行うことでファイルの始点を検出した(ファイルそのものの長さが記述されていないファイルは、次のファイルの先頭までがそのファイルの長さとした)
 ファイルには動画ファイル(PSSプレイヤーで再生)、音声ファイル(ADPCMなのでWAVにコンバート)、そして画像ファイルがあるが、PS2は通常、通称(多分俺しかそう呼んでいない:汗)TIM2圧縮かLZSSによる圧縮がかけられている。しかし今回のひぐらしはそれらとは違う圧縮方法であった。

 ぱっと見た感じではデータの感覚が非常にTIM2圧縮に似ているが、TIM2圧縮とは圧縮ビットのON/OFFが逆であった(何故そうしたのかはわからないが、恐らくこれも解析を防ぐ為の方策か?)

 ちなみに圧縮コードの指し示す先のデータもTIM2のそれはラップアラウンドによる表現だったが、ひぐらしのそれはデコード地点からどの程度遡るのか?という表現であった(ただしこれはひぐらしの表現の方が素直だと思う。TIM2の表現は前方参照可能(もっともこれはゼロレジスタ的にしか使えないのであるけど:汗)とアルゴリズム的には柔軟になっている)以上によりTIM2圧縮相当の圧縮解凍を行う事が可能になった。

 しかしTIM2圧縮でもそうだったのだが「本来辞書展開(以下dic)されるべき所でrun length展開(以下run)される」という問題があった。これは辞書参照先がまだ未展開の領域を参照した場合は、不定値を書き込む事になるので、runで処理する、という判定方法に基く。

 今回「and The Next ...」という字の画像のピリオド部分がこの問題に直面していた。ここでふと思ったのは(ピリオドという単純な画像であるから気が付いたのだが)未展開領域は、既に展開されたもののコピーになるのでは無いか?という部分であり、事実そうであった。この考え方を微小にまで適用すると、実は今までrunだと思っていたのも、1dotのdicで表現されているのだとわかった(実際にはまぁ流石にrunとしてエスケープされてると思うが:汗)これにより完全な画像を得られる事となった。



 解析を終えて強く思うのが、非常に稚拙ではあるが、数多くの解析に対する抵抗らしきものがあったのが印象深い。これは想像でしかないのだが、解析=コンバータであると思うので、コンバートされた物を二次利用される事を懸念していると思われる。
 ではどういう形で二次利用されるのか?恐らくPSPで動く形でコンバートされるのを恐れていると思う。多分PSPでも発売する予定があるのではないだろうか?(もっともシナリオファイルが大きいとかそれなりに難しい部分があると思うが)



 今回そういった部分に関連してか、従来発表したコンバータでは有り得なかった事なのだが、mixiのひぐらしコミュでは非常にコンバータそのものに関してバッシングを受けた。
 個人的には合法な活動をしている以上、他人から非難を受ける何の謂れも無いわけで、正直そういった反応にはあきれるばかりなのだが(法的知識の無さ、自分のモラルが世界の正義と思う他人に対する不寛容等)コンバータ製作者の俺としてはもちろん自分で買った製品をより楽しもう(当然個人使用の範囲内で)、そして他の人にも同じようにより楽しんで欲しいと思い、コンバータを発表する訳なので、使用する人もそのあたりを念頭において使用して欲しいと思う。



にぱ〜☆(コンバータ)の使い方

PS2 ひぐらしのなく頃に 祭 コンバータはここ


071209追記
ニコニコ動画にわかりやすいチュートリアルのビデオがありました。
みんな参考にしてね♪動画作成者さんありがと〜☆ミ

まずASPIレイヤを用意する。フリーの物は下記の通り(2007/05/05現在)
http://www.frogaspi.org/ downloadsのDownload FrogAspi (already renamed as wnaspi32.dll)を使う
http://www2.tcnet.ne.jp/miyuri/ filesのASPTI for WinNTを使う
これらのwnaspi32.dllをにぱ〜☆と同じフォルダにコピーする

 コマンドプロンプトを開いて、ファイルを出力するフォルダにカレントディレクトリを設定する(にぱ〜☆がカレントに無い場合はフルパスで指定すると以下読み替える)次にひぐらしのディスクをDVDドライブに入れる。
 コマンドプロンプトから「nipa /l」とし、ドライブのリストを取る。この時にデバイス名を参考にひぐらしのディスクを入れたドライブのHA/ID/LNを確認し、「nipa /d HA:ID:LN」(HA/ID/LNには実際には数値が入る)とすると、カレントディレクトリにファイルが出力される。この時、コンバートできるファイルはコンバートされた形で出力される(実際のディスクに格納された形とは違う)

以下、Cドライブにnipaというフォルダを作って、そこへコンバータをコピーして、コンバートしたデータを出力するという設定のコマンド操作を示す。

コマンド説明
c:カレントドライブをCにする
cd \カレントディレクトリをルートに設定
md nipanipaというフォルダを作成(ここにコンバータとASPIのDLLを入れる事)
cd nipaカレントディレクトリをnipaに設定
nipa /lASPIのドライブリストを出力
03:00:00=00 WDC WD740ADFD-00NLR3 21.0
07:00:00=00 WDC WD3200JD-22KLB0 08.0
08:00:00=00 WDC WD3200JD-22KLB0 08.0
09:00:00=05 _NEC DVD_RW ND-3520AW3.07
0A:00:00=00 HITACHI_DK23EB-40 00K0
このリストの数値で左から順に
HA:ID:LN=Typeとなっており
Type=00はHDD、Type=05はCD or DVDである
今回はこの中からType=05の物で
ひぐらしのディスクを突っ込んだドライブを選ぶ
nipa /d9:0:0リストの中でDVDの物のHA:ID:LNを指定してコンバートを開始する
左記は上記の出力の場合の例


 ファイル名はLSN.EXTという形で出力されるが、Windows上で見た場合、エクスプローラのファイル名ソート順が0→9→A→Zとはなっていないようなので順がおかしくなるが、そういう物なのであきらめるように(汗

 出力されるファイルの中にはBMPファイルもあるが、これはPS2のアルファ情報も含んだ特殊なBMPになっており、このコンバータではこのアルファを反映しての(BMPファイル同士のレイヤー)合成が可能となっている(ちなみにいちご100%からの完全なソースの流用w)
 具体的なやり方は、コマンドラインで「nipa /x右にずらすドット数 /y下にずらすドット数 /b上になるBMPファイル 下になるBMPファイル」といった具合に指定する。

 /x,/y共に全く指定がない場合、左下をゼロ点とするポイントに上レイヤーの絵がセットされる(左上でないのはBMPの仕様)また、このコマンドラインのオプションの指定は順番は厳守する事。またオプションとパラメータの間にスペースは入れない。理由はコマンドラインのチェックを手を抜いている為(汗)上下レイヤーの合成が終わったら、各画像(上下等)の結合はその他のグラフィックエディタ等を使って行う(このソフトでは未サポート)

(作例) NIPA.EXE /x248 /y0 /b00229a2a.bmp 00225745.bmp




他にも出力されるファイルの解説

ELF PS2のプログラム
FNT フォントファイル
LZS TIM2圧縮のかかったTXAファイル
PSS PSSプレイヤー等で再生する動画ファイル
SNR シナリオファイル。文字コードマップが少し特殊。
TXA アニメーション用テクスチャ。基本的に絵としての体裁が整ってない物なので今回コンバートせず。
WIP ワイプに使用するデータ



070720追加

セリフのサンプルレートが違うとのお知らせを受けましたので修正しました



 なおPSSプレイヤーは、このサイト(http://www.sumomo.ne.jp/azuco/)のトップページにある「Project fao」の所よりダウンロード可能。