スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

sad(エフェクト)ファイルの構造を解説します


mmm_001.png  mmm_002.png  mmm_003.png  mmm_004.png  mmm_005.png  mmm_006.png  mmm_007.png  mmm_008.png  mmm_009.png  mmm_010.png 

SadReaderを更新しました!

SadReader_205.zip

●変更点
・フォームアプリケーションになりました
・.smiファイルを読み込めるように。

主な概要は、前回の記事をご覧下さい。




今回説明するのは [画像データ部] のみです。
くさーさんの言われた [動画定義部] [行動定義部] については全くわかりません。

また、今回の方法で解析できるのは、6割程度だと思ってください(´_`。)


解析には多くの時間と労力を費やします。


「推測を立てる ⇒ ファイル書き換え ⇒ RS起動」
の繰り返しです。正直きついです( ´థ,_‥థ`)

それだけは覚えておいてください。


長くなるので追記で解説します。




解析に必要なもの
Stirling(スターリング)
バイナリエディタというやつです。
「これから自分も解析したい!!」という方は、ダウンロードしてください。

ファイルをこんな感じに表示してくれます。
MMMのエフェクトですね
Baidu IME_2012-8-18_6-36-46

      / ̄ ̄ ̄\
    / ─    ─ \
   /  (●)  (●)  \
   |    (__人__)    |  なんだよこれ
   \    ` ⌒´    /
   /              \


難しく考えずに、頭を柔らかくしましょう。



必ず知っておくべきこと
・16進数 / 2進数
10進数が [0~9] の10個の数字から成っているように、
16進数は [0~9,A~F] の16個の数字から成っています。
2進数も同様です。

わかると思うので省略。


・リトルエンディアン / ビッグエンディアン
バイナリは [57 33 00 00 ...] などのようになってますが、
この1つ1つの固まり、例えば [57] が1Byte(8bit)です。

ビッグエンディアンはそのまま読めます。
ですが、リトルエンディアンは、Byte単位で数値が逆になります

[12 34 56 78] というデータで言うと
・ビッグエンディアン [12 34 56 78]
・リトルエンディアン [78 56 34 12]
となります。

REDSTONEのデータはこの「リトルエンディアン」で構成されています。


・15bitカラー
htmlで色文字を書くとき、<font color="#123456"> のように書きますよね。
この [123456] の部分は16進数の3Byte(24bit)として読み込まれます。
赤=[12] , 緑=[34] , 青=[56] ですね。

しかし15bitの場合、赤緑青がそれぞれ5bitずつで表現されます。

● 15bit(16bit) ⇒ 24bit の計算
[56 A7] という16進数があったとすると、
 1. 2進数にして [01010110 10100111] (わかりやすく色付けします)
 2. 上位1bitを削って [1010110 10100111]
 3. 5bitずつに分けて [10101 10101 00111]
 4. 各々の下位に [0] を3bitずつ足して [10101000 10101000 00111000]
 5. 16進数に直す [a8 a8 38] ⇒
となります。

※ 以上の計算方法は、必ず覚えてください。

             ____
           /      \
          / ─    ─ \
        /   (●)  (●)  \
        |      (__人__)     | むりむり
         \     ` ⌒´    ,/
 r、     r、/          ヘ
 ヽヾ 三 |:l1             ヽ
  \>ヽ/ |` }            | |
   ヘ lノ `'ソ             | |
    /´  /             |. |
    \. ィ                |  |
        |                |  |


慣れれば簡単です。


REDSTONEのデータはリトルエンディアンなので、
[56 A7] の場合、[A7 56] に直してから2進数にして・・・云々。


結果は [48 d0 b0] となります。 ⇒

ビッグとリトルで色が全然違いますね。


計算が面倒という方には、変換ページがあります( ゚∀゚)o彡゜
進数の変換



解説
ダンプファイルを使って解説していきます。

今回見るのは「skill_spear_blocker.sad」です。(MMMのエフェクト)

リトルエンディアンであることを忘れずに。

※ アドレスの上位4bitを消してます。

