#===========================================================================
# ● 自动图块扩展 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