From dfc5f531346e58c88bbf03686d1908c84cbc401d Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Wed, 17 Feb 2010 19:47:36 -0600 Subject: [PATCH] various theme changes by Midiman and myself. --- .../Graphics/ScreenSelectMaster scroll.lua | 2 +- Themes/_fallback/Languages/en.ini | 2 + Themes/_fallback/Scripts/02 Actor.lua | 24 ++-- Themes/_fallback/Scripts/02 Colors.lua | 28 ++-- Themes/_fallback/Scripts/02 Sprite.lua | 14 +- .../_fallback/Scripts/03 CustomSpeedMods.lua | 2 +- .../Scripts/03 ProductivityHelpers.lua | 123 +----------------- .../ScreenGameplay battle trick level1.redir | 1 + .../ScreenGameplay battle trick level2.redir | 1 + .../ScreenGameplay battle trick level3.redir | 1 + Themes/_fallback/metrics.ini | 122 +++++++++++------ .../BGAnimations/Screen cancel/default.lua | 2 +- .../BGAnimations/Screen in/default.lua | 2 +- .../BGAnimations/Screen out/default.lua | 2 +- .../ScreenGameplay decorations/default.lua | 12 ++ .../ScreenSelectMusic decorations/default.lua | 33 +++++ .../default.lua | 8 +- .../BGAnimations/ScreenTitleMenu out.lua | 2 +- .../default.lua | 4 +- .../Graphics/CombinedLifeMeterTug frame.redir | 1 + .../CombinedLifeMeterTug separator.redir | 1 + .../CombinedLifeMeterTug stream p1.redir | 1 + .../CombinedLifeMeterTug stream p2.redir | 1 + .../CombinedLifeMeterTug tip p1.redir | 1 + .../CombinedLifeMeterTug tip p2.redir | 1 + .../default/Graphics/Player combo/default.lua | 8 +- ...ScreenSelectMusic AlternateHelpDisplay.lua | 33 +++++ .../Graphics/ScreenSelectMusic BPMLabel.lua | 31 +++-- .../Graphics/ScreenSelectMusic SongTime.lua | 2 + .../Graphics/ScreenTitleMenu logo/_multi.png | Bin 0 -> 17426 bytes .../Graphics/ScreenTitleMenu logo/default.lua | 12 +- .../ScreenWithMenuElements header/default.lua | 2 +- Themes/default/Languages/en.ini | 3 +- .../ScreenNetSelectMusic ChatInputBox.redir | 1 - .../ScreenNetSelectMusic ChatOutputBox.redir | 1 - Themes/default/metrics.ini | 80 +++++++----- 36 files changed, 314 insertions(+), 250 deletions(-) create mode 100644 Themes/_fallback/Sounds/ScreenGameplay battle trick level1.redir create mode 100644 Themes/_fallback/Sounds/ScreenGameplay battle trick level2.redir create mode 100644 Themes/_fallback/Sounds/ScreenGameplay battle trick level3.redir create mode 100644 Themes/default/Graphics/CombinedLifeMeterTug frame.redir create mode 100644 Themes/default/Graphics/CombinedLifeMeterTug separator.redir create mode 100644 Themes/default/Graphics/CombinedLifeMeterTug stream p1.redir create mode 100644 Themes/default/Graphics/CombinedLifeMeterTug stream p2.redir create mode 100644 Themes/default/Graphics/CombinedLifeMeterTug tip p1.redir create mode 100644 Themes/default/Graphics/CombinedLifeMeterTug tip p2.redir create mode 100644 Themes/default/Graphics/ScreenSelectMusic AlternateHelpDisplay.lua create mode 100644 Themes/default/Graphics/ScreenSelectMusic SongTime.lua create mode 100644 Themes/default/Graphics/ScreenTitleMenu logo/_multi.png delete mode 100644 Themes/default/ScreenNetSelectMusic ChatInputBox.redir delete mode 100644 Themes/default/ScreenNetSelectMusic ChatOutputBox.redir diff --git a/Themes/_fallback/Graphics/ScreenSelectMaster scroll.lua b/Themes/_fallback/Graphics/ScreenSelectMaster scroll.lua index 48b53e504d..e1d3b5882a 100644 --- a/Themes/_fallback/Graphics/ScreenSelectMaster scroll.lua +++ b/Themes/_fallback/Graphics/ScreenSelectMaster scroll.lua @@ -3,7 +3,7 @@ local gc = Var("GameCommand"); local t = Def.ActorFrame {}; t[#t+1] = LoadFont("Common Normal") .. { - Text=gc:GetName() .. "\n" .. gc:GetText(); + Text=gc:GetName(); }; t.GainFocusCommand=cmd(visible,true); diff --git a/Themes/_fallback/Languages/en.ini b/Themes/_fallback/Languages/en.ini index 972022857d..9695cf0bc8 100644 --- a/Themes/_fallback/Languages/en.ini +++ b/Themes/_fallback/Languages/en.ini @@ -2122,6 +2122,8 @@ HeaderText=Test Input HeaderText=! [ScreenOptionsManageProfiles] HeaderText=Profiles +[ScreenOptionsSystemDirection] +HeaderText=System Direction [ScreenOptionsUI] HeaderText=UI [ScreenOptionsArcade] diff --git a/Themes/_fallback/Scripts/02 Actor.lua b/Themes/_fallback/Scripts/02 Actor.lua index f8d7c42b43..f9adbb1a3e 100644 --- a/Themes/_fallback/Scripts/02 Actor.lua +++ b/Themes/_fallback/Scripts/02 Actor.lua @@ -72,7 +72,17 @@ local SmoothBezier = function Actor:smooth(t) self:tween( t, "TweenType_Bezier", SmoothBezier ); end - +-- SSC Additions +local DropBezier = +{ + 0 , 0, + 1/3 , 1, + 2/3 , 0.5, + 1 , 1, +} +function Actor:drop(t) + self:tween( t, "TweenType_Bezier", DropBezier ); +end -- Hide if b is true, but don't unhide if b is false. function Actor:hide_if(b) if b then @@ -135,18 +145,6 @@ function Actor:Center() self:y(SCREEN_CENTER_Y); end; --- SSC Additions -local DropBezier = -{ - 0 , 0, - 8/16 , 1, - 12/16 , 0.5, - 16/16 , 1, -} -function Actor:drop(t) - self:tween( t, "TweenType_Bezier", DropBezier ); -end - -- (c) 2006 Glenn Maynard -- All rights reserved. -- diff --git a/Themes/_fallback/Scripts/02 Colors.lua b/Themes/_fallback/Scripts/02 Colors.lua index f82979f407..3837b298ab 100644 --- a/Themes/_fallback/Scripts/02 Colors.lua +++ b/Themes/_fallback/Scripts/02 Colors.lua @@ -5,26 +5,26 @@ Colors = { -- UI Colors -- These colors are common to the theme interface and should be used -- often to make use of these efficiently. - Enabled = nilColor, - Disabled = nilColor, - Focused = nilColor, - Outline = nilColor, - Shadow = nilColor, - Important = nilColor, - Reward = nilColor, + Enabled = nilColor, + Disabled = nilColor, + Focused = nilColor, + Outline = nilColor, + Shadow = nilColor, + Important = nilColor, + Reward = nilColor, Special = color("#f7941d"), -- Global Colors -- These colors are usually tied to colors that shouldn't change that -- much throughout themes, but should be easily accessible. -- ( Do note that I want to remove '*Color' entirely, it'll look neater ) - Player = { + Player = { P1 = color("#ef403d"), P2 = color("#0089cf"), }, - Difficulty = { - --[[ These are for 'Custom' Difficulty Ranks. It can be very - useful in some cases, especially to apply new colors for - stuff you couldn't before ]] + Difficulty = { + --[[ These are for 'Custom' Difficulty Ranks. It can be very useful + in some cases, especially to apply new colors for stuff you + couldn't before. (huh? -aj) ]] Beginner = color("#ff32f8"), -- light cyan Easy = color("#2cff00"), -- green Medium = color("#fee600"), -- yellow @@ -33,8 +33,8 @@ Colors = { Edit = color("0.8,0.8,0.8,1"), -- gray Couple = color("#ed0972"), -- hot pink Routine = color("#ff9a00"), -- orange - --[[ These are for courses, so let's slap them here incase someone - you wanted to use Difficulty in Course and Step regions ]] + --[[ These are for courses, so let's slap them here in case someone + wanted to use Difficulty in Course and Step regions. ]] Difficulty_Beginner = color("0.0,0.9,1.0,1"), -- purple Difficulty_Easy = color("0.9,0.9,0.0,1"), -- green Difficulty_Medium = color("1.0,0.1,0.1,1"), -- yellow diff --git a/Themes/_fallback/Scripts/02 Sprite.lua b/Themes/_fallback/Scripts/02 Sprite.lua index ad355d5af5..12a69f3948 100644 --- a/Themes/_fallback/Scripts/02 Sprite.lua +++ b/Themes/_fallback/Scripts/02 Sprite.lua @@ -1,10 +1,14 @@ function Sprite:LoadFromSongBanner(song) - local Path = song:GetBannerPath() - if not Path then - Path = THEME:GetPathG("Common","fallback banner") - end + if song then + local Path = song:GetBannerPath() + if not Path then + Path = THEME:GetPathG("Common","fallback banner") + end - self:LoadBanner( Path ) + self:LoadBanner( Path ) + else + self:LoadBanner( THEME:GetPathG("Common","fallback banner") ) + end; end function Sprite:LoadFromSongBackground(song) diff --git a/Themes/_fallback/Scripts/03 CustomSpeedMods.lua b/Themes/_fallback/Scripts/03 CustomSpeedMods.lua index 13f56a24ae..21a796adbb 100644 --- a/Themes/_fallback/Scripts/03 CustomSpeedMods.lua +++ b/Themes/_fallback/Scripts/03 CustomSpeedMods.lua @@ -278,7 +278,7 @@ function SpeedMods() end; --[[ -Copyright © 2008-2009 AJ Kelly/KKI Labs. +Copyright © 2008-2009 AJ Kelly/KKI Labs. Use freely, so long this notice and the above documentation remains. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" diff --git a/Themes/_fallback/Scripts/03 ProductivityHelpers.lua b/Themes/_fallback/Scripts/03 ProductivityHelpers.lua index a75213c87f..f867444d34 100644 --- a/Themes/_fallback/Scripts/03 ProductivityHelpers.lua +++ b/Themes/_fallback/Scripts/03 ProductivityHelpers.lua @@ -121,6 +121,12 @@ function tobool(v) end; function pname(pn) return ToEnumShortString(pn); end; + +-- from http://ardoris.wordpress.com/2008/11/07/rounding-to-a-certain-number-of-decimal-places-in-lua/ +function round(what, precision) + return math.floor(what*math.pow(10,precision)+0.5) / math.pow(10,precision) +end + --[[ end helper functions ]] -- this code is in the public domain. @@ -161,121 +167,4 @@ function ComboMaintain() para = "TapNoteScore_W4", }; return Maintain[sGame] -end; - -function ComboPerRow() - sGame = GAMESTATE:GetCurrentGame():GetName(); - if sGame == "pump" then - return true; - elseif GAMESTATE:GetPlayMode() == "PlayMode_Oni" then - return true; - else return false; - end; -end; - -function HitCombo() - sGame = GAMESTATE:GetCurrentGame():GetName(); - local Combo = { - dance = "2", - pump = "4", - beat = "2", - kb7 = "2", - para = "2", - }; - return Combo[sGame] -end; - -function MissCombo() - sGame = GAMESTATE:GetCurrentGame():GetName(); - local Combo = { - dance = "2", - pump = "4", - beat = "", - kb7 = "", - para = "", - }; - return Combo[sGame] -end; - -function FailCombo() -- The combo that causes game failure. - sGame = GAMESTATE:GetCurrentGame():GetName(); - local Combo = { - dance = "30", -- ITG/Pump Pro does it this way. - pump = "51", - beat = "-1", - kb7 = "-1", - para = "-1", - }; - return Combo[sGame] -end; - --- todo: use tables for some of these -aj -function HoldTiming() - if GAMESTATE:GetCurrentGame():GetName() == "pump" then - return 0; - else return PREFSMAN:GetPreference("TimingWindowSecondsHold"); - end; -end; - -function HoldJudgmentFail() - if GAMESTATE:GetCurrentGame():GetName() == "pump" then - return cmd(); - else return cmd(finishtweening;shadowlength,0;diffusealpha,1;zoom,1;y,-10;linear,0.8;y,10;sleep,0.5;linear,0.1;zoomy,0.5;zoomx,2;diffusealpha,0); - end; -end; - -function HoldJudgmentPass() - if GAMESTATE:GetCurrentGame():GetName() == "pump" then - return cmd(); - else return cmd(finishtweening;shadowlength,0;diffusealpha,1;zoom,1.25;linear,0.3;zoomx,1;zoomy,1;sleep,0.5;linear,0.1;zoomy,0.5;zoomx,2;diffusealpha,0); - end; -end; - -function HoldHeadStep() - if GAMESTATE:GetCurrentGame():GetName() == "pump" then - return false; - else return true; - end; -end; - -function InitialHoldLife() - if GAMESTATE:GetCurrentGame():GetName() == "pump" then - return 0.05; - else return 1; - end; -end; - -function MaxHoldLife() - if GAMESTATE:GetCurrentGame():GetName() == "pump" then - return 0.05; - else return 1; - end; -end; - -function ImmediateHoldLetGo() - if GAMESTATE:GetCurrentGame():GetName() == "pump" then - return false; - else return true; - end; -end; - -function RollBodyIncrementsCombo() - if GAMESTATE:GetCurrentGame():GetName() == "pump" then - return false; - else return true; - end; -end; - -function CheckpointsTapsSeparateJudgment() - if GAMESTATE:GetCurrentGame():GetName() == "pump" then - return false; - else return true; - end; -end; - -function ScoreMissedHoldsAndRolls() - if GAMESTATE:GetCurrentGame():GetName() == "pump" then - return false; - else return true; - end; end; \ No newline at end of file diff --git a/Themes/_fallback/Sounds/ScreenGameplay battle trick level1.redir b/Themes/_fallback/Sounds/ScreenGameplay battle trick level1.redir new file mode 100644 index 0000000000..1f8565ca21 --- /dev/null +++ b/Themes/_fallback/Sounds/ScreenGameplay battle trick level1.redir @@ -0,0 +1 @@ +_silent \ No newline at end of file diff --git a/Themes/_fallback/Sounds/ScreenGameplay battle trick level2.redir b/Themes/_fallback/Sounds/ScreenGameplay battle trick level2.redir new file mode 100644 index 0000000000..1f8565ca21 --- /dev/null +++ b/Themes/_fallback/Sounds/ScreenGameplay battle trick level2.redir @@ -0,0 +1 @@ +_silent \ No newline at end of file diff --git a/Themes/_fallback/Sounds/ScreenGameplay battle trick level3.redir b/Themes/_fallback/Sounds/ScreenGameplay battle trick level3.redir new file mode 100644 index 0000000000..1f8565ca21 --- /dev/null +++ b/Themes/_fallback/Sounds/ScreenGameplay battle trick level3.redir @@ -0,0 +1 @@ +_silent \ No newline at end of file diff --git a/Themes/_fallback/metrics.ini b/Themes/_fallback/metrics.ini index 036113b75b..4060d24709 100644 --- a/Themes/_fallback/metrics.ini +++ b/Themes/_fallback/metrics.ini @@ -34,9 +34,6 @@ PercentScoreDecimalPlaces=2 ColorP1Command=diffuse,PlayerColor(PLAYER_1) ColorP2Command=diffuse,PlayerColor(PLAYER_2) -[Preferences] -TimingWindowSecondsHold=HoldTiming() - # 02 # [LightsManager] GameButtonsToShow="" @@ -58,7 +55,6 @@ ExtraStage2DifficultyMax=8 UseUnlockColor=false UsePreferredSortColor=false MoveUnlocksToBottomOfPreferredSort=false -# # Lots of themes want more than one group color, so let them have this. SongGroupColor1=color("#00aeef") -- blue SongGroupColor2=color("#00aeef") -- blue @@ -171,6 +167,7 @@ MeterWidth=0.0 MeterHeight=0.0 [Combo] +ShowComboAt=2 NumberMinZoom=0.8 NumberMaxZoom=1 @@ -182,8 +179,8 @@ LabelOnCommand=x,6;y,22;shadowlength,1;horizalign,left;vertalign,bottom [HoldJudgment] # !!! # -HoldJudgmentLetGoCommand=HoldJudgmentFail() -HoldJudgmentHeldCommand=HoldJudgmentPass() +HoldJudgmentLetGoCommand=shadowlength,0;diffusealpha,1;zoom,1;y,-10;linear,0.8;y,10;sleep,0.5;linear,0.1;zoomy,0.5;zoomx,2;diffusealpha,0 +HoldJudgmentHeldCommand=shadowlength,0;diffusealpha,1;zoom,1.25;linear,0.3;zoomx,1;zoomy,1;sleep,0.5;linear,0.1;zoomy,0.5;zoomx,2;diffusealpha,0 [HelpDisplay] TipShowTime=4 @@ -245,23 +242,22 @@ ComboScoreBonusValue=+1000 ComboMultiplier=0.0 -DoubleNoteScoreMultiplier=1.0 -TripleNoteScoreMultiplier=1.0 -QuadOrHigherNoteScoreMultiplier=1.0 +DoubleNoteScoreMultiplier=2.0 +TripleNoteScoreMultiplier=3.0 +QuadOrHigherNoteScoreMultiplier=4.0 -PointsW1=+1000 -PointsW2=+1000 -PointsW3=+500 -PointsW4=+100 -PointsW5=-200 -PointsMiss=-500 -PointsHitMine=-500 -PointsCheckpointHit=+1000 -PointsCheckpointMiss=-200 +PointsW1=+50 +PointsW2=+20 +PointsW3=+10 +PointsW4=+5 +PointsW5=0 +PointsMiss=-5 +PointsHitMine=-5 +PointsCheckpointHit=+5 +PointsCheckpointMiss=-5 PointsNone=0 -PointsHoldHeld=+1000 -PointsHoldLetGo=-500 - +PointsHoldHeld=+5 +PointsHoldLetGo=-5 [DifficultyList] CapitalizeDifficultyNames=false # @@ -278,7 +274,7 @@ BannerResetFadeCommand=diffusealpha,1 [Gameplay] # todo: make some of these play nice with other gametypes -ComboIsPerRow=ComboPerRow() +ComboIsPerRow=GAMESTATE:GetPlayMode() == "PlayMode_Oni" MinScoreToContinueCombo=ComboContinue() MinScoreToMaintainCombo=ComboMaintain() ToastyTriggersAt=250 @@ -580,7 +576,8 @@ SectionColor1=color("1,1,1,1") SongRealExtraColor=color("1,0,0,1") SortMenuColor=color("1,1,1,1") -SortOrders={ "SortOrder_Preferred", "SortOrder_Group", "SortOrder_Title", "SortOrder_BPM", "SortOrder_Popularity", "SortOrder_Artist", "SortOrder_Genre" } +SortOrders={ "SortOrder_Preferred", "SortOrder_Group", "SortOrder_Title", "SortOrder_BPM", "SortOrder_Artist", "SortOrder_Genre" } +# SortOrders={ "SortOrder_Preferred", "SortOrder_Group", "SortOrder_Title", "SortOrder_BPM", "SortOrder_Popularity", "SortOrder_Artist", "SortOrder_Genre" } # ShowRoulette=true ShowRandom=false @@ -589,7 +586,8 @@ ShowPortal=false MostPlayedSongsToShow=30 RecentSongsToShow=30 # -ModeMenuChoiceNames="Preferred,Group,Title,Bpm,Popularity,TopGrades,Artist,EasyMeter,MediumMeter,HardMeter,ChallengeMeter,DoubleEasyMeter,DoubleMediumMeter,DoubleHardMeter,DoubleChallengeMeter,Genre,Length,Recent,NormalMode,BattleMode" +ModeMenuChoiceNames="Preferred,Group,Title,Bpm,Popularity,TopGrades,Artist,EasyMeter,MediumMeter,HardMeter,ChallengeMeter,DoubleEasyMeter,DoubleMediumMeter,DoubleHardMeter,DoubleChallengeMeter,Genre,Length,Recent" +# ModeMenuChoiceNames="Preferred,Group,Title,Bpm,Popularity,TopGrades,Artist,EasyMeter,MediumMeter,HardMeter,ChallengeMeter,DoubleEasyMeter,DoubleMediumMeter,DoubleHardMeter,DoubleChallengeMeter,Genre,Length,Recent,NormalMode,BattleMode" ChoicePreferred="sort,Preferred" ChoiceGroup="sort,Group" ChoiceTitle="sort,Title" @@ -609,7 +607,7 @@ ChoiceDoubleChallengeMeter="sort,DoubleChallengeMeter" ChoiceLength="sort,Length" ChoiceRecent="sort,Recent" ChoiceNormalMode="playmode,regular" -ChoiceBattleMode="playmode,regular" +ChoiceBattleMode="playmode,battle" UseEasyMarkerFlag=false # @@ -675,6 +673,9 @@ BarMeasureAlpha=1 Bar4thAlpha=1 Bar8thAlpha=1 Bar16thAlpha=1 +# +RoutineNoteSkinP1=default +RoutineNoteSkinP2=default [PlayerStageStats] NumGradeTiersUsed=6 @@ -719,16 +720,16 @@ TapJudgmentsUnderField=false HoldJudgmentsUnderField=false ComboUnderField=true PenalizeTapScoreNone=false -JudgeHoldNotesOnSameRowTogether=(GAMESTATE:GetCurrentGame():GetName() == "pump") +JudgeHoldNotesOnSameRowTogether=false HoldCheckpoints=(GAMESTATE:GetCurrentGame():GetName() == "pump") -ImmediateHoldLetGo=ImmediateHoldLetGo() -RequireStepOnHoldHeads=HoldHeadStep() -CheckpointsUseTimeSignatures=(GAMESTATE:GetCurrentGame():GetName() == "pump") -InitialHoldLife=InitialHoldLife() -MaxHoldLife=MaxHoldLife() -RollBodyIncrementsCombo=RollBodyIncrementsCombo() -CheckpointsTapsSeparateJudgment=CheckpointsTapsSeparateJudgment() -ScoreMissedHoldsAndRolls=ScoreMissedHoldsAndRolls() +ImmediateHoldLetGo=(GAMESTATE:GetCurrentGame():GetName() == "pump") and false or true +RequireStepOnHoldHeads=(GAMESTATE:GetCurrentGame():GetName() == "pump") and false or true +CheckpointsUseTimeSignatures=false +InitialHoldLife=1 +MaxHoldLife=1 +RollBodyIncrementsCombo=true +CheckpointsTapsSeparateJudgment=true +ScoreMissedHoldsAndRolls=(GAMESTATE:GetCurrentGame():GetName() == "pump") and false or true [Profile] ShowCoinData=true @@ -959,6 +960,7 @@ SkipWidth=190 SkipSpacingY=14 # [ScreenWithMenuElements] +Class="ScreenWithMenuElements" Fallback="Screen" # TimerSeconds=-1 @@ -1174,12 +1176,23 @@ DefaultChoice="1" Choice1="applydefaultoptions;screen,ScreenProfileLoad;text,Game Start" Choice2="screen,ScreenNetworkOptions;text,Play Online" Choice3="screen,ScreenSelectGame;text,Select Game" -Choice4="screen,ScreenOptionsService;text,Options" +Choice4="screen,ScreenOptionsSystemDirection;text,Options" Choice5="screen,ScreenOptionsEdit;text,Edit/Share" Choice6="screen,ScreenJukeboxMenu;text,Jukebox" Choice7="screen,ScreenExit;text,Exit" Choice8="screen,ScreenTest;text,Sandbox" +Choice9="screen,ScreenQuickSetupOverview;text,Setup" +# Aliases for the future. ChoiceSetup="screen,ScreenQuickSetupOverview;text,Setup" +ChoiceGameStart="applydefaultoptions;screen,ScreenProfileLoad;text,Game Start" +ChoiceOnline="screen,ScreenNetworkOptions;text,Play Online" +ChoiceGameSelect="screen,ScreenSelectGame;text,Select Game" +ChoiceOptions="screen,ScreenOptionsSystemDirection;text,Options" +ChoiceEdit="screen,ScreenOptionsEdit;text,Edit/Share" +ChoiceJukebox="screen,ScreenJukeboxMenu;text,Jukebox" +ChoiceSandbox="screen,ScreenTest;text,Sandbox" +ChoiceSetup="screen,ScreenQuickSetupOverview;text,Setup" +ChoiceExit="screen,ScreenExit;text,Exit" # AllowRepeatingInput=true ShowCursor=false @@ -1854,6 +1867,7 @@ ScoreDisplay,2="mod,subtractscore;name,Subtract" ScoreDisplay,3="mod,averagescore;name,Average" # Song options +# LifeType="3;together" LifeType=(GAMESTATE:IsCourseMode() and 3 or 2)..";together" LifeTypeDefault="" LifeType,1="mod,bar;name,Bar" @@ -2121,6 +2135,34 @@ PrevScreen="ScreenOptionsService" [DeviceList] DeviceListOnCommand=zoom,1;shadowlength,1 +[ScreenOptionsSystemDirection] +Fallback="ScreenOptionsServiceChild" +PrevScreen=Branch.TitleMenu +NextScreen=Branch.TitleMenu +LineNames="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22" +Line1="conf,Windowed" +Line2="conf,DisplayResolution" +Line3="conf,DisplayAspectRatio" +Line4="conf,HighResolutionTextures" +Line5="conf,Vsync" +Line6="conf,SoundVolume" +Line7="conf,TimingWindowScale" +Line8="conf,LifeDifficulty" +Line9="conf,AllowW1" +Line10="conf,AutogenSteps" +Line11="conf,ShowBanners" +Line12="conf,ShowCaution" +Line13="conf,ShowInstructions" +Line14="conf,ShowDanger" +Line15="conf,ShowSongOptions" +Line16="conf,EasterEggs" +Line17="conf,Theme" +Line18="conf,DefaultNoteskin" +Line19="conf,PercentageScoring" +Line20="conf,BGBrightness" +Line21="conf,Center1Player" +Line22="conf,EventMode" + [ScreenOptionsGraphicsSound] Fallback="ScreenOptionsServiceChild" LineNames="1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,18,19,20" @@ -2337,6 +2379,7 @@ Fallback="ScreenWithMenuElements" AllowOperatorMenuButton=false [ScreenAttract] +Class="ScreenAttract" Fallback="ScreenWithMenuElementsBlank" # StartScreen="" @@ -2503,7 +2546,7 @@ PlayerInitCommand=y,SCREEN_CENTER_Y;zoom,(THEME:GetMetric("Common","ScreenHeight StartGivesUp=true BackGivesUp=false # -FailOnMissCombo=FailCombo() +FailOnMissCombo=-1 GivingUpGoesToPrevScreen=false GivingUpGoesToNextScreen=false # @@ -2551,6 +2594,11 @@ ActiveAttackListP2Y= ActiveAttackListP2OnCommand=visible,false ActiveAttackListP2OffCommand= # +CombinedLifeX=SCREEN_CENTER_X +CombinedLifeY=SCREEN_CENTER_Y +CombinedLifeOnCommand=visible,false +CombinedLifeOffCommand= +# LifeP1X=THEME:GetMetric(Var "LoadingScreen","PlayerP1OnePlayerOneSideX") LifeP1Y=SCREEN_TOP+24 LifeP1OnCommand= @@ -3295,4 +3343,4 @@ UsersBG2OffCommand= UserDX=0 UserDY=24 UserOnCommand= -UserOffCommand= +UserOffCommand= \ No newline at end of file diff --git a/Themes/default/BGAnimations/Screen cancel/default.lua b/Themes/default/BGAnimations/Screen cancel/default.lua index bb54d7b264..e5c61720a9 100644 --- a/Themes/default/BGAnimations/Screen cancel/default.lua +++ b/Themes/default/BGAnimations/Screen cancel/default.lua @@ -1,6 +1,6 @@ return Def.ActorFrame { Def.Quad { - InitCommand=cmd(Center;zoomto,SCREEN_WIDTH,SCREEN_HEIGHT); + InitCommand=cmd(Center;zoomto,SCREEN_WIDTH+1,SCREEN_HEIGHT); OnCommand=cmd(diffuse,color("0,0,0,0.5");sleep,0.15;diffusealpha,1;sleep,0.15); }; LoadActor(THEME:GetPathS("_Screen","cancel")) .. { diff --git a/Themes/default/BGAnimations/Screen in/default.lua b/Themes/default/BGAnimations/Screen in/default.lua index 237dcd127b..e9d413cd7d 100644 --- a/Themes/default/BGAnimations/Screen in/default.lua +++ b/Themes/default/BGAnimations/Screen in/default.lua @@ -1,6 +1,6 @@ return Def.ActorFrame { Def.Quad { - InitCommand=cmd(Center;zoomto,SCREEN_WIDTH,SCREEN_HEIGHT); + InitCommand=cmd(Center;zoomto,SCREEN_WIDTH+1,SCREEN_HEIGHT); OnCommand=cmd(diffuse,color("0,0,0,1");linear,0.15;diffusealpha,0); }; }; \ No newline at end of file diff --git a/Themes/default/BGAnimations/Screen out/default.lua b/Themes/default/BGAnimations/Screen out/default.lua index 343943c967..e133f4379d 100644 --- a/Themes/default/BGAnimations/Screen out/default.lua +++ b/Themes/default/BGAnimations/Screen out/default.lua @@ -1,6 +1,6 @@ return Def.ActorFrame { Def.Quad { - InitCommand=cmd(Center;zoomto,SCREEN_WIDTH,SCREEN_HEIGHT); + InitCommand=cmd(Center;zoomto,SCREEN_WIDTH+1,SCREEN_HEIGHT); OnCommand=cmd(diffuse,color("0,0,0,0");linear,0.15;diffusealpha,1); }; }; \ No newline at end of file diff --git a/Themes/default/BGAnimations/ScreenGameplay decorations/default.lua b/Themes/default/BGAnimations/ScreenGameplay decorations/default.lua index 97ebeb5859..a20fa5ef87 100644 --- a/Themes/default/BGAnimations/ScreenGameplay decorations/default.lua +++ b/Themes/default/BGAnimations/ScreenGameplay decorations/default.lua @@ -96,6 +96,18 @@ for pn in ivalues(PlayerNumber) do ActorUtil.LoadAllCommandsAndSetXY(self,MetricsName); end; }; + Def.Quad { + InitCommand=cmd(zoomto,2,8); + OnCommand=cmd(x,scale(0.25,0,1,-380/2,380/2);diffuse,Color("White");diffusealpha,0.5); + }; + Def.Quad { + InitCommand=cmd(zoomto,2,8); + OnCommand=cmd(x,scale(0.5,0,1,-380/2,380/2);diffuse,Color("White");diffusealpha,0.5); + }; + Def.Quad { + InitCommand=cmd(zoomto,2,8); + OnCommand=cmd(x,scale(0.75,0,1,-380/2,380/2);diffuse,Color("White");diffusealpha,0.5); + }; Def.SongMeterDisplay { StreamWidth=THEME:GetMetric( MetricsName, 'StreamWidth' ); Stream=LoadActor( THEME:GetPathG( 'SongMeterDisplay', 'stream ' .. PlayerNumberToString(pn) ) )..{ diff --git a/Themes/default/BGAnimations/ScreenSelectMusic decorations/default.lua b/Themes/default/BGAnimations/ScreenSelectMusic decorations/default.lua index f53453bd46..e867afd1bd 100644 --- a/Themes/default/BGAnimations/ScreenSelectMusic decorations/default.lua +++ b/Themes/default/BGAnimations/ScreenSelectMusic decorations/default.lua @@ -19,6 +19,7 @@ local function StepsDisplay(pn) return t; end +t[#t+1] = StandardDecorationFromFileOptional("AlternateHelpDisplay","AlternateHelpDisplay"); -- Legacy StepMania 4 Function for pn in ivalues(PlayerNumber) do local MetricsName = "StepsDisplay" .. PlayerNumberToString(pn); @@ -44,6 +45,38 @@ t[#t+1] = StandardDecorationFromFileOptional("DifficultyList","DifficultyList"); t[#t+1] = StandardDecorationFromFileOptional("CourseContentsList","CourseContentsList"); 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; + if GAMESTATE:IsCourseMode() then + curSelection = GAMESTATE:GetCurrentCourse(); + self:playcommand("Reset"); + if curSelection then + length = curSelection:GetTotalSeconds(GAMESTATE:GetCurrentStyle():GetStepsType()); + else + length = 0.0; + end; + else + curSelection = GAMESTATE:GetCurrentSong(); + self:playcommand("Reset"); + if curSelection then + length = curSelection:MusicLengthSeconds(); + 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; + self:settext( SecondsToMSS(length) ); + end; + CurrentSongChangedMessageCommand=cmd(playcommand,"Set"); + CurrentCourseChangedMessageCommand=cmd(playcommand,"Set"); +} if not GAMESTATE:IsCourseMode() then t[#t+1] = StandardDecorationFromFileOptional("NewSong","NewSong") .. { diff --git a/Themes/default/BGAnimations/ScreenStageInformation underlay/default.lua b/Themes/default/BGAnimations/ScreenStageInformation underlay/default.lua index 057a938f75..91ec26969b 100644 --- a/Themes/default/BGAnimations/ScreenStageInformation underlay/default.lua +++ b/Themes/default/BGAnimations/ScreenStageInformation underlay/default.lua @@ -14,16 +14,16 @@ t[#t+1] = Def.Sprite { t[#t+1] = Def.ActorFrame { InitCommand=cmd(Center); - OnCommand=cmd(stoptweening;addx,30;linear,3;addx,-30); + OnCommand=cmd(stoptweening;addy,-16;decelerate,3;addy,16); LoadFont("Common Normal") .. { Text=GAMESTATE:IsCourseMode() and GAMESTATE:GetCurrentCourse():GetDisplayFullTitle() or GAMESTATE:GetCurrentSong():GetDisplayFullTitle(); InitCommand=cmd(strokecolor,Color("Outline");y,-20); - OnCommand=cmd(faderight,1;diffusealpha,0;linear,0.5;faderight,0;diffusealpha,1;sleep,1.5;linear,0.5;diffusealpha,0); + OnCommand=cmd(diffusealpha,0;linear,0.5;diffusealpha,1;sleep,1.5;linear,0.5;diffusealpha,0); }; LoadFont("Common Normal") .. { Text=GAMESTATE:IsCourseMode() and ToEnumShortString( GAMESTATE:GetCurrentCourse():GetCourseType() ) or GAMESTATE:GetCurrentSong():GetDisplayArtist(); InitCommand=cmd(strokecolor,Color("Outline");zoom,0.75); - OnCommand=cmd(faderight,1;diffusealpha,0;linear,0.5;faderight,0;diffusealpha,1;sleep,1.5;linear,0.5;diffusealpha,0); + OnCommand=cmd(diffusealpha,0;linear,0.5;diffusealpha,1;sleep,1.5;linear,0.5;diffusealpha,0); }; LoadFont("Common Normal") .. { InitCommand=cmd(strokecolor,Color("Outline");diffuse,Color("Orange");diffusebottomedge,Color("Yellow");zoom,0.75;y,20); @@ -44,7 +44,7 @@ t[#t+1] = Def.ActorFrame { end; self:settext(text); end; - OnCommand=cmd(faderight,1;diffusealpha,0;linear,0.5;faderight,0;diffusealpha,1;sleep,1.5;linear,0.5;diffusealpha,0); + OnCommand=cmd(diffusealpha,0;linear,0.5;diffusealpha,1;sleep,1.5;linear,0.5;diffusealpha,0); }; }; diff --git a/Themes/default/BGAnimations/ScreenTitleMenu out.lua b/Themes/default/BGAnimations/ScreenTitleMenu out.lua index a94bb05b13..60dd6762d9 100644 --- a/Themes/default/BGAnimations/ScreenTitleMenu out.lua +++ b/Themes/default/BGAnimations/ScreenTitleMenu out.lua @@ -1,6 +1,6 @@ return Def.ActorFrame { Def.Quad { - InitCommand=cmd(Center;zoomto,SCREEN_WIDTH,SCREEN_HEIGHT); + InitCommand=cmd(Center;zoomto,SCREEN_WIDTH+1,SCREEN_HEIGHT); OnCommand=cmd(diffuse,color("0,0,0,0");sleep,0.15;linear,0.35;diffusealpha,1); }; }; \ No newline at end of file diff --git a/Themes/default/BGAnimations/ScreenWithMenuElements background/default.lua b/Themes/default/BGAnimations/ScreenWithMenuElements background/default.lua index 316a693fb9..82b17187f1 100644 --- a/Themes/default/BGAnimations/ScreenWithMenuElements background/default.lua +++ b/Themes/default/BGAnimations/ScreenWithMenuElements background/default.lua @@ -3,11 +3,11 @@ local t = Def.ActorFrame {}; t[#t+1] = Def.ActorFrame { InitCommand=cmd(Center); Def.Quad { - InitCommand=cmd(scaletoclipped,SCREEN_WIDTH,SCREEN_HEIGHT); + InitCommand=cmd(scaletoclipped,SCREEN_WIDTH+1,SCREEN_HEIGHT); OnCommand=cmd(diffuse,color("#FFCB05");diffusebottomedge,color("#F0BA00")); }; LoadActor("_bg top") .. { - InitCommand=cmd(scaletoclipped,SCREEN_WIDTH,SCREEN_HEIGHT); + InitCommand=cmd(scaletoclipped,SCREEN_WIDTH+1,SCREEN_HEIGHT); }; }; diff --git a/Themes/default/Graphics/CombinedLifeMeterTug frame.redir b/Themes/default/Graphics/CombinedLifeMeterTug frame.redir new file mode 100644 index 0000000000..04b2ead777 --- /dev/null +++ b/Themes/default/Graphics/CombinedLifeMeterTug frame.redir @@ -0,0 +1 @@ +_blank \ No newline at end of file diff --git a/Themes/default/Graphics/CombinedLifeMeterTug separator.redir b/Themes/default/Graphics/CombinedLifeMeterTug separator.redir new file mode 100644 index 0000000000..04b2ead777 --- /dev/null +++ b/Themes/default/Graphics/CombinedLifeMeterTug separator.redir @@ -0,0 +1 @@ +_blank \ No newline at end of file diff --git a/Themes/default/Graphics/CombinedLifeMeterTug stream p1.redir b/Themes/default/Graphics/CombinedLifeMeterTug stream p1.redir new file mode 100644 index 0000000000..04b2ead777 --- /dev/null +++ b/Themes/default/Graphics/CombinedLifeMeterTug stream p1.redir @@ -0,0 +1 @@ +_blank \ No newline at end of file diff --git a/Themes/default/Graphics/CombinedLifeMeterTug stream p2.redir b/Themes/default/Graphics/CombinedLifeMeterTug stream p2.redir new file mode 100644 index 0000000000..04b2ead777 --- /dev/null +++ b/Themes/default/Graphics/CombinedLifeMeterTug stream p2.redir @@ -0,0 +1 @@ +_blank \ No newline at end of file diff --git a/Themes/default/Graphics/CombinedLifeMeterTug tip p1.redir b/Themes/default/Graphics/CombinedLifeMeterTug tip p1.redir new file mode 100644 index 0000000000..04b2ead777 --- /dev/null +++ b/Themes/default/Graphics/CombinedLifeMeterTug tip p1.redir @@ -0,0 +1 @@ +_blank \ No newline at end of file diff --git a/Themes/default/Graphics/CombinedLifeMeterTug tip p2.redir b/Themes/default/Graphics/CombinedLifeMeterTug tip p2.redir new file mode 100644 index 0000000000..04b2ead777 --- /dev/null +++ b/Themes/default/Graphics/CombinedLifeMeterTug tip p2.redir @@ -0,0 +1 @@ +_blank \ No newline at end of file diff --git a/Themes/default/Graphics/Player combo/default.lua b/Themes/default/Graphics/Player combo/default.lua index 0de48e19fc..43c1087e26 100644 --- a/Themes/default/Graphics/Player combo/default.lua +++ b/Themes/default/Graphics/Player combo/default.lua @@ -40,10 +40,10 @@ local t = Def.ActorFrame { return end; --]] TwentyFiveMilestoneCommand=function(self,parent) - (cmd(zoom,1.25;drop,0.325;zoom,1))(self); + (cmd(zoom,1.25;decelerate,1.325;zoom,1))(self); end; ToastyAchievedMessageCommand=function(self,parent) - (cmd(pulse;effectperiod,1))(self); + (cmd(thump,2;effectclock,'beat'))(self); end; ComboCommand=function(self, param) local iCombo = param.Misses or param.Combo; @@ -55,9 +55,9 @@ local t = Def.ActorFrame { local labeltext = ""; if param.Combo then - labeltext = "Combo"; + labeltext = "COMBO"; else - labeltext = "Misses"; + labeltext = "MISSES"; end c.Label:settext( labeltext ); c.Label:visible(false); diff --git a/Themes/default/Graphics/ScreenSelectMusic AlternateHelpDisplay.lua b/Themes/default/Graphics/ScreenSelectMusic AlternateHelpDisplay.lua new file mode 100644 index 0000000000..cd7889b469 --- /dev/null +++ b/Themes/default/Graphics/ScreenSelectMusic AlternateHelpDisplay.lua @@ -0,0 +1,33 @@ +return Def.HelpDisplay { + File = THEME:GetPathF("HelpDisplay", "text"); + InitCommand=function(self) + local s = THEME:GetString(Var "LoadingScreen","AlternateHelpText"); + self:SetTipsColonSeparated(s); + end; + SetHelpTextCommand=function(self, params) + self:SetTipsColonSeparated( params.Text ); + end; +}; +--[[ local sString = THEME:GetString(Var "LoadingScreen","AlternateHelpText"); +local tItems = split(sString,"&"); + +local t = Def.ActorScroller { + NumItemsToDraw=#tItems; + SecondsPerItem=1.25; + TransformFunction=function( self, offset, itemIndex, numItems ) + self:x( offset*74 ); + end; + InitCommand=cmd(SetLoop,true); +-- OnCommand=cmd(scrollwithpadding,10,0); +}; + +for i=1,#tItems do + t[#t+1] = Def.ActorFrame { + LoadFont("HelpDisplay", "text") .. { + Text=tostring(tItems[i]); + OnCommand=THEME:GetMetric( Var "LoadingScreen","HelpOnCommand"); + }; + }; +end + +return t; --]] diff --git a/Themes/default/Graphics/ScreenSelectMusic BPMLabel.lua b/Themes/default/Graphics/ScreenSelectMusic BPMLabel.lua index d4ef62c242..567c3c001f 100644 --- a/Themes/default/Graphics/ScreenSelectMusic BPMLabel.lua +++ b/Themes/default/Graphics/ScreenSelectMusic BPMLabel.lua @@ -1,16 +1,19 @@ -return LoadFont("Common Normal") .. { - Text="BPM"; - SetCommand=function(self) - local bIsFirst = false; - local song = GAMESTATE:GetCurrentSong(); - self:stoptweening(); - self:linear(0.25); - if song then - self:diffusebottomedge( song:GetTimingData():HasStops() and color("#55CCEE") or color("#FFFFFF") ); - else - self:diffusebottomedge( color("#FFFFFF") ); +return Def.ActorFrame { + LoadFont("Common Normal") .. { + Text="BPM"; + InitCommand=cmd(horizalign,right;zoom,0.75;strokecolor,Color("Outline")); + SetCommand=function(self) + local bIsFirst = false; + local song = GAMESTATE:GetCurrentSong(); + self:stoptweening(); +-- self:linear(0.25); + if song then + self:diffusebottomedge( song:GetTimingData():HasStops() and color("#55CCEE") or color("#FFFFFF") ); + else + self:diffusebottomedge( color("#FFFFFF") ); + end; end; - end; - CurrentSongChangedMessageCommand=cmd(playcommand,"Set"); - CurrentCourseChangedMessageCommand=cmd(playcommand,"Set"); + CurrentSongChangedMessageCommand=cmd(playcommand,"Set"); + CurrentCourseChangedMessageCommand=cmd(playcommand,"Set"); + }; }; \ No newline at end of file diff --git a/Themes/default/Graphics/ScreenSelectMusic SongTime.lua b/Themes/default/Graphics/ScreenSelectMusic SongTime.lua new file mode 100644 index 0000000000..93e17dacca --- /dev/null +++ b/Themes/default/Graphics/ScreenSelectMusic SongTime.lua @@ -0,0 +1,2 @@ +return LoadFont("Common Normal") .. { +}; \ No newline at end of file diff --git a/Themes/default/Graphics/ScreenTitleMenu logo/_multi.png b/Themes/default/Graphics/ScreenTitleMenu logo/_multi.png new file mode 100644 index 0000000000000000000000000000000000000000..9603860c238305fa20ec1dabbae59e01f0f3eac3 GIT binary patch literal 17426 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 VOPFq>yZZnD002ovPDHLkV1f&j^Me2Y literal 0 HcmV?d00001 diff --git a/Themes/default/Graphics/ScreenTitleMenu logo/default.lua b/Themes/default/Graphics/ScreenTitleMenu logo/default.lua index 7eb3dc3b42..e099e1dc9f 100644 --- a/Themes/default/Graphics/ScreenTitleMenu logo/default.lua +++ b/Themes/default/Graphics/ScreenTitleMenu logo/default.lua @@ -4,7 +4,17 @@ local t = Def.ActorFrame{ -- [BGAnimation] LoadActor("_ball"); -- [Layer1] Type=0 File=_ball.png LoadActor("_text")..{ -- [Layer2] Type=0 File=_text.png - InitCommand=cmd(y,48); -- Command=y,48 + InitCommand=cmd(y,48;hide_if,GAMESTATE:GetMultiplayer()); -- Command=y,48 + }; + LoadActor("_multi")..{ -- [Layer3] Type=0 File=_multi.png + InitCommand=cmd(y,60;hide_if,not GAMESTATE:GetMultiplayer()); -- Command=y,48 + -- the hide_if command would be similar to Condition=, which also exists. + -- Condition=GAMESTATE:GetMultiplayer(); is the equivalent code. + }; + LoadFont("Common normal")..{ + Text="sm-ssc Multiplayer"; + InitCommand=cmd(y,5;shadowlength,0;strokecolor,color("0,0,0,0.375");diffusebottomedge,color("#D6DBDD");); + BeginCommand=cmd(hide_if,not GAMESTATE:GetMultiplayer()); }; }; diff --git a/Themes/default/Graphics/ScreenWithMenuElements header/default.lua b/Themes/default/Graphics/ScreenWithMenuElements header/default.lua index 3e971e2958..7182bd65a8 100644 --- a/Themes/default/Graphics/ScreenWithMenuElements header/default.lua +++ b/Themes/default/Graphics/ScreenWithMenuElements header/default.lua @@ -1,7 +1,7 @@ local t = Def.ActorFrame {}; t[#t+1] = LoadActor("Header") .. { - InitCommand=cmd(vertalign,top;zoomtowidth,SCREEN_WIDTH;diffuse,color("#ffd400")); + InitCommand=cmd(vertalign,top;zoomtowidth,SCREEN_WIDTH+1;diffuse,color("#ffd400")); }; --[[ t[#t+1] = LoadActor("_texture stripe") .. { InitCommand=cmd(vertalign,top;zoomto,SCREEN_WIDTH+64,44;customtexturerect,0,0,SCREEN_WIDTH+64/8,44/32); diff --git a/Themes/default/Languages/en.ini b/Themes/default/Languages/en.ini index 19a0251a5a..2cb8fc6e2f 100644 --- a/Themes/default/Languages/en.ini +++ b/Themes/default/Languages/en.ini @@ -23,7 +23,8 @@ HelpText=&BACK; Exit &START; Select &MENULEFT;&MENURIGHT; Move [ScreenGameInformation] HelpText=&BACK; Exit &START; Skip [ScreenSelectMusic] -HelpText=&BACK; Exit &START; Select / Join &SELECT; Magic Codes &MENULEFT;&MENURIGHT; Move::&SELECT;+&MENULEFT; or &MENURIGHT; Change Difficulty::&AUXWHITE;+[KEY] Sort To [KEY] +HelpText=&BACK; Exit &START; Select / Join &SELECT; Magic Codes &MENULEFT;&MENURIGHT; Move::&AUXWHITE;+[KEY] Sort To [KEY] +AlternateHelpText=&SELECT;+&MENULEFT;&MENURIGHT; Change Difficulties &SELECT;+&START; Quick Sort [StepsListDisplayRow StepsType] Dance_Single=Single Dance_Double=Double diff --git a/Themes/default/ScreenNetSelectMusic ChatInputBox.redir b/Themes/default/ScreenNetSelectMusic ChatInputBox.redir deleted file mode 100644 index 256307f65b..0000000000 --- a/Themes/default/ScreenNetSelectMusic ChatInputBox.redir +++ /dev/null @@ -1 +0,0 @@ -ScreenNetRoom ChatInputBox \ No newline at end of file diff --git a/Themes/default/ScreenNetSelectMusic ChatOutputBox.redir b/Themes/default/ScreenNetSelectMusic ChatOutputBox.redir deleted file mode 100644 index 506211f007..0000000000 --- a/Themes/default/ScreenNetSelectMusic ChatOutputBox.redir +++ /dev/null @@ -1 +0,0 @@ -ScreenNetRoom ChatOutputBox \ No newline at end of file diff --git a/Themes/default/metrics.ini b/Themes/default/metrics.ini index 50dccb9516..77b51b0cd9 100644 --- a/Themes/default/metrics.ini +++ b/Themes/default/metrics.ini @@ -31,8 +31,7 @@ ShowQMarksInRandomCycle=true [HelpDisplay] TipShowTime=7 [Combo] -ShowComboAt=HitCombo() -ShowMissesAt=MissCombo() +ShowComboAt=2 NumberMinZoom=0.8 NumberMaxZoom=1 @@ -42,10 +41,16 @@ PulseCommand=%function(self,param) self:stoptweening(); self:zoom(1.125*param.Zo NumberOnCommand=y,240-216-2;shadowlength,1;horizalign,right;vertalign,bottom; 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"); +BannerFadeOffCommand=diffusealpha,1;stoptweening;linear,0.25;diffusealpha,0 +BannerResetFadeCommand=diffusealpha,1 + [HoldJudgment] # !!! # -HoldJudgmentLetGoCommand=HoldJudgmentFail() -HoldJudgmentHeldCommand=HoldJudgmentPass() +HoldJudgmentLetGoCommand=finishtweening;shadowlength,0;diffusealpha,1;zoom,1;y,-10;linear,0.8;y,10;sleep,0.5;linear,0.1;zoomy,0.5;zoomx,2;diffusealpha,0 +HoldJudgmentHeldCommand=finishtweening;shadowlength,0;diffusealpha,1;zoom,1.25;linear,0.3;zoomx,1;zoomy,1;sleep,0.5;linear,0.1;zoomy,0.5;zoomx,2;diffusealpha,0 [Judgment] # New # @@ -118,8 +123,8 @@ MusicWheelItemSortOnCommand=zoomy,0;bounceend,0.15;zoomy,1 MusicWheelItemSortOffCommand=linear,0.175;zoomy,0 HighlightOnCommand=diffuseshift;effecttiming,(1/8),0,(7/8),0;effectcolor2,Color("White");effectcolor1,color("1,1,1,0.5");effectclock,'beatnooffset' HighlightOffCommand= -HighlightSortOnCommand=linear,0.3;diffusealpha,1 -HighlightSortOffCommand=linear,0.15;diffusealpha,0 +HighlightSortOnCommand=stoptweening;decelerate,0.125;glow,Color("Stealth");zoom,1 +HighlightSortOffCommand=stoptweening;accelerate,0.125;glow,Color("Orange");zoom,1.05 WheelItemOnDelayOffset=0.04 WheelItemOffDelayOffset=0.04 WheelItemLockedColor=color("0,0,0,0.5") @@ -130,7 +135,6 @@ SectionColor1=Color("Orange") SongRealExtraColor=Color("Red") SortMenuColor=Color("Blue") # -SortOrders={ "SortOrder_Preferred", "SortOrder_Group", "SortOrder_Title", "SortOrder_BPM", "SortOrder_Popularity", "SortOrder_Artist", "SortOrder_Genre" } ShowRoulette=true ShowRandom=false ShowPortal=false @@ -179,7 +183,7 @@ SectionCountOnCommand=zoom,0.75;strokecolor,Color("Outline") # RouletteX=0 RouletteY=0 -RouletteOnCommand=maxwidth,400;shadowlength,1;zoom,0.75;rainbowscroll,true;wag;effectmagnitude,10,10,10; +RouletteOnCommand=maxwidth,400;shadowlength,1;zoom,0.75;rainbowscroll,true;thump,2; # SortX=-132 SortY=-2 @@ -277,6 +281,7 @@ SongGroupColor7=BoostColor(Color("Orange"),1.25) SongGroupColor8=BoostColor(Color("Orange"),1.25) SongGroupColor9=BoostColor(Color("Orange"),1.25) SongGroupColor10=BoostColor(Color("Orange"),1.25) + CourseGroupColor1=color("1,1,1,1") UnlockColor=color("1,0.5,0,1") ExtraColor=color("#ff0000") -- red @@ -305,10 +310,10 @@ TipOnCommand= TipOffCommand= [SongMeterDisplayP1] Fallback="SongMeterDisplay" -FrameOnCommand=sleep,2;linear,0.25;diffuse,PlayerColor(PLAYER_1);glow,1,1,1,1;decelerate,0.6;glow,1,1,1,0 +FrameOnCommand=sleep,2;linear,0.25;diffuse,PlayerColor(PLAYER_1);glow,1,1,1,0.5;decelerate,0.6;glow,1,1,1,0 [SongMeterDisplayP2] Fallback="SongMeterDisplay" -FrameOnCommand=sleep,2;linear,0.25;diffuse,PlayerColor(PLAYER_2);glow,1,1,1,1;decelerate,0.6;glow,1,1,1,0 +FrameOnCommand=sleep,2;linear,0.25;diffuse,PlayerColor(PLAYER_2);glow,1,1,1,0.5;decelerate,0.6;glow,1,1,1,0 [StepsDisplay] FrameX=0 FrameY=0 @@ -377,10 +382,12 @@ Fallback="StepsDisplay" [StepsDisplayGameplay] Fallback="StepsDisplay" -MeterOnCommand=shadowlength,0; -FrameOnCommand= -ShowAutogen=false -ShowStepsType=false +MeterSetCommand=%function(self,param) \ + if param.CustomDifficulty then \ + self:diffuse(CustomDifficultyToColor(param.CustomDifficulty)); \ + self:shadowcolor(CustomDifficultyToDarkColor(param.CustomDifficulty)); \ + end; \ +end; [StepsDisplayEvaluation] Fallback="StepsDisplay" @@ -488,7 +495,7 @@ HeaderOffCommand= ShowFooter=true FooterX=SCREEN_CENTER_X FooterY=SCREEN_BOTTOM -FooterOnCommand=draworder,5;vertalign,bottom;zoomtowidth,math.ceil(SCREEN_WIDTH);diffuse,color("#ffd400"); +FooterOnCommand=draworder,5;vertalign,bottom;zoomtowidth,SCREEN_WIDTH+1;diffuse,color("#ffd400"); FooterOffCommand= ShowHelp=true @@ -497,6 +504,12 @@ HelpY=SCREEN_BOTTOM-16 HelpOnCommand=SetSecsBetweenSwitches,4;shadowlength,0;strokecolor,Color("Outline");draworder,105;zoomy,0;linear,0.175;zoom,1*0.75;diffuseshift;effectcolor1,color("0.5,0.5,0.5,1"); HelpOffCommand=linear,0.175;zoomy,0 +AlternateHelpDisplayX=SCREEN_CENTER_X +AlternateHelpDisplayY=SCREEN_BOTTOM-16 +# AlternateHelpDisplayOnCommand=draworder,105; +AlternateHelpDisplayOnCommand=SetSecsBetweenSwitches,4;shadowlength,0;strokecolor,Color("Outline");draworder,105;zoomy,0;linear,0.175;zoom,1*0.75;diffuseshift;effectcolor1,color("0.5,0.5,0.5,1");;diffusealpha,0 +AlternateHelpDisplayOffCommand=linear,0.175;zoomy,0 + TimerX=SCREEN_RIGHT-36-4 TimerY=SCREEN_TOP+22 TimerOnCommand=draworder,6;visible,PREFSMAN:GetPreference("MenuTimer"); @@ -679,21 +692,13 @@ NetworkStatusY=SCREEN_HEIGHT*0.85 NetworkStatusOnCommand=horizalign,left; NetworkStatusOffCommand=linear,0.5;cropright,1 # -ChoiceNames="1,Setup,4,5,7" -#ChoiceNames="1,4,5,7" +#ChoiceNames="1,Setup,4,5,7" +ChoiceNames="1,4,5,7" #~ ChoiceNames="1,3,4,7" DefaultChoice="1" -DisabledChoices="Setup" -Choice1="applydefaultoptions;screen,ScreenProfileLoad;text,Game Start" -Choice2="screen,ScreenNetworkOptions;text,Play Online" -Choice3="screen,ScreenSelectGame;text,Select Game" -Choice4="screen,ScreenOptionsService;text,Options" -Choice5="screen,ScreenOptionsEdit;text,Edit/Share" -Choice6="screen,ScreenJukeboxMenu;text,Jukebox" +#DisabledChoices="Setup" #ChoiceSetup="text,Setup" ChoiceSetup="screen,ScreenQuickSetupOverview;text,Setup" -Choice7="screen,ScreenExit;text,Exit" -Choice8="screen,ScreenTest;text,Sandbox" [ScreenQuickSetupOverview] IconStartX=SCREEN_CENTER_X-160 IconStartY=SCREEN_BOTTOM-60 @@ -864,6 +869,14 @@ SampleMusicDelayInit=0 AlignMusicBeat=false SelectMenuChangesDifficulty=true WrapChangeSteps=false +# HelpDisplay has things added here to make sure it disappears for another +# actor, which we defined in this screens decorations. +HelpSelectMenuOpenedMessageCommand=stoptweening;decelerate,0.125;diffusealpha,0; +HelpSelectMenuClosedMessageCommand=stoptweening;accelerate,0.0725;diffusealpha,1; +# Clone everything from HelpDisplay: we're lazy +ShowAlternateHelpDisplay=true +AlternateHelpDisplaySelectMenuOpenedMessageCommand=stoptweening;accelerate,0.0725;diffusealpha,1; +AlternateHelpDisplaySelectMenuClosedMessageCommand=stoptweening;decelerate,0.125;diffusealpha,0; # MusicWheelX=SCREEN_CENTER_X+160 MusicWheelY=SCREEN_CENTER_Y @@ -878,6 +891,15 @@ NewSongOffCommand=accelerate,0.35;addy,-SCREEN_CENTER_Y; NewSongShowCommand=stoptweening;decelerate,0.125;diffusealpha,1;zoomy,0.75;thump,2;effectclock,'bgm';effectmagnitude,1,1,1;effectcolor1,color("1,1,1");effectcolor2,color("1,1.25,1"); NewSongHideCommand=stoptweening;accelerate,0.075;diffusealpha,0;zoomy,0.75*1.5;stopeffect; # +ShowSongTime=true +SongTimeX=SCREEN_CENTER_X-160 +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"); +SongTimeLongCommand=diffusebottomedge,Color("Blue"); +SongTimeMarathonCommand=diffuse,Color("Yellow");diffusebottomedge,Color("Orange"); +# ShowSortOrder=true SortOrderX=SCREEN_CENTER_X+128+32 SortOrderY=SCREEN_TOP+24+4 @@ -920,7 +942,7 @@ BPMDisplayOffCommand=bouncebegin,0.15;zoomx,0; ShowBPMLabel=true BPMLabelX=SCREEN_CENTER_X-160-90 BPMLabelY=SCREEN_TOP+160+(36/2)+6 -BPMLabelOnCommand=horizalign,right;zoom,0.75;strokecolor,Color("Outline");addx,-SCREEN_CENTER_X;decelerate,0.35;addx,SCREEN_CENTER_X +BPMLabelOnCommand=addx,-SCREEN_CENTER_X;decelerate,0.35;addx,SCREEN_CENTER_X BPMLabelOffCommand=bouncebegin,0.15;zoomx,0; # ShowDifficultyList=not GAMESTATE:IsCourseMode(); @@ -929,8 +951,8 @@ DifficultyListY=SCREEN_TOP+216+6 DifficultyListOnCommand=addx,-SCREEN_CENTER_X;decelerate,0.35;addx,SCREEN_CENTER_X; DifficultyListOffCommand=bouncebegin,0.15;zoomx,0; # -DifficultyListShowCommand=bounceend,0.135;zoomx,1 -DifficultyListHideCommand=bouncebegin,0.135;zoomx,0 +DifficultyListShowCommand=stoptweening;bounceend,0.135;zoomx,1 +DifficultyListHideCommand=stoptweening;bouncebegin,0.135;zoomx,0 # ShowCourseContentsList=false CourseContentsListX=SCREEN_CENTER_X-160