ADDR 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
----------------------------------------------------
0000 57 33 00 00 C7 CF B4 C3 20 BD BA C7 C1 B6 F3 C0 ファイルサイズ
0010 CC C6 AE 20 BF A1 B4 CF B8 DE C0 CC BC C7 20 B5 恐らく固定値
0020 A5 C0 CC C5 CD 20 32 00 00 00 00 00 41 00 CF 00 不明
0030 F8 00 F8 00 FE FE 0A 00 0A 00 00 65 00 01 00 08 総コマ数(10コマ)
0040 00 00 FF 7F F0 45 09 25 E7 20 E7 1C E7 20 E8 20 パレットデータ(256色)
0050 08 25 08 25 C7 1C 29 29 A5 18 A6 18 A6 18 C6 18 1色が2Byteずつ
               
               
0220 72 52 29 29 84 10 EF 45 4A 2D 4A 2D 8C 35 CE 41 計512Byte
0230 10 4A AD 3D AD 39 8C 39 29 29 29 29 08 25 CE 41
0240 00 00 00 00 71 01 00 00 68 03 00 00 B3 05 00 00 各最後尾までのByte数
0250 D2 07 00 00 06 0A 00 00 7D 0C 00 00 9F 0E 00 00 各コマ4Byteずつで
0260 96 11 00 00 31 14 00 00 B0 15 00 00 -- -- -- -- 計40Byte(4*10コマ)
   ↑Byte数は、1コマ目の画像データの始まり [0260-0C] からのByte数です。

※ アドレス [0260] を分けてます。

下の緑の部分を絵で表すと、こんな感じになります。
sad_basyobyte2.png




次のByteからは、1コマ目の画像データです。
ここから少し複雑になります。



1コマ目の「最後尾までのByte数」は [71 01 00 00] なので
ビッグエンディアンに直して [00 00 01 71]
計算すると、369Byteとなります。

つまり 026C(16進) + 369(10進) - 1 = 03DC(16進) となり、
[0260-0C] ~ [03D0-0C] が、1コマ目の画像データとなります。


ADDR 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
----------------------------------------------------
0260 -- -- -- -- -- -- -- -- -- -- -- -- 11 00 3F 00 横幅px 縦幅px
0270 08 00 31 00 -- -- -- -- -- -- -- -- -- -- -- -- 基準横px 基準縦px

今回は、
横幅17px縦幅63px
・基準横座標8px、基準縦座標49px
であることがわかります。


基準の横縦がありますが、これは位置調整のためのものです。




ここからは色の配置データです。

ADDR 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
----------------------------------------------------
0270 -- -- -- -- 01 02 01 74 01 02 01 79 01 02 02 79
0280 D5 01 02 03 76 74 D5 01 01 05 7B 7B B2 74 75 01
0290 01 05 76 7B 74 74 75 01 01 06 79 7B D5 75 75 75
02A0 01 00 08 76 79 7B 5E 62 62 62 62 01 00 07 56 56
02B0 5B B4 56 62 62 01 01 06 6E 4D 4C 56 4D 4D 01 02
02C0 04 6E 62 56 4D 01 03 04 62 62 62 6C 01 03 04 77
02D0 62 7B 75 01 04 03 A7 A7 AC 01 04 03 B5 EF AC 01
02E0 04 03 B5 EF DB 01 05 02 F0 A7 01 04 03 4E 56 DC
02F0 01 05 02 6D 3B 01 05 02 6D 4B 01 05 03 6D 48 48
0300 01 06 02 46 4A 01 06 02 50 4A 01 06 02 52 48 01
0310 06 02 6D 51 01 06 03 6D 51 48 01 07 02 50 4A 01
0320 07 02 47 4A 01 07 02 52 48 01 07 02 6D 51 01 07
0330 03 6D 4F 48 01 08 02 47 4A 01 08 02 52 3B 01 08
0340 02 52 51 01 08 02 6D 4F 01 08 03 52 50 48 01 09
0350 02 4F 4A 01 09 02 4F 4B 01 09 02 50 51 01 09 02
0360 52 51 01 09 03 52 51 4B 01 0A 02 46 4A 01 0A 02
0370 46 4B 01 0A 02 4F 48 01 0A 02 52 48 01 0A 03 52
0380 48 4B 01 0B 02 48 4A 01 0B 02 51 4B 01 0B 02 4F
0390 48 01 0B 02 4D 48 01 0B 03 52 42 4B 01 0C 02 51
03A0 4A 01 0C 02 46 4A 01 0C 02 52 4B 01 0C 02 6D 4B
03B0 01 0C 03 52 40 4B 01 0D 02 42 74 01 0D 02 46 4A
03C0 01 0D 02 82 87 01 0D 02 62 4C 01 0D 03 62 4D 5E
03D0 02 0D 01 74 02 01 98 01 0D 03 6E BC 59 -- -- --



