参考项目

rust2genshin 不是凭空写出来的 —— 节点 ID、proto 字段、.gia 的字节格式都需要一个外部依据。这个依据是另一个非官方项目:Genshin-Impact-Miliastra-Wonderland-Code-Node-Editor-Pack它和 rust2genshin 一样非官方,与米哈游 / HoYoverse 无任何关联。读它、对照它,是为了知道格式,不是为了复制受版权保护的素材 —— 涉及游戏内部数据时保持现有做法:从真实导出文件逆推,用自家 schema。

遇到问题去哪查

要查去
节点 ID / 引脚 / 分类utils/node_data/data.json(约 3.8 MB,含描述、枚举、类型系统)或 game_nodes.ts
proto 字段含义utils/protobuf/gia.proto(每字段有用途说明,标了保留区)—— 改 core/proto/asset.proto 前先查它
.gia 头部格式utils/protobuf/decode.ts 的 unwrap_gia / wrap_gia —— 本站调试页那个 20 字节头 + 4 字节尾就是照它实现的
类型引擎的设计参考utils/node_data/node_type.ts
节点导出/导入规则docs/utils/原神导入 GIA 文件的规则说明.md
本项目侧的对齐点:tools/node_data/nodes.json 是从 game_nodes.ts 解析出来的(tools/node_data/parse_nodes.py),core/src/node/*.rs 里 /// ...(ID N) 的注释和 NodeKind 的 id 参数靠它对齐。注意 nodes.json 只有结构,没有 InGameName / Description —— 要查节点语义、审命名、定类型边界,必须去 data.json。

它的三层栈

DSL (.ts 风格文本)  →  IR (src/types/IR*.ts)  →  GIA 二进制 (utils/protobuf/gia.proto)
     ↑ tokenizer/parser      ↑ gia_ir.ts              ↑ decode.ts
     ↓ decompiler.ts

和本项目的关键差异

理解这些差异,才不会拿参考项目的设计往本项目上套。