diff --git a/Themes/default/BGAnimations/ScreenEvaluation decorations/_bannerframe.png b/Themes/default/BGAnimations/ScreenEvaluation underlay/_bannerframe.png similarity index 100% rename from Themes/default/BGAnimations/ScreenEvaluation decorations/_bannerframe.png rename to Themes/default/BGAnimations/ScreenEvaluation underlay/_bannerframe.png diff --git a/Themes/default/BGAnimations/ScreenEvaluation decorations/_underbanner.png b/Themes/default/BGAnimations/ScreenEvaluation underlay/_underbanner.png similarity index 100% rename from Themes/default/BGAnimations/ScreenEvaluation decorations/_underbanner.png rename to Themes/default/BGAnimations/ScreenEvaluation underlay/_underbanner.png diff --git a/Themes/default/BGAnimations/ScreenEvaluation decorations/default.lua b/Themes/default/BGAnimations/ScreenEvaluation underlay/default.lua similarity index 99% rename from Themes/default/BGAnimations/ScreenEvaluation decorations/default.lua rename to Themes/default/BGAnimations/ScreenEvaluation underlay/default.lua index 9ccb78b47f..30577c802a 100644 --- a/Themes/default/BGAnimations/ScreenEvaluation decorations/default.lua +++ b/Themes/default/BGAnimations/ScreenEvaluation underlay/default.lua @@ -3,7 +3,7 @@ -- todo: make a more metrics-bound version of this screen anyways for beginner accessibility. -- todo: accommodate EvaluationSummary too -local t = LoadFallbackB() +local t = Def.ActorFrame {}; -- A very useful table... local eval_lines = { @@ -150,45 +150,6 @@ for ip, p in ipairs(GAMESTATE:GetHumanPlayers()) do end; } end - - -- Primary score. - eval_parts[#eval_parts+1] = Def.BitmapText { - Font = "_overpass 36px", - InitCommand=cmd(horizalign,center;x,_screen.cx + (grade_parts_offs);y,(_screen.cy-65);diffuse,ColorMidTone(PlayerColor(p));zoom,1;shadowlength,1), - OnCommand=function(self) - self:settext(GetPlScore(p, "primary")):diffusealpha(0):sleep(0.5):decelerate(0.3):diffusealpha(1) - end; - OffCommand=function(self) - self:decelerate(0.3):diffusealpha(0) - end; - } - -- Secondary score. - eval_parts[#eval_parts+1] = Def.BitmapText { - Font = "_overpass 36px", - InitCommand=cmd(horizalign,center;x,_screen.cx + (grade_parts_offs);y,(_screen.cy-65)+30;diffuse,ColorDarkTone(PlayerColor(p));zoom,0.75;shadowlength,1), - OnCommand=function(self) - self:settext(GetPlScore(p, "secondary")):diffusealpha(0):sleep(0.6):decelerate(0.3):diffusealpha(1) - end; - OffCommand=function(self) - self:sleep(0.1):decelerate(0.3):diffusealpha(0) - end; - } - - eval_parts[#eval_parts+1] = Def.BitmapText { - Font = "Common Condensed", - InitCommand=cmd(horizalign,center;x,_screen.cx + (grade_parts_offs);y,(_screen.cy-65)+56;diffuse,ColorDarkTone(PlayerColor(p));zoom,0.75;shadowlength,1), - OnCommand=function(self) - local record = STATSMAN:GetCurStageStats():GetPlayerStageStats(p):GetPersonalHighScoreIndex() - local hasPersonalRecord = record ~= -1 - self:visible(hasPersonalRecord); - local text = string.format(THEME:GetString("ScreenEvaluation", "PersonalRecord"), record+1) - self:settext(text) - self:diffusealpha(0):sleep(0.6):decelerate(0.3):diffusealpha(1) - end; - OffCommand=function(self) - self:sleep(0.1):decelerate(0.3):diffusealpha(0) - end; - } -- Letter grade and associated parts. eval_parts[#eval_parts+1] = Def.ActorFrame{ @@ -235,6 +196,46 @@ for ip, p in ipairs(GAMESTATE:GetHumanPlayers()) do OffCommand=cmd(decelerate,0.3;diffusealpha,0); } } + + + -- Primary score. + eval_parts[#eval_parts+1] = Def.BitmapText { + Font = "_overpass 36px", + InitCommand=cmd(horizalign,center;x,_screen.cx + (grade_parts_offs);y,(_screen.cy-65);diffuse,ColorMidTone(PlayerColor(p));zoom,1;shadowlength,1), + OnCommand=function(self) + self:settext(GetPlScore(p, "primary")):diffusealpha(0):sleep(0.5):decelerate(0.3):diffusealpha(1) + end; + OffCommand=function(self) + self:decelerate(0.3):diffusealpha(0) + end; + } + -- Secondary score. + eval_parts[#eval_parts+1] = Def.BitmapText { + Font = "_overpass 36px", + InitCommand=cmd(horizalign,center;x,_screen.cx + (grade_parts_offs);y,(_screen.cy-65)+30;diffuse,ColorDarkTone(PlayerColor(p));zoom,0.75;shadowlength,1), + OnCommand=function(self) + self:settext(GetPlScore(p, "secondary")):diffusealpha(0):sleep(0.6):decelerate(0.3):diffusealpha(1) + end; + OffCommand=function(self) + self:sleep(0.1):decelerate(0.3):diffusealpha(0) + end; + } + + eval_parts[#eval_parts+1] = Def.BitmapText { + Font = "Common Condensed", + InitCommand=cmd(horizalign,center;x,_screen.cx + (grade_parts_offs);y,(_screen.cy-65)+56;diffuse,ColorDarkTone(PlayerColor(p));zoom,0.75;shadowlength,1), + OnCommand=function(self) + local record = STATSMAN:GetCurStageStats():GetPlayerStageStats(p):GetPersonalHighScoreIndex() + local hasPersonalRecord = record ~= -1 + self:visible(hasPersonalRecord); + local text = string.format(THEME:GetString("ScreenEvaluation", "PersonalRecord"), record+1) + self:settext(text) + self:diffusealpha(0):sleep(0.6):decelerate(0.3):diffusealpha(1) + end; + OffCommand=function(self) + self:sleep(0.1):decelerate(0.3):diffusealpha(0) + end; + } end t[#t+1] = eval_parts diff --git a/Themes/default/BGAnimations/ScreenEvaluationSummary underlay/default.lua b/Themes/default/BGAnimations/ScreenEvaluationSummary underlay/default.lua new file mode 100644 index 0000000000..0e15cf9b80 --- /dev/null +++ b/Themes/default/BGAnimations/ScreenEvaluationSummary underlay/default.lua @@ -0,0 +1,164 @@ +-- ...So I realize that I completely ignored almost each and every +-- metrics-bound element this screen could use, but it's okay, right? +-- todo: make a more metrics-bound version of this screen anyways for beginner accessibility. +-- todo: accommodate EvaluationSummary too + +local t = Def.ActorFrame {}; + +-- A very useful table... +local eval_lines = { + "W1", + "W2", + "W3", + "W4", + "W5", + "Miss", + "Held", + "MaxCombo" +} + +-- And a function to make even better use out of the table. +local function GetJLineValue(line, pl) + if line == "Held" then + return STATSMAN:GetAccumPlayedStageStats():GetPlayerStageStats(pl):GetHoldNoteScores("HoldNoteScore_Held") + elseif line == "MaxCombo" then + return STATSMAN:GetAccumPlayedStageStats():GetPlayerStageStats(pl):MaxCombo() + else + return STATSMAN:GetAccumPlayedStageStats():GetPlayerStageStats(pl):GetTapNoteScores("TapNoteScore_" .. line) + end + return "???" +end + +-- You know what, we'll deal with getting the overall scores with a function too. +local function GetPlScore(pl, scoretype) + local primary_score = STATSMAN:GetAccumPlayedStageStats():GetPlayerStageStats(pl):GetScore() + local secondary_score = FormatPercentScore(STATSMAN:GetAccumPlayedStageStats():GetPlayerStageStats(pl):GetPercentDancePoints()) + + if PREFSMAN:GetPreference("PercentageScoring") then + primary_score, secondary_score = secondary_score, primary_score + end + + if scoretype == "primary" then + return primary_score + else + return secondary_score + end +end + + +-- Each line's text, and associated decorations. +for i, v in ipairs(eval_lines) do + local spacing = 38*i + local cur_line = "JudgmentLine_" .. v + + t[#t+1] = Def.ActorFrame{ + InitCommand=cmd(x,_screen.cx;y,(_screen.cy/1.6)+(spacing)), + OffCommand=function(self) + self:sleep(0.06 * i):decelerate(0.1):diffusealpha(0) + end; + Def.Quad { + InitCommand=cmd(zoomto,400,36;diffuse,JudgmentLineToColor(cur_line);fadeleft,0.5;faderight,0.5;); + OnCommand=function(self) + self:diffusealpha(0):sleep(0.1 * i):decelerate(0.9):diffusealpha(1) + end; + }; + + Def.BitmapText { + Font = "_roboto condensed Bold 48px", + InitCommand=cmd(zoom,0.6;diffuse,color("#000000");settext,string.upper(JudgmentLineToLocalizedString(cur_line))); + OnCommand=function(self) + self:diffusealpha(0):sleep(0.1 * i):decelerate(0.9):diffusealpha(0.6) + end; + } + } +end + +-- ################################################# +-- Time to deal with all of the player stats. ALL OF THEM. + +local eval_parts = Def.ActorFrame {} + +for ip, p in ipairs(GAMESTATE:GetHumanPlayers()) do + -- Some things to help positioning + local step_count_offs = string.find(p, "P1") and -150 or 150 + local grade_parts_offs = string.find(p, "P1") and -320 or 320 + local p_grade = STATSMAN:GetAccumPlayedStageStats():GetPlayerStageStats(p):GetGrade() + + -- Step counts. + for i, v in ipairs(eval_lines) do + local spacing = 38*i + eval_parts[#eval_parts+1] = Def.BitmapText { + Font = "_overpass 36px", + InitCommand=cmd(x,_screen.cx + step_count_offs;y,(_screen.cy/1.6)+(spacing);diffuse,ColorDarkTone(PlayerColor(p));zoom,0.75;diffusealpha,1.0;shadowlength,1), + OnCommand=function(self) + self:settext(GetJLineValue(v, p)) + if string.find(p, "P1") then + self:horizalign(right) + else + self:horizalign(left) + end + self:diffusealpha(0):sleep(0.1 * i):decelerate(0.9):diffusealpha(1) + end; + OffCommand=function(self) + self:sleep(0.1 * i):decelerate(0.3):diffusealpha(0) + end; + } + end + + -- Letter grade and associated parts. + eval_parts[#eval_parts+1] = Def.ActorFrame{ + InitCommand=cmd(x,_screen.cx + grade_parts_offs;y,_screen.cy/1.91), + + --Containers. todo: replace with, erm... not quads + Def.Quad { + InitCommand=cmd(zoomto,190,115;diffuse,ColorMidTone(PlayerColor(p))), + OnCommand=function(self) + self:diffusealpha(0):decelerate(0.4):diffusealpha(0.5) + end, + OffCommand=cmd(decelerate,0.3;diffusealpha,0) + }, + Def.Quad { + InitCommand=cmd(y,120;zoomto,190,120;diffuse,color("#fce1a1");), + OnCommand=function(self) + self:diffusealpha(0):decelerate(0.4):diffusealpha(0.3) + end, + OffCommand=cmd(decelerate,0.3;diffusealpha,0) + }, + + LoadActor(THEME:GetPathG("GradeDisplay", "Grade " .. p_grade)) .. { + InitCommand=cmd(zoom,0.75;); + OnCommand=function(self) + self:diffusealpha(0):zoom(1):sleep(0.63):decelerate(0.4):zoom(0.75):diffusealpha(1) + end; + OffCommand=cmd(decelerate,0.3;diffusealpha,0); + }, + } + + -- Primary score. + eval_parts[#eval_parts+1] = Def.BitmapText { + Font = "_overpass 36px", + InitCommand=cmd(horizalign,center;x,_screen.cx + (grade_parts_offs);y,(_screen.cy-65);diffuse,ColorMidTone(PlayerColor(p));zoom,1;shadowlength,1), + OnCommand=function(self) + self:settext(GetPlScore(p, "primary")):diffusealpha(0):sleep(0.5):decelerate(0.3):diffusealpha(1) + end; + OffCommand=function(self) + self:decelerate(0.3):diffusealpha(0) + end; + } + -- Secondary score. + eval_parts[#eval_parts+1] = Def.BitmapText { + Font = "_overpass 36px", + InitCommand=cmd(horizalign,center;x,_screen.cx + (grade_parts_offs);y,(_screen.cy-65)+30;diffuse,ColorDarkTone(PlayerColor(p));zoom,0.75;shadowlength,1), + OnCommand=function(self) + self:settext(GetPlScore(p, "secondary")):diffusealpha(0):sleep(0.6):decelerate(0.3):diffusealpha(1) + end; + OffCommand=function(self) + self:sleep(0.1):decelerate(0.3):diffusealpha(0) + end; + } +end + +t[#t+1] = eval_parts + +return t; + diff --git a/Themes/default/Graphics/Common splash.png b/Themes/default/Graphics/Common splash.png index bd560631e0..ded281eb61 100644 Binary files a/Themes/default/Graphics/Common splash.png and b/Themes/default/Graphics/Common splash.png differ diff --git a/Themes/default/Graphics/New Text Document.txt b/Themes/default/Graphics/New Text Document.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/Themes/default/Graphics/OptionsCursor Left (doubleres).png b/Themes/default/Graphics/OptionsCursor Left (doubleres).png index be853d50e7..57d71db795 100644 Binary files a/Themes/default/Graphics/OptionsCursor Left (doubleres).png and b/Themes/default/Graphics/OptionsCursor Left (doubleres).png differ diff --git a/Themes/default/Graphics/OptionsCursor Middle (doubleres).png b/Themes/default/Graphics/OptionsCursor Middle (doubleres).png index c734bec637..f994dac754 100644 Binary files a/Themes/default/Graphics/OptionsCursor Middle (doubleres).png and b/Themes/default/Graphics/OptionsCursor Middle (doubleres).png differ diff --git a/Themes/default/Graphics/OptionsCursor Right (doubleres).png b/Themes/default/Graphics/OptionsCursor Right (doubleres).png index 2dcb9933e5..d24fc889a6 100644 Binary files a/Themes/default/Graphics/OptionsCursor Right (doubleres).png and b/Themes/default/Graphics/OptionsCursor Right (doubleres).png differ diff --git a/Themes/default/Scripts/02 Colors.lua b/Themes/default/Scripts/02 Colors.lua index fe1c166d88..c55bc71ea0 100644 --- a/Themes/default/Scripts/02 Colors.lua +++ b/Themes/default/Scripts/02 Colors.lua @@ -42,8 +42,8 @@ ModeIconColors = { Normal = color("#339FF2"), Rave = color("#6BFF90"), Nonstop = color("#FF66AB"), - Oni = color("#6C58C1"), - Endless = color("#6040A7"), + Oni = color("#FF714D"), + Endless = color("#6A62CA"), } GameColor = { diff --git a/Themes/default/metrics.ini b/Themes/default/metrics.ini index 4cc5d92d7e..44a295e725 100644 --- a/Themes/default/metrics.ini +++ b/Themes/default/metrics.ini @@ -1026,6 +1026,11 @@ LifeDifficultyOffCommand=decelerate,0.3;diffusealpha,0; # StageDisplayUseShortString=false +[ScreenEvaluationSummary] +ShowTimingDifficulty=false +ShowLifeDifficulty=false +StageDisplayUseShortString=false + [ScreenGameOver] ShowHeader=false ShowFooter=false diff --git a/Themes/default/readme.md b/Themes/default/readme.md index 0fe1b27745..c27df48a2d 100644 --- a/Themes/default/readme.md +++ b/Themes/default/readme.md @@ -4,14 +4,14 @@ Lambda (formerly FiftyOne) is a modern, high-definition theme for StepMania 5.x. Progress ----------- -I'd say it's about 96% done now; just needs a bit more fit and finish if needed. Feel free to contribute and make pull requests. +As of August 8, 2017, Lambda has been declared feature complete, and has been added to the StepMania source tree in its 5_1-new branch. Our priority right now is finding any possible bugs, performing final fit and finish tweaks, and possibly adding new sounds and music. This repository will continue to be updated with changes made to the "official" version in the StepMania source tree, and vice versa, so feel free to contribute on either repository. Source code ----------- -Inkscape SVG source code is available for the majority of graphics created in the _src folder on the repository used to develop it, located at https://github.com/ListenerJubatus/smtheme-fiftyOne. Some of the original mockups are also included for reference, although they are meant primarily for reference purposes due to changes in the theme's style since these mockups (such as the removal of rounded corners and increased use of chamfered edges and diamond motifs). +Inkscape SVG source code is available for the majority of graphics created in the _src folder on the repository used to develop it, located at Some of the original mockups are also included for reference, although they are meant primarily for reference purposes due to changes in the theme's style since these mockups (such as the removal of rounded corners and increased use of chamfered edges and diamond motifs). -The main fonts are the current version of Roboto and Noto Sans , and Open Sans (although, preferably, Noto Sans should eventually be used in any location Open Sans is currently used). Certain accents make use of the font Overpass. +The main fonts are the current version of Roboto and Noto Sans , and Open Sans (although, preferably, Noto Sans should eventually be used in any location Open Sans is currently used). Certain accents make use of the fonts Overpass and Zeroes License