2025 年 4 月 23 日,作者在 SilentPatch GitHub 问题追踪器上收到关于 Skimmer 飞机在 Windows 11 24H2 中消失的特定 bug 报告。在 GTAForums 上自去年 11 月起就有关于此问题的评论,有人称 SilentPatch 导致该问题,也有人称在完全未修改的游戏中也会出现。
作者的家用 PC 是 Windows 10 22H2,工作机器是 Windows 11 23H2,均未出现该问题,但升级到 24H2 的多人称遇到了。作者设置了 24H2 虚拟机进行测试,发现 Skimmer 飞机消失,安装 SilentPatch 后游戏会冻结,不安装则会出现“burn-in 效应”。
经过调查,发现是游戏在设置 Skimmer 飞机的悬挂系统时,读取的边界框最大值 sup.z
被损坏,导致飞机起飞高度异常。进一步研究发现,Skimmer 在游戏数据中的定义缺失了前、后轮比例参数,添加这些参数后问题解决。
对于 SilentPatch,作者发现其在加载车辆对象时假设所有参数都存在,导致未初始化的参数在 Windows 11 24H2 中出现问题,作者进行了代码修复。
深入研究后,发现是 Windows 11 24H2 中内部 WinAPI 函数使用堆栈的方式发生变化,导致 LeaveCriticalSection
使用更多堆栈空间,从而覆盖了 LoadVehicleObject
中的未初始化变量,暴露了之前隐藏的 bug。
作者还发现该 bug 在原始 Xbox 版本中已被修复,默认使用了合理的 1.0
作为轮比例,而作者选择了 0.7
作为默认值。最后,作者将代码修复包含在下次 SilentPatch 热修复中,并提供了手动修复 vehicles.ide
的方法。
此 bug 是 San Andreas 中的一个简单错误,提醒人们要验证输入数据、不要忽略编译警告,庆幸的是 GTA 可修改且易于理解,能及时解决此类问题以确保游戏长期正常运行。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。