
无限网络线路
这个模组让你能够直接控制同时附着的蛛丝最大数量。默认情况下,游戏将活动的蛛丝上限设为6。本模组包含五个版本(6、25、50、100、255)。这是社区和我长期以来高度需求的模组。欢迎在此基础上继续开发,只需注明我的贡献。尽情享受蛛丝艺术吧!
查看大图概览
本模组移除了《漫威蜘蛛侠 2》PC 版中硬编码的蛛网丝线同时存在数量限制,让你可以同时部署/附着任意数量的蛛网丝线。该限制现在可以通过 Overstrike 中的'五个'选项进行调整。"原版"配置将其设为 6,但该值可以在 (6, 25, 50, 100, 255) 之间设置。
模组的实际作用
当你在《漫威蜘蛛侠 2》中部署一条蛛网丝线并将其连接到两个表面之间——例如墙壁和灯柱、屋顶和防火梯——游戏会生成一个实时物理对象。该对象由三个同时运行的独立内部系统管理,每个系统都强制执行自己的独立上限,限制其可同时存在的数量。当最旧的丝线达到上限时,游戏会将其静默销毁,以便为新的丝线腾出空间。大多数玩家在六条丝线的限制下不会注意到这一点——感觉就像一种自然、平衡的机制。但对于任何想要构建、创造,用精巧的蛛网结构填满纽约市一个街区的人来说,这却是一堵墙。
本模组修补了游戏
gdgt_webline.actor
二进制文件——即定义蛛网丝线小工具为完整实体的资源——内的三个特定字段。这三个字段是:
- BendableLinePrius → MaxLines — 这是视觉效果样条线渲染器。它控制着同时作为物理、可弯曲的 3D 线缆(具有自己的几何形状、材质和光照响应)在屏幕上绘制的蛛网丝线数量。在默认值 6 时,渲染器会停止接受新的丝线,并开始丢弃旧的丝线。提高到 50 后,你可以在世界中同时拥有 50 条完全渲染、具有物理响应的蛛网丝线。
- WebLinePrius → MaxLines — 这是核心游戏玩法系统。它是蛛网丝线机制的大脑——跟踪附着点,管理丝线端点之间的张力和摆动逻辑,并与玩家的能力系统通信。该值必须与渲染器匹配,否则游戏所跟踪的与所绘制的之间会出现不匹配。
- RopeManagerPrius → MaxRopes — 这是物理模拟层。每条蛛网丝线都背后都有一个实时运行的绳索模拟,计算线缆如何下垂、拉伸、弹跳,以及如何响应风力或玩家摇摆穿过等作用力。该组件的默认值略高(8 而非 6),作为一个小缓冲区——但它仍然是实时绳索模拟总数的硬性上限。这三个值必须同时提高,否则其中最低的值将成为新的瓶颈。
实现这一目标所需的工作
格式问题
自游戏于 2025 年 1 月 30 日在 PC 上发布以来,模组社区就清楚地知道他们想从蛛网丝线系统中得到什么——以及它确切存在于何处。问题在于如何访问它。
《漫威蜘蛛侠 2》使用了与之前所有 Insomniac PC 游戏相同的专有二进制资源格式:DAT1。所有游戏资源都打包在一个 toc(目录)文件中,并配有一组存档(.dat)文件。单个资源是封装在薄薄的 STG 头文件中的 DAT1 容器文件。要编辑任何游戏玩法参数,你首先必须从存档中提取资源,理解其内部节结构,定位要更改的特定字节,修补它,将其重新打包到存档中,并通过模组管理器安装。
执行第一和第三到第六步的工具已经存在:Tkachov 的 ALERT 和 Modding Tool、okangel 的 WebWorks 和 InsomniacToolbox,以及最终问世的 DAT1-GUI。但很长一段时间内,缺少的是一种可靠的方法,能在二进制级别解码 .actor 文件内部的 Prius 组件数据。Prius 系统是 Insomniac 的组件架构:每个游戏实体,从单个道具到完整角色,都由一系列类型化组件组成,每个组件都携带自己的二进制数据配置块。蛛网丝线实体有八个这样的组件。其中关键的部分——BendableLinePrius、WebLinePrius 和 RopeManagerPrius——各自将其限制值存储为单个字节,深埋在各自的数据区域内,没有标签,没有在任何地方公布偏移量,也没有任何工具将它们暴露为可编辑字段。
一位社区成员在模组请求帖中直率地总结了这种情况:“我们正在寻找的设置附加在蛛网射手的 .actor 文件中,在我们有办法编辑该文件之前,我们不会得到这个模组。我希望有人能证明我错了。-我” 在那个时候,他们是对的。
逆向工程结构
突破来自于从零开始为 DAT1 二进制格式构建一个完整的解析器——逐节、逐字节。从 STG 外部包装器开始,然后在偏移量 0x20 处定位 DAT1 魔术数字,然后读取节数,然后遍历节表以找到两个关键的节:
0x135832C8(Actor Prius Built — 组件类型索引)和
0x6D4301EF(Actor Prius Built Data — 每个组件的实际配置缓冲区)。
组件索引告诉我们每个组件的数据区域在内存中的起始位置及其大小。有了这些信息,我们就能隔离出属于 BendableLinePrius、WebLinePrius 和 RopeManagerPrius 的确切区域。在每个区域内,一个单独的字节保存着限制值。解锁一切的关键发现是意识到这些是 uint8 值——单字节,而不是 uint32 整数。早期尝试找到它们的方法,是将其作为 4 字节小端整数(
06 00 00 00)来扫描值 6。但它并不是那样存在的。它是一个单独的
0x06 字节,在每个组件的数据区域中恰好出现一次,这就是为什么唯一性扫描可以确切地确认它。确认它,修补它,验证它。全部三个组件,全部三个字节,用时不到一毫秒。
待办事项列表:
- 制作“无限蛛网丝线模组”
- 解锁蛛网丝线(角度与长度)
- 手动蛛网爬行
- 手动蛛网摆荡
安装方法
1. 下载文件。 2. 导入到 Overstrike。
鸣谢
Tkachov — ALERT / Modding Tool / Overstrike (GPLv3) Okangel — InsomniacToolbox / WebWorks 整个 MSM2 Nexus 模组社区 — 感谢你们记录问题、保持请求活跃,并拒绝接受这无法完成的事实。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。