猫想重温一下FC01当年那个经典的Canvas DVD,嗯,DVD镜像本身也没有任何的加密,安装过程……一切顺利
不过一运行,果然还是要费脑筋了,首先是启动后不定时会在菜单画面刷新时跳错退出,其二是没有BGM
因为刷新菜单跳错的时机正好是往常播放BGM的地方,因此猫把主要的注意力集中在了BGM的问题上。尝试把BGM切换为MIDI模式之后,问题果然解决,于是怀疑是光盘附带的wmaudioredist没能正确安装。
某猫比较懒于是就去Google了一下,不过很囧的是关于Canvas这个关键词,恐怕是太常用了点,基本淹没在了数据海洋里
于是不卖关子了,某猫只能手动寻求解决
由于wmaudioredist本身是个cab打包,因此问题也相对好办一些,用7z直接解压后释出一大堆文件 orz
仔细查看了一下文件,猫在msaud.inf里找到了好东西,这里记录了程序安装的一些细节。
一般来说X64的Windows和X32版本主要的差别是驱动,大多数32位的程序64位Windows其实都是可以正确兼容的,于是猫就试着把wmaudioredist解压缩后的大多数文件复制到了C:\Windows/sysWOW64(32位的程序嘛)目录下,说起这个大多数,其实就只有_WMANScp.exe、msaud.inf和msvcrt.dll被排除,_WMANScp.exe用膝盖想想都知道是安装程序,msaud.inf是安装的配置信息,msvcrt.dll这个万恶的东西写过程序的人都知道,Win7的版本肯定比它新。
复制完文件后,猫按照msaud.inf的[WMAudio.Reg.NT]扇区描述重建了注册表,另一个[WMAudio.Reg]扇区显然是为9x准备的(那是多么遥远的时代啊)
重建注册表后猫再次尝试启动游戏并且切换BGM模式为WMA……久违的感动终回来了……泪
但是这还没完,鼠标右键猛点想重温OP的时候囧了,又是有声没图像的说,本来也无所谓啦,机器上装的CF3R也是这个死样,但是这一来就越想越火了,于是猫想查个究竟。用MPC-HC直接打开DAT下面的CANVASDV.AVI,结果发现也是不能播放,不过MPC也给出了提示:IV50的视频头无法解码。IV50字面上理解也只能想到是indeo vedio 5了,话说这个格式不是XP时代就内建了解码器了么,难道Win7给移除了?
可是一搜索ir50_32.dll,发现这个文件明明健在的说,猫Google一看,原来Win7下这个文件默认是米注册的说,M$这不吃饱了撑着么……于是命令行里
regsvr32 c:\window\sysWOW32\ir50_32.dll执行完了再启动,YES!!OP也正常了,这样一来CanvasDVD也完美运行了
以下是wmaudioredist的注册表信息,下次也不用再手动了
- Windows Registry Editor Version 5.00
- [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Drivers32]
- "msacm.msaudio1"="msaud32.acm"
- [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\drivers.desc]
- "msaud32.acm"="Windows Media Audio"
- [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Multimedia\Components\DRM\References]
- "WMAudio"="Windows Media Audio"
- [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Multimedia\Components\NetworkClient\References]
- "WMAudio"="Windows Media Audio"
复制代码对应这次的解决方法为线索,猫后来也在11区的网站上找到了相同的内容(看不到的人只有撞破大墙了):
http://kilauea.bbspink.com/test/read.cgi/hgame/1258985997/---------------------------------
CF3R的OP问题其实和Canvas的情况类似,装个32位的ffdshow就搞定了,不过猫已经装了64位的,实在不想再去蛋痛了
---------------------------------
顺便再把EFZ的终极解决方案也分享一下:
老游戏,EFZ也好、VOS也罢,暴雷公司著名的SC也一样,拜Win7那个漂漂的任务栏所赐,256色下大多都读不到DDraw的调色板。
以前猫的方法是通过兼容模式 + 关闭视觉样式方法解决,但是这一招到了阉割后的Homebase版本上就不灵了。不过其实M$官方是有解决方案的,可以通过设定注册表
HKLM\SOFTWARE\Wow6432Node\Microsoft\DirectDraw\Compatibility\来进行兼容,话说这里默认已经有SC110和SC115的配置信息了。
依葫芦画瓢,在这里新建一个“项”,名称自定,例如“EFZ”,然后在其下新建三个数据键
Flags、
ID和
Name。
Flags键为二进制类型,与色板相关,猫不知道其具体数值的意义,但是可以模仿SC115的设定,使用“00 08 00 00”
ID是用来识别程序用的,使用了应用程序头中的时间标记作为参数,这个参数的查找方法后面会讲
Name是字符串类型,也就是应用程序的全名,例如“efz.exe”
添加这些字段后再进EFZ,就可以和揪心的花屏说再见了。
关于程序时间标记的查找,最简单的方法是直接下载一个叫做“Explorer Suite”PE管理工具套件,然后用其中的CFF Explorer工具直接打开程序,在NT Headers -> File Header -> TimeDateStamp键中可以看到时间标记的数值,不过因为X86某些很囧的特性,在注册表里你得按字节为单位把这个值反过来写,例如CFF看到值“89 AB CD EF”那么注册表的ID键值应当填写为“EF CD AB 89”。
还有一种查找方法适合有程序开发基础的人,直接用16进制编辑器直接打开程序,找到地址0x0000003C,作为一个dword去读这里的值,注意,X86都是小端序,因此这个值需要按字节反序,这里读到的值实际上是文件内的地址指针,在这个指针的数值上+8后所对应的地址就是dword长度的时间标记,这个时候就不用反序了,直接复制到注册表的数据键里就OK
以下是猫自己的注册表设定,不过不是所有人都和猫的文件版本相同,因此ID里的信息可能需要自己替换:
- Windows Registry Editor Version 5.00
- [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DirectDraw\Compatibility\efz]
- "Flags"=hex:00,08,00,00
- "ID"=hex:8f,99,86,43
- "Name"="efz.exe"
复制代码