单位代码
← 返回官网
游戏里每个单位 / 建筑 / 对象都有一个 32 位对象类型哈希。下面可以直接按名字离线算出代码, 也可以检索全量 5461 条清单(点行复制代码)。
代码 = StringHasher.Hash(模板名.lower())(SAGE 引擎的 SuperFastHash 变体)。
支持中英文名、模板名、十六进制代码搜索。
| 代码 | 模板名 (ObjectTemplate) | 中文名 | 阵营 | 类型 | 面板行 | 备注 |
|---|
查询器背后的算法、判据与数据来源,全部可复现。
代码不是随机数 —— 它是 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 条。
从官方数据到修改器用的头文件,每一步都有脚本,整条链路可复现。
cor-games.com 的 game_objects.jsonltools/sage_hash.pytools/gen_unit_codes.pyprobe_callable.pySELECTABLE 判据剔除tools/filter_usable.pyunits_corona.h① 运行时实测过的 名字→代码 全部复算命中;
② 与社区《增援代码》表逐条一致;
③ 与官方图鉴的 editor_name 逐条一致。
每个形态(_Naval/_Dropped/_Enhanced/ChronoBeacon_*…)
都是独立模板。基准形态判据 = 该家族里唯一带 DESC:(面板说明)的那条。
· 名册是"所有已知来源的并集",原版对象 XML 未随游戏发布,只能反推;
· 无中文名的一大批是地图场景 / 中立物(约 2400 条,XX_ 地区前缀),它们从不显示名字;
· 可用性判据依赖官方图鉴,未被收录的对象无法核验(按保守保留处理)。