|
- #==============================================================================
- # ■ 使用手順
- #==============================================================================
- # 1、スクリプトエディタに新規セクションを作成して、そこに本スクリプトをペーストします。
- # 新規セクションの位置は main セクションより上の位置ならどこでも構いません。
- #
- # 2、床と天井(オートタイルでないもの)だけで元となるマップを作成します。画像の Before の状態です。
- # 床も天井もレイヤー1(最下層レイヤー)で作成してください。
- #
- # 3、次にマップ名に「\auto」を付け加えます。
- #
- # 4、テストプレーを開始した時点で \auto の含まれた全てのマップに対して変更を加えます。
- # この時点で全てのマップが画像の After の状態になります。
- #
- # 5、エディタ上ではツクール XP の仕様の関係で変換結果が反映されないことがあります。
- # その際は、一度ツクール XP を終了して再起動してください。
- #==============================================================================
- # ■ RPG
- #==============================================================================
- module RPG
- #============================================================================
- # ■ Make_Wall
- #============================================================================
- module Make_Wall
- #------------------------------------------------------------------------
- # ● 定数
- #------------------------------------------------------------------------
- Wall_Height = 2 # 壁の高さ
- #------------------------------------------------------------------------
- # ● メイン処理
- #------------------------------------------------------------------------
- def self.main
- # マップ情報データをロード
- data_mapinfos = load_data("Data/MapInfos.rxdata")
- # タイルセットデータをロード
- data_tilesets = load_data("Data/Tilesets.rxdata")
- # 全てのマップについてチェック
- data_mapinfos.each do|id, data|
- # 自動作成フラグがセットされている場合
- if not data.name[/\\auto/].nil?
- data_mapinfos[id].name.slice!(/\\auto/)
- # マップデータをロード
- map = load_data(sprintf("Data/Map%03d.rxdata", id))
- # マップの自動作成実行
- self.refresh(map.data, data_tilesets[map.tileset_id].tileset_name)
- # マップデータをセーブ
- save_data(map, sprintf("Data/Map%03d.rxdata", id))
- end
- end
- # マップ情報データをセーブ
- save_data(data_mapinfos, "Data/MapInfos.rxdata")
- # あとしまつ
- data_mapinfos = nil
- data_tilesets = nil
- map = nil
- GC.start
- end
- #------------------------------------------------------------------------
- # ● マップ作成実行
- # data : 元のマップデータ
- # name : タイルセットの名前
- #------------------------------------------------------------------------
- def self.refresh(data, name)
- floor_id = 384
- wall_layer = 0
- # ID を指定
- case name
- when "038-Fort02"
- wall_id = 409
- corner_id = 403
- wall_layer = 1
- when "040-Tower02"
- wall_id = 409
- corner_id = 403
- when "042-EvilCastle02"
- wall_id = 409
- corner_id = 403
- when "047-Mine01"
- wall_id = 409
- corner_id = 403
- wall_layer = 1
- when "048-Sewer01"
- wall_id = 409
- corner_id = 403
- when "049-InnerBody01"
- wall_id = 433
- corner_id = 435
- wall_layer = 1
- when "050-DarkSpace01"
- wall_id = 441
- corner_id = 435
- wall_layer = 1
- else
- wall_id = 425
- corner_id = 419
- end
- # 元のデータを保存
- pre_data = data.clone
- # 判定用テーブルの作成
- table = Table.new(3, 3)
- # メインループ
- (0...data.xsize).each do|x|
- (0...data.ysize).each do|y|
- # 対象が壁でない場合は次へ
- next if pre_data[x, y, 0] != wall_id
- # 周囲八方の最下層レイヤーのタイル ID を取得
- (0...table.xsize).each do|tx|
- (0...table.ysize).each do|ty|
- id = pre_data[x + (tx-1), y + (ty-1), 0]
- table[tx, ty] = (id.nil? ? 0 : id)
- end
- end
- # 上のタイルが床の場合
- if table[1, 0] == floor_id
- case floor_id
- when table[0, 1]
- dir = -1
- when table[2, 1]
- dir = 1
- else
- dir = 0
- end
- data[x, y - 1, 1] = wall_id - 8 + dir
- end
- # 下のタイルが床の場合
- if table[1, 2] == floor_id
- case floor_id
- when table[0, 1]
- dir = -1
- when table[2, 1]
- dir = 1
- else
- dir = 0
- end
- # 壁の高さのぶんだけ繰り返す
- (0..Wall_Height).each do|i|
- if i == 0
- data[x, y + i, 0] = wall_id + 8 + dir
- elsif i == Wall_Height
- data[x, y + i, wall_layer] = wall_id + 24 + dir
- else
- data[x, y + i, 0] = wall_id + 16 + dir
- end
- end
- # 次へ
- next
- end
- # 左のタイルが床の場合
- if table[0, 1] == floor_id
- id = (table[0, 2] == wall_id ? corner_id : wall_id - 1)
- data[x, y, 0] = id
- end
- # 右のタイルが床の場合
- if table[2, 1] == floor_id
- id = (table[2, 2] == wall_id ? corner_id + 1 : wall_id + 1)
- data[x, y, 0] = id
- end
- # 右下のタイルが床で右のタイルが壁の場合
- if table[2, 2] == floor_id and table[2, 1] == wall_id
- data[x, y, 0] = corner_id + 9
- end
- # 左下のタイルが床で左のタイルが壁の場合
- if table[0, 2] == floor_id and table[0, 1] == wall_id
- data[x, y, 0] = corner_id + 8
- end
- end
- end
- end
- #------------------------------------------------------------------------
- # ● 自動実行処理
- #------------------------------------------------------------------------
- self.main
- end
- end
复制代码
轉自:http://www5f.biglobe.ne.jp/~delusion/tech/text_007.html |
|