周末想重温《恶霸鲁尼》,结果闪退五次?SilentPatchBully 三步救回你的存档
2026/8/31 7:04:35 网站建设 项目流程

周末想重温《恶霸鲁尼》,结果闪退五次?SilentPatchBully 三步救回你的存档

【免费下载链接】SilentPatchBullySilentPatch for Bully: Scholarship Edition (fixes crashes on Windows 10)项目地址: https://gitcode.com/gh_mirrors/si/SilentPatchBully

周五晚上,你兴冲冲打开 Steam 里的《恶霸鲁尼:奖学金版》,想着回味一下布尔沃斯学园的恶作剧时光。结果呢?游戏加载到一半直接退回桌面,第二次连标题画面都没看到,第三次在音乐课上又崩了。这不是你的电脑有问题——是这款 2006 年的老游戏,和 Windows 10/11 的内存管理方式"八字不合"。SilentPatchBully 就是专门解决这个问题的开源补丁:一个免费的小插件,专治《恶霸鲁尼》在 Windows 10/11 上的闪退、卡死和帧率飘忽,适合所有想在现代系统上顺利重温这款经典的玩家。

先说结论:它到底修了什么

SilentPatchBully 的定位很单纯——让游戏在哪个 Windows 版本上跑,行为都一样。官方 README 里那句"independent of Windows version"是核心:旧游戏用自己的方式管理内存,新系统不认这套,于是崩溃。补丁把这些"旧习惯"逐个纠正过来。

它修复的问题大致分三类,我用大白话给你翻译一下:

症状大白话解释
启动加载时随机崩溃碰撞模型加载代码有隐患,进游戏全看运气
音乐课、Nutcrackin' 小游戏闪退玩家数量被当成数组大小用,越界访问内存
玩久了声音出问题、内存越占越多音频资源释放后又使用、句柄只开不关、内存泄漏
退出游戏时报错退出时同一块内存被释放两次(double free)
帧率锁 30 却一直掉帧原版限帧器不够精准,渲染节奏忽快忽慢

为什么 2006 年的游戏在 Win10 上这么"脆"?

可以把游戏内存想象成宿舍储物柜。2006 年的游戏习惯"大概估个位置就往里塞",柜门关不关无所谓;而 Windows 10 的管理员(内存保护机制)管得很严,一看到越界、空指针、重复释放,直接判定违规,把整个程序"请出教室"。

具体到《恶霸鲁尼》,几个雷区特别典型:

  • 内存池越界读:游戏的对象池(object pool)在查槽位时,索引超出范围还会继续往下读。源码里PoolsBully.h的注释写得很直白:原版在index >= m_nNumSlots时也去检查 slot 状态,制造了一个越界读的 bug。补丁重写了CBasePool::GetSlotWithLinked,先判断索引是否在有效范围,超了就走链表池或返回空,把越界堵死。
  • 音频的"用完没扔":语音流播放完、异步读取还没结束时资源就被释放(use-after-free),以及声音句柄只创建不关闭。补丁在SilentPatchBully.cpp里给sndStreamScreamSoundBank等音频类补上了取消 I/O、关闭句柄的逻辑,还把声音数据交给 XACT 引擎统一管理,解决长期游玩时的内存泄漏。
  • 限帧靠"干等":原版 30FPS 锁帧靠轮询忙等,结果经常掉帧;补丁把忙等改成精准自旋,让帧率稳定锁在 30,同时窗口最小化时自动睡 100ms,不再白白吃 CPU。

它是怎么"钻进"游戏里的?

SilentPatchBully 不是独立的可执行程序,而是一个ASI 插件(编译产物是SilentPatchBully.asi,不是 dll,注意别搞混)。它的工作方式很像给游戏"打补丁的手术":

  1. 挂载:游戏启动时由 ASI Loader 把它加载进游戏进程;
  2. 定位:通过InjectHooks()找到游戏内存里的关键函数地址(源码里那一大串0x43D6600x5A6EA9之类的十六进制地址,就是游戏原代码的位置);
  3. 替换:把有问题的函数调用改道,指向补丁自己写的安全版本;
  4. 收尾:顺带在主菜单显示一个带构建号的版本标识(%1.3f SP Build),方便确认补丁是否生效。

代码里还有个细节:它启动时会校验游戏主程序版本,如果不是 1.200 会弹窗提示。零售版请打官方 1.200 补丁,Steam 版默认就是 1.200,用"验证文件完整性"即可。

实战上手:三步装好,十分钟验证

第一步:确认版本

Steam 版《恶霸鲁尼:奖学金版》默认是 1.200,直接能用;实体零售版请先更新到官方 1.200 补丁。

