RGSS2のマップデータ読み込み
マップデータを読み込んで配列に展開するのはこのようなコードになる。
module RPG class Map def getdata @data end end class Event class Page class Graphic end class Condition end end end class MoveRoute end class MoveCommand end class EventCommand end class SE end class BGM end class BGS end end class Table def self._load(data) ary = data.unpack("i5s*"); count = ary.shift xsize = ary.shift ysize = ary.shift zsize = ary.shift total = ary.shift @table = [] (0...zsize).each do |z| @table << [] (0...ysize).each do |y| @table[z] << [] @table[z][y] = ary[z * ysize * xsize + y * xsize, xsize] end end return @table end end d = nil open("Map013.rvdata","rb") do |fh| d = Marshal.load(fh.read) end map = d.getdata
クラスやモジュールの定義はサンプルのマップデータに含まれているデータを読むのに必要な定義であって、ひょっとしたらファイルによって変わるかもしれない。必要であれば必要なものを追加することになる。
Tableクラスの_loadなのでほんとはTableオブジェクトを返さなければならないのだろうが、なんか面倒だったのでArrayオブジェクトを返している。行儀悪いかもしれない。でもやりたいことはできているのでよしとする。
Tableクラスとして認められているすべてのデータが読めるとは限らない。例えば要素数が0とかのTableオブジェクトをMashal.loadした場合にきちんと動くかどうかはわからない。
読めることは読めるが使うのは大変難しい。昨日のコードに突っ込んでやればそれっぽく描画することはできるが、昨日のやつは中途半端なので意図した描画ができるわけでは全くない。
まあ、作ってみたのでアップしておいたというレベルだ。
誰かの参考にでもなれば。