From 051f224ff17ee9273f028dee4faf0642ca2a65b9 Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Sat, 20 Feb 2010 16:44:59 -0600 Subject: [PATCH] various theme things --- Docs/Changelog_sm-ssc.txt | 8 + Themes/_fallback/Scripts/02 Colors.lua | 7 +- .../Scripts/03 ProductivityHelpers.lua | 12 +- Themes/_fallback/metrics.ini | 207 +++++++++++++++--- .../BGAnimations/ScreenGameplay out.lua | 6 + .../ScreenSelectMusic decorations/default.lua | 41 +++- .../default.lua | 2 +- .../Graphics/ScoreDisplayLifeTime frame.redir | 1 + .../ScreenSelectMusic CourseContentsList.lua | 13 +- .../ScreenSelectMusic NumCourseSongs.lua | 2 + Themes/default/metrics.ini | 13 +- 11 files changed, 254 insertions(+), 58 deletions(-) create mode 100644 Themes/default/BGAnimations/ScreenGameplay out.lua create mode 100644 Themes/default/Graphics/ScoreDisplayLifeTime frame.redir create mode 100644 Themes/default/Graphics/ScreenSelectMusic NumCourseSongs.lua diff --git a/Docs/Changelog_sm-ssc.txt b/Docs/Changelog_sm-ssc.txt index 963eba7d32..146620a2e1 100644 --- a/Docs/Changelog_sm-ssc.txt +++ b/Docs/Changelog_sm-ssc.txt @@ -9,6 +9,14 @@ Not all changes are documented, for various reasons. supported but exist anyways.) _____________________________________________________________________________ +20100219 +-------- +* sm4svn r28313: don't filter NoteSkins at a PrefsManager/NoteSkinManager level. + Leave the NoteSkin sorting and filtering up to the theme. [Chris Danford] +* load lighting from ActorFrame xnodes (in addition to Lua commands) +* add Cancel command on ScreenWithMenuElements, so other things can react + to Screen cancel. + 20100218 -------- * Added Fonts/ScreenReloadSongs LoadingText, making the text on diff --git a/Themes/_fallback/Scripts/02 Colors.lua b/Themes/_fallback/Scripts/02 Colors.lua index b841d5a39d..776a6c36f8 100644 --- a/Themes/_fallback/Scripts/02 Colors.lua +++ b/Themes/_fallback/Scripts/02 Colors.lua @@ -154,8 +154,11 @@ Colors = { Saturation(hInput) Alpha(hInput) HSV(iHue,fSaturation,fValue or any other overload) --]] + Alpha = function(cColor,fAlpha) + local c = cColor; + return { c[1],c[2],c[3],fAlpha }; + end, } - --[[ Fallbacks ]] function Color(c) return Colors[c]; @@ -164,7 +167,7 @@ end; function BoostColor( cColor, fBoost ) local c = cColor; return { c[1]*fBoost, c[2]*fBoost, c[3]*fBoost, c[4] }; -end +end; function ColorLightTone(c) return { c[1]+(c[1]/2), c[2]+(c[2]/2), c[3]+(c[3]/2), c[4] }; diff --git a/Themes/_fallback/Scripts/03 ProductivityHelpers.lua b/Themes/_fallback/Scripts/03 ProductivityHelpers.lua index edcc7e8714..e8c7ebdab4 100644 --- a/Themes/_fallback/Scripts/03 ProductivityHelpers.lua +++ b/Themes/_fallback/Scripts/03 ProductivityHelpers.lua @@ -39,11 +39,10 @@ function Actor:xy(actorX,actorY) self:y(actorY); end; --- MaskSource() --- Sets an actor up as the source for a mask. --- todo: pass in a variable that states whether or not to clearzbuffer -function Actor:MaskSource() - self:clearzbuffer(true); +-- MaskSource([clearzbuffer]) +-- Sets an actor up as the source for a mask. Clears zBuffer by default. +function Actor:MaskSource(_) + self:clearzbuffer(_ or true); self:zwrite(true); self:blend('BlendMode_NoEffect'); end; @@ -130,8 +129,7 @@ end --[[ end helper functions ]] -- this code is in the public domain. ---[[ Lists & Functions (sm-ssc specific code) ]] - +--[[ these should probably be moved into another file: ]] function GameCompatibleModes() sGame = GAMESTATE:GetCurrentGame():GetName(); local Modes = { diff --git a/Themes/_fallback/metrics.ini b/Themes/_fallback/metrics.ini index 864815f669..0d8e5cc226 100644 --- a/Themes/_fallback/metrics.ini +++ b/Themes/_fallback/metrics.ini @@ -1,3 +1,7 @@ +# This probably is hard to understand from the way it was made in the first +# place, so instead just pay attention to each group, which has tons of +# notes + # 01 # Global # 02 # Managers # 03 # Singletons @@ -8,52 +12,74 @@ # 01 # [Global] +# This basically means that all other themes get information from this theme. +# It's really awesome for making mods n stuff IsBaseTheme=1 [Common] +# How big the design of the theme is. for example, if a theme was designed for +# 1080p, it would be shrunken for 640x480, as well as that, if it was designed +# for 480p, it would be enlarged for bigger screens! ScreenWidth=640 ScreenHeight=480 -# +# Allows you to pick all available game modes for your gametype: for example, +# inserting enough coins for 1p would let you choose between solo, single +# and double before each game AutoSetStyle=true -# +# Default modifiers and noteskin. DefaultModifiers="1.5x" DefaultNoteSkinName="default" -# +# Difficulties to show. Useful for custom games where you want to hide these. DifficultiesToShow="beginner,easy,medium,hard,challenge" +# Same as above, but for courses. CourseDifficultiesToShow="easy,medium,hard" +# Things to hide. You couldn't play cabinet nayways. StepsTypesToHide="lights-cabinet" #~ StepsTypesToHide="dance-couple,dance-solo,pump-halfdouble,lights-cabinet" +# Useless? MaxCourseEntriesBeforeShowVarious=10 -# +# Legacy metric: The first screen that shows up when you take forever to press +# start. FirstAttractScreen="ScreenInit" +# First screen that pops up when you start the game. ScreenInit in particular +# shows the theme information before going to the title screen. InitialScreen="ScreenInit" +# Screens that show over everything else. you shouldn't worry bout this, since +# it wont matter much. OverlayScreens="ScreenSystemLayer,ScreenSyncOverlay,ScreenStatsOverlay,ScreenDebugOverlay" -# +# Legacy metric: Percentage Scoring shows this many decimals ( 00.00% ). PercentScoreDecimalPlaces=2 -# +# What should certain player-only elements do. we usually just color them to +# show who's stuff is who's. you'd best leave this alone too. ColorP1Command=diffuse,PlayerColor(PLAYER_1) ColorP2Command=diffuse,PlayerColor(PLAYER_2) # 02 # [LightsManager] +# Mostly useless since it doesn't work, as well as that barely anyone has +# lights to play around with. GameButtonsToShow="" LightEffectRiseSeconds=0.075 LightEffectFallOffSeconds=0.35 LightEffectPulseTime=0.100 [ProfileManager] +# I wouldn't change this either. FixedProfiles=false NumFixedProfiles=1 [SongManager] +# How many different colors you can have in the MusicWheel NumSongGroupColors=10 NumCourseGroupColors=1 -# +# Legacy metric: how difficult a song has to be for it to glow. ExtraColorMeter=10 +# The maximum difficulty a OMES stage can be. ExtraStage2DifficultyMax=8 -# +# Allow special colors for unlocks and 'preffered' sort UseUnlockColor=false UsePreferredSortColor=false +# Unlocks go at the end so they're easy to find. MoveUnlocksToBottomOfPreferredSort=false # Lots of themes want more than one group color, so let them have this. SongGroupColor1=color("#00aeef") -- blue @@ -66,16 +92,31 @@ SongGroupColor7=color("#00aeef") -- blue SongGroupColor8=color("#00aeef") -- blue SongGroupColor9=color("#00aeef") -- blue SongGroupColor10=color("#00aeef") -- blue -CourseGroupColor1=color("1,1,1,1") +# Lots of themes want more than one course color, too +CourseGroupColor1=color("1,1,1,1") -- white +CourseGroupColor2=color("1,1,1,1") -- white +CourseGroupColor3=color("1,1,1,1") -- white +CourseGroupColor4=color("1,1,1,1") -- white +CourseGroupColor5=color("1,1,1,1") -- white +CourseGroupColor6=color("1,1,1,1") -- white +CourseGroupColor7=color("1,1,1,1") -- white +CourseGroupColor8=color("1,1,1,1") -- white +CourseGroupColor9=color("1,1,1,1") -- white +CourseGroupColor10=color("1,1,1,1") -- white +# as they say. UnlockColor=color("1,0.5,0,1") ExtraColor=color("#ff0000") -- red [UnlockManager] +# Unlock specific things. we'll go in-depth with this one day, but it really +# isnt what sm-ssc was designed for. AutoLockChallengeSteps=false UnlockNames="" # 03 # [ArrowEffects] +# Complicated stuff you probably shouldnt ever mess with or else you'll +# destroy mods completely! FrameWidthEffectsPixelsPerSecond=400 FrameWidthEffectsMinMultiplier=0.5 FrameWidthEffectsMaxMultiplier=1.2 @@ -84,7 +125,8 @@ FrameWidthLockEffectsTweenPixels=25 ArrowSpacing=64 [Background] -# +# Background stuff. again, its usually a better idea to leave this alone +# unless you truly need to change it, in which case you'd know what it does. ShowDancingCharacters=true UseStaticBackground=true # @@ -96,10 +138,12 @@ TopEdge=SCREEN_TOP BottomEdge=SCREEN_BOTTOM [Banner] +# Scroll stuff when you roll over it, DDR Extreme style. ScrollRandom=false ScrollRoulette=false [BitmapText] +# The colors in the 'roulette' text. you can have alot! NumRainbowColors=7 RainbowColor1=color("1.0,1.0,1.0,1") -- red RainbowColor2=color("0.8,0.2,0.6,1") -- pink @@ -110,18 +154,28 @@ RainbowColor6=color("0.2,0.8,0.4,1") -- green RainbowColor7=color("1.0,0.8,0.2,1") -- orange [BPMDisplay] +# Various commands for the BPMDisplay, ranging from no bpm, a non changing bpm, +# a bpm that changes, one that is 'random' ( boss songs ) and when a song is +# an es/omes! SetNoBpmCommand=diffusetopedge,color("#777777");diffusebottomedge,color("#666666") SetNormalCommand=diffusetopedge,color("#fbfb57");diffusebottomedge,color("#fb9c57") SetChangeCommand=diffusetopedge,color("#fb9c57");diffusebottomedge,color("#fb5757") SetRandomCommand=diffusetopedge,color("#fb9c57");diffusebottomedge,color("#fb5757") SetExtraCommand=diffusetopedge,color("#fb5757");diffusebottomedge,color("#9c4242") +# Determines if it shows both bpms ( 000-100 ) or cycles between the min and +# max. Cycle=true +# Text when there is no BPM NoBpmText="000" -RandomCycleSpeed=0.2 -- smaller numbers mean the bpm cycles faster +# How fast it cycles, smaller is faster +RandomCycleSpeed=0.2 +# Seperator between both bpms ( 100-200 ). Separator="-" +# ??? when it cycles. ShowQMarksInRandomCycle=true [CodeDetector] +# Codes on the MusicWheel that change stuff! PrevSteps1="Up,Up" PrevSteps2="MenuUp,MenuUp" NextSteps1="Down,Down" @@ -149,10 +203,12 @@ HoldNotes="Right,Left,Down,Up" Mines="" Dark="" CancelAll="Left,Right,Left,Right,Left,Right,Left,Right" +# Codes on the title screen. NextTheme="Left,Left,Left,Right,Right,Right,Left,Right" NextTheme2="MenuLeft,MenuLeft,MenuLeft,MenuRight,MenuRight,MenuRight,MenuLeft,MenuRight" NextAnnouncer="Left,Left,Right,Right,Left,Left,Right,Right" NextAnnouncer2="MenuLeft,MenuLeft,MenuRight,MenuRight,MenuLeft,MenuLeft,MenuRight,MenuRight" +# Various. NextBannerGroup="MenuUp,MenuRight,MenuRight" NextBannerGroup2="MenuUp,MenuDown,MenuUp,MenuDown" Hidden="" @@ -163,35 +219,39 @@ CancelAllPlayerOptions="Left,Right,Left,Right,Left,Right" BackInEventMode="" [CombinedLifeMeterTug] +# We dont use it. MeterWidth=0.0 MeterHeight=0.0 [Combo] +# System Direction ShowComboAt=HitCombo() ShowMissesAt=MissCombo() - +# Shrink and Grow the combo, DDR Style NumberMinZoom=0.8 NumberMaxZoom=1 NumberMaxZoomAt=100 - +# Things the combo does when you bang on it, and what the text does PulseCommand=%function(self,param) self:stoptweening(); self:zoom(1.4*param.Zoom); self:linear(0.05); self:zoom(param.Zoom); end NumberOnCommand=y,240-216-2;shadowlength,1;horizalign,right;vertalign,bottom; LabelOnCommand=x,6;y,22;shadowlength,1;horizalign,left;vertalign,bottom [HoldJudgment] -# !!! # +# System Direction HoldJudgmentLetGoCommand=HoldJudgmentFail() HoldJudgmentHeldCommand=HoldJudgmentPass() [HelpDisplay] +# The help display on the menus, and what it does. +# How fast it changes between texts TipShowTime=4 +# The Command when its made TipOnCommand=shadowlength,0;diffuseblink [Judgment] # New # JudgmentOnCommand= -# !!! # - +# Things the judgment does when you bang on it. JudgmentW1Command=shadowlength,0;diffusealpha,1;zoom,1.3;linear,0.05;zoom,1;sleep,0.8;linear,0.1;zoomy,0.5;zoomx,2;diffusealpha,0;glowblink;effectperiod,0.05;effectcolor1,1,1,1,0;effectcolor2,1,1,1,0.8 JudgmentW2Command=shadowlength,0;diffusealpha,1;zoom,1.3;linear,0.05;zoom,1;sleep,0.8;linear,0.1;zoomy,0.5;zoomx,2;diffusealpha,0 JudgmentW3Command=shadowlength,0;diffusealpha,1;zoom,1.2;linear,0.05;zoom,1;sleep,0.8;linear,0.1;zoomy,0.5;zoomx,2;diffusealpha,0; @@ -200,8 +260,8 @@ JudgmentW5Command=shadowlength,0;diffusealpha,1;zoom,1.0;vibrate;effectmagnitude JudgmentMissCommand=shadowlength,0;diffusealpha,1;zoom,1;y,-20;linear,0.8;y,20;sleep,0.8;linear,0.1;zoomy,0.5;zoomx,2;diffusealpha,0 [Protiming] +# Protiming isnt invented yet. ProtimingOnCommand=y,24 - ProtimingW1Command= ProtimingW2Command= ProtimingW3Command= @@ -210,6 +270,7 @@ ProtimingW5Command= ProtimingMissCommand= [Course] +# What.. are these anyways? SortPreferredColor=color("1,1,1,1") -- Preferred is both for when courses are in preferred sort, or are autogen SortLevel1Color=color("1,0,0,1") SortLevel2Color=color("1,1,0,1") @@ -218,8 +279,12 @@ SortLevel4Color=color("1,1,0,1") SortLevel5Color=color("0,1,0,1") [CustomDifficulty] +# Custom system that lets you rename certain classes of difficulties to +# something else. Mostly for custom games and game emulation, PIU for example. + +# The names of which Names="DanceCoupleBeginner,DanceCoupleEasy,DanceCoupleMedium,DanceCoupleHard,DanceCoupleExpert" -# +# That get remapped to DanceCoupleBeginnerStepsType="StepsType_Dance_Couple" DanceCoupleBeginnerDifficulty="Difficulty_Beginner" DanceCoupleBeginnerString="Beginner" @@ -237,6 +302,9 @@ DanceCoupleExpertDifficulty="Difficulty_Expert" DanceCoupleExpertString="Expert" [CustomScoring] +# Custom scoring, usually good for custom games. + +# Various tweakers ComboAboveThresholdAddsToScoreBonus=0 ComboScoreBonusThreshold=50 ComboScoreBonusValue=+1000 @@ -246,7 +314,7 @@ ComboMultiplier=0.0 DoubleNoteScoreMultiplier=2.0 TripleNoteScoreMultiplier=3.0 QuadOrHigherNoteScoreMultiplier=4.0 - +# And what they award you PointsW1=+50 PointsW2=+20 PointsW3=+10 @@ -260,49 +328,65 @@ PointsNone=0 PointsHoldHeld=+5 PointsHoldLetGo=-5 [DifficultyList] +# A list that shows difficulties in a song. CapitalizeDifficultyNames=false -# +# How far away and how many items there are ItemsSpacingY=40 NumShownItems=5 # MoveCommand=decelerate,0.3 [FadingBanner] +# The banner on MusicWheel. BannerOnCommand= +# When it loads BannerFadeFromCachedCommand=diffusealpha,1;stoptweening;linear,0.25;diffusealpha,0 +# When it loads into clarity BannerFadeOffCommand=diffusealpha,1;stoptweening;linear,0.25;diffusealpha,0 +# ? BannerResetFadeCommand=diffusealpha,1 [Gameplay] -# todo: make some of these play nice with other gametypes +# System Direction ComboIsPerRow=ComboPerRow() MinScoreToContinueCombo=ComboContinue() MinScoreToMaintainCombo=ComboMaintain() +# When you hit it, you know. ToastyTriggersAt=250 [GameState] +# Default song and sort. these don't really matter DefaultSong="" DefaultSort="Group" -# +# How good of a grade you have to get to get an ES/OMES. Locked to an 'AA' GradeTierForExtra1="Grade_Tier02" GradeTierForExtra2="Grade_Tier02" +# and how difficult that song you go thas to be MinDifficultyForExtra="Difficulty_Hard" -# +# System Direction AreStagePlayerModsForced=AreStagePlayerModsForced AreStageSongModsForced=AreStageSongModsForced -# +# Let players join while you play if they put in some coins AllowLateJoin=true +# Various feats that you can earn ProfileRecordFeats=true CategoryRecordFeats=true +# Disallow bad names UseNameBlacklist=false +# Alow OMES AllowExtra2=true -# +# Don't let the player change difficulties on an ES/OMES LockExtraStageSelection=true [GrooveRadar] +# Polar graph that shows difficulty stuff in depth +# how thick the line is EdgeWidth=2 +# ? LabelOnDelay=0 +# How visible the middle is CenterAlpha=0.25 +# what to do with each players part of the graph RadarValueMapP1OnCommand=diffuse,PlayerColor(PLAYER_1) RadarValueMapP2OnCommand=diffuse,PlayerColor(PLAYER_2) @@ -314,19 +398,31 @@ StartX=0 StartY=0 [HighScore] +# Default highscore name for no entries ( like how street fighter has ' CAP ' ) EmptyName="SSC!" [Inventory] +# ? ItemUseRateSeconds=0.0 [LifeMeterBar] +# The default life bar you see in gameplay + +# Percentage in which the game starts yelling at you to stop sucking DangerThreshold=0.2 +# And how much it starts up at. InitialValue=0.5 +# And how much it takes to get ravin' HotValue=1.0 +# And how much there is to fill up ( only for debug ) LifeMultiplier=1.0 +# How good you gotta hit it to keep it alive. ( W3 is 'Great' ); MinStayAlive="TapNoteScore_W3" -FlashHotOnNoteHit=false -MinScoreToFlash="TapNoteScore_W3" +# Freiza Hack. Ugh +# FlashHotOnNoteHit=false +# MinScoreToFlash="TapNoteScore_W3" + +# How much it changes LifePercentChangeW1=0.008 LifePercentChangeW2=0.008 LifePercentChangeW3=0.004 @@ -338,6 +434,8 @@ LifePercentChangeHeld=0.008 LifePercentChangeLetGo=-0.080 LifePercentChangeCheckpointMiss=-0.002 LifePercentChangeCheckpointHit=0.002 + +# And various positionings UnderX=0 UnderY=0 DangerX=0 @@ -347,19 +445,24 @@ StreamY=0 OverX=0 OverY=0 [LifeMeterBattery] +# The bar that shows up in Oni mode. + +# How long it flashes when you lose a life. BatteryBlinkTime=1.2 -# +# Where the batteries are BatteryP1X=-92 BatteryP1Y=2 BatteryP2X=92 BatteryP2Y=2 -# +# Where your live count is NumLivesP1X=-92 NumLivesP1Y=0 NumLivesP2X=92 NumLivesP2Y=0 [LifeMeterBattery Percent] +# The percentage on the bar. I wouldn't even bother changing this, because I +# havent and I *made* this theme :\ Format= PercentUseRemainder=false ApplyScoreDisplayOptions=true @@ -386,10 +489,15 @@ DancePointsP2OffCommand= [LifeMeterTime] +# The Lifemeter that shows up when you're playing survival. + +# When it starts telling you to stop sucking. DangerThreshold=0.3 +# How good it's filled up when you start InitialValue=0.5 MeterWidth=0.0 MeterHeight=0.0 +# How little there is to fill? MinLifeTime=25.5 [LyricDisplay] @@ -716,7 +824,7 @@ HoldJudgmentYStandard=-90 HoldJudgmentYReverse=90 BrightGhostComboThreshold=100 DrawDistanceBeforeTargetsPixels=400 -DrawDistanceAfterTargetsPixels=-60 +DrawDistanceAfterTargetsPixels=-128 TapJudgmentsUnderField=false HoldJudgmentsUnderField=false ComboUnderField=true @@ -761,8 +869,44 @@ ApproachSeconds=1 [ScoreDisplayNormal] FrameX= FrameY= +FrameOnCommand= +FrameOffCommand= TextX= TextY= +TextOnCommand= +TextOffCommand= + +[ScoreDisplayLifeTime] +FrameX= +FrameY= +FrameOnCommand= +FrameOffCommand= +# +TextX= +TextY= +TextOnCommand= +TextOffCommand= +# +TimeRemainingX= +TimeRemainingY= +TimeRemainingOnCommand= +TimeRemainingOffCommand= +# +DeltaSecondsOnCommand= +DeltaSecondsNoneCommand= +DeltaSecondsHitMineCommand= +DeltaSecondsAvoidMineCommand= +DeltaSecondsCheckpointMissCommand= +DeltaSecondsCheckpointHitCommand= +DeltaSecondsMissCommand= +DeltaSecondsW5Command= +DeltaSecondsW4Command= +DeltaSecondsW3Command= +DeltaSecondsW2Command= +DeltaSecondsW1Command= +DeltaSecondsLetGoCommand= +DeltaSecondsHeldCommand= +DeltaSecondsGainLifeCommand= [ScoreDisplayPercentage Percent] PercentP1X=0 @@ -1542,6 +1686,7 @@ NextSort2= NextSort3= NextSort4= + [StepsDisplay] FrameX=0 FrameY=0 @@ -2555,7 +2700,7 @@ MinSecondsToStep=6.0 MinSecondsToMusic=2.0 MinSecondsToStepNextSong=2.0 MusicFadeOutSeconds=0.5 -OutTransitionLength=2 +OutTransitionLength=5 CourseTransitionLength=0.5 BeginFailedDelay=1.0 # diff --git a/Themes/default/BGAnimations/ScreenGameplay out.lua b/Themes/default/BGAnimations/ScreenGameplay out.lua new file mode 100644 index 0000000000..841ecba903 --- /dev/null +++ b/Themes/default/BGAnimations/ScreenGameplay out.lua @@ -0,0 +1,6 @@ +return Def.ActorFrame{ + Def.Quad{ + InitCommand=cmd(FullScreen;diffuse,color("0,0,0,0")); + OnCommand=cmd(linear,5;diffusealpha,1); + }; +}; \ No newline at end of file diff --git a/Themes/default/BGAnimations/ScreenSelectMusic decorations/default.lua b/Themes/default/BGAnimations/ScreenSelectMusic decorations/default.lua index e867afd1bd..dc5ae28f16 100644 --- a/Themes/default/BGAnimations/ScreenSelectMusic decorations/default.lua +++ b/Themes/default/BGAnimations/ScreenSelectMusic decorations/default.lua @@ -47,7 +47,8 @@ t[#t+1] = StandardDecorationFromFileOptional("BPMDisplay","BPMDisplay"); t[#t+1] = StandardDecorationFromFileOptional("BPMLabel","BPMLabel"); t[#t+1] = StandardDecorationFromFileOptional("SongTime","SongTime") .. { SetCommand=function(self) - local curSelection, length = nil; + local curSelection = nil; + local length = 0.0; if GAMESTATE:IsCourseMode() then curSelection = GAMESTATE:GetCurrentCourse(); self:playcommand("Reset"); @@ -61,16 +62,17 @@ t[#t+1] = StandardDecorationFromFileOptional("SongTime","SongTime") .. { self:playcommand("Reset"); if curSelection then length = curSelection:MusicLengthSeconds(); + if curSelection:IsLong() then + self:playcommand("Long"); + elseif curSelection:IsMarathon() then + self:playcommand("Marathon"); + else + self:playcommand("Reset"); + end else length = 0.0; - end; - if curSelection:IsLong() then - self:playcommand("Long"); - elseif curSelection:IsMarathon() then - self:playcommand("Marathon"); - else self:playcommand("Reset"); - end + end; end; self:settext( SecondsToMSS(length) ); end; @@ -99,8 +101,29 @@ if not GAMESTATE:IsCourseMode() then end; }; t[#t+1] = StandardDecorationFromFileOptional("StageDisplay","StageDisplay"); - end; +if GAMESTATE:IsCourseMode() then + t[#t+1] = StandardDecorationFromFileOptional("NumCourseSongs","NumCourseSongs")..{ + InitCommand=cmd(horizalign,right); + SetCommand=function(self) + local curSelection= nil; + local sAppend = ""; + if GAMESTATE:IsCourseMode() then + curSelection = GAMESTATE:GetCurrentCourse(); + if curSelection then + sAppend = (curSelection:GetEstimatedNumStages() == 1) and "Stage" or "Stages"; + self:visible(true); + self:settext( curSelection:GetEstimatedNumStages() .. " " .. sAppend); + else + self:visible(false); + end; + else + self:visible(false); + end; + end; + CurrentCourseChangedMessageCommand=cmd(playcommand,"Set"); + }; +end t[#t+1] = StandardDecorationFromFileOptional("SortOrder","SortOrderText") .. { BeginCommand=cmd(playcommand,"Set"); SortOrderChangedMessageCommand=cmd(playcommand,"Set";); diff --git a/Themes/default/BGAnimations/ScreenStageInformation underlay/default.lua b/Themes/default/BGAnimations/ScreenStageInformation underlay/default.lua index 91ec26969b..eaba5c5a05 100644 --- a/Themes/default/BGAnimations/ScreenStageInformation underlay/default.lua +++ b/Themes/default/BGAnimations/ScreenStageInformation underlay/default.lua @@ -5,7 +5,7 @@ t[#t+1] = Def.Quad { t[#t+1] = Def.Sprite { InitCommand=cmd(Center); BeginCommand=function(self) - if not GAMESTATE:IsCourseMode() then + if GAMESTATE:GetCurrentSong() then self:LoadBackground( GAMESTATE:GetCurrentSong():GetBackgroundPath() ); end; end; diff --git a/Themes/default/Graphics/ScoreDisplayLifeTime frame.redir b/Themes/default/Graphics/ScoreDisplayLifeTime frame.redir new file mode 100644 index 0000000000..cfccd99073 --- /dev/null +++ b/Themes/default/Graphics/ScoreDisplayLifeTime frame.redir @@ -0,0 +1 @@ +ScoreDisplayNormal frame \ No newline at end of file diff --git a/Themes/default/Graphics/ScreenSelectMusic CourseContentsList.lua b/Themes/default/Graphics/ScreenSelectMusic CourseContentsList.lua index 7aca77edc9..be63de209e 100644 --- a/Themes/default/Graphics/ScreenSelectMusic CourseContentsList.lua +++ b/Themes/default/Graphics/ScreenSelectMusic CourseContentsList.lua @@ -1,6 +1,6 @@ return Def.CourseContentsList { MaxSongs = 4; - NumItemsToDraw = 8; -- Doesn't scroll anymore. + 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); --]] @@ -9,15 +9,15 @@ return Def.CourseContentsList { SetCommand=function(self) self:SetFromGameState(); self:SetCurrentAndDestinationItem(0); - self:SetLoop(false); - self:SetMask(270,44); + self:SetLoop(false); + self:SetMask(270,44); end; CurrentTrailP1ChangedMessageCommand=cmd(playcommand,"Set"); CurrentTrailP2ChangedMessageCommand=cmd(playcommand,"Set"); Display = Def.ActorFrame { InitCommand=cmd(setsize,270,44); - + LoadActor(THEME:GetPathG("CourseEntryDisplay","bar")) .. { SetSongCommand=function(self, params) if params.Song then @@ -27,7 +27,7 @@ return Def.CourseContentsList { self:diffuse( color("#FFFFFF") ); self:diffuseleftedge( Colors.CourseDifficultyColors[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); end; }; @@ -53,7 +53,7 @@ return Def.CourseContentsList { 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; }; @@ -81,6 +81,5 @@ return Def.CourseContentsList { SetSongCommand=function(self, params) self:settext(params.Modifiers); end; }; --]] - }; }; \ No newline at end of file diff --git a/Themes/default/Graphics/ScreenSelectMusic NumCourseSongs.lua b/Themes/default/Graphics/ScreenSelectMusic NumCourseSongs.lua new file mode 100644 index 0000000000..93e17dacca --- /dev/null +++ b/Themes/default/Graphics/ScreenSelectMusic NumCourseSongs.lua @@ -0,0 +1,2 @@ +return LoadFont("Common Normal") .. { +}; \ No newline at end of file diff --git a/Themes/default/metrics.ini b/Themes/default/metrics.ini index 77b51b0cd9..566ed8f657 100644 --- a/Themes/default/metrics.ini +++ b/Themes/default/metrics.ini @@ -43,7 +43,7 @@ LabelOnCommand=x,6;y,22;shadowlength,1;horizalign,left;vertalign,bottom [FadingBanner] BannerOnCommand= -BannerFadeFromCachedCommand=diffusealpha,1;stoptweening;accelerate,0.05;glow,Color("White");decelerate,0.175;diffusealpha,0;glow,Color("Invisible"); +BannerFadeFromCachedCommand=diffusealpha,1;stoptweening;accelerate,0.05;glow,Colors.Alpha( Color("White"), 0.45 );decelerate,0.175;diffusealpha,0;glow,Color("Invisible"); BannerFadeOffCommand=diffusealpha,1;stoptweening;linear,0.25;diffusealpha,0 BannerResetFadeCommand=diffusealpha,1 @@ -897,6 +897,7 @@ SongTimeY=SCREEN_TOP+160+(36/2)+8 SongTimeOnCommand=zoom,0.75;strokecolor,Color("Outline");shadowlength,1 SongTimeOffCommand=bouncebegin,0.15;zoom,0;diffusealpha,0; SongTimeResetCommand=diffuse,Color("White"); +SongTimeAutogenCommand=diffuse,Color("Green"); SongTimeLongCommand=diffusebottomedge,Color("Blue"); SongTimeMarathonCommand=diffuse,Color("Yellow");diffusebottomedge,Color("Orange"); # @@ -960,6 +961,12 @@ CourseContentsListY=SCREEN_TOP+216+6 CourseContentsListOnCommand=addx,-SCREEN_CENTER_X;decelerate,0.35;addx,SCREEN_CENTER_X CourseContentsListOffCommand=bouncebegin,0.15;zoomx,0; # +ShowNumCourseSongs=false +NumCourseSongsX=SCREEN_CENTER_X-160+128 +NumCourseSongsY=SCREEN_TOP+160+(36/2)+8 +NumCourseSongsOnCommand=zoom,0.75;strokecolor,Color("Outline");shadowlength,1 +NumCourseSongsOffCommand=bouncebegin,0.15;zoom,0;diffusealpha,0; +# ShowSongOptions=true SongOptionsX=SCREEN_CENTER_X SongOptionsY=SCREEN_CENTER_Y @@ -1032,6 +1039,10 @@ DefaultSort="Nonstop" # ShowDifficultyList=false ShowCourseContentsList=true +ShowNumCourseSongs=true +# +UsePlayerSelectMenu=false +SelectMenuAvailable=false [ScreenNetSelectMusic] StepsDisplayP1X=SCREEN_CENTER_X-240