THIS IS MERGE
@@ -48,6 +48,7 @@ nsis_strings_temp.inc
|
||||
Data/SpeedMods.txt
|
||||
Program/StepMania*.lib
|
||||
crashinfo.txt
|
||||
Utils/temp*
|
||||
|
||||
syntax: regexp
|
||||
.*\#.*\#$
|
||||
|
||||
@@ -10,9 +10,21 @@ supported but exist anyways.)
|
||||
_____________________________________________________________________________
|
||||
|
||||
================================================================================
|
||||
sm-ssc v1.2.3 | 201102??
|
||||
sm-ssc v1.2.3 | 2011022?
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
20110225
|
||||
--------
|
||||
* Add lifts and fakes to all Pump noteskins. [Daisuke Master, Wolfman2000]
|
||||
|
||||
20110224
|
||||
--------
|
||||
* [NotesLoaderSSC] Allowed reading of #NOTES2 again. [AJ]
|
||||
|
||||
20110223
|
||||
--------
|
||||
* [Steps] Added GetChartStyle() Lua binding. [AJ]
|
||||
|
||||
20110222
|
||||
--------
|
||||
* [ScreenEdit] Display the Player Number for Routine mode. [Wolfman2000]
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
Center Tap Note (doubleres) 3x2.png
|
||||
@@ -1 +0,0 @@
|
||||
DownLeft Tap Note (doubleres) 3x2.png
|
||||
@@ -1 +0,0 @@
|
||||
DownRight Tap Note (doubleres) 3x2.png
|
||||
@@ -1 +0,0 @@
|
||||
UpLeft Tap Note (doubleres) 3x2.png
|
||||
@@ -1 +0,0 @@
|
||||
UpRight Tap Note (doubleres) 3x2.png
|
||||
@@ -1 +0,0 @@
|
||||
Center Tap Note 5x1 (doubleres).png
|
||||
@@ -1 +0,0 @@
|
||||
DownLeft Tap Note 6x1 (doubleres).png
|
||||
@@ -1 +0,0 @@
|
||||
DownRight Tap Note 6x1 (doubleres).png
|
||||
@@ -1 +0,0 @@
|
||||
UpLeft Tap Note 6x1 (doubleres).png
|
||||
@@ -1 +0,0 @@
|
||||
UpRight Tap Note 6x1 (doubleres).png
|
||||
@@ -1 +0,0 @@
|
||||
Center Tap Note 3x2.png
|
||||
@@ -1,3 +1,3 @@
|
||||
return NOTESKIN:LoadActor("Center","Tap Note")..{
|
||||
InitCommand=cmd(pulse;effectclock,"beat";effecttiming,1,0.5,1,0.5;effectmagnitude,0.5,0.5,0.5);
|
||||
InitCommand=cmd(effectclock,"beat";effectmagnitude,0.5,1,0);
|
||||
};
|
||||
@@ -1 +0,0 @@
|
||||
DownLeft Tap Note 3x2.png
|
||||
@@ -1,3 +1,3 @@
|
||||
return NOTESKIN:LoadActor("DownLeft","Tap Note")..{
|
||||
InitCommand=cmd(pulse;effectclock,"beat";effecttiming,1,0.5,1,0.5;effectmagnitude,0.5,0.5,0.5)
|
||||
InitCommand=cmd(effectclock,"beat";effectmagnitude,0.5,1,0)
|
||||
};
|
||||
@@ -1 +0,0 @@
|
||||
DownRight Tap Note 3x2.png
|
||||
@@ -1,3 +1,3 @@
|
||||
return NOTESKIN:LoadActor("DownRight","Tap Note")..{
|
||||
InitCommand=cmd(pulse;effectclock,"beat";effecttiming,1,0.5,1,0.5;effectmagnitude,0.5,0.5,0.5)
|
||||
InitCommand=cmd(effectclock,"beat";effectmagnitude,0.5,1,0)
|
||||
};
|
||||
@@ -118,6 +118,10 @@ local function func()
|
||||
t.BaseRotationZ=Noteskin.BaseRotZ[sButton]
|
||||
end
|
||||
|
||||
if sElement == "Tap Lift" then
|
||||
t.InitCommand=cmd(pulse;effectclock,"beat";effectmagnitude,1,0.75,0);
|
||||
end
|
||||
|
||||
return t
|
||||
end
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
UpLeft Tap Note 3x2.png
|
||||
@@ -1,3 +1,3 @@
|
||||
return NOTESKIN:LoadActor("UpLeft","Tap Note")..{
|
||||
InitCommand=cmd(pulse;effectclock,"beat";effecttiming,1,0.5,1,0.5;effectmagnitude,0.5,0.5,0.5)
|
||||
InitCommand=cmd(effectclock,"beat";effectmagnitude,0.5,1,0)
|
||||
};
|
||||
@@ -1 +0,0 @@
|
||||
UpRight Tap Note 3x2.png
|
||||
@@ -1,3 +1,3 @@
|
||||
return NOTESKIN:LoadActor("UpRight","Tap Note")..{
|
||||
InitCommand=cmd(pulse;effectclock,"beat";effecttiming,1,0.5,1,0.5;effectmagnitude,0.5,0.5,0.5)
|
||||
InitCommand=cmd(effectclock,"beat";effectmagnitude,0.5,1,0)
|
||||
};
|
||||
@@ -1 +0,0 @@
|
||||
Center Tap Note 8x1 (doubleres).png
|
||||
@@ -1 +0,0 @@
|
||||
DownLeft Tap Note 8x1 (doubleres).png
|
||||
@@ -1 +0,0 @@
|
||||
DownRight Tap Note 8x1 (doubleres).png
|
||||
@@ -1 +0,0 @@
|
||||
UpLeft Tap Note 8x1 (doubleres).png
|
||||
@@ -1 +0,0 @@
|
||||
UpRight Tap Note 8x1 (doubleres).png
|
||||
@@ -1 +0,0 @@
|
||||
Center Tap Note 3x2.png
|
||||
@@ -1 +0,0 @@
|
||||
DownLeft Tap Note 3x2.png
|
||||
@@ -1 +0,0 @@
|
||||
DownRight Tap Note 3x2.png
|
||||
@@ -1 +0,0 @@
|
||||
UpLeft Tap Note 3x2.png
|
||||
@@ -1 +0,0 @@
|
||||
UpRight Tap Note 3x2.png
|
||||
@@ -1 +0,0 @@
|
||||
_Center Tap Note 6x8.png
|
||||
@@ -1 +0,0 @@
|
||||
_DownLeft Tap Note 6x8.png
|
||||
@@ -1 +0,0 @@
|
||||
_UpLeft Tap Note 6x8.png
|
||||
@@ -1 +0,0 @@
|
||||
Center Tap Note 8x1.png
|
||||
@@ -1 +0,0 @@
|
||||
DownLeft Tap Note 8x1.png
|
||||
@@ -1 +0,0 @@
|
||||
DownRight Tap Note 8x1.png
|
||||
@@ -1 +0,0 @@
|
||||
UpLeft Tap Note 8x1.png
|
||||
@@ -1 +0,0 @@
|
||||
UpRight Tap Note 8x1.png
|
||||
@@ -0,0 +1,3 @@
|
||||
return Def.Quad{
|
||||
InitCommand=cmd(Center;FullScreen;diffuse,HSV(192,1,0.8);diffusebottomedge,HSV(192,0.625,0.25));
|
||||
};
|
||||
@@ -0,0 +1,51 @@
|
||||
local t = Def.ActorFrame{
|
||||
LoadActor(THEME:GetPathG("_click","target"))..{
|
||||
InitCommand=cmd(diffusealpha,0;Real);
|
||||
LeftClickMessageCommand=function(self)
|
||||
MESSAGEMAN:Broadcast("MouseInput", { Input = "Left" });
|
||||
end;
|
||||
RightClickMessageCommand=function(self)
|
||||
MESSAGEMAN:Broadcast("MouseInput", { Input = "Right" });
|
||||
end;
|
||||
MiddleClickMessageCommand=function(self)
|
||||
MESSAGEMAN:Broadcast("MouseInput", { Input = "Middle" });
|
||||
end;
|
||||
MouseWheelUpMessageCommand=function(self)
|
||||
MESSAGEMAN:Broadcast("MouseInput", { Input = "WheelUp" });
|
||||
end;
|
||||
MouseWheelDownMessageCommand=function(self)
|
||||
MESSAGEMAN:Broadcast("MouseInput", { Input = "WheelDown" });
|
||||
end;
|
||||
MouseInputMessageCommand=function(self,param)
|
||||
local cX = INPUTFILTER:GetMouseX()
|
||||
local cY = INPUTFILTER:GetMouseY()
|
||||
if param.Input == "Left" then
|
||||
self:stoptweening()
|
||||
self:x(cX)
|
||||
self:y(cY)
|
||||
self:diffusealpha(1)
|
||||
self:sleep(1)
|
||||
self:diffusealpha(0)
|
||||
end
|
||||
end
|
||||
};
|
||||
LoadFont("common normal")..{
|
||||
Name="Coords";
|
||||
InitCommand=cmd(shadowlength,1;zoom,0.5;align,0,1);
|
||||
MouseInputMessageCommand=function(self,param)
|
||||
local cX = INPUTFILTER:GetMouseX()
|
||||
local cY = INPUTFILTER:GetMouseY()
|
||||
if param.Input == "Left" then
|
||||
self:stoptweening()
|
||||
self:x(cX + 8)
|
||||
self:y(cY + 16)
|
||||
self:settext("(".. string.format("%i",cX) ..",".. string.format("%i",cY) ..")")
|
||||
self:diffusealpha(1)
|
||||
self:sleep(1)
|
||||
self:diffusealpha(0)
|
||||
end
|
||||
end
|
||||
};
|
||||
};
|
||||
|
||||
return t;
|
||||
@@ -0,0 +1,32 @@
|
||||
local t = Def.ActorFrame{};
|
||||
|
||||
local mou = Def.ActorFrame{
|
||||
LoadFont("common normal")..{
|
||||
Name="Coords";
|
||||
InitCommand=cmd(align,0,0;x,SCREEN_LEFT+8;y,SCREEN_BOTTOM-48);
|
||||
};
|
||||
};
|
||||
local function UpdateMouse(self)
|
||||
local coords = self:GetChild("Coords")
|
||||
local mouseX = INPUTFILTER:GetMouseX()
|
||||
local mouseY = INPUTFILTER:GetMouseY()
|
||||
local text = "[Mouse] X: ".. mouseX .." Y: ".. mouseY;
|
||||
coords:settext(text)
|
||||
end
|
||||
mou.InitCommand=cmd(SetUpdateFunction,UpdateMouse);
|
||||
t[#t+1] = mou;
|
||||
|
||||
t[#t+1] = Def.ActorFrame{
|
||||
LoadFont("Common normal")..{
|
||||
Name="Title";
|
||||
Text=THEME:GetString("MouseTest","Title");
|
||||
InitCommand=cmd(CenterX;y,SCREEN_TOP+28;diffuse,color("#333333"));
|
||||
};
|
||||
LoadFont("Common normal")..{
|
||||
Name="Instructions";
|
||||
Text=THEME:GetString("MouseTest","Instructions");
|
||||
InitCommand=cmd(x,SCREEN_LEFT+12;align,0,0;y,SCREEN_TOP+42;diffuse,color("#333333");zoom,16/24;wrapwidthpixels,SCREEN_WIDTH*1.5);
|
||||
};
|
||||
};
|
||||
|
||||
return t;
|
||||
@@ -0,0 +1,43 @@
|
||||
local gc = Var("GameCommand");
|
||||
local index = gc:GetIndex();
|
||||
local name = gc:GetName();
|
||||
local text = gc:GetText();
|
||||
|
||||
local itemColors = {
|
||||
HSV(128, 0.6, 0.85), -- play
|
||||
HSV(192, 0.6, 0.85), -- options
|
||||
HSV(160, 0.6, 0.85), -- customization
|
||||
HSV( 64, 0.6, 0.85), -- edit
|
||||
HSV( 0, 0.6, 0.85), -- exit
|
||||
};
|
||||
|
||||
local t = Def.ActorFrame{
|
||||
--[[
|
||||
Def.Actor{
|
||||
Name="TitleMenuController";
|
||||
GainFocusCommand=function(self)
|
||||
MESSAGEMAN:Broadcast("TitleChange",{NewColor=itemColors[index+1]});
|
||||
end;
|
||||
};
|
||||
]]
|
||||
LoadFont("Common Normal")..{
|
||||
Text=Screen.String(text);
|
||||
InitCommand=cmd(diffuse,color("1,1,1,1"));
|
||||
DisabledCommand=cmd(diffuse,color("0.5,0.5,0.5,0.85"));
|
||||
--GainFocusCommand=cmd(stoptweening;linear,0.25;diffuse,itemColors[index+1]);
|
||||
GainFocusCommand=cmd(stoptweening;linear,0.25;diffuse,color("1,0.2,0.2,1"));
|
||||
LoseFocusCommand=cmd(stoptweening;linear,0.25;diffuse,color("1,1,1,1"));
|
||||
};
|
||||
--[[ begin triangle ]]
|
||||
Def.Quad{
|
||||
InitCommand=cmd(x,-SCREEN_WIDTH*0.105;zoomto,8,24;zwrite,true;blend,'BlendMode_NoEffect');
|
||||
};
|
||||
Def.Quad{
|
||||
InitCommand=cmd(x,-SCREEN_WIDTH*0.1;zoomto,12,12;rotationz,45;diffuselowerleft,color("0,0,0,0");ztest,true);
|
||||
GainFocusCommand=cmd(stoptweening;visible,true);
|
||||
LoseFocusCommand=cmd(stoptweening;visible,false);
|
||||
};
|
||||
--[[ end triangle ]]
|
||||
};
|
||||
|
||||
return t;
|
||||
|
After Width: | Height: | Size: 341 B |
@@ -0,0 +1,6 @@
|
||||
[Common]
|
||||
WindowTitle=sm-ssc Mouse Test
|
||||
|
||||
[MouseTest]
|
||||
Title=sm-ssc Mouse Test
|
||||
Instructions=Move around with the mouse. You'll see some coordinates in the bottom right, and when you click, a target appears.
|
||||
@@ -0,0 +1,3 @@
|
||||
[ThemeInfo]
|
||||
DisplayName=sm-ssc Mouse Test
|
||||
Author=sm-ssc Developers
|
||||
@@ -0,0 +1,15 @@
|
||||
# sm-ssc Mouse Test theme
|
||||
[Common]
|
||||
InitialScreen="ScreenTitleMenu"
|
||||
|
||||
[ScreenTitleMenu]
|
||||
IdleTimeoutSeconds=-1
|
||||
IdleTimeoutScreen="ScreenTitleMenu"
|
||||
|
||||
ChoiceNames="1,2"
|
||||
Choice1="screen,ScreenOptionsService;text,Options"
|
||||
Choice2="screen,ScreenExit;text,Exit"
|
||||
|
||||
[ScreenOptionsService]
|
||||
PrevScreen="ScreenTitleMenu"
|
||||
NextScreen="ScreenTitleMenu"
|
||||
@@ -50,6 +50,8 @@ function ScreenSelectMusic:setupmusicstagemods()
|
||||
GAMESTATE:SetPreferredDifficulty( pn, difficulty )
|
||||
MESSAGEMAN:Broadcast( "PlayerOptionsChanged", {PlayerNumber = pn} )
|
||||
end
|
||||
|
||||
-- if PREFSMAN:GetPreference("
|
||||
|
||||
GAMESTATE:SetSongOptions( "ModsLevel_Stage", so )
|
||||
MESSAGEMAN:Broadcast( "SongOptionsChanged" )
|
||||
|
||||
@@ -196,7 +196,7 @@ ScrollRoulette=false
|
||||
[BitmapText]
|
||||
# The colors in the 'roulette' text. you can have alot!
|
||||
NumRainbowColors=7
|
||||
RainbowColor1=color("1.0,1.0,1.0,1") -- red
|
||||
RainbowColor1=color("1.0,0.0,0.4,1") -- red
|
||||
RainbowColor2=color("0.8,0.2,0.6,1") -- pink
|
||||
RainbowColor3=color("0.4,0.3,0.5,1") -- purple
|
||||
RainbowColor4=color("0.2,0.6,1.0,1") -- sky blue
|
||||
|
||||
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,512 @@
|
||||
local t = Def.ActorFrame{}
|
||||
|
||||
local newBPS;
|
||||
local oldBPS;
|
||||
|
||||
|
||||
-- DECORATIONS ////////////////////////
|
||||
|
||||
-- Left Hex Corner Decoration
|
||||
t[#t+1] = LoadActor("decoration_corner") .. {
|
||||
InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_1));
|
||||
OnCommand=cmd(horizalign,left;x,SCREEN_LEFT;vertalign,top;y,SCREEN_TOP;zoomy,0.4;zoomx,0.6;diffusealpha,0.3;blend,Blend.Add);
|
||||
};
|
||||
|
||||
-- Right Hex Corner Decoration
|
||||
t[#t+1] = LoadActor("decoration_corner") .. {
|
||||
InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_2));
|
||||
OnCommand=cmd(horizalign,left;x,SCREEN_RIGHT;vertalign,top;y,SCREEN_TOP;zoomy,0.4;;zoomx,-0.6;diffusealpha,0.3;blend,Blend.Add);
|
||||
};
|
||||
|
||||
|
||||
-- WAVY LINE (thanks AJ) ////////////////////////
|
||||
|
||||
|
||||
--P1
|
||||
t[#t+1] = LoadActor("hot_lores") .. {
|
||||
OnCommand=cmd(diffusealpha,0;visible,GAMESTATE:IsHumanPlayer(PLAYER_1);horizalign,left;x,SCREEN_LEFT+18;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,SCREEN_WIDTH/2-26;texcoordvelocity,0.1,0;queuecommand,"Begin");
|
||||
BeginCommand=function(self)
|
||||
local style = GAMESTATE:GetCurrentStyle();
|
||||
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
|
||||
self:visible(false);
|
||||
else
|
||||
local move = GAMESTATE:GetSongBPS()/2
|
||||
if GAMESTATE:GetSongFreeze() then
|
||||
move = 0;
|
||||
end
|
||||
self:texcoordvelocity(move,0);
|
||||
self:sleep(0.001);
|
||||
self:queuecommand("Begin");
|
||||
end;
|
||||
end;
|
||||
LifeChangedMessageCommand=function(self,params)
|
||||
if params.Player == PLAYER_1 then
|
||||
local lifeP1=params.LifeMeter:GetLife();
|
||||
if lifeP1>=THEME:GetMetric("LifeMeterBar", "HotValue") then
|
||||
self:diffusealpha(0.5);
|
||||
else
|
||||
self:diffusealpha(0);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
};
|
||||
|
||||
--P2
|
||||
t[#t+1] = LoadActor("hot_lores") .. {
|
||||
OnCommand=cmd(diffusealpha,0;visible,GAMESTATE:IsHumanPlayer(PLAYER_2);horizalign,left;x,SCREEN_RIGHT-18;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,(SCREEN_WIDTH/2-26)*-1;texcoordvelocity,0.1,0;queuecommand,"Begin");
|
||||
BeginCommand=function(self)
|
||||
local style = GAMESTATE:GetCurrentStyle();
|
||||
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
|
||||
self:visible(false);
|
||||
else
|
||||
local move = GAMESTATE:GetSongBPS()/2
|
||||
if GAMESTATE:GetSongFreeze() then
|
||||
move = 0;
|
||||
end
|
||||
self:texcoordvelocity(move,0);
|
||||
self:sleep(0.001);
|
||||
self:queuecommand("Begin");
|
||||
end;
|
||||
end;
|
||||
LifeChangedMessageCommand=function(self,params)
|
||||
if params.Player == PLAYER_2 then
|
||||
local lifeP2=params.LifeMeter:GetLife();
|
||||
if lifeP2>=THEME:GetMetric("LifeMeterBar", "HotValue") then
|
||||
self:diffusealpha(0.5);
|
||||
else
|
||||
self:diffusealpha(0);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
};
|
||||
|
||||
--Double
|
||||
--customtexturerect,0,0,[PixelsToCoverWidth]/[ImageWidth],[PixelsToCoverHeight]/[ImageHeight]
|
||||
--I said that I was gonna write it down. thx midi
|
||||
|
||||
t[#t+1] = LoadActor("hot_lores") .. {
|
||||
OnCommand=cmd(diffusealpha,0;horizalign,left;x,SCREEN_LEFT+18;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,SCREEN_WIDTH-36;texcoordvelocity,0.1,0;customtexturerect,0,0,600/(SCREEN_WIDTH-36),1;queuecommand,"Begin");
|
||||
BeginCommand=function(self)
|
||||
local style = GAMESTATE:GetCurrentStyle();
|
||||
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
|
||||
local move = GAMESTATE:GetSongBPS()/2
|
||||
if GAMESTATE:GetSongFreeze() then
|
||||
move = 0;
|
||||
end
|
||||
self:texcoordvelocity(move,0);
|
||||
self:sleep(0.001);
|
||||
self:queuecommand("Begin");
|
||||
else
|
||||
self:visible(false);
|
||||
end;
|
||||
end;
|
||||
LifeChangedMessageCommand=function(self,params)
|
||||
local life=params.LifeMeter:GetLife();
|
||||
if life>=THEME:GetMetric("LifeMeterBar", "HotValue") then
|
||||
self:diffusealpha(0.5);
|
||||
else
|
||||
self:diffusealpha(0);
|
||||
end;
|
||||
end;
|
||||
};
|
||||
|
||||
|
||||
-- DANGER ////////////////////////
|
||||
|
||||
|
||||
--DANGER P1 single
|
||||
t[#t+1] = LoadActor("danger") .. {
|
||||
InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_1);horizalign,left;x,SCREEN_LEFT+18;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,SCREEN_WIDTH/2-26;zoomy,0.5);
|
||||
OnCommand=cmd(effectclock,"bgm";diffusealpha,1;linear,0.2;diffusealpha,0.25;linear,0.2;diffusealpha,1;queuecommand,"On");
|
||||
LifeChangedMessageCommand=function(self,params)
|
||||
if params.Player == PLAYER_1 then
|
||||
local lifeP1 = params.LifeMeter:GetLife();
|
||||
if lifeP1 <= THEME:GetMetric("LifeMeterBar", "DangerThreshold") then
|
||||
local style = GAMESTATE:GetCurrentStyle();
|
||||
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
|
||||
self:visible(false);
|
||||
else
|
||||
self:visible(true);
|
||||
end;
|
||||
else
|
||||
self:visible(false);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
};
|
||||
|
||||
--DANGER P2 single
|
||||
t[#t+1] = LoadActor("danger") .. {
|
||||
InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_2);horizalign,right;x,SCREEN_RIGHT-18;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,SCREEN_WIDTH/2-26;zoomy,0.5);
|
||||
OnCommand=cmd(effectclock,"bgm";diffusealpha,1;linear,0.2;diffusealpha,0.25;linear,0.2;diffusealpha,1;queuecommand,"On");
|
||||
LifeChangedMessageCommand=function(self,params)
|
||||
if params.Player == PLAYER_2 then
|
||||
local lifeP2 = params.LifeMeter:GetLife();
|
||||
if lifeP2 <= THEME:GetMetric("LifeMeterBar", "DangerThreshold") then
|
||||
local style = GAMESTATE:GetCurrentStyle();
|
||||
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
|
||||
self:visible(false);
|
||||
else
|
||||
self:visible(true);
|
||||
end;
|
||||
else
|
||||
self:visible(false);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
};
|
||||
|
||||
--DANGER double
|
||||
t[#t+1] = LoadActor("danger") .. {
|
||||
InitCommand=cmd(visible,false;horizalign,center;x,SCREEN_CENTER_X;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,SCREEN_WIDTH-36;zoomy,0.5);
|
||||
OnCommand=cmd(effectclock,"bgm";diffusealpha,1;linear,0.2;diffusealpha,0.25;linear,0.2;diffusealpha,1;queuecommand,"On");
|
||||
LifeChangedMessageCommand=function(self,params)
|
||||
local life = params.LifeMeter:GetLife();
|
||||
local style = GAMESTATE:GetCurrentStyle();
|
||||
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
|
||||
if life <= THEME:GetMetric("LifeMeterBar", "DangerThreshold") then
|
||||
self:visible(true);
|
||||
else
|
||||
self:visible(false);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
};
|
||||
|
||||
|
||||
|
||||
-- METERS ////////////////////////
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
---basemeter masked P1
|
||||
t[#t+1] = LoadActor("basemeter") .. {
|
||||
InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_1);horizalign,left;x,SCREEN_LEFT+18;valign,0.5;y,SCREEN_TOP+41;zoomy,0.5;blend,Blend.Add);
|
||||
OnCommand=cmd(bounce;effectmagnitude,-40,0,0;effectclock,"bgm";effecttiming,2,0,0,0;);
|
||||
LifeChangedMessageCommand=function(self,params)
|
||||
if params.Player == PLAYER_1 then
|
||||
local style = GAMESTATE:GetCurrentStyle();
|
||||
local lifeP1 = params.LifeMeter:GetLife();
|
||||
if GAMESTATE:IsHumanPlayer(PLAYER_1)==true then
|
||||
if lifeP1==0 then
|
||||
self:visible(false);
|
||||
else
|
||||
|
||||
if lifeP1==1 then
|
||||
self:effectmagnitude(0,0,0);
|
||||
else
|
||||
self:effectmagnitude(-40,0,0);
|
||||
end;
|
||||
|
||||
self:visible(true);
|
||||
end
|
||||
end
|
||||
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
|
||||
self:zoomtowidth((SCREEN_WIDTH-40)*lifeP1+5);
|
||||
else
|
||||
self:zoomtowidth((SCREEN_WIDTH/2-26)*lifeP1);
|
||||
end;
|
||||
|
||||
end;
|
||||
end;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
---basemeter masked P2
|
||||
t[#t+1] = LoadActor("basemeter") .. {
|
||||
InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_2);horizalign,right;x,SCREEN_RIGHT+18;valign,0.5;y,SCREEN_TOP+41;zoomy,0.5;blend,Blend.Add;queuecommand,"Set");
|
||||
OnCommand=cmd(bob;effectmagnitude,40,0,0;effectclock,"bgm";effecttiming,1,0,0,0;);
|
||||
SetCommand=function(self,params)
|
||||
local style = GAMESTATE:GetCurrentStyle();
|
||||
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
|
||||
self:effectmagnitude(-40,0,0);
|
||||
self:horizalign(left);
|
||||
self:x(SCREEN_LEFT+18);
|
||||
end;
|
||||
end;
|
||||
|
||||
LifeChangedMessageCommand=function(self,params)
|
||||
if params.Player == PLAYER_2 then
|
||||
local style = GAMESTATE:GetCurrentStyle();
|
||||
local lifeP2 = params.LifeMeter:GetLife();
|
||||
if GAMESTATE:IsHumanPlayer(PLAYER_2)==true then
|
||||
if lifeP2==0 then
|
||||
self:visible(false);
|
||||
else
|
||||
|
||||
if lifeP2==1 then
|
||||
self:effectmagnitude(0,0,0);
|
||||
else
|
||||
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
|
||||
self:effectmagnitude(-40,0,0);
|
||||
else
|
||||
self:effectmagnitude(40,0,0);
|
||||
end
|
||||
end;
|
||||
|
||||
self:visible(true);
|
||||
end
|
||||
end
|
||||
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
|
||||
self:zoomtowidth((SCREEN_WIDTH-40)*lifeP2);
|
||||
else
|
||||
self:zoomtowidth(((SCREEN_WIDTH/2-26)*lifeP2)+40);
|
||||
end;
|
||||
|
||||
end;
|
||||
end;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
-- FRAMES & TIPS ////////////////////////
|
||||
|
||||
|
||||
-- Left Corner
|
||||
t[#t+1] = LoadActor("mask") .. {
|
||||
OnCommand=cmd(horizalign,right;x,SCREEN_LEFT+130;vertalign,top;y,SCREEN_TOP+12;zoom,0.45;queuecommand,"Set");
|
||||
SetCommand = function(self)
|
||||
local style = GAMESTATE:GetCurrentStyle();
|
||||
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
|
||||
self:visible(true);
|
||||
else
|
||||
if GAMESTATE:IsHumanPlayer(PLAYER_1) == true then
|
||||
self:visible(true);
|
||||
else
|
||||
self:visible(false);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
};
|
||||
|
||||
-- Right Corner
|
||||
t[#t+1] = LoadActor("mask") .. {
|
||||
OnCommand=cmd(horizalign,right;x,SCREEN_RIGHT-130;vertalign,top;y,SCREEN_TOP+12;zoomx,-0.45;zoomy,0.45;queuecommand,"Set");
|
||||
SetCommand = function(self)
|
||||
local style = GAMESTATE:GetCurrentStyle();
|
||||
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
|
||||
self:visible(true);
|
||||
else
|
||||
if GAMESTATE:IsHumanPlayer(PLAYER_2) == true then
|
||||
self:visible(true);
|
||||
else
|
||||
self:visible(false);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
};
|
||||
|
||||
|
||||
-- Left Corner
|
||||
t[#t+1] = LoadActor("corner") .. {
|
||||
OnCommand=cmd(horizalign,left;x,SCREEN_LEFT+15;vertalign,top;y,SCREEN_TOP+16;zoom,0.75;queuecommand,"Set");
|
||||
SetCommand = function(self)
|
||||
local style = GAMESTATE:GetCurrentStyle();
|
||||
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
|
||||
self:visible(true);
|
||||
else
|
||||
if GAMESTATE:IsHumanPlayer(PLAYER_1) == true then
|
||||
self:visible(true);
|
||||
else
|
||||
self:visible(false);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
};
|
||||
|
||||
-- Right Corner
|
||||
t[#t+1] = LoadActor("corner") .. {
|
||||
OnCommand=cmd(horizalign,left;x,SCREEN_RIGHT-15;vertalign,top;y,SCREEN_TOP+16;zoomx,-0.75;zoomy,0.75;queuecommand,"Set");
|
||||
SetCommand = function(self)
|
||||
local style = GAMESTATE:GetCurrentStyle();
|
||||
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
|
||||
self:visible(true);
|
||||
else
|
||||
if GAMESTATE:IsHumanPlayer(PLAYER_2) == true then
|
||||
self:visible(true);
|
||||
else
|
||||
self:visible(false);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
};
|
||||
|
||||
-- Center Corner Left
|
||||
t[#t+1] = LoadActor("center") .. {
|
||||
OnCommand=cmd(horizalign,left;x,SCREEN_CENTER_X+5;vertalign,top;y,SCREEN_TOP+16;zoomx,-0.75;zoomy,0.75;queuecommand,"Set");
|
||||
SetCommand = function(self)
|
||||
local style = GAMESTATE:GetCurrentStyle();
|
||||
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
|
||||
self:visible(false);
|
||||
else
|
||||
if GAMESTATE:IsHumanPlayer(PLAYER_1) == true then
|
||||
self:visible(true);
|
||||
else
|
||||
self:visible(false);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
};
|
||||
|
||||
-- Center Corner Right
|
||||
t[#t+1] = LoadActor("center") .. {
|
||||
OnCommand=cmd(horizalign,left;x,SCREEN_CENTER_X-5;vertalign,top;y,SCREEN_TOP+16;zoom,0.75;queuecommand,"Set");
|
||||
SetCommand = function(self)
|
||||
local style = GAMESTATE:GetCurrentStyle();
|
||||
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
|
||||
self:visible(false);
|
||||
else
|
||||
if GAMESTATE:IsHumanPlayer(PLAYER_2) == true then
|
||||
self:visible(true);
|
||||
else
|
||||
self:visible(false);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
};
|
||||
|
||||
-- Center part 1
|
||||
t[#t+1] = LoadActor("frame") .. {
|
||||
OnCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_1);horizalign,left;x,SCREEN_LEFT+52.5;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,SCREEN_WIDTH/2-85;zoomy,0.75;queuecommand,"Set";);
|
||||
SetCommand = function(self)
|
||||
local style = GAMESTATE:GetCurrentStyle();
|
||||
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
|
||||
self:zoomtowidth(SCREEN_WIDTH-105);
|
||||
self:visible(true)
|
||||
else
|
||||
if GAMESTATE:IsHumanPlayer(PLAYER_1) == false then
|
||||
self:visible(false)
|
||||
else
|
||||
self:visible(true)
|
||||
end
|
||||
end;
|
||||
end;
|
||||
};
|
||||
|
||||
-- Center part 2
|
||||
t[#t+1] = LoadActor("frame") .. {
|
||||
OnCommand=cmd(horizalign,right;x,SCREEN_RIGHT-52.5;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,SCREEN_WIDTH/2-85;zoomy,0.75;queuecommand,"Set";);
|
||||
SetCommand = function(self)
|
||||
local style = GAMESTATE:GetCurrentStyle();
|
||||
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
|
||||
self:visible(false)
|
||||
else
|
||||
if GAMESTATE:IsHumanPlayer(PLAYER_2) == true then
|
||||
self:visible(true)
|
||||
else
|
||||
self:visible(false)
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
};
|
||||
|
||||
|
||||
|
||||
---tip P1
|
||||
t[#t+1] = LoadActor("tip") .. {
|
||||
InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_1);valign,0.5;y,SCREEN_TOP+41;zoom,0.5;blend,Blend.Add;queuecommand,"Set");
|
||||
--OnCommand=cmd(bob;effectmagnitude,-40,0,0;effectclock,"bgm";effecttiming,1,0,0,0;);
|
||||
LifeChangedMessageCommand=function(self,params)
|
||||
if params.Player == PLAYER_1 then
|
||||
local style = GAMESTATE:GetCurrentStyle();
|
||||
local lifeP1 = params.LifeMeter:GetLife();
|
||||
if GAMESTATE:IsHumanPlayer(PLAYER_1)==true then
|
||||
if lifeP1==0 then
|
||||
self:visible(false);
|
||||
else
|
||||
self:visible(true);
|
||||
end
|
||||
end
|
||||
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
|
||||
self:x((SCREEN_WIDTH-40)*lifeP1+20);
|
||||
else
|
||||
self:x((SCREEN_WIDTH/2-26)*lifeP1+20);
|
||||
end;
|
||||
|
||||
end;
|
||||
end;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
---tip P2
|
||||
t[#t+1] = LoadActor("tip") .. {
|
||||
InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_2);valign,0.5;y,SCREEN_TOP+41;zoom,0.5;blend,Blend.Add;);
|
||||
--OnCommand=cmd(bob;effectmagnitude,40,0,0;effectclock,"bgm";effecttiming,1,0,0,0;);
|
||||
LifeChangedMessageCommand=function(self,params)
|
||||
if params.Player == PLAYER_2 then
|
||||
local style = GAMESTATE:GetCurrentStyle();
|
||||
local lifeP2 = params.LifeMeter:GetLife();
|
||||
local fullstate;
|
||||
if GAMESTATE:IsHumanPlayer(PLAYER_2)==true then
|
||||
if lifeP2==0 then
|
||||
self:visible(false);
|
||||
else
|
||||
self:visible(true);
|
||||
end
|
||||
end
|
||||
if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
|
||||
self:x((SCREEN_WIDTH-40)*lifeP2+20);
|
||||
else
|
||||
self:x(SCREEN_RIGHT-((SCREEN_WIDTH/2-26)*lifeP2)-20);
|
||||
end;
|
||||
|
||||
end;
|
||||
end;
|
||||
|
||||
};
|
||||
|
||||
-- NAMES ////////////////////////
|
||||
|
||||
--P1 NAME
|
||||
t[#t+1] = LoadFont("Common Normal") .. {
|
||||
InitCommand=cmd(horizalign,left;x,SCREEN_LEFT+30;y,SCREEN_TOP+15;zoom,0.4;shadowlength,1;uppercase,true);
|
||||
BeginCommand=function(self)
|
||||
local profile = PROFILEMAN:GetProfile(PLAYER_1);
|
||||
local name = profile:GetDisplayName();
|
||||
|
||||
if GAMESTATE:IsHumanPlayer(PLAYER_1) == true then
|
||||
if name=="" then
|
||||
self:settext("Player 1");
|
||||
else
|
||||
self:settext( name );
|
||||
end
|
||||
end
|
||||
|
||||
end;
|
||||
|
||||
};
|
||||
|
||||
--P2 NAME
|
||||
t[#t+1] = LoadFont("Common Normal") .. {
|
||||
InitCommand=cmd(horizalign,right;x,SCREEN_RIGHT-30;y,SCREEN_TOP+15;zoom,0.4;shadowlength,1;uppercase,true);
|
||||
BeginCommand=function(self)
|
||||
local profile = PROFILEMAN:GetProfile(PLAYER_2);
|
||||
local name = profile:GetDisplayName();
|
||||
|
||||
if GAMESTATE:IsHumanPlayer(PLAYER_2) == true then
|
||||
if name=="" then
|
||||
self:settext("Player 2");
|
||||
else
|
||||
self:settext( name );
|
||||
end
|
||||
end
|
||||
end;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
return t
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
@@ -0,0 +1 @@
|
||||
return Def.ActorFrame {};
|
||||
@@ -0,0 +1,3 @@
|
||||
[ThemeInfo]
|
||||
DisplayName=Midi Dev Theme
|
||||
Author=Midiman
|
||||
@@ -0,0 +1,5 @@
|
||||
[Global]
|
||||
FallbackTheme=default
|
||||
[ScreenGameplay]
|
||||
LifeP1OnCommand=visible,false
|
||||
LifeP2OnCommand=visible,false
|
||||
@@ -0,0 +1,63 @@
|
||||
local vStats = STATSMAN:GetCurStageStats();
|
||||
local function CreateStats( pnPlayer )
|
||||
-- Actor Templates
|
||||
local aLabel = LoadFont("Common Normal") .. { Text="..."; InitCommand=cmd(zoom,0.5;shadowlength,1;horizalign,left); };
|
||||
local aText = LoadFont("Common Normal") .. { Text="..."; InitCommand=cmd(zoom,0.5;shadowlength,1;horizalign,left); };
|
||||
-- DA STATS, JIM!!
|
||||
local pnStageStats = vStats:GetPlayerStageStats( pnPlayer );
|
||||
-- Organized Stats.
|
||||
local tStats = {
|
||||
W1 = pnStageStats:GetTapNoteScores('TapNoteScore_W1');
|
||||
W2 = pnStageStats:GetTapNoteScores('TapNoteScore_W2');
|
||||
W3 = pnStageStats:GetTapNoteScores('TapNoteScore_W3');
|
||||
W4 = pnStageStats:GetTapNoteScores('TapNoteScore_W4');
|
||||
W5 = pnStageStats:GetTapNoteScores('TapNoteScore_W5');
|
||||
Miss = pnStageStats:GetTapNoteScores('TapNoteScore_Miss');
|
||||
HitMine = pnStageStats:GetTapNoteScores('TapNoteScore_HitMine');
|
||||
AvoidMine = pnStageStats:GetTapNoteScores('TapNoteScore_AvoidMine');
|
||||
Held = pnStageStats:GetHoldNoteScores('HoldNoteScore_Held');
|
||||
LetGo = pnStageStats:GetHoldNoteScores('HoldNoteScore_LetGo');
|
||||
};
|
||||
-- Organized Equation Values
|
||||
local tValues = {
|
||||
-- marvcount*7 + perfcount*6 + greatcount*5 + goodcount*4 + boocount*2 + okcount*7
|
||||
ITG = ( tStats["W1"]*7 + tStats["W2"]*6 + tStats["W3"]*5 + tStats["W4"]*4 + tStats["W5"]*2 + tStats["Held"]*7 ),
|
||||
-- (marvcount + perfcount + greatcount + goodcount + boocount + misscount + okcount + ngcount)*7
|
||||
ITG_MAX = ( tStats["W1"] + tStats["W2"] + tStats["W3"] + tStats["W4"] + tStats["W5"] + tStats["Miss"] + tStats["Held"] + tStats["LetGo"] )*7,
|
||||
-- marvcount*3 + perfcount*2 + greatcount*1 - boocount*4 - misscount*8 + okcount*6
|
||||
MIGS = ( tStats["W1"]*3 + tStats["W2"]*2 + tStats["W3"] - tStats["W5"]*4 - tStats["Miss"]*8 + tStats["Held"]*6 ),
|
||||
-- (marvcount + perfcount + greatcount + goodcount + boocount + misscount)*3 + (okcount + ngcount)*6
|
||||
MIGS_MAX = ( (tStats["W1"] + tStats["W2"] + tStats["W3"] + tStats["W4"] + tStats["W5"] + tStats["Miss"])*3 + (tStats["Held"] + tStats["LetGo"])*6 ),
|
||||
|
||||
};
|
||||
--
|
||||
local t = Def.ActorFrame {};
|
||||
t[#t+1] = Def.ActorFrame {
|
||||
InitCommand=cmd(y,-16);
|
||||
LoadActor(THEME:GetPathG("ScreenTitleMenu","PreferenceFrame")) .. {
|
||||
InitCommand=cmd(zoom,0.875;diffuse,PlayerColor( pnPlayer ));
|
||||
};
|
||||
aLabel .. { Text="ITG DP:"; InitCommand=cmd(x,-64) };
|
||||
aText .. { Text=string.format("%04i",tValues["ITG"]); InitCommand=cmd(x,-8;y,5;vertalign,bottom;zoom,0.675); };
|
||||
aText .. { Text="/"; InitCommand=cmd(x,28;y,5;vertalign,bottom;zoom,0.5;diffusealpha,0.5); };
|
||||
aText .. { Text=string.format("%04i",tValues["ITG_MAX"]); InitCommand=cmd(x,32;y,5;vertalign,bottom;zoom,0.5); };
|
||||
};
|
||||
t[#t+1] = Def.ActorFrame {
|
||||
InitCommand=cmd(y,16);
|
||||
LoadActor(THEME:GetPathG("ScreenTitleMenu","PreferenceFrame")) .. {
|
||||
InitCommand=cmd(zoom,0.875;diffuse,PlayerColor( pnPlayer ));
|
||||
};
|
||||
aLabel .. { Text="MIGS DP:"; InitCommand=cmd(x,-64) };
|
||||
aText .. { Text=string.format("%04i",tValues["MIGS"]); InitCommand=cmd(x,-8;y,5;vertalign,bottom;zoom,0.675); };
|
||||
aText .. { Text="/"; InitCommand=cmd(x,28;y,5;vertalign,bottom;zoom,0.5;diffusealpha,0.5); };
|
||||
aText .. { Text=string.format("%04i",tValues["MIGS_MAX"]); InitCommand=cmd(x,32;y,5;vertalign,bottom;zoom,0.5); };
|
||||
};
|
||||
return t
|
||||
end;
|
||||
local t = Def.ActorFrame {};
|
||||
t[#t+1] = Def.ActorFrame {
|
||||
InitCommand=cmd(x,math.floor(SCREEN_CENTER_X*0.5)-8;y,SCREEN_CENTER_Y);
|
||||
--
|
||||
CreateStats( PLAYER_1 );
|
||||
};
|
||||
return t
|
||||
@@ -0,0 +1,86 @@
|
||||
local ss = STATSMAN:GetCurStageStats();
|
||||
local pss = ss:GetPlayerStageStats('PlayerNumber_P1');
|
||||
local misscount = pss:GetTapNoteScores('TapNoteScore_Miss');
|
||||
local boocount = pss:GetTapNoteScores('TapNoteScore_W5');
|
||||
local goodcount = pss:GetTapNoteScores('TapNoteScore_W4');
|
||||
local greatcount = pss:GetTapNoteScores('TapNoteScore_W3');
|
||||
local perfcount = pss:GetTapNoteScores('TapNoteScore_W2');
|
||||
local marvcount = pss:GetTapNoteScores('TapNoteScore_W1');
|
||||
local minehitcount = pss:GetTapNoteScores('TapNoteScore_HitMine');
|
||||
local minemisscount = pss:GetTapNoteScores('TapNoteScore_AvoidMine');
|
||||
local okcount = pss:GetHoldNoteScores('HoldNoteScore_Held');
|
||||
local ngcount = pss:GetHoldNoteScores('HoldNoteScore_LetGo');
|
||||
local ITGdp = marvcount*7 + perfcount*6 + greatcount*5 + goodcount*4 + boocount*2 + okcount*7
|
||||
local ITGdpmax = (marvcount + perfcount + greatcount + goodcount + boocount + misscount + okcount + ngcount)*7
|
||||
local MIGSdp = marvcount*3 + perfcount*2 + greatcount*1 - boocount*4 - misscount*8 + okcount*6
|
||||
local MIGSdpmax = (marvcount + perfcount + greatcount + goodcount + boocount + misscount)*3 + (okcount + ngcount)*6
|
||||
local histogram = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
|
||||
local total = 0
|
||||
local maxValue = 0;
|
||||
print("John11length: "..#histogram);
|
||||
|
||||
for i=1,#tTotalJudgmentsSigned do
|
||||
print("John11Timings: "..i.." - "..tTotalJudgmentsSigned[i])
|
||||
local index = math.floor((0.18-tTotalJudgmentsSigned[i])*(#histogram/.36));
|
||||
print("John11Index: "..i.." - "..index)
|
||||
if index >= 0 and index <= #histogram - 1 then
|
||||
histogram[index] = histogram[index] + 1
|
||||
total = total + 1
|
||||
if histogram[index] > maxValue then
|
||||
maxValue = histogram[index]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for i=1,#histogram do
|
||||
print("John11Judgments: "..i.." - "..histogram[i])
|
||||
end
|
||||
|
||||
local t = Def.ActorFrame {}
|
||||
t[#t+1] = Def.ActorFrame {
|
||||
InitCommand=cmd(x,SCREEN_CENTER_X/3;y,SCREEN_CENTER_Y);
|
||||
LoadFont("Common Normal") .. {
|
||||
Text="MIGS DP: "..tostring(MIGSdp).."/"..tostring(MIGSdpmax).."\nITG DP: "..tostring(ITGdp).."/"..tostring(ITGdpmax).."\nOffset Avg: "..RoundTo(tTimingDifferenceAverage,5).."\nAbs Offset Avg: "..RoundTo(tTimingDifferenceAbsAverage,5).."\nEarly Taps: "..tEarlyHits.."\nLate Taps: "..tLateHits;
|
||||
InitCommand=cmd(y,-4;shadowlength,1;diffuse,Color("Red");zoom,0.5)
|
||||
};
|
||||
}
|
||||
|
||||
for i=1,#histogram do
|
||||
local offset = -1
|
||||
if i > #histogram/2 then
|
||||
offset = 1
|
||||
end
|
||||
t[#t+1] = Def.Quad {
|
||||
InitCommand=cmd(diffuse,Color("Red");zoomtowidth,300/#histogram-1;zoomtoheight,histogram[#histogram-i]/maxValue*150;x,SCREEN_CENTER_X+100+300/#histogram*i+offset;y,SCREEN_CENTER_Y-histogram[#histogram-i]/maxValue*150/2);
|
||||
}
|
||||
end
|
||||
|
||||
t[#t+1] = Def.Quad {
|
||||
InitCommand=cmd(x,SCREEN_CENTER_X+250;y,SCREEN_CENTER_Y+3;zoomtowidth,300;zoomtoheight,5;diffuse,color("#FFFFFF"));
|
||||
}
|
||||
|
||||
t[#t+1] = Def.Quad {
|
||||
InitCommand=cmd(x,SCREEN_CENTER_X+252;y,SCREEN_CENTER_Y-75;zoomtowidth,1;zoomtoheight,150;diffuse,color("#000000"));
|
||||
}
|
||||
|
||||
|
||||
t[#t+1] = Def.ActorFrame {
|
||||
InitCommand=cmd(x,SCREEN_CENTER_X+125;y,SCREEN_CENTER_Y+15);
|
||||
LoadFont("Common Normal") .. {
|
||||
Text="Early";
|
||||
InitCommand=cmd(shadowlength,1;diffuse,Color("#FF0000");zoom,0.5)
|
||||
};
|
||||
}
|
||||
|
||||
t[#t+1] = Def.ActorFrame {
|
||||
InitCommand=cmd(x,SCREEN_CENTER_X+375;y,SCREEN_CENTER_Y+15);
|
||||
LoadFont("Common Normal") .. {
|
||||
Text="Late";
|
||||
InitCommand=cmd(shadowlength,1;diffuse,Color("#FF0000");zoom,0.5)
|
||||
};
|
||||
}
|
||||
|
||||
print("John11Total: "..total)
|
||||
print("John11MaxValue: "..maxValue)
|
||||
|
||||
return t
|
||||
@@ -638,7 +638,7 @@ ShowMeter=true
|
||||
ZeroMeterString="0"
|
||||
MeterX=56
|
||||
MeterY=0
|
||||
MeterOnCommand=shadowlength,1;zoom,0.65
|
||||
MeterOnCommand=shadowlength,1;zoom,0.65;textglowmode,'TextGlowMode_Inner';
|
||||
MeterOffCommand=
|
||||
MeterSetCommand=%function(self,param) \
|
||||
if param.CustomDifficulty then \
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
#---------------------------------------------------------------------------
|
||||
# Project related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
PROJECT_NAME = StepMania
|
||||
PROJECT_NAME = sm-ssc
|
||||
PROJECT_NUMBER =
|
||||
OUTPUT_DIRECTORY = temp
|
||||
CREATE_SUBDIRS = NO
|
||||
CREATE_SUBDIRS = YES
|
||||
OUTPUT_LANGUAGE = English
|
||||
USE_WINDOWS_ENCODING = YES
|
||||
BRIEF_MEMBER_DESC = YES
|
||||
@@ -23,7 +23,7 @@ MULTILINE_CPP_IS_BRIEF = NO
|
||||
DETAILS_AT_TOP = NO
|
||||
INHERIT_DOCS = YES
|
||||
DISTRIBUTE_GROUP_DOC = NO
|
||||
TAB_SIZE = 8
|
||||
TAB_SIZE = 4
|
||||
ALIASES =
|
||||
OPTIMIZE_OUTPUT_FOR_C = NO
|
||||
OPTIMIZE_OUTPUT_JAVA = NO
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
1215D7A208C6559A00B87D8B /* ScreenGameplayNormal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1215D7A008C6559A00B87D8B /* ScreenGameplayNormal.cpp */; };
|
||||
2B30D6821315EA7E00044B68 /* MouseDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B30D6801315EA7E00044B68 /* MouseDevice.cpp */; };
|
||||
2B30D6831315EA7E00044B68 /* MouseDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B30D6811315EA7E00044B68 /* MouseDevice.h */; };
|
||||
2BA7925E1304F20D002BD8E1 /* NotesLoaderSSC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA7925A1304F20D002BD8E1 /* NotesLoaderSSC.cpp */; };
|
||||
2BA7925F1304F20D002BD8E1 /* NotesLoaderSSC.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA7925B1304F20D002BD8E1 /* NotesLoaderSSC.h */; };
|
||||
2BA792601304F20D002BD8E1 /* NotesWriterSSC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA7925C1304F20D002BD8E1 /* NotesWriterSSC.cpp */; };
|
||||
@@ -1772,6 +1774,8 @@
|
||||
1215D7A108C6559A00B87D8B /* ScreenGameplayNormal.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenGameplayNormal.h; path = ../src/ScreenGameplayNormal.h; sourceTree = "<group>"; };
|
||||
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
|
||||
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
|
||||
2B30D6801315EA7E00044B68 /* MouseDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MouseDevice.cpp; sourceTree = "<group>"; };
|
||||
2B30D6811315EA7E00044B68 /* MouseDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MouseDevice.h; sourceTree = "<group>"; };
|
||||
2BA7925A1304F20D002BD8E1 /* NotesLoaderSSC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NotesLoaderSSC.cpp; path = ../src/NotesLoaderSSC.cpp; sourceTree = SOURCE_ROOT; };
|
||||
2BA7925B1304F20D002BD8E1 /* NotesLoaderSSC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NotesLoaderSSC.h; path = ../src/NotesLoaderSSC.h; sourceTree = SOURCE_ROOT; };
|
||||
2BA7925C1304F20D002BD8E1 /* NotesWriterSSC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NotesWriterSSC.cpp; path = ../src/NotesWriterSSC.cpp; sourceTree = SOURCE_ROOT; };
|
||||
@@ -4820,6 +4824,8 @@
|
||||
AA44708C0984720900983E82 /* JoystickDevice.h */,
|
||||
AA4470BB098476F600983E82 /* KeyboardDevice.cpp */,
|
||||
AA4470BA098476F600983E82 /* KeyboardDevice.h */,
|
||||
2B30D6801315EA7E00044B68 /* MouseDevice.cpp */,
|
||||
2B30D6811315EA7E00044B68 /* MouseDevice.h */,
|
||||
AA1F9C4609AF1BF5002C15A8 /* PumpDevice.cpp */,
|
||||
AA1F9C4509AF1BF5002C15A8 /* PumpDevice.h */,
|
||||
AABBFCD209838C3A00F077E2 /* SMMain.mm */,
|
||||
@@ -4928,6 +4934,7 @@
|
||||
EE906F8B12BF3C7C00146C96 /* FileDownload.h in Headers */,
|
||||
2BA7925F1304F20D002BD8E1 /* NotesLoaderSSC.h in Headers */,
|
||||
2BA792611304F20D002BD8E1 /* NotesWriterSSC.h in Headers */,
|
||||
2B30D6831315EA7E00044B68 /* MouseDevice.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -6172,6 +6179,7 @@
|
||||
EE906F8A12BF3C7C00146C96 /* FileDownload.cpp in Sources */,
|
||||
2BA7925E1304F20D002BD8E1 /* NotesLoaderSSC.cpp in Sources */,
|
||||
2BA792601304F20D002BD8E1 /* NotesWriterSSC.cpp in Sources */,
|
||||
2B30D6821315EA7E00044B68 /* MouseDevice.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
||||
@@ -63,6 +63,35 @@ LuaDeclareType( VertAlign );
|
||||
#define align_middle 0.5f
|
||||
/** @brief The bottom vertical alignment constant. */
|
||||
#define align_bottom 1.0f
|
||||
|
||||
/*
|
||||
enum EffectAction
|
||||
{
|
||||
EffectAction_None, // no_effect
|
||||
// [Diffuse]
|
||||
EffectAction_DiffuseBlink, // diffuse_blink
|
||||
EffectAction_DiffuseShift, // diffuse_shift
|
||||
EffectAction_DiffuseRamp, // diffuse_ramp
|
||||
EffectAction_Rainbow, // rainbow
|
||||
// [Glow]
|
||||
EffectAction_GlowBlink, // glow_blink
|
||||
EffectAction_GlowShift, // glow_shift
|
||||
EffectAction_GlowRamp, // glow_ramp
|
||||
// [Translate]
|
||||
EffectAction_Bob,
|
||||
EffectAction_Bounce,
|
||||
EffectAction_Vibrate,
|
||||
// [Rotate]
|
||||
EffectAction_Spin,
|
||||
EffectAction_Wag,
|
||||
// [Zoom]
|
||||
EffectAction_Pulse,
|
||||
NUM_EffectAction,
|
||||
EffectAction_Invalid
|
||||
};
|
||||
LuaDeclareType( EffectAction );
|
||||
*/
|
||||
|
||||
/** @brief Base class for all objects that appear on the screen. */
|
||||
class Actor : public MessageSubscriber
|
||||
{
|
||||
@@ -92,11 +121,59 @@ public:
|
||||
wag, bounce, bob, pulse,
|
||||
spin, vibrate
|
||||
};
|
||||
|
||||
/** @brief Various values an Actor's effect can be tied to. */
|
||||
enum EffectClock
|
||||
{
|
||||
CLOCK_TIMER,
|
||||
CLOCK_TIMER_GLOBAL,
|
||||
CLOCK_BGM_TIME,
|
||||
CLOCK_BGM_BEAT,
|
||||
CLOCK_BGM_TIME_NO_OFFSET,
|
||||
CLOCK_BGM_BEAT_NO_OFFSET,
|
||||
CLOCK_LIGHT_1 = 1000,
|
||||
CLOCK_LIGHT_LAST = 1100,
|
||||
NUM_CLOCKS
|
||||
};
|
||||
|
||||
///** @brief What type of Effect this is. */
|
||||
/*
|
||||
enum EffectType {
|
||||
EffectType_Diffuse,
|
||||
EffectType_Glow,
|
||||
EffectType_Translate,
|
||||
Num_EffectType
|
||||
EffectType_Rotate,
|
||||
EffectType_Zoom,
|
||||
NUM_EffectType,
|
||||
EffectType_Invalid
|
||||
};
|
||||
*/
|
||||
|
||||
// todo: use this instead of the Effect enum -aj
|
||||
/*
|
||||
struct Effect
|
||||
{
|
||||
Effect() : m_Action(EffectAction_None), m_Type(EffectType_Invalid), m_fSecsIntoEffect(0),
|
||||
m_fEffectDelta(0), m_fEffectRampUp(0.5f), m_fEffectHoldAtHalf(0),
|
||||
m_fEffectRampDown(0.5f), m_fEffectHoldAtZero(0), m_fEffectOffset(0),
|
||||
m_EffectClock(CLOCK_TIMER), m_vEffectMagnitude(RageVector3(0,0,10)),
|
||||
m_effectColor1(RageColor(1,1,1,1)), m_effectColor2(RageColor(1,1,1,1))
|
||||
{ }
|
||||
|
||||
EffectAction m_Action;
|
||||
EffectType m_Type; // diffuse, glow, or translate
|
||||
float m_fSecsIntoEffect;
|
||||
float m_fEffectDelta;
|
||||
RageColor m_EffectColor1;
|
||||
RageColor m_EffectColor2;
|
||||
RageVector3 m_vEffectMagnitude;
|
||||
EffectClock m_EffectClock;
|
||||
// units depend on m_EffectClock
|
||||
float m_fEffectRampUp;
|
||||
float m_fEffectHoldAtHalf;
|
||||
float m_fEffectRampDown;
|
||||
float m_fEffectHoldAtZero;
|
||||
float m_fEffectOffset;
|
||||
};
|
||||
*/
|
||||
|
||||
@@ -123,25 +200,16 @@ public:
|
||||
*
|
||||
* If 0, there is no fade. If 1, it's fully faded. */
|
||||
RectF fade;
|
||||
/**
|
||||
* @brief Four values making up the diffuse in this TweenState.
|
||||
*
|
||||
* 0 = UpperLeft, 1 = UpperRight, 2 = LowerLeft, 3 = LowerRight */
|
||||
RageColor diffuse[4];
|
||||
/** @brief The glow color for this TweenState. */
|
||||
RageColor glow;
|
||||
float aux;
|
||||
};
|
||||
|
||||
/** @brief Various values an Actor's effect can be tied to. */
|
||||
enum EffectClock
|
||||
{
|
||||
CLOCK_TIMER,
|
||||
CLOCK_TIMER_GLOBAL,
|
||||
CLOCK_BGM_TIME,
|
||||
CLOCK_BGM_BEAT,
|
||||
CLOCK_BGM_TIME_NO_OFFSET,
|
||||
CLOCK_BGM_BEAT_NO_OFFSET,
|
||||
CLOCK_LIGHT_1 = 1000,
|
||||
CLOCK_LIGHT_LAST = 1100,
|
||||
NUM_CLOCKS
|
||||
};
|
||||
|
||||
void Draw(); // calls, EarlyAbortDraw, BeginDraw, DrawPrimitives, EndDraw
|
||||
virtual bool EarlyAbortDraw() const { return false; } // return true to early abort drawing of this Actor
|
||||
virtual void BeginDraw(); // pushes transform onto world matrix stack
|
||||
@@ -308,7 +376,6 @@ public:
|
||||
|
||||
void StretchTo( const RectF &rect );
|
||||
|
||||
|
||||
// Alignment settings. These need to be virtual for BitmapText
|
||||
virtual void SetHorizAlign( float f ) { m_fHorizAlign = f; }
|
||||
virtual void SetVertAlign( float f ) { m_fVertAlign = f; }
|
||||
@@ -488,7 +555,6 @@ protected:
|
||||
* Use the defined constant values for best effect. */
|
||||
float m_fVertAlign;
|
||||
|
||||
|
||||
// Stuff for effects
|
||||
#if defined(SSC_FUTURES) // be able to stack effects
|
||||
vector<Effect> m_Effects;
|
||||
@@ -515,7 +581,6 @@ protected:
|
||||
RageColor m_effectColor2;
|
||||
RageVector3 m_vEffectMagnitude;
|
||||
|
||||
|
||||
// other properties
|
||||
bool m_bVisible;
|
||||
bool m_bIsAnimating;
|
||||
|
||||
@@ -165,13 +165,13 @@ void BackgroundImpl::Init()
|
||||
m_bInitted = true;
|
||||
m_bDangerAllWasVisible = false;
|
||||
m_StaticBackgroundDef = BackgroundDef();
|
||||
|
||||
|
||||
if( !USE_STATIC_BG )
|
||||
{
|
||||
m_StaticBackgroundDef.m_sColor1 = "#00000000";
|
||||
m_StaticBackgroundDef.m_sColor2 = "#00000000";
|
||||
}
|
||||
|
||||
|
||||
// load transitions
|
||||
{
|
||||
ASSERT( m_mapNameToTransition.empty() );
|
||||
@@ -204,7 +204,7 @@ void BackgroundImpl::Init()
|
||||
FOREACH_HumanPlayer( p )
|
||||
{
|
||||
bOneOrMoreChars = true;
|
||||
// Disable dancing characters if BH will be showing.
|
||||
// Disable dancing characters if Beginner Helper will be showing.
|
||||
if( PREFSMAN->m_bShowBeginnerHelper && BeginnerHelper::CanUse() &&
|
||||
GAMESTATE->m_pCurSteps[p] && GAMESTATE->m_pCurSteps[p]->GetDifficulty() == Difficulty_Beginner )
|
||||
bShowingBeginnerHelper = true;
|
||||
@@ -285,10 +285,11 @@ bool BackgroundImpl::Layer::CreateBackground( const Song *pSong, const Backgroun
|
||||
continue;
|
||||
}
|
||||
|
||||
// Look for vsFileToResolve[i] in:
|
||||
// - song's dir
|
||||
// - RandomMovies dir
|
||||
// - BGAnimations dir.
|
||||
/* Look for vsFileToResolve[i] in:
|
||||
* song's dir
|
||||
* RandomMovies dir
|
||||
* BGAnimations dir.
|
||||
*/
|
||||
vector<RString> vsPaths, vsThrowAway;
|
||||
|
||||
// Look for BGAnims in the song dir
|
||||
@@ -403,7 +404,7 @@ BackgroundDef BackgroundImpl::Layer::CreateRandomBGA( const Song *pSong, const R
|
||||
bd.m_sEffect = sEffect;
|
||||
|
||||
map<BackgroundDef,Actor*>::const_iterator iter = m_BGAnimations.find( bd );
|
||||
|
||||
|
||||
// create the background if it's not already created
|
||||
if( iter == m_BGAnimations.end() )
|
||||
{
|
||||
@@ -517,7 +518,7 @@ void BackgroundImpl::LoadFromSong( const Song* pSong )
|
||||
m_RandomBGAnimations.push_back( bd );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Song backgrounds (even just background stills) can get very big; never keep them
|
||||
* in memory. */
|
||||
RageTextureID::TexPolicy OldPolicy = TEXTUREMAN->GetDefaultTexturePolicy();
|
||||
@@ -594,12 +595,10 @@ void BackgroundImpl::LoadFromSong( const Song* pSong )
|
||||
BackgroundUtil::SortBackgroundChangesArray( layer.m_aBGChanges );
|
||||
}
|
||||
|
||||
|
||||
Layer &mainlayer = m_Layer[0];
|
||||
|
||||
|
||||
/* If the first BGAnimation isn't negative, add a lead-in image showing the song
|
||||
* background. */
|
||||
/* If the first BGAnimation isn't negative, add a lead-in image showing
|
||||
* the song background. */
|
||||
if( mainlayer.m_aBGChanges.empty() || mainlayer.m_aBGChanges.front().m_fStartBeat >= 0 )
|
||||
{
|
||||
BackgroundChange change;
|
||||
@@ -636,7 +635,6 @@ void BackgroundImpl::LoadFromSong( const Song* pSong )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Look for the random file marker, and replace the segment with LoadFromRandom.
|
||||
for( unsigned i=0; i<mainlayer.m_aBGChanges.size(); i++ )
|
||||
{
|
||||
@@ -659,7 +657,6 @@ void BackgroundImpl::LoadFromSong( const Song* pSong )
|
||||
for( unsigned i=0; i<mainlayer.m_aBGChanges.size(); i++ )
|
||||
ASSERT( !mainlayer.m_aBGChanges[i].m_def.m_sFile1.empty() );
|
||||
|
||||
|
||||
// Re-sort.
|
||||
BackgroundUtil::SortBackgroundChangesArray( mainlayer.m_aBGChanges );
|
||||
|
||||
@@ -677,7 +674,7 @@ int BackgroundImpl::Layer::FindBGSegmentForBeat( float fBeat ) const
|
||||
return -1;
|
||||
if( fBeat < m_aBGChanges[0].m_fStartBeat )
|
||||
return -1;
|
||||
|
||||
|
||||
// assumption: m_aBGChanges are sorted by m_fStartBeat
|
||||
int i;
|
||||
for( i=m_aBGChanges.size()-1; i>=0; i-- )
|
||||
@@ -689,7 +686,7 @@ int BackgroundImpl::Layer::FindBGSegmentForBeat( float fBeat ) const
|
||||
return i;
|
||||
}
|
||||
|
||||
/* If the BG segment has changed, move focus to it. Send Update() calls. */
|
||||
/* If the BG segment has changed, move focus to it. Send Update() calls. */
|
||||
void BackgroundImpl::Layer::UpdateCurBGChange( const Song *pSong, float fLastMusicSeconds, float fCurrentTime, const map<RString,BackgroundTransition> &mapNameToTransition )
|
||||
{
|
||||
ASSERT( fCurrentTime != GameState::MUSIC_SECONDS_INVALID );
|
||||
@@ -702,7 +699,7 @@ void BackgroundImpl::Layer::UpdateCurBGChange( const Song *pSong, float fLastMus
|
||||
int iThrowAway;
|
||||
pSong->m_Timing.GetBeatAndBPSFromElapsedTime( fCurrentTime, fBeat, fBPS, bFreeze, bFreeze, iThrowAway, fThrowAway );
|
||||
|
||||
/* Calls to Update() should *not* be scaled by music rate; fCurrentTime is. Undo it. */
|
||||
// Calls to Update() should *not* be scaled by music rate; fCurrentTime is. Undo it.
|
||||
const float fRate = GAMESTATE->m_SongOptions.GetCurrent().m_fMusicRate;
|
||||
|
||||
// Find the BGSegment we're in
|
||||
@@ -711,7 +708,7 @@ void BackgroundImpl::Layer::UpdateCurBGChange( const Song *pSong, float fLastMus
|
||||
float fDeltaTime = fCurrentTime - fLastMusicSeconds;
|
||||
if( i != -1 && i != m_iCurBGChangeIndex ) // we're changing backgrounds
|
||||
{
|
||||
// LOG->Trace( "old bga %d -> new bga %d (%s), %f, %f", m_iCurBGChangeIndex, i, m_aBGChanges[i].GetTextDescription().c_str(), m_aBGChanges[i].m_fStartBeat, fBeat );
|
||||
//LOG->Trace( "old bga %d -> new bga %d (%s), %f, %f", m_iCurBGChangeIndex, i, m_aBGChanges[i].GetTextDescription().c_str(), m_aBGChanges[i].m_fStartBeat, fBeat );
|
||||
|
||||
BackgroundChange oldChange;
|
||||
if( m_iCurBGChangeIndex != -1 )
|
||||
@@ -739,7 +736,7 @@ void BackgroundImpl::Layer::UpdateCurBGChange( const Song *pSong, float fLastMus
|
||||
if( m_pFadingBGA == m_pCurrentBGA )
|
||||
{
|
||||
m_pFadingBGA = NULL;
|
||||
// LOG->Trace( "bg didn't actually change. Ignoring." );
|
||||
//LOG->Trace( "bg didn't actually change. Ignoring." );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -819,11 +816,11 @@ void BackgroundImpl::DrawPrimitives()
|
||||
if( m_pDancingCharacters )
|
||||
m_pDancingCharacters->m_bDrawDangerLight = true;
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
{
|
||||
if( m_pDancingCharacters )
|
||||
m_pDancingCharacters->m_bDrawDangerLight = false;
|
||||
|
||||
|
||||
FOREACH_BackgroundLayer( i )
|
||||
{
|
||||
Layer &layer = m_Layer[i];
|
||||
@@ -890,8 +887,8 @@ BrightnessOverlay::BrightnessOverlay()
|
||||
void BrightnessOverlay::Update( float fDeltaTime )
|
||||
{
|
||||
ActorFrame::Update( fDeltaTime );
|
||||
/* If we're actually playing, then we're past fades, etc; update the background
|
||||
* brightness to follow Cover. */
|
||||
/* If we're actually playing, then we're past fades, etc; update the
|
||||
* background brightness to follow Cover. */
|
||||
if( !GAMESTATE->m_bGameplayLeadIn )
|
||||
SetActualBrightness();
|
||||
}
|
||||
@@ -906,7 +903,7 @@ void BrightnessOverlay::SetActualBrightness()
|
||||
// HACK: Always show training in full brightness
|
||||
if( GAMESTATE->m_pCurSong && GAMESTATE->m_pCurSong->IsTutorial() )
|
||||
fBaseBGBrightness = 1.0f;
|
||||
|
||||
|
||||
fLeftBrightness *= fBaseBGBrightness;
|
||||
fRightBrightness *= fBaseBGBrightness;
|
||||
|
||||
@@ -939,8 +936,6 @@ void BrightnessOverlay::FadeToActualBrightness()
|
||||
SetActualBrightness();
|
||||
}
|
||||
|
||||
|
||||
|
||||
Background::Background() { m_pImpl = new BackgroundImpl; this->AddChild(m_pImpl); }
|
||||
Background::~Background() { SAFE_DELETE( m_pImpl ); }
|
||||
void Background::Init() { m_pImpl->Init(); }
|
||||
@@ -951,7 +946,6 @@ void Background::SetBrightness( float fBrightness ) { m_pImpl->SetBrightness(fBr
|
||||
DancingCharacters* Background::GetDancingCharacters() { return m_pImpl->GetDancingCharacters(); }
|
||||
void Background::GetLoadedBackgroundChanges( vector<BackgroundChange> *pBackgroundChangesOut[NUM_BackgroundLayer] ) { m_pImpl->GetLoadedBackgroundChanges(pBackgroundChangesOut); }
|
||||
|
||||
|
||||
/*
|
||||
* (c) 2001-2004 Chris Danford, Ben Nordstrom
|
||||
* All rights reserved.
|
||||
|
||||
@@ -23,8 +23,8 @@ public:
|
||||
virtual void Unload();
|
||||
|
||||
void FadeToActualBrightness();
|
||||
void SetBrightness( float fBrightness ); /* overrides pref and Cover */
|
||||
|
||||
void SetBrightness( float fBrightness ); // overrides pref and Cover
|
||||
|
||||
DancingCharacters* GetDancingCharacters();
|
||||
|
||||
void GetLoadedBackgroundChanges( vector<BackgroundChange> **pBackgroundChangesOut );
|
||||
@@ -33,7 +33,6 @@ protected:
|
||||
BackgroundImpl *m_pImpl;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
||||
@@ -13,17 +13,17 @@
|
||||
|
||||
REGISTER_ACTOR_CLASS( BitmapText );
|
||||
|
||||
/* XXX: Changing a whole array of diffuse colors every frame (several times) is
|
||||
* a waste, when we're usually setting them all to the same value. Rainbow and
|
||||
* fading are annoying to optimize, but rarely used. Iterating over every
|
||||
* character in Draw() is dumb. */
|
||||
|
||||
/* XXX:
|
||||
* We need some kind of font modifier string for metrics. For example,
|
||||
* "valign=top;spacing = x+5,y+2"
|
||||
*
|
||||
* Better, we could go all the way, drop all of the actor-specific font aliases,
|
||||
* and do "font=header2;valign=top;...". */
|
||||
|
||||
/* XXX: Changing a whole array of diffuse colors every frame (several times) is
|
||||
* a waste, when we're usually setting them all to the same value. Rainbow and
|
||||
* fading are annoying to optimize, but rarely used. Iterating over every
|
||||
* character in Draw() is dumb. */
|
||||
#define NUM_RAINBOW_COLORS THEME->GetMetricI("BitmapText","NumRainbowColors")
|
||||
#define RAINBOW_COLOR(n) THEME->GetMetricC("BitmapText",ssprintf("RainbowColor%i", n+1))
|
||||
|
||||
|
||||
@@ -14,6 +14,15 @@
|
||||
#define DC_X( choice ) THEME->GetMetricF("DancingCharacters",ssprintf("2DCharacterXP%d",choice+1))
|
||||
#define DC_Y( choice ) THEME->GetMetricF("DancingCharacters",ssprintf("2DCharacterYP%d",choice+1))
|
||||
|
||||
/*
|
||||
* TODO:
|
||||
* - Metrics/Lua for lighting and camera sweeping.
|
||||
* - Ability to load secondary elements i.e. stages.
|
||||
* - Remove support for 2D characters (Lua can do it).
|
||||
* - Cleanup!
|
||||
*
|
||||
* -- Colby
|
||||
*/
|
||||
const float CAMERA_REST_DISTANCE = 32.f;
|
||||
const float CAMERA_REST_LOOK_AT_HEIGHT = -11.f;
|
||||
|
||||
@@ -34,7 +43,6 @@ const float MODEL_X_ONE_PLAYER = 0;
|
||||
const float MODEL_X_TWO_PLAYERS[NUM_PLAYERS] = { +8, -8 };
|
||||
const float MODEL_ROTATIONY_TWO_PLAYERS[NUM_PLAYERS] = { -90, 90 };
|
||||
|
||||
|
||||
DancingCharacters::DancingCharacters()
|
||||
{
|
||||
m_bDrawDangerLight = false;
|
||||
@@ -59,28 +67,28 @@ DancingCharacters::DancingCharacters()
|
||||
{
|
||||
m_bgIdle[p].Load( sCurrentAnim );
|
||||
m_bgIdle[p]->SetXY(DC_X(p),DC_Y(p));
|
||||
}
|
||||
}
|
||||
|
||||
sCurrentAnim = sCharacterDirectory + "2DMiss";
|
||||
if( DoesFileExist(sCurrentAnim + "/BGAnimation.ini") ) // check 2D Idle BGAnim exists
|
||||
{
|
||||
m_bgMiss[p].Load( sCurrentAnim );
|
||||
m_bgMiss[p]->SetXY(DC_X(p),DC_Y(p));
|
||||
}
|
||||
}
|
||||
|
||||
sCurrentAnim = sCharacterDirectory + "2DGood";
|
||||
if( DoesFileExist(sCurrentAnim + "/BGAnimation.ini") ) // check 2D Idle BGAnim exists
|
||||
{
|
||||
m_bgGood[p].Load( sCurrentAnim );
|
||||
m_bgGood[p]->SetXY(DC_X(p),DC_Y(p));
|
||||
}
|
||||
}
|
||||
|
||||
sCurrentAnim = sCharacterDirectory + "2DGreat";
|
||||
if( DoesFileExist(sCurrentAnim + "/BGAnimation.ini") ) // check 2D Idle BGAnim exists
|
||||
{
|
||||
m_bgGreat[p].Load( sCurrentAnim );
|
||||
m_bgGreat[p]->SetXY(DC_X(p),DC_Y(p));
|
||||
}
|
||||
}
|
||||
|
||||
sCurrentAnim = sCharacterDirectory + "2DFever";
|
||||
if( DoesFileExist(sCurrentAnim + "/BGAnimation.ini") ) // check 2D Idle BGAnim exists
|
||||
@@ -112,12 +120,12 @@ DancingCharacters::DancingCharacters()
|
||||
|
||||
if( pChar->GetModelPath().empty() )
|
||||
continue;
|
||||
|
||||
|
||||
if( GAMESTATE->GetNumPlayersEnabled()==2 )
|
||||
m_pCharacter[p]->SetX( MODEL_X_TWO_PLAYERS[p] );
|
||||
else
|
||||
m_pCharacter[p]->SetX( MODEL_X_ONE_PLAYER );
|
||||
|
||||
|
||||
switch( GAMESTATE->m_PlayMode )
|
||||
{
|
||||
case PLAY_MODE_BATTLE:
|
||||
@@ -156,7 +164,7 @@ void DancingCharacters::LoadNextSong()
|
||||
|
||||
ASSERT( GAMESTATE->m_pCurSong );
|
||||
m_fThisCameraEndBeat = GAMESTATE->m_pCurSong->m_fFirstBeat;
|
||||
|
||||
|
||||
FOREACH_PlayerNumber( p )
|
||||
if( GAMESTATE->IsPlayerEnabled(p) )
|
||||
m_pCharacter[p]->PlayAnimation( "rest" );
|
||||
@@ -168,7 +176,7 @@ void DancingCharacters::Update( float fDelta )
|
||||
{
|
||||
if( GAMESTATE->m_bFreeze || GAMESTATE->m_bDelay )
|
||||
{
|
||||
// spin the camera Matrix style
|
||||
// spin the camera Matrix-style
|
||||
m_CameraPanYStart += fDelta*40;
|
||||
m_CameraPanYEnd += fDelta*40;
|
||||
}
|
||||
@@ -200,7 +208,6 @@ void DancingCharacters::Update( float fDelta )
|
||||
}
|
||||
bWasGameplayStarting = bGameplayStarting;
|
||||
|
||||
|
||||
static float fLastBeat = GAMESTATE->m_fSongBeat;
|
||||
float fThisBeat = GAMESTATE->m_fSongBeat;
|
||||
if( fLastBeat < GAMESTATE->m_pCurSong->m_fFirstBeat &&
|
||||
@@ -211,7 +218,6 @@ void DancingCharacters::Update( float fDelta )
|
||||
}
|
||||
fLastBeat = fThisBeat;
|
||||
|
||||
|
||||
// time for a new sweep?
|
||||
if( GAMESTATE->m_fSongBeat > m_fThisCameraEndBeat )
|
||||
{
|
||||
@@ -221,7 +227,7 @@ void DancingCharacters::Update( float fDelta )
|
||||
m_CameraDistance = CAMERA_SWEEP_DISTANCE + RandomInt(-1,1) * CAMERA_SWEEP_DISTANCE_VARIANCE;
|
||||
m_CameraPanYStart = m_CameraPanYEnd = RandomInt(-1,1) * CAMERA_SWEEP_PAN_Y_RANGE_DEGREES;
|
||||
m_fCameraHeightStart = m_fCameraHeightEnd = CAMERA_STILL_LOOK_AT_HEIGHT;
|
||||
|
||||
|
||||
m_CameraPanYEnd += RandomInt(-1,1) * CAMERA_SWEEP_PAN_Y_VARIANCE_DEGREES;
|
||||
m_fCameraHeightStart = m_fCameraHeightEnd = m_fCameraHeightStart + RandomInt(-1,1) * CAMERA_SWEEP_HEIGHT_VARIANCE;
|
||||
|
||||
@@ -247,7 +253,8 @@ void DancingCharacters::Update( float fDelta )
|
||||
m_fThisCameraStartBeat = (float) iCurBeat;
|
||||
m_fThisCameraEndBeat = float(iCurBeat + 8);
|
||||
}
|
||||
|
||||
/*
|
||||
// is there any of this still around? This block of code is _ugly_. -Colby
|
||||
// update any 2D stuff
|
||||
FOREACH_PlayerNumber( p )
|
||||
{
|
||||
@@ -286,6 +293,7 @@ void DancingCharacters::Update( float fDelta )
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
void DancingCharacters::Change2DAnimState( PlayerNumber pn, int iState )
|
||||
@@ -326,6 +334,7 @@ void DancingCharacters::DrawPrimitives()
|
||||
bool bDanger = m_bDrawDangerLight;
|
||||
|
||||
DISPLAY->SetLighting( true );
|
||||
|
||||
RageColor ambient = bFailed ? RageColor(0.2f,0.1f,0.1f,1) : (bDanger ? RageColor(0.4f,0.1f,0.1f,1) : RageColor(0.4f,0.4f,0.4f,1));
|
||||
RageColor diffuse = bFailed ? RageColor(0.4f,0.1f,0.1f,1) : (bDanger ? RageColor(0.8f,0.1f,0.1f,1) : RageColor(1,0.95f,0.925f,1));
|
||||
RageColor specular = RageColor(0.8f,0.8f,0.8f,1);
|
||||
@@ -351,8 +360,10 @@ void DancingCharacters::DrawPrimitives()
|
||||
DISPLAY->SetLighting( false );
|
||||
}
|
||||
|
||||
|
||||
DISPLAY->CameraPopMatrix();
|
||||
|
||||
/*
|
||||
// Ugly! -Colby
|
||||
// now draw any potential 2D stuff
|
||||
FOREACH_PlayerNumber( p )
|
||||
{
|
||||
@@ -373,6 +384,7 @@ void DancingCharacters::DrawPrimitives()
|
||||
if(m_bgFail[p].IsLoaded() && m_i2DAnimState[p] == AS2D_FAIL)
|
||||
m_bgFail[p]->Draw();
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
/* DancingCharacters - Characters that react to how the players are doing. */
|
||||
#ifndef DancingCharacters_H
|
||||
#define DancingCharacters_H
|
||||
|
||||
@@ -9,20 +8,22 @@
|
||||
#include "AutoActor.h"
|
||||
class Model;
|
||||
|
||||
/** @brief The different animation states for the dancer. */
|
||||
enum ANIM_STATES_2D
|
||||
{
|
||||
AS2D_IDLE = 0,
|
||||
AS2D_MISS,
|
||||
AS2D_GOOD,
|
||||
AS2D_GREAT,
|
||||
AS2D_FEVER,
|
||||
AS2D_FAIL,
|
||||
AS2D_WIN,
|
||||
AS2D_WINFEVER,
|
||||
AS2D_IGNORE, // special case -- so that we can timer to idle again.
|
||||
AS2D_MAXSTATES // leave at end
|
||||
AS2D_IDLE = 0, /**< The dancer is idle. */
|
||||
AS2D_MISS, /**< The dancer just missed a note. */
|
||||
AS2D_GOOD, /**< The dancer is doing a good job. */
|
||||
AS2D_GREAT, /**< The dancer is doing a great job. */
|
||||
AS2D_FEVER, /**< The dancer is on fire! */
|
||||
AS2D_FAIL, /**< The dancer has failed. */
|
||||
AS2D_WIN, /**< The dancer has won. */
|
||||
AS2D_WINFEVER, /**< The dancer has won while on fire. */
|
||||
AS2D_IGNORE, /**< This is a special case -- so that we can timer to idle again. */
|
||||
AS2D_MAXSTATES /**< A count of the maximum number of states. */
|
||||
};
|
||||
|
||||
/** @brief Characters that react to how the players are doing. */
|
||||
class DancingCharacters : public ActorFrame
|
||||
{
|
||||
public:
|
||||
@@ -39,6 +40,7 @@ protected:
|
||||
|
||||
Model *m_pCharacter[NUM_PLAYERS];
|
||||
|
||||
/** @brief How far away is the camera from the dancer? */
|
||||
float m_CameraDistance;
|
||||
float m_CameraPanYStart;
|
||||
float m_CameraPanYEnd;
|
||||
@@ -65,8 +67,10 @@ protected:
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* (c) 2003-2004 Chris Danford
|
||||
/**
|
||||
* @file
|
||||
* @author Chris Danford (c) 2003-2004
|
||||
* @section LICENSE
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
/* DualScrollBar - a scrollbar with two independent thumbs. */
|
||||
|
||||
#ifndef DUAL_SCROLLBAR_H
|
||||
#define DUAL_SCROLLBAR_H
|
||||
|
||||
#include "ActorFrame.h"
|
||||
#include "AutoActor.h"
|
||||
#include "PlayerNumber.h"
|
||||
|
||||
/** @brief A scrollbar with two independent thumbs. */
|
||||
class DualScrollBar: public ActorFrame
|
||||
{
|
||||
public:
|
||||
@@ -19,6 +17,7 @@ public:
|
||||
void EnablePlayer( PlayerNumber pn, bool on );
|
||||
|
||||
private:
|
||||
/** @brief The height of the scrollbar. */
|
||||
float m_fBarHeight;
|
||||
float m_fBarTime;
|
||||
|
||||
@@ -28,8 +27,10 @@ private:
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* (c) 2001-2004 Glenn Maynard, Chris Danford
|
||||
/**
|
||||
* @file
|
||||
* @author Glenn Maynard, Chris Danford (c) 2001-2004
|
||||
* @section LICENSE
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
||||
@@ -26,15 +26,17 @@ enum EditMenuRow
|
||||
const RString& EditMenuRowToString( EditMenuRow r );
|
||||
const RString& EditMenuRowToLocalizedString( EditMenuRow r );
|
||||
|
||||
/** @brief The different actions one can take on a step. */
|
||||
enum EditMenuAction
|
||||
{
|
||||
EditMenuAction_Edit,
|
||||
EditMenuAction_Delete,
|
||||
EditMenuAction_Create,
|
||||
EditMenuAction_Practice,
|
||||
NUM_EditMenuAction,
|
||||
EditMenuAction_Edit, /**< Modify the current step for the Song. */
|
||||
EditMenuAction_Delete, /**< Remove the current step from the Song. */
|
||||
EditMenuAction_Create, /**< Create a new step for the Song. */
|
||||
EditMenuAction_Practice, /**< Practice the current step for the Song. */
|
||||
NUM_EditMenuAction, /**< The number of MenuActions available to choose from. */
|
||||
EditMenuAction_Invalid
|
||||
};
|
||||
/** @brief Loop through each EditMenuAction. */
|
||||
#define FOREACH_EditMenuAction( ema ) FOREACH_ENUM( EditMenuAction, ema )
|
||||
const RString& EditMenuActionToString( EditMenuAction ema );
|
||||
const RString& EditMenuActionToLocalizedString( EditMenuAction ema );
|
||||
@@ -65,7 +67,13 @@ public:
|
||||
|
||||
void RefreshAll();
|
||||
|
||||
RString GetSelectedGroup() const { if( !SHOW_GROUPS.GetValue() ) return GROUP_ALL; ASSERT(m_iSelection[ROW_GROUP] < (int)m_sGroups.size()); return m_sGroups[m_iSelection[ROW_GROUP]]; }
|
||||
RString GetSelectedGroup() const
|
||||
{
|
||||
if( !SHOW_GROUPS.GetValue() ) return GROUP_ALL;
|
||||
ASSERT_M((int)m_iSelection[ROW_GROUP] < (int)m_sGroups.size(),
|
||||
ssprintf("Group selection %d < Number of groups %d", m_iSelection[ROW_GROUP], (int)m_sGroups.size()));
|
||||
return m_sGroups[m_iSelection[ROW_GROUP]];
|
||||
}
|
||||
Song* GetSelectedSong() const { ASSERT(m_iSelection[ROW_SONG] < (int)m_pSongs.size()); return m_pSongs[m_iSelection[ROW_SONG]]; }
|
||||
StepsType GetSelectedStepsType() const { ASSERT(m_iSelection[ROW_STEPS_TYPE] < (int)m_StepsTypes.size()); return m_StepsTypes[m_iSelection[ROW_STEPS_TYPE]]; }
|
||||
Steps* GetSelectedSteps() const { ASSERT(m_iSelection[ROW_STEPS] < (int)m_vpSteps.size()); return m_vpSteps[m_iSelection[ROW_STEPS]].pSteps; }
|
||||
@@ -94,7 +102,9 @@ private:
|
||||
BitmapText m_textLabel[NUM_EditMenuRow];
|
||||
BitmapText m_textValue[NUM_EditMenuRow];
|
||||
|
||||
/** @brief The group's banner. */
|
||||
FadingBanner m_GroupBanner;
|
||||
/** @brief The Song's banner. */
|
||||
FadingBanner m_SongBanner;
|
||||
TextBanner m_SongTextBanner;
|
||||
StepsDisplay m_StepsDisplay;
|
||||
@@ -107,7 +117,9 @@ private:
|
||||
Difficulty dc;
|
||||
};
|
||||
|
||||
/** @brief The list of groups. */
|
||||
vector<RString> m_sGroups;
|
||||
/** @brief The list of Songs in a group. */
|
||||
vector<Song*> m_pSongs;
|
||||
vector<StepsType> m_StepsTypes;
|
||||
vector<StepsAndDifficulty> m_vpSteps;
|
||||
@@ -120,6 +132,7 @@ private:
|
||||
RageSound m_soundChangeRow;
|
||||
RageSound m_soundChangeValue;
|
||||
|
||||
/** @brief A metric to determine if groups are shown. */
|
||||
ThemeMetric<bool> SHOW_GROUPS;
|
||||
ThemeMetric1D<float> ARROWS_X;
|
||||
ThemeMetric<apActorCommands> ARROWS_ENABLED_COMMAND;
|
||||
@@ -132,8 +145,10 @@ public:
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* (c) 2001-2004 Chris Danford
|
||||
/**
|
||||
* @file
|
||||
* @author Chris Danford (c) 2001-2004
|
||||
* @section LICENSE
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
||||
@@ -25,7 +25,7 @@ void Foreground::Unload()
|
||||
|
||||
void Foreground::LoadFromSong( const Song *pSong )
|
||||
{
|
||||
/* Song graphics can get very big; never keep them in memory. */
|
||||
// Song graphics can get very big; never keep them in memory.
|
||||
RageTextureID::TexPolicy OldPolicy = TEXTUREMAN->GetDefaultTexturePolicy();
|
||||
TEXTUREMAN->SetDefaultTexturePolicy( RageTextureID::TEX_VOLATILE );
|
||||
|
||||
@@ -58,7 +58,7 @@ void Foreground::LoadFromSong( const Song *pSong )
|
||||
|
||||
void Foreground::Update( float fDeltaTime )
|
||||
{
|
||||
/* Calls to Update() should *not* be scaled by music rate. Undo it. */
|
||||
// Calls to Update() should *not* be scaled by music rate. Undo it.
|
||||
const float fRate = GAMESTATE->m_SongOptions.GetCurrent().m_fMusicRate;
|
||||
|
||||
for( unsigned i=0; i < m_BGAnimations.size(); ++i )
|
||||
@@ -67,7 +67,7 @@ void Foreground::Update( float fDeltaTime )
|
||||
|
||||
if( GAMESTATE->m_fSongBeat < bga.m_fStartBeat )
|
||||
{
|
||||
/* The animation hasn't started yet. */
|
||||
// The animation hasn't started yet.
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -89,14 +89,14 @@ void Foreground::Update( float fDeltaTime )
|
||||
fDeltaTime = GAMESTATE->m_fMusicSeconds - m_fLastMusicSeconds;
|
||||
}
|
||||
|
||||
/* This shouldn't go down, but be safe: */
|
||||
// This shouldn't go down, but be safe:
|
||||
fDeltaTime = max( fDeltaTime, 0 );
|
||||
|
||||
bga.m_bga->Update( fDeltaTime / fRate );
|
||||
|
||||
if( GAMESTATE->m_fSongBeat > bga.m_fStopBeat )
|
||||
{
|
||||
/* Finished. */
|
||||
// Finished.
|
||||
bga.m_bga->SetVisible( false );
|
||||
bga.m_bFinished = true;
|
||||
continue;
|
||||
|
||||
@@ -1,18 +1,15 @@
|
||||
/* Foreground - Foreground in front of notes while playing. */
|
||||
#ifndef FOREGROUND_H
|
||||
#define FOREGROUND_H
|
||||
|
||||
#include "ActorFrame.h"
|
||||
|
||||
class Song;
|
||||
|
||||
/** @brief Foreground in front of notes while playing. */
|
||||
class Foreground: public ActorFrame
|
||||
{
|
||||
public:
|
||||
~Foreground();
|
||||
|
||||
void Unload();
|
||||
|
||||
void LoadFromSong( const Song *pSong );
|
||||
|
||||
virtual void Update( float fDeltaTime );
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
/* Game - Holds information about a particular style of a game (e.g. "single", "double"). */
|
||||
|
||||
#ifndef GAMEDEF_H
|
||||
#define GAMEDEF_H
|
||||
|
||||
@@ -27,21 +25,29 @@ class Style;
|
||||
// have the flag FLAG_SECONDARY_MENU_*, they will function as MenuLeft and
|
||||
// MenuRight as long as "MenuLeft (optional)" and "MenuRight (optional)" are not mapped.
|
||||
|
||||
/** @brief Holds information about a particular style of a game (e.g. "single", "double"). */
|
||||
class Game
|
||||
{
|
||||
public:
|
||||
const char * m_szName;
|
||||
const Style * const* m_apStyles;
|
||||
|
||||
bool m_bCountNotesSeparately; // Count multiple notes in a row as separate notes or as one note
|
||||
bool m_bAllowHopos; // allow Hammer-ons and Pull-offs? Only useful for guitar type input.
|
||||
/** @brief Do we count multiple notes in a row as separate notes, or as one note? */
|
||||
bool m_bCountNotesSeparately;
|
||||
/** @brief Do we allow for hammer-ons and pull-offs?
|
||||
*
|
||||
* This is right now only useful for guitar type input. */
|
||||
bool m_bAllowHopos;
|
||||
InputScheme m_InputScheme;
|
||||
|
||||
struct PerButtonInfo
|
||||
{
|
||||
GameButtonType m_gbt;
|
||||
};
|
||||
// Data for each Game-specific GameButton. This starts at GAME_BUTTON_NEXT.
|
||||
/**
|
||||
* @brief Data for each Game-specific GameButton.
|
||||
*
|
||||
* This starts at GAME_BUTTON_NEXT. */
|
||||
PerButtonInfo m_PerButtonInfo[NUM_GameButton];
|
||||
const PerButtonInfo *GetPerButtonInfo( GameButton gb ) const;
|
||||
|
||||
@@ -58,8 +64,10 @@ public:
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* (c) 2001-2002 Chris Danford
|
||||
/**
|
||||
* @file
|
||||
* @author Chris Danford (c) 2001-2002
|
||||
* @section LICENSE
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
||||
@@ -73,7 +73,11 @@ public:
|
||||
SortOrder m_SortOrder;
|
||||
RString m_sSoundPath; // "" for no sound
|
||||
vector<RString> m_vsScreensToPrepare;
|
||||
int m_iWeightPounds; // -1 == none specified
|
||||
/**
|
||||
* @brief What is the player's weight in pounds?
|
||||
*
|
||||
* If this value is -1, then no weight was specified. */
|
||||
int m_iWeightPounds;
|
||||
int m_iGoalCalories; // -1 == none specified
|
||||
GoalType m_GoalType;
|
||||
RString m_sProfileID;
|
||||
|
||||
@@ -146,31 +146,31 @@ LuaDeclareType( PlayMode );
|
||||
enum SortOrder
|
||||
{
|
||||
// song sorts
|
||||
SORT_PREFERRED,
|
||||
SORT_GROUP,
|
||||
SORT_TITLE,
|
||||
SORT_BPM,
|
||||
SORT_POPULARITY,
|
||||
SORT_TOP_GRADES,
|
||||
SORT_ARTIST,
|
||||
SORT_GENRE,
|
||||
SORT_BEGINNER_METER,
|
||||
SORT_EASY_METER,
|
||||
SORT_MEDIUM_METER,
|
||||
SORT_HARD_METER,
|
||||
SORT_CHALLENGE_METER,
|
||||
SORT_DOUBLE_EASY_METER,
|
||||
SORT_DOUBLE_MEDIUM_METER,
|
||||
SORT_DOUBLE_HARD_METER,
|
||||
SORT_DOUBLE_CHALLENGE_METER,
|
||||
SORT_PREFERRED, /**< Sort by the user's preferred settings. */
|
||||
SORT_GROUP, /**< Sort by the groups the Songs are in. */
|
||||
SORT_TITLE, /**< Sort by the Song's title. */
|
||||
SORT_BPM, /**< Sort by the Song's BPM. */
|
||||
SORT_POPULARITY, /**< Sort by how popular the Song is. */
|
||||
SORT_TOP_GRADES, /**< Sort by the highest grades earned on a Song. */
|
||||
SORT_ARTIST, /**< Sort by the name of the artist of the Song. */
|
||||
SORT_GENRE, /**< Sort by the Song's genre. */
|
||||
SORT_BEGINNER_METER, /**< Sort by the difficulty of the single beginner meter. */
|
||||
SORT_EASY_METER, /**< Sort by the difficulty of the single easy meter. */
|
||||
SORT_MEDIUM_METER, /**< Sort by the difficulty of the single medium meter. */
|
||||
SORT_HARD_METER, /**< Sort by the difficulty of the single hard meter. */
|
||||
SORT_CHALLENGE_METER, /**< Sort by the difficulty of the single challenge meter. */
|
||||
SORT_DOUBLE_EASY_METER, /**< Sort by the difficulty of the double easy meter. */
|
||||
SORT_DOUBLE_MEDIUM_METER, /**< Sort by the difficulty of the double medium meter. */
|
||||
SORT_DOUBLE_HARD_METER, /**< Sort by the difficulty of the double hard meter. */
|
||||
SORT_DOUBLE_CHALLENGE_METER, /**< Sort by the difficulty of the double challenge meter. */
|
||||
//
|
||||
SORT_MODE_MENU,
|
||||
SORT_MODE_MENU, /**< Have access to the menu for choosing the sort. */
|
||||
// course sorts
|
||||
SORT_ALL_COURSES,
|
||||
SORT_NONSTOP_COURSES,
|
||||
SORT_ONI_COURSES,
|
||||
SORT_ENDLESS_COURSES,
|
||||
SORT_LENGTH,
|
||||
SORT_ALL_COURSES, /**< Sort with all courses available. */
|
||||
SORT_NONSTOP_COURSES, /**< View only the nonstop courses. */
|
||||
SORT_ONI_COURSES, /**< View only the oni/survival courses. */
|
||||
SORT_ENDLESS_COURSES, /**< View only the endless courses. */
|
||||
SORT_LENGTH, /**< Sort the courses by how long they would last. */
|
||||
SORT_ROULETTE,
|
||||
SORT_RECENT,
|
||||
NUM_SortOrder,
|
||||
@@ -409,6 +409,7 @@ enum StageResult
|
||||
|
||||
|
||||
// Battle stuff
|
||||
/** @brief The number of inventory slots available for attacks. */
|
||||
const int NUM_INVENTORY_SLOTS = 3;
|
||||
enum AttackLevel
|
||||
{
|
||||
@@ -452,13 +453,13 @@ LuaDeclareType( Premium );
|
||||
/** @brief The various stage awards that can be given based on excellent play. */
|
||||
enum StageAward
|
||||
{
|
||||
StageAward_FullComboW3,
|
||||
StageAward_SingleDigitW3,
|
||||
StageAward_OneW3,
|
||||
StageAward_FullComboW2,
|
||||
StageAward_SingleDigitW2,
|
||||
StageAward_OneW2,
|
||||
StageAward_FullComboW1,
|
||||
StageAward_FullComboW3, /**< A full great combo (or equivalent) was earned. */
|
||||
StageAward_SingleDigitW3, /**< A single digit great combo (or equivalent) was earned. */
|
||||
StageAward_OneW3, /**< Only one great (or equivalent) was earned. */
|
||||
StageAward_FullComboW2, /**< A full excellent combo (or equivalent) was earned. */
|
||||
StageAward_SingleDigitW2, /**< A single digit excellent combo (or equivalent) was earned. */
|
||||
StageAward_OneW2, /**< Only one excellent (or equivalent) was earned. */
|
||||
StageAward_FullComboW1, /**< All fantastics (or equivalent) were earned. */
|
||||
StageAward_80PercentW3,
|
||||
StageAward_90PercentW3,
|
||||
StageAward_100PercentW3,
|
||||
@@ -623,9 +624,9 @@ const RString& StageToLocalizedString( Stage i );
|
||||
/** @brief The different possibilities of earning an extra stage. */
|
||||
enum EarnedExtraStage
|
||||
{
|
||||
EarnedExtraStage_No,
|
||||
EarnedExtraStage_Extra1,
|
||||
EarnedExtraStage_Extra2,
|
||||
EarnedExtraStage_No, /**< No extra stage was earned. */
|
||||
EarnedExtraStage_Extra1, /**< The first extra stage was earned. */
|
||||
EarnedExtraStage_Extra2, /**< The second extra stage (or encore extra stage) was earned. */
|
||||
NUM_EarnedExtraStage,
|
||||
EarnedExtraStage_Invalid
|
||||
};
|
||||
@@ -671,8 +672,10 @@ LuaDeclareType( CourseType );
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* (c) 2001-2004 Chris Danford, Chris Gomez
|
||||
/**
|
||||
* @file
|
||||
* @author Chris Danford, Chris Gomez (c) 2001-2004
|
||||
* @section LICENSE
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
||||
@@ -423,16 +423,18 @@ void InputFilter::UpdateCursorLocation(float _fX, float _fY)
|
||||
class LunaInputFilter: public Luna<InputFilter>
|
||||
{
|
||||
public:
|
||||
// todo: Should the input be locked to the theme's width/height instead of
|
||||
// the window's width/height? -aj
|
||||
static int GetMouseX( T* p, lua_State *L ){
|
||||
float fX = p->GetCursorX();
|
||||
// scale input
|
||||
// Scale input to the theme's dimensions
|
||||
fX = SCALE( fX, 0, (PREFSMAN->m_iDisplayHeight * PREFSMAN->m_fDisplayAspectRatio), SCREEN_LEFT, SCREEN_RIGHT );
|
||||
lua_pushnumber( L, fX );
|
||||
return 1;
|
||||
}
|
||||
static int GetMouseY( T* p, lua_State *L ){
|
||||
float fY = p->GetCursorY();
|
||||
// scale input
|
||||
// Scale input to the theme's dimensions
|
||||
fY = SCALE( fY, 0, PREFSMAN->m_iDisplayHeight, SCREEN_TOP, SCREEN_BOTTOM );
|
||||
lua_pushnumber( L, fY );
|
||||
return 1;
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
/* LuaReference - a self-cleaning Lua reference. */
|
||||
|
||||
#ifndef LUA_REFERENCE_H
|
||||
#define LUA_REFERENCE_H
|
||||
|
||||
@@ -8,7 +6,7 @@
|
||||
|
||||
struct lua_State;
|
||||
typedef lua_State Lua;
|
||||
|
||||
/** @brief A self-cleaning Lua reference. */
|
||||
class LuaReference
|
||||
{
|
||||
public:
|
||||
@@ -29,14 +27,21 @@ public:
|
||||
* On success, return true. On error, set to nil and return false. */
|
||||
bool SetFromExpression( const RString &sExpression );
|
||||
|
||||
/* Deep-copy tables, detaching this reference from any others. */
|
||||
/** @brief Deep-copy tables, detaching this reference from any others. */
|
||||
void DeepCopy();
|
||||
|
||||
/* Push the referenced object onto the stack. If not set (or set to nil), push nil. */
|
||||
virtual void PushSelf( Lua *L ) const;
|
||||
|
||||
/* Return true if set. (SetFromNil() counts as being set.) */
|
||||
/**
|
||||
* @brief Determine if the reference is set.
|
||||
*
|
||||
* SetFromNil() counts as being set.
|
||||
* @return true if it's set. */
|
||||
bool IsSet() const;
|
||||
/**
|
||||
* @brief Determine if the reference is nil.
|
||||
* @return true if it's nil. */
|
||||
bool IsNil() const;
|
||||
void Unset() { Unregister(); }
|
||||
|
||||
@@ -91,8 +96,10 @@ public:
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* (c) 2005 Glenn Maynard, Chris Danford
|
||||
/**
|
||||
* @file
|
||||
* @author Glenn Maynard, Chris Danford (c) 2005
|
||||
* @section LICENSE
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
||||
@@ -81,7 +81,6 @@ static const char *MessageIDNames[] = {
|
||||
"LifeMeterChangedP1",
|
||||
"LifeMeterChangedP2",
|
||||
"UpdateScreenHeader",
|
||||
// should these be here? -aj
|
||||
"LeftClick",
|
||||
"RightClick",
|
||||
"MiddleClick",
|
||||
|
||||
@@ -78,7 +78,6 @@ enum MessageID
|
||||
Message_LifeMeterChangedP1,
|
||||
Message_LifeMeterChangedP2,
|
||||
Message_UpdateScreenHeader,
|
||||
// should these be here? -aj
|
||||
Message_LeftClick,
|
||||
Message_RightClick,
|
||||
Message_MiddleClick,
|
||||
|
||||
@@ -65,6 +65,7 @@ void Model::Load( const RString &sFile )
|
||||
|
||||
#define THROW RageException::Throw( "Parse error in \"%s\" at line %d: \"%s\".", sPath.c_str(), iLineNum, sLine.c_str() )
|
||||
|
||||
// TODO: Move MS3D loading into its own class. - Colby
|
||||
void Model::LoadMilkshapeAscii( const RString &sPath )
|
||||
{
|
||||
LoadPieces( sPath, sPath, sPath );
|
||||
@@ -287,19 +288,18 @@ bool Model::EarlyAbortDraw() const
|
||||
|
||||
void Model::DrawCelShaded()
|
||||
{
|
||||
this->SetGlow(RageColor(0,0,0,1));
|
||||
this->SetDiffuseAlpha(0);
|
||||
DISPLAY->SetPolygonMode( POLYGON_LINE );
|
||||
DISPLAY->SetLineWidth( 3 );
|
||||
this->SetZWrite( false );
|
||||
this->Draw();
|
||||
this->SetDiffuseAlpha(1);
|
||||
this->SetGlow(RageColor(1,1,1,0));
|
||||
DISPLAY->SetPolygonMode( POLYGON_FILL );
|
||||
// TODO: use shell shader for outline.
|
||||
this->SetZWrite( true );
|
||||
DISPLAY->SetCelShaded( true );
|
||||
|
||||
// First pass: outline/shell
|
||||
// DISPLAY->SetCelShaded(1);
|
||||
this->Draw();
|
||||
DISPLAY->SetCelShaded( false );
|
||||
|
||||
// Second pass: normal shading
|
||||
// DISPLAY->SetCelShaded(2);
|
||||
// this->Draw();
|
||||
|
||||
// DISPLAY->SetCelShaded(0)
|
||||
}
|
||||
|
||||
void Model::DrawPrimitives()
|
||||
@@ -374,7 +374,7 @@ void Model::DrawPrimitives()
|
||||
}
|
||||
|
||||
// go
|
||||
DrawMesh( i );
|
||||
DrawMesh(i);
|
||||
|
||||
// Turn off environment mapping on tex unit 0.
|
||||
DISPLAY->SetSphereEnvironmentMapping( TextureUnit_1, false );
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
/* MusicWheelItem - An item on the MusicWheel. */
|
||||
|
||||
#ifndef MUSIC_WHEEL_ITEM_H
|
||||
#define MUSIC_WHEEL_ITEM_H
|
||||
|
||||
@@ -33,7 +31,7 @@ enum MusicWheelItemType
|
||||
MusicWheelItemType_Invalid,
|
||||
};
|
||||
const RString& MusicWheelItemTypeToString( MusicWheelItemType i );
|
||||
|
||||
/** @brief An item on the MusicWheel. */
|
||||
class MusicWheelItem : public WheelItemBase
|
||||
{
|
||||
public:
|
||||
@@ -80,8 +78,10 @@ struct MusicWheelItemData : public WheelItemBaseData
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* (c) 2001-2004 Chris Danford, Chris Gomez, Glenn Maynard
|
||||
/**
|
||||
* @file
|
||||
* @author Chris Danford, Chris Gomez, Glenn Maynard (c) 2001-2004
|
||||
* @section LICENSE
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
||||
@@ -8,23 +8,23 @@
|
||||
struct MenuRowDef;
|
||||
class OptionRow;
|
||||
struct ConfOption;
|
||||
|
||||
/** @brief How many options can be selected on this row? */
|
||||
enum SelectType
|
||||
{
|
||||
SELECT_ONE,
|
||||
SELECT_MULTIPLE,
|
||||
SELECT_NONE,
|
||||
SELECT_ONE, /**< Only one option can be chosen on this row. */
|
||||
SELECT_MULTIPLE, /**< Multiple options can be chosen on this row. */
|
||||
SELECT_NONE, /**< No options can be chosen on this row. */
|
||||
NUM_SelectType,
|
||||
SelectType_Invalid
|
||||
};
|
||||
const RString& SelectTypeToString( SelectType pm );
|
||||
SelectType StringToSelectType( const RString& s );
|
||||
LuaDeclareType( SelectType );
|
||||
|
||||
/** @brief How many items are shown on the row? */
|
||||
enum LayoutType
|
||||
{
|
||||
LAYOUT_SHOW_ALL_IN_ROW,
|
||||
LAYOUT_SHOW_ONE_IN_ROW,
|
||||
LAYOUT_SHOW_ALL_IN_ROW, /**< All of the options are shown at once. */
|
||||
LAYOUT_SHOW_ONE_IN_ROW, /**< Only one option is shown at a time. */
|
||||
NUM_LayoutType,
|
||||
LayoutType_Invalid
|
||||
};
|
||||
@@ -32,10 +32,14 @@ const RString& LayoutTypeToString( LayoutType pm );
|
||||
LayoutType StringToLayoutType( const RString& s );
|
||||
LuaDeclareType( LayoutType );
|
||||
|
||||
/** @brief Define the purpose of the OptionRow. */
|
||||
struct OptionRowDefinition
|
||||
{
|
||||
/** @brief the name of the option row. */
|
||||
RString m_sName;
|
||||
/** @brief an explanation of the row's purpose. */
|
||||
RString m_sExplanationName;
|
||||
/** @brief Do all players have to share one option from the row? */
|
||||
bool m_bOneChoiceForAllPlayers;
|
||||
SelectType m_selectType;
|
||||
LayoutType m_layoutType;
|
||||
@@ -43,11 +47,29 @@ struct OptionRowDefinition
|
||||
set<PlayerNumber> m_vEnabledForPlayers; // only players in this set may change focus to this row
|
||||
int m_iDefault;
|
||||
bool m_bExportOnChange;
|
||||
bool m_bAllowThemeItems; // Should be true for dynamic strings.
|
||||
bool m_bAllowThemeTitle; // Should be true for dynamic strings.
|
||||
bool m_bAllowExplanation; // if false, ignores ScreenOptions::SHOW_EXPLANATIONS. Should be true for dynamic strings.
|
||||
/**
|
||||
* @brief Are theme items allowed here?
|
||||
*
|
||||
* This should be true for dynamic strings. */
|
||||
bool m_bAllowThemeItems;
|
||||
/**
|
||||
* @brief Are theme titles allowed here?
|
||||
*
|
||||
* This should be true for dynamic strings. */
|
||||
bool m_bAllowThemeTitle;
|
||||
/**
|
||||
* @brief Are explanations allowed for this row?
|
||||
*
|
||||
* If this is false, it will ignore the ScreenOptions::SHOW_EXPLANATIONS metric.
|
||||
*
|
||||
* This should be true for dynamic strings. */
|
||||
bool m_bAllowExplanation;
|
||||
bool m_bShowChoicesListOnSelect; // (currently unused)
|
||||
|
||||
/**
|
||||
* @brief Is this option enabled for the Player?
|
||||
* @param pn the Player the PlayerNumber represents.
|
||||
* @return true if the option is enabled, false otherwise. */
|
||||
bool IsEnabledForPlayer( PlayerNumber pn ) const
|
||||
{
|
||||
return m_vEnabledForPlayers.find(pn) != m_vEnabledForPlayers.end();
|
||||
@@ -154,8 +176,10 @@ inline void VerifySelected( SelectType st, const vector<bool> &vbSelected, const
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* (c) 2002-2004 Chris Danford
|
||||
/**
|
||||
* @file
|
||||
* @author Chris Danford (c) 2002-2004
|
||||
* @section LICENSE
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
/* PaneDisplay - An Actor that displays song information. */
|
||||
|
||||
#ifndef PANE_DISPLAY_H
|
||||
#define PANE_DISPLAY_H
|
||||
|
||||
@@ -30,7 +28,7 @@ enum PaneCategory
|
||||
NUM_PaneCategory,
|
||||
PaneCategory_Invalid,
|
||||
};
|
||||
|
||||
/** @brief An Actor that displays Song information. */
|
||||
class PaneDisplay: public ActorFrame
|
||||
{
|
||||
public:
|
||||
@@ -60,8 +58,10 @@ private:
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* (c) 2003 Glenn Maynard
|
||||
/**
|
||||
* @file
|
||||
* @author Glenn Maynard (c) 2003
|
||||
* @section LICENSE
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
||||
@@ -18,11 +18,12 @@ enum MusicWheelUsesSections
|
||||
NUM_MusicWheelUsesSections,
|
||||
MusicWheelUsesSections_Invalid
|
||||
};
|
||||
/** @brief The options for allowing the W1 timing. */
|
||||
enum AllowW1
|
||||
{
|
||||
ALLOW_W1_NEVER,
|
||||
ALLOW_W1_COURSES_ONLY,
|
||||
ALLOW_W1_EVERYWHERE,
|
||||
ALLOW_W1_NEVER, /**< The W1 timing is not used. */
|
||||
ALLOW_W1_COURSES_ONLY, /**< The W1 timing is used for courses only. */
|
||||
ALLOW_W1_EVERYWHERE, /**< The W1 timing is used for all modes. */
|
||||
NUM_AllowW1,
|
||||
AllowW1_Invalid
|
||||
};
|
||||
@@ -290,7 +291,8 @@ public:
|
||||
Preference<RString> m_sMachineName;
|
||||
Preference<RString> m_sCoursesToShowRanking;
|
||||
|
||||
Preference<bool> m_bQuirksMode; // enable quirky behavior desired by users of microsoft stepmania explorer 6.9
|
||||
/** @brief Enable some quirky behavior used by some older versions of StepMania. */
|
||||
Preference<bool> m_bQuirksMode;
|
||||
// Preference<RString> m_sDefaultFailType; // XXX: Fix fail bug?
|
||||
|
||||
// Debug:
|
||||
@@ -335,8 +337,10 @@ extern PrefsManager* PREFSMAN; // global and accessable from anywhere in our pro
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* (c) 2001-2004 Chris Danford, Chris Gomez
|
||||
/**
|
||||
* @file
|
||||
* @author Chris Danford, Chris Gomez (c) 2001-2004
|
||||
* @section LICENSE
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
/* RageFileDriverZip - A read-only file driver for ZIPs. */
|
||||
|
||||
#ifndef RAGE_FILE_DRIVER_ZIP_H
|
||||
#define RAGE_FILE_DRIVER_ZIP_H
|
||||
|
||||
#include "RageFileDriver.h"
|
||||
#include "RageThreads.h"
|
||||
|
||||
/** @brief A read-only file driver for ZIPs. */
|
||||
class RageFileDriverZip: public RageFileDriver
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
/* RageSoundReader_Merge - Chain sounds together */
|
||||
|
||||
#ifndef RAGE_SOUND_READER_MERGE
|
||||
#define RAGE_SOUND_READER_MERGE
|
||||
|
||||
#include "RageSoundReader.h"
|
||||
|
||||
/** @brief Chain different sounds together. */
|
||||
class RageSoundReader_Merge: public RageSoundReader
|
||||
{
|
||||
public:
|
||||
@@ -26,7 +24,9 @@ public:
|
||||
|
||||
void AddSound( RageSoundReader *pSound );
|
||||
|
||||
/* Finish adding sounds. */
|
||||
/**
|
||||
* @brief Finish adding sounds.
|
||||
* @param iPreferredSampleRate the sample rate for the sounds. */
|
||||
void Finish( int iPreferredSampleRate );
|
||||
|
||||
private:
|
||||
@@ -44,8 +44,10 @@ private:
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Copyright (c) 2004-2006 Glenn Maynard
|
||||
/**
|
||||
* @file
|
||||
* @author Glenn Maynard (c) 2004-2006
|
||||
* @section LICENSE
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
/* RageThread - Thread, mutex, semaphore and event classes. */
|
||||
|
||||
#ifndef RAGE_THREADS_H
|
||||
#define RAGE_THREADS_H
|
||||
|
||||
struct ThreadSlot;
|
||||
class RageTimer;
|
||||
/** @brief Thread, mutex, semaphore, and event classes. */
|
||||
class RageThread
|
||||
{
|
||||
public:
|
||||
@@ -49,7 +48,10 @@ private:
|
||||
static bool s_bIsShowingDialog;
|
||||
};
|
||||
|
||||
/* Register a thread created outside of RageThread. This gives it a name for RageThread::GetCurrentThreadName,
|
||||
/**
|
||||
* @brief Register a thread created outside of RageThread.
|
||||
*
|
||||
* This gives it a name for RageThread::GetCurrentThreadName,
|
||||
* and allocates a slot for checkpoints. */
|
||||
class RageThreadRegister
|
||||
{
|
||||
@@ -102,8 +104,10 @@ protected:
|
||||
void MarkLockedMutex();
|
||||
};
|
||||
|
||||
/* Lock a mutex on construction, unlock it on destruction. Helps for functions
|
||||
* with more than one return path. */
|
||||
/**
|
||||
* @brief Lock a mutex on construction, unlock it on destruction.
|
||||
*
|
||||
* Helps for functions with more than one return path. */
|
||||
class LockMutex
|
||||
{
|
||||
RageMutex &mutex;
|
||||
@@ -119,8 +123,10 @@ public:
|
||||
~LockMutex();
|
||||
LockMutex(LockMutex &cpy): mutex(cpy.mutex), file(NULL), line(-1), locked_at(cpy.locked_at), locked(true) { mutex.Lock(); }
|
||||
|
||||
/* Unlock the mutex (before this would normally go out of scope). This can
|
||||
* only be called once. */
|
||||
/**
|
||||
* @brief Unlock the mutex (before this would normally go out of scope).
|
||||
*
|
||||
* This can only be called once. */
|
||||
void Unlock();
|
||||
};
|
||||
|
||||
@@ -168,8 +174,10 @@ private:
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Glenn Maynard
|
||||
/**
|
||||
* @file
|
||||
* @author Glenn Maynard (c) 2001-2004
|
||||
* @section LICENSE
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
/* FilenameDB - A container for a file listing. */
|
||||
|
||||
#ifndef RAGE_UTIL_FILEDB
|
||||
#define RAGE_UTIL_FILEDB
|
||||
|
||||
@@ -54,7 +52,7 @@ struct File
|
||||
}
|
||||
};
|
||||
|
||||
/* This represents a directory. */
|
||||
/** @brief This represents a directory. */
|
||||
struct FileSet
|
||||
{
|
||||
set<File> files;
|
||||
@@ -78,7 +76,7 @@ struct FileSet
|
||||
int GetFileSize( const RString &sPath ) const;
|
||||
int GetFileHash( const RString &sPath ) const;
|
||||
};
|
||||
|
||||
/** @brief A container for a file listing. */
|
||||
class FilenameDB
|
||||
{
|
||||
public:
|
||||
@@ -141,8 +139,10 @@ public:
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003-2004 Glenn Maynard
|
||||
/**
|
||||
* @file
|
||||
* @author Glenn Maynard (c) 2003-2004
|
||||
* @section LICENSE
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
/* ReceptorArrow - A gray arrow that "receives" the note arrows. */
|
||||
|
||||
#ifndef RECEPTOR_ARROW_H
|
||||
#define RECEPTOR_ARROW_H
|
||||
|
||||
@@ -9,7 +7,7 @@
|
||||
#include "GameConstantsAndTypes.h"
|
||||
|
||||
class PlayerState;
|
||||
|
||||
/** @brief A gray arrow that "receives" the note arrows. */
|
||||
class ReceptorArrow : public ActorFrame
|
||||
{
|
||||
public:
|
||||
@@ -35,8 +33,10 @@ private:
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* (c) 2001-2004 Ben Nordstrom, Chris Danford
|
||||
/**
|
||||
* @file
|
||||
* @author Ben Nordstrom, Chris Danford (c) 2001-2004
|
||||
* @section LICENSE
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/* SampleHistory - Store a trailing history of values, and retrieve values with interpolation. */
|
||||
|
||||
#ifndef SAMPLE_HISTORY_H
|
||||
#define SAMPLE_HISTORY_H
|
||||
|
||||
/** @brief Store a trailing history of values, and retrieve values with interpolation. */
|
||||
class SampleHistory
|
||||
{
|
||||
public:
|
||||
@@ -22,8 +20,10 @@ private:
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* (c) 2006-2007 Glenn Maynard
|
||||
/**
|
||||
* @file
|
||||
* @author Glenn Maynard (c) 2006-2007
|
||||
* @section LICENSE
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
||||
@@ -195,7 +195,7 @@ void Screen::Input( const InputEventPlus &input )
|
||||
return; // don't care
|
||||
}
|
||||
|
||||
// Always broadcast clicks -aj
|
||||
// Always broadcast mouse input so themers can grab it. -aj
|
||||
if( input.DeviceI == DeviceInput( DEVICE_MOUSE, MOUSE_LEFT ) )
|
||||
MESSAGEMAN->Broadcast( (MessageID)(Message_LeftClick) );
|
||||
if( input.DeviceI == DeviceInput( DEVICE_MOUSE, MOUSE_RIGHT ) )
|
||||
|
||||
@@ -126,14 +126,20 @@ public:
|
||||
RString GetPrevScreen() const;
|
||||
|
||||
// let subclass override if they want
|
||||
virtual void MenuUp( const InputEventPlus &input ) { }
|
||||
virtual void MenuDown( const InputEventPlus &input ) { }
|
||||
virtual void MenuLeft( const InputEventPlus &input ) { }
|
||||
virtual void MenuRight( const InputEventPlus &input ) { }
|
||||
virtual void MenuStart( const InputEventPlus &input ) { }
|
||||
virtual void MenuSelect( const InputEventPlus &input ) { }
|
||||
virtual void MenuBack( const InputEventPlus &input ) { }
|
||||
virtual void MenuCoin( const InputEventPlus &input ) { }
|
||||
virtual void MenuUp(const InputEventPlus &input) { }
|
||||
virtual void MenuDown(const InputEventPlus &input) { }
|
||||
virtual void MenuLeft(const InputEventPlus &input) { }
|
||||
virtual void MenuRight(const InputEventPlus &input) { }
|
||||
virtual void MenuStart(const InputEventPlus &input) { }
|
||||
virtual void MenuSelect(const InputEventPlus &input) { }
|
||||
virtual void MenuBack(const InputEventPlus &input) { }
|
||||
virtual void MenuCoin(const InputEventPlus &input) { }
|
||||
// todo? -aj
|
||||
//virtual void LeftClick(const InputEventPlus &input) { }
|
||||
//virtual void RightClick(const InputEventPlus &input) { }
|
||||
//virtual void MiddleClick(const InputEventPlus &input) { }
|
||||
//virtual void MouseWheelUp(const InputEventPlus &input) { }
|
||||
//virtual void MouseWheelDown(const InputEventPlus &input) { }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||