海豚进展2020年4月

2020-05-06 05:07:59

感觉好像我们已经有一段时间没有真正的月度进度报告了。这是因为没有那么多的重大变化落地,这使得填写一篇实质性的文章变得更加困难。这并不是说事情已经变慢了,这些较小的变化提高了用户的生活质量,并积累了起来,特别是当用户从旧版本跳到最新版本时。然而,与实际影响核心仿真和游戏的事情相比,这些更改更难在进度报告中显示和突出。这一次,我们有足够多的东西要写,包括对一款非常有趣的游戏的最新版本的支持:Metroid Prime 3';的E32006Beta。

但在我们开始新的变化之前,我们需要弥补上个月错过的一些东西。所以,请不要再耽搁了,请欣赏四月份的进度报告!

在上个月输入更改的混乱中,我们设法错过了关于自定义纹理的一个显著更改。哎呦。所以这里有一些三月份的小礼物!

GameID是任天堂用来对游戏进行分类和跟踪的唯一代码,它们对GameCube和Wii非常重要。例如,当一台Wii游戏机加载北美版的“暮光之城公主Wii”时,游戏机既不知道也不关心游戏的名称,它唯一知道的就是加载的是RZDE01。由于任天堂不遗余力地为每个游戏的每个版本创建唯一的识别码,Dolphin在整个代码中严重依赖GameID。这特别包括我们的自定义纹理加载器。在我们的Load>;Texture文件夹中,要加载的纹理必须使用GameID的前三个或全部六个字符分类到文件夹中,否则Dolphin会忽略它们。这样,我们就可以准确地知道哪些文件属于哪个游戏,一切都会按预期进行。

虽然这在多年来一直运作良好,但仍有改进的空间。Load>;Texture文件夹中的一个或两个纹理包很容易识别,但随着添加更多的包,这种清晰度很快就会消失。过了一段时间,它们看起来就都一样了。你能记得WCKJWN中的WPJEJW,还是SO3EE9中的SOBD7K吗?即使是我们的长期开发人员和测试人员也必须查找这些内容!

被GameID的海洋所困扰,iwubcode更改了我们的自定义纹理加载,以允许使用描述符文件。只需在纹理包的文件夹中放置一个文本文件,将其名称设置为游戏的GameID,海豚现在可以识别文件夹的内容,而不考虑文件夹的名称!有了这个,你就可以命名和组织你的Load>;Texture目录,这样你所有的自定义纹理包都是漂亮整齐的。

对于那些想知道的人来说,如果你想在一个游戏中使用两个纹理包,你可以。对于它们都尝试更改的任何纹理,最后加载的纹理将覆盖该纹理的以前版本。文件夹按字母顺序加载。

Netplay上的自制软件可能听起来像是对海豚的一种难以置信的利基使用,但它实际上是Netplay最受欢迎的用例之一!为什么?嗯,这是因为许多超级粉碎兄弟斗殴MOD使用自制的,如壁虎操作系统,与SD卡打包的代码和其他资产,以改变基础游戏,而不需要修改原来的转储!由于其中一些MOD有竞争场景,Dolphin Netplay可以成为训练和练习的有用工具。

不幸的是,Dolphin的Wii USB仿真中的一个疏忽导致在Dolphin中启动Gecko OS和其他Wii Homebrew时挂起。这是因为大部分海豚的USB仿真在Netplay(和测试)中是禁用的,以保持事情的确定性,而且Dolphin无论如何都会尝试初始化它!值得庆幸的是,一旦问题被正确地一分为二,Techjar很快就纠正了这个问题,现在这些MOD可以再次在Netplay中启动。

Dolphin是一个广泛用户使用的项目。我们希望确保每个人都有良好的体验,但许多用户的愿望可能不仅不会重叠,甚至可能会相互冲突。想要即插即用他们最喜欢的游戏的普通用户会想要一个非常简单、易于使用的仿真器,而想要利用其强大硬件的所有功能的高级用户会想要广泛的功能,使他们能够增强和微调他们的体验。为了处理这一问题,我们仔细权衡了不同的用户需求,以应用于尽可能多的用户,然后为需要它们的用户隐藏更多的高级功能。我们的内部分辨率选择就是一个很好的例子。目前,我们的UI最多只能显示8x Native(5120x4224)。根据“蒸汽硬件调查”(Steam Hardware Survey),在撰写本文时,这将覆盖98%以上的用户。这样可以最大限度地减少暴露的选项,防止那些可能不知道该选项的作用的人潜在地使他们的图形驱动程序崩溃,并且基本上每个人都可以达到或超过其显示器的最大分辨率。

