StepMania5で追加した譜面順にソートしてみる

※この記事はStepMania5をソースコードからビルドすることを前提とした話になっています。

 

StepManiaに入れた譜面が多くなると「最近追加した譜面ってどれだっけ?」ってなりませんか?

StepMania5デフォルトのThemeにNewマークはあるけどアレって1回プレイしたら消えるし…

というわけで、譜面を追加した順にソートする機能を作ってみました。

 

ソースコード

https://github.com/rokudw/stepmania/tree/v5.0.12_rokudwCustom

 

タグ「v5.0.12」との差分

https://github.com/rokudw/stepmania/compare/master…rokudw:v5.0.12_rokudwCustom

 

仕組みとしては単純で、キャッシュのsscにキャッシュした時間を書き込んでそれを参照してソートしているだけです。

で、さっきこれの重大なバグに気づいたんですが、

同じPC内にあるキャッシュした時に使ったStepMania5とは異なるStepMania5を起動する時、

同名のグループフォルダ&曲フォルダがある場合キャッシュが更新されて

キャッシュした時間の情報が破壊されてしまうんですね…

使えるのか使えないのかよく分からない機能になってしまいました。

 

次回へ続くかも?

続きを読む

StepMania5で遊ぼう – フォルダクローズ

フォルダクローズってのはbeatmania IIDXにもあるあの機能のことです。

さーてプログラム組むぞー って調べたらもうあるじゃん!

——– 終 冬 ——-

 

——– 再 開 ——-(このネタも古いな…)

やり方

フォルダクローズの機能を使いたいテーマのmetrics.iniを開き、

[CodeDetector]の下に以下のように記述して下さい。

(Command)の部分はごdefaultテーマのmetrics.iniに書いてある

マニュアルを見ながらご自由に。

例えば有名なテーマのCyberiaStyle 8 Solidでは

“Up-Down”(上下同時押し)になってます。

他にもフォルダクローズに似たような機能で、

「今開いてるフォルダを閉じて、前/次のフォルダに移動する(PrevGroup/NextGroup)」なんてのも。

 

StepMania開発スタッフさん、曲をまとめているものの名称は

Folderなのか、Groupなのか、Section(ソースコード的にはこれが使われている?)なのか

はっきりして下さい…

続きを読む

GitHubデビューしました。

https://github.com/rokudw/smcreader

超今更ですがようやく俺もGitHubにリポジトリを持つようになりました。

リポジトリに置いたSMCReaderというプログラムの内容ですが、

StepManiaの譜面ファイル(現在は.smと.sscに対応)の情報を

JSON形式で出力するだけの簡単なプログラムです。

既にありそうなプログラムですが、Haxeで書いているため、

他の様々な言語のプログラムに変換できるのが強みといえば強みです。

 

StepManiaの譜面ファイルをパースするプログラムは結構昔から作っていて、

はじめはExcel VBAで書いて、PHP、C#へと移植していきましたが、

移植していくうちにそれぞれのプログラムで細かい差異がでてきてしまい、

当然他の言語に反映するのは面倒だ、もう一本化したい、というのが

SMCReaderを作った理由です。

StepManiaとほぼ同じMITライセンスなので改変とかも自由です。

まだ出来たばかりなので機能がしょぼい、バグがたくさんあるなど

不便なところがあると思いますがこれから改善していきたいと思います。

皆様よければSMCReaderを使ってあげて下さい。

 

どうでもいい話ですがSMCReaderの「SMC」は「StepMania Chart」のことです。

続きを読む

StepMania5で遊ぼう – Edit機能にBPM倍増、半減コマンド追加

StepManiaで譜面を作る時、途中でBPMを倍にしたり半分にしたりするギミックを

入れたことのある人は多いんじゃないでしょうか?

やり方は普通、Edit画面でF7かF8を押してBPMを変更するのが普通だと思うんですが、

F7/F8だけでBPMを大幅に変更するのは正直面倒です。

BPMを変更したい箇所で1回だけBPM変更キーを押して

譜面ファイルをテキストエディタでBPMを書き換えるのもアリだと思いますが、

できればEdit画面上で一発でBPMを倍にしたり半分にしたりしたいものです。

そこで、「SHIFT+F7でBPM半減、SHIFT+F8でBPM倍増」をできるように

プログラムを改造してみたいと思います。実は結構簡単です。俺でもできるし。

 

ScreenEdit.hの編集

134行目あたり、列挙型変数EditButton内の

EDIT_BUTTON_BPM_DOWN,

の下に以下を追加

 

ScreenEdit.cppの編集

