在 Mac平台 通过 CrossOver/Wine 游玩觅长生
阅读
2024-07-11更新
最新编辑:果冻哪都是
阅读:
更新日期:2024-07-11
最新编辑:果冻哪都是
关键词:MacOs 觅长生 苹果电脑 CrossOver Wine
准备工作
首先请前往 Steam 购买正版游戏。
对于使用 CrossOver 的玩家:
- 安装 Steam 容器。
- 登陆 Steam,然后运行 觅长生。
对于使用 wine 进行游玩的玩家,感觉有点复杂,流程我不太清楚,请君自行努力,本文要点在后面。
问题
然后才是本文重点,我们会碰到两个问题,分别是:
- 设置中的”应用“点了没有效果。
- 分辨率无法修改。
- Mod用不了。
接下来我们一一解决。
设置 与 分辨率
这俩是一个问题,U3D在获取可选的屏幕分辨率的时候发现一个能用的都没有。近而在点击“应用”的时候报错。
为了修正这个问题,我们要修改游戏代码。
1、下载 dnSpy
前往 GitHub 下载 Release v6.1.8 · dnSpy/dnSpy · GitHub ,通常是选 dnSpy-net-win64.zip。
对于没有梯子的请使用 GitHub Proxy 代理加速
下载链接是 https://github.com/dnSpy/dnSpy/releases/download/v6.1.8/dnSpy-net-win64.zip
2、定位方法
解压下载的压缩包,然后在 CrossOver/wine 打开 dnSpy.exe。
点击顶部栏 文件 > 打开,选取游戏目录下 觅长生\觅长生_Data\Managed 这个目录的 Assembly-CSharp.dll 这个文件。
在左侧栏的 程序集资源管理器 中依次展开 Assembly-CSharp > Assembly-CSharp.dll > Tab > TabSetPanel 。
如果看不到 程序集资源管理器 的窗口,可以点击顶部栏 视图 > 程序集资源管理器。
3、修改方法
在 dnSpy 中,如下图,我们可以通过 双击方法名,右键 > 编辑方法 来对方法进行编辑。
我们需要修改两个方法:InitDropdown() 和 InitResolutionsDict()。
InitDropdown()
将方法体中的这一段
if (value == 1)
{
this.ResolutionDropdown.interactable = false;
this.ResolutionDropdown.value = this.ResolutionDropdown.options.Count - 1;
return;
}
去掉
this.ResolutionDropdown.interactable = false;
使得在 全屏 状态下也能改分辨率。即改成下面的样子。
if (value == 1)
{
this.ResolutionDropdown.value = this.ResolutionDropdown.options.Count - 1;
return;
}
InitResolutionsDict()
往方法体的末尾添加如下代码
if (num == 0)
{
int from = 1000; // 最小可选分辨率宽度,可根据你的屏幕分辨率手动调整
int to = 1600; // 最大可选分辨率宽度,可根据你的屏幕分辨率手动调整
for (int j = from; j < to; j += 40)
{
this.ResolutionsDict.Add(num, new MResolution
{
X = j,
Y = Mathf.FloorToInt((float)j * 0.5625f)
});
num++;
}
this.ResolutionsDict.Add(num, new MResolution
{
X = to,
Y = Mathf.FloorToInt((float)to * 0.5625f)
});
}
确认修改后这个方法经过软件优化后,大概长这个样子
private void InitResolutionsDict()
{
List<int> list = new List<int>();
this.ResolutionsDict = new Dictionary<int, MResolution>();
int num = 0;
foreach (Resolution resolution in Screen.resolutions)
{
if (!list.Contains(resolution.width) && Mathf.Abs((float)resolution.height / (float)resolution.width - 0.5625f) <= 0.001f)
{
MResolution mresolution = new MResolution();
mresolution.X = resolution.width;
mresolution.Y = resolution.height;
this.ResolutionsDict.Add(num, mresolution);
num++;
list.Add(mresolution.X);
}
}
if (num == 0)
{
int num2 = 1000;
int to = 1600;
for (int i = num2; i < to; i += 40)
{
this.ResolutionsDict.Add(num, new MResolution
{
X = i,
Y = Mathf.FloorToInt((float)i * 0.5625f)
});
num++;
}
this.ResolutionsDict.Add(num, new MResolution
{
X = to,
Y = Mathf.FloorToInt((float)to * 0.5625f)
});
}
}
4、保存模块
点击顶部栏的 文件 > 保存模块,最后点击弹出窗口 确认,等待进度完成即可。
Mod 用不了
是因为 bepinex 针对 winhttp 的 “劫持” 没能生效,从而整个 Mod 框架未运行。
在 CrossOver 中,进入对应容器的面板,点击 控制面板 > Wine配置,然后进入 函数库 标签页,在 新增函数库顶替 的下拉中找到 winhttp,然后点击 添加,最后确认修改即可。
在 Wine 中,请参考 https://docs.bepinex.dev/v5.4.21/articles/advanced/proton_wine.html 完成。