献给使用 Kirikiri+KAG 引擎想要上 Steam 的中文 AVG 创作者的一份指南 - 从零开始的编译 krkrsteam 插件到集成到 KAG 脚本里再到发布 alpha 版到 Steam 供内部测试
最初的最初
这篇教程中会出现以下软件、工具、关键字:
编译 krkrsteam 插件时:
krkrsteam、Visual Studio 2012、系统环境变量设置,命令提示符、premake4、ncbind、tp_stub
上传发布内容到 Steamworks 时:
Steampipe GUI Tool、Steamworks、Steam Greenlight(绿光)、AppId、Depot
以及基本大家都知道的:
krkr.eXe krkrsteam.dll(krkrsteam-d.dll debug 时用)
如果你有英文、日文阅读 readme/文档 的能力的话更好,因为操作上窝也是看 readme/文档 之后才学会的。
这个教程里面没有提到怎么发 Greenlight(绿光),发绿光的话依然也是跟着官方操作步骤指引,文档指南可以做到的,在绿光通过之后,就是 Greenlint 之后会得到一个 appid,这个 appid 是标识自己在测试游戏的名称,及发布时玩家在玩游戏时显示的 XXX 正在玩 XXX 的识别符。
同时也没有提怎么申请 Steamworks 开发者账号,官方操作流程指引已经很清楚了,就没必要一步一步说这些了……
编译 krkrsteam 插件
krkrsteam 的源码可以在 kirikiri2 官网 svn 服务器里下载:https://sv.kikyou.info/svn/kirikiri2/trunk/kirikiri2/src/plugins/win32/steam 建议把 plugins
文件夹下的所有插件都下载到本地。
也可以在有人 clone 的 GitHub repo 里下载:https://github.com/jeeb/kirikiri2/tree/master/kirikiri2/src/plugins/win32/steam 这个基本就只能把 repo 本体全部下载到本地了,不过可以在下载完成之后把 plugins
文件夹 copy 到其它位置之后在那个文件夹里开始作业。
源码下载到本地之后,可以看 readme.txt
里的内容配置编译环境,这里只作一个简要介绍。
Steamworks 的 SDK 可以在 https://partner.steamgames.com/home 里拉到下面的右侧看到下载地址,下载完成解压到 C 盘,然后把 sdk
文件夹重命名为 steam_sdk
文件夹
- 首先生成 Visual Studio 2012 的 project(项目)文件时需要 premake4 这个工具,可以在 http://industriousone.com/premake 里下载。
- 下载 premake4 安装到本地文件夹里,如:
c:\premake\
然后把这个路径配置到系统环境变量
中去,同时也把 steam_sdk 的环境变量设置下,步骤:- 使用组合快捷键
win+r
打开运行窗口
- 输入
SystemPropertiesAdvanced
按回车打开系统属性/高级窗口 - 点击
环境变量(N)...
按钮 -> 找到系统变量(S)
下的变量名为Path
的那一栏之后,双击进入编辑模式,定位到最开始,输入C:\premake;
(或者拷贝 premake4 安装的文件夹路径,粘贴到这里之后加上一个;
分隔符号),点击确定
,再次点击确定
。
此时premake4
的系统环境变量设置已经完成。同时在这个步骤新建一个环境变量变量名为:STEAMWORKS_SDK
变量值为:C:\steam_sdk
(或者直接拷贝你解压 steam_sdk 文件夹的路径粘贴到这里来。)
- 打开命令提示符(
win+r
打开运行框之后输入cmd
然后按Enter
键)后,输入premaker4
然后按回车键之后,应该会有Type 'premake4 --help' for help
这一行字出现,如果没有出现请确认上述步骤和路径设置正确。如果已经出现表示 premake 的系统环境变量设置已经完成。
- 使用
cd
命令在命令提示符窗口里切换当前工作路径到 krsteam 文件夹里,如:cd C:\krkr_plugins\plugins\win32\steam
- 输入
premake4 vs2012
按回车之后应该能看到 krsteam 文件夹多了一个vs2012
文件夹,里面有 Visual Studio 2012 可以打开的 project solution 文件
- 使用组合快捷键
- 安装 Visual Studio 2012。(应该会耗时挺久的…………)
- 使用 Visual Studio 2012 打开在
krkrsteam
文件夹里的vs2012
文件夹下的 project solution 文件。(名字应该是:krkrsteam.sln
) - 编译之后你会发现有一些错误,把相关代码注释掉之后再次编译,应该就正常的编译成功了。如果出现大巴大巴的错误,请检查:
- 是不是不是用的 VS2012?(VS2015 会出现各种莫名其妙的错误,为了节省时间请用 VS2012 来编译开发插件……显然这里是一个问题,不知道维护者会不会改进下,并且目前 tp_stub 文件的生成也不能使用 perl,jin1016 在窝发的这个 issue 里 https://github.com/krkrz/krkrz/issues/264 说了,乃去用 https://github.com/krkrz/krkrz/tree/last_hodgepodge_repository 这个 branch 里的文件好了。嗯,就这样。)
- STEAMWORKS_SDK 的环境变量设置了没?(这里的环境变量名可以在 premake4.lua 文件中看到有定义)
- krkrsteam 文件夹是否是和下载的 plugins 文件夹里一同放着的?(因为 krkrsteam 有用上一级目录里的 ncbind 插件和 tp_stub.h tp_stub.cpp 文件所以才会需要直接把所有的插件都给下载下来。)
- 编译完成之后会在 krkrsteam 文件夹里生成一个 bin/krkrsteam-d.dll 和一些其它的文件,那些暂时不用管,把 krkrsteam-d.dll 拷贝到 krkr.eXe 所在的文件夹里去,自己用的最初的 krkrsteam 插件就算 ok 了。
关于 demo、release 时的 krkrsteam 插件:
可以在 VS 里使用打开 Project 的 Peoperties,使用 Configuration Manager 把 Active solution configuration 从 Debug 切换到 Release,然后 build 就会生成 krkrsteam.dll 不是带 -d 的了。
关于启动时显示未运行 Steam 客户端,不能打开的问题:
其实 demo 或者正式版 release 的时候是不会带 steam_appid.txt 这个文件的,其中的 appid 是要自己修改 krkrsteam 源码在 SteamAPI_Init()
这行代码之前调用 SteamAPI_RestartAppIfNecessary( YOUR_APPID )
这行代码的,详细可以参考 Steam 官方的 sample 代码。在测试的时候大概是这个样子:
// 把 YOUR_APPID 替换为自己游戏的 AppId
if ( SteamAPI_RestartAppIfNecessary( YOUR_APPID ) )
{
// if Steam is not running or the game wasn't started through Steam, SteamAPI_RestartAppIfNecessary starts the
// local Steam client and also launches this game again.
// Once you get a public Steam AppID assigned for this game, you need to replace YOUR_APPID with it and
// removed steam_appid.txt from the game depot.
// 下面这一行代码在 release 的时候注释掉,以免报错……在 debug 的时候可以保持这样子
TVPThrowExceptionMessage(L"SteamAPI_RestartAppIfNecessary failed");
}
集成到 KAG 脚本中
在 data/system/Initialize.tjs
的 Plugins.link 那几行代码里加入 Plugins.link("krkrsteam-d.dll");
这时候在初始化 KAG 的时候就会尝试在 krkr.eXe 所在的文件夹下寻找 krkrsteam-d.dll
steam_api.dll
steam_appid.txt
这三个文件,不出意外的话,在进入游戏之后会在左上角显示提示使用 Shift+Tab
显示 Steam 面板什么的,这个时候尝试使用 F12
截图应该也会有通知提示,初步 Steam 集成的工作就算到这里成功了。
因为这张图很重要,所以要放两边!
关于成就解锁:
成就定义:基本上跟着文档走,只用把 Step 1 定义搞好了之后就可以进行下一步了 https://partner.steamgames.com/documentation/bootstrap_achieve
写 KAG 脚本时触发成就,依然使用说明见 :https://github.com/jeeb/kirikiri2/blob/master/kirikiri2/src/plugins/win32/steam/manual.tjs
这里基本上没啥好说的,看文档跟着走测试就是。
Build Depot 上传到 Steam 供内部测试
嗯,还是跟着官方文档走 https://partner.steamgames.com/documentation/steampipe
不想使用命令行和自己写配置文件 build 的话,可以使用官方文档里面有提到的 Steampipe GUI Tool http://steamcommunity.com/groups/steamworks/discussions/0/412449508292646864/
配置 Steam 云存档
在 https://partner.steamgames.com/apps/cloud/YOUR_APPID 里面跟着官方文档 https://partner.steamgames.com/documentation/cloud 里的 Steam Auto-Cloud for legacy games 里的步骤走,基本上不需要自己写什么代码就能把云存档给搞定。(当然这里说的也是基本的,会使用代码自定义的话能实现更自由的操控感。)
最后
整体上找到 krkrsteam 源码,编译成自己的游戏所需要的,这个部分花费的时间是挺多的,而 Steamworks 的使用上,人家的文档写的真的真的真的很详细,跟着走就是。
希望自己所做的事情能够为中文 AVG 创作者们带来一些帮助,以上。