Nintendo MessageStudio ヘルプ

プロジェクトバイナリ - カラー情報

メッセージにカラータグを埋め込むときにカラーをインデックス番号で指定していた場合、メッセージにはカラーのインデックス情報が入っています。しかし、実際にカラーを適用する場合はそのカラーインデックス番号から実際のカラーデータ(RGBA)が取得できなければなりません。プロジェクトバイナリのカラー情報はこの場合のカラーリソースとして利用することができます。
また、カラーインデックス番号とカラー名を関連付けることも可能です。

カラー名ブロック(CLB1)

メッセージバイナリのLBLブロックと同じ構造となっています。

カラー名ブロック(CLB1)は、カラー名と、それに対応したインデックス番号の関連付けが可能なブロックです。 インデックス番号とは、後述するカラーブロック(CLR1)における、カラーデータの格納順序を表す連続した番号のことです。 インデックス番号は0から開始されます。

カラー名は、ASCIIコード範囲において255文字以内でつけることが可能で、MessageStudio上で設定することが可能です。 詳しくはカラー設定をご覧ください。 このブロックは、カラー名文字列のハッシュ値によってルックアップするため、カラーの数が増えても検索効率がそんなに変わりません。

カラー名ブロックは、ブロックヘッダの後に以下のようなデータ構造を持ちます。



HASH TABLE SIZEハッシュテーブルのサイズを記述します。 ハッシュテーブルのサイズはMessage Studio上で設定可能で、サイズによって速度とメモリ使用量の調整が可能です。 デフォルト値は29ですが、なるべく素数を設定してください。4バイトの情報です。

ハッシュテーブルの数値で設定した数だけ、以下の8バイトの情報が繰り返されます。 ハッシュテーブルサイズが29の場合、この部分が合計232バイトになります。
COLOR NUM IN HASH nハッシュ値nに何個のカラー名が含まれているかという情報を記述します。4バイトになります。
OFFSET OF HASH nハッシュ値nのカラー名情報へのオフセット値が4バイトで記述されます。 オフセットは、ブロックの先頭から数えられます。 上述した、ハッシュ値nに含まれるカラーの数が0である場合、このオフセット値は不定です。

上述の部分が終わった直後から、カラー名とインデックス番号の対応表のリストが記述されます。 プログラムは、ハッシュ値からブロック上のオフセットを求めた上で、この領域へアクセスします。

LENカラー名の長さを1バイトで記述します。
COLOR NAMEカラー名が記述されます。 カラー名は、出力設定によらず必ずASCII文字列になり、前述のラベル長さの量だけ続きます。
COLOR INDEXカラーインデックス番号(CLR1ブロックにおける出現位置)が4バイトで記述されます。

上記のカラー名とカラーインデックスの組み合わせは、順番にカラーの数だけ出現します。 求めたオフセット位置の直下に違うカラー名情報が存在している場合があります。 これは、特定のハッシュ値に対して複数のカラー名が登録されているからです。 その場合は読み飛ばして次のカラー名と一致するかを確認します。

カラーデータブロック(CLR1)

カラーデータブロックには、ユーザーが実際に設定しカラーデータが格納されます。 カラーデータはRGBA(各1バイト、計4バイト)で格納されています。



COLOR NUMカラーの数が4バイトで入ります。
COLOR(RGBA) n実際のカラーデータがインデックス番号順に連続して格納されています。 1つのカラーはRGBAの順に各1バイト(計4バイト)で格納されています。