列ごとに設定される値。その列に有色の塊が何回くるかを表す。
1列に1回のみ設定される。


その列で、何px目から色が始まるかを表す。
が2以上の場合は、次に色が来るまでのpx値。


色の個数を表す。この分だけの個数が増えます。
が2以上の場合は、それぞれ設定されます。


パレットデータを参照する番号。
今回は、[00] だと [00 00] 。[01] だと [FF 7F] という感じです。



文章だけでは理解しづらいので、
こういうのはどうでしょう。


01 02 01 74
01 02 01 79
01 02 02 79 D5
01 02 03 76 74 D5
01 01 05 7B 7B B2 74 75
01 01 05 76 7B 74 74 75
01 01 06 79 7B D5 75 75 75
01 00 08 76 79 7B 5E 62 62 62 62
01 00 07 56 56 5B B4 56 62 62
01 01 06 6E 4D 4C 56 4D 4D
01 02 04 6E 62 56 4D
01 03 04 62 62 62 6C
01 03 04 77 62 7B 75
01 04 03 A7 A7 AC
01 04 03 B5 EF AC
01 04 03 B5 EF DB
01 05 02 F0 A7
01 04 03 4E 56 DC
01 05 02 6D 3B
01 05 02 6D 4B
01 05 03 6D 48 48
01 06 02 46 4A
01 06 02 50 4A
01 06 02 52 48
01 06 02 6D 51
01 06 03 6D 51 48
01 07 02 50 4A
01 07 02 47 4A
01 07 02 52 48
01 07 02 6D 51
01 07 03 6D 4F 48
01 08 02 47 4A
01 08 02 52 3B
01 08 02 52 51
01 08 02 6D 4F
01 08 03 52 50 48
01 09 02 4F 4A
01 09 02 4F 4B
01 09 02 50 51
01 09 02 52 51
01 09 03 52 51 4B
01 0A 02 46 4A
01 0A 02 46 4B
01 0A 02 4F 48
01 0A 02 52 48
01 0A 03 52 48 4B
01 0B 02 48 4A
01 0B 02 51 4B
01 0B 02 4F 48
01 0B 02 4D 48
01 0B 03 52 42 4B
01 0C 02 51 4A
01 0C 02 46 4A
01 0C 02 52 4B
01 0C 02 6D 4B
01 0C 03 52 40 4B
01 0D 02 42 74
01 0D 02 46 4A
01 0D 02 82 87
01 0D 02 62 4C
01 0D 03 62 4D 5E
02 0D 01 74 02 01 98 この列は、紫が[02]で、2個目の青が[02]であるので
01 0D 03 6E BC 59   途中に空白が2pxあることがわかります。

     ____
   /      \
  /  ─    ─\
/    (●)  (●) \
|       (__人__)    | ほぉほぉ
/     ∩ノ ⊃  /
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /



なにか見えてきましたね。


では、上のルールに従います。


