ティラノスクリプトV5でSteamworks APIの組み込みができました

これは何

ここ最近ずっとティラノスクリプトをゴリゴリ改造して略。第4弾で急にバカでかい話になるんですが、Steamworks APIの組み込みができたので、ご報告+ざっくりとやり方説明になります。ただ、普通にやると、ゲーム書き出しの度に手順を踏む必要があるので、若干めんどいです。そのへんも含めて説明します。

注意

この手順を踏むと32bitで書き出せなくなります。今回用いているライブラリが64bit版しか提供されていないため、私もやむを得ず32bit版を諦めました。
あと、実績とかについては書いていません。あくまでオーバーレイ出してF12でスクショ撮るとかができるようになるまでの手順です。検証できたらまた別で記事書こうかな。

ガチで注意

改造OKの条件下でかなり無茶をしているので、自己責任でお願いします。バックアップ等とってからやりましょう。特にティラノビルダー改造なんかは一歩間違えると動かなくなるので。

広告

↓作ってます。そのうち体験版も出します。WISHLIST NOW!!!!!!!!!!!!!

事前準備

デベロッパー向け1行説明: steamworks.js をどうにかしてダウンロードしてきてください。
↑で分からなければ下記の手順を踏みましょう。

  1. ライブラリ取得のために Node.js を導入します(インストール方法はいろいろあるのでお好きな方法でどうぞ)

  2. 適当に汚してもいいフォルダを1個用意します

  3. 用意したフォルダ内でターミナルを開きます(このへんが参考になるかも)

  4. "npm i steamworks.js" と入力してEnterキーを押します

  5. フォルダを再度確認すると "node_modules" というフォルダができていて、中に "steamworks.js" というフォルダがあるはずです

組み込み方法 (Any%)

  1. ファイルを隠蔽せずにゲームを書き出します(最速でやるなら必須です)

  2. 書き出されたゲームフォルダを開き、 steam_appid.txt というテキストファイルを作り、そこにSteamのゲームIDを書き込みます(ゲームIDについての説明はここでは割愛します)

  3. ゲームフォルダ内の resources/app フォルダに移動します

  4. node_modules フォルダがあるので、上で取得した steamworks.js フォルダをフォルダごと突っ込みます

  5. main.js を開いて下記のように行を追加します(+付いてるとこが追加行です。6行目辺りになるはずです)

  let mainWindow = null

+ const steamworks = require('steamworks.js')
+ steamworks.electronEnableSteamOverlay()
+ const c = steamworks.init()

  app.on('ready', () => {    // これが
    let fs = require('fs')

デベロッパー向け: やってることとしては内蔵の Chromium に対する起動時引数の設定なので、アプリケーションの準備が完了する前にやってあげるのがミソっぽいです。これを発見するのに2日かかりました・・・。

広告

とりあえずここまで読めば最低限の対応はできるのでここでもう1回広告打っときますね。
↓作ってます。そのうち体験版も出します。WISHLIST NOW!!!!!!!!!!!!!!!!!!!

でも書き出す度にこれやるのはめんどいんだよね

なので私は上記手順の自動化のためにティラノビルダーを魔改造しました。こんなはずではなかったが・・・。ちなみにPRO版使ってます。無料版でも同じことできるのかなあ。
main.js はティラノビルダーのフォルダから resources/app/system/pkg/system と辿ると入ってるので、上と同じように修正しておきます。
node_modules については、既存のコピー処理をちょいと弄って良い感じにコピーするようにしました。
steam_appid.txt はそんなに手間じゃないので今は手動でコピペしてますが、そのうち自動化しないと忘れそうですね。

ファイル隠蔽もできたよ

これ対応するの結構苦労したんですが、どうにかいけましたね。 steamworks.js から呼び出している Steamworks API のライブラリは、ファイル隠蔽に巻き込まれると呼び出せなくなっちゃうので、部分的に隠蔽しないように工夫して上げる必要があります。書き出し処理において electron-packager を用いている箇所があるのですが、 asar のオプションを上手いこと指定してあげると、特定のファイルだけ隠蔽しないようにすることができます。ティラノビルダーのコードをホントにちょびっとだけ引用していますが、問題あったらご連絡ください・・・。

asar: e.asar ? { unpack: '*.{node,dll,so}' } : false

これをやると、 resources フォルダの中に app.asar.unpacked というフォルダが作成され、その中に除外したファイルが、フォルダ構成そのままに置かれます。この仕組みさえ分かれば手動でできないこともないんですが、結構しんどいと思います。

app.asar.unpacked
└─node_modules
    └─steamworks.js
        └─dist
            ├─linux64 // Linux用ライブラリファイル群
            ├─osx     // Mac用ライブラリファイル群
            └─win64   // Windows用ライブラリファイル群

おわりに

説明足りないかもなーってのはあるんですが、説明しきってもむずいもんはむずいので、もう少しやりやすくなると今後作る人は嬉しいだろうな~という気持ちがあります。とはいえ、どっちかというとティラノスクリプトはSteamよりかはノベコレとかでの配布が適していそうではあるので、適材適所なんだろうなとも思います。ティラノゲームフェスも盛り上がってるし。
まあとりあえず大変でしたがどうにかなりました。めでたしめでたし。

広告

かなり頑張ってるんでね。3回目も打たせてくださいね。
↓作ってます。そのうち体験版も出します。WISHLIST NOW!!!!!!!!!!!!!!!!!!!!!!!!!!!

この記事が気に入ったらサポートをしてみませんか?