Project1

标题: 简易格子地图(DNF/恶魔城式地图) [打印本页]

作者: 灯笼菜刀王    时间: 2018-5-9 22:52
标题: 简易格子地图(DNF/恶魔城式地图)
本帖最后由 灯笼菜刀王 于 2018-5-14 19:10 编辑

做剧情途中又摸鱼搞了个系统.... 感觉某个做恶魔城的貌似要这种地图吧XD @89444640

除了特殊画面外, 这种地图也适合懒得画大地图的家伙偷懒用=.=....

冲突应该没有, 就一个窗口~



可以一个地图重复利用(SAVE房间)=.= 用变量来做区别


要设置大房间也可以哒~


RUBY 代码复制
  1. #------------------------------------
  2. # 简易格子地图  by 灯笼菜刀酱
  3.  
  4. MAP_SWI_ID = 1  #地图开关ID
  5. MAP_COPY = 1    #重复地图区别变量ID
  6. #====================================================================
  7. $platmap = []
  8. def 打开地图(number)
  9.   case number
  10. #===============================================================
  11. #地图设置,
  12.   when 0
  13.     地图 = "map1"  #地图图片名称
  14.     #地图每个格子坐标 [x,y]=> 对应的地图ID.    ↓可以换行,逗号别忘
  15.     区号 = {[1,1]=>1.00,[2,1]=> 2,[2,2]=>3,[2,3]=>3,
  16.     [2,4]=>3,[3,4]=>1.01,[4,4]=>4,[4,5]=>4,[5,4]=>4,[5,5]=>4}  
  17.  
  18.     #需要不同的地图,就在下面添加
  19.     #when 1
  20.     #地图 = XXX
  21.     #区号 = XXX
  22. #然后事件脚本写: 打开地图(1) 就可以打开新的地图,要关掉地图 事件脚本写 : 关闭地图
  23. #===============================================================
  24.   else
  25.     地图 = nil
  26.     区号 = nil
  27.   end
  28.   $platmap.push(地图)
  29.   $platmap.push(区号)
  30.   $mapshow = Window_plat.new
  31. end
  32. def 关闭地图
  33. if $mapshow != nil
  34.   $mapshow.dispose
  35.   $mapshow = nil
  36. end
  37. end
  38. class Window_plat < Window_Base
  39.   def initialize
  40.     super(0, 0, 160, 120)
  41.     self.contents = Bitmap.new(width - 32, height - 32)
  42.     @mapid = 0
  43.     setup if $platmap[0] != nil
  44.   end
  45.   def setup
  46.      self.contents = Bitmap.new("Graphics/gameovers/" + $platmap[0])
  47.      @mx = self.contents.width / 16
  48.      @my = self.contents.height / 16
  49.      refresh
  50.   end  
  51.   def refresh
  52.     self.contents.clear
  53.     bitmap = RPG::Cache.gameover($platmap[0])   
  54.     cw = bitmap.width  
  55.     ch = bitmap.height
  56.     src_rect = Rect.new(0, 0, cw, ch)
  57.     self.contents.blt(0, 0, bitmap, src_rect)
  58.     x,y = 0,0
  59.     loop do
  60.       铺块(x,y)
  61.       if x < @mx
  62.         x += 1
  63.       elsif y < @my
  64.         y += 1
  65.         x = 0
  66.       elsif x == @mx and y == @my
  67.         break
  68.       end
  69.     end
  70.   end
  71.   def 铺块(x,y)
  72.     return if $platmap[1] == nil
  73.     b = $game_map.map_id
  74.     if $platmap[1][[x,y]].is_a?(Float)
  75.       f = $platmap[1][[x,y]] * 100
  76.       if Integer(f) / 100 == b and Integer(f) % 100 == $game_variables[MAP_COPY]
  77.         self.ox = x*16 - 57
  78.         self.oy = y*16 - 36
  79.         return
  80.       end
  81.     elsif $platmap[1][[x,y]] == b
  82.       self.ox = x*16 - 57
  83.       self.oy = y*16 - 36
  84.       return
  85.     end
  86.     bitmap = RPG::Cache.gameover("outsize")
  87.     src_rect = Rect.new(0, 0, 16, 16)
  88.     self.contents.blt(x*16, y*16, bitmap, src_rect,128)
  89.   end
  90.   def update
  91.     if @mapid != $game_map.map_id and $platmap[0] != nil
  92.      setup
  93.      @mapid = $game_map.map_id
  94.     end
  95.   end
  96. end


地图规格: 长宽无限制, 尽量做成16的倍数看起来比较好看=.=,  放到GAME OVER文件夹里(至于为什么放这里? 一般这里就只放一张图片不是么?太浪费了....=v=)

区号坐标设置参考下图, 每小格是16X16
  

当然也可以这样画,认得这个地图的都是砖工


格式 [x,y] => 1 #对应的地图ID, 要多次利用的地图后面加上两位小数, 对应 1号变量的值

范例一只~
简易格子地图.rar (196.99 KB, 下载次数: 128)
---------------------
5.13 修复了超过10位数的地图宽度长度会导致计算错误的BUG....
作者: 89444640    时间: 2018-5-10 06:03
本帖最后由 89444640 于 2018-5-10 06:45 编辑

