幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1197|回复: 2

【未翻譯】地圖繪制小偷懶腳本

[复制链接]

845

主题

1万

帖子

214748万

积分

版主

脑残中……

Rank: 7Rank: 7Rank: 7

积分
2147483647

声命组金赏

发表于 2006-12-1 12:35:51 | 显示全部楼层 |阅读模式
  1. #==============================================================================
  2. # ■ 使用手順
  3. #==============================================================================
  4. # 1、スクリプトエディタに新規セクションを作成して、そこに本スクリプトをペーストします。
  5. #   新規セクションの位置は main セクションより上の位置ならどこでも構いません。
  6. #
  7. # 2、床と天井(オートタイルでないもの)だけで元となるマップを作成します。画像の Before の状態です。
  8. #   床も天井もレイヤー1(最下層レイヤー)で作成してください。
  9. #
  10. # 3、次にマップ名に「\auto」を付け加えます。
  11. #
  12. # 4、テストプレーを開始した時点で \auto の含まれた全てのマップに対して変更を加えます。
  13. #   この時点で全てのマップが画像の After の状態になります。
  14. #
  15. # 5、エディタ上ではツクール XP の仕様の関係で変換結果が反映されないことがあります。
  16. #   その際は、一度ツクール XP を終了して再起動してください。
  17. #==============================================================================
  18. # ■ RPG
  19. #==============================================================================
  20. module RPG
  21.   #============================================================================
  22.   # ■ Make_Wall
  23.   #============================================================================
  24.   module Make_Wall
  25.     #------------------------------------------------------------------------
  26.     # ● 定数
  27.     #------------------------------------------------------------------------
  28.     Wall_Height = 2          # 壁の高さ
  29.     #------------------------------------------------------------------------
  30.     # ● メイン処理
  31.     #------------------------------------------------------------------------
  32.     def self.main
  33.       # マップ情報データをロード
  34.       data_mapinfos = load_data("Data/MapInfos.rxdata")
  35.       # タイルセットデータをロード
  36.       data_tilesets = load_data("Data/Tilesets.rxdata")
  37.       # 全てのマップについてチェック
  38.       data_mapinfos.each do|id, data|
  39.         # 自動作成フラグがセットされている場合
  40.         if not data.name[/\\auto/].nil?
  41.           data_mapinfos[id].name.slice!(/\\auto/)
  42.           # マップデータをロード
  43.           map = load_data(sprintf("Data/Map%03d.rxdata", id))
  44.           # マップの自動作成実行
  45.           self.refresh(map.data, data_tilesets[map.tileset_id].tileset_name)
  46.           # マップデータをセーブ
  47.           save_data(map, sprintf("Data/Map%03d.rxdata", id))
  48.         end
  49.       end
  50.       # マップ情報データをセーブ
  51.       save_data(data_mapinfos, "Data/MapInfos.rxdata")
  52.       # あとしまつ
  53.       data_mapinfos = nil
  54.       data_tilesets = nil
  55.       map = nil
  56.       GC.start
  57.     end
  58.     #------------------------------------------------------------------------
  59.     # ● マップ作成実行
  60.     #      data : 元のマップデータ
  61.     #      name : タイルセットの名前
  62.     #------------------------------------------------------------------------
  63.     def self.refresh(data, name)
  64.       floor_id = 384
  65.       wall_layer = 0
  66.       # ID を指定
  67.       case name
  68.       when "038-Fort02"
  69.         wall_id = 409
  70.         corner_id = 403
  71.         wall_layer = 1
  72.       when "040-Tower02"
  73.         wall_id = 409
  74.         corner_id = 403
  75.       when "042-EvilCastle02"
  76.         wall_id = 409
  77.         corner_id = 403
  78.       when "047-Mine01"
  79.         wall_id = 409
  80.         corner_id = 403
  81.         wall_layer = 1
  82.       when "048-Sewer01"
  83.         wall_id = 409
  84.         corner_id = 403
  85.       when "049-InnerBody01"
  86.         wall_id = 433
  87.         corner_id = 435
  88.         wall_layer = 1
  89.       when "050-DarkSpace01"
  90.         wall_id = 441
  91.         corner_id = 435
  92.         wall_layer = 1
  93.       else
  94.         wall_id = 425
  95.         corner_id = 419
  96.       end
  97.       # 元のデータを保存
  98.       pre_data = data.clone
  99.       # 判定用テーブルの作成
  100.       table = Table.new(3, 3)
  101.       # メインループ
  102.       (0...data.xsize).each do|x|
  103.         (0...data.ysize).each do|y|
  104.           # 対象が壁でない場合は次へ
  105.           next if pre_data[x, y, 0] != wall_id
  106.           # 周囲八方の最下層レイヤーのタイル ID を取得
  107.           (0...table.xsize).each do|tx|
  108.             (0...table.ysize).each do|ty|
  109.               id = pre_data[x + (tx-1), y + (ty-1), 0]
  110.               table[tx, ty] = (id.nil? ? 0 : id)
  111.             end
  112.           end
  113.           # 上のタイルが床の場合
  114.           if table[1, 0] == floor_id
  115.             case floor_id
  116.             when table[0, 1]
  117.               dir = -1
  118.             when table[2, 1]
  119.               dir = 1
  120.             else
  121.               dir = 0
  122.             end
  123.             data[x, y - 1, 1] = wall_id - 8 + dir
  124.           end
  125.           # 下のタイルが床の場合
  126.           if table[1, 2] == floor_id
  127.             case floor_id
  128.             when table[0, 1]
  129.               dir = -1
  130.             when table[2, 1]
  131.               dir = 1
  132.             else
  133.               dir = 0
  134.             end
  135.             # 壁の高さのぶんだけ繰り返す
  136.             (0..Wall_Height).each do|i|
  137.               if i == 0
  138.                 data[x, y + i, 0] = wall_id + 8 + dir
  139.               elsif i == Wall_Height
  140.                 data[x, y + i, wall_layer] = wall_id + 24 + dir
  141.               else
  142.                 data[x, y + i, 0] = wall_id + 16 + dir
  143.               end
  144.             end
  145.             # 次へ
  146.             next
  147.           end
  148.           # 左のタイルが床の場合
  149.           if table[0, 1] == floor_id
  150.             id = (table[0, 2] == wall_id ? corner_id : wall_id - 1)
  151.             data[x, y, 0] = id
  152.           end
  153.           # 右のタイルが床の場合
  154.           if table[2, 1] == floor_id
  155.             id = (table[2, 2] == wall_id ? corner_id + 1 : wall_id + 1)
  156.             data[x, y, 0] = id
  157.           end
  158.           # 右下のタイルが床で右のタイルが壁の場合
  159.           if table[2, 2] == floor_id and table[2, 1] == wall_id
  160.             data[x, y, 0] = corner_id + 9
  161.           end
  162.           # 左下のタイルが床で左のタイルが壁の場合
  163.           if table[0, 2] == floor_id and table[0, 1] == wall_id
  164.             data[x, y, 0] = corner_id + 8
  165.           end
  166.         end
  167.       end
  168.     end
  169.     #------------------------------------------------------------------------
  170.     # ● 自動実行処理
  171.     #------------------------------------------------------------------------
  172.     self.main
  173.   end
  174. end
复制代码

轉自:http://www5f.biglobe.ne.jp/~delusion/tech/text_007.html
http://icv.cc声动音缘配音社
回复

使用道具 举报

好人卡的 该用户已被删除
发表于 2006-12-5 13:24:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

845

主题

1万

帖子

214748万

积分

版主

脑残中……

Rank: 7Rank: 7Rank: 7

积分
2147483647

声命组金赏

 楼主| 发表于 2006-12-5 15:09:20 | 显示全部楼层
[s:7] 没说不让转的东西在标注出处的情况下是可以随便转载的~ 亲爱的鸡嫂(心)
http://icv.cc声动音缘配音社
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2025-6-27 16:21 , Processed in 0.010775 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表