@@ -85,6 +85,7 @@ local stepmania_credits= {
|
||||
"Kaox", -- pump/default noteskin
|
||||
-- Add Graphics/CreditsLogo name.png and change your entry to a table like this to look super pro.
|
||||
{logo= "kyzentun", name= "Kyzentun"}, -- new lua bindings, theme documentation
|
||||
"Lirodon", -- Lambda default theme on 5.1
|
||||
"Mad Matt", -- new lua bindings
|
||||
"Matt McCutchen", -- minor fix for some dance pads on linux
|
||||
"MrThatKid", -- nitg modifiers
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
ScreenLogo background
|
||||
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 543 B After Width: | Height: | Size: 543 B |
@@ -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
|
||||
@@ -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;
|
||||
|
||||
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 297 B After Width: | Height: | Size: 760 B |
|
Before Width: | Height: | Size: 196 B After Width: | Height: | Size: 834 B |
|
Before Width: | Height: | Size: 320 B After Width: | Height: | Size: 1007 B |
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 9.2 KiB |
@@ -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 = {
|
||||
|
||||
@@ -201,6 +201,11 @@ ShowHeader=false
|
||||
ShowFooter=false
|
||||
ShowHelp=false
|
||||
|
||||
[ScreenCredits]
|
||||
ShowHeader=false
|
||||
ShowFooter=false
|
||||
ShowHelp=false
|
||||
|
||||
[ScreenHighScores]
|
||||
Fallback="ScreenWithMenuElements"
|
||||
ShowFooter=false
|
||||
@@ -573,7 +578,7 @@ SongTimeY=SCREEN_CENTER_Y-78+2
|
||||
SongTimeOnCommand=horizalign,left;zoom,1.0;diffuse,color("#DFE2E9")
|
||||
|
||||
ShowBPMDisplay=true
|
||||
BPMDisplayX=SCREEN_CENTER_X-179-66
|
||||
BPMDisplayX=SCREEN_CENTER_X-179-63
|
||||
BPMDisplayY=SCREEN_CENTER_Y-78+2
|
||||
BPMDisplayOnCommand=horizalign,right;zoom,1.0;
|
||||
|
||||
@@ -1026,6 +1031,11 @@ LifeDifficultyOffCommand=decelerate,0.3;diffusealpha,0;
|
||||
#
|
||||
StageDisplayUseShortString=false
|
||||
|
||||
[ScreenEvaluationSummary]
|
||||
ShowTimingDifficulty=false
|
||||
ShowLifeDifficulty=false
|
||||
StageDisplayUseShortString=false
|
||||
|
||||
[ScreenGameOver]
|
||||
ShowHeader=false
|
||||
ShowFooter=false
|
||||
@@ -1117,7 +1127,7 @@ SongTimeY=SCREEN_CENTER_Y-78+2
|
||||
SongTimeOnCommand=horizalign,left;zoom,1.0;diffuse,color("#DFE2E9")
|
||||
#
|
||||
ShowBPMDisplay=true
|
||||
BPMDisplayX=SCREEN_CENTER_X-179-66
|
||||
BPMDisplayX=SCREEN_CENTER_X-179-63
|
||||
BPMDisplayY=SCREEN_CENTER_Y-78+2
|
||||
BPMDisplayOnCommand=horizalign,right;zoom,1.0;
|
||||
#
|
||||
|
||||
@@ -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 <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).
|
||||
|
||||
The main fonts are the current version of Roboto and Noto Sans <https://www.google.com/design/spec/resources/roboto-noto-fonts.html>, 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. <http://overpassfont.org/>
|
||||
The main fonts are the current version of Roboto and Noto Sans <https://www.google.com/design/spec/resources/roboto-noto-fonts.html>, 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 <http://overpassfont.org/> and Zeroes <http://www.dafont.com/zero-threes.font>
|
||||
|
||||
|
||||
License
|
||||
|
||||