但当然,仍然有一小部分用户的设置令人难以置信地疯狂,远远超出了我们的大部分用户基础。对于这一小部分用户,我们允许我们的INI将内部分辨率设置为他们想要的最高分辨率。唯一的限制因素是显卡的硬限制!

不幸的是,作为一个非常高级的功能,对于非常非常少的用户来说,时代对这个功能并不友好。以前,在WX中,如果在GameINI中配置了自定义分辨率,它会在GUI中显示为";Custom";。当我们移动到Qt时,这从未重新创建过,所以如果用户通过INI配置了高于8倍的本地内部分辨率,然后查看图形增强选项卡,内部分辨率将显示为空白。更糟糕的是,在加载该空白值时,Qt认为它是一个新值,并将其写入-1\f25 GFX.INI-1以进行内部解析。这不是一个被接受的内部解决方案,所以只要-1\f25 INI-1保留在-1\f25 INI-1内,Dolphin就会在任何游戏启动时崩溃。这就造成了这样一种情况:如果用户想要定期使用高于8倍原生分辨率的分辨率,他们必须从不查看增强选项卡。如果他们这样做了,他们将不得不回到Inis并重新配置一切。这是个糟糕的用户体验。然而,这个特性是如此的小众,我们多年来甚至没有注意到这个问题,而且直到我们为这篇文章做测试之前,我们从来没有追踪到这个bug是Qt Move造成的。

8k(7680x4320)需要12倍的原生内部分辨率才能填充,所以当MayImilae得到一台闪亮的二手8k显示器时,她首先遇到了这个问题。在不过度复杂化GUI或向普通用户公开潜在危险设置的情况下修复此问题是一个问题,因此与Stenzek一起设计了一个计划来构建一种新的、更好的方法来处理此场景。现在,在GFX.ini中设置的任何内部分辨率(仅限正值)将在GUI中显示,因此不再有任何空白插槽,也不会写入INI。问题解决了!但他们的计划更进一步,增加了一个新的、仅限INI的设置,名为MaxInternalResolution。此元设置控制UI中曝光的最大内部分辨率。因此,对于拥有6k或8k显示器的少数用户,您现在可以让您的显示分辨率显示在GUI中,并像任何其他设置一样方便地在它们之间切换!

结合错误修复,这使得使用海豚与异常高分辨率的显示器更令人愉快的使用!

注意:请记住,内部解析不等于SSAA。Dolphin没有SSAA所具有的过滤功能,因此将内部分辨率设置为远远超出显示器的分辨率会产生更多混叠,而不是更少。为获得最佳效果,请将内部分辨率设置为显示器的最高分辨率,然后添加MSAA或SSAA。您应该只在特定情况下超出显示器的最大内部分辨率,例如在某些游戏中减少全屏模糊。

这是一个相对较小的黑客攻击,旨在抑制特定游戏中的警告。通常,XF(变换阶段,处理顶点变换)和BP(混合处理器/TEV,处理混合)配置为使用相同数量的通道。但是,游戏可能会在每个阶段意外设置不同数量的频道,从而导致一些不稳定的行为。想象一下游戏将转换阶段配置为

我们遇到的情况出现在超级纸张马里奥和SSX Tricky中,与混合阶段相比,它们在转换阶段将有额外的通道。这会导致海豚抛出几乎无限数量的断言,使游戏无法播放。虽然用户可以通过禁用恐慌处理程序来绕过并正常玩游戏,但这仍然是一种相当尴尬的行为。Stenzek对这些案例进行了重要的硬件测试,尽管它没有完全覆盖。为了避免不必要的死锁人的游戏,我们已经选择跳过渲染不匹配的XF/BP阶段的对象,并禁用断言。在早期测试中,渲染似乎没有变化,这意味着这些对象也可能不会在控制台上渲染。还需要更多的测试,但目前这应该是一个合适的解决方案。

