单位代码 ← 返回官网

单位代码查询器

游戏里每个单位 / 建筑 / 对象都有一个 32 位对象类型哈希。下面可以直接按名字离线算出代码, 也可以检索全量 5461 条清单(点行复制代码)。

名字 → 代码(离线计算,与游戏一致)
清单概览
全量 5461 可召唤且能用 411 可玩对象 938 带中文名 1005

代码 = StringHasher.Hash(模板名.lower())(SAGE 引擎的 SuperFastHash 变体)。
支持中英文名、模板名、十六进制代码搜索。

代码模板名 (ObjectTemplate)中文名 阵营类型面板行备注

研究过程披露

RESEARCH NOTES

查询器背后的算法、判据与数据来源,全部可复现。

一、哈希算法

代码不是随机数 —— 它是 SAGE 引擎对「对象模板名」做的一次字符串哈希。

三条要点

① 先小写。哈希不区分大小写,AlliedBarracks 与 ALLIEDBARRACKS 同码。

② 是 SuperFastHash 的变体(Paul Hsieh 算法),不是 CRC32 / FNV / DJB2 —— 这就是早期"算不出来、只能查表"的原因。

③ 32 位无符号结果,一般写成 0x 十六进制。

出处:SAGE 工具链 WrathEd 的 SAGE/StringHasher.cs。本项目已用 408 条运行时实测反算全部命中。

核心循环(本页查询器即用此实现)

// 名字小写后逐 4 字节处理,再做尾部与 avalanche
let h = n;
for (每 4 字节) {
  h += b[i] | (b[i+1]<<8);
  tmp = ((b[i+2] | b[i+3]<<8) ^ (h<<5));
  h  ^= tmp << 11;
  h  += h >>> 11;
}
// 尾部按剩余 1/2/3 字节分支,最后统一 avalanche

参考实现:tools/sage_hash.py(自检 408/408)。

二、「能召唤」≠「召唤出来能用」

最容易踩的坑:模板能创建出来,不代表它在游戏里可用。

波塞冬巡洋舰
  0x9356389F  AlliedAntiNavyShipTech3     ✓ 正常召唤可用
  0xDB5A5941  AlliedChronoBeacon_Poseidon ✗ 能创建,但不可选、不可用

两个模板运行时都能在模板库里找到,所以光靠"能不能创建"筛不出来。

判据:官方图鉴数据里 kind_of 位掩码含 SELECTABLE → 可用。

缺 SELECTABLE 的几类

特征标志位是什么
IGNORES_SELECT_ALL超时空传送 / 空投的抵达体
TRANSPORT运输 / 搭载体
SUMMONED+UNATTACKABLE技能召唤的临时装置
(无标志)自杀 / 俯冲类特攻机

本次据此从 442 条实测清单里剔除 31 条,剩 411 条。

三、提取流程

从官方数据到修改器用的头文件,每一步都有脚本,整条链路可复现。

STEP 1
官方图鉴
日冕官方单位图鉴数据
cor-games.com 的 game_objects.jsonl
→
STEP 2
名字 → 代码
用 SAGE 哈希算法复算
tools/sage_hash.py
→
STEP 3
全量清单
合并清单 / 图鉴 / 字符串表
tools/gen_unit_codes.py
→
STEP 4
运行时实测
逐条查模板是否存在
probe_callable.py
→
STEP 5
可用性过滤
按 SELECTABLE 判据剔除
tools/filter_usable.py
→
STEP 6
生成头文件
供修改器直接查表
units_corona.h

四、数据、验证与限制

验证(408/408)

① 运行时实测过的 名字→代码 全部复算命中;

② 与社区《增援代码》表逐条一致;

③ 与官方图鉴的 editor_name 逐条一致。

同一个单位为何有多个代码

每个形态(_Naval/_Dropped/_Enhanced/ChronoBeacon_*…) 都是独立模板。基准形态判据 = 该家族里唯一带 DESC:(面板说明)的那条。

已知限制

· 名册是"所有已知来源的并集",原版对象 XML 未随游戏发布,只能反推;

· 无中文名的一大批是地图场景 / 中立物(约 2400 条,XX_ 地区前缀),它们从不显示名字;

· 可用性判据依赖官方图鉴,未被收录的对象无法核验(按保守保留处理)。

数据与工具