图像

图像是玩家直接看到的部分,是 GRF 的核心,因此保证图像绘制美观正确是制作 GRF 的首要任务。

在 GRF 中的图像分为 pseudosprite(伪图像)与 realsprite(真图像)。 Realsprite 是“真正看到的图像”,而 Recoloursprite 则是一系列颜色索引,用来索引重新着色的对象与目标。

        flowchart TD
  A[图像] ==> palette[调色盘]
  A ==> zoom[缩放]
  palette ==> 8bpp
  palette --> 32bpp
  8bpp --> Windows
  8bpp ==> DOS
  zoom ==> normal
  zoom --> 2x
  zoom --> 4x
  A ---> SPT[Sprite 类型]
  SPT --> NRS[普通 Sprite]
  SPT --> REC[Recoloursprite]
    

Realsprite

GRF 的图像有两个技术指标,分别是 bpp(每像素比特数)与 EZ(高清)。

bpp 越高,可用的颜色就越丰富。 8bpp 代表每像素 8 比特,即一共有 \(2^{8} = 256\) 种可用颜色; 32bpp 代表每像素 32 比特,即一共有 \(2^{32} = 4,294,967,296\) 种可用颜色(RGBA 模式,包括 Alpha 通道,即透明度)。

EZ 则有 Normal(普通)、2 倍和 4 倍之分。2 倍是将一个像素缩小到原来的四分之一, 即 1/(2×2);4 倍是将一个像素缩小到原先的十六分之一,即 1/(4×4)。 玩家对颜色通常不敏感,因此主要考虑的技术指标是 EZ 与否。 为了与游戏美术风格贴合,推荐绘制 8bpp Normal EZ 的图像。

使用 8bpp 的时候还须注意调色盘问题。 原 TTD(运输大亨豪华版)有 DOS 与 Windows 两个版本,两个平台所支持的色彩不同, 在 Windows 平台下需要分配一定的调色盘空间给系统 API 使用, 因此 Windows 调色盘相较于 DOS 调色盘所支持的颜色要少。 OpenTTD 作为 TTD 的继承者自然是两种调色盘都支持。 推荐在绘制 8bpp 图像的时候使用 DOS 调色盘,原因如前文所说,DOS 调色盘支持的颜色更多。

总结如下:

技术

难易度

效果

备注

颜色

8bpp

类似原版画风

有可能会遇到色盘编译问题

32bpp

★★

更加灵活

需要编写额外代码

缩放

Normal Zoom

类似原版画风

2x

★★★★

两者之间

需要编写额外代码

4x

★★★★★

高清画风

需要编写额外代码

通常而言,使用 2x 或 4x 的话会同时使用 32bpp。

重着色图像(Recoloursprite)

在 NewGRF 当中新定义的重着色图像固定为 \(8*256=2048\) 字节,即约 2kiB 的大小。如前文所述,重着色图像是一系列颜色索引,用来指代重新着色的对象与目标,所以“制作”重着色图像不需要绘图。 以下是一种在 NML 当中定义重着色图像的方式:

spriteset(my_recoloursprite){
    recolour_sprite {
        0x01: 0x01;
        2: 3;
        3..0x05: 6;
        0x06..10: 0x07..11
    }
}

重着色图像可以用于节省图像数量与大小,在需要一些极其相似但是又有细微差别——如颜色——的图像时大有帮助,如不同颜色的矿物,黑色是煤炭,而棕色是铁矿石,绿色是铜矿石,等等。