【高阶GM开发求助】小狐狸插件与最新显卡驱动不兼容问题
gamemaker吧
全部回复
仅看楼主
level 3
小硫博仕- 楼主
【起因】
从今年2.9开始,陆续有玩家与我反应打不开游戏,打不开的报错内容全都为下图所示
一开始我还不怎么在意,以为是一些人自己电脑的问题,但是最近越来越多的人反馈有同样的问题,使我不得不重视起来。
经过与两位小伙伴的联合测试,终于排查出了问题所在:凡是装有小狐狸插件(FoxWriting)的GM工程,在使用更新的显卡驱动时,都会出现此问题
【问题描述】
充分条件:
①游戏exe由装有FoxWriting.gex扩展包的GM8工程导出 或 在GM8工程中外部调用了FoxWriting.dll
②使用win11以上并装有GPU的电脑,且显卡驱动经过了某次重要更新(哪一次尚不明确)
必要条件(现象):
点开exe文件后,会有读条动画,条读完后立即闪退,并显示Unexpected error occured when running the game.
问题严重性:
①目前而言,除了FoxWriting插件,GM8中没有什么更好的中文绘制插件,无法找到功能类似的平替,也就是说无法再进行中文绘制
②显卡驱动的更新具有时间维度必然性,之后必定会有越来越多的玩家遭遇此问题,预期扩散速度快
③插件作者Noisyfox已经10年未更新此插件,不可能通过原作者来修复这样一个适应性问题
【尝试修复失败】
我下载了Noisyfox的开源代码,找到了其中关键的FoxWriting.dll;在GM中调用尝试后,无论哪种调用方法,只要动用了FoxWriting.dll,就会产生此问题。所以问题必定处在这个dll上
尝试使用VC++再编译一次dll,但是由于我的VC++版本似乎过高(2022),与其中gmapi的编译版本(2015)不符,从而产生各种错误,无法编译;且2022版的VS无法下载Windows SDK 8.1的目标平台
报错信息①:1>C:\...\FoxWriting\LINK : fatal error C1047: 对象或库文件“C:\...\FoxWriting\\lib\gmapi-mt.lib”是使用与其他对象(如“Release\CodePage.obj”)不同的编译器版本创建的;请使用相同的编译器重新生成所有对象和库
报错信息②:C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Platforms\Win32\PlatformToolsets\v140\Toolset.targets(34,5): error MSB8036: The Windows SDK version 8.1 was not found.
【核心问题定位推测】
观察到FoxWriting.cpp中调用了大量的D3D8.h与D3D8.lib中的库,而D3D8库是图像渲染处理的,根据以往的经验,显卡驱动会与该插件不兼容的原因只能是和D3D8不兼容(至少是fw插件用的这个D3D8版本)
【求助】
有无精通GM8插件或是对小狐狸插件工程较为熟悉的小伙伴研究一下,如何对其调用的D3D8库进行更新尝试,以及重新编译插件dll(我的VS2022似乎做不到),或是有无其他方法可以修正此不兼容带来的错误
【叹】
没有了FoxWriting真的什么都做不到
2025年07月05日 03点07分 1
吧务
level 13
感觉前几天刚在群里还是什么地方讨论过类似内容,就是和楼主提到的有些许差异:GM8的中文绘制插件至少还有一个,只是没有中文帮助。
不过,GM8是个很旧的东西,fox writing也是个很旧的东西,最新驱动是个很新的东西。强行让他们去做兼容其实并不理想。相比之下,咱更推荐把游戏代码移植到GMS2(如果游戏仍在开发),或者使用XP虚拟机进行游戏(如果游戏同样早已停止内容制作)。
-----
碎碎念0:话说有一张截图里怎么是个GMS1工程图标,记得好像GMS1支持中文绘制啊
碎碎念1:每次这样的情况出现,咱都会庆幸咱是“不使用插件”一派的,就是为了尽可能减少这种影响…虽然这么劝别人的时候基本劝不住,甚至有人会在非必要的情况下特意使用插件/dll;
2025年07月05日 20点07分 2
感谢大佬回答,看来只能放弃gm8了(即使换插件也要全盘大改) 请问一下有没有什么好用的gm8转gms或者转gms2的工具? --- 回答碎碎念0:那个图标只是从gms里抠下来的,觉得好看,本质上还是gm8工程
2025年07月06日 03点07分
@小硫博仕- S1可以导入8.0的工程,S2也可以导入S1的。但用了插件的不太确定。如果插件引入的函数没有正确转换,可以考虑S2的全局替换,或者干脆做成新的自制函数。
2025年07月07日 00点07分
@q糖豆p 好的,已经导入S1,但是原工程使用了大量execute_string()函数和大量ICC先于Create事件的用法,有无系统性解决这两者的办法呢
2025年07月07日 03点07分
@小硫博仕- 这么毒的嘛……execute_string基本靠人力来修,毕竟批量替换时很难猜到这里的string应该是什么内容。ICC先于Create事件没太注意过,暂时就想到把create错后半帧(改到alarm事件)的方法,似乎也没办法快速批量更改。
2025年07月07日 05点07分
level 14
换V1.2版本不会报错[阴险]
2025年07月07日 22点07分 3
我擦?求一个1.2下载方式,我去试试
2025年07月08日 05点07分
@小硫博仕- 旧ww版本w.noisyfox.io/sdm_downloads/foxwriting_legacy另外可以试试Fn插件
2025年07月08日 13点07分
level 9
我的电脑太老了,开GM2太慢了,就一直用的GM8,现在看来没办法了,慢就慢吧,还是用GM2了
2025年07月08日 05点07分 4
我的GM8,,[泪]
2025年07月08日 05点07分
@大四象 😔gm8年纪还是大了
2025年07月08日 06点07分
@小硫博仕- 你工程有多大了,般家麻烦不,?
2025年07月08日 06点07分
@大四象 做了两年的工程了,搬起来非常麻烦,转过去script报错几百个不说,内嵌的中文还全都变成乱码了……
2025年07月08日 08点07分
level 14
大文本量,还是得用插件啥的。我以前就是如果文本量不大,只用于UI或者部分的对话、提示内容等,就都用成图片了。
2025年07月08日 07点07分 5
是这样的,小规模的话可以图片替代,方便太多了
2025年07月08日 08点07分
level 1
我现在只能开虚拟机继续做,但终究治标不治本,希望有大佬能修复这个问题吧……
2025年07月14日 11点07分 6
1.2版本和Fn插件目前不报错,如果不想迁移工程可以试试
2025年07月16日 02点07分
level 4
虽然来晚了,但是我想说一下,用fn中文插件好像没问题
2025年08月16日 01点08分 7
1