[wine zone] wine一个98年老游戏《铁甲风暴》
Tofloor
poster avatar
zhangs
deepin
2021-11-12 17:53
Author

《铁甲风暴》是于1998年发行的一款即时战略类游戏,小时候在联想的品牌机随机附送的光盘上玩到的,挺好玩的。

23年过去了,win10上现在已经无法启动了,还好我们有wine,经过一些调试,看代码,查资料,整理了一下玩游戏的方法:

使用的软件:

  • wine-6.10-1,版本最高只能用这个,再新的版本游戏主菜单可以打开,但是战役地图都是黑屏,经过我bisect,在d171d1116764260f4ae272c69b54e5dfd13c6835 提交之后就不行了 https://bugs.winehq.org/show_bug.cgi?id=29184 ,有实力的可以看看为啥,我是没时间看了。
  • cdemu,模拟光驱,游戏需要光驱才能启动,游戏里面播放的音乐就来自光驱里面的音轨

安装步骤:

  1. 加载第一张光盘
  2. 运行wine修改配置
    WINEARCH=win32 wine winecfg
    选择win95系统,勾选模拟桌面选项,勾选自动捕获鼠标,免得把自己电脑显示器搞乱
    WINEARCH=win32 wine regedit
    找到HKCU\Software\Wine\Direct3D,没有Direct3D就新建一个,然后在里面创建renderer="no3d"
    这一步是告诉wine不要用显卡区加速游戏,直接内存操作,默认的用opengl加速反而卡的要死,真的是拔掉显卡提升性能
  3. 安装游戏
    WINEARCH=win32 wine explorer
    找到光盘目录,双击运行autorun,安装游戏本体和视频播放驱动,其他不要安装
  4. 换第二张光盘
    cdemu unload 0
    cdemu load 0 DarkFront.nrg
    udisksctl mount -b /dev/sr0
  5. 安装游戏
    WINEARCH=win32 wine explorer
    找到光盘目录,双击运行autorun,安装游戏本体,其他不要安装
  6. 运行游戏
    WINEARCH=win32 wine explorer
    找到游戏目录,双击mk.exe
    开始玩吧

整个过程遇到了很多问题:

  1. 游戏本体选择网上的硬盘版还是原始光盘版。
    硬盘版没有音乐,还是原始光盘版原汁原味
  2. 光盘版挂在之后,游戏启动还是报错,说请插入光盘。
    调查之后发现,光盘不只是我一开始认为的iso镜像,还有很多格式,这个nrg格式的光盘镜像包含光盘全部数据,包括后面的音轨,iso镜像不能包含音轨
  3. wine一开始运行发现没有windows95系统。
    调查之后发现现在的wine都是64位的,windows95不支持,所以加上WINEARCH=win32之后就能选择win95
  4. 游戏启动之后整个电脑屏幕都乱掉了,分辨率都不对了。
    调查之后发现,老的游戏用的是8位颜色,不是32位,现在linux的xorg对8位支持很差,所以还是用模拟桌面来玩会比较好
  5. 游戏主界面可以运行,但是无法开始战役,一直黑屏,但是鼠标点击相关区域有反应。
    这个问题困扰了我很久,查了2个礼拜资料,最后发现老版本的wine可与运行,然后就一个个版本编译过去,发现了d171d111676这个patch之后都不能玩了。
    这个patch改动就是windows程序调用GetDeviceCaps函数时返回正确的颜色深度,没改之前都是默认返回32。现在返回了正确的8反而导致游戏无法运行也是诡异。
    但是我的水平还不够,无法继续看下去。
  6. 使用了wine6.10.1版本之后,发现玩游戏好卡。
    这个问题也让我郁闷了好几个礼拜,按理说98年的游戏,现在都要2022年了,显卡性能不至于这么差啊,没办法,只能硬着头皮找资料,看代码。
    找到一篇https://wiki.winehq.org/DirectDraw 讲wine运行老游戏很差,里面讲了原因,说要把fb从显卡同步到内存,然后每次更新还得重新同步
    很影响性能,我想也是啊,很多无用功,然后去看wined3d代码,在wined3d_main.c文件中看到了wine可以选择directx的驱动,里面有vulkan,gl,gdi,no3d选项
    其中gdi和no3d意思一样,我想现在的电脑应该比25年前的强吧,就算是内存速度也比那时候的显存快吧,就直接抱着试试的心态,
    改wine注册表HKCU\Software\Wine\Direct3D,设置renderer="no3d"。
    果然,再进入游戏,丝滑般流畅,哪怕把分辨率改到1024x768也是,回到了小学2年级坐在电脑前打游戏的感觉,太爽了。

希望可以帮助到大家找回儿时的乐趣,整个排查过程学到了很多,也分享给大家,希望对大家有所帮助。

Reply Favorite View the author
All Replies
zijinyise
deepin
2021-11-12 18:30
#1

大佬

Reply View the author
忘记、过去
Moderator
2021-11-12 20:09
#2

给大佬献上膝盖

Reply View the author
lucxtar
deepin
2021-11-12 23:08
#3

有金庸群侠传和仙剑奇侠传么

Reply View the author