diff --git a/NoteSkins/dance/midi-rainbow/_Down Tap Note 4x4.png b/NoteSkins/dance/midi-rainbow/_Down Tap Note 4x4.png new file mode 100644 index 0000000000..0fda9a71cb Binary files /dev/null and b/NoteSkins/dance/midi-rainbow/_Down Tap Note 4x4.png differ diff --git a/NoteSkins/dance/midi-rainbow/metrics.ini b/NoteSkins/dance/midi-rainbow/metrics.ini new file mode 100644 index 0000000000..01dac86bff --- /dev/null +++ b/NoteSkins/dance/midi-rainbow/metrics.ini @@ -0,0 +1,5 @@ +[Global] +FallbackNoteSkin=midi-solo + +[NoteDisplay] +TapNoteNoteColorType=ProgressAlternate diff --git a/NoteSkins/dance/midi-solo/Down Tap Note.lua b/NoteSkins/dance/midi-solo/Down Tap Note.lua index 9de3db7f01..ac29dcdff5 100644 --- a/NoteSkins/dance/midi-solo/Down Tap Note.lua +++ b/NoteSkins/dance/midi-solo/Down Tap Note.lua @@ -1,6 +1,6 @@ return Def.Sprite { Texture=NOTESKIN:GetPath( '_down', 'tap note' ); - Frames = Sprite.LinearFrames( 8, 1 ); + Frames = Sprite.LinearFrames( 4, 1 ); InitCommand=cmd(setstate,2); DrawTapNoteMessageCommand=function(self,parent) parent:spin(); diff --git a/NoteSkins/dance/midi-solo/_Down Tap Note 4x4.png b/NoteSkins/dance/midi-solo/_Down Tap Note 4x4.png new file mode 100644 index 0000000000..dec20bc4aa Binary files /dev/null and b/NoteSkins/dance/midi-solo/_Down Tap Note 4x4.png differ diff --git a/NoteSkins/dance/midi-solo/_Down Tap Note 8x8.png b/NoteSkins/dance/midi-solo/_Down Tap Note 8x8.png deleted file mode 100644 index 353a9ebdd8..0000000000 Binary files a/NoteSkins/dance/midi-solo/_Down Tap Note 8x8.png and /dev/null differ diff --git a/NoteSkins/dance/midi-solo/metrics.ini b/NoteSkins/dance/midi-solo/metrics.ini index 3dc54f0108..6be5826541 100644 --- a/NoteSkins/dance/midi-solo/metrics.ini +++ b/NoteSkins/dance/midi-solo/metrics.ini @@ -3,6 +3,7 @@ FallbackNoteSkin=midi-note [NoteDisplay] TapNoteAnimationIsVivid=0 +TapNoteNoteColorCount=4 DrawHoldHeadForTapsOnSameRow=0 TapNoteAnimationLength=4 TapAdditionAnimationLength=4 @@ -29,10 +30,10 @@ FlipHoldBodyWhenReverse=1 TopHoldAnchorWhenReverse=1 TapNoteNoteColorTextureCoordSpacingX=0 -TapNoteNoteColorTextureCoordSpacingY=0.125 +TapNoteNoteColorTextureCoordSpacingY=0.25 TapFakeNoteColorTextureCoordSpacingX=0 -TapFakeNoteColorTextureCoordSpacingY=0.125 +TapFakeNoteColorTextureCoordSpacingY=0.25 HoldHeadNoteColorTextureCoordSpacingX=0 HoldHeadNoteColorTextureCoordSpacingY=0 @@ -78,4 +79,4 @@ PressCommand=stoptweening;zoom,1.15;linear,0.12;zoom,1 [ReceptorOverlay] InitCommand=diffusealpha,0;blend,"BlendMode_Add" PressCommand=finishtweening;zoom,1.1;decelerate,0.12;zoom,1;diffusealpha,0.6; -LiftCommand=finishtweening;accelerate,0.12;diffusealpha,0;zoom,1.2 \ No newline at end of file +LiftCommand=finishtweening;accelerate,0.12;diffusealpha,0;zoom,1.2 diff --git a/src/NoteDisplay.cpp b/src/NoteDisplay.cpp index 65c5b52285..b82b9bba1f 100644 --- a/src/NoteDisplay.cpp +++ b/src/NoteDisplay.cpp @@ -41,6 +41,7 @@ LuaXType( NotePart ); static const char *NoteColorTypeNames[] = { "Denominator", "Progress", + "ProgressAlternate" }; XToString( NoteColorType ); StringToX( NoteColorType ); @@ -1325,6 +1326,8 @@ void NoteDisplay::DrawActor(const TapNote& tn, Actor* pActor, NotePart part, { DISPLAY->TexturePushMatrix(); float color = 0.0f; + //this is only used for ProgressAlternate but must be declared here + float fScaledBeat = 0.0f; switch( cache->m_NoteColorType[part] ) { case NoteColorType_Denominator: @@ -1334,6 +1337,14 @@ void NoteDisplay::DrawActor(const TapNote& tn, Actor* pActor, NotePart part, case NoteColorType_Progress: color = fmodf( ceilf( fBeat * cache->m_iNoteColorCount[part] ), (float)cache->m_iNoteColorCount[part] ); break; + case NoteColorType_ProgressAlternate: + fScaledBeat = fBeat * cache->m_iNoteColorCount[part]; + if( fScaledBeat - int64_t(fScaledBeat) == 0.0f ) + //we're on a boundary, so move to the previous frame. + //doing it this way ensures that fScaledBeat is never negative so fmodf works. + fScaledBeat += cache->m_iNoteColorCount[part] - 1; + color = fmodf( ceilf( fScaledBeat ), (float)cache->m_iNoteColorCount[part] ); + break; default: FAIL_M(ssprintf("Invalid NoteColorType: %i", cache->m_NoteColorType[part])); } diff --git a/src/NoteDisplay.h b/src/NoteDisplay.h index f8b1f9734f..83833a3a4d 100644 --- a/src/NoteDisplay.h +++ b/src/NoteDisplay.h @@ -36,6 +36,7 @@ enum NoteColorType { NoteColorType_Denominator, /**< Color by note type. */ NoteColorType_Progress, /**< Color by progress. */ + NoteColorType_ProgressAlternate, /**< Color by progress, except the frame boundaries are slightly later. */ NUM_NoteColorType, NoteColorType_Invalid };