设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 164|回复: 0
打印 上一主题 下一主题

[原创发布] 给XP增加自动图块

[复制链接]

Lv5.捕梦者

梦石
0
星屑
38727
在线时间
5700 小时
注册时间
2006-11-10
帖子
6608
跳转到指定楼层
1
发表于 2024-8-22 12:01:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

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版传送门

-------------------------------------------------------------------------------------------------------------------
别忘了在工程里插入这个脚本
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

评分

参与人数 2+2 收起 理由
89444640 + 1 塞糖
魔法丶小肉包 + 1 原来橘子长这样

查看全部评分

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-9-17 03:52

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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