07/03/15 17:47:40 UVm5Vdgo0
ヒント:それは実はA1本人
604:ゲームセンター名無し
07/03/15 20:23:18 y2KolDUX0
そろそろこの板にいるのもまずいと思うんだけど
605:ゲームセンター名無し
07/03/16 15:18:25 TRofZ6J+O
大体ゲーム板の裏技改造あたりか?
606:ゲームセンター名無し
07/03/17 01:29:36 v39r4Ipx0
>>604
クイズの問題ファイルを解析して答え抜こうって目的じゃなくて
サウンドとかイメージファイル抜くための解析だから大丈夫じゃね
607:ゲームセンター名無し
07/03/17 07:15:24 ZGKa+QJyO
その違いがわからんw
608:ゲームセンター名無し
07/03/17 11:32:56 6o+gPcdA0
WMAで使えるキャラで凛作ってみた。+背景とかBGMとかSE変更。
すげー汚いですけど、もしよろしければどぞー。
URLリンク(sageupload.rdy.jp)
パスはいつもの
609:ゲームセンター名無し
07/03/17 11:34:55 6o+gPcdA0
連スレスマン。書き忘れ。
resourceフォルダがあるから、それをそのまま上書きしてくれ。
って言わなくてもわかるか。
610:ゲームセンター名無し
07/03/17 12:35:57 RprKWo/20
>>608
ちょwwww 凜ktkr!!
背景で既に興奮度maxなんだがwma持ってない…orz
611:ゲームセンター名無し
07/03/17 12:40:42 U3DiDl4s0
ゲーム自作しようぜ('A`)b
612:ゲームセンター名無し
07/03/17 21:41:00 zWfVxxL00
>>610
('A`)人('A`)ナカーマ
俺も衛宮家の居間だけで我慢だぜ。
613:ゲームセンター名無し
07/03/18 01:45:12 dZzOLs5Z0
QMA2仕様の.lzファイル(テクスチャ)の解析、私も始めました。
やはり言われている通り、
「DDS圧縮テクスチャ+LZ法での圧縮」かと思われます。
前提として、QMA2までは「偽装」や「秘匿」というモノは行なわれていないと思います。
サウンドや選択肢用の画像など、一般的なファイルフォーマットと違うフォーマットのモノは、
別に「隠す」という目的でそうされたのではなく、単に「メモリに読み込んでプログラムで使う」という目的に特化してあるのだと思います。
使用しないヘッダ情報や全てのファイルで共通のヘッダ情報は削ってあったりと。
そう考えるとDDS形式は リトルエンディアンな所に示されるように、プログラム実行中の構造体のメモリイメージをそのままファイルに落とした形式(=読み込んでそのまま使える形式)なので、
もうホント“そのまま”ファイルに格納してあると思います。
圧縮方法については、上でランレングス説も挙がっていましたが、
ランレングスで圧縮されたデータを 適当な圧縮ソフトで辞書圧縮(.lzhとか)してやると“若干は”縮むのに対し、
「同じ圧縮法で2度圧縮しても縮まない」という特性上、辞書圧縮は辞書圧縮してやっても 全く縮みません(下手すると逆に膨れます)。
…で、QMA2の.lzを圧縮ソフトで.lzh圧縮してやると、全く縮みませんでした。
このことから、.lzファイルはLZ圧縮だと見て間違いないでしょう。
「やたらと00が多い」に関しては、
恐らく「そのままデータでnバイト分」とかの「n」の分に割くビットをケチり過ぎて 分断されてしまい(表せる最大バイト数を超えた)、
「そのままでaバイト分,0バイト前から0バイト分コピー(←分断されちゃったので入っちゃう),そのままでbバイト分」な感じになっちゃってるからでしょう。
画像にLZ78は使われないでしょうから、LZ77かLZSSでしょうね。
614:ゲームセンター名無し
07/03/18 01:58:45 dZzOLs5Z0
↑の続き。
さて、DDS圧縮テクスチャの頭の方は、
マジックナンバー「44 44 53 20」と構造体のサイズ「7C 00 00 00」で固定です。
その次の4バイトは色々フラグ指定をするのですが、試しに適当なソフトでDDSテクスチャを作ってみたところ、「07 10 08 00」となりました。
ちなみにどんなフラグの組み合わせにしようと最上位8ビットには掛からないので、上に書いた4バイトの4バイト目は「00」であるコトが確定しています。
…で、QMA2の.lzファイル。
プログラマの心理上、テクスチャを読み込むビデオメモリの確保の為 展開後のサイズは知っておきたいので、
上で言われていた通り、ファイル冒頭の4バイトは「展開後のサイズ」でしょう。
そして、その後、
展開後のデータが「44 44 53 20 7C 00 00 00 07 10 08 00」で、
圧縮されたデータが「C0 44 44 53 20 7C 00 06 01 07 10 08 AC」など。
LZ77による圧縮だと考えると、
最初の「C0」が「この後6バイト分、そのままのデータ」という意味で、
「06 01」が「1バイト前から2バイト分コピー」と「この後3バイト分、そのままデータ」という意味になるでしょう。
「C0」に関しては「上位3ビットが この後に続くデータの長さ」とすると「6」で計算が合いますが…
ここまででイキナリ詰まり中です。
何か分かったコトがあったら報告します。
615:ゲームセンター名無し
07/03/18 02:18:09 7cLdrcvG0
>>613-614
俺にはさっぱり日本語でおkだわorz
あんたスゲーよ。マジで。乙。
616:ゲームセンター名無し
07/03/18 05:31:39 h1FIJawW0
なぜ、展開後のデータと比較できたというのが気になりますが。
試しに作ったというDDS画像を圧縮して比較したという事ですか?
ちなみに圧縮するために使ったプログラムを教えてもらえると参考になります。
617:ゲームセンター名無し
07/03/18 11:18:14 t1m6jO4k0
すげー人がきてwktk
俺もちょっと頑張るわ
618:ゲームセンター名無し
07/03/18 16:27:59 yITDZpVy0
>>613の人に3のファイルも見てもらいたかったからファイル上げたら間違ってDisc3のイメージ上げちゃった・・・
面倒だからデーモンとかでマウントして中のファイル取り出してください
URLリンク(www2.axfc.net)
パスはいつもの
619:ゲームセンター名無し
07/03/18 18:21:34 ihOOVOqP0
>>618
GJ。
とりあえずありがたくいただきました。
620:ゲームセンター名無し
07/03/18 19:07:43 LT3JJKJ60
3のlzはqarzと同じっぽい
やっぱqarzから手をつけたほうがよさげだねw
621:613-614
07/03/18 20:20:34 8NLrBeNG0
>>616
>なぜ、展開後のデータと比較できたというのが気になりますが。
ええと、私の説明下手のせいで誤解させてしまって申し訳ありません。
まず、資料としてDDSテクスチャのファイルフォーマットを転載しておきますね。
URLリンク(flatlib.main.jp)
…で、↑にあるように、DDSテクスチャファイルは、
最初の4バイトがマジックナンバー(「DDS 」)で、その次の4バイトが構造体のサイズ(124byte)で固定なのです。
つまり、DDSテクスチャファイルであるなら、どれでも必ず冒頭の8バイトは「44 44 53 20 7C 00 00 00」になるのです(バイトの並びはリトルエンディアン)。
そしてその次の4バイトは色々属性を示すフラグなのですが、
このうち必要最低限なモノである DDSD_CAPS、DDSD_HEIGHT、DDSD_WIDTH、DDSD_PIXELFORMAT、DDSD_LINEARSIZEを立ててやると、
その値はリトルエンディアンで「07 10 08 00」となります。
…で、実際にQMA2の.lzファイルを覗いてみると「07 10 08」が見付かります。
ちなみにここでどういうフラグの組み合わせにしようとも、上位8ビットには触れません。
ですので、リトルエンディアンで4バイト分書き出した際には、4バイト目は「00」であるコトが保証されます。
ここまでをまとめると、
QMA2の.lzファイルが 「DDSテクスチャをLZ法で圧縮したモノ」と仮定するならば、
その圧縮前(=展開後)のデータにおいて、先頭の12バイトは 恐らく「44 44 53 20 7C 00 00 00 07 10 08 00」であるだろうと推測できます。
…で、コレをもとに、
「圧縮状態のデータ」を .lzファイルをダンプしたモノを見ながら、
「それを展開したデータ」を 上で述べた12バイトのデータ列として、
「圧縮アルゴリズム」を見破ろうと…。
そういうコトなのです。
説明下手でスミマセン。
622:613-614
07/03/18 20:23:31 8NLrBeNG0
>>618
今は時間あたりのDL数オーバーでDLできなかったので、
そのうちDLしときます。ありがとうございます。
623:ゲームセンター名無し
07/03/18 20:34:00 ihOOVOqP0
>>622
今DLしてみたけど、いけるよ。
再挑戦go!