-- -- 74
-- -- 79
-- -- 79 D5
-- -- 76 74 D5
-- 7B 7B B2 74 75
-- 76 7B 74 74 75
-- 79 7B D5 75 75 75
76 79 7B 5E 62 62 62 62
56 56 5B B4 56 62 62
-- 6E 4D 4C 56 4D 4D
-- -- 6E 62 56 4D
-- -- -- 62 62 62 6C
-- -- -- 77 62 7B 75
-- -- -- -- A7 A7 AC
-- -- -- -- B5 EF AC
-- -- -- -- B5 EF DB
-- -- -- -- -- F0 A7
-- -- -- -- 4E 56 DC
-- -- -- -- -- 6D 3B
-- -- -- -- -- 6D 4B
-- -- -- -- -- 6D 48 48
-- -- -- -- -- -- 46 4A
-- -- -- -- -- -- 50 4A
-- -- -- -- -- -- 52 48
-- -- -- -- -- -- 6D 51
-- -- -- -- -- -- 6D 51 48
-- -- -- -- -- -- -- 50 4A
-- -- -- -- -- -- -- 47 4A
-- -- -- -- -- -- -- 52 48
-- -- -- -- -- -- -- 6D 51
-- -- -- -- -- -- -- 6D 4F 48
-- -- -- -- -- -- -- -- 47 4A
-- -- -- -- -- -- -- -- 52 3B
-- -- -- -- -- -- -- -- 52 51
-- -- -- -- -- -- -- -- 6D 4F
-- -- -- -- -- -- -- -- 52 50 48
-- -- -- -- -- -- -- -- -- 4F 4A
-- -- -- -- -- -- -- -- -- 4F 4B
-- -- -- -- -- -- -- -- -- 50 51
-- -- -- -- -- -- -- -- -- 52 51
-- -- -- -- -- -- -- -- -- 52 51 4B
-- -- -- -- -- -- -- -- -- -- 46 4A
-- -- -- -- -- -- -- -- -- -- 46 4B
-- -- -- -- -- -- -- -- -- -- 4F 48
-- -- -- -- -- -- -- -- -- -- 52 48
-- -- -- -- -- -- -- -- -- -- 52 48 4B
-- -- -- -- -- -- -- -- -- -- -- 48 4A
-- -- -- -- -- -- -- -- -- -- -- 51 4B
-- -- -- -- -- -- -- -- -- -- -- 4F 48
-- -- -- -- -- -- -- -- -- -- -- 4D 48
-- -- -- -- -- -- -- -- -- -- -- 52 42 4B
-- -- -- -- -- -- -- -- -- -- -- -- 51 4A
-- -- -- -- -- -- -- -- -- -- -- -- 46 4A
-- -- -- -- -- -- -- -- -- -- -- -- 52 4B
-- -- -- -- -- -- -- -- -- -- -- -- 6D 4B
-- -- -- -- -- -- -- -- -- -- -- -- 52 40 4B
-- -- -- -- -- -- -- -- -- -- -- -- -- 42 74
-- -- -- -- -- -- -- -- -- -- -- -- -- 46 4A
-- -- -- -- -- -- -- -- -- -- -- -- -- 82 87
-- -- -- -- -- -- -- -- -- -- -- -- -- 62 4C
-- -- -- -- -- -- -- -- -- -- -- -- -- 62 4D 5E
-- -- -- -- -- -- -- -- -- -- -- -- -- 74 -- -- 98
-- -- -- -- -- -- -- -- -- -- -- -- -- 6E BC 59


パレットデータを参照します。


-- -- 74
-- -- 79
-- -- 79 D5
-- -- 76 74 D5
-- 7B 7B B2 74 75
-- 76 7B 74 74 75
-- 79 7B D5 75 75 75
76 79 7B 5E 62 62 62 62
56 56 5B B4 56 62 62
-- 6E 4D 4C 56 4D 4D
-- -- 6E 62 56 4D
-- -- -- 62 62 62 6C
-- -- -- 77 62 7B 75
-- -- -- -- A7 A7 AC
-- -- -- -- B5 EF AC
-- -- -- -- B5 EF DB
-- -- -- -- -- F0 A7
-- -- -- -- 4E 56 DC
-- -- -- -- -- 6D 3B
-- -- -- -- -- 6D 4B
-- -- -- -- -- 6D 48 48
-- -- -- -- -- -- 46 4A
-- -- -- -- -- -- 50 4A
-- -- -- -- -- -- 52 48
-- -- -- -- -- -- 6D 51
-- -- -- -- -- -- 6D 51 48
-- -- -- -- -- -- -- 50 4A
-- -- -- -- -- -- -- 47 4A
-- -- -- -- -- -- -- 52 48
-- -- -- -- -- -- -- 6D 51
-- -- -- -- -- -- -- 6D 4F 48
-- -- -- -- -- -- -- -- 47 4A
-- -- -- -- -- -- -- -- 52 3B
-- -- -- -- -- -- -- -- 52 51
-- -- -- -- -- -- -- -- 6D 4F
-- -- -- -- -- -- -- -- 52 50 48
-- -- -- -- -- -- -- -- -- 4F 4A
-- -- -- -- -- -- -- -- -- 4F 4B
-- -- -- -- -- -- -- -- -- 50 51
-- -- -- -- -- -- -- -- -- 52 51
-- -- -- -- -- -- -- -- -- 52 51 4B
-- -- -- -- -- -- -- -- -- -- 46 4A
-- -- -- -- -- -- -- -- -- -- 46 4B
-- -- -- -- -- -- -- -- -- -- 4F 48
-- -- -- -- -- -- -- -- -- -- 52 48
-- -- -- -- -- -- -- -- -- -- 52 48 4B
-- -- -- -- -- -- -- -- -- -- -- 48 4A
-- -- -- -- -- -- -- -- -- -- -- 51 4B
-- -- -- -- -- -- -- -- -- -- -- 4F 48
-- -- -- -- -- -- -- -- -- -- -- 4D 48
-- -- -- -- -- -- -- -- -- -- -- 52 42 4B
-- -- -- -- -- -- -- -- -- -- -- -- 51 4A
-- -- -- -- -- -- -- -- -- -- -- -- 46 4A
-- -- -- -- -- -- -- -- -- -- -- -- 52 4B
-- -- -- -- -- -- -- -- -- -- -- -- 6D 4B
-- -- -- -- -- -- -- -- -- -- -- -- 52 40 4B
-- -- -- -- -- -- -- -- -- -- -- -- -- 42 74
-- -- -- -- -- -- -- -- -- -- -- -- -- 46 4A
-- -- -- -- -- -- -- -- -- -- -- -- -- 82 87
-- -- -- -- -- -- -- -- -- -- -- -- -- 62 4C
-- -- -- -- -- -- -- -- -- -- -- -- -- 62 4D 5E
-- -- -- -- -- -- -- -- -- -- -- -- -- 74 -- -- 98
-- -- -- -- -- -- -- -- -- -- -- -- -- 6E BC 59


