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;