为了保持对此问题的正确关注,并收集更多用于测试的信息,如果您已启用使用情况统计报告,Dolphin现在将自动向我们报告任何使用不匹配的XF/BP配置的游戏,以便我们在更详细地查看此问题时可以更好地进行测试修复。如果我们确实找到了与此更改有渲染差异的游戏,则可以更好地模拟这些边缘情况。

虽然到目前为止,大多数Wii游戏的在线服务都已关闭,但仍有少数游戏可以在线连接并仍在玩。然而,即使在服务器已经关闭的游戏中,正确模拟Wii的行为仍然很重要。DJ Hero,Rock Band 3,Just Dance Series,一些Wii Call of Duty游戏等游戏在连接到在线服务时都会出现问题,无论服务器是否还在运行。

Sepalani几个月来一直在调查这些问题,同时编写硬件测试来验证Wii的在线行为。这组特殊的补丁允许“使命召唤”游戏在不崩溃的情况下连接到它们的服务器。虽然服务器实际上还在运行,但我们无法在海豚游戏中使用它们。不幸的是,我们错过了更新文件,而且随着Wii商店的消失,似乎没有任何方法来更新游戏,以便他们可以连接。如果有人在网上玩过Wii“使命召唤”游戏,在剩下的服务器没了之前,做一个NAND备份,在Dolphin上试用一下,以防除了我们已经解决的问题之外还有更多的问题,这可能是值得的。

虽然这确实从整体上改善了情况,但通过修复一组悬挂,我们只是简单地前进到了另一组。因此,列表中的其他游戏将简单地进一步进行,但会在该过程的稍后阶段挂起。这些行为目前正在调查中,我们希望这些游戏在不久的将来能够正常运行。

像这样的功能已经酝酿了很长时间,多年来有各种不同的实现和想法流传开来。Dolphin支持编译时配置MEM1(即GameCube的RAM)的最初原因是GameCube/Wii开发单元增加了用于调试和测试的内存。开发者和高级用户可以修改Dolphin的源代码,以增加运行Metroid Prime 3 Beta的内存。Metroid Prime 3 Beta运行的开发单元有48MB的MEM1,而Dolphin、GameCube和Wii的MEM1只有24MB。随着Minty-Meeo的更改,您现在可以在Dolphin的GUI中直接更改MEM1和MEM2大小,而不需要重新编译Dolphin。

然而,Minty-Meeo并不是为了这样默默无闻的事情才这么做的。他的动机实际上是围绕着游戏改装和随机化。随机器是给你喜欢的一些游戏带来新鲜体验的一种方式。通过随机化敌人产生什么,在哪里产生物品,在某些情况下,区域是如何构建的,以及更多,随机化器可以将你的游戏知识和技能推向极端,同时提出独特的挑战。“塞尔达传奇”(The Legend Of Zelda)、“大都会”(Metroid)、“精灵宝可梦”(Pokemon)等热门游戏系列都有随机化器。目前已经有几款GameCube游戏的随机器,包括“塞尔达传奇:风吹者”和“Metroid Prime 1/2”,这些游戏都有相当大的随机器社区。这些随机化器无需任何修改即可在控制台和海豚上运行!

虽然我们确实认为在可能的情况下应该以原始硬件为目标,但是在开发过程中使用额外的内存可以更容易地进行调试,并且可以执行在原始硬件上根本不可能做的事情。以Pikmin2的巨型洞穴模型为例,它把所有的敌人和财宝都装进一个巨大的洞穴底部。内存限制使得这种大小的单个并发级别在实际硬件上是不合理的,但是随着RAM的扩展,这种不太可能的事情突然变成了可能。

这一功能一合并,人们就开始询问如何将内存调高来提高游戏的性能。但是,大多数游戏甚至不会查询有多少可用内存,也不会为功能利用额外的内存。事实上,一些游戏,比如超级马里奥银河2,在内存增加的情况下运行时会彻底崩溃。不过,这也是有好处的!臭名昭著的“火徽:灿烂的黎明”中的崩溃,由于未知的原因在海豚中耗尽了游戏的内存,可以通过增加MEM1来避免,即使是轻微的增加也可以避免。

