EDIT > PS1形式のデータ構造

本ページではPS1におけるTYPE2バージョンのEDITデータのデータ構造を記す。
バイナリエディタを使ったことが無いと理解できない話になると思われるが、バイナリエディタの使い方を覚えてくるか「あー そーゆーことね 完全に理解した」と雰囲気だけでお楽しみください。


EDITデータ名

8文字まで設定できる。
00000032から1文字4バイト使用して設定されている。
最大8文字なので00000041までが使用される。


楽曲名

000002ACから記述されている。
ただし、この楽曲名でどの曲と対応しているかをチェックしているわけではなく、
00000244~00000245、00000288~00000289の4バイト2か所に記載されている楽曲IDによって判定されていると思われる。
ちなみに『HAVE YOU NEVER BEEN MELLOW』のデータが「01 00」なので、これがID1番の曲と思われる。


譜面データ

前提として、StepManiaなどとは違い、1小節を必ず16分割してデータを保持している。
1小節につき32バイト、1ノーツにつき2バイト使って記載されている。

←が1、↓が2、↑が4、→が8の足し算によって表され、左右同時押しなら1+8で9となる。
ノーツがない個所はすべてが無いので0という扱いになる。
これだけなら1バイトだが、1P側と2P側の両方を記載するために2バイト使用している。
1P側が上位バイトとなり、1P→と2P↑の同時押しなら「84」という値になる。
シングルプレー用の譜面の場合、1Pと2Pには同じ値を記載する(例:↑だけなら「44」が入る)

たとえばこの画像のデータなら次のようになる。

アドレス下1桁 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
譜面データ 10 20 40 80 01 02 04 08 30 00 A0 00 81 00 05 00

このままでは三連符を置くことが出来ない。
どうするのか。各拍の先頭である(上の表では赤で表示されている)00、04、08、0Cに「FF」を入れることで三連符の目印とする。
そして拍の先頭をその次のアドレスに変えるという手法を取っている。
アドレス下1桁 00 01 02 03 04 05 06 07
譜面データ FF 20 40 80 FF 01 04 02
(長くなるため省いたが、08~0Fも同様)

この仕様のため、同じ拍の間に三連符と8分、16分音符を混ぜることはできない。(※通常、そんな配置をすることは無いので問題ない)
また、フリーズアローと三連符を表す「FF」の相性が悪いため、三連符とフリーズアローを同居させることも通常の操作ではできない。

通常ノートに関しては、2小節目が(※EDITデータでは1小節目に矢印を置けないことになっている)000003A0になっており、そこから配置される。
フリーズアローのデータについては楽曲(の小節数)によってどこから保存されるか異なる。
42小節の楽曲である場合、00000630から保存される。
おそらく、000003A0の「03A」に対して「小節数-1」を加算した場所になると思われる。
(03Aは10進数で58。58+(42-1)=99。99を16進数に戻すと63となり、00000「63」0という具合。)

フリーズアローの部分では通常ノートと同じ方法で数字を割りふる。
ただし、ここではあくまで「どの方向にどれだけの長さを割り振るか」というデータしか保存していない。
例えば以下の例では00から←に1拍分の長さ、06から→に半拍分の長さを割り振っているが、これに対応する個所に通常ノートが配置されている必要がある。
アドレス下1桁 00 01 02 03 04 05 06 07
フリーズアロー部分データ 10 10 10 10 10 00 04 04
通常ノート部分データ 10 00 00 00 00 00 04 00
(長くなるため省いたが、08~0Fも同様)

三連符にはFFを使っているが、Fということは上下左右すべてのフラグが立っている状態であり、このフリーズアローのデータの解釈で不整合となることがあり、相性が悪い。
また、この仕組み上、16分音符1つ以上の隙間がない同方向のフリーズアローが配置できない。
アドレス下1桁 00 01 02 03 04 05 06 07
フリーズアロー部分データ 10 10 10 10 10 10 10 10
通常ノート部分データ 10 00 00 00 10 00 00 00
この例だとアドレス03の赤の部分が空いていないと、フリーズアローが繋がってしまう。

タグ:

子ページ
最終更新:2022年04月17日 14:46
添付ファイル