⇦ StepMania(資料)へ戻る
EXFolder(ボスフォルダ)開発キット
EXFolder Development Kit
最終更新:2015年12月20日
準備
テーマ開発キットのダウンロード
- まずは必要なファイルをDLします。
- 下記ボタンからDLしてください。
EXFolder開発キットのダウンロード
ファイル最終更新日:2015年12月20日
- 一部パラメータが取得できていない問題に対応しました
ファイル構成
それぞれのファイルの説明です。
metrics.ini-additional-text.txt
- metrics.iniに追記、変更する必要のある箇所を取り出したテキストファイルです。
BGAnimationLua.txt
- BGAnimationsフォルダの各機能に追記する必要のある箇所を取り出したテキストファイルです。
Scripts/90 EXF_Base.lua
- EXFolder実装するにあたって最低限必要な情報を定義したファイルです。
- おもに画面遷移時の呼び出し処理やキー定義を行います。
Scripts/91 EXF_function.lua
- EXFolder本体です。
- 選曲中楽曲情報の取得やGroup.iniを読み取ってEXFolderを構築する処理を行います。
Scripts/90 FileRW.lua
- Group.ini等のテキストファイルの読み書きに使用します。
Scripts/91 Life.lua
- EXFolderで設定されたライフゲージとして動作するようにするファイルです。
Scripts/100 StepMania.lua
BGAnimations/ScreenEXFolderIntro decorations
- EXFolder遷移時の演出画面用フォルダです。
- おもに画面描画を担当しています。
BGAnimations/ScreenEXFolderIntro overlay
- EXFolder遷移時の演出画面用フォルダです。
- おもにキー入力等システム関連を担当しています。
BGAnimations/ScreenSelectExMusic background
- EXFolder選曲画面用フォルダです。
- おもに背景画像を担当しています。
BGAnimations/ScreenSelectExMusic decorations
- EXFolder選曲画面用フォルダです。
- おもに画面描画を担当しています。
BGAnimations/ScreenSelectExMusic overlay
- EXFolder選曲画面用フォルダです。
- おもにキー入力等システム関連を担当しています。
実装
今回は例として、StepMania5.0.9のデフォルトテーマに実装してみます。
ファイルのコピー・上書き
- 下記フォルダ・ファイルを対象のテーマにコピー(または移動)してください。
- BGAnimations/ScreenEXFolderIntro decorations
- BGAnimations/ScreenEXFolderIntro overlay
- BGAnimations/ScreenSelectExMusic background
- BGAnimations/ScreenSelectExMusic decorations
- BGAnimations/ScreenSelectExMusic overlay
- Scripts/90 EXF_Base.lua
- Scripts/90 FileRW.lua
- Scripts/91 EXF_function.lua
- Scripts/91 Life.lua
- Scripts/100 StepMania.lua
BGAnimationフォルダ内のLuaに追記
- BGAnimationLua.txtをテキストエディタで開き、該当する機能にコードをコピペしていきます。
- t[#t+1]=○○…のところがコピー対象部分であり、その上の行のコメントが貼り付け対象の機能です。
- 貼り付ける対象はbackground、decorations、overlayどれでも構いませんが、できる限り上のレイヤー(通常はoverlay)を推奨します。
- StepManiaのバージョンによって貼り付ける位置等が異なるので注意してください。
- 以下、記載しているファイルや貼り付け行数は5.0.9のデフォルトテーマです。
BGAnimation/ScreenSelectMusic decorations/default.lua
- 貼り付け位置:2行目
- local t = LoadFallbackB();の後に追記します
local t = LoadFallbackB();
t[#t+1] = EXF_ScreenSelectMusic();
t[#t+1] = Def.ActorFrame{
CodeMessageCommand = function(self, params)
if params.Name=="ExFolder" then
StartEXFolder(GetActiveGroupName());
end;
end;
};
- 実際は t[#t+1] = EXF_ScreenSelectMusic(); だけでいいのですが、ここではEXFolderへ移動するためのテスト用キー操作部分も書いています。
BGAnimation/ScreenStageInformation underlay/default.lua
- 貼り付け位置:11行目
- local t = Def.ActorFrame {};の後に追記します
local t = Def.ActorFrame {};
t[#t+1] = EXF_ScreenStageInformation();
BGAnimation/ScreenGameplay overlay.lua
- 貼り付け位置:2行目
- local t = Def.ActorFrame {};の後に追記します
local t = Def.ActorFrame {};
t[#t+1] = EXF_ScreenGameplay();
BGAnimation/ScreenEvaluation/default.lua
- 貼り付け位置:59行目
- local t = Def.ActorFrame {};の後に追記します
local t = Def.ActorFrame {};
t[#t+1] = EXF_ScreenEvaluation();
BGAnimation/ScreenTitleMenu decorations.lua
- タイトルに戻った時は強制的にEXFolder状態を解除する処理を行っています。
- 貼り付け位置:4行目
- local t = Def.ActorFrame {};の後に追記します
local t = Def.ActorFrame {};
t[#t+1] = EXF_ScreenTitleMenu();
BGAnimation/ScreenEvaluation background/default.lua
- 他の場所と書き込むべきファイルや内容・場所が異なるので注意してください。
- リザルト画面の背景を定義します。
- 貼り付け位置:return t;の上の行
- t[#t+1] = EXF_Scre…ではなく t = EXF_Scre… です。
- リザルト画面の背景がScreenWithMenuElementsかどうかで書き込む内容が変わります。
デフォルトテーマの場合、リザルト画面専用の背景があるため、第2引数は true になります。
-- 上の行はデフォルトのコードから書き換えないでください --
t = EXF_ScreenEvaluation_Background(t,true);
return t
ScreenWithMenuElementsを使用している等で、backgroundがない場合は第2引数をfalseにします。
local t = Def.ActorFrame {};
t = EXF_ScreenEvaluation_Background(t,false);
return t;
- EXF_ScreenEvaluation_BackgroundのかわりにEXF_Evaluation_Background(後述)を使用すると、背景の明度を自由に設定できます。
BGAnimation/ScreenProfileSave Background
- デフォルトテーマにはこの部分に該当するファイルがありません。
- そのため特に対応する必要はないのですが、リザルト画面で決定ボタンを押した後のPROFILEセーブ時に背景が戻ってしまうのが気になる場合はここも設定してください。
- 作成ファイル名:BGAnimation/ScreenProfileSave background.lua または BGAnimation/ScreenProfileSave background/default.lua
- 基本的にEXF_ScreenEvaluation_Backgroundと同じですが、第3引数が存在します。
- ここを選択するとそれだけ背景が暗くなります。
- 背景が明るすぎて見難いと困る画面ではこの値(0~1)を設定しますがPROFILEセーブ画面では0(暗くならない)で問題ありません。
Metrics.iniの編集
- metrics.ini-additional-text.txtをテキストエディタで開き、該当する機能にコードをコピペしていきます。
- 新しくセクションを追加する箇所と、もともとある内容を書き換える箇所があります。
ScreenEXFolderIntroセクション
[ScreenEXFolderIntro]
ShowHeader=false
ShowFooter=false
ShowHelp=false
Fallback="ScreenWithMenuElements"
NextScreen="ScreenSelectExMusic"
PrevScreen="ScreenSelectMusic"
StopMusicOnBack=true
TimerSeconds=99
TimerStealth=true
CodeNames=EXFolderIntroCode()
CodeLeft="MenuLeft"
CodeLeft2="Left"
CodeLeft3="DownLeft"
CodeRight="MenuRight"
CodeRight2="Right"
CodeRight3="DownRight"
CodeUp="MenuUp"
CodeUp2="Up"
CodeUp3="UpLeft"
CodeDown="MenuDown"
CodeDown2="Down"
CodeDown3="UpRight"
CodeStart="Start"
CodeCenter="Center"
CodeBack="Back"
CodeEffectUp="EffectUp"
CodeEffectDown="EffectDown"
ScreenSelectExMusicセクション
[ScreenSelectExMusic]
ShowHeader=false
ShowFooter=true
Fallback="ScreenWithMenuElements"
NextScreen="ScreenSelectMusic"
PrevScreen="ScreenSelectMusic"
PlayMusic=false
StopMusicOnBack=true
TimerSeconds=60
TimerStealth=true
CodeNames=SelectExMusicCode()
CodeLeft="+MenuLeft"
CodeLeft2="+Left"
CodeLeft3="+DownLeft"
CodeRight="+MenuRight"
CodeRight2="+Right"
CodeRight3="+DownRight"
CodeUp="MenuUp,MenuUp"
CodeUp2="Up,Up"
CodeUp3="UpLeft"
CodeDown="MenuDown,MenuDown"
CodeDown2="Down,Down"
CodeDown3="UpRight"
CodeStart="Start"
CodeBack="Back"
CodeBackRelease="~Back"
CodeCenter="Center"
LifeMeterBarセクション
- デフォルトに存在しますが該当パラメータは書かれていないので、セクション内に新たに書き加えます。
[LifeMeterBar]
#OverOnCommandはデフォルトで書かれています。
OverOnCommand=diffuse,Color("Orange");diffuserightedge,BoostColor(Color("Orange"),1.5)
InitialValue=LifeMeterInit()
DangerThreshold=LifeMeterDanger()
LifePercentChangeW1=LifeMeterW1()
LifePercentChangeW2=LifeMeterW2()
LifePercentChangeW3=LifeMeterW3()
LifePercentChangeW4=LifeMeterW4()
LifePercentChangeW5=LifeMeterW5()
LifePercentChangeMiss=LifeMeterMiss()
LifePercentChangeHitMine=LifeMeterHitMine()
LifePercentChangeHeld=LifeMeterHeld()
LifePercentChangeLetGo=LifeMeterLetGo()
LifePercentChangeCheckpointMiss=LifeMeterCheckpointMiss()
LifePercentChangeCheckpointHit=LifeMeterCheckpointHit()
ScreenSelectMusicセクション
- デフォルトに存在しますが該当パラメータは書かれていないので、セクション内に新たに書き加えます。
- なお、これはEXFolderに遷移するためのテストキー設定のため、実際は不要です。
[ScreenSelectMusic]
CodeNames="ExFolder,ExFolder2"
CodeExFolder="Select,Up"
CodeExFolder2="Select,MenuUp"
#以下、デフォルトの内容
動作確認
- 上記内容で細かい設定を除き実装完了です。
- 実際にStepManiaをプレイして、2ステージ目以降でSelect,↑の順でキーを押してください。
情報取得用関数
- 後日詳細追記するかも。
- とりあえず BGAnimations/ScreenSelectExMusic decorations 見たら大体わかるかと。
- IsEXFolder()
return:true/false
- 現在EXFolder中かどうかを確認
- EXFolder中であればtrue
- GetEXFGroupName()
return:テキスト
- EXFolder中のグループ名
- EXFolder中でなければ空文字
- EnableEXFolder()
return:true/false
- EXFolderに遷移する本当に最低限の条件がそろっているか
- コースモードではない、2ステージ目以降であればtrue
- IsChallEXFolder_NowOpen()
return:true/false
- 現在選択している楽曲のグループはEXFolderに遷移できるか
- waiei系テーマと同じくMAXSTAGEで設定しているステージ分のプレイと最後にAA判定が必須です
- IsChallEXFolder_LastGroup()
return:true/false
- 前のステージでプレイした楽曲のグループはEXFolderに遷移できるか
- waiei系テーマと同じくMAXSTAGEで設定しているステージ分のプレイと最後にAA判定が必須です
- GetEXFStage()
return:数値
- 現在のEXFolderステージ数(1か2)
- EXFolderではないときは0が返る
- StartEXFolder(グループ名)
- GetEXFLife()
return:テキスト(ライフ設定値)
- 現在のEXFolderステージのライフゲージの設定値を返す
- 取得される値は以下の通り
- Normal
- Hard
- NoRecover
- HardNoRecover
- Suddendeath
- FC
- PFC
- MFC
- 1~(バッテリーライフの数値)
- GetEXFTotalSongs()
return:数値
- GetEXFCurrentSong()
return:数値
- 現在選択中の曲番号を取得
- 取得した番号はGetEXFSongState系関数で使用
- GetEXFSongR(数字)
return:数値
- 現在選択中の曲から後ろに数字分ずれた曲の番号を取得
- 隣の曲のバナーやジャケットを取得したいときに使用
- マイナス値を入れると前の曲情報を取得
- 取得した番号はGetEXFSongState系関数で使用
- GetEXFSongState系関数
- 以下、numはGetEXFCurrentSong()等を使用して取得した値を使用
- GetEXFSongState_Song(num)
return:Song
- GetEXFSongState_Random(num)
return:テキスト(フォルダ名)
- ランダム曲のフォルダ名を返す
- ランダム曲でない場合は空文字を返す
- EXF_GetFolder2Song(グループ名,フォルダ名)を使用することでSong型を取得することができる
- GetEXFSongState_Title(num)
return:テキスト
- 指定番号の楽曲のタイトル文字を返す
- タイトル偽装を行っている場合は偽装されたタイトルを返す
- GetEXFSongState_SubTitle(num)
return:テキスト
- 指定番号の楽曲のサブタイトル文字を返す
- サブタイトル偽装を行っている場合は偽装されたサブタイトルを返す
- GetEXFSongState_Artist(num)
return:テキスト
- 指定番号の楽曲のアーティスト名文字を返す
- アーティスト名偽装を行っている場合は偽装されたアーティスト名を返す
- GetEXFSongState_Difficulty(num)
return:テーブル(0:beginner、1:Easy…として選択可能なら true)
- 指定番号の楽曲の現在選択可能な難易度をテーブルで返す
- GetEXFSongState_Banner(num)
return:テキスト
- 指定番号の楽曲のバナー画像パスを返す
- バナー画像偽装を行っている場合は偽装されたバナー画像パスを返す
- GetEXFSongState_Jacket(num)
return:テキスト
- 指定番号の楽曲のジャケット画像パスを返す
- ジャケット画像偽装を行っている場合は偽装されたジャケット画像パスを返す
- GetEXFSongState_Hidden(num)
return:数値
- 指定番号の楽曲の情報を隠す設定値を返す
- 後述のGetEXFCurrentSong_Show系関数を使用することを推奨
- GetEXFSongState_Color(num)
return:Color
- GetEXFSongState_Life(num)
return:テキスト(ライフ設定値)
- 指定番号の楽曲のライフゲージの設定値を返す(楽曲別)
- 取得される値は以下の通り
- Normal
- Hard
- NoRecover
- HardNoRecover
- Suddendeath
- FC
- PFC
- MFC
- 1~(バッテリーライフの数値)
- waiei2で新規実装されたパラメータの為、対応テーマは少ない
- GetEXFCurrentSong_Show系関数
- GetEXFSongState_Hiddenの代わりに以下を使用することを推奨
- returnは true / false
- ※ただし、これはあくまで設定を取得するだけで、実際に表示するかどうかはテーマ作者側で作成する必要があります。
- GetEXFCurrentSong_ShowBPMTime() ※BPM/Timeを表示するかどうか
- GetEXFCurrentSong_ShowStepInfo() ※レーダー、譜面詳細を表示するかどうか
- GetEXFCurrentSong_ShowHiScore() ※ハイスコアを表示するかどうか