Add a real High Scores screen.

(cherry picked from commit 4c5bfa5e0eb351a0d90c70413a7cd8622007d188)
This commit is contained in:
Jonathan Payne
2014-08-28 06:01:12 -05:00
committed by freem
parent 6453b8b04a
commit 8f0e2246f9
21 changed files with 392 additions and 36 deletions
@@ -0,0 +1 @@
Common Bold
@@ -0,0 +1 @@
Common Normal
@@ -0,0 +1 @@
Common Normal
@@ -0,0 +1,100 @@
local t = Def.ActorFrame {
InitCommand=cmd(runcommandsonleaves,cmd(ztest,true));
};
t[#t+1] = LoadActor("frame") .. {
InitCommand=cmd(diffusealpha,0.1;);
};
t[#t+1] = Def.TextBanner {
InitCommand=cmd(x,-196;y,0;Load,"TextBannerHighScores");
SetCommand=function(self, params)
if params.Song then
self:SetFromSong( params.Song );
self:diffuse( SONGMAN:GetSongColor(params.Song) );
else
self:SetFromString( params.Course:GetTitle() );
self:diffuse( SONGMAN:GetCourseColor(params.Course) );
end
end;
};
local NumColumns = THEME:GetMetric(Var "LoadingScreen", "NumColumns");
local c;
local Scores = Def.ActorFrame {
InitCommand = function(self)
c = self:GetChildren();
end;
};
t[#t+1] = Scores;
for idx=1,NumColumns do
local x_pos = -60 + 80 * (idx-1);
Scores[#Scores+1] = LoadFont(Var "LoadingScreen","Name") .. {
Name = idx .. "Name";
InitCommand=cmd(x,x_pos;y,6;shadowlengthx,0;shadowlengthy,2;shadowcolor,color("#000000");maxwidth,68;);
};
Scores[#Scores+1] = LoadFont(Var "LoadingScreen","Score") .. {
Name = idx .. "Score";
InitCommand=cmd(x,x_pos;y,-10;shadowlengthx,0;shadowlengthy,2;shadowcolor,color("#000000");maxwidth,68;);
};
Scores[#Scores+1] = LoadActor("filled") .. {
Name = idx .. "Filled";
InitCommand=cmd(x,x_pos;);
};
Scores[#Scores+1] = LoadActor("empty") .. {
Name = idx .. "Empty";
InitCommand=cmd(x,x_pos;);
};
end
local sNoScoreName = THEME:GetMetric("Common", "NoScoreName");
Scores.SetCommand=function(self, params)
local pProfile = PROFILEMAN:GetMachineProfile();
for name, child in pairs(c) do
child:visible(false);
end
for idx=1,NumColumns do
c[idx .. "Empty"]:visible(true);
end
local Current = params.Song or params.Course;
if Current then
for idx, CurrentItem in pairs(params.Entries) do
if CurrentItem then
local hsl = pProfile:GetHighScoreList(Current, CurrentItem);
local hs = hsl and hsl:GetHighScores();
--[[Warn( tostring(CurrentItem:GetStepsType()) .. ", " ..
tostring(CurrentItem:GetDifficulty()) .. ": " ..
tostring(hsl) .. ", " ..
tostring(#hs) );]]
local name = c[idx .. "Name"];
local score = c[idx .. "Score"];
local filled = c[idx .. "Filled"];
local empty = c[idx .. "Empty"];
--assert( c[sNameType], sNameType );
--assert( c[sScoreType], sScoreType );
name:visible( true );
score:visible( true );
filled:visible( true );
empty:visible( false );
if hs and #hs > 0 then
name:settext( hs[1]:GetName() );
score:settext( FormatPercentScore( hs[1]:GetPercentDP() ) );
else
name:settext( sNoScoreName );
score:settext( FormatPercentScore( 0 ) );
end
end
end;
end
end;
return t;
Binary file not shown.

After

Width:  |  Height:  |  Size: 628 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 721 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

+36 -1
View File
@@ -1643,6 +1643,10 @@ No=NO
Yes=YES
Cancel=CANCEL
[ScreenHighScores]
HeaderText=High Scores
HeaderSubText=Who's the top dog?
[ScreenRanking]
[ScreenSMOnlineLogin]
@@ -1910,10 +1914,41 @@ dance-solo=solo
dance-threepanel=3panel
dance-routine=routine
lights-cabinet=Lights
# SSC
#
Dance_Single=Single
Dance_Double=Double
Dance_Couple=Couple
Dance_Solo=Solo
Dance_Routine=Routine
Dance_Threepanel=3 Panels
Pump_Single=Single
Pump_Double=Double
Pump_Halfdouble=Half-Double
Pump_Couple=Couple
Pump_Routine=Routine
Kb7_Single=KB7
Ez2_Single=Single
Ez2_Double=Double
Ez2_Real=Real
Para_Single=Single
Ds3ddx_Single=Single
Bm_Single5=5 Keys
Bm_Double5=10 Keys
Bm_Single7=7 Keys
Bm_Double7=14 Keys
Maniax_Single=Single
Maniax_Double=Double
Techno_Single4=Single 4
Techno_Single5=Single 5
Techno_Single8=Single 8
Techno_Double4=Double 4
Techno_Double5=Double 5
Techno_Double8=Double 8
Pnm_Five=5 Button
Pnm_Nine=9 Button
Guitar_Five=5 Frets
Karaoke=Karaoke
Lights_Cabinet=Lights
[TapNoteScore]
AvoidMine=Avoid Mine
+1 -1
View File
@@ -42,7 +42,7 @@ Branch = {
end,
NoiseTrigger = function()
local hour = Hour()
return hour > 3 and hour < 6 and "ScreenNoise" or "ScreenInit"
return hour > 3 and hour < 6 and "ScreenNoise" or "ScreenHighScores"
end,
TitleMenu = function()
-- home mode is the most assumed use of sm-ssc.
+36
View File
@@ -39,6 +39,9 @@ CourseDifficultiesToShow="easy,medium,hard"
# be shown in lights mode! So don't hide it here.
StepsTypesToHide=""
# Score placeholder for ScreenHighScores
NoScoreName="STEP"
# The number of entries before "Various" is shown on the BPMDisplay, etc.
MaxCourseEntriesBeforeShowVarious=10
@@ -1497,6 +1500,11 @@ ArtistOnCommand=visible,false
ArtistPrependString="/"
AfterSetCommand=%TextBannerAfterSet
[TextBannerHighScores]
Fallback="TextBanner"
AfterSetCommand=%TextBannerHighScoreAfterSet
[WheelNotifyIcon]
ShowTraining=false
BlinkPlayersBest=true
@@ -4503,6 +4511,34 @@ AllowStyleTypes="TwoPlayersTwoSides"
MinSecondsToStep=0
MinSecondsToMusic=0
[ScreenHighScores]
Fallback="ScreenAttract"
Class="ScreenHighScores"
NextScreen="ScreenInit"
PrevScreen="ScreenDemonstration"
StartScreen=Branch.TitleMenu()
TimerSeconds=-1
HighScoresType="HighScoresType_AllSteps"
MaxItemsToShow=50
NumColumns=5
ColumnDifficulty1="Difficulty_Beginner"
ColumnDifficulty2="Difficulty_Easy"
ColumnDifficulty3="Difficulty_Medium"
ColumnDifficulty4="Difficulty_Hard"
ColumnDifficulty5="Difficulty_Challenge"
ColumnStepsType1=GAMEMAN:GetFirstStepsTypeForGame(GAMESTATE:GetCurrentGame())
ColumnStepsType2=GAMEMAN:GetFirstStepsTypeForGame(GAMESTATE:GetCurrentGame())
ColumnStepsType3=GAMEMAN:GetFirstStepsTypeForGame(GAMESTATE:GetCurrentGame())
ColumnStepsType4=GAMEMAN:GetFirstStepsTypeForGame(GAMESTATE:GetCurrentGame())
ColumnStepsType5=GAMEMAN:GetFirstStepsTypeForGame(GAMESTATE:GetCurrentGame())
ScrollerItemsToDraw=7
ScrollerSecondsPerItem=0.4
ManualScrolling=false
ScrollerOnCommand=x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y+36;SetMask,608,40
ScrollerItemTransformFunction=function(self,offset,itemIndex,numItems) self:y(46.1*offset) end
[ScreenNoise]
Fallback="ScreenAttract"
Class="ScreenAttract"
Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

@@ -0,0 +1,40 @@
local t = LoadFallbackB();
local StepsType = ToEnumShortString( GAMEMAN:GetFirstStepsTypeForGame(GAMESTATE:GetCurrentGame()) );
local stString = THEME:GetString("StepsType",StepsType);
local NumColumns = THEME:GetMetric(Var "LoadingScreen", "NumColumns");
t[#t+1] = Def.ActorFrame {
InitCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y-160);
Def.Quad {
InitCommand=cmd(zoomto,SCREEN_WIDTH, 56);
OnCommand=cmd(diffuse,color("#333333");diffusealpha,0.75;fadebottom,0.35;fadetop,0.35);
};
};
for i=1,NumColumns do
local st = THEME:GetMetric(Var "LoadingScreen","ColumnStepsType" .. i);
local dc = THEME:GetMetric(Var "LoadingScreen","ColumnDifficulty" .. i);
local s = GetCustomDifficulty( st, dc );
t[#t+1] = Def.ActorFrame {
InitCommand=cmd(x,SCREEN_CENTER_X-60 + 80 * (i-1);y,SCREEN_CENTER_Y-160);
LoadActor("_difficulty frame") .. {
OnCommand=cmd(diffuse,CustomDifficultyToColor(s);zoomtowidth,80);
};
LoadFont("Common Normal") .. {
InitCommand=cmd(uppercase,true;settext,CustomDifficultyToLocalizedString(s));
OnCommand=cmd(zoom,0.75;diffuse,CustomDifficultyToColor(s);shadowlength,1);
};
};
end
t[#t+1] = LoadFont("Common Bold") .. {
InitCommand=cmd(settext,stString;x,SCREEN_CENTER_X-220;y,SCREEN_CENTER_Y-160);
OnCommand=cmd(zoom,0.75;skewx,-0.125;shadowlength,1);
};
t.OnCommand=cmd(draworder,105);
return t;
@@ -0,0 +1 @@
_blank
@@ -19,11 +19,17 @@ t[#t+1] = Def.ActorFrame {
LoadActor(THEME:GetPathB("_frame","3x3"),"rounded black",64,16);
LoadFont("Common Normal") .. {
InitCommand=cmd(y,-1;shadowlength,1;playcommand,"Set");
CurrentSongChangedMessageCommand=cmd(playcommand,"Set");
CurrentCourseChangedMessageCommand=cmd(playcommand,"Set");
CurrentStepsP1ChangedMessageCommand=cmd(playcommand,"Set");
CurrentStepsP2ChangedMessageCommand=cmd(playcommand,"Set");
CurrentTraiP1ChangedMessageCommand=cmd(playcommand,"Set");
CurrentTraiP2ChangedMessageCommand=cmd(playcommand,"Set");
SetCommand=function(self)
if GAMESTATE:GetCurrentCourse() then
self:settext( GAMESTATE:GetCurrentStageIndex()+1 .. " / " .. GAMESTATE:GetCurrentCourse():GetEstimatedNumStages() );
elseif GAMESTATE:IsEventMode() then
if GAMESTATE:IsEventMode() then
self:settextf("Stage %s", curStageIndex+1);
elseif GAMESTATE:GetPlayMode() == 'PlayMode_Endless' or 'PlayMode_Oni' or 'Nonstop' then
self:settextf("%i / %i", curStageIndex , GAMESTATE:GetCurrentCourse():GetEstimatedNumStages());
else
if THEME:GetMetric(curScreen,"StageDisplayUseShortString") then
self:settextf("%s", ToEnumShortString(curStage));
@@ -0,0 +1,104 @@
local t = Def.ActorFrame {
FOV=90;
InitCommand=cmd(runcommandsonleaves,cmd(ztest,true));
};
t[#t+1] = LoadActor("frame") .. {
InitCommand=cmd(diffusealpha,0.25);
};
t[#t+1] = Def.TextBanner {
InitCommand=cmd(x,-292;Load,"TextBannerHighScores");
SetCommand=function(self, params)
if params.Song then
self:SetFromSong( params.Song );
self:diffuse( SONGMAN:GetSongColor(params.Song) );
else
self:SetFromString( params.Course:GetTitle() );
self:diffuse( SONGMAN:GetCourseColor(params.Course) );
end
end;
};
local NumColumns = THEME:GetMetric(Var "LoadingScreen", "NumColumns");
local c;
local Scores = Def.ActorFrame {
InitCommand = function(self)
c = self:GetChildren();
end;
};
t[#t+1] = Scores;
for idx=1,NumColumns do
local x_pos = -60 + 80 * (idx-1);
Scores[#Scores+1] = LoadFont(Var "LoadingScreen","Name") .. {
Name = idx .. "Name";
InitCommand=cmd(x,x_pos;y,8;shadowlength,1;maxwidth,68);
OnCommand=cmd(zoom,0.75);
};
Scores[#Scores+1] = LoadFont(Var "LoadingScreen","Score") .. {
Name = idx .. "Score";
InitCommand=cmd(x,x_pos;y,-9;shadowlength,1;maxwidth,68);
OnCommand=cmd(zoom,0.75);
};
Scores[#Scores+1] = LoadActor("filled") .. {
Name = idx .. "Filled";
InitCommand=cmd(x,x_pos;);
};
Scores[#Scores+1] = LoadActor("empty") .. {
Name = idx .. "Empty";
InitCommand=cmd(x,x_pos;);
OnCommand=cmd(zoom,0.75);
};
end
local sNoScoreName = THEME:GetMetric("Common", "NoScoreName");
Scores.SetCommand=function(self, params)
local pProfile = PROFILEMAN:GetMachineProfile();
for name, child in pairs(c) do
child:visible(false);
end
for idx=1,NumColumns do
c[idx .. "Empty"]:visible(true);
end
local Current = params.Song or params.Course;
if Current then
for idx, CurrentItem in pairs(params.Entries) do
if CurrentItem then
local hsl = pProfile:GetHighScoreList(Current, CurrentItem);
local hs = hsl and hsl:GetHighScores();
--[[Warn( tostring(CurrentItem:GetStepsType()) .. ", " ..
tostring(CurrentItem:GetDifficulty()) .. ": " ..
tostring(hsl) .. ", " ..
tostring(#hs) );]]
local name = c[idx .. "Name"];
local score = c[idx .. "Score"];
local filled = c[idx .. "Filled"];
local empty = c[idx .. "Empty"];
--assert( c[sNameType], sNameType );
--assert( c[sScoreType], sScoreType );
name:visible( true );
score:visible( true );
filled:visible( true );
empty:visible( false );
if hs and #hs > 0 then
name:settext( hs[1]:GetName() );
score:settext( FormatPercentScore( hs[1]:GetPercentDP() ) );
else
name:settext( sNoScoreName );
score:settext( FormatPercentScore( 0 ) );
end
end
end;
end
end;
return t;
Binary file not shown.

After

Width:  |  Height:  |  Size: 628 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 721 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

@@ -1,9 +1,6 @@
return Def.CourseContentsList {
MaxSongs = 4;
NumItemsToDraw = 8; -- xxx: Doesn't scroll anymore.
--[[ InitCommand=cmd(x,SCREEN_CENTER_X+160;y,SCREEN_CENTER_Y+91);
OnCommand=cmd(zoomy,0;bounceend,0.3;zoom,1);
OffCommand=cmd(zoomy,1;bouncebegin,0.3;zoomy,0); --]]
NumItemsToDraw = 8;
ShowCommand=cmd(bouncebegin,0.3;zoomy,1);
HideCommand=cmd(linear,0.3;zoomy,0);
SetCommand=function(self)
@@ -11,9 +8,12 @@ return Def.CourseContentsList {
self:PositionItems();
self:SetTransformFromHeight(44);
self:SetCurrentAndDestinationItem(0);
-- self:SetDestinationItem( self:GetNumItems()-2 );
--
MESSAGEMAN:Broadcast("SystemMessage",{ Text ="Test" });
--
self:SetDestinationItem(4);
self:SetLoop(false);
self:SetMask(270,0);
self:SetMask(270,44*4);
end;
CurrentTrailP1ChangedMessageCommand=cmd(playcommand,"Set");
CurrentTrailP2ChangedMessageCommand=cmd(playcommand,"Set");
@@ -22,14 +22,11 @@ return Def.CourseContentsList {
InitCommand=cmd(setsize,270,44);
LoadActor(THEME:GetPathG("CourseEntryDisplay","bar")) .. {
-- InitCommand=cmd(diffusetopedge,Color("Invisible"));
SetSongCommand=function(self, params)
if params.Difficulty then
-- self:diffuse( SONGMAN:GetSongColor(params.Song) );
self:diffuse( CustomDifficultyToColor(params.Difficulty) );
else
self:diffuse( color("#FFFFFF") );
-- self:diffuse( CustomDifficultyToColor(params.Difficulty) );
end
(cmd(finishtweening;diffusealpha,0;sleep,0.125*params.Number;linear,0.125;diffusealpha,1;linear,0.05;glow,color("1,1,1,0.5");decelerate,0.1;glow,color("1,1,1,0")))(self);
@@ -68,14 +65,6 @@ return Def.CourseContentsList {
end;
};
--[[ LoadFont("CourseEntryDisplay","number") .. {
InitCommand=cmd(x,114+8;y,-12;shadowlength,1);
SetSongCommand=function(self, params)
self:settext(string.format("#%i", params.Number));
(cmd(finishtweening;zoom,0.5;zoomy,0.5*1.5;diffusealpha,0;sleep,0.125*params.Number;linear,0.125;diffusealpha,1;linear,0.05;zoomy,0.5*1;zoomx,0.5*1.1;glow,color("1,1,1,0.5");decelerate,0.1;zoom,0.5;glow,color("1,1,1,0")))(self);
end;
}; --]]
LoadFont("CourseEntryDisplay","difficulty") .. {
Text="0";
InitCommand=cmd(x,114;y,0;zoom,0.75;shadowlength,1);
@@ -86,19 +75,5 @@ return Def.CourseContentsList {
(cmd(finishtweening;zoomy,0;sleep,0.125*params.Number;linear,0.125;zoomy,1.1;linear,0.05;zoomx,1.1;decelerate,0.1;zoom,1))(self);
end;
};
--[[ LoadFont("Common","normal") .. {
OnCommand=cmd(x,0;y,-8;zoom,0.7;shadowlength,0);
DifficultyChangedCommand=function(self, params)
if params.PlayerNumber ~= GAMESTATE:GetMasterPlayerNumber() then return end
self:settext( params.Meter );
self:diffuse( CourseDifficultyColors[params.Difficulty] );
end;
}; --]]
--[[ LoadFont("Common","normal") .. {
OnCommand=cmd(x,SCREEN_CENTER_X-192;y,SCREEN_CENTER_Y-230;horizalign,right;shadowlength,0);
SetSongCommand=function(self, params) self:settext(params.Modifiers); end;
}; --]]
};
};
+37
View File
@@ -2,6 +2,10 @@ local mainMaxWidth = 228; -- zoom w/subtitle is 0.75 (multiply by 1.25)
local subMaxWidth = 420; -- zoom is 0.6 (multiply zoom,1 value by 1.4)
local artistMaxWidth = 300/0.8;
local mainMaxWidthHighScore = 192; -- zoom w/subtitle is 0.75 (multiply by 1.25)
local subMaxWidthHighScore = 280; -- zoom is 0.6 (multiply zoom,1 value by 1.4)
local artistMaxWidthHighScore = 280/0.8;
--[[
-- The old (cmd(blah))(Actor) syntax is hard to read.
-- This is longer, but much easier to read. - Colby
@@ -38,3 +42,36 @@ function TextBannerAfterSet(self,param)
Artist:y(10)
end
end
function TextBannerHighScoreAfterSet(self,param)
local Title = self:GetChild("Title")
local Subtitle = self:GetChild("Subtitle")
local Artist = self:GetChild("Artist")
if Subtitle:GetText() == "" then
Title:maxwidth(mainMaxWidthHighScore)
Title:y(-8)
Title:zoom(1)
-- hide so that the game skips drawing.
Subtitle:visible(false)
Artist:zoom(0.66)
Artist:maxwidth(artistMaxWidthHighScore)
Artist:y(8)
else
Title:maxwidth(mainMaxWidthHighScore*1.25)
Title:y(-11)
Title:zoom(0.75)
-- subtitle below title
Subtitle:visible(true)
Subtitle:zoom(0.6)
Subtitle:y(0)
Subtitle:maxwidth(subMaxWidthHighScore)
Artist:zoom(0.6)
Artist:maxwidth(artistMaxWidthHighScore)
Artist:y(10)
end
end
+19
View File
@@ -542,6 +542,9 @@ SubtitleOnCommand=horizalign,left;shadowlength,1;
ArtistOnCommand=horizalign,left;shadowlength,1;skewx,-0.2
ArtistPrependString=""
[TextBannerHighScore]
Fallback="TextBanner"
[WheelNotifyIcon]
[Screen]
@@ -1384,6 +1387,22 @@ Line18="list,Characters"
#
#
[ScreenHighScores]
Fallback="ScreenWithMenuElements"
ResetGameState=false
AttractVolume=true
FOV=90
ScrollerItemsToDraw=9
ScrollerOnCommand=x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y;SetMask,624,40;draworder,-5
ScrollerItemTransformFunction=function(self,offset,itemIndex,numItems) \
self:y(46 * offset); \
end;
HelpOnCommand=visible,false
[ScreenRanking]
#