2015/05/17

StepMania 5をLinuxで使う(Ubuntuパッケージ有り)

リズムゲームStepManiaのバージョン5系が既に公開されていることを受けて、ここでは同ソフトウェアをGNU/Linuxで使用する上でのメモを主に扱う。

プログラム内の操作は標準のテーマを使用していることを前提としているため、外部のテーマをインストールして適用している場合は操作や表示が異なる場合がある。

  1. バージョン5系への流れ
  2. バージョン5系でのLinux上の大きな変更点
    1. サウンドデーモン対応
    2. SDLは不要に
    3. 一般ユーザの設定/データのディレクトリの変更
      1. 追加データのディレクトリ
  3. インストール
    1. 公式配布のバイナリ
    2. Ubuntu向け自作パッケージ
    3. 手動ビルド
      1. ビルドに必要なパッケージ
      2. CMake関係の修正とビルドの作業例
  4. ゲームプレイに関するメモ
    1. 譜面の練習について
      1. ゲージ0でも即終了しないようにする設定
      2. 練習中のみ低難易度にする
      3. 譜面エディタのテストプレイ機能で練習する
    2. 矢印の速度の調整
  5. 5.0.x系のソースをバージョン6以上のGCCでビルドした場合に起動しない問題 (2018/4/27追記)

バージョン5系への流れ

バージョン3.9の公開後はバージョン4系が開発されていたが、複雑で扱いにくいものになってしまっており、これは後に取り消された。

代わりに(バージョン3.9に近い状態の)2006年中頃のソースから開発をやり直したものをもとにSSCと呼ばれる開発チームが開発を引き継いだもの[1]が後に公式の次期バージョン(バージョン5)として位置付けられてここ数年間アルファ版からベータ版という段階で活発に開発されており、ついにこれが正式版として公開されるところまできた。

正式版となってからも既に数回更新が行われている。

バージョン5系でのLinux上の大きな変更点

サウンドデーモン対応

バージョン3.9ではサウンド出力がALSAやOSSへの直接出力のみとなっており、サウンドデーモンを利用することはできなかったが、バージョン5系ではサウンドデーモンのPulseAudioとJACKに対応しており、これらを通じて音声を出力することができる。これにより、標準のサウンドカード以外(HDMI出力や追加サウンドカード)への出力や音量調節がしやすくなったり、スクリーンキャストの音声付きキャプチャが行いやすくなったりしている。

PulseAudioとJACKの両方を有効にしてビルドした場合、両方のサウンドデーモンが動作しているときにはJACKが優先される(先に試行される)。JACKの出力先が現在音が鳴っている出力先以外(ダミー出力含む)で動作していると音が鳴らないことがあり、これをPulseAudio経由でその出力先へ出力されるようにしたい場合は、JACKが動いていないときにStepManiaを起動して(PulseAudioに出力されるようにして)おく[2]

サウンド出力先を選択したり切り替えたりする機能はバージョン5.0.8時点では存在しない。

SDLは不要に

ゲームや仮想化ソフトウェアなどでよく使われている “SDL” ライブラリはバージョン5系では使われておらず、動作には不要となる。キーなどの入力はOSごとに用意されたプログラムで処理されており、(以下は3.9系と同様だが)描画はOpenGL関係のライブラリで、サウンドはサウンド関係のライブラリでそれぞれ扱われている。

一般ユーザの設定/データのディレクトリの変更

一般ユーザ用の設定ファイルや追加データの配置ディレクトリの場所がバージョン5系専用の[ホームディレクトリ]/.stepmania-5.0/以下となっている。Windowsでは%APPDATA%\StepMania 5.0\(通常はC:\Users\[ユーザ名]\AppData\Roaming\StepMania 5.0\)以下。

一度起動するとこのディレクトリと追加データ用のサブディレクトリ群が作られ、別途入手した追加データのファイルをこの中に配置することでこれを用いることができる。種類によってはオプション内で設定が必要[3]

追加データのディレクトリ

