【VB6】Minecraft地图画生成器:使用抖动算法,支持用户自定义图片,生成bash脚本(给服务器用)
下载地址在后面。
之所以不像上个版本那样直接发送命令到MC窗口是因为……那会让用户无法操作电脑上的其它东西,并且,现在因为支持很大的图片,命令很多而又不好做中止功能的话,实在是令人头疼。
所以干脆让它能自动在当前文件夹目录下生成一个txt文本和一个bash脚本,Linux服务器端直接执行这个bash脚本就行了。
这个bash脚本又是怎么发送服务器命令到服务器后台的呢?其实不是什么靠谱的办法,说白了就是常见的往screen的stdin写入字符的方式来完成的。
每发送一条命令就sleep 0.05秒,而MC的游戏刻是20分之一秒,正好是这个时间。当然这些设定都可以调整。
为了考虑国际化,我这些功能都用英文写。现在请看功能介绍。
其中“凹凸”调色板,含义是根据MC对地图颜色处理的原理,凸起和凹陷的地图,有特殊的颜色处理。打个比方,我在超平坦世界里放置了一个方块,那么因为这个方块是凸起的,它的南面紧贴着它的位置并没有比它更高的方块,于是在地图上,它的颜色比它本身的平均色更亮,而它南面那个方块,因为比它低,所以颜色更暗。
借助这个特性,我们可以利用方块的位置高度差,来创建颜色更丰富的地图图像。
调色板数据,我是从这里获取的:
http://minecraft.gamepedia.com/Map_item_format
但1.10和1.12的调色板我是靠自己找出追加的新方块来确定的。顺带,我不知道,这个wikipedia描述的每种方块都有4种调色板颜色的第四种颜色到底怎么获取。所以我直接无视了其中的第四种暗色,而取用了前面三种颜色。
顺带对于颜色降级的处理,抖动算法可以解决颜色降级的问题,也就是,如果我们把真彩色(16777216色)降级为调色板颜色,我们如何通过仿色来还原最终的效果,这里请看下面的资料:
https://en.wikipedia.org/wiki/Ordered_dithering
https://en.wikipedia.org/wiki/Floyd%E2%80%93Steinberg_dithering
最后,我会放出整个程序的源码和bin,欢迎大家下载。
要下载的话还请注册会员哦~ http://img01.sogoucdn.com/app/a/100520032/e179http://img01.sogoucdn.com/app/a/100520032/e179http://img01.sogoucdn.com/app/a/100520032/e179http://img01.sogoucdn.com/app/a/100520032/e179http://img01.sogoucdn.com/app/a/100520032/e179http://img01.sogoucdn.com/app/a/100520032/e179http://img01.sogoucdn.com/app/a/100520032/e179 感谢楼主~ 好东西mark了 更新了一下,解决持续的“上坡”或“下坡”带来的突破高度限制的问题,以及水方块到处乱流的问题。
因为建造高度的限制是256格,而如果有一列像素它使用的方块总是“上坡”或者“下坡”的话,有时候就会超出边界。
以前的做法是用一个对话框提示一下,如果没被点“取消”的话,它就继续生成命令出来了——比如/setblock 0 777 0这种Y值严重超标的命令,导致设置方块失败的问题。
解决办法是,当一个方块因为“上坡”或者“下坡”超出了边界的话,那就往前逆推,伺机上下调整前面的整体的方块,来保证在画面不会变化的情况下,通过让前面的“上坡”或者“下坡”由1格变为多格,来空出高度。
而如果得不到调整的机会——比如前面整体全都在“上坡”或者“下坡”,持续爬升256格或者降低256格,没有转折的话,那就干脆制造几个颜色不对但不起眼的像素,来“破罐子破摔”、无视高度重新生成方块。这样会产生几个亮度错误的方块,但开了抖动的话就看不出来了。
此外水流的问题,我是用/fill命令把水方块周围用特定方块(可以修改的,默认是glass 0)围起来,不让水乱流。这个选项可以关掉。此外,在“平坦调色板”模式下你不需要把水方块围起来——除非你设置的初始Y较高,然后不喜欢水一直往下流。
这个修复过的版本是有个版本号的,1.0.0.2。
啥时候有空了我把它改成能自动生成mca文件的。 让数据维持在区间
a + (b - a) / 2 + (b - a) * (数据 - 数据中值) / (数据中最大值 - 数据中最小值)
计算机中求区间中值经常用 a + (b - a) / 2 而不是 (a + b) / 2的方式 因为后者溢出几率高很多:(
这样就可以让方块维持在了 Ayala 发表于 2018-3-19 20:33
让数据维持在区间
a + (b - a) / 2 + (b - a) * (数据 - 数据中值) / (数据中最大值 - 数据中最小值) ...
这里地图画的“坡度”的数据是不能用简单的插值方式来压缩高度的。它的+1和-1的过程就是定死的。你可以把+1改成+2、+3、+4、+255等,或者把-1改成-2、-3、-4、-255等。因为Y值的高度+1会让颜色变亮,-1会让颜色亮度变暗。所以如果使用了插值的话,一整条纵列都会有几个颜色异常的像素,影响较大。 本身就是有损压缩 不过这样可以让曲线变得平滑一些 这应该属于基本的投影问题 +1、+2、+3、+4、+255 转换成 + fix(1 * 梯度),+fix(2 * 梯度)、+fix(3 * 梯度)、+fix(4 * 梯度)、+fix(255 * 梯度) 两种不同做法有不同的效果 好比一幅画,其中有几个部分浸了水 还是整幅画均匀的漂洗了下 我的世界吗.看到像素样的游戏界面,头痛 真的厉害啊,我们这些肥宅看呆了 本帖最后由 套路 于 2018-8-22 13:07 编辑
然而1.13羊毛声明颜色的方法不一样了
套路 发表于 2018-8-22 13:02
然而1.13羊毛声明颜色的方法不一样了
1.13有一个“平坦化”的设定,把所有物品的名字都微调了一下。
新一代的地图画生成器我打算做成直接写mca文件的那种方式。
我正在啃mca文件和NBT标签。 本帖最后由 套路 于 2019-8-13 21:38 编辑
对了,生成立体羊毛48色那个有bug,好像因为for(For I = 0 To m_NumColors - 1)循环声明羊毛颜色设置错了,有些setblock和fill羊毛后的nbt会大于15
顺便说一下,可以试试用schematic来做。
这个文件是mcedit用的,java版地图和基岩版地图都可以使用。用NBTExplorer来查看NBTExplorer
我研究了一下,它使用zip压缩字符的,有长宽高3个变量、DATA(也就是setblock后面那个0~15的数字)、biomes(生物群落,默认全是1就可以了)、Blocks(这个都是数字ID)、Materials(默认Alpha就是了)和实体(全0就是了)。
WIKI上有介绍,但是其中很多都是不需要的。
Schematic
mcedit
mcedit2
我也在试着做,但是写入文件要48,530,904,089次循环,直接卡住了,正在想办法呢。 套路 发表于 2019-8-13 18:23
对了,生成立体羊毛48色那个有bug,好像因为for(For I = 0 To m_NumColors - 1)循环声明羊毛颜色设置错了, ...
我直接就忽略了mcedit,你说的那些我都知道,schematic也考虑过。但我不想使用mcedit。
此外,我现在考虑用function来快速执行大量命令。
MCA文件我已经啃完,生成mca问题也不大。
本帖最后由 套路 于 2019-8-16 14:13 编辑
0xAA55 发表于 2019-8-15 03:24
我直接就忽略了mcedit,你说的那些我都知道,schematic也考虑过。但我不想使用mcedit。
此外,我现在考 ...
schematic做错什么,为什么直接忽略她了。
我觉得不错啊,很多地图作者都用mcedit,格式也比较简单,基岩版和java都能使用,就是作者更新的慢。
mcedit离得远会默认羊毛为白色
页:
[1]