英雄联盟修改语音教程
之前写过一篇英雄联盟语音&文字修改教程,当时的方法离不开 locale,需要改启动参数或者配置文件。这个方法现在还是能用,只是如果你单纯想换个语音,再去动整套语言环境就有点绕了。
现在可以直接替换游戏加载的本地化文件,不改 locale,配置文件也不用动。操作本身其实很简单,麻烦的地方主要还是游戏更新之后需要重新处理。
原理
英雄联盟的本地化资源放在游戏目录的 Game\DATA\FINAL 下面。一般当前服务器只会提供自己用到的语言文件,国服常见的是 en_US 和 zh_CN,日语、韩语之类的文件需要自己从对应服务器准备。
以英雄文件为例:
Aatrox.ja_JP.wad.clientAatrox.zh_CN.wad.client游戏正常以国服区域启动时,会读取文件名带有 zh_CN 的资源。那么把日服的 Aatrox.ja_JP.wad.client 复制一份,改名为 Aatrox.zh_CN.wad.client 再覆盖进去,游戏加载到的就是日服文件。
说白了就是文件里面还是日语资源,只把游戏用来识别语言的文件名换成了 zh_CN。
这个方法现在能用,还有一个前提是 WAD 文件内部的资源路径已经统一成了 en_US。不管外面是哪个区域的文件,内部路径都一样,所以改完文件名之后游戏还能正常读取。原来的路径会带区域代码,代码语义上看着更合理,现在为什么统一成这样就不展开了,反正正好留下了这条路。
文件准备
完整替换不能只看 Champions,人物换成日语了,地图和播报还在说中文,听着也挺乱的。需要准备的本地化文件主要在下面几个位置:
英雄联盟\Game\DATA\FINAL├─ Champions├─ Localized└─ Maps └─ ShippingChampions下面是各个英雄的本地化资源,例如Ahri.ja_JP.wad.client。Localized下面有Global.ja_JP.wad.client这类全局资源。Maps\Shipping下面是Common.ja_JP.wad.client、Map11.ja_JP.wad.client这类地图资源。
其他区服的文件必须自己下载,并且目录结构最好原样保留。后面覆盖时直接把准备好的 Champions、Localized 和 Maps 合并进 FINAL,不容易漏文件。
IMPORTANT版本必须一致
外服资源要和当前游戏版本对应。拿旧版本文件覆盖,轻一点就是新英雄、新皮肤、地图或者新语音没有声音;严重时游戏会直接异常或者崩溃。这个和旧方法没什么区别,文件缺了就是缺了,改个名字也变不出来。
修改教程
先完全退出游戏和 WeGame,找到自己的游戏目录。这里用我的目录举例:
D:\Games\Tencent\WeGameApps\英雄联盟\Game\DATA\FINAL实际操作就是下面几步:
- 把原本的
zh_CN文件备份到游戏目录之外,并保留Champions、Localized、Maps这些目录结构。 - 复制一份准备好的外服资源,不要直接在唯一的一份源文件上改。
- 把副本文件名中的语言标记批量改掉,例如将
ja_JP改为zh_CN。 - 把改名后的文件按原目录结构复制到游戏的
FINAL目录,覆盖原本的zh_CN文件。 - 正常启动游戏,不需要再修改
locale或任何配置文件。
WARNING覆盖前先备份
覆盖的是游戏原本的
zh_CN文件,不备份也不是不能恢复,WeGame 修复一下就回来了。但修复需要重新检查和下载文件,能提前复制一份就别给自己增加工作量。
单个文件的改名就是这样:
Ahri.ja_JP.wad.clientAhri.zh_CN.wad.client文件比较多时一个个改名没什么必要,可以用 PowerShell 批量准备。下面脚本会从外服资源目录复制到一个新的输出目录,并在复制时把 ja_JP 改成 zh_CN,不会修改源文件。
$sourceRoot = (Resolve-Path 'D:\LOL-Voice\ja_JP').Path.TrimEnd('\')$outputRoot = 'D:\LOL-Voice\ready'
Get-ChildItem -LiteralPath $sourceRoot -Recurse -File -Filter '*.ja_JP.wad.client' | ForEach-Object { $relativePath = $_.FullName.Substring($sourceRoot.Length).TrimStart( [IO.Path]::DirectorySeparatorChar ) $targetPath = Join-Path $outputRoot ( $relativePath -replace '\.ja_JP\.wad\.client$', '.zh_CN.wad.client' )
New-Item -ItemType Directory -Force -Path (Split-Path $targetPath -Parent) | Out-Null Copy-Item -LiteralPath $_.FullName -Destination $targetPath -Force }把 $sourceRoot 改成外服资源副本的实际位置,$outputRoot 改成准备存放改名结果的位置。
只替换一部分
不一定每次都要把全部语音换掉。如果只喜欢某一个英雄的外服语音,那么只备份并替换这个英雄对应的文件就行。例如只换阿狸,就只处理:
Champions\Ahri.ja_JP.wad.client ↓Champions\Ahri.zh_CN.wad.client只想换地图或者播报语音也是同理,处理对应的全局或地图本地化文件,不需要把两百多个英雄文件一起塞进去。
TIP局部替换更好维护
只替换一个英雄,游戏更新之后也只需要盯住这一个文件;只替换播报,就只看对应的全局或地图文件。全量替换省得挑,局部替换则省得每次更新都重新处理一整套,按自己的需求来。
更新和恢复
这个方法不用改配置,启动体验更省事,但更新上没有原来的 locale 方法方便。游戏更新时会把修改过的文件更新回去,通过 WeGame 启动或者执行修复时,也会把文件恢复成国服原版。
更新之后不要直接把很久以前的外服文件再覆盖回来。先准备与当前游戏版本一致的新资源,重新改名再替换。全量修改就重新处理整套文件,局部修改就只处理自己用到的那几个。
想恢复原版时,把之前备份的 zh_CN 文件按原目录复制回去即可。没有备份就用 WeGame 修复,反正它本来就会干这个。
其实这个办法去年就能用了,只是一直没单独写,原因也就是更新麻烦。这个版本刚改完,可能半个月之后游戏一更新,又得重新准备一遍。只换一个英雄还好,全量替换每次都这样弄,确实有点折腾。
新旧方法
新方法的优点很明显:
- 不用改
locale,也不用碰配置文件,把 WAD 文件准备好再改名覆盖即可。 - 支持只替换一个英雄。平时就玩这一个英雄,不需要下载和维护一整套文件,只换它自己的就行。
旧的 locale 方法则更适合完整替换。它需要准备目标区域的一整套文件,少文件时可能会在载入对应资源时出问题,严重时游戏都进不去。当然,游戏不一定每次都会读取所有 WAD,但你很难提前确定哪个永远不会用,所以实际准备时还是按完整文件来。
旧方法还有一个很实际的优点:它是在游戏目录里添加另一套区域文件,不是覆盖国服原本的文件,客户端正常更新时一般不会影响这些新增文件,也不需要备份原来的 zh_CN。新方法看着只是改了一个文件名,但在游戏眼里,官方文件确实被改动了,更新和 WeGame 自然会把它恢复回去。
两种方法也可以组合使用。比如把 locale 恢复成中文,再用现在的覆盖方法处理语音,看上去像是“中文环境只换语音”,但原理并不是游戏提供了单独的语音开关,而是用外服资源实际替换了游戏要读取的 zh_CN 文件。
所以如果只是换一个英雄,或者只换地图播报,新方法很方便;想长期完整替换,还是更推荐原来的 locale 方法。方法本身都不难,主要看你愿不愿意跟着版本一直维护。

辽公网安备21021302000353号