<BitmapText Font="_eurostile normal" Text=""
Condition="GAMESTATE:IsPlayerEnabled(PLAYER_1)"
OnCommand="%function(self)
- if curRate ~= 1 or gnRateRestore == 1 then
+ if GetRateMod() ~= '1' or gnRateRestore == 1 then
GAMESTATE:ApplyGameCommand('mod, 1.0xmusic',1);
self:hidden(1);
- self:settext(curRate..'X Rate');
+ self:settext(GetRateMod()..'X Rate');
self:zoom(0.5);
self:x(SCREEN_CENTER_X-154);
self:y(SCREEN_CENTER_Y-92);
<BitmapText Font="_eurostile normal" Text=""
Condition="GAMESTATE:IsPlayerEnabled(PLAYER_2)"
OnCommand="%function(self)
- if curRate ~= 1 or gnRateRestore == 1 then
+ if GetRateMod() ~= '1' or gnRateRestore == 1 then
GAMESTATE:ApplyGameCommand('mod, 1.0xmusic',2);
self:hidden(1);
- self:settext(curRate..'X Rate');
+ self:settext(GetRateMod() .. 'X Rate');
self:zoom(0.5);
self:x(SCREEN_CENTER_X+155);
self:y(SCREEN_CENTER_Y-92);
<BitmapText Font="_eurostile normal" Text=""
OnCommand="%function(self)
- if curRate ~= 1 then
+ if GetRateMod() ~= '1' then
curRate = 1;
end
end"
OnCommand="horizalign,center;shadowlength,0;zoom,0.5;"
InitCommand="%function(self)
- self:x(SCREEN_CENTER_X);
- self:y(SCREEN_CENTER_Y-146+60+4);
- gnBPMDisplay = 0;
- gnHighRoundBPM = 0;
- gnLowRoundBPM = 0;
- if lowBPM == highBPM then
- if highBPM == 0 then
- gnBPMDisplay = '...';
- else
- gnHighRoundBPM = highBPM*curRate;
- gnHighRoundBPM = math.floor(gnHighRoundBPM);
- gnBPMDisplay = gnHighRoundBPM;
- end
- else
- gnLowRoundBPM = lowBPM*curRate;
- gnLowRoundBPM = math.floor(gnLowRoundBPM);
- gnHighRoundBPM = highBPM*curRate;
- gnHighRoundBPM = math.floor(gnHighRoundBPM);
- gnBPMDisplay = gnLowRoundBPM..'-'..gnHighRoundBPM;
- end
- if GAMESTATE:IsPlayerEnabled(PLAYER_2) and not GAMESTATE:IsPlayerEnabled(PLAYER_1) then
- if curRate ~= 1 then
- gnSongLengthDisplay = string.gsub(gnSongLength,'Patched','Length Patched');
- gnSongLengthDisplay = string.gsub(gnSongLength,'Length Length Patched','Length Patched');
- self:settext(DisplayBPM(2, true, false)..' BPM ('..curRate..'x Music Rate) - '..gnSongLengthDisplay);
- else
- gnSongLengthDisplay = string.gsub(gnSongLength,'Patched','Length Patched');
- gnSongLengthDisplay = string.gsub(gnSongLength,'Length Length Patched','Length Patched');
- self:settext(DisplayBPM(2, true, false)..' BPM - '..gnSongLengthDisplay);
- end
- else
- if curRate ~= 1 then
- gnSongLengthDisplay = string.gsub(gnSongLength,'Patched','Length Patched');
- gnSongLengthDisplay = string.gsub(gnSongLength,'Length Length Patched','Length Patched');
- self:settext(DisplayBPM(1, true, false)..' BPM ('..curRate..'x Music Rate) - '..gnSongLengthDisplay);
- else
- gnSongLengthDisplay = string.gsub(gnSongLength,'Patched','Length Patched');
- gnSongLengthDisplay = string.gsub(gnSongLength,'Length Length Patched','Length Patched');
- self:settext(DisplayBPM(1, true, false)..' BPM - '..gnSongLengthDisplay);
- end
- end
+ self:x(SCREEN_CENTER_X);
+ self:y(SCREEN_CENTER_Y-146+60+4);
+
+ local pn = 1
+
+ if GAMESTATE:IsPlayerEnabled(PLAYER_2) then pn = 2 end
+
+ local bpm = DisplayBPM(pn, true, false)
+
+ if GetRateMod() ~= '1' then
+ gnSongLengthDisplay = string.gsub(gnSongLength,'Patched','Length Patched');
+ gnSongLengthDisplay = string.gsub(gnSongLength,'Length Length Patched','Length Patched');
+ self:settext(bpm .. ' BPM ('..GetRateMod()..'x Music Rate) - '..gnSongLengthDisplay);
+ else
+ gnSongLengthDisplay = string.gsub(gnSongLength,'Patched','Length Patched');
+ gnSongLengthDisplay = string.gsub(gnSongLength,'Length Length Patched','Length Patched');
+ self:settext(bpm .. ' BPM - '..gnSongLengthDisplay);
+ end
end"
/>
self:vibrate();
end
end"> <children>
-<!-- Determine BPM -->
- <BitmapText
- Text=""
- File="_eurostile blue glow"
- InitCommand="%function(self) self:x(100) self:shadowlength(0) self:draworder(10000); self:addy(20); self:queuecommand('loop'); end"
- OnCommand="Zoom,1"
- loopCommand="%function(self)
- lowBPM = tostring(SCREENMAN:GetTopScreen():GetChild('BPMDisplay'):GetChild('Text'):GetText());
-
- if lowBPM == nil then
- lowBPM = '0';
- end
-
- if lowBPM == '...' then
- lowBPM = '0';
- end
-
- if lowBPM == 'Various' then
- lowBPM = '0';
- end
-
- highBPM = lowBPM
-
- delimPos = string.find(lowBPM, '-')
- if delimPos==1 then
- delimPos = string.find(lowBPM, '-',2)
+
+<!--Capture BPM-->
+<Layer Type="Quad"
+ InitCommand="queuecommand,BPMCapture;"
+ BPMCaptureCommand="%function(self)
+ songBPM = SCREENMAN:GetTopScreen():GetChild('BPMDisplay'):GetChild('Text'):GetText();
+ bpm[1] = string.gsub(songBPM,'-%d+','');
+ bpm[2] = string.gsub(songBPM,'%d+-','');
+ if bpm[2] == bpm[1] then bpm[2] = '';
end
-
- if delimPos then
- lowBPM = string.sub(lowBPM, 1, delimPos-1)
- highBPM = string.sub(highBPM, delimPos+1, string.len(highBPM))
+ bpm[3] = SCREENMAN:GetTopScreen():GetChild('BPMDisplay'):GetChild('Text'):GetText();
+ if not OPENITG then bpm[3] = math.floor(bpm[3] * modRate + 0.5)
end
-
- self:stoptweening();
- self:sleep(0.1);
- self:queuecommand('loop');
- end"
- />
-
- <ActorFrame OnCommand="y,SCREEN_BOTTOM-17-18"> <children>
+ end"
+ CurrentSongChangedMessageCommand="queuecommand,BPMCapture"
+ CurrentStepsP1ChangedMessageCommand="queuecommand,BPMCapture"
+ CurrentStepsP2ChangedMessageCommand="queuecommand,BPMCapture"
+/>
+
+<ActorFrame OnCommand="y,SCREEN_BOTTOM-17-18"> <children>
<Layer
Type="BitmapText"
Font="_eurostile normal"
<ActorFrame
OnCommand="%function(self) if ModeMenuAvailable() then self:x(SCREEN_CENTER_X-225) else self:x(SCREEN_CENTER_X-125) end end"
> <children>
+
+
<Layer
Type="BitmapText"
Font="_eurostile normal"
function GetRateMod()
- if GetRateModHelper('1.0xmusic') then curRate = 1; return '1'
- elseif GetRateModHelper('1.1xmusic') then curRate = 1.1; return '1.1'
- elseif GetRateModHelper('1.2xmusic') then curRate = 1.2; return '1.2'
- elseif GetRateModHelper('1.3xmusic') then curRate = 1.3; return '1.3'
- elseif GetRateModHelper('1.4xmusic') then curRate = 1.4; return '1.4'
- elseif GetRateModHelper('1.5xmusic') then curRate = 1.5; return '1.5'
- elseif GetRateModHelper('1.6xmusic') then curRate = 1.6; return '1.6'
- elseif GetRateModHelper('1.7xmusic') then curRate = 1.7; return '1.7'
- elseif GetRateModHelper('1.8xmusic') then curRate = 1.8; return '1.8'
- elseif GetRateModHelper('1.9xmusic') then curRate = 1.9; return '1.9'
- elseif GetRateModHelper('2.0xmusic') then curRate = 2; return '2'
- elseif GetRateModHelper('0.1xmusic') then curRate = 0.1; return '0.1'
- elseif GetRateModHelper('0.2xmusic') then curRate = 0.2; return '0.2'
- elseif GetRateModHelper('0.3xmusic') then curRate = 0.3; return '0.3'
- elseif GetRateModHelper('0.4xmusic') then curRate = 0.4; return '0.4'
- elseif GetRateModHelper('0.5xmusic') then curRate = 0.5; return '0.5'
- elseif GetRateModHelper('0.6xmusic') then curRate = 0.6; return '0.6'
- elseif GetRateModHelper('0.7xmusic') then curRate = 0.7; return '0.7'
- elseif GetRateModHelper('0.8xmusic') then curRate = 0.8; return '0.8'
- elseif GetRateModHelper('0.9xmusic') then curRate = 0.9; return '0.9'
- else curRate = 1; return '(Unknown rate mod)' end
+ if GetRateModHelper('1.0xmusic') then return '1'
+ elseif GetRateModHelper('1.1xmusic') then return '1.1'
+ elseif GetRateModHelper('1.2xmusic') then return '1.2'
+ elseif GetRateModHelper('1.3xmusic') then return '1.3'
+ elseif GetRateModHelper('1.4xmusic') then return '1.4'
+ elseif GetRateModHelper('1.5xmusic') then return '1.5'
+ elseif GetRateModHelper('1.6xmusic') then return '1.6'
+ elseif GetRateModHelper('1.7xmusic') then return '1.7'
+ elseif GetRateModHelper('1.8xmusic') then return '1.8'
+ elseif GetRateModHelper('1.9xmusic') then return '1.9'
+ elseif GetRateModHelper('2.0xmusic') then return '2'
+ elseif GetRateModHelper('0.1xmusic') then return '0.1'
+ elseif GetRateModHelper('0.2xmusic') then return '0.2'
+ elseif GetRateModHelper('0.3xmusic') then return '0.3'
+ elseif GetRateModHelper('0.4xmusic') then return '0.4'
+ elseif GetRateModHelper('0.5xmusic') then return '0.5'
+ elseif GetRateModHelper('0.6xmusic') then return '0.6'
+ elseif GetRateModHelper('0.7xmusic') then return '0.7'
+ elseif GetRateModHelper('0.8xmusic') then return '0.8'
+ elseif GetRateModHelper('0.9xmusic') then return '0.9'
+ else return '(Unknown rate mod)' end
end
function oitgACoptions()
end
end
-function DisplayBPM(pn, includeRate, includeSpeed)
+function DisplayBPM(pn, includeRate, includeSpeed)
local lowBPM = bpm[1]
- local highBPM = bpm[2]
- local speedMod = 1
- local rateMod = 1
-
- if includeRate then rateMod = modRate end
-
- if includeSpeed then
- speedMod = modSpeed[pn]
- speedMod = string.gsub(speedMod,'x','')
- speedMod = string.gsub(speedMod,'c','')
- speedMod = string.gsub(speedMod,'m','')
- end
+ local highBPM = bpm[2]
+ local rateMod = modRate
+ local speedMod = modSpeed[pn]
- if modType[pn] == "x-mod" then
+ speedMod = string.gsub(speedMod,'x','')
+ speedMod = string.gsub(speedMod,'c','')
+ speedMod = string.gsub(speedMod,'m','')
- if lowBPM == "Various" or lowBPM == "..." or lowBPM == nil then
- return "???"
- end
-
- lowScrollBPM = lowBPM * speedMod * rateMod
-
- if string.sub(lowScrollBPM, 2, 2) == "." then
- lowScrollBPM = string.sub(lowScrollBPM, 1, 1)
- end
-
- if string.sub(lowScrollBPM, 3, 3) == "." then
- lowScrollBPM = string.sub(lowScrollBPM, 1, 2)
- end
-
- if string.sub(lowScrollBPM, 4, 4) == "." then
- lowScrollBPM = string.sub(lowScrollBPM, 1, 3)
- end
-
- if string.sub(lowScrollBPM, 5, 5) == "." then
- lowScrollBPM = string.sub(lowScrollBPM, 1, 4)
- end
-
- if string.sub(lowScrollBPM, 6, 6) == "." then
- lowScrollBPM = string.sub(lowScrollBPM, 1, 5)
- end
+ if not includeRate then rateMod = 1 end
+ if not includeSpeed then speedMod = 1 end
+
+ if lowBPM == "Various" or lowBPM == "..." or lowBPM == nil then
+ return "???"
+ end
- if highBPM ~= "" then
+ lowScrollBPM = lowBPM * speedMod * rateMod
- highScrollBPM = highBPM * speedMod * rateMod
-
- if string.sub(highScrollBPM, 2, 2) == "." then
- highScrollBPM = string.sub(highScrollBPM, 1, 1)
- end
+ if string.sub(lowScrollBPM, 2, 2) == "." then
+ lowScrollBPM = string.sub(lowScrollBPM, 1, 1)
+ end
- if string.sub(highScrollBPM, 3, 3) == "." then
- highScrollBPM = string.sub(highScrollBPM, 1, 2)
- end
+ if string.sub(lowScrollBPM, 3, 3) == "." then
+ lowScrollBPM = string.sub(lowScrollBPM, 1, 2)
+ end
- if string.sub(highScrollBPM, 4, 4) == "." then
- highScrollBPM = string.sub(highScrollBPM, 1, 3)
- end
-
- if string.sub(highScrollBPM, 5, 5) == "." then
- highScrollBPM = string.sub(highScrollBPM, 1, 4)
- end
-
- if string.sub(highScrollBPM, 6, 6) == "." then
- highScrollBPM = string.sub(highScrollBPM, 1, 5)
- end
-
+ if string.sub(lowScrollBPM, 4, 4) == "." then
+ lowScrollBPM = string.sub(lowScrollBPM, 1, 3)
+ end
+
+ if string.sub(lowScrollBPM, 5, 5) == "." then
+ lowScrollBPM = string.sub(lowScrollBPM, 1, 4)
+ end
+
+ if string.sub(lowScrollBPM, 6, 6) == "." then
+ lowScrollBPM = string.sub(lowScrollBPM, 1, 5)
+ end
+
+ if highBPM ~= "" then
+
+ highScrollBPM = highBPM * speedMod * rateMod
+
+ if string.sub(highScrollBPM, 2, 2) == "." then
+ highScrollBPM = string.sub(highScrollBPM, 1, 1)
end
- if highBPM == "" then
- return lowScrollBPM
- else
- return lowScrollBPM .. "-" .. highScrollBPM
+ if string.sub(highScrollBPM, 3, 3) == "." then
+ highScrollBPM = string.sub(highScrollBPM, 1, 2)
+ end
+
+ if string.sub(highScrollBPM, 4, 4) == "." then
+ highScrollBPM = string.sub(highScrollBPM, 1, 3)
+ end
+
+ if string.sub(highScrollBPM, 5, 5) == "." then
+ highScrollBPM = string.sub(highScrollBPM, 1, 4)
+ end
+
+ if string.sub(highScrollBPM, 6, 6) == "." then
+ highScrollBPM = string.sub(highScrollBPM, 1, 5)
end
end
- if modType[pn] == "c-mod" or modType[pn] == "m-mod" then
- return speedMod
+ --[[
+ If we want to include rate and speed but we also have a c or m mod, we
+ can just return the speedMod as that will be the scroll speed regardless
+ of the rate/speed mod chosen
+ ]]--
+ if includeRate and includeSpeed and (modType[pn] == "m-mod" or modType[pn] == "c-mod") then
+ return speedMod
end
- return "???"
+ -- In every other case we return the bpm range adjusted for the speed and rate.
+ if highBPM == "" then
+ return lowScrollBPM
+ else
+ return lowScrollBPM .. "-" .. highScrollBPM
+ end
end
\ No newline at end of file