第二步:放进游戏目录

  1. 下载 SilentPatchBully 的编译产物(.asi文件和 MiniDumper 工具);
  2. 找到游戏安装目录(Steam 里右键游戏 → 管理 → 浏览本地文件);
  3. 如果游戏还没装 ASI Loader,先装一个通用的 ASI Loader;
  4. SilentPatchBully.asi复制进游戏根目录,和主程序放一起。

注意:补丁与游戏版本强绑定,目录里别放别的脚本类 mod,否则定位函数地址可能对不上。

第三步:验证生效

启动游戏看主菜单——出现 "SP Build" 字样就说明补丁加载成功了。然后依次做三件事:

  • 连续进出几次游戏,看加载是否稳定
  • 去上音乐课、玩 Nutcrackin',确认小游戏不再闪退
  • 挂着游戏玩两小时,观察帧率是否稳定锁在 30

配置文件:两个开关,按需开

补丁在游戏目录读取SilentPatchBully.ini(和.asi同名),目前暴露了两个选项,都在[SilentPatch]节下面:

[SilentPatch] ; 自定义内存管理器,默认关闭,将来会移除 CustomMemoryMgr=0 ; 帧率上限:不写则保持游戏默认30;写0为不限帧;写60即锁60 FPSLimit=30
  • FPSLimit是最常用的:追求丝滑可以设 60,机器扛不住就保持 30。
  • CustomMemoryMgr默认是 0(关闭)。它是一个"老方案兜底",作者已计划在未来版本移除,不建议普通玩家开启。

万一还崩?带上"病历本"去报告

补丁本身就是公开测试版,作者在 README 里也坦承可能还有未知崩溃。所以它内置了MiniDumper:一旦游戏崩溃,游戏目录会自动生成.dmp文件——这就是你的"病历本"。

正确上报姿势:

  1. 先确认游戏是纯净版(纹理美化 mod 可以,脚本类 mod 不行,会干扰判断);
  2. .dmp文件连同"崩溃前正在做什么"的简短描述一起,提交到项目的 Issues 页面;
  3. 附上你的 Windows 版本、显卡驱动等信息,越详细越容易定位。

想自己动手编译?门槛不高

项目用 Visual Studio 2017 就能直接编译:

git clone https://gitcode.com/gh_mirrors/si/SilentPatchBully
  1. 打开SilentPatchBully.sln解决方案;
  2. 选择Release(或Master)配置;
  3. 编译后在输出目录拿到SilentPatchBully.asi

想研究实现的话,重点看两个文件就够了:

  • SilentPatchBully/PoolsBully.h:内存池修复,CBasePool的越界读修复就在这里;
  • SilentPatchBully/SilentPatchBully.cpp:所有 hook 的注入点,InjectHooks()一屏看完全部修复清单;
  • 版本信息在SilentPatchBully/versionmeta.props,改SILENTPATCH_REVISION_ID就能打上自己的版本号。

Debug 构建还内置了内存金丝雀(canary)检查:分配时在数据前后写入标记,释放时验证标记是否被破坏,能帮你抓出越界写。想开这层检查,把INCLUDE_MEMORY_CHECKS设为 1 重新编译即可。

一些值得知道的周边

  • 性能顺带提升:补丁去掉了 IMG 读取时的FILE_FLAG_NO_BUFFERING标志,理论上能加快流式加载(比如开车飙过街区时的地图读取);
  • 退出不再报错:退出游戏时的堆破坏、双释放问题修了一大批,从此"关游戏"这个动作本身不会再崩;
  • 低 CPU 占用:窗口最小化时自动休眠,挂机不费电;
  • 与 mod 兼容:补丁不改变游戏的内存布局和核心 API,只做定点修补,对大多数视觉类 mod 友好。

写在最后

SilentPatchBully 的价值不在于"多炫",而在于克制——它没有重写游戏,只是把那些在旧系统上被容忍、在新系统上会炸的坏习惯,一个一个温柔地纠正过来。这正是开源社区做经典游戏兼容性修复最典型的路径:理解老代码的意图,再用现代的眼光补上安全边界。

如果你也曾在 Win10/11 上被《恶霸鲁尼》的闪退劝退过,花十分钟装上这个补丁,你会发现 2006 年的布尔沃斯学园,依然值得回去再捣一次乱。试用后如果遇到新问题,记得带上.dmp文件去仓库提 Issue;顺手点个 Star,让作者知道这份修复有人需要。

【免费下载链接】SilentPatchBullySilentPatch for Bully: Scholarship Edition (fixes crashes on Windows 10)项目地址: https://gitcode.com/gh_mirrors/si/SilentPatchBully

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询