ディレクトリ入れるデータの種類
Announcersアナウンサー
BGAnimations背景のアニメーション
BackgroundEffects背景のエフェクト
BackgroundTransitions背景のトランジション
CDTitles作成者などを示す小さな画像(曲選択時に回転する)
Charactersプレイ時に踊るキャラクター
Coursesコース(.crs)ファイル
NoteSkins譜面中の矢印などの外観スキン
Packages追加データを1ファイルにまとめたパッケージ(.smzip)ファイル
RandomMovies背景として使用される動画
Songs曲グループのディレクトリ
Themesプログラム全体の外観テーマ

特に曲データの追加については

  • 拡張子 “.smzip” のファイルはPackages
  • .smzipファイルではない書庫を展開したもの(曲ごとのディレクトリを中に含む “曲グループディレクトリ”)はSongs[4]

と理解していれば問題はない。

なお、上記のディレクトリ群と同様のディレクトリ群はStepMania自体のインストールディレクトリにも存在し、こちらは全てのユーザから利用可能となっている。

インストール

公式配布のバイナリ

バージョン5.0.8のGNU/Linux版はリリースページにあるが、これはx86_64用となっており、32bit版OSでは後述の自作パッケージを利用するかソースからビルドする。

このバイナリはファイルstepmaniaを実行すると起動する。データ部分も同梱されているため、追加のファイルは必要ない。

Ubuntu向け自作パッケージ

以前バージョン3.9のパッケージをPPAリポジトリで公開していたが、バージョン5系をppa:kakurasan/stepmania5のPPAリポジトリで公開している。

PPAリポジトリを追加してパッケージ情報の再読込を行った上でstepmaniaパッケージを選択してインストールすると、デスクトップ環境などのメニュー項目として “StepMania” が “ゲーム” の一覧から選択できるようになる他、直接stepmaniaコマンドを実行しても開始できる。

手動ビルド

ビルドに必要なパッケージ

以下のパッケージ(ライブラリについては開発ファイル)が使用されるが、一部はStepManiaのソースにも同梱されている。

  • CMake
  • yasm(FFmpegのビルド時に使用される)
  • libGL, libGLESv2[5], libGLU, libGLEW
  • libXtst, libXrandr
  • libjpeg, libpng
  • zlib, libbz2
  • libvorbis, libmad
  • libpcre
  • PulseAudio(libpulse), JACK(libjack), ALSA(libasound)のいずれか
  • libva(FFmpegで自動検出され、FFmpeg内で使用される)
  • GTK+ 2(必須ではない・起動時の読み込みダイアログでのみ使用)

CMake関係の修正とビルドの作業例

バージョン5.0.8からはビルドシステムとしてCMakeのみがサポートされる、とのことだが、残念ながらまだ一部に問題がある。

下は

  • 同梱のFFmpegをビルドの段階で正しく用いるようにする
  • タイトル画面で表示されるバージョン番号の表記を実際のバージョンを示すものになるよう修正
  • システムのlibpcreを用いる場合のコンパイルエラー対策

といった目的のパッチ。OpenGL ES 2.0を用いる場合は更に修正が必要だが、それを適用して設定ファイル[ホームディレクトリ]/.stepmania-5.0/Save/Preferences.iniの “VideoRenderers” の値を “gles2” に切り替えてもうまく動かなかったのでここでは扱わない。

(2015/6/26)パッチをバージョン5.0.9向けに更新し、32bit環境でのビルドエラー対策も追加している。

下の画像はバージョン表記の変わったタイトル画面。

実際のバージョンが表示されるようにしたタイトル画面の右上

[任意]ファイル名:stepmania-5.0.9-linux-cmake.patch ライセンス:パブリックドメイン
--- stepmania-5.0.9.orig/CMake/SMDefs.cmake
+++ stepmania-5.0.9/CMake/SMDefs.cmake
@@ -3,20 +3,21 @@
 set(SM_VERSION_MINOR 0)
 set(SM_VERSION_PATCH 9)
 set(SM_VERSION_TRADITIONAL "${SM_VERSION_MAJOR}.${SM_VERSION_MINOR}.${SM_VERSION_PATCH}")