此更改是Dolphin为更好地保存您的模拟Wii;ID而进行的持续努力的一部分。此ID对于连接诸如Wiimm的WiFi服务器非常有用,这些服务器对新用户有7天的停机时间,以帮助解决作弊和黑客问题。虽然他们允许海豚用户使用,但你需要有一个真正的Wii ID,而这并没有得到很好的处理。JosJuice和Leseratte10最近的努力在更好地处理这些情况方面走在了前列,这样在Wiimm的服务器上使用Dolphin的人就不会被随机误认为是新用户。

这一最新的变化与Settings.txt的加密有关,Settings.txt存储了大量重要的Wii信息。当加密这个文件时,Dolphin没有很好地处理事情,这使得Null Bytes最终出现在加密数据的中间。Wii会将空字节视为行的末尾,从而导致数据无法正确读取,并且用户无法在其服务器上进行验证。经过过去几个月的更正和其他更改,用户应该不会再遇到Wiimm的服务器突然无法识别他们的问题了。

我们已经有很长一段时间没有对安卓系统进行足够多的更改了,所以我们觉得有必要用一整节的篇幅来介绍它们。但是有了一些新的贡献者和巨大的修复,特别强调这些变化是不费吹灰之力的。

当涉及到MacOS或Android TV等挑剔的平台时,我们一直警告用户在升级到新的操作系统版本时要谨慎。它们不仅是最有可能在更新中随机破坏某些东西的平台,而且它们的用户群也是我们最小的,在出现问题时没有常规的开发人员来解决。例如,Android TV 9自2018年8月发布以来一直无法推出海豚。这比我们希望我们支持的最新版本的平台被破坏的时间要长得多,但老实说,这是无能为力的。我们最新的Android电视播放器的受众少得令人难以置信,而且我们的开发者中没有一个人经常使用Android TV来支持Dolphin。幸运的是,我们有一个很棒的社区,我们可以依靠它来应对这样的情况。在向我们报告了这一问题后,webgeek1234转过身来开始自己调查。他们确定,整个不兼容是因为海豚以一种不受欢迎的方式弹出了一个弹出式窗口。是的,因为一个旧的弹出窗口,整个应用程序都崩溃了。安卓。他们更新了Dolphin带来弹出窗口的方式,只更改了一行,突然之间一切都再次正常了!

虽然这种特殊的设置对外界来说可能没有多大意义,但看到埃博拉病毒有兴趣将其添加到海豚安卓系统中,我们并不感到惊讶。多年来,当涉及到各种超级粉碎兄弟斗殴模式时,他们一直是我们最敬业的错误记者之一。你需要做的最重要的事情之一就是支持SD卡。虽然你可以通过INI文件手动启用SD卡,但埃博拉16决定简化流程,允许用户直接在Dolphin Android界面中启用、禁用和选择SD卡。

注意:Dolphin将自动创建一个128MB的BLOB文件,该文件充当虚拟SD卡,就像它在桌面版本上所做的那样。海豚不能使用真正的SD卡。

在Android上配置Wii远程设置是一件痛苦的事情,原因有很多,其中之一是Dolphin Android需要完全重启才能使更改生效。这意味着进行简单的更改有时是一个多步骤的过程。埃博拉16受够了这个问题,重新调整了Wii远程设置的保存方式,以便立即生效,就像桌面版本的处理方式一样。

安装WADS是Dolphin的一项重要功能,而这在Android上并不容易做到。此拉入请求背后的初衷是使mod加载程序更容易安装IOS文件。与桌面版本不同,现在访问更新和系统菜单并不那么容易。此外,当空间问题时,简单地携带一个iOS wad比传输一款Wii游戏或安装完整的系统菜单、默认频道和系统更新中的一整套iOS文件要便宜得多。

最后,这是一个很好的特性,使Android GUI更强大,更接近桌面GUI。

特别感谢所有将海豚从5.0-11825增加到5.0-11991的贡献者!

这篇文章是博客系列“海豚进展报告”中的第60篇。<上一篇系列文章