diff --git a/Themes/default/Fonts/_noto sans 36px [alt-stroke] 10x10.png b/Themes/default/Fonts/_noto sans 36px [alt-stroke] 10x10.png index ff5e031caa..872ed6f08d 100644 Binary files a/Themes/default/Fonts/_noto sans 36px [alt-stroke] 10x10.png and b/Themes/default/Fonts/_noto sans 36px [alt-stroke] 10x10.png differ diff --git a/Themes/default/Fonts/_noto sans 36px [main-stroke] 15x15.png b/Themes/default/Fonts/_noto sans 36px [main-stroke] 15x15.png index 22ee6c9d28..30a0e5dfb8 100644 Binary files a/Themes/default/Fonts/_noto sans 36px [main-stroke] 15x15.png and b/Themes/default/Fonts/_noto sans 36px [main-stroke] 15x15.png differ diff --git a/Themes/default/Fonts/_overpass 36px [alt-stroke] 10x10 (doubleres).png b/Themes/default/Fonts/_overpass 36px [alt-stroke] 10x10 (doubleres).png index fc44986466..f83e21aa7c 100644 Binary files a/Themes/default/Fonts/_overpass 36px [alt-stroke] 10x10 (doubleres).png and b/Themes/default/Fonts/_overpass 36px [alt-stroke] 10x10 (doubleres).png differ diff --git a/Themes/default/Fonts/_overpass 36px [main-stroke] 15x15 (doubleres).png b/Themes/default/Fonts/_overpass 36px [main-stroke] 15x15 (doubleres).png index 4ffaaabc27..cba5f97e4a 100644 Binary files a/Themes/default/Fonts/_overpass 36px [main-stroke] 15x15 (doubleres).png and b/Themes/default/Fonts/_overpass 36px [main-stroke] 15x15 (doubleres).png differ diff --git a/Themes/default/Fonts/_overpass 48px [alt-stroke] 10x10.png b/Themes/default/Fonts/_overpass 48px [alt-stroke] 10x10.png index eca321f51f..120bd5b5a0 100644 Binary files a/Themes/default/Fonts/_overpass 48px [alt-stroke] 10x10.png and b/Themes/default/Fonts/_overpass 48px [alt-stroke] 10x10.png differ diff --git a/Themes/default/Fonts/_overpass 48px [main-stroke] 15x15.png b/Themes/default/Fonts/_overpass 48px [main-stroke] 15x15.png index 385025de23..f17b9a1e13 100644 Binary files a/Themes/default/Fonts/_overpass 48px [main-stroke] 15x15.png and b/Themes/default/Fonts/_overpass 48px [main-stroke] 15x15.png differ diff --git a/Themes/default/Fonts/_roboto Medium 24px [alt-stroke] 10x10 (doubleres).png b/Themes/default/Fonts/_roboto Medium 24px [alt-stroke] 10x10 (doubleres).png index b30d2135a9..e718610942 100644 Binary files a/Themes/default/Fonts/_roboto Medium 24px [alt-stroke] 10x10 (doubleres).png and b/Themes/default/Fonts/_roboto Medium 24px [alt-stroke] 10x10 (doubleres).png differ diff --git a/Themes/default/Fonts/_roboto Medium 24px [main-stroke] 15x15 (doubleres).png b/Themes/default/Fonts/_roboto Medium 24px [main-stroke] 15x15 (doubleres).png index a615d4ec23..7735f9a727 100644 Binary files a/Themes/default/Fonts/_roboto Medium 24px [main-stroke] 15x15 (doubleres).png and b/Themes/default/Fonts/_roboto Medium 24px [main-stroke] 15x15 (doubleres).png differ diff --git a/Themes/default/Fonts/_roboto condensed Bold 48px [alt-stroke] 10x10.png b/Themes/default/Fonts/_roboto condensed Bold 48px [alt-stroke] 10x10.png index 9d76ae546f..568fdb7796 100644 Binary files a/Themes/default/Fonts/_roboto condensed Bold 48px [alt-stroke] 10x10.png and b/Themes/default/Fonts/_roboto condensed Bold 48px [alt-stroke] 10x10.png differ diff --git a/Themes/default/Fonts/_roboto condensed Bold 48px [main-stroke] 15x15.png b/Themes/default/Fonts/_roboto condensed Bold 48px [main-stroke] 15x15.png index 08562bd4aa..132ce05b0f 100644 Binary files a/Themes/default/Fonts/_roboto condensed Bold 48px [main-stroke] 15x15.png and b/Themes/default/Fonts/_roboto condensed Bold 48px [main-stroke] 15x15.png differ diff --git a/Themes/default/Fonts/_roboto condensed Bold italic 24px [alt-stroke] 10x10 (doubleres).png b/Themes/default/Fonts/_roboto condensed Bold italic 24px [alt-stroke] 10x10 (doubleres).png index 9b29d8ec18..9424bd5b55 100644 Binary files a/Themes/default/Fonts/_roboto condensed Bold italic 24px [alt-stroke] 10x10 (doubleres).png and b/Themes/default/Fonts/_roboto condensed Bold italic 24px [alt-stroke] 10x10 (doubleres).png differ diff --git a/Themes/default/Fonts/_roboto condensed Bold italic 24px [main-stroke] 15x15 (doubleres).png b/Themes/default/Fonts/_roboto condensed Bold italic 24px [main-stroke] 15x15 (doubleres).png index f497c0642d..8948e68a23 100644 Binary files a/Themes/default/Fonts/_roboto condensed Bold italic 24px [main-stroke] 15x15 (doubleres).png and b/Themes/default/Fonts/_roboto condensed Bold italic 24px [main-stroke] 15x15 (doubleres).png differ diff --git a/Themes/default/Graphics/Player combo/default.lua b/Themes/default/Graphics/Player combo/default.lua index f872b3df4b..996183d737 100644 --- a/Themes/default/Graphics/Player combo/default.lua +++ b/Themes/default/Graphics/Player combo/default.lua @@ -88,21 +88,24 @@ local t = Def.ActorFrame { if param.FullComboW1 then c.Number:diffuse(color("#00aeef")); c.Number:glowshift(); + (cmd(diffuse,color("#C7E5F0");diffusebottomedge,color("#00aeef");strokecolor,color("#0E3D53");))(c.Label); elseif param.FullComboW2 then c.Number:diffuse(color("#F3D58D")); c.Number:glowshift(); + (cmd(diffuse,color("#FAFAFA");diffusebottomedge,color("#F3D58D");strokecolor,color("#53450E");))(c.Label); elseif param.FullComboW3 then c.Number:diffuse(color("#94D658")); c.Number:stopeffect(); + (cmd(diffuse,color("#CFE5BC");diffusebottomedge,color("#94D658");strokecolor,color("#12530E");))(c.Label); elseif param.Combo then c.Number:diffuse(color("#FBE9DD")); -- c.Number:diffuse(PlayerColor(player)); c.Number:stopeffect(); - (cmd(diffuse,color("#F5CB92");diffusebottomedge,color("#EFA97A");strokecolor,color("#965A47");))(c.Label); + (cmd(diffuse,color("#F5CB92");diffusebottomedge,color("#EFA97A");strokecolor,color("#602C1B");))(c.Label); else c.Number:diffuse(color("#FBE9DD")); c.Number:stopeffect(); - (cmd(diffuse,color("#F5CB92");diffusebottomedge,color("#EFA97A");strokecolor,color("#965A47");))(c.Label); + (cmd(diffuse,color("#F5CB92");diffusebottomedge,color("#EFA97A");strokecolor,color("#602C1B");))(c.Label); end -- Pulse Pulse( c.Number, param ); diff --git a/Themes/default/Graphics/Player judgment/default.lua b/Themes/default/Graphics/Player judgment/default.lua index 850ba77aa2..8ad3bb9c53 100644 --- a/Themes/default/Graphics/Player judgment/default.lua +++ b/Themes/default/Graphics/Player judgment/default.lua @@ -1,5 +1,21 @@ local c; local player = Var "Player"; +local function ShowProtiming() + if GAMESTATE:IsDemonstration() then + return false + else + return GetUserPrefB("UserPrefProtiming" .. ToEnumShortString(player)); + end +end; +local bShowProtiming = ShowProtiming(); +local ProtimingWidth = 240; +local function MakeAverage( t ) + local sum = 0; + for i=1,#t do + sum = sum + t[i]; + end + return sum / #t +end local tTotalJudgments = {}; @@ -12,6 +28,21 @@ local JudgeCmds = { TapNoteScore_Miss = THEME:GetMetric( "Judgment", "JudgmentMissCommand" ); }; +local ProtimingCmds = { + TapNoteScore_W1 = THEME:GetMetric( "Protiming", "ProtimingW1Command" ); + TapNoteScore_W2 = THEME:GetMetric( "Protiming", "ProtimingW2Command" ); + TapNoteScore_W3 = THEME:GetMetric( "Protiming", "ProtimingW3Command" ); + TapNoteScore_W4 = THEME:GetMetric( "Protiming", "ProtimingW4Command" ); + TapNoteScore_W5 = THEME:GetMetric( "Protiming", "ProtimingW5Command" ); + TapNoteScore_Miss = THEME:GetMetric( "Protiming", "ProtimingMissCommand" ); +}; + +local AverageCmds = { + Pulse = THEME:GetMetric( "Protiming", "AveragePulseCommand" ); +}; +local TextCmds = { + Pulse = THEME:GetMetric( "Protiming", "TextPulseCommand" ); +}; local TNSFrames = { TapNoteScore_W1 = 0; @@ -21,22 +52,87 @@ local TNSFrames = { TapNoteScore_W5 = 4; TapNoteScore_Miss = 5; }; -local frame = Def.ActorFrame { - InitCommand = function(self) - -- We'll have to deal with this later - --if player_config:get_data(player).JudgmentUnderField then - -- self:draworder(notefield_draw_order.under_field) - --else - -- self:draworder(notefield_draw_order.over_field) - --end - c = self:GetChildren(); - end, +local t = Def.ActorFrame {}; +t[#t+1] = Def.ActorFrame { LoadActor(THEME:GetPathG("Judgment","Normal")) .. { Name="Judgment"; InitCommand=cmd(pause;visible,false); OnCommand=THEME:GetMetric("Judgment","JudgmentOnCommand"); ResetCommand=cmd(finishtweening;stopeffect;visible,false); }; + LoadFont("Combo Numbers") .. { + Name="ProtimingDisplay"; + Text=""; + InitCommand=cmd(visible,false); + OnCommand=THEME:GetMetric("Protiming","ProtimingOnCommand"); + ResetCommand=cmd(finishtweening;stopeffect;visible,false); + }; + LoadFont("Common Condensed") .. { + Name="ProtimingAverage"; + Text=""; + InitCommand=cmd(visible,false); + OnCommand=THEME:GetMetric("Protiming","AverageOnCommand"); + ResetCommand=cmd(finishtweening;stopeffect;visible,false); + }; + LoadFont("Common Condensed") .. { + Name="TextDisplay"; + Text=THEME:GetString("Protiming","MS"); + InitCommand=cmd(visible,false); + OnCommand=THEME:GetMetric("Protiming","TextOnCommand"); + ResetCommand=cmd(finishtweening;stopeffect;visible,false); + }; + Def.Quad { + Name="ProtimingGraphBG"; + InitCommand=cmd(visible,false;y,32;zoomto,ProtimingWidth,16); + ResetCommand=cmd(finishtweening;diffusealpha,0.8;visible,false); + OnCommand=cmd(diffuse,Color("Black");diffusetopedge,color("0.1,0.1,0.1,1");diffusealpha,0.8;shadowlength,2;); + }; + Def.Quad { + Name="ProtimingGraphWindowW3"; + InitCommand=cmd(visible,false;y,32;zoomto,ProtimingWidth-4,16-4); + ResetCommand=cmd(finishtweening;diffusealpha,1;visible,false); + OnCommand=cmd(diffuse,GameColor.Judgment["JudgmentLine_W3"];); + }; + Def.Quad { + Name="ProtimingGraphWindowW2"; + InitCommand=cmd(visible,false;y,32;zoomto,scale(PREFSMAN:GetPreference("TimingWindowSecondsW2"),0,PREFSMAN:GetPreference("TimingWindowSecondsW3"),0,ProtimingWidth-4),16-4); + ResetCommand=cmd(finishtweening;diffusealpha,1;visible,false); + OnCommand=cmd(diffuse,GameColor.Judgment["JudgmentLine_W2"];); + }; + Def.Quad { + Name="ProtimingGraphWindowW1"; + InitCommand=cmd(visible,false;y,32;zoomto,scale(PREFSMAN:GetPreference("TimingWindowSecondsW1"),0,PREFSMAN:GetPreference("TimingWindowSecondsW3"),0,ProtimingWidth-4),16-4); + ResetCommand=cmd(finishtweening;diffusealpha,1;visible,false); + OnCommand=cmd(diffuse,GameColor.Judgment["JudgmentLine_W1"];); + }; + Def.Quad { + Name="ProtimingGraphUnderlay"; + InitCommand=cmd(visible,false;y,32;zoomto,ProtimingWidth-4,16-4); + ResetCommand=cmd(finishtweening;diffusealpha,0.25;visible,false); + OnCommand=cmd(diffuse,Color("Black");diffusealpha,0.25); + }; + Def.Quad { + Name="ProtimingGraphFill"; + InitCommand=cmd(visible,false;y,32;zoomto,0,16-4;horizalign,left;); + ResetCommand=cmd(finishtweening;diffusealpha,1;visible,false); + OnCommand=cmd(diffuse,Color("Red");); + }; + Def.Quad { + Name="ProtimingGraphAverage"; + InitCommand=cmd(visible,false;y,32;zoomto,2,7;); + ResetCommand=cmd(finishtweening;diffusealpha,0.85;visible,false); + OnCommand=cmd(diffuse,Color("Orange");diffusealpha,0.85); + }; + Def.Quad { + Name="ProtimingGraphCenter"; + InitCommand=cmd(visible,false;y,32;zoomto,2,16-4;); + ResetCommand=cmd(finishtweening;diffusealpha,1;visible,false); + OnCommand=cmd(diffuse,Color("White");diffusealpha,1); + }; + InitCommand = function(self) + c = self:GetChildren(); + end; + JudgmentMessageCommand=function(self, param) -- Fix Player Combo animating when player successfully avoids a mine. local msgParam = param; @@ -84,8 +180,54 @@ local frame = Def.ActorFrame { c.Judgment:setstate( iFrame ); JudgeCmds[param.TapNoteScore](c.Judgment); + c.ProtimingDisplay:visible( bShowProtiming ); + c.ProtimingDisplay:settextf("%i",fTapNoteOffset * 1000); + ProtimingCmds[param.TapNoteScore](c.ProtimingDisplay); + + c.ProtimingAverage:visible( bShowProtiming ); + c.ProtimingAverage:settextf("%.2f%%",clamp(100 - MakeAverage( tTotalJudgments ) * 1000 ,0,100)); + AverageCmds['Pulse'](c.ProtimingAverage); + + c.TextDisplay:visible( bShowProtiming ); + TextCmds['Pulse'](c.TextDisplay); + + c.ProtimingGraphBG:visible( bShowProtiming ); + c.ProtimingGraphUnderlay:visible( bShowProtiming ); + c.ProtimingGraphWindowW3:visible( bShowProtiming ); + c.ProtimingGraphWindowW2:visible( bShowProtiming ); + c.ProtimingGraphWindowW1:visible( bShowProtiming ); + c.ProtimingGraphFill:visible( bShowProtiming ); + c.ProtimingGraphFill:finishtweening(); + c.ProtimingGraphFill:decelerate(1/60); +-- c.ProtimingGraphFill:zoomtowidth( clamp(fTapNoteOffset * 188,-188/2,188/2) ); + c.ProtimingGraphFill:zoomtowidth( clamp( + scale( + fTapNoteOffset, + 0,PREFSMAN:GetPreference("TimingWindowSecondsW3"), + 0,(ProtimingWidth-4)/2), + -(ProtimingWidth-4)/2,(ProtimingWidth-4)/2) + ); + c.ProtimingGraphAverage:visible( bShowProtiming ); + c.ProtimingGraphAverage:zoomtowidth( clamp( + scale( + MakeAverage( tTotalJudgments ), + 0,PREFSMAN:GetPreference("TimingWindowSecondsW3"), + 0,ProtimingWidth-4), + 0,ProtimingWidth-4) + ); +-- c.ProtimingGraphAverage:zoomtowidth( clamp(MakeAverage( tTotalJudgments ) * 1880,0,188) ); + c.ProtimingGraphCenter:visible( bShowProtiming ); + (cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphBG); + (cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphUnderlay); + (cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphWindowW3); + (cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphWindowW2); + (cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphWindowW1); + (cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphFill); + (cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphAverage); + (cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphCenter); end; -} +}; -return frame \ No newline at end of file + +return t; \ No newline at end of file diff --git a/Themes/default/Languages/en.ini b/Themes/default/Languages/en.ini index 510aa3d9a4..a5a27bde97 100644 --- a/Themes/default/Languages/en.ini +++ b/Themes/default/Languages/en.ini @@ -202,7 +202,7 @@ Holds=Turn some tap notes into hold notes. Mines=Add or remove mine notes. PlayerAutoPlay=Have the notefield play by itself. ScoreDisplay=Change the way your score is shown. -ProTiming=Change the way your judgments are shown. +ProTiming=Display a detailed graph of step timings and judgments. Scroll=Adjust the direction arrows flow to meet the targets. NoteSkins=Choose a different appearance for the arrows. Handicap=Removes notes. Using these will invalidate a high score. diff --git a/Themes/default/metrics.ini b/Themes/default/metrics.ini index 9673278c74..a4b780813a 100644 --- a/Themes/default/metrics.ini +++ b/Themes/default/metrics.ini @@ -909,19 +909,11 @@ RainbowColor5=color("0.82,0.95,0.88,1") -- sea green RainbowColor6=color("0.87,0.95,0.82,1") -- green RainbowColor7=color("1.00,0.85,0.78,1") -- orange -[ScreenNestyPlayerOptions] -Class="ScreenWithMenuElements" -Fallback="ScreenWithMenuElements" -NextScreen="ScreenStageInformation" -PrevScreen=Branch.BackOutOfPlayerOptions() -RepeatRate=10 -RepeatDelay=.25 -PlayMusic=false -WaitForChildrenBeforeTweeningOut=false - [ScreenPlayerOptions] -LineNames="1,8,14,2,3A,3B,4,5,6,R1,R2,7,9,10,11,12,13,SF,16" +LineNames="1,8,14,2,3A,3B,4,5,6,R1,R2,7,9,10,11,12,13,SF,17,16" LineSF="lua,OptionRowScreenFilter()" +Line17="lua,OptionRowProTiming()" +Line18="list,Characters" PlayerNameplateP1X=SCREEN_CENTER_X-270 PlayerNameplateP1Y=SCREEN_CENTER_Y+190