「データ構造」の編集履歴(バックアップ)一覧に戻る

データ構造 - (2006/01/07 (土) 14:24:33) のソース

*RPGツクール2000とRPGツクール2003
RPGツクール2000とRPGツクール2003は内部的にはほとんど同じものです。
表現の簡略化のため、RPGツクール2000とRPGツクール2003のことを総称して「ツクール」「RPGツクール2000」と呼ぶことにします。

*BER圧縮整数
ツクールの整数データは全て「BER圧縮整数」という形式で保存されています。
BER圧縮整数については以下のサイトを参照
http://www.stellar.ac/~komai/unix/ber/index.html

BER圧縮整数の仕様上負の数は格納できないはずですが、無理矢理unsigned intにキャストされて格納されています(^^;
例)-1 → 4294967295(0xFFFFFFFF)

単に「整数」とあった場合、特に指定のない限りBER圧縮整数のことを指すこととします。

*配列
ツクールのデータの格納方法として一番特徴的なことは配列としての格納です。
ただし配列と言っても配列の中には整数・文字列・生のバイナリデータの全てが格納され、一番厄介なことは配列の中にさらに別の配列データが格納されていることです。ちょうど配列の中に配列がネストされているような感じです。このせいでツクールのデータ構造はかなり複雑になっています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以外で補完されることもけっこうあるので注意(マップの大きさなど、ツクールの初期値が補完されることがある)

**2次元配列
基本的には1次元配列の時と同じですが、

> 2次元配列の親要素の要素数(整数)
>  2次元配列の親要素の配列番号(整数)
>   2次元配列の子要素(1次元配列)
>  2次元配列の親要素の配列番号(整数)
>   2次元配列の子要素(1次元配列)
> …

といったように格納されています。
記事メニュー
目安箱バナー