Project1

标题: 给XP增加自动图块 [打印本页]

作者: 灯笼菜刀王    时间: 2024-8-22 12:01
标题: 给XP增加自动图块
本帖最后由 灯笼菜刀王 于 2024-8-24 00:37 编辑

有没有觉得XP的自动图块只能7个, 太不够用了?,  这个脚本就是增加自动图块数量, 降低绘制地图工作量的, 不过, 只能用于静态自动图块, 想要动态效果还是只能到那7个里面扣

该脚本原理是把自动图块变成普通的图块来使用, 在游戏加载地图时再把标志好的那组图块按自动图块规则显示出来(当然你愿意手动摆自动图块也随意, 笑), 因此基本上没有冲突吧, 通行度优先度等一样也是按正常图块设置(只不过每个自动图块就要设置48个)

使用方法, 把脚本塞到 main之前,  然后打开你的Titles文件夹, 把要增加自动图块的图片拿出来, 在它下面补上展开的自动图块(每个自动图块展开是6行48个,即编辑器里双击自动图块后的那个样子), 然后把该图块的文件名后面加上  @自动图块所在行数# (行数从1开始数),之后到数据库里替换上它就可以了

自动图块添加保证48个图块连一起即可, 理论上可以添加无限个自动图块, 不同的自动图块组之间不需要连在一起(即两个展开的自动图块组之间可以随意插入普通图块), 只要在名字标注好每个自动图块组的起始行即可, 当然也可以随时添加正常图块, 只要内存扛得住就可以无限增加, XP不怕浪费图块位,笑

像这样准备好图块文件


然后到地图里, 从展开的自动图块里随便选一个当画笔, 正常的画好地图


虽然编辑器里显示的是乱七八糟的图块, 但是实际运行时这些图块就会按自动图块的方式拼好了,


鉴于想把自动图块展开成48块, 手动操作稍微有小点麻烦, 顺便提供一个小工具
合并自动图块.rar (652.2 KB, 下载次数: 19)

文件解压后,把要合并的图块文件和自动图块文件塞到该文件夹内, 然后点击这个橘子图标运行下, 就可以直接拿去用了

像这样

运行后就自动合并


此外事后想继续添加新的自动图块时, 可以把已经合成过的图块再塞进去合成新的自动图块

此外还有不需要改造图块的 2.0版, 2.0版传送门

-------------------------------------------------------------------------------------------------------------------
别忘了在工程里插入这个脚本
RUBY 代码复制
  1. #===========================================================================
  2. # ● 自动图块扩展 V1.0   by 灯笼菜刀王
  3. #
  4. # 使用方法: 把自动图块手动展开后拼到原图块上
  5. #           并将图块图片名称后面加上 @自动图块行所在的行数# (行数从1开始)
  6. #           可以添加复数自动图块,在名称后加上每个自动图块所行数即可
  7. #
  8. #     例子: 001-Grassland01@19#25#31#
  9. #===========================================================================
  10. class Game_Map
  11.   alias old_setup setup
  12.   def setup(map_id) ; old_setup(map_id) ;map_auto_set ; end
  13.   def auto?(au,id) ;return au.find{|i| (a=(id - i)) > -1 and a < 48} ;end
  14.   def same?(od,id) ;return ((a=(id - od)) > -1 and a < 48) ? 1 : 0 ;end
  15.  
  16.   def map_auto_set
  17.     return unless @tileset_name =~ /@(\d+)#/
  18.     a = @tileset_name.split(/@/)[-1]  ;f = self.data
  19.     au = a.split(/#/).map{|i| (i.to_i - 1) * 8 + 384}
  20.     for pag in [0,1,2]
  21.       for x in 0...f.xsize
  22.         for y in 0...f.ysize
  23.           next if (od = auto?(au,f[x,y,pag])).nil?
  24.           b = same?(od,f[x,y+1,pag]) * 8 + same?(od,f[x+1,y,pag]) * 4 +\
  25.              same?(od,f[x,y-1,pag]) * 2 + same?(od,f[x-1,y,pag])
  26.           c = same?(od,f[x-1,y+1,pag]) * 8 + same?(od,f[x+1,y+1,pag]) * 4 +\
  27.              same?(od,f[x+1,y-1,pag]) * 2 + same?(od,f[x-1,y-1,pag])
  28.           f[x,y,pag] = get_autotile(b,c) + od
  29.         end
  30.       end
  31.     end
  32.   end
  33.  
  34.   def get_autotile(b, c) # By guoxiaomi (P1)
  35.     case b ; when 0b1111 ; 15 - c
  36.     when 0b1110 ; 19 - (c / 2) % 4
  37.     when 0b1101 ; 23 - (c / 4) % 4
  38.     when 0b1011 ; 27 - c / 8 - (c * 2) % 4
  39.     when 0b0111 ; 31 - c % 4
  40.     when 0b1010 ; 32
  41.     when 0b0101 ; 33
  42.     when 0b1100 ; 35 - (c / 4) % 2
  43.     when 0b1001 ; 37 - c / 8
  44.     when 0b0011 ; 39 - c % 2
  45.     when 0b0110 ; 41 - (c / 2) % 2
  46.     when 0b1000 then 42
  47.     when 0b0100 then 43
  48.     when 0b0010 then 44
  49.     when 0b0001 then 45
  50.     when 0b0000 then 46
  51.     end
  52.   end
  53. end






欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1