[实验] SMBX-38A 运行时强制全屏程序
项目链接:https://github.com/HengShao233/smbx38a-ext-launcher
该工程的作者为 @小豆
该工程有两个目的:
- 规范化 38a 版的 SMBX 游戏体验流程,断掉原引擎本身的编辑器功能;
- 增强 38a 版 SMBX 游戏的体验(强制全屏并修正全屏表现,扩展图形渲染能力(比如提供屏幕后处理)等功能)
构建制品
如果成功构建,构建制品见 ./build 目录。
./build/engine-extension/engine-extension.dll:该文件是扩展引擎的核心库。
./build/main/main.exe:该文件是扩展引擎的启动器。
./build/redirection/redirection.dll:该文件负责在 engine-ext.exe 启动时拉起扩展引擎。
./build/shaders/*.cso:这些 cso 文件是 ./engine-extension/shaders/ 下所有着色器的编译制品,着色器的类型判定遵循如下规则:
以 _vs 结尾的、以 vert 开头的、以 _v 结尾的会判定为顶点着色器,入口函数为 main
以 _ps 结尾的、以 pix 开头的、以 _p 结尾的会被判定为像素着色器,入口函数为 main
以 _cs 结尾的、以 _c 结尾的会被判定为计算着色器,入口函数为 main
成品目录结构
大体结构参考 ./template 目录,以下步骤以该目录作为根目录:
- 将构建制品中的 main.exe 和 engine-extension.dll 放到
./ 目录(根目录)下。
- 将 smbx38a editor 放到
./engine 目录下,并删除原 editor.exe(smbx.exe)。我们使用目录中原本放有的一个打了补丁的 engine-ext.exe 作为 smbx 本体的启动程序。
- 将构建制品中的 redirection.dll 放到
./engine 目录下。
- 将构建制品中的着色器编译结果 (
*.cso)放到 ./assets/shaders/目录下。
- 将游戏关卡放到
./assets/game 目录下。并用记事本编辑该目录下的 main 文件。该文件分为两行,第一行为从 ./目录到关卡文件的路径,第二行为打开游戏后的窗口名(扩展引擎靠这个定位到 smbx 的主窗口对象,如果不填第二行窗口名则默认为 Super Mario Bros. X by 38A - Version 1.4.5)。

配置好上述结构后打开根目录的 main.exe 即可进入游戏。
其中 main.exe 可通过特定软件更改图标(如 Resource Hacker)。
理论上的正确运行效果:

👆全屏,且无错误缩放(为了让 4 : 3 的画幅适应绝大多数宽屏,程序里留了黑边)。