Steamworks API を JavaScript で操作する 🕹️

動機

Steamworks API を触ってみたいのだけど、ゲームエンジン経由で触るのも、SDK 直で触るのも自分の技量では難しかったので、とりあえず触る環境が欲しいところで以下の記事を見つけた。

HTML5製のゲームにSteamSDKを導入する手順(NW.js + Greenworks) - Qiita

Ruby でも無いか軽く探してみたが、良さそうなのがパッと見つからなかったので上記を試してみた。

この記事は上記の内容を自分でやってみた程度の内容でしかない。

環境

  • Windows 11 Pro 21H2
  • Node はローカルにも入っていたが、今回は NW.js を SDK ごと利用した

大事なところは最初に

今回、上記の記事を辿って再現する中で困ったのは、バージョンミスマッチで最初は全く動作しなかったことだった。

今回使った各バージョン

SteamworksSDK v1.52 https://partner.steamgames.com/downloads/steamworks_sdk.zip
NW.js v0.55.0 https://dl.nwjs.io/v0.55.0/
Greenworks Win64 NW.js 055.0 https://greenworks-prebuilds.armaldio.xyz/

Greenworks Prebuilds

Greenworks の Github repo の releases には最新のバイナリは入っておらず、代わりに Prebuilds サイトが提供されている。今回は以下のビルドを使っている。 f:id:dany1468:20210917182249p:plain

参考にしたサイトでは以下のサイトが紹介されており、おそらく同じような感じだと思うのだが、私が触った時点では微妙に異なっていて最初はそこで行き詰まってしまった。
(上記の Prebuilds サイトにはその時点で ABI Version v92 の Win64 は無かったのに、以下のサイトにはそれがあったり)

https://github.com/ElectronForConstruct/greenworks-prebuilds

上記のテーブルに貼ってある Prebuilds サイトは、URL こそ怪しい感じではあるが、公式の Github repo にもリンクされている。

つまり、今回重要だったのは、NW.js と Greenworks のバージョンをあわせるという点だった。
ちなみに、SteamworksSDK は公式だと v1.42 が対象のようになっているが、特に最新でも問題なかった。

Steamworks SDK から取得するバイナリ

https://github.com/greenheartgames/greenworks/blob/master/docs/quick-start-nwjs.md

上記のクイックスタートに書いてある。環境によって取得するファイルも異なる。

参考までに tree

├── index.html
├── package.json
├── steam_appid.txt
├── js/
│   └── index.js
├── lib/
│   ├── greenworks-win64.node
│   ├── sdkencryptedappticket64.dll
│   ├── sdkencryptedappticket64.lib
│   ├── steam_api64.dll
│   └── steam_api64.lib
├── chromedriver.exe -- ここから下は NW.js の展開ファイル
├── credits.html
├── d3dcompiler_47.dll
├── ffmpeg.dll
├── greenworks.js
├── icudtl.dat
├── libEGL.dll
├── libGLESv2.dll
├── locales/
├── nacl_irt_x86_64.nexe
├── node.dll
├── notification_helper.exe
├── nw.dll
├── nw.exe
├── nw_100_percent.pak
├── nw_200_percent.pak
├── nw_elf.dll
├── nwjc.exe
├── payload.exe
├── pnacl/
├── resources.pak
├── swiftshader/
└── v8_context_snapshot.bin

実行

nw.exe を実行すると以下のウィンドウが立ち上がる。Chromium なので開発者ツールも出すことができる。

f:id:dany1468:20210917183734p:plain