+set(SM_VERSION_FULL "${SM_VERSION_MAJOR}.${SM_VERSION_MINOR}.${SM_VERSION_PATCH}")
 
-execute_process(COMMAND git rev-parse --short HEAD
-  WORKING_DIRECTORY "${SM_ROOT_DIR}"
-  OUTPUT_VARIABLE SM_VERSION_GIT_HASH
-  RESULT_VARIABLE ret
-  OUTPUT_STRIP_TRAILING_WHITESPACE
-)
+#execute_process(COMMAND git rev-parse --short HEAD
+#  WORKING_DIRECTORY "${SM_ROOT_DIR}"
+#  OUTPUT_VARIABLE SM_VERSION_GIT_HASH
+#  RESULT_VARIABLE ret
+#  OUTPUT_STRIP_TRAILING_WHITESPACE
+#)
 
-if(NOT (ret STREQUAL "0"))
-  set(SM_VERSION_GIT_HASH "UNKNOWN")
-  set(SM_VERSION_FULL "${SM_VERSION_MAJOR}.${SM_VERSION_MINOR}-${SM_VERSION_GIT_HASH}")
-else()
-  set(SM_VERSION_FULL "${SM_VERSION_MAJOR}.${SM_VERSION_MINOR}-git-${SM_VERSION_GIT_HASH}")
-endif()
+#if(NOT (ret STREQUAL "0"))
+#  set(SM_VERSION_GIT_HASH "UNKNOWN")
+#  set(SM_VERSION_FULL "${SM_VERSION_MAJOR}.${SM_VERSION_MINOR}-${SM_VERSION_GIT_HASH}")
+#else()
+#  set(SM_VERSION_FULL "${SM_VERSION_MAJOR}.${SM_VERSION_MINOR}-git-${SM_VERSION_GIT_HASH}")
+#endif()
 
 if (CMAKE_MAJOR_VERSION STREQUAL "3")
   # Use the CMake 3 approach whenever possible.
--- stepmania-5.0.9.orig/StepmaniaCore.cmake
+++ stepmania-5.0.9/StepmaniaCore.cmake
@@ -259,8 +259,7 @@
       endif()
     else()
       set(SM_FFMPEG_VERSION "2.1.3")
