「圧縮 - SFC-DQ5」の編集履歴(バックアップ)一覧はこちら

圧縮 - SFC-DQ5」(2007/11/19 (月) 22:08:36) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

**スプライト 0FD63D-: スプライト構成データアドレス 0FD787-: スプライト構成データ(先頭3Byteがスプライトデータアドレス) 展開後のデータは4色なので, yy-chr などで見るときは 2BBP NES で見る. -圧縮法 まず1Byte読み込み, それの値(Aとする)よって3つの場合に分類される. 1. A = 128 のとき データはここで終了 2. A < 128 のとき 次の A+1 Byteをそのままグラフィックデータに書き込む. 3. A > 128 のとき 次の1Byteの値を(A + 1 - 128) Byte だけグラフィックデータに書き込む. この2~3の繰り返しで1が来るまで読み込む. -例 04 0D 07 1F 3F 1F 86 00 01 30 58 83 7F 00 90 80 という圧縮データならば, 展開後は 0D 07 1F 3F 1F 00 00 00 00 00 00 00 30 58 7F 7F 7F 7F 90 というデータになる. このままでは4色しか使えないと思われるが, 実はもう一度直後のデータに対して 同じ処理を行って色の上位bitを取ってくるのである. 上位bitを使用頻度の少ない 色にして圧縮効率を高めている. そこで 2BPP NES で見れるデータを SNES 用(8*8 が 32 Byte)に変換しなければならない. 最初の16Byteを8Byteずつに分け, 奇数番目に最初の8Byte, 偶数番目に次の 8Byteが来るように並べかえればよい. 次の16Byteは2回目の読み込みの分を使う. -例 最初のデータの先頭の展開後 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 次のデータの先頭の展開後 1F 1E 1D 1C 1B 1A 19 18 17 16 15 14 13 12 11 10 →(SNES用に変換) 00 02 04 06 08 0A 0C 0E 01 03 05 07 09 0B 0D 0F 1F 1D 1B 19 17 15 13 11 1E 1C 1A 18 16 14 12 10 **モンスターグラフィック 128C45:モンスターグラフィック1アドレス (2B*42) 128C99:モンスターグラフィック1 130F99:モンスターグラフィック2アドレス (2B*45) 130FF3:モンスターグラフィック2 1382E4:モンスターグラフィック3アドレス (2B*27) 13831A:モンスターグラフィック3 -圧縮法 データの最初の6Byteが情報 00: 01: 影X座標 02: 影Y座標 03: 中心X座標 04: 中心Y座標 05: bit0-3: 大きさ{$0D9B} bit4-7: 大きさ{$0D13}(-1される, ただし0Fのときは13をとる) 次の(大きさ * 大きさ) bit がブロック位置 次の(ブロック数 * 4) bit がブロック情報 bit1: 0 なら 8*8 ブロック, 1 なら 16*16 ブロック bit2-3: 値が 00 でなければ左右反転? 以降が各 8*8 マスの構成データ, 各8*8 マスは展開後 32 Byte 分のデータになる. -構成データ 1 Byte 基本情報: bit7: 処理の Byte 数 bit6: 定数値を00にしない bit2-3: 処理2の種類 bit0-1: 処理1の種類 00: 0x10分全て00 01: 0x10分, 上位00固定, 01の各bitが1なら非定数の次の値を取る 02: 01の上位下位逆バージョン 03: 次の2Byteが定数使用状況 (1 Byte 定数: 基本情報の bit6 が 1 なら存在, なければ定数値は 00 になる) フラグ: 長さは各処理につき 00 なら 0Byte, 01 または 02 なら 1Byte, 03 なら 2Byte データ: 長さはフラグの 1 な bit の数 -例 8B 02 AF 03 01 01 03 0C 03 10 0F 03 0F → {8B} {02 AF} {03} {01 01 03 0C 03 10 0F} {03 0F} 処理1: 03 処理2: 02 定数値: 00 フラグ1: 0000001010101111 フラグ2: 00000011 →(展開) 00 00 00 00 00 00 01 00 01 00 03 00 0C 03 10 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 03 00 0F CF 20 FF FF 40 FF D0 A0 F0 80 F0 80 70 80 78 C0 38 C0 38 C0 39 C0 00 10 10 10 10 10 10 10 00 → {CF} {20} {FF FF} {40 FF} {D0 A0 F0 80 F0 80 70 80 78 C0 38 C0 38 C0 39 C0} {00 10 10 10 10 10 10 10 00} →(展開) D0 A0 F0 80 F0 80 70 80 78 C0 38 C0 38 C0 39 C0 20 00 20 20 20 20 20 20 10 10 10 10 10 10 10 00
**スプライト 0FD63D-: スプライト構成データアドレス 0FD787-: スプライト構成データ(先頭3Byteがスプライトデータアドレス) 展開後のデータは4色なので, yy-chr などで見るときは 2BBP NES で見る. -圧縮法 まず1Byte読み込み, それの値(Aとする)よって3つの場合に分類される. 1. A = 128 のとき データはここで終了 2. A < 128 のとき 次の A+1 Byteをそのままグラフィックデータに書き込む. 3. A > 128 のとき 次の1Byteの値を(A + 1 - 128) Byte だけグラフィックデータに書き込む. この2~3の繰り返しで1が来るまで読み込む. -例 04 0D 07 1F 3F 1F 86 00 01 30 58 83 7F 00 90 80 という圧縮データならば, 展開後は 0D 07 1F 3F 1F 00 00 00 00 00 00 00 30 58 7F 7F 7F 7F 90 というデータになる. -SNES形式への変換 このままでは4色しか使えないと思われるが, 実はもう一度直後のデータに対して 同じ処理を行って色の上位bitを取ってくるのである. 上位bitを使用頻度の少ない 色にして圧縮効率を高めている. そこで 2BPP NES で見れるデータを SNES 用(8*8 が 32 Byte)に変換しなければならない. 最初の16Byteを8Byteずつに分け, 奇数番目に最初の8Byte, 偶数番目に次の 8Byteが来るように並べかえればよい. 次の16Byteは2回目の読み込みの分を使う. -例 最初のデータの先頭の展開後 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 次のデータの先頭の展開後 1F 1E 1D 1C 1B 1A 19 18 17 16 15 14 13 12 11 10 →(SNES用に変換) 00 02 04 06 08 0A 0C 0E 01 03 05 07 09 0B 0D 0F 1F 1D 1B 19 17 15 13 11 1E 1C 1A 18 16 14 12 10 **モンスターグラフィック 128C45:モンスターグラフィック1アドレス (2B*42) 128C99:モンスターグラフィック1 130F99:モンスターグラフィック2アドレス (2B*45) 130FF3:モンスターグラフィック2 1382E4:モンスターグラフィック3アドレス (2B*27) 13831A:モンスターグラフィック3 -圧縮法 データの最初の6Byteが情報 00: 01: 影X座標 02: 影Y座標 03: 中心X座標 04: 中心Y座標 05: bit0-3: 大きさ{$0D9B} bit4-7: 大きさ{$0D13}(-1される, ただし0Fのときは13をとる) 次の(大きさ * 大きさ) bit がブロック位置 次の(ブロック数 * 4) bit がブロック情報 bit1: 0 なら 8*8 ブロック, 1 なら 16*16 ブロック bit2-3: 値が 00 でなければ左右反転? 以降が各 8*8 マスの構成データ, 各8*8 マスは展開後 32 Byte 分のデータになる. -構成データ 1 Byte 基本情報: bit7: 処理の Byte 数 bit6: 定数値を00にしない bit2-3: 処理2の種類 bit0-1: 処理1の種類 00: 0x10分全て00 01: 0x10分, 上位00固定, 01の各bitが1なら非定数の次の値を取る 02: 01の上位下位逆バージョン 03: 次の2Byteが定数使用状況 (1 Byte 定数: 基本情報の bit6 が 1 なら存在, なければ定数値は 00 になる) フラグ: 長さは各処理につき 00 なら 0Byte, 01 または 02 なら 1Byte, 03 なら 2Byte データ: 長さはフラグの 1 な bit の数 -例 8B 02 AF 03 01 01 03 0C 03 10 0F 03 0F → {8B} {02 AF} {03} {01 01 03 0C 03 10 0F} {03 0F} 処理1: 03 処理2: 02 定数値: 00 フラグ1: 0000001010101111 フラグ2: 00000011 →(展開) 00 00 00 00 00 00 01 00 01 00 03 00 0C 03 10 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 03 00 0F CF 20 FF FF 40 FF D0 A0 F0 80 F0 80 70 80 78 C0 38 C0 38 C0 39 C0 00 10 10 10 10 10 10 10 00 → {CF} {20} {FF FF} {40 FF} {D0 A0 F0 80 F0 80 70 80 78 C0 38 C0 38 C0 39 C0} {00 10 10 10 10 10 10 10 00} →(展開) D0 A0 F0 80 F0 80 70 80 78 C0 38 C0 38 C0 39 C0 20 00 20 20 20 20 20 20 10 10 10 10 10 10 10 00

表示オプション

横に並べて表示:
変化行の前後のみ表示:
記事メニュー
目安箱バナー