Minecraft资源包中的glyph_sizes.bin研究报告

glyph_sizes.bin文件位于assets/minecraft/font目录下。通过扩展名可以知道,这是一个二进制文件(废话)。根据其64.0K(65536字节)的文件大小和Minecraft使用的Unifont字体的完整Unicode BMP支持,可以预测这个文件是按照一个字节对应一个Unicode字符的方式存储的。

但是,正常情况下Minecraft使用的字符仅能达到16像素的宽度,而高度则固定为16像素。这样,如果glyph_sizes.bin只是存储每个字符的宽度的话,每个字节的高四位必为0。实际却不是这样。一些字符对应的字节的高位可以达到5(或者更高?但并未在Minecraft自带的这个文件中找到这样的数据)。

研究可得,所有中文字对应的字节均为0F,而中文字确实是16像素宽的。但是,高4位没能实验出其特性。

最后,我通过枚举得到了结果。设\uEE00~\uEEFF(Unicode私用空间中的一段)的对应材质图像如下,对应字节为00~FF,

unicode_page_ee

那么以下命令

/tellraw @r "\uEE00\uEE01\uEE02\uEE03\uEE04\uEE05\uEE06\uEE07\uEE08\uEE09\uEE0A\uEE0B\uEE0C\uEE0D\uEE0E\uEE0F\n\uEE10\uEE11\uEE12\uEE13\uEE14\uEE15\uEE16\uEE17\uEE18\uEE19\uEE1A\uEE1B\uEE1C\uEE1D\uEE1E\uEE1F\n\uEE20\uEE21\uEE22\uEE23\uEE24\uEE25\uEE26\uEE27\uEE28\uEE29\uEE2A\uEE2B\uEE2C\uEE2D\uEE2E\uEE2F\n\uEE30\uEE31\uEE32\uEE33\uEE34\uEE35\uEE36\uEE37\uEE38\uEE39\uEE3A\uEE3B\uEE3C\uEE3D\uEE3E\uEE3F\n\uEE40\uEE41\uEE42\uEE43\uEE44\uEE45\uEE46\uEE47\uEE48\uEE49\uEE4A\uEE4B\uEE4C\uEE4D\uEE4E\uEE4F\n\uEE50\uEE51\uEE52\uEE53\uEE54\uEE55\uEE56\uEE57\uEE58\uEE59\uEE5A\uEE5B\uEE5C\uEE5D\uEE5E\uEE5F\n\uEE60\uEE61\uEE62\uEE63\uEE64\uEE65\uEE66\uEE67\uEE68\uEE69\uEE6A\uEE6B\uEE6C\uEE6D\uEE6E\uEE6F\n\uEE70\uEE71\uEE72\uEE73\uEE74\uEE75\uEE76\uEE77\uEE78\uEE79\uEE7A\uEE7B\uEE7C\uEE7D\uEE7E\uEE7F\n\uEE80\uEE81\uEE82\uEE83\uEE84\uEE85\uEE86\uEE87\uEE88\uEE89\uEE8A\uEE8B\uEE8C\uEE8D\uEE8E\uEE8F\n\uEE90\uEE91\uEE92\uEE93\uEE94\uEE95\uEE96\uEE97\uEE98\uEE99\uEE9A\uEE9B\uEE9C\uEE9D\uEE9E\uEE9F\n\uEEA0\uEEA1\uEEA2\uEEA3\uEEA4\uEEA5\uEEA6\uEEA7\uEEA8\uEEA9\uEEAA\uEEAB\uEEAC\uEEAD\uEEAE\uEEAF\n\uEEB0\uEEB1\uEEB2\uEEB3\uEEB4\uEEB5\uEEB6\uEEB7\uEEB8\uEEB9\uEEBA\uEEBB\uEEBC\uEEBD\uEEBE\uEEBF\n\uEEC0\uEEC1\uEEC2\uEEC3\uEEC4\uEEC5\uEEC6\uEEC7\uEEC8\uEEC9\uEECA\uEECB\uEECC\uEECD\uEECE\uEECF\n\uEED0\uEED1\uEED2\uEED3\uEED4\uEED5\uEED6\uEED7\uEED8\uEED9\uEEDA\uEEDB\uEEDC\uEEDD\uEEDE\uEEDF\n\uEEE0\uEEE1\uEEE2\uEEE3\uEEE4\uEEE5\uEEE6\uEEE7\uEEE8\uEEE9\uEEEA\uEEEB\uEEEC\uEEED\uEEEE\uEEEF\n\uEEF0\uEEF1\uEEF2\uEEF3\uEEF4\uEEF5\uEEF6\uEEF7\uEEF8\uEEF9\uEEFA\uEEFB\uEEFC\uEEFD\uEEFE\uEEFF"

(在单人游戏中,因为我用的是@r)将输出这样的结果:

Minecraft glyph sizes

字符是\uEEXY,X代表行数,Y代表列数。放大后可以测量、观察得出:X ≤ 7时表示的是字符图像左侧切掉的像素数,X > 7时隐藏字符;Y表示字符宽度。而字符之间的空白不是这个文件控制的,固定为1像素。

发表评论

电子邮件地址不会被公开。 必填项已用*标注