赞 | 408 |
VIP | 0 |
好人卡 | 11 |
积分 | 390 |
经验 | 242285 |
最后登录 | 2024-12-2 |
在线时间 | 5727 小时 |
Lv5.捕梦者
- 梦石
- 0
- 星屑
- 39049
- 在线时间
- 5727 小时
- 注册时间
- 2006-11-10
- 帖子
- 6626
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 灯笼菜刀王 于 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版传送门
-------------------------------------------------------------------------------------------------------------------
别忘了在工程里插入这个脚本
#=========================================================================== # ● 自动图块扩展 V1.0 by 灯笼菜刀王 # # 使用方法: 把自动图块手动展开后拼到原图块上 # 并将图块图片名称后面加上 @自动图块行所在的行数# (行数从1开始) # 可以添加复数自动图块,在名称后加上每个自动图块所行数即可 # # 例子: 001-Grassland01@19#25#31# #=========================================================================== class Game_Map alias old_setup setup def setup(map_id) ; old_setup(map_id) ;map_auto_set ; end def auto?(au,id) ;return au.find{|i| (a=(id - i)) > -1 and a < 48} ;end def same?(od,id) ;return ((a=(id - od)) > -1 and a < 48) ? 1 : 0 ;end def map_auto_set return unless @tileset_name =~ /@(\d+)#/ a = @tileset_name.split(/@/)[-1] ;f = self.data au = a.split(/#/).map{|i| (i.to_i - 1) * 8 + 384} for pag in [0,1,2] for x in 0...f.xsize for y in 0...f.ysize next if (od = auto?(au,f[x,y,pag])).nil? b = same?(od,f[x,y+1,pag]) * 8 + same?(od,f[x+1,y,pag]) * 4 +\ same?(od,f[x,y-1,pag]) * 2 + same?(od,f[x-1,y,pag]) c = same?(od,f[x-1,y+1,pag]) * 8 + same?(od,f[x+1,y+1,pag]) * 4 +\ same?(od,f[x+1,y-1,pag]) * 2 + same?(od,f[x-1,y-1,pag]) f[x,y,pag] = get_autotile(b,c) + od end end end end def get_autotile(b, c) # By guoxiaomi (P1) case b ; when 0b1111 ; 15 - c when 0b1110 ; 19 - (c / 2) % 4 when 0b1101 ; 23 - (c / 4) % 4 when 0b1011 ; 27 - c / 8 - (c * 2) % 4 when 0b0111 ; 31 - c % 4 when 0b1010 ; 32 when 0b0101 ; 33 when 0b1100 ; 35 - (c / 4) % 2 when 0b1001 ; 37 - c / 8 when 0b0011 ; 39 - c % 2 when 0b0110 ; 41 - (c / 2) % 2 when 0b1000 then 42 when 0b0100 then 43 when 0b0010 then 44 when 0b0001 then 45 when 0b0000 then 46 end end end
#===========================================================================
# ● 自动图块扩展 V1.0 by 灯笼菜刀王
#
# 使用方法: 把自动图块手动展开后拼到原图块上
# 并将图块图片名称后面加上 @自动图块行所在的行数# (行数从1开始)
# 可以添加复数自动图块,在名称后加上每个自动图块所行数即可
#
# 例子: 001-Grassland01@19#25#31#
#===========================================================================
class Game_Map
alias old_setup setup
def setup(map_id) ; old_setup(map_id) ;map_auto_set ; end
def auto?(au,id) ;return au.find{|i| (a=(id - i)) > -1 and a < 48} ;end
def same?(od,id) ;return ((a=(id - od)) > -1 and a < 48) ? 1 : 0 ;end
def map_auto_set
return unless @tileset_name =~ /@(\d+)#/
a = @tileset_name.split(/@/)[-1] ;f = self.data
au = a.split(/#/).map{|i| (i.to_i - 1) * 8 + 384}
for pag in [0,1,2]
for x in 0...f.xsize
for y in 0...f.ysize
next if (od = auto?(au,f[x,y,pag])).nil?
b = same?(od,f[x,y+1,pag]) * 8 + same?(od,f[x+1,y,pag]) * 4 +\
same?(od,f[x,y-1,pag]) * 2 + same?(od,f[x-1,y,pag])
c = same?(od,f[x-1,y+1,pag]) * 8 + same?(od,f[x+1,y+1,pag]) * 4 +\
same?(od,f[x+1,y-1,pag]) * 2 + same?(od,f[x-1,y-1,pag])
f[x,y,pag] = get_autotile(b,c) + od
end
end
end
end
def get_autotile(b, c) # By guoxiaomi (P1)
case b ; when 0b1111 ; 15 - c
when 0b1110 ; 19 - (c / 2) % 4
when 0b1101 ; 23 - (c / 4) % 4
when 0b1011 ; 27 - c / 8 - (c * 2) % 4
when 0b0111 ; 31 - c % 4
when 0b1010 ; 32
when 0b0101 ; 33
when 0b1100 ; 35 - (c / 4) % 2
when 0b1001 ; 37 - c / 8
when 0b0011 ; 39 - c % 2
when 0b0110 ; 41 - (c / 2) % 2
when 0b1000 then 42
when 0b0100 then 43
when 0b0010 then 44
when 0b0001 then 45
when 0b0000 then 46
end
end
end
|
评分
-
查看全部评分
|