谜题档案

0 点赞
Opus Magnum
转载

谜题文件格式说明。 请谨慎操作 格式错误的谜题文件会导致游戏崩溃。如果删除有问题的文件,《opus magnum》会在启动时重新生成该文件,导致游戏再次崩溃。你必须在启动《opus magnum》后且加载完成前重新删除该文件(或者修复该文件)。 引用自Zach:游戏要求自定义谜题的中心必须有一个原子,这样我们才能始终有一个点来围绕它旋转。如果取消这一限制,游戏中的某些功能可能会出现问题。 我尝试秉持黑客精神,所以你可以制作违反这些规则的非正规关卡,但我不能保证这些关卡能持续正常运行,而且它们几乎不可能出现在日志中。如果创建不符合规范的谜题,可能会导致当前或后续出现问题。特此警告。 文件位于C: Users [用户] Documents My Games Opus Magnum [SteamID] custom 以下是文件格式2的说明。当我理解新格式后,会将本节更新为版本3。下方提供了官方版本3规范的副本。 RL(运行长度)字段描述该字段包含的元素数量,其中元素本身可能具有可变长度。缩进字段为可选字段,仅当RL字节指定时才存在。 02 00 00 00 RL [ASCII名称] *谜题名称的运行长度,后跟名称。 a6 87 35 02 01 00 10 01 *小端序的Steam ID 0f *指令位 17 *这些是新谜题的默认值,位值说明如下。神秘字段采用游程长度和填充格式,但尚未发现其填充内容。 游程长度 00 00 00 *试剂数量和填充的游程长度 游程长度 00 00 00 *素数数量的游程长度 元素 XX YY*素数类型 X坐标 Y坐标 游程长度 00 00 00 *键数量的游程长度 键类型 SX SY DX DY*键类型 源X坐标 源Y坐标 目标X坐标 目标Y坐标 游程长度 00 00 00 *产物数量的游程长度 游程长度 00 00 00 *素数 元素 XX YY 游程长度 00 00 00 *键 键类型 SX SY DX DY 素数 1 盐 2 气 3 土 4 火 5 水 6 汞 7 金 8 银 9 铜 a 铁 b 锡 c 铅 d 生命 e 死亡 f 重复 10 第五元素 键类型 键通常为01(普通)或0e(三重)。键位值:1 普通键位;2 三重红色键位;4 三重黑色键位;8 三重黄色键位。 位域字节按默认值表示: 17:1 键合与平衡;2 解键;4 多重键合;8 三重键合;10 钙化;20 复制;40 投射;80 净化。 c0:1 生命灵气;2 处理;4 第五元素。 07:10 贝洛坐标:中心为0,0,使用有符号字节。 坐标值:fc04、fd04、fe04、ff04、0004、fc03、fd03、fe03、ff03、0003、0103、fc02、fd02、fe02、ff02、0002、0102、0202、fc01、fd01、fe01、ff01、0001、0101、0201、0301、fc00、fd00、fe00、ff00、0000、0100、0200、0300、0400、fdff、feff、ffff、00ff、01ff、02ff、03ff、04ff、fefe、fffe、00fe、01fe、02fe、03fe、04fe、ffffd、00fd、01fd、02fd、03fd、04fd、00fc、01fc、02fc、03fc、04fc。 官方3.0版本规范(已编辑修正产品区域名称)。注意事项: - 我们使用C#的BinaryReader和BinaryWriter类。关于字符串和布尔值的编码方式,你需要参考这些类的相关说明。 - 数组的编码方式始终为:先存储长度(Int32类型),后跟该长度数量的数组元素实例。 - 类型后带有问号的字段表示其是否出现取决于文件中的其他数据。 谜题 { Int32 版本// 本规范中该值应始终为3。 字符串 名称// 谜题的名称。 UInt64 创建者// 创建者的Steam ID。未被使用,可设为任意值。 UInt64 工具// 允许在本谜题中使用的工具的位数组。另有文档说明。 分子[] 输入// 输入分子的数组。另有文档说明。 分子[] 输出// 输出分子的数组。另有文档说明。Int32 输出目标缩放//用于缩放输出数量,例如在【密陀僧分离】谜题中。默认值为1。 Boolean 是否为生产模式//如果为真,则后面会跟一个生产信息结构体。 ProductionInfo? 信息//可选的生产信息结构体,如果上述值为真。 } 生产信息 { Boolean 左侧缩短//如果为真,生产装置的左侧将缩短约半个六边形。有时需要这样来匹配游戏内的间距。 Boolean 右侧缩短//如果为真,生产装置的右侧将缩短约半个六边形。有时需要这样来匹配游戏内的间距。 Boolean 输入与输出隔离//如果为真,输入和输出必须放置在不同的生产区域。未测试过每种多于一个的情况。生产区域[] 区域 生产管道[] 管道 生产试剂瓶[] 试剂瓶 } 生产区域 { 六边形索引 位置//该区域中心在六边形网格上的位置。 字符串 类型//以下字符串之一:"小型"、"小型宽"、"小型更宽"、"中型"、"中型宽"、"大型"。 } 生产管道 { 六边形索引 端点A//管道第一个端点在六边形网格上的位置。 六边形索引 端点B//管道第二个端点在六边形网格上的位置。 六边形索引[] 偏移量//组成该管道的六边形的相对偏移量。单原子管道的默认值是偏移量为(0, 0)的单个偏移。 } 生产试剂瓶 { 六边形索引 位置//试剂瓶组件在六边形网格上的位置。 布尔值 顶部而非底部//如果为真,绘制"顶部"样式的试剂瓶组件。否则,绘制"底部"样式的组件。Int32 试剂瓶数量//试剂瓶组件中的试剂瓶数量。仅测试过1到3的值。 } 六边形索引 { }