【踩坑记录】如何在 MacOS (Unix) 上运行 EraTW

我赶时间 · 版

Wine + winetricks (dotnet 8 + dotnet 4.8) + 字体迁移

失败的 Man

由于自己没有用过 .Net 开发过,只好摸着石头过河。姑且对未竟的尝试做下笔录。

直接编译

使用的仓库:EvilMask / Emuera.EM · GitLab

克隆下来之后,在 Emuera/UI 下发现使用了大量的 System.Windows.Forms,也就是 dotnet/winforms。悲伤的是,查了些资料发现这个上古老库只能在 Windows 环境下编译与运行。

白瞎我装了一堆 .Net 的运行时和 SDK。

替代库与替代产品

找替代库的时候,我的核心诉求是将 System.Windwos.Forms 非侵入地迁移至其他替代 UI 库。

冲浪了一会,得到的信息有:

  • The GTK Project:一个实现了大部分 winforms 功能的跨平台 UI 库。需要深度改代码。
  • Xamarin:巨硬整的一个旧活,也需要深度改代码。Fegelein21 大佬曾使用它重做了整个 UI,即 xEmuera
  • Porting Winforms Applications | Mono:跨平台 dotnet 实现,似乎提供了迁移手册。

现存的跨平台产品:

  • uEmuera:使用 Unity 3D 封装,使用引擎的 mono 运行时。由 xerysherryFegelein21 两位大佬先后进行优化。是目前较为可靠的跨平台产品。
  • Fegelein21/XEmuera:基于 Xamarin.FormsEmuera 跨平台移植版本。

更详细的信息参阅 Emuera版本 - 中文 era 游戏 Wiki

可惜没有 MacOS 发行版本可以直接下载,手头也不想再安装一个 u3d 大块头,遂摆。

虚拟机

虚拟机至少比安装一个纯血 Windows 强一点点。先排除 Parallels Desktop 这种直接安装镜像的虚拟机,找一坨比较小的:WineHQ

将 Windows API 调用翻译成动态的 POSIX 调用,免除了性能和其他一些行为的内存占用,让你能够干净地集合 Windows 应用到你的桌面。

MacOS 的安装方式可以参考 官方文档

1
2
# 需要预先安装 homebrew
brew install --cask --no-quarantine wine-stable

安装后便可以用 控制台 导航到 eraTW 的文件目录下输入 wine xx.exe 启动游戏。这里的 xx 便是我们的 emuera 二进制文件。比如:

1
wine Emuera1824+v18+EMv17+EEv41.exe

理论、游戏启动成功可能。

捉虫时间到

口口口,口口口口口。

没想到,文字变口了。
这是因为有一部分字体找不到,需要从大伙自己的 PC 上,拷贝补齐字体到 ~/.wine/windows/Fonts/ 下。

我当时还用下文提到的 winetricks 安装了 allfonts,但仍然充满了口口口。

如此一来,中文、日文便能正常显示了!

VbStrConv 不支持宽窄文本转换

开始加载地图的时候,突然报错了!

参考了这几篇博文,好像都没有解决方法:

简单扫了一波代码,鉴定为 Mono 通病。无论哪一个分支,mono-basic 均没有实现 VbStrConv.WideVbStrConv.Narrow 的转换^[mono 源码 String.vb]。

那么上面提到的使用 mono 运行时的 uEmuera 是怎么做的呢?答案是实现一个自己的 StrConv ^[uEmuera 源码 VisualBasic.cs] ,并将私家版原版中的函数替换掉。但是仔细看这个新的实现,相较原生其实缺少很多字符的映射,包括大量标点符号在内,平片假名转换也遗漏不少。

解决方案便是使用 winetricks 安装正儿八经的 .Net 运行时。

WineTricks 是一个社区开源工具,用于在 Wine 环境中安装各种 Windows 应用程序和库文件。

  1. 下载 winetricks/src/winetricks at master · Winetricks/winetricks
  2. 执行 winetricks dotnet8,按照提示安装 .Net Core 8.0
  3. 执行 winetricks dotnet48 ,按照提示安装 .Net Framework 4.8

再启动游戏,应当就能愉快玩耍了。

Share