本記事について
大人気ローグライクゲーム「Slay the Spire」を「spirecomm」というライブラリを使用してサンプルのAIにプレイさせました。
そのAIにプレイさせる具体的な方法を紹介します。
AIのプレイ動画
Act3の50階層のボスを倒すまでのAIのプレイ動画です。
鍵を入手していなかったため、Act4には到達できませんでしたが、基本的には優秀なAIであり、終始危なげなくプレイしていたという印象を受けました。
Slay the Spireとは
Mega Crit Gamesが開発した、非常に人気の高いデッキ構築型ローグライクゲームです。
プレイヤーは塔を登りながら、各階層でモンスターと戦い、新しいカードやアイテム(レリック)を獲得し、それらを使用してデッキを強化していきます。
数百種類のカードとレリックが存在し、遭遇する敵やイベント、入手できるレリック、塔構造などがランダムなため、高い戦略性が求められ、再プレイ性の高いゲームとなっています。
コミュニティが活発で、多くのMod(一般ユーザーが公開した、本ゲームの要素や機能を変更するためのプログラム)が無料で公開されています。
spirecommとは
Slay the Spireと外部プロセスを通信するためのPythonライブラリです。
本ゲームから外部プロセスに現在のゲームの状態(プレイヤーの手札、デッキ、体力、敵の状態など)を送信したり、外部プロセスからゲームにコマンド(ゲーム開始、カードの使用、ターンの終了など)を送信したりできます。
本ライブラリを使用することで、外部のAIに本ゲームを自動プレイさせたり、AIに強化学習させることが可能です。
本ゲームをプレイするサンプルのAIが付属されており、今回このサンプルAIにプレイさせました。
実行環境
- MacBook Air
- Apple M2
- macOS Sonoma 14.5
- Python 3.11.5
- pip 24.3.1
- zsh 5.9
準備するプログラムと設定ファイル
Steam
Slay the Spire本体とModを入手するために必要です。
上記公式サイトからインストールしてください。
Slay the Spire(Game)
Slay the Spire本体です。Steamストアページから購入・インストールしてください。
インストール後は、以下の場所に配置されます。
~/Library/Application Support/Steam/steamapps/common/SlayTheSpire/SlayTheSpire.app
spirecomm
以下のコマンドを実行してインストールしてください。
Pythonは3.5以上のバージョンである必要があります。
インストール用コマンド
cd ~
git clone https://github.com/matthewReff/spirecomm.git
cd spirecomm
python3.11 -m venv myenv
source myenv/bin/activate
pip install --upgrade pip==24.3.1
pip install .
ModTheSpire
Slay the SpireにModを適用するためのランチャーです。
上記のSteamワークショップから入手してください。
上記ページのサブスクライブボタンを押すと、以下の場所に自動的にダウンロードされます。
~/Library/Application Support/Steam/steamapps/workshop/content/646570/1605060445/ModTheSpire.jar
ダウンロード後、以下の場所に移動させてください。
~/Library/Application Support/Steam/steamapps/common/SlayTheSpire/SlayTheSpire.app/Contents/Resources/ModTheSpire.jar
インストール用コマンド
cd ~/Library/Application\ Support/Steam/steamapps/common/SlayTheSpire/SlayTheSpire.app/Contents/Resources
mv ~/Library/Application\ Support/Steam/steamapps/workshop/content/646570/1605060445/ModTheSpire.jar .
ls -l ModTheSpire.jar
MTS.sh
ModTheSpireを起動するためのスクリプトです。以下の場所に作成してください。
~/Library/Application Support/Steam/steamapps/common/SlayTheSpire/SlayTheSpire.app/Contents/Resources/MTS.sh
作成したMTS.shに実行権限を付与し、以下の内容を記述してください。
#!/bin/sh
cd ~/Library/Application\ Support/Steam/steamapps/common/SlayTheSpire/SlayTheSpire.app/Contents/Resources
./jre/bin/java -jar ModTheSpire.jar
インストール用コマンド
cd ~/Library/Application\ Support/Steam/steamapps/common/SlayTheSpire/SlayTheSpire.app/Contents/Resources
touch MTS.sh
chmod u+x MTS.sh
ls -l MTS.sh
setopt interactivecomments
vim MTS.sh # 内容を編集
BaseMod
Slay the SpireのModの導入・開発を支援するためのModです。
同様に上記のSteamワークショップからサブスクライブボタンを押し、ダウンロードしてください。
本Modは以下の場所に自動的に配置されます。
~/Library/Application Support/Steam/steamapps/workshop/content/646570/1605833019/BaseMod.jar
本Modを以下の場所に移動してください。
~/Library/Application Support/Steam/steamapps/common/SlayTheSpire/SlayTheSpire.app/Contents/Resources/mods/BaseMod.jar
インストール用コマンド
cd ~/Library/Application\ Support/Steam/steamapps/common/SlayTheSpire/SlayTheSpire.app/Contents/Resources
mkdir -p mods
cd mods
mv ~/Library/Application\ Support/Steam/steamapps/workshop/content/646570/1605833019/BaseMod.jar .
ls -l BaseMod.jar
Communication Mod
Communication ModはSlay the Spireと外部プロセスとの通信を可能にするModです。
このModを使用することで、ゲームの状態を外部プロセスに送信したり、外部プロセスからゲームにコマンドを送信したりすることができます。
spirecommと似ていますが、spirecommはこのCommunication Modを利用して、ゲームを簡単に制御できるようにするためのPythonライブラリです。
Communication ModはJavaで書かれています。
同様に、上記のSteamワークショップから入手してください。
本Modは以下の場所に配置されます。
~/Library/Application Support/Steam/steamapps/workshop/content/646570/2131373661/CommunicationMod.jar
以下の場所に移動してください。
~/Library/Application Support/Steam/steamapps/common/SlayTheSpire/SlayTheSpire.app/Contents/Resources/mods/CommunicationMod.jar
インストール用コマンド
cd ~/Library/Application\ Support/Steam/steamapps/common/SlayTheSpire/SlayTheSpire.app/Contents/Resources
mkdir -p mods
cd mods
mv ~/Library/Application\ Support/Steam/steamapps/workshop/content/646570/2131373661/CommunicationMod.jar .
ls -l CommunicationMod.jar
config.properties
Communication Modの設定ファイルです。
以下の場所に作成してください。
~/Library/Preferences/ModTheSpire/CommunicationMod/config.properties
そして以下のような内容を記述してください。
verbose=false
command=python /Users/miya/spirecomm/main.py
runAtGameStart=true
verboseは詳細なログを表示するためのフラグです。
commandはプレイさせるAI(main.py)のパスです。"/Users/miya"は著者のホームディレクトリですので、ご自身のホームディレクトリに置き換えてください。。"~"は使用できないようです。
runAtGameStartは、ゲーム起動時に自動的にAIにプレイさせるかを指定するフラグのようです。
作成用コマンド
mkdir -p ~/Library/Preferences/ModTheSpire/CommunicationMod
cd ~/Library/Preferences/ModTheSpire/CommunicationMod
setopt interactivecomments
vim config.properties # config.propertiesの内容を編集
AIにプレイさせる方法
上記のプログラムと設定ファイルの準備が完了後、MTS.shを実行し、ModTheSpireを起動します。
すると、以下のようなランチャー画面が表示されます。
BaseModとCommunicationModにチェックを入れ、Playボタンを押すとAI(main.py)によるプレイが開始されます。
ModTheSpireを起動するためのコマンド
cd ~/spirecomm
source myenv/bin/activate
~/Library/Application\ Support/Steam/steamapps/common/SlayTheSpire/SlayTheSpire.app/Contents/Resources/MTS.sh