local function GraphDisplay( pn ) local t = Def.ActorFrame { Def.GraphDisplay { InitCommand=cmd(Load,"GraphDisplay";); BeginCommand=function(self) local ss = SCREENMAN:GetTopScreen():GetStageStats(); self:Set( ss, ss:GetPlayerStageStats(pn) ); self:player( pn ); end }; }; return t; end local function ComboGraph( pn ) local t = Def.ActorFrame { Def.ComboGraph { InitCommand=cmd(Load,"ComboGraph";); BeginCommand=function(self) local ss = SCREENMAN:GetTopScreen():GetStageStats(); self:Set( ss, ss:GetPlayerStageStats(pn) ); self:player( pn ); end }; }; return t; end local function PercentScore( pn ) local t = LoadFont("Common normal")..{ InitCommand=cmd(zoom,0.625;shadowlength,1;player,pn); BeginCommand=cmd(playcommand,"Set"); SetCommand=function(self) -- todo: color by difficulty local SongOrCourse, StepsOrTrail; if GAMESTATE:IsCourseMode() then SongOrCourse = GAMESTATE:GetCurrentCourse() StepsOrTrail = GAMESTATE:GetCurrentTrail(pn) else SongOrCourse = GAMESTATE:GetCurrentSong() StepsOrTrail = GAMESTATE:GetCurrentSteps(pn) end; if SongOrCourse and StepsOrTrail then local st = StepsOrTrail:GetStepsType(); local diff = StepsOrTrail:GetDifficulty(); local courseType = GAMESTATE:IsCourseMode() and SongOrCourse:GetCourseType() or nil; local cd = GetCustomDifficulty(st, diff, courseType); self:diffuse(CustomDifficultyToColor(cd)); self:shadowcolor(CustomDifficultyToDarkColor(cd)); end local pss = STATSMAN:GetPlayedStageStats(1):GetPlayerStageStats(pn); if pss then local pct = pss:GetPercentDancePoints(); if pct == 1 then self:settext("100%"); else self:settext(FormatPercentScore(pct)); end; end; end; }; return t; end local t = LoadFallbackB(); t[#t+1] = StandardDecorationFromFileOptional("StageDisplay","StageDisplay"); if ShowStandardDecoration("GraphDisplay") then for pn in ivalues(GAMESTATE:GetHumanPlayers()) do t[#t+1] = StandardDecorationFromTable( "GraphDisplay" .. ToEnumShortString(pn), GraphDisplay(pn) ); end end if ShowStandardDecoration("ComboGraph") then for pn in ivalues(GAMESTATE:GetHumanPlayers()) do t[#t+1] = StandardDecorationFromTable( "ComboGraph" .. ToEnumShortString(pn), ComboGraph(pn) ); end end if ShowStandardDecoration("StepsDisplay") then for pn in ivalues(PlayerNumber) do local t2 = Def.StepsDisplay { InitCommand=cmd(Load,"StepsDisplayEvaluation",pn;SetFromGameState,pn;); UpdateNetEvalStatsMessageCommand=function(self,param) if GAMESTATE:IsPlayerEnabled(pn) then self:SetFromSteps(param.Steps) end; end; }; t[#t+1] = StandardDecorationFromTable( "StepsDisplay" .. ToEnumShortString(pn), t2 ); t[#t+1] = StandardDecorationFromTable( "PercentScore" .. ToEnumShortString(pn), PercentScore(pn) ); end end for pn in ivalues(PlayerNumber) do local MetricsName = "MachineRecord" .. PlayerNumberToString(pn); t[#t+1] = LoadActor( THEME:GetPathG(Var "LoadingScreen", "MachineRecord"), pn ) .. { InitCommand=function(self) self:player(pn); self:name(MetricsName); ActorUtil.LoadAllCommandsAndSetXY(self,Var "LoadingScreen"); end; }; end for pn in ivalues(PlayerNumber) do local MetricsName = "PersonalRecord" .. PlayerNumberToString(pn); t[#t+1] = LoadActor( THEME:GetPathG(Var "LoadingScreen", "PersonalRecord"), pn ) .. { InitCommand=function(self) self:player(pn); self:name(MetricsName); ActorUtil.LoadAllCommandsAndSetXY(self,Var "LoadingScreen"); end; }; end for pn in ivalues(PlayerNumber) do local MetricsName = "StageAward" .. PlayerNumberToString(pn); t[#t+1] = LoadActor( THEME:GetPathG(Var "LoadingScreen", "StageAward"), pn ) .. { InitCommand=function(self) self:player(pn); self:name(MetricsName); ActorUtil.LoadAllCommandsAndSetXY(self,Var "LoadingScreen"); end; BeginCommand=cmd(playcommand,"Set"); SetCommand=function(self) local tStats = THEME:GetMetric(Var "LoadingScreen", "Summary") and STATSMAN:GetAccumPlayedStageStats() or STATSMAN:GetCurStageStats(); tStats = tStats:GetPlayerStageStats(pn); if tStats:GetStageAward() and not tStats:GetFailed() then self:settext( THEME:GetString( "StageAward", ToEnumShortString( tStats:GetStageAward() ) ) ); else self:settext( "" ); end end; }; end for pn in ivalues(PlayerNumber) do local MetricsName = "PeakComboAward" .. PlayerNumberToString(pn); t[#t+1] = LoadActor( THEME:GetPathG(Var "LoadingScreen", "PeakComboAward"), pn ) .. { InitCommand=function(self) self:player(pn); self:name(MetricsName); ActorUtil.LoadAllCommandsAndSetXY(self,Var "LoadingScreen"); end; BeginCommand=cmd(playcommand,"Set"); SetCommand=function(self) local tStats = THEME:GetMetric(Var "LoadingScreen", "Summary") and STATSMAN:GetAccumPlayedStageStats() or STATSMAN:GetCurStageStats(); tStats = tStats:GetPlayerStageStats(pn); if tStats:GetPeakComboAward() then self:settext( THEME:GetString( "PeakComboAward", ToEnumShortString( tStats:GetPeakComboAward() ) ) ); else self:settext( "" ); end end; }; end t[#t+1] = StandardDecorationFromFileOptional("SongInformation","SongInformation") .. { BeginCommand=function(self) local SongOrCourse; if GAMESTATE:GetCurrentSong() then SongOrCourse = GAMESTATE:GetCurrentSong(); elseif GAMESTATE:GetCurrentCourse() then SongOrCourse = GAMESTATE:GetCurrentCourse(); else return end if SongOrCourse:HasBanner() then self:visible(false); else self:visible(true); end end; SetCommand=function(self) local c = self:GetChildren(); local SongOrCourse; if GAMESTATE:GetCurrentSong() then SongOrCourse = GAMESTATE:GetCurrentSong(); c.TextTitle:settext( SongOrCourse:GetDisplayMainTitle() or nil ); c.TextSubtitle:settext( SongOrCourse:GetDisplaySubTitle() or nil ); c.TextArtist:settext( SongOrCourse:GetDisplayArtist() or nil ); if SongOrCourse:GetDisplaySubTitle() == "" then c.TextTitle:visible(true); c.TextTitle:y(-16.5/2); c.TextSubtitle:visible(false); c.TextSubtitle:y(0); c.TextArtist:visible(true); c.TextArtist:y(18/2); else c.TextTitle:visible(true); c.TextTitle:y(-16.5); c.TextSubtitle:visible(true); c.TextSubtitle:y(0); c.TextArtist:visible(true); c.TextArtist:y(18); end -- self:playcommand("Tick"); elseif GAMESTATE:GetCurrentCourse() then SongOrCourse = GAMESTATE:GetCurrentCourse(); c.TextTitle:settext( SongOrCourse:GetDisplayMainTitle() or nil ); c.TextSubtitle:settext( SongOrCourse:GetDisplaySubTitle() or nil ); c.TextArtist:settext( SongOrCourse:GetDisplayArtist() or nil ); -- self:playcommand("Tick"); else SongOrCourse = nil; c.TextTitle:settext(""); c.TextSubtitle:settext(""); c.TextArtist:settext(""); self:playcommand("Hide") end end; -- OnCommand=cmd(playcommand,"Set"); CurrentSongChangedMessageCommand=cmd(playcommand,"Set"); CurrentCourseChangedMessageCommand=cmd(playcommand,"Set"); DisplayLanguageChangedMessageCommand=cmd(playcommand,"Set"); }; t[#t+1] = StandardDecorationFromFileOptional("LifeDifficulty","LifeDifficulty"); t[#t+1] = StandardDecorationFromFileOptional("TimingDifficulty","TimingDifficulty"); t[#t+1] = StandardDecorationFromFileOptional("GameType","GameType"); t[#t+1] = Def.ActorFrame { Condition=GAMESTATE:HasEarnedExtraStage() and GAMESTATE:IsExtraStage() and not GAMESTATE:IsExtraStage2(); InitCommand=cmd(draworder,105); LoadActor( THEME:GetPathS("ScreenEvaluation","try Extra1" ) ) .. { Condition=THEME:GetMetric( Var "LoadingScreen","Summary" ) == false; OnCommand=cmd(play); }; LoadActor( THEME:GetPathG("ScreenStageInformation","Stage extra1" ) ) .. { Condition=THEME:GetMetric( Var "LoadingScreen","Summary" ) == false; InitCommand=cmd(Center); OnCommand=cmd(diffusealpha,0;zoom,0.85;bounceend,1;zoom,1;diffusealpha,1;sleep,0;glow,Color("White");decelerate,1;glow,Color("Invisible");smooth,0.35;zoom,0.25;y,SCREEN_BOTTOM-72); }; }; t[#t+1] = Def.ActorFrame { Condition=GAMESTATE:HasEarnedExtraStage() and not GAMESTATE:IsExtraStage() and GAMESTATE:IsExtraStage2(); InitCommand=cmd(draworder,105); LoadActor( THEME:GetPathS("ScreenEvaluation","try Extra2" ) ) .. { Condition=THEME:GetMetric( Var "LoadingScreen","Summary" ) == false; OnCommand=cmd(play); }; LoadActor( THEME:GetPathG("ScreenStageInformation","Stage extra2" ) ) .. { Condition=THEME:GetMetric( Var "LoadingScreen","Summary" ) == false; InitCommand=cmd(Center); OnCommand=cmd(diffusealpha,0;zoom,0.85;bounceend,1;zoom,1;diffusealpha,1;sleep,0;glow,Color("White");decelerate,1;glow,Color("Invisible");smooth,0.35;zoom,0.25;y,SCREEN_BOTTOM-72); }; }; return t