地图要手动画吗?,我这地图有绕圈情况,按照实际比例,应该是连不上,试试看吧。
其实路挺好走的,我自己测试绕1小时30分钟,100%完成度,路不熟绕个两小时左右也肯定能出去了。
save有了,还需要不同颜色的传送点,我有传送点。啊对还有boss房,虽然是看片。
看了一下有持续显示地图,那关闭持续显示是怎么执行?

看了一下,既然要用的话,就还原度高点,需要效果如下。
一、不持续显示地图,道具公用事件设置几个变量,分别对应,
1、全屏显示地图并显示当前所在位置,
2、全屏半透明显示地图并显示所在位置,透明度40%
3、地图左上角显示当前所在地图,
4、地图左上角半透明显示当前所在地图。
5、关闭显示。
二、增加传送点显示颜色,存盘点颜色是,BOSS房是,这个恶魔城的默认显示方式XD
三、地图分区块显示,未持有地图时不显示,持有地图1显示地图1的范围,持有2显示2的范围,持有地图时没踩过的是灰色,踩过以后变成蓝色,增加地图完成度,百分比显示,按照所需总地图显示百分比,精确到小数点后1位,可自定义。比如小房间0.5%,大房间是4%专门给开100%地图用。
其实我这有这部分的通关完成度奖励,而且奖励还挺高的,计算方式上,按照地图中所执行的特殊事件来算的,只要执行了,这地图肯定来过,而且前后必经之路的地图也可能踩过,可以认为认为完成了这部分地图。
如果还原度再高点,犄角旮旯阴山背后也需要让人绕一下。
四、隐藏房间不在地图上显示,持有地图也不显示,但是一旦踩过,则用蓝色显示。
五、出城……好吧我蛋疼了,我确实设定出城了……不是大圣堂飞狼……我家主角又没变身……

其实我是真懒得用,感觉难度又降低了,有个地方还需要猫头鹰去探索的,本来还有个地方需要蝙蝠探索的,因为地图当时不会画用的恶魔城月下的针刺地形,让我删了。直接给了地图感觉难度低了好多。感觉可能过的去的地方,肯定会尝试,而不是看下地图后面有没有没去过的地方,回去找东西。
作者: 灯笼菜刀王    时间: 2018-5-10 13:54
本帖最后由 灯笼菜刀王 于 2018-5-10 14:13 编辑
89444640 发表于 2018-5-10 06:03
地图要手动画吗?,我这地图有绕圈情况,按照实际比例,应该是连不上,试试看吧。
其实路挺好走的,我自己 ...


地图手动画的, 而且坐标也是手动设置的~  所以, 和比例啥的没关系XD, 你N个格子都设置同一个地图ID,那到这个地图里,那些格子就会全部亮起来了(也就是大房间效果咯,当然,不连续的格子也可以,只要设置同一个地图ID就会一起亮,  传送点就可以这样设置)

而要同一个地图亮起不同的格子,就在ID后面加上两位小数,  然后用一个变量(默认1号)带入这个小数 * 100. 靠这个变量来区别所在的地图位置(范例里 1号地图就是同地图亮起不同格子)

要关持续地图, 把开关(默认1号)关起来 ,然后脚本写 "关闭地图" 这四个汉字就行, 没双引号哦,  要用道具显示的话,就不要打开开关1号, 这样只要一开菜单地图就没了,也可以用"关闭地图"指令来让它消失.

1, 全屏显示地图,其实咱自己用是有这个功能的XD, 道具地图的作用原本就是显示全屏地图的, 只是因为这个功能是要根据实际使用的地图的大小来调整坐标位置和窗口大小, 这个需要自己改动脚本, 所以作为"通用版" 咱去掉了这个功能=.=

至于透明半透明效果都是RM的窗口默认功能, 在initialize里加上 self.back_opacity = 128 就是一半的透明度了,当然这个也可以加上开关来控制

二, 红的黄的绿的房间, 画地图的时候自己涂上就行=.=

三, 分区域显示,  咱已经预留了, 在脚本备注的地方填上新的地图, 然后用"打开地图(编号)" 就可以开启不同的地图

四和五, 隐藏房间和出城 ,只要你不在地图上画出来就可以了,  然后在它的格子上一样设置地图ID, 这样在隐藏地图就会看到,地图外面的格子亮起来了.

------------------------------------

综合以上, 就探索功能(通过的地图会显示,不通过的不显示) 咱没做, 因为这个地图咱是用来当城市用的,

画一座城市是很累的,
比画一座城市更累的是画一座大城市,
比画一座大城市更累的是画一座追求真实的大城市
比画一座追求真实的大城市更累的是画一做变成废墟的大城市~~~~

所以, 咱就偷懒, 只画几张街道, 然后用地图把它们连接起来, OK, 大城市GET~,替换下街道背景就是废墟大城市

考虑了下, 要没走过的地图不显示, 可以把蒙版的透明度设置为255, 这样就看不到遮起来的地方了(那还要地图干嘛?)=.=

至于探索地图,emm,考虑下储存方法,然后在盖一层上去应该可以, 感觉用处不是很大, 看地图哪里没去过直接过去就不叫探索了吧......

你都说有地图没意思, 那地图把去过和没去过的都标出来不是更没意思嘛=.=

作者: xp兔子徒弟    时间: 2018-5-11 13:07

大佬大佬,早就想做个恶魔城同人rpg了




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