
载具核心
车辆注册到车库模组的核心工具。
查看大图

这是什么?
VehicleCore 是一个用于自定义《赛博朋克 2077》车辆模组的共享框架库。它不是独立模组——你来到这里,是因为你安装的某个东西依赖于它。
它之所以存在,是因为游戏的 Crystal Coat 系统在其之上进行构建简直是一场噩梦,每一个试图从零开始实现视觉自定义的车辆模组最终都会与同样的引擎怪癖作斗争。VehicleCore 集中处理所有这一切:实时网格替换、外观覆盖、用于保存自定义选择的持久化存档层、所有权追踪,以及一个干净的桥接,让 GarageCore 之类的模组能够驱动 UI 和经济系统那一侧。
目前它仅被 SDH0 车辆模组和 GarageCore 使用。面向其他模组作者的正式文档将在 API 稳定后推出。
它实际做了什么
视觉自定义,且持久化。 玩家可以更换车身套件部件、更改油漆颜色、调整车轮和刹车、给车窗贴膜,并选择内饰选项。所有选择都能在存档中保留。 当车辆生成时,VehicleCore 会自动在游戏加载的内容之上重新应用已保存的配置。
与 Crystal Coat 共存。 游戏内置的颜色选择器对于支持它的车辆仍然有效。VehicleCore 在 Crystal Coat 运行之后叠加在其上,因此它的更改会生效,同时不会破坏原生系统。要让这套机制在不使引擎对“谁说了算”感到困惑的情况下运作,需要一些特定的技巧——有一个重入保护、延迟回调,以及一个幂等性检查,用来打破 [font=courier]LoadAppearance()[/font] 造成的反馈循环。这些对玩家都不可见;它就是能正常工作。
按车库划分的所有权系统。 部件通过 GarageCore 购买,并在存档文件中按车辆进行追踪。监视器知道玩家拥有什么,以及他们仅仅是在预览什么。预览模式让 GarageCore 能够实时应用一个“先试后买”的外观,与持久化选择分开。如果不确认就退出,车辆会恢复原状。
标准颜色调色板。 在所有 SDH0 车辆之间共享:69 种漆面(标准、金属、哑光、铬、金、青铜、铜)、18 种座椅颜色、23 种车轮颜色、15 种刹车颜色、7 种车窗贴膜。车辆模组从这些中选取,而不是自己定义。
自定义车门和车窗时序。 每辆车都可以为引擎盖、后备箱和车窗指定自己的打开/关闭动画时长。如果车辆没有配置此项,则运行原始游戏行为,不做更改。
本地化。 随附英语、德语和韩语的颜色名称翻译。车辆模组通过自己的语言文件提供各自的显示名称翻译,并按需延迟加载。
为什么要做一个共享核心?
在 VehicleCore 存在之前,每个 SDH0 车辆模组都自带一份相同的 Redscript 逻辑副本:实体生命周期处理、Crystal Coat 干扰预防、存档/读档管线、网格管理,等等。每辆车都是同一份代码略有不同的分支,修复一个 bug 意味着要在所有地方都修一遍。当车辆阵容不断增长时,这是不可持续的(SDH0 有近 30 辆完全可自定义的车辆,它们都将支持 Garage)!
VehicleCore 将所有这些集中到一个地方。现在每个车辆模组只需描述它有什么(哪些部件可替换、颜色选项是什么、默认值应该是什么),框架会处理其余的一切。结果是,添加一辆新车所需的工作量只有以前的几分之一,而对核心的改进会自动让每一辆车同时受益。
对于想要添加自己车辆并支持 GarageCore 的模组作者来说,同样如此。你不必再逆向工程自定义状态如何存储、预览如何工作,或者如何安全地替换网格而不使引擎崩溃——你只需注册一个配置,就完成了。VehicleCore 处理引擎层面的管线,这样你就不必亲自动手。
通过集中处理这些而从各个车辆模组中移除的代码总量数以千行计。那是数千行不再需要逐车测试、维护或调试的代码。
致谢
衷心感谢 hgyi56,他们最初的 Redscript 和基于 ModSettings 的 SDH0 车辆模组为这里的一切奠定了基础。他们的工作是概念验证,展示了什么是可能的,并直接启发了后来成为 VehicleCore 的架构。没有他们,这一切都不存在。
前置需求
面向模组作者
local VehicleCore = GetMod("VehicleCore")
VehicleCore.RegisterAndInit(myVehicleConfig)
标准调色板可在 [font=courier]VehicleCore.Palettes[/font] 处获取。Schema 构建器辅助工具位于 [font=courier]VehicleCore.Helpers[/font]。用于从 Lua 驱动设置的桥接接口在 Redscript 一侧是 [font=courier]VehicleCoreBridge[/font]。
正式文档即将推出。 与此同时,SDH0 车辆模组是了解注册和 schema 定义在实践中如何工作的最佳参考。
请请求额外支持,并随时报告我可能犯的错误。❤️
还没有人评论,去客户端里说两句吧。
评论在新手盒子客户端中发表,这里同步展示。