221行目あたり、

name_to_edit_button[“BPM_DOWN”]= EDIT_BUTTON_BPM_DOWN;

の下に以下を追加

 

361行目あたり、InitEditMappingsメソッド内の

m_EditMappingsDeviceInput.button[EDIT_BUTTON_BPM_DOWN][0] = DeviceInput(DEVICE_KEYBOARD, KEY_F7);

の下に以下を追加

m_EditMappingsDeviceInput.button[EDIT_BUTTON_BPM_UP][0] = DeviceInput(DEVICE_KEYBOARD, KEY_F8);

の下に以下を追加

 

2379行目あたり、
case EDIT_BUTTON_BPM_UP:
case EDIT_BUTTON_BPM_DOWN:
ブロックを変更

 

以上の修正を行ってビルドすれば完成です。

一応動作するのが確認できるように動画を作りました。

 

どうでしょう、思ったより簡単だったと思います。

というかなんでこの機能ないのか不思議に思えるくらい使える機能だと思うんですがね…

 

今回はプログラムのソースをいじって機能を追加しましたが、

もしかしてluaとか使ってこういう機能も追加できるんでしょうか?

StepMania5はluaで何でもできちゃうイメージがあるんですが…

続きを読む

StepMania5で遊ぼう – ビルド編

[20160708追記ここから]

ここに書いてあることは5_0_7_rcブランチに限った話ですので忘れて下さい。

本来のビルドはREADMEに書いてある通りCMakeを使いましょう。

[20160708追記ここまで]

 

 

遊ぼうって言ってもプログラマー的な意味でな!

 

記事タイトルの通り今回は音ゲーマーにはお馴染み、

StepMania5をソースからビルドしてみたいと思います。

なんか速攻で終わりそうな内容だなぁ…

 

まずStepMania公式(http://www.stepmania.com/)から

ソースコードをダウンロード。(俺がDLしたバージョンは5.0.7でした)

んで解凍。

今回はVisual Studio 2013でビルドしたいのでsrcフォルダの中の

sm5-net2013.slnを開きます。

そして構成を「Debug」から「Release」に変えて、ビルド→ソリューションのビルド。

これだけです。あら簡単。早くもこの記事は終わりそうです。

 

sm5_build_error

あれ、ビルドエラーが出ました。なんでだ…

エラーが出てる箇所は

pseudolocalize

こんな感じで、見慣れない文字が書かれています。

github(https://github.com/stepmania/stepmania)のmasterをダウンロードして

ビルドしても結果は同じでした。

ググってみると、

PseudoLocalize compilation errors · Issue #76 · stepmania/stepmania
https://github.com/stepmania/stepmania/issues/76

同じ問題に遭遇してる人が。

この問題のが発生する原因は、

alright, it looks like Microsoft Visual C++ likes to read files that are UTF-8 without BOM as Shift-JIS files when the locale is set to Japanese,

https://github.com/stepmania/stepmania/issues/76

らしいです。日本語に直すと

「日本語環境のWindows上でVisual StudioがUTF-8(BOMなし)のファイルを読むとShift-JISとして認識してしまう」

…あってるのかな。英語はさっぱりです。

この関数、StepManiaの設定(Preferences.ini)の

PseudoLocalizeを1にしないとこの関数は通らないし、

日本人には関係ない処理だし、

しかもこの関数通すとデフォルトテーマのluaがエラーを吐いてしまう、

と、あまり意味ない関数(独断と偏見)なので、

もうこうしてしまってもいいんじゃないかと思いましたが

さすがに自称プログラマーのプライドが許さなかったので

なんとかビルドできるようにこの関数の処理を変えてみました。

以下糞コード注意。

「おまじない」とか目も当てられない文字が書かれていますが、

こう書き換えることでとりあえずビルドは通ります。

この関数が通った時の処理もうまくいってるようです。

相変わらずデフォルトテーマのluaはエラー出しますが。

 

しかし、ビルド編とか書いてるけど続くのかなこれは…

 

余談

PseudoLocalize関数の中でずらっと変数を追加してますが、

最初は構造体を使って書いてました。

しかしこの構造体をインスタンス化すると、なぜかコンストラクタが呼ばれないのです。

でもVisual Studioの新規プロジェクトや、Ideoneで似たようなコードを書くと

ちゃんとコンストラクタは呼ばれます。

ここで物凄い悩みましたが、上にも書かれてる

「日本語環境のWindows上でVisual StudioがUTF-8(BOMなし)のファイルを読むとShift-JISとして認識してしまう」

という問題のせいにしておきます。

続きを読む