RPGツクール2000とRPGツクール2003
RPGツクール2000とRPGツクール2003は内部的にはほとんど同じものです。
表現の簡略化のため、RPGツクール2000とRPGツクール2003のことを総称して「ツクール」「RPGツクール2000」と呼ぶことにします。
表現の簡略化のため、RPGツクール2000とRPGツクール2003のことを総称して「ツクール」「RPGツクール2000」と呼ぶことにします。
BER圧縮整数
ツクールの整数データは全て「BER圧縮整数」という形式で保存されています。
BER圧縮整数については以下のサイトを参照
http://www.stellar.ac/~komai/unix/ber/index.html
BER圧縮整数については以下のサイトを参照
http://www.stellar.ac/~komai/unix/ber/index.html
BER圧縮整数の仕様上負の数は格納できないはずですが、無理矢理unsigned intにキャストされて格納されています(^^;
例)-1 → 4294967295(0xFFFFFFFF)
例)-1 → 4294967295(0xFFFFFFFF)
単に「整数」とあった場合、特に指定のない限りBER圧縮整数のことを指すこととします。
配列
ツクールのデータの格納方法として一番特徴的なことは配列としての格納です。
ただし配列と言っても配列の中には整数・文字列・生のバイナリデータの全てが格納され、一番厄介なことは配列の中にさらに別の配列データが格納されていることです。ちょうど配列の中に配列がネストされているような感じです。このせいでツクールのデータ構造はかなり複雑になっていますorz
ただし配列と言っても配列の中には整数・文字列・生のバイナリデータの全てが格納され、一番厄介なことは配列の中にさらに別の配列データが格納されていることです。ちょうど配列の中に配列がネストされているような感じです。このせいでツクールのデータ構造はかなり複雑になっていますorz
ツクールでは1次元配列と2次元配列の2種類が使用されています。
1次元配列
基本的には
配列番号(整数) データサイズ(整数) データ部分 配列番号(整数) データサイズ(整数) データ部分 …
の構造です。生データの中に整数や文字列や別の配列データが入っています。
例)
- 整数データ
- 01 01 02 → 01(配列番号:1) 01(データサイズ:1) 02(データ部分)
- 文字列データ
- 02 04 54 45 53 54 → 02(配列番号:2) 04(データサイズ:4) "TEST"
- 注意)
- 配列バッファ内には終端の'\0'(NULL)は含まれていない
- 文字列はShift-JISで格納
- バイナリデータ
- 47 84 58 00 00 … → 47(配列番号:71) 84 58(データサイズ:600) 00 00…(データ部分)
配列番号は1から始まります。配列番号に0がきた場合、そこが配列の終端となります。
配列番号が省略された場合、その番号のデータは基本的には0が補完される与えられるが、0以外で補完されることもけっこうあるので注意(マップの大きさなど、ツクールの初期値が補完されることがある)
配列番号が省略された場合、その番号のデータは基本的には0が補完される与えられるが、0以外で補完されることもけっこうあるので注意(マップの大きさなど、ツクールの初期値が補完されることがある)
2次元配列
基本的には1次元配列の時と同じですが、
2次元配列の親要素の要素数(整数) 2次元配列の親要素の配列番号(整数) 2次元配列の子要素(1次元配列) 2次元配列の親要素の配列番号(整数) 2次元配列の子要素(1次元配列) …
といったように格納されています。