-      set(SM_FFMPEG_SRC_LIST "${SM_EXTERN_DIR}" "/ffmpeg-linux-" "${SM_FFMPEG_VERSION}")
-      sm_join("${SM_FFMPEG_SRC_LIST}" "" SM_FFMPEG_SRC_DIR)
+      set(SM_FFMPEG_SRC_DIR "${SM_ROOT_DIR}/bundle/ffmpeg")
       set(SM_FFMPEG_ROOT "${CMAKE_BINARY_DIR}/ffmpeg-prefix/src/ffmpeg-build")
       list(APPEND FFMPEG_CONFIGURE
         "${SM_FFMPEG_SRC_DIR}/configure"
--- stepmania-5.0.9.orig/src/CMakeLists.txt
+++ stepmania-5.0.9/src/CMakeLists.txt
@@ -376,6 +376,9 @@
     if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
       message("Host processor is 64bit")
       sm_add_compile_definition("${SM_EXE_NAME}" CPU_X86_64)
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i[3-6]86")
+      message("Host processor is 32bit")
+      sm_add_compile_definition("${SM_EXE_NAME}" CPU_X86)
     endif()
   endif()
   if (${HAS_FFMPEG})
@@ -389,6 +392,10 @@
     sm_add_compile_definition("${SM_EXE_NAME}" HAVE_GTK)
   endif()
 
+  if (PCRE_FOUND)
+    sm_add_compile_definition("${SM_EXE_NAME}" USE_SYSTEM_PCRE)
+  endif()
+
   sm_add_compile_definition("${SM_EXE_NAME}" UNIX)
   if("${CMAKE_SYSTEM}" MATCHES "Linux")
     sm_add_compile_definition("${SM_EXE_NAME}" LINUX)

バージョン5.0.8でJACKを利用したい場合、上と同様の修正だけでは検出がうまく動作しない[6]ため、バージョン5.0.8の公開直後に追加された修正を追加で適用するか、もしくはcmakeコマンドの実行時に-DJACK_INCLUDE_DIRS=/usr/include -DJACK_LIBRARIES=-ljackオプションを追加する。

(2015/6/26)JACKについてはバージョン5.0.9からは正常に検出されるようになっている。

また、(cmakeコマンドの実行時に)FFmpegでlibvaライブラリ(の開発パッケージ)が自動検出された場合にはStepManiaのリンク時にlibvaへのリンクに失敗してエラーになることがあるため-DWITH_LIBVA=ONオプションを追加するとよい。

(2015/6/26)バージョン5.0.9からはこのオプションはなくなり、libvaが検出された場合に本体のリンク段階で使用されるようになった。

(ビルドの準備からビルドまで)
[stepmania-5.x.y.z]$ cmake (オプション...) .
[stepmania-5.x.y.z]$ make -j[CPU数]

なお、既定ではSSE2を利用するためのコンパイラオプションが有効になっており、同命令群の利用できない古いCPUで動かしたい場合はsrc/CMakeLists.txt内のSM_COMPILE_FLAGSの初期値を空文字列から半角スペース1つなどにしてから-DWITH_SSE2=OFFオプションを追加する必要がある。[7]

手動でのインストールの操作を行うと、バージョン5.0.8時点では/usr/local/stepmania-5.0/以下にインストールされ、この中のstepmaniaが実行ファイルとなるが、変数DESTDIRの指定により一般ユーザが(書き込み権限のある)別の場所にインストールすることもできる。

(ソースのディレクトリ内でそのまま実行する場合)
[stepmania-5.x.y.z]$ ./stepmania

(管理者権限でインストールする場合)
[stepmania-5.x.y.z]$ sudo make install

(一般ユーザ権限でホームディレクトリの下のusr/local/stepmania-5.0/以下に配置する場合)
[stepmania-5.x.y.z]$ make install DESTDIR=~

ゲームプレイに関するメモ

譜面の練習について

高難易度の曲に挑戦している際など、(ミスが多くなって)上部のゲージが減少して全てなくなると通常はそこで終了して結果画面に切り替わるが、練習をしたい場合や最後まで一通り終わるまで続けたいという場合がある。

ゲージ0でも即終了しないようにする設定

タイトル画面の “Options” でオプションを開き、 “Advanced Options - DEFAULT FAIL TYPE” を “EndOfSong” にすると、ゲージがなくなっても最後までプレイができるようになる。

ただし曲をクリアした記録が残ると困る場合はおすすめできない(途中で中止する必要がある)。

練習中のみ低難易度にする

前述のオプションで “Advanced Options - LIFE DIFFICULTY” の値を小さくするとゲージがなくなりにくくなるため、これを “1” などにして練習するという方法もある。練習が終わったら元の値に戻すなどする。この既定値は “4” で、腕に自信があれば高い値にして高難易度化することもできる。

また、入力タイミングの判定幅に関係した難易度指定 “Advanced Options - JUDGE DIFFICULTY” も存在するので、必要に応じてこちらも調節する(既定値は “4” で値が低いほど易しくなる)。

現在の設定はタイトル画面の左上部分でも確認できる(前者が “ライフレベル” で後者が “判定レベル”)。[8]

タイトル画面左上にある、判定とライフの難易度表示部分

この方法も曲をクリアした記録が残ると困る場合はおすすめできない。

譜面エディタのテストプレイ機能で練習する

譜面エディタのテストプレイ機能を用いて練習する方法もある。

タイトル画面の “Edit/Share” を選択し、 “PRACTICE SONGS/STEPS” で(グループフォルダと)曲や譜面難易度を選択し、 “選択譜面の練習” を選択すると譜面データが開かれ、ここでEnterを押してメニューからテストプレイを行うことができる。

特定の範囲のみを何度も練習したい場合は “現在位置を選択範囲の開始位置に設定” と “現在位置を選択範囲の終了位置に設定” をそれぞれ開始位置と終了位置で実行して “選択範囲をテストプレイ” を選択する。

矢印の速度の調整

曲選択時にEnterを連続して2度押すか押しっぱなしにするとオプション設定画面に入り、その中の “SPEED” を変更することで、画面上を矢印が流れる速度を調整することができ、詰まりすぎていたり流れが速すぎていたりして見づらい譜面を見やすくすることができる。[9]

ゲーム開始前のオプション設定画面

  • 一番左が現在の設定値(上に実際の速度の範囲が変更前と変更後それぞれについて表示される)
  • “+[数字]” や “-[数字]” は現在の設定値からその値の分だけ変化させるのに使う
  • “Xmod”, “Cmod”, “Mmod” は指定の種類を決定するための項目
    • “Xmod” は元の速度の何倍かを指定(途中で速度が変わる曲も同様に変化する)
    • “Cmod” は指定速度で常に固定(速度変更を用いた “仕掛け” も無効になる)
    • “Mmod” は速度の上限を指定すると曲の一番速い部分がその速度になる(設定によっては詰まりすぎになるので指定値を下げるか “Cmod” で固定する)
    • 表示/指定する速度の単位は倍率を除くとBPM[10]単位

この設定はタイトル画面に戻るとリセットされるが、それまでは保持される。

(2015/6/26)矢印の密度の高い曲では(変化後の)最大速度が400BPM前後のような速い速度となる指定を行うことでやりやすくなる場合もあるが、曲によってどの程度の速度がやりやすいかは異なる。

5.0.x系のソースをバージョン6以上のGCCでビルドした場合に起動しない問題 (2018/4/27追記)

バージョン5.0.x系のStepManiaをバージョン6以上のGCCでソースからビルドすると生成されたバイナリが正しく起動しないが、これは主な開発者の一人によると、新しいバージョンのコンパイラが行う最適化処理に関係しておりオブジェクトの生成順を変更する修正により5.1系では修正済みとなっているとのことだが、5.0.x系の最終リリースではバージョン6以上のGCCを用いる場合にこのパッチを別途当てなければ動作せず、2018年春時点では5.1系はまだベータ版となっている。

[1]: “sm-ssc” と呼ばれていた
[2]: JACKのPulseAudioのモジュールを経由する方法もあるが、遅延が出るため、ゲームプレイに支障が出る
[3]: タイトル画面の “Options” でオプション設定に入り、 “DISPLAY OPTIONS - APPEARANCE OPTIONS” を選択して設定を変更する・表示言語もここで設定可
[4]: ここに直接曲ごとのディレクトリを配置すると “グループフォルダ"Songs/[名前]"が曲フォルダの構造をしています。曲フォルダはすべてグループフォルダの中に配置してください。” と端末に表示されて起動に失敗するため、グループディレクトリがない状態であれば適当な名前のディレクトリを作成してその中に配置する
[5]: OpenGL ES 2.0を使用する場合に必要だが従来のOpenGLのレンダラがあるためビルドに必須ではない・バージョン5.0.8時点ではGLESv2のレンダラのコードに未記述の部分も多く不完全・ライブラリは自動検出される
[6]: “-- Could NOT find JACK (missing: JACK_INCLUDE_DIRS JACK_LIBRARIES)” と出る
[7]: 空文字列のままだと “set_target_properties” の処理に失敗してエラーになる
[8]: “レベル” といっても “difficulty” なので難度のレベルを示している
[9]: 逆に、簡単すぎる曲について “C800” などのように矢印を高速にして難易度を上げることもできる
[10]: 1分あたりの拍数