少し手を加えると・・・


--
--
--
--
-
-
-


-
--
---
---
----
----
----
-----
----
-----
-----
-----
------
------
------
------
------
-------
-------
-------
-------
-------
--------
--------
--------
--------
--------
---------
---------
---------
---------
---------
----------
----------
----------
----------
----------
-----------
-----------
-----------
-----------
-----------
------------
------------
------------
------------
------------
-------------
-------------
-------------
-------------
-------------
---------------
-------------

         |
     \  __  /
     _ (m) _
        |ミ|
      /  `´  \
       ____
     /⌒  ⌒\
   /( ●)  (●)\
  /::::::⌒(__人__)⌒::::: \
  |     |r┬-|     | SUGEEEEEEEE!!!
  \      `ー'´     /




綺麗にできましたね( ゚∀゚)o彡゜


↓まさしくこれです。




こうして解説してみると、あっけなく終わりますね。


解説は以上です。


よくわからなかったという方は、もう一度よく読んでください。

後半が複雑ですが、必ずわかります。





解析最高!!!( ゚∀゚)o彡゜


じゃあのOh!Yeah!!

スポンサーサイト

コメント

RedSt0ne 神です!

情報ありがとうございます。
これをもとに私も何か作ってみようかと思います。
完成したら報告しますね。

ねいほ

こぅさんすごい!

すごい!けど、ネイは・・・・使えなさそう(´Д⊂グスン

くさー

ハイテク装置ィィィ!
確か基本256カラーのBmp形式だけど一部high color形式のBmpが混じってるからそれで落ちるんじゃないかな~
画像枚数の+5hがBitCountだったはず

こぅ >返信

>RedSt0neさん
おおお!!
そういう方を待ってました( ゚∀゚)o彡゜
多くの方が解析して、色々なツールが出来上がってほしいですね(゜∀゚()


>ネイさん
ツール?使い方簡単だよ!!
ファイルをドラッグ&ドロップするだけ!
もっと簡単な仕様にする!?(´゚A゚`)


>くさーさん
うはー!! いいこときいた( ´థ౪థ)フヘヘ
確かに読み込めなかった「exp_dark.sad」等は[08]でなく[10]になってました(´゚A゚`)
ちょっとhigh colorについて勉強してみます( ゚∀゚)o彡゜
とりあえずhigh colorはエラー処理で^p^

うんこさん

なるほどなっとくしたけど鼻血でた

こぅ >かとらさん

なんでWWW
すごすぎた?^p^
( ´థ,_‥థ`)

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

こぅ >管理人のみさん

はい!了解しました!

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

こぅ >管理人のみさん

すみません、返信が大分おくれました。
内容の返信はメールでします( ゚∀゚)o彡゜

コメントの投稿

トラックバック


この記事にトラックバックする(FC2ブログユーザー)

-

管理人の承認後に表示されます
今日のこぅくん
テニスと映画とプログラムが好きです
頑張るぞー( ゚∀゚)o彡゜
リンク先の更新!
プロフィール

こぅです(゜∀゚()
REDSTONEの青鯖にいます。
ギルドラオス共和国に所属。

引退してます。

九州住みの大学生です(  ̄^ ̄)ゝ

・Twitter: koukunRS
・Skype: yamadashi_skype
・Discord: kou#9204
・Gmail: koukun0120@...



赤石( ゚∀゚)o彡゜
リンク
いつもより余計に回っております


こっそり
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。