StepMania5.0で任意のパラメータを呼び出す

!このコードは Lua です!
たとえばsm/sscファイルの中に
#TEST:AAABBBCCCDDD;
というパラメータが存在した場合、
GetSMParameter(song,"TEST");
とすると AAABBBCCCDDD が返ってきます。
存在しない場合は空文字。

Str2Colorはおまけ。
"1.0,0.5,0.8,1.0" のように、色情報が文字列となっているときに使うことで
各色情報が個別にテーブルデータで返ってきます。
値が異常な場合は白が返ってきます。
例:水色を返す
local str_col="0.0,0.5,1.0,1.0";
local tab_col=Str2Color(str_col);
self:diffuse(tab_col[1],tab_col[2],tab_col[3],tab_col[4]);

2021年追記
悲しいことに標準で同じ機能が用意されていた。無知は罪。
local str_col="0.0,0.5,1.0,1.0"
self:diffuse(color(str_col))

!このコードは Lua です!
たとえばsm/sscファイルの中に
#TEST:AAABBBCCCDDD;
というパラメータが存在した場合、
GetSMParameter(song,"TEST");
とすると AAABBBCCCDDD が返ってきます。
存在しない場合は空文字。

Str2Colorはおまけ。
"1.0,0.5,0.8,1.0" のように、色情報が文字列となっているときに使うことで
各色情報が個別にテーブルデータで返ってきます。
値が異常な場合は白が返ってきます。
例:水色を返す
local str_col="0.0,0.5,1.0,1.0";
local tab_col=Str2Color(str_col);
self:diffuse(tab_col[1],tab_col[2],tab_col[3],tab_col[4]);

2021年追記
悲しいことに標準で同じ機能が用意されていた。無知は罪。
local str_col="0.0,0.5,1.0,1.0"
self:diffuse(color(str_col))

function GetSMParameter(song,prm)
local st=song:GetAllSteps();
if #st<1 then
return "";
end;
local t;
t=st[1]:GetFilename();
if not FILEMAN:DoesFileExist(t) then
return "";
end;
local f=RageFileUtil.CreateRageFile();
f:Open(t,1);
local tmp={};
local pl=string.lower(prm);
while true do
l=f:GetLine();
local ll=string.lower(l);
if string.find(ll,"#notes:.*") or f:AtEOF() then
tmp[1]="";
break;
-- [ja] BOM .*
elseif string.find(ll,".*#"..pl..":.*") then
tmp=split(":",l);
if tmp[2]==";" then
tmp[1]="";
else
tmp=split(";",tmp[2]);
end;
break;
end;
end;
f:Close();
return tmp[1];
end;
function Str2Color(prm)
local c={"1.0","1.0","1.0","1.0"};
c=split(",",prm);
if #c<4 then
c={"1.0","1.0","1.0","1.0"}
end;
return c;
end;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX