RPGMaker MV的基本原理
在查看Greenworks的github页面时有提到NW.JS,实际上RPGMakerMV部署好的工程就是基于NW.JS运行的。在根目录下的Game.exe实际上可以用网上下载的NW.exe替代。
在本文撰写时对应的Greenworks支持的版本是NW 0.32.4
- 其中SDK版本带调试界面,按F12能够打开。
- 普通版本就是正式版本使用的。
使用Archeia_Steamworks插件
Archeia_Steamworks插件中替换了场景初始化的方法,加入了调用steam命令的内容。
也增加了Shift+Tab打开SteamOverlay的功能,插件代码中都有继承,不需要额外操作。
增加steam初始化失败的提示
SceneManager.initialize = function() {
this.initSteamworks();
Archeia.Steamworks.SceneManager_initialize.call(this);
};
SceneManager.initSteamworks = function() {
this._steamInitialized = steamworks.initAPI();
if (this.steamworksInitialized() == true) {
console.warn("Initialized Steamworks API");
} else {
console.warn("Steamworks failed to initialize.");
alert('Steamworks failed to initialize.');//**手动增加 初始化失败提示,原本只会在console中提示错误**
SceneManager.exit();//**手动增加 在提示后退出游戏**
}
};
其他坑
我直接把itch.io下载的插件加入工程中发现运行是会报nw.js版本过低,于是又把原来方案中的0.32.4 64位版本拖入工程进行替代,同时也加入了傻瓜步骤中网盘所分享的libs文件夹需要的各种运行库文件确保更换NWJS后能正常运行。
NW.JS相关的坑
版本
原本按照github的首页下载了0.33.3版本,出现了require函数无法正确读取greenword.node文件的问题,在RPGMaker的讨论网站上看到有类似问题,通过降级NWJS版本得到解决。
package.json
根目录下的这个文件指定了一个html文件,通常就是www文件夹下的Index.html。index.html中有游戏所有的脚本关联信息,就是很标准的网页写法。
从NWJS压缩包中解压出的文件不包含package.json就可以直接覆盖到根目录。
当然推荐做法是删除www和package.json以外的所有文件再覆盖。 不过既然知道哪些文件对应什么功能就没必要害怕删错。
Greenworks
greenworks担任了从js调用steamworks API的桥梁,具体有哪些接口可以从github的文档中找到。
版本
原则上greenworks会一直更新,本文撰写时为0.14版本,支持:
- node v0.8, v0.10, v0.12, v4, v5, v6, v7, v8, v9 and v10
- NW.js v0.8, v0.11+
- Electron v1.0.0+
- Steam SDK v1.42
原则上要选择对应的steam SDK版本,避免兼容问题,当然我没测过更高版本会发生什么。
steam SDK 各版本下载链接
Greenworks Github首页
傻瓜式步骤
准备
除NWJS傻瓜包度盘链接提取码: wd69
- 下载Greenworks、steamSDK和NW.JS
- 如果使用Archeia_Steamworks插件,在RM界面激活插件并根据需要修改初始化失败的代码。
- 部署RPGMakerMV项目
- 测试的话可以在打包好的根目录新建steam_appid.txt,里面填写你的游戏的steam app id
搬运
- 在项目根目录下保留www文件夹、package.json和其他可以删除
- 向www文件夹下搬运来自greenworkds的greenworks.js
- 向www文件夹下的lib搬运greenworks-win32.node/greenworks-win64.node(根据操作系统版本选择。我是都加了,还没有尝试是否和NW.JS版本有关。)
- 向www文件夹下的lib搬运steam SDK目录
<steam_sdk_path>/redistributable_bin
下的steam_api.dll
和steam_api.lib
(也可以搬win64目录下的64位版本) - 向www文件夹下的lib搬运steam SDK目录
<steam_sdk-path>/public/steam/lib/win64
下的sdkencryptedappticket.dll
和sdkencryptedappticket.lib
(同样也有64位版本) - 把nw.js压缩包中的所有内容覆盖到项目根目录,NW.exe就可以运行游戏,也可以改成Game.exe
完成后的lib目录如下图(包含了windows双版本):
调用steam功能(如果使用了Archeia_Steamworks插件可以忽略)
我的需求是给游戏加入steam验证,如果未启动steam或未在steam上购买就退出游戏,对应的在游戏启动的时候验证steam状态
- 在
工程目录\www\js\main.js
中加入
try{
var greenworks = require('./greenworks');
if(greenworks.init()){//初始化失败会抛出错误,故包含在try catch中,否则黑死没后文
if(greenworks.getAppId() != steam_appid)//steam_appid在你的steam后台获得
SceneManager.terminate();//退出游戏
SceneManager.run(Scene_Boot);//开始游戏
}
}
catch(error){
SceneManager.terminate();
}
其他steam功能
没测试,回头补充XP