Repository navigation
VortexDL v1.7.0
这一版做了六件事:修 Switch 图标、修移植游戏资源路径、Switch 库提速与缓存、
模拟器改成随软件安装、模拟器页改悬浮窗控制中心、新增「帧率记录」和「加速」两个页面。
一、Switch 图标(重画)
原来两个手柄画成了几乎相同的形状,28px 下糊成一坨。按真实 Joy-Con 重画:
左手柄带摇杆 + 十字键,右手柄带摇杆 + ABXY。已在 28/56/120px 三个尺寸下逐像素验证。
二、移植游戏的资源路径(真根因,不是猜的)
以《超越2006》为例:它解出来在 switch/outrun2/,同目录就是 Scripts/ Stage/ CARS/ 等数据,
但游戏一直报 Original OutRun 2006 data tree not found。
原因是这类 NRO 是自制程序,它不认 Windows 的工作目录——只按 Switch 的规矩去
romfs 和 sdmc(模拟器的 SD 卡根)找数据。日志里 home= / (started from: .)
和它把 options.ini、自己的 .log 写进 user/sdmc/ 都证明了这一点。
修法:启动前把 ROM 旁边的数据目录**以目录联接(junction)**挂到 user/sdmc/ 下,
原版 OR2006C2C.EXE / binkw32.dll 这类单文件用硬链接(跨盘自动退化成复制)。
不复制 1GB 数据、换游戏时自动换链接。
实测日志从
phase=retail-root, detail=path is not an OutRun 2006 retail data root
变成了正常读取 //./Scripts/bin/Races.bin、//./Stage/BEAC/... —— 路径这一环打通了。
但这个游戏最终起不来,因为包本身有问题(见下)。
三、包质量诊断(新增)
《超越2006》的包里带了一个 940KB 的 OR2006C2C.EXE,代码段熵 8.0 ——
这是加密/占位文件(真正的原版约 6MB、熵只有 6.x)。这类移植游戏要从原版 exe 里
提取着色器,所以它会停在 exe-image 阶段。
现在启动前会自动检测,用中文告诉你「这个包带的 exe 不可用,换一个资源重新下载」,
而不是留一个黑屏 + 一行看不清的英文报错。
四、模拟器改成随软件安装
模拟器从 D:\game\switch\emulator 迁到 <软件目录>\emulator,和安装包一起装;
老的目录会自动迁移(含配置、密钥、着色器缓存),旧目录改名为 emulator.migrated
留给你自己删。
★ 顺带修掉迁移里的一个真 bug:copy_tree 用「文件大小相同」判断是否已复制,
结果 zstd.dll / zlib1.dll 被漏掉,模拟器起不来且没有任何提示
(只在控制台报 error while loading shared libraries: zstd.dll)。
现在迁移后会用「文件数 + 总字节」做完整性校验,不通过就重拷。
五、模拟器页 → 悬浮窗控制中心
按你的要求,模拟器页顶部那一排按钮全部删掉,功能都搬到游戏运行时的悬浮窗里:
- 顶部条:拖动把手、实时 FPS、最大化、全屏、⏺ 记录、⚙ 设置、关闭
- 展开后四个标签页:
- 性能:帧率、帧时间、CPU、GPU、内存、游戏进程 + CPU 各核心条形图
- 模拟器:重新应用中文/画质预设、导入密钥、打开游戏/模拟器目录、使用说明、重装模拟器、刷新列表
- 输入:输入设备、震动、按键提示、自动隐藏、背景透明度(浮在游戏上可调淡)
- 帧率记录:记录模式(关 / 游戏内 / 全局)、两种采样间隔、是否记每核、一键开始/停止
配色固定深色玻璃(不跟随软件主题)——它浮在游戏画面上,浅色主题下白底白字会看不见。
六、帧率记录(新页面,在「下载」上方)
列表页:一行一场,左边游戏图标 + 名字,右边平均 FPS / 1% Low / 0.1% Low,
下面一行是日期、时长、模式、采样点数。点整行进详情,右上角 ✕ 删除。
详情页:5 个指标卡 + 三条曲线(帧率 / CPU / GPU)+ CPU 每核心平均占用 +
各项参数表(平均 / 峰值:CPU、GPU、内存、游戏进程 CPU/内存、磁盘读写、网络上下行)。
两种模式(你要求的):
- 游戏内:只在检测到游戏在前台时记录,游戏退出自动收尾
- 全局:一直记录
★ 修了一个真 bug:0.1% low 原来永远发现不了卡顿。算法用
floor(n * pct) 当下标,1000 帧里只有 1 帧卡顿时取到的是倒数第 2 慢的帧,
0.1% low 算出来和平均值一样。改成 ceil(n * pct) 取「最差那批的最后一帧」,
并补了两条单元测试锁住这个语义。
关于帧率来源(必须说清楚)
我试了四条路:DWM 合成统计(这台机器 DwmGetCompositionTimingInfo 直接返回
DWM_ERR_INVALIDARG)、PDH 的 GPU 计数器、读模拟器窗口子控件文本、读 Citron 的
ultralow_benchmark_logging 输出 —— 在这个环境里都拿不到可靠的逐帧帧率。
所以现在的策略是:能测到就显示,测不到就显示「—」,绝不编数字。
CPU / GPU / 内存 / 每核 / 磁盘 / 网络全部是实时真实采样,这些不会缺。
真正的逐帧 fps 需要往游戏进程注入 Present 钩子(PresentMon/RTSS 那条路),
那会触发反作弊和杀软,本软件不做 —— 这条取舍我写在界面上了。
七、加速(新页面,左侧最下方)
逆向 Steam++ 搞清楚它的机制后,自己实现了「域名 → 更快 IP」这一半:
- 内置 8 个加速项目(Steam 社区/商店/接口/CDN、GitHub 网站/API、公共 CDN、头像图床)
- 用公开 DoH(doh.pub / alidns)解析 → TCP 443 测速 → 写 hosts(标记块包裹)
- 随时「还原 hosts」;写完自动
ipconfig /flushdns - 需要管理员权限,权限不足时给中文提示而不是一句
os error 5
实测:8 个域名解析 + 测速 474ms,全部拿到真实 IP。
不做的那一半:Steam++ 还会装一个 LocalMachine\Root 根证书 + 本地 443 反代,
用来解密并改写 HTTPS。那等于把用户的 Cookie 和登录态交给中间人,而且它用假
Googlebot UA 绕过 age gate(违反服务条款)。本软件不做,界面上写明了。
顺带发现:Steam++ 正在加速
测试时发现你的 hosts 里已经有 Steam++ 写的 47 条记录(全部指向 127.0.0.1),
443 端口被它的 Steam++.Accelerator.exe 占着。两套同时开会互相覆盖,
所以加速页会检测这种情况并提示你先在那边停止。
已知问题:《超越2006》这个包的 OR2006C2C.EXE 是加密占位文件,游戏跑不起来 ——
路径问题已经修好(日志证明数据都读到了),是包本身缺可用的原版 exe,换一个资源即可。